<?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>71355</bug_id>
          
          <creation_ts>2011-11-02 04:33:13 -0700</creation_ts>
          <short_desc>[Qt] Merge QTouchWebView and QDesktopWebView into one class</short_desc>
          <delta_ts>2011-11-10 06:09:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Christian Sejersen">christian.sejersen</reporter>
          <assigned_to name="Alexis Menard (darktears)">menard</assigned_to>
          <cc>ahf</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kling</cc>
    
    <cc>menard</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
    
    <cc>zalan</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494549</commentid>
    <comment_count>0</comment_count>
    <who name="Christian Sejersen">christian.sejersen</who>
    <bug_when>2011-11-02 04:33:13 -0700</bug_when>
    <thetext>There seems to be so many similarities between QTouchWebView and QDesktopWebView that they should be merged into one class. It also seems weird you have to determine (and know) up front whether your application runs on a platform that supports touch or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494635</commentid>
    <comment_count>1</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-11-02 08:23:58 -0700</bug_when>
    <thetext>We had a chat here are that&apos;s what came out.

1. From the point of view of the developer using the WebView it makes more sense to have only one API/documentation with platform specific behaviors defined and documented than having two classes, two documentations and only slight differences between them. Whether you have a desktop behavior or a mobile/touch behavior should be defined by the platform running the application or a compile-time flag.

2. From our point of view, we don&apos;t want to have to recompile to be able to switch views, we need a global runtime flag to enable desktop or mobile behavior to run tests or do development. It doesn&apos;t make sense to have both a desktop view and a mobile view running in an application at the same time anyway.

3. If we have two different QML API behaviors, this needs to be handled by the same C++ class, not two different C++ classes with somewhat the same methods that are fed to qmlRegisterType depending on the &quot;behavior flag&quot;. This will help prevent a developer from running his mobile-aimed application on desktop and get a e.g. [Cannot assign to non-existent property &quot;page&quot;].

So the best way would be to have only one top-level WebView C++ class, that would check this either compile or runtime behavior flag, and would instanciate the proper modules and send the proper settings to the WebProcess (e.g. fixed layout and frame flatening).
Alexis had some plan to implement it I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494642</commentid>
    <comment_count>2</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-02 08:46:07 -0700</bug_when>
    <thetext>Plan :

- Merge QtDesktopWebPageProxy and QtTouchWebPageProxy into QtWebPageProxy
- Have only one view with a way to switch the &quot;mode&quot; and one page.
- AC on for both case (we&apos;ll see later how to optimize the desktop case).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497526</commentid>
    <comment_count>3</comment_count>
      <attachid>113941</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-07 15:30:13 -0800</bug_when>
    <thetext>Created attachment 113941
Patch (landed in r99540)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497527</commentid>
    <comment_count>4</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-07 15:30:36 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=113941) [details]
&gt; Patch

First step. Merge the WebPageProxies into one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497532</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-07 15:32:40 -0800</bug_when>
    <thetext>Attachment 113941 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/UIProcess/qt/QtWebPageProxy.h:205:  The parameter name &quot;painter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497536</commentid>
    <comment_count>6</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-07 15:33:33 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Attachment 113941 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
&gt; 
&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.h:205:  The parameter name &quot;painter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Total errors found: 1 in 7 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Was there before and this function is going to die in the next patch :D. Please ignore for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497844</commentid>
    <comment_count>7</comment_count>
      <attachid>113941</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-08 01:31:50 -0800</bug_when>
    <thetext>Comment on attachment 113941
Patch (landed in r99540)

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

r=me, but qdesktopwebview.cpp doesn&apos;t actually compile because it includes QtDesktopWebPageProxy.h, which your patch removes. Replacing the include makes it compile.

I&apos;ll fix this when landing it.

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:824
&gt; +void QtWebPageProxy::doneWithTouchEvent(const NativeWebTouchEvent&amp; event, bool wasEventHandled)
&gt; +{

This function crashes when running the touch layout tests. I&apos;ll add the missing m_interactionEngine null pointer check when landing it.

Please run the layout tests next time (with WebKitTestRunner) :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497846</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-08 01:34:35 -0800</bug_when>
    <thetext>Committed r99540: &lt;http://trac.webkit.org/changeset/99540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497849</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-08 01:35:55 -0800</bug_when>
    <thetext>Committed r99540: &lt;http://trac.webkit.org/changeset/99540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497851</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-08 01:36:19 -0800</bug_when>
    <thetext>Oopos, sorry, re-opening. I guess this will be multi-patch bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497853</commentid>
    <comment_count>11</comment_count>
      <attachid>113941</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-08 01:37:12 -0800</bug_when>
    <thetext>Comment on attachment 113941
Patch (landed in r99540)

Clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498524</commentid>
    <comment_count>12</comment_count>
      <attachid>114177</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-08 16:51:15 -0800</bug_when>
    <thetext>Created attachment 114177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498528</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-08 16:54:48 -0800</bug_when>
    <thetext>Attachment 114177 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;, u&apos;Source/WebK...&quot; exit_code: 1

Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:78:  q_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.h:127:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498544</commentid>
    <comment_count>14</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-08 17:15:41 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=114177) [details]
&gt; Patch

First round. I haven&apos;t ported the API tests yet. I just want early feedback.

Feel free to review/comment before I finish cleaning the auto-tests/qml tests.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498547</commentid>
    <comment_count>15</comment_count>
      <attachid>114177</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-08 17:21:32 -0800</bug_when>
    <thetext>Comment on attachment 114177
Patch

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

&gt; Tools/MiniBrowser/qt/qml/BrowserWindow.qml:-219
&gt; -        onLoadProgressChanged: loadProgress = viewLoader.item.loadProgress

Fixed locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498740</commentid>
    <comment_count>16</comment_count>
      <attachid>114177</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-11-09 02:01:14 -0800</bug_when>
    <thetext>Comment on attachment 114177
Patch

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

Just a quick look through

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.h:52
&gt; +    virtual void focusOutEvent(QFocusEvent*);
&gt; +    virtual void mousePressEvent(QMouseEvent *);
&gt; +    virtual void mouseMoveEvent(QMouseEvent *);
&gt; +    virtual void mouseReleaseEvent(QMouseEvent *);

coding style inconsistencies

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:44
&gt; +    , currentViewMode(QQuickWebView::Desktop)

I think our default should be touch, for too many reasons to mention here :-)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:79
&gt; +void QQuickWebViewPrivate::init(QQuickWebView* viewport, WKContextRef contextRef, WKPageGroupRef pageGroupRef)
&gt; +{
&gt; +    q_ptr = viewport;
&gt; +    viewport-&gt;setFlags(QQuickItem::ItemClipsChildrenToShape);
&gt; +    QObject::connect(viewport, SIGNAL(visibleChanged()), viewport, SLOT(onVisibleChanged()));
&gt; +    pageView.reset(new QQuickWebPage(viewport));
&gt; +    viewInterface.reset(new WebKit::QtViewInterface(viewport, pageView.data()));
&gt; +    QQuickWebPagePrivate* const pageViewPrivate = pageView.data()-&gt;d;
&gt; +    setPageProxy(new QtWebPageProxy(viewInterface.data(), 0, this, contextRef, pageGroupRef));
&gt; +    pageViewPrivate-&gt;setPageProxy(pageProxy.data());
&gt; +    QWebPreferencesPrivate::get(pageProxy-&gt;preferences())-&gt;setAttribute(QWebPreferencesPrivate::AcceleratedCompositingEnabled, true);
&gt; +    pageProxy-&gt;init();
&gt; +    initDesktop(viewport);
&gt; +}

a few newlines would make this a lot more readable

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:81
&gt; +void QQuickWebViewPrivate::initDesktop(QQuickWebView* viewport)

We normally use the word initialize in webkit

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:111
&gt; +    if (currentViewMode == QQuickWebView::Desktop)
&gt; +        return;

We usually add a newline after a return

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:187
&gt; +    if (currentViewMode == QQuickWebView::Desktop)
&gt; +        return;

newline

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:200
&gt; +    disableMouseEvents();
&gt; +    QMessageBox::information(0, title, escapeHtml(alertText), QMessageBox::Ok);
&gt; +    enableMouseEvents();

I dont think we want do ever do this on touch

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:242
&gt; +    // Qt does not support multiple files suggestion, so we get just the first suggestion.

same with this

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:345
&gt; +    d-&gt;init(this, contextRef, pageGroupRef);

Here we use d, elsewhere d_ptr... We need to decide

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:392
&gt; +        const_cast&lt;QQuickWebViewPrivate*&gt;(d)-&gt;navigationController = new QWebNavigationController(d-&gt;pageProxy.data());

Is QWebNavigationController a public API? I was wondering since it is Q* and not Qt*

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:402
&gt; +void QQuickWebView::setViewMode(QQuickWebView::ViewMode mode)

We are not going to support more than 2 (I hope) so maybe this should be a boolean setter instead?

setUseTraditionalDesktopBehaviour(...)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:406
&gt; +        return;

newline

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:411
&gt; +    if (d-&gt;currentViewMode == QQuickWebView::Desktop)
&gt; +        d-&gt;initDesktop(this);
&gt; +    else
&gt; +        d-&gt;initTouch(this);

No resetting needed before initializing?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:97
&gt; +     void onVisibleChanged();

is that one supposed to be public? Doesnt seems like usual public Qt API

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:101
&gt; +    void statusBarMessageChanged(const QString&amp; message);

I am wondering if we should leave our the &quot;Bar&quot; from that method name, it is so desktop like

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:110
&gt; +    void viewModeChanged();

viewMode is a very bad name, since there is something called exactly that in a W3C Spec! http://www.w3.org/TR/view-mode/

We might even support that at some point

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:120
&gt; +    WKPageRef pageRef() const;

Don&apos;t we want this in the private ? or a

WKPageRef toPageRef(QQuickWebView*); free method?

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:127
&gt;&gt; +    QScopedPointer&lt;QQuickWebViewPrivate&gt; d_ptr;
&gt; 
&gt; d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

why not just call it d?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:48
&gt; +    void init(QQuickWebView* viewport, WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
&gt; +    void initTouch(QQuickWebView* viewport);
&gt; +    void initDesktop(QQuickWebView* viewport);

initialize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498807</commentid>
    <comment_count>17</comment_count>
    <who name="Christian Sejersen">christian.sejersen</who>
    <bug_when>2011-11-09 04:07:45 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 114177 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114177&amp;action=review
&gt; 
&gt; &gt; Tools/MiniBrowser/qt/qml/BrowserWindow.qml:-219
&gt; &gt; -        onLoadProgressChanged: loadProgress = viewLoader.item.loadProgress
&gt; 
&gt; Fixed locally.

Why do we need to switch modes? Can&apos;t it be dependent on the events we receive (e.g. mousemove, touch)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498808</commentid>
    <comment_count>18</comment_count>
    <who name="Christian Sejersen">christian.sejersen</who>
    <bug_when>2011-11-09 04:08:34 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 114177 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114177&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/MiniBrowser/qt/qml/BrowserWindow.qml:-219
&gt; &gt; &gt; -        onLoadProgressChanged: loadProgress = viewLoader.item.loadProgress
&gt; &gt; 
&gt; &gt; Fixed locally.
&gt; 
&gt; Why do we need to switch modes? Can&apos;t it be dependent on the events we receive (e.g. mousemove, touch)?

I believe it is preferable to not have any modes at all (if that wasn&apos;t clear from the above)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498813</commentid>
    <comment_count>19</comment_count>
      <attachid>114177</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-11-09 04:15:36 -0800</bug_when>
    <thetext>Comment on attachment 114177
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:104
&gt; +    if (currentViewMode == QQuickWebView::Touch)

Maybe we could keep the touch/desktop separation for the private classes and have them inherit from a base private class to prevent this kind of statement from growing all over the place. Or some other kind of proper OO mechanism.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:402
&gt;&gt; +void QQuickWebView::setViewMode(QQuickWebView::ViewMode mode)
&gt; 
&gt; We are not going to support more than 2 (I hope) so maybe this should be a boolean setter instead?
&gt; 
&gt; setUseTraditionalDesktopBehaviour(...)

We talked about it last week and I don&apos;t think we should support runtime switching between the two modes. We also thought that it would be better to have a hidden static setting and not to support having two web views with different modes running in the same application. This is only necessary for development, in the end the mode should be determined by the platform.

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:127
&gt;&gt;&gt; +    QScopedPointer&lt;QQuickWebViewPrivate&gt; d_ptr;
&gt;&gt; 
&gt;&gt; d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; 
&gt; why not just call it d?

The d_ptr thing was needed to use q_func, d_func, Q_Q and Q_D and have the subclass&apos; private class inherit from the parent&apos;s private. Since we don&apos;t inherit and need it anymore, we could replace it with a plain d member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498831</commentid>
    <comment_count>20</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-09 04:55:07 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 114177 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114177&amp;action=review
&gt; 
&gt; Just a quick look through
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.h:52
&gt; &gt; +    virtual void focusOutEvent(QFocusEvent*);
&gt; &gt; +    virtual void mousePressEvent(QMouseEvent *);
&gt; &gt; +    virtual void mouseMoveEvent(QMouseEvent *);
&gt; &gt; +    virtual void mouseReleaseEvent(QMouseEvent *);
&gt; 
&gt; coding style inconsistencies

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:44
&gt; &gt; +    , currentViewMode(QQuickWebView::Desktop)
&gt; 
&gt; I think our default should be touch, for too many reasons to mention here :-)

Done.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:79
&gt; &gt; +void QQuickWebViewPrivate::init(QQuickWebView* viewport, WKContextRef contextRef, WKPageGroupRef pageGroupRef)
&gt; &gt; +{
&gt; &gt; +    q_ptr = viewport;
&gt; &gt; +    viewport-&gt;setFlags(QQuickItem::ItemClipsChildrenToShape);
&gt; &gt; +    QObject::connect(viewport, SIGNAL(visibleChanged()), viewport, SLOT(onVisibleChanged()));
&gt; &gt; +    pageView.reset(new QQuickWebPage(viewport));
&gt; &gt; +    viewInterface.reset(new WebKit::QtViewInterface(viewport, pageView.data()));
&gt; &gt; +    QQuickWebPagePrivate* const pageViewPrivate = pageView.data()-&gt;d;
&gt; &gt; +    setPageProxy(new QtWebPageProxy(viewInterface.data(), 0, this, contextRef, pageGroupRef));
&gt; &gt; +    pageViewPrivate-&gt;setPageProxy(pageProxy.data());
&gt; &gt; +    QWebPreferencesPrivate::get(pageProxy-&gt;preferences())-&gt;setAttribute(QWebPreferencesPrivate::AcceleratedCompositingEnabled, true);
&gt; &gt; +    pageProxy-&gt;init();
&gt; &gt; +    initDesktop(viewport);
&gt; &gt; +}
&gt; 
&gt; a few newlines would make this a lot more readable

Done

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:81
&gt; &gt; +void QQuickWebViewPrivate::initDesktop(QQuickWebView* viewport)
&gt; 
&gt; We normally use the word initialize in webkit

Fixed

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:111
&gt; &gt; +    if (currentViewMode == QQuickWebView::Desktop)
&gt; &gt; +        return;
&gt; 
&gt; We usually add a newline after a return

Done

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:187
&gt; &gt; +    if (currentViewMode == QQuickWebView::Desktop)
&gt; &gt; +        return;
&gt; 
&gt; newline
&gt; 

Fixed

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:200
&gt; &gt; +    disableMouseEvents();
&gt; &gt; +    QMessageBox::information(0, title, escapeHtml(alertText), QMessageBox::Ok);
&gt; &gt; +    enableMouseEvents();
&gt; 
&gt; I dont think we want do ever do this on touch

Let&apos;s keep it for now, and isolate into two different private objects.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:242
&gt; &gt; +    // Qt does not support multiple files suggestion, so we get just the first suggestion.
&gt; 
&gt; same with this
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:345
&gt; &gt; +    d-&gt;init(this, contextRef, pageGroupRef);
&gt; 
&gt; Here we use d, elsewhere d_ptr... We need to decide

Jocelyn answer, the convenience macro, that we use a lot in the view.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:392
&gt; &gt; +        const_cast&lt;QQuickWebViewPrivate*&gt;(d)-&gt;navigationController = new QWebNavigationController(d-&gt;pageProxy.data());
&gt; 
&gt; Is QWebNavigationController a public API? I was wondering since it is Q* and not Qt*

It is public.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:402
&gt; &gt; +void QQuickWebView::setViewMode(QQuickWebView::ViewMode mode)
&gt; 
&gt; We are not going to support more than 2 (I hope) so maybe this should be a boolean setter instead?

I guess so.

&gt; 
&gt; setUseTraditionalDesktopBehaviour(...)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:406
&gt; &gt; +        return;
&gt; 
&gt; newline
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:411
&gt; &gt; +    if (d-&gt;currentViewMode == QQuickWebView::Desktop)
&gt; &gt; +        d-&gt;initDesktop(this);
&gt; &gt; +    else
&gt; &gt; +        d-&gt;initTouch(this);
&gt; 
&gt; No resetting needed before initializing?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:97
&gt; &gt; +     void onVisibleChanged();
&gt; 
&gt; is that one supposed to be public? Doesnt seems like usual public Qt API
&gt; 

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:101
&gt; &gt; +    void statusBarMessageChanged(const QString&amp; message);
&gt; 
&gt; I am wondering if we should leave our the &quot;Bar&quot; from that method name, it is so desktop like

+1 but for later.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:110
&gt; &gt; +    void viewModeChanged();
&gt; 
&gt; viewMode is a very bad name, since there is something called exactly that in a W3C Spec! http://www.w3.org/TR/view-mode/
&gt; 
&gt; We might even support that at some point

I&apos;ll make it private.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:120
&gt; &gt; +    WKPageRef pageRef() const;
&gt; 
&gt; Don&apos;t we want this in the private ? or a
&gt; 
&gt; WKPageRef toPageRef(QQuickWebView*); free method?

WebKitTestRunner use it.

&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:127
&gt; &gt;&gt; +    QScopedPointer&lt;QQuickWebViewPrivate&gt; d_ptr;
&gt; &gt; 
&gt; &gt; d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; 
&gt; why not just call it d?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:48
&gt; &gt; +    void init(QQuickWebView* viewport, WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
&gt; &gt; +    void initTouch(QQuickWebView* viewport);
&gt; &gt; +    void initDesktop(QQuickWebView* viewport);
&gt; 
&gt; initialize

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498834</commentid>
    <comment_count>21</comment_count>
      <attachid>114177</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-11-09 04:58:03 -0800</bug_when>
    <thetext>Comment on attachment 114177
Patch

This is a step in the right direction! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499402</commentid>
    <comment_count>22</comment_count>
      <attachid>114376</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-09 15:22:50 -0800</bug_when>
    <thetext>Created attachment 114376
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499410</commentid>
    <comment_count>23</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-09 15:29:04 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=114376) [details]
&gt; Patch

The big beast.

QML tests are green and C++ API tests are green. The layout tests seems to run fine on my machine both in debug and release (it helped me to catch a deep bug in AC code).

This is of course a big step, perhaps we will find regressions and I will be happy to help to fix them.

The private part of QQuickWebView could be improved to isolate more desktop related stuff like Jocelyn suggested (the JS alert/confirm/input, upload, and so on). It could be done in a following patch. Maybe also the QML tests could be reorganized a little bit to avoid duplication of some tests now that the view is the same. I&apos;ll do it in a following patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499717</commentid>
    <comment_count>24</comment_count>
      <attachid>114376</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-11-10 01:02:34 -0800</bug_when>
    <thetext>Comment on attachment 114376
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:147
&gt; +    if (ev-&gt;type() == QEvent::InputMethod)
&gt; +        return false; // This is necessary to avoid an endless loop in connection with QQuickItem::event().

I guess this will need some changes when we will actually start working on IM support

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:156
&gt; +void QQuickWebPage::itemChange(ItemChange change, const ItemChangeData &amp;data)

coding style - &amp; placement

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:172
&gt; +void QQuickWebPagePrivate::initSceneGraphConnections()

initialize?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:191
&gt; +    this-&gt;pageProxy = pageProxy;
&gt; +
&gt; +}

unneeded newline

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:196
&gt; +    if (!item)
&gt; +        return 1.0;

I think webkit style tells you to just return 1

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:180
&gt; +    wkPrefs-&gt;setDeviceHeight(720);
&gt; +
&gt; +    WebCore::ViewportAttributes attr = WebCore::computeViewportAttributes(viewportArguments, wkPrefs-&gt;layoutFallbackWidth(), wkPrefs-&gt;deviceWidth(), wkPrefs-&gt;deviceHeight(), wkPrefs-&gt;deviceDPI(), availableSize);
&gt; +    WebCore::restrictMinimumScaleFactorToViewportSize(attr, availableSize);
&gt; +    WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable(attr);

You missed some new change here from yesterday

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:59
&gt; +    static QQuickWebViewPrivate *get(QQuickWebView *view)

coding style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499790</commentid>
    <comment_count>25</comment_count>
      <attachid>114472</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-10 04:13:31 -0800</bug_when>
    <thetext>Created attachment 114472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499793</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-10 04:21:41 -0800</bug_when>
    <thetext>Attachment 114472 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;,...&quot; exit_code: 1

Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:85:  q_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.h:117:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 51 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499805</commentid>
    <comment_count>27</comment_count>
      <attachid>114475</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-10 05:03:43 -0800</bug_when>
    <thetext>Created attachment 114475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499806</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-10 05:06:20 -0800</bug_when>
    <thetext>Attachment 114475 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;,...&quot; exit_code: 1

Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:85:  q_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.h:117:  d_ptr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 54 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499839</commentid>
    <comment_count>29</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-10 06:09:27 -0800</bug_when>
    <thetext>Committed r99845: &lt;http://trac.webkit.org/changeset/99845&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113941</attachid>
            <date>2011-11-07 15:30:13 -0800</date>
            <delta_ts>2011-11-08 16:51:07 -0800</delta_ts>
            <desc>Patch (landed in r99540)</desc>
            <filename>bug-71355-20111107203005.patch</filename>
            <type>text/plain</type>
            <size>47953</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NDkwKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTEtMTEtMDcgIEFsZXhpcyBN
ZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0XSBNZXJn
ZSBRdERlc2t0b3BXZWJQYWdlUHJveHkgYW5kIFF0VG91Y2hXZWJQYWdlUHJveHkgaW50byBRdFdl
YlBhZ2VQcm94eS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxMzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQXMgd2UgdHJ5IHRvIHVuaWZ5IG91ciBwdWJsaWMgQVBJIG9mZmVyIHdlIG5lZWQgdG8gbWVy
Z2Ugb3VyIGRvdWJsZQorICAgICAgICBXZWJQYWdlUHJveHkgaW1wbGVtZW50YXRpb25zIGZpcnN0
IGludG8gYSBjb21tb24gY2xhc3MuIFRoYXQgd2lsbCBoZWxwCisgICAgICAgIHRvIG1lcmdlIG91
ciBUb3VjaFdlYlZpZXcgYW5kIERlc2t0b3BXZWJWaWV3IHZpZXdzIGludG8gb25lIGNsYXNzIGxh
dGVyLgorICAgICAgICBUaGlzIGNvbW1pdCBqdXN0IG1lcmdlIHN0dWZmIGFyb3VuZCBhbmQgZG9l
c24ndCBjb250YWluIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmluaXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHA6CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0
ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXRvdWNod2VicGFnZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFn
ZV9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKFFUb3VjaFdlYlZpZXdQcml2YXRlOjppbml0KToKKyAgICAgICAgKFFUb3VjaFdlYlZp
ZXdQcml2YXRlOjpfcV92aWV3cG9ydFVwZGF0ZWQpOgorICAgICAgICAoUVRvdWNoV2ViVmlld1By
aXZhdGU6Ol9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlld19wLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRUb3VjaFdlYlBhZ2VQcm94eS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChkcmFnT3BlcmF0aW9uVG9Ecm9wQWN0
aW9uKToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpRdFdlYlBhZ2VQcm94eSk6CisgICAgICAg
IChRdFdlYlBhZ2VQcm94eTo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6
OmhhbmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpoYW5kbGVN
b3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmhhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpoYW5kbGVNb3VzZURvdWJsZUNs
aWNrRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQpOgor
ICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmhhbmRsZUhvdmVyTGVhdmVFdmVudCk6CisgICAgICAg
IChRdFdlYlBhZ2VQcm94eTo6aGFuZGxlSG92ZXJNb3ZlRXZlbnQpOgorICAgICAgICAoUXRXZWJQ
YWdlUHJveHk6OmhhbmRsZURyYWdFbnRlckV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5
OjpoYW5kbGVEcmFnTGVhdmVFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6aGFuZGxl
RHJhZ01vdmVFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6aGFuZGxlRHJvcEV2ZW50
KToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5Ojp0aW1lckV2ZW50KToKKyAgICAgICAgKFF0V2Vi
UGFnZVByb3h5Ojpwcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmRp
ZFJlY2VpdmVEb3dubG9hZFJlc3BvbnNlKToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpwYWlu
dENvbnRlbnQpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmNyZWF0ZURyYXdpbmdBcmVhUHJv
eHkpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OnJlbmRlclRvQ3VycmVudEdMQ29udGV4dCk6
CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZG9uZVdpdGhUb3VjaEV2ZW50KToKKyAgICAgICAg
KFF0V2ViUGFnZVByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZSk6CisgICAgICAg
IChRdFdlYlBhZ2VQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcik6
CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6dG91Y2hFdmVudCk6CisgICAgICAgIChRdFdlYlBh
Z2VQcm94eTo6ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlUHJveHkuaDoKKwogMjAxMS0xMS0wNyAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBUaGUgRnVsbCBLZXlib2FyZCBBY2Nlc3MgcHJlZmVy
ZW5jZSBzaG91bGQgYmUgcmVhZCBpbiB0aGUgVUkgcHJvY2VzcwpJbmRleDogU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCShy
ZXZpc2lvbiA5OTQzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkJKHdvcmtpbmcgY29w
eSkKQEAgLTI1Nyw4ICsyNTcsNiBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRH
ZXN0dXJlUmVjb2duaXplci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2du
aXplci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmggXAot
ICAgIFVJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHkuaCBcCi0gICAgVUlQcm9jZXNz
L3F0L1F0VG91Y2hXZWJQYWdlUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViRXJyb3Iu
aCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0RG93bmxvYWRNYW5hZ2VyLmggXAogICAgIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5oIFwKQEAgLTUwMiw4ICs1MDAsNiBAQCBTT1VSQ0VTICs9IFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vz
cy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGlu
Y2hHZXN0dXJlUmVjb2duaXplci5jcHAgXAotICAgIFVJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQ
YWdlUHJveHkuY3BwIFwKLSAgICBVSVByb2Nlc3MvcXQvUXRUb3VjaFdlYlBhZ2VQcm94eS5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
RG93bmxvYWRNYW5hZ2VyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNw
cCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVz
a3RvcHdlYnZpZXcuY3BwCShyZXZpc2lvbiA5OTQzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgIlV0aWxzUXQuaCIKICNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXdf
cC5oIgogI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0uaCIKKyNpbmNsdWRlICJxd2VicHJlZmVy
ZW5jZXNfcC5oIgogI2luY2x1ZGUgPFFGaWxlRGlhbG9nPgogI2luY2x1ZGUgPFF0RGVjbGFyYXRp
dmUvcWRlY2xhcmF0aXZlZW5naW5lLmg+CiAjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xcXVpY2tj
YW52YXMuaD4KQEAgLTI3Nyw3ICsyNzgsOSBAQCBRRGVza3RvcFdlYlZpZXc6OlFEZXNrdG9wV2Vi
VmlldyhXS0NvbnRlCiAKIHZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6aW5pdChXS0NvbnRl
eHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHNl
dFBhZ2VQcm94eShuZXcgUXREZXNrdG9wV2ViUGFnZVByb3h5KHRoaXMsIGNvbnRleHRSZWYsIHBh
Z2VHcm91cFJlZikpOworICAgIHNldFBhZ2VQcm94eShuZXcgUXRXZWJQYWdlUHJveHkodGhpcywg
MCwgdGhpcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSk7CisgICAgUVdlYlByZWZlcmVuY2Vz
UHJpdmF0ZTo6Z2V0KHBhZ2VQcm94eS0+cHJlZmVyZW5jZXMoKSktPnNldEF0dHJpYnV0ZShRV2Vi
UHJlZmVyZW5jZXNQcml2YXRlOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgZmFsc2Up
OworICAgIHBhZ2VQcm94eS0+aW5pdCgpOwogICAgIGVuYWJsZU1vdXNlRXZlbnRzKCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJw
YWdlLmNwcAkocmV2aXNpb24gOTk0MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F0b3VjaHdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicXRvdWNod2VicGFnZS5oIgogCi0jaW5jbHVk
ZSAiUXRUb3VjaFdlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJxdG91Y2h3ZWJwYWdl
X3AuaCIKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBR
VG91Y2hXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbgogCiAgICAgZ2xTY2lzc29yKGxlZnQs
IGJvdHRvbSwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICB0b3VjaFBhZ2VQcm94eSgpLT5yZW5kZXJU
b0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBvcGFjaXR5KTsKKyAgICBwYWdlUHJveHktPnJl
bmRlclRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOwogICAgIGdsRGlzYWJs
ZShHTF9TQ0lTU09SX1RFU1QpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F0b3VjaHdlYnBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaAkocmV2aXNpb24gOTk0MzEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPFFTaGFyZWRQb2ludGVyPgogCiBjbGFzcyBRVG91
Y2hXZWJQYWdlUHJpdmF0ZTsKLWNsYXNzIFF0VG91Y2hXZWJQYWdlUHJveHk7CiBjbGFzcyBRV2Vi
TmF2aWdhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBRV2ViUHJlZmVyZW5jZXM7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaAko
cmV2aXNpb24gOTk0MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnBhZ2VfcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIHF0
b3VjaHdlYnBhZ2VfcF9oCiAKICNpbmNsdWRlICJRdFNHVXBkYXRlUXVldWUuaCIKLSNpbmNsdWRl
ICJRdFRvdWNoV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAicXRvdWNod2VicGFnZS5oIgogI2lu
Y2x1ZGUgInF3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oIgogI2luY2x1ZGUgPFFNZW51PgpAQCAt
NDEsNyArNDAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBfcV9vbkFmdGVyU2NlbmVSZW5kZXIoKTsK
ICAgICB2b2lkIF9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCk7CiAgICAgdm9pZCBwYWludFRv
Q3VycmVudEdMQ29udGV4dCgpOwotICAgIFF0VG91Y2hXZWJQYWdlUHJveHkqIHRvdWNoUGFnZVBy
b3h5KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UXRUb3VjaFdlYlBhZ2VQcm94eSo+KHBhZ2VQcm94
eSk7IH0KIAogICAgIFFUb3VjaFdlYlBhZ2UqIGNvbnN0IHE7CiAgICAgUXRXZWJQYWdlUHJveHkq
IHBhZ2VQcm94eTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNo
d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xdG91Y2h3ZWJ2aWV3LmNwcAkocmV2aXNpb24gOTk0MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJxdG91Y2h3
ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3X3AuaCIKKyNpbmNsdWRlICJxd2Vi
cHJlZmVyZW5jZXNfcC5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldl
YlByZWZlcmVuY2VzLmgiCiAKQEAgLTM0LDggKzM1LDEwIEBAIHZvaWQgUVRvdWNoV2ViVmlld1By
aXZhdGU6OmluaXQoUVRvdWNoV2UKICAgICB2aWV3SW50ZXJmYWNlLnJlc2V0KG5ldyBXZWJLaXQ6
OlF0VG91Y2hWaWV3SW50ZXJmYWNlKHZpZXdwb3J0LCBwYWdlVmlldy5kYXRhKCkpKTsKICAgICBp
bnRlcmFjdGlvbkVuZ2luZS5yZXNldChuZXcgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHZp
ZXdwb3J0LCBwYWdlVmlldy5kYXRhKCkpKTsKICAgICBRVG91Y2hXZWJQYWdlUHJpdmF0ZSogY29u
c3QgcGFnZVZpZXdQcml2YXRlID0gcGFnZVZpZXcuZGF0YSgpLT5kOwotICAgIHNldFBhZ2VQcm94
eShuZXcgUXRUb3VjaFdlYlBhZ2VQcm94eSh2aWV3SW50ZXJmYWNlLmRhdGEoKSwgaW50ZXJhY3Rp
b25FbmdpbmUuZGF0YSgpKSk7Ci0gICAgcGFnZVZpZXdQcml2YXRlLT5zZXRQYWdlUHJveHkodG91
Y2hQYWdlUHJveHkoKSk7CisgICAgc2V0UGFnZVByb3h5KG5ldyBRdFdlYlBhZ2VQcm94eSh2aWV3
SW50ZXJmYWNlLmRhdGEoKSwgaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpKSk7CisgICAgcGFnZVZp
ZXdQcml2YXRlLT5zZXRQYWdlUHJveHkocGFnZVByb3h5LmRhdGEoKSk7CisgICAgUVdlYlByZWZl
cmVuY2VzUHJpdmF0ZTo6Z2V0KHBhZ2VQcm94eS0+cHJlZmVyZW5jZXMoKSktPnNldEF0dHJpYnV0
ZShRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwg
dHJ1ZSk7CisgICAgcGFnZVByb3h5LT5pbml0KCk7CiAKICAgICBRT2JqZWN0Ojpjb25uZWN0KGlu
dGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZpZXdwb3J0VXBkYXRlUmVxdWVzdGVkKCkp
LCB2aWV3cG9ydCwgU0xPVChfcV92aWV3cG9ydFVwZGF0ZWQoKSkpOwogICAgIFFPYmplY3Q6OmNv
bm5lY3QoaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpLCBTSUdOQUwodmlld3BvcnRUcmFqZWN0b3J5
VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpLCB2aWV3cG9ydCwgU0xPVChfcV92aWV3cG9y
dFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYmKSkpOwpAQCAtNTYsMTIgKzU5
LDEyIEBAIHZvaWQgUVRvdWNoV2ViVmlld1ByaXZhdGU6Ol9xX3ZpZXdwb3J0VXAKICAgICBRX1Eo
UVRvdWNoV2ViVmlldyk7CiAgICAgY29uc3QgUVJlY3RGIHZpc2libGVSZWN0SW5QYWdlVmlld0Nv
b3JkaW5hdGVzID0gcS0+bWFwUmVjdFRvSXRlbShwYWdlVmlldy5kYXRhKCksIHEtPmJvdW5kaW5n
UmVjdCgpKS5pbnRlcnNlY3RlZChwYWdlVmlldy0+Ym91bmRpbmdSZWN0KCkpOwogICAgIGZsb2F0
IHNjYWxlID0gcGFnZVZpZXctPnNjYWxlKCk7Ci0gICAgdG91Y2hQYWdlUHJveHkoKS0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUodmlzaWJsZVJlY3RJblBhZ2VWaWV3Q29vcmRpbmF0ZXMs
IHNjYWxlKTsKKyAgICBwYWdlUHJveHktPnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHZp
c2libGVSZWN0SW5QYWdlVmlld0Nvb3JkaW5hdGVzLCBzY2FsZSk7CiB9CiAKIHZvaWQgUVRvdWNo
V2ViVmlld1ByaXZhdGU6Ol9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3Qg
UVBvaW50RiYgdHJhamVjdG9yeVZlY3RvcikKIHsKLSAgICB0b3VjaFBhZ2VQcm94eSgpLT5zZXRW
aXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworICAg
IHBhZ2VQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0
b3J5VmVjdG9yKTsKIH0KIAogdm9pZCBRVG91Y2hXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlVmlld3Bv
cnRTaXplKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vi
dmlld19wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJ2aWV3X3AuaAkocmV2aXNpb24gOTk0MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXdfcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsy
Miw3IEBACiAjZGVmaW5lIHF0b3VjaHdlYnZpZXdfcF9oCiAKICNpbmNsdWRlICJRdFRvdWNoVmll
d0ludGVyZmFjZS5oIgotI2luY2x1ZGUgIlF0VG91Y2hXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRl
ICJRdFdlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZS5oIgogI2luY2x1ZGUgInFiYXNld2Vidmlld19wLmgiCiAjaW5jbHVkZSA8UVNjb3BlZFBvaW50
ZXI+CkBAIC00Miw3ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIF9xX3ZpZXdwb3J0VHJhamVj
dG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpOwogICAgIHZvaWQgdXBkYXRlVmlld3Bv
cnRTaXplKCk7CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7Ci0gICAgUXRU
b3VjaFdlYlBhZ2VQcm94eSogdG91Y2hQYWdlUHJveHkoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxR
dFRvdWNoV2ViUGFnZVByb3h5Kj4oUUJhc2VXZWJWaWV3UHJpdmF0ZTo6cGFnZVByb3h5LmRhdGEo
KSk7IH0KIAogICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNv
cmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmdzKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9u
IDk5NDMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RGVza3RvcFdlYlBhZ2VQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUXREZXNrdG9wV2ViUGFn
ZVByb3h5LmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgotI2luY2x1ZGUg
Ik5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50Lmgi
Ci0jaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlRdERlc2t0b3AuaCIKLSNpbmNsdWRlICJxZGVz
a3RvcHdlYnZpZXcuaCIKLSNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXdfcC5oIgotI2luY2x1ZGUg
InF3ZWJwcmVmZXJlbmNlc19wLmgiCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUg
PFFFdmVudD4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZURyYWdEcm9wRXZlbnQ+Ci0jaW5jbHVk
ZSA8UUdyYXBoaWNzV2lkZ2V0PgotI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLXN0YXRpYyBpbmxpbmUgUXQ6OkRyb3BBY3Rpb24gZHJhZ09w
ZXJhdGlvblRvRHJvcEFjdGlvbih1bnNpZ25lZCBkcmFnT3BlcmF0aW9uKQotewotICAgIFF0OjpE
cm9wQWN0aW9uIHJlc3VsdCA9IFF0OjpJZ25vcmVBY3Rpb247Ci0gICAgaWYgKGRyYWdPcGVyYXRp
b24gJiBEcmFnT3BlcmF0aW9uQ29weSkKLSAgICAgICAgcmVzdWx0ID0gUXQ6OkNvcHlBY3Rpb247
Ci0gICAgZWxzZSBpZiAoZHJhZ09wZXJhdGlvbiAmIERyYWdPcGVyYXRpb25Nb3ZlKQotICAgICAg
ICByZXN1bHQgPSBRdDo6TW92ZUFjdGlvbjsKLSAgICBlbHNlIGlmIChkcmFnT3BlcmF0aW9uICYg
RHJhZ09wZXJhdGlvbkdlbmVyaWMpCi0gICAgICAgIHJlc3VsdCA9IFF0OjpNb3ZlQWN0aW9uOwot
ICAgIGVsc2UgaWYgKGRyYWdPcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKLSAgICAgICAg
cmVzdWx0ID0gUXQ6OkxpbmtBY3Rpb247Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUXREZXNr
dG9wV2ViUGFnZVByb3h5OjpRdERlc2t0b3BXZWJQYWdlUHJveHkoUURlc2t0b3BXZWJWaWV3UHJp
dmF0ZSogZGVza3RvcFdlYlZpZXcsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXApCi0gICAgOiBRdFdlYlBhZ2VQcm94eShkZXNrdG9wV2ViVmlldywgZGVza3Rv
cFdlYlZpZXcsIGNvbnRleHQsIHBhZ2VHcm91cCkKLXsKLSAgICBRV2ViUHJlZmVyZW5jZXNQcml2
YXRlOjpnZXQocHJlZmVyZW5jZXMoKSktPnNldEF0dHJpYnV0ZShRV2ViUHJlZmVyZW5jZXNQcml2
YXRlOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgZmFsc2UpOwotICAgIGluaXQoKTsK
LX0KLQotUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBRdERlc2t0b3BXZWJQYWdlUHJveHk6
OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQotewotICAgIHJldHVybiBEcmF3aW5nQXJlYVByb3h5
SW1wbDo6Y3JlYXRlKG1fd2ViUGFnZVByb3h5LmdldCgpKTsKLX0KLQotdm9pZCBRdERlc2t0b3BX
ZWJQYWdlUHJveHk6OnBhaW50Q29udGVudChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3Qm
IGFyZWEpCi17Ci0gICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSB1bnBhaW50ZWQg
cmVnaW9uPwotICAgIFdlYkNvcmU6OlJlZ2lvbiB1bnBhaW50ZWRSZWdpb247Ci0gICAgc3RhdGlj
X2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPihtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEo
KSktPnBhaW50KHBhaW50ZXIsIGFyZWEsIHVucGFpbnRlZFJlZ2lvbik7Ci19Ci0KLXZvaWQgUXRE
ZXNrdG9wV2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKQotewotICAgIC8vIFdlIGlnbm9yZSB0aGUgdmlld3Bv
cnQgZGVmaW5pdGlvbiBvbiB0aGUgRGVza3RvcC4KLX0KLQotI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCi12b2lkIFF0RGVza3RvcFdlYlBhZ2VQcm94eTo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0
IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCkKLXsKLSAgICAvLyBX
ZSBkbyBub3QgaGFuZGxlIHRvdWNoIG9uIERlc2t0b3AgZm9yIG5vdywgdGhlIGV2ZW50cyBhcmUg
bm90IHN1cHBvc2VkIHRvIGJlIGZvcndhcmRlZCB0byB0aGUgV2ViUHJvY2Vzcy4KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPFdlYlBvcHVwTWVudVBy
b3h5PiBRdERlc2t0b3BXZWJQYWdlUHJveHk6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQ
cm94eSopCi17Ci0gICAgUVF1aWNrSXRlbSogd2ViVmlld0l0ZW0gPSBzdGF0aWNfY2FzdDxRRGVz
a3RvcFdlYlZpZXdQcml2YXRlKj4obV92aWV3SW50ZXJmYWNlKS0+d2ViVmlldygpOwotICAgIHJl
dHVybiBXZWJQb3B1cE1lbnVQcm94eVF0RGVza3RvcDo6Y3JlYXRlKG1fd2ViUGFnZVByb3h5Lmdl
dCgpLCB3ZWJWaWV3SXRlbSk7Ci19Ci0KLWJvb2wgUXREZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5k
bGVFdmVudChRRXZlbnQqIGV2KQotewotICAgIHN3aXRjaCAoZXYtPnR5cGUoKSkgewotICAgIGNh
c2UgUUV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNb3VzZU1vdmVFdmVu
dChyZWludGVycHJldF9jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6
TW91c2VCdXR0b25QcmVzczoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1vdXNlUHJlc3NFdmVudChy
ZWludGVycHJldF9jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6TW91
c2VCdXR0b25SZWxlYXNlOgotICAgICAgICByZXR1cm4gaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQo
cmVpbnRlcnByZXRfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6Ok1v
dXNlQnV0dG9uRGJsQ2xpY2s6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNb3VzZURvdWJsZUNsaWNr
RXZlbnQocmVpbnRlcnByZXRfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZl
bnQ6OldoZWVsOgotICAgICAgICByZXR1cm4gaGFuZGxlV2hlZWxFdmVudChyZWludGVycHJldF9j
YXN0PFFXaGVlbEV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJMZWF2ZToKLSAg
ICAgICAgcmV0dXJuIGhhbmRsZUhvdmVyTGVhdmVFdmVudChyZWludGVycHJldF9jYXN0PFFIb3Zl
ckV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJFbnRlcjogLy8gRmFsbC10aHJv
dWdoLCBmb3IgV2ViS2l0IHRoZSBkaXN0aW5jdGlvbiBkb2Vzbid0IG1hdHRlci4KLSAgICBjYXNl
IFFFdmVudDo6SG92ZXJNb3ZlOgotICAgICAgICByZXR1cm4gaGFuZGxlSG92ZXJNb3ZlRXZlbnQo
cmVpbnRlcnByZXRfY2FzdDxRSG92ZXJFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkRy
YWdFbnRlcjoKLSAgICAgICAgcmV0dXJuIGhhbmRsZURyYWdFbnRlckV2ZW50KHJlaW50ZXJwcmV0
X2Nhc3Q8UURyYWdFbnRlckV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6RHJhZ0xlYXZl
OgotICAgICAgICByZXR1cm4gaGFuZGxlRHJhZ0xlYXZlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxR
RHJhZ0xlYXZlRXZlbnQqPihldikpOwotICAgIGNhc2UgUUV2ZW50OjpEcmFnTW92ZToKLSAgICAg
ICAgcmV0dXJuIGhhbmRsZURyYWdNb3ZlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRRHJhZ01vdmVF
dmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkRyb3A6Ci0gICAgICAgIHJldHVybiBoYW5k
bGVEcm9wRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRRHJvcEV2ZW50Kj4oZXYpKTsKLSAgICAvLyBU
b3VjaCBldmVudHMgb25seSBmb3IgV2ViS2l0VGVzdFJ1bm5lcgotICAgIGNhc2UgUUV2ZW50OjpU
b3VjaEJlZ2luOgotICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKLSAgICBjYXNlIFFFdmVu
dDo6VG91Y2hFbmQ6Ci0gICAgICAgIHJldHVybiBoYW5kbGVUb3VjaEV2ZW50KHN0YXRpY19jYXN0
PFFUb3VjaEV2ZW50Kj4oZXYpKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVFdmVudChldik7Ci19Ci0KLWJvb2wg
UXREZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5kbGVNb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCog
ZXYpCi17Ci0gICAgLy8gRm9yIHNvbWUgcmVhc29uIG1vdXNlIHByZXNzIHJlc3VsdHMgaW4gbW91
c2UgaG92ZXIgKHdoaWNoIGlzCi0gICAgLy8gY29udmVydGVkIHRvIG1vdXNlIG1vdmUgZm9yIFdl
YktpdCkuIFdlIGlnbm9yZSB0aGVzZSBob3ZlcgotICAgIC8vIGV2ZW50cyBieSBjb21wYXJpbmcg
bGFzdFBvcyB3aXRoIG5ld1Bvcy4KLSAgICAvLyBOT1RFOiBsYXN0UG9zIGZyb20gdGhlIGV2ZW50
IGFsd2F5cyBjb21lcyBlbXB0eSwgc28gd2Ugd29yawotICAgIC8vIGFyb3VuZCB0aGF0IGhlcmUu
Ci0gICAgc3RhdGljIFFQb2ludEYgbGFzdFBvcyA9IFFQb2ludEYoKTsKLSAgICBpZiAobGFzdFBv
cyA9PSBldi0+cG9zKCkpCi0gICAgICAgIHJldHVybiBldi0+aXNBY2NlcHRlZCgpOwotICAgIGxh
c3RQb3MgPSBldi0+cG9zKCk7Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlTW91c2VFdmVu
dChOYXRpdmVXZWJNb3VzZUV2ZW50KGV2LCAvKmV2ZW50Q2xpY2tDb3VudD0qLzApKTsKLQotICAg
IHJldHVybiBldi0+aXNBY2NlcHRlZCgpOwotfQotCi1ib29sIFF0RGVza3RvcFdlYlBhZ2VQcm94
eTo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBldikKLXsKLSAgICBpZiAobV90
cmlwbGVDbGlja1RpbWVyLmlzQWN0aXZlKCkgJiYgKGV2LT5wb3MoKSAtIG1fdHJpcGxlQ2xpY2sp
Lm1hbmhhdHRhbkxlbmd0aCgpIDwgUUFwcGxpY2F0aW9uOjpzdGFydERyYWdEaXN0YW5jZSgpKSB7
Ci0gICAgICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNl
RXZlbnQoZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMykpOwotICAgICAgICByZXR1cm4gZXYtPmlz
QWNjZXB0ZWQoKTsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlTW91c2VFdmVu
dChOYXRpdmVXZWJNb3VzZUV2ZW50KGV2LCAvKmV2ZW50Q2xpY2tDb3VudD0qLzEpKTsKLSAgICBy
ZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsKLX0KLQotYm9vbCBRdERlc2t0b3BXZWJQYWdlUHJveHk6
OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiBldikKLXsKLSAgICBtX3dlYlBh
Z2VQcm94eS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KGV2LCAvKmV2ZW50
Q2xpY2tDb3VudD0qLzApKTsKLSAgICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsKLX0KLQotYm9v
bCBRdERlc2t0b3BXZWJQYWdlUHJveHk6OmhhbmRsZU1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91
c2VFdmVudCogZXYpCi17Ci0gICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0
aXZlV2ViTW91c2VFdmVudChldiwgLypldmVudENsaWNrQ291bnQ9Ki8yKSk7Ci0KLSAgICBtX3Ry
aXBsZUNsaWNrVGltZXIuc3RhcnQoUUFwcGxpY2F0aW9uOjpkb3VibGVDbGlja0ludGVydmFsKCks
IHRoaXMpOwotICAgIG1fdHJpcGxlQ2xpY2sgPSBldi0+bG9jYWxQb3MoKS50b1BvaW50KCk7Ci0g
ICAgcmV0dXJuIGV2LT5pc0FjY2VwdGVkKCk7Ci19Ci0KLWJvb2wgUXREZXNrdG9wV2ViUGFnZVBy
b3h5OjpoYW5kbGVXaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBldikKLXsKLSAgICBtX3dlYlBhZ2VQ
cm94eS0+aGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KGV2KSk7Ci0gICAgcmV0
dXJuIGV2LT5pc0FjY2VwdGVkKCk7Ci19Ci0KLWJvb2wgUXREZXNrdG9wV2ViUGFnZVByb3h5Ojpo
YW5kbGVIb3ZlckxlYXZlRXZlbnQoUUhvdmVyRXZlbnQqIGV2KQotewotICAgIC8vIFRvIGdldCB0
aGUgY29ycmVjdCBiZWhhdmlvciBvZiBtb3VzZW91dCwgd2UgbmVlZCB0byB0dXJuIHRoZSBMZWF2
ZSBldmVudCBvZiBvdXIgd2VidmlldyBpbnRvIGEgbW91c2UgbW92ZQotICAgIC8vIHRvIGEgdmVy
eSBmYXIgcmVnaW9uLgotICAgIFFIb3ZlckV2ZW50IGZha2VFdmVudChRRXZlbnQ6OkhvdmVyTW92
ZSwgUVBvaW50KElOVF9NSU4sIElOVF9NSU4pLCBldi0+b2xkUG9zKCkpOwotICAgIHJldHVybiBo
YW5kbGVIb3Zlck1vdmVFdmVudCgmZmFrZUV2ZW50KTsKLX0KLQotYm9vbCBRdERlc2t0b3BXZWJQ
YWdlUHJveHk6OmhhbmRsZUhvdmVyTW92ZUV2ZW50KFFIb3ZlckV2ZW50KiBldikKLXsKLSAgICBR
TW91c2VFdmVudCBtZShRRXZlbnQ6Ok1vdXNlTW92ZSwgZXYtPnBvcygpLCBRdDo6Tm9CdXR0b24s
IFF0OjpOb0J1dHRvbiwgUXQ6Ok5vTW9kaWZpZXIpOwotICAgIG1lLnNldEFjY2VwdGVkKGV2LT5p
c0FjY2VwdGVkKCkpOwotCi0gICAgcmV0dXJuIGhhbmRsZU1vdXNlTW92ZUV2ZW50KCZtZSk7Ci19
Ci0KLWJvb2wgUXREZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5kbGVEcmFnRW50ZXJFdmVudChRRHJh
Z0VudGVyRXZlbnQqIGV2KQotewotICAgIG1fd2ViUGFnZVByb3h5LT5yZXNldERyYWdPcGVyYXRp
b24oKTsKLSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCB1c2UgUUN1cnNvcjo6cG9zKCkKLSAgICBE
cmFnRGF0YSBkcmFnRGF0YShldi0+bWltZURhdGEoKSwgZXYtPnBvcygpLCBRQ3Vyc29yOjpwb3Mo
KSwgZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlvbihldi0+cG9zc2libGVBY3Rpb25zKCkpKTsKLSAg
ICBtX3dlYlBhZ2VQcm94eS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKTsKLSAgICBldi0+YWNjZXB0
UHJvcG9zZWRBY3Rpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBRdERlc2t0b3BX
ZWJQYWdlUHJveHk6OmhhbmRsZURyYWdMZWF2ZUV2ZW50KFFEcmFnTGVhdmVFdmVudCogZXYpCi17
Ci0gICAgYm9vbCBhY2NlcHRlZCA9IGV2LT5pc0FjY2VwdGVkKCk7Ci0KLSAgICAvLyBGSVhNRTog
U2hvdWxkIG5vdCB1c2UgUUN1cnNvcjo6cG9zKCkKLSAgICBEcmFnRGF0YSBkcmFnRGF0YSgwLCBJ
bnRQb2ludCgpLCBRQ3Vyc29yOjpwb3MoKSwgRHJhZ09wZXJhdGlvbk5vbmUpOwotICAgIG1fd2Vi
UGFnZVByb3h5LT5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7Ci0gICAgbV93ZWJQYWdlUHJveHktPnJl
c2V0RHJhZ09wZXJhdGlvbigpOwotCi0gICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKLSAg
ICByZXR1cm4gYWNjZXB0ZWQ7Ci19Ci0KLWJvb2wgUXREZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5k
bGVEcmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50KiBldikKLXsKLSAgICBib29sIGFjY2VwdGVk
ID0gZXYtPmlzQWNjZXB0ZWQoKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBRQ3Vy
c29yOjpwb3MoKQotICAgIERyYWdEYXRhIGRyYWdEYXRhKGV2LT5taW1lRGF0YSgpLCBldi0+cG9z
KCksIFFDdXJzb3I6OnBvcygpLCBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGV2LT5wb3NzaWJs
ZUFjdGlvbnMoKSkpOwotICAgIG1fd2ViUGFnZVByb3h5LT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEp
OwotICAgIGV2LT5zZXREcm9wQWN0aW9uKGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb24obV93ZWJQ
YWdlUHJveHktPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uKSk7Ci0gICAgaWYgKG1fd2ViUGFnZVBy
b3h5LT5kcmFnU2Vzc2lvbigpLm9wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uTm9uZSkKLSAgICAg
ICAgZXYtPmFjY2VwdCgpOwotCi0gICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKLSAgICBy
ZXR1cm4gYWNjZXB0ZWQ7Ci19Ci0KLWJvb2wgUXREZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5kbGVE
cm9wRXZlbnQoUURyb3BFdmVudCogZXYpCi17Ci0gICAgYm9vbCBhY2NlcHRlZCA9IGV2LT5pc0Fj
Y2VwdGVkKCk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCB1c2UgUUN1cnNvcjo6cG9zKCkK
LSAgICBEcmFnRGF0YSBkcmFnRGF0YShldi0+bWltZURhdGEoKSwgZXYtPnBvcygpLCBRQ3Vyc29y
Ojpwb3MoKSwgZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlvbihldi0+cG9zc2libGVBY3Rpb25zKCkp
KTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgIG1fd2ViUGFnZVBy
b3h5LT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEsIFN0cmluZygpLCBoYW5kbGUpOwotICAgIGV2LT5z
ZXREcm9wQWN0aW9uKGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb24obV93ZWJQYWdlUHJveHktPmRy
YWdTZXNzaW9uKCkub3BlcmF0aW9uKSk7Ci0gICAgZXYtPmFjY2VwdCgpOwotCi0gICAgZXYtPnNl
dEFjY2VwdGVkKGFjY2VwdGVkKTsKLSAgICByZXR1cm4gYWNjZXB0ZWQ7Ci19Ci0KLWJvb2wgUXRE
ZXNrdG9wV2ViUGFnZVByb3h5OjpoYW5kbGVUb3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVudCkK
LXsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2
ZW50KGV2ZW50KSk7Ci0gICAgZXZlbnQtPmFjY2VwdCgpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFF0RGVza3RvcFdlYlBhZ2VQcm94eTo6dGltZXJFdmVudChRVGltZXJFdmVudCogZXYp
Ci17Ci0gICAgaW50IHRpbWVySWQgPSBldi0+dGltZXJJZCgpOwotICAgIGlmICh0aW1lcklkID09
IG1fdHJpcGxlQ2xpY2tUaW1lci50aW1lcklkKCkpCi0gICAgICAgIG1fdHJpcGxlQ2xpY2tUaW1l
ci5zdG9wKCk7Ci0gICAgZWxzZQotICAgICAgICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2KTsKLX0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdERlc2t0b3BXZWJQYWdlUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXREZXNrdG9wV2Vi
UGFnZVByb3h5LmgJKHJldmlzaW9uIDk5NDMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0RGVza3RvcFdlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFF0RGVza3RvcFdlYlBhZ2VQcm94
eV9oCi0jZGVmaW5lIFF0RGVza3RvcFdlYlBhZ2VQcm94eV9oCi0KLSNpbmNsdWRlICJEcmF3aW5n
QXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgotCi1jbGFzcyBRRGVza3RvcFdlYlZpZXdQcml2YXRlOwotCi11c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwotCi1jbGFzcyBRdERlc2t0b3BXZWJQYWdlUHJveHkgOiBwdWJsaWMg
UXRXZWJQYWdlUHJveHkgewotcHVibGljOgotICAgIFF0RGVza3RvcFdlYlBhZ2VQcm94eShRRGVz
a3RvcFdlYlZpZXdQcml2YXRlKiwgV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiA9IDApOwot
Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFFFdmVudCopOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCBwYWludENvbnRlbnQoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYgYXJlYSk7Ci0KLXBy
aXZhdGU6Ci0gICAgLyogUGFnZUNsaWVudCBvdmVycmlkZXMuICovCi0gICAgdmlydHVhbCBQYXNz
T3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZp
ZXdwb3J0QXJndW1lbnRzJik7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB2aXJ0dWFs
IHZvaWQgZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29s
IHdhc0V2ZW50SGFuZGxlZCk7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJL
aXQ6OldlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJLaXQ6OldlYlBh
Z2VQcm94eSopOwotCi0gICAgdmlydHVhbCB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKTsK
LQotICAgIGJvb2wgaGFuZGxlTW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqKTsKLSAgICBib29s
IGhhbmRsZU1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOwotICAgIGJvb2wgaGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZU1vdXNlRG91Ymxl
Q2xpY2tFdmVudChRTW91c2VFdmVudCopOwotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChRV2hl
ZWxFdmVudCopOwotICAgIGJvb2wgaGFuZGxlSG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50Kik7
Ci0gICAgYm9vbCBoYW5kbGVIb3Zlck1vdmVFdmVudChRSG92ZXJFdmVudCopOwotICAgIGJvb2wg
aGFuZGxlRHJhZ0VudGVyRXZlbnQoUURyYWdFbnRlckV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVE
cmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZURyYWdNb3Zl
RXZlbnQoUURyYWdNb3ZlRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZURyb3BFdmVudChRRHJvcEV2
ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7Ci0KLSAgICBR
UG9pbnQgbV90cmlwbGVDbGljazsKLSAgICBRQmFzaWNUaW1lciBtX3RyaXBsZUNsaWNrVGltZXI7
Ci19OwotCi0jZW5kaWYgLy8gUXREZXNrdG9wV2ViUGFnZVByb3h5X2gKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFdlYlBhZ2VQcm94eS5jcHAJKHJl
dmlzaW9uIDk5NDMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hXZWJQ
YWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlF0VG91Y2hXZWJQ
YWdlUHJveHkuaCIKLQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVk
ZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCi0jaW5jbHVkZSA8SW50UmVjdC5oPgot
I2luY2x1ZGUgPE5hdGl2ZVdlYlRvdWNoRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJFdmVudEZhY3Rv
cnlRdC5oPgotI2luY2x1ZGUgPHF3ZWJwcmVmZXJlbmNlc19wLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1RdFRvdWNoV2ViUGFnZVByb3h5OjpRdFRvdWNoV2ViUGFnZVByb3h5KFF0
VG91Y2hWaWV3SW50ZXJmYWNlKiB2aWV3SW50ZXJmYWNlLCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUqIHZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCi0gICAgOiBRdFdlYlBhZ2VQcm94eSh2
aWV3SW50ZXJmYWNlLCAwKQotICAgICwgbV9pbnRlcmFjdGlvbkVuZ2luZSh2aWV3cG9ydEludGVy
YWN0aW9uRW5naW5lKQotICAgICwgbV9wYW5HZXN0dXJlUmVjb2duaXplcih2aWV3cG9ydEludGVy
YWN0aW9uRW5naW5lKQotICAgICwgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyKHZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUpCi17Ci0gICAgUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0KHByZWZl
cmVuY2VzKCkpLT5zZXRBdHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQsIHRydWUpOwotICAgIGluaXQoKTsKLX0KLQotUGFzc093blB0
cjxEcmF3aW5nQXJlYVByb3h5PiBRdFRvdWNoV2ViUGFnZVByb3h5OjpjcmVhdGVEcmF3aW5nQXJl
YVByb3h5KCkKLXsKLSAgICByZXR1cm4gRHJhd2luZ0FyZWFQcm94eUltcGw6OmNyZWF0ZShtX3dl
YlBhZ2VQcm94eS5nZXQoKSk7Ci19Ci0KLXZvaWQgUXRUb3VjaFdlYlBhZ2VQcm94eTo6cHJvY2Vz
c0RpZENyYXNoKCkKLXsKLSAgICBRdFdlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZENyYXNoKCk7Ci0g
ICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5yZXNldCgpOwotICAgIG1fcGluY2hHZXN0dXJlUmVj
b2duaXplci5yZXNldCgpOwotfQotCi12b2lkIFF0VG91Y2hXZWJQYWdlUHJveHk6OnBhaW50Q29u
dGVudChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIGFyZWEpCi17Ci19Ci0KLXZvaWQg
UXRUb3VjaFdlYlBhZ2VQcm94eTo6cmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsK
LSAgICBpZiAoZHJhd2luZ0FyZWEpCi0gICAgICAgIGRyYXdpbmdBcmVhLT5wYWludFRvQ3VycmVu
dEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOwotfQotCi0jaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKLXZvaWQgUXRUb3VjaFdlYlBhZ2VQcm94eTo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0
IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKLXsKLSAg
ICBpZiAod2FzRXZlbnRIYW5kbGVkIHx8IGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6VG91Y2hD
YW5jZWwpIHsKLSAgICAgICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5yZXNldCgpOwotICAgICAg
ICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIucmVzZXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGNvbnN0IFFUb3VjaEV2ZW50KiBldiA9IGV2ZW50Lm5hdGl2ZUV2ZW50KCk7Ci0K
LSAgICBzd2l0Y2ggKGV2LT50eXBlKCkpIHsKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoK
LSAgICAgICAgQVNTRVJUKCFtX2ludGVyYWN0aW9uRW5naW5lLT5wYW5HZXN0dXJlQWN0aXZlKCkp
OwotICAgICAgICBBU1NFUlQoIW1faW50ZXJhY3Rpb25FbmdpbmUtPnBpbmNoR2VzdHVyZUFjdGl2
ZSgpKTsKLQotICAgICAgICAvLyBUaGUgaW50ZXJhY3Rpb24gZW5naW5lIG1pZ2h0IHN0aWxsIGJl
IGFuaW1hdGluZyBraW5ldGljIHNjcm9sbGluZyBvciBhIHNjYWxlIGFuaW1hdGlvbgotICAgICAg
ICAvLyBzdWNoIGFzIGRvdWJsZS10YXAgdG8gem9vbSBvciB0aGUgYm91bmNlIGJhY2sgZWZmZWN0
LiBBIHRvdWNoIHN0b3BzIHRoZSBraW5ldGljIHNjcm9sbGluZwotICAgICAgICAvLyB3aGVyZSBh
cyBpdCBkb2VzIG5vdCBzdG9wIHRoZSBzY2FsZSBhbmltYXRpb24uCi0gICAgICAgIGlmIChtX2lu
dGVyYWN0aW9uRW5naW5lLT5zY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgICAgIG1f
aW50ZXJhY3Rpb25FbmdpbmUtPmludGVycnVwdFNjcm9sbEFuaW1hdGlvbigpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hVcGRhdGU6Ci0gICAgICAgIC8vIFRoZSBzY2Fs
ZSBhbmltYXRpb24gY2FuIG9ubHkgYmUgaW50ZXJydXB0ZWQgYnkgYSBwaW5jaCBnZXN0dXJlLCB3
aGljaCB3aWxsIHRoZW4gdGFrZSBvdmVyLgotICAgICAgICBpZiAobV9pbnRlcmFjdGlvbkVuZ2lu
ZS0+c2NhbGVBbmltYXRpb25BY3RpdmUoKSAmJiBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuaXNS
ZWNvZ25pemVkKCkpCi0gICAgICAgICAgICBtX2ludGVyYWN0aW9uRW5naW5lLT5pbnRlcnJ1cHRT
Y2FsZUFuaW1hdGlvbigpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgc2NhbGUgYW5pbWF0aW9uIGlzIGFjdGl2ZSB3
ZSBkb24ndCBwYXNzIHRoZSBldmVudCB0byB0aGUgcmVjb2duaXplcnMuIEluIHRoZSBmdXR1cmUK
LSAgICAvLyB3ZSB3b3VsZCB3YW50IHRvIHF1ZXVlIHRoZSBldmVudCBoZXJlIGFuZCByZXBvc3Qg
dGhlbiB3aGVuIHRoZSBhbmltYXRpb24gZW5kcy4KLSAgICBpZiAobV9pbnRlcmFjdGlvbkVuZ2lu
ZS0+c2NhbGVBbmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ29u
dmVydCB0aGUgZXZlbnQgdGltZXN0YW1wIGZyb20gc2Vjb25kIHRvIG1pbGxpc2Vjb25kLgotICAg
IHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyA9IHN0YXRpY19jYXN0PHFpbnQ2ND4oZXZlbnQu
dGltZXN0YW1wKCkgKiAxMDAwKTsKLSAgICBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLnJlY29nbml6
ZShldiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIG1fcGluY2hHZXN0dXJlUmVjb2duaXpl
ci5yZWNvZ25pemUoZXYpOwotfQotI2VuZGlmCi0KLWJvb2wgUXRUb3VjaFdlYlBhZ2VQcm94eTo6
aGFuZGxlRXZlbnQoUUV2ZW50KiBldikKLXsKLSAgICBzd2l0Y2ggKGV2LT50eXBlKCkpIHsKLSAg
ICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hFbmQ6Ci0g
ICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgotICAgICAgICB0b3VjaEV2ZW50KHN0YXRpY19j
YXN0PFFUb3VjaEV2ZW50Kj4oZXYpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBRdFdlYlBhZ2VQcm94eTo6aGFuZGxlRXZlbnQoZXYpOwotfQotCi12b2lkIFF0VG91
Y2hXZWJQYWdlUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IFFSZWN0
RiYgdmlzaWJsZUNvbnRlbnRSZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBRUmVjdCBhbGlnbmVk
VmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0LnRvQWxpZ25lZFJlY3QoKTsK
LSAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dEFuZFNjYWxlKGFsaWduZWRWaXNpYmxlQ29udGVudFJlY3QsIHNjYWxlKTsKLQotICAgIC8vIEZJ
WE1FOiBPbmNlIHdlIHN1cHBvcnQgc3VzcGVuZCBhbmQgcmVzdW1lLCB0aGlzIHNob3VsZCBiZSBk
ZWxheWVkIHVudGlsIHRoZSBwYWdlIGlzIGFjdGl2ZSBpZiB0aGUgcGFnZSBpcyBzdXNwZW5kZWQu
Ci0gICAgbV93ZWJQYWdlUHJveHktPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KGFsaWduZWRW
aXNpYmxlQ29udGVudFJlY3QpOwotfQotCi12b2lkIFF0VG91Y2hXZWJQYWdlUHJveHk6OnNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgUVBvaW50RiYgdHJhamVjdG9y
eVZlY3RvcikKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+c2V0VmlzaWJs
ZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLX0KLQotdm9p
ZCBRdFRvdWNoV2ViUGFnZVByb3h5Ojp0b3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVudCkKLXsK
LSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVUb3Vj
aEV2ZW50KE5hdGl2ZVdlYlRvdWNoRXZlbnQoZXZlbnQpKTsKLSAgICBldmVudC0+YWNjZXB0KCk7
Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIGV2LT5pZ25vcmUoKTsKLSNl
bmRpZgotfQotCi12b2lkIFF0VG91Y2hXZWJQYWdlUHJveHk6OmZpbmRab29tYWJsZUFyZWFGb3JQ
b2ludChjb25zdCBRUG9pbnQmIHBvaW50KQotewotICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9v
bWFibGVBcmVhRm9yUG9pbnQocG9pbnQpOwotfQotCi12b2lkIFF0VG91Y2hXZWJQYWdlUHJveHk6
OnJlbmRlck5leHRGcmFtZSgpCi17Ci19CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRUb3VjaFdlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDk5NDMxKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hXZWJQYWdlUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBR
dFRvdWNoV2ViUGFnZVByb3h5X2gKLSNkZWZpbmUgUXRUb3VjaFdlYlBhZ2VQcm94eV9oCi0KLQot
I2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJRdFBhbkdlc3R1cmVSZWNv
Z25pemVyLmgiCi0jaW5jbHVkZSAiUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgiCi0jaW5jbHVk
ZSAiUXRUb3VjaFZpZXdJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgot
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3Mg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOwotfQotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwotCi1jbGFzcyBRdFRvdWNoV2ViUGFnZVByb3h5IDogcHVibGljIFF0V2ViUGFnZVByb3h5IHsK
LXB1YmxpYzoKLSAgICBRdFRvdWNoV2ViUGFnZVByb3h5KFF0VG91Y2hWaWV3SW50ZXJmYWNlKiwg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
RXZlbnQoUUV2ZW50Kik7Ci0KLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxl
KGNvbnN0IFFSZWN0RiYsIGZsb2F0KTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgUVBvaW50RiYpOwotICAgIHZvaWQgZmluZFpvb21hYmxlQXJl
YUZvclBvaW50KGNvbnN0IFFQb2ludCYpOwotICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0g
ICAgdm9pZCByZW5kZXJUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50KFFQYWludGVyKiwgY29uc3QgUVJlY3QmIGFyZWEpOwotCi1wcml2YXRlOgotICAg
IHZpcnR1YWwgUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVBy
b3h5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpOwotI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCi0gICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBO
YXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpOwotI2VuZGlmCi0KLSAg
ICBRdFRvdWNoVmlld0ludGVyZmFjZSogdG91Y2hWaWV3SW50ZXJmYWNlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8UXRUb3VjaFZpZXdJbnRlcmZhY2UqPihtX3ZpZXdJbnRlcmZhY2UpOyB9
Ci0KLSAgICB2b2lkIHRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqKTsKLQotICAgIFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZSogbV9pbnRlcmFjdGlvbkVuZ2luZTsKLSAgICBRdFBhbkdlc3R1cmVS
ZWNvZ25pemVyIG1fcGFuR2VzdHVyZVJlY29nbml6ZXI7Ci0gICAgUXRQaW5jaEdlc3R1cmVSZWNv
Z25pemVyIG1fcGluY2hHZXN0dXJlUmVjb2duaXplcjsKLX07Ci0KLSNlbmRpZiAvLyBRdFRvdWNo
V2ViUGFnZVByb3h5X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gOTk0MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNSArMjks
MTkgQEAKIAogI2luY2x1ZGUgIkNsaWVudEltcGwuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5
LmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKICNpbmNsdWRlICJxd2toaXN0
b3J5LmgiCiAjaW5jbHVkZSAicXdraGlzdG9yeV9wLmgiCiAjaW5jbHVkZSAiRmluZEluZGljYXRv
ci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNdXRhYmxlQXJy
YXkuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTmF0
aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlF0UG9saWN5SW50ZXJmYWNlLmgi
CiAjaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lLmgiCiAjaW5jbHVkZSAiUXRXZWJVbmRvQ29tbWFuZC5oIgogI2luY2x1ZGUg
IldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKQEAgLTU4LDYg
KzYyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLRnJhbWUuaD4KICNp
bmNsdWRlIDxXZWJLaXQyL1dLUGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFp
blB0ci5oPgpAQCAtODAsNiArODUsMjAgQEAgUGFzc1JlZlB0cjxXZWJDb250ZXh0PiBRdFdlYlBh
Z2VQcm94eTo6ZAogICAgIHJldHVybiBzX2RlZmF1bHRDb250ZXh0OwogfQogCitzdGF0aWMgaW5s
aW5lIFF0OjpEcm9wQWN0aW9uIGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb24odW5zaWduZWQgZHJh
Z09wZXJhdGlvbikKK3sKKyAgICBRdDo6RHJvcEFjdGlvbiByZXN1bHQgPSBRdDo6SWdub3JlQWN0
aW9uOworICAgIGlmIChkcmFnT3BlcmF0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCisgICAgICAg
IHJlc3VsdCA9IFF0OjpDb3B5QWN0aW9uOworICAgIGVsc2UgaWYgKGRyYWdPcGVyYXRpb24gJiBE
cmFnT3BlcmF0aW9uTW92ZSkKKyAgICAgICAgcmVzdWx0ID0gUXQ6Ok1vdmVBY3Rpb247CisgICAg
ZWxzZSBpZiAoZHJhZ09wZXJhdGlvbiAmIERyYWdPcGVyYXRpb25HZW5lcmljKQorICAgICAgICBy
ZXN1bHQgPSBRdDo6TW92ZUFjdGlvbjsKKyAgICBlbHNlIGlmIChkcmFnT3BlcmF0aW9uICYgRHJh
Z09wZXJhdGlvbkxpbmspCisgICAgICAgIHJlc3VsdCA9IFF0OjpMaW5rQWN0aW9uOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgUXQ6OkRyb3BBY3Rpb25zIGRyYWdPcGVy
YXRpb25Ub0Ryb3BBY3Rpb25zKHVuc2lnbmVkIGRyYWdPcGVyYXRpb25zKQogewogICAgIFF0OjpE
cm9wQWN0aW9ucyByZXN1bHQgPSBRdDo6SWdub3JlQWN0aW9uOwpAQCAtMTA4LDggKzEyNywxMSBA
QCBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIGRyb3BBY3Rpb25Ub0RyYWdPCiAgICAgcmV0dXJuIChE
cmFnT3BlcmF0aW9uKXJlc3VsdDsKIH0KIAotUXRXZWJQYWdlUHJveHk6OlF0V2ViUGFnZVByb3h5
KFF0Vmlld0ludGVyZmFjZSogdmlld0ludGVyZmFjZSwgUXRQb2xpY3lJbnRlcmZhY2UqIHBvbGlj
eUludGVyZmFjZSwgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZikKK1F0V2ViUGFnZVByb3h5OjpRdFdlYlBhZ2VQcm94eShRdFZpZXdJbnRlcmZhY2Uq
IHZpZXdJbnRlcmZhY2UsIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogdmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZSwgUXRQb2xpY3lJbnRlcmZhY2UqIHBvbGljeUludGVyZmFjZSwgV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKICAgICA6IG1f
dmlld0ludGVyZmFjZSh2aWV3SW50ZXJmYWNlKQorICAgICwgbV9pbnRlcmFjdGlvbkVuZ2luZSh2
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKQorICAgICwgbV9wYW5HZXN0dXJlUmVjb2duaXplcih2
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKQorICAgICwgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVy
KHZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCiAgICAgLCBtX3BvbGljeUludGVyZmFjZShwb2xp
Y3lJbnRlcmZhY2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dFJlZiA/IHRvSW1wbChjb250ZXh0
UmVmKSA6IGRlZmF1bHRXS0NvbnRleHQoKSkKICAgICAsIG1fdW5kb1N0YWNrKGFkb3B0UHRyKG5l
dyBRVW5kb1N0YWNrKHRoaXMpKSkKQEAgLTE1Miw2ICsxNzQsMjkgQEAgUXRXZWJQYWdlUHJveHk6
On5RdFdlYlBhZ2VQcm94eSgpCiBib29sIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVFdmVudChRRXZl
bnQqIGV2KQogewogICAgIHN3aXRjaCAoZXYtPnR5cGUoKSkgeworICAgIGNhc2UgUUV2ZW50OjpN
b3VzZU1vdmU6CisgICAgICAgIHJldHVybiBoYW5kbGVNb3VzZU1vdmVFdmVudChyZWludGVycHJl
dF9jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25Q
cmVzczoKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1vdXNlUHJlc3NFdmVudChyZWludGVycHJldF9j
YXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25SZWxl
YXNlOgorICAgICAgICByZXR1cm4gaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQocmVpbnRlcnByZXRf
Y2FzdDxRTW91c2VFdmVudCo+KGV2KSk7CisgICAgY2FzZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJs
Q2xpY2s6CisgICAgICAgIHJldHVybiBoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZlbnQocmVpbnRl
cnByZXRfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7CisgICAgY2FzZSBRRXZlbnQ6OldoZWVsOgor
ICAgICAgICByZXR1cm4gaGFuZGxlV2hlZWxFdmVudChyZWludGVycHJldF9jYXN0PFFXaGVlbEV2
ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6SG92ZXJMZWF2ZToKKyAgICAgICAgcmV0dXJu
IGhhbmRsZUhvdmVyTGVhdmVFdmVudChyZWludGVycHJldF9jYXN0PFFIb3ZlckV2ZW50Kj4oZXYp
KTsKKyAgICBjYXNlIFFFdmVudDo6SG92ZXJFbnRlcjogLy8gRmFsbC10aHJvdWdoLCBmb3IgV2Vi
S2l0IHRoZSBkaXN0aW5jdGlvbiBkb2Vzbid0IG1hdHRlci4KKyAgICBjYXNlIFFFdmVudDo6SG92
ZXJNb3ZlOgorICAgICAgICByZXR1cm4gaGFuZGxlSG92ZXJNb3ZlRXZlbnQocmVpbnRlcnByZXRf
Y2FzdDxRSG92ZXJFdmVudCo+KGV2KSk7CisgICAgY2FzZSBRRXZlbnQ6OkRyYWdFbnRlcjoKKyAg
ICAgICAgcmV0dXJuIGhhbmRsZURyYWdFbnRlckV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8UURyYWdF
bnRlckV2ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6RHJhZ0xlYXZlOgorICAgICAgICBy
ZXR1cm4gaGFuZGxlRHJhZ0xlYXZlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRRHJhZ0xlYXZlRXZl
bnQqPihldikpOworICAgIGNhc2UgUUV2ZW50OjpEcmFnTW92ZToKKyAgICAgICAgcmV0dXJuIGhh
bmRsZURyYWdNb3ZlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRRHJhZ01vdmVFdmVudCo+KGV2KSk7
CisgICAgY2FzZSBRRXZlbnQ6OkRyb3A6CisgICAgICAgIHJldHVybiBoYW5kbGVEcm9wRXZlbnQo
cmVpbnRlcnByZXRfY2FzdDxRRHJvcEV2ZW50Kj4oZXYpKTsKICAgICBjYXNlIFFFdmVudDo6S2V5
UHJlc3M6CiAgICAgICAgIHJldHVybiBoYW5kbGVLZXlQcmVzc0V2ZW50KHJlaW50ZXJwcmV0X2Nh
c3Q8UUtleUV2ZW50Kj4oZXYpKTsKICAgICBjYXNlIFFFdmVudDo6S2V5UmVsZWFzZToKQEAgLTE2
MCwxMiArMjA1LDE0NCBAQCBib29sIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVFdmVudChRRXZlbnQq
CiAgICAgICAgIHJldHVybiBoYW5kbGVGb2N1c0luRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRRm9j
dXNFdmVudCo+KGV2KSk7CiAgICAgY2FzZSBRRXZlbnQ6OkZvY3VzT3V0OgogICAgICAgICByZXR1
cm4gaGFuZGxlRm9jdXNPdXRFdmVudChyZWludGVycHJldF9jYXN0PFFGb2N1c0V2ZW50Kj4oZXYp
KTsKKyAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKKyAgICBjYXNlIFFFdmVudDo6VG91Y2hF
bmQ6CisgICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgorICAgICAgICB0b3VjaEV2ZW50KHN0
YXRpY19jYXN0PFFUb3VjaEV2ZW50Kj4oZXYpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgLy8gRklYTUU6IE1vdmUgYWxsIGNvbW1vbiBldmVudCBoYW5kbGluZyBoZXJlLgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBRdFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VN
b3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQoreworICAgIC8vIEZvciBzb21lIHJlYXNvbiBtb3Vz
ZSBwcmVzcyByZXN1bHRzIGluIG1vdXNlIGhvdmVyICh3aGljaCBpcworICAgIC8vIGNvbnZlcnRl
ZCB0byBtb3VzZSBtb3ZlIGZvciBXZWJLaXQpLiBXZSBpZ25vcmUgdGhlc2UgaG92ZXIKKyAgICAv
LyBldmVudHMgYnkgY29tcGFyaW5nIGxhc3RQb3Mgd2l0aCBuZXdQb3MuCisgICAgLy8gTk9URTog
bGFzdFBvcyBmcm9tIHRoZSBldmVudCBhbHdheXMgY29tZXMgZW1wdHksIHNvIHdlIHdvcmsKKyAg
ICAvLyBhcm91bmQgdGhhdCBoZXJlLgorICAgIHN0YXRpYyBRUG9pbnRGIGxhc3RQb3MgPSBRUG9p
bnRGKCk7CisgICAgaWYgKGxhc3RQb3MgPT0gZXYtPnBvcygpKQorICAgICAgICByZXR1cm4gZXYt
PmlzQWNjZXB0ZWQoKTsKKyAgICBsYXN0UG9zID0gZXYtPnBvcygpOworCisgICAgbV93ZWJQYWdl
UHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChldiwgLypldmVudENs
aWNrQ291bnQ9Ki8wKSk7CisKKyAgICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsKK30KKworYm9v
bCBRdFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBldikK
K3sKKyAgICBpZiAobV90cmlwbGVDbGlja1RpbWVyLmlzQWN0aXZlKCkgJiYgKGV2LT5wb3MoKSAt
IG1fdHJpcGxlQ2xpY2spLm1hbmhhdHRhbkxlbmd0aCgpIDwgUUFwcGxpY2F0aW9uOjpzdGFydERy
YWdEaXN0YW5jZSgpKSB7CisgICAgICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50
KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMykpOworICAgICAg
ICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsKKyAgICB9CisKKyAgICBtX3dlYlBhZ2VQcm94eS0+
aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KGV2LCAvKmV2ZW50Q2xpY2tDb3Vu
dD0qLzEpKTsKKyAgICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsKK30KKworYm9vbCBRdFdlYlBh
Z2VQcm94eTo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQoreworICAg
IG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZXYs
IC8qZXZlbnRDbGlja0NvdW50PSovMCkpOworICAgIHJldHVybiBldi0+aXNBY2NlcHRlZCgpOwor
fQorCitib29sIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1v
dXNlRXZlbnQqIGV2KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5h
dGl2ZVdlYk1vdXNlRXZlbnQoZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMikpOworCisgICAgbV90
cmlwbGVDbGlja1RpbWVyLnN0YXJ0KFFBcHBsaWNhdGlvbjo6ZG91YmxlQ2xpY2tJbnRlcnZhbCgp
LCB0aGlzKTsKKyAgICBtX3RyaXBsZUNsaWNrID0gZXYtPmxvY2FsUG9zKCkudG9Qb2ludCgpOwor
ICAgIHJldHVybiBldi0+aXNBY2NlcHRlZCgpOworfQorCitib29sIFF0V2ViUGFnZVByb3h5Ojpo
YW5kbGVXaGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBldikKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+
aGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KGV2KSk7CisgICAgcmV0dXJuIGV2
LT5pc0FjY2VwdGVkKCk7Cit9CisKK2Jvb2wgUXRXZWJQYWdlUHJveHk6OmhhbmRsZUhvdmVyTGVh
dmVFdmVudChRSG92ZXJFdmVudCogZXYpCit7CisgICAgLy8gVG8gZ2V0IHRoZSBjb3JyZWN0IGJl
aGF2aW9yIG9mIG1vdXNlb3V0LCB3ZSBuZWVkIHRvIHR1cm4gdGhlIExlYXZlIGV2ZW50IG9mIG91
ciB3ZWJ2aWV3IGludG8gYSBtb3VzZSBtb3ZlCisgICAgLy8gdG8gYSB2ZXJ5IGZhciByZWdpb24u
CisgICAgUUhvdmVyRXZlbnQgZmFrZUV2ZW50KFFFdmVudDo6SG92ZXJNb3ZlLCBRUG9pbnQoSU5U
X01JTiwgSU5UX01JTiksIGV2LT5vbGRQb3MoKSk7CisgICAgcmV0dXJuIGhhbmRsZUhvdmVyTW92
ZUV2ZW50KCZmYWtlRXZlbnQpOworfQorCitib29sIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVIb3Zl
ck1vdmVFdmVudChRSG92ZXJFdmVudCogZXYpCit7CisgICAgUU1vdXNlRXZlbnQgbWUoUUV2ZW50
OjpNb3VzZU1vdmUsIGV2LT5wb3MoKSwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9CdXR0b24sIFF0OjpO
b01vZGlmaWVyKTsKKyAgICBtZS5zZXRBY2NlcHRlZChldi0+aXNBY2NlcHRlZCgpKTsKKworICAg
IHJldHVybiBoYW5kbGVNb3VzZU1vdmVFdmVudCgmbWUpOworfQorCitib29sIFF0V2ViUGFnZVBy
b3h5OjpoYW5kbGVEcmFnRW50ZXJFdmVudChRRHJhZ0VudGVyRXZlbnQqIGV2KQoreworICAgIG1f
d2ViUGFnZVByb3h5LT5yZXNldERyYWdPcGVyYXRpb24oKTsKKyAgICAvLyBGSVhNRTogU2hvdWxk
IG5vdCB1c2UgUUN1cnNvcjo6cG9zKCkKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShldi0+bWltZURh
dGEoKSwgZXYtPnBvcygpLCBRQ3Vyc29yOjpwb3MoKSwgZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlv
bihldi0+cG9zc2libGVBY3Rpb25zKCkpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhZ0VudGVy
ZWQoJmRyYWdEYXRhKTsKKyAgICBldi0+YWNjZXB0UHJvcG9zZWRBY3Rpb24oKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBRdFdlYlBhZ2VQcm94eTo6aGFuZGxlRHJhZ0xlYXZlRXZlbnQo
UURyYWdMZWF2ZUV2ZW50KiBldikKK3sKKyAgICBib29sIGFjY2VwdGVkID0gZXYtPmlzQWNjZXB0
ZWQoKTsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBRQ3Vyc29yOjpwb3MoKQorICAg
IERyYWdEYXRhIGRyYWdEYXRhKDAsIEludFBvaW50KCksIFFDdXJzb3I6OnBvcygpLCBEcmFnT3Bl
cmF0aW9uTm9uZSk7CisgICAgbV93ZWJQYWdlUHJveHktPmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsK
KyAgICBtX3dlYlBhZ2VQcm94eS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7CisKKyAgICBldi0+c2V0
QWNjZXB0ZWQoYWNjZXB0ZWQpOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKworYm9vbCBRdFdl
YlBhZ2VQcm94eTo6aGFuZGxlRHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVudCogZXYpCit7Cisg
ICAgYm9vbCBhY2NlcHRlZCA9IGV2LT5pc0FjY2VwdGVkKCk7CisKKyAgICAvLyBGSVhNRTogU2hv
dWxkIG5vdCB1c2UgUUN1cnNvcjo6cG9zKCkKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShldi0+bWlt
ZURhdGEoKSwgZXYtPnBvcygpLCBRQ3Vyc29yOjpwb3MoKSwgZHJvcEFjdGlvblRvRHJhZ09wZXJh
dGlvbihldi0+cG9zc2libGVBY3Rpb25zKCkpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhZ1Vw
ZGF0ZWQoJmRyYWdEYXRhKTsKKyAgICBldi0+c2V0RHJvcEFjdGlvbihkcmFnT3BlcmF0aW9uVG9E
cm9wQWN0aW9uKG1fd2ViUGFnZVByb3h5LT5kcmFnU2Vzc2lvbigpLm9wZXJhdGlvbikpOworICAg
IGlmIChtX3dlYlBhZ2VQcm94eS0+ZHJhZ1Nlc3Npb24oKS5vcGVyYXRpb24gIT0gRHJhZ09wZXJh
dGlvbk5vbmUpCisgICAgICAgIGV2LT5hY2NlcHQoKTsKKworICAgIGV2LT5zZXRBY2NlcHRlZChh
Y2NlcHRlZCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCitib29sIFF0V2ViUGFnZVByb3h5
OjpoYW5kbGVEcm9wRXZlbnQoUURyb3BFdmVudCogZXYpCit7CisgICAgYm9vbCBhY2NlcHRlZCA9
IGV2LT5pc0FjY2VwdGVkKCk7CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIG5vdCB1c2UgUUN1cnNv
cjo6cG9zKCkKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShldi0+bWltZURhdGEoKSwgZXYtPnBvcygp
LCBRQ3Vyc29yOjpwb3MoKSwgZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlvbihldi0+cG9zc2libGVB
Y3Rpb25zKCkpKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIG1f
d2ViUGFnZVByb3h5LT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEsIFN0cmluZygpLCBoYW5kbGUpOwor
ICAgIGV2LT5zZXREcm9wQWN0aW9uKGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb24obV93ZWJQYWdl
UHJveHktPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uKSk7CisgICAgZXYtPmFjY2VwdCgpOworCisg
ICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisK
K3ZvaWQgUXRXZWJQYWdlUHJveHk6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2KQoreworICAg
IGludCB0aW1lcklkID0gZXYtPnRpbWVySWQoKTsKKyAgICBpZiAodGltZXJJZCA9PSBtX3RyaXBs
ZUNsaWNrVGltZXIudGltZXJJZCgpKQorICAgICAgICBtX3RyaXBsZUNsaWNrVGltZXIuc3RvcCgp
OworICAgIGVsc2UKKyAgICAgICAgUU9iamVjdDo6dGltZXJFdmVudChldik7Cit9CisKIGJvb2wg
UXRXZWJQYWdlUHJveHk6OmhhbmRsZUtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldikKIHsKICAg
ICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2
ZW50KGV2KSk7CkBAIC00NzIsNiArNjQ5LDggQEAgdm9pZCBRdFdlYlBhZ2VQcm94eTo6ZGlkUmVs
YXVuY2hQcm9jZXNzKAogdm9pZCBRdFdlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZENyYXNoKCkKIHsK
ICAgICB1cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTsKKyAgICBtX3Bhbkdlc3R1cmVSZWNvZ25pemVy
LnJlc2V0KCk7CisgICAgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CiAgICAgbV92
aWV3SW50ZXJmYWNlLT5wcm9jZXNzRGlkQ3Jhc2goKTsKIH0KIApAQCAtNjIxLDQgKzgwMCw5NiBA
QCB2b2lkIFF0V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRG93bmxvYWRSCiAgICAgbV92aWV3SW50
ZXJmYWNlLT5kb3dubG9hZFJlcXVlc3RlZChkb3dubG9hZCk7CiB9CiAKK3ZvaWQgUXRXZWJQYWdl
UHJveHk6OnBhaW50Q29udGVudChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIGFyZWEp
Cit7CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSB1bnBhaW50ZWQgcmVnaW9u
PworICAgIFdlYkNvcmU6OlJlZ2lvbiB1bnBhaW50ZWRSZWdpb247CisgICAgc3RhdGljX2Nhc3Q8
RHJhd2luZ0FyZWFQcm94eUltcGwqPihtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSktPnBh
aW50KHBhaW50ZXIsIGFyZWEsIHVucGFpbnRlZFJlZ2lvbik7Cit9CisKK1Bhc3NPd25QdHI8RHJh
d2luZ0FyZWFQcm94eT4gUXRXZWJQYWdlUHJveHk6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQor
eworICAgIHJldHVybiBEcmF3aW5nQXJlYVByb3h5SW1wbDo6Y3JlYXRlKG1fd2ViUGFnZVByb3h5
LmdldCgpKTsKK30KKwordm9pZCBRdFdlYlBhZ2VQcm94eTo6cmVuZGVyVG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkp
Cit7CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3dlYlBhZ2VQcm94eS0+
ZHJhd2luZ0FyZWEoKTsKKyAgICBpZiAoZHJhd2luZ0FyZWEpCisgICAgICAgIGRyYXdpbmdBcmVh
LT5wYWludFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOworfQorCisjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKK3ZvaWQgUXRXZWJQYWdlUHJveHk6OmRvbmVXaXRoVG91Y2hF
dmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwgYm9vbCB3YXNFdmVudEhhbmRs
ZWQpCit7CisgICAgaWYgKHdhc0V2ZW50SGFuZGxlZCB8fCBldmVudC50eXBlKCkgPT0gV2ViRXZl
bnQ6OlRvdWNoQ2FuY2VsKSB7CisgICAgICAgIG1fcGFuR2VzdHVyZVJlY29nbml6ZXIucmVzZXQo
KTsKKyAgICAgICAgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjb25zdCBRVG91Y2hFdmVudCogZXYgPSBldmVudC5uYXRpdmVF
dmVudCgpOworCisgICAgc3dpdGNoIChldi0+dHlwZSgpKSB7CisgICAgY2FzZSBRRXZlbnQ6OlRv
dWNoQmVnaW46CisgICAgICAgIEFTU0VSVCghbV9pbnRlcmFjdGlvbkVuZ2luZS0+cGFuR2VzdHVy
ZUFjdGl2ZSgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2ludGVyYWN0aW9uRW5naW5lLT5waW5jaEdl
c3R1cmVBY3RpdmUoKSk7CisKKyAgICAgICAgLy8gVGhlIGludGVyYWN0aW9uIGVuZ2luZSBtaWdo
dCBzdGlsbCBiZSBhbmltYXRpbmcga2luZXRpYyBzY3JvbGxpbmcgb3IgYSBzY2FsZSBhbmltYXRp
b24KKyAgICAgICAgLy8gc3VjaCBhcyBkb3VibGUtdGFwIHRvIHpvb20gb3IgdGhlIGJvdW5jZSBi
YWNrIGVmZmVjdC4gQSB0b3VjaCBzdG9wcyB0aGUga2luZXRpYyBzY3JvbGxpbmcKKyAgICAgICAg
Ly8gd2hlcmUgYXMgaXQgZG9lcyBub3Qgc3RvcCB0aGUgc2NhbGUgYW5pbWF0aW9uLgorICAgICAg
ICBpZiAobV9pbnRlcmFjdGlvbkVuZ2luZS0+c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCisgICAg
ICAgICAgICBtX2ludGVyYWN0aW9uRW5naW5lLT5pbnRlcnJ1cHRTY3JvbGxBbmltYXRpb24oKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgorICAgICAgICAv
LyBUaGUgc2NhbGUgYW5pbWF0aW9uIGNhbiBvbmx5IGJlIGludGVycnVwdGVkIGJ5IGEgcGluY2gg
Z2VzdHVyZSwgd2hpY2ggd2lsbCB0aGVuIHRha2Ugb3Zlci4KKyAgICAgICAgaWYgKG1faW50ZXJh
Y3Rpb25FbmdpbmUtPnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgJiYgbV9waW5jaEdlc3R1cmVSZWNv
Z25pemVyLmlzUmVjb2duaXplZCgpKQorICAgICAgICAgICAgbV9pbnRlcmFjdGlvbkVuZ2luZS0+
aW50ZXJydXB0U2NhbGVBbmltYXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gSWYgdGhlIHNjYWxlIGFuaW1hdGlvbiBp
cyBhY3RpdmUgd2UgZG9uJ3QgcGFzcyB0aGUgZXZlbnQgdG8gdGhlIHJlY29nbml6ZXJzLiBJbiB0
aGUgZnV0dXJlCisgICAgLy8gd2Ugd291bGQgd2FudCB0byBxdWV1ZSB0aGUgZXZlbnQgaGVyZSBh
bmQgcmVwb3N0IHRoZW4gd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMuCisgICAgaWYgKG1faW50ZXJh
Y3Rpb25FbmdpbmUtPnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIENvbnZlcnQgdGhlIGV2ZW50IHRpbWVzdGFtcCBmcm9tIHNlY29uZCB0byBtaWxsaXNl
Y29uZC4KKyAgICBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMgPSBzdGF0aWNfY2FzdDxxaW50
NjQ+KGV2ZW50LnRpbWVzdGFtcCgpICogMTAwMCk7CisgICAgbV9wYW5HZXN0dXJlUmVjb2duaXpl
ci5yZWNvZ25pemUoZXYsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBtX3BpbmNoR2VzdHVy
ZVJlY29nbml6ZXIucmVjb2duaXplKGV2KTsKK30KKyNlbmRpZgorCit2b2lkIFF0V2ViUGFnZVBy
b3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShjb25zdCBRUmVjdEYmIHZpc2libGVD
b250ZW50UmVjdCwgZmxvYXQgc2NhbGUpCit7CisgICAgUVJlY3QgYWxpZ25lZFZpc2libGVDb250
ZW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdC50b0FsaWduZWRSZWN0KCk7CisgICAgbV93ZWJQ
YWdlUHJveHktPmRyYXdpbmdBcmVhKCktPnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShh
bGlnbmVkVmlzaWJsZUNvbnRlbnRSZWN0LCBzY2FsZSk7CisKKyAgICAvLyBGSVhNRTogT25jZSB3
ZSBzdXBwb3J0IHN1c3BlbmQgYW5kIHJlc3VtZSwgdGhpcyBzaG91bGQgYmUgZGVsYXllZCB1bnRp
bCB0aGUgcGFnZSBpcyBhY3RpdmUgaWYgdGhlIHBhZ2UgaXMgc3VzcGVuZGVkLgorICAgIG1fd2Vi
UGFnZVByb3h5LT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChhbGlnbmVkVmlzaWJsZUNvbnRl
bnRSZWN0KTsKK30KKwordm9pZCBRdFdlYlBhZ2VQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0
VHJhamVjdG9yeVZlY3Rvcihjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAg
IG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFq
ZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworfQorCit2b2lkIFF0V2ViUGFnZVByb3h5
Ojp0b3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVudCkKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQorICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVUb3VjaEV2ZW50KE5hdGl2ZVdlYlRvdWNo
RXZlbnQoZXZlbnQpKTsKKyAgICBldmVudC0+YWNjZXB0KCk7CisjZWxzZQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIGV2LT5pZ25vcmUoKTsKKyNlbmRpZgorfQorCit2b2lkIFF0V2Vi
UGFnZVByb3h5OjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgUVBvaW50JiBwb2ludCkK
K3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KHBvaW50KTsK
K30KKwogI2luY2x1ZGUgIm1vY19RdFdlYlBhZ2VQcm94eS5jcHAiCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAkocmV2aXNpb24gOTk0MzEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMjEsOSArMjEsMTIgQEAKICNpZm5kZWYgUXRXZWJQYWdlUHJveHlfaAogI2RlZmlu
ZSBRdFdlYlBhZ2VQcm94eV9oCiAKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5j
bHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKICNpbmNs
dWRlICJRdERvd25sb2FkTWFuYWdlci5oIgorI2luY2x1ZGUgIlF0UGFuR2VzdHVyZVJlY29nbml6
ZXIuaCIKKyNpbmNsdWRlICJRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaCIKICNpbmNsdWRlICJR
dFBvbGljeUludGVyZmFjZS5oIgogI2luY2x1ZGUgIlF0Vmlld0ludGVyZmFjZS5oIgogI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgpAQCAtNjgsOSArNzEsMTEgQEAgcHVibGljOgogICAgICAg
ICBXZWJBY3Rpb25Db3VudAogICAgIH07CiAKLSAgICBRdFdlYlBhZ2VQcm94eShXZWJLaXQ6OlF0
Vmlld0ludGVyZmFjZSosIFdlYktpdDo6UXRQb2xpY3lJbnRlcmZhY2UqID0gMCwgV0tDb250ZXh0
UmVmID0gMCwgV0tQYWdlR3JvdXBSZWYgPSAwKTsKKyAgICBRdFdlYlBhZ2VQcm94eShXZWJLaXQ6
OlF0Vmlld0ludGVyZmFjZSosIFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiA9
IDAsIFdlYktpdDo6UXRQb2xpY3lJbnRlcmZhY2UqID0gMCwgV0tDb250ZXh0UmVmID0gMCwgV0tQ
YWdlR3JvdXBSZWYgPSAwKTsKICAgICB+UXRXZWJQYWdlUHJveHkoKTsKIAorICAgIHZpcnR1YWwg
UGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7CisK
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoUUV2ZW50Kik7CiAKICAgICAvLyBQYWdlQ2xp
ZW50CkBAIC0xNzYsMTAgKzE4MSwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQYWdlWm9vbUZh
Y3RvcihxcmVhbCB6b29tRmFjdG9yKTsKICAgICB2b2lkIHNldFBhZ2VBbmRUZXh0Wm9vbUZhY3Rv
cnMocXJlYWwgcGFnZVpvb21GYWN0b3IsIHFyZWFsIHRleHRab29tRmFjdG9yKTsKIAorICAgIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUoY29uc3QgUVJlY3RGJiwgZmxvYXQpOwor
ICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBRUG9p
bnRGJik7CisgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgUVBvaW50Jik7
CisgICAgdm9pZCByZW5kZXJUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCk7CisKICAgICBRV0tIaXN0b3J5KiBoaXN0b3J5KCkgY29u
c3Q7CiAgICAgUXRWaWV3SW50ZXJmYWNlKiB2aWV3SW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4g
bV92aWV3SW50ZXJmYWNlOyB9CiAKICAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3du
bG9hZFByb3h5Kik7CisgICAgdm9pZCBpbml0KCk7CiAKIHB1YmxpYyBRX1NMT1RTOgogICAgIHZv
aWQgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZCgpOwpAQCAtMTkxLDExICsyMDIsMTIgQEAgcHVibGlj
OgogICAgIFFfU0lHTkFMIHZvaWQgcmVjZWl2ZWRNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0
KGNvbnN0IFFWYXJpYW50TWFwJik7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGluaXQoKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFS
ZWN0JiBhcmVhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudChRUGFpbnRlciog
cGFpbnRlciwgY29uc3QgUVJlY3QmIGFyZWEpOwogICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQ
cm94eT4gbV93ZWJQYWdlUHJveHk7CiAgICAgV2ViS2l0OjpRdFZpZXdJbnRlcmZhY2UqIGNvbnN0
IG1fdmlld0ludGVyZmFjZTsKKyAgICBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIG1faW50
ZXJhY3Rpb25FbmdpbmU7CisgICAgUXRQYW5HZXN0dXJlUmVjb2duaXplciBtX3Bhbkdlc3R1cmVS
ZWNvZ25pemVyOworICAgIFF0UGluY2hHZXN0dXJlUmVjb2duaXplciBtX3BpbmNoR2VzdHVyZVJl
Y29nbml6ZXI7CiAgICAgV2ViS2l0OjpRdFBvbGljeUludGVyZmFjZSogY29uc3QgbV9wb2xpY3lJ
bnRlcmZhY2U7CiAKIHByaXZhdGU6CkBAIC0yMDMsNiArMjE1LDI1IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBoYW5kbGVLZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50Kik7CiAgICAgYm9vbCBoYW5kbGVG
b2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqKTsKICAgICBib29sIGhhbmRsZUZvY3VzT3V0RXZlbnQo
UUZvY3VzRXZlbnQqKTsKKyAgICBib29sIGhhbmRsZU1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50
Kik7CisgICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICBi
b29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgYm9vbCBoYW5k
bGVNb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsKKyAgICBib29sIGhhbmRsZUhvdmVyTGVhdmVFdmVudChR
SG92ZXJFdmVudCopOworICAgIGJvb2wgaGFuZGxlSG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQq
KTsKKyAgICBib29sIGhhbmRsZURyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCopOworICAg
IGJvb2wgaGFuZGxlRHJhZ0xlYXZlRXZlbnQoUURyYWdMZWF2ZUV2ZW50Kik7CisgICAgYm9vbCBo
YW5kbGVEcmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50Kik7CisgICAgYm9vbCBoYW5kbGVEcm9w
RXZlbnQoUURyb3BFdmVudCopOworCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRXZlbnQoUVRpbWVy
RXZlbnQqKTsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGRv
bmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVu
dEhhbmRsZWQpOworI2VuZGlmCisKKyAgICB2b2lkIHRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqKTsK
IAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHQ+IGRlZmF1bHRXS0NvbnRleHQoKTsK
ICAgICBzdGF0aWMgUmVmUHRyPFdlYkNvbnRleHQ+IHNfZGVmYXVsdENvbnRleHQ7CkBAIC0yMTgs
NiArMjQ5LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9sb2FkUHJvZ3Jlc3M7CiAKICAgICBib29s
IG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkOworICAgIFFQb2ludCBtX3RyaXBsZUNsaWNrOwor
ICAgIFFCYXNpY1RpbWVyIG1fdHJpcGxlQ2xpY2tUaW1lcjsKIH07CiAKICNlbmRpZiAvKiBRdFdl
YlBhZ2VQcm94eV9oICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114177</attachid>
            <date>2011-11-08 16:51:15 -0800</date>
            <delta_ts>2011-11-09 15:22:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71355-20111108215106.patch</filename>
            <type>text/plain</type>
            <size>120970</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk1NDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMzliM2Q2NmI1OWJm
NDRlOWJlNTc4YzE3MzgwM2YxMDg5N2ZjMGNjNi4uZjBlOWJlZjYxMTYzMWNiOWE3ZWI0OWQxZDc0
NWM0ZjRhOWFkODhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMS0w
OCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdIE1lcmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEz
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgdGhlIFFNTCBwbHVnaW4gdG8gdXNlIHRoZSBuZXcgY29tbW9uIGNsYXNzLgorCisgICAgICAg
ICogZGVjbGFyYXRpdmUvcGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdFFtbFBsdWdpbjo6cmVn
aXN0ZXJUeXBlcyk6CisKIDIwMTEtMTEtMDggIEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5p
QHBhbG0uY29tPgogCiAgICAgICAgIFtRdF0gUmVtb3ZpbmcgcXdlYmtpdGdsb2JhbC5oIGluY2x1
c2lvbiBmcm9tIHF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjFjYjBlNThm
MWNhMDMxNjVjOWY1ZWZiN2UwZGI4M2Y4OTljOTk3OC4uOTBkMjhhNGJiMWVkYzcxZjYzNmI3Njg3
NTk1N2Y1M2YwN2FmNmUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEyNSBAQAogMjAxMS0xMS0w
OCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAorICAgICAg
ICBbUXRdIE1lcmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEz
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNZXJn
ZSBRVG91Y2hXZWJWaWV3IGFuZCBRRGVza3RvcFdlYlZpZXcgaW50byBvbmUgY2xhc3MgY2FsbGVk
CisgICAgICAgIFFRdWlja1dlYlZpZXcgYW5kIGl0cyBhdHRhY2hlZCBwYWdlIFFRdWlja1dlYlBh
Z2UuIFlvdSBjYW4gYXQKKyAgICAgICAgcnVudGltZSBzd2l0Y2ggdG8gYSB0b3VjaCBvciBkZXNr
dG9wIG1vZGUuIEFsc28gbm93IG9uIGRlc2t0b3AKKyAgICAgICAgcGxhdGZvcm1zIEFDIGlzIHR1
cm4gb24gYnkgZGVmYXVsdC4gSSBhbHNvIG1lcmdlZCBvdXIgdHdvCisgICAgICAgIHN1YmNsYXNz
ZXMgb2YgUXRWaWV3SW50ZXJmYWNlIGludG8gb25lIGFzIHRoZSBzcGxpdCBkb2Vzbid0IG1ha2UK
KyAgICAgICAgdGhhdCBtdWNoIHNlbnNlIGFueW1vcmUuCisKKyAgICAgICAgKiBUYXJnZXQucHJp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcWJhc2V3ZWJ2aWV3X3AuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3FkZXNrdG9wd2Vidmlld19wLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAuCisgICAgICAgIChRUXVpY2tXZWJQYWdl
OjpRUXVpY2tXZWJQYWdlKToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmluaXRTY2VuZUdyYXBo
Q29ubmVjdGlvbnMpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6flFRdWlja1dlYlBhZ2UpOgor
ICAgICAgICAoUVF1aWNrV2ViUGFnZTo6a2V5UHJlc3NFdmVudCk6CisgICAgICAgIChRUXVpY2tX
ZWJQYWdlOjprZXlSZWxlYXNlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6aW5wdXRN
ZXRob2RFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpmb2N1c0luRXZlbnQpOgorICAg
ICAgICAoUVF1aWNrV2ViUGFnZTo6Zm9jdXNPdXRFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQ
YWdlOjptb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6bW91c2VNb3Zl
RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6bW91c2VSZWxlYXNlRXZlbnQpOgorICAg
ICAgICAoUVF1aWNrV2ViUGFnZTo6bW91c2VEb3VibGVDbGlja0V2ZW50KToKKyAgICAgICAgKFFR
dWlja1dlYlBhZ2U6OndoZWVsRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6aG92ZXJF
bnRlckV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmhvdmVyTW92ZUV2ZW50KToKKyAg
ICAgICAgKFFRdWlja1dlYlBhZ2U6OmhvdmVyTGVhdmVFdmVudCk6CisgICAgICAgIChRUXVpY2tX
ZWJQYWdlOjpkcmFnTW92ZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmRyYWdFbnRl
ckV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmRyYWdMZWF2ZUV2ZW50KToKKyAgICAg
ICAgKFFRdWlja1dlYlBhZ2U6OmRyb3BFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpn
ZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6ZXZlbnQpOgorICAgICAg
ICAoUVF1aWNrV2ViUGFnZTo6dG91Y2hFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpp
dGVtQ2hhbmdlKToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpRUXVpY2tXZWJQYWdl
UHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6c2V0UGFnZVByb3h5KToK
KyAgICAgICAgKGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KToKKyAgICAgICAgKFFRdWlja1dlYlBh
Z2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChRUXVpY2tXZWJQ
YWdlUHJpdmF0ZTo6X3Ffb25BZnRlclNjZW5lUmVuZGVyKToKKyAgICAgICAgKFFRdWlja1dlYlBh
Z2VQcml2YXRlOjpfcV9vblNjZW5lR3JhcGhJbml0aWFsaXplZCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2VfcC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRl
OjpRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
ZW5hYmxlTW91c2VFdmVudHMpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmRpc2Fi
bGVNb3VzZUV2ZW50cyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6aW5pdCk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6aW5pdERlc2t0b3ApOgorICAgICAgICAoUVF1
aWNrV2ViVmlld1ByaXZhdGU6OmluaXRUb3VjaCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJp
dmF0ZTo6bG9hZERpZENvbW1pdCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6Y29u
dGVudFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpzY3JvbGxQ
b3NpdGlvblJlcXVlc3RlZCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffdmll
d3BvcnRVcGRhdGVkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV92aWV3cG9y
dFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRl
Ojp1cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnVw
ZGF0ZVZpZXdwb3J0Q29uc3RyYWludHMpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6
OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJp
dmF0ZTo6cnVuSmF2YVNjcmlwdEFsZXJ0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRl
OjpydW5KYXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
cnVuSmF2YVNjcmlwdFByb21wdCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6Y2hv
b3NlRmlsZXMpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX29uT3BlblBhbmVs
RmlsZXNTZWxlY3RlZCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffb25PcGVu
UGFuZWxGaW5pc2hlZCk6CisgICAgICAgICh0b1BvbGljeUFjdGlvbik6CisgICAgICAgIChoYXNN
ZXRhTWV0aG9kKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpuYXZpZ2F0aW9uUG9s
aWN5Rm9yVVJMKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRQYWdlUHJveHkp
OgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6UVF1aWNrV2ViVmlldyk6CisgICAgICAgIChRUXVp
Y2tXZWJWaWV3Ojp+UVF1aWNrV2ViVmlldyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpwYWdl
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmxvYWQpOgorICAgICAgICAoUVF1aWNrV2ViVmll
dzo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6dXJsKToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXc6OmxvYWRQcm9ncmVzcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojp0
aXRsZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpuYXZpZ2F0aW9uQ29udHJvbGxlcik6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3OjpwcmVmZXJlbmNlcyk6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3OjpzZXRWaWV3TW9kZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojp2aWV3TW9kZSk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNr
V2ViVmlldzo6dG91Y2hFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpvblZpc2libGVD
aGFuZ2VkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OnBhZ2VSZWYpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oOiBBZGRlZC4KKyAgICAgICAgKFFRdWlja1dlYlZpZXdQ
cml2YXRlOjp+UVF1aWNrV2ViVmlld1ByaXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
cXQvcXRvdWNod2Vidmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xdG91Y2h3ZWJ2aWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJ2aWV3X3AuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FkZXNrdG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0
R2VzdHVyZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFBh
bkdlc3R1cmVSZWNvZ25pemVyOjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZTo6UXRUb3VjaFZpZXdJbnRlcmZhY2UpOgorICAg
ICAgICAoV2ViS2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZTo6bG9hZERpZEZhaWwpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9RdFRvdWNoVmlld0ludGVyZmFjZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpzZXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKToKKyAgICAgICAgKiBXZWJLaXQyLnByaToKKworMjAxMS0xMS0wOCAgQWxleGlz
IE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKwogICAgICAgICBbUXRdIE1l
cmdlIFF0RGVza3RvcFdlYlBhZ2VQcm94eSBhbmQgUXRUb3VjaFdlYlBhZ2VQcm94eSBpbnRvIFF0
V2ViUGFnZVByb3h5LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzEzNTUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9w
bHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCmluZGV4
IGE1MWVkYmM0ZDhjNTI5MGU4NTlmMmE0MDcyZGRmZTYyOTNkMWM0ZjIuLjJiOThiZTdiYjg5NTgz
MjIwZjE1NDM1NDg2OGU3N2Q3MGFmYjM3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvcGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZl
L3BsdWdpbi5jcHAKQEAgLTIzLDkgKzIzLDggQEAKICNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3Fk
ZWNsYXJhdGl2ZWV4dGVuc2lvbnBsdWdpbi5oPgogCiAjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIp
Ci0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3LmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZS5o
IgotI2luY2x1ZGUgInF0b3VjaHdlYnZpZXcuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlLmgi
CisjaW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgogI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0u
aCIKICNpbmNsdWRlICJxd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJxd2Vi
cHJlZmVyZW5jZXMuaCIKQEAgLTUwLDExICs0OSwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IGRlZmluZWQoSEFWRV9XRUJLSVQyKQotICAgICAgICBxbWxSZWdpc3RlclR5cGU8UURlc2t0b3BX
ZWJWaWV3Pih1cmksIDMsIDAsICJEZXNrdG9wV2ViVmlldyIpOwotICAgICAgICBxbWxSZWdpc3Rl
clR5cGU8UVRvdWNoV2ViVmlldz4odXJpLCAzLCAwLCAiVG91Y2hXZWJWaWV3Iik7CisgICAgICAg
IHFtbFJlZ2lzdGVyVHlwZTxRUXVpY2tXZWJWaWV3Pih1cmksIDMsIDAsICJXZWJWaWV3Iik7CiAg
ICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxl
cj4odXJpLCAzLCAwLCAiTmF2aWdhdGlvbkNvbnRyb2xsZXIiLCBRT2JqZWN0Ojp0cigiQ2Fubm90
IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBOYXZpZ2F0aW9uQ29udHJvbGxlciIpKTsKICAg
ICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYlByZWZlcmVuY2VzPih1cmksIDMs
IDAsICJXZWJQcmVmZXJlbmNlcyIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRl
IGluc3RhbmNlIG9mIFdlYlByZWZlcmVuY2VzIikpOwotICAgICAgICBxbWxSZWdpc3RlclVuY3Jl
YXRhYmxlVHlwZTxRVG91Y2hXZWJQYWdlPih1cmksIDMsIDAsICJUb3VjaFdlYlBhZ2UiLCBRT2Jq
ZWN0Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBUb3VjaFdlYlBhZ2Us
IHVzZSBUb3VjaFdlYlZpZXciKSk7CisgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBl
PFFRdWlja1dlYlBhZ2U+KHVyaSwgMywgMCwgIldlYlBhZ2UiLCBRT2JqZWN0Ojp0cigiQ2Fubm90
IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBXZWJQYWdlLCB1c2UgV2ViVmlldyIpKTsKICAg
ICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UU5ldHdvcmtSZXBseT4odXJpLCAzLCAw
LCAiTmV0d29ya1JlcGx5IiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5z
dGFuY2Ugb2YgTmV0d29ya1JlcGx5IikpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRhYmxl
VHlwZTxRV2ViRG93bmxvYWRJdGVtPih1cmksIDUsIDAsICJEb3dubG9hZEl0ZW0iLCBRT2JqZWN0
Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBEb3dubG9hZEl0ZW0iKSk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDMzYjhhNGQ3NTZhZWJjOGEyYjM5NWNjNjZhZGIwODI2
YWIzMjViNmYuLmU2YmMyYmQ1M2U0M2EzNjJjYTE2YzYwN2M5NTljNjQyMTE5MWNjNjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQpAQCAtMjQ5LDcgKzI0OSw2IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmggXAog
ICAgIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmggXAotICAgIFVJUHJvY2Vzcy9xdC9RdFRvdWNo
Vmlld0ludGVyZmFjZS5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQb2xpY3lJbnRlcmZhY2UuaCBc
CiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBcCiAgICAgVUlQcm9jZXNz
L3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaCBcCkBAIC00OTMsNyArNDkyLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0
L0NsaWVudEltcGwuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQu
Y3BwIFwKLSAgICBVSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwIFwKKyAgICBV
SVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2Vz
dHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2du
aXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCmluZGV4IDgyZGVhNDdm
NWY2YjljODQ3MTBiZWM2YjYwNzc0M2NmZmY4MjBhM2IuLjM3M2I3ZGZiYjYyNmNkZGY0OTM5ODE0
NzcxNmE3YmUwNTBmNjZlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1Zp
ZXcuaApAQCAtMjAsOSArMjAsOCBAQAogI2lmbmRlZiBXS1ZpZXdfaAogI2RlZmluZSBXS1ZpZXdf
aAogCi0jaW5jbHVkZSA8V2ViS2l0Mi9xZGVza3RvcHdlYnZpZXcuaD4KLSNpbmNsdWRlIDxXZWJL
aXQyL3F0b3VjaHdlYnZpZXcuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL3F0b3VjaHdlYnBhZ2UuaD4K
KyNpbmNsdWRlIDxXZWJLaXQyL3FxdWlja3dlYnBhZ2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL3Fx
dWlja3dlYnZpZXcuaD4KICNpbmNsdWRlIDxXZWJLaXQyL3F3ZWJkb3dubG9hZGl0ZW0uaD4KICNp
bmNsdWRlIDxXZWJLaXQyL3F3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdl
YktpdDIvcXdlYnByZWZlcmVuY2VzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FiYXNld2Vidmlldy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFl
NzA3ZmY4MDQwZDI4M2M0M2JiYzQyMjg1ZTk4MDU0ZDY0MmUzNDcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xYmFzZXdlYnZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJxYmFzZXdlYnZp
ZXcuaCIKLQotI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAicWJhc2V3ZWJ2
aWV3X3AuaCIKLSNpbmNsdWRlICJxd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCIKLQotUUJhc2VX
ZWJWaWV3UHJpdmF0ZTo6UUJhc2VXZWJWaWV3UHJpdmF0ZSgpCi0gICAgOiBxX3B0cigwKQotICAg
ICwgbmF2aWdhdGlvbkNvbnRyb2xsZXIoMCkKLXsKLX0KLQotdm9pZCBRQmFzZVdlYlZpZXdQcml2
YXRlOjpzZXRQYWdlUHJveHkoUXRXZWJQYWdlUHJveHkqIHBhZ2VQcm94eSkKLXsKLSAgICB0aGlz
LT5wYWdlUHJveHkucmVzZXQocGFnZVByb3h5KTsKLSAgICBRT2JqZWN0Ojpjb25uZWN0KHBhZ2VQ
cm94eSwgU0lHTkFMKHJlY2VpdmVkTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChRVmFyaWFu
dE1hcCkpLCBxX3B0ciwgU0lHTkFMKG1lc3NhZ2VSZWNlaXZlZChRVmFyaWFudE1hcCkpKTsKLX0K
LQotUUJhc2VXZWJWaWV3OjpRQmFzZVdlYlZpZXcoUUJhc2VXZWJWaWV3UHJpdmF0ZSAmZGQsIFFR
dWlja0l0ZW0gKnBhcmVudCkKLSAgICA6IFFRdWlja1BhaW50ZWRJdGVtKHBhcmVudCkKLSAgICAs
IGRfcHRyKCZkZCkKLXsKLSAgICBkX3B0ci0+cV9wdHIgPSB0aGlzOwotfQotCi1RQmFzZVdlYlZp
ZXc6On5RQmFzZVdlYlZpZXcoKQotewotfQotCi12b2lkIFFCYXNlV2ViVmlldzo6bG9hZChjb25z
dCBRVXJsJiB1cmwpCi17Ci0gICAgUV9EKFFCYXNlV2ViVmlldyk7Ci0gICAgZC0+cGFnZVByb3h5
LT5sb2FkKHVybCk7Ci19Ci0KLXZvaWQgUUJhc2VXZWJWaWV3Ojpwb3N0TWVzc2FnZShjb25zdCBR
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIFFfRChRQmFzZVdlYlZpZXcpOwotICAgIGQtPnBhZ2VQ
cm94eS0+cG9zdE1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KG1lc3NhZ2UpOwotfQotCi1RVXJs
IFFCYXNlV2ViVmlldzo6dXJsKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUUJhc2VXZWJWaWV3
KTsKLSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT51cmwoKTsKLX0KLQotaW50IFFCYXNlV2ViVmll
dzo6bG9hZFByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUUJhc2VXZWJWaWV3KTsK
LSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT5sb2FkUHJvZ3Jlc3MoKTsKLX0KLQotUVN0cmluZyBR
QmFzZVdlYlZpZXc6OnRpdGxlKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUUJhc2VXZWJWaWV3
KTsKLSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT50aXRsZSgpOwotfQotCi1RV2ViTmF2aWdhdGlv
bkNvbnRyb2xsZXIqIFFCYXNlV2ViVmlldzo6bmF2aWdhdGlvbkNvbnRyb2xsZXIoKSBjb25zdAot
ewotICAgIFFfRChjb25zdCBRQmFzZVdlYlZpZXcpOwotICAgIGlmICghZC0+bmF2aWdhdGlvbkNv
bnRyb2xsZXIpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UUJhc2VXZWJWaWV3UHJpdmF0ZSo+KGQpLT5u
YXZpZ2F0aW9uQ29udHJvbGxlciA9IG5ldyBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXIoZC0+cGFn
ZVByb3h5LmRhdGEoKSk7Ci0gICAgcmV0dXJuIGQtPm5hdmlnYXRpb25Db250cm9sbGVyOwotfQot
Ci1RV2ViUHJlZmVyZW5jZXMqIFFCYXNlV2ViVmlldzo6cHJlZmVyZW5jZXMoKSBjb25zdAotewot
ICAgIFFfRChjb25zdCBRQmFzZVdlYlZpZXcpOwotICAgIHJldHVybiBkLT5wYWdlUHJveHktPnBy
ZWZlcmVuY2VzKCk7Ci19Ci0KLSNpbmNsdWRlICJtb2NfcWJhc2V3ZWJ2aWV3LmNwcCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwNWNmNTUwMTA4ZTMxMGI2MTgwZmI3NWI3M2Y0M2YxNjk2NWE3
YjJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmgKKysrIC9kZXYvbnVsbApA
QCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxYmFzZXdlYnZpZXdf
aAotI2RlZmluZSBxYmFzZXdlYnZpZXdfaAotCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgot
I2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXF1aWNrcGFpbnRlZGl0ZW0uaD4KLQotY2xhc3MgUUJh
c2VXZWJWaWV3UHJpdmF0ZTsKLWNsYXNzIFFXZWJEb3dubG9hZEl0ZW07Ci1jbGFzcyBRV2ViTmF2
aWdhdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBRV2ViUHJlZmVyZW5jZXM7Ci0KLVFUX0JFR0lOX05B
TUVTUEFDRQotY2xhc3MgUVBhaW50ZXI7Ci1jbGFzcyBRVXJsOwotUVRfRU5EX05BTUVTUEFDRQot
Ci1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRQmFzZVdlYlZpZXcgOiBwdWJsaWMgUVF1aWNrUGFpbnRl
ZEl0ZW0gewotICAgIFFfT0JKRUNUCi0gICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQg
dGl0bGUgTk9USUZZIHRpdGxlQ2hhbmdlZCkKLSAgICBRX1BST1BFUlRZKFFVcmwgdXJsIFJFQUQg
dXJsIE5PVElGWSB1cmxDaGFuZ2VkKQotICAgIFFfUFJPUEVSVFkoaW50IGxvYWRQcm9ncmVzcyBS
RUFEIGxvYWRQcm9ncmVzcyBOT1RJRlkgbG9hZFByb2dyZXNzQ2hhbmdlZCkKLSAgICBRX1BST1BF
UlRZKFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciogbmF2aWdhdGlvbiBSRUFEIG5hdmlnYXRpb25D
b250cm9sbGVyIENPTlNUQU5UIEZJTkFMKQotICAgIFFfUFJPUEVSVFkoUVdlYlByZWZlcmVuY2Vz
KiBwcmVmZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5UIEZJTkFMKQotICAgIFFfRU5V
TVMoTmF2aWdhdGlvblBvbGljeSkKLSAgICBRX0VOVU1TKEVycm9yVHlwZSkKLXB1YmxpYzoKLSAg
ICBlbnVtIE5hdmlnYXRpb25Qb2xpY3kgewotICAgICAgICBVc2VQb2xpY3ksCi0gICAgICAgIERv
d25sb2FkUG9saWN5LAotICAgICAgICBJZ25vcmVQb2xpY3kKLSAgICB9OwotCi0gICAgZW51bSBF
cnJvclR5cGUgewotICAgICAgICBFbmdpbmVFcnJvciwKLSAgICAgICAgTmV0d29ya0Vycm9yLAot
ICAgICAgICBIdHRwRXJyb3IsCi0gICAgICAgIERvd25sb2FkRXJyb3IKLSAgICB9OwotICAgIHZp
cnR1YWwgflFCYXNlV2ViVmlldygpOwotCi0gICAgLy8gRklYTUU6IFdlIGluaGVyaXQgZnJvbSBR
UXVpY2tQYWludGVkSXRlbSB1bnRpbCBRRGVza3RvcFdlYlZpZXcgd29ya3Mgb24gdG9wIG9mIGEg
cGxhaW4gUVF1aWNrSXRlbS4KLSAgICB2b2lkIHBhaW50KFFQYWludGVyKikgeyB9Ci0KLSAgICBR
VXJsIHVybCgpIGNvbnN0OwotICAgIFFTdHJpbmcgdGl0bGUoKSBjb25zdDsKLSAgICBpbnQgbG9h
ZFByb2dyZXNzKCkgY29uc3Q7Ci0KLSAgICBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmln
YXRpb25Db250cm9sbGVyKCkgY29uc3Q7Ci0gICAgUVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNl
cygpIGNvbnN0OwotCi1wdWJsaWMgUV9TTE9UUzoKLSAgICAgdm9pZCBsb2FkKGNvbnN0IFFVcmwm
KTsKLSAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBRU3RyaW5nJik7Ci0KLVFfU0lHTkFMUzoK
LSAgICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJiB0aXRsZSk7Ci0gICAgdm9pZCBz
dGF0dXNCYXJNZXNzYWdlQ2hhbmdlZChjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lk
IGxvYWRTdGFydGVkKCk7Ci0gICAgdm9pZCBsb2FkU3VjY2VlZGVkKCk7Ci0gICAgdm9pZCBsb2Fk
RmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlIGVycm9yVHlwZSwgaW50IGVycm9yQ29kZSwg
Y29uc3QgUVVybCYgdXJsKTsKLSAgICB2b2lkIGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50IHByb2dy
ZXNzKTsKLSAgICB2b2lkIHVybENoYW5nZWQoY29uc3QgUVVybCYgdXJsKTsKLSAgICB2b2lkIG1l
c3NhZ2VSZWNlaXZlZChjb25zdCBRVmFyaWFudE1hcCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBkb3du
bG9hZFJlcXVlc3RlZChRV2ViRG93bmxvYWRJdGVtKiBkb3dubG9hZEl0ZW0pOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgUUJhc2VXZWJWaWV3KFFCYXNlV2ViVmlld1ByaXZhdGUgJmRkLCBRUXVpY2tJdGVt
ICpwYXJlbnQgPSAwKTsKLSAgICAvLyBIaWRlcyBRT2JqZWN0OjpkX3B0ciBhbGxvd2luZyB1cyB0
byB1c2UgdGhlIGNvbnZlbmllbmNlIG1hY3Jvcy4KLSAgICBRU2NvcGVkUG9pbnRlcjxRQmFzZVdl
YlZpZXdQcml2YXRlPiBkX3B0cjsKLXByaXZhdGU6Ci0gICAgUV9ERUNMQVJFX1BSSVZBVEUoUUJh
c2VXZWJWaWV3KQotICAgIGZyaWVuZCBjbGFzcyBRdFdlYlBhZ2VQcm94eTsKLX07Ci0KLSNlbmRp
ZiAvKiBxYmFzZXdlYnZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xYmFzZXdlYnZpZXdfcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Q1
Y2ZjMzIxZjA2NzY3ODQ3ZmZhMTBlZmE5NTI5OTUzMTVmNDM5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcWJhc2V3ZWJ2aWV3X3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi0jaWZuZGVmIHFiYXNld2Vidmlld19wX2gKLSNkZWZpbmUgcWJhc2V3ZWJ2
aWV3X3BfaAotCi0jaW5jbHVkZSAicWJhc2V3ZWJ2aWV3LmgiCi0KLWNsYXNzIFFXZWJOYXZpZ2F0
aW9uQ29udHJvbGxlcjsKLWNsYXNzIFF0V2ViUGFnZVByb3h5OwotCi1jbGFzcyBRQmFzZVdlYlZp
ZXdQcml2YXRlIHsKLSAgICBRX0RFQ0xBUkVfUFVCTElDKFFCYXNlV2ViVmlldykKLXB1YmxpYzoK
LSAgICBRQmFzZVdlYlZpZXdQcml2YXRlKCk7Ci0gICAgdmlydHVhbCB+UUJhc2VXZWJWaWV3UHJp
dmF0ZSgpIHsgfQotICAgIHZvaWQgc2V0UGFnZVByb3h5KFF0V2ViUGFnZVByb3h5Kik7Ci0gICAg
UUJhc2VXZWJWaWV3KiBxX3B0cjsKLSAgICBRU2NvcGVkUG9pbnRlcjxRdFdlYlBhZ2VQcm94eT4g
cGFnZVByb3h5OwotCi0gICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZpZ2F0aW9uQ29u
dHJvbGxlcjsKLX07Ci0KLSNlbmRpZiAvKiBxYmFzZXdlYnZpZXdfcF9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MWRlY2U3NTRhZjgwNTViZmY1NWEyODJiNmM0NDM0
N2Y2MmUzZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3LmgiCi0KLSNpbmNsdWRlICJRdFdl
YlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKLSNpbmNsdWRlICJVdGlsc1F0
LmgiCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlICJxd2ViZG93bmxv
YWRpdGVtLmgiCi0jaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKLSNpbmNsdWRlIDxRRmls
ZURpYWxvZz4KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWVuZ2luZS5oPgot
I2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXF1aWNrY2FudmFzLmg+Ci0jaW5jbHVkZSA8UXREZWNs
YXJhdGl2ZS9xcXVpY2t2aWV3Lmg+Ci0jaW5jbHVkZSA8UXRHdWkvUUN1cnNvcj4KLSNpbmNsdWRl
IDxRdEd1aS9RRGVza3RvcFNlcnZpY2VzPgotI2luY2x1ZGUgPFF0R3VpL1FEcmFnPgotI2luY2x1
ZGUgPFF0R3VpL1FGb2N1c0V2ZW50PgotI2luY2x1ZGUgPFF0R3VpL1FHdWlBcHBsaWNhdGlvbj4K
LSNpbmNsdWRlIDxRdEd1aS9RSG92ZXJFdmVudD4KLSNpbmNsdWRlIDxRdEd1aS9RSW5wdXRNZXRo
b2RFdmVudD4KLSNpbmNsdWRlIDxRdEd1aS9RS2V5RXZlbnQ+Ci0jaW5jbHVkZSA8UXRHdWkvUVRv
dWNoRXZlbnQ+Ci0jaW5jbHVkZSA8UXRHdWkvUVdoZWVsRXZlbnQ+Ci0jaW5jbHVkZSA8UXRXaWRn
ZXRzL1FJbnB1dERpYWxvZz4KLSNpbmNsdWRlIDxRdFdpZGdldHMvUU1lc3NhZ2VCb3g+Ci0jaW5j
bHVkZSA8V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oPgotCi1RRGVza3RvcFdlYlZpZXdQcml2
YXRlOjpRRGVza3RvcFdlYlZpZXdQcml2YXRlKCkKLSAgICA6IGlzQ3Jhc2hlZChmYWxzZSkKLXsK
LX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjplbmFibGVNb3VzZUV2ZW50cygpCi17
Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgcS0+c2V0QWNjZXB0ZWRNb3VzZUJ1dHRv
bnMoUXQ6Ok1vdXNlQnV0dG9uTWFzayk7Ci0gICAgcS0+c2V0QWNjZXB0SG92ZXJFdmVudHModHJ1
ZSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlzYWJsZU1vdXNlRXZlbnRz
KCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBxLT5zZXRBY2NlcHRlZE1vdXNl
QnV0dG9ucyhRdDo6Tm9CdXR0b24pOwotICAgIHEtPnNldEFjY2VwdEhvdmVyRXZlbnRzKGZhbHNl
KTsKLX0KLQotUURlc2t0b3BXZWJWaWV3KiBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjp3ZWJWaWV3
KCkKLXsKLSAgICByZXR1cm4gcV9mdW5jKCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJp
dmF0ZTo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYgaW52YWxpZGF0ZWRBcmVhKQot
ewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIHEtPnVwZGF0ZShpbnZhbGlkYXRlZEFy
ZWEpOwotfQotCi1RU2l6ZSBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkcmF3aW5nQXJlYVNpemUo
KQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIHJldHVybiBRU2l6ZShxLT53aWR0
aCgpLCBxLT5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6Y29u
dGVudFNpemVDaGFuZ2VkKGNvbnN0IFFTaXplJikKLXsKLX0KLQotYm9vbCBRRGVza3RvcFdlYlZp
ZXdQcml2YXRlOjppc0FjdGl2ZSgpCi17Ci0gICAgLy8gRklYTUU6IFRoZSBzY2VuZSBncmFwaCBk
aWQgbm90IGhhdmUgdGhlIGNvbmNlcHQgb2YgYmVpbmcgYWN0aXZlIG9yIG5vdCB3aGVuIHRoaXMg
d2FzIHdyaXR0ZW4uCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUURlc2t0b3BXZWJWaWV3
UHJpdmF0ZTo6aGFzRm9jdXMoKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIHJl
dHVybiBxLT5oYXNGb2N1cygpOwotfQotCi1ib29sIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6Omlz
VmlzaWJsZSgpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgcmV0dXJuIHEtPmlz
VmlzaWJsZSgpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OnN0YXJ0RHJhZyhR
dDo6RHJvcEFjdGlvbnMgc3VwcG9ydGVkRHJvcEFjdGlvbnMsIGNvbnN0IFFJbWFnZSYgZHJhZ0lt
YWdlLCBRTWltZURhdGEqIGRhdGEsIFFQb2ludCogY2xpZW50UG9zaXRpb24sIFFQb2ludCogZ2xv
YmFsUG9zaXRpb24sIFF0OjpEcm9wQWN0aW9uKiBkcm9wQWN0aW9uKQotewotICAgIFFfUShRRGVz
a3RvcFdlYlZpZXcpOwotICAgIFFXaW5kb3cqIHdpbmRvdyA9IHEtPmNhbnZhcygpOwotICAgIGlm
ICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBRRHJhZyogZHJhZyA9IG5ldyBRRHJh
Zyh3aW5kb3cpOwotICAgIGRyYWctPnNldFBpeG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UoZHJhZ0lt
YWdlKSk7Ci0gICAgZHJhZy0+c2V0TWltZURhdGEoZGF0YSk7Ci0gICAgKmRyb3BBY3Rpb24gPSBk
cmFnLT5leGVjKHN1cHBvcnRlZERyb3BBY3Rpb25zKTsKLSAgICAqZ2xvYmFsUG9zaXRpb24gPSBR
Q3Vyc29yOjpwb3MoKTsKLSAgICAqY2xpZW50UG9zaXRpb24gPSB3aW5kb3ctPm1hcEZyb21HbG9i
YWwoKmdsb2JhbFBvc2l0aW9uKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpk
aWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHMmKQotewotICAgIC8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IHVzZWQgYnkgUVRvdWNoV2ViVmll
dy4KLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRGaW5kWm9vbWFibGVBcmVh
KGNvbnN0IFFQb2ludCYsIGNvbnN0IFFSZWN0JikKLXsKLSAgICAvLyBUaGlzIGZlYXR1cmUgaXMg
b25seSB1c2VkIGJ5IFFUb3VjaFdlYlZpZXcuCi19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJp
dmF0ZTo6ZGlkQ2hhbmdlVXJsKGNvbnN0IFFVcmwmIHVybCkKLXsKLSAgICBRX1EoUURlc2t0b3BX
ZWJWaWV3KTsKLSAgICBlbWl0IHEtPnVybENoYW5nZWQodXJsKTsKLX0KLQotdm9pZCBRRGVza3Rv
cFdlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VUaXRsZShjb25zdCBRU3RyaW5nJiBuZXdUaXRsZSkK
LXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBlbWl0IHEtPnRpdGxlQ2hhbmdlZChu
ZXdUaXRsZSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlVG9v
bFRpcChjb25zdCBRU3RyaW5nJiBuZXdUb29sVGlwKQotewotICAgIC8vIEZJWE1FOiBBZGQgYSBw
cm9wZXIgaW1wbGVtZW50YXRpb24gd2hlbiBRdCA1IHN1cHBvcnRzIHRvb2x0aXAuCi19Ci0KLXZv
aWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlU3RhdHVzVGV4dChjb25zdCBRU3Ry
aW5nJiBuZXdNZXNzYWdlKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIGVtaXQg
cS0+c3RhdHVzQmFyTWVzc2FnZUNoYW5nZWQobmV3TWVzc2FnZSk7Ci19Ci0KLXZvaWQgUURlc2t0
b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlQ3Vyc29yKGNvbnN0IFFDdXJzb3ImIG5ld0N1cnNv
cikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBmaXggdW50aWwgd2UgZ2V0
IGN1cnNvciBzdXBwb3J0IGluIFFNTCBpdGVtcy4KLSAgICBRR3VpQXBwbGljYXRpb246OnNldE92
ZXJyaWRlQ3Vyc29yKG5ld0N1cnNvcik7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0
ZTo6bG9hZERpZEJlZ2luKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBlbWl0
IHEtPmxvYWRTdGFydGVkKCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6bG9h
ZERpZENvbW1pdCgpCi17Ci0gICAgLy8gTm90IHVzZWQgZm9yIFFEZXNrdG9wV2ViVmlldy4KLX0K
LQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpsb2FkRGlkU3VjY2VlZCgpCi17Ci0gICAg
UV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgZW1pdCBxLT5sb2FkU3VjY2VlZGVkKCk7Ci19Ci0K
LXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6bG9hZERpZEZhaWwoY29uc3QgUXRXZWJFcnJv
ciYgZXJyb3IpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgZW1pdCBxLT5sb2Fk
RmFpbGVkKHN0YXRpY19jYXN0PFFEZXNrdG9wV2ViVmlldzo6RXJyb3JUeXBlPihlcnJvci50eXBl
KCkpLCBlcnJvci5lcnJvckNvZGUoKSwgZXJyb3IudXJsKCkpOwotfQotCi12b2lkIFFEZXNrdG9w
V2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZUxvYWRQcm9ncmVzcyhpbnQgcGVyY2VudGFnZUxvYWRl
ZCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBlbWl0IHEtPmxvYWRQcm9ncmVz
c0NoYW5nZWQocGVyY2VudGFnZUxvYWRlZCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJp
dmF0ZTo6c2hvd0NvbnRleHRNZW51KFFTaGFyZWRQb2ludGVyPFFNZW51PiBtZW51KQotewotICAg
IFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIC8vIFJlbW92ZSB0aGUgYWN0aXZlIG1lbnUgaW4g
Y2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0d2ljZS4KLSAgICBpZiAoYWN0aXZlTWVudSkK
LSAgICAgICAgYWN0aXZlTWVudS0+aGlkZSgpOwotCi0gICAgaWYgKG1lbnUtPmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUVdpbmRvdyogd2luZG93ID0gcS0+Y2FudmFzKCk7Ci0g
ICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFjdGl2ZU1lbnUgPSBtZW51
OwotCi0gICAgYWN0aXZlTWVudS0+d2luZG93KCktPndpbklkKCk7IC8vIEVuc3VyZSB0aGF0IHRo
ZSBtZW51IGhhcyBhIHdpbmRvdwotICAgIFFfQVNTRVJUKGFjdGl2ZU1lbnUtPndpbmRvdygpLT53
aW5kb3dIYW5kbGUoKSk7Ci0gICAgYWN0aXZlTWVudS0+d2luZG93KCktPndpbmRvd0hhbmRsZSgp
LT5zZXRUcmFuc2llbnRQYXJlbnQod2luZG93KTsKLQotICAgIFFQb2ludCBtZW51UG9zaXRpb25J
blNjZW5lID0gcS0+bWFwVG9TY2VuZShtZW51LT5wb3MoKSkudG9Qb2ludCgpOwotICAgIG1lbnUt
PmV4ZWMod2luZG93LT5tYXBUb0dsb2JhbChtZW51UG9zaXRpb25JblNjZW5lKSk7Ci0gICAgLy8g
VGhlIGxhc3QgZnVuY3Rpb24gdG8gZ2V0IG91dCBvZiBleGVjKCkgY2xlYXIgdGhlIGxvY2FsIGNv
cHkuCi0gICAgaWYgKGFjdGl2ZU1lbnUgPT0gbWVudSkKLSAgICAgICAgYWN0aXZlTWVudS5jbGVh
cigpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmhpZGVDb250ZXh0TWVudSgp
Ci17Ci0gICAgaWYgKGFjdGl2ZU1lbnUpCi0gICAgICAgIGFjdGl2ZU1lbnUtPmhpZGUoKTsKLX0K
LQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0QWxlcnQoY29uc3Qg
UVN0cmluZyYgYWxlcnRUZXh0KQotewotI2lmbmRlZiBRVF9OT19NRVNTQUdFQk9YCi0gICAgUV9R
KFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgY29uc3QgUVN0cmluZyB0aXRsZSA9IFFPYmplY3Q6OnRy
KCJKYXZhU2NyaXB0IEFsZXJ0IC0gJTEiKS5hcmcocS0+dXJsKCkuaG9zdCgpKTsKLSAgICBkaXNh
YmxlTW91c2VFdmVudHMoKTsKLSAgICBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0bGUs
IGVzY2FwZUh0bWwoYWxlcnRUZXh0KSwgUU1lc3NhZ2VCb3g6Ok9rKTsKLSAgICBlbmFibGVNb3Vz
ZUV2ZW50cygpOwotI2Vsc2UKLSAgICBRX1VOVVNFRChhbGVydFRleHQpOwotI2VuZGlmCi19Ci0K
LWJvb2wgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3Qg
UVN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0jaWZuZGVmIFFU
X05PX01FU1NBR0VCT1gKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBjb25zdCBRU3Ry
aW5nIHRpdGxlID0gUU9iamVjdDo6dHIoIkphdmFTY3JpcHQgQ29uZmlybSAtICUxIikuYXJnKHEt
PnVybCgpLmhvc3QoKSk7Ci0gICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7Ci0gICAgcmVzdWx0ID0g
UU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0bGUsIGVz
Y2FwZUh0bWwobWVzc2FnZSksIFFNZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7Ci0g
ICAgZW5hYmxlTW91c2VFdmVudHMoKTsKLSNlbHNlCi0gICAgUV9VTlVTRUQobWVzc2FnZSk7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1RU3RyaW5nIFFEZXNrdG9wV2ViVmlld1By
aXZhdGU6OnJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
UVN0cmluZyYgZGVmYXVsdFZhbHVlLCBib29sJiBvaykKLXsKLSNpZm5kZWYgUVRfTk9fSU5QVVRE
SUFMT0cKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBjb25zdCBRU3RyaW5nIHRpdGxl
ID0gUU9iamVjdDo6dHIoIkphdmFTY3JpcHQgUHJvbXB0IC0gJTEiKS5hcmcocS0+dXJsKCkuaG9z
dCgpKTsKLSAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKLSAgICBRU3RyaW5nIHJlc3VsdCA9IFFJ
bnB1dERpYWxvZzo6Z2V0VGV4dCgwLCB0aXRsZSwgZXNjYXBlSHRtbChtZXNzYWdlKSwgUUxpbmVF
ZGl0OjpOb3JtYWwsIGRlZmF1bHRWYWx1ZSwgJm9rKTsKLSAgICBlbmFibGVNb3VzZUV2ZW50cygp
OwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIFFfVU5VU0VEKG1lc3NhZ2UpOwotICAg
IHJldHVybiBkZWZhdWx0VmFsdWU7Ci0jZW5kaWYKLX0KLQotUURlc2t0b3BXZWJWaWV3OjpRRGVz
a3RvcFdlYlZpZXcoUVF1aWNrSXRlbSogcGFyZW50KQotICAgIDogUUJhc2VXZWJWaWV3KCoobmV3
IFFEZXNrdG9wV2ViVmlld1ByaXZhdGUpLCBwYXJlbnQpCi17Ci0gICAgUV9EKFFEZXNrdG9wV2Vi
Vmlldyk7Ci0gICAgZC0+aW5pdCgpOwotfQotCi1RRGVza3RvcFdlYlZpZXc6OlFEZXNrdG9wV2Vi
VmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
LCBRUXVpY2tJdGVtKiBwYXJlbnQpCi0gICAgOiBRQmFzZVdlYlZpZXcoKihuZXcgUURlc2t0b3BX
ZWJWaWV3UHJpdmF0ZSksIHBhcmVudCkKLXsKLSAgICBRX0QoUURlc2t0b3BXZWJWaWV3KTsKLSAg
ICBkLT5pbml0KGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7Ci19Ci0KLXZvaWQgUURlc2t0b3BX
ZWJWaWV3UHJpdmF0ZTo6aW5pdChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwUmVmKQotewotICAgIHNldFBhZ2VQcm94eShuZXcgUXRXZWJQYWdlUHJveHko
dGhpcywgMCwgdGhpcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSk7Ci0gICAgUVdlYlByZWZl
cmVuY2VzUHJpdmF0ZTo6Z2V0KHBhZ2VQcm94eS0+cHJlZmVyZW5jZXMoKSktPnNldEF0dHJpYnV0
ZShRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwg
ZmFsc2UpOwotICAgIHBhZ2VQcm94eS0+aW5pdCgpOwotICAgIGVuYWJsZU1vdXNlRXZlbnRzKCk7
Ci19Ci0KLVFEZXNrdG9wV2ViVmlldzo6flFEZXNrdG9wV2ViVmlldygpCi17Ci19Ci0KLXN0YXRp
YyB2b2lkIHBhaW50Q3Jhc2hlZFBhZ2UoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0RiYg
cmVjdCkKLXsKLSAgICBwYWludGVyLT5maWxsUmVjdChyZWN0LCBRdDo6Z3JheSk7Ci0gICAgcGFp
bnRlci0+ZHJhd1RleHQocmVjdCwgUXQ6OkFsaWduQ2VudGVyLCBRTGF0aW4xU3RyaW5nKCI6KCIp
KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBl
dmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJW
aWV3OjprZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVu
dChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3OjppbnB1dE1ldGhvZEV2ZW50KFFJ
bnB1dE1ldGhvZEV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0K
LXZvaWQgUURlc2t0b3BXZWJWaWV3Ojpmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqIGV2ZW50KQot
ewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmZv
Y3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50
KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6Om1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVu
dCogZXZlbnQpCi17Ci0gICAgZm9yY2VBY3RpdmVGb2N1cygpOwotICAgIHRoaXMtPmV2ZW50KGV2
ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2
ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0
b3BXZWJWaWV3Ojptb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAg
dGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6bW91c2VEb3Vi
bGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVu
dCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3Ojp3aGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBl
dmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJW
aWV3Ojpob3ZlckVudGVyRXZlbnQoUUhvdmVyRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2
ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmhvdmVyTW92ZUV2ZW50KFFI
b3ZlckV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQg
UURlc2t0b3BXZWJWaWV3Ojpob3ZlckxlYXZlRXZlbnQoUUhvdmVyRXZlbnQqIGV2ZW50KQotewot
ICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmRyYWdN
b3ZlRXZlbnQoUURyYWdNb3ZlRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50
KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmRyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJF
dmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNr
dG9wV2ViVmlldzo6ZHJhZ0xlYXZlRXZlbnQoUURyYWdMZWF2ZUV2ZW50KiBldmVudCkKLXsKLSAg
ICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3Ojpkcm9wRXZl
bnQoUURyb3BFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12
b2lkIFFEZXNrdG9wV2ViVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2Vv
bWV0cnksIGNvbnN0IFFSZWN0RiYgb2xkR2VvbWV0cnkpCi17Ci0gICAgUV9EKFFEZXNrdG9wV2Vi
Vmlldyk7Ci0gICAgUVF1aWNrUGFpbnRlZEl0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRy
eSwgb2xkR2VvbWV0cnkpOwotICAgIGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0
cnkuc2l6ZSgpKQotICAgICAgICBkLT5wYWdlUHJveHktPnNldERyYXdpbmdBcmVhU2l6ZShuZXdH
ZW9tZXRyeS5zaXplKCkudG9TaXplKCkpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6cGFp
bnQoUVBhaW50ZXIqIHBhaW50ZXIpCi17Ci0gICAgUV9EKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAg
Y29uc3QgUVJlY3RGIHJlY3QgPSBib3VuZGluZ1JlY3QoKTsKLSAgICBpZiAoZC0+aXNDcmFzaGVk
KSB7Ci0gICAgICAgIHBhaW50Q3Jhc2hlZFBhZ2UocGFpbnRlciwgcmVjdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBkLT5wYWdlUHJveHktPnBhaW50KHBhaW50ZXIsIHJlY3QudG9B
bGlnbmVkUmVjdCgpKTsKLX0KLQotYm9vbCBRRGVza3RvcFdlYlZpZXc6OmV2ZW50KFFFdmVudCog
ZXYpCi17Ci0gICAgUV9EKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgaWYgKGQtPnBhZ2VQcm94eS0+
aGFuZGxlRXZlbnQoZXYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoZXYtPnR5cGUo
KSA9PSBRRXZlbnQ6OklucHV0TWV0aG9kKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMg
aXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGFuIGVuZGxlc3MgbG9vcCBpbiBjb25uZWN0aW9uIHdpdGgg
UVF1aWNrSXRlbTo6ZXZlbnQoKS4KLSAgICByZXR1cm4gUVF1aWNrSXRlbTo6ZXZlbnQoZXYpOwot
fQotCi1XS1BhZ2VSZWYgUURlc2t0b3BXZWJWaWV3OjpwYWdlUmVmKCkgY29uc3QKLXsKLSAgICBR
X0QoY29uc3QgUURlc2t0b3BXZWJWaWV3KTsKLSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT5wYWdl
UmVmKCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6cHJvY2Vzc0RpZENyYXNo
KCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBpc0NyYXNoZWQgPSB0cnVlOwot
ICAgIHEtPnVwZGF0ZSgpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZFJl
bGF1bmNoUHJvY2VzcygpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgaXNDcmFz
aGVkID0gZmFsc2U7Ci0gICAgcS0+dXBkYXRlKCk7Ci19Ci0KLVFKU0VuZ2luZSogUURlc2t0b3BX
ZWJWaWV3UHJpdmF0ZTo6ZW5naW5lKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAg
ICBRUXVpY2tWaWV3KiB2aWV3ID0gcW9iamVjdF9jYXN0PFFRdWlja1ZpZXcqPihxLT5jYW52YXMo
KSk7Ci0gICAgaWYgKHZpZXcpCi0gICAgICAgIHJldHVybiB2aWV3LT5lbmdpbmUoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpjaG9vc2VGaWxlcyhX
S09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBjb25zdCBRU3RyaW5nTGlz
dCYgc2VsZWN0ZWRGaWxlTmFtZXMsIFF0Vmlld0ludGVyZmFjZTo6RmlsZUNob29zZXJUeXBlIHR5
cGUpCi17Ci0jaWZuZGVmIFFUX05PX0ZJTEVESUFMT0cKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3
KTsKLSAgICBvcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciA9IGxpc3RlbmVyUmVmOwotCi0gICAgLy8g
UXQgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBmaWxlcyBzdWdnZXN0aW9uLCBzbyB3ZSBnZXQg
anVzdCB0aGUgZmlyc3Qgc3VnZ2VzdGlvbi4KLSAgICBRU3RyaW5nIHNlbGVjdGVkRmlsZU5hbWU7
Ci0gICAgaWYgKCFzZWxlY3RlZEZpbGVOYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHNlbGVjdGVk
RmlsZU5hbWUgPSBzZWxlY3RlZEZpbGVOYW1lcy5hdCgwKTsKLQotICAgIFFfQVNTRVJUKCFmaWxl
RGlhbG9nKTsKLQotICAgIFFXaW5kb3cqIHdpbmRvdyA9IHEtPmNhbnZhcygpOwotICAgIGlmICgh
d2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmaWxlRGlhbG9nID0gbmV3IFFGaWxlRGlh
bG9nKDAsIFFTdHJpbmcoKSwgc2VsZWN0ZWRGaWxlTmFtZSk7Ci0gICAgZmlsZURpYWxvZy0+d2lu
ZG93KCktPndpbklkKCk7IC8vIEVuc3VyZSB0aGF0IHRoZSBkaWFsb2cgaGFzIGEgd2luZG93Ci0g
ICAgUV9BU1NFUlQoZmlsZURpYWxvZy0+d2luZG93KCktPndpbmRvd0hhbmRsZSgpKTsKLSAgICBm
aWxlRGlhbG9nLT53aW5kb3coKS0+d2luZG93SGFuZGxlKCktPnNldFRyYW5zaWVudFBhcmVudCh3
aW5kb3cpOwotCi0gICAgZmlsZURpYWxvZy0+b3BlbihxX2Z1bmMoKSwgU0xPVChfcV9vbk9wZW5Q
YW5lbEZpbGVzU2VsZWN0ZWQoKSkpOwotCi0gICAgcV9mdW5jKCktPmNvbm5lY3QoZmlsZURpYWxv
ZywgU0lHTkFMKGZpbmlzaGVkKGludCkpLCBTTE9UKF9xX29uT3BlblBhbmVsRmluaXNoZWQoaW50
KSkpOwotI2VuZGlmCi19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6X3Ffb25PcGVu
UGFuZWxGaWxlc1NlbGVjdGVkKCkKLXsKLSAgICBjb25zdCBRU3RyaW5nTGlzdCBmaWxlTGlzdCA9
IGZpbGVEaWFsb2ctPnNlbGVjdGVkRmlsZXMoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEFQSU9iamVj
dD4gPiB3a0ZpbGVzKGZpbGVMaXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZmlsZUxpc3Quc2l6ZSgpOyArK2kpCi0gICAgICAgIHdrRmlsZXNbaV0gPSBXZWJVUkw6
OmNyZWF0ZShRVXJsOjpmcm9tTG9jYWxGaWxlKGZpbGVMaXN0LmF0KGkpKS50b1N0cmluZygpKTsK
LQotICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDaG9vc2VGaWxlcyhvcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lciwgdG9BUEkoSW1tdXRhYmxlQXJyYXk6OmFkb3B0KHdrRmlsZXMpLmxlYWtSZWYo
KSkpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6Ol9xX29uT3BlblBhbmVsRmlu
aXNoZWQoaW50IHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0ID09IFFEaWFsb2c6OlJlamVjdGVk
KQotICAgICAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyQ2FuY2VsKG9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyKTsKLQotICAgIGZpbGVEaWFsb2ctPmRlbGV0ZUxhdGVyKCk7Ci0gICAgZmlsZURp
YWxvZyA9IDA7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkTW91c2VNb3Zl
T3ZlckVsZW1lbnQoY29uc3QgUVVybCYgbGlua1VSTCwgY29uc3QgUVN0cmluZyYgbGlua1RpdGxl
KQotewotICAgIGlmIChsaW5rVVJMID09IGxhc3RIb3ZlcmVkVVJMICYmIGxpbmtUaXRsZSA9PSBs
YXN0SG92ZXJlZFRpdGxlKQotICAgICAgICByZXR1cm47Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmll
dyk7Ci0gICAgbGFzdEhvdmVyZWRVUkwgPSBsaW5rVVJMOwotICAgIGxhc3RIb3ZlcmVkVGl0bGUg
PSBsaW5rVGl0bGU7Ci0gICAgZW1pdCBxLT5saW5rSG92ZXJlZChsYXN0SG92ZXJlZFVSTCwgbGFz
dEhvdmVyZWRUaXRsZSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZG93bmxv
YWRSZXF1ZXN0ZWQoUVdlYkRvd25sb2FkSXRlbSogZG93bmxvYWRJdGVtKQotewotICAgIGlmICgh
ZG93bmxvYWRJdGVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3
KTsKLQotICAgIFFEZWNsYXJhdGl2ZUVuZ2luZTo6c2V0T2JqZWN0T3duZXJzaGlwKGRvd25sb2Fk
SXRlbSwgUURlY2xhcmF0aXZlRW5naW5lOjpKYXZhU2NyaXB0T3duZXJzaGlwKTsKLSAgICBlbWl0
IHEtPmRvd25sb2FkUmVxdWVzdGVkKGRvd25sb2FkSXRlbSk7Ci19Ci0KLXN0YXRpYyBRdFBvbGlj
eUludGVyZmFjZTo6UG9saWN5QWN0aW9uIHRvUG9saWN5QWN0aW9uKFFEZXNrdG9wV2ViVmlldzo6
TmF2aWdhdGlvblBvbGljeSBwb2xpY3kpCi17Ci0gICAgc3dpdGNoIChwb2xpY3kpIHsKLSAgICBj
YXNlIFFEZXNrdG9wV2ViVmlldzo6VXNlUG9saWN5OgotICAgICAgICByZXR1cm4gUXRQb2xpY3lJ
bnRlcmZhY2U6OlVzZTsKLSAgICBjYXNlIFFEZXNrdG9wV2ViVmlldzo6RG93bmxvYWRQb2xpY3k6
Ci0gICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6RG93bmxvYWQ7Ci0gICAgY2FzZSBR
RGVza3RvcFdlYlZpZXc6Oklnbm9yZVBvbGljeToKLSAgICAgICAgcmV0dXJuIFF0UG9saWN5SW50
ZXJmYWNlOjpJZ25vcmU7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBRdFBvbGljeUludGVyZmFjZTo6SWdub3JlOwotfQotCi1zdGF0aWMgYm9vbCBoYXNNZXRh
TWV0aG9kKFFPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKLXsKLSAgICBp
bnQgbWV0aG9kSW5kZXggPSBvYmplY3QtPm1ldGFPYmplY3QoKS0+aW5kZXhPZk1ldGhvZChRTWV0
YU9iamVjdDo6bm9ybWFsaXplZFNpZ25hdHVyZShtZXRob2ROYW1lKSk7Ci0gICAgcmV0dXJuIG1l
dGhvZEluZGV4ID49IDAgJiYgbWV0aG9kSW5kZXggPCBvYmplY3QtPm1ldGFPYmplY3QoKS0+bWV0
aG9kQ291bnQoKTsKLX0KLQotLyohCi0gICAgXHFtbG1ldGhvZCBOYXZpZ2F0aW9uUG9saWN5IERl
c2t0b3BXZWJWaWV3OjpuYXZpZ2F0aW9uUG9saWN5Rm9yVXJsKHVybCwgYnV0dG9uLCBtb2RpZmll
cnMpCi0KLSAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIHVzZXIg
b2YgRGVza3RvcFdlYlZpZXcgZWxlbWVudC4KLQotICAgIEl0IHdpbGwgYmUgY2FsbGVkIHRvIGRl
Y2lkZSB0aGUgcG9saWN5IGZvciBhIG5hdmlnYXRpb246IHdoZXRoZXIgdGhlIFdlYlZpZXcgc2hv
dWxkIGlnbm9yZSB0aGUgbmF2aWdhdGlvbiwKLSAgICBjb250aW51ZSBpdCBvciBzdGFydCBhIGRv
d25sb2FkLiBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSBwb2xpY2llcyBpbiB0
aGUgTmF2aWdhdGlvblBvbGljeSBlbnVtZXJhdGlvbi4KLSovCi1RdFBvbGljeUludGVyZmFjZTo6
UG9saWN5QWN0aW9uIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6Om5hdmlnYXRpb25Qb2xpY3lGb3JV
UkwoY29uc3QgUVVybCYgdXJsLCBRdDo6TW91c2VCdXR0b24gYnV0dG9uLCBRdDo6S2V5Ym9hcmRN
b2RpZmllcnMgbW9kaWZpZXJzKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIC8v
IFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlIGludm9rZU1ldGhvZCgpIHdhcm5z
IGlmIHRoZSBtZXRob2QgZG9lc24ndCBleGlzdCBmb3IgdGhlIG9iamVjdC4KLSAgICBpZiAoIWhh
c01ldGFNZXRob2QocSwgIm5hdmlnYXRpb25Qb2xpY3lGb3JVcmwoUVZhcmlhbnQsUVZhcmlhbnQs
UVZhcmlhbnQpIikpCi0gICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6VXNlOwotCi0g
ICAgUVZhcmlhbnQgcmV0OwotICAgIGlmIChRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKHEsICJu
YXZpZ2F0aW9uUG9saWN5Rm9yVXJsIiwgUV9SRVRVUk5fQVJHKFFWYXJpYW50LCByZXQpLCBRX0FS
RyhRVmFyaWFudCwgdXJsKSwgUV9BUkcoUVZhcmlhbnQsIGJ1dHRvbiksIFFfQVJHKFFWYXJpYW50
LCBRVmFyaWFudChtb2RpZmllcnMpKSkpCi0gICAgICAgIHJldHVybiB0b1BvbGljeUFjdGlvbihz
dGF0aWNfY2FzdDxRRGVza3RvcFdlYlZpZXc6Ok5hdmlnYXRpb25Qb2xpY3k+KHJldC50b0ludCgp
KSk7Ci0gICAgcmV0dXJuIFF0UG9saWN5SW50ZXJmYWNlOjpVc2U7Ci19Ci0KLSNpbmNsdWRlICJt
b2NfcWRlc2t0b3B3ZWJ2aWV3LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
MDgzZmE3ZjMzMzFjYjBjYWQwZGMyNGIzY2JjMDBhZWZkNjQzNmEyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxZGVza3RvcHdlYnZpZXdfaAotI2RlZmluZSBxZGVz
a3RvcHdlYnZpZXdfaAotCi0jaW5jbHVkZSAicWJhc2V3ZWJ2aWV3LmgiCi0jaW5jbHVkZSAicXdl
YmtpdGdsb2JhbC5oIgotCi1jbGFzcyBRRGVza3RvcFdlYlZpZXdQcml2YXRlOwotCi1RVF9CRUdJ
Tl9OQU1FU1BBQ0UKLWNsYXNzIFFGb2N1c0V2ZW50OwotY2xhc3MgUU1vdXNlRXZlbnQ7Ci1jbGFz
cyBRSG92ZXJFdmVudDsKLWNsYXNzIFFJbnB1dE1ldGhvZEV2ZW50OwotY2xhc3MgUUtleUV2ZW50
OwotY2xhc3MgUVBhaW50ZXI7Ci1jbGFzcyBRUmVjdEY7Ci1jbGFzcyBRRHJhZ0VudGVyRXZlbnQ7
Ci1jbGFzcyBRRHJhZ01vdmVFdmVudDsKLWNsYXNzIFFEcmFnTGVhdmVFdmVudDsKLWNsYXNzIFFE
cm9wRXZlbnQ7Ci1jbGFzcyBRVG91Y2hFdmVudDsKLWNsYXNzIFFXaGVlbEV2ZW50OwotUVRfRU5E
X05BTUVTUEFDRQotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0NvbnRleHQqIFdLQ29u
dGV4dFJlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZUdyb3VwKiBXS1BhZ2VH
cm91cFJlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZSogV0tQYWdlUmVmOwot
Ci1uYW1lc3BhY2UgV1RSIHsKLSAgICBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7Ci19Ci0KLWNsYXNz
IFFXRUJLSVRfRVhQT1JUIFFEZXNrdG9wV2ViVmlldyA6IHB1YmxpYyBRQmFzZVdlYlZpZXcgewot
ICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUURlc2t0b3BXZWJWaWV3KFFRdWlja0l0ZW0qIHBh
cmVudCA9IDApOwotICAgIHZpcnR1YWwgflFEZXNrdG9wV2ViVmlldygpOwotCi1RX1NJR05BTFM6
Ci0gICAgdm9pZCBsaW5rSG92ZXJlZChjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcmIHRp
dGxlKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlF
dmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50Kik7Ci0g
ICAgdmlydHVhbCB2b2lkIGlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2
b2lkIGZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VQ
cmVzc0V2ZW50KFFNb3VzZUV2ZW50ICopOwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVFdmVu
dChRTW91c2VFdmVudCAqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUU1v
dXNlRXZlbnQgKik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91
c2VFdmVudCAqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2hlZWxFdmVudChRV2hlZWxFdmVudCopOwot
ICAgIHZpcnR1YWwgdm9pZCBob3ZlckVudGVyRXZlbnQoUUhvdmVyRXZlbnQqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgaG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
aG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYWdNb3Zl
RXZlbnQoUURyYWdNb3ZlRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhZ0VudGVyRXZlbnQo
UURyYWdFbnRlckV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYWdMZWF2ZUV2ZW50KFFEcmFn
TGVhdmVFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBkcm9wRXZlbnQoUURyb3BFdmVudCopOwot
Ci0gICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmLCBjb25zdCBR
UmVjdEYmKTsKLSAgICB2b2lkIHBhaW50KFFQYWludGVyKik7Ci0gICAgdmlydHVhbCBib29sIGV2
ZW50KFFFdmVudCopOwotCi1wcml2YXRlOgotICAgIFFEZXNrdG9wV2ViVmlldyhXS0NvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmLCBRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKLSAgICBXS1BhZ2VS
ZWYgcGFnZVJlZigpIGNvbnN0OwotICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9x
X29uT3BlblBhbmVsRmlsZXNTZWxlY3RlZCgpKTsKLSAgICBRX1BSSVZBVEVfU0xPVChkX2Z1bmMo
KSwgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCByZXN1bHQpKTsKLQotICAgIGZyaWVu
ZCBjbGFzcyBXVFI6OlBsYXRmb3JtV2ViVmlldzsKLSAgICBRX0RFQ0xBUkVfUFJJVkFURShRRGVz
a3RvcFdlYlZpZXcpCi19OwotCi1RTUxfREVDTEFSRV9UWVBFKFFEZXNrdG9wV2ViVmlldykKLVFf
REVDTEFSRV9NRVRBVFlQRShRRGVza3RvcFdlYlZpZXc6Ok5hdmlnYXRpb25Qb2xpY3kpCi0KLSNl
bmRpZiAvKiBxZGVza3RvcHdlYnZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXdfcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MzI1ZTBiZDM0Mzg0NGQwYzY2YjkyNzBlYjk5OWZiMDhlY2ZhN2M3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3X3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxZGVza3RvcHdlYnZpZXdfcF9o
Ci0jZGVmaW5lIHFkZXNrdG9wd2Vidmlld19wX2gKLQotI2luY2x1ZGUgIlF0UG9saWN5SW50ZXJm
YWNlLmgiCi0jaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAicWJhc2V3ZWJ2
aWV3X3AuaCIKLSNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXcuaCIKLQotY2xhc3MgUUZpbGVEaWFs
b2c7Ci0KLWNsYXNzIFFEZXNrdG9wV2ViVmlld1ByaXZhdGUgOiBwdWJsaWMgUUJhc2VXZWJWaWV3
UHJpdmF0ZSwgcHVibGljIFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlLCBwdWJsaWMgV2ViS2l0OjpR
dFBvbGljeUludGVyZmFjZQotewotICAgIFFfREVDTEFSRV9QVUJMSUMoUURlc2t0b3BXZWJWaWV3
KQotcHVibGljOgotICAgIFFEZXNrdG9wV2ViVmlld1ByaXZhdGUoKTsKLSAgICB2b2lkIGluaXQo
V0tDb250ZXh0UmVmID0gMCwgV0tQYWdlR3JvdXBSZWYgPSAwKTsKLQotICAgIHN0YXRpYyBRRGVz
a3RvcFdlYlZpZXcqIGNyZWF0ZVZpZXdXaXRoUGFnZUdyb3VwKFdLUGFnZUdyb3VwUmVmKTsKLQot
ICAgIFFEZXNrdG9wV2ViVmlldyogd2ViVmlldygpOwotICAgIHZvaWQgX3Ffb25PcGVuUGFuZWxG
aWxlc1NlbGVjdGVkKCk7Ci0gICAgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCByZXN1
bHQpOwotICAgIHZvaWQgZW5hYmxlTW91c2VFdmVudHMoKTsKLSAgICB2b2lkIGRpc2FibGVNb3Vz
ZUV2ZW50cygpOwotCi0gICAgYm9vbCBpc0NyYXNoZWQ7Ci0KLXByaXZhdGU6Ci0gICAgLy8gSW1w
bGVtZW50YXRpb24gb2YgUXRWaWV3SW50ZXJmYWNlLgotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3
TmVlZHNEaXNwbGF5KGNvbnN0IFFSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIFFTaXplIGRyYXdpbmdB
cmVhU2l6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNp
emUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBv
aW50JiBwb3MpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCk7Ci0gICAgdmlydHVh
bCBib29sIGhhc0ZvY3VzKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmlzaWJsZSgpOwotCi0gICAg
dmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhRdDo6RHJvcEFjdGlvbnMgc3VwcG9ydGVkRHJvcEFjdGlv
bnMsIGNvbnN0IFFJbWFnZSYgZHJhZ0ltYWdlLCBRTWltZURhdGEqLCBRUG9pbnQqIGNsaWVudFBv
c2l0aW9uLCBRUG9pbnQqIGdsb2JhbFBvc2l0aW9uLCBRdDo6RHJvcEFjdGlvbiogZHJvcEFjdGlv
bik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9v
bWFibGVBcmVhKGNvbnN0IFFQb2ludCYsIGNvbnN0IFFSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hhbmdlVXJsKGNvbnN0IFFVcmwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
VGl0bGUoY29uc3QgUVN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUb29sVGlw
KGNvbnN0IFFTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU3RhdHVzVGV4dChj
b25zdCBRU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUN1cnNvcihjb25zdCBR
Q3Vyc29yJik7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRCZWdpbigpOwotICAgIHZpcnR1YWwg
dm9pZCBsb2FkRGlkQ29tbWl0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRTdWNjZWVkKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRGYWlsKGNvbnN0IFF0V2ViRXJyb3ImKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlTG9hZFByb2dyZXNzKGludCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2hvd0NvbnRleHRNZW51KFFTaGFyZWRQb2ludGVyPFFNZW51Pik7Ci0gICAgdmlydHVhbCB2
b2lkIGhpZGVDb250ZXh0TWVudSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRB
bGVydChjb25zdCBRU3RyaW5nJik7Ci0gICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRDb25m
aXJtKGNvbnN0IFFTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIFFTdHJpbmcgcnVuSmF2YVNjcmlwdFBy
b21wdChjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYgZGVmYXVsdFZhbHVlLCBib29sJiBv
ayk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOwotCi0gICAgdmlydHVhbCBRSlNFbmdpbmUqIGVuZ2lu
ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGNob29zZUZpbGVzKFdLT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXJSZWYsIGNvbnN0IFFTdHJpbmdMaXN0JiBzZWxlY3RlZEZpbGVOYW1lcywgUXRWaWV3SW50
ZXJmYWNlOjpGaWxlQ2hvb3NlclR5cGUpOwotICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZFJlcXVl
c3RlZChRV2ViRG93bmxvYWRJdGVtKiBkb3dubG9hZEl0ZW0pOwotCi0gICAgdmlydHVhbCB2b2lk
IGRpZE1vdXNlTW92ZU92ZXJFbGVtZW50KGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJik7Ci0K
LSAgICAvLyBRdFBvbGljeUludGVyZmFjZS4KLSAgICB2aXJ0dWFsIFF0UG9saWN5SW50ZXJmYWNl
OjpQb2xpY3lBY3Rpb24gbmF2aWdhdGlvblBvbGljeUZvclVSTChjb25zdCBRVXJsJiwgUXQ6Ok1v
dXNlQnV0dG9uLCBRdDo6S2V5Ym9hcmRNb2RpZmllcnMpOwotCi0gICAgUVNoYXJlZFBvaW50ZXI8
UU1lbnU+IGFjdGl2ZU1lbnU7Ci0KLSAgICBRRmlsZURpYWxvZyogZmlsZURpYWxvZzsKLSAgICBX
S09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIG9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOwotCi0g
ICAgUVVybCBsYXN0SG92ZXJlZFVSTDsKLSAgICBRU3RyaW5nIGxhc3RIb3ZlcmVkVGl0bGU7Ci19
OwotCi0jZW5kaWYgLyogcWRlc2t0b3B3ZWJ2aWV3X3BfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBhYTlk
M2U1YTczMzJkNjE5N2FmZTM5ZmQyMmI1NDFiOWRjZDA3YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKQEAgLTAsMCAr
MSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAicXF1aWNrd2VicGFnZS5oIgorCisjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgInFxdWlja3dlYnBh
Z2VfcC5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXcuaCIKKyNpbmNsdWRlIDxRdENvcmUvUVVy
bD4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FRdWlja0NhbnZhcz4KKyNpbmNsdWRlIDxRdERl
Y2xhcmF0aXZlL1FTR0VuZ2luZT4KKworUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZShRUXVp
Y2tJdGVtKiBwYXJlbnQpCisgICAgOiBRUXVpY2tJdGVtKHBhcmVudCkKKyAgICAsIGQobmV3IFFR
dWlja1dlYlBhZ2VQcml2YXRlKHRoaXMpKQoreworICAgIHNldEZsYWcoSXRlbUhhc0NvbnRlbnRz
KTsKKworICAgIC8vIFdlIGRvIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgdG9wIGxlZnQgc28gdGhl
IHZpZXdwb3J0IGNhbiBhc3N1bWUgdGhlIHBvc2l0aW9uIDAsIDAKKyAgICAvLyBpcyBhbHdheXMg
d2hlcmUgcmVuZGVyaW5nIHN0YXJ0cy4KKyAgICBzZXRUcmFuc2Zvcm1PcmlnaW4oVG9wTGVmdCk7
CisgICAgaW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucygpOworfQorCit2b2lkIFFRdWlja1dlYlBh
Z2U6OmluaXRTY2VuZUdyYXBoQ29ubmVjdGlvbnMoKQoreworICAgIGlmIChkLT5wYWludGluZ0lz
SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNhbnZhcygpKQorICAgICAg
ICByZXR1cm47CisgICAgZC0+cGFpbnRpbmdJc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBpZiAo
c2NlbmVHcmFwaEVuZ2luZSgpKQorICAgICAgICBkLT5fcV9vblNjZW5lR3JhcGhJbml0aWFsaXpl
ZCgpOworICAgIGVsc2UKKyAgICAgICAgY29ubmVjdChjYW52YXMoKSwgU0lHTkFMKHNjZW5lR3Jh
cGhJbml0aWFsaXplZCgpKSwgdGhpcywgU0xPVChfcV9vblNjZW5lR3JhcGhJbml0aWFsaXplZCgp
KSk7Cit9CisKK1FRdWlja1dlYlBhZ2U6On5RUXVpY2tXZWJQYWdlKCkKK3sKKyAgICBkZWxldGUg
ZDsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXZl
bnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6
OmtleVJlbGVhc2VFdmVudChRS2V5RXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2
ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjppbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1l
dGhvZEV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQg
UVF1aWNrV2ViUGFnZTo6Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50KiBldmVudCkKK3sKKyAgICB0
aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6Zm9jdXNPdXRFdmVu
dChRRm9jdXNFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2
b2lkIFFRdWlja1dlYlBhZ2U6Om1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCogZXZlbnQpCit7
CisgICAgZm9yY2VBY3RpdmVGb2N1cygpOworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwor
dm9pZCBRUXVpY2tXZWJQYWdlOjptb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCogZXZlbnQpCit7
CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6Om1vdXNl
UmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVu
dCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6bW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3Vz
ZUV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1
aWNrV2ViUGFnZTo6d2hlZWxFdmVudChRV2hlZWxFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+
ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmhvdmVyRW50ZXJFdmVudChR
SG92ZXJFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lk
IFFRdWlja1dlYlBhZ2U6OmhvdmVyTW92ZUV2ZW50KFFIb3ZlckV2ZW50KiBldmVudCkKK3sKKyAg
ICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6aG92ZXJMZWF2
ZUV2ZW50KFFIb3ZlckV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9
CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6ZHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVudCogZXZl
bnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6
OmRyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZl
bnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmRyYWdMZWF2ZUV2ZW50KFFEcmFn
TGVhdmVFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lk
IFFRdWlja1dlYlBhZ2U6OmRyb3BFdmVudChRRHJvcEV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlz
LT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2Vk
KGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksIGNvbnN0IFFSZWN0RiYgb2xkR2VvbWV0cnkpCit7
CisgICAgUVF1aWNrSXRlbTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dlb21ldHJ5LCBvbGRHZW9tZXRy
eSk7CisgICAgaWYgKG5ld0dlb21ldHJ5LnNpemUoKSAhPSBvbGRHZW9tZXRyeS5zaXplKCkpCisg
ICAgICAgIGQtPnBhZ2VQcm94eS0+c2V0RHJhd2luZ0FyZWFTaXplKG5ld0dlb21ldHJ5LnNpemUo
KS50b1NpemUoKSk7Cit9CisKK2Jvb2wgUVF1aWNrV2ViUGFnZTo6ZXZlbnQoUUV2ZW50KiBldikK
K3sKKyAgICBpZiAoZC0+cGFnZVByb3h5LT5oYW5kbGVFdmVudChldikpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChldi0+dHlwZSgpID09IFFFdmVudDo6SW5wdXRNZXRob2QpCisgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgYW4gZW5kbGVz
cyBsb29wIGluIGNvbm5lY3Rpb24gd2l0aCBRUXVpY2tJdGVtOjpldmVudCgpLgorICAgIHJldHVy
biBRUXVpY2tJdGVtOjpldmVudChldik7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6dG91Y2hF
dmVudChRVG91Y2hFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQor
Cit2b2lkIFFRdWlja1dlYlBhZ2U6Oml0ZW1DaGFuZ2UoSXRlbUNoYW5nZSBjaGFuZ2UsIGNvbnN0
IEl0ZW1DaGFuZ2VEYXRhICZkYXRhKQoreworICAgIGlmIChjaGFuZ2UgPT0gSXRlbVNjZW5lQ2hh
bmdlKQorICAgICAgICBpbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7CisgICAgUVF1aWNrSXRl
bTo6aXRlbUNoYW5nZShjaGFuZ2UsIGRhdGEpOworfQorCitRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6
UVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2ViUGFnZSogdmlldykKKyAgICA6IHEodmlldykK
KyAgICAsIHBhZ2VQcm94eSgwKQorICAgICwgbmF2aWdhdGlvbkNvbnRyb2xsZXIoMCkKKyAgICAs
IHNnVXBkYXRlUXVldWUodmlldykKKyAgICAsIHBhaW50aW5nSXNJbml0aWFsaXplZChmYWxzZSkK
K3sKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2ViUGFn
ZVByb3h5KiBwYWdlUHJveHkpCit7CisgICAgQVNTRVJUKCF0aGlzLT5wYWdlUHJveHkpOworICAg
IEFTU0VSVChwYWdlUHJveHkpOworICAgIHRoaXMtPnBhZ2VQcm94eSA9IHBhZ2VQcm94eTsKKwor
fQorCitzdGF0aWMgZmxvYXQgY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkoY29uc3QgUVF1aWNrSXRl
bSogaXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICBm
bG9hdCBvcGFjaXR5ID0gaXRlbS0+b3BhY2l0eSgpOworICAgIGlmIChvcGFjaXR5IDwgMC4wMSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gb3BhY2l0eSAqIGNvbXB1dGVFZmZlY3Rp
dmVPcGFjaXR5KGl0ZW0tPnBhcmVudEl0ZW0oKSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZVBy
aXZhdGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKK3sKKyAgICBpZiAoIXEtPmlzVmlzaWJs
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHEtPml0
ZW1UcmFuc2Zvcm0oMCwgMCk7CisKKyAgICBmbG9hdCBvcGFjaXR5ID0gY29tcHV0ZUVmZmVjdGl2
ZU9wYWNpdHkocSk7CisgICAgUVJlY3RGIGNsaXBSZWN0ID0gcS0+cGFyZW50SXRlbSgpLT5tYXBS
ZWN0VG9TY2VuZShxLT5wYXJlbnRJdGVtKCktPmJvdW5kaW5nUmVjdCgpKTsKKworICAgIGdsRW5h
YmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgY29uc3QgaW50IGxlZnQgPSBjbGlwUmVjdC5sZWZ0
KCk7CisgICAgY29uc3QgaW50IHdpZHRoID0gY2xpcFJlY3Qud2lkdGgoKTsKKyAgICBjb25zdCBp
bnQgYm90dG9tID0gcS0+Y2FudmFzKCktPmhlaWdodCgpIC0gKGNsaXBSZWN0LmJvdHRvbSgpICsg
MSk7CisgICAgY29uc3QgaW50IGhlaWdodCA9IGNsaXBSZWN0LmhlaWdodCgpOworCisgICAgZ2xT
Y2lzc29yKGxlZnQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBwYWdlUHJveHktPnJl
bmRlclRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOworICAgIGdsRGlzYWJs
ZShHTF9TQ0lTU09SX1RFU1QpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpfcV9v
bkFmdGVyU2NlbmVSZW5kZXIoKQoreworICAgIC8vIFRPRE86IEFsbG93IHBhaW50aW5nIGJlZm9y
ZSB0aGUgc2NlbmUgb3IgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NlbmUgd2l0aCBhbiBGQk8uCisg
ICAgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlUHJp
dmF0ZTo6X3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKQoreworICAgIFFTR0VuZ2luZSogZW5n
aW5lID0gcS0+c2NlbmVHcmFwaEVuZ2luZSgpOworICAgIFFPYmplY3Q6OmNvbm5lY3QoZW5naW5l
LCBTSUdOQUwoYWZ0ZXJSZW5kZXJpbmcoKSksIHEsIFNMT1QoX3Ffb25BZnRlclNjZW5lUmVuZGVy
KCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Cit9CisKKyNpbmNsdWRlICJtb2NfcXF1aWNrd2Vi
cGFnZS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUwMTc5NzcyMjJjY2QzOTA3ZTUxMTc4NTAzZmE4ZTYzY2JjYmZh
MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2UuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBxcXVpY2t3ZWJwYWdlX2gKKyNkZWZpbmUgcXF1aWNrd2VicGFnZV9oCisKKyNpbmNsdWRlICJx
d2Via2l0Z2xvYmFsLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvUVNoYXJlZFBvaW50ZXI+CisjaW5j
bHVkZSA8UXREZWNsYXJhdGl2ZS9RUXVpY2tJdGVtPgorCitjbGFzcyBRUXVpY2tXZWJWaWV3Owor
Y2xhc3MgUVF1aWNrV2ViUGFnZVByaXZhdGU7CitjbGFzcyBRV2ViTmF2aWdhdGlvbkNvbnRyb2xs
ZXI7CitjbGFzcyBRV2ViUHJlZmVyZW5jZXM7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
UXRWaWV3SW50ZXJmYWNlOworfQorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJQYWdl
IDogcHVibGljIFFRdWlja0l0ZW0geworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVF1aWNr
V2ViUGFnZShRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKKyAgICB2aXJ0dWFsIH5RUXVpY2tXZWJQ
YWdlKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVudChRS2V5
RXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQga2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCopOwor
ICAgIHZpcnR1YWwgdm9pZCBpbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50Kik7Cisg
ICAgdmlydHVhbCB2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopOworICAgIHZpcnR1YWwg
dm9pZCBmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNl
UHJlc3NFdmVudChRTW91c2VFdmVudCAqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlRXZl
bnQoUU1vdXNlRXZlbnQgKik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KFFN
b3VzZUV2ZW50ICopOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1v
dXNlRXZlbnQgKik7CisgICAgdmlydHVhbCB2b2lkIHdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaG92ZXJFbnRlckV2ZW50KFFIb3ZlckV2ZW50Kik7CisgICAgdmly
dHVhbCB2b2lkIGhvdmVyTW92ZUV2ZW50KFFIb3ZlckV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lk
IGhvdmVyTGVhdmVFdmVudChRSG92ZXJFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBkcmFnTW92
ZUV2ZW50KFFEcmFnTW92ZUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGRyYWdFbnRlckV2ZW50
KFFEcmFnRW50ZXJFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBkcmFnTGVhdmVFdmVudChRRHJh
Z0xlYXZlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJvcEV2ZW50KFFEcm9wRXZlbnQqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdG91Y2hFdmVudChRVG91Y2hFdmVudCopOworICAgIHZpcnR1YWwg
Ym9vbCBldmVudChRRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKGNv
bnN0IFFSZWN0RiYsIGNvbnN0IFFSZWN0RiYpOworICAgIHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdl
KEl0ZW1DaGFuZ2UsIGNvbnN0IEl0ZW1DaGFuZ2VEYXRhJik7CisKK3ByaXZhdGU6CisgICAgUV9Q
UklWQVRFX1NMT1QoZCwgdm9pZCBfcV9vbkFmdGVyU2NlbmVSZW5kZXIoKSk7CisgICAgUV9QUklW
QVRFX1NMT1QoZCwgdm9pZCBfcV9vblNjZW5lR3JhcGhJbml0aWFsaXplZCgpKTsKKworICAgIHZv
aWQgaW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucygpOworCisgICAgUVF1aWNrV2ViUGFnZVByaXZh
dGUqIGQ7CisgICAgZnJpZW5kIGNsYXNzIFFRdWlja1dlYlZpZXdQcml2YXRlOworICAgIGZyaWVu
ZCBjbGFzcyBXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTsKK307CisKKyNlbmRpZiAvKiBxcXVpY2t3
ZWJwYWdlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2VicGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnBhZ2VfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0OTQxMzRmZGUzYzhjZTA4MzJkZDk0OTIyNGE0N2Mz
YzJlMzAyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2VfcC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIHFxdWlja3dlYnBhZ2VfcF9oCisjZGVmaW5lIHFxdWlja3dlYnBhZ2VfcF9oCisK
KyNpbmNsdWRlICJRdFNHVXBkYXRlUXVldWUuaCIKKyNpbmNsdWRlICJRdFZpZXdJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlLmgiCisjaW5jbHVkZSAicXdlYm5hdmlnYXRpb25j
b250cm9sbGVyLmgiCisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVJlY3RGOworY2xhc3Mg
UVNHTm9kZTsKK2NsYXNzIFFTdHJpbmc7CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFRdWlj
a1dlYlBhZ2U7CisKK2NsYXNzIFFRdWlja1dlYlBhZ2VQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBR
UXVpY2tXZWJQYWdlUHJpdmF0ZShRUXVpY2tXZWJQYWdlKiB2aWV3KTsKKworICAgIHZvaWQgc2V0
UGFnZVByb3h5KFF0V2ViUGFnZVByb3h5Kik7CisKKyAgICB2b2lkIF9xX29uQWZ0ZXJTY2VuZVJl
bmRlcigpOworICAgIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKTsKKyAgICB2b2lk
IHBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7CisKKyAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBx
OworICAgIFF0V2ViUGFnZVByb3h5KiBwYWdlUHJveHk7CisgICAgUVdlYk5hdmlnYXRpb25Db250
cm9sbGVyKiBuYXZpZ2F0aW9uQ29udHJvbGxlcjsKKyAgICBXZWJLaXQ6OlF0U0dVcGRhdGVRdWV1
ZSBzZ1VwZGF0ZVF1ZXVlOworICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxpemVkOworfTsKKwor
I2VuZGlmIC8qIHFxdWlja3dlYnBhZ2VfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTQ0MzQ4OGJhMjY0
MzFkMjE2Mjc1Y2ZiNTExNWNmYTIwMzI3NDVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtMCwwICsxLDQ1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxcXVp
Y2t3ZWJ2aWV3LmgiCisKKyNpbmNsdWRlICJRdFRvdWNoVmlld0ludGVyZmFjZS5oIgorI2luY2x1
ZGUgIlF0V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiVXRpbHNRdC5oIgorI2luY2x1ZGUgIldl
YlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisKKyNpbmNsdWRlICJx
cXVpY2t3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKKyNpbmNsdWRl
ICJxd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJxd2VicHJlZmVyZW5jZXNf
cC5oIgorCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RUXVpY2tDYW52YXM+CisjaW5jbHVkZSA8
UXRXaWRnZXRzL1FGaWxlRGlhbG9nPgorI2luY2x1ZGUgPFF0V2lkZ2V0cy9RSW5wdXREaWFsb2c+
CisjaW5jbHVkZSA8UXRXaWRnZXRzL1FNZXNzYWdlQm94PgorI2luY2x1ZGUgPFdLT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIuaD4KKworUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQ
cml2YXRlKCkKKyAgICA6IHFfcHRyKDApCisgICAgLCBuYXZpZ2F0aW9uQ29udHJvbGxlcigwKQor
ICAgICwgY3VycmVudFZpZXdNb2RlKFFRdWlja1dlYlZpZXc6OkRlc2t0b3ApCit7Cit9CisKK3Zv
aWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmVuYWJsZU1vdXNlRXZlbnRzKCkKK3sKKyAgICBRX1Eo
UVF1aWNrV2ViVmlldyk7CisgICAgcS0+c2V0QWNjZXB0ZWRNb3VzZUJ1dHRvbnMoUXQ6Ok1vdXNl
QnV0dG9uTWFzayk7CisgICAgcS0+c2V0QWNjZXB0SG92ZXJFdmVudHModHJ1ZSk7CisgICAgcGFn
ZVZpZXctPnNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpNb3VzZUJ1dHRvbk1hc2spOworICAg
IHBhZ2VWaWV3LT5zZXRBY2NlcHRIb3ZlckV2ZW50cyh0cnVlKTsKK30KKwordm9pZCBRUXVpY2tX
ZWJWaWV3UHJpdmF0ZTo6ZGlzYWJsZU1vdXNlRXZlbnRzKCkKK3sKKyAgICBRX1EoUVF1aWNrV2Vi
Vmlldyk7CisgICAgcS0+c2V0QWNjZXB0ZWRNb3VzZUJ1dHRvbnMoUXQ6Ok5vQnV0dG9uKTsKKyAg
ICBxLT5zZXRBY2NlcHRIb3ZlckV2ZW50cyhmYWxzZSk7CisgICAgcGFnZVZpZXctPnNldEFjY2Vw
dGVkTW91c2VCdXR0b25zKFF0OjpOb0J1dHRvbik7CisgICAgcGFnZVZpZXctPnNldEFjY2VwdEhv
dmVyRXZlbnRzKGZhbHNlKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6aW5pdChR
UXVpY2tXZWJWaWV3KiB2aWV3cG9ydCwgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZikKK3sKKyAgICBxX3B0ciA9IHZpZXdwb3J0OworICAgIHZpZXdw
b3J0LT5zZXRGbGFncyhRUXVpY2tJdGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUpOworICAg
IFFPYmplY3Q6OmNvbm5lY3Qodmlld3BvcnQsIFNJR05BTCh2aXNpYmxlQ2hhbmdlZCgpKSwgdmll
d3BvcnQsIFNMT1Qob25WaXNpYmxlQ2hhbmdlZCgpKSk7CisgICAgcGFnZVZpZXcucmVzZXQobmV3
IFFRdWlja1dlYlBhZ2Uodmlld3BvcnQpKTsKKyAgICB2aWV3SW50ZXJmYWNlLnJlc2V0KG5ldyBX
ZWJLaXQ6OlF0Vmlld0ludGVyZmFjZSh2aWV3cG9ydCwgcGFnZVZpZXcuZGF0YSgpKSk7CisgICAg
UVF1aWNrV2ViUGFnZVByaXZhdGUqIGNvbnN0IHBhZ2VWaWV3UHJpdmF0ZSA9IHBhZ2VWaWV3LmRh
dGEoKS0+ZDsKKyAgICBzZXRQYWdlUHJveHkobmV3IFF0V2ViUGFnZVByb3h5KHZpZXdJbnRlcmZh
Y2UuZGF0YSgpLCAwLCB0aGlzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKKyAgICBwYWdl
Vmlld1ByaXZhdGUtPnNldFBhZ2VQcm94eShwYWdlUHJveHkuZGF0YSgpKTsKKyAgICBRV2ViUHJl
ZmVyZW5jZXNQcml2YXRlOjpnZXQocGFnZVByb3h5LT5wcmVmZXJlbmNlcygpKS0+c2V0QXR0cmli
dXRlKFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVk
LCB0cnVlKTsKKyAgICBwYWdlUHJveHktPmluaXQoKTsKKyAgICBpbml0RGVza3RvcCh2aWV3cG9y
dCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXREZXNrdG9wKFFRdWlja1dl
YlZpZXcqIHZpZXdwb3J0KQoreworICAgIGlmIChpbnRlcmFjdGlvbkVuZ2luZSkgeworICAgICAg
ICBRT2JqZWN0OjpkaXNjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZp
ZXdwb3J0VXBkYXRlUmVxdWVzdGVkKCkpLCB2aWV3cG9ydCwgU0xPVChfcV92aWV3cG9ydFVwZGF0
ZWQoKSkpOworICAgICAgICBRT2JqZWN0OjpkaXNjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRh
dGEoKSwgU0lHTkFMKHZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50
RiYpKSwgdmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChj
b25zdCBRUG9pbnRGJikpKTsKKyAgICB9CisgICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQoMCk7
CisgICAgcGFnZVByb3h5LT5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKDApOworICAgIGVu
YWJsZU1vdXNlRXZlbnRzKCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRU
b3VjaChRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkKK3sKKyAgICBpbnRlcmFjdGlvbkVuZ2luZS5y
ZXNldChuZXcgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHZpZXdwb3J0LCBwYWdlVmlldy5k
YXRhKCkpKTsKKyAgICBwYWdlUHJveHktPnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoaW50
ZXJhY3Rpb25FbmdpbmUuZGF0YSgpKTsKKyAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKKyAgICBR
T2JqZWN0Ojpjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZpZXdwb3J0
VXBkYXRlUmVxdWVzdGVkKCkpLCB2aWV3cG9ydCwgU0xPVChfcV92aWV3cG9ydFVwZGF0ZWQoKSkp
OworICAgIFFPYmplY3Q6OmNvbm5lY3QoaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpLCBTSUdOQUwo
dmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpLCB2aWV3cG9y
dCwgU0xPVChfcV92aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYm
KSkpOworICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpsb2FkRGlkQ29tbWl0KCkKK3sKKyAgICBpZiAoY3VycmVudFZpZXdNb2RlID09IFFR
dWlja1dlYlZpZXc6OlRvdWNoKQorICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZS0+cmVzZXQoKTsK
K30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6Y29udGVudFNpemVDaGFuZ2VkKGNvbnN0
IFFTaXplJiBuZXdTaXplKQoreworICAgIGlmIChjdXJyZW50Vmlld01vZGUgPT0gUVF1aWNrV2Vi
Vmlldzo6RGVza3RvcCkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2VWaWV3LT5zZXRXaWR0aChu
ZXdTaXplLndpZHRoKCkpOworICAgIHBhZ2VWaWV3LT5zZXRIZWlnaHQobmV3U2l6ZS5oZWlnaHQo
KSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNjcm9sbFBvc2l0aW9uUmVxdWVz
dGVkKGNvbnN0IFFQb2ludCYgcG9zKQoreworICAgIGlmIChjdXJyZW50Vmlld01vZGUgPT0gUVF1
aWNrV2ViVmlldzo6VG91Y2gpCisgICAgICAgIGludGVyYWN0aW9uRW5naW5lLT5wYWdlUG9zaXRp
b25SZXF1ZXN0KHBvcyk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX3ZpZXdw
b3J0VXBkYXRlZCgpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIGNvbnN0IFFSZWN0
RiB2aXNpYmxlUmVjdEluUGFnZVZpZXdDb29yZGluYXRlcyA9IHEtPm1hcFJlY3RUb0l0ZW0ocGFn
ZVZpZXcuZGF0YSgpLCBxLT5ib3VuZGluZ1JlY3QoKSkuaW50ZXJzZWN0ZWQocGFnZVZpZXctPmJv
dW5kaW5nUmVjdCgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHBhZ2VWaWV3LT5zY2FsZSgpOworICAg
IHBhZ2VQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUodmlzaWJsZVJlY3RJblBh
Z2VWaWV3Q29vcmRpbmF0ZXMsIHNjYWxlKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0
ZTo6X3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJiB0cmFq
ZWN0b3J5VmVjdG9yKQoreworICAgIHBhZ2VQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJh
amVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6dXBkYXRlVmlld3BvcnRTaXplKCkKK3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7
CisgICAgUVNpemUgdmlld3BvcnRTaXplID0gcS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6
ZSgpOworCisgICAgaWYgKHZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYlBhZ2VQcm94eSogd2tQYWdlID0gdG9JbXBsKHBhZ2VQcm94eS0+cGFnZVJlZigp
KTsKKyAgICAvLyBMZXQgdGhlIFdlYlByb2Nlc3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0
IHNpemUsIHNvIHRoYXQKKyAgICAvLyBpdCBjYW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29yZGlu
Z2x5LgorICAgIHdrUGFnZS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7CisgICAgdXBk
YXRlVmlld3BvcnRDb25zdHJhaW50cygpOworICAgIF9xX3ZpZXdwb3J0VXBkYXRlZCgpOworfQor
Cit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjp1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCkK
K3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgUVNpemUgYXZhaWxhYmxlU2l6ZSA9IHEt
PmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUoKTsKKworICAgIGlmIChhdmFpbGFibGVTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUGFnZVByb3h5KiB3a1BhZ2Ug
PSB0b0ltcGwocGFnZVByb3h5LT5wYWdlUmVmKCkpOworICAgIFdlYlByZWZlcmVuY2VzKiB3a1By
ZWZzID0gd2tQYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKKworICAgIC8vIEZJWE1F
OiBSZW1vdmUgbGF0ZXI7IEhhcmRjb2RlIHNvbWUgdmFsdWVzIGZvciBub3cgdG8gbWFrZSBzdXJl
IHRoZSBEUEkgYWRqdXN0bWVudCBpcyBiZWluZyB0ZXN0ZWQuCisgICAgd2tQcmVmcy0+c2V0RGV2
aWNlRFBJKDI0MCk7CisgICAgd2tQcmVmcy0+c2V0RGV2aWNlV2lkdGgoNDgwKTsKKyAgICB3a1By
ZWZzLT5zZXREZXZpY2VIZWlnaHQoNzIwKTsKKworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmli
dXRlcyBhdHRyID0gV2ViQ29yZTo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyh2aWV3cG9ydEFy
Z3VtZW50cywgd2tQcmVmcy0+bGF5b3V0RmFsbGJhY2tXaWR0aCgpLCB3a1ByZWZzLT5kZXZpY2VX
aWR0aCgpLCB3a1ByZWZzLT5kZXZpY2VIZWlnaHQoKSwgd2tQcmVmcy0+ZGV2aWNlRFBJKCksIGF2
YWlsYWJsZVNpemUpOworICAgIFdlYkNvcmU6OnJlc3RyaWN0TWluaW11bVNjYWxlRmFjdG9yVG9W
aWV3cG9ydFNpemUoYXR0ciwgYXZhaWxhYmxlU2l6ZSk7CisgICAgV2ViQ29yZTo6cmVzdHJpY3RT
Y2FsZUZhY3RvclRvSW5pdGlhbFNjYWxlSWZOb3RVc2VyU2NhbGFibGUoYXR0cik7CisKKyAgICBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OkNvbnN0cmFpbnRzIG5ld0NvbnN0cmFpbnRzOwor
ICAgIG5ld0NvbnN0cmFpbnRzLmluaXRpYWxTY2FsZSA9IGF0dHIuaW5pdGlhbFNjYWxlOworICAg
IG5ld0NvbnN0cmFpbnRzLm1pbmltdW1TY2FsZSA9IGF0dHIubWluaW11bVNjYWxlOworICAgIG5l
d0NvbnN0cmFpbnRzLm1heGltdW1TY2FsZSA9IGF0dHIubWF4aW11bVNjYWxlOworICAgIG5ld0Nv
bnN0cmFpbnRzLmRldmljZVBpeGVsUmF0aW8gPSBhdHRyLmRldmljZVBpeGVsUmF0aW87CisgICAg
bmV3Q29uc3RyYWludHMuaXNVc2VyU2NhbGFibGUgPSAhIWF0dHIudXNlclNjYWxhYmxlOworICAg
IGludGVyYWN0aW9uRW5naW5lLT5zZXRDb25zdHJhaW50cyhuZXdDb25zdHJhaW50cyk7CisKKyAg
ICAvLyBPdmVyd3JpdGUgbWluaW11bSBzY2FsZSB2YWx1ZSB3aXRoIGZpdC10by12aWV3IHZhbHVl
LCB1bmxlc3MgdGhlIHRoZSBjb250ZW50IGF1dGhvcgorICAgIC8vIGV4cGxpY2l0bHkgc2F5cyBu
by4gTkI6IFdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB3ZSBrbm93IHdlIGhhdmUgYSB2YWxpZCBz
aXplLCBpZS4KKyAgICAvLyBhZnRlciBpbml0aWFsIGxheW91dCBoYXMgY29tcGxldGVkLgorfQor
Cit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMo
Y29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKGN1cnJl
bnRWaWV3TW9kZSA9PSBRUXVpY2tXZWJWaWV3OjpEZXNrdG9wKQorICAgICAgICByZXR1cm47Cisg
ICAgdmlld3BvcnRBcmd1bWVudHMgPSBhcmdzOworICAgIHVwZGF0ZVZpZXdwb3J0Q29uc3RyYWlu
dHMoKTsKK30KKworCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0QWxl
cnQoY29uc3QgUVN0cmluZyYgYWxlcnRUZXh0KQoreworI2lmbmRlZiBRVF9OT19NRVNTQUdFQk9Y
CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIGNvbnN0IFFTdHJpbmcgdGl0bGUgPSBRT2Jq
ZWN0Ojp0cigiSmF2YVNjcmlwdCBBbGVydCAtICUxIikuYXJnKHEtPnVybCgpLmhvc3QoKSk7Cisg
ICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7CisgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKDAs
IHRpdGxlLCBlc2NhcGVIdG1sKGFsZXJ0VGV4dCksIFFNZXNzYWdlQm94OjpPayk7CisgICAgZW5h
YmxlTW91c2VFdmVudHMoKTsKKyNlbHNlCisgICAgUV9VTlVTRUQoYWxlcnRUZXh0KTsKKyNlbmRp
ZgorfQorCitib29sIFFRdWlja1dlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0Q29uZmlybShj
b25zdCBRU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyNpZm5k
ZWYgUVRfTk9fTUVTU0FHRUJPWAorICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBjb25zdCBR
U3RyaW5nIHRpdGxlID0gUU9iamVjdDo6dHIoIkphdmFTY3JpcHQgQ29uZmlybSAtICUxIikuYXJn
KHEtPnVybCgpLmhvc3QoKSk7CisgICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7CisgICAgcmVzdWx0
ID0gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0bGUs
IGVzY2FwZUh0bWwobWVzc2FnZSksIFFNZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7
CisgICAgZW5hYmxlTW91c2VFdmVudHMoKTsKKyNlbHNlCisgICAgUV9VTlVTRUQobWVzc2FnZSk7
CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitRU3RyaW5nIFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgYm9vbCYgb2spCit7CisjaWZuZGVmIFFUX05PX0lOUFVU
RElBTE9HCisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIGNvbnN0IFFTdHJpbmcgdGl0bGUg
PSBRT2JqZWN0Ojp0cigiSmF2YVNjcmlwdCBQcm9tcHQgLSAlMSIpLmFyZyhxLT51cmwoKS5ob3N0
KCkpOworICAgIGRpc2FibGVNb3VzZUV2ZW50cygpOworICAgIFFTdHJpbmcgcmVzdWx0ID0gUUlu
cHV0RGlhbG9nOjpnZXRUZXh0KDAsIHRpdGxlLCBlc2NhcGVIdG1sKG1lc3NhZ2UpLCBRTGluZUVk
aXQ6Ok5vcm1hbCwgZGVmYXVsdFZhbHVlLCAmb2spOworICAgIGVuYWJsZU1vdXNlRXZlbnRzKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgUV9VTlVTRUQobWVzc2FnZSk7CisgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKKyNlbmRpZgorfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2
YXRlOjpjaG9vc2VGaWxlcyhXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyUmVm
LCBjb25zdCBRU3RyaW5nTGlzdCYgc2VsZWN0ZWRGaWxlTmFtZXMsIFF0Vmlld0ludGVyZmFjZTo6
RmlsZUNob29zZXJUeXBlIHR5cGUpCit7CisjaWZuZGVmIFFUX05PX0ZJTEVESUFMT0cKKyAgICBR
X1EoUVF1aWNrV2ViVmlldyk7CisgICAgb3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgPSBsaXN0ZW5l
clJlZjsKKworICAgIC8vIFF0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZmlsZXMgc3VnZ2Vz
dGlvbiwgc28gd2UgZ2V0IGp1c3QgdGhlIGZpcnN0IHN1Z2dlc3Rpb24uCisgICAgUVN0cmluZyBz
ZWxlY3RlZEZpbGVOYW1lOworICAgIGlmICghc2VsZWN0ZWRGaWxlTmFtZXMuaXNFbXB0eSgpKQor
ICAgICAgICBzZWxlY3RlZEZpbGVOYW1lID0gc2VsZWN0ZWRGaWxlTmFtZXMuYXQoMCk7CisKKyAg
ICBRX0FTU0VSVCghZmlsZURpYWxvZyk7CisKKyAgICBRV2luZG93KiB3aW5kb3cgPSBxLT5jYW52
YXMoKTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgZmlsZURpYWxv
ZyA9IG5ldyBRRmlsZURpYWxvZygwLCBRU3RyaW5nKCksIHNlbGVjdGVkRmlsZU5hbWUpOworICAg
IGZpbGVEaWFsb2ctPndpbmRvdygpLT53aW5JZCgpOyAvLyBFbnN1cmUgdGhhdCB0aGUgZGlhbG9n
IGhhcyBhIHdpbmRvdworICAgIFFfQVNTRVJUKGZpbGVEaWFsb2ctPndpbmRvdygpLT53aW5kb3dI
YW5kbGUoKSk7CisgICAgZmlsZURpYWxvZy0+d2luZG93KCktPndpbmRvd0hhbmRsZSgpLT5zZXRU
cmFuc2llbnRQYXJlbnQod2luZG93KTsKKworICAgIGZpbGVEaWFsb2ctPm9wZW4ocSwgU0xPVChf
cV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKSkpOworCisgICAgcS0+Y29ubmVjdChmaWxlRGlh
bG9nLCBTSUdOQUwoZmluaXNoZWQoaW50KSksIFNMT1QoX3Ffb25PcGVuUGFuZWxGaW5pc2hlZChp
bnQpKSk7CisjZW5kaWYKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffb25PcGVu
UGFuZWxGaWxlc1NlbGVjdGVkKCkKK3sKKyAgICBjb25zdCBRU3RyaW5nTGlzdCBmaWxlTGlzdCA9
IGZpbGVEaWFsb2ctPnNlbGVjdGVkRmlsZXMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEFQSU9iamVj
dD4gPiB3a0ZpbGVzKGZpbGVMaXN0LnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZmlsZUxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIHdrRmlsZXNbaV0gPSBXZWJVUkw6
OmNyZWF0ZShRVXJsOjpmcm9tTG9jYWxGaWxlKGZpbGVMaXN0LmF0KGkpKS50b1N0cmluZygpKTsK
KworICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDaG9vc2VGaWxlcyhvcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lciwgdG9BUEkoSW1tdXRhYmxlQXJyYXk6OmFkb3B0KHdrRmlsZXMpLmxlYWtSZWYo
KSkpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV9vbk9wZW5QYW5lbEZpbmlz
aGVkKGludCByZXN1bHQpCit7CisgICAgaWYgKHJlc3VsdCA9PSBRRGlhbG9nOjpSZWplY3RlZCkK
KyAgICAgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNhbmNlbChvcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lcik7CisKKyAgICBmaWxlRGlhbG9nLT5kZWxldGVMYXRlcigpOworICAgIGZpbGVEaWFs
b2cgPSAwOworfQorCitzdGF0aWMgUXRQb2xpY3lJbnRlcmZhY2U6OlBvbGljeUFjdGlvbiB0b1Bv
bGljeUFjdGlvbihRUXVpY2tXZWJWaWV3OjpOYXZpZ2F0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAg
ICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgUVF1aWNrV2ViVmlldzo6VXNlUG9saWN5Ogor
ICAgICAgICByZXR1cm4gUXRQb2xpY3lJbnRlcmZhY2U6OlVzZTsKKyAgICBjYXNlIFFRdWlja1dl
YlZpZXc6OkRvd25sb2FkUG9saWN5OgorICAgICAgICByZXR1cm4gUXRQb2xpY3lJbnRlcmZhY2U6
OkRvd25sb2FkOworICAgIGNhc2UgUVF1aWNrV2ViVmlldzo6SWdub3JlUG9saWN5OgorICAgICAg
ICByZXR1cm4gUXRQb2xpY3lJbnRlcmZhY2U6Oklnbm9yZTsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFF0UG9saWN5SW50ZXJmYWNlOjpJZ25vcmU7Cit9CisK
K3N0YXRpYyBib29sIGhhc01ldGFNZXRob2QoUU9iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBt
ZXRob2ROYW1lKQoreworICAgIGludCBtZXRob2RJbmRleCA9IG9iamVjdC0+bWV0YU9iamVjdCgp
LT5pbmRleE9mTWV0aG9kKFFNZXRhT2JqZWN0Ojpub3JtYWxpemVkU2lnbmF0dXJlKG1ldGhvZE5h
bWUpKTsKKyAgICByZXR1cm4gbWV0aG9kSW5kZXggPj0gMCAmJiBtZXRob2RJbmRleCA8IG9iamVj
dC0+bWV0YU9iamVjdCgpLT5tZXRob2RDb3VudCgpOworfQorCisvKiEKKyAgICBccW1sbWV0aG9k
IE5hdmlnYXRpb25Qb2xpY3kgRGVza3RvcFdlYlZpZXc6Om5hdmlnYXRpb25Qb2xpY3lGb3JVcmwo
dXJsLCBidXR0b24sIG1vZGlmaWVycykKKworICAgIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbXBs
ZW1lbnRlZCBieSB0aGUgdXNlciBvZiBEZXNrdG9wV2ViVmlldyBlbGVtZW50LgorCisgICAgSXQg
d2lsbCBiZSBjYWxsZWQgdG8gZGVjaWRlIHRoZSBwb2xpY3kgZm9yIGEgbmF2aWdhdGlvbjogd2hl
dGhlciB0aGUgV2ViVmlldyBzaG91bGQgaWdub3JlIHRoZSBuYXZpZ2F0aW9uLAorICAgIGNvbnRp
bnVlIGl0IG9yIHN0YXJ0IGEgZG93bmxvYWQuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBvbmUg
b2YgdGhlIHBvbGljaWVzIGluIHRoZSBOYXZpZ2F0aW9uUG9saWN5IGVudW1lcmF0aW9uLgorKi8K
K1F0UG9saWN5SW50ZXJmYWNlOjpQb2xpY3lBY3Rpb24gUVF1aWNrV2ViVmlld1ByaXZhdGU6Om5h
dmlnYXRpb25Qb2xpY3lGb3JVUkwoY29uc3QgUVVybCYgdXJsLCBRdDo6TW91c2VCdXR0b24gYnV0
dG9uLCBRdDo6S2V5Ym9hcmRNb2RpZmllcnMgbW9kaWZpZXJzKQoreworICAgIFFfUShRUXVpY2tX
ZWJWaWV3KTsKKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRoaXMgZmlyc3QgYmVjYXVzZSBpbnZv
a2VNZXRob2QoKSB3YXJucyBpZiB0aGUgbWV0aG9kIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBvYmpl
Y3QuCisgICAgaWYgKCFoYXNNZXRhTWV0aG9kKHEsICJuYXZpZ2F0aW9uUG9saWN5Rm9yVXJsKFFW
YXJpYW50LFFWYXJpYW50LFFWYXJpYW50KSIpKQorICAgICAgICByZXR1cm4gUXRQb2xpY3lJbnRl
cmZhY2U6OlVzZTsKKworICAgIFFWYXJpYW50IHJldDsKKyAgICBpZiAoUU1ldGFPYmplY3Q6Omlu
dm9rZU1ldGhvZChxLCAibmF2aWdhdGlvblBvbGljeUZvclVybCIsIFFfUkVUVVJOX0FSRyhRVmFy
aWFudCwgcmV0KSwgUV9BUkcoUVZhcmlhbnQsIHVybCksIFFfQVJHKFFWYXJpYW50LCBidXR0b24p
LCBRX0FSRyhRVmFyaWFudCwgUVZhcmlhbnQobW9kaWZpZXJzKSkpKQorICAgICAgICByZXR1cm4g
dG9Qb2xpY3lBY3Rpb24oc3RhdGljX2Nhc3Q8UVF1aWNrV2ViVmlldzo6TmF2aWdhdGlvblBvbGlj
eT4ocmV0LnRvSW50KCkpKTsKKyAgICByZXR1cm4gUXRQb2xpY3lJbnRlcmZhY2U6OlVzZTsKK30K
Kwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2ViUGFnZVByb3h5
KiBwYWdlUHJveHkpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIHRoaXMtPnBhZ2VQ
cm94eS5yZXNldChwYWdlUHJveHkpOworICAgIFFPYmplY3Q6OmNvbm5lY3QocGFnZVByb3h5LCBT
SUdOQUwocmVjZWl2ZWRNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KFFWYXJpYW50TWFwKSks
IHEsIFNJR05BTChtZXNzYWdlUmVjZWl2ZWQoUVZhcmlhbnRNYXApKSk7Cit9CisKK1FRdWlja1dl
YlZpZXc6OlFRdWlja1dlYlZpZXcoUVF1aWNrSXRlbSogcGFyZW50KQorICAgIDogUVF1aWNrSXRl
bShwYXJlbnQpCisgICAgLCBkX3B0cihuZXcgUVF1aWNrV2ViVmlld1ByaXZhdGUpCit7CisgICAg
UV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPmluaXQodGhpcyk7Cit9CisKK1FRdWlja1dlYlZp
ZXc6OlFRdWlja1dlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cFJlZiwgUVF1aWNrSXRlbSogcGFyZW50KQorICAgIDogUVF1aWNrSXRlbShwYXJl
bnQpCisgICAgLCBkX3B0cihuZXcgUVF1aWNrV2ViVmlld1ByaXZhdGUpCit7CisgICAgUV9EKFFR
dWlja1dlYlZpZXcpOworICAgIGQtPmluaXQodGhpcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVm
KTsKK30KKworUVF1aWNrV2ViVmlldzo6flFRdWlja1dlYlZpZXcoKQoreworfQorCitRUXVpY2tX
ZWJQYWdlKiBRUXVpY2tXZWJWaWV3OjpwYWdlKCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7
CisgICAgcmV0dXJuIGQtPnBhZ2VWaWV3LmRhdGEoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3
Ojpsb2FkKGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAg
ZC0+cGFnZVByb3h5LT5sb2FkKHVybCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6cG9zdE1l
c3NhZ2UoY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7
CisgICAgZC0+cGFnZVByb3h5LT5wb3N0TWVzc2FnZVRvTmF2aWdhdG9yUXRPYmplY3QobWVzc2Fn
ZSk7Cit9CisKK1FVcmwgUVF1aWNrV2ViVmlldzo6dXJsKCkgY29uc3QKK3sKKyAgICBRX0QoY29u
c3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+dXJsKCk7Cit9CisK
K2ludCBRUXVpY2tXZWJWaWV3Ojpsb2FkUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIFFfRChjb25z
dCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+cGFnZVByb3h5LT5sb2FkUHJvZ3Jlc3Mo
KTsKK30KKworUVN0cmluZyBRUXVpY2tXZWJWaWV3Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAgUV9E
KGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBkLT5wYWdlUHJveHktPnRpdGxlKCk7
Cit9CisKK1FXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciogUVF1aWNrV2ViVmlldzo6bmF2aWdhdGlv
bkNvbnRyb2xsZXIoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAg
ICBpZiAoIWQtPm5hdmlnYXRpb25Db250cm9sbGVyKQorICAgICAgICBjb25zdF9jYXN0PFFRdWlj
a1dlYlZpZXdQcml2YXRlKj4oZCktPm5hdmlnYXRpb25Db250cm9sbGVyID0gbmV3IFFXZWJOYXZp
Z2F0aW9uQ29udHJvbGxlcihkLT5wYWdlUHJveHkuZGF0YSgpKTsKKyAgICByZXR1cm4gZC0+bmF2
aWdhdGlvbkNvbnRyb2xsZXI7Cit9CisKK1FXZWJQcmVmZXJlbmNlcyogUVF1aWNrV2ViVmlldzo6
cHJlZmVyZW5jZXMoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAg
ICByZXR1cm4gZC0+cGFnZVByb3h5LT5wcmVmZXJlbmNlcygpOworfQorCit2b2lkIFFRdWlja1dl
YlZpZXc6OnNldFZpZXdNb2RlKFFRdWlja1dlYlZpZXc6OlZpZXdNb2RlIG1vZGUpCit7CisgICAg
UV9EKFFRdWlja1dlYlZpZXcpOworICAgIGlmIChtb2RlID09IGQtPmN1cnJlbnRWaWV3TW9kZSkK
KyAgICAgICAgcmV0dXJuOworICAgIGQtPmN1cnJlbnRWaWV3TW9kZSA9IG1vZGU7CisgICAgaWYg
KGQtPmN1cnJlbnRWaWV3TW9kZSA9PSBRUXVpY2tXZWJWaWV3OjpEZXNrdG9wKQorICAgICAgICBk
LT5pbml0RGVza3RvcCh0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIGQtPmluaXRUb3VjaCh0aGlz
KTsKKyAgICBlbWl0IHZpZXdNb2RlQ2hhbmdlZCgpOworICAgIG5hdmlnYXRpb25Db250cm9sbGVy
KCktPnJlbG9hZCgpOworfQorCitRUXVpY2tXZWJWaWV3OjpWaWV3TW9kZSBRUXVpY2tXZWJWaWV3
Ojp2aWV3TW9kZSgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAg
IHJldHVybiBkLT5jdXJyZW50Vmlld01vZGU7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6Z2Vv
bWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksIGNvbnN0IFFSZWN0RiYgb2xk
R2VvbWV0cnkpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIFFRdWlja0l0ZW06Omdl
b21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2VvbWV0cnkpOworICAgIGlmIChuZXdHZW9t
ZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpKSB7CisgICAgICAgIGlmIChkLT5jdXJy
ZW50Vmlld01vZGUgPT0gUVF1aWNrV2ViVmlldzo6RGVza3RvcCkgeworICAgICAgICAgICAgZC0+
cGFnZVZpZXctPnNldFdpZHRoKG5ld0dlb21ldHJ5LndpZHRoKCkpOworICAgICAgICAgICAgZC0+
cGFnZVZpZXctPnNldEhlaWdodChuZXdHZW9tZXRyeS5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZC0+dXBkYXRlVmlld3BvcnRTaXplKCk7CisgICAgfQorfQorCit2b2lk
IFFRdWlja1dlYlZpZXc6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQoreworICAgIGZv
cmNlQWN0aXZlRm9jdXMoKTsKKyAgICBRUXVpY2tJdGVtOjp0b3VjaEV2ZW50KGV2ZW50KTsKK30K
Kwordm9pZCBRUXVpY2tXZWJWaWV3OjpvblZpc2libGVDaGFuZ2VkKCkKK3sKKyAgICBRX0QoUVF1
aWNrV2ViVmlldyk7CisgICAgV2ViUGFnZVByb3h5KiB3a1BhZ2UgPSB0b0ltcGwoZC0+cGFnZVBy
b3h5LT5wYWdlUmVmKCkpOworCisgICAgd2tQYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFn
ZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKK30KKworV0tQYWdlUmVmIFFRdWlja1dlYlZpZXc6OnBh
Z2VSZWYoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1
cm4gZC0+cGFnZVByb3h5LT5wYWdlUmVmKCk7Cit9CisKKyNpbmNsdWRlICJtb2NfcXF1aWNrd2Vi
dmlldy5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRmYzcxNGQ1MjY0YTgxNTEwYzMwNTczYzFhNzY5NzgzNjRmN2E4
NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXcuaApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgcXF1aWNrd2Vidmlld19oCisjZGVmaW5lIHFxdWlja3dlYnZpZXdfaAorCisjaW5jbHVkZSAi
cXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXF1aWNraXRlbS5oPgor
CitjbGFzcyBRUXVpY2tXZWJQYWdlOworY2xhc3MgUVF1aWNrV2ViVmlld1ByaXZhdGU7CitjbGFz
cyBRV2ViRG93bmxvYWRJdGVtOworY2xhc3MgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyOworY2xh
c3MgUVdlYlByZWZlcmVuY2VzOworCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFF0Vmlld0lu
dGVyZmFjZTsKK30KKworbmFtZXNwYWNlIFdUUiB7CitjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7Cit9
CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLQ29udGV4dCogV0tDb250ZXh0UmVmOwor
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQYWdlR3JvdXAqIFdLUGFnZUdyb3VwUmVmOwor
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQYWdlKiBXS1BhZ2VSZWY7CisKK1FUX0JFR0lO
X05BTUVTUEFDRQorY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRVXJsOworUVRfRU5EX05BTUVTUEFD
RQorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3IDogcHVibGljIFFRdWlja0l0
ZW0geworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQgdGl0
bGUgTk9USUZZIHRpdGxlQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFVcmwgdXJsIFJFQUQgdXJs
IE5PVElGWSB1cmxDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoaW50IGxvYWRQcm9ncmVzcyBSRUFE
IGxvYWRQcm9ncmVzcyBOT1RJRlkgbG9hZFByb2dyZXNzQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZ
KFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciogbmF2aWdhdGlvbiBSRUFEIG5hdmlnYXRpb25Db250
cm9sbGVyIENPTlNUQU5UIEZJTkFMKQorICAgIFFfUFJPUEVSVFkoUVdlYlByZWZlcmVuY2VzKiBw
cmVmZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5UIEZJTkFMKQorICAgIFFfUFJPUEVS
VFkoUVF1aWNrV2ViUGFnZSogcGFnZSBSRUFEIHBhZ2UgQ09OU1RBTlQgRklOQUwpCisgICAgUV9Q
Uk9QRVJUWShWaWV3TW9kZSB2aWV3TW9kZSBSRUFEIHZpZXdNb2RlIFdSSVRFIHNldFZpZXdNb2Rl
IE5PVElGWSB2aWV3TW9kZUNoYW5nZWQgRklOQUwpCisgICAgUV9FTlVNUyhOYXZpZ2F0aW9uUG9s
aWN5KQorICAgIFFfRU5VTVMoRXJyb3JUeXBlKQorICAgIFFfRU5VTVMoVmlld01vZGUpCitwdWJs
aWM6CisgICAgZW51bSBWaWV3TW9kZSB7CisgICAgICAgIFRvdWNoLAorICAgICAgICBEZXNrdG9w
CisgICAgfTsKKworICAgIGVudW0gTmF2aWdhdGlvblBvbGljeSB7CisgICAgICAgIFVzZVBvbGlj
eSwKKyAgICAgICAgRG93bmxvYWRQb2xpY3ksCisgICAgICAgIElnbm9yZVBvbGljeQorICAgIH07
CisKKyAgICBlbnVtIEVycm9yVHlwZSB7CisgICAgICAgIEVuZ2luZUVycm9yLAorICAgICAgICBO
ZXR3b3JrRXJyb3IsCisgICAgICAgIEh0dHBFcnJvciwKKyAgICAgICAgRG93bmxvYWRFcnJvcgor
ICAgIH07CisgICAgUVF1aWNrV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKKyAgICB2
aXJ0dWFsIH5RUXVpY2tXZWJWaWV3KCk7CisKKyAgICBRVXJsIHVybCgpIGNvbnN0OworICAgIFFT
dHJpbmcgdGl0bGUoKSBjb25zdDsKKyAgICBpbnQgbG9hZFByb2dyZXNzKCkgY29uc3Q7CisKKyAg
ICBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmlnYXRpb25Db250cm9sbGVyKCkgY29uc3Q7
CisgICAgUVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcygpIGNvbnN0OworICAgIFFRdWlja1dl
YlBhZ2UgKnBhZ2UoKTsKKworICAgIHZvaWQgc2V0Vmlld01vZGUoVmlld01vZGUgbW9kZSk7Cisg
ICAgVmlld01vZGUgdmlld01vZGUoKSBjb25zdDsKKworcHVibGljIFFfU0xPVFM6CisgICAgIHZv
aWQgbG9hZChjb25zdCBRVXJsJik7CisgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgUVN0cmlu
ZyYpOworICAgICB2b2lkIG9uVmlzaWJsZUNoYW5nZWQoKTsKKworUV9TSUdOQUxTOgorICAgIHZv
aWQgdGl0bGVDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKKyAgICB2b2lkIHN0YXR1c0Jh
ck1lc3NhZ2VDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFN0
YXJ0ZWQoKTsKKyAgICB2b2lkIGxvYWRTdWNjZWVkZWQoKTsKKyAgICB2b2lkIGxvYWRGYWlsZWQo
UVF1aWNrV2ViVmlldzo6RXJyb3JUeXBlIGVycm9yVHlwZSwgaW50IGVycm9yQ29kZSwgY29uc3Qg
UVVybCYgdXJsKTsKKyAgICB2b2lkIGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50IHByb2dyZXNzKTsK
KyAgICB2b2lkIHVybENoYW5nZWQoY29uc3QgUVVybCYgdXJsKTsKKyAgICB2b2lkIG1lc3NhZ2VS
ZWNlaXZlZChjb25zdCBRVmFyaWFudE1hcCYgbWVzc2FnZSk7CisgICAgdm9pZCBkb3dubG9hZFJl
cXVlc3RlZChRV2ViRG93bmxvYWRJdGVtKiBkb3dubG9hZEl0ZW0pOworICAgIHZvaWQgbGlua0hv
dmVyZWQoY29uc3QgUVVybCYgdXJsLCBjb25zdCBRU3RyaW5nJiB0aXRsZSk7CisgICAgdm9pZCB2
aWV3TW9kZUNoYW5nZWQoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRy
eUNoYW5nZWQoY29uc3QgUVJlY3RGJiwgY29uc3QgUVJlY3RGJik7CisgICAgdmlydHVhbCB2b2lk
IHRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KTsKKworcHJpdmF0ZToKKyAgICBRX0RFQ0xB
UkVfUFJJVkFURShRUXVpY2tXZWJWaWV3KQorCisgICAgUVF1aWNrV2ViVmlldyhXS0NvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmLCBRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKKyAgICBXS1BhZ2VS
ZWYgcGFnZVJlZigpIGNvbnN0OworCisgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQg
X3Ffdmlld3BvcnRVcGRhdGVkKCkpOworICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lk
IF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKTsKKyAg
ICBRX1BSSVZBVEVfU0xPVChkX2Z1bmMoKSwgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0
ZWQoKSk7CisgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25PcGVuUGFuZWxG
aW5pc2hlZChpbnQgcmVzdWx0KSk7CisgICAgLy8gSGlkZXMgUU9iamVjdDo6ZF9wdHIgYWxsb3dp
bmcgdXMgdG8gdXNlIHRoZSBjb252ZW5pZW5jZSBtYWNyb3MuCisgICAgUVNjb3BlZFBvaW50ZXI8
UVF1aWNrV2ViVmlld1ByaXZhdGU+IGRfcHRyOworCisgICAgZnJpZW5kIGNsYXNzIFF0V2ViUGFn
ZVByb3h5OworICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTsKKyAgICBm
cmllbmQgY2xhc3MgV1RSOjpQbGF0Zm9ybVdlYlZpZXc7Cit9OworCitRTUxfREVDTEFSRV9UWVBF
KFFRdWlja1dlYlZpZXcpCisKKyNlbmRpZiAvKiBxcXVpY2t3ZWJ2aWV3X2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVhZGE1Y2I5MTBiNTYwYWE4ZWMwY2Q3NjdmYzhiMDFhMmE1N2U1MzIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5o
CkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHFxdWlja3dlYnZp
ZXdfcF9oCisjZGVmaW5lIHFxdWlja3dlYnZpZXdfcF9oCisKKyNpbmNsdWRlICJRdFBvbGljeUlu
dGVyZmFjZS5oIgorI2luY2x1ZGUgIlF0Vmlld0ludGVyZmFjZS5oIgorI2luY2x1ZGUgIlF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oIgorI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCisK
KyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3LmgiCisKKyNpbmNsdWRlIDxRdENvcmUvUVNjb3BlZFBv
aW50ZXI+CisKK2NsYXNzIFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlcjsKK2NsYXNzIFF0V2ViUGFn
ZVByb3h5OworCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFGaWxlRGlhbG9nOworUVRfRU5E
X05BTUVTUEFDRQorCitjbGFzcyBRUXVpY2tXZWJWaWV3UHJpdmF0ZSA6IHB1YmxpYyBXZWJLaXQ6
OlF0UG9saWN5SW50ZXJmYWNlIHsKKyAgICBRX0RFQ0xBUkVfUFVCTElDKFFRdWlja1dlYlZpZXcp
CitwdWJsaWM6CisgICAgUVF1aWNrV2ViVmlld1ByaXZhdGUoKTsKKyAgICB2aXJ0dWFsIH5RUXVp
Y2tXZWJWaWV3UHJpdmF0ZSgpIHsgfQorICAgIHZvaWQgc2V0UGFnZVByb3h5KFF0V2ViUGFnZVBy
b3h5Kik7CisgICAgdm9pZCBpbml0KFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0LCBXS0NvbnRleHRS
ZWYgY29udGV4dFJlZiA9IDAsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDApOworICAg
IHZvaWQgaW5pdFRvdWNoKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KTsKKyAgICB2b2lkIGluaXRE
ZXNrdG9wKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KTsKKyAgICB2b2lkIGVuYWJsZU1vdXNlRXZl
bnRzKCk7CisgICAgdm9pZCBkaXNhYmxlTW91c2VFdmVudHMoKTsKKworICAgIHZvaWQgbG9hZERp
ZENvbW1pdCgpOworICAgIHZvaWQgY29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBuZXdT
aXplKTsKKyAgICB2b2lkIHNjcm9sbFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2ludCYgcG9z
KTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworICAgIHZvaWQgdXBkYXRlVmlld3Bv
cnRDb25zdHJhaW50cygpOworCisgICAgdm9pZCBfcV92aWV3cG9ydFVwZGF0ZWQoKTsKKyAgICB2
b2lkIF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpOwor
ICAgIHZvaWQgX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVjdGVkKCk7CisgICAgdm9pZCBfcV9vbk9w
ZW5QYW5lbEZpbmlzaGVkKGludCByZXN1bHQpOworCisgICAgLy8gUXRQb2xpY3lJbnRlcmZhY2Uu
CisgICAgdmlydHVhbCBRdFBvbGljeUludGVyZmFjZTo6UG9saWN5QWN0aW9uIG5hdmlnYXRpb25Q
b2xpY3lGb3JVUkwoY29uc3QgUVVybCYsIFF0OjpNb3VzZUJ1dHRvbiwgUXQ6OktleWJvYXJkTW9k
aWZpZXJzKTsKKworICAgIHZvaWQgY2hvb3NlRmlsZXMoV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clJlZiwgY29uc3QgUVN0cmluZ0xpc3QmIHNlbGVjdGVkRmlsZU5hbWVzLCBXZWJLaXQ6OlF0Vmll
d0ludGVyZmFjZTo6RmlsZUNob29zZXJUeXBlKTsKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVy
dChjb25zdCBRU3RyaW5nJik7CisgICAgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBR
U3RyaW5nJik7CisgICAgUVN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcm
LCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9rKTsKKyAgICB2b2lkIGRpZENo
YW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYg
YXJncyk7CisKKyAgICBRU2NvcGVkUG9pbnRlcjxRUXVpY2tXZWJQYWdlPiBwYWdlVmlldzsKKyAg
ICBRU2NvcGVkUG9pbnRlcjxXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZT4gdmlld0ludGVyZmFjZTsK
KyAgICBRU2NvcGVkUG9pbnRlcjxRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU+IGludGVyYWN0
aW9uRW5naW5lOworCisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1
bWVudHM7CisKKyAgICBRUXVpY2tXZWJWaWV3KiBxX3B0cjsKKyAgICBRU2NvcGVkUG9pbnRlcjxR
dFdlYlBhZ2VQcm94eT4gcGFnZVByb3h5OworCisgICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVy
KiBuYXZpZ2F0aW9uQ29udHJvbGxlcjsKKyAgICBRUXVpY2tXZWJWaWV3OjpWaWV3TW9kZSBjdXJy
ZW50Vmlld01vZGU7CisgICAgUUZpbGVEaWFsb2cqIGZpbGVEaWFsb2c7CisgICAgV0tPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclJlZiBvcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKK307CisKKyNlbmRp
ZiAvKiBxcXVpY2t3ZWJ2aWV3X3BfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ4MWUxMTk2ZDk3NjA1NzFhZTI5N2JlNjg3ZDIzNTdiYTRiZDI3NWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
InF0b3VjaHdlYnBhZ2UuaCIKLQotI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlX3AuaCIK
LSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmVNb3VzZUV2
ZW50PgotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFRdWlja0NhbnZhcz4KLSNpbmNs
dWRlIDxRU0dFbmdpbmU+Ci0jaW5jbHVkZSA8UVVybD4KLQotUVRvdWNoV2ViUGFnZTo6UVRvdWNo
V2ViUGFnZShRUXVpY2tJdGVtKiBwYXJlbnQpCi0gICAgOiBRUXVpY2tJdGVtKHBhcmVudCkKLSAg
ICAsIGQobmV3IFFUb3VjaFdlYlBhZ2VQcml2YXRlKHRoaXMpKQotewotICAgIHNldEZsYWcoSXRl
bUhhc0NvbnRlbnRzKTsKLQotICAgIC8vIFdlIGRvIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgdG9w
IGxlZnQgc28gdGhlIHZpZXdwb3J0IGNhbiBhc3N1bWUgdGhlIHBvc2l0aW9uIDAsIDAKLSAgICAv
LyBpcyBhbHdheXMgd2hlcmUgcmVuZGVyaW5nIHN0YXJ0cy4KLSAgICBzZXRUcmFuc2Zvcm1Pcmln
aW4oVG9wTGVmdCk7Ci0gICAgaW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucygpOwotfQotCi12b2lk
IFFUb3VjaFdlYlBhZ2U6OmluaXRTY2VuZUdyYXBoQ29ubmVjdGlvbnMoKQotewotICAgIGlmIChk
LT5wYWludGluZ0lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWNhbnZh
cygpKQotICAgICAgICByZXR1cm47Ci0gICAgZC0+cGFpbnRpbmdJc0luaXRpYWxpemVkID0gdHJ1
ZTsKLSAgICBpZiAoc2NlbmVHcmFwaEVuZ2luZSgpKQotICAgICAgICBkLT5fcV9vblNjZW5lR3Jh
cGhJbml0aWFsaXplZCgpOwotICAgIGVsc2UKLSAgICAgICAgY29ubmVjdChjYW52YXMoKSwgU0lH
TkFMKHNjZW5lR3JhcGhJbml0aWFsaXplZCgpKSwgdGhpcywgU0xPVChfcV9vblNjZW5lR3JhcGhJ
bml0aWFsaXplZCgpKSk7Ci19Ci0KLVFUb3VjaFdlYlBhZ2U6On5RVG91Y2hXZWJQYWdlKCkKLXsK
LSAgICBkZWxldGUgZDsKLX0KLQotLyohIFxyZWltcAotKi8KLWJvb2wgUVRvdWNoV2ViUGFnZTo6
ZXZlbnQoUUV2ZW50KiBldikKLXsKLSAgICBpZiAoZC0+cGFnZVByb3h5LT5oYW5kbGVFdmVudChl
dikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBRUXVpY2tJdGVtOjpldmVudChl
dik7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2
ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRVG91Y2hXZWJQYWdl
OjprZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChl
dmVudCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6aW5wdXRNZXRob2RFdmVudChRSW5wdXRN
ZXRob2RFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lk
IFFUb3VjaFdlYlBhZ2U6OmZvY3VzSW5FdmVudChRRm9jdXNFdmVudCogZXZlbnQpCi17Ci0gICAg
dGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2U6OmZvY3VzT3V0RXZl
bnQoUUZvY3VzRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQot
dm9pZCBRVG91Y2hXZWJQYWdlOjp0b3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVudCkKLXsKLSAg
ICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6Z2VvbWV0cnlD
aGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksIGNvbnN0IFFSZWN0RiYgb2xkR2VvbWV0
cnkpCi17Ci0gICAgUVF1aWNrSXRlbTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dlb21ldHJ5LCBvbGRH
ZW9tZXRyeSk7Ci0gICAgaWYgKG5ld0dlb21ldHJ5LnNpemUoKSAhPSBvbGRHZW9tZXRyeS5zaXpl
KCkpCi0gICAgICAgIGQtPnBhZ2VQcm94eS0+c2V0RHJhd2luZ0FyZWFTaXplKG5ld0dlb21ldHJ5
LnNpemUoKS50b1NpemUoKSk7Ci19Ci0KLVFUb3VjaFdlYlBhZ2VQcml2YXRlOjpRVG91Y2hXZWJQ
YWdlUHJpdmF0ZShRVG91Y2hXZWJQYWdlKiB2aWV3KQotICAgIDogcSh2aWV3KQotICAgICwgcGFn
ZVByb3h5KDApCi0gICAgLCBuYXZpZ2F0aW9uQ29udHJvbGxlcigwKQotICAgICwgc2dVcGRhdGVR
dWV1ZSh2aWV3KQotICAgICwgcGFpbnRpbmdJc0luaXRpYWxpemVkKGZhbHNlKQotewotfQotCi12
b2lkIFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpzZXRQYWdlUHJveHkoUXRXZWJQYWdlUHJveHkqIHBh
Z2VQcm94eSkKLXsKLSAgICBBU1NFUlQoIXRoaXMtPnBhZ2VQcm94eSk7Ci0gICAgQVNTRVJUKHBh
Z2VQcm94eSk7Ci0gICAgdGhpcy0+cGFnZVByb3h5ID0gcGFnZVByb3h5OwotCi19Ci0KLXN0YXRp
YyBmbG9hdCBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShjb25zdCBRUXVpY2tJdGVtKiBpdGVtKQot
ewotICAgIGlmICghaXRlbSkKLSAgICAgICAgcmV0dXJuIDEuMDsKLQotICAgIGZsb2F0IG9wYWNp
dHkgPSBpdGVtLT5vcGFjaXR5KCk7Ci0gICAgaWYgKG9wYWNpdHkgPCAwLjAxKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBvcGFjaXR5ICogY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHko
aXRlbS0+cGFyZW50SXRlbSgpKTsKLX0KLQotdm9pZCBRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoKQotewotICAgIGlmICghcS0+aXNWaXNpYmxlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gcS0+aXRlbVRyYW5zZm9y
bSgwLCAwKTsKLSAgICBmbG9hdCBvcGFjaXR5ID0gY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkocSk7
Ci0gICAgUVJlY3RGIGNsaXBSZWN0ID0gcS0+cGFyZW50SXRlbSgpLT5tYXBSZWN0VG9TY2VuZShx
LT5wYXJlbnRJdGVtKCktPmJvdW5kaW5nUmVjdCgpKTsKLQotICAgIGdsRW5hYmxlKEdMX1NDSVNT
T1JfVEVTVCk7Ci0gICAgY29uc3QgaW50IGxlZnQgPSBjbGlwUmVjdC5sZWZ0KCk7Ci0gICAgY29u
c3QgaW50IHdpZHRoID0gY2xpcFJlY3Qud2lkdGgoKTsKLSAgICBjb25zdCBpbnQgYm90dG9tID0g
cS0+Y2FudmFzKCktPmhlaWdodCgpIC0gKGNsaXBSZWN0LmJvdHRvbSgpICsgMSk7Ci0gICAgY29u
c3QgaW50IGhlaWdodCA9IGNsaXBSZWN0LmhlaWdodCgpOwotCi0gICAgZ2xTY2lzc29yKGxlZnQs
IGJvdHRvbSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBwYWdlUHJveHktPnJlbmRlclRvQ3VycmVu
dEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOwotICAgIGdsRGlzYWJsZShHTF9TQ0lTU09S
X1RFU1QpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpfcV9vbkFmdGVyU2NlbmVS
ZW5kZXIoKQotewotICAgIC8vIFRPRE86IEFsbG93IHBhaW50aW5nIGJlZm9yZSB0aGUgc2NlbmUg
b3IgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NlbmUgd2l0aCBhbiBGQk8uCi0gICAgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoKTsKLX0KLQotdm9pZCBRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6X3Ffb25T
Y2VuZUdyYXBoSW5pdGlhbGl6ZWQoKQotewotICAgIFFTR0VuZ2luZSogZW5naW5lID0gcS0+c2Nl
bmVHcmFwaEVuZ2luZSgpOwotICAgIFFPYmplY3Q6OmNvbm5lY3QoZW5naW5lLCBTSUdOQUwoYWZ0
ZXJSZW5kZXJpbmcoKSksIHEsIFNMT1QoX3Ffb25BZnRlclNjZW5lUmVuZGVyKCkpLCBRdDo6RGly
ZWN0Q29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6aXRlbUNoYW5nZShJdGVt
Q2hhbmdlIGNoYW5nZSwgY29uc3QgSXRlbUNoYW5nZURhdGEgJmRhdGEpCi17Ci0gICAgaWYgKGNo
YW5nZSA9PSBJdGVtU2NlbmVDaGFuZ2UpCi0gICAgICAgIGluaXRTY2VuZUdyYXBoQ29ubmVjdGlv
bnMoKTsKLSAgICBRUXVpY2tJdGVtOjppdGVtQ2hhbmdlKGNoYW5nZSwgZGF0YSk7Ci19Ci0KLSNp
bmNsdWRlICJtb2NfcXRvdWNod2VicGFnZS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlMTI3Njg3OTYwZjkzMmRlZmY2OTRjNjNmZWQwNjdlN2FjYWRiNTc0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgcXRvdWNod2VicGFnZV9oCi0jZGVmaW5lIHF0b3Vj
aHdlYnBhZ2VfaAotCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotCi0jaW5jbHVkZSA8UXRE
ZWNsYXJhdGl2ZS9xcXVpY2tpdGVtLmg+Ci0jaW5jbHVkZSA8UVNoYXJlZFBvaW50ZXI+Ci0KLWNs
YXNzIFFUb3VjaFdlYlBhZ2VQcml2YXRlOwotY2xhc3MgUVdlYk5hdmlnYXRpb25Db250cm9sbGVy
OwotY2xhc3MgUVdlYlByZWZlcmVuY2VzOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFF0
VG91Y2hWaWV3SW50ZXJmYWNlOwotfQotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRVG91Y2hXZWJQ
YWdlIDogcHVibGljIFFRdWlja0l0ZW0gewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUVRv
dWNoV2ViUGFnZShRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKLQotICAgIHZpcnR1YWwgflFUb3Vj
aFdlYlBhZ2UoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBldmVudChRRXZlbnQqKTsKLQotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOwotICAgIHZp
cnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lk
IGlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGZvY3VzT3V0RXZl
bnQoUUZvY3VzRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgdG91Y2hFdmVudChRVG91Y2hFdmVu
dCopOwotCi0gICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmLCBj
b25zdCBRUmVjdEYmKTsKLSAgICB2aXJ0dWFsIHZvaWQgaXRlbUNoYW5nZShJdGVtQ2hhbmdlLCBj
b25zdCBJdGVtQ2hhbmdlRGF0YSYpOwotCi1wcml2YXRlOgotICAgIFFfUFJJVkFURV9TTE9UKGQs
IHZvaWQgX3Ffb25BZnRlclNjZW5lUmVuZGVyKCkpOwotICAgIFFfUFJJVkFURV9TTE9UKGQsIHZv
aWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICB2b2lkIGluaXRTY2VuZUdy
YXBoQ29ubmVjdGlvbnMoKTsKLQotICAgIFFUb3VjaFdlYlBhZ2VQcml2YXRlKiBkOwotICAgIGZy
aWVuZCBjbGFzcyBRVG91Y2hXZWJWaWV3UHJpdmF0ZTsKLSAgICBmcmllbmQgY2xhc3MgV2ViS2l0
OjpRdFRvdWNoVmlld0ludGVyZmFjZTsKLX07Ci0KLSNlbmRpZiAvKiBxdG91Y2h3ZWJwYWdlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vi
cGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2Vf
cC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWY4YmU2ZThkYzQ3MzJiMWQ2MzQy
NDgxZjQwZjE4Zjc0YjNiMDVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9w
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBxdG91Y2h3ZWJwYWdlX3BfaAotI2RlZmluZSBxdG91Y2h3ZWJwYWdlX3BfaAotCi0jaW5j
bHVkZSAiUXRTR1VwZGF0ZVF1ZXVlLmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZS5oIgotI2lu
Y2x1ZGUgInF3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oIgotI2luY2x1ZGUgPFFNZW51PgotCi1j
bGFzcyBRUmVjdEY7Ci1jbGFzcyBRU0dOb2RlOwotY2xhc3MgUVN0cmluZzsKLWNsYXNzIFFUb3Vj
aFdlYlBhZ2U7Ci0KLWNsYXNzIFFUb3VjaFdlYlBhZ2VQcml2YXRlIHsKLXB1YmxpYzoKLSAgICBR
VG91Y2hXZWJQYWdlUHJpdmF0ZShRVG91Y2hXZWJQYWdlKiB2aWV3KTsKLQotICAgIHZvaWQgc2V0
UGFnZVByb3h5KFF0V2ViUGFnZVByb3h5Kik7Ci0KLSAgICB2b2lkIF9xX29uQWZ0ZXJTY2VuZVJl
bmRlcigpOwotICAgIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKTsKLSAgICB2b2lk
IHBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7Ci0KLSAgICBRVG91Y2hXZWJQYWdlKiBjb25zdCBx
OwotICAgIFF0V2ViUGFnZVByb3h5KiBwYWdlUHJveHk7Ci0gICAgUVdlYk5hdmlnYXRpb25Db250
cm9sbGVyKiBuYXZpZ2F0aW9uQ29udHJvbGxlcjsKLSAgICBXZWJLaXQ6OlF0U0dVcGRhdGVRdWV1
ZSBzZ1VwZGF0ZVF1ZXVlOwotICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxpemVkOwotfTsKLQot
I2VuZGlmIC8qIHF0b3VjaHdlYnBhZ2VfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggM2Y3ZmY0NjljYzk4OTc3NTg3NzU2ZjE4ODdkNjU1NjA5ZDQyZDllYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
cXRvdWNod2Vidmlldy5oIgotCi0jaW5jbHVkZSAiUXRUb3VjaFZpZXdJbnRlcmZhY2UuaCIKLSNp
bmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2VfcC5oIgot
I2luY2x1ZGUgInF0b3VjaHdlYnZpZXdfcC5oIgotI2luY2x1ZGUgInF3ZWJwcmVmZXJlbmNlc19w
LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMu
aCIKLQotdm9pZCBRVG91Y2hXZWJWaWV3UHJpdmF0ZTo6aW5pdChRVG91Y2hXZWJWaWV3KiB2aWV3
cG9ydCkKLXsKLSAgICBwYWdlVmlldy5yZXNldChuZXcgUVRvdWNoV2ViUGFnZSh2aWV3cG9ydCkp
OwotICAgIHZpZXdJbnRlcmZhY2UucmVzZXQobmV3IFdlYktpdDo6UXRUb3VjaFZpZXdJbnRlcmZh
Y2Uodmlld3BvcnQsIHBhZ2VWaWV3LmRhdGEoKSkpOwotICAgIGludGVyYWN0aW9uRW5naW5lLnJl
c2V0KG5ldyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUodmlld3BvcnQsIHBhZ2VWaWV3LmRh
dGEoKSkpOwotICAgIFFUb3VjaFdlYlBhZ2VQcml2YXRlKiBjb25zdCBwYWdlVmlld1ByaXZhdGUg
PSBwYWdlVmlldy5kYXRhKCktPmQ7Ci0gICAgc2V0UGFnZVByb3h5KG5ldyBRdFdlYlBhZ2VQcm94
eSh2aWV3SW50ZXJmYWNlLmRhdGEoKSwgaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpKSk7Ci0gICAg
cGFnZVZpZXdQcml2YXRlLT5zZXRQYWdlUHJveHkocGFnZVByb3h5LmRhdGEoKSk7Ci0gICAgUVdl
YlByZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0KHBhZ2VQcm94eS0+cHJlZmVyZW5jZXMoKSktPnNldEF0
dHJpYnV0ZShRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZCwgdHJ1ZSk7Ci0gICAgcGFnZVByb3h5LT5pbml0KCk7Ci0KLSAgICBRT2JqZWN0Ojpjb25u
ZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZpZXdwb3J0VXBkYXRlUmVxdWVz
dGVkKCkpLCB2aWV3cG9ydCwgU0xPVChfcV92aWV3cG9ydFVwZGF0ZWQoKSkpOwotICAgIFFPYmpl
Y3Q6OmNvbm5lY3QoaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpLCBTSUdOQUwodmlld3BvcnRUcmFq
ZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpLCB2aWV3cG9ydCwgU0xPVChfcV92
aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYmKSkpOwotfQotCi12
b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRlOjpsb2FkRGlkQ29tbWl0KCkKLXsKLSAgICBpbnRlcmFj
dGlvbkVuZ2luZS0+cmVzZXQoKTsKLX0KLQotdm9pZCBRVG91Y2hXZWJWaWV3UHJpdmF0ZTo6c2Ny
b2xsUG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBwb3MpCi17Ci0gICAgaW50ZXJhY3Rp
b25FbmdpbmUtPnBhZ2VQb3NpdGlvblJlcXVlc3QocG9zKTsKLX0KLQotdm9pZCBRVG91Y2hXZWJW
aWV3UHJpdmF0ZTo6X3Ffdmlld3BvcnRVcGRhdGVkKCkKLXsKLSAgICBRX1EoUVRvdWNoV2ViVmll
dyk7Ci0gICAgY29uc3QgUVJlY3RGIHZpc2libGVSZWN0SW5QYWdlVmlld0Nvb3JkaW5hdGVzID0g
cS0+bWFwUmVjdFRvSXRlbShwYWdlVmlldy5kYXRhKCksIHEtPmJvdW5kaW5nUmVjdCgpKS5pbnRl
cnNlY3RlZChwYWdlVmlldy0+Ym91bmRpbmdSZWN0KCkpOwotICAgIGZsb2F0IHNjYWxlID0gcGFn
ZVZpZXctPnNjYWxlKCk7Ci0gICAgcGFnZVByb3h5LT5zZXRWaXNpYmxlQ29udGVudFJlY3RBbmRT
Y2FsZSh2aXNpYmxlUmVjdEluUGFnZVZpZXdDb29yZGluYXRlcywgc2NhbGUpOwotfQotCi12b2lk
IFFUb3VjaFdlYlZpZXdQcml2YXRlOjpfcV92aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2Vk
KGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgcGFnZVByb3h5LT5zZXRW
aXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwotfQot
Ci12b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQotewotICAg
IFFfUShRVG91Y2hXZWJWaWV3KTsKLSAgICBRU2l6ZSB2aWV3cG9ydFNpemUgPSBxLT5ib3VuZGlu
Z1JlY3QoKS5zaXplKCkudG9TaXplKCk7Ci0KLSAgICBpZiAodmlld3BvcnRTaXplLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUGFnZVByb3h5KiB3a1BhZ2UgPSB0b0ltcGwo
cGFnZVByb3h5LT5wYWdlUmVmKCkpOwotICAgIC8vIExldCB0aGUgV2ViUHJvY2VzcyBrbm93IGFi
b3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAotICAgIC8vIGl0IGNhbiByZXNpemUg
dGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCi0gICAgd2tQYWdlLT5zZXRWaWV3cG9ydFNpemUodmll
d3BvcnRTaXplKTsKLSAgICB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7Ci0gICAgX3Ffdmll
d3BvcnRVcGRhdGVkKCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlld1ByaXZhdGU6OnVwZGF0ZVZp
ZXdwb3J0Q29uc3RyYWludHMoKQotewotICAgIFFfUShRVG91Y2hXZWJWaWV3KTsKLSAgICBRU2l6
ZSBhdmFpbGFibGVTaXplID0gcS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpOwotCi0g
ICAgaWYgKGF2YWlsYWJsZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBX
ZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvSW1wbChwYWdlUHJveHktPnBhZ2VSZWYoKSk7Ci0gICAg
V2ViUHJlZmVyZW5jZXMqIHdrUHJlZnMgPSB3a1BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNl
cygpOwotCi0gICAgLy8gRklYTUU6IFJlbW92ZSBsYXRlcjsgSGFyZGNvZGUgc29tZSB2YWx1ZXMg
Zm9yIG5vdyB0byBtYWtlIHN1cmUgdGhlIERQSSBhZGp1c3RtZW50IGlzIGJlaW5nIHRlc3RlZC4K
LSAgICB3a1ByZWZzLT5zZXREZXZpY2VEUEkoMjQwKTsKLSAgICB3a1ByZWZzLT5zZXREZXZpY2VX
aWR0aCg0ODApOwotICAgIHdrUHJlZnMtPnNldERldmljZUhlaWdodCg3MjApOwotCi0gICAgV2Vi
Q29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGF0dHIgPSBXZWJDb3JlOjpjb21wdXRlVmlld3BvcnRB
dHRyaWJ1dGVzKHZpZXdwb3J0QXJndW1lbnRzLCB3a1ByZWZzLT5sYXlvdXRGYWxsYmFja1dpZHRo
KCksIHdrUHJlZnMtPmRldmljZVdpZHRoKCksIHdrUHJlZnMtPmRldmljZUhlaWdodCgpLCB3a1By
ZWZzLT5kZXZpY2VEUEkoKSwgYXZhaWxhYmxlU2l6ZSk7Ci0gICAgV2ViQ29yZTo6cmVzdHJpY3RN
aW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6ZShhdHRyLCBhdmFpbGFibGVTaXplKTsKLSAg
ICBXZWJDb3JlOjpyZXN0cmljdFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2Fs
YWJsZShhdHRyKTsKLQotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Q29uc3RyYWlu
dHMgbmV3Q29uc3RyYWludHM7Ci0gICAgbmV3Q29uc3RyYWludHMuaW5pdGlhbFNjYWxlID0gYXR0
ci5pbml0aWFsU2NhbGU7Ci0gICAgbmV3Q29uc3RyYWludHMubWluaW11bVNjYWxlID0gYXR0ci5t
aW5pbXVtU2NhbGU7Ci0gICAgbmV3Q29uc3RyYWludHMubWF4aW11bVNjYWxlID0gYXR0ci5tYXhp
bXVtU2NhbGU7Ci0gICAgbmV3Q29uc3RyYWludHMuZGV2aWNlUGl4ZWxSYXRpbyA9IGF0dHIuZGV2
aWNlUGl4ZWxSYXRpbzsKLSAgICBuZXdDb25zdHJhaW50cy5pc1VzZXJTY2FsYWJsZSA9ICEhYXR0
ci51c2VyU2NhbGFibGU7Ci0gICAgaW50ZXJhY3Rpb25FbmdpbmUtPnNldENvbnN0cmFpbnRzKG5l
d0NvbnN0cmFpbnRzKTsKLQotICAgIC8vIE92ZXJ3cml0ZSBtaW5pbXVtIHNjYWxlIHZhbHVlIHdp
dGggZml0LXRvLXZpZXcgdmFsdWUsIHVubGVzcyB0aGUgdGhlIGNvbnRlbnQgYXV0aG9yCi0gICAg
Ly8gZXhwbGljaXRseSBzYXlzIG5vLiBOQjogV2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIGtu
b3cgd2UgaGF2ZSBhIHZhbGlkIHNpemUsIGllLgotICAgIC8vIGFmdGVyIGluaXRpYWwgbGF5b3V0
IGhhcyBjb21wbGV0ZWQuCi19Ci0KLXZvaWQgUVRvdWNoV2ViVmlld1ByaXZhdGU6OmRpZENoYW5n
ZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJn
cykKLXsKLSAgICB2aWV3cG9ydEFyZ3VtZW50cyA9IGFyZ3M7Ci0gICAgdXBkYXRlVmlld3BvcnRD
b25zdHJhaW50cygpOwotfQotCi1RVG91Y2hXZWJWaWV3OjpRVG91Y2hXZWJWaWV3KFFRdWlja0l0
ZW0qIHBhcmVudCkKLSAgICA6IFFCYXNlV2ViVmlldygqKG5ldyBRVG91Y2hXZWJWaWV3UHJpdmF0
ZSksIHBhcmVudCkKLXsKLSAgICBRX0QoUVRvdWNoV2ViVmlldyk7Ci0gICAgZC0+aW5pdCh0aGlz
KTsKLSAgICBzZXRGbGFncyhRUXVpY2tJdGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUpOwot
ICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHZpc2libGVDaGFuZ2VkKCkpLCBTTE9UKG9uVmlzaWJs
ZUNoYW5nZWQoKSkpOwotfQotCi1RVG91Y2hXZWJWaWV3Ojp+UVRvdWNoV2ViVmlldygpCi17Ci19
Ci0KLVFUb3VjaFdlYlBhZ2UqIFFUb3VjaFdlYlZpZXc6OnBhZ2UoKQotewotICAgIFFfRChRVG91
Y2hXZWJWaWV3KTsKLSAgICByZXR1cm4gZC0+cGFnZVZpZXcuZGF0YSgpOwotfQotCi12b2lkIFFU
b3VjaFdlYlZpZXc6Omdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBj
b25zdCBRUmVjdEYmIG9sZEdlb21ldHJ5KQotewotICAgIFFfRChRVG91Y2hXZWJWaWV3KTsKLSAg
ICBRUXVpY2tJdGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsK
LSAgICBpZiAobmV3R2VvbWV0cnkuc2l6ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUoKSkKLSAgICAg
ICAgZC0+dXBkYXRlVmlld3BvcnRTaXplKCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlldzo6dG91
Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCi17Ci0gICAgZm9yY2VBY3RpdmVGb2N1cygpOwot
ICAgIFFRdWlja0l0ZW06OnRvdWNoRXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlZp
ZXc6Om9uVmlzaWJsZUNoYW5nZWQoKQotewotICAgIFFfRChRVG91Y2hXZWJWaWV3KTsKLSAgICBX
ZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvSW1wbChkLT5wYWdlUHJveHktPnBhZ2VSZWYoKSk7Ci0K
LSAgICB3a1BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2li
bGUpOwotfQotCi0jaW5jbHVkZSAibW9jX3F0b3VjaHdlYnZpZXcuY3BwIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWZmYTBmNTNjMDJjN2YwODc3ODM4NGZlM2M5NzkzNDQ3MmFkZWQwMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0x
LDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIHF0b3VjaHdlYnZpZXdfaAot
I2RlZmluZSBxdG91Y2h3ZWJ2aWV3X2gKLQotI2luY2x1ZGUgInFiYXNld2Vidmlldy5oIgotI2lu
Y2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FxdWlja2l0
ZW0uaD4KLQotY2xhc3MgUVRvdWNoRXZlbnQ7Ci1jbGFzcyBRVG91Y2hXZWJQYWdlOwotY2xhc3Mg
UVRvdWNoV2ViVmlld1ByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgUXRUb3Vj
aFZpZXdJbnRlcmZhY2U7Ci19Ci0KLWNsYXNzIFFXRUJLSVRfRVhQT1JUIFFUb3VjaFdlYlZpZXcg
OiBwdWJsaWMgUUJhc2VXZWJWaWV3Ci17Ci0gICAgUV9PQkpFQ1QKLSAgICBRX1BST1BFUlRZKFFU
b3VjaFdlYlBhZ2UqIHBhZ2UgUkVBRCBwYWdlIENPTlNUQU5UIEZJTkFMKQotCi1wdWJsaWM6Ci0g
ICAgUVRvdWNoV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKLSAgICB+UVRvdWNoV2Vi
VmlldygpOwotCi0gICAgUVRvdWNoV2ViUGFnZSAqcGFnZSgpOwotCi1wcm90ZWN0ZWQgUV9TTE9U
UzoKLSAgICB2b2lkIG9uVmlzaWJsZUNoYW5nZWQoKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiwgY29uc3QgUVJlY3RGJik7Ci0g
ICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KTsKLQotcHJpdmF0
ZToKLSAgICBRX1BSSVZBVEVfU0xPVChkX2Z1bmMoKSwgdm9pZCBfcV92aWV3cG9ydFVwZGF0ZWQo
KSk7Ci0gICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffdmlld3BvcnRUcmFqZWN0
b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpOwotCi0gICAgZnJpZW5kIGNsYXNzIFdl
YktpdDo6UXRUb3VjaFZpZXdJbnRlcmZhY2U7Ci0gICAgUV9ERUNMQVJFX1BSSVZBVEUoUVRvdWNo
V2ViVmlldykKLX07Ci0KLVFNTF9ERUNMQVJFX1RZUEUoUVRvdWNoV2ViVmlldykKLQotI2VuZGlm
IC8qIHF0b3VjaHdlYnZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXRvdWNod2Vidmlld19wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5
MDBlMWQxNGJmM2Y3MzY0ODE0ZjcwMmEzMTMwZGRlMjQ1ZTBiODYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xdG91Y2h3ZWJ2aWV3X3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaWZuZGVmIHF0b3VjaHdlYnZpZXdfcF9oCi0jZGVmaW5lIHF0b3Vj
aHdlYnZpZXdfcF9oCi0KLSNpbmNsdWRlICJRdFRvdWNoVmlld0ludGVyZmFjZS5oIgotI2luY2x1
ZGUgIlF0V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lLmgiCi0jaW5jbHVkZSAicWJhc2V3ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlIDxRU2NvcGVkUG9p
bnRlcj4KLQotY2xhc3MgUVRvdWNoV2ViUGFnZTsKLWNsYXNzIFFUb3VjaFdlYlZpZXc7Ci0KLWNs
YXNzIFFUb3VjaFdlYlZpZXdQcml2YXRlIDogUUJhc2VXZWJWaWV3UHJpdmF0ZQotewotICAgIFFf
REVDTEFSRV9QVUJMSUMoUVRvdWNoV2ViVmlldykKLXB1YmxpYzoKLSAgICB2b2lkIGluaXQoUVRv
dWNoV2ViVmlldyogdmlld3BvcnQpOwotCi0gICAgdm9pZCBsb2FkRGlkQ29tbWl0KCk7Ci0gICAg
dm9pZCBzY3JvbGxQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcyk7Ci0gICAgdm9p
ZCBfcV92aWV3cG9ydFVwZGF0ZWQoKTsKLSAgICB2b2lkIF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZl
Y3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXpl
KCk7Ci0gICAgdm9pZCB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7Ci0KLSAgICB2b2lkIGRp
ZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50
cyYgYXJncyk7Ci0KLSAgICBRU2NvcGVkUG9pbnRlcjxRVG91Y2hXZWJQYWdlPiBwYWdlVmlldzsK
LSAgICBRU2NvcGVkUG9pbnRlcjxXZWJLaXQ6OlF0VG91Y2hWaWV3SW50ZXJmYWNlPiB2aWV3SW50
ZXJmYWNlOwotICAgIFFTY29wZWRQb2ludGVyPFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZT4g
aW50ZXJhY3Rpb25FbmdpbmU7Ci0KLSAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3
cG9ydEFyZ3VtZW50czsKLX07Ci0KLSNlbmRpZiAvKiBxdG91Y2h3ZWJ2aWV3X3BfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xZGVza3RvcHdl
YnZpZXcvdHN0X3FkZXNrdG9wd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3LmNwcAppbmRl
eCA3MzI3NDIzOTcyNzIzNTkyMDJjMzc2NjMyNGY5MjFjYTkwMTQ0OTRmLi44OGJlYzViZDk1M2I0
MWE3YmRiMDkxMDViOWY1ZDQ4NDRiNGRiY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9w
d2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3LmNwcApAQCAtMTksNyArMTksNyBAQAogCiAjaW5j
bHVkZSA8UVNjb3BlZFBvaW50ZXI+CiAjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KLSNpbmNsdWRl
IDxxZGVza3RvcHdlYnZpZXcuaD4KKyNpbmNsdWRlIDxxcXVpY2t3ZWJ2aWV3Lmg+CiAjaW5jbHVk
ZSA8cXdlYm5hdmlnYXRpb25jb250cm9sbGVyLmg+CiAjaW5jbHVkZSAiLi4vdGVzdHdpbmRvdy5o
IgogI2luY2x1ZGUgIi4uL3V0aWwuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCBiZjMwYjFlYWU1ZDQ3N2NiNDk2Njk0
YTRhYWQ5OGEyYjk3ZDEyNmI5Li5iOGU4MjJlZDEzYmFmNjFhZmFhMjM1NTFhMjcwYmNjM2NhODcz
ZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVj
b2duaXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJl
Y29nbml6ZXIuY3BwCkBAIC00MCw0ICs0MCw5IEBAIHZvaWQgUXRHZXN0dXJlUmVjb2duaXplcjo6
cmVzZXQoKQogICAgIG1fc3RhdGUgPSBOb0dlc3R1cmU7CiB9CiAKK3ZvaWQgUXRHZXN0dXJlUmVj
b2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUqIGVuZ2luZSkKK3sKKyAgICBtX3ZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUgPSBl
bmdpbmU7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0
dXJlUmVjb2duaXplci5oCmluZGV4IGY1MjIyYzdmMzNiNDI2M2I1ZjVmY2NlZTVmNDg1ODJiYTY0
ZjdlNjEuLjRjY2E2YmM3MjVkYzg0ZTgyYmU4YTQ1YjBjNDU0NmE2NGRiZTgzMDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaApAQCAt
MzYsOSArMzYsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgUXRHZXN0dXJlUmVjb2du
aXplcihRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqKTsKKyAgICB2b2lkIHNldFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKik7CiAgICAgdm9p
ZCByZXNldCgpOwogCi0gICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBjb25zdCBtX3Zp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU7CisgICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
KiBtX3ZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU7CiAgICAgZW51bSBTdGF0ZSB7CiAgICAgICAg
IE5vR2VzdHVyZSwKICAgICAgICAgR2VzdHVyZVJlY29nbml0aW9uU3RhcnRlZCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNw
cAppbmRleCA0MGM5NzlhNjFmMThmYjY2ZDViYmMyYTYzYzYyNGRkZTI1MzFjN2RiLi41ZWU3ODBi
M2RjMzM5MzdiZmZmY2QzNmYyM2FkODk0YzAzOWJhOWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC0zNyw2
ICszNywxMiBAQCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpRdFBhbkdlc3R1cmVSZWNvZ25pemVy
KFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogaW50ZQogICAgIHJlc2V0KCk7CiB9CiAKK3Zv
aWQgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIGVuZ2luZSkKK3sKKyAgICBRdEdlc3R1cmVSZWNv
Z25pemVyOjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGVuZ2luZSk7CisgICAgcmVzZXQo
KTsKK30KKwogYm9vbCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25pemUoY29uc3QgUVRv
dWNoRXZlbnQqIGV2ZW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7CiAgICAgLy8g
UGFuIGdlc3R1cmUgYWx3YXlzIHN0YXJ0cyBvbiBUb3VjaEJlZ2luIHVubGVzcyB0aGUgZW5naW5l
IGlzIHN1c3BlbmRlZCwgb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRQYW5HZXN0dXJlUmVjb2duaXplci5oCmluZGV4IDI5Y2FmMDZmZDYyYWM2Y2YwZDFkZjRjNTJi
NGFjNmE3MWY4ZDc5NzguLjUxNGZlYTgzNDI1MDczOGZiMmIxMTI5YjIwOGE4NzUzZWE5MjVjZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNv
Z25pemVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuaApAQCAtNDIsNiArNDIsNyBAQCBjb25zdCBxcmVhbCBwYW5uaW5nSW5pdGlhbFRy
aWdnZXJEaXN0YW5jZVRocmVzaG9sZCA9IDUuOwogY2xhc3MgUXRQYW5HZXN0dXJlUmVjb2duaXpl
ciA6IHB1YmxpYyBRdEdlc3R1cmVSZWNvZ25pemVyIHsKIHB1YmxpYzoKICAgICBRdFBhbkdlc3R1
cmVSZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSopOworICAgIHZvaWQgc2V0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqKTsK
ICAgICBib29sIHJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCosIHFpbnQ2NCBldmVudFRpbWVz
dGFtcE1pbGxpcyk7CiAgICAgdm9pZCByZXNldCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCmluZGV4IDE2
ZGI1ZGQwYTIyNTAxZGMzYmRiNTExNTgyNzdlOTEwODAzNDZkYTEuLjc3YzQ2OGFlMWYxY2Q3NGNi
NGZmNzc2OGEwNGJmZGYxMmM2Mzc5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC0xMzAsNiArMTMw
LDEyIEBAIGJvb2wgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25pemUoY29uc3QgUVRv
dWNoRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBRdFBpbmNoR2Vz
dHVyZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKiBlbmdpbmUpCit7CisgICAgUXRHZXN0dXJlUmVjb2duaXplcjo6c2V0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShlbmdpbmUpOworICAgIHJlc2V0KCk7Cit9CisKIHZv
aWQgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCgpCiB7CiAgICAgUXRHZXN0dXJlUmVj
b2duaXplcjo6cmVzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCAzMGQxNWZjN2IwNzUyOThhNDQwZDY5
ZTY0ZmM3NTNiN2JkYmU0ZDRlLi4yMDhjMDVhYmRjMDkzMWJlZGUzODg1OWNlY2Y2MGE5NTRmNTBh
Y2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1
cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hH
ZXN0dXJlUmVjb2duaXplci5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAg
ICAgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSop
OworICAgIHZvaWQgc2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUqKTsKICAgICBib29sIHJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCopOwog
ICAgIHZvaWQgcmVzZXQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFRvdWNoVmlld0ludGVyZmFjZS5jcHAKaW5kZXggNDQ4Njg4MDk5MDlkNzU1OWQ4N2ViNmI2
YTYwMDI0NmFhOTRkMGYzMC4uYTJkZDExMTk5NGFiNjAwNWY5NGVlMTRlNTAzZGMwMWMyMjY4YWRm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50
ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJ
bnRlcmZhY2UuY3BwCkBAIC0yMiwxNyArMjIsMTcgQEAKICNpbmNsdWRlICJRdFRvdWNoVmlld0lu
dGVyZmFjZS5oIgogCiAjaW5jbHVkZSAiUXRXZWJFcnJvci5oIgotI2luY2x1ZGUgInF0b3VjaHdl
YnBhZ2UuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJxdG91Y2h3
ZWJ2aWV3LmgiCi0jaW5jbHVkZSAicXRvdWNod2Vidmlld19wLmgiCisjaW5jbHVkZSAicXF1aWNr
d2VicGFnZS5oIgorI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgorI2luY2x1ZGUgInFxdWlj
a3dlYnZpZXcuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKIAogI2luY2x1ZGUgPFFE
ZWNsYXJhdGl2ZUVuZ2luZT4KICNpbmNsdWRlIDxRUXVpY2tWaWV3PgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotUXRUb3VjaFZpZXdJbnRlcmZhY2U6OlF0VG91Y2hWaWV3SW50ZXJmYWNlKFFUb3Vj
aFdlYlZpZXcqIHZpZXdwb3J0VmlldywgUVRvdWNoV2ViUGFnZSogcGFnZVZpZXcpCitRdFRvdWNo
Vmlld0ludGVyZmFjZTo6UXRUb3VjaFZpZXdJbnRlcmZhY2UoUVF1aWNrV2ViVmlldyogdmlld3Bv
cnRWaWV3LCBRUXVpY2tXZWJQYWdlKiBwYWdlVmlldykKICAgICA6IG1fdmlld3BvcnRWaWV3KHZp
ZXdwb3J0VmlldykKICAgICAsIG1fcGFnZVZpZXcocGFnZVZpZXcpCiB7CkBAIC0xMzksNyArMTM5
LDcgQEAgdm9pZCBRdFRvdWNoVmlld0ludGVyZmFjZTo6bG9hZERpZFN1Y2NlZWQoKQogCiB2b2lk
IFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpsb2FkRGlkRmFpbChjb25zdCBRdFdlYkVycm9yJiBlcnJv
cikKIHsKLSAgICBlbWl0IG1fdmlld3BvcnRWaWV3LT5sb2FkRmFpbGVkKHN0YXRpY19jYXN0PFFC
YXNlV2ViVmlldzo6RXJyb3JUeXBlPihlcnJvci50eXBlKCkpLCBlcnJvci5lcnJvckNvZGUoKSwg
ZXJyb3IudXJsKCkpOworICAgIGVtaXQgbV92aWV3cG9ydFZpZXctPmxvYWRGYWlsZWQoc3RhdGlj
X2Nhc3Q8UVF1aWNrV2ViVmlldzo6RXJyb3JUeXBlPihlcnJvci50eXBlKCkpLCBlcnJvci5lcnJv
ckNvZGUoKSwgZXJyb3IudXJsKCkpOwogfQogCiB2b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpk
aWRDaGFuZ2VMb2FkUHJvZ3Jlc3MoaW50IHBlcmNlbnRhZ2VMb2FkZWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoVmlld0ludGVyZmFjZS5oCmluZGV4IGIwZDdl
YzE0Mzg3ZGFlYzZiZDNmMWVmYjA3OTUyNWVjMDRiYzYzMjguLmZkYzY1NDZjZTcyZGQ1MGI0ZTFm
MDk0MWRhYWI2MWM2MDM2Y2ZkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFRvdWNoVmlld0ludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFRvdWNoVmlld0ludGVyZmFjZS5oCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSAi
UXRWaWV3SW50ZXJmYWNlLmgiCiAKIGNsYXNzIFFQb2ludEY7Ci1jbGFzcyBRVG91Y2hXZWJQYWdl
OwotY2xhc3MgUVRvdWNoV2ViVmlldzsKK2NsYXNzIFFRdWlja1dlYlBhZ2U7CitjbGFzcyBRUXVp
Y2tXZWJWaWV3OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBWaWV3cG9ydEFyZ3VtZW50
czsKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgUXRTR1VwZGF0ZVF1ZXVlOwogCiBjbGFzcyBRdFRv
dWNoVmlld0ludGVyZmFjZSA6IHB1YmxpYyBRdFZpZXdJbnRlcmZhY2UgewogcHVibGljOgotICAg
IFF0VG91Y2hWaWV3SW50ZXJmYWNlKFFUb3VjaFdlYlZpZXcqIHZpZXdwb3J0VmlldywgUVRvdWNo
V2ViUGFnZSogcGFnZVZpZXcpOworICAgIFF0VG91Y2hWaWV3SW50ZXJmYWNlKFFRdWlja1dlYlZp
ZXcqIHZpZXdwb3J0VmlldywgUVF1aWNrV2ViUGFnZSogcGFnZVZpZXcpOwogCiAgICAgUXRTR1Vw
ZGF0ZVF1ZXVlKiBzY2VuZUdyYXBoVXBkYXRlUXVldWUoKSBjb25zdDsKIApAQCAtODcsOCArODcs
OCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRNb3VzZU1vdmVPdmVyRWxlbWVudChj
b25zdCBRVXJsJiwgY29uc3QgUVN0cmluZyYpIHsgfQogCiBwcml2YXRlOgotICAgIFFUb3VjaFdl
YlZpZXcqIGNvbnN0IG1fdmlld3BvcnRWaWV3OwotICAgIFFUb3VjaFdlYlBhZ2UqIGNvbnN0IG1f
cGFnZVZpZXc7CisgICAgUVF1aWNrV2ViVmlldyogY29uc3QgbV92aWV3cG9ydFZpZXc7CisgICAg
UVF1aWNrV2ViUGFnZSogY29uc3QgbV9wYWdlVmlldzsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2UuaAppbmRleCBiNWY1YzRiMzBjYjI4ODE1
NTk1OWU1NTEzYzE3YTYxOWM0ODgxODAxLi5iMDc4OTkwMmIwZDVhNzg5NmQ0NTM5NWJiNDIwNzgz
YWY5MmIwMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld0ludGVy
ZmFjZS5oCkBAIC0yNCw4ICsyNCwxMSBAQAogI2luY2x1ZGUgPFFNZW51PgogI2luY2x1ZGUgPFF0
Q29yZS9RU2hhcmVkUG9pbnRlcj4KICNpbmNsdWRlIDxRdENvcmUvUVNpemU+CisjaW5jbHVkZSA8
UXRDb3JlL1FVcmw+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KIAorY2xhc3MgUVF1aWNr
V2ViUGFnZTsKK2NsYXNzIFFRdWlja1dlYlZpZXc7CiBjbGFzcyBRdFdlYkVycm9yOwogY2xhc3Mg
UVdlYkRvd25sb2FkSXRlbTsKIApAQCAtMzcsNyArNDAsNiBAQCBjbGFzcyBRSlNFbmdpbmU7CiBj
bGFzcyBRTWltZURhdGE7CiBjbGFzcyBRUG9pbnQ7CiBjbGFzcyBRUmVjdDsKLWNsYXNzIFFVcmw7
CiBjbGFzcyBRV2lkZ2V0OwogUVRfRU5EX05BTUVTUEFDRQogCkBAIC00Nyw2ICs0OSw4IEBAIGNs
YXNzIFZpZXdwb3J0QXJndW1lbnRzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgUXRT
R1VwZGF0ZVF1ZXVlOworCiBjbGFzcyBRdFZpZXdJbnRlcmZhY2UgewogcHVibGljOgogICAgIGVu
dW0gRmlsZUNob29zZXJUeXBlIHsKQEAgLTU0LDQ5ICs1OCw2MSBAQCBwdWJsaWM6CiAgICAgICAg
IE11bHRpcGxlRmlsZXNTZWxlY3Rpb24KICAgICB9OwogCi0gICAgdmlydHVhbCB2b2lkIHNldFZp
ZXdOZWVkc0Rpc3BsYXkoY29uc3QgUVJlY3QmKSA9IDA7CisgICAgUXRWaWV3SW50ZXJmYWNlKFFR
dWlja1dlYlZpZXcqIHZpZXdwb3J0VmlldywgUVF1aWNrV2ViUGFnZSogcGFnZVZpZXcpOworCisg
ICAgUXRTR1VwZGF0ZVF1ZXVlKiBzY2VuZUdyYXBoVXBkYXRlUXVldWUoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFFSZWN0Jik7CisKKyAgICB2
aXJ0dWFsIFFTaXplIGRyYXdpbmdBcmVhU2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50
U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUG9zaXRp
b25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBwb3MpOworCisgICAgdmlydHVhbCBib29sIGlzQWN0
aXZlKCk7CisgICAgdmlydHVhbCBib29sIGhhc0ZvY3VzKCk7CisgICAgdmlydHVhbCBib29sIGlz
VmlzaWJsZSgpOwogCi0gICAgdmlydHVhbCBRU2l6ZSBkcmF3aW5nQXJlYVNpemUoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBwb3Mp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFF0OjpEcm9wQWN0aW9ucyBzdXBwb3J0
ZWREcm9wQWN0aW9ucywgY29uc3QgUUltYWdlJiBkcmFnSW1hZ2UsIFFNaW1lRGF0YSosIFFQb2lu
dCogY2xpZW50UG9zaXRpb24sIFFQb2ludCogZ2xvYmFsUG9zaXRpb24sIFF0OjpEcm9wQWN0aW9u
Kik7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwogCi0gICAgdmlydHVhbCBib29sIGlzQWN0aXZl
KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNGb2N1cygpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWaXNpYmxlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVh
KGNvbnN0IFFQb2ludCYsIGNvbnN0IFFSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRE
cmFnKFF0OjpEcm9wQWN0aW9ucyBzdXBwb3J0ZWREcm9wQWN0aW9ucywgY29uc3QgUUltYWdlJiBk
cmFnSW1hZ2UsIFFNaW1lRGF0YSosIFFQb2ludCogY2xpZW50UG9zaXRpb24sIFFQb2ludCogZ2xv
YmFsUG9zaXRpb24sIFF0OjpEcm9wQWN0aW9uKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRD
aGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVVybChjb25zdCBRVXJsJik7CisgICAg
dmlydHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFFTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2hhbmdlVG9vbFRpcChjb25zdCBRU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZVN0YXR1c1RleHQoY29uc3QgUVN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRDaGFuZ2VDdXJzb3IoY29uc3QgUUN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlk
QmVnaW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZENvbW1pdCgpOworICAgIHZpcnR1YWwg
dm9pZCBsb2FkRGlkU3VjY2VlZCgpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkRmFpbChjb25z
dCBRdFdlYkVycm9yJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUxvYWRQcm9ncmVzcyhp
bnQpOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgUVBvaW50
JiwgY29uc3QgUVJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShR
U2hhcmVkUG9pbnRlcjxRTWVudT4pOworICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4dE1lbnUo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VVcmwoY29uc3QgUVVybCYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUoY29uc3QgUVN0cmluZyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVG9vbFRpcChjb25zdCBRU3RyaW5nJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZENoYW5nZUN1cnNvcihjb25zdCBRQ3Vyc29yJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBsb2FkRGlkQmVnaW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRD
b21taXQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRTdWNjZWVkKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBsb2FkRGlkRmFpbChjb25zdCBRdFdlYkVycm9yJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VMb2FkUHJvZ3Jlc3MoaW50KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBRU3RyaW5nJik7CisgICAgdmlydHVhbCBib29s
IHJ1bkphdmFTY3JpcHRDb25maXJtKGNvbnN0IFFTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFFTdHJp
bmcgcnVuSmF2YVNjcmlwdFByb21wdChjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYgZGVm
YXVsdFZhbHVlLCBib29sJiBvayk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51
KFFTaGFyZWRQb2ludGVyPFFNZW51PikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4
dE1lbnUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBydW5K
YXZhU2NyaXB0QWxlcnQoY29uc3QgUVN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcnVu
SmF2YVNjcmlwdENvbmZpcm0oY29uc3QgUVN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIFFTdHJp
bmcgcnVuSmF2YVNjcmlwdFByb21wdChjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYgZGVm
YXVsdFZhbHVlLCBib29sJiBvaykgPSAwOworICAgIHZpcnR1YWwgUUpTRW5naW5lKiBlbmdpbmUo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hvb3Nl
RmlsZXMoV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3QgUVN0cmluZ0xpc3QmIHNl
bGVjdGVkRmlsZU5hbWVzLCBGaWxlQ2hvb3NlclR5cGUpOwogCi0gICAgdmlydHVhbCBRSlNFbmdp
bmUqIGVuZ2luZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW91c2VNb3ZlT3ZlckVsZW1l
bnQoY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmcmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjaG9v
c2VGaWxlcyhXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmLCBjb25zdCBRU3RyaW5nTGlzdCYg
c2VsZWN0ZWRGaWxlTmFtZXMsIEZpbGVDaG9vc2VyVHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkb3dubG9hZFJlcXVlc3RlZChRV2ViRG93bmxvYWRJdGVtKik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkTW91c2VNb3ZlT3ZlckVsZW1lbnQoY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmcmKSA9
IDA7Citwcml2YXRlOgorICAgIFFRdWlja1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnRWaWV3Owor
ICAgIFFRdWlja1dlYlBhZ2UqIGNvbnN0IG1fcGFnZVZpZXc7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
ZG93bmxvYWRSZXF1ZXN0ZWQoUVdlYkRvd25sb2FkSXRlbSopID0gMDsKKyAgICBRU2hhcmVkUG9p
bnRlcjxRTWVudT4gYWN0aXZlTWVudTsKKyAgICBRVXJsIGxhc3RIb3ZlcmVkVVJMOworICAgIFFT
dHJpbmcgbGFzdEhvdmVyZWRUaXRsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKaW5kZXggZGNjODY1Zjc1NjVmZWUzNWVjZTRkNjJlYzgy
Nzc5ZTQ5MGU5YjEyMC4uYzQwNDQ0N2Q2NWE0MjkwMzQwZmVjOTQxODcxYTkyMWQ5ZDJkYmU3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKQEAgLTE3
Myw2ICsxNzMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJs
ZWQoYm9vbCk7CiAgICAgYm9vbCBuYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDsgfQogCisgICAgdm9pZCBzZXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogZW5naW5lKSB7
IG1faW50ZXJhY3Rpb25FbmdpbmUgPSBlbmdpbmU7IG1fcGFuR2VzdHVyZVJlY29nbml6ZXIuc2V0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShlbmdpbmUpOyBtX3BpbmNoR2VzdHVyZVJlY29nbml6
ZXIuc2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShlbmdpbmUpO30KKwogICAgIHZvaWQgcG9z
dE1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFFTdHJpbmcmKTsKIAogICAgIHFyZWFs
IHRleHRab29tRmFjdG9yKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDAzZDBkMWI1Y2JmY2Yx
NmVmZDE4NGMwNTFjMWIzNjM0NTRiY2I2N2EuLjIyOTFmZDlkN2IzZTFiMWMwYWZiZTk0ZGI3NGFj
M2NiZjNmMTFlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC01MSwxMSArNTEsOSBAQCBTT1VSQ0VTICs9
IFwKICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5jcHAg
XAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvY3BwL3F0L1dLU3RyaW5nUXQuY3BwIFwKICAgICAk
JFBXRC9VSVByb2Nlc3MvQVBJL2NwcC9xdC9XS1VSTFF0LmNwcCBcCi0gICAgJCRQV0QvVUlQcm9j
ZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuY3BwIFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0
L3FkZXNrdG9wd2Vidmlldy5jcHAgXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmRv
d25sb2FkaXRlbS5jcHAgXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFn
ZS5jcHAgXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHAgXAor
ICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgXAorICAgICQkUFdE
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgXAogICAgICQkUFdEL1VJUHJvY2Vz
cy9BUEkvcXQvcXdlYm5hdmlnYXRpb25jb250cm9sbGVyLmNwcCBcCiAgICAgJCRQV0QvVUlQcm9j
ZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwIFwKICAgICAkJFBXRC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcCBcCkBAIC0xMzIsMTggKzEzMCwxNCBAQCBI
RUFERVJTICs9IFwKICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL2NwcC9XS1JldGFpblB0ci5oIFwK
ICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL2NwcC9xdC9XS1N0cmluZ1F0LmggXAogICAgICQkUFdE
L1VJUHJvY2Vzcy9BUEkvY3BwL3F0L1dLVVJMUXQuaCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQ
SS9xdC9xYmFzZXdlYnZpZXcuaCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdl
YnZpZXdfcC5oIFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5o
IFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlld19wLmggXAogICAg
ICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmggXAogICAgICQkUFdEL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzX3AuaCBcCiAgICAgJCRQV0QvVUlQcm9jZXNz
L0FQSS9xdC9xd2ViZG93bmxvYWRpdGVtLmggXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQv
cXdlYmRvd25sb2FkaXRlbV9wLmggXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNo
d2VicGFnZS5oIFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2VfcC5o
IFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuaCBcCi0gICAgJCRQ
V0QvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3X3AuaCBcCisgICAgJCRQV0QvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmggXAorICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2VicGFnZV9wLmggXAorICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlldy5oIFwKKyAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oIFwK
ICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oIFwK
ICAgICAkJFBXRC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0Zv
cndhcmRMaXN0LmggXAogICAgICQkUFdEL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmggXApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA4YmFiODg5Njc4NGVlOTcwMWMwOTI4MWEzMTY2
MjllZTdlZWE4NjkuLjUxYTVlNDM1YjMyMTM0MjVkOTU2Y2I4Y2NjNGVkNThmMzc1YzViY2UgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAxMS0xMS0wOCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJv
c3NhLm9yZz4KKworICAgICAgICBbUXRdIE1lcmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9w
V2ViVmlldyBpbnRvIG9uZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzEzNTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNYWtlIE1pbmlCcm93c2VyIGFuZCBXZWJLaXRUZXN0UnVubmVyIHdvcmsg
YWdhaW4KKyAgICAgICAgYWZ0ZXIgdGhlIG1lcmdlLgorCisgICAgICAgICogTWluaUJyb3dzZXIv
cXQvQnJvd3NlcldpbmRvdy5jcHA6CisgICAgICAgIChCcm93c2VyV2luZG93Ojp3ZWJWaWV3KToK
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmM6CisgICAgICAgICogTWlu
aUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHA6CisgICAgICAgICogTWluaUJy
b3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0
L3FtbC9EZXNrdG9wVmlldy5xbWw6IFJlbW92ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcXQv
cW1sL1RvdWNoVmlldy5xbWw6IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3Jt
V2ViVmlld1F0LmNwcDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdl
YlZpZXcpOgorCiAyMDExLTExLTA3ICBaZW5vIEFsYmlzc2VyICA8emVuby5hbGJpc3NlckBub2tp
YS5jb20+CiAKICAgICAgICAgW1F0XVtXSzJdIE1pbmlCcm93c2VyIHNob3VsZCB1c2UgdXJsRnJv
bVVzZXJJbnB1dCgpCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2lu
ZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwCmluZGV4IDE0
MTVmNGQ2NmY2MWJiNmFkNzRjOGUxNDljOTZhZGUwZDA0YzQ5ZjkuLjU1NDkwODMzNmMzYTJkMzdi
NzlkMzBjYWU0NGJlMTdmZTgyNzViZTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L0Jyb3dzZXJXaW5kb3cuY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5k
b3cuY3BwCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCiAK
LSNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXcuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3Lmgi
Ci0jaW5jbHVkZSAicXRvdWNod2VicGFnZS5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXcuaCIK
ICNpbmNsdWRlICJ1dGlscy5oIgogCiAjaW5jbHVkZSA8UURlY2xhcmF0aXZlRW5naW5lPgpAQCAt
NjEsMTEgKzU5LDcgQEAgQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhXaW5kb3dPcHRpb25z
KiBvcHRpb25zKQogCiBRT2JqZWN0KiBCcm93c2VyV2luZG93Ojp3ZWJWaWV3KCkgY29uc3QKIHsK
LSAgICBRT2JqZWN0KiB3ZWJWaWV3ID0gcm9vdE9iamVjdCgpLT5wcm9wZXJ0eSgid2ViVmlldyIp
LnZhbHVlPFFEZXNrdG9wV2ViVmlldyo+KCk7Ci0gICAgLy8gVGhlIHdlYlZpZXcgaXMgY3JlYXRl
ZCBpbiBRTUwsIHRoZXJlZm9yZSBpdCBtaWdodCBub3QgZXhpc3QgeWV0LgotICAgIGlmICghd2Vi
VmlldykKLSAgICAgICAgd2ViVmlldyA9IHJvb3RPYmplY3QoKS0+cHJvcGVydHkoIndlYlZpZXci
KS52YWx1ZTxRVG91Y2hXZWJWaWV3Kj4oKTsKLSAgICByZXR1cm4gd2ViVmlldzsKKyAgICByZXR1
cm4gcm9vdE9iamVjdCgpLT5wcm9wZXJ0eSgid2ViVmlldyIpLnZhbHVlPFFRdWlja1dlYlZpZXcq
PigpOwogfQogCiB2b2lkIEJyb3dzZXJXaW5kb3c6OmxvYWQoY29uc3QgUVN0cmluZyYgdXJsKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjIGIvVG9vbHMv
TWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCmluZGV4IDEyZGRjMzI0YzhiYTE1YTA4ZDI2
ZmI0NmIxYTJmOGJlZGM3NmJlZDkuLmE1N2E5NTQ0ZjQxNTMzM2RiMTQ1YjNlYjNkZWY4MzQ0NWFh
MDMxYTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYwor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKQEAgLTYsNyArNiw1IEBA
CiAgICAgICAgIDxmaWxlPmljb25zL3N0b3AucG5nPC9maWxlPgogICAgICAgICA8ZmlsZT5xbWwv
QnJvd3NlcldpbmRvdy5xbWw8L2ZpbGU+CiAgICAgICAgIDxmaWxlPnVzZXJhZ2VudGxpc3QudHh0
PC9maWxlPgotICAgICAgICA8ZmlsZT5xbWwvRGVza3RvcFZpZXcucW1sPC9maWxlPgotICAgICAg
ICA8ZmlsZT5xbWwvVG91Y2hWaWV3LnFtbDwvZmlsZT4KICAgICA8L3FyZXNvdXJjZT4KIDwvUkND
PgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlv
bi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcApp
bmRleCBjYTdmODFhNDAxNDgwYWEyYjkyMmIxM2YxYjY4ZTA2OGZiMGI1ZTZlLi4xYmIyM2IxZTMw
NGUyMzY2N2RiNGE0Njk4YjFhMDhhOGZlODI0Y2RjIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcApAQCAtMjgsOCArMjgsNiBAQAogCiAjaW5j
bHVkZSAiTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5oIgogCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2
aWV3LmgiCi0jaW5jbHVkZSAicXRvdWNod2Vidmlldy5oIgogI2luY2x1ZGUgInF3ZWJuYXZpZ2F0
aW9uY29udHJvbGxlci5oIgogI2luY2x1ZGUgInV0aWxzLmgiCiAjaW5jbHVkZSA8UVJlZ0V4cD4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbCBi
L1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAppbmRleCAzOGNiYTBm
N2M0MGUxNDA5ZDQ4NmU3MzZmOTY1OGFiMjcyMDQxYjgwLi5mMDc0NTk5NGM5MGYyODY3ZTM5MmYx
M2VkNDY2ODVkNDhjNWRkNWY2IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwv
QnJvd3NlcldpbmRvdy5xbWwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJX
aW5kb3cucW1sCkBAIC0zNiw3ICszNiw2IEBAIFJlY3RhbmdsZSB7CiAgICAgcHJvcGVydHkgYm9v
bCBjYW5Hb0ZvcndhcmQ6IGZhbHNlCiAgICAgcHJvcGVydHkgYm9vbCBjYW5TdG9wOiBmYWxzZQog
ICAgIHByb3BlcnR5IGludCBsb2FkUHJvZ3Jlc3M6IDAKLSAgICBwcm9wZXJ0eSBhbGlhcyB3ZWJW
aWV3OiB2aWV3TG9hZGVyLml0ZW0KIAogICAgIHNpZ25hbCBwYWdlVGl0bGVDaGFuZ2VkKHN0cmlu
ZyB0aXRsZSkKIApAQCAtMTkxLDMyICsxOTAsMzMgQEAgUmVjdGFuZ2xlIHsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIExvYWRlciB7Ci0gICAgICAgIGlkOiB2aWV3TG9hZGVyCisgICAgV2ViVmll
dyB7CisgICAgICAgIGlkOiB3ZWJWaWV3CiAgICAgICAgIGFuY2hvcnMgewogICAgICAgICAgICAg
dG9wOiBuYXZpZ2F0aW9uQmFyLmJvdHRvbQogICAgICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQK
ICAgICAgICAgICAgIHJpZ2h0OiBwYXJlbnQucmlnaHQKICAgICAgICAgICAgIGJvdHRvbTogcGFy
ZW50LmJvdHRvbQogICAgICAgICB9Ci0gICAgICAgIHNvdXJjZTogb3B0aW9ucy51c2VUb3VjaFdl
YlZpZXcgPyAiVG91Y2hWaWV3LnFtbCIgOiAiRGVza3RvcFZpZXcucW1sIgotICAgIH0KIAotICAg
IENvbm5lY3Rpb25zIHsKLSAgICAgICAgdGFyZ2V0OiB2aWV3TG9hZGVyLml0ZW0KLSAgICAgICAg
b25UaXRsZUNoYW5nZWQ6IHBhZ2VUaXRsZUNoYW5nZWQodmlld0xvYWRlci5pdGVtLnRpdGxlKQor
ICAgICAgICBzaWduYWwgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZAorCisgICAgICAgIENvbXBvbmVu
dC5vbkNvbXBsZXRlZDogbmF2aWdhdGlvbi5uYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkLmNvbm5lY3Qo
bmF2aWdhdGlvblN0YXRlQ2hhbmdlZCk7CisKKyAgICAgICAgdmlld01vZGU6IG9wdGlvbnMudXNl
VG91Y2hXZWJWaWV3ID8gV2ViVmlldy5Ub3VjaCA6IFdlYlZpZXcuRGVza3RvcAorCisgICAgICAg
IG9uVGl0bGVDaGFuZ2VkOiBwYWdlVGl0bGVDaGFuZ2VkKHRpdGxlKQogICAgICAgICBvblVybENo
YW5nZWQ6IHsKLSAgICAgICAgICAgIGFkZHJlc3NMaW5lLnRleHQgPSB2aWV3TG9hZGVyLml0ZW0u
dXJsCisgICAgICAgICAgICBhZGRyZXNzTGluZS50ZXh0ID0gdXJsCiAgICAgICAgICAgICBpZiAo
b3B0aW9ucy5wcmludExvYWRlZFVybHMpCi0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkxv
YWRlZDoiLCB2aWV3TG9hZGVyLml0ZW0udXJsKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxv
ZygiTG9hZGVkOiIsIHdlYlZpZXcudXJsKTsKICAgICAgICAgICAgIGZvcmNlQWN0aXZlRm9jdXMo
KTsKICAgICAgICAgfQogICAgICAgICBvbk5hdmlnYXRpb25TdGF0ZUNoYW5nZWQ6IHsKLSAgICAg
ICAgICAgIGNhbkdvQmFjayA9IHZpZXdMb2FkZXIuaXRlbS5uYXZpZ2F0aW9uLmNhbkdvQmFjawot
ICAgICAgICAgICAgY2FuR29Gb3J3YXJkID0gdmlld0xvYWRlci5pdGVtLm5hdmlnYXRpb24uY2Fu
R29Gb3J3YXJkCi0gICAgICAgICAgICBjYW5TdG9wID0gdmlld0xvYWRlci5pdGVtLm5hdmlnYXRp
b24uY2FuU3RvcAorICAgICAgICAgICAgY2FuR29CYWNrID0gbmF2aWdhdGlvbi5jYW5Hb0JhY2sK
KyAgICAgICAgICAgIGNhbkdvRm9yd2FyZCA9IG5hdmlnYXRpb24uY2FuR29Gb3J3YXJkCisgICAg
ICAgICAgICBjYW5TdG9wID0gbmF2aWdhdGlvbi5jYW5TdG9wCiAgICAgICAgIH0KLSAgICAgICAg
b25Mb2FkUHJvZ3Jlc3NDaGFuZ2VkOiBsb2FkUHJvZ3Jlc3MgPSB2aWV3TG9hZGVyLml0ZW0ubG9h
ZFByb2dyZXNzCiAgICAgfQogCiAgICAgS2V5cy5vblByZXNzZWQ6IHsKZGlmZiAtLWdpdCBhL1Rv
b2xzL01pbmlCcm93c2VyL3F0L3FtbC9EZXNrdG9wVmlldy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9xbWwvRGVza3RvcFZpZXcucW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
NTJkZGQ1MDk3ZjU1ZTE0YjAwYmQxYWYxYzIxNDE2MTg4NTk5NDA5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9E
ZXNrdG9wVmlldy5xbWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWltcG9ydCBRdFF1
aWNrIDIuMAotaW1wb3J0IFF0V2ViS2l0IDMuMAotCi1EZXNrdG9wV2ViVmlldyB7Ci0gICAgc2ln
bmFsIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQKLQotICAgIENvbXBvbmVudC5vbkNvbXBsZXRlZDog
bmF2aWdhdGlvbi5uYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkLmNvbm5lY3QobmF2aWdhdGlvblN0YXRl
Q2hhbmdlZCkKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ub3VjaFZp
ZXcucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1RvdWNoVmlldy5xbWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYWZkYjA3MDAxYjk2ZjJmZjUyN2I5ZTAyYjlhYzZmYjE4
MTBkN2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvTWluaUJyb3dzZXIvcXQvcW1sL1RvdWNoVmlldy5xbWwKKysrIC9kZXYvbnVsbApAQCAtMSw4
ICswLDAgQEAKLWltcG9ydCBRdFF1aWNrIDIuMAotaW1wb3J0IFF0V2ViS2l0IDMuMAotCi1Ub3Vj
aFdlYlZpZXcgewotICAgIHNpZ25hbCBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkCi0KLSAgICBDb21w
b25lbnQub25Db21wbGV0ZWQ6IG5hdmlnYXRpb24ubmF2aWdhdGlvblN0YXRlQ2hhbmdlZC5jb25u
ZWN0KG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQpCi19CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaAppbmRleCA0YTU4OWJlOTM1ZWE0OGY0ZDA4Y2Y1YjM3YTE0YThjZDkwYTk0
MTc4Li5hNmQ1MWYyMTBiODg5ZjcwMmU5YTE3ZmYwNzg4YTk2Nzk0MTc0ZGM1IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTI5LDggKzI5LDggQEAKICNpbmNs
dWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAKICNpZiBkZWZpbmVkKEJVSUxESU5HX1FUX18p
Ci1jbGFzcyBRRGVza3RvcFdlYlZpZXc7Ci10eXBlZGVmIFFEZXNrdG9wV2ViVmlldyogUGxhdGZv
cm1XS1ZpZXc7CitjbGFzcyBRUXVpY2tXZWJWaWV3OwordHlwZWRlZiBRUXVpY2tXZWJWaWV3KiBQ
bGF0Zm9ybVdLVmlldzsKIGNsYXNzIFFRdWlja1ZpZXc7CiB0eXBlZGVmIFFRdWlja1ZpZXcqIFBs
YXRmb3JtV2luZG93OwogI2VsaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fQVBQTEVfXwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcAppbmRleCAy
MmUzYWE2NDFiZTIxYjMxYTJiMjZmYzA4NzcyN2M5ZmZhMDIwZWFkLi43N2MzMWZmMGM5NDI3MThi
NTAwZjBmYWI4Mzg5NzlhMTVmM2Q2NWU0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAicWRlc2t0
b3B3ZWJ2aWV3LmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgogCiAjaW5jbHVkZSA8UUFw
cGxpY2F0aW9uPgogI2luY2x1ZGUgPFFEZWNsYXJhdGl2ZVByb3BlcnR5PgpAQCAtNjcsNyArNjcs
NyBAQCBwcml2YXRlOgogfTsKIAogUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKLSAgICA6
IG1fdmlldyhuZXcgUURlc2t0b3BXZWJWaWV3KGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZikpCisg
ICAgOiBtX3ZpZXcobmV3IFFRdWlja1dlYlZpZXcoY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSkK
ICAgICAsIG1fd2luZG93KG5ldyBXcmFwcGVyV2luZG93KG1fdmlldykpCiAgICAgLCBtX3dpbmRv
d0lzS2V5KHRydWUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114376</attachid>
            <date>2011-11-09 15:22:50 -0800</date>
            <delta_ts>2011-11-10 04:13:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71355-20111109202241.patch</filename>
            <type>text/plain</type>
            <size>164677</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk2OTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMzVmNjY4N2I1ODg5
NmViYTEwZjQ1OWYwZmUwYjVlM2E3MWM3ZGQwZC4uNjUzZDZmMDA2NzQ1NzcxMDQ5ZjU3MWI5MGUw
MjI4Mzg3MDM5NTg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMS0w
OSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdIE1lcmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEz
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWdp
c3RlciBvbmx5IFFRdWlja1dlYlZpZXcgYW5kIFFRdWlja1dlYlBhZ2UgaW4gdGhlIHBsdWdpbi4K
KworICAgICAgICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXRRbWxQ
bHVnaW46OnJlZ2lzdGVyVHlwZXMpOgorCiAyMDExLTExLTA4ICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlcGxhY2UgdXNlIG9mIFFB
cHBsaWNhdGlvbiB3aXRoIFFHdWlBcHBsaWNhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDViYTM1OTNjMmNl
ODRjMmQ5YTE4Y2RmNTRmZWFlYjI4MGMwOTFjYmEuLjM4MjE1NGViYTE1YzE0NGIxMzQzNmZhMDFi
YTI1OGVmZmZmMjJmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTUgQEAKKzIwMTEtMTEtMDkg
IEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAg
W1F0XSBNZXJnZSBRVG91Y2hXZWJWaWV3IGFuZCBRRGVza3RvcFdlYlZpZXcgaW50byBvbmUgY2xh
c3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzU1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWVyZ2Ug
UVRvdWNoV2ViVmlldyBhbmQgUURlc2t0b3BXZWJWaWV3IGludG8gb25lIGNsYXNzIGNhbGxlZAor
ICAgICAgICBRUXVpY2tXZWJWaWV3IGFuZCBpdHMgYXR0YWNoZWQgcGFnZSBRUXVpY2tXZWJQYWdl
LiBZb3UgY2FuIHN3aXRjaCB0byB0aGUKKyAgICAgICAgdHJhZGl0aW9uYWwgZGVza3RvcCB1c2Ug
Y2FzZSB3aXRoIHRoZSBwcml2YXRlIGhlYWRlci4gQWxzbyBub3cgb24gZGVza3RvcAorICAgICAg
ICBwbGF0Zm9ybXMgQUMgaXMgdHVybiBvbiBieSBkZWZhdWx0LiBJIGFsc28gbWVyZ2VkIG91ciB0
d28KKyAgICAgICAgc3ViY2xhc3NlcyBvZiBRdFZpZXdJbnRlcmZhY2UgaW50byBvbmUgYXMgdGhl
IHNwbGl0IGRvZXNuJ3QgbWFrZQorICAgICAgICB0aGF0IG11Y2ggc2Vuc2UgYW55bW9yZS4gSW4g
dGhlIGZ1dHVyZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZW5hYmxlIHRoZQorICAgICAgICB0cmFk
aXRpb25hbCBkZXNrdG9wIHVzZSBjYXNlIGRlcGVuZGluZyB0aGUgcGxhdGZvcm0gdGhlIGNvZGUg
aXMgcnVubmluZy4KKyAgICAgICAgQVBJIHRlc3RzIGFuZCBRTUwgdGVzdHMgaGF2ZSBiZWVuIHVw
ZGF0ZWQuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
cXQvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3X3AuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlld19wLmg6
IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFn
ZS5jcHAuCisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpRUXVpY2tXZWJQYWdlKToKKyAgICAgICAg
KFFRdWlja1dlYlBhZ2U6On5RUXVpY2tXZWJQYWdlKToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6
OmtleVByZXNzRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6a2V5UmVsZWFzZUV2ZW50
KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmlucHV0TWV0aG9kRXZlbnQpOgorICAgICAgICAo
UVF1aWNrV2ViUGFnZTo6Zm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmZv
Y3VzT3V0RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6bW91c2VQcmVzc0V2ZW50KToK
KyAgICAgICAgKFFRdWlja1dlYlBhZ2U6Om1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFFRdWlj
a1dlYlBhZ2U6Om1vdXNlUmVsZWFzZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6Om1v
dXNlRG91YmxlQ2xpY2tFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjp3aGVlbEV2ZW50
KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmhvdmVyRW50ZXJFdmVudCk6CisgICAgICAgIChR
UXVpY2tXZWJQYWdlOjpob3Zlck1vdmVFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpo
b3ZlckxlYXZlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6ZHJhZ01vdmVFdmVudCk6
CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpkcmFnRW50ZXJFdmVudCk6CisgICAgICAgIChRUXVp
Y2tXZWJQYWdlOjpkcmFnTGVhdmVFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpkcm9w
RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAg
ICAgKFFRdWlja1dlYlBhZ2U6OmV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnRvdWNo
RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6aXRlbUNoYW5nZSk6CisgICAgICAgIChR
UXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAoUVF1
aWNrV2ViUGFnZVByaXZhdGU6OmluaXRTY2VuZUdyYXBoQ29ubmVjdGlvbnMpOgorICAgICAgICAo
UVF1aWNrV2ViUGFnZVByaXZhdGU6OnNldFBhZ2VQcm94eSk6CisgICAgICAgIChjb21wdXRlRWZm
ZWN0aXZlT3BhY2l0eSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6Ol9xX29uQWZ0
ZXJTY2VuZVJlbmRlcik6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6X3Ffb25TY2Vu
ZUdyYXBoSW5pdGlhbGl6ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91
Y2h3ZWJwYWdlLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3Au
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vi
cGFnZV9wLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDog
QWRkZWQuCisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZh
dGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmVuYWJsZU1vdXNlRXZlbnRzKToK
KyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpkaXNhYmxlTW91c2VFdmVudHMpOgorICAg
ICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAoUVF1aWNr
V2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVEZXNrdG9wKToKKyAgICAgICAgKFFRdWlja1dlYlZp
ZXdQcml2YXRlOjppbml0aWFsaXplVG91Y2gpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZh
dGU6OmxvYWREaWRDb21taXQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmNvbnRl
bnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2Nyb2xsUG9z
aXRpb25SZXF1ZXN0ZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX3ZpZXdw
b3J0VXBkYXRlZCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffdmlld3BvcnRU
cmFqZWN0b3J5VmVjdG9yQ2hhbmdlZCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
X3Ffb25WaXNpYmxlQ2hhbmdlZCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6dXBk
YXRlVmlld3BvcnRTaXplKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjp1cGRhdGVW
aWV3cG9ydENvbnN0cmFpbnRzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpkaWRD
aGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6
OnJ1bkphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6cnVu
SmF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnJ1bkph
dmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmNob29zZUZp
bGVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV9vbk9wZW5QYW5lbEZpbGVz
U2VsZWN0ZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX29uT3BlblBhbmVs
RmluaXNoZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNldFVzZVRyYWRpdGlv
bmFsRGVza3RvcEJlaGF2aW91cik6CisgICAgICAgICh0b1BvbGljeUFjdGlvbik6CisgICAgICAg
IChoYXNNZXRhTWV0aG9kKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpuYXZpZ2F0
aW9uUG9saWN5Rm9yVVJMKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRQYWdl
UHJveHkpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6UVF1aWNrV2ViVmlldyk6CisgICAgICAg
IChRUXVpY2tXZWJWaWV3Ojp+UVF1aWNrV2ViVmlldyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
OjpwYWdlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmxvYWQpOgorICAgICAgICAoUVF1aWNr
V2ViVmlldzo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6dXJsKToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXc6OmxvYWRQcm9ncmVzcyk6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3Ojp0aXRsZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpuYXZpZ2F0aW9uQ29udHJvbGxl
cik6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpwcmVmZXJlbmNlcyk6CisgICAgICAgIChRUXVp
Y2tXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6dG91
Y2hFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpwYWdlUmVmKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmguCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xdG91Y2h3ZWJ2aWV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3F0b3VjaHdlYnZpZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3F0b3VjaHdlYnZpZXdfcC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvY29tbW9udmlld3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy5wcm86IFJlbW92ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvdHN0X2NvbW1vbnZp
ZXd0ZXN0cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9j
b21tb252aWV3dGVzdHMvd2Vidmlld2Fic3RyYWN0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rp
b24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9w
d2Vidmlldy9xZGVza3RvcHdlYnZpZXcucHJvOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcWRlc2t0b3B3ZWJ2aWV3L3RzdF9xZGVza3RvcHdlYnZpZXcuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3Rv
cFdlYlZpZXcvdHN0X2Rvd25sb2FkLnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9saW5rSG92ZXJlZC5xbWw6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9h
ZEZhaWwucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVz
a3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzcy5xbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFByb2dyZXNzU2lnbmFs
LnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BX
ZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9tZXNzYWdpbmcucW1sOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0
X25hdmlnYXRpb25Qb2xpY3lGb3JVcmwucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X3ByZWZlcmVuY2VzLnFtbDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9w
cm9wZXJ0aWVzLnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3Rz
L1RvdWNoV2ViVmlldy90c3RfbG9hZC5xbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRGYWlsLnFtbDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZE5lZ2F0
aXZlU2l6ZVZpZXcucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1sOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWdu
YWwucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hX
ZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfcHJvcGVydGllcy5xbWw6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm86CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwOgor
ICAgICAgICAoRGVza3RvcFdlYlZpZXc6OkRlc2t0b3BXZWJWaWV3KToKKyAgICAgICAgKG1haW4p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXRvdWNod2Vidmlldy9xdG91Y2h3
ZWJ2aWV3LnBybzogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0
b3VjaHdlYnZpZXcvdHN0X3F0b3VjaHdlYnZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHdpbmRvdy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRHZXN0dXJlUmVj
b2duaXplcjo6UXRHZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJLaXQ6OlF0R2VzdHVy
ZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFBhbkdlc3R1
cmVSZWNvZ25pemVyOjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKToKKyAgICAgICAgKFdl
YktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6cmVjb2duaXplKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFBpbmNo
R2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0UGluY2hH
ZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9xdC9RdFRvdWNoVmlld0ludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0
VG91Y2hWaWV3SW50ZXJmYWNlOjpRdFRvdWNoVmlld0ludGVyZmFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlF0VG91Y2hWaWV3SW50ZXJmYWNlOjpsb2FkRGlkRmFpbCk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0
Vmlld0ludGVyZmFjZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5o
OgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUp
OgorICAgICAgICAqIFdlYktpdDIucHJpOgorCiAyMDExLTExLTA5ICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEZpeCBnZW9sb2NhdGlv
biBlbmFibGVkIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2
ZS9wbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCmlu
ZGV4IGE1MWVkYmM0ZDhjNTI5MGU4NTlmMmE0MDcyZGRmZTYyOTNkMWM0ZjIuLjJiOThiZTdiYjg5
NTgzMjIwZjE1NDM1NDg2OGU3N2Q3MGFmYjM3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0
aXZlL3BsdWdpbi5jcHAKQEAgLTIzLDkgKzIzLDggQEAKICNpbmNsdWRlIDxRdERlY2xhcmF0aXZl
L3FkZWNsYXJhdGl2ZWV4dGVuc2lvbnBsdWdpbi5oPgogCiAjaWYgZGVmaW5lZChIQVZFX1dFQktJ
VDIpCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3LmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFn
ZS5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnZpZXcuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdl
LmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgogI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0
ZW0uaCIKICNpbmNsdWRlICJxd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJx
d2VicHJlZmVyZW5jZXMuaCIKQEAgLTUwLDExICs0OSwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIGRlZmluZWQoSEFWRV9XRUJLSVQyKQotICAgICAgICBxbWxSZWdpc3RlclR5cGU8UURlc2t0
b3BXZWJWaWV3Pih1cmksIDMsIDAsICJEZXNrdG9wV2ViVmlldyIpOwotICAgICAgICBxbWxSZWdp
c3RlclR5cGU8UVRvdWNoV2ViVmlldz4odXJpLCAzLCAwLCAiVG91Y2hXZWJWaWV3Iik7CisgICAg
ICAgIHFtbFJlZ2lzdGVyVHlwZTxRUXVpY2tXZWJWaWV3Pih1cmksIDMsIDAsICJXZWJWaWV3Iik7
CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFXZWJOYXZpZ2F0aW9uQ29udHJv
bGxlcj4odXJpLCAzLCAwLCAiTmF2aWdhdGlvbkNvbnRyb2xsZXIiLCBRT2JqZWN0Ojp0cigiQ2Fu
bm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBOYXZpZ2F0aW9uQ29udHJvbGxlciIpKTsK
ICAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYlByZWZlcmVuY2VzPih1cmks
IDMsIDAsICJXZWJQcmVmZXJlbmNlcyIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFy
YXRlIGluc3RhbmNlIG9mIFdlYlByZWZlcmVuY2VzIikpOwotICAgICAgICBxbWxSZWdpc3RlclVu
Y3JlYXRhYmxlVHlwZTxRVG91Y2hXZWJQYWdlPih1cmksIDMsIDAsICJUb3VjaFdlYlBhZ2UiLCBR
T2JqZWN0Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBUb3VjaFdlYlBh
Z2UsIHVzZSBUb3VjaFdlYlZpZXciKSk7CisgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVU
eXBlPFFRdWlja1dlYlBhZ2U+KHVyaSwgMywgMCwgIldlYlBhZ2UiLCBRT2JqZWN0Ojp0cigiQ2Fu
bm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBXZWJQYWdlLCB1c2UgV2ViVmlldyIpKTsK
ICAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UU5ldHdvcmtSZXBseT4odXJpLCAz
LCAwLCAiTmV0d29ya1JlcGx5IiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUg
aW5zdGFuY2Ugb2YgTmV0d29ya1JlcGx5IikpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRh
YmxlVHlwZTxRV2ViRG93bmxvYWRJdGVtPih1cmksIDUsIDAsICJEb3dubG9hZEl0ZW0iLCBRT2Jq
ZWN0Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBEb3dubG9hZEl0ZW0i
KSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDJmYTljMjJjNjhiN2M2ODU4ZGMwZWRiOGU4YjBl
MTQyMDFhOTZkMjAuLmMzYjhmNDE3YjUzNmNlZjI2YjNlZGJkMTFkMThkMzMzMDE3ZTY0MTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQpAQCAtMjQzLDcgKzI0Myw2IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50Lmgg
XAogICAgIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmggXAotICAgIFVJUHJvY2Vzcy9xdC9RdFRv
dWNoVmlld0ludGVyZmFjZS5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQb2xpY3lJbnRlcmZhY2Uu
aCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaCBcCkBAIC00ODYsNyArNDg1LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNz
L3F0L0NsaWVudEltcGwuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5
UXQuY3BwIFwKLSAgICBVSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwIFwKKyAg
ICBVSVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVj
b2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCmluZGV4IDgyZGVh
NDdmNWY2YjljODQ3MTBiZWM2YjYwNzc0M2NmZmY4MjBhM2IuLjM3M2I3ZGZiYjYyNmNkZGY0OTM5
ODE0NzcxNmE3YmUwNTBmNjZlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9X
S1ZpZXcuaApAQCAtMjAsOSArMjAsOCBAQAogI2lmbmRlZiBXS1ZpZXdfaAogI2RlZmluZSBXS1Zp
ZXdfaAogCi0jaW5jbHVkZSA8V2ViS2l0Mi9xZGVza3RvcHdlYnZpZXcuaD4KLSNpbmNsdWRlIDxX
ZWJLaXQyL3F0b3VjaHdlYnZpZXcuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL3F0b3VjaHdlYnBhZ2Uu
aD4KKyNpbmNsdWRlIDxXZWJLaXQyL3FxdWlja3dlYnBhZ2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQy
L3FxdWlja3dlYnZpZXcuaD4KICNpbmNsdWRlIDxXZWJLaXQyL3F3ZWJkb3dubG9hZGl0ZW0uaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL3F3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oPgogI2luY2x1ZGUg
PFdlYktpdDIvcXdlYnByZWZlcmVuY2VzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FiYXNld2Vidmlldy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFlNzA3ZmY4MDQwZDI4M2M0M2JiYzQyMjg1ZTk4MDU0ZDY0MmUzNDcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xYmFzZXdlYnZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJxYmFzZXdl
YnZpZXcuaCIKLQotI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAicWJhc2V3
ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlICJxd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCIKLQotUUJh
c2VXZWJWaWV3UHJpdmF0ZTo6UUJhc2VXZWJWaWV3UHJpdmF0ZSgpCi0gICAgOiBxX3B0cigwKQot
ICAgICwgbmF2aWdhdGlvbkNvbnRyb2xsZXIoMCkKLXsKLX0KLQotdm9pZCBRQmFzZVdlYlZpZXdQ
cml2YXRlOjpzZXRQYWdlUHJveHkoUXRXZWJQYWdlUHJveHkqIHBhZ2VQcm94eSkKLXsKLSAgICB0
aGlzLT5wYWdlUHJveHkucmVzZXQocGFnZVByb3h5KTsKLSAgICBRT2JqZWN0Ojpjb25uZWN0KHBh
Z2VQcm94eSwgU0lHTkFMKHJlY2VpdmVkTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChRVmFy
aWFudE1hcCkpLCBxX3B0ciwgU0lHTkFMKG1lc3NhZ2VSZWNlaXZlZChRVmFyaWFudE1hcCkpKTsK
LX0KLQotUUJhc2VXZWJWaWV3OjpRQmFzZVdlYlZpZXcoUUJhc2VXZWJWaWV3UHJpdmF0ZSAmZGQs
IFFRdWlja0l0ZW0gKnBhcmVudCkKLSAgICA6IFFRdWlja1BhaW50ZWRJdGVtKHBhcmVudCkKLSAg
ICAsIGRfcHRyKCZkZCkKLXsKLSAgICBkX3B0ci0+cV9wdHIgPSB0aGlzOwotfQotCi1RQmFzZVdl
YlZpZXc6On5RQmFzZVdlYlZpZXcoKQotewotfQotCi12b2lkIFFCYXNlV2ViVmlldzo6bG9hZChj
b25zdCBRVXJsJiB1cmwpCi17Ci0gICAgUV9EKFFCYXNlV2ViVmlldyk7Ci0gICAgZC0+cGFnZVBy
b3h5LT5sb2FkKHVybCk7Ci19Ci0KLXZvaWQgUUJhc2VXZWJWaWV3Ojpwb3N0TWVzc2FnZShjb25z
dCBRU3RyaW5nJiBtZXNzYWdlKQotewotICAgIFFfRChRQmFzZVdlYlZpZXcpOwotICAgIGQtPnBh
Z2VQcm94eS0+cG9zdE1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KG1lc3NhZ2UpOwotfQotCi1R
VXJsIFFCYXNlV2ViVmlldzo6dXJsKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUUJhc2VXZWJW
aWV3KTsKLSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT51cmwoKTsKLX0KLQotaW50IFFCYXNlV2Vi
Vmlldzo6bG9hZFByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUUJhc2VXZWJWaWV3
KTsKLSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT5sb2FkUHJvZ3Jlc3MoKTsKLX0KLQotUVN0cmlu
ZyBRQmFzZVdlYlZpZXc6OnRpdGxlKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUUJhc2VXZWJW
aWV3KTsKLSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT50aXRsZSgpOwotfQotCi1RV2ViTmF2aWdh
dGlvbkNvbnRyb2xsZXIqIFFCYXNlV2ViVmlldzo6bmF2aWdhdGlvbkNvbnRyb2xsZXIoKSBjb25z
dAotewotICAgIFFfRChjb25zdCBRQmFzZVdlYlZpZXcpOwotICAgIGlmICghZC0+bmF2aWdhdGlv
bkNvbnRyb2xsZXIpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UUJhc2VXZWJWaWV3UHJpdmF0ZSo+KGQp
LT5uYXZpZ2F0aW9uQ29udHJvbGxlciA9IG5ldyBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXIoZC0+
cGFnZVByb3h5LmRhdGEoKSk7Ci0gICAgcmV0dXJuIGQtPm5hdmlnYXRpb25Db250cm9sbGVyOwot
fQotCi1RV2ViUHJlZmVyZW5jZXMqIFFCYXNlV2ViVmlldzo6cHJlZmVyZW5jZXMoKSBjb25zdAot
ewotICAgIFFfRChjb25zdCBRQmFzZVdlYlZpZXcpOwotICAgIHJldHVybiBkLT5wYWdlUHJveHkt
PnByZWZlcmVuY2VzKCk7Ci19Ci0KLSNpbmNsdWRlICJtb2NfcWJhc2V3ZWJ2aWV3LmNwcCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWNmNTUwMTA4ZTMxMGI2MTgwZmI3NWI3M2Y0M2YxNjk2
NWE3YjJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxYmFzZXdlYnZp
ZXdfaAotI2RlZmluZSBxYmFzZXdlYnZpZXdfaAotCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5o
IgotI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXF1aWNrcGFpbnRlZGl0ZW0uaD4KLQotY2xhc3Mg
UUJhc2VXZWJWaWV3UHJpdmF0ZTsKLWNsYXNzIFFXZWJEb3dubG9hZEl0ZW07Ci1jbGFzcyBRV2Vi
TmF2aWdhdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBRV2ViUHJlZmVyZW5jZXM7Ci0KLVFUX0JFR0lO
X05BTUVTUEFDRQotY2xhc3MgUVBhaW50ZXI7Ci1jbGFzcyBRVXJsOwotUVRfRU5EX05BTUVTUEFD
RQotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRQmFzZVdlYlZpZXcgOiBwdWJsaWMgUVF1aWNrUGFp
bnRlZEl0ZW0gewotICAgIFFfT0JKRUNUCi0gICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJF
QUQgdGl0bGUgTk9USUZZIHRpdGxlQ2hhbmdlZCkKLSAgICBRX1BST1BFUlRZKFFVcmwgdXJsIFJF
QUQgdXJsIE5PVElGWSB1cmxDaGFuZ2VkKQotICAgIFFfUFJPUEVSVFkoaW50IGxvYWRQcm9ncmVz
cyBSRUFEIGxvYWRQcm9ncmVzcyBOT1RJRlkgbG9hZFByb2dyZXNzQ2hhbmdlZCkKLSAgICBRX1BS
T1BFUlRZKFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciogbmF2aWdhdGlvbiBSRUFEIG5hdmlnYXRp
b25Db250cm9sbGVyIENPTlNUQU5UIEZJTkFMKQotICAgIFFfUFJPUEVSVFkoUVdlYlByZWZlcmVu
Y2VzKiBwcmVmZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5UIEZJTkFMKQotICAgIFFf
RU5VTVMoTmF2aWdhdGlvblBvbGljeSkKLSAgICBRX0VOVU1TKEVycm9yVHlwZSkKLXB1YmxpYzoK
LSAgICBlbnVtIE5hdmlnYXRpb25Qb2xpY3kgewotICAgICAgICBVc2VQb2xpY3ksCi0gICAgICAg
IERvd25sb2FkUG9saWN5LAotICAgICAgICBJZ25vcmVQb2xpY3kKLSAgICB9OwotCi0gICAgZW51
bSBFcnJvclR5cGUgewotICAgICAgICBFbmdpbmVFcnJvciwKLSAgICAgICAgTmV0d29ya0Vycm9y
LAotICAgICAgICBIdHRwRXJyb3IsCi0gICAgICAgIERvd25sb2FkRXJyb3IKLSAgICB9OwotICAg
IHZpcnR1YWwgflFCYXNlV2ViVmlldygpOwotCi0gICAgLy8gRklYTUU6IFdlIGluaGVyaXQgZnJv
bSBRUXVpY2tQYWludGVkSXRlbSB1bnRpbCBRRGVza3RvcFdlYlZpZXcgd29ya3Mgb24gdG9wIG9m
IGEgcGxhaW4gUVF1aWNrSXRlbS4KLSAgICB2b2lkIHBhaW50KFFQYWludGVyKikgeyB9Ci0KLSAg
ICBRVXJsIHVybCgpIGNvbnN0OwotICAgIFFTdHJpbmcgdGl0bGUoKSBjb25zdDsKLSAgICBpbnQg
bG9hZFByb2dyZXNzKCkgY29uc3Q7Ci0KLSAgICBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXIqIG5h
dmlnYXRpb25Db250cm9sbGVyKCkgY29uc3Q7Ci0gICAgUVdlYlByZWZlcmVuY2VzKiBwcmVmZXJl
bmNlcygpIGNvbnN0OwotCi1wdWJsaWMgUV9TTE9UUzoKLSAgICAgdm9pZCBsb2FkKGNvbnN0IFFV
cmwmKTsKLSAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBRU3RyaW5nJik7Ci0KLVFfU0lHTkFM
UzoKLSAgICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJiB0aXRsZSk7Ci0gICAgdm9p
ZCBzdGF0dXNCYXJNZXNzYWdlQ2hhbmdlZChjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2
b2lkIGxvYWRTdGFydGVkKCk7Ci0gICAgdm9pZCBsb2FkU3VjY2VlZGVkKCk7Ci0gICAgdm9pZCBs
b2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlIGVycm9yVHlwZSwgaW50IGVycm9yQ29k
ZSwgY29uc3QgUVVybCYgdXJsKTsKLSAgICB2b2lkIGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50IHBy
b2dyZXNzKTsKLSAgICB2b2lkIHVybENoYW5nZWQoY29uc3QgUVVybCYgdXJsKTsKLSAgICB2b2lk
IG1lc3NhZ2VSZWNlaXZlZChjb25zdCBRVmFyaWFudE1hcCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBk
b3dubG9hZFJlcXVlc3RlZChRV2ViRG93bmxvYWRJdGVtKiBkb3dubG9hZEl0ZW0pOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgUUJhc2VXZWJWaWV3KFFCYXNlV2ViVmlld1ByaXZhdGUgJmRkLCBRUXVpY2tJ
dGVtICpwYXJlbnQgPSAwKTsKLSAgICAvLyBIaWRlcyBRT2JqZWN0OjpkX3B0ciBhbGxvd2luZyB1
cyB0byB1c2UgdGhlIGNvbnZlbmllbmNlIG1hY3Jvcy4KLSAgICBRU2NvcGVkUG9pbnRlcjxRQmFz
ZVdlYlZpZXdQcml2YXRlPiBkX3B0cjsKLXByaXZhdGU6Ci0gICAgUV9ERUNMQVJFX1BSSVZBVEUo
UUJhc2VXZWJWaWV3KQotICAgIGZyaWVuZCBjbGFzcyBRdFdlYlBhZ2VQcm94eTsKLX07Ci0KLSNl
bmRpZiAvKiBxYmFzZXdlYnZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xYmFzZXdlYnZpZXdfcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
M2Q1Y2ZjMzIxZjA2NzY3ODQ3ZmZhMTBlZmE5NTI5OTUzMTVmNDM5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcWJhc2V3ZWJ2aWV3X3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaWZuZGVmIHFiYXNld2Vidmlld19wX2gKLSNkZWZpbmUgcWJhc2V3
ZWJ2aWV3X3BfaAotCi0jaW5jbHVkZSAicWJhc2V3ZWJ2aWV3LmgiCi0KLWNsYXNzIFFXZWJOYXZp
Z2F0aW9uQ29udHJvbGxlcjsKLWNsYXNzIFF0V2ViUGFnZVByb3h5OwotCi1jbGFzcyBRQmFzZVdl
YlZpZXdQcml2YXRlIHsKLSAgICBRX0RFQ0xBUkVfUFVCTElDKFFCYXNlV2ViVmlldykKLXB1Ymxp
YzoKLSAgICBRQmFzZVdlYlZpZXdQcml2YXRlKCk7Ci0gICAgdmlydHVhbCB+UUJhc2VXZWJWaWV3
UHJpdmF0ZSgpIHsgfQotICAgIHZvaWQgc2V0UGFnZVByb3h5KFF0V2ViUGFnZVByb3h5Kik7Ci0g
ICAgUUJhc2VXZWJWaWV3KiBxX3B0cjsKLSAgICBRU2NvcGVkUG9pbnRlcjxRdFdlYlBhZ2VQcm94
eT4gcGFnZVByb3h5OwotCi0gICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZpZ2F0aW9u
Q29udHJvbGxlcjsKLX07Ci0KLSNlbmRpZiAvKiBxYmFzZXdlYnZpZXdfcF9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MWRlY2U3NTRhZjgwNTViZmY1NWEyODJiNmM0
NDM0N2Y2MmUzZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3LmgiCi0KLSNpbmNsdWRlICJR
dFdlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKLSNpbmNsdWRlICJVdGls
c1F0LmgiCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlICJxd2ViZG93
bmxvYWRpdGVtLmgiCi0jaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKLSNpbmNsdWRlIDxR
RmlsZURpYWxvZz4KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWVuZ2luZS5o
PgotI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXF1aWNrY2FudmFzLmg+Ci0jaW5jbHVkZSA8UXRE
ZWNsYXJhdGl2ZS9xcXVpY2t2aWV3Lmg+Ci0jaW5jbHVkZSA8UXRHdWkvUUN1cnNvcj4KLSNpbmNs
dWRlIDxRdEd1aS9RRGVza3RvcFNlcnZpY2VzPgotI2luY2x1ZGUgPFF0R3VpL1FEcmFnPgotI2lu
Y2x1ZGUgPFF0R3VpL1FGb2N1c0V2ZW50PgotI2luY2x1ZGUgPFF0R3VpL1FHdWlBcHBsaWNhdGlv
bj4KLSNpbmNsdWRlIDxRdEd1aS9RSG92ZXJFdmVudD4KLSNpbmNsdWRlIDxRdEd1aS9RSW5wdXRN
ZXRob2RFdmVudD4KLSNpbmNsdWRlIDxRdEd1aS9RS2V5RXZlbnQ+Ci0jaW5jbHVkZSA8UXRHdWkv
UVRvdWNoRXZlbnQ+Ci0jaW5jbHVkZSA8UXRHdWkvUVdoZWVsRXZlbnQ+Ci0jaW5jbHVkZSA8UXRX
aWRnZXRzL1FJbnB1dERpYWxvZz4KLSNpbmNsdWRlIDxRdFdpZGdldHMvUU1lc3NhZ2VCb3g+Ci0j
aW5jbHVkZSA8V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oPgotCi1RRGVza3RvcFdlYlZpZXdQ
cml2YXRlOjpRRGVza3RvcFdlYlZpZXdQcml2YXRlKCkKLSAgICA6IGlzQ3Jhc2hlZChmYWxzZSkK
LXsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjplbmFibGVNb3VzZUV2ZW50cygp
Ci17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgcS0+c2V0QWNjZXB0ZWRNb3VzZUJ1
dHRvbnMoUXQ6Ok1vdXNlQnV0dG9uTWFzayk7Ci0gICAgcS0+c2V0QWNjZXB0SG92ZXJFdmVudHMo
dHJ1ZSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlzYWJsZU1vdXNlRXZl
bnRzKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBxLT5zZXRBY2NlcHRlZE1v
dXNlQnV0dG9ucyhRdDo6Tm9CdXR0b24pOwotICAgIHEtPnNldEFjY2VwdEhvdmVyRXZlbnRzKGZh
bHNlKTsKLX0KLQotUURlc2t0b3BXZWJWaWV3KiBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjp3ZWJW
aWV3KCkKLXsKLSAgICByZXR1cm4gcV9mdW5jKCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3
UHJpdmF0ZTo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYgaW52YWxpZGF0ZWRBcmVh
KQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIHEtPnVwZGF0ZShpbnZhbGlkYXRl
ZEFyZWEpOwotfQotCi1RU2l6ZSBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkcmF3aW5nQXJlYVNp
emUoKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIHJldHVybiBRU2l6ZShxLT53
aWR0aCgpLCBxLT5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6
Y29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFFTaXplJikKLXsKLX0KLQotYm9vbCBRRGVza3RvcFdl
YlZpZXdQcml2YXRlOjppc0FjdGl2ZSgpCi17Ci0gICAgLy8gRklYTUU6IFRoZSBzY2VuZSBncmFw
aCBkaWQgbm90IGhhdmUgdGhlIGNvbmNlcHQgb2YgYmVpbmcgYWN0aXZlIG9yIG5vdCB3aGVuIHRo
aXMgd2FzIHdyaXR0ZW4uCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUURlc2t0b3BXZWJW
aWV3UHJpdmF0ZTo6aGFzRm9jdXMoKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAg
IHJldHVybiBxLT5oYXNGb2N1cygpOwotfQotCi1ib29sIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6
OmlzVmlzaWJsZSgpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgcmV0dXJuIHEt
PmlzVmlzaWJsZSgpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OnN0YXJ0RHJh
ZyhRdDo6RHJvcEFjdGlvbnMgc3VwcG9ydGVkRHJvcEFjdGlvbnMsIGNvbnN0IFFJbWFnZSYgZHJh
Z0ltYWdlLCBRTWltZURhdGEqIGRhdGEsIFFQb2ludCogY2xpZW50UG9zaXRpb24sIFFQb2ludCog
Z2xvYmFsUG9zaXRpb24sIFF0OjpEcm9wQWN0aW9uKiBkcm9wQWN0aW9uKQotewotICAgIFFfUShR
RGVza3RvcFdlYlZpZXcpOwotICAgIFFXaW5kb3cqIHdpbmRvdyA9IHEtPmNhbnZhcygpOwotICAg
IGlmICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBRRHJhZyogZHJhZyA9IG5ldyBR
RHJhZyh3aW5kb3cpOwotICAgIGRyYWctPnNldFBpeG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UoZHJh
Z0ltYWdlKSk7Ci0gICAgZHJhZy0+c2V0TWltZURhdGEoZGF0YSk7Ci0gICAgKmRyb3BBY3Rpb24g
PSBkcmFnLT5leGVjKHN1cHBvcnRlZERyb3BBY3Rpb25zKTsKLSAgICAqZ2xvYmFsUG9zaXRpb24g
PSBRQ3Vyc29yOjpwb3MoKTsKLSAgICAqY2xpZW50UG9zaXRpb24gPSB3aW5kb3ctPm1hcEZyb21H
bG9iYWwoKmdsb2JhbFBvc2l0aW9uKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRl
OjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1
bWVudHMmKQotewotICAgIC8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IHVzZWQgYnkgUVRvdWNoV2Vi
Vmlldy4KLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRGaW5kWm9vbWFibGVB
cmVhKGNvbnN0IFFQb2ludCYsIGNvbnN0IFFSZWN0JikKLXsKLSAgICAvLyBUaGlzIGZlYXR1cmUg
aXMgb25seSB1c2VkIGJ5IFFUb3VjaFdlYlZpZXcuCi19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3
UHJpdmF0ZTo6ZGlkQ2hhbmdlVXJsKGNvbnN0IFFVcmwmIHVybCkKLXsKLSAgICBRX1EoUURlc2t0
b3BXZWJWaWV3KTsKLSAgICBlbWl0IHEtPnVybENoYW5nZWQodXJsKTsKLX0KLQotdm9pZCBRRGVz
a3RvcFdlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VUaXRsZShjb25zdCBRU3RyaW5nJiBuZXdUaXRs
ZSkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBlbWl0IHEtPnRpdGxlQ2hhbmdl
ZChuZXdUaXRsZSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdl
VG9vbFRpcChjb25zdCBRU3RyaW5nJiBuZXdUb29sVGlwKQotewotICAgIC8vIEZJWE1FOiBBZGQg
YSBwcm9wZXIgaW1wbGVtZW50YXRpb24gd2hlbiBRdCA1IHN1cHBvcnRzIHRvb2x0aXAuCi19Ci0K
LXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlU3RhdHVzVGV4dChjb25zdCBR
U3RyaW5nJiBuZXdNZXNzYWdlKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIGVt
aXQgcS0+c3RhdHVzQmFyTWVzc2FnZUNoYW5nZWQobmV3TWVzc2FnZSk7Ci19Ci0KLXZvaWQgUURl
c2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlQ3Vyc29yKGNvbnN0IFFDdXJzb3ImIG5ld0N1
cnNvcikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBmaXggdW50aWwgd2Ug
Z2V0IGN1cnNvciBzdXBwb3J0IGluIFFNTCBpdGVtcy4KLSAgICBRR3VpQXBwbGljYXRpb246OnNl
dE92ZXJyaWRlQ3Vyc29yKG5ld0N1cnNvcik7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJp
dmF0ZTo6bG9hZERpZEJlZ2luKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBl
bWl0IHEtPmxvYWRTdGFydGVkKCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6
bG9hZERpZENvbW1pdCgpCi17Ci0gICAgLy8gTm90IHVzZWQgZm9yIFFEZXNrdG9wV2ViVmlldy4K
LX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpsb2FkRGlkU3VjY2VlZCgpCi17Ci0g
ICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgZW1pdCBxLT5sb2FkU3VjY2VlZGVkKCk7Ci19
Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6bG9hZERpZEZhaWwoY29uc3QgUXRXZWJF
cnJvciYgZXJyb3IpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgZW1pdCBxLT5s
b2FkRmFpbGVkKHN0YXRpY19jYXN0PFFEZXNrdG9wV2ViVmlldzo6RXJyb3JUeXBlPihlcnJvci50
eXBlKCkpLCBlcnJvci5lcnJvckNvZGUoKSwgZXJyb3IudXJsKCkpOwotfQotCi12b2lkIFFEZXNr
dG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZUxvYWRQcm9ncmVzcyhpbnQgcGVyY2VudGFnZUxv
YWRlZCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBlbWl0IHEtPmxvYWRQcm9n
cmVzc0NoYW5nZWQocGVyY2VudGFnZUxvYWRlZCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3
UHJpdmF0ZTo6c2hvd0NvbnRleHRNZW51KFFTaGFyZWRQb2ludGVyPFFNZW51PiBtZW51KQotewot
ICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIC8vIFJlbW92ZSB0aGUgYWN0aXZlIG1lbnUg
aW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0d2ljZS4KLSAgICBpZiAoYWN0aXZlTWVu
dSkKLSAgICAgICAgYWN0aXZlTWVudS0+aGlkZSgpOwotCi0gICAgaWYgKG1lbnUtPmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVdpbmRvdyogd2luZG93ID0gcS0+Y2FudmFzKCk7
Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFjdGl2ZU1lbnUgPSBt
ZW51OwotCi0gICAgYWN0aXZlTWVudS0+d2luZG93KCktPndpbklkKCk7IC8vIEVuc3VyZSB0aGF0
IHRoZSBtZW51IGhhcyBhIHdpbmRvdwotICAgIFFfQVNTRVJUKGFjdGl2ZU1lbnUtPndpbmRvdygp
LT53aW5kb3dIYW5kbGUoKSk7Ci0gICAgYWN0aXZlTWVudS0+d2luZG93KCktPndpbmRvd0hhbmRs
ZSgpLT5zZXRUcmFuc2llbnRQYXJlbnQod2luZG93KTsKLQotICAgIFFQb2ludCBtZW51UG9zaXRp
b25JblNjZW5lID0gcS0+bWFwVG9TY2VuZShtZW51LT5wb3MoKSkudG9Qb2ludCgpOwotICAgIG1l
bnUtPmV4ZWMod2luZG93LT5tYXBUb0dsb2JhbChtZW51UG9zaXRpb25JblNjZW5lKSk7Ci0gICAg
Ly8gVGhlIGxhc3QgZnVuY3Rpb24gdG8gZ2V0IG91dCBvZiBleGVjKCkgY2xlYXIgdGhlIGxvY2Fs
IGNvcHkuCi0gICAgaWYgKGFjdGl2ZU1lbnUgPT0gbWVudSkKLSAgICAgICAgYWN0aXZlTWVudS5j
bGVhcigpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmhpZGVDb250ZXh0TWVu
dSgpCi17Ci0gICAgaWYgKGFjdGl2ZU1lbnUpCi0gICAgICAgIGFjdGl2ZU1lbnUtPmhpZGUoKTsK
LX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0QWxlcnQoY29u
c3QgUVN0cmluZyYgYWxlcnRUZXh0KQotewotI2lmbmRlZiBRVF9OT19NRVNTQUdFQk9YCi0gICAg
UV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgY29uc3QgUVN0cmluZyB0aXRsZSA9IFFPYmplY3Q6
OnRyKCJKYXZhU2NyaXB0IEFsZXJ0IC0gJTEiKS5hcmcocS0+dXJsKCkuaG9zdCgpKTsKLSAgICBk
aXNhYmxlTW91c2VFdmVudHMoKTsKLSAgICBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0
bGUsIGVzY2FwZUh0bWwoYWxlcnRUZXh0KSwgUU1lc3NhZ2VCb3g6Ok9rKTsKLSAgICBlbmFibGVN
b3VzZUV2ZW50cygpOwotI2Vsc2UKLSAgICBRX1VOVVNFRChhbGVydFRleHQpOwotI2VuZGlmCi19
Ci0KLWJvb2wgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oY29u
c3QgUVN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0jaWZuZGVm
IFFUX05PX01FU1NBR0VCT1gKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBjb25zdCBR
U3RyaW5nIHRpdGxlID0gUU9iamVjdDo6dHIoIkphdmFTY3JpcHQgQ29uZmlybSAtICUxIikuYXJn
KHEtPnVybCgpLmhvc3QoKSk7Ci0gICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7Ci0gICAgcmVzdWx0
ID0gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0bGUs
IGVzY2FwZUh0bWwobWVzc2FnZSksIFFNZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7
Ci0gICAgZW5hYmxlTW91c2VFdmVudHMoKTsKLSNlbHNlCi0gICAgUV9VTlVTRUQobWVzc2FnZSk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1RU3RyaW5nIFFEZXNrdG9wV2ViVmll
d1ByaXZhdGU6OnJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmluZyYgbWVzc2FnZSwgY29u
c3QgUVN0cmluZyYgZGVmYXVsdFZhbHVlLCBib29sJiBvaykKLXsKLSNpZm5kZWYgUVRfTk9fSU5Q
VVRESUFMT0cKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBjb25zdCBRU3RyaW5nIHRp
dGxlID0gUU9iamVjdDo6dHIoIkphdmFTY3JpcHQgUHJvbXB0IC0gJTEiKS5hcmcocS0+dXJsKCku
aG9zdCgpKTsKLSAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKLSAgICBRU3RyaW5nIHJlc3VsdCA9
IFFJbnB1dERpYWxvZzo6Z2V0VGV4dCgwLCB0aXRsZSwgZXNjYXBlSHRtbChtZXNzYWdlKSwgUUxp
bmVFZGl0OjpOb3JtYWwsIGRlZmF1bHRWYWx1ZSwgJm9rKTsKLSAgICBlbmFibGVNb3VzZUV2ZW50
cygpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIFFfVU5VU0VEKG1lc3NhZ2UpOwot
ICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0jZW5kaWYKLX0KLQotUURlc2t0b3BXZWJWaWV3OjpR
RGVza3RvcFdlYlZpZXcoUVF1aWNrSXRlbSogcGFyZW50KQotICAgIDogUUJhc2VXZWJWaWV3KCoo
bmV3IFFEZXNrdG9wV2ViVmlld1ByaXZhdGUpLCBwYXJlbnQpCi17Ci0gICAgUV9EKFFEZXNrdG9w
V2ViVmlldyk7Ci0gICAgZC0+aW5pdCgpOwotfQotCi1RRGVza3RvcFdlYlZpZXc6OlFEZXNrdG9w
V2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3Vw
UmVmLCBRUXVpY2tJdGVtKiBwYXJlbnQpCi0gICAgOiBRQmFzZVdlYlZpZXcoKihuZXcgUURlc2t0
b3BXZWJWaWV3UHJpdmF0ZSksIHBhcmVudCkKLXsKLSAgICBRX0QoUURlc2t0b3BXZWJWaWV3KTsK
LSAgICBkLT5pbml0KGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7Ci19Ci0KLXZvaWQgUURlc2t0
b3BXZWJWaWV3UHJpdmF0ZTo6aW5pdChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmKQotewotICAgIHNldFBhZ2VQcm94eShuZXcgUXRXZWJQYWdlUHJv
eHkodGhpcywgMCwgdGhpcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSk7Ci0gICAgUVdlYlBy
ZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0KHBhZ2VQcm94eS0+cHJlZmVyZW5jZXMoKSktPnNldEF0dHJp
YnV0ZShRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZCwgZmFsc2UpOwotICAgIHBhZ2VQcm94eS0+aW5pdCgpOwotICAgIGVuYWJsZU1vdXNlRXZlbnRz
KCk7Ci19Ci0KLVFEZXNrdG9wV2ViVmlldzo6flFEZXNrdG9wV2ViVmlldygpCi17Ci19Ci0KLXN0
YXRpYyB2b2lkIHBhaW50Q3Jhc2hlZFBhZ2UoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0
RiYgcmVjdCkKLXsKLSAgICBwYWludGVyLT5maWxsUmVjdChyZWN0LCBRdDo6Z3JheSk7Ci0gICAg
cGFpbnRlci0+ZHJhd1RleHQocmVjdCwgUXQ6OkFsaWduQ2VudGVyLCBRTGF0aW4xU3RyaW5nKCI6
KCIpKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50
KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BX
ZWJWaWV3OjprZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5l
dmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3OjppbnB1dE1ldGhvZEV2ZW50
KFFJbnB1dE1ldGhvZEV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19
Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3Ojpmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqIGV2ZW50
KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6
OmZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2
ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6Om1vdXNlUHJlc3NFdmVudChRTW91c2VF
dmVudCogZXZlbnQpCi17Ci0gICAgZm9yY2VBY3RpdmVGb2N1cygpOwotICAgIHRoaXMtPmV2ZW50
KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6Om1vdXNlTW92ZUV2ZW50KFFNb3Vz
ZUV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURl
c2t0b3BXZWJWaWV3Ojptb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCogZXZlbnQpCi17Ci0g
ICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6bW91c2VE
b3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChl
dmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3Ojp3aGVlbEV2ZW50KFFXaGVlbEV2ZW50
KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BX
ZWJWaWV3Ojpob3ZlckVudGVyRXZlbnQoUUhvdmVyRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMt
PmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmhvdmVyTW92ZUV2ZW50
KFFIb3ZlckV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZv
aWQgUURlc2t0b3BXZWJWaWV3Ojpob3ZlckxlYXZlRXZlbnQoUUhvdmVyRXZlbnQqIGV2ZW50KQot
ewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmRy
YWdNb3ZlRXZlbnQoUURyYWdNb3ZlRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2
ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmRyYWdFbnRlckV2ZW50KFFEcmFnRW50
ZXJFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFE
ZXNrdG9wV2ViVmlldzo6ZHJhZ0xlYXZlRXZlbnQoUURyYWdMZWF2ZUV2ZW50KiBldmVudCkKLXsK
LSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3Ojpkcm9w
RXZlbnQoUURyb3BFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQot
Ci12b2lkIFFEZXNrdG9wV2ViVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3
R2VvbWV0cnksIGNvbnN0IFFSZWN0RiYgb2xkR2VvbWV0cnkpCi17Ci0gICAgUV9EKFFEZXNrdG9w
V2ViVmlldyk7Ci0gICAgUVF1aWNrUGFpbnRlZEl0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9t
ZXRyeSwgb2xkR2VvbWV0cnkpOwotICAgIGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2Vv
bWV0cnkuc2l6ZSgpKQotICAgICAgICBkLT5wYWdlUHJveHktPnNldERyYXdpbmdBcmVhU2l6ZShu
ZXdHZW9tZXRyeS5zaXplKCkudG9TaXplKCkpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6
cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIpCi17Ci0gICAgUV9EKFFEZXNrdG9wV2ViVmlldyk7Ci0g
ICAgY29uc3QgUVJlY3RGIHJlY3QgPSBib3VuZGluZ1JlY3QoKTsKLSAgICBpZiAoZC0+aXNDcmFz
aGVkKSB7Ci0gICAgICAgIHBhaW50Q3Jhc2hlZFBhZ2UocGFpbnRlciwgcmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBkLT5wYWdlUHJveHktPnBhaW50KHBhaW50ZXIsIHJlY3Qu
dG9BbGlnbmVkUmVjdCgpKTsKLX0KLQotYm9vbCBRRGVza3RvcFdlYlZpZXc6OmV2ZW50KFFFdmVu
dCogZXYpCi17Ci0gICAgUV9EKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgaWYgKGQtPnBhZ2VQcm94
eS0+aGFuZGxlRXZlbnQoZXYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoZXYtPnR5
cGUoKSA9PSBRRXZlbnQ6OklucHV0TWV0aG9kKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRo
aXMgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGFuIGVuZGxlc3MgbG9vcCBpbiBjb25uZWN0aW9uIHdp
dGggUVF1aWNrSXRlbTo6ZXZlbnQoKS4KLSAgICByZXR1cm4gUVF1aWNrSXRlbTo6ZXZlbnQoZXYp
OwotfQotCi1XS1BhZ2VSZWYgUURlc2t0b3BXZWJWaWV3OjpwYWdlUmVmKCkgY29uc3QKLXsKLSAg
ICBRX0QoY29uc3QgUURlc2t0b3BXZWJWaWV3KTsKLSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT5w
YWdlUmVmKCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6cHJvY2Vzc0RpZENy
YXNoKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBpc0NyYXNoZWQgPSB0cnVl
OwotICAgIHEtPnVwZGF0ZSgpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRp
ZFJlbGF1bmNoUHJvY2VzcygpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgaXND
cmFzaGVkID0gZmFsc2U7Ci0gICAgcS0+dXBkYXRlKCk7Ci19Ci0KLVFKU0VuZ2luZSogUURlc2t0
b3BXZWJWaWV3UHJpdmF0ZTo6ZW5naW5lKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsK
LSAgICBRUXVpY2tWaWV3KiB2aWV3ID0gcW9iamVjdF9jYXN0PFFRdWlja1ZpZXcqPihxLT5jYW52
YXMoKSk7Ci0gICAgaWYgKHZpZXcpCi0gICAgICAgIHJldHVybiB2aWV3LT5lbmdpbmUoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpjaG9vc2VGaWxl
cyhXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBjb25zdCBRU3RyaW5n
TGlzdCYgc2VsZWN0ZWRGaWxlTmFtZXMsIFF0Vmlld0ludGVyZmFjZTo6RmlsZUNob29zZXJUeXBl
IHR5cGUpCi17Ci0jaWZuZGVmIFFUX05PX0ZJTEVESUFMT0cKLSAgICBRX1EoUURlc2t0b3BXZWJW
aWV3KTsKLSAgICBvcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciA9IGxpc3RlbmVyUmVmOwotCi0gICAg
Ly8gUXQgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBmaWxlcyBzdWdnZXN0aW9uLCBzbyB3ZSBn
ZXQganVzdCB0aGUgZmlyc3Qgc3VnZ2VzdGlvbi4KLSAgICBRU3RyaW5nIHNlbGVjdGVkRmlsZU5h
bWU7Ci0gICAgaWYgKCFzZWxlY3RlZEZpbGVOYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHNlbGVj
dGVkRmlsZU5hbWUgPSBzZWxlY3RlZEZpbGVOYW1lcy5hdCgwKTsKLQotICAgIFFfQVNTRVJUKCFm
aWxlRGlhbG9nKTsKLQotICAgIFFXaW5kb3cqIHdpbmRvdyA9IHEtPmNhbnZhcygpOwotICAgIGlm
ICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmaWxlRGlhbG9nID0gbmV3IFFGaWxl
RGlhbG9nKDAsIFFTdHJpbmcoKSwgc2VsZWN0ZWRGaWxlTmFtZSk7Ci0gICAgZmlsZURpYWxvZy0+
d2luZG93KCktPndpbklkKCk7IC8vIEVuc3VyZSB0aGF0IHRoZSBkaWFsb2cgaGFzIGEgd2luZG93
Ci0gICAgUV9BU1NFUlQoZmlsZURpYWxvZy0+d2luZG93KCktPndpbmRvd0hhbmRsZSgpKTsKLSAg
ICBmaWxlRGlhbG9nLT53aW5kb3coKS0+d2luZG93SGFuZGxlKCktPnNldFRyYW5zaWVudFBhcmVu
dCh3aW5kb3cpOwotCi0gICAgZmlsZURpYWxvZy0+b3BlbihxX2Z1bmMoKSwgU0xPVChfcV9vbk9w
ZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKSkpOwotCi0gICAgcV9mdW5jKCktPmNvbm5lY3QoZmlsZURp
YWxvZywgU0lHTkFMKGZpbmlzaGVkKGludCkpLCBTTE9UKF9xX29uT3BlblBhbmVsRmluaXNoZWQo
aW50KSkpOwotI2VuZGlmCi19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6X3Ffb25P
cGVuUGFuZWxGaWxlc1NlbGVjdGVkKCkKLXsKLSAgICBjb25zdCBRU3RyaW5nTGlzdCBmaWxlTGlz
dCA9IGZpbGVEaWFsb2ctPnNlbGVjdGVkRmlsZXMoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEFQSU9i
amVjdD4gPiB3a0ZpbGVzKGZpbGVMaXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZmlsZUxpc3Quc2l6ZSgpOyArK2kpCi0gICAgICAgIHdrRmlsZXNbaV0gPSBXZWJV
Ukw6OmNyZWF0ZShRVXJsOjpmcm9tTG9jYWxGaWxlKGZpbGVMaXN0LmF0KGkpKS50b1N0cmluZygp
KTsKLQotICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDaG9vc2VGaWxlcyhvcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lciwgdG9BUEkoSW1tdXRhYmxlQXJyYXk6OmFkb3B0KHdrRmlsZXMpLmxlYWtS
ZWYoKSkpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6Ol9xX29uT3BlblBhbmVs
RmluaXNoZWQoaW50IHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0ID09IFFEaWFsb2c6OlJlamVj
dGVkKQotICAgICAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyQ2FuY2VsKG9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyKTsKLQotICAgIGZpbGVEaWFsb2ctPmRlbGV0ZUxhdGVyKCk7Ci0gICAgZmls
ZURpYWxvZyA9IDA7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkTW91c2VN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgUVVybCYgbGlua1VSTCwgY29uc3QgUVN0cmluZyYgbGlua1Rp
dGxlKQotewotICAgIGlmIChsaW5rVVJMID09IGxhc3RIb3ZlcmVkVVJMICYmIGxpbmtUaXRsZSA9
PSBsYXN0SG92ZXJlZFRpdGxlKQotICAgICAgICByZXR1cm47Ci0gICAgUV9RKFFEZXNrdG9wV2Vi
Vmlldyk7Ci0gICAgbGFzdEhvdmVyZWRVUkwgPSBsaW5rVVJMOwotICAgIGxhc3RIb3ZlcmVkVGl0
bGUgPSBsaW5rVGl0bGU7Ci0gICAgZW1pdCBxLT5saW5rSG92ZXJlZChsYXN0SG92ZXJlZFVSTCwg
bGFzdEhvdmVyZWRUaXRsZSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZG93
bmxvYWRSZXF1ZXN0ZWQoUVdlYkRvd25sb2FkSXRlbSogZG93bmxvYWRJdGVtKQotewotICAgIGlm
ICghZG93bmxvYWRJdGVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRX1EoUURlc2t0b3BXZWJW
aWV3KTsKLQotICAgIFFEZWNsYXJhdGl2ZUVuZ2luZTo6c2V0T2JqZWN0T3duZXJzaGlwKGRvd25s
b2FkSXRlbSwgUURlY2xhcmF0aXZlRW5naW5lOjpKYXZhU2NyaXB0T3duZXJzaGlwKTsKLSAgICBl
bWl0IHEtPmRvd25sb2FkUmVxdWVzdGVkKGRvd25sb2FkSXRlbSk7Ci19Ci0KLXN0YXRpYyBRdFBv
bGljeUludGVyZmFjZTo6UG9saWN5QWN0aW9uIHRvUG9saWN5QWN0aW9uKFFEZXNrdG9wV2ViVmll
dzo6TmF2aWdhdGlvblBvbGljeSBwb2xpY3kpCi17Ci0gICAgc3dpdGNoIChwb2xpY3kpIHsKLSAg
ICBjYXNlIFFEZXNrdG9wV2ViVmlldzo6VXNlUG9saWN5OgotICAgICAgICByZXR1cm4gUXRQb2xp
Y3lJbnRlcmZhY2U6OlVzZTsKLSAgICBjYXNlIFFEZXNrdG9wV2ViVmlldzo6RG93bmxvYWRQb2xp
Y3k6Ci0gICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6RG93bmxvYWQ7Ci0gICAgY2Fz
ZSBRRGVza3RvcFdlYlZpZXc6Oklnbm9yZVBvbGljeToKLSAgICAgICAgcmV0dXJuIFF0UG9saWN5
SW50ZXJmYWNlOjpJZ25vcmU7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6SWdub3JlOwotfQotCi1zdGF0aWMgYm9vbCBoYXNN
ZXRhTWV0aG9kKFFPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKLXsKLSAg
ICBpbnQgbWV0aG9kSW5kZXggPSBvYmplY3QtPm1ldGFPYmplY3QoKS0+aW5kZXhPZk1ldGhvZChR
TWV0YU9iamVjdDo6bm9ybWFsaXplZFNpZ25hdHVyZShtZXRob2ROYW1lKSk7Ci0gICAgcmV0dXJu
IG1ldGhvZEluZGV4ID49IDAgJiYgbWV0aG9kSW5kZXggPCBvYmplY3QtPm1ldGFPYmplY3QoKS0+
bWV0aG9kQ291bnQoKTsKLX0KLQotLyohCi0gICAgXHFtbG1ldGhvZCBOYXZpZ2F0aW9uUG9saWN5
IERlc2t0b3BXZWJWaWV3OjpuYXZpZ2F0aW9uUG9saWN5Rm9yVXJsKHVybCwgYnV0dG9uLCBtb2Rp
ZmllcnMpCi0KLSAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIHVz
ZXIgb2YgRGVza3RvcFdlYlZpZXcgZWxlbWVudC4KLQotICAgIEl0IHdpbGwgYmUgY2FsbGVkIHRv
IGRlY2lkZSB0aGUgcG9saWN5IGZvciBhIG5hdmlnYXRpb246IHdoZXRoZXIgdGhlIFdlYlZpZXcg
c2hvdWxkIGlnbm9yZSB0aGUgbmF2aWdhdGlvbiwKLSAgICBjb250aW51ZSBpdCBvciBzdGFydCBh
IGRvd25sb2FkLiBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSBwb2xpY2llcyBp
biB0aGUgTmF2aWdhdGlvblBvbGljeSBlbnVtZXJhdGlvbi4KLSovCi1RdFBvbGljeUludGVyZmFj
ZTo6UG9saWN5QWN0aW9uIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6Om5hdmlnYXRpb25Qb2xpY3lG
b3JVUkwoY29uc3QgUVVybCYgdXJsLCBRdDo6TW91c2VCdXR0b24gYnV0dG9uLCBRdDo6S2V5Ym9h
cmRNb2RpZmllcnMgbW9kaWZpZXJzKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlIGludm9rZU1ldGhvZCgpIHdh
cm5zIGlmIHRoZSBtZXRob2QgZG9lc24ndCBleGlzdCBmb3IgdGhlIG9iamVjdC4KLSAgICBpZiAo
IWhhc01ldGFNZXRob2QocSwgIm5hdmlnYXRpb25Qb2xpY3lGb3JVcmwoUVZhcmlhbnQsUVZhcmlh
bnQsUVZhcmlhbnQpIikpCi0gICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6VXNlOwot
Ci0gICAgUVZhcmlhbnQgcmV0OwotICAgIGlmIChRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKHEs
ICJuYXZpZ2F0aW9uUG9saWN5Rm9yVXJsIiwgUV9SRVRVUk5fQVJHKFFWYXJpYW50LCByZXQpLCBR
X0FSRyhRVmFyaWFudCwgdXJsKSwgUV9BUkcoUVZhcmlhbnQsIGJ1dHRvbiksIFFfQVJHKFFWYXJp
YW50LCBRVmFyaWFudChtb2RpZmllcnMpKSkpCi0gICAgICAgIHJldHVybiB0b1BvbGljeUFjdGlv
bihzdGF0aWNfY2FzdDxRRGVza3RvcFdlYlZpZXc6Ok5hdmlnYXRpb25Qb2xpY3k+KHJldC50b0lu
dCgpKSk7Ci0gICAgcmV0dXJuIFF0UG9saWN5SW50ZXJmYWNlOjpVc2U7Ci19Ci0KLSNpbmNsdWRl
ICJtb2NfcWRlc2t0b3B3ZWJ2aWV3LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkMDgzZmE3ZjMzMzFjYjBjYWQwZGMyNGIzY2JjMDBhZWZkNjQzNmEyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxZGVza3RvcHdlYnZpZXdfaAotI2RlZmluZSBx
ZGVza3RvcHdlYnZpZXdfaAotCi0jaW5jbHVkZSAicWJhc2V3ZWJ2aWV3LmgiCi0jaW5jbHVkZSAi
cXdlYmtpdGdsb2JhbC5oIgotCi1jbGFzcyBRRGVza3RvcFdlYlZpZXdQcml2YXRlOwotCi1RVF9C
RUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFGb2N1c0V2ZW50OwotY2xhc3MgUU1vdXNlRXZlbnQ7Ci1j
bGFzcyBRSG92ZXJFdmVudDsKLWNsYXNzIFFJbnB1dE1ldGhvZEV2ZW50OwotY2xhc3MgUUtleUV2
ZW50OwotY2xhc3MgUVBhaW50ZXI7Ci1jbGFzcyBRUmVjdEY7Ci1jbGFzcyBRRHJhZ0VudGVyRXZl
bnQ7Ci1jbGFzcyBRRHJhZ01vdmVFdmVudDsKLWNsYXNzIFFEcmFnTGVhdmVFdmVudDsKLWNsYXNz
IFFEcm9wRXZlbnQ7Ci1jbGFzcyBRVG91Y2hFdmVudDsKLWNsYXNzIFFXaGVlbEV2ZW50OwotUVRf
RU5EX05BTUVTUEFDRQotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0NvbnRleHQqIFdL
Q29udGV4dFJlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZUdyb3VwKiBXS1Bh
Z2VHcm91cFJlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZSogV0tQYWdlUmVm
OwotCi1uYW1lc3BhY2UgV1RSIHsKLSAgICBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7Ci19Ci0KLWNs
YXNzIFFXRUJLSVRfRVhQT1JUIFFEZXNrdG9wV2ViVmlldyA6IHB1YmxpYyBRQmFzZVdlYlZpZXcg
ewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUURlc2t0b3BXZWJWaWV3KFFRdWlja0l0ZW0q
IHBhcmVudCA9IDApOwotICAgIHZpcnR1YWwgflFEZXNrdG9wV2ViVmlldygpOwotCi1RX1NJR05B
TFM6Ci0gICAgdm9pZCBsaW5rSG92ZXJlZChjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcm
IHRpdGxlKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFL
ZXlFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIGlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50Kik7Ci0gICAgdmlydHVh
bCB2b2lkIGZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91
c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICopOwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVF
dmVudChRTW91c2VFdmVudCAqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW91c2VSZWxlYXNlRXZlbnQo
UU1vdXNlRXZlbnQgKik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChR
TW91c2VFdmVudCAqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2hlZWxFdmVudChRV2hlZWxFdmVudCop
OwotICAgIHZpcnR1YWwgdm9pZCBob3ZlckVudGVyRXZlbnQoUUhvdmVyRXZlbnQqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgaG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgaG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYWdN
b3ZlRXZlbnQoUURyYWdNb3ZlRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhZ0VudGVyRXZl
bnQoUURyYWdFbnRlckV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYWdMZWF2ZUV2ZW50KFFE
cmFnTGVhdmVFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBkcm9wRXZlbnQoUURyb3BFdmVudCop
OwotCi0gICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmLCBjb25z
dCBRUmVjdEYmKTsKLSAgICB2b2lkIHBhaW50KFFQYWludGVyKik7Ci0gICAgdmlydHVhbCBib29s
IGV2ZW50KFFFdmVudCopOwotCi1wcml2YXRlOgotICAgIFFEZXNrdG9wV2ViVmlldyhXS0NvbnRl
eHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKLSAgICBXS1Bh
Z2VSZWYgcGFnZVJlZigpIGNvbnN0OwotICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lk
IF9xX29uT3BlblBhbmVsRmlsZXNTZWxlY3RlZCgpKTsKLSAgICBRX1BSSVZBVEVfU0xPVChkX2Z1
bmMoKSwgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCByZXN1bHQpKTsKLQotICAgIGZy
aWVuZCBjbGFzcyBXVFI6OlBsYXRmb3JtV2ViVmlldzsKLSAgICBRX0RFQ0xBUkVfUFJJVkFURShR
RGVza3RvcFdlYlZpZXcpCi19OwotCi1RTUxfREVDTEFSRV9UWVBFKFFEZXNrdG9wV2ViVmlldykK
LVFfREVDTEFSRV9NRVRBVFlQRShRRGVza3RvcFdlYlZpZXc6Ok5hdmlnYXRpb25Qb2xpY3kpCi0K
LSNlbmRpZiAvKiBxZGVza3RvcHdlYnZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXdfcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5MzI1ZTBiZDM0Mzg0NGQwYzY2YjkyNzBlYjk5OWZiMDhlY2ZhN2M3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3X3AuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxZGVza3RvcHdlYnZpZXdf
cF9oCi0jZGVmaW5lIHFkZXNrdG9wd2Vidmlld19wX2gKLQotI2luY2x1ZGUgIlF0UG9saWN5SW50
ZXJmYWNlLmgiCi0jaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAicWJhc2V3
ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXcuaCIKLQotY2xhc3MgUUZpbGVE
aWFsb2c7Ci0KLWNsYXNzIFFEZXNrdG9wV2ViVmlld1ByaXZhdGUgOiBwdWJsaWMgUUJhc2VXZWJW
aWV3UHJpdmF0ZSwgcHVibGljIFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlLCBwdWJsaWMgV2ViS2l0
OjpRdFBvbGljeUludGVyZmFjZQotewotICAgIFFfREVDTEFSRV9QVUJMSUMoUURlc2t0b3BXZWJW
aWV3KQotcHVibGljOgotICAgIFFEZXNrdG9wV2ViVmlld1ByaXZhdGUoKTsKLSAgICB2b2lkIGlu
aXQoV0tDb250ZXh0UmVmID0gMCwgV0tQYWdlR3JvdXBSZWYgPSAwKTsKLQotICAgIHN0YXRpYyBR
RGVza3RvcFdlYlZpZXcqIGNyZWF0ZVZpZXdXaXRoUGFnZUdyb3VwKFdLUGFnZUdyb3VwUmVmKTsK
LQotICAgIFFEZXNrdG9wV2ViVmlldyogd2ViVmlldygpOwotICAgIHZvaWQgX3Ffb25PcGVuUGFu
ZWxGaWxlc1NlbGVjdGVkKCk7Ci0gICAgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCBy
ZXN1bHQpOwotICAgIHZvaWQgZW5hYmxlTW91c2VFdmVudHMoKTsKLSAgICB2b2lkIGRpc2FibGVN
b3VzZUV2ZW50cygpOwotCi0gICAgYm9vbCBpc0NyYXNoZWQ7Ci0KLXByaXZhdGU6Ci0gICAgLy8g
SW1wbGVtZW50YXRpb24gb2YgUXRWaWV3SW50ZXJmYWNlLgotICAgIHZpcnR1YWwgdm9pZCBzZXRW
aWV3TmVlZHNEaXNwbGF5KGNvbnN0IFFSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIFFTaXplIGRyYXdp
bmdBcmVhU2l6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50U2l6ZUNoYW5nZWQoY29uc3Qg
UVNpemUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUG9zaXRpb25SZXF1ZXN0ZWQoY29uc3Qg
UVBvaW50JiBwb3MpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCk7Ci0gICAgdmly
dHVhbCBib29sIGhhc0ZvY3VzKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmlzaWJsZSgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhRdDo6RHJvcEFjdGlvbnMgc3VwcG9ydGVkRHJvcEFj
dGlvbnMsIGNvbnN0IFFJbWFnZSYgZHJhZ0ltYWdlLCBRTWltZURhdGEqLCBRUG9pbnQqIGNsaWVu
dFBvc2l0aW9uLCBRUG9pbnQqIGdsb2JhbFBvc2l0aW9uLCBRdDo6RHJvcEFjdGlvbiogZHJvcEFj
dGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5k
Wm9vbWFibGVBcmVhKGNvbnN0IFFQb2ludCYsIGNvbnN0IFFSZWN0Jik7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2hhbmdlVXJsKGNvbnN0IFFVcmwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlVGl0bGUoY29uc3QgUVN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUb29s
VGlwKGNvbnN0IFFTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU3RhdHVzVGV4
dChjb25zdCBRU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUN1cnNvcihjb25z
dCBRQ3Vyc29yJik7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRCZWdpbigpOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkRGlkQ29tbWl0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRTdWNjZWVk
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRGYWlsKGNvbnN0IFF0V2ViRXJyb3ImKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlTG9hZFByb2dyZXNzKGludCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2hvd0NvbnRleHRNZW51KFFTaGFyZWRQb2ludGVyPFFNZW51Pik7Ci0gICAgdmlydHVh
bCB2b2lkIGhpZGVDb250ZXh0TWVudSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3Jp
cHRBbGVydChjb25zdCBRU3RyaW5nJik7Ci0gICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRD
b25maXJtKGNvbnN0IFFTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIFFTdHJpbmcgcnVuSmF2YVNjcmlw
dFByb21wdChjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYgZGVmYXVsdFZhbHVlLCBib29s
JiBvayk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOwotCi0gICAgdmlydHVhbCBRSlNFbmdpbmUqIGVu
Z2luZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGNob29zZUZpbGVzKFdLT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXJSZWYsIGNvbnN0IFFTdHJpbmdMaXN0JiBzZWxlY3RlZEZpbGVOYW1lcywgUXRWaWV3
SW50ZXJmYWNlOjpGaWxlQ2hvb3NlclR5cGUpOwotICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZFJl
cXVlc3RlZChRV2ViRG93bmxvYWRJdGVtKiBkb3dubG9hZEl0ZW0pOwotCi0gICAgdmlydHVhbCB2
b2lkIGRpZE1vdXNlTW92ZU92ZXJFbGVtZW50KGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJik7
Ci0KLSAgICAvLyBRdFBvbGljeUludGVyZmFjZS4KLSAgICB2aXJ0dWFsIFF0UG9saWN5SW50ZXJm
YWNlOjpQb2xpY3lBY3Rpb24gbmF2aWdhdGlvblBvbGljeUZvclVSTChjb25zdCBRVXJsJiwgUXQ6
Ok1vdXNlQnV0dG9uLCBRdDo6S2V5Ym9hcmRNb2RpZmllcnMpOwotCi0gICAgUVNoYXJlZFBvaW50
ZXI8UU1lbnU+IGFjdGl2ZU1lbnU7Ci0KLSAgICBRRmlsZURpYWxvZyogZmlsZURpYWxvZzsKLSAg
ICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIG9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOwot
Ci0gICAgUVVybCBsYXN0SG92ZXJlZFVSTDsKLSAgICBRU3RyaW5nIGxhc3RIb3ZlcmVkVGl0bGU7
Ci19OwotCi0jZW5kaWYgLyogcWRlc2t0b3B3ZWJ2aWV3X3BfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzBj
MmEzODk3YmVkY2RhYTE1ZDhlMDY3YmU1MGJkMzkwMzU1Mjk4NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKQEAgLTAs
MCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAicXF1aWNrd2VicGFnZS5oIgorCisjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgInFxdWlja3dl
YnBhZ2VfcC5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXcuaCIKKyNpbmNsdWRlIDxRdENvcmUv
UVVybD4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FRdWlja0NhbnZhcz4KKyNpbmNsdWRlIDxR
dERlY2xhcmF0aXZlL1FTR0VuZ2luZT4KKworUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZShR
UXVpY2tJdGVtKiBwYXJlbnQpCisgICAgOiBRUXVpY2tJdGVtKHBhcmVudCkKKyAgICAsIGQobmV3
IFFRdWlja1dlYlBhZ2VQcml2YXRlKHRoaXMpKQoreworICAgIHNldEZsYWcoSXRlbUhhc0NvbnRl
bnRzKTsKKworICAgIC8vIFdlIGRvIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgdG9wIGxlZnQgc28g
dGhlIHZpZXdwb3J0IGNhbiBhc3N1bWUgdGhlIHBvc2l0aW9uIDAsIDAKKyAgICAvLyBpcyBhbHdh
eXMgd2hlcmUgcmVuZGVyaW5nIHN0YXJ0cy4KKyAgICBzZXRUcmFuc2Zvcm1PcmlnaW4oVG9wTGVm
dCk7CisgICAgZC0+aW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucygpOworfQorCitRUXVpY2tXZWJQ
YWdlOjp+UVF1aWNrV2ViUGFnZSgpCit7CisgICAgZGVsZXRlIGQ7Cit9CisKK3ZvaWQgUVF1aWNr
V2ViUGFnZTo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2
ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjprZXlSZWxlYXNlRXZlbnQoUUtl
eUV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1
aWNrV2ViUGFnZTo6aW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCogZXZlbnQpCit7
CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmZvY3Vz
SW5FdmVudChRRm9jdXNFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwor
fQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqIGV2ZW50
KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjpt
b3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIGZvcmNlQWN0aXZlRm9j
dXMoKTsKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6
bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2
ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjptb3VzZVJlbGVhc2VFdmVudChRTW91c2VF
dmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlj
a1dlYlBhZ2U6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCogZXZlbnQpCit7Cisg
ICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OndoZWVsRXZl
bnQoUVdoZWVsRXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwor
dm9pZCBRUXVpY2tXZWJQYWdlOjpob3ZlckVudGVyRXZlbnQoUUhvdmVyRXZlbnQqIGV2ZW50KQor
eworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjpob3Zl
ck1vdmVFdmVudChRSG92ZXJFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQp
OworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmhvdmVyTGVhdmVFdmVudChRSG92ZXJFdmVudCog
ZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBh
Z2U6OmRyYWdNb3ZlRXZlbnQoUURyYWdNb3ZlRXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2
ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjpkcmFnRW50ZXJFdmVudChRRHJh
Z0VudGVyRXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9p
ZCBRUXVpY2tXZWJQYWdlOjpkcmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZlbnQqIGV2ZW50KQor
eworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjpkcm9w
RXZlbnQoUURyb3BFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQor
Cit2b2lkIFFRdWlja1dlYlBhZ2U6Omdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmIG5ld0dl
b21ldHJ5LCBjb25zdCBRUmVjdEYmIG9sZEdlb21ldHJ5KQoreworICAgIFFRdWlja0l0ZW06Omdl
b21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2VvbWV0cnkpOworICAgIGlmIChuZXdHZW9t
ZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpKQorICAgICAgICBkLT5wYWdlUHJveHkt
PnNldERyYXdpbmdBcmVhU2l6ZShuZXdHZW9tZXRyeS5zaXplKCkudG9TaXplKCkpOworfQorCiti
b29sIFFRdWlja1dlYlBhZ2U6OmV2ZW50KFFFdmVudCogZXYpCit7CisgICAgaWYgKGQtPnBhZ2VQ
cm94eS0+aGFuZGxlRXZlbnQoZXYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZXYt
PnR5cGUoKSA9PSBRRXZlbnQ6OklucHV0TWV0aG9kKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGFuIGVuZGxlc3MgbG9vcCBpbiBjb25uZWN0aW9u
IHdpdGggUVF1aWNrSXRlbTo6ZXZlbnQoKS4KKyAgICByZXR1cm4gUVF1aWNrSXRlbTo6ZXZlbnQo
ZXYpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2
ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdl
OjppdGVtQ2hhbmdlKEl0ZW1DaGFuZ2UgY2hhbmdlLCBjb25zdCBJdGVtQ2hhbmdlRGF0YSAmZGF0
YSkKK3sKKyAgICBpZiAoY2hhbmdlID09IEl0ZW1TY2VuZUNoYW5nZSkKKyAgICAgICAgZC0+aW5p
dFNjZW5lR3JhcGhDb25uZWN0aW9ucygpOworICAgIFFRdWlja0l0ZW06Oml0ZW1DaGFuZ2UoY2hh
bmdlLCBkYXRhKTsKK30KKworUVF1aWNrV2ViUGFnZVByaXZhdGU6OlFRdWlja1dlYlBhZ2VQcml2
YXRlKFFRdWlja1dlYlBhZ2UqIHZpZXcpCisgICAgOiBxKHZpZXcpCisgICAgLCBwYWdlUHJveHko
MCkKKyAgICAsIG5hdmlnYXRpb25Db250cm9sbGVyKDApCisgICAgLCBzZ1VwZGF0ZVF1ZXVlKHZp
ZXcpCisgICAgLCBwYWludGluZ0lzSW5pdGlhbGl6ZWQoZmFsc2UpCit7Cit9CisKK3ZvaWQgUVF1
aWNrV2ViUGFnZVByaXZhdGU6OmluaXRTY2VuZUdyYXBoQ29ubmVjdGlvbnMoKQoreworICAgIGlm
IChwYWludGluZ0lzSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXEtPmNh
bnZhcygpKQorICAgICAgICByZXR1cm47CisgICAgcGFpbnRpbmdJc0luaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICBpZiAocS0+c2NlbmVHcmFwaEVuZ2luZSgpKQorICAgICAgICBfcV9vblNjZW5lR3Jh
cGhJbml0aWFsaXplZCgpOworICAgIGVsc2UKKyAgICAgICAgUU9iamVjdDo6Y29ubmVjdChxLT5j
YW52YXMoKSwgU0lHTkFMKHNjZW5lR3JhcGhJbml0aWFsaXplZCgpKSwgcSwgU0xPVChfcV9vblNj
ZW5lR3JhcGhJbml0aWFsaXplZCgpKSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6
OnNldFBhZ2VQcm94eShRdFdlYlBhZ2VQcm94eSogcGFnZVByb3h5KQoreworICAgIEFTU0VSVCgh
dGhpcy0+cGFnZVByb3h5KTsKKyAgICBBU1NFUlQocGFnZVByb3h5KTsKKyAgICB0aGlzLT5wYWdl
UHJveHkgPSBwYWdlUHJveHk7CisKK30KKworc3RhdGljIGZsb2F0IGNvbXB1dGVFZmZlY3RpdmVP
cGFjaXR5KGNvbnN0IFFRdWlja0l0ZW0qIGl0ZW0pCit7CisgICAgaWYgKCFpdGVtKQorICAgICAg
ICByZXR1cm4gMS4wOworCisgICAgZmxvYXQgb3BhY2l0eSA9IGl0ZW0tPm9wYWNpdHkoKTsKKyAg
ICBpZiAob3BhY2l0eSA8IDAuMDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG9w
YWNpdHkgKiBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShpdGVtLT5wYXJlbnRJdGVtKCkpOworfQor
Cit2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCgpCit7
CisgICAgaWYgKCFxLT5pc1Zpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBxLT5pdGVtVHJhbnNmb3JtKDAsIDApOworCisgICAgZmxvYXQgb3Bh
Y2l0eSA9IGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KHEpOworICAgIFFSZWN0RiBjbGlwUmVjdCA9
IHEtPnBhcmVudEl0ZW0oKS0+bWFwUmVjdFRvU2NlbmUocS0+cGFyZW50SXRlbSgpLT5ib3VuZGlu
Z1JlY3QoKSk7CisKKyAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGNvbnN0IGlu
dCBsZWZ0ID0gY2xpcFJlY3QubGVmdCgpOworICAgIGNvbnN0IGludCB3aWR0aCA9IGNsaXBSZWN0
LndpZHRoKCk7CisgICAgY29uc3QgaW50IGJvdHRvbSA9IHEtPmNhbnZhcygpLT5oZWlnaHQoKSAt
IChjbGlwUmVjdC5ib3R0b20oKSArIDEpOworICAgIGNvbnN0IGludCBoZWlnaHQgPSBjbGlwUmVj
dC5oZWlnaHQoKTsKKworICAgIGdsU2Npc3NvcihsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQp
OworCisgICAgcGFnZVByb3h5LT5yZW5kZXJUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBv
cGFjaXR5KTsKKyAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKK30KKwordm9pZCBRUXVp
Y2tXZWJQYWdlUHJpdmF0ZTo6X3Ffb25BZnRlclNjZW5lUmVuZGVyKCkKK3sKKyAgICAvLyBUT0RP
OiBBbGxvdyBwYWludGluZyBiZWZvcmUgdGhlIHNjZW5lIG9yIGluIHRoZSBtaWRkbGUgb2YgdGhl
IHNjZW5lIHdpdGggYW4gRkJPLgorICAgIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7Cit9CisK
K3ZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6Ol9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCkK
K3sKKyAgICBRU0dFbmdpbmUqIGVuZ2luZSA9IHEtPnNjZW5lR3JhcGhFbmdpbmUoKTsKKyAgICBR
T2JqZWN0Ojpjb25uZWN0KGVuZ2luZSwgU0lHTkFMKGFmdGVyUmVuZGVyaW5nKCkpLCBxLCBTTE9U
KF9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworfQorCisj
aW5jbHVkZSAibW9jX3FxdWlja3dlYnBhZ2UuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZmYxYzA2ZDFhNWI3ZTk3
N2M2MjU0MWVmZjRkODQyOWM2MjdjOGRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmgKQEAgLTAsMCArMSw3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1aWNrd2VicGFnZV9oCisjZGVmaW5lIHFxdWlja3dl
YnBhZ2VfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSA8UXRDb3Jl
L1FTaGFyZWRQb2ludGVyPgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvUVF1aWNrSXRlbT4KKwor
Y2xhc3MgUVF1aWNrV2ViVmlldzsKK2NsYXNzIFFRdWlja1dlYlBhZ2VQcml2YXRlOworY2xhc3Mg
UVdlYk5hdmlnYXRpb25Db250cm9sbGVyOworY2xhc3MgUVdlYlByZWZlcmVuY2VzOworCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFF0Vmlld0ludGVyZmFjZTsKK30KKworY2xhc3MgUVdFQktJ
VF9FWFBPUlQgUVF1aWNrV2ViUGFnZSA6IHB1YmxpYyBRUXVpY2tJdGVtIHsKKyAgICBRX09CSkVD
VAorcHVibGljOgorICAgIFFRdWlja1dlYlBhZ2UoUVF1aWNrSXRlbSogcGFyZW50ID0gMCk7Cisg
ICAgdmlydHVhbCB+UVF1aWNrV2ViUGFnZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGtleVJlbGVh
c2VFdmVudChRS2V5RXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5wdXRNZXRob2RFdmVudChR
SW5wdXRNZXRob2RFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBmb2N1c0luRXZlbnQoUUZvY3Vz
RXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCopOwor
ICAgIHZpcnR1YWwgdm9pZCBtb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQgKik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNl
RG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCB3aGVlbEV2
ZW50KFFXaGVlbEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGhvdmVyRW50ZXJFdmVudChRSG92
ZXJFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBob3Zlck1vdmVFdmVudChRSG92ZXJFdmVudCop
OworICAgIHZpcnR1YWwgdm9pZCBob3ZlckxlYXZlRXZlbnQoUUhvdmVyRXZlbnQqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVudCopOworICAgIHZpcnR1YWwg
dm9pZCBkcmFnRW50ZXJFdmVudChRRHJhZ0VudGVyRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhZ0xlYXZlRXZlbnQoUURyYWdMZWF2ZUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGRyb3BF
dmVudChRRHJvcEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQoUVRvdWNoRXZl
bnQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgZXZlbnQoUUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lk
IGdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmLCBjb25zdCBRUmVjdEYmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaXRlbUNoYW5nZShJdGVtQ2hhbmdlLCBjb25zdCBJdGVtQ2hhbmdlRGF0YSYpOwor
Citwcml2YXRlOgorICAgIFFfUFJJVkFURV9TTE9UKGQsIHZvaWQgX3Ffb25BZnRlclNjZW5lUmVu
ZGVyKCkpOworICAgIFFfUFJJVkFURV9TTE9UKGQsIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlh
bGl6ZWQoKSk7CisKKyAgICBRUXVpY2tXZWJQYWdlUHJpdmF0ZSogZDsKKyAgICBmcmllbmQgY2xh
c3MgUVF1aWNrV2ViVmlld1ByaXZhdGU7CisgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRWaWV3
SW50ZXJmYWNlOworfTsKKworUU1MX0RFQ0xBUkVfVFlQRShRUXVpY2tXZWJQYWdlKQorCisjZW5k
aWYgLyogcXF1aWNrd2VicGFnZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTliMTA0YjYwNWU4YTRmZTcy
ZTUxYTdiYmU1ZjE2ZWFkZWNjMTU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3AuaApAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBxcXVpY2t3ZWJwYWdlX3BfaAorI2RlZmluZSBxcXVpY2t3
ZWJwYWdlX3BfaAorCisjaW5jbHVkZSAiUXRTR1VwZGF0ZVF1ZXVlLmgiCisjaW5jbHVkZSAiUXRW
aWV3SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicXF1aWNrd2VicGFnZS5oIgorI2luY2x1ZGUgInF3
ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oIgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFS
ZWN0RjsKK2NsYXNzIFFTR05vZGU7CitjbGFzcyBRU3RyaW5nOworUVRfRU5EX05BTUVTUEFDRQor
CitjbGFzcyBRUXVpY2tXZWJQYWdlOworCitjbGFzcyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSB7Citw
dWJsaWM6CisgICAgUVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2ViUGFnZSogdmlldyk7CisK
KyAgICB2b2lkIHNldFBhZ2VQcm94eShRdFdlYlBhZ2VQcm94eSopOworCisgICAgdm9pZCBpbml0
U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7CisKKyAgICB2b2lkIF9xX29uQWZ0ZXJTY2VuZVJlbmRl
cigpOworICAgIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKTsKKyAgICB2b2lkIHBh
aW50VG9DdXJyZW50R0xDb250ZXh0KCk7CisKKyAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBxOwor
ICAgIFF0V2ViUGFnZVByb3h5KiBwYWdlUHJveHk7CisgICAgUVdlYk5hdmlnYXRpb25Db250cm9s
bGVyKiBuYXZpZ2F0aW9uQ29udHJvbGxlcjsKKyAgICBXZWJLaXQ6OlF0U0dVcGRhdGVRdWV1ZSBz
Z1VwZGF0ZVF1ZXVlOworICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxpemVkOworfTsKKworI2Vu
ZGlmIC8qIHFxdWlja3dlYnBhZ2VfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xN2EwNzk1NzdjN2M2YTUw
MDZhMGI0Y2I4NTJiZjhjNDJhZGU5ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtMCwwICsxLDQ1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxcXVpY2t3
ZWJ2aWV3LmgiCisKKyNpbmNsdWRlICJRdFRvdWNoVmlld0ludGVyZmFjZS5oIgorI2luY2x1ZGUg
IlF0V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiVXRpbHNRdC5oIgorI2luY2x1ZGUgIldlYlBh
Z2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisKKyNpbmNsdWRlICJxcXVp
Y2t3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKKyNpbmNsdWRlICJx
d2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJxd2VicHJlZmVyZW5jZXNfcC5o
IgorCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RUXVpY2tDYW52YXM+CisjaW5jbHVkZSA8UXRX
aWRnZXRzL1FGaWxlRGlhbG9nPgorI2luY2x1ZGUgPFF0V2lkZ2V0cy9RSW5wdXREaWFsb2c+Cisj
aW5jbHVkZSA8UXRXaWRnZXRzL1FNZXNzYWdlQm94PgorI2luY2x1ZGUgPFdLT3BlblBhbmVsUmVz
dWx0TGlzdGVuZXIuaD4KKworUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2
YXRlKCkKKyAgICA6IHFfcHRyKDApCisgICAgLCBuYXZpZ2F0aW9uQ29udHJvbGxlcigwKQorICAg
ICwgdXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKGZhbHNlKQoreworfQorCit2b2lkIFFR
dWlja1dlYlZpZXdQcml2YXRlOjplbmFibGVNb3VzZUV2ZW50cygpCit7CisgICAgUV9RKFFRdWlj
a1dlYlZpZXcpOworICAgIHEtPnNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpNb3VzZUJ1dHRv
bk1hc2spOworICAgIHEtPnNldEFjY2VwdEhvdmVyRXZlbnRzKHRydWUpOworICAgIHBhZ2VWaWV3
LT5zZXRBY2NlcHRlZE1vdXNlQnV0dG9ucyhRdDo6TW91c2VCdXR0b25NYXNrKTsKKyAgICBwYWdl
Vmlldy0+c2V0QWNjZXB0SG92ZXJFdmVudHModHJ1ZSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmll
d1ByaXZhdGU6OmRpc2FibGVNb3VzZUV2ZW50cygpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcp
OworICAgIHEtPnNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpOb0J1dHRvbik7CisgICAgcS0+
c2V0QWNjZXB0SG92ZXJFdmVudHMoZmFsc2UpOworICAgIHBhZ2VWaWV3LT5zZXRBY2NlcHRlZE1v
dXNlQnV0dG9ucyhRdDo6Tm9CdXR0b24pOworICAgIHBhZ2VWaWV3LT5zZXRBY2NlcHRIb3ZlckV2
ZW50cyhmYWxzZSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUo
UVF1aWNrV2ViVmlldyogdmlld3BvcnQsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYpCit7CisgICAgcV9wdHIgPSB2aWV3cG9ydDsKKyAgICB2aWV3
cG9ydC0+c2V0RmxhZ3MoUVF1aWNrSXRlbTo6SXRlbUNsaXBzQ2hpbGRyZW5Ub1NoYXBlKTsKKwor
ICAgIFFPYmplY3Q6OmNvbm5lY3Qodmlld3BvcnQsIFNJR05BTCh2aXNpYmxlQ2hhbmdlZCgpKSwg
dmlld3BvcnQsIFNMT1QoX3Ffb25WaXNpYmxlQ2hhbmdlZCgpKSk7CisgICAgcGFnZVZpZXcucmVz
ZXQobmV3IFFRdWlja1dlYlBhZ2Uodmlld3BvcnQpKTsKKyAgICB2aWV3SW50ZXJmYWNlLnJlc2V0
KG5ldyBXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZSh2aWV3cG9ydCwgcGFnZVZpZXcuZGF0YSgpKSk7
CisKKyAgICBRUXVpY2tXZWJQYWdlUHJpdmF0ZSogY29uc3QgcGFnZVZpZXdQcml2YXRlID0gcGFn
ZVZpZXcuZGF0YSgpLT5kOworICAgIHNldFBhZ2VQcm94eShuZXcgUXRXZWJQYWdlUHJveHkodmll
d0ludGVyZmFjZS5kYXRhKCksIDAsIHRoaXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZikpOwor
ICAgIHBhZ2VWaWV3UHJpdmF0ZS0+c2V0UGFnZVByb3h5KHBhZ2VQcm94eS5kYXRhKCkpOworCisg
ICAgUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0KHBhZ2VQcm94eS0+cHJlZmVyZW5jZXMoKSkt
PnNldEF0dHJpYnV0ZShRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZCwgdHJ1ZSk7CisgICAgcGFnZVByb3h5LT5pbml0KCk7Cit9CisKK3ZvaWQgUVF1
aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVEZXNrdG9wKFFRdWlja1dlYlZpZXcqIHZpZXdw
b3J0KQoreworICAgIGlmIChpbnRlcmFjdGlvbkVuZ2luZSkgeworICAgICAgICBRT2JqZWN0Ojpk
aXNjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZpZXdwb3J0VXBkYXRl
UmVxdWVzdGVkKCkpLCB2aWV3cG9ydCwgU0xPVChfcV92aWV3cG9ydFVwZGF0ZWQoKSkpOworICAg
ICAgICBRT2JqZWN0OjpkaXNjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFM
KHZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKSwgdmlld3Bv
cnQsIFNMT1QoX3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRG
JikpKTsKKyAgICB9CisgICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQoMCk7CisgICAgcGFnZVBy
b3h5LT5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKDApOworICAgIGVuYWJsZU1vdXNlRXZl
bnRzKCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVUb3VjaChR
UXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkKK3sKKyAgICBpbnRlcmFjdGlvbkVuZ2luZS5yZXNldChu
ZXcgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHZpZXdwb3J0LCBwYWdlVmlldy5kYXRhKCkp
KTsKKyAgICBwYWdlUHJveHktPnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoaW50ZXJhY3Rp
b25FbmdpbmUuZGF0YSgpKTsKKyAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKKyAgICBRT2JqZWN0
Ojpjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZpZXdwb3J0VXBkYXRl
UmVxdWVzdGVkKCkpLCB2aWV3cG9ydCwgU0xPVChfcV92aWV3cG9ydFVwZGF0ZWQoKSkpOworICAg
IFFPYmplY3Q6OmNvbm5lY3QoaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpLCBTSUdOQUwodmlld3Bv
cnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpLCB2aWV3cG9ydCwgU0xP
VChfcV92aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYmKSkpOwor
ICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRl
Ojpsb2FkRGlkQ29tbWl0KCkKK3sKKyAgICBpZiAoIXVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2
aW91cikKKyAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUtPnJlc2V0KCk7Cit9CisKK3ZvaWQgUVF1
aWNrV2ViVmlld1ByaXZhdGU6OmNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6
ZSkKK3sKKyAgICBpZiAodXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBwYWdlVmlldy0+c2V0V2lkdGgobmV3U2l6ZS53aWR0aCgpKTsKKyAgICBw
YWdlVmlldy0+c2V0SGVpZ2h0KG5ld1NpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpzY3JvbGxQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcykK
K3sKKyAgICBpZiAoIXVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cikKKyAgICAgICAgaW50
ZXJhY3Rpb25FbmdpbmUtPnBhZ2VQb3NpdGlvblJlcXVlc3QocG9zKTsKK30KKwordm9pZCBRUXVp
Y2tXZWJWaWV3UHJpdmF0ZTo6X3Ffdmlld3BvcnRVcGRhdGVkKCkKK3sKKyAgICBRX1EoUVF1aWNr
V2ViVmlldyk7CisgICAgY29uc3QgUVJlY3RGIHZpc2libGVSZWN0SW5QYWdlVmlld0Nvb3JkaW5h
dGVzID0gcS0+bWFwUmVjdFRvSXRlbShwYWdlVmlldy5kYXRhKCksIHEtPmJvdW5kaW5nUmVjdCgp
KS5pbnRlcnNlY3RlZChwYWdlVmlldy0+Ym91bmRpbmdSZWN0KCkpOworICAgIGZsb2F0IHNjYWxl
ID0gcGFnZVZpZXctPnNjYWxlKCk7CisgICAgcGFnZVByb3h5LT5zZXRWaXNpYmxlQ29udGVudFJl
Y3RBbmRTY2FsZSh2aXNpYmxlUmVjdEluUGFnZVZpZXdDb29yZGluYXRlcywgc2NhbGUpOworfQor
Cit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV92aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JD
aGFuZ2VkKGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgcGFnZVByb3h5
LT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3Ip
OworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV9vblZpc2libGVDaGFuZ2VkKCkK
K3sKKyAgICBXZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvSW1wbChwYWdlUHJveHktPnBhZ2VSZWYo
KSk7CisKKyAgICB3a1BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJ
c1Zpc2libGUpOworfQorCisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnVwZGF0ZVZpZXdw
b3J0U2l6ZSgpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIFFTaXplIHZpZXdwb3J0
U2l6ZSA9IHEtPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUoKTsKKworICAgIGlmICh2aWV3
cG9ydFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJQYWdlUHJveHkq
IHdrUGFnZSA9IHRvSW1wbChwYWdlUHJveHktPnBhZ2VSZWYoKSk7CisgICAgLy8gTGV0IHRoZSBX
ZWJQcm9jZXNzIGtub3cgYWJvdXQgdGhlIG5ldyB2aWV3cG9ydCBzaXplLCBzbyB0aGF0CisgICAg
Ly8gaXQgY2FuIHJlc2l6ZSB0aGUgY29udGVudCBhY2NvcmRpbmdseS4KKyAgICB3a1BhZ2UtPnNl
dFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFNpemUpOworICAgIHVwZGF0ZVZpZXdwb3J0Q29uc3RyYWlu
dHMoKTsKKyAgICBfcV92aWV3cG9ydFVwZGF0ZWQoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6dXBkYXRlVmlld3BvcnRDb25zdHJhaW50cygpCit7CisgICAgUV9RKFFRdWlja1dl
YlZpZXcpOworICAgIFFTaXplIGF2YWlsYWJsZVNpemUgPSBxLT5ib3VuZGluZ1JlY3QoKS5zaXpl
KCkudG9TaXplKCk7CisKKyAgICBpZiAoYXZhaWxhYmxlU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYlBhZ2VQcm94eSogd2tQYWdlID0gdG9JbXBsKHBhZ2VQcm94eS0+
cGFnZVJlZigpKTsKKyAgICBXZWJQcmVmZXJlbmNlcyogd2tQcmVmcyA9IHdrUGFnZS0+cGFnZUdy
b3VwKCktPnByZWZlcmVuY2VzKCk7CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIGxhdGVyOyBIYXJk
Y29kZSBzb21lIHZhbHVlcyBmb3Igbm93IHRvIG1ha2Ugc3VyZSB0aGUgRFBJIGFkanVzdG1lbnQg
aXMgYmVpbmcgdGVzdGVkLgorICAgIHdrUHJlZnMtPnNldERldmljZURQSSgyNDApOworICAgIHdr
UHJlZnMtPnNldERldmljZVdpZHRoKDQ4MCk7CisgICAgd2tQcmVmcy0+c2V0RGV2aWNlSGVpZ2h0
KDcyMCk7CisKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0ciA9IFdlYkNvcmU6
OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXModmlld3BvcnRBcmd1bWVudHMsIHdrUHJlZnMtPmxh
eW91dEZhbGxiYWNrV2lkdGgoKSwgd2tQcmVmcy0+ZGV2aWNlV2lkdGgoKSwgd2tQcmVmcy0+ZGV2
aWNlSGVpZ2h0KCksIHdrUHJlZnMtPmRldmljZURQSSgpLCBhdmFpbGFibGVTaXplKTsKKyAgICBX
ZWJDb3JlOjpyZXN0cmljdE1pbmltdW1TY2FsZUZhY3RvclRvVmlld3BvcnRTaXplKGF0dHIsIGF2
YWlsYWJsZVNpemUpOworICAgIFdlYkNvcmU6OnJlc3RyaWN0U2NhbGVGYWN0b3JUb0luaXRpYWxT
Y2FsZUlmTm90VXNlclNjYWxhYmxlKGF0dHIpOworCisgICAgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpDb25zdHJhaW50cyBuZXdDb25zdHJhaW50czsKKyAgICBuZXdDb25zdHJhaW50cy5p
bml0aWFsU2NhbGUgPSBhdHRyLmluaXRpYWxTY2FsZTsKKyAgICBuZXdDb25zdHJhaW50cy5taW5p
bXVtU2NhbGUgPSBhdHRyLm1pbmltdW1TY2FsZTsKKyAgICBuZXdDb25zdHJhaW50cy5tYXhpbXVt
U2NhbGUgPSBhdHRyLm1heGltdW1TY2FsZTsKKyAgICBuZXdDb25zdHJhaW50cy5kZXZpY2VQaXhl
bFJhdGlvID0gYXR0ci5kZXZpY2VQaXhlbFJhdGlvOworICAgIG5ld0NvbnN0cmFpbnRzLmlzVXNl
clNjYWxhYmxlID0gISFhdHRyLnVzZXJTY2FsYWJsZTsKKyAgICBpbnRlcmFjdGlvbkVuZ2luZS0+
c2V0Q29uc3RyYWludHMobmV3Q29uc3RyYWludHMpOworCisgICAgLy8gT3ZlcndyaXRlIG1pbmlt
dW0gc2NhbGUgdmFsdWUgd2l0aCBmaXQtdG8tdmlldyB2YWx1ZSwgdW5sZXNzIHRoZSB0aGUgY29u
dGVudCBhdXRob3IKKyAgICAvLyBleHBsaWNpdGx5IHNheXMgbm8uIE5COiBXZSBjYW4gb25seSBk
byB0aGlzIHdoZW4gd2Uga25vdyB3ZSBoYXZlIGEgdmFsaWQgc2l6ZSwgaWUuCisgICAgLy8gYWZ0
ZXIgaW5pdGlhbCBsYXlvdXQgaGFzIGNvbXBsZXRlZC4KK30KKwordm9pZCBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdw
b3J0QXJndW1lbnRzJiBhcmdzKQoreworICAgIGlmICh1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhh
dmlvdXIpCisgICAgICAgIHJldHVybjsKKyAgICB2aWV3cG9ydEFyZ3VtZW50cyA9IGFyZ3M7Cisg
ICAgdXBkYXRlVmlld3BvcnRDb25zdHJhaW50cygpOworfQorCisKK3ZvaWQgUVF1aWNrV2ViVmll
d1ByaXZhdGU6OnJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBRU3RyaW5nJiBhbGVydFRleHQpCit7
CisjaWZuZGVmIFFUX05PX01FU1NBR0VCT1gKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAg
Y29uc3QgUVN0cmluZyB0aXRsZSA9IFFPYmplY3Q6OnRyKCJKYXZhU2NyaXB0IEFsZXJ0IC0gJTEi
KS5hcmcocS0+dXJsKCkuaG9zdCgpKTsKKyAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKKyAgICBR
TWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0bGUsIGVzY2FwZUh0bWwoYWxlcnRUZXh0KSwg
UU1lc3NhZ2VCb3g6Ok9rKTsKKyAgICBlbmFibGVNb3VzZUV2ZW50cygpOworI2Vsc2UKKyAgICBR
X1VOVVNFRChhbGVydFRleHQpOworI2VuZGlmCit9CisKK2Jvb2wgUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnJ1bkphdmFTY3JpcHRDb25maXJtKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
Ym9vbCByZXN1bHQgPSB0cnVlOworI2lmbmRlZiBRVF9OT19NRVNTQUdFQk9YCisgICAgUV9RKFFR
dWlja1dlYlZpZXcpOworICAgIGNvbnN0IFFTdHJpbmcgdGl0bGUgPSBRT2JqZWN0Ojp0cigiSmF2
YVNjcmlwdCBDb25maXJtIC0gJTEiKS5hcmcocS0+dXJsKCkuaG9zdCgpKTsKKyAgICBkaXNhYmxl
TW91c2VFdmVudHMoKTsKKyAgICByZXN1bHQgPSBRTWVzc2FnZUJveDo6WWVzID09IFFNZXNzYWdl
Qm94OjppbmZvcm1hdGlvbigwLCB0aXRsZSwgZXNjYXBlSHRtbChtZXNzYWdlKSwgUU1lc3NhZ2VC
b3g6OlllcywgUU1lc3NhZ2VCb3g6Ok5vKTsKKyAgICBlbmFibGVNb3VzZUV2ZW50cygpOworI2Vs
c2UKKyAgICBRX1VOVVNFRChtZXNzYWdlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1FTdHJpbmcgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnJ1bkphdmFTY3JpcHRQcm9tcHQoY29u
c3QgUVN0cmluZyYgbWVzc2FnZSwgY29uc3QgUVN0cmluZyYgZGVmYXVsdFZhbHVlLCBib29sJiBv
aykKK3sKKyNpZm5kZWYgUVRfTk9fSU5QVVRESUFMT0cKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7
CisgICAgY29uc3QgUVN0cmluZyB0aXRsZSA9IFFPYmplY3Q6OnRyKCJKYXZhU2NyaXB0IFByb21w
dCAtICUxIikuYXJnKHEtPnVybCgpLmhvc3QoKSk7CisgICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7
CisgICAgUVN0cmluZyByZXN1bHQgPSBRSW5wdXREaWFsb2c6OmdldFRleHQoMCwgdGl0bGUsIGVz
Y2FwZUh0bWwobWVzc2FnZSksIFFMaW5lRWRpdDo6Tm9ybWFsLCBkZWZhdWx0VmFsdWUsICZvayk7
CisgICAgZW5hYmxlTW91c2VFdmVudHMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBRX1VOVVNFRChtZXNzYWdlKTsKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworI2VuZGlmCit9
CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmNob29zZUZpbGVzKFdLT3BlblBhbmVsUmVz
dWx0TGlzdGVuZXJSZWYgbGlzdGVuZXJSZWYsIGNvbnN0IFFTdHJpbmdMaXN0JiBzZWxlY3RlZEZp
bGVOYW1lcywgUXRWaWV3SW50ZXJmYWNlOjpGaWxlQ2hvb3NlclR5cGUgdHlwZSkKK3sKKyNpZm5k
ZWYgUVRfTk9fRklMRURJQUxPRworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBvcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lciA9IGxpc3RlbmVyUmVmOworCisgICAgLy8gUXQgZG9lcyBub3Qgc3Vw
cG9ydCBtdWx0aXBsZSBmaWxlcyBzdWdnZXN0aW9uLCBzbyB3ZSBnZXQganVzdCB0aGUgZmlyc3Qg
c3VnZ2VzdGlvbi4KKyAgICBRU3RyaW5nIHNlbGVjdGVkRmlsZU5hbWU7CisgICAgaWYgKCFzZWxl
Y3RlZEZpbGVOYW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHNlbGVjdGVkRmlsZU5hbWUgPSBzZWxl
Y3RlZEZpbGVOYW1lcy5hdCgwKTsKKworICAgIFFfQVNTRVJUKCFmaWxlRGlhbG9nKTsKKworICAg
IFFXaW5kb3cqIHdpbmRvdyA9IHEtPmNhbnZhcygpOworICAgIGlmICghd2luZG93KQorICAgICAg
ICByZXR1cm47CisKKyAgICBmaWxlRGlhbG9nID0gbmV3IFFGaWxlRGlhbG9nKDAsIFFTdHJpbmco
KSwgc2VsZWN0ZWRGaWxlTmFtZSk7CisgICAgZmlsZURpYWxvZy0+d2luZG93KCktPndpbklkKCk7
IC8vIEVuc3VyZSB0aGF0IHRoZSBkaWFsb2cgaGFzIGEgd2luZG93CisgICAgUV9BU1NFUlQoZmls
ZURpYWxvZy0+d2luZG93KCktPndpbmRvd0hhbmRsZSgpKTsKKyAgICBmaWxlRGlhbG9nLT53aW5k
b3coKS0+d2luZG93SGFuZGxlKCktPnNldFRyYW5zaWVudFBhcmVudCh3aW5kb3cpOworCisgICAg
ZmlsZURpYWxvZy0+b3BlbihxLCBTTE9UKF9xX29uT3BlblBhbmVsRmlsZXNTZWxlY3RlZCgpKSk7
CisKKyAgICBxLT5jb25uZWN0KGZpbGVEaWFsb2csIFNJR05BTChmaW5pc2hlZChpbnQpKSwgU0xP
VChfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCkpKTsKKyNlbmRpZgorfQorCit2b2lkIFFRdWlj
a1dlYlZpZXdQcml2YXRlOjpfcV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKQoreworICAgIGNv
bnN0IFFTdHJpbmdMaXN0IGZpbGVMaXN0ID0gZmlsZURpYWxvZy0+c2VsZWN0ZWRGaWxlcygpOwor
ICAgIFZlY3RvcjxSZWZQdHI8QVBJT2JqZWN0PiA+IHdrRmlsZXMoZmlsZUxpc3Quc2l6ZSgpKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWxlTGlzdC5zaXplKCk7ICsraSkKKyAg
ICAgICAgd2tGaWxlc1tpXSA9IFdlYlVSTDo6Y3JlYXRlKFFVcmw6OmZyb21Mb2NhbEZpbGUoZmls
ZUxpc3QuYXQoaSkpLnRvU3RyaW5nKCkpOworCisgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
ckNob29zZUZpbGVzKG9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLCB0b0FQSShJbW11dGFibGVBcnJh
eTo6YWRvcHQod2tGaWxlcykubGVha1JlZigpKSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1By
aXZhdGU6Ol9xX29uT3BlblBhbmVsRmluaXNoZWQoaW50IHJlc3VsdCkKK3sKKyAgICBpZiAocmVz
dWx0ID09IFFEaWFsb2c6OlJlamVjdGVkKQorICAgICAgICBXS09wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyQ2FuY2VsKG9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKTsKKworICAgIGZpbGVEaWFsb2ctPmRl
bGV0ZUxhdGVyKCk7CisgICAgZmlsZURpYWxvZyA9IDA7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmll
d1ByaXZhdGU6OnNldFVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cihib29sIGVuYWJsZSkK
K3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgaWYgKGVuYWJsZSA9PSB1c2VUcmFkaXRp
b25hbERlc2t0b3BCZWhhdmlvdXIpCisgICAgICAgIHJldHVybjsKKworICAgIHVzZVRyYWRpdGlv
bmFsRGVza3RvcEJlaGF2aW91ciA9IGVuYWJsZTsKKyAgICBpZiAodXNlVHJhZGl0aW9uYWxEZXNr
dG9wQmVoYXZpb3VyKQorICAgICAgICBpbml0aWFsaXplRGVza3RvcChxKTsKKyAgICBlbHNlCisg
ICAgICAgIGluaXRpYWxpemVUb3VjaChxKTsKK30KKworc3RhdGljIFF0UG9saWN5SW50ZXJmYWNl
OjpQb2xpY3lBY3Rpb24gdG9Qb2xpY3lBY3Rpb24oUVF1aWNrV2ViVmlldzo6TmF2aWdhdGlvblBv
bGljeSBwb2xpY3kpCit7CisgICAgc3dpdGNoIChwb2xpY3kpIHsKKyAgICBjYXNlIFFRdWlja1dl
YlZpZXc6OlVzZVBvbGljeToKKyAgICAgICAgcmV0dXJuIFF0UG9saWN5SW50ZXJmYWNlOjpVc2U7
CisgICAgY2FzZSBRUXVpY2tXZWJWaWV3OjpEb3dubG9hZFBvbGljeToKKyAgICAgICAgcmV0dXJu
IFF0UG9saWN5SW50ZXJmYWNlOjpEb3dubG9hZDsKKyAgICBjYXNlIFFRdWlja1dlYlZpZXc6Okln
bm9yZVBvbGljeToKKyAgICAgICAgcmV0dXJuIFF0UG9saWN5SW50ZXJmYWNlOjpJZ25vcmU7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBRdFBvbGljeUludGVy
ZmFjZTo6SWdub3JlOworfQorCitzdGF0aWMgYm9vbCBoYXNNZXRhTWV0aG9kKFFPYmplY3QqIG9i
amVjdCwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sKKyAgICBpbnQgbWV0aG9kSW5kZXggPSBv
YmplY3QtPm1ldGFPYmplY3QoKS0+aW5kZXhPZk1ldGhvZChRTWV0YU9iamVjdDo6bm9ybWFsaXpl
ZFNpZ25hdHVyZShtZXRob2ROYW1lKSk7CisgICAgcmV0dXJuIG1ldGhvZEluZGV4ID49IDAgJiYg
bWV0aG9kSW5kZXggPCBvYmplY3QtPm1ldGFPYmplY3QoKS0+bWV0aG9kQ291bnQoKTsKK30KKwor
LyohCisgICAgXHFtbG1ldGhvZCBOYXZpZ2F0aW9uUG9saWN5IERlc2t0b3BXZWJWaWV3OjpuYXZp
Z2F0aW9uUG9saWN5Rm9yVXJsKHVybCwgYnV0dG9uLCBtb2RpZmllcnMpCisKKyAgICBUaGlzIG1l
dGhvZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIHVzZXIgb2YgRGVza3RvcFdlYlZpZXcg
ZWxlbWVudC4KKworICAgIEl0IHdpbGwgYmUgY2FsbGVkIHRvIGRlY2lkZSB0aGUgcG9saWN5IGZv
ciBhIG5hdmlnYXRpb246IHdoZXRoZXIgdGhlIFdlYlZpZXcgc2hvdWxkIGlnbm9yZSB0aGUgbmF2
aWdhdGlvbiwKKyAgICBjb250aW51ZSBpdCBvciBzdGFydCBhIGRvd25sb2FkLiBUaGUgcmV0dXJu
IHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSBwb2xpY2llcyBpbiB0aGUgTmF2aWdhdGlvblBvbGlj
eSBlbnVtZXJhdGlvbi4KKyovCitRdFBvbGljeUludGVyZmFjZTo6UG9saWN5QWN0aW9uIFFRdWlj
a1dlYlZpZXdQcml2YXRlOjpuYXZpZ2F0aW9uUG9saWN5Rm9yVVJMKGNvbnN0IFFVcmwmIHVybCwg
UXQ6Ok1vdXNlQnV0dG9uIGJ1dHRvbiwgUXQ6OktleWJvYXJkTW9kaWZpZXJzIG1vZGlmaWVycykK
K3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGlz
IGZpcnN0IGJlY2F1c2UgaW52b2tlTWV0aG9kKCkgd2FybnMgaWYgdGhlIG1ldGhvZCBkb2Vzbid0
IGV4aXN0IGZvciB0aGUgb2JqZWN0LgorICAgIGlmICghaGFzTWV0YU1ldGhvZChxLCAibmF2aWdh
dGlvblBvbGljeUZvclVybChRVmFyaWFudCxRVmFyaWFudCxRVmFyaWFudCkiKSkKKyAgICAgICAg
cmV0dXJuIFF0UG9saWN5SW50ZXJmYWNlOjpVc2U7CisKKyAgICBRVmFyaWFudCByZXQ7CisgICAg
aWYgKFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QocSwgIm5hdmlnYXRpb25Qb2xpY3lGb3JVcmwi
LCBRX1JFVFVSTl9BUkcoUVZhcmlhbnQsIHJldCksIFFfQVJHKFFWYXJpYW50LCB1cmwpLCBRX0FS
RyhRVmFyaWFudCwgYnV0dG9uKSwgUV9BUkcoUVZhcmlhbnQsIFFWYXJpYW50KG1vZGlmaWVycykp
KSkKKyAgICAgICAgcmV0dXJuIHRvUG9saWN5QWN0aW9uKHN0YXRpY19jYXN0PFFRdWlja1dlYlZp
ZXc6Ok5hdmlnYXRpb25Qb2xpY3k+KHJldC50b0ludCgpKSk7CisgICAgcmV0dXJuIFF0UG9saWN5
SW50ZXJmYWNlOjpVc2U7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNldFBhZ2VQ
cm94eShRdFdlYlBhZ2VQcm94eSogcGFnZVByb3h5KQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3
KTsKKyAgICB0aGlzLT5wYWdlUHJveHkucmVzZXQocGFnZVByb3h5KTsKKyAgICBRT2JqZWN0Ojpj
b25uZWN0KHBhZ2VQcm94eSwgU0lHTkFMKHJlY2VpdmVkTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9i
amVjdChRVmFyaWFudE1hcCkpLCBxLCBTSUdOQUwobWVzc2FnZVJlY2VpdmVkKFFWYXJpYW50TWFw
KSkpOworfQorCitRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFFRdWlja0l0ZW0qIHBhcmVu
dCkKKyAgICA6IFFRdWlja0l0ZW0ocGFyZW50KQorICAgICwgZF9wdHIobmV3IFFRdWlja1dlYlZp
ZXdQcml2YXRlKQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5pbml0aWFsaXpl
KHRoaXMpOworICAgIGQtPmluaXRpYWxpemVUb3VjaCh0aGlzKTsKK30KKworUVF1aWNrV2ViVmll
dzo6UVF1aWNrV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmLCBRUXVpY2tJdGVtKiBwYXJlbnQpCisgICAgOiBRUXVpY2tJdGVtKHBhcmVu
dCkKKyAgICAsIGRfcHRyKG5ldyBRUXVpY2tXZWJWaWV3UHJpdmF0ZSkKK3sKKyAgICBRX0QoUVF1
aWNrV2ViVmlldyk7CisgICAgZC0+aW5pdGlhbGl6ZSh0aGlzLCBjb250ZXh0UmVmLCBwYWdlR3Jv
dXBSZWYpOworICAgIC8vIFVzZWQgYnkgV2ViS2l0VGVzdFJ1bm5lci4KKyAgICBkLT5zZXRVc2VU
cmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIodHJ1ZSk7Cit9CisKK1FRdWlja1dlYlZpZXc6On5R
UXVpY2tXZWJWaWV3KCkKK3sKK30KKworUVF1aWNrV2ViUGFnZSogUVF1aWNrV2ViVmlldzo6cGFn
ZSgpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBkLT5wYWdlVmlldy5k
YXRhKCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6bG9hZChjb25zdCBRVXJsJiB1cmwpCit7
CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPnBhZ2VQcm94eS0+bG9hZCh1cmwpOwor
fQorCit2b2lkIFFRdWlja1dlYlZpZXc6OnBvc3RNZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPnBhZ2VQcm94eS0+cG9zdE1l
c3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KG1lc3NhZ2UpOworfQorCitRVXJsIFFRdWlja1dlYlZp
ZXc6OnVybCgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJl
dHVybiBkLT5wYWdlUHJveHktPnVybCgpOworfQorCitpbnQgUVF1aWNrV2ViVmlldzo6bG9hZFBy
b2dyZXNzKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0
dXJuIGQtPnBhZ2VQcm94eS0+bG9hZFByb2dyZXNzKCk7Cit9CisKK1FTdHJpbmcgUVF1aWNrV2Vi
Vmlldzo6dGl0bGUoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAg
ICByZXR1cm4gZC0+cGFnZVByb3h5LT50aXRsZSgpOworfQorCitRV2ViTmF2aWdhdGlvbkNvbnRy
b2xsZXIqIFFRdWlja1dlYlZpZXc6Om5hdmlnYXRpb25Db250cm9sbGVyKCkgY29uc3QKK3sKKyAg
ICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgaWYgKCFkLT5uYXZpZ2F0aW9uQ29udHJv
bGxlcikKKyAgICAgICAgY29uc3RfY2FzdDxRUXVpY2tXZWJWaWV3UHJpdmF0ZSo+KGQpLT5uYXZp
Z2F0aW9uQ29udHJvbGxlciA9IG5ldyBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXIoZC0+cGFnZVBy
b3h5LmRhdGEoKSk7CisgICAgcmV0dXJuIGQtPm5hdmlnYXRpb25Db250cm9sbGVyOworfQorCitR
V2ViUHJlZmVyZW5jZXMqIFFRdWlja1dlYlZpZXc6OnByZWZlcmVuY2VzKCkgY29uc3QKK3sKKyAg
ICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+cHJl
ZmVyZW5jZXMoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQoY29u
c3QgUVJlY3RGJiBuZXdHZW9tZXRyeSwgY29uc3QgUVJlY3RGJiBvbGRHZW9tZXRyeSkKK3sKKyAg
ICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgUVF1aWNrSXRlbTo6Z2VvbWV0cnlDaGFuZ2VkKG5l
d0dlb21ldHJ5LCBvbGRHZW9tZXRyeSk7CisgICAgaWYgKG5ld0dlb21ldHJ5LnNpemUoKSAhPSBv
bGRHZW9tZXRyeS5zaXplKCkpIHsKKyAgICAgICAgaWYgKGQtPnVzZVRyYWRpdGlvbmFsRGVza3Rv
cEJlaGF2aW91cikgeworICAgICAgICAgICAgZC0+cGFnZVZpZXctPnNldFdpZHRoKG5ld0dlb21l
dHJ5LndpZHRoKCkpOworICAgICAgICAgICAgZC0+cGFnZVZpZXctPnNldEhlaWdodChuZXdHZW9t
ZXRyeS5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZC0+dXBkYXRlVmll
d3BvcnRTaXplKCk7CisgICAgfQorfQorCit2b2lkIFFRdWlja1dlYlZpZXc6OnRvdWNoRXZlbnQo
UVRvdWNoRXZlbnQqIGV2ZW50KQoreworICAgIGZvcmNlQWN0aXZlRm9jdXMoKTsKKyAgICBRUXVp
Y2tJdGVtOjp0b3VjaEV2ZW50KGV2ZW50KTsKK30KKworV0tQYWdlUmVmIFFRdWlja1dlYlZpZXc6
OnBhZ2VSZWYoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICBy
ZXR1cm4gZC0+cGFnZVByb3h5LT5wYWdlUmVmKCk7Cit9CisKKyNpbmNsdWRlICJtb2NfcXF1aWNr
d2Vidmlldy5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlNDQ4MjczMTJlYWMzYjcxNTc4ZGFkOTM4YTI5ZDVlYzNl
YjFkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXcuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgcXF1aWNrd2Vidmlld19oCisjZGVmaW5lIHFxdWlja3dlYnZpZXdfaAorCisjaW5jbHVk
ZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXF1aWNraXRlbS5o
PgorCitjbGFzcyBRUXVpY2tXZWJQYWdlOworY2xhc3MgUVF1aWNrV2ViVmlld1ByaXZhdGU7Citj
bGFzcyBRV2ViRG93bmxvYWRJdGVtOworY2xhc3MgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyOwor
Y2xhc3MgUVdlYlByZWZlcmVuY2VzOworCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFF0Vmll
d0ludGVyZmFjZTsKK30KKworbmFtZXNwYWNlIFdUUiB7CitjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7
Cit9CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLQ29udGV4dCogV0tDb250ZXh0UmVm
OwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQYWdlR3JvdXAqIFdLUGFnZUdyb3VwUmVm
OwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQYWdlKiBXS1BhZ2VSZWY7CisKK1FUX0JF
R0lOX05BTUVTUEFDRQorY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRVXJsOworUVRfRU5EX05BTUVT
UEFDRQorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3IDogcHVibGljIFFRdWlj
a0l0ZW0geworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQg
dGl0bGUgTk9USUZZIHRpdGxlQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFVcmwgdXJsIFJFQUQg
dXJsIE5PVElGWSB1cmxDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoaW50IGxvYWRQcm9ncmVzcyBS
RUFEIGxvYWRQcm9ncmVzcyBOT1RJRlkgbG9hZFByb2dyZXNzQ2hhbmdlZCkKKyAgICBRX1BST1BF
UlRZKFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciogbmF2aWdhdGlvbiBSRUFEIG5hdmlnYXRpb25D
b250cm9sbGVyIENPTlNUQU5UIEZJTkFMKQorICAgIFFfUFJPUEVSVFkoUVdlYlByZWZlcmVuY2Vz
KiBwcmVmZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5UIEZJTkFMKQorICAgIFFfUFJP
UEVSVFkoUVF1aWNrV2ViUGFnZSogcGFnZSBSRUFEIHBhZ2UgQ09OU1RBTlQgRklOQUwpCisgICAg
UV9FTlVNUyhOYXZpZ2F0aW9uUG9saWN5KQorICAgIFFfRU5VTVMoRXJyb3JUeXBlKQorcHVibGlj
OgorICAgIGVudW0gTmF2aWdhdGlvblBvbGljeSB7CisgICAgICAgIFVzZVBvbGljeSwKKyAgICAg
ICAgRG93bmxvYWRQb2xpY3ksCisgICAgICAgIElnbm9yZVBvbGljeQorICAgIH07CisKKyAgICBl
bnVtIEVycm9yVHlwZSB7CisgICAgICAgIEVuZ2luZUVycm9yLAorICAgICAgICBOZXR3b3JrRXJy
b3IsCisgICAgICAgIEh0dHBFcnJvciwKKyAgICAgICAgRG93bmxvYWRFcnJvcgorICAgIH07Cisg
ICAgUVF1aWNrV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKKyAgICB2aXJ0dWFsIH5R
UXVpY2tXZWJWaWV3KCk7CisKKyAgICBRVXJsIHVybCgpIGNvbnN0OworICAgIFFTdHJpbmcgdGl0
bGUoKSBjb25zdDsKKyAgICBpbnQgbG9hZFByb2dyZXNzKCkgY29uc3Q7CisKKyAgICBRV2ViTmF2
aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmlnYXRpb25Db250cm9sbGVyKCkgY29uc3Q7CisgICAgUVdl
YlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcygpIGNvbnN0OworICAgIFFRdWlja1dlYlBhZ2UqIHBh
Z2UoKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgIHZvaWQgbG9hZChjb25zdCBRVXJsJik7Cisg
ICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgUVN0cmluZyYpOworCitRX1NJR05BTFM6CisgICAg
dm9pZCB0aXRsZUNoYW5nZWQoY29uc3QgUVN0cmluZyYgdGl0bGUpOworICAgIHZvaWQgc3RhdHVz
QmFyTWVzc2FnZUNoYW5nZWQoY29uc3QgUVN0cmluZyYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2Fk
U3RhcnRlZCgpOworICAgIHZvaWQgbG9hZFN1Y2NlZWRlZCgpOworICAgIHZvaWQgbG9hZEZhaWxl
ZChRUXVpY2tXZWJWaWV3OjpFcnJvclR5cGUgZXJyb3JUeXBlLCBpbnQgZXJyb3JDb2RlLCBjb25z
dCBRVXJsJiB1cmwpOworICAgIHZvaWQgbG9hZFByb2dyZXNzQ2hhbmdlZChpbnQgcHJvZ3Jlc3Mp
OworICAgIHZvaWQgdXJsQ2hhbmdlZChjb25zdCBRVXJsJiB1cmwpOworICAgIHZvaWQgbWVzc2Fn
ZVJlY2VpdmVkKGNvbnN0IFFWYXJpYW50TWFwJiBtZXNzYWdlKTsKKyAgICB2b2lkIGRvd25sb2Fk
UmVxdWVzdGVkKFFXZWJEb3dubG9hZEl0ZW0qIGRvd25sb2FkSXRlbSk7CisgICAgdm9pZCBsaW5r
SG92ZXJlZChjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKKyAgICB2b2lk
IHZpZXdNb2RlQ2hhbmdlZCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdlb21l
dHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmLCBjb25zdCBRUmVjdEYmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpOworCitwcml2YXRlOgorICAgIFFfREVD
TEFSRV9QUklWQVRFKFFRdWlja1dlYlZpZXcpCisKKyAgICBRUXVpY2tXZWJWaWV3KFdLQ29udGV4
dFJlZiwgV0tQYWdlR3JvdXBSZWYsIFFRdWlja0l0ZW0qIHBhcmVudCA9IDApOworICAgIFdLUGFn
ZVJlZiBwYWdlUmVmKCkgY29uc3Q7CisKKyAgICBRX1BSSVZBVEVfU0xPVChkX2Z1bmMoKSwgdm9p
ZCBfcV92aWV3cG9ydFVwZGF0ZWQoKSk7CisgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZv
aWQgX3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpOwor
ICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX29uT3BlblBhbmVsRmlsZXNTZWxl
Y3RlZCgpKTsKKyAgICBRX1BSSVZBVEVfU0xPVChkX2Z1bmMoKSwgdm9pZCBfcV9vbk9wZW5QYW5l
bEZpbmlzaGVkKGludCByZXN1bHQpKTsKKyAgICBRX1BSSVZBVEVfU0xPVChkX2Z1bmMoKSwgdm9p
ZCBfcV9vblZpc2libGVDaGFuZ2VkKCkpOworICAgIC8vIEhpZGVzIFFPYmplY3Q6OmRfcHRyIGFs
bG93aW5nIHVzIHRvIHVzZSB0aGUgY29udmVuaWVuY2UgbWFjcm9zLgorICAgIFFTY29wZWRQb2lu
dGVyPFFRdWlja1dlYlZpZXdQcml2YXRlPiBkX3B0cjsKKworICAgIGZyaWVuZCBjbGFzcyBRdFdl
YlBhZ2VQcm94eTsKKyAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFZpZXdJbnRlcmZhY2U7Cisg
ICAgZnJpZW5kIGNsYXNzIFdUUjo6UGxhdGZvcm1XZWJWaWV3OworfTsKKworUU1MX0RFQ0xBUkVf
VFlQRShRUXVpY2tXZWJWaWV3KQorCisjZW5kaWYgLyogcXF1aWNrd2Vidmlld19oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMjk0NGI4ZGNjMjYzMmE3MWFiNDNkOTBlYzhhZDJjMGU4NzRhNWE3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3AuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBxcXVpY2t3
ZWJ2aWV3X3BfaAorI2RlZmluZSBxcXVpY2t3ZWJ2aWV3X3BfaAorCisjaW5jbHVkZSAiUXRQb2xp
Y3lJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJRdFZpZXdJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKyNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5o
IgorCisjaW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgorCisjaW5jbHVkZSA8UXRDb3JlL1FTY29w
ZWRQb2ludGVyPgorCitjbGFzcyBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXI7CitjbGFzcyBRdFdl
YlBhZ2VQcm94eTsKKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRRmlsZURpYWxvZzsKK1FU
X0VORF9OQU1FU1BBQ0UKKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlld1ByaXZh
dGUgOiBwdWJsaWMgV2ViS2l0OjpRdFBvbGljeUludGVyZmFjZSB7CisgICAgUV9ERUNMQVJFX1BV
QkxJQyhRUXVpY2tXZWJWaWV3KQorcHVibGljOgorICAgIFFRdWlja1dlYlZpZXdQcml2YXRlKCk7
CisgICAgdmlydHVhbCB+UVF1aWNrV2ViVmlld1ByaXZhdGUoKSB7IH0KKyAgICB2b2lkIHNldFBh
Z2VQcm94eShRdFdlYlBhZ2VQcm94eSopOworICAgIHZvaWQgaW5pdGlhbGl6ZShRUXVpY2tXZWJW
aWV3KiB2aWV3cG9ydCwgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYgPSAwLCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYgPSAwKTsKKyAgICB2b2lkIGluaXRpYWxpemVUb3VjaChRUXVpY2tXZWJW
aWV3KiB2aWV3cG9ydCk7CisgICAgdm9pZCBpbml0aWFsaXplRGVza3RvcChRUXVpY2tXZWJWaWV3
KiB2aWV3cG9ydCk7CisgICAgdm9pZCBlbmFibGVNb3VzZUV2ZW50cygpOworICAgIHZvaWQgZGlz
YWJsZU1vdXNlRXZlbnRzKCk7CisKKyAgICB2b2lkIGxvYWREaWRDb21taXQoKTsKKyAgICB2b2lk
IGNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBzY3Jv
bGxQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcyk7CisgICAgdm9pZCB1cGRhdGVW
aWV3cG9ydFNpemUoKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0Q29uc3RyYWludHMoKTsKKyAg
ICB2b2lkIHNldFVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cihib29sIGVuYWJsZSk7CisK
KyAgICBzdGF0aWMgUVF1aWNrV2ViVmlld1ByaXZhdGUgKmdldChRUXVpY2tXZWJWaWV3ICp2aWV3
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZpZXctPmRfcHRyLmRhdGEoKTsKKyAgICB9CisKKyAg
ICB2b2lkIF9xX3ZpZXdwb3J0VXBkYXRlZCgpOworICAgIHZvaWQgX3Ffdmlld3BvcnRUcmFqZWN0
b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJik7CisgICAgdm9pZCBfcV9vbk9wZW5QYW5l
bEZpbGVzU2VsZWN0ZWQoKTsKKyAgICB2b2lkIF9xX29uT3BlblBhbmVsRmluaXNoZWQoaW50IHJl
c3VsdCk7CisgICAgdm9pZCBfcV9vblZpc2libGVDaGFuZ2VkKCk7CisKKyAgICAvLyBRdFBvbGlj
eUludGVyZmFjZS4KKyAgICB2aXJ0dWFsIFF0UG9saWN5SW50ZXJmYWNlOjpQb2xpY3lBY3Rpb24g
bmF2aWdhdGlvblBvbGljeUZvclVSTChjb25zdCBRVXJsJiwgUXQ6Ok1vdXNlQnV0dG9uLCBRdDo6
S2V5Ym9hcmRNb2RpZmllcnMpOworCisgICAgdm9pZCBjaG9vc2VGaWxlcyhXS09wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUmVmLCBjb25zdCBRU3RyaW5nTGlzdCYgc2VsZWN0ZWRGaWxlTmFtZXMsIFdl
YktpdDo6UXRWaWV3SW50ZXJmYWNlOjpGaWxlQ2hvb3NlclR5cGUpOworICAgIHZvaWQgcnVuSmF2
YVNjcmlwdEFsZXJ0KGNvbnN0IFFTdHJpbmcmKTsKKyAgICBib29sIHJ1bkphdmFTY3JpcHRDb25m
aXJtKGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRU3RyaW5nIHJ1bkphdmFTY3JpcHRQcm9tcHQoY29u
c3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgYm9vbCYgb2spOworICAg
IHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0
QXJndW1lbnRzJiBhcmdzKTsKKworICAgIFFTY29wZWRQb2ludGVyPFFRdWlja1dlYlBhZ2U+IHBh
Z2VWaWV3OworICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlPiB2aWV3
SW50ZXJmYWNlOworICAgIFFTY29wZWRQb2ludGVyPFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZT4gaW50ZXJhY3Rpb25FbmdpbmU7CisKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2
aWV3cG9ydEFyZ3VtZW50czsKKworICAgIFFRdWlja1dlYlZpZXcqIHFfcHRyOworICAgIFFTY29w
ZWRQb2ludGVyPFF0V2ViUGFnZVByb3h5PiBwYWdlUHJveHk7CisKKyAgICBRV2ViTmF2aWdhdGlv
bkNvbnRyb2xsZXIqIG5hdmlnYXRpb25Db250cm9sbGVyOworICAgIGJvb2wgdXNlVHJhZGl0aW9u
YWxEZXNrdG9wQmVoYXZpb3VyOworICAgIFFGaWxlRGlhbG9nKiBmaWxlRGlhbG9nOworICAgIFdL
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYgb3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7Cit9Owor
CisjZW5kaWYgLyogcXF1aWNrd2Vidmlld19wX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkODFlMTE5NmQ5NzYwNTcxYWUyOTdiZTY4N2QyMzU3YmE0YmQyNzVmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgiCi0KLSNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgot
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFn
ZV9wLmgiCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5l
TW91c2VFdmVudD4KLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUXVpY2tDYW52YXM+
Ci0jaW5jbHVkZSA8UVNHRW5naW5lPgotI2luY2x1ZGUgPFFVcmw+Ci0KLVFUb3VjaFdlYlBhZ2U6
OlFUb3VjaFdlYlBhZ2UoUVF1aWNrSXRlbSogcGFyZW50KQotICAgIDogUVF1aWNrSXRlbShwYXJl
bnQpCi0gICAgLCBkKG5ldyBRVG91Y2hXZWJQYWdlUHJpdmF0ZSh0aGlzKSkKLXsKLSAgICBzZXRG
bGFnKEl0ZW1IYXNDb250ZW50cyk7Ci0KLSAgICAvLyBXZSBkbyB0aGUgdHJhbnNmb3JtIGZyb20g
dGhlIHRvcCBsZWZ0IHNvIHRoZSB2aWV3cG9ydCBjYW4gYXNzdW1lIHRoZSBwb3NpdGlvbiAwLCAw
Ci0gICAgLy8gaXMgYWx3YXlzIHdoZXJlIHJlbmRlcmluZyBzdGFydHMuCi0gICAgc2V0VHJhbnNm
b3JtT3JpZ2luKFRvcExlZnQpOwotICAgIGluaXRTY2VuZUdyYXBoQ29ubmVjdGlvbnMoKTsKLX0K
LQotdm9pZCBRVG91Y2hXZWJQYWdlOjppbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCkKLXsKLSAg
ICBpZiAoZC0+cGFpbnRpbmdJc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFjYW52YXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGQtPnBhaW50aW5nSXNJbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgaWYgKHNjZW5lR3JhcGhFbmdpbmUoKSkKLSAgICAgICAgZC0+X3Ffb25T
Y2VuZUdyYXBoSW5pdGlhbGl6ZWQoKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbm5lY3QoY2FudmFz
KCksIFNJR05BTChzY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKSksIHRoaXMsIFNMT1QoX3Ffb25TY2Vu
ZUdyYXBoSW5pdGlhbGl6ZWQoKSkpOwotfQotCi1RVG91Y2hXZWJQYWdlOjp+UVRvdWNoV2ViUGFn
ZSgpCi17Ci0gICAgZGVsZXRlIGQ7Ci19Ci0KLS8qISBccmVpbXAKLSovCi1ib29sIFFUb3VjaFdl
YlBhZ2U6OmV2ZW50KFFFdmVudCogZXYpCi17Ci0gICAgaWYgKGQtPnBhZ2VQcm94eS0+aGFuZGxl
RXZlbnQoZXYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUVF1aWNrSXRlbTo6
ZXZlbnQoZXYpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2U6OmtleVByZXNzRXZlbnQoUUtleUV2
ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUVRvdWNo
V2ViUGFnZTo6a2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+
ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2U6OmlucHV0TWV0aG9kRXZlbnQo
UUlucHV0TWV0aG9kRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0K
LQotdm9pZCBRVG91Y2hXZWJQYWdlOjpmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqIGV2ZW50KQot
ewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRVG91Y2hXZWJQYWdlOjpmb2N1
c091dEV2ZW50KFFGb2N1c0V2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7
Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6dG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQp
Ci17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2U6Omdl
b21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBjb25zdCBRUmVjdEYmIG9s
ZEdlb21ldHJ5KQotewotICAgIFFRdWlja0l0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRy
eSwgb2xkR2VvbWV0cnkpOwotICAgIGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0
cnkuc2l6ZSgpKQotICAgICAgICBkLT5wYWdlUHJveHktPnNldERyYXdpbmdBcmVhU2l6ZShuZXdH
ZW9tZXRyeS5zaXplKCkudG9TaXplKCkpOwotfQotCi1RVG91Y2hXZWJQYWdlUHJpdmF0ZTo6UVRv
dWNoV2ViUGFnZVByaXZhdGUoUVRvdWNoV2ViUGFnZSogdmlldykKLSAgICA6IHEodmlldykKLSAg
ICAsIHBhZ2VQcm94eSgwKQotICAgICwgbmF2aWdhdGlvbkNvbnRyb2xsZXIoMCkKLSAgICAsIHNn
VXBkYXRlUXVldWUodmlldykKLSAgICAsIHBhaW50aW5nSXNJbml0aWFsaXplZChmYWxzZSkKLXsK
LX0KLQotdm9pZCBRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2ViUGFnZVBy
b3h5KiBwYWdlUHJveHkpCi17Ci0gICAgQVNTRVJUKCF0aGlzLT5wYWdlUHJveHkpOwotICAgIEFT
U0VSVChwYWdlUHJveHkpOwotICAgIHRoaXMtPnBhZ2VQcm94eSA9IHBhZ2VQcm94eTsKLQotfQot
Ci1zdGF0aWMgZmxvYXQgY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkoY29uc3QgUVF1aWNrSXRlbSog
aXRlbSkKLXsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVybiAxLjA7Ci0KLSAgICBmbG9h
dCBvcGFjaXR5ID0gaXRlbS0+b3BhY2l0eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMC4wMSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gb3BhY2l0eSAqIGNvbXB1dGVFZmZlY3RpdmVP
cGFjaXR5KGl0ZW0tPnBhcmVudEl0ZW0oKSk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZVByaXZh
dGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKLXsKLSAgICBpZiAoIXEtPmlzVmlzaWJsZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHEtPml0ZW1U
cmFuc2Zvcm0oMCwgMCk7Ci0gICAgZmxvYXQgb3BhY2l0eSA9IGNvbXB1dGVFZmZlY3RpdmVPcGFj
aXR5KHEpOwotICAgIFFSZWN0RiBjbGlwUmVjdCA9IHEtPnBhcmVudEl0ZW0oKS0+bWFwUmVjdFRv
U2NlbmUocS0+cGFyZW50SXRlbSgpLT5ib3VuZGluZ1JlY3QoKSk7Ci0KLSAgICBnbEVuYWJsZShH
TF9TQ0lTU09SX1RFU1QpOwotICAgIGNvbnN0IGludCBsZWZ0ID0gY2xpcFJlY3QubGVmdCgpOwot
ICAgIGNvbnN0IGludCB3aWR0aCA9IGNsaXBSZWN0LndpZHRoKCk7Ci0gICAgY29uc3QgaW50IGJv
dHRvbSA9IHEtPmNhbnZhcygpLT5oZWlnaHQoKSAtIChjbGlwUmVjdC5ib3R0b20oKSArIDEpOwot
ICAgIGNvbnN0IGludCBoZWlnaHQgPSBjbGlwUmVjdC5oZWlnaHQoKTsKLQotICAgIGdsU2Npc3Nv
cihsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgcGFnZVByb3h5LT5yZW5kZXJU
b0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBvcGFjaXR5KTsKLSAgICBnbERpc2FibGUoR0xf
U0NJU1NPUl9URVNUKTsKLX0KLQotdm9pZCBRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6X3Ffb25BZnRl
clNjZW5lUmVuZGVyKCkKLXsKLSAgICAvLyBUT0RPOiBBbGxvdyBwYWludGluZyBiZWZvcmUgdGhl
IHNjZW5lIG9yIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNjZW5lIHdpdGggYW4gRkJPLgotICAgIHBh
aW50VG9DdXJyZW50R0xDb250ZXh0KCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZVByaXZhdGU6
Ol9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCkKLXsKLSAgICBRU0dFbmdpbmUqIGVuZ2luZSA9
IHEtPnNjZW5lR3JhcGhFbmdpbmUoKTsKLSAgICBRT2JqZWN0Ojpjb25uZWN0KGVuZ2luZSwgU0lH
TkFMKGFmdGVyUmVuZGVyaW5nKCkpLCBxLCBTTE9UKF9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpKSwg
UXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2U6Oml0ZW1DaGFu
Z2UoSXRlbUNoYW5nZSBjaGFuZ2UsIGNvbnN0IEl0ZW1DaGFuZ2VEYXRhICZkYXRhKQotewotICAg
IGlmIChjaGFuZ2UgPT0gSXRlbVNjZW5lQ2hhbmdlKQotICAgICAgICBpbml0U2NlbmVHcmFwaENv
bm5lY3Rpb25zKCk7Ci0gICAgUVF1aWNrSXRlbTo6aXRlbUNoYW5nZShjaGFuZ2UsIGRhdGEpOwot
fQotCi0jaW5jbHVkZSAibW9jX3F0b3VjaHdlYnBhZ2UuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTEyNzY4Nzk2MGY5MzJkZWZmNjk0YzYzZmVkMDY3ZTdhY2FkYjU3NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIHF0b3VjaHdlYnBhZ2VfaAotI2RlZmlu
ZSBxdG91Y2h3ZWJwYWdlX2gKLQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLQotI2luY2x1
ZGUgPFF0RGVjbGFyYXRpdmUvcXF1aWNraXRlbS5oPgotI2luY2x1ZGUgPFFTaGFyZWRQb2ludGVy
PgotCi1jbGFzcyBRVG91Y2hXZWJQYWdlUHJpdmF0ZTsKLWNsYXNzIFFXZWJOYXZpZ2F0aW9uQ29u
dHJvbGxlcjsKLWNsYXNzIFFXZWJQcmVmZXJlbmNlczsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1j
bGFzcyBRdFRvdWNoVmlld0ludGVyZmFjZTsKLX0KLQotY2xhc3MgUVdFQktJVF9FWFBPUlQgUVRv
dWNoV2ViUGFnZSA6IHB1YmxpYyBRUXVpY2tJdGVtIHsKLSAgICBRX09CSkVDVAotcHVibGljOgot
ICAgIFFUb3VjaFdlYlBhZ2UoUVF1aWNrSXRlbSogcGFyZW50ID0gMCk7Ci0KLSAgICB2aXJ0dWFs
IH5RVG91Y2hXZWJQYWdlKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZXZlbnQoUUV2ZW50Kik7Ci0K
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKTsK
LSAgICB2aXJ0dWFsIHZvaWQga2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCopOwotICAgIHZpcnR1
YWwgdm9pZCBpbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50Kik7Ci0gICAgdmlydHVh
bCB2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBmb2N1
c091dEV2ZW50KFFGb2N1c0V2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQoUVRv
dWNoRXZlbnQqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJl
Y3RGJiwgY29uc3QgUVJlY3RGJik7Ci0gICAgdmlydHVhbCB2b2lkIGl0ZW1DaGFuZ2UoSXRlbUNo
YW5nZSwgY29uc3QgSXRlbUNoYW5nZURhdGEmKTsKLQotcHJpdmF0ZToKLSAgICBRX1BSSVZBVEVf
U0xPVChkLCB2b2lkIF9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpKTsKLSAgICBRX1BSSVZBVEVfU0xP
VChkLCB2b2lkIF9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCkpOwotCi0gICAgdm9pZCBpbml0
U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7Ci0KLSAgICBRVG91Y2hXZWJQYWdlUHJpdmF0ZSogZDsK
LSAgICBmcmllbmQgY2xhc3MgUVRvdWNoV2ViVmlld1ByaXZhdGU7Ci0gICAgZnJpZW5kIGNsYXNz
IFdlYktpdDo6UXRUb3VjaFZpZXdJbnRlcmZhY2U7Ci19OwotCi0jZW5kaWYgLyogcXRvdWNod2Vi
cGFnZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0
b3VjaHdlYnBhZ2VfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3
ZWJwYWdlX3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFmOGJlNmU4ZGM0NzMy
YjFkNjM0MjQ4MWY0MGYxOGY3NGIzYjA1YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdl
YnBhZ2VfcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpZm5kZWYgcXRvdWNod2VicGFnZV9wX2gKLSNkZWZpbmUgcXRvdWNod2VicGFnZV9wX2gK
LQotI2luY2x1ZGUgIlF0U0dVcGRhdGVRdWV1ZS5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2Uu
aCIKLSNpbmNsdWRlICJxd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxRTWVu
dT4KLQotY2xhc3MgUVJlY3RGOwotY2xhc3MgUVNHTm9kZTsKLWNsYXNzIFFTdHJpbmc7Ci1jbGFz
cyBRVG91Y2hXZWJQYWdlOwotCi1jbGFzcyBRVG91Y2hXZWJQYWdlUHJpdmF0ZSB7Ci1wdWJsaWM6
Ci0gICAgUVRvdWNoV2ViUGFnZVByaXZhdGUoUVRvdWNoV2ViUGFnZSogdmlldyk7Ci0KLSAgICB2
b2lkIHNldFBhZ2VQcm94eShRdFdlYlBhZ2VQcm94eSopOwotCi0gICAgdm9pZCBfcV9vbkFmdGVy
U2NlbmVSZW5kZXIoKTsKLSAgICB2b2lkIF9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCk7Ci0g
ICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dCgpOwotCi0gICAgUVRvdWNoV2ViUGFnZSog
Y29uc3QgcTsKLSAgICBRdFdlYlBhZ2VQcm94eSogcGFnZVByb3h5OwotICAgIFFXZWJOYXZpZ2F0
aW9uQ29udHJvbGxlciogbmF2aWdhdGlvbkNvbnRyb2xsZXI7Ci0gICAgV2ViS2l0OjpRdFNHVXBk
YXRlUXVldWUgc2dVcGRhdGVRdWV1ZTsKLSAgICBib29sIHBhaW50aW5nSXNJbml0aWFsaXplZDsK
LX07Ci0KLSNlbmRpZiAvKiBxdG91Y2h3ZWJwYWdlX3BfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDNmN2ZmNDY5Y2M5ODk3NzU4Nzc1NmYxODg3ZDY1NTYwOWQ0MmQ5ZWMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgInF0b3VjaHdlYnZpZXcuaCIKLQotI2luY2x1ZGUgIlF0VG91Y2hWaWV3SW50ZXJmYWNl
LmgiCi0jaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdl
X3AuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlICJxd2VicHJlZmVy
ZW5jZXNfcC5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlByZWZl
cmVuY2VzLmgiCi0KLXZvaWQgUVRvdWNoV2ViVmlld1ByaXZhdGU6OmluaXQoUVRvdWNoV2ViVmll
dyogdmlld3BvcnQpCi17Ci0gICAgcGFnZVZpZXcucmVzZXQobmV3IFFUb3VjaFdlYlBhZ2Uodmll
d3BvcnQpKTsKLSAgICB2aWV3SW50ZXJmYWNlLnJlc2V0KG5ldyBXZWJLaXQ6OlF0VG91Y2hWaWV3
SW50ZXJmYWNlKHZpZXdwb3J0LCBwYWdlVmlldy5kYXRhKCkpKTsKLSAgICBpbnRlcmFjdGlvbkVu
Z2luZS5yZXNldChuZXcgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHZpZXdwb3J0LCBwYWdl
Vmlldy5kYXRhKCkpKTsKLSAgICBRVG91Y2hXZWJQYWdlUHJpdmF0ZSogY29uc3QgcGFnZVZpZXdQ
cml2YXRlID0gcGFnZVZpZXcuZGF0YSgpLT5kOwotICAgIHNldFBhZ2VQcm94eShuZXcgUXRXZWJQ
YWdlUHJveHkodmlld0ludGVyZmFjZS5kYXRhKCksIGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSkp
OwotICAgIHBhZ2VWaWV3UHJpdmF0ZS0+c2V0UGFnZVByb3h5KHBhZ2VQcm94eS5kYXRhKCkpOwot
ICAgIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OmdldChwYWdlUHJveHktPnByZWZlcmVuY2VzKCkp
LT5zZXRBdHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQsIHRydWUpOwotICAgIHBhZ2VQcm94eS0+aW5pdCgpOwotCi0gICAgUU9iamVj
dDo6Y29ubmVjdChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3cG9ydFVwZGF0
ZVJlcXVlc3RlZCgpKSwgdmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRVcGRhdGVkKCkpKTsKLSAg
ICBRT2JqZWN0Ojpjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZpZXdw
b3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKSwgdmlld3BvcnQsIFNM
T1QoX3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpKTsK
LX0KLQotdm9pZCBRVG91Y2hXZWJWaWV3UHJpdmF0ZTo6bG9hZERpZENvbW1pdCgpCi17Ci0gICAg
aW50ZXJhY3Rpb25FbmdpbmUtPnJlc2V0KCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlld1ByaXZh
dGU6OnNjcm9sbFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2ludCYgcG9zKQotewotICAgIGlu
dGVyYWN0aW9uRW5naW5lLT5wYWdlUG9zaXRpb25SZXF1ZXN0KHBvcyk7Ci19Ci0KLXZvaWQgUVRv
dWNoV2ViVmlld1ByaXZhdGU6Ol9xX3ZpZXdwb3J0VXBkYXRlZCgpCi17Ci0gICAgUV9RKFFUb3Vj
aFdlYlZpZXcpOwotICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVjdEluUGFnZVZpZXdDb29yZGlu
YXRlcyA9IHEtPm1hcFJlY3RUb0l0ZW0ocGFnZVZpZXcuZGF0YSgpLCBxLT5ib3VuZGluZ1JlY3Qo
KSkuaW50ZXJzZWN0ZWQocGFnZVZpZXctPmJvdW5kaW5nUmVjdCgpKTsKLSAgICBmbG9hdCBzY2Fs
ZSA9IHBhZ2VWaWV3LT5zY2FsZSgpOwotICAgIHBhZ2VQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0QW5kU2NhbGUodmlzaWJsZVJlY3RJblBhZ2VWaWV3Q29vcmRpbmF0ZXMsIHNjYWxlKTsKLX0K
LQotdm9pZCBRVG91Y2hXZWJWaWV3UHJpdmF0ZTo6X3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9y
Q2hhbmdlZChjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIHBhZ2VQcm94
eS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9y
KTsKLX0KLQotdm9pZCBRVG91Y2hXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlVmlld3BvcnRTaXplKCkK
LXsKLSAgICBRX1EoUVRvdWNoV2ViVmlldyk7Ci0gICAgUVNpemUgdmlld3BvcnRTaXplID0gcS0+
Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpOwotCi0gICAgaWYgKHZpZXdwb3J0U2l6ZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlBhZ2VQcm94eSogd2tQYWdlID0g
dG9JbXBsKHBhZ2VQcm94eS0+cGFnZVJlZigpKTsKLSAgICAvLyBMZXQgdGhlIFdlYlByb2Nlc3Mg
a25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNpemUsIHNvIHRoYXQKLSAgICAvLyBpdCBjYW4g
cmVzaXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5LgotICAgIHdrUGFnZS0+c2V0Vmlld3BvcnRT
aXplKHZpZXdwb3J0U2l6ZSk7Ci0gICAgdXBkYXRlVmlld3BvcnRDb25zdHJhaW50cygpOwotICAg
IF9xX3ZpZXdwb3J0VXBkYXRlZCgpOwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRlOjp1
cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCkKLXsKLSAgICBRX1EoUVRvdWNoV2ViVmlldyk7Ci0g
ICAgUVNpemUgYXZhaWxhYmxlU2l6ZSA9IHEtPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUo
KTsKLQotICAgIGlmIChhdmFpbGFibGVTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV2ViUGFnZVByb3h5KiB3a1BhZ2UgPSB0b0ltcGwocGFnZVByb3h5LT5wYWdlUmVmKCkp
OwotICAgIFdlYlByZWZlcmVuY2VzKiB3a1ByZWZzID0gd2tQYWdlLT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKTsKLQotICAgIC8vIEZJWE1FOiBSZW1vdmUgbGF0ZXI7IEhhcmRjb2RlIHNvbWUg
dmFsdWVzIGZvciBub3cgdG8gbWFrZSBzdXJlIHRoZSBEUEkgYWRqdXN0bWVudCBpcyBiZWluZyB0
ZXN0ZWQuCi0gICAgd2tQcmVmcy0+c2V0RGV2aWNlRFBJKDI0MCk7Ci0gICAgd2tQcmVmcy0+c2V0
RGV2aWNlV2lkdGgoNDgwKTsKLSAgICB3a1ByZWZzLT5zZXREZXZpY2VIZWlnaHQoNzIwKTsKLQot
ICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyID0gV2ViQ29yZTo6Y29tcHV0ZVZp
ZXdwb3J0QXR0cmlidXRlcyh2aWV3cG9ydEFyZ3VtZW50cywgd2tQcmVmcy0+bGF5b3V0RmFsbGJh
Y2tXaWR0aCgpLCB3a1ByZWZzLT5kZXZpY2VXaWR0aCgpLCB3a1ByZWZzLT5kZXZpY2VIZWlnaHQo
KSwgd2tQcmVmcy0+ZGV2aWNlRFBJKCksIGF2YWlsYWJsZVNpemUpOwotICAgIFdlYkNvcmU6OnJl
c3RyaWN0TWluaW11bVNjYWxlRmFjdG9yVG9WaWV3cG9ydFNpemUoYXR0ciwgYXZhaWxhYmxlU2l6
ZSk7Ci0gICAgV2ViQ29yZTo6cmVzdHJpY3RTY2FsZUZhY3RvclRvSW5pdGlhbFNjYWxlSWZOb3RV
c2VyU2NhbGFibGUoYXR0cik7Ci0KLSAgICBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OkNv
bnN0cmFpbnRzIG5ld0NvbnN0cmFpbnRzOwotICAgIG5ld0NvbnN0cmFpbnRzLmluaXRpYWxTY2Fs
ZSA9IGF0dHIuaW5pdGlhbFNjYWxlOwotICAgIG5ld0NvbnN0cmFpbnRzLm1pbmltdW1TY2FsZSA9
IGF0dHIubWluaW11bVNjYWxlOwotICAgIG5ld0NvbnN0cmFpbnRzLm1heGltdW1TY2FsZSA9IGF0
dHIubWF4aW11bVNjYWxlOwotICAgIG5ld0NvbnN0cmFpbnRzLmRldmljZVBpeGVsUmF0aW8gPSBh
dHRyLmRldmljZVBpeGVsUmF0aW87Ci0gICAgbmV3Q29uc3RyYWludHMuaXNVc2VyU2NhbGFibGUg
PSAhIWF0dHIudXNlclNjYWxhYmxlOwotICAgIGludGVyYWN0aW9uRW5naW5lLT5zZXRDb25zdHJh
aW50cyhuZXdDb25zdHJhaW50cyk7Ci0KLSAgICAvLyBPdmVyd3JpdGUgbWluaW11bSBzY2FsZSB2
YWx1ZSB3aXRoIGZpdC10by12aWV3IHZhbHVlLCB1bmxlc3MgdGhlIHRoZSBjb250ZW50IGF1dGhv
cgotICAgIC8vIGV4cGxpY2l0bHkgc2F5cyBuby4gTkI6IFdlIGNhbiBvbmx5IGRvIHRoaXMgd2hl
biB3ZSBrbm93IHdlIGhhdmUgYSB2YWxpZCBzaXplLCBpZS4KLSAgICAvLyBhZnRlciBpbml0aWFs
IGxheW91dCBoYXMgY29tcGxldGVkLgotfQotCi12b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRlOjpk
aWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHMmIGFyZ3MpCi17Ci0gICAgdmlld3BvcnRBcmd1bWVudHMgPSBhcmdzOwotICAgIHVwZGF0ZVZp
ZXdwb3J0Q29uc3RyYWludHMoKTsKLX0KLQotUVRvdWNoV2ViVmlldzo6UVRvdWNoV2ViVmlldyhR
UXVpY2tJdGVtKiBwYXJlbnQpCi0gICAgOiBRQmFzZVdlYlZpZXcoKihuZXcgUVRvdWNoV2ViVmll
d1ByaXZhdGUpLCBwYXJlbnQpCi17Ci0gICAgUV9EKFFUb3VjaFdlYlZpZXcpOwotICAgIGQtPmlu
aXQodGhpcyk7Ci0gICAgc2V0RmxhZ3MoUVF1aWNrSXRlbTo6SXRlbUNsaXBzQ2hpbGRyZW5Ub1No
YXBlKTsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTCh2aXNpYmxlQ2hhbmdlZCgpKSwgU0xPVChv
blZpc2libGVDaGFuZ2VkKCkpKTsKLX0KLQotUVRvdWNoV2ViVmlldzo6flFUb3VjaFdlYlZpZXco
KQotewotfQotCi1RVG91Y2hXZWJQYWdlKiBRVG91Y2hXZWJWaWV3OjpwYWdlKCkKLXsKLSAgICBR
X0QoUVRvdWNoV2ViVmlldyk7Ci0gICAgcmV0dXJuIGQtPnBhZ2VWaWV3LmRhdGEoKTsKLX0KLQot
dm9pZCBRVG91Y2hXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiBuZXdHZW9t
ZXRyeSwgY29uc3QgUVJlY3RGJiBvbGRHZW9tZXRyeSkKLXsKLSAgICBRX0QoUVRvdWNoV2ViVmll
dyk7Ci0gICAgUVF1aWNrSXRlbTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dlb21ldHJ5LCBvbGRHZW9t
ZXRyeSk7Ci0gICAgaWYgKG5ld0dlb21ldHJ5LnNpemUoKSAhPSBvbGRHZW9tZXRyeS5zaXplKCkp
Ci0gICAgICAgIGQtPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwotfQotCi12b2lkIFFUb3VjaFdlYlZp
ZXc6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQotewotICAgIGZvcmNlQWN0aXZlRm9j
dXMoKTsKLSAgICBRUXVpY2tJdGVtOjp0b3VjaEV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRVG91
Y2hXZWJWaWV3OjpvblZpc2libGVDaGFuZ2VkKCkKLXsKLSAgICBRX0QoUVRvdWNoV2ViVmlldyk7
Ci0gICAgV2ViUGFnZVByb3h5KiB3a1BhZ2UgPSB0b0ltcGwoZC0+cGFnZVByb3h5LT5wYWdlUmVm
KCkpOwotCi0gICAgd2tQYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3
SXNWaXNpYmxlKTsKLX0KLQotI2luY2x1ZGUgIm1vY19xdG91Y2h3ZWJ2aWV3LmNwcCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZmEwZjUzYzAyYzdmMDg3NzgzODRmZTNjOTc5MzQ0NzJh
ZGVkMDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxdG91Y2h3ZWJ2
aWV3X2gKLSNkZWZpbmUgcXRvdWNod2Vidmlld19oCi0KLSNpbmNsdWRlICJxYmFzZXdlYnZpZXcu
aCIKLSNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9x
cXVpY2tpdGVtLmg+Ci0KLWNsYXNzIFFUb3VjaEV2ZW50OwotY2xhc3MgUVRvdWNoV2ViUGFnZTsK
LWNsYXNzIFFUb3VjaFdlYlZpZXdQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNz
IFF0VG91Y2hWaWV3SW50ZXJmYWNlOwotfQotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRVG91Y2hX
ZWJWaWV3IDogcHVibGljIFFCYXNlV2ViVmlldwotewotICAgIFFfT0JKRUNUCi0gICAgUV9QUk9Q
RVJUWShRVG91Y2hXZWJQYWdlKiBwYWdlIFJFQUQgcGFnZSBDT05TVEFOVCBGSU5BTCkKLQotcHVi
bGljOgotICAgIFFUb3VjaFdlYlZpZXcoUVF1aWNrSXRlbSogcGFyZW50ID0gMCk7Ci0gICAgflFU
b3VjaFdlYlZpZXcoKTsKLQotICAgIFFUb3VjaFdlYlBhZ2UgKnBhZ2UoKTsKLQotcHJvdGVjdGVk
IFFfU0xPVFM6Ci0gICAgdm9pZCBvblZpc2libGVDaGFuZ2VkKCk7Ci0KLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYsIGNvbnN0IFFSZWN0
RiYpOwotICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVudCk7Ci0K
LXByaXZhdGU6Ci0gICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffdmlld3BvcnRV
cGRhdGVkKCkpOwotICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX3ZpZXdwb3J0
VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKTsKLQotICAgIGZyaWVuZCBj
bGFzcyBXZWJLaXQ6OlF0VG91Y2hWaWV3SW50ZXJmYWNlOwotICAgIFFfREVDTEFSRV9QUklWQVRF
KFFUb3VjaFdlYlZpZXcpCi19OwotCi1RTUxfREVDTEFSRV9UWVBFKFFUb3VjaFdlYlZpZXcpCi0K
LSNlbmRpZiAvKiBxdG91Y2h3ZWJ2aWV3X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXdfcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyOTAwZTFkMTRiZjNmNzM2NDgxNGY3MDJhMzEzMGRkZTI0NWUwYjg2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlld19wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxdG91Y2h3ZWJ2aWV3X3BfaAotI2RlZmlu
ZSBxdG91Y2h3ZWJ2aWV3X3BfaAotCi0jaW5jbHVkZSAiUXRUb3VjaFZpZXdJbnRlcmZhY2UuaCIK
LSNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIlF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZS5oIgotI2luY2x1ZGUgInFiYXNld2Vidmlld19wLmgiCi0jaW5jbHVkZSA8UVNj
b3BlZFBvaW50ZXI+Ci0KLWNsYXNzIFFUb3VjaFdlYlBhZ2U7Ci1jbGFzcyBRVG91Y2hXZWJWaWV3
OwotCi1jbGFzcyBRVG91Y2hXZWJWaWV3UHJpdmF0ZSA6IFFCYXNlV2ViVmlld1ByaXZhdGUKLXsK
LSAgICBRX0RFQ0xBUkVfUFVCTElDKFFUb3VjaFdlYlZpZXcpCi1wdWJsaWM6Ci0gICAgdm9pZCBp
bml0KFFUb3VjaFdlYlZpZXcqIHZpZXdwb3J0KTsKLQotICAgIHZvaWQgbG9hZERpZENvbW1pdCgp
OwotICAgIHZvaWQgc2Nyb2xsUG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBwb3MpOwot
ICAgIHZvaWQgX3Ffdmlld3BvcnRVcGRhdGVkKCk7Ci0gICAgdm9pZCBfcV92aWV3cG9ydFRyYWpl
Y3RvcnlWZWN0b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYmKTsKLSAgICB2b2lkIHVwZGF0ZVZpZXdw
b3J0U2l6ZSgpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnRDb25zdHJhaW50cygpOwotCi0gICAg
dm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHMmIGFyZ3MpOwotCi0gICAgUVNjb3BlZFBvaW50ZXI8UVRvdWNoV2ViUGFnZT4gcGFn
ZVZpZXc7Ci0gICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZT4g
dmlld0ludGVyZmFjZTsKLSAgICBRU2NvcGVkUG9pbnRlcjxRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU+IGludGVyYWN0aW9uRW5naW5lOwotCi0gICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHMgdmlld3BvcnRBcmd1bWVudHM7Ci19OwotCi0jZW5kaWYgLyogcXRvdWNod2Vidmlld19wX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29t
bW9udmlld3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy9jb21tb252aWV3dGVzdHMucHJvCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGQ3YzIyZWM0YzNkZGJkY2MyYmY1NDA3NmUyMDVk
OGYxMjZjNWFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL2Nv
bW1vbnZpZXd0ZXN0cy5wcm8KKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWluY2x1ZGUo
Li4vdGVzdHMucHJpKQotSEVBREVSUyArPSB3ZWJ2aWV3YWJzdHJhY3Rpb24uaAotU09VUkNFUyAr
PSB3ZWJ2aWV3YWJzdHJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy90c3RfY29tbW9udmlld3Rlc3RzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3Rz
L3RzdF9jb21tb252aWV3dGVzdHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NTcwYjBhYmQ0OWI1ZTk3YzJiNDFlYjI2YTA3MjVmMjQ5Y2RmNjdhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL3RzdF9jb21tb252aWV3dGVzdHMuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRl
IDxRU2NvcGVkUG9pbnRlcj4KLSNpbmNsdWRlIDxRU2lnbmFsU3B5PgotI2luY2x1ZGUgPFF0VGVz
dC9RdFRlc3Q+Ci0jaW5jbHVkZSAid2Vidmlld2Fic3RyYWN0aW9uLmgiCi0jaW5jbHVkZSAiLi4v
dXRpbC5oIgotCi1jbGFzcyB0c3RfQ29tbW9uVmlld1Rlc3RzIDogcHVibGljIFFPYmplY3Qgewot
ICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgdHN0X0NvbW1vblZpZXdUZXN0cygpOwotCi1wcml2
YXRlIHNsb3RzOgotICAgIHZvaWQgaW5pdCgpOwotICAgIHZvaWQgY2xlYW51cCgpOwotCi0gICAg
dm9pZCBiYXNlVXJsKCk7Ci0gICAgdm9pZCBsb2FkRW1wdHlVcmwoKTsKLSAgICB2b2lkIGxvYWRF
bXB0eVBhZ2VWaWV3VmlzaWJsZSgpOwotICAgIHZvaWQgbG9hZEVtcHR5UGFnZVZpZXdIaWRkZW4o
KTsKLSAgICB2b2lkIGxvYWROb25leGlzdGVudEZpbGVVcmwoKTsKLSAgICB2b2lkIGJhY2tBbmRG
b3J3YXJkKCk7Ci0gICAgdm9pZCByZWxvYWQoKTsKLSAgICB2b2lkIHN0b3AoKTsKLSAgICB2b2lk
IGxvYWRQcm9ncmVzcygpOwotCi0gICAgdm9pZCBzaG93KCk7Ci1wcml2YXRlOgotICAgIFFTY29w
ZWRQb2ludGVyPFdlYlZpZXdBYnN0cmFjdGlvbj4gdmlld0Fic3RyYWN0aW9uOwotfTsKLQotdHN0
X0NvbW1vblZpZXdUZXN0czo6dHN0X0NvbW1vblZpZXdUZXN0cygpCi17Ci0gICAgYWRkUXRXZWJQ
cm9jZXNzVG9QYXRoKCk7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6aW5pdCgpCi17
Ci0gICAgdmlld0Fic3RyYWN0aW9uLnJlc2V0KG5ldyBXZWJWaWV3QWJzdHJhY3Rpb24pOwotfQot
Ci12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmNsZWFudXAoKQotewotICAgIHZpZXdBYnN0cmFj
dGlvbi5yZXNldCgpOwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmJhc2VVcmwoKQot
ewotICAgIC8vIFRlc3QgdGhlIHVybCBpcyBpbiBhIHdlbGwgZGVmaW5lZCBzdGF0ZSB3aGVuIGlu
c3RhbmNpYXRpbmcgdGhlIHZpZXcsIGJ1dCBiZWZvcmUgbG9hZGluZyBhbnl0aGluZy4KLSAgICBR
VXJsIHVybDsKLSAgICBRVkVSSUZZKHZpZXdBYnN0cmFjdGlvbi0+dXJsKHVybCkpOwotICAgIFFW
RVJJRlkodXJsLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6bG9h
ZEVtcHR5VXJsKCkKLXsKLSAgICB2aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVybCgpKTsKLSAgICB2
aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVybChRTGF0aW4xU3RyaW5nKCIiKSkpOwotfQotCi12b2lk
IHRzdF9Db21tb25WaWV3VGVzdHM6OmxvYWRFbXB0eVBhZ2VWaWV3VmlzaWJsZSgpCi17Ci0gICAg
dmlld0Fic3RyYWN0aW9uLT5zaG93KCk7Ci0gICAgbG9hZEVtcHR5UGFnZVZpZXdIaWRkZW4oKTsK
LX0KLQotdm9pZCB0c3RfQ29tbW9uVmlld1Rlc3RzOjpsb2FkRW1wdHlQYWdlVmlld0hpZGRlbigp
Ci17Ci0gICAgUVNpZ25hbFNweSBsb2FkU3RhcnRlZFNweSh2aWV3QWJzdHJhY3Rpb24uZGF0YSgp
LCBTSUdOQUwobG9hZFN0YXJ0ZWQoKSkpOwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5sb2FkKFFV
cmw6OmZyb21Mb2NhbEZpbGUoUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9i
YXNpY19wYWdlLmh0bWwiKSkpOwotICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbCh2aWV3QWJzdHJh
Y3Rpb24uZGF0YSgpLCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSkpOwotCi0gICAgUUNPTVBBUkUo
bG9hZFN0YXJ0ZWRTcHkuc2l6ZSgpLCAxKTsKLX0KLQotdm9pZCB0c3RfQ29tbW9uVmlld1Rlc3Rz
Ojpsb2FkTm9uZXhpc3RlbnRGaWxlVXJsKCkKLXsKLSAgICBRU2lnbmFsU3B5IGxvYWRGYWlsZWRT
cHkodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdGFydGVkKCkpKTsKLQotICAg
IHZpZXdBYnN0cmFjdGlvbi0+bG9hZChRVXJsOjpmcm9tTG9jYWxGaWxlKFFMYXRpbjFTdHJpbmco
VEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvZmlsZV90aGF0X2RvZXNfbm90X2V4aXN0Lmh0bWwiKSkp
OwotICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbCh2aWV3QWJzdHJhY3Rpb24uZGF0YSgpLCBTSUdO
QUwobG9hZEZhaWxlZChRQmFzZVdlYlZpZXc6OkVycm9yVHlwZSwgaW50LCBRVXJsKSkpKTsKLQot
ICAgIFFDT01QQVJFKGxvYWRGYWlsZWRTcHkuc2l6ZSgpLCAxKTsKLX0KLQotdm9pZCB0c3RfQ29t
bW9uVmlld1Rlc3RzOjpiYWNrQW5kRm9yd2FyZCgpCi17Ci0gICAgdmlld0Fic3RyYWN0aW9uLT5s
b2FkKFFVcmw6OmZyb21Mb2NhbEZpbGUoUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIv
aHRtbC9iYXNpY19wYWdlLmh0bWwiKSkpOwotICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbCh2aWV3
QWJzdHJhY3Rpb24uZGF0YSgpLCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSkpOwotCi0gICAgUVVy
bCB1cmw7Ci0gICAgUVZFUklGWSh2aWV3QWJzdHJhY3Rpb24tPnVybCh1cmwpKTsKLSAgICBRQ09N
UEFSRSh1cmwucGF0aCgpLCBRTGF0aW4xU3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jh
c2ljX3BhZ2UuaHRtbCIpKTsKLQotICAgIHZpZXdBYnN0cmFjdGlvbi0+bG9hZChRVXJsOjpmcm9t
TG9jYWxGaWxlKFFMYXRpbjFTdHJpbmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFn
ZTIuaHRtbCIpKSk7Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdBYnN0cmFjdGlvbi5k
YXRhKCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7Ci0KLSAgICBRVkVSSUZZKHZpZXdBYnN0
cmFjdGlvbi0+dXJsKHVybCkpOwotICAgIFFDT01QQVJFKHVybC5wYXRoKCksIFFMYXRpbjFTdHJp
bmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZTIuaHRtbCIpKTsKLQotICAgIHZp
ZXdBYnN0cmFjdGlvbi0+Z29CYWNrKCk7Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdB
YnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7Ci0KLSAgICBRVkVS
SUZZKHZpZXdBYnN0cmFjdGlvbi0+dXJsKHVybCkpOwotICAgIFFDT01QQVJFKHVybC5wYXRoKCks
IFFMYXRpbjFTdHJpbmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZS5odG1sIikp
OwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5nb0ZvcndhcmQoKTsKLSAgICBRVkVSSUZZKHdhaXRG
b3JTaWduYWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSkp
KTsKLQotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51cmwodXJsKSk7Ci0gICAgUUNPTVBB
UkUodXJsLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNp
Y19wYWdlMi5odG1sIikpOwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OnJlbG9hZCgp
Ci17Ci0gICAgdmlld0Fic3RyYWN0aW9uLT5sb2FkKFFVcmw6OmZyb21Mb2NhbEZpbGUoUUxhdGlu
MVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNpY19wYWdlLmh0bWwiKSkpOwotICAg
IFFWRVJJRlkod2FpdEZvclNpZ25hbCh2aWV3QWJzdHJhY3Rpb24uZGF0YSgpLCBTSUdOQUwobG9h
ZFN1Y2NlZWRlZCgpKSkpOwotCi0gICAgUVVybCB1cmw7Ci0gICAgUVZFUklGWSh2aWV3QWJzdHJh
Y3Rpb24tPnVybCh1cmwpKTsKLSAgICBRQ09NUEFSRSh1cmwucGF0aCgpLCBRTGF0aW4xU3RyaW5n
KFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKTsKLQotICAgIHZpZXdB
YnN0cmFjdGlvbi0+cmVsb2FkKCk7Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdBYnN0
cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7Ci0KLSAgICBRVkVSSUZZ
KHZpZXdBYnN0cmFjdGlvbi0+dXJsKHVybCkpOwotICAgIFFDT01QQVJFKHVybC5wYXRoKCksIFFM
YXRpbjFTdHJpbmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZS5odG1sIikpOwot
fQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OnN0b3AoKQotewotICAgIHZpZXdBYnN0cmFj
dGlvbi0+bG9hZChRVXJsOjpmcm9tTG9jYWxGaWxlKFFMYXRpbjFTdHJpbmcoVEVTVFNfU09VUkNF
X0RJUiAiL2h0bWwvYmFzaWNfcGFnZS5odG1sIikpKTsKLSAgICBRVkVSSUZZKHdhaXRGb3JTaWdu
YWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSkpKTsKLQot
ICAgIFFVcmwgdXJsOwotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51cmwodXJsKSk7Ci0g
ICAgUUNPTVBBUkUodXJsLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIv
aHRtbC9iYXNpY19wYWdlLmh0bWwiKSk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyB0ZXN0IHNob3Vs
ZCBiZSBmbGVzaGVkIG91dC4gUmlnaHQgbm93IGl0J3MganVzdCBoZXJlIHRvIG1ha2Ugc3VyZSB3
ZSBkb24ndCBjcmFzaC4KLSAgICB2aWV3QWJzdHJhY3Rpb24tPnN0b3AoKTsKLX0KLQotdm9pZCB0
c3RfQ29tbW9uVmlld1Rlc3RzOjpsb2FkUHJvZ3Jlc3MoKQotewotICAgIFFDT01QQVJFKHZpZXdB
YnN0cmFjdGlvbi0+bG9hZFByb2dyZXNzKCksIDApOwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5s
b2FkKFFVcmw6OmZyb21Mb2NhbEZpbGUoUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIv
aHRtbC9iYXNpY19wYWdlLmh0bWwiKSkpOwotICAgIFFTaWduYWxTcHkgbG9hZFByb2dyZXNzQ2hh
bmdlZFNweSh2aWV3QWJzdHJhY3Rpb24uZGF0YSgpLCBTSUdOQUwobG9hZFByb2dyZXNzQ2hhbmdl
ZChpbnQpKSk7Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdBYnN0cmFjdGlvbi5kYXRh
KCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7Ci0KLSAgICBRVkVSSUZZKGxvYWRQcm9ncmVz
c0NoYW5nZWRTcHkuY291bnQoKSA+PSAxKTsKLQotICAgIFFDT01QQVJFKHZpZXdBYnN0cmFjdGlv
bi0+bG9hZFByb2dyZXNzKCksIDEwMCk7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6
c2hvdygpCi17Ci0gICAgLy8gVGhpcyBzaG91bGQgbm90IGNyYXNoLgotICAgIHZpZXdBYnN0cmFj
dGlvbi0+c2hvdygpOwotICAgIFFUZXN0OjpxV2FpdCgyMDApOwotICAgIHZpZXdBYnN0cmFjdGlv
bi0+aGlkZSgpOwotfQotCi1RVFdFQktJVF9BUElfVEVTVF9NQUlOKHRzdF9Db21tb25WaWV3VGVz
dHMpCi0KLSNpbmNsdWRlICJ0c3RfY29tbW9udmlld3Rlc3RzLm1vYyIKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vi
dmlld2Fic3RyYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvY29tbW9udmlld3Rlc3RzL3dlYnZpZXdhYnN0cmFjdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJiYWEzMzYzODc4MmI4OWY5ZDY1N2M0NjVhMzhlMDkzNDQ2ZGE1NDAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vidmlld2Fic3Ry
YWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jaW5jbHVkZSA8UUFjdGlvbj4KLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaW5j
bHVkZSA8UURlc2t0b3BXaWRnZXQ+Ci0jaW5jbHVkZSA8cXdlYm5hdmlnYXRpb25jb250cm9sbGVy
Lmg+Ci0jaW5jbHVkZSAid2Vidmlld2Fic3RyYWN0aW9uLmgiCi0KLVdlYlZpZXdBYnN0cmFjdGlv
bjo6V2ViVmlld0Fic3RyYWN0aW9uKCkKLSAgICA6IG1fdG91Y2hXZWJWaWV3V2luZG93KG5ldyBR
VG91Y2hXZWJWaWV3KQotICAgICwgbV9kZXNrdG9wV2ViVmlld1dpbmRvdyhuZXcgUURlc2t0b3BX
ZWJWaWV3KQotewotICAgIFFEZXNrdG9wV2lkZ2V0KiBjb25zdCBkZXNrdG9wV2lkZ2V0ID0gUUFw
cGxpY2F0aW9uOjpkZXNrdG9wKCk7Ci0gICAgY29uc3QgUVJlY3QgbWFpblNjcmVlbkdlb21ldHJ5
ID0gZGVza3RvcFdpZGdldC0+YXZhaWxhYmxlR2VvbWV0cnkoKTsKLQotICAgIFFSZWN0IHNjcmVl
bkhhbGYobWFpblNjcmVlbkdlb21ldHJ5LnRvcExlZnQoKSwgUVNpemUobWFpblNjcmVlbkdlb21l
dHJ5LndpZHRoKCkgLyAyLCBtYWluU2NyZWVuR2VvbWV0cnkuaGVpZ2h0KCkpKTsKLSAgICBtX3Rv
dWNoV2ViVmlld1dpbmRvdy5zZXRHZW9tZXRyeShzY3JlZW5IYWxmKTsKLSAgICBtX3RvdWNoV2Vi
Vmlld1dpbmRvdy5zZXRXaW5kb3dUaXRsZShRTGF0aW4xU3RyaW5nKCJUb3VjaFdlYlZpZXciKSk7
Ci0gICAgY29ubmVjdCh0b3VjaFdlYlZpZXcoKSwgU0lHTkFMKGxvYWRTdGFydGVkKCkpLCB0aGlz
LCBTTE9UKHRvdWNoVmlld0xvYWRTdGFydGVkKCkpKTsKLSAgICBjb25uZWN0KHRvdWNoV2ViVmll
dygpLCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSwgdGhpcywgU0xPVCh0b3VjaFZpZXdMb2FkU3Vj
Y2VlZGVkKCkpKTsKLSAgICBjb25uZWN0KHRvdWNoV2ViVmlldygpLCBTSUdOQUwobG9hZEZhaWxl
ZChRQmFzZVdlYlZpZXc6OkVycm9yVHlwZSwgaW50LCBjb25zdCBRVXJsJikpLCB0aGlzLCBTTE9U
KHRvdWNoVmlld0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgY29uc3Qg
UVVybCYpKSk7Ci0gICAgY29ubmVjdCh0b3VjaFdlYlZpZXcoKSwgU0lHTkFMKGxvYWRQcm9ncmVz
c0NoYW5nZWQoaW50KSksIHRoaXMsIFNMT1QodG91Y2hWaWV3TG9hZFByb2dyZXNzQ2hhbmdlZChp
bnQpKSk7Ci0KLSAgICBzY3JlZW5IYWxmLm1vdmVMZWZ0KHNjcmVlbkhhbGYucmlnaHQoKSk7Ci0g
ICAgbV9kZXNrdG9wV2ViVmlld1dpbmRvdy5zZXRHZW9tZXRyeShzY3JlZW5IYWxmKTsKLSAgICBt
X2Rlc2t0b3BXZWJWaWV3V2luZG93LnNldFdpbmRvd1RpdGxlKFFMYXRpbjFTdHJpbmcoIkRlc2t0
b3BXZWJWaWV3IikpOwotICAgIGNvbm5lY3QoZGVza3RvcFdlYlZpZXcoKSwgU0lHTkFMKGxvYWRT
dGFydGVkKCkpLCB0aGlzLCBTTE9UKGRlc2t0b3BWaWV3TG9hZFN0YXJ0ZWQoKSkpOwotICAgIGNv
bm5lY3QoZGVza3RvcFdlYlZpZXcoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSksIHRoaXMsIFNM
T1QoZGVza3RvcFZpZXdMb2FkU3VjY2VlZGVkKCkpKTsKLSAgICBjb25uZWN0KGRlc2t0b3BXZWJW
aWV3KCksIFNJR05BTChsb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlLCBpbnQsIGNv
bnN0IFFVcmwmKSksIHRoaXMsIFNMT1QoZGVza3RvcFZpZXdMb2FkRmFpbGVkKFFCYXNlV2ViVmll
dzo6RXJyb3JUeXBlLCBpbnQsIGNvbnN0IFFVcmwmKSkpOwotICAgIGNvbm5lY3QoZGVza3RvcFdl
YlZpZXcoKSwgU0lHTkFMKGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50KSksIHRoaXMsIFNMT1QoZGVz
a3RvcFZpZXdMb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpKTsKLX0KLQotdm9pZCBXZWJWaWV3QWJz
dHJhY3Rpb246OnNob3coKQotewotICAgIG1fdG91Y2hXZWJWaWV3V2luZG93LnNob3coKTsKLSAg
ICBtX2Rlc2t0b3BXZWJWaWV3V2luZG93LnNob3coKTsKLSAgICBRVGVzdDo6cVdhaXRGb3JXaW5k
b3dTaG93bigmbV9kZXNrdG9wV2ViVmlld1dpbmRvdyk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3Ry
YWN0aW9uOjpoaWRlKCkKLXsKLSAgICBtX3RvdWNoV2ViVmlld1dpbmRvdy5oaWRlKCk7Ci0gICAg
bV9kZXNrdG9wV2ViVmlld1dpbmRvdy5oaWRlKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0
aW9uOjpsb2FkKGNvbnN0IFFVcmwmIHVybCkKLXsKLSAgICB0b3VjaFdlYlZpZXcoKS0+bG9hZCh1
cmwpOwotICAgIGRlc2t0b3BXZWJWaWV3KCktPmxvYWQodXJsKTsKLX0KLQotYm9vbCBXZWJWaWV3
QWJzdHJhY3Rpb246OnVybChRVXJsJiB1cmwpIGNvbnN0Ci17Ci0gICAgY29uc3QgUVVybCB0b3Vj
aFZpZXdVcmwgPSB0b3VjaFdlYlZpZXcoKS0+dXJsKCk7Ci0gICAgY29uc3QgUVVybCBkZXNrdG9w
Vmlld1VybCA9IGRlc2t0b3BXZWJWaWV3KCktPnVybCgpOwotCi0gICAgaWYgKHRvdWNoVmlld1Vy
bCAhPSBkZXNrdG9wVmlld1VybCkgewotICAgICAgICBxV2FybmluZygpIDw8ICJXZWJWaWV3QWJz
dHJhY3Rpb246OnVybCgpOiB0aGUgVVJMcyBhcmUgbm90IGVxdWFscy4iOwotICAgICAgICBxV2Fy
bmluZygpIDw8ICJRVG91Y2hWaWV3J3MgdXJsID0gIiA8PCB0b3VjaFZpZXdVcmw7Ci0gICAgICAg
IHFXYXJuaW5nKCkgPDwgIlFEZXNrdG9wVmlldydzIHVybCA9ICIgPDwgZGVza3RvcFZpZXdVcmw7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB1cmwgPSB0b3VjaFZpZXdVcmw7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBXZWJWaWV3QWJzdHJhY3Rpb246OmxvYWRQcm9n
cmVzcygpIGNvbnN0Ci17Ci0gICAgaW50IHRvdWNoVmlld1Byb2dyZXNzID0gdG91Y2hXZWJWaWV3
KCktPmxvYWRQcm9ncmVzcygpOwotICAgIGludCBkZXNrdG9wVmlld1Byb2dyZXNzID0gZGVza3Rv
cFdlYlZpZXcoKS0+bG9hZFByb2dyZXNzKCk7Ci0KLSAgICBpZiAodG91Y2hWaWV3UHJvZ3Jlc3Mg
IT0gZGVza3RvcFZpZXdQcm9ncmVzcykgewotICAgICAgICBxV2FybmluZygpIDw8ICJXZWJWaWV3
QWJzdHJhY3Rpb246OmxvYWRQcm9ncmVzcygpOiB0aGUgbG9hZCBwcm9ncmVzcyBhcmUgZGlmZmVy
ZW50LiI7Ci0gICAgICAgIHFXYXJuaW5nKCkgPDwgIlFUb3VjaFZpZXcncyBsb2FkIHByb2dyZXNz
ID0gIiA8PCB0b3VjaFZpZXdQcm9ncmVzczsKLSAgICAgICAgcVdhcm5pbmcoKSA8PCAiUURlc2t0
b3BWaWV3J3MgbG9hZCBwcm9ncmVzcyA9ICIgPDwgZGVza3RvcFZpZXdQcm9ncmVzczsKLSAgICAg
ICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldHVybiB0b3VjaFZpZXdQcm9ncmVzczsKLX0K
LQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmdvQmFjaygpCi17Ci0gICAgdG91Y2hXZWJWaWV3
KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmdvQmFjaygpOwotICAgIGRlc2t0b3BXZWJWaWV3
KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmdvQmFjaygpOwotfQotCi12b2lkIFdlYlZpZXdB
YnN0cmFjdGlvbjo6Z29Gb3J3YXJkKCkKLXsKLSAgICB0b3VjaFdlYlZpZXcoKS0+bmF2aWdhdGlv
bkNvbnRyb2xsZXIoKS0+Z29Gb3J3YXJkKCk7Ci0gICAgZGVza3RvcFdlYlZpZXcoKS0+bmF2aWdh
dGlvbkNvbnRyb2xsZXIoKS0+Z29Gb3J3YXJkKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0
aW9uOjpzdG9wKCkKLXsKLSAgICB0b3VjaFdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIo
KS0+c3RvcCgpOwotICAgIGRlc2t0b3BXZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCkt
PnN0b3AoKTsKLX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OnJlbG9hZCgpCi17Ci0gICAg
dG91Y2hXZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCktPnJlbG9hZCgpOwotICAgIGRl
c2t0b3BXZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCktPnJlbG9hZCgpOwotfQotCi12
b2lkIFdlYlZpZXdBYnN0cmFjdGlvbjo6dG91Y2hWaWV3TG9hZFN0YXJ0ZWQoKQotewotICAgIG1f
dG91Y2hWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRTdGFydGVkKCkpXSsrOwotICAgIGlm
IChtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3RhcnRlZCgpKV0gPT0gbV9k
ZXNrdG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3RhcnRlZCgpKV0pCi0gICAgICAg
IGVtaXQgbG9hZFN0YXJ0ZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmRlc2t0
b3BWaWV3TG9hZFN0YXJ0ZWQoKQotewotICAgIG1fZGVza3RvcFZpZXdTaWduYWxzQ291bnRlcltT
SUdOQUwobG9hZFN0YXJ0ZWQoKSldKys7Ci0gICAgaWYgKG1fdG91Y2hWaWV3U2lnbmFsc0NvdW50
ZXJbU0lHTkFMKGxvYWRTdGFydGVkKCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJb
U0lHTkFMKGxvYWRTdGFydGVkKCkpXSkKLSAgICAgICAgZW1pdCBsb2FkU3RhcnRlZCgpOwotfQot
Ci12b2lkIFdlYlZpZXdBYnN0cmFjdGlvbjo6dG91Y2hWaWV3TG9hZFN1Y2NlZWRlZCgpCi17Ci0g
ICAgbV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKV0rKzsK
LSAgICBpZiAobV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN1Y2NlZWRlZCgp
KV0gPT0gbV9kZXNrdG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3VjY2VlZGVkKCkp
XSkKLSAgICAgICAgZW1pdCBsb2FkU3VjY2VlZGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3Ry
YWN0aW9uOjpkZXNrdG9wVmlld0xvYWRTdWNjZWVkZWQoKQotewotICAgIG1fZGVza3RvcFZpZXdT
aWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKV0rKzsKLSAgICBpZiAobV90b3Vj
aFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKV0gPT0gbV9kZXNrdG9w
Vmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3VjY2VlZGVkKCkpXSkKLSAgICAgICAgZW1p
dCBsb2FkU3VjY2VlZGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjp0b3VjaFZp
ZXdMb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlIGVycm9yVHlwZSwgaW50IGVycm9y
Q29kZSwgY29uc3QgUVVybCYgdXJsKQotewotICAgIG1fdG91Y2hWaWV3U2lnbmFsc0NvdW50ZXJb
U0lHTkFMKGxvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgUVVybCkpXSsr
OwotICAgIGlmIChtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkRmFpbGVkKFFC
YXNlV2ViVmlldzo6RXJyb3JUeXBlLCBpbnQsIFFVcmwpKV0gPT0gbV9kZXNrdG9wVmlld1NpZ25h
bHNDb3VudGVyW1NJR05BTChsb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlLCBpbnQs
IFFVcmwpKV0pCi0gICAgICAgIGVtaXQgbG9hZEZhaWxlZChzdGF0aWNfY2FzdDxRQmFzZVdlYlZp
ZXc6OkVycm9yVHlwZT4oZXJyb3JUeXBlKSwgZXJyb3JDb2RlLCB1cmwpOwotfQotCi12b2lkIFdl
YlZpZXdBYnN0cmFjdGlvbjo6ZGVza3RvcFZpZXdMb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJy
b3JUeXBlIGVycm9yVHlwZSwgaW50IGVycm9yQ29kZSwgY29uc3QgUVVybCYgdXJsKQotewotICAg
IG1fZGVza3RvcFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZEZhaWxlZChRQmFzZVdlYlZp
ZXc6OkVycm9yVHlwZSwgaW50LCBRVXJsKSldKys7Ci0gICAgaWYgKG1fdG91Y2hWaWV3U2lnbmFs
c0NvdW50ZXJbU0lHTkFMKGxvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwg
UVVybCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRGYWlsZWQo
UUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgUVVybCkpXSkKLSAgICAgICAgZW1pdCBsb2Fk
RmFpbGVkKGVycm9yVHlwZSwgZXJyb3JDb2RlLCB1cmwpOwotfQotCi12b2lkIFdlYlZpZXdBYnN0
cmFjdGlvbjo6dG91Y2hWaWV3TG9hZFByb2dyZXNzQ2hhbmdlZChpbnQgcHJvZ3Jlc3MpCi17Ci0g
ICAgbV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFByb2dyZXNzQ2hhbmdlZChp
bnQpKV0rKzsKLSAgICBpZiAobV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFBy
b2dyZXNzQ2hhbmdlZChpbnQpKV0gPT0gbV9kZXNrdG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05B
TChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpXSkKLSAgICAgICAgZW1pdCBsb2FkUHJvZ3Jlc3ND
aGFuZ2VkKHByb2dyZXNzKTsKLX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmRlc2t0b3BW
aWV3TG9hZFByb2dyZXNzQ2hhbmdlZChpbnQgcHJvZ3Jlc3MpCi17Ci0gICAgbV9kZXNrdG9wVmll
d1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpXSsrOwotICAg
IGlmIChtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkUHJvZ3Jlc3NDaGFuZ2Vk
KGludCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRQcm9ncmVz
c0NoYW5nZWQoaW50KSldKQotICAgICAgICBlbWl0IGxvYWRQcm9ncmVzc0NoYW5nZWQocHJvZ3Jl
c3MpOwotfQotCi1RVG91Y2hXZWJWaWV3KiBXZWJWaWV3QWJzdHJhY3Rpb246OnRvdWNoV2ViVmll
dygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFFUb3VjaFdlYlZpZXcqPihtX3Rv
dWNoV2ViVmlld1dpbmRvdy53ZWJWaWV3LmRhdGEoKSk7Ci19Ci0KLVFEZXNrdG9wV2ViVmlldyog
V2ViVmlld0Fic3RyYWN0aW9uOjpkZXNrdG9wV2ViVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFFEZXNrdG9wV2ViVmlldyo+KG1fZGVza3RvcFdlYlZpZXdXaW5kb3cud2Vi
Vmlldy5kYXRhKCkpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rpb24uaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL3dlYnZpZXdh
YnN0cmFjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmNiNDQxNjBhMzc1
NjM5MWQ5N2ZjNGJiODI2ODI1NjRkODQxZGEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
Y29tbW9udmlld3Rlc3RzL3dlYnZpZXdhYnN0cmFjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzYgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiB3ZWJ2aWV3YWJzdHJhY3Rp
b25faAotI2RlZmluZSB3ZWJ2aWV3YWJzdHJhY3Rpb25faAotCi0jaW5jbHVkZSA8UUhhc2g+Ci0j
aW5jbHVkZSA8UVVybD4KLSNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgotI2luY2x1ZGUgPHF0b3Vj
aHdlYnBhZ2UuaD4KLSNpbmNsdWRlIDxxdG91Y2h3ZWJ2aWV3Lmg+Ci0jaW5jbHVkZSA8cWRlc2t0
b3B3ZWJ2aWV3Lmg+Ci0jaW5jbHVkZSAiLi4vdGVzdHdpbmRvdy5oIgotCi1jbGFzcyBXZWJWaWV3
QWJzdHJhY3Rpb24gOiBwdWJsaWMgUU9iamVjdAotewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0g
ICAgV2ViVmlld0Fic3RyYWN0aW9uKCk7Ci0KLSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lkIGhp
ZGUoKTsKLQotICAgIHZvaWQgbG9hZChjb25zdCBRVXJsJik7Ci0gICAgYm9vbCB1cmwoUVVybCYp
IGNvbnN0OwotICAgIGludCBsb2FkUHJvZ3Jlc3MoKSBjb25zdDsKLQotICAgIHZvaWQgZ29CYWNr
KCk7Ci0gICAgdm9pZCBnb0ZvcndhcmQoKTsKLSAgICB2b2lkIHN0b3AoKTsKLSAgICB2b2lkIHJl
bG9hZCgpOwotCi1RX1NJR05BTFM6Ci0gICAgdm9pZCBsb2FkU3RhcnRlZCgpOwotICAgIHZvaWQg
bG9hZFN1Y2NlZWRlZCgpOwotICAgIHZvaWQgbG9hZEZhaWxlZChRQmFzZVdlYlZpZXc6OkVycm9y
VHlwZSwgaW50LCBjb25zdCBRVXJsJik7Ci0gICAgdm9pZCBsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGlu
dCk7Ci0KLXByaXZhdGUgUV9TTE9UUzoKLSAgICB2b2lkIHRvdWNoVmlld0xvYWRTdGFydGVkKCk7
Ci0gICAgdm9pZCBkZXNrdG9wVmlld0xvYWRTdGFydGVkKCk7Ci0gICAgdm9pZCB0b3VjaFZpZXdM
b2FkU3VjY2VlZGVkKCk7Ci0gICAgdm9pZCBkZXNrdG9wVmlld0xvYWRTdWNjZWVkZWQoKTsKLSAg
ICB2b2lkIHRvdWNoVmlld0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwg
Y29uc3QgUVVybCYpOwotICAgIHZvaWQgZGVza3RvcFZpZXdMb2FkRmFpbGVkKFFCYXNlV2ViVmll
dzo6RXJyb3JUeXBlLCBpbnQsIGNvbnN0IFFVcmwmKTsKLSAgICB2b2lkIHRvdWNoVmlld0xvYWRQ
cm9ncmVzc0NoYW5nZWQoaW50KTsKLSAgICB2b2lkIGRlc2t0b3BWaWV3TG9hZFByb2dyZXNzQ2hh
bmdlZChpbnQpOwotCi1wcml2YXRlOgotICAgIFFUb3VjaFdlYlZpZXcqIHRvdWNoV2ViVmlldygp
IGNvbnN0OwotICAgIFFEZXNrdG9wV2ViVmlldyogZGVza3RvcFdlYlZpZXcoKSBjb25zdDsKLQot
ICAgIFRlc3RXaW5kb3cgbV90b3VjaFdlYlZpZXdXaW5kb3c7Ci0gICAgUUhhc2g8Y29uc3QgY2hh
ciAqLCB1bnNpZ25lZCBpbnQ+IG1fdG91Y2hWaWV3U2lnbmFsc0NvdW50ZXI7Ci0KLSAgICBUZXN0
V2luZG93IG1fZGVza3RvcFdlYlZpZXdXaW5kb3c7Ci0gICAgUUhhc2g8Y29uc3QgY2hhciAqLCB1
bnNpZ25lZCBpbnQ+IG1fZGVza3RvcFZpZXdTaWduYWxzQ291bnRlcjsKLX07Ci0KLSNlbmRpZiAv
KiB3ZWJ2aWV3YWJzdHJhY3Rpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xZGVza3RvcHdlYnZpZXcvcWRlc2t0b3B3ZWJ2aWV3LnBybyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcWRlc2t0b3B3ZWJ2aWV3L3Fk
ZXNrdG9wd2Vidmlldy5wcm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OWM3ZjQ5
MzhjYjE1MTBlZWZlZmFlZmNlMzE2NjNjMDk3ZjA1NDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xZGVza3RvcHdlYnZpZXcvcWRlc2t0b3B3ZWJ2aWV3LnBybworKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLWluY2x1ZGUoLi4vdGVzdHMucHJpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xZGVza3RvcHdlYnZpZXcvdHN0X3FkZXNrdG9w
d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNr
dG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzMyNzQyMzk3MjcyMzU5MjAyYzM3NjYzMjRmOTIxY2E5MDE0NDk0Zi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwot
Ci0jaW5jbHVkZSA8UVNjb3BlZFBvaW50ZXI+Ci0jaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KLSNp
bmNsdWRlIDxxZGVza3RvcHdlYnZpZXcuaD4KLSNpbmNsdWRlIDxxd2VibmF2aWdhdGlvbmNvbnRy
b2xsZXIuaD4KLSNpbmNsdWRlICIuLi90ZXN0d2luZG93LmgiCi0jaW5jbHVkZSAiLi4vdXRpbC5o
IgotCi1jbGFzcyB0c3RfUURlc2t0b3BXZWJWaWV3IDogcHVibGljIFFPYmplY3QgewotICAgIFFf
T0JKRUNUCi1wdWJsaWM6Ci0gICAgdHN0X1FEZXNrdG9wV2ViVmlldygpOwotCi1wcml2YXRlIHNs
b3RzOgotICAgIHZvaWQgaW5pdCgpOwotICAgIHZvaWQgY2xlYW51cCgpOwotCi0gICAgdm9pZCBu
YXZpZ2F0aW9uU3RhdHVzQXRTdGFydHVwKCk7Ci0gICAgdm9pZCBzdG9wRW5hYmxlZEFmdGVyTG9h
ZFN0YXJ0ZWQoKTsKLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgUURlc2t0b3BXZWJWaWV3KiB3ZWJW
aWV3KCkgY29uc3Q7Ci0gICAgUVNjb3BlZFBvaW50ZXI8VGVzdFdpbmRvdz4gbV93aW5kb3c7Ci19
OwotCi10c3RfUURlc2t0b3BXZWJWaWV3Ojp0c3RfUURlc2t0b3BXZWJWaWV3KCkKLXsKLSAgICBh
ZGRRdFdlYlByb2Nlc3NUb1BhdGgoKTsKLX0KLQotdm9pZCB0c3RfUURlc2t0b3BXZWJWaWV3Ojpp
bml0KCkKLXsKLSAgICBtX3dpbmRvdy5yZXNldChuZXcgVGVzdFdpbmRvdyhuZXcgUURlc2t0b3BX
ZWJWaWV3KCkpKTsKLX0KLQotdm9pZCB0c3RfUURlc2t0b3BXZWJWaWV3OjpjbGVhbnVwKCkKLXsK
LSAgICBtX3dpbmRvdy5yZXNldCgpOwotfQotCi1pbmxpbmUgUURlc2t0b3BXZWJWaWV3KiB0c3Rf
UURlc2t0b3BXZWJWaWV3Ojp3ZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UURlc2t0b3BXZWJWaWV3Kj4obV93aW5kb3ctPndlYlZpZXcuZGF0YSgpKTsKLX0KLQotdm9p
ZCB0c3RfUURlc2t0b3BXZWJWaWV3OjpuYXZpZ2F0aW9uU3RhdHVzQXRTdGFydHVwKCkKLXsKLSAg
ICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmNhbkdvQmFjaygp
LCBmYWxzZSk7Ci0KLSAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVy
KCktPmNhbkdvRm9yd2FyZCgpLCBmYWxzZSk7Ci0KLSAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5h
dmlnYXRpb25Db250cm9sbGVyKCktPmNhblN0b3AoKSwgZmFsc2UpOwotCi0gICAgUUNPTVBBUkUo
d2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5SZWxvYWQoKSwgZmFsc2UpOwot
fQotCi1jbGFzcyBMb2FkU3RhcnRlZENhdGNoZXIgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9P
QkpFQ1QKLXB1YmxpYzoKLSAgICBMb2FkU3RhcnRlZENhdGNoZXIoUURlc2t0b3BXZWJWaWV3KiB3
ZWJWaWV3KQotICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgY29u
bmVjdChtX3dlYlZpZXcsIFNJR05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChvbkxvYWRT
dGFydGVkKCkpKTsKLSAgICB9Ci0KLXB1YmxpYyBzbG90czoKLSAgICB2b2lkIG9uTG9hZFN0YXJ0
ZWQoKQotICAgIHsKLSAgICAgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZCh0aGlzLCAiZmlu
aXNoZWQiLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci0KLSAgICAgICAgUUNPTVBBUkUobV93ZWJW
aWV3LT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5TdG9wKCksIHRydWUpOwotICAgIH0KLQot
c2lnbmFsczoKLSAgICB2b2lkIGZpbmlzaGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgUURlc2t0b3BX
ZWJWaWV3KiBtX3dlYlZpZXc7Ci19OwotCi12b2lkIHRzdF9RRGVza3RvcFdlYlZpZXc6OnN0b3BF
bmFibGVkQWZ0ZXJMb2FkU3RhcnRlZCgpCi17Ci0gICAgUUNPTVBBUkUod2ViVmlldygpLT5uYXZp
Z2F0aW9uQ29udHJvbGxlcigpLT5jYW5TdG9wKCksIGZhbHNlKTsKLQotICAgIExvYWRTdGFydGVk
Q2F0Y2hlciBjYXRjaGVyKHdlYlZpZXcoKSk7Ci0gICAgd2ViVmlldygpLT5sb2FkKFFVcmw6OmZy
b21Mb2NhbEZpbGUoUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNpY19w
YWdlLmh0bWwiKSkpOwotICAgIHdhaXRGb3JTaWduYWwoJmNhdGNoZXIsIFNJR05BTChmaW5pc2hl
ZCgpKSk7Ci0KLSAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCkt
PmNhblN0b3AoKSwgdHJ1ZSk7Ci0KLSAgICB3YWl0Rm9yU2lnbmFsKHdlYlZpZXcoKSwgU0lHTkFM
KGxvYWRTdWNjZWVkZWQoKSkpOwotfQotCi1RVFdFQktJVF9BUElfVEVTVF9NQUlOKHRzdF9RRGVz
a3RvcFdlYlZpZXcpCi0KLSNpbmNsdWRlICJ0c3RfcWRlc2t0b3B3ZWJ2aWV3Lm1vYyIKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9E
ZXNrdG9wV2ViVmlldy90c3RfZG93bmxvYWQucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfZG93bmxvYWQucW1sCmlu
ZGV4IGViZjY0ZDM0YWM5YTU4OTY3NGJjNjFkNmJhYWZjMjhmNjE1ZmMwYjEuLmQ0N2FkNzIxODY4
NmM4MGZiMGIyNjRiZjZhOTE0ZjMwMmQ2NzY1YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2Rvd25s
b2FkLnFtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9kb3dubG9hZC5xbWwKQEAgLTEsNiArMSw3IEBACiBpbXBv
cnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCitp
bXBvcnQgUXRXZWJLaXRUZXN0IDEuMAogCiBEZXNrdG9wV2ViVmlldyB7CiAgICAgaWQ6IHdlYlZp
ZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1s
dGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xpbmtIb3ZlcmVkLnFtbCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xpbmtI
b3ZlcmVkLnFtbAppbmRleCA2YmQ5YTYzMDZmMGE5ZGM3MzgyZjhhNGRlYTcwMTI0Mzg2NzdiYzIz
Li45OTY3MmJmNzkxZTA0NmIxMmFiMWZiYzE2MDVkZTU3NWRmZDdjOWJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJW
aWV3L3RzdF9saW5rSG92ZXJlZC5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbGlua0hvdmVyZWQucW1sCkBA
IC0xLDYgKzEsNyBAQAogaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1w
b3J0IFF0V2ViS2l0IDMuMAoraW1wb3J0IFF0V2ViS2l0VGVzdCAxLjAKIAogRGVza3RvcFdlYlZp
ZXcgewogICAgIGlkOiB3ZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkRmFpbC5xbWwg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BX
ZWJWaWV3L3RzdF9sb2FkRmFpbC5xbWwKaW5kZXggOTgyZjUzNDgwZjFkMWE4ZDRlZTc1NjJkYzA5
YWFiMmNiMTE5OWQwOS4uMDUwMTg2OTUwNWU5MjRmNGViMmMwYTdiMGZmODc3NWQ4ZDA1OGJmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0
cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZEZhaWwucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRGYWls
LnFtbApAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAx
LjAKIGltcG9ydCBRdFdlYktpdCAzLjAKK2ltcG9ydCBRdFdlYktpdFRlc3QgMS4wCiAKIERlc2t0
b3BXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFBy
b2dyZXNzLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzcy5xbWwKaW5kZXggYjJiMDE4MzU3MGNi
ZDU1OGEwNDViZGY1Y2EyZGE4NTE5YjUzODRkZC4uYTk4N2I1ZGY2MDg2NzNjNzllNGM4MDYyYWNi
MjA3NTAyMjQ2Zjk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFByb2dyZXNzLnFtbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BX
ZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1sCkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IFF0UXVp
Y2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0IDMuMAoraW1wb3J0IFF0
V2ViS2l0VGVzdCAxLjAKIAogRGVza3RvcFdlYlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rl
c2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWduYWwucW1sIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFBy
b2dyZXNzU2lnbmFsLnFtbAppbmRleCAwZDk0OTZhM2IxMDViYzNlMDRkNzc3NzNhMGMyOTE4NTFh
OWQ1NmExLi41NjIyMmNiNDY1NWYzYTVmZTYzMWNmMjU5YWIxZWVmM2NhNWZmZTlkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0
b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWduYWwucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQ
cm9ncmVzc1NpZ25hbC5xbWwKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgUXRRdWljayAyLjAKIGlt
cG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCitpbXBvcnQgUXRXZWJLaXRUZXN0
IDEuMAogCiBEZXNrdG9wV2ViVmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZp
ZXcvdHN0X2xvYWRaZXJvU2l6ZVZpZXcucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFplcm9TaXplVmlldy5x
bWwKaW5kZXggN2NlMjYyZTczODViZGE3YmI3M2I0YTBkNzA1N2JmODFmZjYwZWQzOS4uNTM2NjI3
YmYyNTliN2NhZTkyNWMzOTBjNWU5NDJhYzA0Y2ZhOTI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3Rf
bG9hZFplcm9TaXplVmlldy5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFplcm9TaXplVmlldy5xbWwK
QEAgLTEsNiArMSw3IEBACiBpbXBvcnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4wCiBp
bXBvcnQgUXRXZWJLaXQgMy4wCitpbXBvcnQgUXRXZWJLaXRUZXN0IDEuMAogCiBEZXNrdG9wV2Vi
VmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5x
bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0
b3BXZWJWaWV3L3RzdF9tZXNzYWdpbmcucW1sCmluZGV4IGRlYjFjNTBkZDkzYjMxODIyMmY4Mjg4
OTBlNzVkZmQ0ODA4NzRkOWEuLjRjZjFjMzA4MTg4MmMxYTVlMjM2ZmQzNWQ4YTQ3MjhhZjdjOTli
OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1s
dGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5xbWwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbWVz
c2FnaW5nLnFtbApAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0
VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKK2ltcG9ydCBRdFdlYktpdFRlc3QgMS4wCiAK
IEl0ZW0gewogICAgIERlc2t0b3BXZWJWaWV3IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X25hdmln
YXRpb25Qb2xpY3lGb3JVcmwucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbmF2aWdhdGlvblBvbGljeUZvclVybC5x
bWwKaW5kZXggMDRlMWQ3YWQ5ZjZkMjgwZTkwNGFjY2I5NjgxZDhjOGEwMmI2ZmM5MS4uM2MwZDA4
NjI2NDQ5OGViNDliYWIxOGRjZTJiODA3ZDljNWZjOTc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3Rf
bmF2aWdhdGlvblBvbGljeUZvclVybC5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbmF2aWdhdGlvblBvbGlj
eUZvclVybC5xbWwKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgUXRRdWljayAyLjAKIGltcG9ydCBR
dFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCitpbXBvcnQgUXRXZWJLaXRUZXN0IDEuMAog
CiBJdGVtIHsKICAgICBEZXNrdG9wV2ViVmlldyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9wcmVm
ZXJlbmNlcy5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9wcmVmZXJlbmNlcy5xbWwKaW5kZXggMzFlZTRjZGQzZDU0
Y2Q3ZDk3ZWUzNmQyMWYxMmQ5MzFkNGZhMmEyOS4uODgzNTYzZDJiN2U5MmY3ODY5MjNiY2U2ZmMx
MzZkMmFlZDkxYzQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfcHJlZmVyZW5jZXMucW1sCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdl
YlZpZXcvdHN0X3ByZWZlcmVuY2VzLnFtbApAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBRdFF1aWNr
IDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKK2ltcG9ydCBRdFdl
YktpdFRlc3QgMS4wCiAKIERlc2t0b3BXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNr
dG9wV2ViVmlldy90c3RfcHJvcGVydGllcy5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9wcm9wZXJ0aWVzLnFtbApp
bmRleCBjYmQ0YzNhODMwNTM4NjJkZmI1MGNhNTM5ZDJmNjNjNDIzMzBiYzViLi41ZGE4MjQxNTBh
NzEzN2MyYTExNWZkMjA0NzJjOTlhZGQ2OWJkMzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9wcm9w
ZXJ0aWVzLnFtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Ft
bHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9wcm9wZXJ0aWVzLnFtbApAQCAtMSw2ICsxLDcgQEAK
IGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAz
LjAKK2ltcG9ydCBRdFdlYktpdFRlc3QgMS4wCiAKIERlc2t0b3BXZWJWaWV3IHsKICAgICBpZDog
d2ViVmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0
cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWQucW1sIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWQucW1sCmlu
ZGV4IDA0ZmYzNDQ0ZjMyZjNiMjc4NDMzMDdiZDViYzY0MzQ4YzM3YzUwYTYuLjEyM2Y0MzU2ODYz
YTdiMTIwZDcxZDYyODc4ZGU1NzhjYjFiM2ZlMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkLnFt
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1Rv
dWNoV2ViVmlldy90c3RfbG9hZC5xbWwKQEAgLTIsNyArMiw3IEBAIGltcG9ydCBRdFF1aWNrIDIu
MAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKIAotVG91Y2hXZWJWaWV3
IHsKK1dlYlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CiAgICAgaGVpZ2h0OiA2MDAKICAgICB3aWR0
aDogNDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3Rz
L3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZEZhaWwucW1sIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRGYWls
LnFtbAppbmRleCBkMGMyOTY3MjA1NDI2YzdjZmQ0NDhiODY3OTFmNzRlNWJiOTU3ZTBmLi43NTM5
ZWJmNmY4MWJjYjNiZjlkYzFhOTM5MTY1NjdjOTIwN2UzZDFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3Rf
bG9hZEZhaWwucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkRmFpbC5xbWwKQEAgLTIsNyArMiw3IEBAIGlt
cG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAK
IAotVG91Y2hXZWJWaWV3IHsKK1dlYlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CiAKICAgICBwcm9w
ZXJ0eSB2YXJpYW50IHRlc3RVcmwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkTmVnYXRpdmVTaXpl
Vmlldy5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3Rz
L1RvdWNoV2ViVmlldy90c3RfbG9hZE5lZ2F0aXZlU2l6ZVZpZXcucW1sCmluZGV4IDZjNGFjYzYy
ZTkzMmFlYjhlNmJlZTA2NjlhN2M0MzFkNTZlNzdkODUuLjA5NTkwMTJiMTg4MzA3NGVjM2YzYjIy
NjFkZmExNjI1Nzk5NGVlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkTmVnYXRpdmVTaXplVmll
dy5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0
cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWROZWdhdGl2ZVNpemVWaWV3LnFtbApAQCAtMiw3ICsyLDcg
QEAgaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0
IDMuMAogCi1Ub3VjaFdlYlZpZXcgeworV2ViVmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKICAgICBo
ZWlnaHQ6IC02MDAKICAgICB3aWR0aDogLTQwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRQcm9n
cmVzcy5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3Rz
L1RvdWNoV2ViVmlldy90c3RfbG9hZFByb2dyZXNzLnFtbAppbmRleCA3ZDNjNmQxOTFiNmYzZTA1
MjZlZjFmMzUyNDU3NmU1NGRmMGQzY2I3Li5kNzkwMWRmODIyMDRiYTVmMGUxMzQ3YTU2YTcwMGJh
NmMwNmU0NzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZFByb2dyZXNzLnFtbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90
c3RfbG9hZFByb2dyZXNzLnFtbApAQCAtMiw3ICsyLDcgQEAgaW1wb3J0IFF0UXVpY2sgMi4wCiBp
bXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0IDMuMAogCi1Ub3VjaFdlYlZpZXcgewor
V2ViVmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKIAogICAgIFNpZ25hbFNweSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2Vi
Vmlldy90c3RfbG9hZFByb2dyZXNzU2lnbmFsLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWdu
YWwucW1sCmluZGV4IDBmMmQ5YmI4Njk3MmI5M2UwMTBjNzNmZDAxZWU5MjUzOWQwZDVjZDQuLmM3
NzQ4NDhkN2ZhZDQ2YzI0N2RjMDJmYTFiNjAxYzk0MmZmNGJmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3Rz
dF9sb2FkUHJvZ3Jlc3NTaWduYWwucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWduYWwu
cW1sCkBAIC0yLDcgKzIsNyBAQCBpbXBvcnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4w
CiBpbXBvcnQgUXRXZWJLaXQgMy4wCiAKLVRvdWNoV2ViVmlldyB7CitXZWJWaWV3IHsKICAgICBp
ZDogd2ViVmlldwogCiAgICAgU2lnbmFsU3B5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkWmVy
b1NpemVWaWV3LnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1s
dGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbAppbmRleCA3OTJlY2Y2
MTdmMDM0M2QxMDNjMGNlNWIwYjM0NTI4NmY5NGYxZjA3Li4wOGY3YjVhZjZhYzZlMjAyNTA3ZDg4
YjE5MmRkZWMwYjQyZmRhN2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZFplcm9TaXplVmlldy5x
bWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9U
b3VjaFdlYlZpZXcvdHN0X2xvYWRaZXJvU2l6ZVZpZXcucW1sCkBAIC0yLDcgKzIsNyBAQCBpbXBv
cnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCiAK
LVRvdWNoV2ViVmlldyB7CitXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwogICAgIGhlaWdodDog
MAogICAgIHdpZHRoOiAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfcHJvcGVydGllcy5xbWwgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90
c3RfcHJvcGVydGllcy5xbWwKaW5kZXggMDg0Y2FlZmRiMzYzMGIxNzRmYTc3OTM2N2U4ZTRhODAx
N2RjNmRiMi4uMTc1YWI1NzU4MzA5YzQ4Mzc5NmUxZTBjNTExM2JhNmQ1NmU4YTE2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3Vj
aFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9wcm9wZXJ0aWVzLnFtbApA
QCAtMiw3ICsyLDcgQEAgaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1w
b3J0IFF0V2ViS2l0IDMuMAogCi1Ub3VjaFdlYlZpZXcgeworV2ViVmlldyB7CiAgICAgaWQ6IHdl
YlZpZXcKIAogICAgIFNpZ25hbFNweSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCmluZGV4IDM2ZTBj
NTBjYWQ5OGNjZWE3NTRhNmExZDI3ZDI1MzFkMWNkYTJiMzUuLmI2NjQ3YjA3ZDFjYjIzYjkwNzlk
ZjZjYTEzMmExZmFjMjYyZTU2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvCkBAIC01LDYgKzUs
MTEgQEAgQ09ORklHICs9IHdhcm5fb24gdGVzdGNhc2UKIFFUIC09IHRlc3RsaWIKIFFUICs9IHFt
bHRlc3QKIAorIyBGSVhNRTogV2hlbiB3ZWJraXQtcHJpdmF0ZSB3b3JrcyBsZXQncyB1c2UgaXQu
Citsb2FkKGphdmFzY3JpcHRjb3JlKQorbG9hZCh3ZWJjb3JlKQorbG9hZCh3ZWJraXQyKQorCiAj
IFFNTCBmaWxlcyB0ZXN0ZWQgYXJlIHRoZSBvbmVzIGluIFdlYktpdCBzb3VyY2UgcmVwb3NpdG9y
eS4KIERFRklORVMgKz0gUVVJQ0tfVEVTVF9TT1VSQ0VfRElSPVwiXFxcIiQkUFdEXFxcIlwiCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvdHN0X3FtbHRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvcW1sdGVzdHMvdHN0X3FtbHRlc3RzLmNwcAppbmRleCA0YmEzZTgwZmEyYWViODM5YTk2ZmZl
ZDY0ZGFkMzNjNTQ4ZjkyZWVlLi5mM2RiNGQyYWE3MGQ0MjAxYWJmYWQyYjU1OGFhNzUzMjAxZDY0
MmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Ft
bHRlc3RzL3RzdF9xbWx0ZXN0cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwCkBAIC0xNywxNSArMTcsMzEgQEAK
ICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICovCiAKKyNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICIuLi91dGlsLmgiCisKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlLmgiCisj
aW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgor
CiAjaW5jbHVkZSA8UXRRdWlja1Rlc3QvcXVpY2t0ZXN0Lmg+CiAjaW5jbHVkZSA8UXRXaWRnZXRz
L1FBcHBsaWNhdGlvbj4KIAorY2xhc3MgRGVza3RvcFdlYlZpZXcgOiBwdWJsaWMgUVF1aWNrV2Vi
VmlldyB7CitwdWJsaWM6CisgICAgRGVza3RvcFdlYlZpZXcoUVF1aWNrSXRlbSogcGFyZW50ID0g
MCkKKyAgICAgICAgOiBRUXVpY2tXZWJWaWV3KHBhcmVudCkKKyAgICB7CisgICAgICAgIFFRdWlj
a1dlYlZpZXdQcml2YXRlOjpnZXQodGhpcyktPnNldFVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2
aW91cih0cnVlKTsKKyAgICB9Cit9OworCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
CiB7CiAgICAgc3VwcHJlc3NEZWJ1Z091dHB1dCgpOwogICAgIC8vIEluc3RhbnRpYXRlIFFBcHBs
aWNhdGlvbiB0byBwcmV2ZW50IHF1aWNrX3Rlc3RfbWFpbiB0byBpbnN0YW50aWF0ZSBhIFFHdWlB
cHBsaWNhdGlvbi4KICAgICAvLyBUaGlzIGNhbiBiZSByZW1vdmVkIGFzIHNvb24gYXMgd2UgZG8g
bm90IHVzZSBRdFdpZGdldHMgYW55IG1vcmUuCiAgICAgUUFwcGxpY2F0aW9uIGFwcChhcmdjLCBh
cmd2KTsKKyAgICBxbWxSZWdpc3RlclR5cGU8RGVza3RvcFdlYlZpZXc+KCJRdFdlYktpdFRlc3Qi
LCAxLCAwLCAiRGVza3RvcFdlYlZpZXciKTsKICAgICByZXR1cm4gcXVpY2tfdGVzdF9tYWluKGFy
Z2MsIGFyZ3YsICJxbWx0ZXN0cyIsIDAsIFFVSUNLX1RFU1RfU09VUkNFX0RJUik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0b3VjaHdlYnZp
ZXcvcXRvdWNod2Vidmlldy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3F0b3VjaHdlYnZpZXcvcXRvdWNod2Vidmlldy5wcm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGU5OWM3ZjQ5MzhjYjE1MTBlZWZlZmFlZmNlMzE2NjNjMDk3ZjA1NDIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xdG91Y2h3ZWJ2aWV3L3F0b3VjaHdlYnZpZXcucHJvCisr
KyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaW5jbHVkZSguLi90ZXN0cy5wcmkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0b3VjaHdlYnZpZXcv
dHN0X3F0b3VjaHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xdG91Y2h3ZWJ2aWV3L3RzdF9xdG91Y2h3ZWJ2aWV3LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWRmMjg3NWZjMDk4YmY3ZDcxZWUyZmFjYWZjM2I1OWQ0NWM2OTRjMi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0b3VjaHdlYnZpZXcvdHN0X3F0b3VjaHdlYnZp
ZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
LQotI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+Ci0jaW5jbHVkZSA8cXRvdWNod2VicGFnZS5oPgot
I2luY2x1ZGUgPHF0b3VjaHdlYnZpZXcuaD4KLSNpbmNsdWRlIDxxd2VibmF2aWdhdGlvbmNvbnRy
b2xsZXIuaD4KLSNpbmNsdWRlICIuLi90ZXN0d2luZG93LmgiCi0jaW5jbHVkZSAiLi4vdXRpbC5o
IgotCi1RX0RFQ0xBUkVfTUVUQVRZUEUoUVRvdWNoV2ViUGFnZSopOwotCi1jbGFzcyB0c3RfUVRv
dWNoV2ViVmlldyA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAg
IHRzdF9RVG91Y2hXZWJWaWV3KCk7Ci1wcml2YXRlIHNsb3RzOgotICAgIHZvaWQgaW5pdCgpOwot
ICAgIHZvaWQgY2xlYW51cCgpOwotCi0gICAgdm9pZCBhY2Nlc3NQYWdlKCk7Ci0gICAgdm9pZCBu
YXZpZ2F0aW9uU3RhdHVzQXRTdGFydHVwKCk7Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFFUb3Vj
aFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdDsKLSAgICBRU2NvcGVkUG9pbnRlcjxUZXN0V2luZG93
PiBtX3dpbmRvdzsKLX07Ci0KLXRzdF9RVG91Y2hXZWJWaWV3Ojp0c3RfUVRvdWNoV2ViVmlldygp
Ci17Ci0gICAgYWRkUXRXZWJQcm9jZXNzVG9QYXRoKCk7Ci0gICAgcVJlZ2lzdGVyTWV0YVR5cGU8
UVRvdWNoV2ViUGFnZSo+KCJRVG91Y2hXZWJQYWdlKiIpOwotfQotCi12b2lkIHRzdF9RVG91Y2hX
ZWJWaWV3Ojppbml0KCkKLXsKLSAgICBtX3dpbmRvdy5yZXNldChuZXcgVGVzdFdpbmRvdyhuZXcg
UVRvdWNoV2ViVmlldykpOwotfQotCi12b2lkIHRzdF9RVG91Y2hXZWJWaWV3OjpjbGVhbnVwKCkK
LXsKLSAgICBtX3dpbmRvdy5yZXNldCgpOwotfQotCi1pbmxpbmUgUVRvdWNoV2ViVmlldyogdHN0
X1FUb3VjaFdlYlZpZXc6OndlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxRVG91Y2hXZWJWaWV3Kj4obV93aW5kb3ctPndlYlZpZXcuZGF0YSgpKTsKLX0KLQotdm9pZCB0
c3RfUVRvdWNoV2ViVmlldzo6YWNjZXNzUGFnZSgpCi17Ci0gICAgUVRvdWNoV2ViUGFnZSogY29u
c3QgcGFnZURpcmVjdEFjY2VzcyA9IHdlYlZpZXcoKS0+cGFnZSgpOwotCi0gICAgUVZhcmlhbnQg
cGFnZVByb3BlcnR5VmFsdWUgPSB3ZWJWaWV3KCktPnByb3BlcnR5KCJwYWdlIik7Ci0gICAgUVRv
dWNoV2ViUGFnZSogY29uc3QgcGFnZVByb3BlcnR5QWNjZXNzID0gcGFnZVByb3BlcnR5VmFsdWUu
dmFsdWU8UVRvdWNoV2ViUGFnZSo+KCk7Ci0gICAgUUNPTVBBUkUocGFnZVByb3BlcnR5QWNjZXNz
LCBwYWdlRGlyZWN0QWNjZXNzKTsKLX0KLQotdm9pZCB0c3RfUVRvdWNoV2ViVmlldzo6bmF2aWdh
dGlvblN0YXR1c0F0U3RhcnR1cCgpCi17Ci0gICAgUUNPTVBBUkUod2ViVmlldygpLT5uYXZpZ2F0
aW9uQ29udHJvbGxlcigpLT5jYW5Hb0JhY2soKSwgZmFsc2UpOwotCi0gICAgUUNPTVBBUkUod2Vi
VmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5Hb0ZvcndhcmQoKSwgZmFsc2UpOwot
Ci0gICAgUUNPTVBBUkUod2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5TdG9w
KCksIGZhbHNlKTsKLQotICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xs
ZXIoKS0+Y2FuUmVsb2FkKCksIGZhbHNlKTsKLX0KLQotCi1RVFdFQktJVF9BUElfVEVTVF9NQUlO
KHRzdF9RVG91Y2hXZWJWaWV3KQotCi0jaW5jbHVkZSAidHN0X3F0b3VjaHdlYnZpZXcubW9jIgot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3R3
aW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHdpbmRv
dy5oCmluZGV4IDg3ODA5YzMzNDhmY2M3ZDhlOTRhNjQ2MmZmODc0YWNlYWJkMDc2ZDguLjdiNTlh
ZjljYWI2ZGVlOTdkYzQ0ODJhOTIzMWY5NThhMzg3Zjg2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHdpbmRvdy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHdpbmRvdy5oCkBAIC0yNSw3ICsyNSw3
IEBACiAjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xcXVpY2tpdGVtLmg+CiAjaW5jbHVkZSA8UXRE
ZWNsYXJhdGl2ZS9xcXVpY2t2aWV3Lmg+CiAKLS8vIFRlc3RXaW5kb3c6IFV0aWxpdHkgY2xhc3Mg
dG8gaWdub3JlIFFHcmFwaGljc1ZpZXcgZGV0YWlscy4KKy8vIFRlc3RXaW5kb3c6IFV0aWxpdHkg
Y2xhc3MgdG8gaWdub3JlIFFRdWlja1ZpZXcgZGV0YWlscy4KIGNsYXNzIFRlc3RXaW5kb3cgOiBw
dWJsaWMgUVF1aWNrVmlldyB7CiBwdWJsaWM6CiAgICAgaW5saW5lIFRlc3RXaW5kb3coUVF1aWNr
SXRlbSogd2ViVmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRHZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRH
ZXN0dXJlUmVjb2duaXplci5jcHAKaW5kZXggYmYzMGIxZWFlNWQ0NzdjYjQ5NjY5NGE0YWFkOThh
MmI5N2QxMjZiOS4uZWYxZDg3MmY2OTIyZTQxZmU0Mzc2Njc3MzYyZWI3MmViYTg0Mzg3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVy
LmNwcApAQCAtMzIsNyArMzIsNiBAQCBRdEdlc3R1cmVSZWNvZ25pemVyOjpRdEdlc3R1cmVSZWNv
Z25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogdmlld3BvcnRJbgogICAgIDogbV92
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCiAgICAg
LCBtX3N0YXRlKE5vR2VzdHVyZSkKIHsKLSAgICBBU1NFUlQodmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZSk7CiB9CiAKIHZvaWQgUXRHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQpAQCAtNDAsNCAr
MzksOSBAQCB2b2lkIFF0R2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KCkKICAgICBtX3N0YXRlID0g
Tm9HZXN0dXJlOwogfQogCit2b2lkIFF0R2VzdHVyZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUpCit7Cisg
ICAgbV92aWV3cG9ydEludGVyYWN0aW9uRW5naW5lID0gZW5naW5lOworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCBm
NTIyMmM3ZjMzYjQyNjNiNWY1ZmNjZWU1ZjQ4NTgyYmE2NGY3ZTYxLi40Y2NhNmJjNzI1ZGM4NGU4
MmJlOGE0NWIwYzQ1NDZhNjRkYmU4MzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTM2LDkgKzM2LDEwIEBAIHB1YmxpYzoK
IAogcHJvdGVjdGVkOgogICAgIFF0R2VzdHVyZVJlY29nbml6ZXIoUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKik7CisgICAgdm9pZCBzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZSopOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogY29uc3QgbV92aWV3cG9ydEludGVyYWN0aW9uRW5naW5l
OworICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogbV92aWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOwogICAgIGVudW0gU3RhdGUgewogICAgICAgICBOb0dlc3R1cmUsCiAgICAgICAgIEdl
c3R1cmVSZWNvZ25pdGlvblN0YXJ0ZWQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKaW5kZXggNDBjOTc5YTYxZjE4ZmI2
NmQ1YmJjMmE2M2M2MjRkZGUyNTMxYzdkYi4uYWJlMjY5MmU1YTg5MmRkZjU0YzdhYjUyMDg0YzFl
ZjI0ODAzYjY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFu
R2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMzcsOCArMzcsMTcgQEAgUXRQYW5HZXN0dXJl
UmVjb2duaXplcjo6UXRQYW5HZXN0dXJlUmVjb2duaXplcihRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUqIGludGUKICAgICByZXNldCgpOwogfQogCit2b2lkIFF0UGFuR2VzdHVyZVJlY29nbml6
ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKiBlbmdpbmUpCit7CisgICAgUXRHZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZShlbmdpbmUpOworICAgIHJlc2V0KCk7Cit9CisKIGJvb2wgUXRQYW5HZXN0
dXJlUmVjb2duaXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCwgcWludDY0
IGV2ZW50VGltZXN0YW1wTWlsbGlzKQogeworICAgIGlmICghbV92aWV3cG9ydEludGVyYWN0aW9u
RW5naW5lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAvLyBQYW4gZ2VzdHVyZSBhbHdh
eXMgc3RhcnRzIG9uIFRvdWNoQmVnaW4gdW5sZXNzIHRoZSBlbmdpbmUgaXMgc3VzcGVuZGVkLCBv
cgogICAgIC8vIHdlIGlnbm9yZWQgdGhlIGV2ZW50LgogICAgIGlmIChtX3N0YXRlID09IE5vR2Vz
dHVyZSAmJiBldmVudC0+dHlwZSgpICE9IFFFdmVudDo6VG91Y2hCZWdpbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oCmluZGV4
IDI5Y2FmMDZmZDYyYWM2Y2YwZDFkZjRjNTJiNGFjNmE3MWY4ZDc5NzguLjUxNGZlYTgzNDI1MDcz
OGZiMmIxMTI5YjIwOGE4NzUzZWE5MjVjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtNDIsNiArNDIsNyBAQCBj
b25zdCBxcmVhbCBwYW5uaW5nSW5pdGlhbFRyaWdnZXJEaXN0YW5jZVRocmVzaG9sZCA9IDUuOwog
Y2xhc3MgUXRQYW5HZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyBRdEdlc3R1cmVSZWNvZ25pemVy
IHsKIHB1YmxpYzoKICAgICBRdFBhbkdlc3R1cmVSZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZSopOworICAgIHZvaWQgc2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqKTsKICAgICBib29sIHJlY29nbml6ZShjb25zdCBRVG91
Y2hFdmVudCosIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgdm9pZCByZXNldCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1
cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2Vz
dHVyZVJlY29nbml6ZXIuY3BwCmluZGV4IDE2ZGI1ZGQwYTIyNTAxZGMzYmRiNTExNTgyNzdlOTEw
ODAzNDZkYTEuLjcyNDY3YjRkZmRjY2JlMjM1ZTZhNTM5YzEzMDkyMDY4ZDQzNzg2MTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJl
Y29nbml6ZXIuY3BwCkBAIC01Nyw2ICs1Nyw5IEBAIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6
UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSoKIAog
Ym9vbCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVu
dCogZXZlbnQpCiB7CisgICAgaWYgKCFtX3ZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNvbnN0IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBv
aW50PiYgdG91Y2hQb2ludHMgPSBldmVudC0+dG91Y2hQb2ludHMoKTsKICAgICBpZiAodG91Y2hQ
b2ludHMuc2l6ZSgpIDwgMikgewogICAgICAgICBpZiAobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2du
aXplZCkKQEAgLTEzMCw2ICsxMzMsMTIgQEAgYm9vbCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6
OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCit2b2lkIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIGVuZ2luZSkKK3sKKyAgICBRdEdl
c3R1cmVSZWNvZ25pemVyOjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGVuZ2luZSk7Cisg
ICAgcmVzZXQoKTsKK30KKwogdm9pZCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KCkK
IHsKICAgICBRdEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oCmluZGV4IDMw
ZDE1ZmM3YjA3NTI5OGE0NDBkNjllNjRmYzc1M2I3YmRiZTRkNGUuLjIwOGMwNWFiZGMwOTMxYmVk
ZTM4ODU5Y2VjZjYwYTk1NGY1MGFjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTUxLDYgKzUxLDcgQEAg
cHVibGljOgogICAgIH07CiAKICAgICBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIoUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKik7CisgICAgdm9pZCBzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSopOwogICAgIGJvb2wgcmVjb2duaXplKGNv
bnN0IFFUb3VjaEV2ZW50Kik7CiAgICAgdm9pZCByZXNldCgpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmNwcAppbmRleCA0NDg2
ODgwOTkwOWQ3NTU5ZDg3ZWI2YjZhNjAwMjQ2YWE5NGQwZjMwLi5hMmRkMTExOTk0YWI2MDA1Zjk0
ZWUxNGU1MDNkYzAxYzIyNjhhZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFRvdWNoVmlld0ludGVyZmFjZS5jcHAKQEAgLTIyLDE3ICsyMiwxNyBAQAogI2lu
Y2x1ZGUgIlF0VG91Y2hWaWV3SW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJRdFdlYkVycm9yLmgi
Ci0jaW5jbHVkZSAicXRvdWNod2VicGFnZS5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2VfcC5o
IgotI2luY2x1ZGUgInF0b3VjaHdlYnZpZXcuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3X3Au
aCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlLmgiCisjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9w
LmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXdf
cC5oIgogCiAjaW5jbHVkZSA8UURlY2xhcmF0aXZlRW5naW5lPgogI2luY2x1ZGUgPFFRdWlja1Zp
ZXc+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1RdFRvdWNoVmlld0ludGVyZmFjZTo6UXRUb3Vj
aFZpZXdJbnRlcmZhY2UoUVRvdWNoV2ViVmlldyogdmlld3BvcnRWaWV3LCBRVG91Y2hXZWJQYWdl
KiBwYWdlVmlldykKK1F0VG91Y2hWaWV3SW50ZXJmYWNlOjpRdFRvdWNoVmlld0ludGVyZmFjZShR
UXVpY2tXZWJWaWV3KiB2aWV3cG9ydFZpZXcsIFFRdWlja1dlYlBhZ2UqIHBhZ2VWaWV3KQogICAg
IDogbV92aWV3cG9ydFZpZXcodmlld3BvcnRWaWV3KQogICAgICwgbV9wYWdlVmlldyhwYWdlVmll
dykKIHsKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpsb2Fk
RGlkU3VjY2VlZCgpCiAKIHZvaWQgUXRUb3VjaFZpZXdJbnRlcmZhY2U6OmxvYWREaWRGYWlsKGNv
bnN0IFF0V2ViRXJyb3ImIGVycm9yKQogewotICAgIGVtaXQgbV92aWV3cG9ydFZpZXctPmxvYWRG
YWlsZWQoc3RhdGljX2Nhc3Q8UUJhc2VXZWJWaWV3OjpFcnJvclR5cGU+KGVycm9yLnR5cGUoKSks
IGVycm9yLmVycm9yQ29kZSgpLCBlcnJvci51cmwoKSk7CisgICAgZW1pdCBtX3ZpZXdwb3J0Vmll
dy0+bG9hZEZhaWxlZChzdGF0aWNfY2FzdDxRUXVpY2tXZWJWaWV3OjpFcnJvclR5cGU+KGVycm9y
LnR5cGUoKSksIGVycm9yLmVycm9yQ29kZSgpLCBlcnJvci51cmwoKSk7CiB9CiAKIHZvaWQgUXRU
b3VjaFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZUxvYWRQcm9ncmVzcyhpbnQgcGVyY2VudGFnZUxv
YWRlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoVmll
d0ludGVyZmFjZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50
ZXJmYWNlLmgKaW5kZXggYjBkN2VjMTQzODdkYWVjNmJkM2YxZWZiMDc5NTI1ZWMwNGJjNjMyOC4u
ZmRjNjU0NmNlNzJkZDUwYjRlMWYwOTQxZGFhYjYxYzYwMzZjZmQ2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmgKQEAgLTI0LDgg
KzI0LDggQEAKICNpbmNsdWRlICJRdFZpZXdJbnRlcmZhY2UuaCIKIAogY2xhc3MgUVBvaW50RjsK
LWNsYXNzIFFUb3VjaFdlYlBhZ2U7Ci1jbGFzcyBRVG91Y2hXZWJWaWV3OworY2xhc3MgUVF1aWNr
V2ViUGFnZTsKK2NsYXNzIFFRdWlja1dlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIFZpZXdwb3J0QXJndW1lbnRzOwpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBRdFNHVXBkYXRl
UXVldWU7CiAKIGNsYXNzIFF0VG91Y2hWaWV3SW50ZXJmYWNlIDogcHVibGljIFF0Vmlld0ludGVy
ZmFjZSB7CiBwdWJsaWM6Ci0gICAgUXRUb3VjaFZpZXdJbnRlcmZhY2UoUVRvdWNoV2ViVmlldyog
dmlld3BvcnRWaWV3LCBRVG91Y2hXZWJQYWdlKiBwYWdlVmlldyk7CisgICAgUXRUb3VjaFZpZXdJ
bnRlcmZhY2UoUVF1aWNrV2ViVmlldyogdmlld3BvcnRWaWV3LCBRUXVpY2tXZWJQYWdlKiBwYWdl
Vmlldyk7CiAKICAgICBRdFNHVXBkYXRlUXVldWUqIHNjZW5lR3JhcGhVcGRhdGVRdWV1ZSgpIGNv
bnN0OwogCkBAIC04Nyw4ICs4Nyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZE1v
dXNlTW92ZU92ZXJFbGVtZW50KGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJikgeyB9CiAKIHBy
aXZhdGU6Ci0gICAgUVRvdWNoV2ViVmlldyogY29uc3QgbV92aWV3cG9ydFZpZXc7Ci0gICAgUVRv
dWNoV2ViUGFnZSogY29uc3QgbV9wYWdlVmlldzsKKyAgICBRUXVpY2tXZWJWaWV3KiBjb25zdCBt
X3ZpZXdwb3J0VmlldzsKKyAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBtX3BhZ2VWaWV3OwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld0ludGVy
ZmFjZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld0ludGVyZmFjZS5oCmlu
ZGV4IGI1ZjVjNGIzMGNiMjg4MTU1OTU5ZTU1MTNjMTdhNjE5YzQ4ODE4MDEuLmIwNzg5OTAyYjBk
NWE3ODk2ZDQ1Mzk1YmI0MjA3ODNhZjkyYjAzOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmgKQEAgLTI0LDggKzI0LDExIEBACiAjaW5jbHVkZSA8
UU1lbnU+CiAjaW5jbHVkZSA8UXRDb3JlL1FTaGFyZWRQb2ludGVyPgogI2luY2x1ZGUgPFF0Q29y
ZS9RU2l6ZT4KKyNpbmNsdWRlIDxRdENvcmUvUVVybD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFz
ZS5oPgogCitjbGFzcyBRUXVpY2tXZWJQYWdlOworY2xhc3MgUVF1aWNrV2ViVmlldzsKIGNsYXNz
IFF0V2ViRXJyb3I7CiBjbGFzcyBRV2ViRG93bmxvYWRJdGVtOwogCkBAIC0zNyw3ICs0MCw2IEBA
IGNsYXNzIFFKU0VuZ2luZTsKIGNsYXNzIFFNaW1lRGF0YTsKIGNsYXNzIFFQb2ludDsKIGNsYXNz
IFFSZWN0OwotY2xhc3MgUVVybDsKIGNsYXNzIFFXaWRnZXQ7CiBRVF9FTkRfTkFNRVNQQUNFCiAK
QEAgLTQ3LDYgKzQ5LDggQEAgY2xhc3MgVmlld3BvcnRBcmd1bWVudHM7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCitjbGFzcyBRdFNHVXBkYXRlUXVldWU7CisKIGNsYXNzIFF0Vmlld0ludGVyZmFj
ZSB7CiBwdWJsaWM6CiAgICAgZW51bSBGaWxlQ2hvb3NlclR5cGUgewpAQCAtNTQsNDkgKzU4LDYx
IEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVGaWxlc1NlbGVjdGlvbgogICAgIH07CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpID0gMDsKKyAg
ICBRdFZpZXdJbnRlcmZhY2UoUVF1aWNrV2ViVmlldyogdmlld3BvcnRWaWV3LCBRUXVpY2tXZWJQ
YWdlKiBwYWdlVmlldyk7CisKKyAgICBRdFNHVXBkYXRlUXVldWUqIHNjZW5lR3JhcGhVcGRhdGVR
dWV1ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29u
c3QgUVJlY3QmKTsKKworICAgIHZpcnR1YWwgUVNpemUgZHJhd2luZ0FyZWFTaXplKCk7CisgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYpOworICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcyk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRm9jdXMoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCk7CiAKLSAgICB2aXJ0dWFsIFFTaXplIGRyYXdp
bmdBcmVhU2l6ZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudFNpemVDaGFuZ2VkKGNv
bnN0IFFTaXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxQb3NpdGlvblJlcXVlc3Rl
ZChjb25zdCBRUG9pbnQmIHBvcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoUXQ6
OkRyb3BBY3Rpb25zIHN1cHBvcnRlZERyb3BBY3Rpb25zLCBjb25zdCBRSW1hZ2UmIGRyYWdJbWFn
ZSwgUU1pbWVEYXRhKiwgUVBvaW50KiBjbGllbnRQb3NpdGlvbiwgUVBvaW50KiBnbG9iYWxQb3Np
dGlvbiwgUXQ6OkRyb3BBY3Rpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3Bv
cnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJik7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc0ZvY3VzKCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgUVBvaW50JiwgY29uc3QgUVJlY3QmKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBzdGFydERyYWcoUXQ6OkRyb3BBY3Rpb25zIHN1cHBvcnRlZERyb3BBY3Rp
b25zLCBjb25zdCBRSW1hZ2UmIGRyYWdJbWFnZSwgUU1pbWVEYXRhKiwgUVBvaW50KiBjbGllbnRQ
b3NpdGlvbiwgUVBvaW50KiBnbG9iYWxQb3NpdGlvbiwgUXQ6OkRyb3BBY3Rpb24qKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50cyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVXJs
KGNvbnN0IFFVcmwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUoY29uc3QgUVN0
cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUb29sVGlwKGNvbnN0IFFTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU3RhdHVzVGV4dChjb25zdCBRU3RyaW5nJik7
CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUN1cnNvcihjb25zdCBRQ3Vyc29yJik7CisgICAg
dmlydHVhbCB2b2lkIGxvYWREaWRCZWdpbigpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkQ29t
bWl0KCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWREaWRTdWNjZWVkKCk7CisgICAgdmlydHVhbCB2
b2lkIGxvYWREaWRGYWlsKGNvbnN0IFF0V2ViRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlTG9hZFByb2dyZXNzKGludCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21h
YmxlQXJlYShjb25zdCBRUG9pbnQmLCBjb25zdCBRUmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd0NvbnRleHRNZW51KFFTaGFyZWRQb2ludGVyPFFNZW51Pik7CisgICAgdmlydHVhbCB2
b2lkIGhpZGVDb250ZXh0TWVudSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVVybChj
b25zdCBRVXJsJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZShjb25zdCBR
U3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUb29sVGlwKGNvbnN0IFFT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVN0YXR1c1RleHQoY29uc3Qg
UVN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ3Vyc29yKGNvbnN0IFFD
dXJzb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRCZWdpbigpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZERpZENvbW1pdCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERp
ZFN1Y2NlZWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRGYWlsKGNvbnN0IFF0V2Vi
RXJyb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUxvYWRQcm9ncmVzcyhpbnQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFFTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3QgUVN0cmluZyYp
OworICAgIHZpcnR1YWwgUVN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcm
LCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9rKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vz
c0RpZENyYXNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOwogCi0g
ICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBRU3RyaW5nJikgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBRU3RyaW5nJikgPSAw
OwotICAgIHZpcnR1YWwgUVN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcm
LCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9rKSA9IDA7CisgICAgdmlydHVh
bCBRSlNFbmdpbmUqIGVuZ2luZSgpOwogCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRDcmFz
aCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjaG9vc2VGaWxlcyhXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmLCBj
b25zdCBRU3RyaW5nTGlzdCYgc2VsZWN0ZWRGaWxlTmFtZXMsIEZpbGVDaG9vc2VyVHlwZSk7CiAK
LSAgICB2aXJ0dWFsIFFKU0VuZ2luZSogZW5naW5lKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aWRNb3VzZU1vdmVPdmVyRWxlbWVudChjb25zdCBRVXJsJiwgY29uc3QgUVN0cmluZyYpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGNob29zZUZpbGVzKFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYs
IGNvbnN0IFFTdHJpbmdMaXN0JiBzZWxlY3RlZEZpbGVOYW1lcywgRmlsZUNob29zZXJUeXBlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkUmVxdWVzdGVkKFFXZWJEb3dubG9hZEl0ZW0q
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3VzZU1vdmVPdmVyRWxlbWVudChjb25zdCBRVXJs
JiwgY29uc3QgUVN0cmluZyYpID0gMDsKK3ByaXZhdGU6CisgICAgUVF1aWNrV2ViVmlldyogY29u
c3QgbV92aWV3cG9ydFZpZXc7CisgICAgUVF1aWNrV2ViUGFnZSogY29uc3QgbV9wYWdlVmlldzsK
IAotICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZFJlcXVlc3RlZChRV2ViRG93bmxvYWRJdGVtKikg
PSAwOworICAgIFFTaGFyZWRQb2ludGVyPFFNZW51PiBhY3RpdmVNZW51OworICAgIFFVcmwgbGFz
dEhvdmVyZWRVUkw7CisgICAgUVN0cmluZyBsYXN0SG92ZXJlZFRpdGxlOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAppbmRleCBkY2M4NjVm
NzU2NWZlZTM1ZWNlNGQ2MmVjODI3NzllNDkwZTliMTIwLi5jNDA0NDQ3ZDY1YTQyOTAzNDBmZWM5
NDE4NzFhOTIxZDlkMmRiZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlUHJveHkuaApAQCAtMTczLDYgKzE3Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5h
dmlnYXRvclF0T2JqZWN0RW5hYmxlZChib29sKTsKICAgICBib29sIG5hdmlnYXRvclF0T2JqZWN0
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkOyB9CiAK
KyAgICB2b2lkIHNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKiBlbmdpbmUpIHsgbV9pbnRlcmFjdGlvbkVuZ2luZSA9IGVuZ2luZTsgbV9wYW5H
ZXN0dXJlUmVjb2duaXplci5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGVuZ2luZSk7IG1f
cGluY2hHZXN0dXJlUmVjb2duaXplci5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGVuZ2lu
ZSk7fQorCiAgICAgdm9pZCBwb3N0TWVzc2FnZVRvTmF2aWdhdG9yUXRPYmplY3QoY29uc3QgUVN0
cmluZyYpOwogCiAgICAgcXJlYWwgdGV4dFpvb21GYWN0b3IoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkK
aW5kZXggMDNkMGQxYjVjYmZjZjE2ZWZkMTg0YzA1MWMxYjM2MzQ1NGJjYjY3YS4uMjI5MWZkOWQ3
YjNlMWIxYzBhZmJlOTRkYjc0YWMzY2JmM2YxMWUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTUxLDEx
ICs1MSw5IEBAIFNPVVJDRVMgKz0gXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291
cmNlQ2FjaGVNYW5hZ2VyLmNwcCBcCiAgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9jcHAvcXQvV0tT
dHJpbmdRdC5jcHAgXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvY3BwL3F0L1dLVVJMUXQuY3Bw
IFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5jcHAgXAotICAgICQk
UFdEL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNwcCBcCiAgICAgJCRQV0QvVUlQ
cm9jZXNzL0FQSS9xdC9xd2ViZG93bmxvYWRpdGVtLmNwcCBcCi0gICAgJCRQV0QvVUlQcm9jZXNz
L0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJ2aWV3LmNwcCBcCisgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJw
YWdlLmNwcCBcCisgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBc
CiAgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuY3Bw
IFwKICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgXAogICAg
ICQkUFdEL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGUuY3BwIFwKQEAg
LTEzMiwxOCArMTMwLDE0IEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkv
Y3BwL1dLUmV0YWluUHRyLmggXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvY3BwL3F0L1dLU3Ry
aW5nUXQuaCBcCiAgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9jcHAvcXQvV0tVUkxRdC5oIFwKLSAg
ICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5oIFwKLSAgICAkJFBXRC9VSVBy
b2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlld19wLmggXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkv
cXQvcWRlc2t0b3B3ZWJ2aWV3LmggXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0
b3B3ZWJ2aWV3X3AuaCBcCiAgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5j
ZXMuaCBcCiAgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXNfcC5oIFwK
ICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJkb3dubG9hZGl0ZW0uaCBcCiAgICAgJCRQ
V0QvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZG93bmxvYWRpdGVtX3AuaCBcCi0gICAgJCRQV0QvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmggXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkv
cXQvcXRvdWNod2VicGFnZV9wLmggXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNo
d2Vidmlldy5oIFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXdfcC5o
IFwKKyAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuaCBcCisgICAgJCRQ
V0QvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3AuaCBcCisgICAgJCRQV0QvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmggXAorICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlld19wLmggXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYm5hdmln
YXRpb25jb250cm9sbGVyLmggXAogICAgICQkUFdEL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCBcCiAgICAgJCRQV0QvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvdGVzdHMucHJpIGIvU291cmNlL3Rlc3RzLnByaQppbmRleCBlYWJlMjUz
OTZjOTgyODAxNmQxMDJhOTMwNGUxMjljMWIwM2ZhMzAxLi4xYjQxNWZkZjFkZjhkMjNhZGFlODY5
MWExMjhmNjBmMWJkYmQ3NTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvdGVzdHMucHJpCisrKyBiL1Nv
dXJjZS90ZXN0cy5wcmkKQEAgLTQzLDggKzQzLDYgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1dFQkdMPTEpIHsKICAgICBXRUJLSVQyX1RFU1RTX0RJUiA9ICQkUFdEL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cwogCiAgICAgU1VCRElSUyArPSBcCi0gICAgICAgICQkV0VCS0lUMl9U
RVNUU19ESVIvcXRvdWNod2VidmlldyBcCi0gICAgICAgICQkV0VCS0lUMl9URVNUU19ESVIvcWRl
c2t0b3B3ZWJ2aWV3IFwKLSAgICAgICAgJCRXRUJLSVQyX1RFU1RTX0RJUi9jb21tb252aWV3dGVz
dHMgXAorICAgICAgICAkJFdFQktJVDJfVEVTVFNfRElSL3FxdWlja3dlYnZpZXcgXAogICAgICAg
ICAkJFdFQktJVDJfVEVTVFNfRElSL3FtbHRlc3RzCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDY4NmRmYTZjNDM0NDVkNTUxYTY0YTM3YTVh
OTY4YWNlZDg3YTliZS4uMzdmZDg2YzljMzRkODQxMGQ1ZGQ3Mzk5MjZhOWIyYzE1YmY4ODFmYyAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI3IEBACisyMDExLTExLTA5ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVu
Ym9zc2Eub3JnPgorCisgICAgICAgIFtRdF0gTWVyZ2UgUVRvdWNoV2ViVmlldyBhbmQgUURlc2t0
b3BXZWJWaWV3IGludG8gb25lIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1ha2UgTWluaUJyb3dzZXIgYW5kIFdlYktpdFRlc3RSdW5uZXIgd29y
ayBhZ2FpbiBhZnRlciB0aGUKKyAgICAgICAgbWVyZ2UuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci9xdC9Ccm93c2VyV2luZG93LmNwcDoKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OkJyb3dzZXJX
aW5kb3cpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6d2ViVmlldyk6CisgICAgICAgICogTWlu
aUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01p
bmlCcm93c2VyLnFyYzoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxp
Y2F0aW9uLmNwcDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9tYWluLmNwcDoKKyAgICAgICAg
KiBNaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWw6CisgICAgICAgICogTWluaUJy
b3dzZXIvcXQvcW1sL0Rlc2t0b3BWaWV3LnFtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBNaW5pQnJv
d3Nlci9xdC9xbWwvVG91Y2hWaWV3LnFtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvcXQv
UGxhdGZvcm1XZWJWaWV3UXQuY3BwOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OlBs
YXRmb3JtV2ViVmlldyk6CisKIDIwMTEtMTEtMDkgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFu
ZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW0RSVF0gd2luZG93IGludGVybmFscyBvYmpl
Y3QgaXMgbm90IHJlc2V0IGFmdGVyIGVhY2ggdGVzdApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2Vy
V2luZG93LmNwcAppbmRleCAxNDE1ZjRkNjZmNjFiYjZhZDc0YzhlMTQ5Yzk2YWRlMGQwNGM0OWY5
Li5mNTYxM2I2NzViZGEwMTM3MTM1ZTdmOGU5MWU4NmM5MzFlOGFjNzU2IDEwMDY0NAotLS0gYS9U
b29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcAorKysgYi9Ub29scy9NaW5pQnJv
d3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcApAQCAtMjgsOSArMjgsOSBAQAogCiAjaW5jbHVkZSAi
QnJvd3NlcldpbmRvdy5oIgogCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3LmgiCi0jaW5jbHVk
ZSAicXRvdWNod2Vidmlldy5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2UuaCIKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlLmgiCisjaW5jbHVkZSAicXF1aWNr
d2Vidmlld19wLmgiCiAjaW5jbHVkZSAidXRpbHMuaCIKIAogI2luY2x1ZGUgPFFEZWNsYXJhdGl2
ZUVuZ2luZT4KQEAgLTUyLDYgKzUyLDggQEAgQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhX
aW5kb3dPcHRpb25zKiBvcHRpb25zKQogICAgIGVuZ2luZSgpLT5yb290Q29udGV4dCgpLT5zZXRD
b250ZXh0UHJvcGVydHkoIm9wdGlvbnMiLCBvcHRpb25zKTsKICAgICBzZXRTb3VyY2UoUVVybCgi
cXJjOi9xbWwvQnJvd3NlcldpbmRvdy5xbWwiKSk7CiAgICAgY29ubmVjdChyb290T2JqZWN0KCks
IFNJR05BTChwYWdlVGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSwgdGhpcywgU0xPVChzZXRXaW5kb3dU
aXRsZShRU3RyaW5nKSkpOworICAgIGlmICghb3B0aW9ucy0+dXNlVG91Y2hXZWJWaWV3KCkpCisg
ICAgICAgIFFRdWlja1dlYlZpZXdQcml2YXRlOjpnZXQocm9vdE9iamVjdCgpLT5wcm9wZXJ0eSgi
d2VidmlldyIpLnZhbHVlPFFRdWlja1dlYlZpZXcqPigpKS0+c2V0VXNlVHJhZGl0aW9uYWxEZXNr
dG9wQmVoYXZpb3VyKHRydWUpOwogICAgIGlmIChvcHRpb25zLT5zdGFydE1heGltaXplZCgpKQog
ICAgICAgICBzZXRXaW5kb3dTdGF0ZShRdDo6V2luZG93TWF4aW1pemVkKTsKICAgICBlbHNlCkBA
IC02MSwxMSArNjMsNyBAQCBCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFdpbmRvd09wdGlv
bnMqIG9wdGlvbnMpCiAKIFFPYmplY3QqIEJyb3dzZXJXaW5kb3c6OndlYlZpZXcoKSBjb25zdAog
ewotICAgIFFPYmplY3QqIHdlYlZpZXcgPSByb290T2JqZWN0KCktPnByb3BlcnR5KCJ3ZWJWaWV3
IikudmFsdWU8UURlc2t0b3BXZWJWaWV3Kj4oKTsKLSAgICAvLyBUaGUgd2ViVmlldyBpcyBjcmVh
dGVkIGluIFFNTCwgdGhlcmVmb3JlIGl0IG1pZ2h0IG5vdCBleGlzdCB5ZXQuCi0gICAgaWYgKCF3
ZWJWaWV3KQotICAgICAgICB3ZWJWaWV3ID0gcm9vdE9iamVjdCgpLT5wcm9wZXJ0eSgid2ViVmll
dyIpLnZhbHVlPFFUb3VjaFdlYlZpZXcqPigpOwotICAgIHJldHVybiB3ZWJWaWV3OworICAgIHJl
dHVybiByb290T2JqZWN0KCktPnByb3BlcnR5KCJ3ZWJ2aWV3IikudmFsdWU8UVF1aWNrV2ViVmll
dyo+KCk7CiB9CiAKIHZvaWQgQnJvd3NlcldpbmRvdzo6bG9hZChjb25zdCBRU3RyaW5nJiB1cmwp
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8gYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KaW5kZXggMzBlY2Q4MWY3N2I4NTQ4NTcw
YWMyZTgzYzIzNDFhMmZmZTY0Y2E2MS4uOGNhZDE3Y2M0YmYxNjliNjk2YWFjNDE2NGZhYTA4ZDJk
NWRiOTIxNyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJv
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybwpAQCAtMjQsNiArMjQs
MTEgQEAgREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9iaW4KIAogQ09ORklHICs9IHF0d2Vi
a2l0CiAKKyMgRklYTUU6IFdoZW4gd2Via2l0LXByaXZhdGUgd29ya3MgbGV0J3MgdXNlIGl0Lgor
bG9hZChqYXZhc2NyaXB0Y29yZSkKK2xvYWQod2ViY29yZSkKK2xvYWQod2Via2l0MikKKwogUVQg
Kz0gbmV0d29yayBkZWNsYXJhdGl2ZSB3aWRnZXRzCiBtYWN4OiBRVCArPSB4bWwKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjIGIvVG9vbHMvTWluaUJy
b3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCmluZGV4IDEyZGRjMzI0YzhiYTE1YTA4ZDI2ZmI0NmIx
YTJmOGJlZGM3NmJlZDkuLmE1N2E5NTQ0ZjQxNTMzM2RiMTQ1YjNlYjNkZWY4MzQ0NWFhMDMxYTgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYworKysgYi9U
b29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKQEAgLTYsNyArNiw1IEBACiAgICAg
ICAgIDxmaWxlPmljb25zL3N0b3AucG5nPC9maWxlPgogICAgICAgICA8ZmlsZT5xbWwvQnJvd3Nl
cldpbmRvdy5xbWw8L2ZpbGU+CiAgICAgICAgIDxmaWxlPnVzZXJhZ2VudGxpc3QudHh0PC9maWxl
PgotICAgICAgICA8ZmlsZT5xbWwvRGVza3RvcFZpZXcucW1sPC9maWxlPgotICAgICAgICA8Zmls
ZT5xbWwvVG91Y2hWaWV3LnFtbDwvZmlsZT4KICAgICA8L3FyZXNvdXJjZT4KIDwvUkNDPgpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAg
Yi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcAppbmRleCBj
YTdmODFhNDAxNDgwYWEyYjkyMmIxM2YxYjY4ZTA2OGZiMGI1ZTZlLi4xYmIyM2IxZTMwNGUyMzY2
N2RiNGE0Njk4YjFhMDhhOGZlODI0Y2RjIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9x
dC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9N
aW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcApAQCAtMjgsOCArMjgsNiBAQAogCiAjaW5jbHVkZSAi
TWluaUJyb3dzZXJBcHBsaWNhdGlvbi5oIgogCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3Lmgi
Ci0jaW5jbHVkZSAicXRvdWNod2Vidmlldy5oIgogI2luY2x1ZGUgInF3ZWJuYXZpZ2F0aW9uY29u
dHJvbGxlci5oIgogI2luY2x1ZGUgInV0aWxzLmgiCiAjaW5jbHVkZSA8UVJlZ0V4cD4KZGlmZiAt
LWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIv
cXQvbWFpbi5jcHAKaW5kZXggYTIwYjI1ZTdkOWExNTBiZjdlN2M5ODNlMjcyZTI0NzNkMGQ5OTIy
Zi4uMjY4NzdhZTc3MGVhMTZiZmQ0MTY3ZDU1NDVjMjU0NGZkZmY3MDVmMCAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQv
bWFpbi5jcHAKQEAgLTMwLDYgKzMwLDkgQEAKIAogI2luY2x1ZGUgIk1pbmlCcm93c2VyQXBwbGlj
YXRpb24uaCIKICNpbmNsdWRlICJVcmxMb2FkZXIuaCIKKworI2luY2x1ZGUgPHFkZWNsYXJhdGl2
ZS5oPgorCiAjaW5jbHVkZSA8UURpcj4KICNpbmNsdWRlIDxRTGF0aW4xU3RyaW5nPgogI2luY2x1
ZGUgPFFSZWdFeHA+CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3Nl
cldpbmRvdy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwK
aW5kZXggMzhjYmEwZjdjNDBlMTQwOWQ0ODZlNzM2Zjk2NThhYjI3MjA0MWI4MC4uM2YzMTk5ZWFk
MWZmOWVlODA4MzdmNDZkNDg0ZTFlODAwZmE3Mzc2YSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0
L3FtbC9Ccm93c2VyV2luZG93LnFtbApAQCAtMzUsOCArMzUsNyBAQCBSZWN0YW5nbGUgewogICAg
IHByb3BlcnR5IGJvb2wgY2FuR29CYWNrOiBmYWxzZQogICAgIHByb3BlcnR5IGJvb2wgY2FuR29G
b3J3YXJkOiBmYWxzZQogICAgIHByb3BlcnR5IGJvb2wgY2FuU3RvcDogZmFsc2UKLSAgICBwcm9w
ZXJ0eSBpbnQgbG9hZFByb2dyZXNzOiAwCi0gICAgcHJvcGVydHkgYWxpYXMgd2ViVmlldzogdmll
d0xvYWRlci5pdGVtCisgICAgcHJvcGVydHkgYWxpYXMgd2Vidmlldzogd2ViVmlldwogCiAgICAg
c2lnbmFsIHBhZ2VUaXRsZUNoYW5nZWQoc3RyaW5nIHRpdGxlKQogCkBAIC0xNTUsMTAgKzE1NCwx
MCBAQCBSZWN0YW5nbGUgewogICAgICAgICAgICAgICAgICAgICBib3R0b206IHBhcmVudC5ib3R0
b20KICAgICAgICAgICAgICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgd2lkdGg6IHBhcmVudC53aWR0aCAvIDEwMCAqIGxvYWRQcm9n
cmVzcworICAgICAgICAgICAgICAgIHdpZHRoOiBwYXJlbnQud2lkdGggLyAxMDAgKiB3ZWJWaWV3
LmxvYWRQcm9ncmVzcwogICAgICAgICAgICAgICAgIGNvbG9yOiAiYmx1ZSIKICAgICAgICAgICAg
ICAgICBvcGFjaXR5OiAwLjMKLSAgICAgICAgICAgICAgICB2aXNpYmxlOiBsb2FkUHJvZ3Jlc3Mg
IT0gMTAwCisgICAgICAgICAgICAgICAgdmlzaWJsZTogd2ViVmlldy5sb2FkUHJvZ3Jlc3MgIT0g
MTAwCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFRleHRJbnB1dCB7CkBAIC0xOTEsMzIg
KzE5MCwzMSBAQCBSZWN0YW5nbGUgewogICAgICAgICB9CiAgICAgfQogCi0gICAgTG9hZGVyIHsK
LSAgICAgICAgaWQ6IHZpZXdMb2FkZXIKKyAgICBXZWJWaWV3IHsKKyAgICAgICAgaWQ6IHdlYlZp
ZXcKICAgICAgICAgYW5jaG9ycyB7CiAgICAgICAgICAgICB0b3A6IG5hdmlnYXRpb25CYXIuYm90
dG9tCiAgICAgICAgICAgICBsZWZ0OiBwYXJlbnQubGVmdAogICAgICAgICAgICAgcmlnaHQ6IHBh
cmVudC5yaWdodAogICAgICAgICAgICAgYm90dG9tOiBwYXJlbnQuYm90dG9tCiAgICAgICAgIH0K
LSAgICAgICAgc291cmNlOiBvcHRpb25zLnVzZVRvdWNoV2ViVmlldyA/ICJUb3VjaFZpZXcucW1s
IiA6ICJEZXNrdG9wVmlldy5xbWwiCi0gICAgfQogCi0gICAgQ29ubmVjdGlvbnMgewotICAgICAg
ICB0YXJnZXQ6IHZpZXdMb2FkZXIuaXRlbQotICAgICAgICBvblRpdGxlQ2hhbmdlZDogcGFnZVRp
dGxlQ2hhbmdlZCh2aWV3TG9hZGVyLml0ZW0udGl0bGUpCisgICAgICAgIHNpZ25hbCBuYXZpZ2F0
aW9uU3RhdGVDaGFuZ2VkCisKKyAgICAgICAgQ29tcG9uZW50Lm9uQ29tcGxldGVkOiBuYXZpZ2F0
aW9uLm5hdmlnYXRpb25TdGF0ZUNoYW5nZWQuY29ubmVjdChuYXZpZ2F0aW9uU3RhdGVDaGFuZ2Vk
KTsKKworICAgICAgICBvblRpdGxlQ2hhbmdlZDogcGFnZVRpdGxlQ2hhbmdlZCh0aXRsZSkKICAg
ICAgICAgb25VcmxDaGFuZ2VkOiB7Ci0gICAgICAgICAgICBhZGRyZXNzTGluZS50ZXh0ID0gdmll
d0xvYWRlci5pdGVtLnVybAorICAgICAgICAgICAgYWRkcmVzc0xpbmUudGV4dCA9IHVybAogICAg
ICAgICAgICAgaWYgKG9wdGlvbnMucHJpbnRMb2FkZWRVcmxzKQotICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJMb2FkZWQ6Iiwgdmlld0xvYWRlci5pdGVtLnVybCk7CisgICAgICAgICAgICAg
ICAgY29uc29sZS5sb2coIkxvYWRlZDoiLCB3ZWJWaWV3LnVybCk7CiAgICAgICAgICAgICBmb3Jj
ZUFjdGl2ZUZvY3VzKCk7CiAgICAgICAgIH0KICAgICAgICAgb25OYXZpZ2F0aW9uU3RhdGVDaGFu
Z2VkOiB7Ci0gICAgICAgICAgICBjYW5Hb0JhY2sgPSB2aWV3TG9hZGVyLml0ZW0ubmF2aWdhdGlv
bi5jYW5Hb0JhY2sKLSAgICAgICAgICAgIGNhbkdvRm9yd2FyZCA9IHZpZXdMb2FkZXIuaXRlbS5u
YXZpZ2F0aW9uLmNhbkdvRm9yd2FyZAotICAgICAgICAgICAgY2FuU3RvcCA9IHZpZXdMb2FkZXIu
aXRlbS5uYXZpZ2F0aW9uLmNhblN0b3AKKyAgICAgICAgICAgIGNhbkdvQmFjayA9IG5hdmlnYXRp
b24uY2FuR29CYWNrCisgICAgICAgICAgICBjYW5Hb0ZvcndhcmQgPSBuYXZpZ2F0aW9uLmNhbkdv
Rm9yd2FyZAorICAgICAgICAgICAgY2FuU3RvcCA9IG5hdmlnYXRpb24uY2FuU3RvcAogICAgICAg
ICB9Ci0gICAgICAgIG9uTG9hZFByb2dyZXNzQ2hhbmdlZDogbG9hZFByb2dyZXNzID0gdmlld0xv
YWRlci5pdGVtLmxvYWRQcm9ncmVzcwogICAgIH0KIAogICAgIEtleXMub25QcmVzc2VkOiB7CmRp
ZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvRGVza3RvcFZpZXcucW1sIGIvVG9v
bHMvTWluaUJyb3dzZXIvcXQvcW1sL0Rlc2t0b3BWaWV3LnFtbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzUyZGRkNTA5N2Y1NWUxNGIwMGJkMWFmMWMyMTQxNjE4ODU5OTQwOS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci9xdC9xbWwvRGVza3RvcFZpZXcucW1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBA
Ci1pbXBvcnQgUXRRdWljayAyLjAKLWltcG9ydCBRdFdlYktpdCAzLjAKLQotRGVza3RvcFdlYlZp
ZXcgewotICAgIHNpZ25hbCBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkCi0KLSAgICBDb21wb25lbnQu
b25Db21wbGV0ZWQ6IG5hdmlnYXRpb24ubmF2aWdhdGlvblN0YXRlQ2hhbmdlZC5jb25uZWN0KG5h
dmlnYXRpb25TdGF0ZUNoYW5nZWQpCi19CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9x
dC9xbWwvVG91Y2hWaWV3LnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ub3VjaFZpZXcu
cW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWFmZGIwNzAwMWI5NmYyZmY1Mjdi
OWUwMmI5YWM2ZmIxODEwZDdjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ub3VjaFZpZXcucW1sCisrKyAvZGV2
L251bGwKQEAgLTEsOCArMCwwIEBACi1pbXBvcnQgUXRRdWljayAyLjAKLWltcG9ydCBRdFdlYktp
dCAzLjAKLQotVG91Y2hXZWJWaWV3IHsKLSAgICBzaWduYWwgbmF2aWdhdGlvblN0YXRlQ2hhbmdl
ZAotCi0gICAgQ29tcG9uZW50Lm9uQ29tcGxldGVkOiBuYXZpZ2F0aW9uLm5hdmlnYXRpb25TdGF0
ZUNoYW5nZWQuY29ubmVjdChuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkKQotfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggNGE1ODliZTkzNWVhNDhmNGQwOGNmNWIz
N2ExNGE4Y2Q5MGE5NDE3OC4uYTZkNTFmMjEwYjg4OWY3MDJlOWExN2ZmMDc4OGE5Njc5NDE3NGRj
NSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBAIC0yOSw4ICsy
OSw4IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogCiAjaWYgZGVmaW5lZChC
VUlMRElOR19RVF9fKQotY2xhc3MgUURlc2t0b3BXZWJWaWV3OwotdHlwZWRlZiBRRGVza3RvcFdl
YlZpZXcqIFBsYXRmb3JtV0tWaWV3OworY2xhc3MgUVF1aWNrV2ViVmlldzsKK3R5cGVkZWYgUVF1
aWNrV2ViVmlldyogUGxhdGZvcm1XS1ZpZXc7CiBjbGFzcyBRUXVpY2tWaWV3OwogdHlwZWRlZiBR
UXVpY2tWaWV3KiBQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBf
X0FQUExFX18KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1X
ZWJWaWV3UXQuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdR
dC5jcHAKaW5kZXggMjJlM2FhNjQxYmUyMWIzMWEyYjI2ZmMwODc3MjdjOWZmYTAyMGVhZC4uNzdj
MzFmZjBjOTQyNzE4YjUwMGYwZmFiODM4OTc5YTE1ZjNkNjVlNCAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgotI2lu
Y2x1ZGUgInFkZXNrdG9wd2Vidmlldy5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXcuaCIKIAog
I2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRRGVjbGFyYXRpdmVQcm9wZXJ0eT4K
QEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIH07CiAKIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZv
cm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCi0gICAgOiBtX3ZpZXcobmV3IFFEZXNrdG9wV2ViVmlldyhjb250ZXh0UmVmLCBwYWdl
R3JvdXBSZWYpKQorICAgIDogbV92aWV3KG5ldyBRUXVpY2tXZWJWaWV3KGNvbnRleHRSZWYsIHBh
Z2VHcm91cFJlZikpCiAgICAgLCBtX3dpbmRvdyhuZXcgV3JhcHBlcldpbmRvdyhtX3ZpZXcpKQog
ICAgICwgbV93aW5kb3dJc0tleSh0cnVlKQogewpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hh
bmdlTG9nCmluZGV4IDhlZWFlMDEzMGZkZTU0MmQwOWYwZjYxNDEwMjM3MDU1ZjQ4Y2I1ZGEuLmZl
ZWQ2ODJiOTYxNTJkZjllYTEyMjI5ZmM4MGQyNDE5ZjQ4MjIxZDAgMTAwNjQ0Ci0tLSBhL0NoYW5n
ZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMS0wOSAgQWxleGlz
IE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdIE1l
cmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzNTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgb2xkIHRl
c3RzIGFuZCBtZXJnZSB0aGVtIGludG8gdGhlIG5ldyBRUXVpY2tXZWJWaWV3IGRpcmVjdG9yeS4K
KworICAgICAgICAqIFNvdXJjZS90ZXN0cy5wcmk6CisKIDIwMTEtMTEtMDkgIFRvciBBcm5lIFZl
c3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gT25seSBj
b3B5IGZyYW1ld29yayBoZWFkZXJzIG9uY2Ugd2hlbiBkZWJ1Z19hbmRfcmVsZWFzZSBpcyBlbmFi
bGVkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114472</attachid>
            <date>2011-11-10 04:13:31 -0800</date>
            <delta_ts>2011-11-10 05:03:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71355-20111110091322.patch</filename>
            <type>text/plain</type>
            <size>164933</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4MzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZTVhZjUzYWI1MjU4
NDEzMTBkYzVjN2MwZmIyNjA3Zjk1YzIwMmQ3OC4uYzcwNWIxN2ZlZGI3YjAzZWMwNjZhYzBkZTI2
OGYyMDYzZWJhNTQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMS0w
OSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdIE1lcmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEz
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWdp
c3RlciBvbmx5IFFRdWlja1dlYlZpZXcgYW5kIFFRdWlja1dlYlBhZ2UgaW4gdGhlIHBsdWdpbi4K
KworICAgICAgICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXRRbWxQ
bHVnaW46OnJlZ2lzdGVyVHlwZXMpOgorCiAyMDExLTExLTA5ICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVuYWJsZSBleHBvcnRzIGFu
ZCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgaW4gc3RhdGljIGxpYnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0ZjYy
MGRmMDA2YzFhN2YzMjc0ZGE1Y2VkZTY2NjFmMWE1ZGMxOGM0Li5iODk2YTQ5ZjdkYzM5ZjQ4ZDc4
NmI4Nzg2MmM3MjBkZTU2NzQ3YTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU1IEBACisyMDEx
LTExLTA5ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFtRdF0gTWVyZ2UgUVRvdWNoV2ViVmlldyBhbmQgUURlc2t0b3BXZWJWaWV3IGludG8g
b25lIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MTM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1lcmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBjbGFzcyBj
YWxsZWQKKyAgICAgICAgUVF1aWNrV2ViVmlldyBhbmQgaXRzIGF0dGFjaGVkIHBhZ2UgUVF1aWNr
V2ViUGFnZS4gWW91IGNhbiBzd2l0Y2ggdG8gdGhlCisgICAgICAgIHRyYWRpdGlvbmFsIGRlc2t0
b3AgdXNlIGNhc2Ugd2l0aCB0aGUgcHJpdmF0ZSBoZWFkZXIuIEFsc28gbm93IG9uIGRlc2t0b3AK
KyAgICAgICAgcGxhdGZvcm1zIEFDIGlzIHR1cm4gb24gYnkgZGVmYXVsdC4gSSBhbHNvIG1lcmdl
ZCBvdXIgdHdvCisgICAgICAgIHN1YmNsYXNzZXMgb2YgUXRWaWV3SW50ZXJmYWNlIGludG8gb25l
IGFzIHRoZSBzcGxpdCBkb2Vzbid0IG1ha2UKKyAgICAgICAgdGhhdCBtdWNoIHNlbnNlIGFueW1v
cmUuIEluIHRoZSBmdXR1cmUgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGVuYWJsZSB0aGUKKyAgICAg
ICAgdHJhZGl0aW9uYWwgZGVza3RvcCB1c2UgY2FzZSBkZXBlbmRpbmcgdGhlIHBsYXRmb3JtIHRo
ZSBjb2RlIGlzIHJ1bm5pbmcuCisgICAgICAgIEFQSSB0ZXN0cyBhbmQgUU1MIHRlc3RzIGhhdmUg
YmVlbiB1cGRhdGVkLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2
aWV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmll
d19wLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZp
ZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2
aWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZp
ZXdfcC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFn
ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnBhZ2UuY3BwLgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZSk6Cisg
ICAgICAgIChRUXVpY2tXZWJQYWdlOjp+UVF1aWNrV2ViUGFnZSk6CisgICAgICAgIChRUXVpY2tX
ZWJQYWdlOjprZXlQcmVzc0V2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmtleVJlbGVh
c2VFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjppbnB1dE1ldGhvZEV2ZW50KToKKyAg
ICAgICAgKFFRdWlja1dlYlBhZ2U6OmZvY3VzSW5FdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQ
YWdlOjpmb2N1c091dEV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6Om1vdXNlUHJlc3NF
dmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjptb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChRUXVpY2tXZWJQYWdlOjptb3VzZVJlbGVhc2VFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQ
YWdlOjptb3VzZURvdWJsZUNsaWNrRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6d2hl
ZWxFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpob3ZlckVudGVyRXZlbnQpOgorICAg
ICAgICAoUVF1aWNrV2ViUGFnZTo6aG92ZXJNb3ZlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2Vi
UGFnZTo6aG92ZXJMZWF2ZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmRyYWdNb3Zl
RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6ZHJhZ0VudGVyRXZlbnQpOgorICAgICAg
ICAoUVF1aWNrV2ViUGFnZTo6ZHJhZ0xlYXZlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFn
ZTo6ZHJvcEV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6Omdlb21ldHJ5Q2hhbmdlZCk6
CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpldmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdl
Ojp0b3VjaEV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6Oml0ZW1DaGFuZ2UpOgorICAg
ICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OlFRdWlja1dlYlBhZ2VQcml2YXRlKToKKyAgICAg
ICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjppbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKToKKyAg
ICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpzZXRQYWdlUHJveHkpOgorICAgICAgICAoY29t
cHV0ZUVmZmVjdGl2ZU9wYWNpdHkpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpf
cV9vbkFmdGVyU2NlbmVSZW5kZXIpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6Ol9x
X29uU2NlbmVHcmFwaEluaXRpYWxpemVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXRvdWNod2VicGFnZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZV9wLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0
b3VjaHdlYnBhZ2VfcC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5jcHA6IEFkZGVkLgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZp
ZXdQcml2YXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjplbmFibGVNb3VzZUV2
ZW50cyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6ZGlzYWJsZU1vdXNlRXZlbnRz
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplKToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplRGVza3RvcCk6CisgICAgICAgIChRUXVp
Y2tXZWJWaWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZVRvdWNoKToKKyAgICAgICAgKFFRdWlja1dlYlZp
ZXdQcml2YXRlOjpsb2FkRGlkQ29tbWl0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRl
Ojpjb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNj
cm9sbFBvc2l0aW9uUmVxdWVzdGVkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpf
cV92aWV3cG9ydFVwZGF0ZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX3Zp
ZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1By
aXZhdGU6Ol9xX29uVmlzaWJsZUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
dXBkYXRlVmlld3BvcnRDb25zdHJhaW50cyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0
ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRl
OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpj
aG9vc2VGaWxlcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffb25PcGVuUGFu
ZWxGaWxlc1NlbGVjdGVkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV9vbk9w
ZW5QYW5lbEZpbmlzaGVkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRVc2VU
cmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpOgorICAgICAgICAodG9Qb2xpY3lBY3Rpb24pOgor
ICAgICAgICAoaGFzTWV0YU1ldGhvZCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
bmF2aWdhdGlvblBvbGljeUZvclVSTCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
c2V0UGFnZVByb3h5KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OlFRdWlja1dlYlZpZXcpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlldzo6flFRdWlja1dlYlZpZXcpOgorICAgICAgICAoUVF1aWNr
V2ViVmlldzo6cGFnZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpsb2FkKToKKyAgICAgICAg
KFFRdWlja1dlYlZpZXc6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OnVy
bCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpsb2FkUHJvZ3Jlc3MpOgorICAgICAgICAoUVF1
aWNrV2ViVmlldzo6dGl0bGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6bmF2aWdhdGlvbkNv
bnRyb2xsZXIpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6cHJlZmVyZW5jZXMpOgorICAgICAg
ICAoUVF1aWNrV2ViVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKFFRdWlja1dlYlZp
ZXc6OnRvdWNoRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6cGFnZVJlZik6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xdG91Y2h3ZWJ2aWV3X3AuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy9jb21tb252aWV3dGVzdHMucHJvOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL3RzdF9j
b21tb252aWV3dGVzdHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvY29tbW9udmlld3Rlc3RzL3dlYnZpZXdhYnN0cmFjdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vidmlld2Fi
c3RyYWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
ZGVza3RvcHdlYnZpZXcvcWRlc2t0b3B3ZWJ2aWV3LnBybzogUmVtb3ZlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3Rz
L0Rlc2t0b3BXZWJWaWV3L3RzdF9kb3dubG9hZC5xbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbGlua0hvdmVyZWQucW1sOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcv
dHN0X2xvYWRGYWlsLnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1sOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVz
c1NpZ25hbC5xbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9E
ZXNrdG9wV2ViVmlldy90c3RfbG9hZFplcm9TaXplVmlldy5xbWw6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFt
bDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJW
aWV3L3RzdF9uYXZpZ2F0aW9uUG9saWN5Rm9yVXJsLnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9wcmVmZXJlbmNlcy5xbWw6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmll
dy90c3RfcHJvcGVydGllcy5xbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWQucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkRmFpbC5xbWw6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xv
YWROZWdhdGl2ZVNpemVWaWV3LnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3Rz
L3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZFByb2dyZXNzLnFtbDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZFByb2dy
ZXNzU2lnbmFsLnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3Rz
L1RvdWNoV2ViVmlldy90c3RfbG9hZFplcm9TaXplVmlldy5xbWw6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMucW1s
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJv
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvdHN0X3FtbHRlc3Rz
LmNwcDoKKyAgICAgICAgKERlc2t0b3BXZWJWaWV3OjpEZXNrdG9wV2ViVmlldyk6CisgICAgICAg
IChtYWluKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0b3VjaHdlYnZpZXcv
cXRvdWNod2Vidmlldy5wcm86IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xdG91Y2h3ZWJ2aWV3L3RzdF9xdG91Y2h3ZWJ2aWV3LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3R3aW5kb3cuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0R2Vz
dHVyZVJlY29nbml6ZXI6OlF0R2VzdHVyZVJlY29nbml6ZXIpOgorICAgICAgICAoV2ViS2l0OjpR
dEdlc3R1cmVSZWNvZ25pemVyOjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQ
YW5HZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSk6CisgICAg
ICAgIChXZWJLaXQ6OlF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25pemUpOgorICAgICAgICAoV2ViS2l0OjpR
dFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZTo6UXRUb3VjaFZpZXdJbnRlcmZhY2UpOgorICAgICAg
ICAoV2ViS2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZTo6bG9hZERpZEZhaWwpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9RdFRvdWNoVmlld0ludGVyZmFjZS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFZpZXdJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpzZXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lKToKKyAgICAgICAgKiBXZWJLaXQyLnByaToKKwogMjAxMS0xMS0wOSAgU2ltb24gSGF1
c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBFbmFibGUg
ZXhwb3J0cyBhbmQgY29uc3RydWN0b3IgZnVuY3Rpb25zIGluIHN0YXRpYyBsaWJzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKaW5kZXggYTUxZWRiYzRkOGM1MjkwZTg1OWYy
YTQwNzJkZGZlNjI5M2QxYzRmMi4uMmI5OGJlN2JiODk1ODMyMjBmMTU0MzU0ODY4ZTc3ZDcwYWZi
MzcxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcApAQCAtMjMsOSAr
MjMsOCBAQAogI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZXh0ZW5zaW9ucGx1
Z2luLmg+CiAKICNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKLSNpbmNsdWRlICJxZGVza3RvcHdl
YnZpZXcuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicXRvdWNod2Vi
dmlldy5oIgorI2luY2x1ZGUgInFxdWlja3dlYnBhZ2UuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2
aWV3LmgiCiAjaW5jbHVkZSAicXdlYmRvd25sb2FkaXRlbS5oIgogI2luY2x1ZGUgInF3ZWJuYXZp
Z2F0aW9uY29udHJvbGxlci5oIgogI2luY2x1ZGUgInF3ZWJwcmVmZXJlbmNlcy5oIgpAQCAtNTAs
MTEgKzQ5LDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIp
Ci0gICAgICAgIHFtbFJlZ2lzdGVyVHlwZTxRRGVza3RvcFdlYlZpZXc+KHVyaSwgMywgMCwgIkRl
c2t0b3BXZWJWaWV3Iik7Ci0gICAgICAgIHFtbFJlZ2lzdGVyVHlwZTxRVG91Y2hXZWJWaWV3Pih1
cmksIDMsIDAsICJUb3VjaFdlYlZpZXciKTsKKyAgICAgICAgcW1sUmVnaXN0ZXJUeXBlPFFRdWlj
a1dlYlZpZXc+KHVyaSwgMywgMCwgIldlYlZpZXciKTsKICAgICAgICAgcW1sUmVnaXN0ZXJVbmNy
ZWF0YWJsZVR5cGU8UVdlYk5hdmlnYXRpb25Db250cm9sbGVyPih1cmksIDMsIDAsICJOYXZpZ2F0
aW9uQ29udHJvbGxlciIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3Rh
bmNlIG9mIE5hdmlnYXRpb25Db250cm9sbGVyIikpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3Jl
YXRhYmxlVHlwZTxRV2ViUHJlZmVyZW5jZXM+KHVyaSwgMywgMCwgIldlYlByZWZlcmVuY2VzIiwg
UU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgV2ViUHJlZmVy
ZW5jZXMiKSk7Ci0gICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFUb3VjaFdlYlBh
Z2U+KHVyaSwgMywgMCwgIlRvdWNoV2ViUGFnZSIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRl
IHNlcGFyYXRlIGluc3RhbmNlIG9mIFRvdWNoV2ViUGFnZSwgdXNlIFRvdWNoV2ViVmlldyIpKTsK
KyAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVF1aWNrV2ViUGFnZT4odXJpLCAz
LCAwLCAiV2ViUGFnZSIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3Rh
bmNlIG9mIFdlYlBhZ2UsIHVzZSBXZWJWaWV3IikpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3Jl
YXRhYmxlVHlwZTxRTmV0d29ya1JlcGx5Pih1cmksIDMsIDAsICJOZXR3b3JrUmVwbHkiLCBRT2Jq
ZWN0Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBOZXR3b3JrUmVwbHki
KSk7CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFXZWJEb3dubG9hZEl0ZW0+
KHVyaSwgNSwgMCwgIkRvd25sb2FkSXRlbSIsIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNl
cGFyYXRlIGluc3RhbmNlIG9mIERvd25sb2FkSXRlbSIpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5k
ZXggYTFhYzk1MmIzZTYzYWQxZWEyNjU4NWNjMDlkMGI4MTM5NGU1Y2E0NS4uNjdiZWM0ZjBlZmNk
OTZlMjA1M2IxY2U3YTdlYjIyYjlhODg3Mjc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yNDMsNyArMjQz
LDYgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZENsaWVudC5o
IFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L0NsaWVu
dEltcGwuaCBcCi0gICAgVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmggXAogICAg
IFVJUHJvY2Vzcy9xdC9RdFBvbGljeUludGVyZmFjZS5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRH
ZXN0dXJlUmVjb2duaXplci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2du
aXplci5oIFwKQEAgLTQ4Nyw3ICs0ODYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3Mv
V2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAgXAogICAg
IFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9x
dC9RdFRvdWNoVmlld0ludGVyZmFjZS5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdJbnRl
cmZhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvV0tWaWV3LmgKaW5kZXggODJkZWE0N2Y1ZjZiOWM4NDcxMGJlYzZiNjA3NzQz
Y2ZmZjgyMGEzYi4uMzczYjdkZmJiNjI2Y2RkZjQ5Mzk4MTQ3NzE2YTdiZTA1MGY2NmU0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCkBAIC0yMCw5ICsyMCw4IEBA
CiAjaWZuZGVmIFdLVmlld19oCiAjZGVmaW5lIFdLVmlld19oCiAKLSNpbmNsdWRlIDxXZWJLaXQy
L3FkZXNrdG9wd2Vidmlldy5oPgotI2luY2x1ZGUgPFdlYktpdDIvcXRvdWNod2Vidmlldy5oPgot
I2luY2x1ZGUgPFdlYktpdDIvcXRvdWNod2VicGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvcXF1
aWNrd2VicGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvcXF1aWNrd2Vidmlldy5oPgogI2luY2x1
ZGUgPFdlYktpdDIvcXdlYmRvd25sb2FkaXRlbS5oPgogI2luY2x1ZGUgPFdlYktpdDIvcXdlYm5h
dmlnYXRpb25jb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9xd2VicHJlZmVyZW5jZXMu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3MDdmZjgwNDBkMjgzYzQzYmJjNDIy
ODVlOTgwNTRkNjQyZTM0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInFiYXNld2Vidmlldy5oIgotCi0jaW5jbHVkZSAiUXRX
ZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJxYmFzZXdlYnZpZXdfcC5oIgotI2luY2x1ZGUgInF3
ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oIgotCi1RQmFzZVdlYlZpZXdQcml2YXRlOjpRQmFzZVdl
YlZpZXdQcml2YXRlKCkKLSAgICA6IHFfcHRyKDApCi0gICAgLCBuYXZpZ2F0aW9uQ29udHJvbGxl
cigwKQotewotfQotCi12b2lkIFFCYXNlV2ViVmlld1ByaXZhdGU6OnNldFBhZ2VQcm94eShRdFdl
YlBhZ2VQcm94eSogcGFnZVByb3h5KQotewotICAgIHRoaXMtPnBhZ2VQcm94eS5yZXNldChwYWdl
UHJveHkpOwotICAgIFFPYmplY3Q6OmNvbm5lY3QocGFnZVByb3h5LCBTSUdOQUwocmVjZWl2ZWRN
ZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KFFWYXJpYW50TWFwKSksIHFfcHRyLCBTSUdOQUwo
bWVzc2FnZVJlY2VpdmVkKFFWYXJpYW50TWFwKSkpOwotfQotCi1RQmFzZVdlYlZpZXc6OlFCYXNl
V2ViVmlldyhRQmFzZVdlYlZpZXdQcml2YXRlICZkZCwgUVF1aWNrSXRlbSAqcGFyZW50KQotICAg
IDogUVF1aWNrUGFpbnRlZEl0ZW0ocGFyZW50KQotICAgICwgZF9wdHIoJmRkKQotewotICAgIGRf
cHRyLT5xX3B0ciA9IHRoaXM7Ci19Ci0KLVFCYXNlV2ViVmlldzo6flFCYXNlV2ViVmlldygpCi17
Ci19Ci0KLXZvaWQgUUJhc2VXZWJWaWV3Ojpsb2FkKGNvbnN0IFFVcmwmIHVybCkKLXsKLSAgICBR
X0QoUUJhc2VXZWJWaWV3KTsKLSAgICBkLT5wYWdlUHJveHktPmxvYWQodXJsKTsKLX0KLQotdm9p
ZCBRQmFzZVdlYlZpZXc6OnBvc3RNZXNzYWdlKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgUV9EKFFCYXNlV2ViVmlldyk7Ci0gICAgZC0+cGFnZVByb3h5LT5wb3N0TWVzc2FnZVRvTmF2
aWdhdG9yUXRPYmplY3QobWVzc2FnZSk7Ci19Ci0KLVFVcmwgUUJhc2VXZWJWaWV3Ojp1cmwoKSBj
b25zdAotewotICAgIFFfRChjb25zdCBRQmFzZVdlYlZpZXcpOwotICAgIHJldHVybiBkLT5wYWdl
UHJveHktPnVybCgpOwotfQotCi1pbnQgUUJhc2VXZWJWaWV3Ojpsb2FkUHJvZ3Jlc3MoKSBjb25z
dAotewotICAgIFFfRChjb25zdCBRQmFzZVdlYlZpZXcpOwotICAgIHJldHVybiBkLT5wYWdlUHJv
eHktPmxvYWRQcm9ncmVzcygpOwotfQotCi1RU3RyaW5nIFFCYXNlV2ViVmlldzo6dGl0bGUoKSBj
b25zdAotewotICAgIFFfRChjb25zdCBRQmFzZVdlYlZpZXcpOwotICAgIHJldHVybiBkLT5wYWdl
UHJveHktPnRpdGxlKCk7Ci19Ci0KLVFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciogUUJhc2VXZWJW
aWV3OjpuYXZpZ2F0aW9uQ29udHJvbGxlcigpIGNvbnN0Ci17Ci0gICAgUV9EKGNvbnN0IFFCYXNl
V2ViVmlldyk7Ci0gICAgaWYgKCFkLT5uYXZpZ2F0aW9uQ29udHJvbGxlcikKLSAgICAgICAgY29u
c3RfY2FzdDxRQmFzZVdlYlZpZXdQcml2YXRlKj4oZCktPm5hdmlnYXRpb25Db250cm9sbGVyID0g
bmV3IFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlcihkLT5wYWdlUHJveHkuZGF0YSgpKTsKLSAgICBy
ZXR1cm4gZC0+bmF2aWdhdGlvbkNvbnRyb2xsZXI7Ci19Ci0KLVFXZWJQcmVmZXJlbmNlcyogUUJh
c2VXZWJWaWV3OjpwcmVmZXJlbmNlcygpIGNvbnN0Ci17Ci0gICAgUV9EKGNvbnN0IFFCYXNlV2Vi
Vmlldyk7Ci0gICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+cHJlZmVyZW5jZXMoKTsKLX0KLQotI2lu
Y2x1ZGUgIm1vY19xYmFzZXdlYnZpZXcuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1
Y2Y1NTAxMDhlMzEwYjYxODBmYjc1YjczZjQzZjE2OTY1YTdiMmQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xYmFzZXdlYnZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi0jaWZuZGVmIHFiYXNld2Vidmlld19oCi0jZGVmaW5lIHFiYXNld2Vidmll
d19oCi0KLSNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZS9xcXVpY2twYWludGVkaXRlbS5oPgotCi1jbGFzcyBRQmFzZVdlYlZpZXdQcml2YXRlOwotY2xh
c3MgUVdlYkRvd25sb2FkSXRlbTsKLWNsYXNzIFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlcjsKLWNs
YXNzIFFXZWJQcmVmZXJlbmNlczsKLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRUGFpbnRl
cjsKLWNsYXNzIFFVcmw7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLWNsYXNzIFFXRUJLSVRfRVhQT1JU
IFFCYXNlV2ViVmlldyA6IHB1YmxpYyBRUXVpY2tQYWludGVkSXRlbSB7Ci0gICAgUV9PQkpFQ1QK
LSAgICBRX1BST1BFUlRZKFFTdHJpbmcgdGl0bGUgUkVBRCB0aXRsZSBOT1RJRlkgdGl0bGVDaGFu
Z2VkKQotICAgIFFfUFJPUEVSVFkoUVVybCB1cmwgUkVBRCB1cmwgTk9USUZZIHVybENoYW5nZWQp
Ci0gICAgUV9QUk9QRVJUWShpbnQgbG9hZFByb2dyZXNzIFJFQUQgbG9hZFByb2dyZXNzIE5PVElG
WSBsb2FkUHJvZ3Jlc3NDaGFuZ2VkKQotICAgIFFfUFJPUEVSVFkoUVdlYk5hdmlnYXRpb25Db250
cm9sbGVyKiBuYXZpZ2F0aW9uIFJFQUQgbmF2aWdhdGlvbkNvbnRyb2xsZXIgQ09OU1RBTlQgRklO
QUwpCi0gICAgUV9QUk9QRVJUWShRV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzIFJFQUQgcHJl
ZmVyZW5jZXMgQ09OU1RBTlQgRklOQUwpCi0gICAgUV9FTlVNUyhOYXZpZ2F0aW9uUG9saWN5KQot
ICAgIFFfRU5VTVMoRXJyb3JUeXBlKQotcHVibGljOgotICAgIGVudW0gTmF2aWdhdGlvblBvbGlj
eSB7Ci0gICAgICAgIFVzZVBvbGljeSwKLSAgICAgICAgRG93bmxvYWRQb2xpY3ksCi0gICAgICAg
IElnbm9yZVBvbGljeQotICAgIH07Ci0KLSAgICBlbnVtIEVycm9yVHlwZSB7Ci0gICAgICAgIEVu
Z2luZUVycm9yLAotICAgICAgICBOZXR3b3JrRXJyb3IsCi0gICAgICAgIEh0dHBFcnJvciwKLSAg
ICAgICAgRG93bmxvYWRFcnJvcgotICAgIH07Ci0gICAgdmlydHVhbCB+UUJhc2VXZWJWaWV3KCk7
Ci0KLSAgICAvLyBGSVhNRTogV2UgaW5oZXJpdCBmcm9tIFFRdWlja1BhaW50ZWRJdGVtIHVudGls
IFFEZXNrdG9wV2ViVmlldyB3b3JrcyBvbiB0b3Agb2YgYSBwbGFpbiBRUXVpY2tJdGVtLgotICAg
IHZvaWQgcGFpbnQoUVBhaW50ZXIqKSB7IH0KLQotICAgIFFVcmwgdXJsKCkgY29uc3Q7Ci0gICAg
UVN0cmluZyB0aXRsZSgpIGNvbnN0OwotICAgIGludCBsb2FkUHJvZ3Jlc3MoKSBjb25zdDsKLQot
ICAgIFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciogbmF2aWdhdGlvbkNvbnRyb2xsZXIoKSBjb25z
dDsKLSAgICBRV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzKCkgY29uc3Q7Ci0KLXB1YmxpYyBR
X1NMT1RTOgotICAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYpOwotICAgICB2b2lkIHBvc3RNZXNz
YWdlKGNvbnN0IFFTdHJpbmcmKTsKLQotUV9TSUdOQUxTOgotICAgIHZvaWQgdGl0bGVDaGFuZ2Vk
KGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKLSAgICB2b2lkIHN0YXR1c0Jhck1lc3NhZ2VDaGFuZ2Vk
KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKLSAgICB2
b2lkIGxvYWRTdWNjZWVkZWQoKTsKLSAgICB2b2lkIGxvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpF
cnJvclR5cGUgZXJyb3JUeXBlLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBRVXJsJiB1cmwpOwotICAg
IHZvaWQgbG9hZFByb2dyZXNzQ2hhbmdlZChpbnQgcHJvZ3Jlc3MpOwotICAgIHZvaWQgdXJsQ2hh
bmdlZChjb25zdCBRVXJsJiB1cmwpOwotICAgIHZvaWQgbWVzc2FnZVJlY2VpdmVkKGNvbnN0IFFW
YXJpYW50TWFwJiBtZXNzYWdlKTsKLSAgICB2b2lkIGRvd25sb2FkUmVxdWVzdGVkKFFXZWJEb3du
bG9hZEl0ZW0qIGRvd25sb2FkSXRlbSk7Ci0KLXByb3RlY3RlZDoKLSAgICBRQmFzZVdlYlZpZXco
UUJhc2VXZWJWaWV3UHJpdmF0ZSAmZGQsIFFRdWlja0l0ZW0gKnBhcmVudCA9IDApOwotICAgIC8v
IEhpZGVzIFFPYmplY3Q6OmRfcHRyIGFsbG93aW5nIHVzIHRvIHVzZSB0aGUgY29udmVuaWVuY2Ug
bWFjcm9zLgotICAgIFFTY29wZWRQb2ludGVyPFFCYXNlV2ViVmlld1ByaXZhdGU+IGRfcHRyOwot
cHJpdmF0ZToKLSAgICBRX0RFQ0xBUkVfUFJJVkFURShRQmFzZVdlYlZpZXcpCi0gICAgZnJpZW5k
IGNsYXNzIFF0V2ViUGFnZVByb3h5OwotfTsKLQotI2VuZGlmIC8qIHFiYXNld2Vidmlld19oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmll
d19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlld19wLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZDVjZmMzMjFmMDY3Njc4NDdmZmExMGVm
YTk1Mjk5NTMxNWY0MzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXdfcC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYg
cWJhc2V3ZWJ2aWV3X3BfaAotI2RlZmluZSBxYmFzZXdlYnZpZXdfcF9oCi0KLSNpbmNsdWRlICJx
YmFzZXdlYnZpZXcuaCIKLQotY2xhc3MgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyOwotY2xhc3Mg
UXRXZWJQYWdlUHJveHk7Ci0KLWNsYXNzIFFCYXNlV2ViVmlld1ByaXZhdGUgewotICAgIFFfREVD
TEFSRV9QVUJMSUMoUUJhc2VXZWJWaWV3KQotcHVibGljOgotICAgIFFCYXNlV2ViVmlld1ByaXZh
dGUoKTsKLSAgICB2aXJ0dWFsIH5RQmFzZVdlYlZpZXdQcml2YXRlKCkgeyB9Ci0gICAgdm9pZCBz
ZXRQYWdlUHJveHkoUXRXZWJQYWdlUHJveHkqKTsKLSAgICBRQmFzZVdlYlZpZXcqIHFfcHRyOwot
ICAgIFFTY29wZWRQb2ludGVyPFF0V2ViUGFnZVByb3h5PiBwYWdlUHJveHk7Ci0KLSAgICBRV2Vi
TmF2aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmlnYXRpb25Db250cm9sbGVyOwotfTsKLQotI2VuZGlm
IC8qIHFiYXNld2Vidmlld19wX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDcxZGVjZTc1NGFmODA1NWJmZjU1YTI4MmI2YzQ0MzQ3ZjYyZTNlYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJx
ZGVza3RvcHdlYnZpZXcuaCIKLQotI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVk
ZSAiUXRXZWJFcnJvci5oIgotI2luY2x1ZGUgIlV0aWxzUXQuaCIKLSNpbmNsdWRlICJxZGVza3Rv
cHdlYnZpZXdfcC5oIgotI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0uaCIKLSNpbmNsdWRlICJx
d2VicHJlZmVyZW5jZXNfcC5oIgotI2luY2x1ZGUgPFFGaWxlRGlhbG9nPgotI2luY2x1ZGUgPFF0
RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZW5naW5lLmg+Ci0jaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZS9xcXVpY2tjYW52YXMuaD4KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FxdWlja3ZpZXcuaD4K
LSNpbmNsdWRlIDxRdEd1aS9RQ3Vyc29yPgotI2luY2x1ZGUgPFF0R3VpL1FEZXNrdG9wU2Vydmlj
ZXM+Ci0jaW5jbHVkZSA8UXRHdWkvUURyYWc+Ci0jaW5jbHVkZSA8UXRHdWkvUUZvY3VzRXZlbnQ+
Ci0jaW5jbHVkZSA8UXRHdWkvUUd1aUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFF0R3VpL1FIb3Zl
ckV2ZW50PgotI2luY2x1ZGUgPFF0R3VpL1FJbnB1dE1ldGhvZEV2ZW50PgotI2luY2x1ZGUgPFF0
R3VpL1FLZXlFdmVudD4KLSNpbmNsdWRlIDxRdEd1aS9RVG91Y2hFdmVudD4KLSNpbmNsdWRlIDxR
dEd1aS9RV2hlZWxFdmVudD4KLSNpbmNsdWRlIDxRdFdpZGdldHMvUUlucHV0RGlhbG9nPgotI2lu
Y2x1ZGUgPFF0V2lkZ2V0cy9RTWVzc2FnZUJveD4KLSNpbmNsdWRlIDxXS09wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyLmg+Ci0KLVFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OlFEZXNrdG9wV2ViVmlld1By
aXZhdGUoKQotICAgIDogaXNDcmFzaGVkKGZhbHNlKQotewotfQotCi12b2lkIFFEZXNrdG9wV2Vi
Vmlld1ByaXZhdGU6OmVuYWJsZU1vdXNlRXZlbnRzKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJW
aWV3KTsKLSAgICBxLT5zZXRBY2NlcHRlZE1vdXNlQnV0dG9ucyhRdDo6TW91c2VCdXR0b25NYXNr
KTsKLSAgICBxLT5zZXRBY2NlcHRIb3ZlckV2ZW50cyh0cnVlKTsKLX0KLQotdm9pZCBRRGVza3Rv
cFdlYlZpZXdQcml2YXRlOjpkaXNhYmxlTW91c2VFdmVudHMoKQotewotICAgIFFfUShRRGVza3Rv
cFdlYlZpZXcpOwotICAgIHEtPnNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpOb0J1dHRvbik7
Ci0gICAgcS0+c2V0QWNjZXB0SG92ZXJFdmVudHMoZmFsc2UpOwotfQotCi1RRGVza3RvcFdlYlZp
ZXcqIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OndlYlZpZXcoKQotewotICAgIHJldHVybiBxX2Z1
bmMoKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpzZXRWaWV3TmVlZHNEaXNw
bGF5KGNvbnN0IFFSZWN0JiBpbnZhbGlkYXRlZEFyZWEpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2Vi
Vmlldyk7Ci0gICAgcS0+dXBkYXRlKGludmFsaWRhdGVkQXJlYSk7Ci19Ci0KLVFTaXplIFFEZXNr
dG9wV2ViVmlld1ByaXZhdGU6OmRyYXdpbmdBcmVhU2l6ZSgpCi17Ci0gICAgUV9RKFFEZXNrdG9w
V2ViVmlldyk7Ci0gICAgcmV0dXJuIFFTaXplKHEtPndpZHRoKCksIHEtPmhlaWdodCgpKTsKLX0K
LQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpjb250ZW50U2l6ZUNoYW5nZWQoY29uc3Qg
UVNpemUmKQotewotfQotCi1ib29sIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmlzQWN0aXZlKCkK
LXsKLSAgICAvLyBGSVhNRTogVGhlIHNjZW5lIGdyYXBoIGRpZCBub3QgaGF2ZSB0aGUgY29uY2Vw
dCBvZiBiZWluZyBhY3RpdmUgb3Igbm90IHdoZW4gdGhpcyB3YXMgd3JpdHRlbi4KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpoYXNGb2N1cygpCi17
Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgcmV0dXJuIHEtPmhhc0ZvY3VzKCk7Ci19
Ci0KLWJvb2wgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6aXNWaXNpYmxlKCkKLXsKLSAgICBRX1Eo
UURlc2t0b3BXZWJWaWV3KTsKLSAgICByZXR1cm4gcS0+aXNWaXNpYmxlKCk7Ci19Ci0KLXZvaWQg
UURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6c3RhcnREcmFnKFF0OjpEcm9wQWN0aW9ucyBzdXBwb3J0
ZWREcm9wQWN0aW9ucywgY29uc3QgUUltYWdlJiBkcmFnSW1hZ2UsIFFNaW1lRGF0YSogZGF0YSwg
UVBvaW50KiBjbGllbnRQb3NpdGlvbiwgUVBvaW50KiBnbG9iYWxQb3NpdGlvbiwgUXQ6OkRyb3BB
Y3Rpb24qIGRyb3BBY3Rpb24pCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgUVdp
bmRvdyogd2luZG93ID0gcS0+Y2FudmFzKCk7Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFFEcmFnKiBkcmFnID0gbmV3IFFEcmFnKHdpbmRvdyk7Ci0gICAgZHJhZy0+
c2V0UGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShkcmFnSW1hZ2UpKTsKLSAgICBkcmFnLT5zZXRN
aW1lRGF0YShkYXRhKTsKLSAgICAqZHJvcEFjdGlvbiA9IGRyYWctPmV4ZWMoc3VwcG9ydGVkRHJv
cEFjdGlvbnMpOwotICAgICpnbG9iYWxQb3NpdGlvbiA9IFFDdXJzb3I6OnBvcygpOwotICAgICpj
bGllbnRQb3NpdGlvbiA9IHdpbmRvdy0+bWFwRnJvbUdsb2JhbCgqZ2xvYmFsUG9zaXRpb24pOwot
fQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVy
dGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpCi17Ci0gICAgLy8gVGhpcyBm
ZWF0dXJlIGlzIG9ubHkgdXNlZCBieSBRVG91Y2hXZWJWaWV3LgotfQotCi12b2lkIFFEZXNrdG9w
V2ViVmlld1ByaXZhdGU6OmRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgUVBvaW50JiwgY29uc3Qg
UVJlY3QmKQotewotICAgIC8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IHVzZWQgYnkgUVRvdWNoV2Vi
Vmlldy4KLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VVcmwoY29u
c3QgUVVybCYgdXJsKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIGVtaXQgcS0+
dXJsQ2hhbmdlZCh1cmwpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZENo
YW5nZVRpdGxlKGNvbnN0IFFTdHJpbmcmIG5ld1RpdGxlKQotewotICAgIFFfUShRRGVza3RvcFdl
YlZpZXcpOwotICAgIGVtaXQgcS0+dGl0bGVDaGFuZ2VkKG5ld1RpdGxlKTsKLX0KLQotdm9pZCBR
RGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VUb29sVGlwKGNvbnN0IFFTdHJpbmcmIG5l
d1Rvb2xUaXApCi17Ci0gICAgLy8gRklYTUU6IEFkZCBhIHByb3BlciBpbXBsZW1lbnRhdGlvbiB3
aGVuIFF0IDUgc3VwcG9ydHMgdG9vbHRpcC4KLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2
YXRlOjpkaWRDaGFuZ2VTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmIG5ld01lc3NhZ2UpCi17Ci0g
ICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgZW1pdCBxLT5zdGF0dXNCYXJNZXNzYWdlQ2hh
bmdlZChuZXdNZXNzYWdlKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRD
aGFuZ2VDdXJzb3IoY29uc3QgUUN1cnNvciYgbmV3Q3Vyc29yKQotewotICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgdGVtcG9yYXJ5IGZpeCB1bnRpbCB3ZSBnZXQgY3Vyc29yIHN1cHBvcnQgaW4gUU1M
IGl0ZW1zLgotICAgIFFHdWlBcHBsaWNhdGlvbjo6c2V0T3ZlcnJpZGVDdXJzb3IobmV3Q3Vyc29y
KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpsb2FkRGlkQmVnaW4oKQotewot
ICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIGVtaXQgcS0+bG9hZFN0YXJ0ZWQoKTsKLX0K
LQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpsb2FkRGlkQ29tbWl0KCkKLXsKLSAgICAv
LyBOb3QgdXNlZCBmb3IgUURlc2t0b3BXZWJWaWV3LgotfQotCi12b2lkIFFEZXNrdG9wV2ViVmll
d1ByaXZhdGU6OmxvYWREaWRTdWNjZWVkKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsK
LSAgICBlbWl0IHEtPmxvYWRTdWNjZWVkZWQoKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQ
cml2YXRlOjpsb2FkRGlkRmFpbChjb25zdCBRdFdlYkVycm9yJiBlcnJvcikKLXsKLSAgICBRX1Eo
UURlc2t0b3BXZWJWaWV3KTsKLSAgICBlbWl0IHEtPmxvYWRGYWlsZWQoc3RhdGljX2Nhc3Q8UURl
c2t0b3BXZWJWaWV3OjpFcnJvclR5cGU+KGVycm9yLnR5cGUoKSksIGVycm9yLmVycm9yQ29kZSgp
LCBlcnJvci51cmwoKSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hh
bmdlTG9hZFByb2dyZXNzKGludCBwZXJjZW50YWdlTG9hZGVkKQotewotICAgIFFfUShRRGVza3Rv
cFdlYlZpZXcpOwotICAgIGVtaXQgcS0+bG9hZFByb2dyZXNzQ2hhbmdlZChwZXJjZW50YWdlTG9h
ZGVkKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpzaG93Q29udGV4dE1lbnUo
UVNoYXJlZFBvaW50ZXI8UU1lbnU+IG1lbnUpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7
Ci0gICAgLy8gUmVtb3ZlIHRoZSBhY3RpdmUgbWVudSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIHR3aWNlLgotICAgIGlmIChhY3RpdmVNZW51KQotICAgICAgICBhY3RpdmVNZW51LT5o
aWRlKCk7Ci0KLSAgICBpZiAobWVudS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBRV2luZG93KiB3aW5kb3cgPSBxLT5jYW52YXMoKTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYWN0aXZlTWVudSA9IG1lbnU7Ci0KLSAgICBhY3RpdmVNZW51LT53
aW5kb3coKS0+d2luSWQoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIG1lbnUgaGFzIGEgd2luZG93Ci0g
ICAgUV9BU1NFUlQoYWN0aXZlTWVudS0+d2luZG93KCktPndpbmRvd0hhbmRsZSgpKTsKLSAgICBh
Y3RpdmVNZW51LT53aW5kb3coKS0+d2luZG93SGFuZGxlKCktPnNldFRyYW5zaWVudFBhcmVudCh3
aW5kb3cpOwotCi0gICAgUVBvaW50IG1lbnVQb3NpdGlvbkluU2NlbmUgPSBxLT5tYXBUb1NjZW5l
KG1lbnUtPnBvcygpKS50b1BvaW50KCk7Ci0gICAgbWVudS0+ZXhlYyh3aW5kb3ctPm1hcFRvR2xv
YmFsKG1lbnVQb3NpdGlvbkluU2NlbmUpKTsKLSAgICAvLyBUaGUgbGFzdCBmdW5jdGlvbiB0byBn
ZXQgb3V0IG9mIGV4ZWMoKSBjbGVhciB0aGUgbG9jYWwgY29weS4KLSAgICBpZiAoYWN0aXZlTWVu
dSA9PSBtZW51KQotICAgICAgICBhY3RpdmVNZW51LmNsZWFyKCk7Ci19Ci0KLXZvaWQgUURlc2t0
b3BXZWJWaWV3UHJpdmF0ZTo6aGlkZUNvbnRleHRNZW51KCkKLXsKLSAgICBpZiAoYWN0aXZlTWVu
dSkKLSAgICAgICAgYWN0aXZlTWVudS0+aGlkZSgpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmll
d1ByaXZhdGU6OnJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBRU3RyaW5nJiBhbGVydFRleHQpCi17
Ci0jaWZuZGVmIFFUX05PX01FU1NBR0VCT1gKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAg
ICBjb25zdCBRU3RyaW5nIHRpdGxlID0gUU9iamVjdDo6dHIoIkphdmFTY3JpcHQgQWxlcnQgLSAl
MSIpLmFyZyhxLT51cmwoKS5ob3N0KCkpOwotICAgIGRpc2FibGVNb3VzZUV2ZW50cygpOwotICAg
IFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbigwLCB0aXRsZSwgZXNjYXBlSHRtbChhbGVydFRleHQp
LCBRTWVzc2FnZUJveDo6T2spOwotICAgIGVuYWJsZU1vdXNlRXZlbnRzKCk7Ci0jZWxzZQotICAg
IFFfVU5VU0VEKGFsZXJ0VGV4dCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBRRGVza3RvcFdlYlZpZXdQ
cml2YXRlOjpydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSNpZm5kZWYgUVRfTk9fTUVTU0FHRUJPWAotICAgIFFf
UShRRGVza3RvcFdlYlZpZXcpOwotICAgIGNvbnN0IFFTdHJpbmcgdGl0bGUgPSBRT2JqZWN0Ojp0
cigiSmF2YVNjcmlwdCBDb25maXJtIC0gJTEiKS5hcmcocS0+dXJsKCkuaG9zdCgpKTsKLSAgICBk
aXNhYmxlTW91c2VFdmVudHMoKTsKLSAgICByZXN1bHQgPSBRTWVzc2FnZUJveDo6WWVzID09IFFN
ZXNzYWdlQm94OjppbmZvcm1hdGlvbigwLCB0aXRsZSwgZXNjYXBlSHRtbChtZXNzYWdlKSwgUU1l
c3NhZ2VCb3g6OlllcywgUU1lc3NhZ2VCb3g6Ok5vKTsKLSAgICBlbmFibGVNb3VzZUV2ZW50cygp
OwotI2Vsc2UKLSAgICBRX1VOVVNFRChtZXNzYWdlKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVFTdHJpbmcgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6cnVuSmF2YVNjcmlwdFBy
b21wdChjb25zdCBRU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUs
IGJvb2wmIG9rKQotewotI2lmbmRlZiBRVF9OT19JTlBVVERJQUxPRwotICAgIFFfUShRRGVza3Rv
cFdlYlZpZXcpOwotICAgIGNvbnN0IFFTdHJpbmcgdGl0bGUgPSBRT2JqZWN0Ojp0cigiSmF2YVNj
cmlwdCBQcm9tcHQgLSAlMSIpLmFyZyhxLT51cmwoKS5ob3N0KCkpOwotICAgIGRpc2FibGVNb3Vz
ZUV2ZW50cygpOwotICAgIFFTdHJpbmcgcmVzdWx0ID0gUUlucHV0RGlhbG9nOjpnZXRUZXh0KDAs
IHRpdGxlLCBlc2NhcGVIdG1sKG1lc3NhZ2UpLCBRTGluZUVkaXQ6Ok5vcm1hbCwgZGVmYXVsdFZh
bHVlLCAmb2spOwotICAgIGVuYWJsZU1vdXNlRXZlbnRzKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LSNlbHNlCi0gICAgUV9VTlVTRUQobWVzc2FnZSk7Ci0gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsK
LSNlbmRpZgotfQotCi1RRGVza3RvcFdlYlZpZXc6OlFEZXNrdG9wV2ViVmlldyhRUXVpY2tJdGVt
KiBwYXJlbnQpCi0gICAgOiBRQmFzZVdlYlZpZXcoKihuZXcgUURlc2t0b3BXZWJWaWV3UHJpdmF0
ZSksIHBhcmVudCkKLXsKLSAgICBRX0QoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBkLT5pbml0KCk7
Ci19Ci0KLVFEZXNrdG9wV2ViVmlldzo6UURlc2t0b3BXZWJWaWV3KFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFFRdWlja0l0ZW0qIHBhcmVudCkK
LSAgICA6IFFCYXNlV2ViVmlldygqKG5ldyBRRGVza3RvcFdlYlZpZXdQcml2YXRlKSwgcGFyZW50
KQotewotICAgIFFfRChRRGVza3RvcFdlYlZpZXcpOwotICAgIGQtPmluaXQoY29udGV4dFJlZiwg
cGFnZUdyb3VwUmVmKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjppbml0KFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCi17Ci0g
ICAgc2V0UGFnZVByb3h5KG5ldyBRdFdlYlBhZ2VQcm94eSh0aGlzLCAwLCB0aGlzLCBjb250ZXh0
UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpnZXQocGFn
ZVByb3h5LT5wcmVmZXJlbmNlcygpKS0+c2V0QXR0cmlidXRlKFFXZWJQcmVmZXJlbmNlc1ByaXZh
dGU6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCBmYWxzZSk7Ci0gICAgcGFnZVByb3h5
LT5pbml0KCk7Ci0gICAgZW5hYmxlTW91c2VFdmVudHMoKTsKLX0KLQotUURlc2t0b3BXZWJWaWV3
Ojp+UURlc2t0b3BXZWJWaWV3KCkKLXsKLX0KLQotc3RhdGljIHZvaWQgcGFpbnRDcmFzaGVkUGFn
ZShRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3RGJiByZWN0KQotewotICAgIHBhaW50ZXIt
PmZpbGxSZWN0KHJlY3QsIFF0OjpncmF5KTsKLSAgICBwYWludGVyLT5kcmF3VGV4dChyZWN0LCBR
dDo6QWxpZ25DZW50ZXIsIFFMYXRpbjFTdHJpbmcoIjooIikpOwotfQotCi12b2lkIFFEZXNrdG9w
V2ViVmlldzo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2
ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmtleVJlbGVhc2VFdmVudChR
S2V5RXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBR
RGVza3RvcFdlYlZpZXc6OmlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqIGV2ZW50
KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6
OmZvY3VzSW5FdmVudChRRm9jdXNFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZl
bnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6Zm9jdXNPdXRFdmVudChRRm9jdXNFdmVu
dCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9w
V2ViVmlldzo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBldmVudCkKLXsKLSAgICBmb3Jj
ZUFjdGl2ZUZvY3VzKCk7Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNr
dG9wV2ViVmlldzo6bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIHRo
aXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6Om1vdXNlUmVsZWFz
ZUV2ZW50KFFNb3VzZUV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19
Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3Ojptb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZl
bnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3Rv
cFdlYlZpZXc6OndoZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2
ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmhvdmVyRW50ZXJFdmVudChR
SG92ZXJFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lk
IFFEZXNrdG9wV2ViVmlldzo6aG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQqIGV2ZW50KQotewot
ICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmhvdmVy
TGVhdmVFdmVudChRSG92ZXJFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQp
OwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6ZHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVu
dCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9w
V2ViVmlldzo6ZHJhZ0VudGVyRXZlbnQoUURyYWdFbnRlckV2ZW50KiBldmVudCkKLXsKLSAgICB0
aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3OjpkcmFnTGVhdmVF
dmVudChRRHJhZ0xlYXZlRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsK
LX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmRyb3BFdmVudChRRHJvcEV2ZW50KiBldmVudCkK
LXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3Ojpn
ZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiBuZXdHZW9tZXRyeSwgY29uc3QgUVJlY3RGJiBv
bGRHZW9tZXRyeSkKLXsKLSAgICBRX0QoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBRUXVpY2tQYWlu
dGVkSXRlbTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dlb21ldHJ5LCBvbGRHZW9tZXRyeSk7Ci0gICAg
aWYgKG5ld0dlb21ldHJ5LnNpemUoKSAhPSBvbGRHZW9tZXRyeS5zaXplKCkpCi0gICAgICAgIGQt
PnBhZ2VQcm94eS0+c2V0RHJhd2luZ0FyZWFTaXplKG5ld0dlb21ldHJ5LnNpemUoKS50b1NpemUo
KSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3OjpwYWludChRUGFpbnRlciogcGFpbnRlcikK
LXsKLSAgICBRX0QoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBjb25zdCBRUmVjdEYgcmVjdCA9IGJv
dW5kaW5nUmVjdCgpOwotICAgIGlmIChkLT5pc0NyYXNoZWQpIHsKLSAgICAgICAgcGFpbnRDcmFz
aGVkUGFnZShwYWludGVyLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQt
PnBhZ2VQcm94eS0+cGFpbnQocGFpbnRlciwgcmVjdC50b0FsaWduZWRSZWN0KCkpOwotfQotCi1i
b29sIFFEZXNrdG9wV2ViVmlldzo6ZXZlbnQoUUV2ZW50KiBldikKLXsKLSAgICBRX0QoUURlc2t0
b3BXZWJWaWV3KTsKLSAgICBpZiAoZC0+cGFnZVByb3h5LT5oYW5kbGVFdmVudChldikpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmIChldi0+dHlwZSgpID09IFFFdmVudDo6SW5wdXRNZXRo
b2QpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQg
YW4gZW5kbGVzcyBsb29wIGluIGNvbm5lY3Rpb24gd2l0aCBRUXVpY2tJdGVtOjpldmVudCgpLgot
ICAgIHJldHVybiBRUXVpY2tJdGVtOjpldmVudChldik7Ci19Ci0KLVdLUGFnZVJlZiBRRGVza3Rv
cFdlYlZpZXc6OnBhZ2VSZWYoKSBjb25zdAotewotICAgIFFfRChjb25zdCBRRGVza3RvcFdlYlZp
ZXcpOwotICAgIHJldHVybiBkLT5wYWdlUHJveHktPnBhZ2VSZWYoKTsKLX0KLQotdm9pZCBRRGVz
a3RvcFdlYlZpZXdQcml2YXRlOjpwcm9jZXNzRGlkQ3Jhc2goKQotewotICAgIFFfUShRRGVza3Rv
cFdlYlZpZXcpOwotICAgIGlzQ3Jhc2hlZCA9IHRydWU7Ci0gICAgcS0+dXBkYXRlKCk7Ci19Ci0K
LXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKLXsKLSAg
ICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBpc0NyYXNoZWQgPSBmYWxzZTsKLSAgICBxLT51
cGRhdGUoKTsKLX0KLQotUUpTRW5naW5lKiBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjplbmdpbmUo
KQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIFFRdWlja1ZpZXcqIHZpZXcgPSBx
b2JqZWN0X2Nhc3Q8UVF1aWNrVmlldyo+KHEtPmNhbnZhcygpKTsKLSAgICBpZiAodmlldykKLSAg
ICAgICAgcmV0dXJuIHZpZXctPmVuZ2luZSgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFFE
ZXNrdG9wV2ViVmlld1ByaXZhdGU6OmNob29zZUZpbGVzKFdLT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXJSZWYgbGlzdGVuZXJSZWYsIGNvbnN0IFFTdHJpbmdMaXN0JiBzZWxlY3RlZEZpbGVOYW1lcywg
UXRWaWV3SW50ZXJmYWNlOjpGaWxlQ2hvb3NlclR5cGUgdHlwZSkKLXsKLSNpZm5kZWYgUVRfTk9f
RklMRURJQUxPRwotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIG9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyID0gbGlzdGVuZXJSZWY7Ci0KLSAgICAvLyBRdCBkb2VzIG5vdCBzdXBwb3J0IG11
bHRpcGxlIGZpbGVzIHN1Z2dlc3Rpb24sIHNvIHdlIGdldCBqdXN0IHRoZSBmaXJzdCBzdWdnZXN0
aW9uLgotICAgIFFTdHJpbmcgc2VsZWN0ZWRGaWxlTmFtZTsKLSAgICBpZiAoIXNlbGVjdGVkRmls
ZU5hbWVzLmlzRW1wdHkoKSkKLSAgICAgICAgc2VsZWN0ZWRGaWxlTmFtZSA9IHNlbGVjdGVkRmls
ZU5hbWVzLmF0KDApOwotCi0gICAgUV9BU1NFUlQoIWZpbGVEaWFsb2cpOwotCi0gICAgUVdpbmRv
dyogd2luZG93ID0gcS0+Y2FudmFzKCk7Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGZpbGVEaWFsb2cgPSBuZXcgUUZpbGVEaWFsb2coMCwgUVN0cmluZygpLCBzZWxl
Y3RlZEZpbGVOYW1lKTsKLSAgICBmaWxlRGlhbG9nLT53aW5kb3coKS0+d2luSWQoKTsgLy8gRW5z
dXJlIHRoYXQgdGhlIGRpYWxvZyBoYXMgYSB3aW5kb3cKLSAgICBRX0FTU0VSVChmaWxlRGlhbG9n
LT53aW5kb3coKS0+d2luZG93SGFuZGxlKCkpOwotICAgIGZpbGVEaWFsb2ctPndpbmRvdygpLT53
aW5kb3dIYW5kbGUoKS0+c2V0VHJhbnNpZW50UGFyZW50KHdpbmRvdyk7Ci0KLSAgICBmaWxlRGlh
bG9nLT5vcGVuKHFfZnVuYygpLCBTTE9UKF9xX29uT3BlblBhbmVsRmlsZXNTZWxlY3RlZCgpKSk7
Ci0KLSAgICBxX2Z1bmMoKS0+Y29ubmVjdChmaWxlRGlhbG9nLCBTSUdOQUwoZmluaXNoZWQoaW50
KSksIFNMT1QoX3Ffb25PcGVuUGFuZWxGaW5pc2hlZChpbnQpKSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpfcV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKQot
ewotICAgIGNvbnN0IFFTdHJpbmdMaXN0IGZpbGVMaXN0ID0gZmlsZURpYWxvZy0+c2VsZWN0ZWRG
aWxlcygpOwotICAgIFZlY3RvcjxSZWZQdHI8QVBJT2JqZWN0PiA+IHdrRmlsZXMoZmlsZUxpc3Qu
c2l6ZSgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWxlTGlzdC5zaXplKCk7
ICsraSkKLSAgICAgICAgd2tGaWxlc1tpXSA9IFdlYlVSTDo6Y3JlYXRlKFFVcmw6OmZyb21Mb2Nh
bEZpbGUoZmlsZUxpc3QuYXQoaSkpLnRvU3RyaW5nKCkpOwotCi0gICAgV0tPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lckNob29zZUZpbGVzKG9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLCB0b0FQSShJbW11
dGFibGVBcnJheTo6YWRvcHQod2tGaWxlcykubGVha1JlZigpKSk7Ci19Ci0KLXZvaWQgUURlc2t0
b3BXZWJWaWV3UHJpdmF0ZTo6X3Ffb25PcGVuUGFuZWxGaW5pc2hlZChpbnQgcmVzdWx0KQotewot
ICAgIGlmIChyZXN1bHQgPT0gUURpYWxvZzo6UmVqZWN0ZWQpCi0gICAgICAgIFdLT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXJDYW5jZWwob3BlblBhbmVsUmVzdWx0TGlzdGVuZXIpOwotCi0gICAgZmls
ZURpYWxvZy0+ZGVsZXRlTGF0ZXIoKTsKLSAgICBmaWxlRGlhbG9nID0gMDsKLX0KLQotdm9pZCBR
RGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRNb3VzZU1vdmVPdmVyRWxlbWVudChjb25zdCBRVXJs
JiBsaW5rVVJMLCBjb25zdCBRU3RyaW5nJiBsaW5rVGl0bGUpCi17Ci0gICAgaWYgKGxpbmtVUkwg
PT0gbGFzdEhvdmVyZWRVUkwgJiYgbGlua1RpdGxlID09IGxhc3RIb3ZlcmVkVGl0bGUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBsYXN0SG92ZXJlZFVS
TCA9IGxpbmtVUkw7Ci0gICAgbGFzdEhvdmVyZWRUaXRsZSA9IGxpbmtUaXRsZTsKLSAgICBlbWl0
IHEtPmxpbmtIb3ZlcmVkKGxhc3RIb3ZlcmVkVVJMLCBsYXN0SG92ZXJlZFRpdGxlKTsKLX0KLQot
dm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkb3dubG9hZFJlcXVlc3RlZChRV2ViRG93bmxv
YWRJdGVtKiBkb3dubG9hZEl0ZW0pCi17Ci0gICAgaWYgKCFkb3dubG9hZEl0ZW0pCi0gICAgICAg
IHJldHVybjsKLQotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotCi0gICAgUURlY2xhcmF0aXZl
RW5naW5lOjpzZXRPYmplY3RPd25lcnNoaXAoZG93bmxvYWRJdGVtLCBRRGVjbGFyYXRpdmVFbmdp
bmU6OkphdmFTY3JpcHRPd25lcnNoaXApOwotICAgIGVtaXQgcS0+ZG93bmxvYWRSZXF1ZXN0ZWQo
ZG93bmxvYWRJdGVtKTsKLX0KLQotc3RhdGljIFF0UG9saWN5SW50ZXJmYWNlOjpQb2xpY3lBY3Rp
b24gdG9Qb2xpY3lBY3Rpb24oUURlc2t0b3BXZWJWaWV3OjpOYXZpZ2F0aW9uUG9saWN5IHBvbGlj
eSkKLXsKLSAgICBzd2l0Y2ggKHBvbGljeSkgewotICAgIGNhc2UgUURlc2t0b3BXZWJWaWV3OjpV
c2VQb2xpY3k6Ci0gICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6VXNlOwotICAgIGNh
c2UgUURlc2t0b3BXZWJWaWV3OjpEb3dubG9hZFBvbGljeToKLSAgICAgICAgcmV0dXJuIFF0UG9s
aWN5SW50ZXJmYWNlOjpEb3dubG9hZDsKLSAgICBjYXNlIFFEZXNrdG9wV2ViVmlldzo6SWdub3Jl
UG9saWN5OgotICAgICAgICByZXR1cm4gUXRQb2xpY3lJbnRlcmZhY2U6Oklnbm9yZTsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFF0UG9saWN5SW50ZXJmYWNl
OjpJZ25vcmU7Ci19Ci0KLXN0YXRpYyBib29sIGhhc01ldGFNZXRob2QoUU9iamVjdCogb2JqZWN0
LCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQotewotICAgIGludCBtZXRob2RJbmRleCA9IG9iamVj
dC0+bWV0YU9iamVjdCgpLT5pbmRleE9mTWV0aG9kKFFNZXRhT2JqZWN0Ojpub3JtYWxpemVkU2ln
bmF0dXJlKG1ldGhvZE5hbWUpKTsKLSAgICByZXR1cm4gbWV0aG9kSW5kZXggPj0gMCAmJiBtZXRo
b2RJbmRleCA8IG9iamVjdC0+bWV0YU9iamVjdCgpLT5tZXRob2RDb3VudCgpOwotfQotCi0vKiEK
LSAgICBccW1sbWV0aG9kIE5hdmlnYXRpb25Qb2xpY3kgRGVza3RvcFdlYlZpZXc6Om5hdmlnYXRp
b25Qb2xpY3lGb3JVcmwodXJsLCBidXR0b24sIG1vZGlmaWVycykKLQotICAgIFRoaXMgbWV0aG9k
IHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgdXNlciBvZiBEZXNrdG9wV2ViVmlldyBlbGVt
ZW50LgotCi0gICAgSXQgd2lsbCBiZSBjYWxsZWQgdG8gZGVjaWRlIHRoZSBwb2xpY3kgZm9yIGEg
bmF2aWdhdGlvbjogd2hldGhlciB0aGUgV2ViVmlldyBzaG91bGQgaWdub3JlIHRoZSBuYXZpZ2F0
aW9uLAotICAgIGNvbnRpbnVlIGl0IG9yIHN0YXJ0IGEgZG93bmxvYWQuIFRoZSByZXR1cm4gdmFs
dWUgbXVzdCBiZSBvbmUgb2YgdGhlIHBvbGljaWVzIGluIHRoZSBOYXZpZ2F0aW9uUG9saWN5IGVu
dW1lcmF0aW9uLgotKi8KLVF0UG9saWN5SW50ZXJmYWNlOjpQb2xpY3lBY3Rpb24gUURlc2t0b3BX
ZWJWaWV3UHJpdmF0ZTo6bmF2aWdhdGlvblBvbGljeUZvclVSTChjb25zdCBRVXJsJiB1cmwsIFF0
OjpNb3VzZUJ1dHRvbiBidXR0b24sIFF0OjpLZXlib2FyZE1vZGlmaWVycyBtb2RpZmllcnMpCi17
Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGlz
IGZpcnN0IGJlY2F1c2UgaW52b2tlTWV0aG9kKCkgd2FybnMgaWYgdGhlIG1ldGhvZCBkb2Vzbid0
IGV4aXN0IGZvciB0aGUgb2JqZWN0LgotICAgIGlmICghaGFzTWV0YU1ldGhvZChxLCAibmF2aWdh
dGlvblBvbGljeUZvclVybChRVmFyaWFudCxRVmFyaWFudCxRVmFyaWFudCkiKSkKLSAgICAgICAg
cmV0dXJuIFF0UG9saWN5SW50ZXJmYWNlOjpVc2U7Ci0KLSAgICBRVmFyaWFudCByZXQ7Ci0gICAg
aWYgKFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QocSwgIm5hdmlnYXRpb25Qb2xpY3lGb3JVcmwi
LCBRX1JFVFVSTl9BUkcoUVZhcmlhbnQsIHJldCksIFFfQVJHKFFWYXJpYW50LCB1cmwpLCBRX0FS
RyhRVmFyaWFudCwgYnV0dG9uKSwgUV9BUkcoUVZhcmlhbnQsIFFWYXJpYW50KG1vZGlmaWVycykp
KSkKLSAgICAgICAgcmV0dXJuIHRvUG9saWN5QWN0aW9uKHN0YXRpY19jYXN0PFFEZXNrdG9wV2Vi
Vmlldzo6TmF2aWdhdGlvblBvbGljeT4ocmV0LnRvSW50KCkpKTsKLSAgICByZXR1cm4gUXRQb2xp
Y3lJbnRlcmZhY2U6OlVzZTsKLX0KLQotI2luY2x1ZGUgIm1vY19xZGVza3RvcHdlYnZpZXcuY3Bw
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdl
YnZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwODNmYTdmMzMzMWNiMGNhZDBkYzI0
YjNjYmMwMGFlZmQ2NDM2YTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcu
aAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZu
ZGVmIHFkZXNrdG9wd2Vidmlld19oCi0jZGVmaW5lIHFkZXNrdG9wd2Vidmlld19oCi0KLSNpbmNs
dWRlICJxYmFzZXdlYnZpZXcuaCIKLSNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0KLWNsYXNz
IFFEZXNrdG9wV2ViVmlld1ByaXZhdGU7Ci0KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUUZv
Y3VzRXZlbnQ7Ci1jbGFzcyBRTW91c2VFdmVudDsKLWNsYXNzIFFIb3ZlckV2ZW50OwotY2xhc3Mg
UUlucHV0TWV0aG9kRXZlbnQ7Ci1jbGFzcyBRS2V5RXZlbnQ7Ci1jbGFzcyBRUGFpbnRlcjsKLWNs
YXNzIFFSZWN0RjsKLWNsYXNzIFFEcmFnRW50ZXJFdmVudDsKLWNsYXNzIFFEcmFnTW92ZUV2ZW50
OwotY2xhc3MgUURyYWdMZWF2ZUV2ZW50OwotY2xhc3MgUURyb3BFdmVudDsKLWNsYXNzIFFUb3Vj
aEV2ZW50OwotY2xhc3MgUVdoZWVsRXZlbnQ7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLXR5cGVkZWYg
Y29uc3Qgc3RydWN0IE9wYXF1ZVdLQ29udGV4dCogV0tDb250ZXh0UmVmOwotdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlV0tQYWdlR3JvdXAqIFdLUGFnZUdyb3VwUmVmOwotdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlV0tQYWdlKiBXS1BhZ2VSZWY7Ci0KLW5hbWVzcGFjZSBXVFIgewotICAg
IGNsYXNzIFBsYXRmb3JtV2ViVmlldzsKLX0KLQotY2xhc3MgUVdFQktJVF9FWFBPUlQgUURlc2t0
b3BXZWJWaWV3IDogcHVibGljIFFCYXNlV2ViVmlldyB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoK
LSAgICBRRGVza3RvcFdlYlZpZXcoUVF1aWNrSXRlbSogcGFyZW50ID0gMCk7Ci0gICAgdmlydHVh
bCB+UURlc2t0b3BXZWJWaWV3KCk7Ci0KLVFfU0lHTkFMUzoKLSAgICB2b2lkIGxpbmtIb3ZlcmVk
KGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYgdGl0bGUpOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7Ci0gICAgdmlydHVhbCB2
b2lkIGtleVJlbGVhc2VFdmVudChRS2V5RXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5wdXRN
ZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBmb2N1c0lu
RXZlbnQoUUZvY3VzRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudChRRm9j
dXNFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBtb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQg
Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50ICopOwotICAg
IHZpcnR1YWwgdm9pZCBtb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCAqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50ICopOwotICAgIHZpcnR1
YWwgdm9pZCB3aGVlbEV2ZW50KFFXaGVlbEV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGhvdmVy
RW50ZXJFdmVudChRSG92ZXJFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBob3Zlck1vdmVFdmVu
dChRSG92ZXJFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBob3ZlckxlYXZlRXZlbnQoUUhvdmVy
RXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVudCop
OwotICAgIHZpcnR1YWwgdm9pZCBkcmFnRW50ZXJFdmVudChRRHJhZ0VudGVyRXZlbnQqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhZ0xlYXZlRXZlbnQoUURyYWdMZWF2ZUV2ZW50Kik7Ci0gICAgdmly
dHVhbCB2b2lkIGRyb3BFdmVudChRRHJvcEV2ZW50Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2Vv
bWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYsIGNvbnN0IFFSZWN0RiYpOwotICAgIHZvaWQgcGFp
bnQoUVBhaW50ZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgZXZlbnQoUUV2ZW50Kik7Ci0KLXByaXZh
dGU6Ci0gICAgUURlc2t0b3BXZWJWaWV3KFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIFFR
dWlja0l0ZW0qIHBhcmVudCA9IDApOwotICAgIFdLUGFnZVJlZiBwYWdlUmVmKCkgY29uc3Q7Ci0g
ICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVj
dGVkKCkpOwotICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX29uT3BlblBhbmVs
RmluaXNoZWQoaW50IHJlc3VsdCkpOwotCi0gICAgZnJpZW5kIGNsYXNzIFdUUjo6UGxhdGZvcm1X
ZWJWaWV3OwotICAgIFFfREVDTEFSRV9QUklWQVRFKFFEZXNrdG9wV2ViVmlldykKLX07Ci0KLVFN
TF9ERUNMQVJFX1RZUEUoUURlc2t0b3BXZWJWaWV3KQotUV9ERUNMQVJFX01FVEFUWVBFKFFEZXNr
dG9wV2ViVmlldzo6TmF2aWdhdGlvblBvbGljeSkKLQotI2VuZGlmIC8qIHFkZXNrdG9wd2Vidmll
d19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNr
dG9wd2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9w
d2Vidmlld19wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjVlMGJkMzQzODQ0
ZDBjNjZiOTI3MGViOTk5ZmIwOGVjZmE3YzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3Rv
cHdlYnZpZXdfcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoK
LSAqLwotCi0jaWZuZGVmIHFkZXNrdG9wd2Vidmlld19wX2gKLSNkZWZpbmUgcWRlc2t0b3B3ZWJ2
aWV3X3BfaAotCi0jaW5jbHVkZSAiUXRQb2xpY3lJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJRdFZp
ZXdJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJxYmFzZXdlYnZpZXdfcC5oIgotI2luY2x1ZGUgInFk
ZXNrdG9wd2Vidmlldy5oIgotCi1jbGFzcyBRRmlsZURpYWxvZzsKLQotY2xhc3MgUURlc2t0b3BX
ZWJWaWV3UHJpdmF0ZSA6IHB1YmxpYyBRQmFzZVdlYlZpZXdQcml2YXRlLCBwdWJsaWMgV2ViS2l0
OjpRdFZpZXdJbnRlcmZhY2UsIHB1YmxpYyBXZWJLaXQ6OlF0UG9saWN5SW50ZXJmYWNlCi17Ci0g
ICAgUV9ERUNMQVJFX1BVQkxJQyhRRGVza3RvcFdlYlZpZXcpCi1wdWJsaWM6Ci0gICAgUURlc2t0
b3BXZWJWaWV3UHJpdmF0ZSgpOwotICAgIHZvaWQgaW5pdChXS0NvbnRleHRSZWYgPSAwLCBXS1Bh
Z2VHcm91cFJlZiA9IDApOwotCi0gICAgc3RhdGljIFFEZXNrdG9wV2ViVmlldyogY3JlYXRlVmll
d1dpdGhQYWdlR3JvdXAoV0tQYWdlR3JvdXBSZWYpOwotCi0gICAgUURlc2t0b3BXZWJWaWV3KiB3
ZWJWaWV3KCk7Ci0gICAgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKTsKLSAgICB2
b2lkIF9xX29uT3BlblBhbmVsRmluaXNoZWQoaW50IHJlc3VsdCk7Ci0gICAgdm9pZCBlbmFibGVN
b3VzZUV2ZW50cygpOwotICAgIHZvaWQgZGlzYWJsZU1vdXNlRXZlbnRzKCk7Ci0KLSAgICBib29s
IGlzQ3Jhc2hlZDsKLQotcHJpdmF0ZToKLSAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBRdFZpZXdJ
bnRlcmZhY2UuCi0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgUVJl
Y3QmKTsKLQotICAgIHZpcnR1YWwgUVNpemUgZHJhd2luZ0FyZWFTaXplKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYpOwotICAgIHZpcnR1YWwgdm9p
ZCBzY3JvbGxQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcykgeyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzRm9jdXMoKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFn
KFF0OjpEcm9wQWN0aW9ucyBzdXBwb3J0ZWREcm9wQWN0aW9ucywgY29uc3QgUUltYWdlJiBkcmFn
SW1hZ2UsIFFNaW1lRGF0YSosIFFQb2ludCogY2xpZW50UG9zaXRpb24sIFFQb2ludCogZ2xvYmFs
UG9zaXRpb24sIFF0OjpEcm9wQWN0aW9uKiBkcm9wQWN0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgUVBvaW50
JiwgY29uc3QgUVJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VVcmwoY29uc3Qg
UVVybCYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZShjb25zdCBRU3RyaW5nJik7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRvb2xUaXAoY29uc3QgUVN0cmluZyYpOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ3Vyc29yKGNvbnN0IFFDdXJzb3ImKTsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZERpZEJlZ2luKCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRDb21taXQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZFN1Y2NlZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9h
ZERpZEZhaWwoY29uc3QgUXRXZWJFcnJvciYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VM
b2FkUHJvZ3Jlc3MoaW50KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNo
YXJlZFBvaW50ZXI8UU1lbnU+KTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFFTdHJpbmcmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3QgUVN0cmluZyYpOwot
ICAgIHZpcnR1YWwgUVN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcmLCBj
b25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9rKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzRGlkQ3Jhc2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNz
KCk7Ci0KLSAgICB2aXJ0dWFsIFFKU0VuZ2luZSogZW5naW5lKCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgY2hvb3NlRmlsZXMoV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3QgUVN0cmlu
Z0xpc3QmIHNlbGVjdGVkRmlsZU5hbWVzLCBRdFZpZXdJbnRlcmZhY2U6OkZpbGVDaG9vc2VyVHlw
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRvd25sb2FkUmVxdWVzdGVkKFFXZWJEb3dubG9hZEl0ZW0q
IGRvd25sb2FkSXRlbSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW91c2VNb3ZlT3ZlckVsZW1l
bnQoY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmcmKTsKLQotICAgIC8vIFF0UG9saWN5SW50ZXJm
YWNlLgotICAgIHZpcnR1YWwgUXRQb2xpY3lJbnRlcmZhY2U6OlBvbGljeUFjdGlvbiBuYXZpZ2F0
aW9uUG9saWN5Rm9yVVJMKGNvbnN0IFFVcmwmLCBRdDo6TW91c2VCdXR0b24sIFF0OjpLZXlib2Fy
ZE1vZGlmaWVycyk7Ci0KLSAgICBRU2hhcmVkUG9pbnRlcjxRTWVudT4gYWN0aXZlTWVudTsKLQot
ICAgIFFGaWxlRGlhbG9nKiBmaWxlRGlhbG9nOwotICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXJSZWYgb3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7Ci0KLSAgICBRVXJsIGxhc3RIb3ZlcmVkVVJM
OwotICAgIFFTdHJpbmcgbGFzdEhvdmVyZWRUaXRsZTsKLX07Ci0KLSNlbmRpZiAvKiBxZGVza3Rv
cHdlYnZpZXdfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJwYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjA1MjU2Njk2NTE0ZDM4MjVmZWY2MGM3MGJi
NjdlMjYxZTcwYWJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdl
LmgiCisKKyNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXF1
aWNrd2Vidmlldy5oIgorI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgorI2luY2x1ZGUgPFF0RGVjbGFy
YXRpdmUvUVF1aWNrQ2FudmFzPgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvUVNHRW5naW5lPgor
CitRUXVpY2tXZWJQYWdlOjpRUXVpY2tXZWJQYWdlKFFRdWlja0l0ZW0qIHBhcmVudCkKKyAgICA6
IFFRdWlja0l0ZW0ocGFyZW50KQorICAgICwgZChuZXcgUVF1aWNrV2ViUGFnZVByaXZhdGUodGhp
cykpCit7CisgICAgc2V0RmxhZyhJdGVtSGFzQ29udGVudHMpOworCisgICAgLy8gV2UgZG8gdGhl
IHRyYW5zZm9ybSBmcm9tIHRoZSB0b3AgbGVmdCBzbyB0aGUgdmlld3BvcnQgY2FuIGFzc3VtZSB0
aGUgcG9zaXRpb24gMCwgMAorICAgIC8vIGlzIGFsd2F5cyB3aGVyZSByZW5kZXJpbmcgc3RhcnRz
LgorICAgIHNldFRyYW5zZm9ybU9yaWdpbihUb3BMZWZ0KTsKKyAgICBkLT5pbml0aWFsaXplU2Nl
bmVHcmFwaENvbm5lY3Rpb25zKCk7Cit9CisKK1FRdWlja1dlYlBhZ2U6On5RUXVpY2tXZWJQYWdl
KCkKK3sKKyAgICBkZWxldGUgZDsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjprZXlQcmVzc0V2
ZW50KFFLZXlFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2
b2lkIFFRdWlja1dlYlBhZ2U6OmtleVJlbGVhc2VFdmVudChRS2V5RXZlbnQqIGV2ZW50KQorewor
ICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjppbnB1dE1l
dGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChl
dmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50
KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2Vi
UGFnZTo6Zm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZl
bnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6Om1vdXNlUHJlc3NFdmVudChRTW91
c2VFdmVudCogZXZlbnQpCit7CisgICAgZm9yY2VBY3RpdmVGb2N1cygpOworICAgIHRoaXMtPmV2
ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjptb3VzZU1vdmVFdmVudChRTW91
c2VFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFR
dWlja1dlYlBhZ2U6Om1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAg
ICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6bW91c2VEb3Vi
bGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVu
dCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6d2hlZWxFdmVudChRV2hlZWxFdmVudCogZXZl
bnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6
OmhvdmVyRW50ZXJFdmVudChRSG92ZXJFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQo
ZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmhvdmVyTW92ZUV2ZW50KFFIb3ZlckV2
ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNr
V2ViUGFnZTo6aG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlz
LT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6ZHJhZ01vdmVFdmVudChR
RHJhZ01vdmVFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2
b2lkIFFRdWlja1dlYlBhZ2U6OmRyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCogZXZlbnQp
Cit7CisgICAgdGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmRy
YWdMZWF2ZUV2ZW50KFFEcmFnTGVhdmVFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+ZXZlbnQo
ZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmRyb3BFdmVudChRRHJvcEV2ZW50KiBl
dmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFn
ZTo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksIGNvbnN0IFFSZWN0
RiYgb2xkR2VvbWV0cnkpCit7CisgICAgUVF1aWNrSXRlbTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dl
b21ldHJ5LCBvbGRHZW9tZXRyeSk7CisgICAgaWYgKG5ld0dlb21ldHJ5LnNpemUoKSAhPSBvbGRH
ZW9tZXRyeS5zaXplKCkpCisgICAgICAgIGQtPnBhZ2VQcm94eS0+c2V0RHJhd2luZ0FyZWFTaXpl
KG5ld0dlb21ldHJ5LnNpemUoKS50b1NpemUoKSk7Cit9CisKK2Jvb2wgUVF1aWNrV2ViUGFnZTo6
ZXZlbnQoUUV2ZW50KiBldikKK3sKKyAgICBpZiAoZC0+cGFnZVByb3h5LT5oYW5kbGVFdmVudChl
dikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChldi0+dHlwZSgpID09IFFFdmVudDo6
SW5wdXRNZXRob2QpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBuZWNlc3Nhcnkg
dG8gYXZvaWQgYW4gZW5kbGVzcyBsb29wIGluIGNvbm5lY3Rpb24gd2l0aCBRUXVpY2tJdGVtOjpl
dmVudCgpLgorICAgIHJldHVybiBRUXVpY2tJdGVtOjpldmVudChldik7Cit9CisKK3ZvaWQgUVF1
aWNrV2ViUGFnZTo6dG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCit7CisgICAgdGhpcy0+
ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6Oml0ZW1DaGFuZ2UoSXRlbUNo
YW5nZSBjaGFuZ2UsIGNvbnN0IEl0ZW1DaGFuZ2VEYXRhJiBkYXRhKQoreworICAgIGlmIChjaGFu
Z2UgPT0gSXRlbVNjZW5lQ2hhbmdlKQorICAgICAgICBkLT5pbml0aWFsaXplU2NlbmVHcmFwaENv
bm5lY3Rpb25zKCk7CisgICAgUVF1aWNrSXRlbTo6aXRlbUNoYW5nZShjaGFuZ2UsIGRhdGEpOwor
fQorCitRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2Vi
UGFnZSogdmlldykKKyAgICA6IHEodmlldykKKyAgICAsIHBhZ2VQcm94eSgwKQorICAgICwgbmF2
aWdhdGlvbkNvbnRyb2xsZXIoMCkKKyAgICAsIHNnVXBkYXRlUXVldWUodmlldykKKyAgICAsIHBh
aW50aW5nSXNJbml0aWFsaXplZChmYWxzZSkKK3sKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlUHJp
dmF0ZTo6aW5pdGlhbGl6ZVNjZW5lR3JhcGhDb25uZWN0aW9ucygpCit7CisgICAgaWYgKHBhaW50
aW5nSXNJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghcS0+Y2FudmFzKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBwYWludGluZ0lzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAg
IGlmIChxLT5zY2VuZUdyYXBoRW5naW5lKCkpCisgICAgICAgIF9xX29uU2NlbmVHcmFwaEluaXRp
YWxpemVkKCk7CisgICAgZWxzZQorICAgICAgICBRT2JqZWN0Ojpjb25uZWN0KHEtPmNhbnZhcygp
LCBTSUdOQUwoc2NlbmVHcmFwaEluaXRpYWxpemVkKCkpLCBxLCBTTE9UKF9xX29uU2NlbmVHcmFw
aEluaXRpYWxpemVkKCkpKTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6c2V0UGFn
ZVByb3h5KFF0V2ViUGFnZVByb3h5KiBwYWdlUHJveHkpCit7CisgICAgQVNTRVJUKCF0aGlzLT5w
YWdlUHJveHkpOworICAgIEFTU0VSVChwYWdlUHJveHkpOworICAgIHRoaXMtPnBhZ2VQcm94eSA9
IHBhZ2VQcm94eTsKK30KKworc3RhdGljIGZsb2F0IGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KGNv
bnN0IFFRdWlja0l0ZW0qIGl0ZW0pCit7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm4g
MTsKKworICAgIGZsb2F0IG9wYWNpdHkgPSBpdGVtLT5vcGFjaXR5KCk7CisgICAgaWYgKG9wYWNp
dHkgPCAwLjAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBvcGFjaXR5ICogY29t
cHV0ZUVmZmVjdGl2ZU9wYWNpdHkoaXRlbS0+cGFyZW50SXRlbSgpKTsKK30KKwordm9pZCBRUXVp
Y2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKQoreworICAgIGlmICgh
cS0+aXNWaXNpYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gcS0+aXRlbVRyYW5zZm9ybSgwLCAwKTsKKworICAgIGZsb2F0IG9wYWNpdHkgPSBjb21w
dXRlRWZmZWN0aXZlT3BhY2l0eShxKTsKKyAgICBRUmVjdEYgY2xpcFJlY3QgPSBxLT5wYXJlbnRJ
dGVtKCktPm1hcFJlY3RUb1NjZW5lKHEtPnBhcmVudEl0ZW0oKS0+Ym91bmRpbmdSZWN0KCkpOwor
CisgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBjb25zdCBpbnQgbGVmdCA9IGNs
aXBSZWN0LmxlZnQoKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBjbGlwUmVjdC53aWR0aCgpOwor
ICAgIGNvbnN0IGludCBib3R0b20gPSBxLT5jYW52YXMoKS0+aGVpZ2h0KCkgLSAoY2xpcFJlY3Qu
Ym90dG9tKCkgKyAxKTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gY2xpcFJlY3QuaGVpZ2h0KCk7
CisKKyAgICBnbFNjaXNzb3IobGVmdCwgYm90dG9tLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHBh
Z2VQcm94eS0+cmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgb3BhY2l0eSk7Cisg
ICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZVBy
aXZhdGU6Ol9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpCit7CisgICAgLy8gVE9ETzogQWxsb3cgcGFp
bnRpbmcgYmVmb3JlIHRoZSBzY2VuZSBvciBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzY2VuZSB3aXRo
IGFuIEZCTy4KKyAgICBwYWludFRvQ3VycmVudEdMQ29udGV4dCgpOworfQorCit2b2lkIFFRdWlj
a1dlYlBhZ2VQcml2YXRlOjpfcV9vblNjZW5lR3JhcGhJbml0aWFsaXplZCgpCit7CisgICAgUVNH
RW5naW5lKiBlbmdpbmUgPSBxLT5zY2VuZUdyYXBoRW5naW5lKCk7CisgICAgUU9iamVjdDo6Y29u
bmVjdChlbmdpbmUsIFNJR05BTChhZnRlclJlbmRlcmluZygpKSwgcSwgU0xPVChfcV9vbkFmdGVy
U2NlbmVSZW5kZXIoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKK30KKworI2luY2x1ZGUgIm1v
Y19xcXVpY2t3ZWJwYWdlLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2VicGFnZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZmMWMwNmQxYTViN2U5NzdjNjI1NDFlZmY0
ZDg0MjljNjI3YzhkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2VicGFnZS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIHFxdWlja3dlYnBhZ2VfaAorI2RlZmluZSBxcXVpY2t3ZWJwYWdlX2gKKwor
I2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKworI2luY2x1ZGUgPFF0Q29yZS9RU2hhcmVkUG9p
bnRlcj4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FRdWlja0l0ZW0+CisKK2NsYXNzIFFRdWlj
a1dlYlZpZXc7CitjbGFzcyBRUXVpY2tXZWJQYWdlUHJpdmF0ZTsKK2NsYXNzIFFXZWJOYXZpZ2F0
aW9uQ29udHJvbGxlcjsKK2NsYXNzIFFXZWJQcmVmZXJlbmNlczsKKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBRdFZpZXdJbnRlcmZhY2U7Cit9CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFR
dWlja1dlYlBhZ2UgOiBwdWJsaWMgUVF1aWNrSXRlbSB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoK
KyAgICBRUXVpY2tXZWJQYWdlKFFRdWlja0l0ZW0qIHBhcmVudCA9IDApOworICAgIHZpcnR1YWwg
flFRdWlja1dlYlBhZ2UoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVz
c0V2ZW50KFFLZXlFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoUUtl
eUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9k
RXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50Kik7Cisg
ICAgdmlydHVhbCB2b2lkIGZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIG1v
dXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFz
ZUV2ZW50KFFNb3VzZUV2ZW50ICopOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZURvdWJsZUNsaWNr
RXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2hlZWxFdmVudChRV2hlZWxF
dmVudCopOworICAgIHZpcnR1YWwgdm9pZCBob3ZlckVudGVyRXZlbnQoUUhvdmVyRXZlbnQqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lk
IGRyYWdNb3ZlRXZlbnQoUURyYWdNb3ZlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhZ0Vu
dGVyRXZlbnQoUURyYWdFbnRlckV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGRyYWdMZWF2ZUV2
ZW50KFFEcmFnTGVhdmVFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBkcm9wRXZlbnQoUURyb3BF
dmVudCopOworICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CisgICAg
dmlydHVhbCBib29sIGV2ZW50KFFFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNo
YW5nZWQoY29uc3QgUVJlY3RGJiwgY29uc3QgUVJlY3RGJik7CisgICAgdmlydHVhbCB2b2lkIGl0
ZW1DaGFuZ2UoSXRlbUNoYW5nZSwgY29uc3QgSXRlbUNoYW5nZURhdGEmKTsKKworcHJpdmF0ZToK
KyAgICBRX1BSSVZBVEVfU0xPVChkLCB2b2lkIF9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpKTsKKyAg
ICBRX1BSSVZBVEVfU0xPVChkLCB2b2lkIF9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCkpOwor
CisgICAgUVF1aWNrV2ViUGFnZVByaXZhdGUqIGQ7CisgICAgZnJpZW5kIGNsYXNzIFFRdWlja1dl
YlZpZXdQcml2YXRlOworICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTsK
K307CisKK1FNTF9ERUNMQVJFX1RZUEUoUVF1aWNrV2ViUGFnZSkKKworI2VuZGlmIC8qIHFxdWlj
a3dlYnBhZ2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2VicGFnZV9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFiNzE5OGY3ZTE0NjExNDcxZGVmMGM1YTY4MjQ2
OThiMTc1MGQxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZV9wLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgcXF1aWNrd2VicGFnZV9wX2gKKyNkZWZpbmUgcXF1aWNrd2VicGFnZV9wX2gK
KworI2luY2x1ZGUgIlF0U0dVcGRhdGVRdWV1ZS5oIgorI2luY2x1ZGUgIlF0Vmlld0ludGVyZmFj
ZS5oIgorI2luY2x1ZGUgInFxdWlja3dlYnBhZ2UuaCIKKyNpbmNsdWRlICJxd2VibmF2aWdhdGlv
bmNvbnRyb2xsZXIuaCIKKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUmVjdEY7CitjbGFz
cyBRU0dOb2RlOworY2xhc3MgUVN0cmluZzsKK1FUX0VORF9OQU1FU1BBQ0UKKworY2xhc3MgUVF1
aWNrV2ViUGFnZTsKKworY2xhc3MgUVF1aWNrV2ViUGFnZVByaXZhdGUgeworcHVibGljOgorICAg
IFFRdWlja1dlYlBhZ2VQcml2YXRlKFFRdWlja1dlYlBhZ2UqIHZpZXcpOworCisgICAgdm9pZCBz
ZXRQYWdlUHJveHkoUXRXZWJQYWdlUHJveHkqKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZVNjZW5l
R3JhcGhDb25uZWN0aW9ucygpOworCisgICAgdm9pZCBfcV9vbkFmdGVyU2NlbmVSZW5kZXIoKTsK
KyAgICB2b2lkIF9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCk7CisgICAgdm9pZCBwYWludFRv
Q3VycmVudEdMQ29udGV4dCgpOworCisgICAgUVF1aWNrV2ViUGFnZSogY29uc3QgcTsKKyAgICBR
dFdlYlBhZ2VQcm94eSogcGFnZVByb3h5OworICAgIFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlciog
bmF2aWdhdGlvbkNvbnRyb2xsZXI7CisgICAgV2ViS2l0OjpRdFNHVXBkYXRlUXVldWUgc2dVcGRh
dGVRdWV1ZTsKKyAgICBib29sIHBhaW50aW5nSXNJbml0aWFsaXplZDsKK307CisKKyNlbmRpZiAv
KiBxcXVpY2t3ZWJwYWdlX3BfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ0OTJiZDcwOWUyMTU0MmQ3Yzcz
ZjliZTExZDMzNzEyOTkyZjExNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmll
dy5oIgorCisjaW5jbHVkZSAiUXRUb3VjaFZpZXdJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJRdFdl
YlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIlV0aWxzUXQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3Jv
dXAuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorCisjaW5jbHVkZSAicXF1aWNrd2Vi
cGFnZV9wLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisjaW5jbHVkZSAicXdlYm5h
dmlnYXRpb25jb250cm9sbGVyLmgiCisjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKKwor
I2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvUVF1aWNrQ2FudmFzPgorI2luY2x1ZGUgPFF0V2lkZ2V0
cy9RRmlsZURpYWxvZz4KKyNpbmNsdWRlIDxRdFdpZGdldHMvUUlucHV0RGlhbG9nPgorI2luY2x1
ZGUgPFF0V2lkZ2V0cy9RTWVzc2FnZUJveD4KKyNpbmNsdWRlIDxXS09wZW5QYW5lbFJlc3VsdExp
c3RlbmVyLmg+CisKK1FRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZSgp
CisgICAgOiBxX3B0cigwKQorICAgICwgbmF2aWdhdGlvbkNvbnRyb2xsZXIoMCkKKyAgICAsIHVz
ZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cihmYWxzZSkKK3sKK30KKwordm9pZCBRUXVpY2tX
ZWJWaWV3UHJpdmF0ZTo6ZW5hYmxlTW91c2VFdmVudHMoKQoreworICAgIFFfUShRUXVpY2tXZWJW
aWV3KTsKKyAgICBxLT5zZXRBY2NlcHRlZE1vdXNlQnV0dG9ucyhRdDo6TW91c2VCdXR0b25NYXNr
KTsKKyAgICBxLT5zZXRBY2NlcHRIb3ZlckV2ZW50cyh0cnVlKTsKKyAgICBwYWdlVmlldy0+c2V0
QWNjZXB0ZWRNb3VzZUJ1dHRvbnMoUXQ6Ok1vdXNlQnV0dG9uTWFzayk7CisgICAgcGFnZVZpZXct
PnNldEFjY2VwdEhvdmVyRXZlbnRzKHRydWUpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2
YXRlOjpkaXNhYmxlTW91c2VFdmVudHMoKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAg
ICBxLT5zZXRBY2NlcHRlZE1vdXNlQnV0dG9ucyhRdDo6Tm9CdXR0b24pOworICAgIHEtPnNldEFj
Y2VwdEhvdmVyRXZlbnRzKGZhbHNlKTsKKyAgICBwYWdlVmlldy0+c2V0QWNjZXB0ZWRNb3VzZUJ1
dHRvbnMoUXQ6Ok5vQnV0dG9uKTsKKyAgICBwYWdlVmlldy0+c2V0QWNjZXB0SG92ZXJFdmVudHMo
ZmFsc2UpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplKFFRdWlj
a1dlYlZpZXcqIHZpZXdwb3J0LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwUmVmKQoreworICAgIHFfcHRyID0gdmlld3BvcnQ7CisgICAgdmlld3BvcnQt
PnNldEZsYWdzKFFRdWlja0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSk7CisKKyAgICBR
T2JqZWN0Ojpjb25uZWN0KHZpZXdwb3J0LCBTSUdOQUwodmlzaWJsZUNoYW5nZWQoKSksIHZpZXdw
b3J0LCBTTE9UKF9xX29uVmlzaWJsZUNoYW5nZWQoKSkpOworICAgIHBhZ2VWaWV3LnJlc2V0KG5l
dyBRUXVpY2tXZWJQYWdlKHZpZXdwb3J0KSk7CisgICAgdmlld0ludGVyZmFjZS5yZXNldChuZXcg
V2ViS2l0OjpRdFZpZXdJbnRlcmZhY2Uodmlld3BvcnQsIHBhZ2VWaWV3LmRhdGEoKSkpOworCisg
ICAgUVF1aWNrV2ViUGFnZVByaXZhdGUqIGNvbnN0IHBhZ2VWaWV3UHJpdmF0ZSA9IHBhZ2VWaWV3
LmRhdGEoKS0+ZDsKKyAgICBzZXRQYWdlUHJveHkobmV3IFF0V2ViUGFnZVByb3h5KHZpZXdJbnRl
cmZhY2UuZGF0YSgpLCAwLCB0aGlzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKKyAgICBw
YWdlVmlld1ByaXZhdGUtPnNldFBhZ2VQcm94eShwYWdlUHJveHkuZGF0YSgpKTsKKworICAgIFFX
ZWJQcmVmZXJlbmNlc1ByaXZhdGU6OmdldChwYWdlUHJveHktPnByZWZlcmVuY2VzKCkpLT5zZXRB
dHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQsIHRydWUpOworICAgIHBhZ2VQcm94eS0+aW5pdCgpOworfQorCit2b2lkIFFRdWlja1dl
YlZpZXdQcml2YXRlOjppbml0aWFsaXplRGVza3RvcChRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkK
K3sKKyAgICBpZiAoaW50ZXJhY3Rpb25FbmdpbmUpIHsKKyAgICAgICAgUU9iamVjdDo6ZGlzY29u
bmVjdChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3cG9ydFVwZGF0ZVJlcXVl
c3RlZCgpKSwgdmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRVcGRhdGVkKCkpKTsKKyAgICAgICAg
UU9iamVjdDo6ZGlzY29ubmVjdChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3
cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYmKSksIHZpZXdwb3J0LCBT
TE9UKF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKSk7
CisgICAgfQorICAgIGludGVyYWN0aW9uRW5naW5lLnJlc2V0KDApOworICAgIHBhZ2VQcm94eS0+
c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgwKTsKKyAgICBlbmFibGVNb3VzZUV2ZW50cygp
OworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplVG91Y2goUVF1aWNr
V2ViVmlldyogdmlld3BvcnQpCit7CisgICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQobmV3IFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSh2aWV3cG9ydCwgcGFnZVZpZXcuZGF0YSgpKSk7Cisg
ICAgcGFnZVByb3h5LT5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGludGVyYWN0aW9uRW5n
aW5lLmRhdGEoKSk7CisgICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7CisgICAgUU9iamVjdDo6Y29u
bmVjdChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3cG9ydFVwZGF0ZVJlcXVl
c3RlZCgpKSwgdmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRVcGRhdGVkKCkpKTsKKyAgICBRT2Jq
ZWN0Ojpjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZpZXdwb3J0VHJh
amVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKSwgdmlld3BvcnQsIFNMT1QoX3Ff
dmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpKTsKKyAgICB1
cGRhdGVWaWV3cG9ydFNpemUoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6bG9h
ZERpZENvbW1pdCgpCit7CisgICAgaWYgKCF1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIp
CisgICAgICAgIGludGVyYWN0aW9uRW5naW5lLT5yZXNldCgpOworfQorCit2b2lkIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpjb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUpCit7
CisgICAgaWYgKHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cikKKyAgICAgICAgcmV0dXJu
OworCisgICAgcGFnZVZpZXctPnNldFdpZHRoKG5ld1NpemUud2lkdGgoKSk7CisgICAgcGFnZVZp
ZXctPnNldEhlaWdodChuZXdTaXplLmhlaWdodCgpKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6c2Nyb2xsUG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBwb3MpCit7Cisg
ICAgaWYgKCF1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpCisgICAgICAgIGludGVyYWN0
aW9uRW5naW5lLT5wYWdlUG9zaXRpb25SZXF1ZXN0KHBvcyk7Cit9CisKK3ZvaWQgUVF1aWNrV2Vi
Vmlld1ByaXZhdGU6Ol9xX3ZpZXdwb3J0VXBkYXRlZCgpCit7CisgICAgUV9RKFFRdWlja1dlYlZp
ZXcpOworICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVjdEluUGFnZVZpZXdDb29yZGluYXRlcyA9
IHEtPm1hcFJlY3RUb0l0ZW0ocGFnZVZpZXcuZGF0YSgpLCBxLT5ib3VuZGluZ1JlY3QoKSkuaW50
ZXJzZWN0ZWQocGFnZVZpZXctPmJvdW5kaW5nUmVjdCgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHBh
Z2VWaWV3LT5zY2FsZSgpOworICAgIHBhZ2VQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5k
U2NhbGUodmlzaWJsZVJlY3RJblBhZ2VWaWV3Q29vcmRpbmF0ZXMsIHNjYWxlKTsKK30KKwordm9p
ZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdl
ZChjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIHBhZ2VQcm94eS0+c2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKK30K
Kwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffb25WaXNpYmxlQ2hhbmdlZCgpCit7Cisg
ICAgV2ViUGFnZVByb3h5KiB3a1BhZ2UgPSB0b0ltcGwocGFnZVByb3h5LT5wYWdlUmVmKCkpOwor
CisgICAgd2tQYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNp
YmxlKTsKK30KKworCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNp
emUoKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBRU2l6ZSB2aWV3cG9ydFNpemUg
PSBxLT5ib3VuZGluZ1JlY3QoKS5zaXplKCkudG9TaXplKCk7CisKKyAgICBpZiAodmlld3BvcnRT
aXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUGFnZVByb3h5KiB3a1Bh
Z2UgPSB0b0ltcGwocGFnZVByb3h5LT5wYWdlUmVmKCkpOworICAgIC8vIExldCB0aGUgV2ViUHJv
Y2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAorICAgIC8vIGl0
IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCisgICAgd2tQYWdlLT5zZXRWaWV3
cG9ydFNpemUodmlld3BvcnRTaXplKTsKKyAgICB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7
CisgICAgX3Ffdmlld3BvcnRVcGRhdGVkKCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWludHMoKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3
KTsKKyAgICBRU2l6ZSBhdmFpbGFibGVTaXplID0gcS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRv
U2l6ZSgpOworCisgICAgaWYgKGF2YWlsYWJsZVNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvSW1wbChwYWdlUHJveHktPnBhZ2VS
ZWYoKSk7CisgICAgV2ViUHJlZmVyZW5jZXMqIHdrUHJlZnMgPSB3a1BhZ2UtPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpOworCisgICAgLy8gRklYTUU6IFJlbW92ZSBsYXRlcjsgSGFyZGNvZGUg
c29tZSB2YWx1ZXMgZm9yIG5vdyB0byBtYWtlIHN1cmUgdGhlIERQSSBhZGp1c3RtZW50IGlzIGJl
aW5nIHRlc3RlZC4KKyAgICB3a1ByZWZzLT5zZXREZXZpY2VEUEkoMjQwKTsKKyAgICB3a1ByZWZz
LT5zZXREZXZpY2VXaWR0aCg0ODApOworICAgIHdrUHJlZnMtPnNldERldmljZUhlaWdodCg3MjAp
OworCisgICAgaW50IG1pbmltdW1MYXlvdXRGYWxsYmFja1dpZHRoID0gcU1heDxpbnQ+KHdrUHJl
ZnMtPmxheW91dEZhbGxiYWNrV2lkdGgoKSwgYXZhaWxhYmxlU2l6ZS53aWR0aCgpKTsKKworICAg
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyID0gV2ViQ29yZTo6Y29tcHV0ZVZpZXdw
b3J0QXR0cmlidXRlcyh2aWV3cG9ydEFyZ3VtZW50cywgbWluaW11bUxheW91dEZhbGxiYWNrV2lk
dGgsIHdrUHJlZnMtPmRldmljZVdpZHRoKCksIHdrUHJlZnMtPmRldmljZUhlaWdodCgpLCB3a1By
ZWZzLT5kZXZpY2VEUEkoKSwgYXZhaWxhYmxlU2l6ZSk7CisgICAgV2ViQ29yZTo6cmVzdHJpY3RN
aW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0U2l6ZShhdHRyLCBhdmFpbGFibGVTaXplKTsKKyAg
ICBXZWJDb3JlOjpyZXN0cmljdFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2Fs
YWJsZShhdHRyKTsKKworICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Q29uc3RyYWlu
dHMgbmV3Q29uc3RyYWludHM7CisgICAgbmV3Q29uc3RyYWludHMuaW5pdGlhbFNjYWxlID0gYXR0
ci5pbml0aWFsU2NhbGU7CisgICAgbmV3Q29uc3RyYWludHMubWluaW11bVNjYWxlID0gYXR0ci5t
aW5pbXVtU2NhbGU7CisgICAgbmV3Q29uc3RyYWludHMubWF4aW11bVNjYWxlID0gYXR0ci5tYXhp
bXVtU2NhbGU7CisgICAgbmV3Q29uc3RyYWludHMuZGV2aWNlUGl4ZWxSYXRpbyA9IGF0dHIuZGV2
aWNlUGl4ZWxSYXRpbzsKKyAgICBuZXdDb25zdHJhaW50cy5pc1VzZXJTY2FsYWJsZSA9ICEhYXR0
ci51c2VyU2NhbGFibGU7CisgICAgaW50ZXJhY3Rpb25FbmdpbmUtPnNldENvbnN0cmFpbnRzKG5l
d0NvbnN0cmFpbnRzKTsKKworICAgIC8vIE92ZXJ3cml0ZSBtaW5pbXVtIHNjYWxlIHZhbHVlIHdp
dGggZml0LXRvLXZpZXcgdmFsdWUsIHVubGVzcyB0aGUgdGhlIGNvbnRlbnQgYXV0aG9yCisgICAg
Ly8gZXhwbGljaXRseSBzYXlzIG5vLiBOQjogV2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIGtu
b3cgd2UgaGF2ZSBhIHZhbGlkIHNpemUsIGllLgorICAgIC8vIGFmdGVyIGluaXRpYWwgbGF5b3V0
IGhhcyBjb21wbGV0ZWQuCit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmRpZENoYW5n
ZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJn
cykKK3sKKyAgICBpZiAodXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKQorICAgICAgICBy
ZXR1cm47CisgICAgdmlld3BvcnRBcmd1bWVudHMgPSBhcmdzOworICAgIHVwZGF0ZVZpZXdwb3J0
Q29uc3RyYWludHMoKTsKK30KKworCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpydW5KYXZh
U2NyaXB0QWxlcnQoY29uc3QgUVN0cmluZyYgYWxlcnRUZXh0KQoreworI2lmbmRlZiBRVF9OT19N
RVNTQUdFQk9YCisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIGNvbnN0IFFTdHJpbmcgdGl0
bGUgPSBRT2JqZWN0Ojp0cigiSmF2YVNjcmlwdCBBbGVydCAtICUxIikuYXJnKHEtPnVybCgpLmhv
c3QoKSk7CisgICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7CisgICAgUU1lc3NhZ2VCb3g6OmluZm9y
bWF0aW9uKDAsIHRpdGxlLCBlc2NhcGVIdG1sKGFsZXJ0VGV4dCksIFFNZXNzYWdlQm94OjpPayk7
CisgICAgZW5hYmxlTW91c2VFdmVudHMoKTsKKyNlbHNlCisgICAgUV9VTlVTRUQoYWxlcnRUZXh0
KTsKKyNlbmRpZgorfQorCitib29sIFFRdWlja1dlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0
Q29uZmlybShjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGJvb2wgcmVzdWx0ID0gdHJ1
ZTsKKyNpZm5kZWYgUVRfTk9fTUVTU0FHRUJPWAorICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAg
ICBjb25zdCBRU3RyaW5nIHRpdGxlID0gUU9iamVjdDo6dHIoIkphdmFTY3JpcHQgQ29uZmlybSAt
ICUxIikuYXJnKHEtPnVybCgpLmhvc3QoKSk7CisgICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7Cisg
ICAgcmVzdWx0ID0gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24o
MCwgdGl0bGUsIGVzY2FwZUh0bWwobWVzc2FnZSksIFFNZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdl
Qm94OjpObyk7CisgICAgZW5hYmxlTW91c2VFdmVudHMoKTsKKyNlbHNlCisgICAgUV9VTlVTRUQo
bWVzc2FnZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitRU3RyaW5nIFFRdWlj
a1dlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcmIG1lc3Nh
Z2UsIGNvbnN0IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgYm9vbCYgb2spCit7CisjaWZuZGVmIFFU
X05PX0lOUFVURElBTE9HCisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIGNvbnN0IFFTdHJp
bmcgdGl0bGUgPSBRT2JqZWN0Ojp0cigiSmF2YVNjcmlwdCBQcm9tcHQgLSAlMSIpLmFyZyhxLT51
cmwoKS5ob3N0KCkpOworICAgIGRpc2FibGVNb3VzZUV2ZW50cygpOworICAgIFFTdHJpbmcgcmVz
dWx0ID0gUUlucHV0RGlhbG9nOjpnZXRUZXh0KDAsIHRpdGxlLCBlc2NhcGVIdG1sKG1lc3NhZ2Up
LCBRTGluZUVkaXQ6Ok5vcm1hbCwgZGVmYXVsdFZhbHVlLCAmb2spOworICAgIGVuYWJsZU1vdXNl
RXZlbnRzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgUV9VTlVTRUQobWVzc2Fn
ZSk7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKKyNlbmRpZgorfQorCit2b2lkIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpjaG9vc2VGaWxlcyhXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxp
c3RlbmVyUmVmLCBjb25zdCBRU3RyaW5nTGlzdCYgc2VsZWN0ZWRGaWxlTmFtZXMsIFF0Vmlld0lu
dGVyZmFjZTo6RmlsZUNob29zZXJUeXBlIHR5cGUpCit7CisjaWZuZGVmIFFUX05PX0ZJTEVESUFM
T0cKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgb3BlblBhbmVsUmVzdWx0TGlzdGVuZXIg
PSBsaXN0ZW5lclJlZjsKKworICAgIC8vIFF0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZmls
ZXMgc3VnZ2VzdGlvbiwgc28gd2UgZ2V0IGp1c3QgdGhlIGZpcnN0IHN1Z2dlc3Rpb24uCisgICAg
UVN0cmluZyBzZWxlY3RlZEZpbGVOYW1lOworICAgIGlmICghc2VsZWN0ZWRGaWxlTmFtZXMuaXNF
bXB0eSgpKQorICAgICAgICBzZWxlY3RlZEZpbGVOYW1lID0gc2VsZWN0ZWRGaWxlTmFtZXMuYXQo
MCk7CisKKyAgICBRX0FTU0VSVCghZmlsZURpYWxvZyk7CisKKyAgICBRV2luZG93KiB3aW5kb3cg
PSBxLT5jYW52YXMoKTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZmlsZURpYWxvZyA9IG5ldyBRRmlsZURpYWxvZygwLCBRU3RyaW5nKCksIHNlbGVjdGVkRmlsZU5h
bWUpOworICAgIGZpbGVEaWFsb2ctPndpbmRvdygpLT53aW5JZCgpOyAvLyBFbnN1cmUgdGhhdCB0
aGUgZGlhbG9nIGhhcyBhIHdpbmRvdworICAgIFFfQVNTRVJUKGZpbGVEaWFsb2ctPndpbmRvdygp
LT53aW5kb3dIYW5kbGUoKSk7CisgICAgZmlsZURpYWxvZy0+d2luZG93KCktPndpbmRvd0hhbmRs
ZSgpLT5zZXRUcmFuc2llbnRQYXJlbnQod2luZG93KTsKKworICAgIGZpbGVEaWFsb2ctPm9wZW4o
cSwgU0xPVChfcV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKSkpOworCisgICAgcS0+Y29ubmVj
dChmaWxlRGlhbG9nLCBTSUdOQUwoZmluaXNoZWQoaW50KSksIFNMT1QoX3Ffb25PcGVuUGFuZWxG
aW5pc2hlZChpbnQpKSk7CisjZW5kaWYKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
X3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVjdGVkKCkKK3sKKyAgICBjb25zdCBRU3RyaW5nTGlzdCBm
aWxlTGlzdCA9IGZpbGVEaWFsb2ctPnNlbGVjdGVkRmlsZXMoKTsKKyAgICBWZWN0b3I8UmVmUHRy
PEFQSU9iamVjdD4gPiB3a0ZpbGVzKGZpbGVMaXN0LnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZmlsZUxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIHdrRmlsZXNbaV0g
PSBXZWJVUkw6OmNyZWF0ZShRVXJsOjpmcm9tTG9jYWxGaWxlKGZpbGVMaXN0LmF0KGkpKS50b1N0
cmluZygpKTsKKworICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDaG9vc2VGaWxlcyhvcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lciwgdG9BUEkoSW1tdXRhYmxlQXJyYXk6OmFkb3B0KHdrRmlsZXMp
LmxlYWtSZWYoKSkpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV9vbk9wZW5Q
YW5lbEZpbmlzaGVkKGludCByZXN1bHQpCit7CisgICAgaWYgKHJlc3VsdCA9PSBRRGlhbG9nOjpS
ZWplY3RlZCkKKyAgICAgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNhbmNlbChvcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lcik7CisKKyAgICBmaWxlRGlhbG9nLT5kZWxldGVMYXRlcigpOworICAg
IGZpbGVEaWFsb2cgPSAwOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRVc2VU
cmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIoYm9vbCBlbmFibGUpCit7CisgICAgUV9RKFFRdWlj
a1dlYlZpZXcpOworICAgIGlmIChlbmFibGUgPT0gdXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZp
b3VyKQorICAgICAgICByZXR1cm47CisKKyAgICB1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlv
dXIgPSBlbmFibGU7CisgICAgaWYgKHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cikKKyAg
ICAgICAgaW5pdGlhbGl6ZURlc2t0b3AocSk7CisgICAgZWxzZQorICAgICAgICBpbml0aWFsaXpl
VG91Y2gocSk7Cit9CisKK3N0YXRpYyBRdFBvbGljeUludGVyZmFjZTo6UG9saWN5QWN0aW9uIHRv
UG9saWN5QWN0aW9uKFFRdWlja1dlYlZpZXc6Ok5hdmlnYXRpb25Qb2xpY3kgcG9saWN5KQorewor
ICAgIHN3aXRjaCAocG9saWN5KSB7CisgICAgY2FzZSBRUXVpY2tXZWJWaWV3OjpVc2VQb2xpY3k6
CisgICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6VXNlOworICAgIGNhc2UgUVF1aWNr
V2ViVmlldzo6RG93bmxvYWRQb2xpY3k6CisgICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFj
ZTo6RG93bmxvYWQ7CisgICAgY2FzZSBRUXVpY2tXZWJWaWV3OjpJZ25vcmVQb2xpY3k6CisgICAg
ICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6SWdub3JlOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUXRQb2xpY3lJbnRlcmZhY2U6Oklnbm9yZTsKK30K
Kworc3RhdGljIGJvb2wgaGFzTWV0YU1ldGhvZChRT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIq
IG1ldGhvZE5hbWUpCit7CisgICAgaW50IG1ldGhvZEluZGV4ID0gb2JqZWN0LT5tZXRhT2JqZWN0
KCktPmluZGV4T2ZNZXRob2QoUU1ldGFPYmplY3Q6Om5vcm1hbGl6ZWRTaWduYXR1cmUobWV0aG9k
TmFtZSkpOworICAgIHJldHVybiBtZXRob2RJbmRleCA+PSAwICYmIG1ldGhvZEluZGV4IDwgb2Jq
ZWN0LT5tZXRhT2JqZWN0KCktPm1ldGhvZENvdW50KCk7Cit9CisKKy8qIQorICAgIFxxbWxtZXRo
b2QgTmF2aWdhdGlvblBvbGljeSBEZXNrdG9wV2ViVmlldzo6bmF2aWdhdGlvblBvbGljeUZvclVy
bCh1cmwsIGJ1dHRvbiwgbW9kaWZpZXJzKQorCisgICAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGlt
cGxlbWVudGVkIGJ5IHRoZSB1c2VyIG9mIERlc2t0b3BXZWJWaWV3IGVsZW1lbnQuCisKKyAgICBJ
dCB3aWxsIGJlIGNhbGxlZCB0byBkZWNpZGUgdGhlIHBvbGljeSBmb3IgYSBuYXZpZ2F0aW9uOiB3
aGV0aGVyIHRoZSBXZWJWaWV3IHNob3VsZCBpZ25vcmUgdGhlIG5hdmlnYXRpb24sCisgICAgY29u
dGludWUgaXQgb3Igc3RhcnQgYSBkb3dubG9hZC4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIG9u
ZSBvZiB0aGUgcG9saWNpZXMgaW4gdGhlIE5hdmlnYXRpb25Qb2xpY3kgZW51bWVyYXRpb24uCisq
LworUXRQb2xpY3lJbnRlcmZhY2U6OlBvbGljeUFjdGlvbiBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
bmF2aWdhdGlvblBvbGljeUZvclVSTChjb25zdCBRVXJsJiB1cmwsIFF0OjpNb3VzZUJ1dHRvbiBi
dXR0b24sIFF0OjpLZXlib2FyZE1vZGlmaWVycyBtb2RpZmllcnMpCit7CisgICAgUV9RKFFRdWlj
a1dlYlZpZXcpOworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlIGlu
dm9rZU1ldGhvZCgpIHdhcm5zIGlmIHRoZSBtZXRob2QgZG9lc24ndCBleGlzdCBmb3IgdGhlIG9i
amVjdC4KKyAgICBpZiAoIWhhc01ldGFNZXRob2QocSwgIm5hdmlnYXRpb25Qb2xpY3lGb3JVcmwo
UVZhcmlhbnQsUVZhcmlhbnQsUVZhcmlhbnQpIikpCisgICAgICAgIHJldHVybiBRdFBvbGljeUlu
dGVyZmFjZTo6VXNlOworCisgICAgUVZhcmlhbnQgcmV0OworICAgIGlmIChRTWV0YU9iamVjdDo6
aW52b2tlTWV0aG9kKHEsICJuYXZpZ2F0aW9uUG9saWN5Rm9yVXJsIiwgUV9SRVRVUk5fQVJHKFFW
YXJpYW50LCByZXQpLCBRX0FSRyhRVmFyaWFudCwgdXJsKSwgUV9BUkcoUVZhcmlhbnQsIGJ1dHRv
biksIFFfQVJHKFFWYXJpYW50LCBRVmFyaWFudChtb2RpZmllcnMpKSkpCisgICAgICAgIHJldHVy
biB0b1BvbGljeUFjdGlvbihzdGF0aWNfY2FzdDxRUXVpY2tXZWJWaWV3OjpOYXZpZ2F0aW9uUG9s
aWN5PihyZXQudG9JbnQoKSkpOworICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6VXNlOwor
fQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRQYWdlUHJveHkoUXRXZWJQYWdlUHJv
eHkqIHBhZ2VQcm94eSkKK3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgdGhpcy0+cGFn
ZVByb3h5LnJlc2V0KHBhZ2VQcm94eSk7CisgICAgUU9iamVjdDo6Y29ubmVjdChwYWdlUHJveHks
IFNJR05BTChyZWNlaXZlZE1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoUVZhcmlhbnRNYXAp
KSwgcSwgU0lHTkFMKG1lc3NhZ2VSZWNlaXZlZChRVmFyaWFudE1hcCkpKTsKK30KKworUVF1aWNr
V2ViVmlldzo6UVF1aWNrV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCisgICAgOiBRUXVpY2tJ
dGVtKHBhcmVudCkKKyAgICAsIGRfcHRyKG5ldyBRUXVpY2tXZWJWaWV3UHJpdmF0ZSkKK3sKKyAg
ICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+aW5pdGlhbGl6ZSh0aGlzKTsKKyAgICBkLT5p
bml0aWFsaXplVG91Y2godGhpcyk7Cit9CisKK1FRdWlja1dlYlZpZXc6OlFRdWlja1dlYlZpZXco
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgUVF1
aWNrSXRlbSogcGFyZW50KQorICAgIDogUVF1aWNrSXRlbShwYXJlbnQpCisgICAgLCBkX3B0cihu
ZXcgUVF1aWNrV2ViVmlld1ByaXZhdGUpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAg
IGQtPmluaXRpYWxpemUodGhpcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKKyAgICAvLyBV
c2VkIGJ5IFdlYktpdFRlc3RSdW5uZXIuCisgICAgZC0+c2V0VXNlVHJhZGl0aW9uYWxEZXNrdG9w
QmVoYXZpb3VyKHRydWUpOworfQorCitRUXVpY2tXZWJWaWV3Ojp+UVF1aWNrV2ViVmlldygpCit7
Cit9CisKK1FRdWlja1dlYlBhZ2UqIFFRdWlja1dlYlZpZXc6OnBhZ2UoKQoreworICAgIFFfRChR
UXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+cGFnZVZpZXcuZGF0YSgpOworfQorCit2b2lk
IFFRdWlja1dlYlZpZXc6OmxvYWQoY29uc3QgUVVybCYgdXJsKQoreworICAgIFFfRChRUXVpY2tX
ZWJWaWV3KTsKKyAgICBkLT5wYWdlUHJveHktPmxvYWQodXJsKTsKK30KKwordm9pZCBRUXVpY2tX
ZWJWaWV3Ojpwb3N0TWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFFfRChR
UXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlUHJveHktPnBvc3RNZXNzYWdlVG9OYXZpZ2F0b3JR
dE9iamVjdChtZXNzYWdlKTsKK30KKworUVVybCBRUXVpY2tXZWJWaWV3Ojp1cmwoKSBjb25zdAor
eworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+cGFnZVByb3h5
LT51cmwoKTsKK30KKworaW50IFFRdWlja1dlYlZpZXc6OmxvYWRQcm9ncmVzcygpIGNvbnN0Cit7
CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBkLT5wYWdlUHJveHkt
PmxvYWRQcm9ncmVzcygpOworfQorCitRU3RyaW5nIFFRdWlja1dlYlZpZXc6OnRpdGxlKCkgY29u
c3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnBhZ2VQ
cm94eS0+dGl0bGUoKTsKK30KKworUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBRUXVpY2tXZWJW
aWV3OjpuYXZpZ2F0aW9uQ29udHJvbGxlcigpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlj
a1dlYlZpZXcpOworICAgIGlmICghZC0+bmF2aWdhdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIGNv
bnN0X2Nhc3Q8UVF1aWNrV2ViVmlld1ByaXZhdGUqPihkKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIg
PSBuZXcgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKGQtPnBhZ2VQcm94eS5kYXRhKCkpOworICAg
IHJldHVybiBkLT5uYXZpZ2F0aW9uQ29udHJvbGxlcjsKK30KKworUVdlYlByZWZlcmVuY2VzKiBR
UXVpY2tXZWJWaWV3OjpwcmVmZXJlbmNlcygpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlj
a1dlYlZpZXcpOworICAgIHJldHVybiBkLT5wYWdlUHJveHktPnByZWZlcmVuY2VzKCk7Cit9CisK
K3ZvaWQgUVF1aWNrV2ViVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2Vv
bWV0cnksIGNvbnN0IFFSZWN0RiYgb2xkR2VvbWV0cnkpCit7CisgICAgUV9EKFFRdWlja1dlYlZp
ZXcpOworICAgIFFRdWlja0l0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2Vv
bWV0cnkpOworICAgIGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgp
KSB7CisgICAgICAgIGlmIChkLT51c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpIHsKKyAg
ICAgICAgICAgIGQtPnBhZ2VWaWV3LT5zZXRXaWR0aChuZXdHZW9tZXRyeS53aWR0aCgpKTsKKyAg
ICAgICAgICAgIGQtPnBhZ2VWaWV3LT5zZXRIZWlnaHQobmV3R2VvbWV0cnkuaGVpZ2h0KCkpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGQtPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworICAg
IH0KK30KKwordm9pZCBRUXVpY2tXZWJWaWV3Ojp0b3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVu
dCkKK3sKKyAgICBmb3JjZUFjdGl2ZUZvY3VzKCk7CisgICAgUVF1aWNrSXRlbTo6dG91Y2hFdmVu
dChldmVudCk7Cit9CisKK1dLUGFnZVJlZiBRUXVpY2tXZWJWaWV3OjpwYWdlUmVmKCkgY29uc3QK
K3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnBhZ2VQcm94
eS0+cGFnZVJlZigpOworfQorCisjaW5jbHVkZSAibW9jX3FxdWlja3dlYnZpZXcuY3BwIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZTQ0ODI3MzEyZWFjM2I3MTU3OGRhZDkzOGEyOWQ1ZWMzZWIxZDhjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgK
QEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHFxdWlja3dlYnZp
ZXdfaAorI2RlZmluZSBxcXVpY2t3ZWJ2aWV3X2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwu
aCIKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FxdWlja2l0ZW0uaD4KKworY2xhc3MgUVF1aWNr
V2ViUGFnZTsKK2NsYXNzIFFRdWlja1dlYlZpZXdQcml2YXRlOworY2xhc3MgUVdlYkRvd25sb2Fk
SXRlbTsKK2NsYXNzIFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlcjsKK2NsYXNzIFFXZWJQcmVmZXJl
bmNlczsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBRdFZpZXdJbnRlcmZhY2U7Cit9CisK
K25hbWVzcGFjZSBXVFIgeworY2xhc3MgUGxhdGZvcm1XZWJWaWV3OworfQorCit0eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVXS0NvbnRleHQqIFdLQ29udGV4dFJlZjsKK3R5cGVkZWYgY29uc3Qg
c3RydWN0IE9wYXF1ZVdLUGFnZUdyb3VwKiBXS1BhZ2VHcm91cFJlZjsKK3R5cGVkZWYgY29uc3Qg
c3RydWN0IE9wYXF1ZVdLUGFnZSogV0tQYWdlUmVmOworCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2Ns
YXNzIFFQYWludGVyOworY2xhc3MgUVVybDsKK1FUX0VORF9OQU1FU1BBQ0UKKworY2xhc3MgUVdF
QktJVF9FWFBPUlQgUVF1aWNrV2ViVmlldyA6IHB1YmxpYyBRUXVpY2tJdGVtIHsKKyAgICBRX09C
SkVDVAorICAgIFFfUFJPUEVSVFkoUVN0cmluZyB0aXRsZSBSRUFEIHRpdGxlIE5PVElGWSB0aXRs
ZUNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRVXJsIHVybCBSRUFEIHVybCBOT1RJRlkgdXJsQ2hh
bmdlZCkKKyAgICBRX1BST1BFUlRZKGludCBsb2FkUHJvZ3Jlc3MgUkVBRCBsb2FkUHJvZ3Jlc3Mg
Tk9USUZZIGxvYWRQcm9ncmVzc0NoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRV2ViTmF2aWdhdGlv
bkNvbnRyb2xsZXIqIG5hdmlnYXRpb24gUkVBRCBuYXZpZ2F0aW9uQ29udHJvbGxlciBDT05TVEFO
VCBGSU5BTCkKKyAgICBRX1BST1BFUlRZKFFXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMgUkVB
RCBwcmVmZXJlbmNlcyBDT05TVEFOVCBGSU5BTCkKKyAgICBRX1BST1BFUlRZKFFRdWlja1dlYlBh
Z2UqIHBhZ2UgUkVBRCBwYWdlIENPTlNUQU5UIEZJTkFMKQorICAgIFFfRU5VTVMoTmF2aWdhdGlv
blBvbGljeSkKKyAgICBRX0VOVU1TKEVycm9yVHlwZSkKK3B1YmxpYzoKKyAgICBlbnVtIE5hdmln
YXRpb25Qb2xpY3kgeworICAgICAgICBVc2VQb2xpY3ksCisgICAgICAgIERvd25sb2FkUG9saWN5
LAorICAgICAgICBJZ25vcmVQb2xpY3kKKyAgICB9OworCisgICAgZW51bSBFcnJvclR5cGUgewor
ICAgICAgICBFbmdpbmVFcnJvciwKKyAgICAgICAgTmV0d29ya0Vycm9yLAorICAgICAgICBIdHRw
RXJyb3IsCisgICAgICAgIERvd25sb2FkRXJyb3IKKyAgICB9OworICAgIFFRdWlja1dlYlZpZXco
UVF1aWNrSXRlbSogcGFyZW50ID0gMCk7CisgICAgdmlydHVhbCB+UVF1aWNrV2ViVmlldygpOwor
CisgICAgUVVybCB1cmwoKSBjb25zdDsKKyAgICBRU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisgICAg
aW50IGxvYWRQcm9ncmVzcygpIGNvbnN0OworCisgICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVy
KiBuYXZpZ2F0aW9uQ29udHJvbGxlcigpIGNvbnN0OworICAgIFFXZWJQcmVmZXJlbmNlcyogcHJl
ZmVyZW5jZXMoKSBjb25zdDsKKyAgICBRUXVpY2tXZWJQYWdlKiBwYWdlKCk7CisKK3B1YmxpYyBR
X1NMT1RTOgorICAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYpOworICAgICB2b2lkIHBvc3RNZXNz
YWdlKGNvbnN0IFFTdHJpbmcmKTsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgdGl0bGVDaGFuZ2Vk
KGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKKyAgICB2b2lkIHN0YXR1c0Jhck1lc3NhZ2VDaGFuZ2Vk
KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKKyAgICB2
b2lkIGxvYWRTdWNjZWVkZWQoKTsKKyAgICB2b2lkIGxvYWRGYWlsZWQoUVF1aWNrV2ViVmlldzo6
RXJyb3JUeXBlIGVycm9yVHlwZSwgaW50IGVycm9yQ29kZSwgY29uc3QgUVVybCYgdXJsKTsKKyAg
ICB2b2lkIGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50IHByb2dyZXNzKTsKKyAgICB2b2lkIHVybENo
YW5nZWQoY29uc3QgUVVybCYgdXJsKTsKKyAgICB2b2lkIG1lc3NhZ2VSZWNlaXZlZChjb25zdCBR
VmFyaWFudE1hcCYgbWVzc2FnZSk7CisgICAgdm9pZCBkb3dubG9hZFJlcXVlc3RlZChRV2ViRG93
bmxvYWRJdGVtKiBkb3dubG9hZEl0ZW0pOworICAgIHZvaWQgbGlua0hvdmVyZWQoY29uc3QgUVVy
bCYgdXJsLCBjb25zdCBRU3RyaW5nJiB0aXRsZSk7CisgICAgdm9pZCB2aWV3TW9kZUNoYW5nZWQo
KTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoY29uc3Qg
UVJlY3RGJiwgY29uc3QgUVJlY3RGJik7CisgICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQoUVRv
dWNoRXZlbnQqIGV2ZW50KTsKKworcHJpdmF0ZToKKyAgICBRX0RFQ0xBUkVfUFJJVkFURShRUXVp
Y2tXZWJWaWV3KQorCisgICAgUVF1aWNrV2ViVmlldyhXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3Vw
UmVmLCBRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNv
bnN0OworCisgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffdmlld3BvcnRVcGRh
dGVkKCkpOworICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX3ZpZXdwb3J0VHJh
amVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKTsKKyAgICBRX1BSSVZBVEVfU0xP
VChkX2Z1bmMoKSwgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKSk7CisgICAgUV9Q
UklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25PcGVuUGFuZWxGaW5pc2hlZChpbnQgcmVz
dWx0KSk7CisgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25WaXNpYmxlQ2hh
bmdlZCgpKTsKKyAgICAvLyBIaWRlcyBRT2JqZWN0OjpkX3B0ciBhbGxvd2luZyB1cyB0byB1c2Ug
dGhlIGNvbnZlbmllbmNlIG1hY3Jvcy4KKyAgICBRU2NvcGVkUG9pbnRlcjxRUXVpY2tXZWJWaWV3
UHJpdmF0ZT4gZF9wdHI7CisKKyAgICBmcmllbmQgY2xhc3MgUXRXZWJQYWdlUHJveHk7CisgICAg
ZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOworICAgIGZyaWVuZCBjbGFzcyBX
VFI6OlBsYXRmb3JtV2ViVmlldzsKK307CisKK1FNTF9ERUNMQVJFX1RZUEUoUVF1aWNrV2ViVmll
dykKKworI2VuZGlmIC8qIHFxdWlja3dlYnZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVmYjM2YTAw
NGQ5YjQwMWIzMGJkODViZjdjMTk4NzAwNmY3YjQ3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKQEAgLTAsMCArMSw5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1aWNrd2Vidmlld19wX2gKKyNkZWZp
bmUgcXF1aWNrd2Vidmlld19wX2gKKworI2luY2x1ZGUgIlF0UG9saWN5SW50ZXJmYWNlLmgiCisj
aW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lLmgiCisjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKKworI2luY2x1ZGUgInFx
dWlja3dlYnZpZXcuaCIKKworI2luY2x1ZGUgPFF0Q29yZS9RU2NvcGVkUG9pbnRlcj4KKworY2xh
c3MgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyOworY2xhc3MgUXRXZWJQYWdlUHJveHk7CisKK1FU
X0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUZpbGVEaWFsb2c7CitRVF9FTkRfTkFNRVNQQUNFCisK
K2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja1dlYlZpZXdQcml2YXRlIDogcHVibGljIFdlYktp
dDo6UXRQb2xpY3lJbnRlcmZhY2UgeworICAgIFFfREVDTEFSRV9QVUJMSUMoUVF1aWNrV2ViVmll
dykKK3B1YmxpYzoKKyAgICBRUXVpY2tXZWJWaWV3UHJpdmF0ZSgpOworICAgIHZpcnR1YWwgflFR
dWlja1dlYlZpZXdQcml2YXRlKCkgeyB9CisgICAgdm9pZCBzZXRQYWdlUHJveHkoUXRXZWJQYWdl
UHJveHkqKTsKKyAgICB2b2lkIGluaXRpYWxpemUoUVF1aWNrV2ViVmlldyogdmlld3BvcnQsIFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmID0gMCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0g
MCk7CisgICAgdm9pZCBpbml0aWFsaXplVG91Y2goUVF1aWNrV2ViVmlldyogdmlld3BvcnQpOwor
ICAgIHZvaWQgaW5pdGlhbGl6ZURlc2t0b3AoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpOworICAg
IHZvaWQgZW5hYmxlTW91c2VFdmVudHMoKTsKKyAgICB2b2lkIGRpc2FibGVNb3VzZUV2ZW50cygp
OworCisgICAgdm9pZCBsb2FkRGlkQ29tbWl0KCk7CisgICAgdm9pZCBjb250ZW50U2l6ZUNoYW5n
ZWQoY29uc3QgUVNpemUmIG5ld1NpemUpOworICAgIHZvaWQgc2Nyb2xsUG9zaXRpb25SZXF1ZXN0
ZWQoY29uc3QgUVBvaW50JiBwb3MpOworICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7Cisg
ICAgdm9pZCB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7CisgICAgdm9pZCBzZXRVc2VUcmFk
aXRpb25hbERlc2t0b3BCZWhhdmlvdXIoYm9vbCBlbmFibGUpOworCisgICAgc3RhdGljIFFRdWlj
a1dlYlZpZXdQcml2YXRlKiBnZXQoUVF1aWNrV2ViVmlldyogdmlldykKKyAgICB7CisgICAgICAg
IHJldHVybiB2aWV3LT5kX3B0ci5kYXRhKCk7CisgICAgfQorCisgICAgdm9pZCBfcV92aWV3cG9y
dFVwZGF0ZWQoKTsKKyAgICB2b2lkIF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQo
Y29uc3QgUVBvaW50RiYpOworICAgIHZvaWQgX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVjdGVkKCk7
CisgICAgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCByZXN1bHQpOworICAgIHZvaWQg
X3Ffb25WaXNpYmxlQ2hhbmdlZCgpOworCisgICAgLy8gUXRQb2xpY3lJbnRlcmZhY2UuCisgICAg
dmlydHVhbCBRdFBvbGljeUludGVyZmFjZTo6UG9saWN5QWN0aW9uIG5hdmlnYXRpb25Qb2xpY3lG
b3JVUkwoY29uc3QgUVVybCYsIFF0OjpNb3VzZUJ1dHRvbiwgUXQ6OktleWJvYXJkTW9kaWZpZXJz
KTsKKworICAgIHZvaWQgY2hvb3NlRmlsZXMoV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiwg
Y29uc3QgUVN0cmluZ0xpc3QmIHNlbGVjdGVkRmlsZU5hbWVzLCBXZWJLaXQ6OlF0Vmlld0ludGVy
ZmFjZTo6RmlsZUNob29zZXJUeXBlKTsKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChjb25z
dCBRU3RyaW5nJik7CisgICAgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBRU3RyaW5n
Jik7CisgICAgUVN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcmLCBjb25z
dCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9rKTsKKyAgICB2b2lkIGRpZENoYW5nZVZp
ZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJncyk7
CisKKyAgICBRU2NvcGVkUG9pbnRlcjxRUXVpY2tXZWJQYWdlPiBwYWdlVmlldzsKKyAgICBRU2Nv
cGVkUG9pbnRlcjxXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZT4gdmlld0ludGVyZmFjZTsKKyAgICBR
U2NvcGVkUG9pbnRlcjxRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU+IGludGVyYWN0aW9uRW5n
aW5lOworCisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1bWVudHM7
CisKKyAgICBRUXVpY2tXZWJWaWV3KiBxX3B0cjsKKyAgICBRU2NvcGVkUG9pbnRlcjxRdFdlYlBh
Z2VQcm94eT4gcGFnZVByb3h5OworCisgICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZp
Z2F0aW9uQ29udHJvbGxlcjsKKyAgICBib29sIHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91
cjsKKyAgICBRRmlsZURpYWxvZyogZmlsZURpYWxvZzsKKyAgICBXS09wZW5QYW5lbFJlc3VsdExp
c3RlbmVyUmVmIG9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOworfTsKKworI2VuZGlmIC8qIHFxdWlj
a3dlYnZpZXdfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F0b3VjaHdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJwYWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxZTExOTZk
OTc2MDU3MWFlMjk3YmU2ODdkMjM1N2JhNGJkMjc1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0
b3VjaHdlYnBhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicXRvdWNod2Vi
cGFnZS5oIgotCi0jaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2VfcC5oIgotI2luY2x1ZGUg
PFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+Ci0jaW5j
bHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVF1aWNrQ2FudmFzPgotI2luY2x1ZGUgPFFTR0Vu
Z2luZT4KLSNpbmNsdWRlIDxRVXJsPgotCi1RVG91Y2hXZWJQYWdlOjpRVG91Y2hXZWJQYWdlKFFR
dWlja0l0ZW0qIHBhcmVudCkKLSAgICA6IFFRdWlja0l0ZW0ocGFyZW50KQotICAgICwgZChuZXcg
UVRvdWNoV2ViUGFnZVByaXZhdGUodGhpcykpCi17Ci0gICAgc2V0RmxhZyhJdGVtSGFzQ29udGVu
dHMpOwotCi0gICAgLy8gV2UgZG8gdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSB0b3AgbGVmdCBzbyB0
aGUgdmlld3BvcnQgY2FuIGFzc3VtZSB0aGUgcG9zaXRpb24gMCwgMAotICAgIC8vIGlzIGFsd2F5
cyB3aGVyZSByZW5kZXJpbmcgc3RhcnRzLgotICAgIHNldFRyYW5zZm9ybU9yaWdpbihUb3BMZWZ0
KTsKLSAgICBpbml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2Vi
UGFnZTo6aW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucygpCi17Ci0gICAgaWYgKGQtPnBhaW50aW5n
SXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghY2FudmFzKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBkLT5wYWludGluZ0lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIGlm
IChzY2VuZUdyYXBoRW5naW5lKCkpCi0gICAgICAgIGQtPl9xX29uU2NlbmVHcmFwaEluaXRpYWxp
emVkKCk7Ci0gICAgZWxzZQotICAgICAgICBjb25uZWN0KGNhbnZhcygpLCBTSUdOQUwoc2NlbmVH
cmFwaEluaXRpYWxpemVkKCkpLCB0aGlzLCBTTE9UKF9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVk
KCkpKTsKLX0KLQotUVRvdWNoV2ViUGFnZTo6flFUb3VjaFdlYlBhZ2UoKQotewotICAgIGRlbGV0
ZSBkOwotfQotCi0vKiEgXHJlaW1wCi0qLwotYm9vbCBRVG91Y2hXZWJQYWdlOjpldmVudChRRXZl
bnQqIGV2KQotewotICAgIGlmIChkLT5wYWdlUHJveHktPmhhbmRsZUV2ZW50KGV2KSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFFRdWlja0l0ZW06OmV2ZW50KGV2KTsKLX0KLQot
dm9pZCBRVG91Y2hXZWJQYWdlOjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXZlbnQpCi17Ci0g
ICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2U6OmtleVJlbGVh
c2VFdmVudChRS2V5RXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0K
LQotdm9pZCBRVG91Y2hXZWJQYWdlOjppbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50
KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2Vi
UGFnZTo6Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVu
dChldmVudCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6Zm9jdXNPdXRFdmVudChRRm9jdXNF
dmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3Vj
aFdlYlBhZ2U6OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2
ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRVG91Y2hXZWJQYWdlOjpnZW9tZXRyeUNoYW5nZWQoY29u
c3QgUVJlY3RGJiBuZXdHZW9tZXRyeSwgY29uc3QgUVJlY3RGJiBvbGRHZW9tZXRyeSkKLXsKLSAg
ICBRUXVpY2tJdGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsK
LSAgICBpZiAobmV3R2VvbWV0cnkuc2l6ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUoKSkKLSAgICAg
ICAgZC0+cGFnZVByb3h5LT5zZXREcmF3aW5nQXJlYVNpemUobmV3R2VvbWV0cnkuc2l6ZSgpLnRv
U2l6ZSgpKTsKLX0KLQotUVRvdWNoV2ViUGFnZVByaXZhdGU6OlFUb3VjaFdlYlBhZ2VQcml2YXRl
KFFUb3VjaFdlYlBhZ2UqIHZpZXcpCi0gICAgOiBxKHZpZXcpCi0gICAgLCBwYWdlUHJveHkoMCkK
LSAgICAsIG5hdmlnYXRpb25Db250cm9sbGVyKDApCi0gICAgLCBzZ1VwZGF0ZVF1ZXVlKHZpZXcp
Ci0gICAgLCBwYWludGluZ0lzSW5pdGlhbGl6ZWQoZmFsc2UpCi17Ci19Ci0KLXZvaWQgUVRvdWNo
V2ViUGFnZVByaXZhdGU6OnNldFBhZ2VQcm94eShRdFdlYlBhZ2VQcm94eSogcGFnZVByb3h5KQot
ewotICAgIEFTU0VSVCghdGhpcy0+cGFnZVByb3h5KTsKLSAgICBBU1NFUlQocGFnZVByb3h5KTsK
LSAgICB0aGlzLT5wYWdlUHJveHkgPSBwYWdlUHJveHk7Ci0KLX0KLQotc3RhdGljIGZsb2F0IGNv
bXB1dGVFZmZlY3RpdmVPcGFjaXR5KGNvbnN0IFFRdWlja0l0ZW0qIGl0ZW0pCi17Ci0gICAgaWYg
KCFpdGVtKQotICAgICAgICByZXR1cm4gMS4wOwotCi0gICAgZmxvYXQgb3BhY2l0eSA9IGl0ZW0t
Pm9wYWNpdHkoKTsKLSAgICBpZiAob3BhY2l0eSA8IDAuMDEpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG9wYWNpdHkgKiBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShpdGVtLT5wYXJl
bnRJdGVtKCkpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVu
dEdMQ29udGV4dCgpCi17Ci0gICAgaWYgKCFxLT5pc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBxLT5pdGVtVHJhbnNmb3JtKDAsIDApOwot
ICAgIGZsb2F0IG9wYWNpdHkgPSBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShxKTsKLSAgICBRUmVj
dEYgY2xpcFJlY3QgPSBxLT5wYXJlbnRJdGVtKCktPm1hcFJlY3RUb1NjZW5lKHEtPnBhcmVudEl0
ZW0oKS0+Ym91bmRpbmdSZWN0KCkpOwotCi0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsK
LSAgICBjb25zdCBpbnQgbGVmdCA9IGNsaXBSZWN0LmxlZnQoKTsKLSAgICBjb25zdCBpbnQgd2lk
dGggPSBjbGlwUmVjdC53aWR0aCgpOwotICAgIGNvbnN0IGludCBib3R0b20gPSBxLT5jYW52YXMo
KS0+aGVpZ2h0KCkgLSAoY2xpcFJlY3QuYm90dG9tKCkgKyAxKTsKLSAgICBjb25zdCBpbnQgaGVp
Z2h0ID0gY2xpcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBnbFNjaXNzb3IobGVmdCwgYm90dG9tLCB3
aWR0aCwgaGVpZ2h0KTsKLQotICAgIHBhZ2VQcm94eS0+cmVuZGVyVG9DdXJyZW50R0xDb250ZXh0
KHRyYW5zZm9ybSwgb3BhY2l0eSk7Ci0gICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci19
Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZVByaXZhdGU6Ol9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpCi17
Ci0gICAgLy8gVE9ETzogQWxsb3cgcGFpbnRpbmcgYmVmb3JlIHRoZSBzY2VuZSBvciBpbiB0aGUg
bWlkZGxlIG9mIHRoZSBzY2VuZSB3aXRoIGFuIEZCTy4KLSAgICBwYWludFRvQ3VycmVudEdMQ29u
dGV4dCgpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpfcV9vblNjZW5lR3JhcGhJ
bml0aWFsaXplZCgpCi17Ci0gICAgUVNHRW5naW5lKiBlbmdpbmUgPSBxLT5zY2VuZUdyYXBoRW5n
aW5lKCk7Ci0gICAgUU9iamVjdDo6Y29ubmVjdChlbmdpbmUsIFNJR05BTChhZnRlclJlbmRlcmlu
ZygpKSwgcSwgU0xPVChfcV9vbkFmdGVyU2NlbmVSZW5kZXIoKSksIFF0OjpEaXJlY3RDb25uZWN0
aW9uKTsKLX0KLQotdm9pZCBRVG91Y2hXZWJQYWdlOjppdGVtQ2hhbmdlKEl0ZW1DaGFuZ2UgY2hh
bmdlLCBjb25zdCBJdGVtQ2hhbmdlRGF0YSAmZGF0YSkKLXsKLSAgICBpZiAoY2hhbmdlID09IEl0
ZW1TY2VuZUNoYW5nZSkKLSAgICAgICAgaW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucygpOwotICAg
IFFRdWlja0l0ZW06Oml0ZW1DaGFuZ2UoY2hhbmdlLCBkYXRhKTsKLX0KLQotI2luY2x1ZGUgIm1v
Y19xdG91Y2h3ZWJwYWdlLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xdG91Y2h3ZWJwYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMjc2ODc5
NjBmOTMyZGVmZjY5NGM2M2ZlZDA2N2U3YWNhZGI1NzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJwYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBxdG91Y2h3ZWJwYWdlX2gKLSNkZWZpbmUgcXRvdWNod2VicGFnZV9o
Ci0KLSNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZl
L3FxdWlja2l0ZW0uaD4KLSNpbmNsdWRlIDxRU2hhcmVkUG9pbnRlcj4KLQotY2xhc3MgUVRvdWNo
V2ViUGFnZVByaXZhdGU7Ci1jbGFzcyBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBR
V2ViUHJlZmVyZW5jZXM7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgUXRUb3VjaFZpZXdJ
bnRlcmZhY2U7Ci19Ci0KLWNsYXNzIFFXRUJLSVRfRVhQT1JUIFFUb3VjaFdlYlBhZ2UgOiBwdWJs
aWMgUVF1aWNrSXRlbSB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBRVG91Y2hXZWJQYWdl
KFFRdWlja0l0ZW0qIHBhcmVudCA9IDApOwotCi0gICAgdmlydHVhbCB+UVRvdWNoV2ViUGFnZSgp
OwotCi0gICAgdmlydHVhbCBib29sIGV2ZW50KFFFdmVudCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lk
IGtleVJlbGVhc2VFdmVudChRS2V5RXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5wdXRNZXRo
b2RFdmVudChRSW5wdXRNZXRob2RFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBmb2N1c0luRXZl
bnQoUUZvY3VzRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudChRRm9jdXNF
dmVudCopOwotICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYsIGNvbnN0IFFSZWN0
RiYpOwotICAgIHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlKEl0ZW1DaGFuZ2UsIGNvbnN0IEl0ZW1D
aGFuZ2VEYXRhJik7Ci0KLXByaXZhdGU6Ci0gICAgUV9QUklWQVRFX1NMT1QoZCwgdm9pZCBfcV9v
bkFmdGVyU2NlbmVSZW5kZXIoKSk7Ci0gICAgUV9QUklWQVRFX1NMT1QoZCwgdm9pZCBfcV9vblNj
ZW5lR3JhcGhJbml0aWFsaXplZCgpKTsKLQotICAgIHZvaWQgaW5pdFNjZW5lR3JhcGhDb25uZWN0
aW9ucygpOwotCi0gICAgUVRvdWNoV2ViUGFnZVByaXZhdGUqIGQ7Ci0gICAgZnJpZW5kIGNsYXNz
IFFUb3VjaFdlYlZpZXdQcml2YXRlOwotICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0VG91Y2hW
aWV3SW50ZXJmYWNlOwotfTsKLQotI2VuZGlmIC8qIHF0b3VjaHdlYnBhZ2VfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZjhiZTZlOGRjNDczMmIxZDYzNDI0ODFmNDBmMThm
NzRiM2IwNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaAorKysgL2Rl
di9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIHF0b3Vj
aHdlYnBhZ2VfcF9oCi0jZGVmaW5lIHF0b3VjaHdlYnBhZ2VfcF9oCi0KLSNpbmNsdWRlICJRdFNH
VXBkYXRlUXVldWUuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicXdl
Ym5hdmlnYXRpb25jb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8UU1lbnU+Ci0KLWNsYXNzIFFSZWN0
RjsKLWNsYXNzIFFTR05vZGU7Ci1jbGFzcyBRU3RyaW5nOwotY2xhc3MgUVRvdWNoV2ViUGFnZTsK
LQotY2xhc3MgUVRvdWNoV2ViUGFnZVByaXZhdGUgewotcHVibGljOgotICAgIFFUb3VjaFdlYlBh
Z2VQcml2YXRlKFFUb3VjaFdlYlBhZ2UqIHZpZXcpOwotCi0gICAgdm9pZCBzZXRQYWdlUHJveHko
UXRXZWJQYWdlUHJveHkqKTsKLQotICAgIHZvaWQgX3Ffb25BZnRlclNjZW5lUmVuZGVyKCk7Ci0g
ICAgdm9pZCBfcV9vblNjZW5lR3JhcGhJbml0aWFsaXplZCgpOwotICAgIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoKTsKLQotICAgIFFUb3VjaFdlYlBhZ2UqIGNvbnN0IHE7Ci0gICAgUXRX
ZWJQYWdlUHJveHkqIHBhZ2VQcm94eTsKLSAgICBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXIqIG5h
dmlnYXRpb25Db250cm9sbGVyOwotICAgIFdlYktpdDo6UXRTR1VwZGF0ZVF1ZXVlIHNnVXBkYXRl
UXVldWU7Ci0gICAgYm9vbCBwYWludGluZ0lzSW5pdGlhbGl6ZWQ7Ci19OwotCi0jZW5kaWYgLyog
cXRvdWNod2VicGFnZV9wX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F0b3VjaHdlYnZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzA0
ODgxNWRiNmNhMmFlMTc0NmJhNWIxZTZkYmUyOWRkZmExNTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXRvdWNod2Vidmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJ2
aWV3LmgiCi0KLSNpbmNsdWRlICJRdFRvdWNoVmlld0ludGVyZmFjZS5oIgotI2luY2x1ZGUgIlF0
V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZV9wLmgiCi0jaW5jbHVkZSAi
cXRvdWNod2Vidmlld19wLmgiCi0jaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKLSNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotCi12b2lk
IFFUb3VjaFdlYlZpZXdQcml2YXRlOjppbml0KFFUb3VjaFdlYlZpZXcqIHZpZXdwb3J0KQotewot
ICAgIHBhZ2VWaWV3LnJlc2V0KG5ldyBRVG91Y2hXZWJQYWdlKHZpZXdwb3J0KSk7Ci0gICAgdmll
d0ludGVyZmFjZS5yZXNldChuZXcgV2ViS2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZSh2aWV3cG9y
dCwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0gICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQobmV3IFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSh2aWV3cG9ydCwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0g
ICAgUVRvdWNoV2ViUGFnZVByaXZhdGUqIGNvbnN0IHBhZ2VWaWV3UHJpdmF0ZSA9IHBhZ2VWaWV3
LmRhdGEoKS0+ZDsKLSAgICBzZXRQYWdlUHJveHkobmV3IFF0V2ViUGFnZVByb3h5KHZpZXdJbnRl
cmZhY2UuZGF0YSgpLCBpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCkpKTsKLSAgICBwYWdlVmlld1By
aXZhdGUtPnNldFBhZ2VQcm94eShwYWdlUHJveHkuZGF0YSgpKTsKLSAgICBRV2ViUHJlZmVyZW5j
ZXNQcml2YXRlOjpnZXQocGFnZVByb3h5LT5wcmVmZXJlbmNlcygpKS0+c2V0QXR0cmlidXRlKFFX
ZWJQcmVmZXJlbmNlc1ByaXZhdGU6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0cnVl
KTsKLSAgICBwYWdlUHJveHktPmluaXQoKTsKLQotICAgIFFPYmplY3Q6OmNvbm5lY3QoaW50ZXJh
Y3Rpb25FbmdpbmUuZGF0YSgpLCBTSUdOQUwodmlld3BvcnRVcGRhdGVSZXF1ZXN0ZWQoKSksIHZp
ZXdwb3J0LCBTTE9UKF9xX3ZpZXdwb3J0VXBkYXRlZCgpKSk7Ci0gICAgUU9iamVjdDo6Y29ubmVj
dChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3cG9ydFRyYWplY3RvcnlWZWN0
b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYmKSksIHZpZXdwb3J0LCBTTE9UKF9xX3ZpZXdwb3J0VHJh
amVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKSk7Ci19Ci0KLXZvaWQgUVRvdWNo
V2ViVmlld1ByaXZhdGU6OmxvYWREaWRDb21taXQoKQotewotICAgIGludGVyYWN0aW9uRW5naW5l
LT5yZXNldCgpOwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRlOjpzY3JvbGxQb3NpdGlv
blJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcykKLXsKLSAgICBpbnRlcmFjdGlvbkVuZ2luZS0+
cGFnZVBvc2l0aW9uUmVxdWVzdChwb3MpOwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRl
OjpfcV92aWV3cG9ydFVwZGF0ZWQoKQotewotICAgIFFfUShRVG91Y2hXZWJWaWV3KTsKLSAgICBj
b25zdCBRUmVjdEYgdmlzaWJsZVJlY3RJblBhZ2VWaWV3Q29vcmRpbmF0ZXMgPSBxLT5tYXBSZWN0
VG9JdGVtKHBhZ2VWaWV3LmRhdGEoKSwgcS0+Ym91bmRpbmdSZWN0KCkpLmludGVyc2VjdGVkKHBh
Z2VWaWV3LT5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgZmxvYXQgc2NhbGUgPSBwYWdlVmlldy0+c2Nh
bGUoKTsKLSAgICBwYWdlUHJveHktPnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHZpc2li
bGVSZWN0SW5QYWdlVmlld0Nvb3JkaW5hdGVzLCBzY2FsZSk7Ci19Ci0KLXZvaWQgUVRvdWNoV2Vi
Vmlld1ByaXZhdGU6Ol9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBv
aW50RiYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBwYWdlUHJveHktPnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Ci19Ci0KLXZvaWQgUVRv
dWNoV2ViVmlld1ByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCi17Ci0gICAgUV9RKFFUb3Vj
aFdlYlZpZXcpOwotICAgIFFTaXplIHZpZXdwb3J0U2l6ZSA9IHEtPmJvdW5kaW5nUmVjdCgpLnNp
emUoKS50b1NpemUoKTsKLQotICAgIGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvSW1wbChwYWdlUHJveHkt
PnBhZ2VSZWYoKSk7Ci0KLSAgICAvLyBMZXQgdGhlIFdlYlByb2Nlc3Mga25vdyBhYm91dCB0aGUg
bmV3IHZpZXdwb3J0IHNpemUsIHNvIHRoYXQKLSAgICAvLyBpdCBjYW4gcmVzaXplIHRoZSBjb250
ZW50IGFjY29yZGluZ2x5LgotICAgIHdrUGFnZS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6
ZSk7Ci0KLSAgICB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7Ci0gICAgX3Ffdmlld3BvcnRV
cGRhdGVkKCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlld1ByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0
Q29uc3RyYWludHMoKQotewotICAgIFFfUShRVG91Y2hXZWJWaWV3KTsKLSAgICBRU2l6ZSBhdmFp
bGFibGVTaXplID0gcS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpOwotCi0gICAgaWYg
KGF2YWlsYWJsZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQYWdl
UHJveHkqIHdrUGFnZSA9IHRvSW1wbChwYWdlUHJveHktPnBhZ2VSZWYoKSk7Ci0gICAgV2ViUHJl
ZmVyZW5jZXMqIHdrUHJlZnMgPSB3a1BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOwot
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBsYXRlcjsgSGFyZGNvZGUgc29tZSB2YWx1ZXMgZm9yIG5v
dyB0byBtYWtlIHN1cmUgdGhlIERQSSBhZGp1c3RtZW50IGlzIGJlaW5nIHRlc3RlZC4KLSAgICB3
a1ByZWZzLT5zZXREZXZpY2VEUEkoMjQwKTsKLSAgICB3a1ByZWZzLT5zZXREZXZpY2VXaWR0aCg0
ODApOwotICAgIHdrUHJlZnMtPnNldERldmljZUhlaWdodCg3MjApOwotCi0gICAgaW50IG1pbmlt
dW1MYXlvdXRGYWxsYmFja1dpZHRoID0gcU1heDxpbnQ+KHdrUHJlZnMtPmxheW91dEZhbGxiYWNr
V2lkdGgoKSwgYXZhaWxhYmxlU2l6ZS53aWR0aCgpKTsKLQotICAgIFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcyBhdHRyID0gV2ViQ29yZTo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyh2aWV3
cG9ydEFyZ3VtZW50cywgbWluaW11bUxheW91dEZhbGxiYWNrV2lkdGgsIHdrUHJlZnMtPmRldmlj
ZVdpZHRoKCksIHdrUHJlZnMtPmRldmljZUhlaWdodCgpLCB3a1ByZWZzLT5kZXZpY2VEUEkoKSwg
YXZhaWxhYmxlU2l6ZSk7Ci0gICAgV2ViQ29yZTo6cmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JU
b1ZpZXdwb3J0U2l6ZShhdHRyLCBhdmFpbGFibGVTaXplKTsKLSAgICBXZWJDb3JlOjpyZXN0cmlj
dFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShhdHRyKTsKLQotICAg
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Q29uc3RyYWludHMgbmV3Q29uc3RyYWludHM7
Ci0gICAgbmV3Q29uc3RyYWludHMuaW5pdGlhbFNjYWxlID0gYXR0ci5pbml0aWFsU2NhbGU7Ci0g
ICAgbmV3Q29uc3RyYWludHMubWluaW11bVNjYWxlID0gYXR0ci5taW5pbXVtU2NhbGU7Ci0gICAg
bmV3Q29uc3RyYWludHMubWF4aW11bVNjYWxlID0gYXR0ci5tYXhpbXVtU2NhbGU7Ci0gICAgbmV3
Q29uc3RyYWludHMuZGV2aWNlUGl4ZWxSYXRpbyA9IGF0dHIuZGV2aWNlUGl4ZWxSYXRpbzsKLSAg
ICBuZXdDb25zdHJhaW50cy5pc1VzZXJTY2FsYWJsZSA9ICEhYXR0ci51c2VyU2NhbGFibGU7Ci0g
ICAgaW50ZXJhY3Rpb25FbmdpbmUtPnNldENvbnN0cmFpbnRzKG5ld0NvbnN0cmFpbnRzKTsKLQot
ICAgIC8vIE92ZXJ3cml0ZSBtaW5pbXVtIHNjYWxlIHZhbHVlIHdpdGggZml0LXRvLXZpZXcgdmFs
dWUsIHVubGVzcyB0aGUgdGhlIGNvbnRlbnQgYXV0aG9yCi0gICAgLy8gZXhwbGljaXRseSBzYXlz
IG5vLiBOQjogV2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIGtub3cgd2UgaGF2ZSBhIHZhbGlk
IHNpemUsIGllLgotICAgIC8vIGFmdGVyIGluaXRpYWwgbGF5b3V0IGhhcyBjb21wbGV0ZWQuCi19
Ci0KLXZvaWQgUVRvdWNoV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGll
cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJncykKLXsKLSAgICB2aWV3cG9y
dEFyZ3VtZW50cyA9IGFyZ3M7Ci0gICAgdXBkYXRlVmlld3BvcnRDb25zdHJhaW50cygpOwotfQot
Ci1RVG91Y2hXZWJWaWV3OjpRVG91Y2hXZWJWaWV3KFFRdWlja0l0ZW0qIHBhcmVudCkKLSAgICA6
IFFCYXNlV2ViVmlldygqKG5ldyBRVG91Y2hXZWJWaWV3UHJpdmF0ZSksIHBhcmVudCkKLXsKLSAg
ICBRX0QoUVRvdWNoV2ViVmlldyk7Ci0gICAgZC0+aW5pdCh0aGlzKTsKLSAgICBzZXRGbGFncyhR
UXVpY2tJdGVtOjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUpOwotICAgIGNvbm5lY3QodGhpcywg
U0lHTkFMKHZpc2libGVDaGFuZ2VkKCkpLCBTTE9UKG9uVmlzaWJsZUNoYW5nZWQoKSkpOwotfQot
Ci1RVG91Y2hXZWJWaWV3Ojp+UVRvdWNoV2ViVmlldygpCi17Ci19Ci0KLVFUb3VjaFdlYlBhZ2Uq
IFFUb3VjaFdlYlZpZXc6OnBhZ2UoKQotewotICAgIFFfRChRVG91Y2hXZWJWaWV3KTsKLSAgICBy
ZXR1cm4gZC0+cGFnZVZpZXcuZGF0YSgpOwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXc6Omdlb21l
dHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBjb25zdCBRUmVjdEYmIG9sZEdl
b21ldHJ5KQotewotICAgIFFfRChRVG91Y2hXZWJWaWV3KTsKLSAgICBRUXVpY2tJdGVtOjpnZW9t
ZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsKLSAgICBpZiAobmV3R2VvbWV0
cnkuc2l6ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUoKSkKLSAgICAgICAgZC0+dXBkYXRlVmlld3Bv
cnRTaXplKCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlldzo6dG91Y2hFdmVudChRVG91Y2hFdmVu
dCogZXZlbnQpCi17Ci0gICAgZm9yY2VBY3RpdmVGb2N1cygpOwotICAgIFFRdWlja0l0ZW06OnRv
dWNoRXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXc6Om9uVmlzaWJsZUNoYW5n
ZWQoKQotewotICAgIFFfRChRVG91Y2hXZWJWaWV3KTsKLSAgICBXZWJQYWdlUHJveHkqIHdrUGFn
ZSA9IHRvSW1wbChkLT5wYWdlUHJveHktPnBhZ2VSZWYoKSk7Ci0KLSAgICB3a1BhZ2UtPnZpZXdT
dGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwotfQotCi0jaW5jbHVk
ZSAibW9jX3F0b3VjaHdlYnZpZXcuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F0b3VjaHdlYnZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZm
YTBmNTNjMDJjN2YwODc3ODM4NGZlM2M5NzkzNDQ3MmFkZWQwMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F0b3VjaHdlYnZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi0jaWZuZGVmIHF0b3VjaHdlYnZpZXdfaAotI2RlZmluZSBxdG91Y2h3ZWJ2
aWV3X2gKLQotI2luY2x1ZGUgInFiYXNld2Vidmlldy5oIgotI2luY2x1ZGUgInF3ZWJraXRnbG9i
YWwuaCIKLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FxdWlja2l0ZW0uaD4KLQotY2xhc3MgUVRv
dWNoRXZlbnQ7Ci1jbGFzcyBRVG91Y2hXZWJQYWdlOwotY2xhc3MgUVRvdWNoV2ViVmlld1ByaXZh
dGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgUXRUb3VjaFZpZXdJbnRlcmZhY2U7Ci19
Ci0KLWNsYXNzIFFXRUJLSVRfRVhQT1JUIFFUb3VjaFdlYlZpZXcgOiBwdWJsaWMgUUJhc2VXZWJW
aWV3Ci17Ci0gICAgUV9PQkpFQ1QKLSAgICBRX1BST1BFUlRZKFFUb3VjaFdlYlBhZ2UqIHBhZ2Ug
UkVBRCBwYWdlIENPTlNUQU5UIEZJTkFMKQotCi1wdWJsaWM6Ci0gICAgUVRvdWNoV2ViVmlldyhR
UXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKLSAgICB+UVRvdWNoV2ViVmlldygpOwotCi0gICAgUVRv
dWNoV2ViUGFnZSAqcGFnZSgpOwotCi1wcm90ZWN0ZWQgUV9TTE9UUzoKLSAgICB2b2lkIG9uVmlz
aWJsZUNoYW5nZWQoKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNo
YW5nZWQoY29uc3QgUVJlY3RGJiwgY29uc3QgUVJlY3RGJik7Ci0gICAgdmlydHVhbCB2b2lkIHRv
dWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KTsKLQotcHJpdmF0ZToKLSAgICBRX1BSSVZBVEVf
U0xPVChkX2Z1bmMoKSwgdm9pZCBfcV92aWV3cG9ydFVwZGF0ZWQoKSk7Ci0gICAgUV9QUklWQVRF
X1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChj
b25zdCBRUG9pbnRGJikpOwotCi0gICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRUb3VjaFZpZXdJ
bnRlcmZhY2U7Ci0gICAgUV9ERUNMQVJFX1BSSVZBVEUoUVRvdWNoV2ViVmlldykKLX07Ci0KLVFN
TF9ERUNMQVJFX1RZUEUoUVRvdWNoV2ViVmlldykKLQotI2VuZGlmIC8qIHF0b3VjaHdlYnZpZXdf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3
ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmll
d19wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MDBlMWQxNGJmM2Y3MzY0ODE0
ZjcwMmEzMTMwZGRlMjQ1ZTBiODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3
X3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aWZuZGVmIHF0b3VjaHdlYnZpZXdfcF9oCi0jZGVmaW5lIHF0b3VjaHdlYnZpZXdfcF9oCi0KLSNp
bmNsdWRlICJRdFRvdWNoVmlld0ludGVyZmFjZS5oIgotI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5
LmgiCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCi0jaW5jbHVkZSAi
cWJhc2V3ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlIDxRU2NvcGVkUG9pbnRlcj4KLQotY2xhc3MgUVRv
dWNoV2ViUGFnZTsKLWNsYXNzIFFUb3VjaFdlYlZpZXc7Ci0KLWNsYXNzIFFUb3VjaFdlYlZpZXdQ
cml2YXRlIDogUUJhc2VXZWJWaWV3UHJpdmF0ZQotewotICAgIFFfREVDTEFSRV9QVUJMSUMoUVRv
dWNoV2ViVmlldykKLXB1YmxpYzoKLSAgICB2b2lkIGluaXQoUVRvdWNoV2ViVmlldyogdmlld3Bv
cnQpOwotCi0gICAgdm9pZCBsb2FkRGlkQ29tbWl0KCk7Ci0gICAgdm9pZCBzY3JvbGxQb3NpdGlv
blJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcyk7Ci0gICAgdm9pZCBfcV92aWV3cG9ydFVwZGF0
ZWQoKTsKLSAgICB2b2lkIF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3Qg
UVBvaW50RiYpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7Ci0gICAgdm9pZCB1cGRh
dGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7Ci0KLSAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJv
cGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJncyk7Ci0KLSAgICBR
U2NvcGVkUG9pbnRlcjxRVG91Y2hXZWJQYWdlPiBwYWdlVmlldzsKLSAgICBRU2NvcGVkUG9pbnRl
cjxXZWJLaXQ6OlF0VG91Y2hWaWV3SW50ZXJmYWNlPiB2aWV3SW50ZXJmYWNlOwotICAgIFFTY29w
ZWRQb2ludGVyPFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZT4gaW50ZXJhY3Rpb25FbmdpbmU7
Ci0KLSAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50czsKLX07
Ci0KLSNlbmRpZiAvKiBxdG91Y2h3ZWJ2aWV3X3BfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvY29tbW9udmlld3Rl
c3RzLnBybyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmll
d3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy5wcm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY4ZDdjMjJlYzRjM2RkYmRjYzJiZjU0MDc2ZTIwNWQ4ZjEyNmM1YWEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvY29tbW9udmlld3Rlc3RzLnBybworKysgL2Rl
di9udWxsCkBAIC0xLDMgKzAsMCBAQAotaW5jbHVkZSguLi90ZXN0cy5wcmkpCi1IRUFERVJTICs9
IHdlYnZpZXdhYnN0cmFjdGlvbi5oCi1TT1VSQ0VTICs9IHdlYnZpZXdhYnN0cmFjdGlvbi5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9u
dmlld3Rlc3RzL3RzdF9jb21tb252aWV3dGVzdHMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvdHN0X2NvbW1vbnZpZXd0ZXN0cy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NzBiMGFiZDQ5YjVlOTdjMmI0MWViMjZh
MDcyNWYyNDljZGY2N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVz
dHMvdHN0X2NvbW1vbnZpZXd0ZXN0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgPFFTY29wZWRQb2ludGVyPgotI2luY2x1
ZGUgPFFTaWduYWxTcHk+Ci0jaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KLSNpbmNsdWRlICJ3ZWJ2
aWV3YWJzdHJhY3Rpb24uaCIKLSNpbmNsdWRlICIuLi91dGlsLmgiCi0KLWNsYXNzIHRzdF9Db21t
b25WaWV3VGVzdHMgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAg
ICB0c3RfQ29tbW9uVmlld1Rlc3RzKCk7Ci0KLXByaXZhdGUgc2xvdHM6Ci0gICAgdm9pZCBpbml0
KCk7Ci0gICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAgICB2b2lkIGJhc2VVcmwoKTsKLSAgICB2b2lk
IGxvYWRFbXB0eVVybCgpOwotICAgIHZvaWQgbG9hZEVtcHR5UGFnZVZpZXdWaXNpYmxlKCk7Ci0g
ICAgdm9pZCBsb2FkRW1wdHlQYWdlVmlld0hpZGRlbigpOwotICAgIHZvaWQgbG9hZE5vbmV4aXN0
ZW50RmlsZVVybCgpOwotICAgIHZvaWQgYmFja0FuZEZvcndhcmQoKTsKLSAgICB2b2lkIHJlbG9h
ZCgpOwotICAgIHZvaWQgc3RvcCgpOwotICAgIHZvaWQgbG9hZFByb2dyZXNzKCk7Ci0KLSAgICB2
b2lkIHNob3coKTsKLXByaXZhdGU6Ci0gICAgUVNjb3BlZFBvaW50ZXI8V2ViVmlld0Fic3RyYWN0
aW9uPiB2aWV3QWJzdHJhY3Rpb247Ci19OwotCi10c3RfQ29tbW9uVmlld1Rlc3RzOjp0c3RfQ29t
bW9uVmlld1Rlc3RzKCkKLXsKLSAgICBhZGRRdFdlYlByb2Nlc3NUb1BhdGgoKTsKLX0KLQotdm9p
ZCB0c3RfQ29tbW9uVmlld1Rlc3RzOjppbml0KCkKLXsKLSAgICB2aWV3QWJzdHJhY3Rpb24ucmVz
ZXQobmV3IFdlYlZpZXdBYnN0cmFjdGlvbik7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdUZXN0
czo6Y2xlYW51cCgpCi17Ci0gICAgdmlld0Fic3RyYWN0aW9uLnJlc2V0KCk7Ci19Ci0KLXZvaWQg
dHN0X0NvbW1vblZpZXdUZXN0czo6YmFzZVVybCgpCi17Ci0gICAgLy8gVGVzdCB0aGUgdXJsIGlz
IGluIGEgd2VsbCBkZWZpbmVkIHN0YXRlIHdoZW4gaW5zdGFuY2lhdGluZyB0aGUgdmlldywgYnV0
IGJlZm9yZSBsb2FkaW5nIGFueXRoaW5nLgotICAgIFFVcmwgdXJsOwotICAgIFFWRVJJRlkodmll
d0Fic3RyYWN0aW9uLT51cmwodXJsKSk7Ci0gICAgUVZFUklGWSh1cmwuaXNFbXB0eSgpKTsKLX0K
LQotdm9pZCB0c3RfQ29tbW9uVmlld1Rlc3RzOjpsb2FkRW1wdHlVcmwoKQotewotICAgIHZpZXdB
YnN0cmFjdGlvbi0+bG9hZChRVXJsKCkpOwotICAgIHZpZXdBYnN0cmFjdGlvbi0+bG9hZChRVXJs
KFFMYXRpbjFTdHJpbmcoIiIpKSk7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6bG9h
ZEVtcHR5UGFnZVZpZXdWaXNpYmxlKCkKLXsKLSAgICB2aWV3QWJzdHJhY3Rpb24tPnNob3coKTsK
LSAgICBsb2FkRW1wdHlQYWdlVmlld0hpZGRlbigpOwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3
VGVzdHM6OmxvYWRFbXB0eVBhZ2VWaWV3SGlkZGVuKCkKLXsKLSAgICBRU2lnbmFsU3B5IGxvYWRT
dGFydGVkU3B5KHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3RhcnRlZCgpKSk7
Ci0KLSAgICB2aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4x
U3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7Ci0gICAg
UVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2Fk
U3VjY2VlZGVkKCkpKSk7Ci0KLSAgICBRQ09NUEFSRShsb2FkU3RhcnRlZFNweS5zaXplKCksIDEp
OwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmxvYWROb25leGlzdGVudEZpbGVVcmwo
KQotewotICAgIFFTaWduYWxTcHkgbG9hZEZhaWxlZFNweSh2aWV3QWJzdHJhY3Rpb24uZGF0YSgp
LCBTSUdOQUwobG9hZFN0YXJ0ZWQoKSkpOwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5sb2FkKFFV
cmw6OmZyb21Mb2NhbEZpbGUoUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9m
aWxlX3RoYXRfZG9lc19ub3RfZXhpc3QuaHRtbCIpKSk7Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2ln
bmFsKHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkRmFpbGVkKFFCYXNlV2ViVmll
dzo6RXJyb3JUeXBlLCBpbnQsIFFVcmwpKSkpOwotCi0gICAgUUNPTVBBUkUobG9hZEZhaWxlZFNw
eS5zaXplKCksIDEpOwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmJhY2tBbmRGb3J3
YXJkKCkKLXsKLSAgICB2aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShR
TGF0aW4xU3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7
Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05B
TChsb2FkU3VjY2VlZGVkKCkpKSk7Ci0KLSAgICBRVXJsIHVybDsKLSAgICBRVkVSSUZZKHZpZXdB
YnN0cmFjdGlvbi0+dXJsKHVybCkpOwotICAgIFFDT01QQVJFKHVybC5wYXRoKCksIFFMYXRpbjFT
dHJpbmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZS5odG1sIikpOwotCi0gICAg
dmlld0Fic3RyYWN0aW9uLT5sb2FkKFFVcmw6OmZyb21Mb2NhbEZpbGUoUUxhdGluMVN0cmluZyhU
RVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNpY19wYWdlMi5odG1sIikpKTsKLSAgICBRVkVSSUZZ
KHdhaXRGb3JTaWduYWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdWNjZWVk
ZWQoKSkpKTsKLQotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51cmwodXJsKSk7Ci0gICAg
UUNPTVBBUkUodXJsLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRt
bC9iYXNpY19wYWdlMi5odG1sIikpOwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5nb0JhY2soKTsK
LSAgICBRVkVSSUZZKHdhaXRGb3JTaWduYWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFM
KGxvYWRTdWNjZWVkZWQoKSkpKTsKLQotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51cmwo
dXJsKSk7Ci0gICAgUUNPTVBBUkUodXJsLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VS
Q0VfRElSICIvaHRtbC9iYXNpY19wYWdlLmh0bWwiKSk7Ci0KLSAgICB2aWV3QWJzdHJhY3Rpb24t
PmdvRm9yd2FyZCgpOwotICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbCh2aWV3QWJzdHJhY3Rpb24u
ZGF0YSgpLCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSkpOwotCi0gICAgUVZFUklGWSh2aWV3QWJz
dHJhY3Rpb24tPnVybCh1cmwpKTsKLSAgICBRQ09NUEFSRSh1cmwucGF0aCgpLCBRTGF0aW4xU3Ry
aW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UyLmh0bWwiKSk7Ci19Ci0KLXZv
aWQgdHN0X0NvbW1vblZpZXdUZXN0czo6cmVsb2FkKCkKLXsKLSAgICB2aWV3QWJzdHJhY3Rpb24t
PmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIg
Ii9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZp
ZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7Ci0KLSAgICBR
VXJsIHVybDsKLSAgICBRVkVSSUZZKHZpZXdBYnN0cmFjdGlvbi0+dXJsKHVybCkpOwotICAgIFFD
T01QQVJFKHVybC5wYXRoKCksIFFMYXRpbjFTdHJpbmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwv
YmFzaWNfcGFnZS5odG1sIikpOwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5yZWxvYWQoKTsKLSAg
ICBRVkVSSUZZKHdhaXRGb3JTaWduYWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxv
YWRTdWNjZWVkZWQoKSkpKTsKLQotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51cmwodXJs
KSk7Ci0gICAgUUNPTVBBUkUodXJsLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0Vf
RElSICIvaHRtbC9iYXNpY19wYWdlLmh0bWwiKSk7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdU
ZXN0czo6c3RvcCgpCi17Ci0gICAgdmlld0Fic3RyYWN0aW9uLT5sb2FkKFFVcmw6OmZyb21Mb2Nh
bEZpbGUoUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNpY19wYWdlLmh0
bWwiKSkpOwotICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbCh2aWV3QWJzdHJhY3Rpb24uZGF0YSgp
LCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSkpOwotCi0gICAgUVVybCB1cmw7Ci0gICAgUVZFUklG
WSh2aWV3QWJzdHJhY3Rpb24tPnVybCh1cmwpKTsKLSAgICBRQ09NUEFSRSh1cmwucGF0aCgpLCBR
TGF0aW4xU3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKTsK
LQotICAgIC8vIEZJWE1FOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIGZsZXNoZWQgb3V0LiBSaWdodCBu
b3cgaXQncyBqdXN0IGhlcmUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgotICAgIHZpZXdB
YnN0cmFjdGlvbi0+c3RvcCgpOwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmxvYWRQ
cm9ncmVzcygpCi17Ci0gICAgUUNPTVBBUkUodmlld0Fic3RyYWN0aW9uLT5sb2FkUHJvZ3Jlc3Mo
KSwgMCk7Ci0KLSAgICB2aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShR
TGF0aW4xU3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7
Ci0gICAgUVNpZ25hbFNweSBsb2FkUHJvZ3Jlc3NDaGFuZ2VkU3B5KHZpZXdBYnN0cmFjdGlvbi5k
YXRhKCksIFNJR05BTChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpKTsKLSAgICBRVkVSSUZZKHdh
aXRGb3JTaWduYWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQo
KSkpKTsKLQotICAgIFFWRVJJRlkobG9hZFByb2dyZXNzQ2hhbmdlZFNweS5jb3VudCgpID49IDEp
OwotCi0gICAgUUNPTVBBUkUodmlld0Fic3RyYWN0aW9uLT5sb2FkUHJvZ3Jlc3MoKSwgMTAwKTsK
LX0KLQotdm9pZCB0c3RfQ29tbW9uVmlld1Rlc3RzOjpzaG93KCkKLXsKLSAgICAvLyBUaGlzIHNo
b3VsZCBub3QgY3Jhc2guCi0gICAgdmlld0Fic3RyYWN0aW9uLT5zaG93KCk7Ci0gICAgUVRlc3Q6
OnFXYWl0KDIwMCk7Ci0gICAgdmlld0Fic3RyYWN0aW9uLT5oaWRlKCk7Ci19Ci0KLVFUV0VCS0lU
X0FQSV9URVNUX01BSU4odHN0X0NvbW1vblZpZXdUZXN0cykKLQotI2luY2x1ZGUgInRzdF9jb21t
b252aWV3dGVzdHMubW9jIgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rpb24uY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vidmll
d2Fic3RyYWN0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJhYTMzNjM4
NzgyYjg5ZjlkNjU3YzQ2NWEzOGUwOTM0NDZkYTU0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rpb24uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTg5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlIDxRQWN0aW9u
PgotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRGVza3RvcFdpZGdldD4KLSNp
bmNsdWRlIDxxd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlICJ3ZWJ2aWV3YWJz
dHJhY3Rpb24uaCIKLQotV2ViVmlld0Fic3RyYWN0aW9uOjpXZWJWaWV3QWJzdHJhY3Rpb24oKQot
ICAgIDogbV90b3VjaFdlYlZpZXdXaW5kb3cobmV3IFFUb3VjaFdlYlZpZXcpCi0gICAgLCBtX2Rl
c2t0b3BXZWJWaWV3V2luZG93KG5ldyBRRGVza3RvcFdlYlZpZXcpCi17Ci0gICAgUURlc2t0b3BX
aWRnZXQqIGNvbnN0IGRlc2t0b3BXaWRnZXQgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKTsKLSAg
ICBjb25zdCBRUmVjdCBtYWluU2NyZWVuR2VvbWV0cnkgPSBkZXNrdG9wV2lkZ2V0LT5hdmFpbGFi
bGVHZW9tZXRyeSgpOwotCi0gICAgUVJlY3Qgc2NyZWVuSGFsZihtYWluU2NyZWVuR2VvbWV0cnku
dG9wTGVmdCgpLCBRU2l6ZShtYWluU2NyZWVuR2VvbWV0cnkud2lkdGgoKSAvIDIsIG1haW5TY3Jl
ZW5HZW9tZXRyeS5oZWlnaHQoKSkpOwotICAgIG1fdG91Y2hXZWJWaWV3V2luZG93LnNldEdlb21l
dHJ5KHNjcmVlbkhhbGYpOwotICAgIG1fdG91Y2hXZWJWaWV3V2luZG93LnNldFdpbmRvd1RpdGxl
KFFMYXRpbjFTdHJpbmcoIlRvdWNoV2ViVmlldyIpKTsKLSAgICBjb25uZWN0KHRvdWNoV2ViVmll
dygpLCBTSUdOQUwobG9hZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1QodG91Y2hWaWV3TG9hZFN0YXJ0
ZWQoKSkpOwotICAgIGNvbm5lY3QodG91Y2hXZWJWaWV3KCksIFNJR05BTChsb2FkU3VjY2VlZGVk
KCkpLCB0aGlzLCBTTE9UKHRvdWNoVmlld0xvYWRTdWNjZWVkZWQoKSkpOwotICAgIGNvbm5lY3Qo
dG91Y2hXZWJWaWV3KCksIFNJR05BTChsb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBl
LCBpbnQsIGNvbnN0IFFVcmwmKSksIHRoaXMsIFNMT1QodG91Y2hWaWV3TG9hZEZhaWxlZChRQmFz
ZVdlYlZpZXc6OkVycm9yVHlwZSwgaW50LCBjb25zdCBRVXJsJikpKTsKLSAgICBjb25uZWN0KHRv
dWNoV2ViVmlldygpLCBTSUdOQUwobG9hZFByb2dyZXNzQ2hhbmdlZChpbnQpKSwgdGhpcywgU0xP
VCh0b3VjaFZpZXdMb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpKTsKLQotICAgIHNjcmVlbkhhbGYu
bW92ZUxlZnQoc2NyZWVuSGFsZi5yaWdodCgpKTsKLSAgICBtX2Rlc2t0b3BXZWJWaWV3V2luZG93
LnNldEdlb21ldHJ5KHNjcmVlbkhhbGYpOwotICAgIG1fZGVza3RvcFdlYlZpZXdXaW5kb3cuc2V0
V2luZG93VGl0bGUoUUxhdGluMVN0cmluZygiRGVza3RvcFdlYlZpZXciKSk7Ci0gICAgY29ubmVj
dChkZXNrdG9wV2ViVmlldygpLCBTSUdOQUwobG9hZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1QoZGVz
a3RvcFZpZXdMb2FkU3RhcnRlZCgpKSk7Ci0gICAgY29ubmVjdChkZXNrdG9wV2ViVmlldygpLCBT
SUdOQUwobG9hZFN1Y2NlZWRlZCgpKSwgdGhpcywgU0xPVChkZXNrdG9wVmlld0xvYWRTdWNjZWVk
ZWQoKSkpOwotICAgIGNvbm5lY3QoZGVza3RvcFdlYlZpZXcoKSwgU0lHTkFMKGxvYWRGYWlsZWQo
UUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgY29uc3QgUVVybCYpKSwgdGhpcywgU0xPVChk
ZXNrdG9wVmlld0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgY29uc3Qg
UVVybCYpKSk7Ci0gICAgY29ubmVjdChkZXNrdG9wV2ViVmlldygpLCBTSUdOQUwobG9hZFByb2dy
ZXNzQ2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVChkZXNrdG9wVmlld0xvYWRQcm9ncmVzc0NoYW5n
ZWQoaW50KSkpOwotfQotCi12b2lkIFdlYlZpZXdBYnN0cmFjdGlvbjo6c2hvdygpCi17Ci0gICAg
bV90b3VjaFdlYlZpZXdXaW5kb3cuc2hvdygpOwotICAgIG1fZGVza3RvcFdlYlZpZXdXaW5kb3cu
c2hvdygpOwotICAgIFFUZXN0OjpxV2FpdEZvcldpbmRvd1Nob3duKCZtX2Rlc2t0b3BXZWJWaWV3
V2luZG93KTsKLX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmhpZGUoKQotewotICAgIG1f
dG91Y2hXZWJWaWV3V2luZG93LmhpZGUoKTsKLSAgICBtX2Rlc2t0b3BXZWJWaWV3V2luZG93Lmhp
ZGUoKTsKLX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmxvYWQoY29uc3QgUVVybCYgdXJs
KQotewotICAgIHRvdWNoV2ViVmlldygpLT5sb2FkKHVybCk7Ci0gICAgZGVza3RvcFdlYlZpZXco
KS0+bG9hZCh1cmwpOwotfQotCi1ib29sIFdlYlZpZXdBYnN0cmFjdGlvbjo6dXJsKFFVcmwmIHVy
bCkgY29uc3QKLXsKLSAgICBjb25zdCBRVXJsIHRvdWNoVmlld1VybCA9IHRvdWNoV2ViVmlldygp
LT51cmwoKTsKLSAgICBjb25zdCBRVXJsIGRlc2t0b3BWaWV3VXJsID0gZGVza3RvcFdlYlZpZXco
KS0+dXJsKCk7Ci0KLSAgICBpZiAodG91Y2hWaWV3VXJsICE9IGRlc2t0b3BWaWV3VXJsKSB7Ci0g
ICAgICAgIHFXYXJuaW5nKCkgPDwgIldlYlZpZXdBYnN0cmFjdGlvbjo6dXJsKCk6IHRoZSBVUkxz
IGFyZSBub3QgZXF1YWxzLiI7Ci0gICAgICAgIHFXYXJuaW5nKCkgPDwgIlFUb3VjaFZpZXcncyB1
cmwgPSAiIDw8IHRvdWNoVmlld1VybDsKLSAgICAgICAgcVdhcm5pbmcoKSA8PCAiUURlc2t0b3BW
aWV3J3MgdXJsID0gIiA8PCBkZXNrdG9wVmlld1VybDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHVybCA9IHRvdWNoVmlld1VybDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
aW50IFdlYlZpZXdBYnN0cmFjdGlvbjo6bG9hZFByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpbnQg
dG91Y2hWaWV3UHJvZ3Jlc3MgPSB0b3VjaFdlYlZpZXcoKS0+bG9hZFByb2dyZXNzKCk7Ci0gICAg
aW50IGRlc2t0b3BWaWV3UHJvZ3Jlc3MgPSBkZXNrdG9wV2ViVmlldygpLT5sb2FkUHJvZ3Jlc3Mo
KTsKLQotICAgIGlmICh0b3VjaFZpZXdQcm9ncmVzcyAhPSBkZXNrdG9wVmlld1Byb2dyZXNzKSB7
Ci0gICAgICAgIHFXYXJuaW5nKCkgPDwgIldlYlZpZXdBYnN0cmFjdGlvbjo6bG9hZFByb2dyZXNz
KCk6IHRoZSBsb2FkIHByb2dyZXNzIGFyZSBkaWZmZXJlbnQuIjsKLSAgICAgICAgcVdhcm5pbmco
KSA8PCAiUVRvdWNoVmlldydzIGxvYWQgcHJvZ3Jlc3MgPSAiIDw8IHRvdWNoVmlld1Byb2dyZXNz
OwotICAgICAgICBxV2FybmluZygpIDw8ICJRRGVza3RvcFZpZXcncyBsb2FkIHByb2dyZXNzID0g
IiA8PCBkZXNrdG9wVmlld1Byb2dyZXNzOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRvdWNoVmlld1Byb2dyZXNzOwotfQotCi12b2lkIFdlYlZpZXdBYnN0cmFjdGlv
bjo6Z29CYWNrKCkKLXsKLSAgICB0b3VjaFdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIo
KS0+Z29CYWNrKCk7Ci0gICAgZGVza3RvcFdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIo
KS0+Z29CYWNrKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjpnb0ZvcndhcmQoKQot
ewotICAgIHRvdWNoV2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5nb0ZvcndhcmQo
KTsKLSAgICBkZXNrdG9wV2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5nb0Zvcndh
cmQoKTsKLX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OnN0b3AoKQotewotICAgIHRvdWNo
V2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5zdG9wKCk7Ci0gICAgZGVza3RvcFdl
YlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+c3RvcCgpOwotfQotCi12b2lkIFdlYlZp
ZXdBYnN0cmFjdGlvbjo6cmVsb2FkKCkKLXsKLSAgICB0b3VjaFdlYlZpZXcoKS0+bmF2aWdhdGlv
bkNvbnRyb2xsZXIoKS0+cmVsb2FkKCk7Ci0gICAgZGVza3RvcFdlYlZpZXcoKS0+bmF2aWdhdGlv
bkNvbnRyb2xsZXIoKS0+cmVsb2FkKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjp0
b3VjaFZpZXdMb2FkU3RhcnRlZCgpCi17Ci0gICAgbV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltT
SUdOQUwobG9hZFN0YXJ0ZWQoKSldKys7Ci0gICAgaWYgKG1fdG91Y2hWaWV3U2lnbmFsc0NvdW50
ZXJbU0lHTkFMKGxvYWRTdGFydGVkKCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJb
U0lHTkFMKGxvYWRTdGFydGVkKCkpXSkKLSAgICAgICAgZW1pdCBsb2FkU3RhcnRlZCgpOwotfQot
Ci12b2lkIFdlYlZpZXdBYnN0cmFjdGlvbjo6ZGVza3RvcFZpZXdMb2FkU3RhcnRlZCgpCi17Ci0g
ICAgbV9kZXNrdG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3RhcnRlZCgpKV0rKzsK
LSAgICBpZiAobV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN0YXJ0ZWQoKSld
ID09IG1fZGVza3RvcFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN0YXJ0ZWQoKSldKQot
ICAgICAgICBlbWl0IGxvYWRTdGFydGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9u
Ojp0b3VjaFZpZXdMb2FkU3VjY2VlZGVkKCkKLXsKLSAgICBtX3RvdWNoVmlld1NpZ25hbHNDb3Vu
dGVyW1NJR05BTChsb2FkU3VjY2VlZGVkKCkpXSsrOwotICAgIGlmIChtX3RvdWNoVmlld1NpZ25h
bHNDb3VudGVyW1NJR05BTChsb2FkU3VjY2VlZGVkKCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFs
c0NvdW50ZXJbU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSldKQotICAgICAgICBlbWl0IGxvYWRTdWNj
ZWVkZWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmRlc2t0b3BWaWV3TG9hZFN1
Y2NlZWRlZCgpCi17Ci0gICAgbV9kZXNrdG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2Fk
U3VjY2VlZGVkKCkpXSsrOwotICAgIGlmIChtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyW1NJR05B
TChsb2FkU3VjY2VlZGVkKCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFM
KGxvYWRTdWNjZWVkZWQoKSldKQotICAgICAgICBlbWl0IGxvYWRTdWNjZWVkZWQoKTsKLX0KLQot
dm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OnRvdWNoVmlld0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3
OjpFcnJvclR5cGUgZXJyb3JUeXBlLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBRVXJsJiB1cmwpCi17
Ci0gICAgbV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZEZhaWxlZChRQmFzZVdl
YlZpZXc6OkVycm9yVHlwZSwgaW50LCBRVXJsKSldKys7Ci0gICAgaWYgKG1fdG91Y2hWaWV3U2ln
bmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGlu
dCwgUVVybCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRGYWls
ZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgUVVybCkpXSkKLSAgICAgICAgZW1pdCBs
b2FkRmFpbGVkKHN0YXRpY19jYXN0PFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlPihlcnJvclR5cGUp
LCBlcnJvckNvZGUsIHVybCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjpkZXNrdG9w
Vmlld0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUgZXJyb3JUeXBlLCBpbnQgZXJy
b3JDb2RlLCBjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAgbV9kZXNrdG9wVmlld1NpZ25hbHNDb3Vu
dGVyW1NJR05BTChsb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlLCBpbnQsIFFVcmwp
KV0rKzsKLSAgICBpZiAobV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZEZhaWxl
ZChRQmFzZVdlYlZpZXc6OkVycm9yVHlwZSwgaW50LCBRVXJsKSldID09IG1fZGVza3RvcFZpZXdT
aWduYWxzQ291bnRlcltTSUdOQUwobG9hZEZhaWxlZChRQmFzZVdlYlZpZXc6OkVycm9yVHlwZSwg
aW50LCBRVXJsKSldKQotICAgICAgICBlbWl0IGxvYWRGYWlsZWQoZXJyb3JUeXBlLCBlcnJvckNv
ZGUsIHVybCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjp0b3VjaFZpZXdMb2FkUHJv
Z3Jlc3NDaGFuZ2VkKGludCBwcm9ncmVzcykKLXsKLSAgICBtX3RvdWNoVmlld1NpZ25hbHNDb3Vu
dGVyW1NJR05BTChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpXSsrOwotICAgIGlmIChtX3RvdWNo
Vmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpXSA9PSBt
X2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50
KSldKQotICAgICAgICBlbWl0IGxvYWRQcm9ncmVzc0NoYW5nZWQocHJvZ3Jlc3MpOwotfQotCi12
b2lkIFdlYlZpZXdBYnN0cmFjdGlvbjo6ZGVza3RvcFZpZXdMb2FkUHJvZ3Jlc3NDaGFuZ2VkKGlu
dCBwcm9ncmVzcykKLXsKLSAgICBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxv
YWRQcm9ncmVzc0NoYW5nZWQoaW50KSldKys7Ci0gICAgaWYgKG1fdG91Y2hWaWV3U2lnbmFsc0Nv
dW50ZXJbU0lHTkFMKGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50KSldID09IG1fZGVza3RvcFZpZXdT
aWduYWxzQ291bnRlcltTSUdOQUwobG9hZFByb2dyZXNzQ2hhbmdlZChpbnQpKV0pCi0gICAgICAg
IGVtaXQgbG9hZFByb2dyZXNzQ2hhbmdlZChwcm9ncmVzcyk7Ci19Ci0KLVFUb3VjaFdlYlZpZXcq
IFdlYlZpZXdBYnN0cmFjdGlvbjo6dG91Y2hXZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UVRvdWNoV2ViVmlldyo+KG1fdG91Y2hXZWJWaWV3V2luZG93LndlYlZpZXcu
ZGF0YSgpKTsKLX0KLQotUURlc2t0b3BXZWJWaWV3KiBXZWJWaWV3QWJzdHJhY3Rpb246OmRlc2t0
b3BXZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UURlc2t0b3BXZWJW
aWV3Kj4obV9kZXNrdG9wV2ViVmlld1dpbmRvdy53ZWJWaWV3LmRhdGEoKSk7Ci19Ci0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rl
c3RzL3dlYnZpZXdhYnN0cmFjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vidmlld2Fic3RyYWN0aW9uLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNmY2I0NDE2MGEzNzU2MzkxZDk3ZmM0YmI4MjY4MjU2NGQ4NDFk
YTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vidmlld2Fi
c3RyYWN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jaWZuZGVmIHdlYnZpZXdhYnN0cmFjdGlvbl9oCi0jZGVmaW5lIHdlYnZpZXdhYnN0
cmFjdGlvbl9oCi0KLSNpbmNsdWRlIDxRSGFzaD4KLSNpbmNsdWRlIDxRVXJsPgotI2luY2x1ZGUg
PFF0VGVzdC9RdFRlc3Q+Ci0jaW5jbHVkZSA8cXRvdWNod2VicGFnZS5oPgotI2luY2x1ZGUgPHF0
b3VjaHdlYnZpZXcuaD4KLSNpbmNsdWRlIDxxZGVza3RvcHdlYnZpZXcuaD4KLSNpbmNsdWRlICIu
Li90ZXN0d2luZG93LmgiCi0KLWNsYXNzIFdlYlZpZXdBYnN0cmFjdGlvbiA6IHB1YmxpYyBRT2Jq
ZWN0Ci17Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXZWJWaWV3QWJzdHJhY3Rpb24oKTsK
LQotICAgIHZvaWQgc2hvdygpOwotICAgIHZvaWQgaGlkZSgpOwotCi0gICAgdm9pZCBsb2FkKGNv
bnN0IFFVcmwmKTsKLSAgICBib29sIHVybChRVXJsJikgY29uc3Q7Ci0gICAgaW50IGxvYWRQcm9n
cmVzcygpIGNvbnN0OwotCi0gICAgdm9pZCBnb0JhY2soKTsKLSAgICB2b2lkIGdvRm9yd2FyZCgp
OwotICAgIHZvaWQgc3RvcCgpOwotICAgIHZvaWQgcmVsb2FkKCk7Ci0KLVFfU0lHTkFMUzoKLSAg
ICB2b2lkIGxvYWRTdGFydGVkKCk7Ci0gICAgdm9pZCBsb2FkU3VjY2VlZGVkKCk7Ci0gICAgdm9p
ZCBsb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlLCBpbnQsIGNvbnN0IFFVcmwmKTsK
LSAgICB2b2lkIGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50KTsKLQotcHJpdmF0ZSBRX1NMT1RTOgot
ICAgIHZvaWQgdG91Y2hWaWV3TG9hZFN0YXJ0ZWQoKTsKLSAgICB2b2lkIGRlc2t0b3BWaWV3TG9h
ZFN0YXJ0ZWQoKTsKLSAgICB2b2lkIHRvdWNoVmlld0xvYWRTdWNjZWVkZWQoKTsKLSAgICB2b2lk
IGRlc2t0b3BWaWV3TG9hZFN1Y2NlZWRlZCgpOwotICAgIHZvaWQgdG91Y2hWaWV3TG9hZEZhaWxl
ZChRQmFzZVdlYlZpZXc6OkVycm9yVHlwZSwgaW50LCBjb25zdCBRVXJsJik7Ci0gICAgdm9pZCBk
ZXNrdG9wVmlld0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgY29uc3Qg
UVVybCYpOwotICAgIHZvaWQgdG91Y2hWaWV3TG9hZFByb2dyZXNzQ2hhbmdlZChpbnQpOwotICAg
IHZvaWQgZGVza3RvcFZpZXdMb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCk7Ci0KLXByaXZhdGU6Ci0g
ICAgUVRvdWNoV2ViVmlldyogdG91Y2hXZWJWaWV3KCkgY29uc3Q7Ci0gICAgUURlc2t0b3BXZWJW
aWV3KiBkZXNrdG9wV2ViVmlldygpIGNvbnN0OwotCi0gICAgVGVzdFdpbmRvdyBtX3RvdWNoV2Vi
Vmlld1dpbmRvdzsKLSAgICBRSGFzaDxjb25zdCBjaGFyICosIHVuc2lnbmVkIGludD4gbV90b3Vj
aFZpZXdTaWduYWxzQ291bnRlcjsKLQotICAgIFRlc3RXaW5kb3cgbV9kZXNrdG9wV2ViVmlld1dp
bmRvdzsKLSAgICBRSGFzaDxjb25zdCBjaGFyICosIHVuc2lnbmVkIGludD4gbV9kZXNrdG9wVmll
d1NpZ25hbHNDb3VudGVyOwotfTsKLQotI2VuZGlmIC8qIHdlYnZpZXdhYnN0cmFjdGlvbl9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNr
dG9wd2Vidmlldy9xZGVza3RvcHdlYnZpZXcucHJvIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xZGVza3RvcHdlYnZpZXcvcWRlc2t0b3B3ZWJ2aWV3LnBybwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5YzdmNDkzOGNiMTUxMGVlZmVmYWVmY2UzMTY2M2Mw
OTdmMDU0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy9xZGVz
a3RvcHdlYnZpZXcucHJvCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaW5jbHVkZSguLi90
ZXN0cy5wcmkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FkZXNrdG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcWRlc2t0b3B3ZWJ2aWV3L3RzdF9xZGVza3RvcHdl
YnZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzI3NDIzOTcyNzIzNTky
MDJjMzc2NjMyNGY5MjFjYTkwMTQ0OTRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcWRl
c2t0b3B3ZWJ2aWV3L3RzdF9xZGVza3RvcHdlYnZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTE1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlIDxRU2NvcGVkUG9pbnRl
cj4KLSNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgotI2luY2x1ZGUgPHFkZXNrdG9wd2Vidmlldy5o
PgotI2luY2x1ZGUgPHF3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oPgotI2luY2x1ZGUgIi4uL3Rl
c3R3aW5kb3cuaCIKLSNpbmNsdWRlICIuLi91dGlsLmgiCi0KLWNsYXNzIHRzdF9RRGVza3RvcFdl
YlZpZXcgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICB0c3Rf
UURlc2t0b3BXZWJWaWV3KCk7Ci0KLXByaXZhdGUgc2xvdHM6Ci0gICAgdm9pZCBpbml0KCk7Ci0g
ICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAgICB2b2lkIG5hdmlnYXRpb25TdGF0dXNBdFN0YXJ0dXAo
KTsKLSAgICB2b2lkIHN0b3BFbmFibGVkQWZ0ZXJMb2FkU3RhcnRlZCgpOwotCi1wcml2YXRlOgot
ICAgIGlubGluZSBRRGVza3RvcFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdDsKLSAgICBRU2NvcGVk
UG9pbnRlcjxUZXN0V2luZG93PiBtX3dpbmRvdzsKLX07Ci0KLXRzdF9RRGVza3RvcFdlYlZpZXc6
OnRzdF9RRGVza3RvcFdlYlZpZXcoKQotewotICAgIGFkZFF0V2ViUHJvY2Vzc1RvUGF0aCgpOwot
fQotCi12b2lkIHRzdF9RRGVza3RvcFdlYlZpZXc6OmluaXQoKQotewotICAgIG1fd2luZG93LnJl
c2V0KG5ldyBUZXN0V2luZG93KG5ldyBRRGVza3RvcFdlYlZpZXcoKSkpOwotfQotCi12b2lkIHRz
dF9RRGVza3RvcFdlYlZpZXc6OmNsZWFudXAoKQotewotICAgIG1fd2luZG93LnJlc2V0KCk7Ci19
Ci0KLWlubGluZSBRRGVza3RvcFdlYlZpZXcqIHRzdF9RRGVza3RvcFdlYlZpZXc6OndlYlZpZXco
KSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxRRGVza3RvcFdlYlZpZXcqPihtX3dp
bmRvdy0+d2ViVmlldy5kYXRhKCkpOwotfQotCi12b2lkIHRzdF9RRGVza3RvcFdlYlZpZXc6Om5h
dmlnYXRpb25TdGF0dXNBdFN0YXJ0dXAoKQotewotICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+bmF2
aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuR29CYWNrKCksIGZhbHNlKTsKLQotICAgIFFDT01QQVJF
KHdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuR29Gb3J3YXJkKCksIGZhbHNl
KTsKLQotICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2Fu
U3RvcCgpLCBmYWxzZSk7Ci0KLSAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250
cm9sbGVyKCktPmNhblJlbG9hZCgpLCBmYWxzZSk7Ci19Ci0KLWNsYXNzIExvYWRTdGFydGVkQ2F0
Y2hlciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIExvYWRT
dGFydGVkQ2F0Y2hlcihRRGVza3RvcFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgICAgIDogbV93ZWJW
aWV3KHdlYlZpZXcpCi0gICAgewotICAgICAgICBjb25uZWN0KG1fd2ViVmlldywgU0lHTkFMKGxv
YWRTdGFydGVkKCkpLCB0aGlzLCBTTE9UKG9uTG9hZFN0YXJ0ZWQoKSkpOwotICAgIH0KLQotcHVi
bGljIHNsb3RzOgotICAgIHZvaWQgb25Mb2FkU3RhcnRlZCgpCi0gICAgewotICAgICAgICBRTWV0
YU9iamVjdDo6aW52b2tlTWV0aG9kKHRoaXMsICJmaW5pc2hlZCIsIFF0OjpRdWV1ZWRDb25uZWN0
aW9uKTsKLQotICAgICAgICBRQ09NUEFSRShtX3dlYlZpZXctPm5hdmlnYXRpb25Db250cm9sbGVy
KCktPmNhblN0b3AoKSwgdHJ1ZSk7Ci0gICAgfQotCi1zaWduYWxzOgotICAgIHZvaWQgZmluaXNo
ZWQoKTsKLQotcHJpdmF0ZToKLSAgICBRRGVza3RvcFdlYlZpZXcqIG1fd2ViVmlldzsKLX07Ci0K
LXZvaWQgdHN0X1FEZXNrdG9wV2ViVmlldzo6c3RvcEVuYWJsZWRBZnRlckxvYWRTdGFydGVkKCkK
LXsKLSAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmNhblN0
b3AoKSwgZmFsc2UpOwotCi0gICAgTG9hZFN0YXJ0ZWRDYXRjaGVyIGNhdGNoZXIod2ViVmlldygp
KTsKLSAgICB3ZWJWaWV3KCktPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3RyaW5n
KFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7Ci0gICAgd2FpdEZv
clNpZ25hbCgmY2F0Y2hlciwgU0lHTkFMKGZpbmlzaGVkKCkpKTsKLQotICAgIFFDT01QQVJFKHdl
YlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuU3RvcCgpLCB0cnVlKTsKLQotICAg
IHdhaXRGb3JTaWduYWwod2ViVmlldygpLCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSk7Ci19Ci0K
LVFUV0VCS0lUX0FQSV9URVNUX01BSU4odHN0X1FEZXNrdG9wV2ViVmlldykKLQotI2luY2x1ZGUg
InRzdF9xZGVza3RvcHdlYnZpZXcubW9jIgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9kb3dubG9h
ZC5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rl
c2t0b3BXZWJWaWV3L3RzdF9kb3dubG9hZC5xbWwKaW5kZXggZWJmNjRkMzRhYzlhNTg5Njc0YmM2
MWQ2YmFhZmMyOGY2MTVmYzBiMS4uZDQ3YWQ3MjE4Njg2YzgwZmIwYjI2NGJmNmE5MTRmMzAyZDY3
NjViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfZG93bmxvYWQucW1sCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2Rv
d25sb2FkLnFtbApAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0
VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKK2ltcG9ydCBRdFdlYktpdFRlc3QgMS4wCiAK
IERlc2t0b3BXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3Rf
bGlua0hvdmVyZWQucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbGlua0hvdmVyZWQucW1sCmluZGV4IDZiZDlhNjMw
NmYwYTlkYzczODJmOGE0ZGVhNzAxMjQzODY3N2JjMjMuLjk5NjcyYmY3OTFlMDQ2YjEyYWIxZmJj
MTYwNWRlNTc1ZGZkN2M5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xpbmtIb3ZlcmVkLnFtbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0
b3BXZWJWaWV3L3RzdF9saW5rSG92ZXJlZC5xbWwKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgUXRR
dWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCitpbXBvcnQg
UXRXZWJLaXRUZXN0IDEuMAogCiBEZXNrdG9wV2ViVmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMv
RGVza3RvcFdlYlZpZXcvdHN0X2xvYWRGYWlsLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRGYWlsLnFtbApp
bmRleCA5ODJmNTM0ODBmMWQxYThkNGVlNzU2MmRjMDlhYWIyY2IxMTk5ZDA5Li4wNTAxODY5NTA1
ZTkyNGY0ZWIyYzBhN2IwZmY4Nzc1ZDhkMDU4YmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2Fk
RmFpbC5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0
ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZEZhaWwucW1sCkBAIC0xLDYgKzEsNyBAQAogaW1w
b3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0IDMuMAor
aW1wb3J0IFF0V2ViS2l0VGVzdCAxLjAKIAogRGVza3RvcFdlYlZpZXcgewogICAgIGlkOiB3ZWJW
aWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Ft
bHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1sIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9h
ZFByb2dyZXNzLnFtbAppbmRleCBiMmIwMTgzNTcwY2JkNTU4YTA0NWJkZjVjYTJkYTg1MTliNTM4
NGRkLi5hOTg3YjVkZjYwODY3M2M3OWU0YzgwNjJhY2IyMDc1MDIyNDZmOTdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BX
ZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzcy5x
bWwKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4w
CiBpbXBvcnQgUXRXZWJLaXQgMy4wCitpbXBvcnQgUXRXZWJLaXRUZXN0IDEuMAogCiBEZXNrdG9w
V2ViVmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9n
cmVzc1NpZ25hbC5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Ft
bHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWduYWwucW1sCmluZGV4IDBk
OTQ5NmEzYjEwNWJjM2UwNGQ3Nzc3M2EwYzI5MTg1MWE5ZDU2YTEuLjU2MjIyY2I0NjU1ZjNhNWZl
NjMxY2YyNTlhYjFlZWYzY2E1ZmZlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVz
c1NpZ25hbC5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFByb2dyZXNzU2lnbmFsLnFtbApAQCAtMSw2
ICsxLDcgQEAKIGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBR
dFdlYktpdCAzLjAKK2ltcG9ydCBRdFdlYktpdFRlc3QgMS4wCiAKIERlc2t0b3BXZWJWaWV3IHsK
ICAgICBpZDogd2ViVmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFplcm9TaXplVmlldy5x
bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0
b3BXZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbAppbmRleCA3Y2UyNjJlNzM4NWJkYTdi
YjczYjRhMGQ3MDU3YmY4MWZmNjBlZDM5Li41MzY2MjdiZjI1OWI3Y2FlOTI1YzM5MGM1ZTk0MmFj
MDRjZmE5MjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BX
ZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbApAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBR
dFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKK2ltcG9y
dCBRdFdlYktpdFRlc3QgMS4wCiAKIERlc2t0b3BXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0
cy9EZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5x
bWwKaW5kZXggZGViMWM1MGRkOTNiMzE4MjIyZjgyODg5MGU3NWRmZDQ4MDg3NGQ5YS4uNGNmMWMz
MDgxODgyYzFhNWUyMzZmZDM1ZDhhNDcyOGFmN2M5OWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3Rf
bWVzc2FnaW5nLnFtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3Rz
L3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9tZXNzYWdpbmcucW1sCkBAIC0xLDYgKzEsNyBA
QAogaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0
IDMuMAoraW1wb3J0IFF0V2ViS2l0VGVzdCAxLjAKIAogSXRlbSB7CiAgICAgRGVza3RvcFdlYlZp
ZXcgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbmF2aWdhdGlvblBvbGljeUZvclVybC5xbWwgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJW
aWV3L3RzdF9uYXZpZ2F0aW9uUG9saWN5Rm9yVXJsLnFtbAppbmRleCAwNGUxZDdhZDlmNmQyODBl
OTA0YWNjYjk2ODFkOGM4YTAyYjZmYzkxLi4zYzBkMDg2MjY0NDk4ZWI0OWJhYjE4ZGNlMmI4MDdk
OWM1ZmM5NzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9uYXZpZ2F0aW9uUG9saWN5Rm9yVXJsLnFt
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rl
c2t0b3BXZWJWaWV3L3RzdF9uYXZpZ2F0aW9uUG9saWN5Rm9yVXJsLnFtbApAQCAtMSw2ICsxLDcg
QEAKIGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktp
dCAzLjAKK2ltcG9ydCBRdFdlYktpdFRlc3QgMS4wCiAKIEl0ZW0gewogICAgIERlc2t0b3BXZWJW
aWV3IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X3ByZWZlcmVuY2VzLnFtbCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X3By
ZWZlcmVuY2VzLnFtbAppbmRleCAzMWVlNGNkZDNkNTRjZDdkOTdlZTM2ZDIxZjEyZDkzMWQ0ZmEy
YTI5Li44ODM1NjNkMmI3ZTkyZjc4NjkyM2JjZTZmYzEzNmQyYWVkOTFjNDM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BX
ZWJWaWV3L3RzdF9wcmVmZXJlbmNlcy5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfcHJlZmVyZW5jZXMucW1s
CkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAog
aW1wb3J0IFF0V2ViS2l0IDMuMAoraW1wb3J0IFF0V2ViS2l0VGVzdCAxLjAKIAogRGVza3RvcFdl
YlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9wcm9wZXJ0aWVz
LnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVz
a3RvcFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMucW1sCmluZGV4IGNiZDRjM2E4MzA1Mzg2MmRmYjUw
Y2E1MzlkMmY2M2M0MjMzMGJjNWIuLjVkYTgyNDE1MGE3MTM3YzJhMTE1ZmQyMDQ3MmM5OWFkZDY5
YmQzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMucW1sCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0
X3Byb3BlcnRpZXMucW1sCkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBv
cnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0IDMuMAoraW1wb3J0IFF0V2ViS2l0VGVzdCAx
LjAKIAogRGVza3RvcFdlYlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90
c3RfbG9hZC5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZC5xbWwKaW5kZXggMDRmZjM0NDRmMzJmM2IyNzg0MzMw
N2JkNWJjNjQzNDhjMzdjNTBhNi4uMTIzZjQzNTY4NjNhN2IxMjBkNzFkNjI4NzhkZTU3OGNiMWIz
ZmUyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWQucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkLnFtbApA
QCAtMiw3ICsyLDcgQEAgaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1w
b3J0IFF0V2ViS2l0IDMuMAogCi1Ub3VjaFdlYlZpZXcgeworV2ViVmlldyB7CiAgICAgaWQ6IHdl
YlZpZXcKICAgICBoZWlnaHQ6IDYwMAogICAgIHdpZHRoOiA0MDAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3Rz
dF9sb2FkRmFpbC5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Ft
bHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZEZhaWwucW1sCmluZGV4IGQwYzI5NjcyMDU0MjZj
N2NmZDQ0OGI4Njc5MWY3NGU1YmI5NTdlMGYuLjc1MzllYmY2ZjgxYmNiM2JmOWRjMWE5MzkxNjU2
N2M5MjA3ZTNkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkRmFpbC5xbWwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0
X2xvYWRGYWlsLnFtbApAQCAtMiw3ICsyLDcgQEAgaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQg
UXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0IDMuMAogCi1Ub3VjaFdlYlZpZXcgeworV2ViVmll
dyB7CiAgICAgaWQ6IHdlYlZpZXcKIAogICAgIHByb3BlcnR5IHZhcmlhbnQgdGVzdFVybApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9U
b3VjaFdlYlZpZXcvdHN0X2xvYWROZWdhdGl2ZVNpemVWaWV3LnFtbCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkTmVn
YXRpdmVTaXplVmlldy5xbWwKaW5kZXggNmM0YWNjNjJlOTMyYWViOGU2YmVlMDY2OWE3YzQzMWQ1
NmU3N2Q4NS4uMDk1OTAxMmIxODgzMDc0ZWMzZjNiMjI2MWRmYTE2MjU3OTk0ZWViMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3Vj
aFdlYlZpZXcvdHN0X2xvYWROZWdhdGl2ZVNpemVWaWV3LnFtbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZE5l
Z2F0aXZlU2l6ZVZpZXcucW1sCkBAIC0yLDcgKzIsNyBAQCBpbXBvcnQgUXRRdWljayAyLjAKIGlt
cG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCiAKLVRvdWNoV2ViVmlldyB7CitX
ZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwogICAgIGhlaWdodDogLTYwMAogICAgIHdpZHRoOiAt
NDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Ft
bHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZFByb2dyZXNzLnFtbCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJv
Z3Jlc3MucW1sCmluZGV4IDdkM2M2ZDE5MWI2ZjNlMDUyNmVmMWYzNTI0NTc2ZTU0ZGYwZDNjYjcu
LmQ3OTAxZGY4MjIwNGJhNWYwZTEzNDdhNTZhNzAwYmE2YzA2ZTQ3NmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3
L3RzdF9sb2FkUHJvZ3Jlc3MucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1sCkBAIC0y
LDcgKzIsNyBAQCBpbXBvcnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQg
UXRXZWJLaXQgMy4wCiAKLVRvdWNoV2ViVmlldyB7CitXZWJWaWV3IHsKICAgICBpZDogd2ViVmll
dwogCiAgICAgU2lnbmFsU3B5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWdu
YWwucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9U
b3VjaFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwKaW5kZXggMGYyZDliYjg2OTcy
YjkzZTAxMGM3M2ZkMDFlZTkyNTM5ZDBkNWNkNC4uYzc3NDg0OGQ3ZmFkNDZjMjQ3ZGMwMmZhMWI2
MDFjOTQyZmY0YmZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3Vj
aFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwKQEAgLTIsNyArMiw3IEBAIGltcG9y
dCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKIAot
VG91Y2hXZWJWaWV3IHsKK1dlYlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CiAKICAgICBTaWduYWxT
cHkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRaZXJvU2l6ZVZpZXcucW1sIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xv
YWRaZXJvU2l6ZVZpZXcucW1sCmluZGV4IDc5MmVjZjYxN2YwMzQzZDEwM2MwY2U1YjBiMzQ1Mjg2
Zjk0ZjFmMDcuLjA4ZjdiNWFmNmFjNmUyMDI1MDdkODhiMTkyZGRlYzBiNDJmZGE3ZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91
Y2hXZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZFplcm9T
aXplVmlldy5xbWwKQEAgLTIsNyArMiw3IEBAIGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0
VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKIAotVG91Y2hXZWJWaWV3IHsKK1dlYlZpZXcg
ewogICAgIGlkOiB3ZWJWaWV3CiAgICAgaGVpZ2h0OiAwCiAgICAgd2lkdGg6IDAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hX
ZWJWaWV3L3RzdF9wcm9wZXJ0aWVzLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9wcm9wZXJ0aWVzLnFtbAppbmRleCAw
ODRjYWVmZGIzNjMwYjE3NGZhNzc5MzY3ZThlNGE4MDE3ZGM2ZGIyLi4xNzVhYjU3NTgzMDljNDgz
Nzk2ZTFlMGM1MTEzYmE2ZDU2ZThhMTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfcHJvcGVydGllcy5x
bWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9U
b3VjaFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMucW1sCkBAIC0yLDcgKzIsNyBAQCBpbXBvcnQgUXRR
dWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCiAKLVRvdWNo
V2ViVmlldyB7CitXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwogCiAgICAgU2lnbmFsU3B5IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvcW1sdGVzdHMucHJvIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9xbWx0ZXN0cy5wcm8KaW5kZXggMzZlMGM1MGNhZDk4Y2NlYTc1NGE2YTFkMjdkMjUz
MWQxY2RhMmIzNS4uYjY2NDdiMDdkMWNiMjNiOTA3OWRmNmNhMTMyYTFmYWMyNjJlNTZkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9x
bWx0ZXN0cy5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9xbWx0ZXN0cy5wcm8KQEAgLTUsNiArNSwxMSBAQCBDT05GSUcgKz0gd2Fybl9vbiB0
ZXN0Y2FzZQogUVQgLT0gdGVzdGxpYgogUVQgKz0gcW1sdGVzdAogCisjIEZJWE1FOiBXaGVuIHdl
YmtpdC1wcml2YXRlIHdvcmtzIGxldCdzIHVzZSBpdC4KK2xvYWQoamF2YXNjcmlwdGNvcmUpCits
b2FkKHdlYmNvcmUpCitsb2FkKHdlYmtpdDIpCisKICMgUU1MIGZpbGVzIHRlc3RlZCBhcmUgdGhl
IG9uZXMgaW4gV2ViS2l0IHNvdXJjZSByZXBvc2l0b3J5LgogREVGSU5FUyArPSBRVUlDS19URVNU
X1NPVVJDRV9ESVI9XCJcXFwiJCRQV0RcXFwiXCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMu
Y3BwCmluZGV4IDRiYTNlODBmYTJhZWI4MzlhOTZmZmVkNjRkYWQzM2M1NDhmOTJlZWUuLmYzZGI0
ZDJhYTcwZDQyMDFhYmZhZDJiNTU4YWE3NTMyMDFkNjQyYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvdHN0X3FtbHRlc3RzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3RzdF9x
bWx0ZXN0cy5jcHAKQEAgLTE3LDE1ICsxNywzMSBAQAogICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogKi8KIAorI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIi4uL3V0aWwuaCIK
KworI2luY2x1ZGUgInFxdWlja3dlYnBhZ2UuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3Lmgi
CisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisKICNpbmNsdWRlIDxRdFF1aWNrVGVzdC9x
dWlja3Rlc3QuaD4KICNpbmNsdWRlIDxRdFdpZGdldHMvUUFwcGxpY2F0aW9uPgogCitjbGFzcyBE
ZXNrdG9wV2ViVmlldyA6IHB1YmxpYyBRUXVpY2tXZWJWaWV3IHsKK3B1YmxpYzoKKyAgICBEZXNr
dG9wV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKQorICAgICAgICA6IFFRdWlja1dlYlZp
ZXcocGFyZW50KQorICAgIHsKKyAgICAgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldCh0aGlz
KS0+c2V0VXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKHRydWUpOworICAgIH0KK307CisK
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICBzdXBwcmVzc0RlYnVnT3V0
cHV0KCk7CiAgICAgLy8gSW5zdGFudGlhdGUgUUFwcGxpY2F0aW9uIHRvIHByZXZlbnQgcXVpY2tf
dGVzdF9tYWluIHRvIGluc3RhbnRpYXRlIGEgUUd1aUFwcGxpY2F0aW9uLgogICAgIC8vIFRoaXMg
Y2FuIGJlIHJlbW92ZWQgYXMgc29vbiBhcyB3ZSBkbyBub3QgdXNlIFF0V2lkZ2V0cyBhbnkgbW9y
ZS4KICAgICBRQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOworICAgIHFtbFJlZ2lzdGVyVHlw
ZTxEZXNrdG9wV2ViVmlldz4oIlF0V2ViS2l0VGVzdCIsIDEsIDAsICJEZXNrdG9wV2ViVmlldyIp
OwogICAgIHJldHVybiBxdWlja190ZXN0X21haW4oYXJnYywgYXJndiwgInFtbHRlc3RzIiwgMCwg
UVVJQ0tfVEVTVF9TT1VSQ0VfRElSKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXRvdWNod2Vidmlldy9xdG91Y2h3ZWJ2aWV3LnBybyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXRvdWNod2Vidmlldy9xdG91Y2h3
ZWJ2aWV3LnBybwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5YzdmNDkzOGNiMTUx
MGVlZmVmYWVmY2UzMTY2M2MwOTdmMDU0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0
b3VjaHdlYnZpZXcvcXRvdWNod2Vidmlldy5wcm8KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBA
Ci1pbmNsdWRlKC4uL3Rlc3RzLnByaSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcXRvdWNod2Vidmlldy90c3RfcXRvdWNod2Vidmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0b3VjaHdlYnZpZXcvdHN0X3F0
b3VjaHdlYnZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGYyODc1ZmMw
OThiZjdkNzFlZTJmYWNhZmMzYjU5ZDQ1YzY5NGMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvcXRvdWNod2Vidmlldy90c3RfcXRvdWNod2Vidmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5MCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSA8UXRUZXN0L1F0VGVz
dD4KLSNpbmNsdWRlIDxxdG91Y2h3ZWJwYWdlLmg+Ci0jaW5jbHVkZSA8cXRvdWNod2Vidmlldy5o
PgotI2luY2x1ZGUgPHF3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oPgotI2luY2x1ZGUgIi4uL3Rl
c3R3aW5kb3cuaCIKLSNpbmNsdWRlICIuLi91dGlsLmgiCi0KLVFfREVDTEFSRV9NRVRBVFlQRShR
VG91Y2hXZWJQYWdlKik7Ci0KLWNsYXNzIHRzdF9RVG91Y2hXZWJWaWV3IDogcHVibGljIFFPYmpl
Y3QgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgdHN0X1FUb3VjaFdlYlZpZXcoKTsKLXBy
aXZhdGUgc2xvdHM6Ci0gICAgdm9pZCBpbml0KCk7Ci0gICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAg
ICB2b2lkIGFjY2Vzc1BhZ2UoKTsKLSAgICB2b2lkIG5hdmlnYXRpb25TdGF0dXNBdFN0YXJ0dXAo
KTsKLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgUVRvdWNoV2ViVmlldyogd2ViVmlldygpIGNvbnN0
OwotICAgIFFTY29wZWRQb2ludGVyPFRlc3RXaW5kb3c+IG1fd2luZG93OwotfTsKLQotdHN0X1FU
b3VjaFdlYlZpZXc6OnRzdF9RVG91Y2hXZWJWaWV3KCkKLXsKLSAgICBhZGRRdFdlYlByb2Nlc3NU
b1BhdGgoKTsKLSAgICBxUmVnaXN0ZXJNZXRhVHlwZTxRVG91Y2hXZWJQYWdlKj4oIlFUb3VjaFdl
YlBhZ2UqIik7Ci19Ci0KLXZvaWQgdHN0X1FUb3VjaFdlYlZpZXc6OmluaXQoKQotewotICAgIG1f
d2luZG93LnJlc2V0KG5ldyBUZXN0V2luZG93KG5ldyBRVG91Y2hXZWJWaWV3KSk7Ci19Ci0KLXZv
aWQgdHN0X1FUb3VjaFdlYlZpZXc6OmNsZWFudXAoKQotewotICAgIG1fd2luZG93LnJlc2V0KCk7
Ci19Ci0KLWlubGluZSBRVG91Y2hXZWJWaWV3KiB0c3RfUVRvdWNoV2ViVmlldzo6d2ViVmlldygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFFUb3VjaFdlYlZpZXcqPihtX3dpbmRv
dy0+d2ViVmlldy5kYXRhKCkpOwotfQotCi12b2lkIHRzdF9RVG91Y2hXZWJWaWV3OjphY2Nlc3NQ
YWdlKCkKLXsKLSAgICBRVG91Y2hXZWJQYWdlKiBjb25zdCBwYWdlRGlyZWN0QWNjZXNzID0gd2Vi
VmlldygpLT5wYWdlKCk7Ci0KLSAgICBRVmFyaWFudCBwYWdlUHJvcGVydHlWYWx1ZSA9IHdlYlZp
ZXcoKS0+cHJvcGVydHkoInBhZ2UiKTsKLSAgICBRVG91Y2hXZWJQYWdlKiBjb25zdCBwYWdlUHJv
cGVydHlBY2Nlc3MgPSBwYWdlUHJvcGVydHlWYWx1ZS52YWx1ZTxRVG91Y2hXZWJQYWdlKj4oKTsK
LSAgICBRQ09NUEFSRShwYWdlUHJvcGVydHlBY2Nlc3MsIHBhZ2VEaXJlY3RBY2Nlc3MpOwotfQot
Ci12b2lkIHRzdF9RVG91Y2hXZWJWaWV3OjpuYXZpZ2F0aW9uU3RhdHVzQXRTdGFydHVwKCkKLXsK
LSAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmNhbkdvQmFj
aygpLCBmYWxzZSk7Ci0KLSAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9s
bGVyKCktPmNhbkdvRm9yd2FyZCgpLCBmYWxzZSk7Ci0KLSAgICBRQ09NUEFSRSh3ZWJWaWV3KCkt
Pm5hdmlnYXRpb25Db250cm9sbGVyKCktPmNhblN0b3AoKSwgZmFsc2UpOwotCi0gICAgUUNPTVBB
UkUod2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5SZWxvYWQoKSwgZmFsc2Up
OwotfQotCi0KLVFUV0VCS0lUX0FQSV9URVNUX01BSU4odHN0X1FUb3VjaFdlYlZpZXcpCi0KLSNp
bmNsdWRlICJ0c3RfcXRvdWNod2Vidmlldy5tb2MiCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHdpbmRvdy5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy90ZXN0d2luZG93LmgKaW5kZXggODc4MDljMzM0OGZjYzdk
OGU5NGE2NDYyZmY4NzRhY2VhYmQwNzZkOC4uN2I1OWFmOWNhYjZkZWU5N2RjNDQ4MmE5MjMxZjk1
OGEzODdmODZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy90ZXN0d2luZG93LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy90ZXN0d2luZG93LmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxRdERlY2xhcmF0
aXZlL3FxdWlja2l0ZW0uaD4KICNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FxdWlja3ZpZXcuaD4K
IAotLy8gVGVzdFdpbmRvdzogVXRpbGl0eSBjbGFzcyB0byBpZ25vcmUgUUdyYXBoaWNzVmlldyBk
ZXRhaWxzLgorLy8gVGVzdFdpbmRvdzogVXRpbGl0eSBjbGFzcyB0byBpZ25vcmUgUVF1aWNrVmll
dyBkZXRhaWxzLgogY2xhc3MgVGVzdFdpbmRvdyA6IHB1YmxpYyBRUXVpY2tWaWV3IHsKIHB1Ymxp
YzoKICAgICBpbmxpbmUgVGVzdFdpbmRvdyhRUXVpY2tJdGVtKiB3ZWJWaWV3KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRl
eCBiZjMwYjFlYWU1ZDQ3N2NiNDk2Njk0YTRhYWQ5OGEyYjk3ZDEyNmI5Li5lZjFkODcyZjY5MjJl
NDFmZTQzNzY2NzczNjJlYjcyZWJhODQzODc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBAIFF0
R2VzdHVyZVJlY29nbml6ZXI6OlF0R2VzdHVyZVJlY29nbml6ZXIoUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKiB2aWV3cG9ydEluCiAgICAgOiBtX3ZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUo
dmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSkKICAgICAsIG1fc3RhdGUoTm9HZXN0dXJlKQogewot
ICAgIEFTU0VSVCh2aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKTsKIH0KIAogdm9pZCBRdEdlc3R1
cmVSZWNvZ25pemVyOjpyZXNldCgpCkBAIC00MCw0ICszOSw5IEBAIHZvaWQgUXRHZXN0dXJlUmVj
b2duaXplcjo6cmVzZXQoKQogICAgIG1fc3RhdGUgPSBOb0dlc3R1cmU7CiB9CiAKK3ZvaWQgUXRH
ZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUqIGVuZ2luZSkKK3sKKyAgICBtX3ZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUgPSBlbmdpbmU7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRHZXN0dXJlUmVjb2duaXplci5oCmluZGV4IGY1MjIyYzdmMzNiNDI2M2I1ZjVmY2NlZTVm
NDg1ODJiYTY0ZjdlNjEuLjRjY2E2YmM3MjVkYzg0ZTgyYmU4YTQ1YjBjNDU0NmE2NGRiZTgzMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25p
emVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6
ZXIuaApAQCAtMzYsOSArMzYsMTAgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgUXRHZXN0
dXJlUmVjb2duaXplcihRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqKTsKKyAgICB2b2lkIHNl
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKik7
CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBj
b25zdCBtX3ZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU7CisgICAgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKiBtX3ZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU7CiAgICAgZW51bSBTdGF0ZSB7
CiAgICAgICAgIE5vR2VzdHVyZSwKICAgICAgICAgR2VzdHVyZVJlY29nbml0aW9uU3RhcnRlZCwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNv
Z25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNv
Z25pemVyLmNwcAppbmRleCA0MGM5NzlhNjFmMThmYjY2ZDViYmMyYTYzYzYyNGRkZTI1MzFjN2Ri
Li5hYmUyNjkyZTVhODkyZGRmNTRjN2FiNTIwODRjMWVmMjQ4MDNiNjdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3Bw
CkBAIC0zNyw4ICszNywxNyBAQCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpRdFBhbkdlc3R1cmVS
ZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogaW50ZQogICAgIHJlc2V0KCk7
CiB9CiAKK3ZvaWQgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIGVuZ2luZSkKK3sKKyAgICBRdEdl
c3R1cmVSZWNvZ25pemVyOjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGVuZ2luZSk7Cisg
ICAgcmVzZXQoKTsKK30KKwogYm9vbCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25pemUo
Y29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7
CisgICAgaWYgKCFtX3ZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIC8vIFBhbiBnZXN0dXJlIGFsd2F5cyBzdGFydHMgb24gVG91Y2hCZWdpbiB1
bmxlc3MgdGhlIGVuZ2luZSBpcyBzdXNwZW5kZWQsIG9yCiAgICAgLy8gd2UgaWdub3JlZCB0aGUg
ZXZlbnQuCiAgICAgaWYgKG1fc3RhdGUgPT0gTm9HZXN0dXJlICYmIGV2ZW50LT50eXBlKCkgIT0g
UUV2ZW50OjpUb3VjaEJlZ2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggMjljYWYwNmZkNjJhYzZjZjBkMWRmNGM1
MmI0YWM2YTcxZjhkNzk3OC4uNTE0ZmVhODM0MjUwNzM4ZmIyYjExMjliMjA4YTg3NTNlYTkyNWNl
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJl
UmVjb2duaXplci5oCkBAIC00Miw2ICs0Miw3IEBAIGNvbnN0IHFyZWFsIHBhbm5pbmdJbml0aWFs
VHJpZ2dlckRpc3RhbmNlVGhyZXNob2xkID0gNS47CiBjbGFzcyBRdFBhbkdlc3R1cmVSZWNvZ25p
emVyIDogcHVibGljIFF0R2VzdHVyZVJlY29nbml6ZXIgewogcHVibGljOgogICAgIFF0UGFuR2Vz
dHVyZVJlY29nbml6ZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKik7CisgICAgdm9pZCBz
ZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSop
OwogICAgIGJvb2wgcmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiwgcWludDY0IGV2ZW50VGlt
ZXN0YW1wTWlsbGlzKTsKICAgICB2b2lkIHJlc2V0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAKaW5kZXgg
MTZkYjVkZDBhMjI1MDFkYzNiZGI1MTE1ODI3N2U5MTA4MDM0NmRhMS4uNzI0NjdiNGRmZGNjYmUy
MzVlNmE1MzljMTMwOTIwNjhkNDM3ODYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTU3LDYgKzU3
LDkgQEAgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIo
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKgogCiBib29sIFF0UGluY2hHZXN0dXJlUmVjb2du
aXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKIHsKKyAgICBpZiAoIW1f
dmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
Y29uc3QgUUxpc3Q8UVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQ+JiB0b3VjaFBvaW50cyA9IGV2ZW50
LT50b3VjaFBvaW50cygpOwogICAgIGlmICh0b3VjaFBvaW50cy5zaXplKCkgPCAyKSB7CiAgICAg
ICAgIGlmIChtX3N0YXRlID09IEdlc3R1cmVSZWNvZ25pemVkKQpAQCAtMTMwLDYgKzEzMywxMiBA
QCBib29sIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2
ZW50KiBldmVudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUXRQaW5jaEdlc3R1cmVS
ZWNvZ25pemVyOjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZSogZW5naW5lKQoreworICAgIFF0R2VzdHVyZVJlY29nbml6ZXI6OnNldFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUoZW5naW5lKTsKKyAgICByZXNldCgpOworfQorCiB2b2lkIFF0
UGluY2hHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQogewogICAgIFF0R2VzdHVyZVJlY29nbml6
ZXI6OnJlc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQ
aW5jaEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQ
aW5jaEdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggMzBkMTVmYzdiMDc1Mjk4YTQ0MGQ2OWU2NGZj
NzUzYjdiZGJlNGQ0ZS4uMjA4YzA1YWJkYzA5MzFiZWRlMzg4NTljZWNmNjBhOTU0ZjUwYWNmMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVj
b2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVy
ZVJlY29nbml6ZXIuaApAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFF0
UGluY2hHZXN0dXJlUmVjb2duaXplcihRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqKTsKKyAg
ICB2b2lkIHNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lKik7CiAgICAgYm9vbCByZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqKTsKICAgICB2
b2lkIHJlc2V0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFRvdWNoVmlld0ludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRU
b3VjaFZpZXdJbnRlcmZhY2UuY3BwCmluZGV4IDQ0ODY4ODA5OTA5ZDc1NTlkODdlYjZiNmE2MDAy
NDZhYTk0ZDBmMzAuLmEyZGQxMTE5OTRhYjYwMDVmOTRlZTE0ZTUwM2RjMDFjMjI2OGFkZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoVmlld0ludGVyZmFj
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJm
YWNlLmNwcApAQCAtMjIsMTcgKzIyLDE3IEBACiAjaW5jbHVkZSAiUXRUb3VjaFZpZXdJbnRlcmZh
Y2UuaCIKIAogI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdl
LmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXRvdWNod2Vidmll
dy5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnZpZXdfcC5oIgorI2luY2x1ZGUgInFxdWlja3dlYnBh
Z2UuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2
aWV3LmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAKICNpbmNsdWRlIDxRRGVjbGFy
YXRpdmVFbmdpbmU+CiAjaW5jbHVkZSA8UVF1aWNrVmlldz4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLVF0VG91Y2hWaWV3SW50ZXJmYWNlOjpRdFRvdWNoVmlld0ludGVyZmFjZShRVG91Y2hXZWJW
aWV3KiB2aWV3cG9ydFZpZXcsIFFUb3VjaFdlYlBhZ2UqIHBhZ2VWaWV3KQorUXRUb3VjaFZpZXdJ
bnRlcmZhY2U6OlF0VG91Y2hWaWV3SW50ZXJmYWNlKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0Vmll
dywgUVF1aWNrV2ViUGFnZSogcGFnZVZpZXcpCiAgICAgOiBtX3ZpZXdwb3J0Vmlldyh2aWV3cG9y
dFZpZXcpCiAgICAgLCBtX3BhZ2VWaWV3KHBhZ2VWaWV3KQogewpAQCAtMTM5LDcgKzEzOSw3IEBA
IHZvaWQgUXRUb3VjaFZpZXdJbnRlcmZhY2U6OmxvYWREaWRTdWNjZWVkKCkKIAogdm9pZCBRdFRv
dWNoVmlld0ludGVyZmFjZTo6bG9hZERpZEZhaWwoY29uc3QgUXRXZWJFcnJvciYgZXJyb3IpCiB7
Ci0gICAgZW1pdCBtX3ZpZXdwb3J0Vmlldy0+bG9hZEZhaWxlZChzdGF0aWNfY2FzdDxRQmFzZVdl
YlZpZXc6OkVycm9yVHlwZT4oZXJyb3IudHlwZSgpKSwgZXJyb3IuZXJyb3JDb2RlKCksIGVycm9y
LnVybCgpKTsKKyAgICBlbWl0IG1fdmlld3BvcnRWaWV3LT5sb2FkRmFpbGVkKHN0YXRpY19jYXN0
PFFRdWlja1dlYlZpZXc6OkVycm9yVHlwZT4oZXJyb3IudHlwZSgpKSwgZXJyb3IuZXJyb3JDb2Rl
KCksIGVycm9yLnVybCgpKTsKIH0KIAogdm9pZCBRdFRvdWNoVmlld0ludGVyZmFjZTo6ZGlkQ2hh
bmdlTG9hZFByb2dyZXNzKGludCBwZXJjZW50YWdlTG9hZGVkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuaAppbmRleCBiMGQ3ZWMxNDM4
N2RhZWM2YmQzZjFlZmIwNzk1MjVlYzA0YmM2MzI4Li5mZGM2NTQ2Y2U3MmRkNTBiNGUxZjA5NDFk
YWFiNjFjNjAzNmNmZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRUb3VjaFZpZXdJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRUb3VjaFZpZXdJbnRlcmZhY2UuaApAQCAtMjQsOCArMjQsOCBAQAogI2luY2x1ZGUgIlF0Vmll
d0ludGVyZmFjZS5oIgogCiBjbGFzcyBRUG9pbnRGOwotY2xhc3MgUVRvdWNoV2ViUGFnZTsKLWNs
YXNzIFFUb3VjaFdlYlZpZXc7CitjbGFzcyBRUXVpY2tXZWJQYWdlOworY2xhc3MgUVF1aWNrV2Vi
VmlldzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVmlld3BvcnRBcmd1bWVudHM7CkBA
IC0zNyw3ICszNyw3IEBAIGNsYXNzIFF0U0dVcGRhdGVRdWV1ZTsKIAogY2xhc3MgUXRUb3VjaFZp
ZXdJbnRlcmZhY2UgOiBwdWJsaWMgUXRWaWV3SW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBRdFRv
dWNoVmlld0ludGVyZmFjZShRVG91Y2hXZWJWaWV3KiB2aWV3cG9ydFZpZXcsIFFUb3VjaFdlYlBh
Z2UqIHBhZ2VWaWV3KTsKKyAgICBRdFRvdWNoVmlld0ludGVyZmFjZShRUXVpY2tXZWJWaWV3KiB2
aWV3cG9ydFZpZXcsIFFRdWlja1dlYlBhZ2UqIHBhZ2VWaWV3KTsKIAogICAgIFF0U0dVcGRhdGVR
dWV1ZSogc2NlbmVHcmFwaFVwZGF0ZVF1ZXVlKCkgY29uc3Q7CiAKQEAgLTg3LDggKzg3LDggQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkTW91c2VNb3ZlT3ZlckVsZW1lbnQoY29uc3Qg
UVVybCYsIGNvbnN0IFFTdHJpbmcmKSB7IH0KIAogcHJpdmF0ZToKLSAgICBRVG91Y2hXZWJWaWV3
KiBjb25zdCBtX3ZpZXdwb3J0VmlldzsKLSAgICBRVG91Y2hXZWJQYWdlKiBjb25zdCBtX3BhZ2VW
aWV3OworICAgIFFRdWlja1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnRWaWV3OworICAgIFFRdWlj
a1dlYlBhZ2UqIGNvbnN0IG1fcGFnZVZpZXc7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmgKaW5kZXggYjVmNWM0YjMwY2IyODgxNTU5NTll
NTUxM2MxN2E2MTljNDg4MTgwMS4uYjA3ODk5MDJiMGQ1YTc4OTZkNDUzOTViYjQyMDc4M2FmOTJi
MDM5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld0ludGVy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2Uu
aApAQCAtMjQsOCArMjQsMTEgQEAKICNpbmNsdWRlIDxRTWVudT4KICNpbmNsdWRlIDxRdENvcmUv
UVNoYXJlZFBvaW50ZXI+CiAjaW5jbHVkZSA8UXRDb3JlL1FTaXplPgorI2luY2x1ZGUgPFF0Q29y
ZS9RVXJsPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAKK2NsYXNzIFFRdWlja1dlYlBh
Z2U7CitjbGFzcyBRUXVpY2tXZWJWaWV3OwogY2xhc3MgUXRXZWJFcnJvcjsKIGNsYXNzIFFXZWJE
b3dubG9hZEl0ZW07CiAKQEAgLTM3LDcgKzQwLDYgQEAgY2xhc3MgUUpTRW5naW5lOwogY2xhc3Mg
UU1pbWVEYXRhOwogY2xhc3MgUVBvaW50OwogY2xhc3MgUVJlY3Q7Ci1jbGFzcyBRVXJsOwogY2xh
c3MgUVdpZGdldDsKIFFUX0VORF9OQU1FU1BBQ0UKIApAQCAtNDcsNiArNDksOCBAQCBjbGFzcyBW
aWV3cG9ydEFyZ3VtZW50czsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFF0U0dVcGRh
dGVRdWV1ZTsKKwogY2xhc3MgUXRWaWV3SW50ZXJmYWNlIHsKIHB1YmxpYzoKICAgICBlbnVtIEZp
bGVDaG9vc2VyVHlwZSB7CkBAIC01NCw0OSArNTgsNjEgQEAgcHVibGljOgogICAgICAgICBNdWx0
aXBsZUZpbGVzU2VsZWN0aW9uCiAgICAgfTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVl
ZHNEaXNwbGF5KGNvbnN0IFFSZWN0JikgPSAwOworICAgIFF0Vmlld0ludGVyZmFjZShRUXVpY2tX
ZWJWaWV3KiB2aWV3cG9ydFZpZXcsIFFRdWlja1dlYlBhZ2UqIHBhZ2VWaWV3KTsKKworICAgIFF0
U0dVcGRhdGVRdWV1ZSogc2NlbmVHcmFwaFVwZGF0ZVF1ZXVlKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpOworCisgICAgdmlydHVh
bCBRU2l6ZSBkcmF3aW5nQXJlYVNpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudFNpemVD
aGFuZ2VkKGNvbnN0IFFTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFBvc2l0aW9uUmVx
dWVzdGVkKGNvbnN0IFFQb2ludCYgcG9zKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgp
OworICAgIHZpcnR1YWwgYm9vbCBoYXNGb2N1cygpOworICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2li
bGUoKTsKIAotICAgIHZpcnR1YWwgUVNpemUgZHJhd2luZ0FyZWFTaXplKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNjcm9sbFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2ludCYgcG9zKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhRdDo6RHJvcEFjdGlvbnMgc3VwcG9ydGVkRHJv
cEFjdGlvbnMsIGNvbnN0IFFJbWFnZSYgZHJhZ0ltYWdlLCBRTWltZURhdGEqLCBRUG9pbnQqIGNs
aWVudFBvc2l0aW9uLCBRUG9pbnQqIGdsb2JhbFBvc2l0aW9uLCBRdDo6RHJvcEFjdGlvbiopOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzRm9jdXMoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlz
VmlzaWJsZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25z
dCBRUG9pbnQmLCBjb25zdCBRUmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhR
dDo6RHJvcEFjdGlvbnMgc3VwcG9ydGVkRHJvcEFjdGlvbnMsIGNvbnN0IFFJbWFnZSYgZHJhZ0lt
YWdlLCBRTWltZURhdGEqLCBRUG9pbnQqIGNsaWVudFBvc2l0aW9uLCBRUG9pbnQqIGdsb2JhbFBv
c2l0aW9uLCBRdDo6RHJvcEFjdGlvbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
Vmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VVcmwoY29uc3QgUVVybCYpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZShjb25zdCBRU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZVRvb2xUaXAoY29uc3QgUVN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRD
aGFuZ2VTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlQ3Vyc29yKGNvbnN0IFFDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZEJlZ2lu
KCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWREaWRDb21taXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZERpZFN1Y2NlZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZEZhaWwoY29uc3QgUXRX
ZWJFcnJvciYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VMb2FkUHJvZ3Jlc3MoaW50KTsK
IAotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFFQb2ludCYsIGNv
bnN0IFFSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJl
ZFBvaW50ZXI8UU1lbnU+KTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVXJsKGNvbnN0IFFVcmwmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFFTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZVRvb2xUaXAoY29uc3QgUVN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2hhbmdlU3RhdHVzVGV4dChjb25zdCBRU3RyaW5nJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VDdXJzb3IoY29uc3QgUUN1cnNvciYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZERpZEJlZ2luKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkQ29tbWl0
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkU3VjY2VlZCgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZERpZEZhaWwoY29uc3QgUXRXZWJFcnJvciYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2hhbmdlTG9hZFByb2dyZXNzKGludCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
dW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgUVN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBydW5K
YXZhU2NyaXB0Q29uZmlybShjb25zdCBRU3RyaW5nJik7CisgICAgdmlydHVhbCBRU3RyaW5nIHJ1
bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmIGRlZmF1bHRW
YWx1ZSwgYm9vbCYgb2spOwogCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShRU2hh
cmVkUG9pbnRlcjxRTWVudT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRleHRNZW51
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNj
cmlwdEFsZXJ0KGNvbnN0IFFTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJ1bkphdmFT
Y3JpcHRDb25maXJtKGNvbnN0IFFTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCBRU3RyaW5nIHJ1
bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmIGRlZmF1bHRW
YWx1ZSwgYm9vbCYgb2spID0gMDsKKyAgICB2aXJ0dWFsIFFKU0VuZ2luZSogZW5naW5lKCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWxhdW5jaFByb2Nlc3MoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNob29zZUZpbGVz
KFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYsIGNvbnN0IFFTdHJpbmdMaXN0JiBzZWxlY3Rl
ZEZpbGVOYW1lcywgRmlsZUNob29zZXJUeXBlKTsKIAotICAgIHZpcnR1YWwgUUpTRW5naW5lKiBl
bmdpbmUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdXNlTW92ZU92ZXJFbGVtZW50KGNv
bnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlRmls
ZXMoV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3QgUVN0cmluZ0xpc3QmIHNlbGVj
dGVkRmlsZU5hbWVzLCBGaWxlQ2hvb3NlclR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG93
bmxvYWRSZXF1ZXN0ZWQoUVdlYkRvd25sb2FkSXRlbSopOwogCi0gICAgdmlydHVhbCB2b2lkIGRp
ZE1vdXNlTW92ZU92ZXJFbGVtZW50KGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJikgPSAwOwor
cHJpdmF0ZToKKyAgICBRUXVpY2tXZWJWaWV3KiBjb25zdCBtX3ZpZXdwb3J0VmlldzsKKyAgICBR
UXVpY2tXZWJQYWdlKiBjb25zdCBtX3BhZ2VWaWV3OwogCi0gICAgdmlydHVhbCB2b2lkIGRvd25s
b2FkUmVxdWVzdGVkKFFXZWJEb3dubG9hZEl0ZW0qKSA9IDA7CisgICAgUVNoYXJlZFBvaW50ZXI8
UU1lbnU+IGFjdGl2ZU1lbnU7CisgICAgUVVybCBsYXN0SG92ZXJlZFVSTDsKKyAgICBRU3RyaW5n
IGxhc3RIb3ZlcmVkVGl0bGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VQcm94eS5oCmluZGV4IDJkM2U2NTg3NDA3MjdkMmZlYzRkYzIyMTM0MDg1MmFj
MWE2MTE5ZjguLmVlYjY5MGIwYTNhMTliZmI4OTI5MzlmMDNlN2FkZTgxMjU2Mjg4MjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oCkBAIC0xNzQsNiAr
MTc0LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKGJv
b2wpOwogICAgIGJvb2wgbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7IH0KIAorICAgIHZvaWQgc2V0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIGVuZ2luZSkgeyBtX2lu
dGVyYWN0aW9uRW5naW5lID0gZW5naW5lOyBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLnNldFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUoZW5naW5lKTsgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLnNl
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoZW5naW5lKTt9CisKICAgICB2b2lkIHBvc3RNZXNz
YWdlVG9OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBRU3RyaW5nJik7CiAKICAgICBxcmVhbCB0ZXh0
Wm9vbUZhY3RvcigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cmkgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQppbmRleCAwM2QwZDFiNWNiZmNmMTZlZmQx
ODRjMDUxYzFiMzYzNDU0YmNiNjdhLi4yMjkxZmQ5ZDdiM2UxYjFjMGFmYmU5NGRiNzRhYzNjYmYz
ZjExZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnByaQpAQCAtNTEsMTEgKzUxLDkgQEAgU09VUkNFUyArPSBcCiAg
ICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwIFwKICAg
ICAkJFBXRC9VSVByb2Nlc3MvQVBJL2NwcC9xdC9XS1N0cmluZ1F0LmNwcCBcCiAgICAgJCRQV0Qv
VUlQcm9jZXNzL0FQSS9jcHAvcXQvV0tVUkxRdC5jcHAgXAotICAgICQkUFdEL1VJUHJvY2Vzcy9B
UEkvcXQvcWJhc2V3ZWJ2aWV3LmNwcCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xZGVz
a3RvcHdlYnZpZXcuY3BwIFwKICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJkb3dubG9h
ZGl0ZW0uY3BwIFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3Bw
IFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuY3BwIFwKKyAgICAk
JFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIFwKKyAgICAkJFBXRC9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIFwKICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5jcHAgXAogICAgICQkUFdEL1VJUHJvY2Vzcy9B
UEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcCBcCiAgICAgJCRQV0QvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZS5jcHAgXApAQCAtMTMyLDE4ICsxMzAsMTQgQEAgSEVBREVS
UyArPSBcCiAgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIuaCBcCiAgICAg
JCRQV0QvVUlQcm9jZXNzL0FQSS9jcHAvcXQvV0tTdHJpbmdRdC5oIFwKICAgICAkJFBXRC9VSVBy
b2Nlc3MvQVBJL2NwcC9xdC9XS1VSTFF0LmggXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQv
cWJhc2V3ZWJ2aWV3LmggXAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3
X3AuaCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuaCBcCi0g
ICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXdfcC5oIFwKICAgICAkJFBX
RC9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5oIFwKICAgICAkJFBXRC9VSVByb2Nl
c3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlc19wLmggXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkv
cXQvcXdlYmRvd25sb2FkaXRlbS5oIFwKICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJk
b3dubG9hZGl0ZW1fcC5oIFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBh
Z2UuaCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaCBcCi0g
ICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmggXAotICAgICQkUFdEL1VJ
UHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlld19wLmggXAorICAgICQkUFdEL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZS5oIFwKKyAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnBhZ2VfcC5oIFwKKyAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcu
aCBcCisgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBcCiAgICAg
JCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCBcCiAgICAg
JCRQV0QvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJk
TGlzdC5oIFwKICAgICAkJFBXRC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS90ZXN0cy5wcmkg
Yi9Tb3VyY2UvdGVzdHMucHJpCmluZGV4IGVhYmUyNTM5NmM5ODI4MDE2ZDEwMmE5MzA0ZTEyOWMx
YjAzZmEzMDEuLjFiNDE1ZmRmMWRmOGQyM2FkYWU4NjkxYTEyOGY2MGYxYmRiZDc1MzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS90ZXN0cy5wcmkKKysrIGIvU291cmNlL3Rlc3RzLnByaQpAQCAtNDMsOCAr
NDMsNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgIFdFQktJVDJf
VEVTVFNfRElSID0gJCRQV0QvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzCiAKICAgICBT
VUJESVJTICs9IFwKLSAgICAgICAgJCRXRUJLSVQyX1RFU1RTX0RJUi9xdG91Y2h3ZWJ2aWV3IFwK
LSAgICAgICAgJCRXRUJLSVQyX1RFU1RTX0RJUi9xZGVza3RvcHdlYnZpZXcgXAotICAgICAgICAk
JFdFQktJVDJfVEVTVFNfRElSL2NvbW1vbnZpZXd0ZXN0cyBcCisgICAgICAgICQkV0VCS0lUMl9U
RVNUU19ESVIvcXF1aWNrd2VidmlldyBcCiAgICAgICAgICQkV0VCS0lUMl9URVNUU19ESVIvcW1s
dGVzdHMKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBiNTM5ODJhMmIwM2NlMjExMjhlNDY0MmM4Nzk0YWUzMGMzYWZjZjJlLi4xMWRmMDRjYzA3
OTM3MjAyZmJkNzVjYmI0OGI0ZjA2ZWNkZmExODgzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMTEtMDkgIEFs
ZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0
XSBNZXJnZSBRVG91Y2hXZWJWaWV3IGFuZCBRRGVza3RvcFdlYlZpZXcgaW50byBvbmUgY2xhc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBNaW5p
QnJvd3NlciBhbmQgV2ViS2l0VGVzdFJ1bm5lciB3b3JrIGFnYWluIGFmdGVyIHRoZQorICAgICAg
ICBtZXJnZS4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwOgor
ICAgICAgICAoQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyk6CisgICAgICAgIChCcm93c2Vy
V2luZG93Ojp3ZWJWaWV3KToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5w
cm86CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjOgorICAgICAgICAq
IE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24uY3BwOgorICAgICAgICAqIE1p
bmlCcm93c2VyL3F0L21haW4uY3BwOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9Ccm93
c2VyV2luZG93LnFtbDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvRGVza3RvcFZpZXcu
cW1sOiBSZW1vdmVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9Ub3VjaFZpZXcucW1s
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHA6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKwogMjAxMS0x
MS0wOSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBFbmFibGUgZXhwb3J0cyBhbmQgY29uc3RydWN0b3IgZnVuY3Rpb25zIGluIHN0YXRp
YyBsaWJzCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNw
cCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwCmluZGV4IDE0MTVmNGQ2
NmY2MWJiNmFkNzRjOGUxNDljOTZhZGUwZDA0YzQ5ZjkuLmY1NjEzYjY3NWJkYTAxMzcxMzVlN2Y4
ZTkxZTg2YzkzMWU4YWM3NTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dz
ZXJXaW5kb3cuY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3Bw
CkBAIC0yOCw5ICsyOCw5IEBACiAKICNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCiAKLSNpbmNs
dWRlICJxZGVza3RvcHdlYnZpZXcuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3LmgiCi0jaW5j
bHVkZSAicXRvdWNod2VicGFnZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInFx
dWlja3dlYnBhZ2UuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKICNpbmNsdWRlICJ1
dGlscy5oIgogCiAjaW5jbHVkZSA8UURlY2xhcmF0aXZlRW5naW5lPgpAQCAtNTIsNiArNTIsOCBA
QCBCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFdpbmRvd09wdGlvbnMqIG9wdGlvbnMpCiAg
ICAgZW5naW5lKCktPnJvb3RDb250ZXh0KCktPnNldENvbnRleHRQcm9wZXJ0eSgib3B0aW9ucyIs
IG9wdGlvbnMpOwogICAgIHNldFNvdXJjZShRVXJsKCJxcmM6L3FtbC9Ccm93c2VyV2luZG93LnFt
bCIpKTsKICAgICBjb25uZWN0KHJvb3RPYmplY3QoKSwgU0lHTkFMKHBhZ2VUaXRsZUNoYW5nZWQo
UVN0cmluZykpLCB0aGlzLCBTTE9UKHNldFdpbmRvd1RpdGxlKFFTdHJpbmcpKSk7CisgICAgaWYg
KCFvcHRpb25zLT51c2VUb3VjaFdlYlZpZXcoKSkKKyAgICAgICAgUVF1aWNrV2ViVmlld1ByaXZh
dGU6OmdldChyb290T2JqZWN0KCktPnByb3BlcnR5KCJ3ZWJ2aWV3IikudmFsdWU8UVF1aWNrV2Vi
Vmlldyo+KCkpLT5zZXRVc2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIodHJ1ZSk7CiAgICAg
aWYgKG9wdGlvbnMtPnN0YXJ0TWF4aW1pemVkKCkpCiAgICAgICAgIHNldFdpbmRvd1N0YXRlKFF0
OjpXaW5kb3dNYXhpbWl6ZWQpOwogICAgIGVsc2UKQEAgLTYxLDExICs2Myw3IEBAIEJyb3dzZXJX
aW5kb3c6OkJyb3dzZXJXaW5kb3coV2luZG93T3B0aW9ucyogb3B0aW9ucykKIAogUU9iamVjdCog
QnJvd3NlcldpbmRvdzo6d2ViVmlldygpIGNvbnN0CiB7Ci0gICAgUU9iamVjdCogd2ViVmlldyA9
IHJvb3RPYmplY3QoKS0+cHJvcGVydHkoIndlYlZpZXciKS52YWx1ZTxRRGVza3RvcFdlYlZpZXcq
PigpOwotICAgIC8vIFRoZSB3ZWJWaWV3IGlzIGNyZWF0ZWQgaW4gUU1MLCB0aGVyZWZvcmUgaXQg
bWlnaHQgbm90IGV4aXN0IHlldC4KLSAgICBpZiAoIXdlYlZpZXcpCi0gICAgICAgIHdlYlZpZXcg
PSByb290T2JqZWN0KCktPnByb3BlcnR5KCJ3ZWJWaWV3IikudmFsdWU8UVRvdWNoV2ViVmlldyo+
KCk7Ci0gICAgcmV0dXJuIHdlYlZpZXc7CisgICAgcmV0dXJuIHJvb3RPYmplY3QoKS0+cHJvcGVy
dHkoIndlYnZpZXciKS52YWx1ZTxRUXVpY2tXZWJWaWV3Kj4oKTsKIH0KIAogdm9pZCBCcm93c2Vy
V2luZG93Ojpsb2FkKGNvbnN0IFFTdHJpbmcmIHVybCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlC
cm93c2VyL3F0L01pbmlCcm93c2VyLnBybyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93
c2VyLnBybwppbmRleCAzMGVjZDgxZjc3Yjg1NDg1NzBhYzJlODNjMjM0MWEyZmZlNjRjYTYxLi44
Y2FkMTdjYzRiZjE2OWI2OTZhYWM0MTY0ZmFhMDhkMmQ1ZGI5MjE3IDEwMDY0NAotLS0gYS9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KKysrIGIvVG9vbHMvTWluaUJyb3dzZXIv
cXQvTWluaUJyb3dzZXIucHJvCkBAIC0yNCw2ICsyNCwxMSBAQCBERVNURElSID0gJCR7Uk9PVF9C
VUlMRF9ESVJ9L2JpbgogCiBDT05GSUcgKz0gcXR3ZWJraXQKIAorIyBGSVhNRTogV2hlbiB3ZWJr
aXQtcHJpdmF0ZSB3b3JrcyBsZXQncyB1c2UgaXQuCitsb2FkKGphdmFzY3JpcHRjb3JlKQorbG9h
ZCh3ZWJjb3JlKQorbG9hZCh3ZWJraXQyKQorCiBRVCArPSBuZXR3b3JrIGRlY2xhcmF0aXZlIHdp
ZGdldHMKIG1hY3g6IFFUICs9IHhtbAogCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9x
dC9NaW5pQnJvd3Nlci5xcmMgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMK
aW5kZXggMTJkZGMzMjRjOGJhMTVhMDhkMjZmYjQ2YjFhMmY4YmVkYzc2YmVkOS4uYTU3YTk1NDRm
NDE1MzMzZGIxNDViM2ViM2RlZjgzNDQ1YWEwMzFhOCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlC
cm93c2VyLnFyYwpAQCAtNiw3ICs2LDUgQEAKICAgICAgICAgPGZpbGU+aWNvbnMvc3RvcC5wbmc8
L2ZpbGU+CiAgICAgICAgIDxmaWxlPnFtbC9Ccm93c2VyV2luZG93LnFtbDwvZmlsZT4KICAgICAg
ICAgPGZpbGU+dXNlcmFnZW50bGlzdC50eHQ8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPnFtbC9EZXNr
dG9wVmlldy5xbWw8L2ZpbGU+Ci0gICAgICAgIDxmaWxlPnFtbC9Ub3VjaFZpZXcucW1sPC9maWxl
PgogICAgIDwvcXJlc291cmNlPgogPC9SQ0M+CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9NaW5pQnJvd3NlckFwcGxpY2F0aW9uLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01p
bmlCcm93c2VyQXBwbGljYXRpb24uY3BwCmluZGV4IGNhN2Y4MWE0MDE0ODBhYTJiOTIyYjEzZjFi
NjhlMDY4ZmIwYjVlNmUuLjFiYjIzYjFlMzA0ZTIzNjY3ZGI0YTQ2OThiMWEwOGE4ZmU4MjRjZGMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24u
Y3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyQXBwbGljYXRpb24uY3Bw
CkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbmNsdWRlICJNaW5pQnJvd3NlckFwcGxpY2F0aW9uLmgi
CiAKLSNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXcuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3
LmgiCiAjaW5jbHVkZSAicXdlYm5hdmlnYXRpb25jb250cm9sbGVyLmgiCiAjaW5jbHVkZSAidXRp
bHMuaCIKICNpbmNsdWRlIDxRUmVnRXhwPgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
cXQvbWFpbi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAppbmRleCBhMjBiMjVl
N2Q5YTE1MGJmN2U3Yzk4M2UyNzJlMjQ3M2QwZDk5MjJmLi4yNjg3N2FlNzcwZWExNmJmZDQxNjdk
NTU0NWMyNTQ0ZmRmZjcwNWYwIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWlu
LmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcApAQCAtMzAsNiArMzAsOSBA
QAogCiAjaW5jbHVkZSAiTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIlVybExv
YWRlci5oIgorCisjaW5jbHVkZSA8cWRlY2xhcmF0aXZlLmg+CisKICNpbmNsdWRlIDxRRGlyPgog
I2luY2x1ZGUgPFFMYXRpbjFTdHJpbmc+CiAjaW5jbHVkZSA8UVJlZ0V4cD4KZGlmZiAtLWdpdCBh
L1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbCBiL1Rvb2xzL01pbmlC
cm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAppbmRleCAzOGNiYTBmN2M0MGUxNDA5ZDQ4
NmU3MzZmOTY1OGFiMjcyMDQxYjgwLi4zZjMxOTllYWQxZmY5ZWU4MDgzN2Y0NmQ0ODRlMWU4MDBm
YTczNzZhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRv
dy5xbWwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCkBA
IC0zNSw4ICszNSw3IEBAIFJlY3RhbmdsZSB7CiAgICAgcHJvcGVydHkgYm9vbCBjYW5Hb0JhY2s6
IGZhbHNlCiAgICAgcHJvcGVydHkgYm9vbCBjYW5Hb0ZvcndhcmQ6IGZhbHNlCiAgICAgcHJvcGVy
dHkgYm9vbCBjYW5TdG9wOiBmYWxzZQotICAgIHByb3BlcnR5IGludCBsb2FkUHJvZ3Jlc3M6IDAK
LSAgICBwcm9wZXJ0eSBhbGlhcyB3ZWJWaWV3OiB2aWV3TG9hZGVyLml0ZW0KKyAgICBwcm9wZXJ0
eSBhbGlhcyB3ZWJ2aWV3OiB3ZWJWaWV3CiAKICAgICBzaWduYWwgcGFnZVRpdGxlQ2hhbmdlZChz
dHJpbmcgdGl0bGUpCiAKQEAgLTE1NSwxMCArMTU0LDEwIEBAIFJlY3RhbmdsZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGJvdHRvbTogcGFyZW50LmJvdHRvbQogICAgICAgICAgICAgICAgICAgICBs
ZWZ0OiBwYXJlbnQubGVmdAogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aWR0
aDogcGFyZW50LndpZHRoIC8gMTAwICogbG9hZFByb2dyZXNzCisgICAgICAgICAgICAgICAgd2lk
dGg6IHBhcmVudC53aWR0aCAvIDEwMCAqIHdlYlZpZXcubG9hZFByb2dyZXNzCiAgICAgICAgICAg
ICAgICAgY29sb3I6ICJibHVlIgogICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuMwotICAgICAg
ICAgICAgICAgIHZpc2libGU6IGxvYWRQcm9ncmVzcyAhPSAxMDAKKyAgICAgICAgICAgICAgICB2
aXNpYmxlOiB3ZWJWaWV3LmxvYWRQcm9ncmVzcyAhPSAxMDAKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgVGV4dElucHV0IHsKQEAgLTE5MSwzMiArMTkwLDMxIEBAIFJlY3RhbmdsZSB7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBMb2FkZXIgewotICAgICAgICBpZDogdmlld0xvYWRlcgor
ICAgIFdlYlZpZXcgeworICAgICAgICBpZDogd2ViVmlldwogICAgICAgICBhbmNob3JzIHsKICAg
ICAgICAgICAgIHRvcDogbmF2aWdhdGlvbkJhci5ib3R0b20KICAgICAgICAgICAgIGxlZnQ6IHBh
cmVudC5sZWZ0CiAgICAgICAgICAgICByaWdodDogcGFyZW50LnJpZ2h0CiAgICAgICAgICAgICBi
b3R0b206IHBhcmVudC5ib3R0b20KICAgICAgICAgfQotICAgICAgICBzb3VyY2U6IG9wdGlvbnMu
dXNlVG91Y2hXZWJWaWV3ID8gIlRvdWNoVmlldy5xbWwiIDogIkRlc2t0b3BWaWV3LnFtbCIKLSAg
ICB9CiAKLSAgICBDb25uZWN0aW9ucyB7Ci0gICAgICAgIHRhcmdldDogdmlld0xvYWRlci5pdGVt
Ci0gICAgICAgIG9uVGl0bGVDaGFuZ2VkOiBwYWdlVGl0bGVDaGFuZ2VkKHZpZXdMb2FkZXIuaXRl
bS50aXRsZSkKKyAgICAgICAgc2lnbmFsIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQKKworICAgICAg
ICBDb21wb25lbnQub25Db21wbGV0ZWQ6IG5hdmlnYXRpb24ubmF2aWdhdGlvblN0YXRlQ2hhbmdl
ZC5jb25uZWN0KG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQpOworCisgICAgICAgIG9uVGl0bGVDaGFu
Z2VkOiBwYWdlVGl0bGVDaGFuZ2VkKHRpdGxlKQogICAgICAgICBvblVybENoYW5nZWQ6IHsKLSAg
ICAgICAgICAgIGFkZHJlc3NMaW5lLnRleHQgPSB2aWV3TG9hZGVyLml0ZW0udXJsCisgICAgICAg
ICAgICBhZGRyZXNzTGluZS50ZXh0ID0gdXJsCiAgICAgICAgICAgICBpZiAob3B0aW9ucy5wcmlu
dExvYWRlZFVybHMpCi0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkxvYWRlZDoiLCB2aWV3
TG9hZGVyLml0ZW0udXJsKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTG9hZGVkOiIs
IHdlYlZpZXcudXJsKTsKICAgICAgICAgICAgIGZvcmNlQWN0aXZlRm9jdXMoKTsKICAgICAgICAg
fQogICAgICAgICBvbk5hdmlnYXRpb25TdGF0ZUNoYW5nZWQ6IHsKLSAgICAgICAgICAgIGNhbkdv
QmFjayA9IHZpZXdMb2FkZXIuaXRlbS5uYXZpZ2F0aW9uLmNhbkdvQmFjawotICAgICAgICAgICAg
Y2FuR29Gb3J3YXJkID0gdmlld0xvYWRlci5pdGVtLm5hdmlnYXRpb24uY2FuR29Gb3J3YXJkCi0g
ICAgICAgICAgICBjYW5TdG9wID0gdmlld0xvYWRlci5pdGVtLm5hdmlnYXRpb24uY2FuU3RvcAor
ICAgICAgICAgICAgY2FuR29CYWNrID0gbmF2aWdhdGlvbi5jYW5Hb0JhY2sKKyAgICAgICAgICAg
IGNhbkdvRm9yd2FyZCA9IG5hdmlnYXRpb24uY2FuR29Gb3J3YXJkCisgICAgICAgICAgICBjYW5T
dG9wID0gbmF2aWdhdGlvbi5jYW5TdG9wCiAgICAgICAgIH0KLSAgICAgICAgb25Mb2FkUHJvZ3Jl
c3NDaGFuZ2VkOiBsb2FkUHJvZ3Jlc3MgPSB2aWV3TG9hZGVyLml0ZW0ubG9hZFByb2dyZXNzCiAg
ICAgfQogCiAgICAgS2V5cy5vblByZXNzZWQ6IHsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL3F0L3FtbC9EZXNrdG9wVmlldy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvRGVz
a3RvcFZpZXcucW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTJkZGQ1MDk3ZjU1
ZTE0YjAwYmQxYWYxYzIxNDE2MTg4NTk5NDA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9EZXNrdG9wVmlldy5x
bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWltcG9ydCBRdFF1aWNrIDIuMAotaW1w
b3J0IFF0V2ViS2l0IDMuMAotCi1EZXNrdG9wV2ViVmlldyB7Ci0gICAgc2lnbmFsIG5hdmlnYXRp
b25TdGF0ZUNoYW5nZWQKLQotICAgIENvbXBvbmVudC5vbkNvbXBsZXRlZDogbmF2aWdhdGlvbi5u
YXZpZ2F0aW9uU3RhdGVDaGFuZ2VkLmNvbm5lY3QobmF2aWdhdGlvblN0YXRlQ2hhbmdlZCkKLX0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ub3VjaFZpZXcucW1sIGIvVG9v
bHMvTWluaUJyb3dzZXIvcXQvcW1sL1RvdWNoVmlldy5xbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUxYWZkYjA3MDAxYjk2ZjJmZjUyN2I5ZTAyYjlhYzZmYjE4MTBkN2MuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTWluaUJyb3dz
ZXIvcXQvcW1sL1RvdWNoVmlldy5xbWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWlt
cG9ydCBRdFF1aWNrIDIuMAotaW1wb3J0IFF0V2ViS2l0IDMuMAotCi1Ub3VjaFdlYlZpZXcgewot
ICAgIHNpZ25hbCBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkCi0KLSAgICBDb21wb25lbnQub25Db21w
bGV0ZWQ6IG5hdmlnYXRpb24ubmF2aWdhdGlvblN0YXRlQ2hhbmdlZC5jb25uZWN0KG5hdmlnYXRp
b25TdGF0ZUNoYW5nZWQpCi19CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAppbmRleCA0YTU4OWJlOTM1ZWE0OGY0ZDA4Y2Y1YjM3YTE0YThjZDkwYTk0MTc4Li5hNmQ1MWYy
MTBiODg5ZjcwMmU5YTE3ZmYwNzg4YTk2Nzk0MTc0ZGM1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxXZWJLaXQy
L1dLUmV0YWluUHRyLmg+CiAKICNpZiBkZWZpbmVkKEJVSUxESU5HX1FUX18pCi1jbGFzcyBRRGVz
a3RvcFdlYlZpZXc7Ci10eXBlZGVmIFFEZXNrdG9wV2ViVmlldyogUGxhdGZvcm1XS1ZpZXc7Citj
bGFzcyBRUXVpY2tXZWJWaWV3OwordHlwZWRlZiBRUXVpY2tXZWJWaWV3KiBQbGF0Zm9ybVdLVmll
dzsKIGNsYXNzIFFRdWlja1ZpZXc7CiB0eXBlZGVmIFFRdWlja1ZpZXcqIFBsYXRmb3JtV2luZG93
OwogI2VsaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fQVBQTEVfXwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcAppbmRleCAyMmUzYWE2NDFiZTIx
YjMxYTJiMjZmYzA4NzcyN2M5ZmZhMDIwZWFkLi43N2MzMWZmMGM5NDI3MThiNTAwZjBmYWI4Mzg5
NzlhMTVmM2Q2NWU0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRm
b3JtV2ViVmlld1F0LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3Jt
V2ViVmlld1F0LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAj
aW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW5jbHVkZSAicWRlc2t0b3B3ZWJ2aWV3Lmgi
CisjaW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgogCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgog
I2luY2x1ZGUgPFFEZWNsYXJhdGl2ZVByb3BlcnR5PgpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRl
OgogfTsKIAogUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKLSAgICA6IG1fdmlldyhuZXcg
UURlc2t0b3BXZWJWaWV3KGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZikpCisgICAgOiBtX3ZpZXco
bmV3IFFRdWlja1dlYlZpZXcoY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSkKICAgICAsIG1fd2lu
ZG93KG5ldyBXcmFwcGVyV2luZG93KG1fdmlldykpCiAgICAgLCBtX3dpbmRvd0lzS2V5KHRydWUp
CiB7CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggNWUxNmUxMmI2YWZj
ZDQyYmYyMTQwNDRjNTVjZjE4Njk0MDM0NDlmZi4uNWY4NzgzNGNhMDcxMTUxNzAzYjhiMTMxZjYx
YzNiMDViZDg3ZDU0YSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDExLTExLTA5ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBv
cGVuYm9zc2Eub3JnPgorCisgICAgICAgIFtRdF0gTWVyZ2UgUVRvdWNoV2ViVmlldyBhbmQgUURl
c2t0b3BXZWJWaWV3IGludG8gb25lIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MTM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZSBvbGQgdGVzdHMgYW5kIG1lcmdlIHRoZW0gaW50byB0
aGUgbmV3IFFRdWlja1dlYlZpZXcgZGlyZWN0b3J5LgorCisgICAgICAgICogU291cmNlL3Rlc3Rz
LnByaToKKwogMjAxMS0xMS0xMCAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bu
b2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBNYWtlIHN1cmUgaGVhZGVycy5wcmkgaGFzIHRoZSBy
aWdodCByZWxhdGl2ZSBwYXRocyBmb3IgaW5zdGFsbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114475</attachid>
            <date>2011-11-10 05:03:43 -0800</date>
            <delta_ts>2011-11-10 06:09:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71355-20111110100334.patch</filename>
            <type>text/plain</type>
            <size>191194</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4MzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZTVhZjUzYWI1MjU4
NDEzMTBkYzVjN2MwZmIyNjA3Zjk1YzIwMmQ3OC4uYzcwNWIxN2ZlZGI3YjAzZWMwNjZhYzBkZTI2
OGYyMDYzZWJhNTQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMS0w
OSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdIE1lcmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEz
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWdp
c3RlciBvbmx5IFFRdWlja1dlYlZpZXcgYW5kIFFRdWlja1dlYlBhZ2UgaW4gdGhlIHBsdWdpbi4K
KworICAgICAgICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXRRbWxQ
bHVnaW46OnJlZ2lzdGVyVHlwZXMpOgorCiAyMDExLTExLTA5ICBTaW1vbiBIYXVzbWFubiAgPHNp
bW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVuYWJsZSBleHBvcnRzIGFu
ZCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgaW4gc3RhdGljIGxpYnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0ZjYy
MGRmMDA2YzFhN2YzMjc0ZGE1Y2VkZTY2NjFmMWE1ZGMxOGM0Li5hOWI2MGEzYmMwYmQ2OTU4NTMz
NDg5YTdlZjk5ZDQzNDM4YzM5YTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjA5IEBACisyMDEx
LTExLTEwICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFtRdF0gTWVyZ2UgUVRvdWNoV2ViVmlldyBhbmQgUURlc2t0b3BXZWJWaWV3IGludG8g
b25lIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MTM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1lcmdlIFFUb3VjaFdlYlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBjbGFzcyBj
YWxsZWQKKyAgICAgICAgUVF1aWNrV2ViVmlldyBhbmQgaXRzIGF0dGFjaGVkIHBhZ2UgUVF1aWNr
V2ViUGFnZS4gWW91IGNhbiBzd2l0Y2ggdG8gdGhlCisgICAgICAgIHRyYWRpdGlvbmFsIGRlc2t0
b3AgdXNlIGNhc2Ugd2l0aCB0aGUgcHJpdmF0ZSBoZWFkZXIuIEFsc28gbm93IG9uIGRlc2t0b3AK
KyAgICAgICAgcGxhdGZvcm1zIEFDIGlzIHR1cm4gb24gYnkgZGVmYXVsdC4gSSBhbHNvIG1lcmdl
ZCBvdXIgdHdvCisgICAgICAgIHN1YmNsYXNzZXMgb2YgUXRWaWV3SW50ZXJmYWNlIGludG8gb25l
IGFzIHRoZSBzcGxpdCBkb2Vzbid0IG1ha2UKKyAgICAgICAgdGhhdCBtdWNoIHNlbnNlIGFueW1v
cmUuIEluIHRoZSBmdXR1cmUgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGVuYWJsZSB0aGUKKyAgICAg
ICAgdHJhZGl0aW9uYWwgZGVza3RvcCB1c2UgY2FzZSBkZXBlbmRpbmcgdGhlIHBsYXRmb3JtIHRo
ZSBjb2RlIGlzIHJ1bm5pbmcuCisgICAgICAgIEFQSSB0ZXN0cyBhbmQgUU1MIHRlc3RzIGhhdmUg
YmVlbiB1cGRhdGVkLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2
aWV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmll
d19wLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZp
ZXcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2
aWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZp
ZXdfcC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFn
ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnBhZ2UuY3BwLgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZSk6Cisg
ICAgICAgIChRUXVpY2tXZWJQYWdlOjp+UVF1aWNrV2ViUGFnZSk6CisgICAgICAgIChRUXVpY2tX
ZWJQYWdlOjprZXlQcmVzc0V2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmtleVJlbGVh
c2VFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjppbnB1dE1ldGhvZEV2ZW50KToKKyAg
ICAgICAgKFFRdWlja1dlYlBhZ2U6OmZvY3VzSW5FdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQ
YWdlOjpmb2N1c091dEV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6Om1vdXNlUHJlc3NF
dmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjptb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChRUXVpY2tXZWJQYWdlOjptb3VzZVJlbGVhc2VFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQ
YWdlOjptb3VzZURvdWJsZUNsaWNrRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6d2hl
ZWxFdmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpob3ZlckVudGVyRXZlbnQpOgorICAg
ICAgICAoUVF1aWNrV2ViUGFnZTo6aG92ZXJNb3ZlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2Vi
UGFnZTo6aG92ZXJMZWF2ZUV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OmRyYWdNb3Zl
RXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6ZHJhZ0VudGVyRXZlbnQpOgorICAgICAg
ICAoUVF1aWNrV2ViUGFnZTo6ZHJhZ0xlYXZlRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViUGFn
ZTo6ZHJvcEV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6Omdlb21ldHJ5Q2hhbmdlZCk6
CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpldmVudCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdl
Ojp0b3VjaEV2ZW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6Oml0ZW1DaGFuZ2UpOgorICAg
ICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OlFRdWlja1dlYlBhZ2VQcml2YXRlKToKKyAgICAg
ICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjppbml0aWFsaXplU2NlbmVHcmFwaENvbm5lY3Rpb25z
KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpzZXRQYWdlUHJveHkpOgorICAgICAg
ICAoY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZh
dGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2
YXRlOjpfcV9vbkFmdGVyU2NlbmVSZW5kZXIpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZh
dGU6Ol9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2VicGFnZV9wLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F0b3VjaHdlYnBhZ2VfcC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlj
a1dlYlZpZXdQcml2YXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjplbmFibGVN
b3VzZUV2ZW50cyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6ZGlzYWJsZU1vdXNl
RXZlbnRzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplKToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplRGVza3RvcCk6CisgICAgICAg
IChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZVRvdWNoKToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXdQcml2YXRlOjpsb2FkRGlkQ29tbWl0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpjb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnNjcm9sbFBvc2l0aW9uUmVxdWVzdGVkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2
YXRlOjpfcV92aWV3cG9ydFVwZGF0ZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6
Ol9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2Vi
Vmlld1ByaXZhdGU6Ol9xX29uVmlzaWJsZUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNrV2ViVmll
d1ByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJp
dmF0ZTo6dXBkYXRlVmlld3BvcnRDb25zdHJhaW50cyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFFRdWlja1dl
YlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoUVF1aWNrV2ViVmll
d1ByaXZhdGU6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2
YXRlOjpjaG9vc2VGaWxlcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffb25P
cGVuUGFuZWxGaWxlc1NlbGVjdGVkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpf
cV9vbk9wZW5QYW5lbEZpbmlzaGVkKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpz
ZXRVc2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpOgorICAgICAgICAodG9Qb2xpY3lBY3Rp
b24pOgorICAgICAgICAoaGFzTWV0YU1ldGhvZCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJp
dmF0ZTo6bmF2aWdhdGlvblBvbGljeUZvclVSTCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJp
dmF0ZTo6c2V0UGFnZVByb3h5KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OlFRdWlja1dlYlZp
ZXcpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6flFRdWlja1dlYlZpZXcpOgorICAgICAgICAo
UVF1aWNrV2ViVmlldzo6cGFnZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpsb2FkKToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXc6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFFRdWlja1dlYlZp
ZXc6OnVybCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpsb2FkUHJvZ3Jlc3MpOgorICAgICAg
ICAoUVF1aWNrV2ViVmlldzo6dGl0bGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6bmF2aWdh
dGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6cHJlZmVyZW5jZXMpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXc6OnRvdWNoRXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6cGFnZVJlZik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5oLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3X3AuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL2NvbW1vbnZpZXd0ZXN0cy9jb21tb252aWV3dGVzdHMucHJvOiBS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3Rz
L3RzdF9jb21tb252aWV3dGVzdHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL3dlYnZpZXdhYnN0cmFjdGlvbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vi
dmlld2Fic3RyYWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xZGVza3RvcHdlYnZpZXcvdHN0X3FkZXNrdG9wd2Vidmlldy5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90
c3RfZG93bmxvYWQucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvRGVza3RvcFdlYlZpZXcvdHN0X2xpbmtIb3ZlcmVkLnFtbDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkRmFpbC5xbWw6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmll
dy90c3RfbG9hZFByb2dyZXNzLnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3Rz
L3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWduYWwucW1sOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0
X2xvYWRaZXJvU2l6ZVZpZXcucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5xbWw6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbmF2aWdhdGlv
blBvbGljeUZvclVybC5xbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0
ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfcHJlZmVyZW5jZXMucW1sOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMu
cW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJW
aWV3L3RzdF9sb2FkLnFtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZEZhaWwucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkTmVnYXRpdmVTaXplVmll
dy5xbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdl
YlZpZXcvdHN0X2xvYWRQcm9ncmVzcy5xbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWw6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0
X2xvYWRaZXJvU2l6ZVZpZXcucW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9wcm9wZXJ0aWVzLnFtbDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybzoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3RzdF9xbWx0ZXN0cy5jcHA6CisgICAgICAgIChE
ZXNrdG9wV2ViVmlldzo6RGVza3RvcFdlYlZpZXcpOgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3FxdWlja3dlYnZpZXcucHJv
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xZGVz
a3RvcHdlYnZpZXcvcWRlc2t0b3B3ZWJ2aWV3LnByby4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKHRzdF9RUXVpY2tXZWJWaWV3Ojp0c3RfUVF1aWNrV2ViVmlldyk6CisgICAgICAgICh0
c3RfUVF1aWNrV2ViVmlldzo6aW5pdCk6CisgICAgICAgICh0c3RfUVF1aWNrV2ViVmlldzo6Y2xl
YW51cCk6CisgICAgICAgICh0c3RfUVF1aWNrV2ViVmlldzo6d2ViVmlldyk6CisgICAgICAgICh0
c3RfUVF1aWNrV2ViVmlldzo6YWNjZXNzUGFnZSk6CisgICAgICAgICh0c3RfUVF1aWNrV2ViVmll
dzo6bmF2aWdhdGlvblN0YXR1c0F0U3RhcnR1cCk6CisgICAgICAgIChMb2FkU3RhcnRlZENhdGNo
ZXI6OkxvYWRTdGFydGVkQ2F0Y2hlcik6CisgICAgICAgIChMb2FkU3RhcnRlZENhdGNoZXI6Om9u
TG9hZFN0YXJ0ZWQpOgorICAgICAgICAodHN0X1FRdWlja1dlYlZpZXc6OnN0b3BFbmFibGVkQWZ0
ZXJMb2FkU3RhcnRlZCk6CisgICAgICAgICh0c3RfUVF1aWNrV2ViVmlldzo6YmFzZVVybCk6Cisg
ICAgICAgICh0c3RfUVF1aWNrV2ViVmlldzo6bG9hZEVtcHR5VXJsKToKKyAgICAgICAgKHRzdF9R
UXVpY2tXZWJWaWV3Ojpsb2FkRW1wdHlQYWdlVmlld1Zpc2libGUpOgorICAgICAgICAodHN0X1FR
dWlja1dlYlZpZXc6OmxvYWRFbXB0eVBhZ2VWaWV3SGlkZGVuKToKKyAgICAgICAgKHRzdF9RUXVp
Y2tXZWJWaWV3Ojpsb2FkTm9uZXhpc3RlbnRGaWxlVXJsKToKKyAgICAgICAgKHRzdF9RUXVpY2tX
ZWJWaWV3OjpiYWNrQW5kRm9yd2FyZCk6CisgICAgICAgICh0c3RfUVF1aWNrV2ViVmlldzo6cmVs
b2FkKToKKyAgICAgICAgKHRzdF9RUXVpY2tXZWJWaWV3OjpzdG9wKToKKyAgICAgICAgKHRzdF9R
UXVpY2tXZWJWaWV3Ojpsb2FkUHJvZ3Jlc3MpOgorICAgICAgICAodHN0X1FRdWlja1dlYlZpZXc6
OnNob3cpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXRvdWNod2Vidmlldy9x
dG91Y2h3ZWJ2aWV3LnBybzogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3F0b3VjaHdlYnZpZXcvdHN0X3F0b3VjaHdlYnZpZXcuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHdpbmRvdy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRH
ZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0R2VzdHVyZVJlY29nbml6
ZXI6OlF0R2VzdHVyZVJlY29nbml6ZXIpOgorICAgICAgICAoV2ViS2l0OjpRdEdlc3R1cmVSZWNv
Z25pemVyOjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBh
bkdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVj
b2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSk6CisgICAgICAgIChXZWJLaXQ6
OlF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQ
aW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQaW5jaEdlc3R1
cmVSZWNvZ25pemVyOjpyZWNvZ25pemUpOgorICAgICAgICAoV2ViS2l0OjpRdFBpbmNoR2VzdHVy
ZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdFRvdWNoVmlld0ludGVyZmFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UXRW
aWV3SW50ZXJmYWNlOjpRdFZpZXdJbnRlcmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdJ
bnRlcmZhY2U6OmRpZEZpbmRab29tYWJsZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdJ
bnRlcmZhY2U6OnNjZW5lR3JhcGhVcGRhdGVRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmll
d0ludGVyZmFjZTo6c2V0Vmlld05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmll
d0ludGVyZmFjZTo6ZHJhd2luZ0FyZWFTaXplKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3SW50
ZXJmYWNlOjpjb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdJbnRl
cmZhY2U6OnNjcm9sbFBvc2l0aW9uUmVxdWVzdGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3
SW50ZXJmYWNlOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6
aGFzRm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdJbnRlcmZhY2U6OmlzVmlzaWJsZSk6
CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6c3RhcnREcmFnKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpRdFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZVVybCk6CisgICAgICAg
IChXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6ZGlkQ2hhbmdlVGl0bGUpOgorICAgICAgICAoV2Vi
S2l0OjpRdFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZVRvb2xUaXApOgorICAgICAgICAoV2ViS2l0
OjpRdFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZVN0YXR1c1RleHQpOgorICAgICAgICAoV2ViS2l0
OjpRdFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZUN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6OlF0
Vmlld0ludGVyZmFjZTo6bG9hZERpZEJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3SW50
ZXJmYWNlOjpsb2FkRGlkQ29tbWl0KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3SW50ZXJmYWNl
Ojpsb2FkRGlkU3VjY2VlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6bG9h
ZERpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZUxv
YWRQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6ZGlkTW91c2VN
b3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdJbnRlcmZhY2U6OnNob3dD
b250ZXh0TWVudSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6aGlkZUNvbnRl
eHRNZW51KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOjpydW5KYXZhU2NyaXB0
QWxlcnQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdJbnRlcmZhY2U6OnJ1bkphdmFTY3JpcHRD
b25maXJtKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOjpydW5KYXZhU2NyaXB0
UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOjpwcm9jZXNzRGlkQ3Jh
c2gpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdJbnRlcmZhY2U6OmRpZFJlbGF1bmNoUHJvY2Vz
cyk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6ZW5naW5lKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOjpkb3dubG9hZFJlcXVlc3RlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6Y2hvb3NlRmlsZXMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFZpZXdJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpzZXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQu
Y3BwOgorICAgICAgICAqIFdlYktpdDIucHJpOgorCiAyMDExLTExLTA5ICBTaW1vbiBIYXVzbWFu
biAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVuYWJsZSBleHBv
cnRzIGFuZCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgaW4gc3RhdGljIGxpYnMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcAppbmRleCBhNTFlZGJjNGQ4YzUyOTBlODU5ZjJhNDA3
MmRkZmU2MjkzZDFjNGYyLi4yYjk4YmU3YmI4OTU4MzIyMGYxNTQzNTQ4NjhlNzdkNzBhZmIzNzE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCkBAIC0yMyw5ICsyMyw4
IEBACiAjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVleHRlbnNpb25wbHVnaW4u
aD4KIAogI2lmIGRlZmluZWQoSEFWRV9XRUJLSVQyKQotI2luY2x1ZGUgInFkZXNrdG9wd2Vidmll
dy5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2UuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3
LmgiCisjaW5jbHVkZSAicXF1aWNrd2VicGFnZS5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXcu
aCIKICNpbmNsdWRlICJxd2ViZG93bmxvYWRpdGVtLmgiCiAjaW5jbHVkZSAicXdlYm5hdmlnYXRp
b25jb250cm9sbGVyLmgiCiAjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzLmgiCkBAIC01MCwxMSAr
NDksMTAgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKLSAg
ICAgICAgcW1sUmVnaXN0ZXJUeXBlPFFEZXNrdG9wV2ViVmlldz4odXJpLCAzLCAwLCAiRGVza3Rv
cFdlYlZpZXciKTsKLSAgICAgICAgcW1sUmVnaXN0ZXJUeXBlPFFUb3VjaFdlYlZpZXc+KHVyaSwg
MywgMCwgIlRvdWNoV2ViVmlldyIpOworICAgICAgICBxbWxSZWdpc3RlclR5cGU8UVF1aWNrV2Vi
Vmlldz4odXJpLCAzLCAwLCAiV2ViVmlldyIpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRh
YmxlVHlwZTxRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXI+KHVyaSwgMywgMCwgIk5hdmlnYXRpb25D
b250cm9sbGVyIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ug
b2YgTmF2aWdhdGlvbkNvbnRyb2xsZXIiKSk7CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFi
bGVUeXBlPFFXZWJQcmVmZXJlbmNlcz4odXJpLCAzLCAwLCAiV2ViUHJlZmVyZW5jZXMiLCBRT2Jq
ZWN0Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBXZWJQcmVmZXJlbmNl
cyIpKTsKLSAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVRvdWNoV2ViUGFnZT4o
dXJpLCAzLCAwLCAiVG91Y2hXZWJQYWdlIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2Vw
YXJhdGUgaW5zdGFuY2Ugb2YgVG91Y2hXZWJQYWdlLCB1c2UgVG91Y2hXZWJWaWV3IikpOworICAg
ICAgICBxbWxSZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRUXVpY2tXZWJQYWdlPih1cmksIDMsIDAs
ICJXZWJQYWdlIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ug
b2YgV2ViUGFnZSwgdXNlIFdlYlZpZXciKSk7CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFi
bGVUeXBlPFFOZXR3b3JrUmVwbHk+KHVyaSwgMywgMCwgIk5ldHdvcmtSZXBseSIsIFFPYmplY3Q6
OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9mIE5ldHdvcmtSZXBseSIpKTsK
ICAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYkRvd25sb2FkSXRlbT4odXJp
LCA1LCAwLCAiRG93bmxvYWRJdGVtIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJh
dGUgaW5zdGFuY2Ugb2YgRG93bmxvYWRJdGVtIikpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBh
MWFjOTUyYjNlNjNhZDFlYTI2NTg1Y2MwOWQwYjgxMzk0ZTVjYTQ1Li42N2JlYzRmMGVmY2Q5NmUy
MDUzYjFjZTdhN2ViMjJiOWE4ODcyNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI0Myw3ICsyNDMsNiBA
QCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmggXAog
ICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1w
bC5oIFwKLSAgICBVSVByb2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuaCBcCiAgICAgVUlQ
cm9jZXNzL3F0L1F0UG9saWN5SW50ZXJmYWNlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1
cmVSZWNvZ25pemVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVy
LmggXApAQCAtNDg3LDcgKzQ4Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJV
SUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcCBcCiAgICAgVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBcCi0gICAgVUlQcm9jZXNzL3F0L1F0
VG91Y2hWaWV3SW50ZXJmYWNlLmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L1F0Vmlld0ludGVyZmFj
ZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICBVSVByb2Nlc3Mv
cXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9XS1ZpZXcuaAppbmRleCA4MmRlYTQ3ZjVmNmI5Yzg0NzEwYmVjNmI2MDc3NDNjZmZm
ODIwYTNiLi4zNzNiN2RmYmI2MjZjZGRmNDkzOTgxNDc3MTZhN2JlMDUwZjY2ZTRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3LmgKQEAgLTIwLDkgKzIwLDggQEAKICNp
Zm5kZWYgV0tWaWV3X2gKICNkZWZpbmUgV0tWaWV3X2gKIAotI2luY2x1ZGUgPFdlYktpdDIvcWRl
c2t0b3B3ZWJ2aWV3Lmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9xdG91Y2h3ZWJ2aWV3Lmg+Ci0jaW5j
bHVkZSA8V2ViS2l0Mi9xdG91Y2h3ZWJwYWdlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9xcXVpY2t3
ZWJwYWdlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9xcXVpY2t3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9xd2ViZG93bmxvYWRpdGVtLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9xd2VibmF2aWdh
dGlvbmNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL3F3ZWJwcmVmZXJlbmNlcy5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTcwN2ZmODA0MGQyODNjNDNiYmM0MjI4NWU5
ODA1NGQ2NDJlMzQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAicWJhc2V3ZWJ2aWV3LmgiCi0KLSNpbmNsdWRlICJRdFdlYlBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgInFiYXNld2Vidmlld19wLmgiCi0jaW5jbHVkZSAicXdlYm5h
dmlnYXRpb25jb250cm9sbGVyLmgiCi0KLVFCYXNlV2ViVmlld1ByaXZhdGU6OlFCYXNlV2ViVmll
d1ByaXZhdGUoKQotICAgIDogcV9wdHIoMCkKLSAgICAsIG5hdmlnYXRpb25Db250cm9sbGVyKDAp
Ci17Ci19Ci0KLXZvaWQgUUJhc2VXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2ViUGFn
ZVByb3h5KiBwYWdlUHJveHkpCi17Ci0gICAgdGhpcy0+cGFnZVByb3h5LnJlc2V0KHBhZ2VQcm94
eSk7Ci0gICAgUU9iamVjdDo6Y29ubmVjdChwYWdlUHJveHksIFNJR05BTChyZWNlaXZlZE1lc3Nh
Z2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoUVZhcmlhbnRNYXApKSwgcV9wdHIsIFNJR05BTChtZXNz
YWdlUmVjZWl2ZWQoUVZhcmlhbnRNYXApKSk7Ci19Ci0KLVFCYXNlV2ViVmlldzo6UUJhc2VXZWJW
aWV3KFFCYXNlV2ViVmlld1ByaXZhdGUgJmRkLCBRUXVpY2tJdGVtICpwYXJlbnQpCi0gICAgOiBR
UXVpY2tQYWludGVkSXRlbShwYXJlbnQpCi0gICAgLCBkX3B0cigmZGQpCi17Ci0gICAgZF9wdHIt
PnFfcHRyID0gdGhpczsKLX0KLQotUUJhc2VXZWJWaWV3Ojp+UUJhc2VXZWJWaWV3KCkKLXsKLX0K
LQotdm9pZCBRQmFzZVdlYlZpZXc6OmxvYWQoY29uc3QgUVVybCYgdXJsKQotewotICAgIFFfRChR
QmFzZVdlYlZpZXcpOwotICAgIGQtPnBhZ2VQcm94eS0+bG9hZCh1cmwpOwotfQotCi12b2lkIFFC
YXNlV2ViVmlldzo6cG9zdE1lc3NhZ2UoY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBR
X0QoUUJhc2VXZWJWaWV3KTsKLSAgICBkLT5wYWdlUHJveHktPnBvc3RNZXNzYWdlVG9OYXZpZ2F0
b3JRdE9iamVjdChtZXNzYWdlKTsKLX0KLQotUVVybCBRQmFzZVdlYlZpZXc6OnVybCgpIGNvbnN0
Ci17Ci0gICAgUV9EKGNvbnN0IFFCYXNlV2ViVmlldyk7Ci0gICAgcmV0dXJuIGQtPnBhZ2VQcm94
eS0+dXJsKCk7Ci19Ci0KLWludCBRQmFzZVdlYlZpZXc6OmxvYWRQcm9ncmVzcygpIGNvbnN0Ci17
Ci0gICAgUV9EKGNvbnN0IFFCYXNlV2ViVmlldyk7Ci0gICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+
bG9hZFByb2dyZXNzKCk7Ci19Ci0KLVFTdHJpbmcgUUJhc2VXZWJWaWV3Ojp0aXRsZSgpIGNvbnN0
Ci17Ci0gICAgUV9EKGNvbnN0IFFCYXNlV2ViVmlldyk7Ci0gICAgcmV0dXJuIGQtPnBhZ2VQcm94
eS0+dGl0bGUoKTsKLX0KLQotUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBRQmFzZVdlYlZpZXc6
Om5hdmlnYXRpb25Db250cm9sbGVyKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUUJhc2VXZWJW
aWV3KTsKLSAgICBpZiAoIWQtPm5hdmlnYXRpb25Db250cm9sbGVyKQotICAgICAgICBjb25zdF9j
YXN0PFFCYXNlV2ViVmlld1ByaXZhdGUqPihkKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBuZXcg
UVdlYk5hdmlnYXRpb25Db250cm9sbGVyKGQtPnBhZ2VQcm94eS5kYXRhKCkpOwotICAgIHJldHVy
biBkLT5uYXZpZ2F0aW9uQ29udHJvbGxlcjsKLX0KLQotUVdlYlByZWZlcmVuY2VzKiBRQmFzZVdl
YlZpZXc6OnByZWZlcmVuY2VzKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUUJhc2VXZWJWaWV3
KTsKLSAgICByZXR1cm4gZC0+cGFnZVByb3h5LT5wcmVmZXJlbmNlcygpOwotfQotCi0jaW5jbHVk
ZSAibW9jX3FiYXNld2Vidmlldy5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xYmFzZXdlYnZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVjZjU1
MDEwOGUzMTBiNjE4MGZiNzViNzNmNDNmMTY5NjVhN2IyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FiYXNld2Vidmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0KLSNpZm5kZWYgcWJhc2V3ZWJ2aWV3X2gKLSNkZWZpbmUgcWJhc2V3ZWJ2aWV3X2gK
LQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3Fx
dWlja3BhaW50ZWRpdGVtLmg+Ci0KLWNsYXNzIFFCYXNlV2ViVmlld1ByaXZhdGU7Ci1jbGFzcyBR
V2ViRG93bmxvYWRJdGVtOwotY2xhc3MgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyOwotY2xhc3Mg
UVdlYlByZWZlcmVuY2VzOwotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQYWludGVyOwot
Y2xhc3MgUVVybDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotY2xhc3MgUVdFQktJVF9FWFBPUlQgUUJh
c2VXZWJWaWV3IDogcHVibGljIFFRdWlja1BhaW50ZWRJdGVtIHsKLSAgICBRX09CSkVDVAotICAg
IFFfUFJPUEVSVFkoUVN0cmluZyB0aXRsZSBSRUFEIHRpdGxlIE5PVElGWSB0aXRsZUNoYW5nZWQp
Ci0gICAgUV9QUk9QRVJUWShRVXJsIHVybCBSRUFEIHVybCBOT1RJRlkgdXJsQ2hhbmdlZCkKLSAg
ICBRX1BST1BFUlRZKGludCBsb2FkUHJvZ3Jlc3MgUkVBRCBsb2FkUHJvZ3Jlc3MgTk9USUZZIGxv
YWRQcm9ncmVzc0NoYW5nZWQpCi0gICAgUV9QUk9QRVJUWShRV2ViTmF2aWdhdGlvbkNvbnRyb2xs
ZXIqIG5hdmlnYXRpb24gUkVBRCBuYXZpZ2F0aW9uQ29udHJvbGxlciBDT05TVEFOVCBGSU5BTCkK
LSAgICBRX1BST1BFUlRZKFFXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMgUkVBRCBwcmVmZXJl
bmNlcyBDT05TVEFOVCBGSU5BTCkKLSAgICBRX0VOVU1TKE5hdmlnYXRpb25Qb2xpY3kpCi0gICAg
UV9FTlVNUyhFcnJvclR5cGUpCi1wdWJsaWM6Ci0gICAgZW51bSBOYXZpZ2F0aW9uUG9saWN5IHsK
LSAgICAgICAgVXNlUG9saWN5LAotICAgICAgICBEb3dubG9hZFBvbGljeSwKLSAgICAgICAgSWdu
b3JlUG9saWN5Ci0gICAgfTsKLQotICAgIGVudW0gRXJyb3JUeXBlIHsKLSAgICAgICAgRW5naW5l
RXJyb3IsCi0gICAgICAgIE5ldHdvcmtFcnJvciwKLSAgICAgICAgSHR0cEVycm9yLAotICAgICAg
ICBEb3dubG9hZEVycm9yCi0gICAgfTsKLSAgICB2aXJ0dWFsIH5RQmFzZVdlYlZpZXcoKTsKLQot
ICAgIC8vIEZJWE1FOiBXZSBpbmhlcml0IGZyb20gUVF1aWNrUGFpbnRlZEl0ZW0gdW50aWwgUURl
c2t0b3BXZWJWaWV3IHdvcmtzIG9uIHRvcCBvZiBhIHBsYWluIFFRdWlja0l0ZW0uCi0gICAgdm9p
ZCBwYWludChRUGFpbnRlciopIHsgfQotCi0gICAgUVVybCB1cmwoKSBjb25zdDsKLSAgICBRU3Ry
aW5nIHRpdGxlKCkgY29uc3Q7Ci0gICAgaW50IGxvYWRQcm9ncmVzcygpIGNvbnN0OwotCi0gICAg
UVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZpZ2F0aW9uQ29udHJvbGxlcigpIGNvbnN0Owot
ICAgIFFXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMoKSBjb25zdDsKLQotcHVibGljIFFfU0xP
VFM6Ci0gICAgIHZvaWQgbG9hZChjb25zdCBRVXJsJik7Ci0gICAgIHZvaWQgcG9zdE1lc3NhZ2Uo
Y29uc3QgUVN0cmluZyYpOwotCi1RX1NJR05BTFM6Ci0gICAgdm9pZCB0aXRsZUNoYW5nZWQoY29u
c3QgUVN0cmluZyYgdGl0bGUpOwotICAgIHZvaWQgc3RhdHVzQmFyTWVzc2FnZUNoYW5nZWQoY29u
c3QgUVN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2FkU3RhcnRlZCgpOwotICAgIHZvaWQg
bG9hZFN1Y2NlZWRlZCgpOwotICAgIHZvaWQgbG9hZEZhaWxlZChRQmFzZVdlYlZpZXc6OkVycm9y
VHlwZSBlcnJvclR5cGUsIGludCBlcnJvckNvZGUsIGNvbnN0IFFVcmwmIHVybCk7Ci0gICAgdm9p
ZCBsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCBwcm9ncmVzcyk7Ci0gICAgdm9pZCB1cmxDaGFuZ2Vk
KGNvbnN0IFFVcmwmIHVybCk7Ci0gICAgdm9pZCBtZXNzYWdlUmVjZWl2ZWQoY29uc3QgUVZhcmlh
bnRNYXAmIG1lc3NhZ2UpOwotICAgIHZvaWQgZG93bmxvYWRSZXF1ZXN0ZWQoUVdlYkRvd25sb2Fk
SXRlbSogZG93bmxvYWRJdGVtKTsKLQotcHJvdGVjdGVkOgotICAgIFFCYXNlV2ViVmlldyhRQmFz
ZVdlYlZpZXdQcml2YXRlICZkZCwgUVF1aWNrSXRlbSAqcGFyZW50ID0gMCk7Ci0gICAgLy8gSGlk
ZXMgUU9iamVjdDo6ZF9wdHIgYWxsb3dpbmcgdXMgdG8gdXNlIHRoZSBjb252ZW5pZW5jZSBtYWNy
b3MuCi0gICAgUVNjb3BlZFBvaW50ZXI8UUJhc2VXZWJWaWV3UHJpdmF0ZT4gZF9wdHI7Ci1wcml2
YXRlOgotICAgIFFfREVDTEFSRV9QUklWQVRFKFFCYXNlV2ViVmlldykKLSAgICBmcmllbmQgY2xh
c3MgUXRXZWJQYWdlUHJveHk7Ci19OwotCi0jZW5kaWYgLyogcWJhc2V3ZWJ2aWV3X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3X3Au
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWJhc2V3ZWJ2aWV3X3AuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkNWNmYzMyMWYwNjc2Nzg0N2ZmYTEwZWZhOTUy
OTk1MzE1ZjQzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FiYXNld2Vidmlld19wLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBxYmFz
ZXdlYnZpZXdfcF9oCi0jZGVmaW5lIHFiYXNld2Vidmlld19wX2gKLQotI2luY2x1ZGUgInFiYXNl
d2Vidmlldy5oIgotCi1jbGFzcyBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBRdFdl
YlBhZ2VQcm94eTsKLQotY2xhc3MgUUJhc2VXZWJWaWV3UHJpdmF0ZSB7Ci0gICAgUV9ERUNMQVJF
X1BVQkxJQyhRQmFzZVdlYlZpZXcpCi1wdWJsaWM6Ci0gICAgUUJhc2VXZWJWaWV3UHJpdmF0ZSgp
OwotICAgIHZpcnR1YWwgflFCYXNlV2ViVmlld1ByaXZhdGUoKSB7IH0KLSAgICB2b2lkIHNldFBh
Z2VQcm94eShRdFdlYlBhZ2VQcm94eSopOwotICAgIFFCYXNlV2ViVmlldyogcV9wdHI7Ci0gICAg
UVNjb3BlZFBvaW50ZXI8UXRXZWJQYWdlUHJveHk+IHBhZ2VQcm94eTsKLQotICAgIFFXZWJOYXZp
Z2F0aW9uQ29udHJvbGxlciogbmF2aWdhdGlvbkNvbnRyb2xsZXI7Ci19OwotCi0jZW5kaWYgLyog
cWJhc2V3ZWJ2aWV3X3BfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xZGVza3RvcHdlYnZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
NzFkZWNlNzU0YWY4MDU1YmZmNTVhMjgyYjZjNDQzNDdmNjJlM2ViLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcWRlc2t0b3B3ZWJ2aWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInFkZXNr
dG9wd2Vidmlldy5oIgotCi0jaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJR
dFdlYkVycm9yLmgiCi0jaW5jbHVkZSAiVXRpbHNRdC5oIgotI2luY2x1ZGUgInFkZXNrdG9wd2Vi
dmlld19wLmgiCi0jaW5jbHVkZSAicXdlYmRvd25sb2FkaXRlbS5oIgotI2luY2x1ZGUgInF3ZWJw
cmVmZXJlbmNlc19wLmgiCi0jaW5jbHVkZSA8UUZpbGVEaWFsb2c+Ci0jaW5jbHVkZSA8UXREZWNs
YXJhdGl2ZS9xZGVjbGFyYXRpdmVlbmdpbmUuaD4KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3Fx
dWlja2NhbnZhcy5oPgotI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXF1aWNrdmlldy5oPgotI2lu
Y2x1ZGUgPFF0R3VpL1FDdXJzb3I+Ci0jaW5jbHVkZSA8UXRHdWkvUURlc2t0b3BTZXJ2aWNlcz4K
LSNpbmNsdWRlIDxRdEd1aS9RRHJhZz4KLSNpbmNsdWRlIDxRdEd1aS9RRm9jdXNFdmVudD4KLSNp
bmNsdWRlIDxRdEd1aS9RR3VpQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UXRHdWkvUUhvdmVyRXZl
bnQ+Ci0jaW5jbHVkZSA8UXRHdWkvUUlucHV0TWV0aG9kRXZlbnQ+Ci0jaW5jbHVkZSA8UXRHdWkv
UUtleUV2ZW50PgotI2luY2x1ZGUgPFF0R3VpL1FUb3VjaEV2ZW50PgotI2luY2x1ZGUgPFF0R3Vp
L1FXaGVlbEV2ZW50PgotI2luY2x1ZGUgPFF0V2lkZ2V0cy9RSW5wdXREaWFsb2c+Ci0jaW5jbHVk
ZSA8UXRXaWRnZXRzL1FNZXNzYWdlQm94PgotI2luY2x1ZGUgPFdLT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXIuaD4KLQotUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6UURlc2t0b3BXZWJWaWV3UHJpdmF0
ZSgpCi0gICAgOiBpc0NyYXNoZWQoZmFsc2UpCi17Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3
UHJpdmF0ZTo6ZW5hYmxlTW91c2VFdmVudHMoKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcp
OwotICAgIHEtPnNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpNb3VzZUJ1dHRvbk1hc2spOwot
ICAgIHEtPnNldEFjY2VwdEhvdmVyRXZlbnRzKHRydWUpOwotfQotCi12b2lkIFFEZXNrdG9wV2Vi
Vmlld1ByaXZhdGU6OmRpc2FibGVNb3VzZUV2ZW50cygpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2Vi
Vmlldyk7Ci0gICAgcS0+c2V0QWNjZXB0ZWRNb3VzZUJ1dHRvbnMoUXQ6Ok5vQnV0dG9uKTsKLSAg
ICBxLT5zZXRBY2NlcHRIb3ZlckV2ZW50cyhmYWxzZSk7Ci19Ci0KLVFEZXNrdG9wV2ViVmlldyog
UURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6d2ViVmlldygpCi17Ci0gICAgcmV0dXJuIHFfZnVuYygp
OwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OnNldFZpZXdOZWVkc0Rpc3BsYXko
Y29uc3QgUVJlY3QmIGludmFsaWRhdGVkQXJlYSkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3
KTsKLSAgICBxLT51cGRhdGUoaW52YWxpZGF0ZWRBcmVhKTsKLX0KLQotUVNpemUgUURlc2t0b3BX
ZWJWaWV3UHJpdmF0ZTo6ZHJhd2luZ0FyZWFTaXplKCkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJW
aWV3KTsKLSAgICByZXR1cm4gUVNpemUocS0+d2lkdGgoKSwgcS0+aGVpZ2h0KCkpOwotfQotCi12
b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBRU2l6
ZSYpCi17Ci19Ci0KLWJvb2wgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6aXNBY3RpdmUoKQotewot
ICAgIC8vIEZJWE1FOiBUaGUgc2NlbmUgZ3JhcGggZGlkIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9m
IGJlaW5nIGFjdGl2ZSBvciBub3Qgd2hlbiB0aGlzIHdhcyB3cml0dGVuLgotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6Omhhc0ZvY3VzKCkKLXsKLSAg
ICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICByZXR1cm4gcS0+aGFzRm9jdXMoKTsKLX0KLQot
Ym9vbCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjppc1Zpc2libGUoKQotewotICAgIFFfUShRRGVz
a3RvcFdlYlZpZXcpOwotICAgIHJldHVybiBxLT5pc1Zpc2libGUoKTsKLX0KLQotdm9pZCBRRGVz
a3RvcFdlYlZpZXdQcml2YXRlOjpzdGFydERyYWcoUXQ6OkRyb3BBY3Rpb25zIHN1cHBvcnRlZERy
b3BBY3Rpb25zLCBjb25zdCBRSW1hZ2UmIGRyYWdJbWFnZSwgUU1pbWVEYXRhKiBkYXRhLCBRUG9p
bnQqIGNsaWVudFBvc2l0aW9uLCBRUG9pbnQqIGdsb2JhbFBvc2l0aW9uLCBRdDo6RHJvcEFjdGlv
biogZHJvcEFjdGlvbikKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBRV2luZG93
KiB3aW5kb3cgPSBxLT5jYW52YXMoKTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUURyYWcqIGRyYWcgPSBuZXcgUURyYWcod2luZG93KTsKLSAgICBkcmFnLT5zZXRQ
aXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKGRyYWdJbWFnZSkpOwotICAgIGRyYWctPnNldE1pbWVE
YXRhKGRhdGEpOwotICAgICpkcm9wQWN0aW9uID0gZHJhZy0+ZXhlYyhzdXBwb3J0ZWREcm9wQWN0
aW9ucyk7Ci0gICAgKmdsb2JhbFBvc2l0aW9uID0gUUN1cnNvcjo6cG9zKCk7Ci0gICAgKmNsaWVu
dFBvc2l0aW9uID0gd2luZG93LT5tYXBGcm9tR2xvYmFsKCpnbG9iYWxQb3NpdGlvbik7Ci19Ci0K
LXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVz
KGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikKLXsKLSAgICAvLyBUaGlzIGZlYXR1
cmUgaXMgb25seSB1c2VkIGJ5IFFUb3VjaFdlYlZpZXcuCi19Ci0KLXZvaWQgUURlc2t0b3BXZWJW
aWV3UHJpdmF0ZTo6ZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBRUG9pbnQmLCBjb25zdCBRUmVj
dCYpCi17Ci0gICAgLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgdXNlZCBieSBRVG91Y2hXZWJWaWV3
LgotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVVybChjb25zdCBR
VXJsJiB1cmwpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgZW1pdCBxLT51cmxD
aGFuZ2VkKHVybCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdl
VGl0bGUoY29uc3QgUVN0cmluZyYgbmV3VGl0bGUpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmll
dyk7Ci0gICAgZW1pdCBxLT50aXRsZUNoYW5nZWQobmV3VGl0bGUpOwotfQotCi12b2lkIFFEZXNr
dG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVRvb2xUaXAoY29uc3QgUVN0cmluZyYgbmV3VG9v
bFRpcCkKLXsKLSAgICAvLyBGSVhNRTogQWRkIGEgcHJvcGVyIGltcGxlbWVudGF0aW9uIHdoZW4g
UXQgNSBzdXBwb3J0cyB0b29sdGlwLgotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6
OmRpZENoYW5nZVN0YXR1c1RleHQoY29uc3QgUVN0cmluZyYgbmV3TWVzc2FnZSkKLXsKLSAgICBR
X1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICBlbWl0IHEtPnN0YXR1c0Jhck1lc3NhZ2VDaGFuZ2Vk
KG5ld01lc3NhZ2UpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpZENoYW5n
ZUN1cnNvcihjb25zdCBRQ3Vyc29yJiBuZXdDdXJzb3IpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMg
aXMgYSB0ZW1wb3JhcnkgZml4IHVudGlsIHdlIGdldCBjdXJzb3Igc3VwcG9ydCBpbiBRTUwgaXRl
bXMuCi0gICAgUUd1aUFwcGxpY2F0aW9uOjpzZXRPdmVycmlkZUN1cnNvcihuZXdDdXJzb3IpOwot
fQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmxvYWREaWRCZWdpbigpCi17Ci0gICAg
UV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgZW1pdCBxLT5sb2FkU3RhcnRlZCgpOwotfQotCi12
b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmxvYWREaWRDb21taXQoKQotewotICAgIC8vIE5v
dCB1c2VkIGZvciBRRGVza3RvcFdlYlZpZXcuCi19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJp
dmF0ZTo6bG9hZERpZFN1Y2NlZWQoKQotewotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAg
IGVtaXQgcS0+bG9hZFN1Y2NlZWRlZCgpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZh
dGU6OmxvYWREaWRGYWlsKGNvbnN0IFF0V2ViRXJyb3ImIGVycm9yKQotewotICAgIFFfUShRRGVz
a3RvcFdlYlZpZXcpOwotICAgIGVtaXQgcS0+bG9hZEZhaWxlZChzdGF0aWNfY2FzdDxRRGVza3Rv
cFdlYlZpZXc6OkVycm9yVHlwZT4oZXJyb3IudHlwZSgpKSwgZXJyb3IuZXJyb3JDb2RlKCksIGVy
cm9yLnVybCgpKTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VM
b2FkUHJvZ3Jlc3MoaW50IHBlcmNlbnRhZ2VMb2FkZWQpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2Vi
Vmlldyk7Ci0gICAgZW1pdCBxLT5sb2FkUHJvZ3Jlc3NDaGFuZ2VkKHBlcmNlbnRhZ2VMb2FkZWQp
OwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OnNob3dDb250ZXh0TWVudShRU2hh
cmVkUG9pbnRlcjxRTWVudT4gbWVudSkKLXsKLSAgICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAg
ICAvLyBSZW1vdmUgdGhlIGFjdGl2ZSBtZW51IGluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgdHdpY2UuCi0gICAgaWYgKGFjdGl2ZU1lbnUpCi0gICAgICAgIGFjdGl2ZU1lbnUtPmhpZGUo
KTsKLQotICAgIGlmIChtZW51LT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFX
aW5kb3cqIHdpbmRvdyA9IHEtPmNhbnZhcygpOwotICAgIGlmICghd2luZG93KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhY3RpdmVNZW51ID0gbWVudTsKLQotICAgIGFjdGl2ZU1lbnUtPndpbmRv
dygpLT53aW5JZCgpOyAvLyBFbnN1cmUgdGhhdCB0aGUgbWVudSBoYXMgYSB3aW5kb3cKLSAgICBR
X0FTU0VSVChhY3RpdmVNZW51LT53aW5kb3coKS0+d2luZG93SGFuZGxlKCkpOwotICAgIGFjdGl2
ZU1lbnUtPndpbmRvdygpLT53aW5kb3dIYW5kbGUoKS0+c2V0VHJhbnNpZW50UGFyZW50KHdpbmRv
dyk7Ci0KLSAgICBRUG9pbnQgbWVudVBvc2l0aW9uSW5TY2VuZSA9IHEtPm1hcFRvU2NlbmUobWVu
dS0+cG9zKCkpLnRvUG9pbnQoKTsKLSAgICBtZW51LT5leGVjKHdpbmRvdy0+bWFwVG9HbG9iYWwo
bWVudVBvc2l0aW9uSW5TY2VuZSkpOwotICAgIC8vIFRoZSBsYXN0IGZ1bmN0aW9uIHRvIGdldCBv
dXQgb2YgZXhlYygpIGNsZWFyIHRoZSBsb2NhbCBjb3B5LgotICAgIGlmIChhY3RpdmVNZW51ID09
IG1lbnUpCi0gICAgICAgIGFjdGl2ZU1lbnUuY2xlYXIoKTsKLX0KLQotdm9pZCBRRGVza3RvcFdl
YlZpZXdQcml2YXRlOjpoaWRlQ29udGV4dE1lbnUoKQotewotICAgIGlmIChhY3RpdmVNZW51KQot
ICAgICAgICBhY3RpdmVNZW51LT5oaWRlKCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3UHJp
dmF0ZTo6cnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFFTdHJpbmcmIGFsZXJ0VGV4dCkKLXsKLSNp
Zm5kZWYgUVRfTk9fTUVTU0FHRUJPWAotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIGNv
bnN0IFFTdHJpbmcgdGl0bGUgPSBRT2JqZWN0Ojp0cigiSmF2YVNjcmlwdCBBbGVydCAtICUxIiku
YXJnKHEtPnVybCgpLmhvc3QoKSk7Ci0gICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7Ci0gICAgUU1l
c3NhZ2VCb3g6OmluZm9ybWF0aW9uKDAsIHRpdGxlLCBlc2NhcGVIdG1sKGFsZXJ0VGV4dCksIFFN
ZXNzYWdlQm94OjpPayk7Ci0gICAgZW5hYmxlTW91c2VFdmVudHMoKTsKLSNlbHNlCi0gICAgUV9V
TlVTRUQoYWxlcnRUZXh0KTsKLSNlbmRpZgotfQotCi1ib29sIFFEZXNrdG9wV2ViVmlld1ByaXZh
dGU6OnJ1bkphdmFTY3JpcHRDb25maXJtKGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
Ym9vbCByZXN1bHQgPSB0cnVlOwotI2lmbmRlZiBRVF9OT19NRVNTQUdFQk9YCi0gICAgUV9RKFFE
ZXNrdG9wV2ViVmlldyk7Ci0gICAgY29uc3QgUVN0cmluZyB0aXRsZSA9IFFPYmplY3Q6OnRyKCJK
YXZhU2NyaXB0IENvbmZpcm0gLSAlMSIpLmFyZyhxLT51cmwoKS5ob3N0KCkpOwotICAgIGRpc2Fi
bGVNb3VzZUV2ZW50cygpOwotICAgIHJlc3VsdCA9IFFNZXNzYWdlQm94OjpZZXMgPT0gUU1lc3Nh
Z2VCb3g6OmluZm9ybWF0aW9uKDAsIHRpdGxlLCBlc2NhcGVIdG1sKG1lc3NhZ2UpLCBRTWVzc2Fn
ZUJveDo6WWVzLCBRTWVzc2FnZUJveDo6Tm8pOwotICAgIGVuYWJsZU1vdXNlRXZlbnRzKCk7Ci0j
ZWxzZQotICAgIFFfVU5VU0VEKG1lc3NhZ2UpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotUVN0cmluZyBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0UHJvbXB0
KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgYm9v
bCYgb2spCi17Ci0jaWZuZGVmIFFUX05PX0lOUFVURElBTE9HCi0gICAgUV9RKFFEZXNrdG9wV2Vi
Vmlldyk7Ci0gICAgY29uc3QgUVN0cmluZyB0aXRsZSA9IFFPYmplY3Q6OnRyKCJKYXZhU2NyaXB0
IFByb21wdCAtICUxIikuYXJnKHEtPnVybCgpLmhvc3QoKSk7Ci0gICAgZGlzYWJsZU1vdXNlRXZl
bnRzKCk7Ci0gICAgUVN0cmluZyByZXN1bHQgPSBRSW5wdXREaWFsb2c6OmdldFRleHQoMCwgdGl0
bGUsIGVzY2FwZUh0bWwobWVzc2FnZSksIFFMaW5lRWRpdDo6Tm9ybWFsLCBkZWZhdWx0VmFsdWUs
ICZvayk7Ci0gICAgZW5hYmxlTW91c2VFdmVudHMoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vs
c2UKLSAgICBRX1VOVVNFRChtZXNzYWdlKTsKLSAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotI2Vu
ZGlmCi19Ci0KLVFEZXNrdG9wV2ViVmlldzo6UURlc2t0b3BXZWJWaWV3KFFRdWlja0l0ZW0qIHBh
cmVudCkKLSAgICA6IFFCYXNlV2ViVmlldygqKG5ldyBRRGVza3RvcFdlYlZpZXdQcml2YXRlKSwg
cGFyZW50KQotewotICAgIFFfRChRRGVza3RvcFdlYlZpZXcpOwotICAgIGQtPmluaXQoKTsKLX0K
LQotUURlc2t0b3BXZWJWaWV3OjpRRGVza3RvcFdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgUVF1aWNrSXRlbSogcGFyZW50KQotICAg
IDogUUJhc2VXZWJWaWV3KCoobmV3IFFEZXNrdG9wV2ViVmlld1ByaXZhdGUpLCBwYXJlbnQpCi17
Ci0gICAgUV9EKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgZC0+aW5pdChjb250ZXh0UmVmLCBwYWdl
R3JvdXBSZWYpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmluaXQoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKLXsKLSAgICBz
ZXRQYWdlUHJveHkobmV3IFF0V2ViUGFnZVByb3h5KHRoaXMsIDAsIHRoaXMsIGNvbnRleHRSZWYs
IHBhZ2VHcm91cFJlZikpOwotICAgIFFXZWJQcmVmZXJlbmNlc1ByaXZhdGU6OmdldChwYWdlUHJv
eHktPnByZWZlcmVuY2VzKCkpLT5zZXRBdHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGZhbHNlKTsKLSAgICBwYWdlUHJveHktPmlu
aXQoKTsKLSAgICBlbmFibGVNb3VzZUV2ZW50cygpOwotfQotCi1RRGVza3RvcFdlYlZpZXc6On5R
RGVza3RvcFdlYlZpZXcoKQotewotfQotCi1zdGF0aWMgdm9pZCBwYWludENyYXNoZWRQYWdlKFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdEYmIHJlY3QpCi17Ci0gICAgcGFpbnRlci0+Zmls
bFJlY3QocmVjdCwgUXQ6OmdyYXkpOwotICAgIHBhaW50ZXItPmRyYXdUZXh0KHJlY3QsIFF0OjpB
bGlnbkNlbnRlciwgUUxhdGluMVN0cmluZygiOigiKSk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJW
aWV3OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQo
ZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6a2V5UmVsZWFzZUV2ZW50KFFLZXlF
dmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNr
dG9wV2ViVmlldzo6aW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCogZXZlbnQpCi17
Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6Zm9j
dXNJbkV2ZW50KFFGb2N1c0V2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7
Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3Ojpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KiBl
dmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJW
aWV3Ojptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIGZvcmNlQWN0
aXZlRm9jdXMoKTsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BX
ZWJWaWV3Ojptb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+
ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6bW91c2VSZWxlYXNlRXZl
bnQoUU1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQot
dm9pZCBRRGVza3RvcFdlYlZpZXc6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCog
ZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2Vi
Vmlldzo6d2hlZWxFdmVudChRV2hlZWxFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQo
ZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6aG92ZXJFbnRlckV2ZW50KFFIb3Zl
ckV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURl
c2t0b3BXZWJWaWV3Ojpob3Zlck1vdmVFdmVudChRSG92ZXJFdmVudCogZXZlbnQpCi17Ci0gICAg
dGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFEZXNrdG9wV2ViVmlldzo6aG92ZXJMZWF2
ZUV2ZW50KFFIb3ZlckV2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19
Ci0KLXZvaWQgUURlc2t0b3BXZWJWaWV3OjpkcmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50KiBl
dmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUURlc2t0b3BXZWJW
aWV3OjpkcmFnRW50ZXJFdmVudChRRHJhZ0VudGVyRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMt
PmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OmRyYWdMZWF2ZUV2ZW50
KFFEcmFnTGVhdmVFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQot
Ci12b2lkIFFEZXNrdG9wV2ViVmlldzo6ZHJvcEV2ZW50KFFEcm9wRXZlbnQqIGV2ZW50KQotewot
ICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6Omdlb21l
dHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBjb25zdCBRUmVjdEYmIG9sZEdl
b21ldHJ5KQotewotICAgIFFfRChRRGVza3RvcFdlYlZpZXcpOwotICAgIFFRdWlja1BhaW50ZWRJ
dGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsKLSAgICBpZiAo
bmV3R2VvbWV0cnkuc2l6ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUoKSkKLSAgICAgICAgZC0+cGFn
ZVByb3h5LT5zZXREcmF3aW5nQXJlYVNpemUobmV3R2VvbWV0cnkuc2l6ZSgpLnRvU2l6ZSgpKTsK
LX0KLQotdm9pZCBRRGVza3RvcFdlYlZpZXc6OnBhaW50KFFQYWludGVyKiBwYWludGVyKQotewot
ICAgIFFfRChRRGVza3RvcFdlYlZpZXcpOwotICAgIGNvbnN0IFFSZWN0RiByZWN0ID0gYm91bmRp
bmdSZWN0KCk7Ci0gICAgaWYgKGQtPmlzQ3Jhc2hlZCkgewotICAgICAgICBwYWludENyYXNoZWRQ
YWdlKHBhaW50ZXIsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZC0+cGFn
ZVByb3h5LT5wYWludChwYWludGVyLCByZWN0LnRvQWxpZ25lZFJlY3QoKSk7Ci19Ci0KLWJvb2wg
UURlc2t0b3BXZWJWaWV3OjpldmVudChRRXZlbnQqIGV2KQotewotICAgIFFfRChRRGVza3RvcFdl
YlZpZXcpOwotICAgIGlmIChkLT5wYWdlUHJveHktPmhhbmRsZUV2ZW50KGV2KSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKGV2LT50eXBlKCkgPT0gUUV2ZW50OjpJbnB1dE1ldGhvZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBhbiBl
bmRsZXNzIGxvb3AgaW4gY29ubmVjdGlvbiB3aXRoIFFRdWlja0l0ZW06OmV2ZW50KCkuCi0gICAg
cmV0dXJuIFFRdWlja0l0ZW06OmV2ZW50KGV2KTsKLX0KLQotV0tQYWdlUmVmIFFEZXNrdG9wV2Vi
Vmlldzo6cGFnZVJlZigpIGNvbnN0Ci17Ci0gICAgUV9EKGNvbnN0IFFEZXNrdG9wV2ViVmlldyk7
Ci0gICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+cGFnZVJlZigpOwotfQotCi12b2lkIFFEZXNrdG9w
V2ViVmlld1ByaXZhdGU6OnByb2Nlc3NEaWRDcmFzaCgpCi17Ci0gICAgUV9RKFFEZXNrdG9wV2Vi
Vmlldyk7Ci0gICAgaXNDcmFzaGVkID0gdHJ1ZTsKLSAgICBxLT51cGRhdGUoKTsKLX0KLQotdm9p
ZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaWRSZWxhdW5jaFByb2Nlc3MoKQotewotICAgIFFf
UShRRGVza3RvcFdlYlZpZXcpOwotICAgIGlzQ3Jhc2hlZCA9IGZhbHNlOwotICAgIHEtPnVwZGF0
ZSgpOwotfQotCi1RSlNFbmdpbmUqIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmVuZ2luZSgpCi17
Ci0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgUVF1aWNrVmlldyogdmlldyA9IHFvYmpl
Y3RfY2FzdDxRUXVpY2tWaWV3Kj4ocS0+Y2FudmFzKCkpOwotICAgIGlmICh2aWV3KQotICAgICAg
ICByZXR1cm4gdmlldy0+ZW5naW5lKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgUURlc2t0
b3BXZWJWaWV3UHJpdmF0ZTo6Y2hvb3NlRmlsZXMoV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJl
ZiBsaXN0ZW5lclJlZiwgY29uc3QgUVN0cmluZ0xpc3QmIHNlbGVjdGVkRmlsZU5hbWVzLCBRdFZp
ZXdJbnRlcmZhY2U6OkZpbGVDaG9vc2VyVHlwZSB0eXBlKQotewotI2lmbmRlZiBRVF9OT19GSUxF
RElBTE9HCi0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0gICAgb3BlblBhbmVsUmVzdWx0TGlz
dGVuZXIgPSBsaXN0ZW5lclJlZjsKLQotICAgIC8vIFF0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlw
bGUgZmlsZXMgc3VnZ2VzdGlvbiwgc28gd2UgZ2V0IGp1c3QgdGhlIGZpcnN0IHN1Z2dlc3Rpb24u
Ci0gICAgUVN0cmluZyBzZWxlY3RlZEZpbGVOYW1lOwotICAgIGlmICghc2VsZWN0ZWRGaWxlTmFt
ZXMuaXNFbXB0eSgpKQotICAgICAgICBzZWxlY3RlZEZpbGVOYW1lID0gc2VsZWN0ZWRGaWxlTmFt
ZXMuYXQoMCk7Ci0KLSAgICBRX0FTU0VSVCghZmlsZURpYWxvZyk7Ci0KLSAgICBRV2luZG93KiB3
aW5kb3cgPSBxLT5jYW52YXMoKTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZmlsZURpYWxvZyA9IG5ldyBRRmlsZURpYWxvZygwLCBRU3RyaW5nKCksIHNlbGVjdGVk
RmlsZU5hbWUpOwotICAgIGZpbGVEaWFsb2ctPndpbmRvdygpLT53aW5JZCgpOyAvLyBFbnN1cmUg
dGhhdCB0aGUgZGlhbG9nIGhhcyBhIHdpbmRvdwotICAgIFFfQVNTRVJUKGZpbGVEaWFsb2ctPndp
bmRvdygpLT53aW5kb3dIYW5kbGUoKSk7Ci0gICAgZmlsZURpYWxvZy0+d2luZG93KCktPndpbmRv
d0hhbmRsZSgpLT5zZXRUcmFuc2llbnRQYXJlbnQod2luZG93KTsKLQotICAgIGZpbGVEaWFsb2ct
Pm9wZW4ocV9mdW5jKCksIFNMT1QoX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVjdGVkKCkpKTsKLQot
ICAgIHFfZnVuYygpLT5jb25uZWN0KGZpbGVEaWFsb2csIFNJR05BTChmaW5pc2hlZChpbnQpKSwg
U0xPVChfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCkpKTsKLSNlbmRpZgotfQotCi12b2lkIFFE
ZXNrdG9wV2ViVmlld1ByaXZhdGU6Ol9xX29uT3BlblBhbmVsRmlsZXNTZWxlY3RlZCgpCi17Ci0g
ICAgY29uc3QgUVN0cmluZ0xpc3QgZmlsZUxpc3QgPSBmaWxlRGlhbG9nLT5zZWxlY3RlZEZpbGVz
KCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gd2tGaWxlcyhmaWxlTGlzdC5zaXpl
KCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbGVMaXN0LnNpemUoKTsgKytp
KQotICAgICAgICB3a0ZpbGVzW2ldID0gV2ViVVJMOjpjcmVhdGUoUVVybDo6ZnJvbUxvY2FsRmls
ZShmaWxlTGlzdC5hdChpKSkudG9TdHJpbmcoKSk7Ci0KLSAgICBXS09wZW5QYW5lbFJlc3VsdExp
c3RlbmVyQ2hvb3NlRmlsZXMob3BlblBhbmVsUmVzdWx0TGlzdGVuZXIsIHRvQVBJKEltbXV0YWJs
ZUFycmF5OjphZG9wdCh3a0ZpbGVzKS5sZWFrUmVmKCkpKTsKLX0KLQotdm9pZCBRRGVza3RvcFdl
YlZpZXdQcml2YXRlOjpfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCByZXN1bHQpCi17Ci0gICAg
aWYgKHJlc3VsdCA9PSBRRGlhbG9nOjpSZWplY3RlZCkKLSAgICAgICAgV0tPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lckNhbmNlbChvcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcik7Ci0KLSAgICBmaWxlRGlh
bG9nLT5kZWxldGVMYXRlcigpOwotICAgIGZpbGVEaWFsb2cgPSAwOwotfQotCi12b2lkIFFEZXNr
dG9wV2ViVmlld1ByaXZhdGU6OmRpZE1vdXNlTW92ZU92ZXJFbGVtZW50KGNvbnN0IFFVcmwmIGxp
bmtVUkwsIGNvbnN0IFFTdHJpbmcmIGxpbmtUaXRsZSkKLXsKLSAgICBpZiAobGlua1VSTCA9PSBs
YXN0SG92ZXJlZFVSTCAmJiBsaW5rVGl0bGUgPT0gbGFzdEhvdmVyZWRUaXRsZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIFFfUShRRGVza3RvcFdlYlZpZXcpOwotICAgIGxhc3RIb3ZlcmVkVVJMID0g
bGlua1VSTDsKLSAgICBsYXN0SG92ZXJlZFRpdGxlID0gbGlua1RpdGxlOwotICAgIGVtaXQgcS0+
bGlua0hvdmVyZWQobGFzdEhvdmVyZWRVUkwsIGxhc3RIb3ZlcmVkVGl0bGUpOwotfQotCi12b2lk
IFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRvd25sb2FkUmVxdWVzdGVkKFFXZWJEb3dubG9hZEl0
ZW0qIGRvd25sb2FkSXRlbSkKLXsKLSAgICBpZiAoIWRvd25sb2FkSXRlbSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUV9RKFFEZXNrdG9wV2ViVmlldyk7Ci0KLSAgICBRRGVjbGFyYXRpdmVFbmdp
bmU6OnNldE9iamVjdE93bmVyc2hpcChkb3dubG9hZEl0ZW0sIFFEZWNsYXJhdGl2ZUVuZ2luZTo6
SmF2YVNjcmlwdE93bmVyc2hpcCk7Ci0gICAgZW1pdCBxLT5kb3dubG9hZFJlcXVlc3RlZChkb3du
bG9hZEl0ZW0pOwotfQotCi1zdGF0aWMgUXRQb2xpY3lJbnRlcmZhY2U6OlBvbGljeUFjdGlvbiB0
b1BvbGljeUFjdGlvbihRRGVza3RvcFdlYlZpZXc6Ok5hdmlnYXRpb25Qb2xpY3kgcG9saWN5KQot
ewotICAgIHN3aXRjaCAocG9saWN5KSB7Ci0gICAgY2FzZSBRRGVza3RvcFdlYlZpZXc6OlVzZVBv
bGljeToKLSAgICAgICAgcmV0dXJuIFF0UG9saWN5SW50ZXJmYWNlOjpVc2U7Ci0gICAgY2FzZSBR
RGVza3RvcFdlYlZpZXc6OkRvd25sb2FkUG9saWN5OgotICAgICAgICByZXR1cm4gUXRQb2xpY3lJ
bnRlcmZhY2U6OkRvd25sb2FkOwotICAgIGNhc2UgUURlc2t0b3BXZWJWaWV3OjpJZ25vcmVQb2xp
Y3k6Ci0gICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6SWdub3JlOwotICAgIH0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUXRQb2xpY3lJbnRlcmZhY2U6Okln
bm9yZTsKLX0KLQotc3RhdGljIGJvb2wgaGFzTWV0YU1ldGhvZChRT2JqZWN0KiBvYmplY3QsIGNv
bnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgaW50IG1ldGhvZEluZGV4ID0gb2JqZWN0LT5t
ZXRhT2JqZWN0KCktPmluZGV4T2ZNZXRob2QoUU1ldGFPYmplY3Q6Om5vcm1hbGl6ZWRTaWduYXR1
cmUobWV0aG9kTmFtZSkpOwotICAgIHJldHVybiBtZXRob2RJbmRleCA+PSAwICYmIG1ldGhvZElu
ZGV4IDwgb2JqZWN0LT5tZXRhT2JqZWN0KCktPm1ldGhvZENvdW50KCk7Ci19Ci0KLS8qIQotICAg
IFxxbWxtZXRob2QgTmF2aWdhdGlvblBvbGljeSBEZXNrdG9wV2ViVmlldzo6bmF2aWdhdGlvblBv
bGljeUZvclVybCh1cmwsIGJ1dHRvbiwgbW9kaWZpZXJzKQotCi0gICAgVGhpcyBtZXRob2Qgc2hv
dWxkIGJlIGltcGxlbWVudGVkIGJ5IHRoZSB1c2VyIG9mIERlc2t0b3BXZWJWaWV3IGVsZW1lbnQu
Ci0KLSAgICBJdCB3aWxsIGJlIGNhbGxlZCB0byBkZWNpZGUgdGhlIHBvbGljeSBmb3IgYSBuYXZp
Z2F0aW9uOiB3aGV0aGVyIHRoZSBXZWJWaWV3IHNob3VsZCBpZ25vcmUgdGhlIG5hdmlnYXRpb24s
Ci0gICAgY29udGludWUgaXQgb3Igc3RhcnQgYSBkb3dubG9hZC4gVGhlIHJldHVybiB2YWx1ZSBt
dXN0IGJlIG9uZSBvZiB0aGUgcG9saWNpZXMgaW4gdGhlIE5hdmlnYXRpb25Qb2xpY3kgZW51bWVy
YXRpb24uCi0qLwotUXRQb2xpY3lJbnRlcmZhY2U6OlBvbGljeUFjdGlvbiBRRGVza3RvcFdlYlZp
ZXdQcml2YXRlOjpuYXZpZ2F0aW9uUG9saWN5Rm9yVVJMKGNvbnN0IFFVcmwmIHVybCwgUXQ6Ok1v
dXNlQnV0dG9uIGJ1dHRvbiwgUXQ6OktleWJvYXJkTW9kaWZpZXJzIG1vZGlmaWVycykKLXsKLSAg
ICBRX1EoUURlc2t0b3BXZWJWaWV3KTsKLSAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHRoaXMgZmly
c3QgYmVjYXVzZSBpbnZva2VNZXRob2QoKSB3YXJucyBpZiB0aGUgbWV0aG9kIGRvZXNuJ3QgZXhp
c3QgZm9yIHRoZSBvYmplY3QuCi0gICAgaWYgKCFoYXNNZXRhTWV0aG9kKHEsICJuYXZpZ2F0aW9u
UG9saWN5Rm9yVXJsKFFWYXJpYW50LFFWYXJpYW50LFFWYXJpYW50KSIpKQotICAgICAgICByZXR1
cm4gUXRQb2xpY3lJbnRlcmZhY2U6OlVzZTsKLQotICAgIFFWYXJpYW50IHJldDsKLSAgICBpZiAo
UU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChxLCAibmF2aWdhdGlvblBvbGljeUZvclVybCIsIFFf
UkVUVVJOX0FSRyhRVmFyaWFudCwgcmV0KSwgUV9BUkcoUVZhcmlhbnQsIHVybCksIFFfQVJHKFFW
YXJpYW50LCBidXR0b24pLCBRX0FSRyhRVmFyaWFudCwgUVZhcmlhbnQobW9kaWZpZXJzKSkpKQot
ICAgICAgICByZXR1cm4gdG9Qb2xpY3lBY3Rpb24oc3RhdGljX2Nhc3Q8UURlc2t0b3BXZWJWaWV3
OjpOYXZpZ2F0aW9uUG9saWN5PihyZXQudG9JbnQoKSkpOwotICAgIHJldHVybiBRdFBvbGljeUlu
dGVyZmFjZTo6VXNlOwotfQotCi0jaW5jbHVkZSAibW9jX3FkZXNrdG9wd2Vidmlldy5jcHAiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmll
dy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXcuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA4M2ZhN2YzMzMxY2IwY2FkMGRjMjRiM2Ni
YzAwYWVmZDY0MzZhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oCisr
KyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYg
cWRlc2t0b3B3ZWJ2aWV3X2gKLSNkZWZpbmUgcWRlc2t0b3B3ZWJ2aWV3X2gKLQotI2luY2x1ZGUg
InFiYXNld2Vidmlldy5oIgotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLQotY2xhc3MgUURl
c2t0b3BXZWJWaWV3UHJpdmF0ZTsKLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRRm9jdXNF
dmVudDsKLWNsYXNzIFFNb3VzZUV2ZW50OwotY2xhc3MgUUhvdmVyRXZlbnQ7Ci1jbGFzcyBRSW5w
dXRNZXRob2RFdmVudDsKLWNsYXNzIFFLZXlFdmVudDsKLWNsYXNzIFFQYWludGVyOwotY2xhc3Mg
UVJlY3RGOwotY2xhc3MgUURyYWdFbnRlckV2ZW50OwotY2xhc3MgUURyYWdNb3ZlRXZlbnQ7Ci1j
bGFzcyBRRHJhZ0xlYXZlRXZlbnQ7Ci1jbGFzcyBRRHJvcEV2ZW50OwotY2xhc3MgUVRvdWNoRXZl
bnQ7Ci1jbGFzcyBRV2hlZWxFdmVudDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlV0tDb250ZXh0KiBXS0NvbnRleHRSZWY7Ci10eXBlZGVmIGNvbnN0IHN0
cnVjdCBPcGFxdWVXS1BhZ2VHcm91cCogV0tQYWdlR3JvdXBSZWY7Ci10eXBlZGVmIGNvbnN0IHN0
cnVjdCBPcGFxdWVXS1BhZ2UqIFdLUGFnZVJlZjsKLQotbmFtZXNwYWNlIFdUUiB7Ci0gICAgY2xh
c3MgUGxhdGZvcm1XZWJWaWV3OwotfQotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRRGVza3RvcFdl
YlZpZXcgOiBwdWJsaWMgUUJhc2VXZWJWaWV3IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAg
IFFEZXNrdG9wV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKLSAgICB2aXJ0dWFsIH5R
RGVza3RvcFdlYlZpZXcoKTsKLQotUV9TSUdOQUxTOgotICAgIHZvaWQgbGlua0hvdmVyZWQoY29u
c3QgUVVybCYgdXJsLCBjb25zdCBRU3RyaW5nJiB0aXRsZSk7Ci0KLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
a2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBpbnB1dE1ldGhv
ZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGZvY3VzSW5FdmVu
dChRRm9jdXNFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBmb2N1c091dEV2ZW50KFFGb2N1c0V2
ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCAqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQgKik7Ci0gICAgdmly
dHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50ICopOwotICAgIHZpcnR1YWwg
dm9pZCBtb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQgKik7Ci0gICAgdmlydHVhbCB2
b2lkIHdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaG92ZXJFbnRl
ckV2ZW50KFFIb3ZlckV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGhvdmVyTW92ZUV2ZW50KFFI
b3ZlckV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGhvdmVyTGVhdmVFdmVudChRSG92ZXJFdmVu
dCopOwotICAgIHZpcnR1YWwgdm9pZCBkcmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50Kik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCopOwotICAgIHZp
cnR1YWwgdm9pZCBkcmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZlbnQqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZHJvcEV2ZW50KFFEcm9wRXZlbnQqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRy
eUNoYW5nZWQoY29uc3QgUVJlY3RGJiwgY29uc3QgUVJlY3RGJik7Ci0gICAgdm9pZCBwYWludChR
UGFpbnRlciopOwotICAgIHZpcnR1YWwgYm9vbCBldmVudChRRXZlbnQqKTsKLQotcHJpdmF0ZToK
LSAgICBRRGVza3RvcFdlYlZpZXcoV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiwgUVF1aWNr
SXRlbSogcGFyZW50ID0gMCk7Ci0gICAgV0tQYWdlUmVmIHBhZ2VSZWYoKSBjb25zdDsKLSAgICBR
X1BSSVZBVEVfU0xPVChkX2Z1bmMoKSwgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQo
KSk7Ci0gICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25PcGVuUGFuZWxGaW5p
c2hlZChpbnQgcmVzdWx0KSk7Ci0KLSAgICBmcmllbmQgY2xhc3MgV1RSOjpQbGF0Zm9ybVdlYlZp
ZXc7Ci0gICAgUV9ERUNMQVJFX1BSSVZBVEUoUURlc2t0b3BXZWJWaWV3KQotfTsKLQotUU1MX0RF
Q0xBUkVfVFlQRShRRGVza3RvcFdlYlZpZXcpCi1RX0RFQ0xBUkVfTUVUQVRZUEUoUURlc2t0b3BX
ZWJWaWV3OjpOYXZpZ2F0aW9uUG9saWN5KQotCi0jZW5kaWYgLyogcWRlc2t0b3B3ZWJ2aWV3X2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3
ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2
aWV3X3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyNWUwYmQzNDM4NDRkMGM2
NmI5MjcwZWI5OTlmYjA4ZWNmYTdjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vi
dmlld19wLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpZm5kZWYgcWRlc2t0b3B3ZWJ2aWV3X3BfaAotI2RlZmluZSBxZGVza3RvcHdlYnZpZXdf
cF9oCi0KLSNpbmNsdWRlICJRdFBvbGljeUludGVyZmFjZS5oIgotI2luY2x1ZGUgIlF0Vmlld0lu
dGVyZmFjZS5oIgotI2luY2x1ZGUgInFiYXNld2Vidmlld19wLmgiCi0jaW5jbHVkZSAicWRlc2t0
b3B3ZWJ2aWV3LmgiCi0KLWNsYXNzIFFGaWxlRGlhbG9nOwotCi1jbGFzcyBRRGVza3RvcFdlYlZp
ZXdQcml2YXRlIDogcHVibGljIFFCYXNlV2ViVmlld1ByaXZhdGUsIHB1YmxpYyBXZWJLaXQ6OlF0
Vmlld0ludGVyZmFjZSwgcHVibGljIFdlYktpdDo6UXRQb2xpY3lJbnRlcmZhY2UKLXsKLSAgICBR
X0RFQ0xBUkVfUFVCTElDKFFEZXNrdG9wV2ViVmlldykKLXB1YmxpYzoKLSAgICBRRGVza3RvcFdl
YlZpZXdQcml2YXRlKCk7Ci0gICAgdm9pZCBpbml0KFdLQ29udGV4dFJlZiA9IDAsIFdLUGFnZUdy
b3VwUmVmID0gMCk7Ci0KLSAgICBzdGF0aWMgUURlc2t0b3BXZWJWaWV3KiBjcmVhdGVWaWV3V2l0
aFBhZ2VHcm91cChXS1BhZ2VHcm91cFJlZik7Ci0KLSAgICBRRGVza3RvcFdlYlZpZXcqIHdlYlZp
ZXcoKTsKLSAgICB2b2lkIF9xX29uT3BlblBhbmVsRmlsZXNTZWxlY3RlZCgpOwotICAgIHZvaWQg
X3Ffb25PcGVuUGFuZWxGaW5pc2hlZChpbnQgcmVzdWx0KTsKLSAgICB2b2lkIGVuYWJsZU1vdXNl
RXZlbnRzKCk7Ci0gICAgdm9pZCBkaXNhYmxlTW91c2VFdmVudHMoKTsKLQotICAgIGJvb2wgaXND
cmFzaGVkOwotCi1wcml2YXRlOgotICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIFF0Vmlld0ludGVy
ZmFjZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYp
OwotCi0gICAgdmlydHVhbCBRU2l6ZSBkcmF3aW5nQXJlYVNpemUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgY29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFFTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIHNj
cm9sbFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2ludCYgcG9zKSB7IH0KLQotICAgIHZpcnR1
YWwgYm9vbCBpc0FjdGl2ZSgpOwotICAgIHZpcnR1YWwgYm9vbCBoYXNGb2N1cygpOwotICAgIHZp
cnR1YWwgYm9vbCBpc1Zpc2libGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoUXQ6
OkRyb3BBY3Rpb25zIHN1cHBvcnRlZERyb3BBY3Rpb25zLCBjb25zdCBRSW1hZ2UmIGRyYWdJbWFn
ZSwgUU1pbWVEYXRhKiwgUVBvaW50KiBjbGllbnRQb3NpdGlvbiwgUVBvaW50KiBnbG9iYWxQb3Np
dGlvbiwgUXQ6OkRyb3BBY3Rpb24qIGRyb3BBY3Rpb24pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRD
aGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBRUG9pbnQmLCBj
b25zdCBRUmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVVybChjb25zdCBRVXJs
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFFTdHJpbmcmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVG9vbFRpcChjb25zdCBRU3RyaW5nJik7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZVN0YXR1c1RleHQoY29uc3QgUVN0cmluZyYpOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VDdXJzb3IoY29uc3QgUUN1cnNvciYpOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkRGlkQmVnaW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZENvbW1pdCgpOwotICAg
IHZpcnR1YWwgdm9pZCBsb2FkRGlkU3VjY2VlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlk
RmFpbChjb25zdCBRdFdlYkVycm9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUxvYWRQ
cm9ncmVzcyhpbnQpOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShRU2hhcmVk
UG9pbnRlcjxRTWVudT4pOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4dE1lbnUoKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgUVN0cmluZyYpOwotICAg
IHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBRU3RyaW5nJik7Ci0gICAg
dmlydHVhbCBRU3RyaW5nIHJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmluZyYsIGNvbnN0
IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgYm9vbCYgb2spOwotCi0gICAgdmlydHVhbCB2b2lkIHBy
b2Nlc3NEaWRDcmFzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsK
LQotICAgIHZpcnR1YWwgUUpTRW5naW5lKiBlbmdpbmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBj
aG9vc2VGaWxlcyhXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmLCBjb25zdCBRU3RyaW5nTGlz
dCYgc2VsZWN0ZWRGaWxlTmFtZXMsIFF0Vmlld0ludGVyZmFjZTo6RmlsZUNob29zZXJUeXBlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWRSZXF1ZXN0ZWQoUVdlYkRvd25sb2FkSXRlbSogZG93
bmxvYWRJdGVtKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3VzZU1vdmVPdmVyRWxlbWVudChj
b25zdCBRVXJsJiwgY29uc3QgUVN0cmluZyYpOwotCi0gICAgLy8gUXRQb2xpY3lJbnRlcmZhY2Uu
Ci0gICAgdmlydHVhbCBRdFBvbGljeUludGVyZmFjZTo6UG9saWN5QWN0aW9uIG5hdmlnYXRpb25Q
b2xpY3lGb3JVUkwoY29uc3QgUVVybCYsIFF0OjpNb3VzZUJ1dHRvbiwgUXQ6OktleWJvYXJkTW9k
aWZpZXJzKTsKLQotICAgIFFTaGFyZWRQb2ludGVyPFFNZW51PiBhY3RpdmVNZW51OwotCi0gICAg
UUZpbGVEaWFsb2cqIGZpbGVEaWFsb2c7Ci0gICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJl
ZiBvcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKLQotICAgIFFVcmwgbGFzdEhvdmVyZWRVUkw7Ci0g
ICAgUVN0cmluZyBsYXN0SG92ZXJlZFRpdGxlOwotfTsKLQotI2VuZGlmIC8qIHFkZXNrdG9wd2Vi
dmlld19wX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnBhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmMDUyNTY2OTY1MTRkMzgyNWZlZjYwYzcwYmI2N2Uy
NjFlNzBhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInFxdWlja3dlYnBhZ2UuaCIK
KworI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKKyNpbmNsdWRlICJxcXVpY2t3
ZWJ2aWV3LmgiCisjaW5jbHVkZSA8UXRDb3JlL1FVcmw+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZS9RUXVpY2tDYW52YXM+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RU0dFbmdpbmU+CisKK1FR
dWlja1dlYlBhZ2U6OlFRdWlja1dlYlBhZ2UoUVF1aWNrSXRlbSogcGFyZW50KQorICAgIDogUVF1
aWNrSXRlbShwYXJlbnQpCisgICAgLCBkKG5ldyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSh0aGlzKSkK
K3sKKyAgICBzZXRGbGFnKEl0ZW1IYXNDb250ZW50cyk7CisKKyAgICAvLyBXZSBkbyB0aGUgdHJh
bnNmb3JtIGZyb20gdGhlIHRvcCBsZWZ0IHNvIHRoZSB2aWV3cG9ydCBjYW4gYXNzdW1lIHRoZSBw
b3NpdGlvbiAwLCAwCisgICAgLy8gaXMgYWx3YXlzIHdoZXJlIHJlbmRlcmluZyBzdGFydHMuCisg
ICAgc2V0VHJhbnNmb3JtT3JpZ2luKFRvcExlZnQpOworICAgIGQtPmluaXRpYWxpemVTY2VuZUdy
YXBoQ29ubmVjdGlvbnMoKTsKK30KKworUVF1aWNrV2ViUGFnZTo6flFRdWlja1dlYlBhZ2UoKQor
eworICAgIGRlbGV0ZSBkOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmtleVByZXNzRXZlbnQo
UUtleUV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQg
UVF1aWNrV2ViUGFnZTo6a2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCogZXZlbnQpCit7CisgICAg
dGhpcy0+ZXZlbnQoZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6OmlucHV0TWV0aG9k
RXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50
KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjpmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqIGV2
ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdl
Ojpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChl
dmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2
ZW50KiBldmVudCkKK3sKKyAgICBmb3JjZUFjdGl2ZUZvY3VzKCk7CisgICAgdGhpcy0+ZXZlbnQo
ZXZlbnQpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2U6Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2
ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNr
V2ViUGFnZTo6bW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHRo
aXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjptb3VzZURvdWJsZUNs
aWNrRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsK
K30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjp3aGVlbEV2ZW50KFFXaGVlbEV2ZW50KiBldmVudCkK
K3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6aG92
ZXJFbnRlckV2ZW50KFFIb3ZlckV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVu
dCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6aG92ZXJNb3ZlRXZlbnQoUUhvdmVyRXZlbnQq
IGV2ZW50KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQ
YWdlOjpob3ZlckxlYXZlRXZlbnQoUUhvdmVyRXZlbnQqIGV2ZW50KQoreworICAgIHRoaXMtPmV2
ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjpkcmFnTW92ZUV2ZW50KFFEcmFn
TW92ZUV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQg
UVF1aWNrV2ViUGFnZTo6ZHJhZ0VudGVyRXZlbnQoUURyYWdFbnRlckV2ZW50KiBldmVudCkKK3sK
KyAgICB0aGlzLT5ldmVudChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6ZHJhZ0xl
YXZlRXZlbnQoUURyYWdMZWF2ZUV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVudChldmVu
dCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6ZHJvcEV2ZW50KFFEcm9wRXZlbnQqIGV2ZW50
KQoreworICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlOjpn
ZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiBuZXdHZW9tZXRyeSwgY29uc3QgUVJlY3RGJiBv
bGRHZW9tZXRyeSkKK3sKKyAgICBRUXVpY2tJdGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0
cnksIG9sZEdlb21ldHJ5KTsKKyAgICBpZiAobmV3R2VvbWV0cnkuc2l6ZSgpICE9IG9sZEdlb21l
dHJ5LnNpemUoKSkKKyAgICAgICAgZC0+cGFnZVByb3h5LT5zZXREcmF3aW5nQXJlYVNpemUobmV3
R2VvbWV0cnkuc2l6ZSgpLnRvU2l6ZSgpKTsKK30KKworYm9vbCBRUXVpY2tXZWJQYWdlOjpldmVu
dChRRXZlbnQqIGV2KQoreworICAgIGlmIChkLT5wYWdlUHJveHktPmhhbmRsZUV2ZW50KGV2KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGV2LT50eXBlKCkgPT0gUUV2ZW50OjpJbnB1
dE1ldGhvZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBh
dm9pZCBhbiBlbmRsZXNzIGxvb3AgaW4gY29ubmVjdGlvbiB3aXRoIFFRdWlja0l0ZW06OmV2ZW50
KCkuCisgICAgcmV0dXJuIFFRdWlja0l0ZW06OmV2ZW50KGV2KTsKK30KKwordm9pZCBRUXVpY2tX
ZWJQYWdlOjp0b3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVudCkKK3sKKyAgICB0aGlzLT5ldmVu
dChldmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViUGFnZTo6aXRlbUNoYW5nZShJdGVtQ2hhbmdl
IGNoYW5nZSwgY29uc3QgSXRlbUNoYW5nZURhdGEmIGRhdGEpCit7CisgICAgaWYgKGNoYW5nZSA9
PSBJdGVtU2NlbmVDaGFuZ2UpCisgICAgICAgIGQtPmluaXRpYWxpemVTY2VuZUdyYXBoQ29ubmVj
dGlvbnMoKTsKKyAgICBRUXVpY2tJdGVtOjppdGVtQ2hhbmdlKGNoYW5nZSwgZGF0YSk7Cit9CisK
K1FRdWlja1dlYlBhZ2VQcml2YXRlOjpRUXVpY2tXZWJQYWdlUHJpdmF0ZShRUXVpY2tXZWJQYWdl
KiB2aWV3KQorICAgIDogcSh2aWV3KQorICAgICwgcGFnZVByb3h5KDApCisgICAgLCBuYXZpZ2F0
aW9uQ29udHJvbGxlcigwKQorICAgICwgc2dVcGRhdGVRdWV1ZSh2aWV3KQorICAgICwgcGFpbnRp
bmdJc0luaXRpYWxpemVkKGZhbHNlKQoreworfQorCit2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRl
Ojppbml0aWFsaXplU2NlbmVHcmFwaENvbm5lY3Rpb25zKCkKK3sKKyAgICBpZiAocGFpbnRpbmdJ
c0luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFxLT5jYW52YXMoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHBhaW50aW5nSXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgaWYg
KHEtPnNjZW5lR3JhcGhFbmdpbmUoKSkKKyAgICAgICAgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6
ZWQoKTsKKyAgICBlbHNlCisgICAgICAgIFFPYmplY3Q6OmNvbm5lY3QocS0+Y2FudmFzKCksIFNJ
R05BTChzY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKSksIHEsIFNMT1QoX3Ffb25TY2VuZUdyYXBoSW5p
dGlhbGl6ZWQoKSkpOworfQorCit2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpzZXRQYWdlUHJv
eHkoUXRXZWJQYWdlUHJveHkqIHBhZ2VQcm94eSkKK3sKKyAgICBBU1NFUlQoIXRoaXMtPnBhZ2VQ
cm94eSk7CisgICAgQVNTRVJUKHBhZ2VQcm94eSk7CisgICAgdGhpcy0+cGFnZVByb3h5ID0gcGFn
ZVByb3h5OworfQorCitzdGF0aWMgZmxvYXQgY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkoY29uc3Qg
UVF1aWNrSXRlbSogaXRlbSkKK3sKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybiAxOwor
CisgICAgZmxvYXQgb3BhY2l0eSA9IGl0ZW0tPm9wYWNpdHkoKTsKKyAgICBpZiAob3BhY2l0eSA8
IDAuMDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG9wYWNpdHkgKiBjb21wdXRl
RWZmZWN0aXZlT3BhY2l0eShpdGVtLT5wYXJlbnRJdGVtKCkpOworfQorCit2b2lkIFFRdWlja1dl
YlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCgpCit7CisgICAgaWYgKCFxLT5p
c1Zpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBxLT5pdGVtVHJhbnNmb3JtKDAsIDApOworCisgICAgZmxvYXQgb3BhY2l0eSA9IGNvbXB1dGVF
ZmZlY3RpdmVPcGFjaXR5KHEpOworICAgIFFSZWN0RiBjbGlwUmVjdCA9IHEtPnBhcmVudEl0ZW0o
KS0+bWFwUmVjdFRvU2NlbmUocS0+cGFyZW50SXRlbSgpLT5ib3VuZGluZ1JlY3QoKSk7CisKKyAg
ICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGNvbnN0IGludCBsZWZ0ID0gY2xpcFJl
Y3QubGVmdCgpOworICAgIGNvbnN0IGludCB3aWR0aCA9IGNsaXBSZWN0LndpZHRoKCk7CisgICAg
Y29uc3QgaW50IGJvdHRvbSA9IHEtPmNhbnZhcygpLT5oZWlnaHQoKSAtIChjbGlwUmVjdC5ib3R0
b20oKSArIDEpOworICAgIGNvbnN0IGludCBoZWlnaHQgPSBjbGlwUmVjdC5oZWlnaHQoKTsKKwor
ICAgIGdsU2Npc3NvcihsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQpOworCisgICAgcGFnZVBy
b3h5LT5yZW5kZXJUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBvcGFjaXR5KTsKKyAgICBn
bERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKK30KKwordm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0
ZTo6X3Ffb25BZnRlclNjZW5lUmVuZGVyKCkKK3sKKyAgICAvLyBUT0RPOiBBbGxvdyBwYWludGlu
ZyBiZWZvcmUgdGhlIHNjZW5lIG9yIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNjZW5lIHdpdGggYW4g
RkJPLgorICAgIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7Cit9CisKK3ZvaWQgUVF1aWNrV2Vi
UGFnZVByaXZhdGU6Ol9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCkKK3sKKyAgICBRU0dFbmdp
bmUqIGVuZ2luZSA9IHEtPnNjZW5lR3JhcGhFbmdpbmUoKTsKKyAgICBRT2JqZWN0Ojpjb25uZWN0
KGVuZ2luZSwgU0lHTkFMKGFmdGVyUmVuZGVyaW5nKCkpLCBxLCBTTE9UKF9xX29uQWZ0ZXJTY2Vu
ZVJlbmRlcigpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworfQorCisjaW5jbHVkZSAibW9jX3Fx
dWlja3dlYnBhZ2UuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZmYxYzA2ZDFhNWI3ZTk3N2M2MjU0MWVmZjRkODQy
OWM2MjdjOGRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgcXF1aWNrd2VicGFnZV9oCisjZGVmaW5lIHFxdWlja3dlYnBhZ2VfaAorCisjaW5j
bHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSA8UXRDb3JlL1FTaGFyZWRQb2ludGVy
PgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvUVF1aWNrSXRlbT4KKworY2xhc3MgUVF1aWNrV2Vi
VmlldzsKK2NsYXNzIFFRdWlja1dlYlBhZ2VQcml2YXRlOworY2xhc3MgUVdlYk5hdmlnYXRpb25D
b250cm9sbGVyOworY2xhc3MgUVdlYlByZWZlcmVuY2VzOworCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFF0Vmlld0ludGVyZmFjZTsKK30KKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNr
V2ViUGFnZSA6IHB1YmxpYyBRUXVpY2tJdGVtIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAg
IFFRdWlja1dlYlBhZ2UoUVF1aWNrSXRlbSogcGFyZW50ID0gMCk7CisgICAgdmlydHVhbCB+UVF1
aWNrV2ViUGFnZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGtleVByZXNzRXZl
bnQoUUtleUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGtleVJlbGVhc2VFdmVudChRS2V5RXZl
bnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVu
dCopOworICAgIHZpcnR1YWwgdm9pZCBmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCopOworICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VN
b3ZlRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VSZWxlYXNlRXZl
bnQoUU1vdXNlRXZlbnQgKik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVu
dChRTW91c2VFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCB3aGVlbEV2ZW50KFFXaGVlbEV2ZW50
Kik7CisgICAgdmlydHVhbCB2b2lkIGhvdmVyRW50ZXJFdmVudChRSG92ZXJFdmVudCopOworICAg
IHZpcnR1YWwgdm9pZCBob3Zlck1vdmVFdmVudChRSG92ZXJFdmVudCopOworICAgIHZpcnR1YWwg
dm9pZCBob3ZlckxlYXZlRXZlbnQoUUhvdmVyRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
Z01vdmVFdmVudChRRHJhZ01vdmVFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBkcmFnRW50ZXJF
dmVudChRRHJhZ0VudGVyRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhZ0xlYXZlRXZlbnQo
UURyYWdMZWF2ZUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGRyb3BFdmVudChRRHJvcEV2ZW50
Kik7CisgICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZXZlbnQoUUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdl
ZChjb25zdCBRUmVjdEYmLCBjb25zdCBRUmVjdEYmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaXRlbUNo
YW5nZShJdGVtQ2hhbmdlLCBjb25zdCBJdGVtQ2hhbmdlRGF0YSYpOworCitwcml2YXRlOgorICAg
IFFfUFJJVkFURV9TTE9UKGQsIHZvaWQgX3Ffb25BZnRlclNjZW5lUmVuZGVyKCkpOworICAgIFFf
UFJJVkFURV9TTE9UKGQsIHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKSk7CisKKyAg
ICBRUXVpY2tXZWJQYWdlUHJpdmF0ZSogZDsKKyAgICBmcmllbmQgY2xhc3MgUVF1aWNrV2ViVmll
d1ByaXZhdGU7CisgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOworfTsK
KworUU1MX0RFQ0xBUkVfVFlQRShRUXVpY2tXZWJQYWdlKQorCisjZW5kaWYgLyogcXF1aWNrd2Vi
cGFnZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2VfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWI3MTk4ZjdlMTQ2MTE0NzFkZWYwYzVhNjgyNDY5OGIx
NzUwZDEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlX3AuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBxcXVpY2t3ZWJwYWdlX3BfaAorI2RlZmluZSBxcXVpY2t3ZWJwYWdlX3BfaAorCisj
aW5jbHVkZSAiUXRTR1VwZGF0ZVF1ZXVlLmgiCisjaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgi
CisjaW5jbHVkZSAicXF1aWNrd2VicGFnZS5oIgorI2luY2x1ZGUgInF3ZWJuYXZpZ2F0aW9uY29u
dHJvbGxlci5oIgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFSZWN0RjsKK2NsYXNzIFFT
R05vZGU7CitjbGFzcyBRU3RyaW5nOworUVRfRU5EX05BTUVTUEFDRQorCitjbGFzcyBRUXVpY2tX
ZWJQYWdlOworCitjbGFzcyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgUVF1
aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2ViUGFnZSogdmlldyk7CisKKyAgICB2b2lkIHNldFBh
Z2VQcm94eShRdFdlYlBhZ2VQcm94eSopOworCisgICAgdm9pZCBpbml0aWFsaXplU2NlbmVHcmFw
aENvbm5lY3Rpb25zKCk7CisKKyAgICB2b2lkIF9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpOworICAg
IHZvaWQgX3Ffb25TY2VuZUdyYXBoSW5pdGlhbGl6ZWQoKTsKKyAgICB2b2lkIHBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KCk7CisKKyAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBxOworICAgIFF0V2Vi
UGFnZVByb3h5KiBwYWdlUHJveHk7CisgICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZp
Z2F0aW9uQ29udHJvbGxlcjsKKyAgICBXZWJLaXQ6OlF0U0dVcGRhdGVRdWV1ZSBzZ1VwZGF0ZVF1
ZXVlOworICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxpemVkOworfTsKKworI2VuZGlmIC8qIHFx
dWlja3dlYnBhZ2VfcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYzI5N2YxNDMyMDUzYWE2YWJhODI4ZjBj
MmUyMjAyNTU1MzhjZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3Lmgi
CisKKyNpbmNsdWRlICJRdFZpZXdJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJRdFdlYlBhZ2VQcm94
eS5oIgorI2luY2x1ZGUgIlV0aWxzUXQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorCisjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgi
CisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisjaW5jbHVkZSAicXdlYm5hdmlnYXRpb25j
b250cm9sbGVyLmgiCisjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKKworI2luY2x1ZGUg
PFF0RGVjbGFyYXRpdmUvUVF1aWNrQ2FudmFzPgorI2luY2x1ZGUgPFF0V2lkZ2V0cy9RRmlsZURp
YWxvZz4KKyNpbmNsdWRlIDxRdFdpZGdldHMvUUlucHV0RGlhbG9nPgorI2luY2x1ZGUgPFF0V2lk
Z2V0cy9RTWVzc2FnZUJveD4KKyNpbmNsdWRlIDxXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmg+
CisKK1FRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZSgpCisgICAgOiBx
X3B0cigwKQorICAgICwgbmF2aWdhdGlvbkNvbnRyb2xsZXIoMCkKKyAgICAsIHVzZVRyYWRpdGlv
bmFsRGVza3RvcEJlaGF2aW91cihmYWxzZSkKK3sKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJp
dmF0ZTo6ZW5hYmxlTW91c2VFdmVudHMoKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAg
ICBxLT5zZXRBY2NlcHRlZE1vdXNlQnV0dG9ucyhRdDo6TW91c2VCdXR0b25NYXNrKTsKKyAgICBx
LT5zZXRBY2NlcHRIb3ZlckV2ZW50cyh0cnVlKTsKKyAgICBwYWdlVmlldy0+c2V0QWNjZXB0ZWRN
b3VzZUJ1dHRvbnMoUXQ6Ok1vdXNlQnV0dG9uTWFzayk7CisgICAgcGFnZVZpZXctPnNldEFjY2Vw
dEhvdmVyRXZlbnRzKHRydWUpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpkaXNh
YmxlTW91c2VFdmVudHMoKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBxLT5zZXRB
Y2NlcHRlZE1vdXNlQnV0dG9ucyhRdDo6Tm9CdXR0b24pOworICAgIHEtPnNldEFjY2VwdEhvdmVy
RXZlbnRzKGZhbHNlKTsKKyAgICBwYWdlVmlldy0+c2V0QWNjZXB0ZWRNb3VzZUJ1dHRvbnMoUXQ6
Ok5vQnV0dG9uKTsKKyAgICBwYWdlVmlldy0+c2V0QWNjZXB0SG92ZXJFdmVudHMoZmFsc2UpOwor
fQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplKFFRdWlja1dlYlZpZXcq
IHZpZXdwb3J0LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwUmVmKQoreworICAgIHFfcHRyID0gdmlld3BvcnQ7CisgICAgdmlld3BvcnQtPnNldEZsYWdz
KFFRdWlja0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSk7CisKKyAgICBRT2JqZWN0Ojpj
b25uZWN0KHZpZXdwb3J0LCBTSUdOQUwodmlzaWJsZUNoYW5nZWQoKSksIHZpZXdwb3J0LCBTTE9U
KF9xX29uVmlzaWJsZUNoYW5nZWQoKSkpOworICAgIHBhZ2VWaWV3LnJlc2V0KG5ldyBRUXVpY2tX
ZWJQYWdlKHZpZXdwb3J0KSk7CisgICAgdmlld0ludGVyZmFjZS5yZXNldChuZXcgV2ViS2l0OjpR
dFZpZXdJbnRlcmZhY2Uodmlld3BvcnQsIHBhZ2VWaWV3LmRhdGEoKSkpOworCisgICAgUVF1aWNr
V2ViUGFnZVByaXZhdGUqIGNvbnN0IHBhZ2VWaWV3UHJpdmF0ZSA9IHBhZ2VWaWV3LmRhdGEoKS0+
ZDsKKyAgICBzZXRQYWdlUHJveHkobmV3IFF0V2ViUGFnZVByb3h5KHZpZXdJbnRlcmZhY2UuZGF0
YSgpLCAwLCB0aGlzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKKyAgICBwYWdlVmlld1By
aXZhdGUtPnNldFBhZ2VQcm94eShwYWdlUHJveHkuZGF0YSgpKTsKKworICAgIFFXZWJQcmVmZXJl
bmNlc1ByaXZhdGU6OmdldChwYWdlUHJveHktPnByZWZlcmVuY2VzKCkpLT5zZXRBdHRyaWJ1dGUo
UVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIHRy
dWUpOworICAgIHBhZ2VQcm94eS0+aW5pdCgpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2
YXRlOjppbml0aWFsaXplRGVza3RvcChRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkKK3sKKyAgICBp
ZiAoaW50ZXJhY3Rpb25FbmdpbmUpIHsKKyAgICAgICAgUU9iamVjdDo6ZGlzY29ubmVjdChpbnRl
cmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3cG9ydFVwZGF0ZVJlcXVlc3RlZCgpKSwg
dmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRVcGRhdGVkKCkpKTsKKyAgICAgICAgUU9iamVjdDo6
ZGlzY29ubmVjdChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3cG9ydFRyYWpl
Y3RvcnlWZWN0b3JDaGFuZ2VkKGNvbnN0IFFQb2ludEYmKSksIHZpZXdwb3J0LCBTTE9UKF9xX3Zp
ZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKSk7CisgICAgfQor
ICAgIGludGVyYWN0aW9uRW5naW5lLnJlc2V0KDApOworICAgIHBhZ2VQcm94eS0+c2V0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSgwKTsKKyAgICBlbmFibGVNb3VzZUV2ZW50cygpOworfQorCit2
b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplVG91Y2goUVF1aWNrV2ViVmlldyog
dmlld3BvcnQpCit7CisgICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQobmV3IFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZSh2aWV3cG9ydCwgcGFnZVZpZXcuZGF0YSgpKSk7CisgICAgcGFnZVBy
b3h5LT5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGludGVyYWN0aW9uRW5naW5lLmRhdGEo
KSk7CisgICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7CisgICAgUU9iamVjdDo6Y29ubmVjdChpbnRl
cmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3cG9ydFVwZGF0ZVJlcXVlc3RlZCgpKSwg
dmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRVcGRhdGVkKCkpKTsKKyAgICBRT2JqZWN0Ojpjb25u
ZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSwgU0lHTkFMKHZpZXdwb3J0VHJhamVjdG9yeVZl
Y3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKSwgdmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRU
cmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9pbnRGJikpKTsKKyAgICB1cGRhdGVWaWV3
cG9ydFNpemUoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6bG9hZERpZENvbW1p
dCgpCit7CisgICAgaWYgKCF1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpCisgICAgICAg
IGludGVyYWN0aW9uRW5naW5lLT5yZXNldCgpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2
YXRlOjpjb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUpCit7CisgICAgaWYg
KHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cikKKyAgICAgICAgcmV0dXJuOworCisgICAg
cGFnZVZpZXctPnNldFdpZHRoKG5ld1NpemUud2lkdGgoKSk7CisgICAgcGFnZVZpZXctPnNldEhl
aWdodChuZXdTaXplLmhlaWdodCgpKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
c2Nyb2xsUG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBwb3MpCit7CisgICAgaWYgKCF1
c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpCisgICAgICAgIGludGVyYWN0aW9uRW5naW5l
LT5wYWdlUG9zaXRpb25SZXF1ZXN0KHBvcyk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZh
dGU6Ol9xX3ZpZXdwb3J0VXBkYXRlZCgpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAg
IGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVjdEluUGFnZVZpZXdDb29yZGluYXRlcyA9IHEtPm1hcFJl
Y3RUb0l0ZW0ocGFnZVZpZXcuZGF0YSgpLCBxLT5ib3VuZGluZ1JlY3QoKSkuaW50ZXJzZWN0ZWQo
cGFnZVZpZXctPmJvdW5kaW5nUmVjdCgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHBhZ2VWaWV3LT5z
Y2FsZSgpOworICAgIHBhZ2VQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUodmlz
aWJsZVJlY3RJblBhZ2VWaWV3Q29vcmRpbmF0ZXMsIHNjYWxlKTsKK30KKwordm9pZCBRUXVpY2tX
ZWJWaWV3UHJpdmF0ZTo6X3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBR
UG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIHBhZ2VQcm94eS0+c2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBR
UXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffb25WaXNpYmxlQ2hhbmdlZCgpCit7CisgICAgV2ViUGFn
ZVByb3h5KiB3a1BhZ2UgPSB0b0ltcGwocGFnZVByb3h5LT5wYWdlUmVmKCkpOworCisgICAgd2tQ
YWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNWaXNpYmxlKTsKK30K
KworCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQorewor
ICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBRU2l6ZSB2aWV3cG9ydFNpemUgPSBxLT5ib3Vu
ZGluZ1JlY3QoKS5zaXplKCkudG9TaXplKCk7CisKKyAgICBpZiAodmlld3BvcnRTaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUGFnZVByb3h5KiB3a1BhZ2UgPSB0b0lt
cGwocGFnZVByb3h5LT5wYWdlUmVmKCkpOworICAgIC8vIExldCB0aGUgV2ViUHJvY2VzcyBrbm93
IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAorICAgIC8vIGl0IGNhbiByZXNp
emUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCisgICAgd2tQYWdlLT5zZXRWaWV3cG9ydFNpemUo
dmlld3BvcnRTaXplKTsKKyAgICB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7CisgICAgX3Ff
dmlld3BvcnRVcGRhdGVkKCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnVwZGF0
ZVZpZXdwb3J0Q29uc3RyYWludHMoKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBR
U2l6ZSBhdmFpbGFibGVTaXplID0gcS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpOwor
CisgICAgaWYgKGF2YWlsYWJsZVNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvSW1wbChwYWdlUHJveHktPnBhZ2VSZWYoKSk7Cisg
ICAgV2ViUHJlZmVyZW5jZXMqIHdrUHJlZnMgPSB3a1BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJl
bmNlcygpOworCisgICAgLy8gRklYTUU6IFJlbW92ZSBsYXRlcjsgSGFyZGNvZGUgc29tZSB2YWx1
ZXMgZm9yIG5vdyB0byBtYWtlIHN1cmUgdGhlIERQSSBhZGp1c3RtZW50IGlzIGJlaW5nIHRlc3Rl
ZC4KKyAgICB3a1ByZWZzLT5zZXREZXZpY2VEUEkoMjQwKTsKKyAgICB3a1ByZWZzLT5zZXREZXZp
Y2VXaWR0aCg0ODApOworICAgIHdrUHJlZnMtPnNldERldmljZUhlaWdodCg3MjApOworCisgICAg
aW50IG1pbmltdW1MYXlvdXRGYWxsYmFja1dpZHRoID0gcU1heDxpbnQ+KHdrUHJlZnMtPmxheW91
dEZhbGxiYWNrV2lkdGgoKSwgYXZhaWxhYmxlU2l6ZS53aWR0aCgpKTsKKworICAgIFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyID0gV2ViQ29yZTo6Y29tcHV0ZVZpZXdwb3J0QXR0cmli
dXRlcyh2aWV3cG9ydEFyZ3VtZW50cywgbWluaW11bUxheW91dEZhbGxiYWNrV2lkdGgsIHdrUHJl
ZnMtPmRldmljZVdpZHRoKCksIHdrUHJlZnMtPmRldmljZUhlaWdodCgpLCB3a1ByZWZzLT5kZXZp
Y2VEUEkoKSwgYXZhaWxhYmxlU2l6ZSk7CisgICAgV2ViQ29yZTo6cmVzdHJpY3RNaW5pbXVtU2Nh
bGVGYWN0b3JUb1ZpZXdwb3J0U2l6ZShhdHRyLCBhdmFpbGFibGVTaXplKTsKKyAgICBXZWJDb3Jl
OjpyZXN0cmljdFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShhdHRy
KTsKKworICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Q29uc3RyYWludHMgbmV3Q29u
c3RyYWludHM7CisgICAgbmV3Q29uc3RyYWludHMuaW5pdGlhbFNjYWxlID0gYXR0ci5pbml0aWFs
U2NhbGU7CisgICAgbmV3Q29uc3RyYWludHMubWluaW11bVNjYWxlID0gYXR0ci5taW5pbXVtU2Nh
bGU7CisgICAgbmV3Q29uc3RyYWludHMubWF4aW11bVNjYWxlID0gYXR0ci5tYXhpbXVtU2NhbGU7
CisgICAgbmV3Q29uc3RyYWludHMuZGV2aWNlUGl4ZWxSYXRpbyA9IGF0dHIuZGV2aWNlUGl4ZWxS
YXRpbzsKKyAgICBuZXdDb25zdHJhaW50cy5pc1VzZXJTY2FsYWJsZSA9ICEhYXR0ci51c2VyU2Nh
bGFibGU7CisgICAgaW50ZXJhY3Rpb25FbmdpbmUtPnNldENvbnN0cmFpbnRzKG5ld0NvbnN0cmFp
bnRzKTsKKworICAgIC8vIE92ZXJ3cml0ZSBtaW5pbXVtIHNjYWxlIHZhbHVlIHdpdGggZml0LXRv
LXZpZXcgdmFsdWUsIHVubGVzcyB0aGUgdGhlIGNvbnRlbnQgYXV0aG9yCisgICAgLy8gZXhwbGlj
aXRseSBzYXlzIG5vLiBOQjogV2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIGtub3cgd2UgaGF2
ZSBhIHZhbGlkIHNpemUsIGllLgorICAgIC8vIGFmdGVyIGluaXRpYWwgbGF5b3V0IGhhcyBjb21w
bGV0ZWQuCit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVZpZXdwb3J0
UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJncykKK3sKKyAg
ICBpZiAodXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKQorICAgICAgICByZXR1cm47Cisg
ICAgdmlld3BvcnRBcmd1bWVudHMgPSBhcmdzOworICAgIHVwZGF0ZVZpZXdwb3J0Q29uc3RyYWlu
dHMoKTsKK30KKworCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0QWxl
cnQoY29uc3QgUVN0cmluZyYgYWxlcnRUZXh0KQoreworI2lmbmRlZiBRVF9OT19NRVNTQUdFQk9Y
CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIGNvbnN0IFFTdHJpbmcgdGl0bGUgPSBRT2Jq
ZWN0Ojp0cigiSmF2YVNjcmlwdCBBbGVydCAtICUxIikuYXJnKHEtPnVybCgpLmhvc3QoKSk7Cisg
ICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7CisgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKDAs
IHRpdGxlLCBlc2NhcGVIdG1sKGFsZXJ0VGV4dCksIFFNZXNzYWdlQm94OjpPayk7CisgICAgZW5h
YmxlTW91c2VFdmVudHMoKTsKKyNlbHNlCisgICAgUV9VTlVTRUQoYWxlcnRUZXh0KTsKKyNlbmRp
ZgorfQorCitib29sIFFRdWlja1dlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0Q29uZmlybShj
b25zdCBRU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyNpZm5k
ZWYgUVRfTk9fTUVTU0FHRUJPWAorICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBjb25zdCBR
U3RyaW5nIHRpdGxlID0gUU9iamVjdDo6dHIoIkphdmFTY3JpcHQgQ29uZmlybSAtICUxIikuYXJn
KHEtPnVybCgpLmhvc3QoKSk7CisgICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7CisgICAgcmVzdWx0
ID0gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0bGUs
IGVzY2FwZUh0bWwobWVzc2FnZSksIFFNZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7
CisgICAgZW5hYmxlTW91c2VFdmVudHMoKTsKKyNlbHNlCisgICAgUV9VTlVTRUQobWVzc2FnZSk7
CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitRU3RyaW5nIFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgYm9vbCYgb2spCit7CisjaWZuZGVmIFFUX05PX0lOUFVU
RElBTE9HCisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIGNvbnN0IFFTdHJpbmcgdGl0bGUg
PSBRT2JqZWN0Ojp0cigiSmF2YVNjcmlwdCBQcm9tcHQgLSAlMSIpLmFyZyhxLT51cmwoKS5ob3N0
KCkpOworICAgIGRpc2FibGVNb3VzZUV2ZW50cygpOworICAgIFFTdHJpbmcgcmVzdWx0ID0gUUlu
cHV0RGlhbG9nOjpnZXRUZXh0KDAsIHRpdGxlLCBlc2NhcGVIdG1sKG1lc3NhZ2UpLCBRTGluZUVk
aXQ6Ok5vcm1hbCwgZGVmYXVsdFZhbHVlLCAmb2spOworICAgIGVuYWJsZU1vdXNlRXZlbnRzKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgUV9VTlVTRUQobWVzc2FnZSk7CisgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKKyNlbmRpZgorfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2
YXRlOjpjaG9vc2VGaWxlcyhXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyUmVm
LCBjb25zdCBRU3RyaW5nTGlzdCYgc2VsZWN0ZWRGaWxlTmFtZXMsIFF0Vmlld0ludGVyZmFjZTo6
RmlsZUNob29zZXJUeXBlIHR5cGUpCit7CisjaWZuZGVmIFFUX05PX0ZJTEVESUFMT0cKKyAgICBR
X1EoUVF1aWNrV2ViVmlldyk7CisgICAgb3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgPSBsaXN0ZW5l
clJlZjsKKworICAgIC8vIFF0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZmlsZXMgc3VnZ2Vz
dGlvbiwgc28gd2UgZ2V0IGp1c3QgdGhlIGZpcnN0IHN1Z2dlc3Rpb24uCisgICAgUVN0cmluZyBz
ZWxlY3RlZEZpbGVOYW1lOworICAgIGlmICghc2VsZWN0ZWRGaWxlTmFtZXMuaXNFbXB0eSgpKQor
ICAgICAgICBzZWxlY3RlZEZpbGVOYW1lID0gc2VsZWN0ZWRGaWxlTmFtZXMuYXQoMCk7CisKKyAg
ICBRX0FTU0VSVCghZmlsZURpYWxvZyk7CisKKyAgICBRV2luZG93KiB3aW5kb3cgPSBxLT5jYW52
YXMoKTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgZmlsZURpYWxv
ZyA9IG5ldyBRRmlsZURpYWxvZygwLCBRU3RyaW5nKCksIHNlbGVjdGVkRmlsZU5hbWUpOworICAg
IGZpbGVEaWFsb2ctPndpbmRvdygpLT53aW5JZCgpOyAvLyBFbnN1cmUgdGhhdCB0aGUgZGlhbG9n
IGhhcyBhIHdpbmRvdworICAgIFFfQVNTRVJUKGZpbGVEaWFsb2ctPndpbmRvdygpLT53aW5kb3dI
YW5kbGUoKSk7CisgICAgZmlsZURpYWxvZy0+d2luZG93KCktPndpbmRvd0hhbmRsZSgpLT5zZXRU
cmFuc2llbnRQYXJlbnQod2luZG93KTsKKworICAgIGZpbGVEaWFsb2ctPm9wZW4ocSwgU0xPVChf
cV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKSkpOworCisgICAgcS0+Y29ubmVjdChmaWxlRGlh
bG9nLCBTSUdOQUwoZmluaXNoZWQoaW50KSksIFNMT1QoX3Ffb25PcGVuUGFuZWxGaW5pc2hlZChp
bnQpKSk7CisjZW5kaWYKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6X3Ffb25PcGVu
UGFuZWxGaWxlc1NlbGVjdGVkKCkKK3sKKyAgICBjb25zdCBRU3RyaW5nTGlzdCBmaWxlTGlzdCA9
IGZpbGVEaWFsb2ctPnNlbGVjdGVkRmlsZXMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEFQSU9iamVj
dD4gPiB3a0ZpbGVzKGZpbGVMaXN0LnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZmlsZUxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIHdrRmlsZXNbaV0gPSBXZWJVUkw6
OmNyZWF0ZShRVXJsOjpmcm9tTG9jYWxGaWxlKGZpbGVMaXN0LmF0KGkpKS50b1N0cmluZygpKTsK
KworICAgIFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJDaG9vc2VGaWxlcyhvcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lciwgdG9BUEkoSW1tdXRhYmxlQXJyYXk6OmFkb3B0KHdrRmlsZXMpLmxlYWtSZWYo
KSkpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV9vbk9wZW5QYW5lbEZpbmlz
aGVkKGludCByZXN1bHQpCit7CisgICAgaWYgKHJlc3VsdCA9PSBRRGlhbG9nOjpSZWplY3RlZCkK
KyAgICAgICAgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lckNhbmNlbChvcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lcik7CisKKyAgICBmaWxlRGlhbG9nLT5kZWxldGVMYXRlcigpOworICAgIGZpbGVEaWFs
b2cgPSAwOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRVc2VUcmFkaXRpb25h
bERlc2t0b3BCZWhhdmlvdXIoYm9vbCBlbmFibGUpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcp
OworICAgIGlmIChlbmFibGUgPT0gdXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKQorICAg
ICAgICByZXR1cm47CisKKyAgICB1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIgPSBlbmFi
bGU7CisgICAgaWYgKHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cikKKyAgICAgICAgaW5p
dGlhbGl6ZURlc2t0b3AocSk7CisgICAgZWxzZQorICAgICAgICBpbml0aWFsaXplVG91Y2gocSk7
Cit9CisKK3N0YXRpYyBRdFBvbGljeUludGVyZmFjZTo6UG9saWN5QWN0aW9uIHRvUG9saWN5QWN0
aW9uKFFRdWlja1dlYlZpZXc6Ok5hdmlnYXRpb25Qb2xpY3kgcG9saWN5KQoreworICAgIHN3aXRj
aCAocG9saWN5KSB7CisgICAgY2FzZSBRUXVpY2tXZWJWaWV3OjpVc2VQb2xpY3k6CisgICAgICAg
IHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6VXNlOworICAgIGNhc2UgUVF1aWNrV2ViVmlldzo6
RG93bmxvYWRQb2xpY3k6CisgICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6RG93bmxv
YWQ7CisgICAgY2FzZSBRUXVpY2tXZWJWaWV3OjpJZ25vcmVQb2xpY3k6CisgICAgICAgIHJldHVy
biBRdFBvbGljeUludGVyZmFjZTo6SWdub3JlOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gUXRQb2xpY3lJbnRlcmZhY2U6Oklnbm9yZTsKK30KKworc3RhdGlj
IGJvb2wgaGFzTWV0YU1ldGhvZChRT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIqIG1ldGhvZE5h
bWUpCit7CisgICAgaW50IG1ldGhvZEluZGV4ID0gb2JqZWN0LT5tZXRhT2JqZWN0KCktPmluZGV4
T2ZNZXRob2QoUU1ldGFPYmplY3Q6Om5vcm1hbGl6ZWRTaWduYXR1cmUobWV0aG9kTmFtZSkpOwor
ICAgIHJldHVybiBtZXRob2RJbmRleCA+PSAwICYmIG1ldGhvZEluZGV4IDwgb2JqZWN0LT5tZXRh
T2JqZWN0KCktPm1ldGhvZENvdW50KCk7Cit9CisKKy8qIQorICAgIFxxbWxtZXRob2QgTmF2aWdh
dGlvblBvbGljeSBEZXNrdG9wV2ViVmlldzo6bmF2aWdhdGlvblBvbGljeUZvclVybCh1cmwsIGJ1
dHRvbiwgbW9kaWZpZXJzKQorCisgICAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGltcGxlbWVudGVk
IGJ5IHRoZSB1c2VyIG9mIERlc2t0b3BXZWJWaWV3IGVsZW1lbnQuCisKKyAgICBJdCB3aWxsIGJl
IGNhbGxlZCB0byBkZWNpZGUgdGhlIHBvbGljeSBmb3IgYSBuYXZpZ2F0aW9uOiB3aGV0aGVyIHRo
ZSBXZWJWaWV3IHNob3VsZCBpZ25vcmUgdGhlIG5hdmlnYXRpb24sCisgICAgY29udGludWUgaXQg
b3Igc3RhcnQgYSBkb3dubG9hZC4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUg
cG9saWNpZXMgaW4gdGhlIE5hdmlnYXRpb25Qb2xpY3kgZW51bWVyYXRpb24uCisqLworUXRQb2xp
Y3lJbnRlcmZhY2U6OlBvbGljeUFjdGlvbiBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6bmF2aWdhdGlv
blBvbGljeUZvclVSTChjb25zdCBRVXJsJiB1cmwsIFF0OjpNb3VzZUJ1dHRvbiBidXR0b24sIFF0
OjpLZXlib2FyZE1vZGlmaWVycyBtb2RpZmllcnMpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcp
OworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlIGludm9rZU1ldGhv
ZCgpIHdhcm5zIGlmIHRoZSBtZXRob2QgZG9lc24ndCBleGlzdCBmb3IgdGhlIG9iamVjdC4KKyAg
ICBpZiAoIWhhc01ldGFNZXRob2QocSwgIm5hdmlnYXRpb25Qb2xpY3lGb3JVcmwoUVZhcmlhbnQs
UVZhcmlhbnQsUVZhcmlhbnQpIikpCisgICAgICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6
VXNlOworCisgICAgUVZhcmlhbnQgcmV0OworICAgIGlmIChRTWV0YU9iamVjdDo6aW52b2tlTWV0
aG9kKHEsICJuYXZpZ2F0aW9uUG9saWN5Rm9yVXJsIiwgUV9SRVRVUk5fQVJHKFFWYXJpYW50LCBy
ZXQpLCBRX0FSRyhRVmFyaWFudCwgdXJsKSwgUV9BUkcoUVZhcmlhbnQsIGJ1dHRvbiksIFFfQVJH
KFFWYXJpYW50LCBRVmFyaWFudChtb2RpZmllcnMpKSkpCisgICAgICAgIHJldHVybiB0b1BvbGlj
eUFjdGlvbihzdGF0aWNfY2FzdDxRUXVpY2tXZWJWaWV3OjpOYXZpZ2F0aW9uUG9saWN5PihyZXQu
dG9JbnQoKSkpOworICAgIHJldHVybiBRdFBvbGljeUludGVyZmFjZTo6VXNlOworfQorCit2b2lk
IFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRQYWdlUHJveHkoUXRXZWJQYWdlUHJveHkqIHBhZ2VQ
cm94eSkKK3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgdGhpcy0+cGFnZVByb3h5LnJl
c2V0KHBhZ2VQcm94eSk7CisgICAgUU9iamVjdDo6Y29ubmVjdChwYWdlUHJveHksIFNJR05BTChy
ZWNlaXZlZE1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoUVZhcmlhbnRNYXApKSwgcSwgU0lH
TkFMKG1lc3NhZ2VSZWNlaXZlZChRVmFyaWFudE1hcCkpKTsKK30KKworUVF1aWNrV2ViVmlldzo6
UVF1aWNrV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCisgICAgOiBRUXVpY2tJdGVtKHBhcmVu
dCkKKyAgICAsIGRfcHRyKG5ldyBRUXVpY2tXZWJWaWV3UHJpdmF0ZSkKK3sKKyAgICBRX0QoUVF1
aWNrV2ViVmlldyk7CisgICAgZC0+aW5pdGlhbGl6ZSh0aGlzKTsKKyAgICBkLT5pbml0aWFsaXpl
VG91Y2godGhpcyk7Cit9CisKK1FRdWlja1dlYlZpZXc6OlFRdWlja1dlYlZpZXcoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgUVF1aWNrSXRlbSog
cGFyZW50KQorICAgIDogUVF1aWNrSXRlbShwYXJlbnQpCisgICAgLCBkX3B0cihuZXcgUVF1aWNr
V2ViVmlld1ByaXZhdGUpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPmluaXRp
YWxpemUodGhpcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKKyAgICAvLyBVc2VkIGJ5IFdl
YktpdFRlc3RSdW5uZXIuCisgICAgZC0+c2V0VXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3Vy
KHRydWUpOworfQorCitRUXVpY2tXZWJWaWV3Ojp+UVF1aWNrV2ViVmlldygpCit7Cit9CisKK1FR
dWlja1dlYlBhZ2UqIFFRdWlja1dlYlZpZXc6OnBhZ2UoKQoreworICAgIFFfRChRUXVpY2tXZWJW
aWV3KTsKKyAgICByZXR1cm4gZC0+cGFnZVZpZXcuZGF0YSgpOworfQorCit2b2lkIFFRdWlja1dl
YlZpZXc6OmxvYWQoY29uc3QgUVVybCYgdXJsKQoreworICAgIFFfRChRUXVpY2tXZWJWaWV3KTsK
KyAgICBkLT5wYWdlUHJveHktPmxvYWQodXJsKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3Ojpw
b3N0TWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFFfRChRUXVpY2tXZWJW
aWV3KTsKKyAgICBkLT5wYWdlUHJveHktPnBvc3RNZXNzYWdlVG9OYXZpZ2F0b3JRdE9iamVjdCht
ZXNzYWdlKTsKK30KKworUVVybCBRUXVpY2tXZWJWaWV3Ojp1cmwoKSBjb25zdAoreworICAgIFFf
RChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+cGFnZVByb3h5LT51cmwoKTsK
K30KKworaW50IFFRdWlja1dlYlZpZXc6OmxvYWRQcm9ncmVzcygpIGNvbnN0Cit7CisgICAgUV9E
KGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBkLT5wYWdlUHJveHktPmxvYWRQcm9n
cmVzcygpOworfQorCitRU3RyaW5nIFFRdWlja1dlYlZpZXc6OnRpdGxlKCkgY29uc3QKK3sKKyAg
ICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+dGl0
bGUoKTsKK30KKworUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBRUXVpY2tXZWJWaWV3OjpuYXZp
Z2F0aW9uQ29udHJvbGxlcigpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcp
OworICAgIGlmICghZC0+bmF2aWdhdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIGNvbnN0X2Nhc3Q8
UVF1aWNrV2ViVmlld1ByaXZhdGUqPihkKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBuZXcgUVdl
Yk5hdmlnYXRpb25Db250cm9sbGVyKGQtPnBhZ2VQcm94eS5kYXRhKCkpOworICAgIHJldHVybiBk
LT5uYXZpZ2F0aW9uQ29udHJvbGxlcjsKK30KKworUVdlYlByZWZlcmVuY2VzKiBRUXVpY2tXZWJW
aWV3OjpwcmVmZXJlbmNlcygpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcp
OworICAgIHJldHVybiBkLT5wYWdlUHJveHktPnByZWZlcmVuY2VzKCk7Cit9CisKK3ZvaWQgUVF1
aWNrV2ViVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksIGNv
bnN0IFFSZWN0RiYgb2xkR2VvbWV0cnkpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAg
IFFRdWlja0l0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2VvbWV0cnkpOwor
ICAgIGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpKSB7CisgICAg
ICAgIGlmIChkLT51c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpIHsKKyAgICAgICAgICAg
IGQtPnBhZ2VWaWV3LT5zZXRXaWR0aChuZXdHZW9tZXRyeS53aWR0aCgpKTsKKyAgICAgICAgICAg
IGQtPnBhZ2VWaWV3LT5zZXRIZWlnaHQobmV3R2VvbWV0cnkuaGVpZ2h0KCkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGQtPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworICAgIH0KK30KKwor
dm9pZCBRUXVpY2tXZWJWaWV3Ojp0b3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVudCkKK3sKKyAg
ICBmb3JjZUFjdGl2ZUZvY3VzKCk7CisgICAgUVF1aWNrSXRlbTo6dG91Y2hFdmVudChldmVudCk7
Cit9CisKK1dLUGFnZVJlZiBRUXVpY2tXZWJWaWV3OjpwYWdlUmVmKCkgY29uc3QKK3sKKyAgICBR
X0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+cGFnZVJl
ZigpOworfQorCisjaW5jbHVkZSAibW9jX3FxdWlja3dlYnZpZXcuY3BwIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTQ0
ODI3MzEyZWFjM2I3MTU3OGRhZDkzOGEyOWQ1ZWMzZWIxZDhjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHFxdWlja3dlYnZpZXdfaAorI2Rl
ZmluZSBxcXVpY2t3ZWJ2aWV3X2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNs
dWRlIDxRdERlY2xhcmF0aXZlL3FxdWlja2l0ZW0uaD4KKworY2xhc3MgUVF1aWNrV2ViUGFnZTsK
K2NsYXNzIFFRdWlja1dlYlZpZXdQcml2YXRlOworY2xhc3MgUVdlYkRvd25sb2FkSXRlbTsKK2Ns
YXNzIFFXZWJOYXZpZ2F0aW9uQ29udHJvbGxlcjsKK2NsYXNzIFFXZWJQcmVmZXJlbmNlczsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBRdFZpZXdJbnRlcmZhY2U7Cit9CisKK25hbWVzcGFj
ZSBXVFIgeworY2xhc3MgUGxhdGZvcm1XZWJWaWV3OworfQorCit0eXBlZGVmIGNvbnN0IHN0cnVj
dCBPcGFxdWVXS0NvbnRleHQqIFdLQ29udGV4dFJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZVdLUGFnZUdyb3VwKiBXS1BhZ2VHcm91cFJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZVdLUGFnZSogV0tQYWdlUmVmOworCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFQYWlu
dGVyOworY2xhc3MgUVVybDsKK1FUX0VORF9OQU1FU1BBQ0UKKworY2xhc3MgUVdFQktJVF9FWFBP
UlQgUVF1aWNrV2ViVmlldyA6IHB1YmxpYyBRUXVpY2tJdGVtIHsKKyAgICBRX09CSkVDVAorICAg
IFFfUFJPUEVSVFkoUVN0cmluZyB0aXRsZSBSRUFEIHRpdGxlIE5PVElGWSB0aXRsZUNoYW5nZWQp
CisgICAgUV9QUk9QRVJUWShRVXJsIHVybCBSRUFEIHVybCBOT1RJRlkgdXJsQ2hhbmdlZCkKKyAg
ICBRX1BST1BFUlRZKGludCBsb2FkUHJvZ3Jlc3MgUkVBRCBsb2FkUHJvZ3Jlc3MgTk9USUZZIGxv
YWRQcm9ncmVzc0NoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRV2ViTmF2aWdhdGlvbkNvbnRyb2xs
ZXIqIG5hdmlnYXRpb24gUkVBRCBuYXZpZ2F0aW9uQ29udHJvbGxlciBDT05TVEFOVCBGSU5BTCkK
KyAgICBRX1BST1BFUlRZKFFXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMgUkVBRCBwcmVmZXJl
bmNlcyBDT05TVEFOVCBGSU5BTCkKKyAgICBRX1BST1BFUlRZKFFRdWlja1dlYlBhZ2UqIHBhZ2Ug
UkVBRCBwYWdlIENPTlNUQU5UIEZJTkFMKQorICAgIFFfRU5VTVMoTmF2aWdhdGlvblBvbGljeSkK
KyAgICBRX0VOVU1TKEVycm9yVHlwZSkKK3B1YmxpYzoKKyAgICBlbnVtIE5hdmlnYXRpb25Qb2xp
Y3kgeworICAgICAgICBVc2VQb2xpY3ksCisgICAgICAgIERvd25sb2FkUG9saWN5LAorICAgICAg
ICBJZ25vcmVQb2xpY3kKKyAgICB9OworCisgICAgZW51bSBFcnJvclR5cGUgeworICAgICAgICBF
bmdpbmVFcnJvciwKKyAgICAgICAgTmV0d29ya0Vycm9yLAorICAgICAgICBIdHRwRXJyb3IsCisg
ICAgICAgIERvd25sb2FkRXJyb3IKKyAgICB9OworICAgIFFRdWlja1dlYlZpZXcoUVF1aWNrSXRl
bSogcGFyZW50ID0gMCk7CisgICAgdmlydHVhbCB+UVF1aWNrV2ViVmlldygpOworCisgICAgUVVy
bCB1cmwoKSBjb25zdDsKKyAgICBRU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisgICAgaW50IGxvYWRQ
cm9ncmVzcygpIGNvbnN0OworCisgICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZpZ2F0
aW9uQ29udHJvbGxlcigpIGNvbnN0OworICAgIFFXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMo
KSBjb25zdDsKKyAgICBRUXVpY2tXZWJQYWdlKiBwYWdlKCk7CisKK3B1YmxpYyBRX1NMT1RTOgor
ICAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYpOworICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0
IFFTdHJpbmcmKTsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgdGl0bGVDaGFuZ2VkKGNvbnN0IFFT
dHJpbmcmIHRpdGxlKTsKKyAgICB2b2lkIHN0YXR1c0Jhck1lc3NhZ2VDaGFuZ2VkKGNvbnN0IFFT
dHJpbmcmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKKyAgICB2b2lkIGxvYWRT
dWNjZWVkZWQoKTsKKyAgICB2b2lkIGxvYWRGYWlsZWQoUVF1aWNrV2ViVmlldzo6RXJyb3JUeXBl
IGVycm9yVHlwZSwgaW50IGVycm9yQ29kZSwgY29uc3QgUVVybCYgdXJsKTsKKyAgICB2b2lkIGxv
YWRQcm9ncmVzc0NoYW5nZWQoaW50IHByb2dyZXNzKTsKKyAgICB2b2lkIHVybENoYW5nZWQoY29u
c3QgUVVybCYgdXJsKTsKKyAgICB2b2lkIG1lc3NhZ2VSZWNlaXZlZChjb25zdCBRVmFyaWFudE1h
cCYgbWVzc2FnZSk7CisgICAgdm9pZCBkb3dubG9hZFJlcXVlc3RlZChRV2ViRG93bmxvYWRJdGVt
KiBkb3dubG9hZEl0ZW0pOworICAgIHZvaWQgbGlua0hvdmVyZWQoY29uc3QgUVVybCYgdXJsLCBj
b25zdCBRU3RyaW5nJiB0aXRsZSk7CisgICAgdm9pZCB2aWV3TW9kZUNoYW5nZWQoKTsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiwg
Y29uc3QgUVJlY3RGJik7CisgICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQoUVRvdWNoRXZlbnQq
IGV2ZW50KTsKKworcHJpdmF0ZToKKyAgICBRX0RFQ0xBUkVfUFJJVkFURShRUXVpY2tXZWJWaWV3
KQorCisgICAgUVF1aWNrV2ViVmlldyhXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBRUXVp
Y2tJdGVtKiBwYXJlbnQgPSAwKTsKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0OworCisg
ICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffdmlld3BvcnRVcGRhdGVkKCkpOwor
ICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZl
Y3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKTsKKyAgICBRX1BSSVZBVEVfU0xPVChkX2Z1bmMo
KSwgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbGVzU2VsZWN0ZWQoKSk7CisgICAgUV9QUklWQVRFX1NM
T1QoZF9mdW5jKCksIHZvaWQgX3Ffb25PcGVuUGFuZWxGaW5pc2hlZChpbnQgcmVzdWx0KSk7Cisg
ICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25WaXNpYmxlQ2hhbmdlZCgpKTsK
KyAgICAvLyBIaWRlcyBRT2JqZWN0OjpkX3B0ciBhbGxvd2luZyB1cyB0byB1c2UgdGhlIGNvbnZl
bmllbmNlIG1hY3Jvcy4KKyAgICBRU2NvcGVkUG9pbnRlcjxRUXVpY2tXZWJWaWV3UHJpdmF0ZT4g
ZF9wdHI7CisKKyAgICBmcmllbmQgY2xhc3MgUXRXZWJQYWdlUHJveHk7CisgICAgZnJpZW5kIGNs
YXNzIFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOworICAgIGZyaWVuZCBjbGFzcyBXVFI6OlBsYXRm
b3JtV2ViVmlldzsKK307CisKK1FNTF9ERUNMQVJFX1RZUEUoUVF1aWNrV2ViVmlldykKKworI2Vu
ZGlmIC8qIHFxdWlja3dlYnZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVmYjM2YTAwNGQ5YjQwMWIz
MGJkODViZjdjMTk4NzAwNmY3YjQ3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKQEAgLTAsMCArMSw5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1aWNrd2Vidmlld19wX2gKKyNkZWZpbmUgcXF1aWNr
d2Vidmlld19wX2gKKworI2luY2x1ZGUgIlF0UG9saWN5SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAi
UXRWaWV3SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
LmgiCisjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKKworI2luY2x1ZGUgInFxdWlja3dlYnZp
ZXcuaCIKKworI2luY2x1ZGUgPFF0Q29yZS9RU2NvcGVkUG9pbnRlcj4KKworY2xhc3MgUVdlYk5h
dmlnYXRpb25Db250cm9sbGVyOworY2xhc3MgUXRXZWJQYWdlUHJveHk7CisKK1FUX0JFR0lOX05B
TUVTUEFDRQorY2xhc3MgUUZpbGVEaWFsb2c7CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFX
RUJLSVRfRVhQT1JUIFFRdWlja1dlYlZpZXdQcml2YXRlIDogcHVibGljIFdlYktpdDo6UXRQb2xp
Y3lJbnRlcmZhY2UgeworICAgIFFfREVDTEFSRV9QVUJMSUMoUVF1aWNrV2ViVmlldykKK3B1Ymxp
YzoKKyAgICBRUXVpY2tXZWJWaWV3UHJpdmF0ZSgpOworICAgIHZpcnR1YWwgflFRdWlja1dlYlZp
ZXdQcml2YXRlKCkgeyB9CisgICAgdm9pZCBzZXRQYWdlUHJveHkoUXRXZWJQYWdlUHJveHkqKTsK
KyAgICB2b2lkIGluaXRpYWxpemUoUVF1aWNrV2ViVmlldyogdmlld3BvcnQsIFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmID0gMCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCk7CisgICAg
dm9pZCBpbml0aWFsaXplVG91Y2goUVF1aWNrV2ViVmlldyogdmlld3BvcnQpOworICAgIHZvaWQg
aW5pdGlhbGl6ZURlc2t0b3AoUVF1aWNrV2ViVmlldyogdmlld3BvcnQpOworICAgIHZvaWQgZW5h
YmxlTW91c2VFdmVudHMoKTsKKyAgICB2b2lkIGRpc2FibGVNb3VzZUV2ZW50cygpOworCisgICAg
dm9pZCBsb2FkRGlkQ29tbWl0KCk7CisgICAgdm9pZCBjb250ZW50U2l6ZUNoYW5nZWQoY29uc3Qg
UVNpemUmIG5ld1NpemUpOworICAgIHZvaWQgc2Nyb2xsUG9zaXRpb25SZXF1ZXN0ZWQoY29uc3Qg
UVBvaW50JiBwb3MpOworICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CisgICAgdm9pZCB1
cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7CisgICAgdm9pZCBzZXRVc2VUcmFkaXRpb25hbERl
c2t0b3BCZWhhdmlvdXIoYm9vbCBlbmFibGUpOworCisgICAgc3RhdGljIFFRdWlja1dlYlZpZXdQ
cml2YXRlKiBnZXQoUVF1aWNrV2ViVmlldyogdmlldykKKyAgICB7CisgICAgICAgIHJldHVybiB2
aWV3LT5kX3B0ci5kYXRhKCk7CisgICAgfQorCisgICAgdm9pZCBfcV92aWV3cG9ydFVwZGF0ZWQo
KTsKKyAgICB2b2lkIF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBv
aW50RiYpOworICAgIHZvaWQgX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVjdGVkKCk7CisgICAgdm9p
ZCBfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCByZXN1bHQpOworICAgIHZvaWQgX3Ffb25WaXNp
YmxlQ2hhbmdlZCgpOworCisgICAgLy8gUXRQb2xpY3lJbnRlcmZhY2UuCisgICAgdmlydHVhbCBR
dFBvbGljeUludGVyZmFjZTo6UG9saWN5QWN0aW9uIG5hdmlnYXRpb25Qb2xpY3lGb3JVUkwoY29u
c3QgUVVybCYsIFF0OjpNb3VzZUJ1dHRvbiwgUXQ6OktleWJvYXJkTW9kaWZpZXJzKTsKKworICAg
IHZvaWQgY2hvb3NlRmlsZXMoV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3QgUVN0
cmluZ0xpc3QmIHNlbGVjdGVkRmlsZU5hbWVzLCBXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZTo6Rmls
ZUNob29zZXJUeXBlKTsKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBRU3RyaW5n
Jik7CisgICAgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBRU3RyaW5nJik7CisgICAg
UVN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5n
JiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9rKTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJv
cGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJncyk7CisKKyAgICBR
U2NvcGVkUG9pbnRlcjxRUXVpY2tXZWJQYWdlPiBwYWdlVmlldzsKKyAgICBRU2NvcGVkUG9pbnRl
cjxXZWJLaXQ6OlF0Vmlld0ludGVyZmFjZT4gdmlld0ludGVyZmFjZTsKKyAgICBRU2NvcGVkUG9p
bnRlcjxRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU+IGludGVyYWN0aW9uRW5naW5lOworCisg
ICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1bWVudHM7CisKKyAgICBR
UXVpY2tXZWJWaWV3KiBxX3B0cjsKKyAgICBRU2NvcGVkUG9pbnRlcjxRdFdlYlBhZ2VQcm94eT4g
cGFnZVByb3h5OworCisgICAgUVdlYk5hdmlnYXRpb25Db250cm9sbGVyKiBuYXZpZ2F0aW9uQ29u
dHJvbGxlcjsKKyAgICBib29sIHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cjsKKyAgICBR
RmlsZURpYWxvZyogZmlsZURpYWxvZzsKKyAgICBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVm
IG9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOworfTsKKworI2VuZGlmIC8qIHFxdWlja3dlYnZpZXdf
cF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJw
YWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxZTExOTZkOTc2MDU3MWFl
Mjk3YmU2ODdkMjM1N2JhNGJkMjc1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBh
Z2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZS5oIgot
Ci0jaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2VfcC5oIgotI2luY2x1ZGUgPFFBcHBsaWNh
dGlvbj4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+Ci0jaW5jbHVkZSA8UVBh
aW50ZXI+Ci0jaW5jbHVkZSA8UVF1aWNrQ2FudmFzPgotI2luY2x1ZGUgPFFTR0VuZ2luZT4KLSNp
bmNsdWRlIDxRVXJsPgotCi1RVG91Y2hXZWJQYWdlOjpRVG91Y2hXZWJQYWdlKFFRdWlja0l0ZW0q
IHBhcmVudCkKLSAgICA6IFFRdWlja0l0ZW0ocGFyZW50KQotICAgICwgZChuZXcgUVRvdWNoV2Vi
UGFnZVByaXZhdGUodGhpcykpCi17Ci0gICAgc2V0RmxhZyhJdGVtSGFzQ29udGVudHMpOwotCi0g
ICAgLy8gV2UgZG8gdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSB0b3AgbGVmdCBzbyB0aGUgdmlld3Bv
cnQgY2FuIGFzc3VtZSB0aGUgcG9zaXRpb24gMCwgMAotICAgIC8vIGlzIGFsd2F5cyB3aGVyZSBy
ZW5kZXJpbmcgc3RhcnRzLgotICAgIHNldFRyYW5zZm9ybU9yaWdpbihUb3BMZWZ0KTsKLSAgICBp
bml0U2NlbmVHcmFwaENvbm5lY3Rpb25zKCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6aW5p
dFNjZW5lR3JhcGhDb25uZWN0aW9ucygpCi17Ci0gICAgaWYgKGQtPnBhaW50aW5nSXNJbml0aWFs
aXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghY2FudmFzKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBkLT5wYWludGluZ0lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIGlmIChzY2VuZUdy
YXBoRW5naW5lKCkpCi0gICAgICAgIGQtPl9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCk7Ci0g
ICAgZWxzZQotICAgICAgICBjb25uZWN0KGNhbnZhcygpLCBTSUdOQUwoc2NlbmVHcmFwaEluaXRp
YWxpemVkKCkpLCB0aGlzLCBTTE9UKF9xX29uU2NlbmVHcmFwaEluaXRpYWxpemVkKCkpKTsKLX0K
LQotUVRvdWNoV2ViUGFnZTo6flFUb3VjaFdlYlBhZ2UoKQotewotICAgIGRlbGV0ZSBkOwotfQot
Ci0vKiEgXHJlaW1wCi0qLwotYm9vbCBRVG91Y2hXZWJQYWdlOjpldmVudChRRXZlbnQqIGV2KQot
ewotICAgIGlmIChkLT5wYWdlUHJveHktPmhhbmRsZUV2ZW50KGV2KSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgcmV0dXJuIFFRdWlja0l0ZW06OmV2ZW50KGV2KTsKLX0KLQotdm9pZCBRVG91
Y2hXZWJQYWdlOjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXZlbnQpCi17Ci0gICAgdGhpcy0+
ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2U6OmtleVJlbGVhc2VFdmVudChR
S2V5RXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBR
VG91Y2hXZWJQYWdlOjppbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50KiBldmVudCkK
LXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6Zm9j
dXNJbkV2ZW50KFFGb2N1c0V2ZW50KiBldmVudCkKLXsKLSAgICB0aGlzLT5ldmVudChldmVudCk7
Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZTo6Zm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCogZXZl
bnQpCi17Ci0gICAgdGhpcy0+ZXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2U6
OnRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQotewotICAgIHRoaXMtPmV2ZW50KGV2ZW50
KTsKLX0KLQotdm9pZCBRVG91Y2hXZWJQYWdlOjpnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RG
JiBuZXdHZW9tZXRyeSwgY29uc3QgUVJlY3RGJiBvbGRHZW9tZXRyeSkKLXsKLSAgICBRUXVpY2tJ
dGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsKLSAgICBpZiAo
bmV3R2VvbWV0cnkuc2l6ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUoKSkKLSAgICAgICAgZC0+cGFn
ZVByb3h5LT5zZXREcmF3aW5nQXJlYVNpemUobmV3R2VvbWV0cnkuc2l6ZSgpLnRvU2l6ZSgpKTsK
LX0KLQotUVRvdWNoV2ViUGFnZVByaXZhdGU6OlFUb3VjaFdlYlBhZ2VQcml2YXRlKFFUb3VjaFdl
YlBhZ2UqIHZpZXcpCi0gICAgOiBxKHZpZXcpCi0gICAgLCBwYWdlUHJveHkoMCkKLSAgICAsIG5h
dmlnYXRpb25Db250cm9sbGVyKDApCi0gICAgLCBzZ1VwZGF0ZVF1ZXVlKHZpZXcpCi0gICAgLCBw
YWludGluZ0lzSW5pdGlhbGl6ZWQoZmFsc2UpCi17Ci19Ci0KLXZvaWQgUVRvdWNoV2ViUGFnZVBy
aXZhdGU6OnNldFBhZ2VQcm94eShRdFdlYlBhZ2VQcm94eSogcGFnZVByb3h5KQotewotICAgIEFT
U0VSVCghdGhpcy0+cGFnZVByb3h5KTsKLSAgICBBU1NFUlQocGFnZVByb3h5KTsKLSAgICB0aGlz
LT5wYWdlUHJveHkgPSBwYWdlUHJveHk7Ci0KLX0KLQotc3RhdGljIGZsb2F0IGNvbXB1dGVFZmZl
Y3RpdmVPcGFjaXR5KGNvbnN0IFFRdWlja0l0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKCFpdGVtKQot
ICAgICAgICByZXR1cm4gMS4wOwotCi0gICAgZmxvYXQgb3BhY2l0eSA9IGl0ZW0tPm9wYWNpdHko
KTsKLSAgICBpZiAob3BhY2l0eSA8IDAuMDEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIG9wYWNpdHkgKiBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShpdGVtLT5wYXJlbnRJdGVtKCkp
OwotfQotCi12b2lkIFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4
dCgpCi17Ci0gICAgaWYgKCFxLT5pc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBxLT5pdGVtVHJhbnNmb3JtKDAsIDApOwotICAgIGZsb2F0
IG9wYWNpdHkgPSBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShxKTsKLSAgICBRUmVjdEYgY2xpcFJl
Y3QgPSBxLT5wYXJlbnRJdGVtKCktPm1hcFJlY3RUb1NjZW5lKHEtPnBhcmVudEl0ZW0oKS0+Ym91
bmRpbmdSZWN0KCkpOwotCi0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBjb25z
dCBpbnQgbGVmdCA9IGNsaXBSZWN0LmxlZnQoKTsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBjbGlw
UmVjdC53aWR0aCgpOwotICAgIGNvbnN0IGludCBib3R0b20gPSBxLT5jYW52YXMoKS0+aGVpZ2h0
KCkgLSAoY2xpcFJlY3QuYm90dG9tKCkgKyAxKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gY2xp
cFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBnbFNjaXNzb3IobGVmdCwgYm90dG9tLCB3aWR0aCwgaGVp
Z2h0KTsKLQotICAgIHBhZ2VQcm94eS0+cmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9y
bSwgb3BhY2l0eSk7Ci0gICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci19Ci0KLXZvaWQg
UVRvdWNoV2ViUGFnZVByaXZhdGU6Ol9xX29uQWZ0ZXJTY2VuZVJlbmRlcigpCi17Ci0gICAgLy8g
VE9ETzogQWxsb3cgcGFpbnRpbmcgYmVmb3JlIHRoZSBzY2VuZSBvciBpbiB0aGUgbWlkZGxlIG9m
IHRoZSBzY2VuZSB3aXRoIGFuIEZCTy4KLSAgICBwYWludFRvQ3VycmVudEdMQ29udGV4dCgpOwot
fQotCi12b2lkIFFUb3VjaFdlYlBhZ2VQcml2YXRlOjpfcV9vblNjZW5lR3JhcGhJbml0aWFsaXpl
ZCgpCi17Ci0gICAgUVNHRW5naW5lKiBlbmdpbmUgPSBxLT5zY2VuZUdyYXBoRW5naW5lKCk7Ci0g
ICAgUU9iamVjdDo6Y29ubmVjdChlbmdpbmUsIFNJR05BTChhZnRlclJlbmRlcmluZygpKSwgcSwg
U0xPVChfcV9vbkFmdGVyU2NlbmVSZW5kZXIoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLX0K
LQotdm9pZCBRVG91Y2hXZWJQYWdlOjppdGVtQ2hhbmdlKEl0ZW1DaGFuZ2UgY2hhbmdlLCBjb25z
dCBJdGVtQ2hhbmdlRGF0YSAmZGF0YSkKLXsKLSAgICBpZiAoY2hhbmdlID09IEl0ZW1TY2VuZUNo
YW5nZSkKLSAgICAgICAgaW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucygpOwotICAgIFFRdWlja0l0
ZW06Oml0ZW1DaGFuZ2UoY2hhbmdlLCBkYXRhKTsKLX0KLQotI2luY2x1ZGUgIm1vY19xdG91Y2h3
ZWJwYWdlLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXRvdWNod2VicGFnZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3
ZWJwYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMjc2ODc5NjBmOTMyZGVm
ZjY5NGM2M2ZlZDA2N2U3YWNhZGI1NzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJw
YWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQot
I2lmbmRlZiBxdG91Y2h3ZWJwYWdlX2gKLSNkZWZpbmUgcXRvdWNod2VicGFnZV9oCi0KLSNpbmNs
dWRlICJxd2Via2l0Z2xvYmFsLmgiCi0KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FxdWlja2l0
ZW0uaD4KLSNpbmNsdWRlIDxRU2hhcmVkUG9pbnRlcj4KLQotY2xhc3MgUVRvdWNoV2ViUGFnZVBy
aXZhdGU7Ci1jbGFzcyBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBRV2ViUHJlZmVy
ZW5jZXM7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgUXRUb3VjaFZpZXdJbnRlcmZhY2U7
Ci19Ci0KLWNsYXNzIFFXRUJLSVRfRVhQT1JUIFFUb3VjaFdlYlBhZ2UgOiBwdWJsaWMgUVF1aWNr
SXRlbSB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBRVG91Y2hXZWJQYWdlKFFRdWlja0l0
ZW0qIHBhcmVudCA9IDApOwotCi0gICAgdmlydHVhbCB+UVRvdWNoV2ViUGFnZSgpOwotCi0gICAg
dmlydHVhbCBib29sIGV2ZW50KFFFdmVudCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2
b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGtleVJlbGVh
c2VFdmVudChRS2V5RXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5wdXRNZXRob2RFdmVudChR
SW5wdXRNZXRob2RFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBmb2N1c0luRXZlbnQoUUZvY3Vz
RXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCopOwot
ICAgIHZpcnR1YWwgdm9pZCB0b3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYsIGNvbnN0IFFSZWN0RiYpOwotICAg
IHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlKEl0ZW1DaGFuZ2UsIGNvbnN0IEl0ZW1DaGFuZ2VEYXRh
Jik7Ci0KLXByaXZhdGU6Ci0gICAgUV9QUklWQVRFX1NMT1QoZCwgdm9pZCBfcV9vbkFmdGVyU2Nl
bmVSZW5kZXIoKSk7Ci0gICAgUV9QUklWQVRFX1NMT1QoZCwgdm9pZCBfcV9vblNjZW5lR3JhcGhJ
bml0aWFsaXplZCgpKTsKLQotICAgIHZvaWQgaW5pdFNjZW5lR3JhcGhDb25uZWN0aW9ucygpOwot
Ci0gICAgUVRvdWNoV2ViUGFnZVByaXZhdGUqIGQ7Ci0gICAgZnJpZW5kIGNsYXNzIFFUb3VjaFdl
YlZpZXdQcml2YXRlOwotICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0VG91Y2hWaWV3SW50ZXJm
YWNlOwotfTsKLQotI2VuZGlmIC8qIHF0b3VjaHdlYnBhZ2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDBhZjhiZTZlOGRjNDczMmIxZDYzNDI0ODFmNDBmMThmNzRiM2IwNWEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaAorKysgL2Rldi9udWxsCkBA
IC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIHF0b3VjaHdlYnBhZ2Vf
cF9oCi0jZGVmaW5lIHF0b3VjaHdlYnBhZ2VfcF9oCi0KLSNpbmNsdWRlICJRdFNHVXBkYXRlUXVl
dWUuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicXdlYm5hdmlnYXRp
b25jb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8UU1lbnU+Ci0KLWNsYXNzIFFSZWN0RjsKLWNsYXNz
IFFTR05vZGU7Ci1jbGFzcyBRU3RyaW5nOwotY2xhc3MgUVRvdWNoV2ViUGFnZTsKLQotY2xhc3Mg
UVRvdWNoV2ViUGFnZVByaXZhdGUgewotcHVibGljOgotICAgIFFUb3VjaFdlYlBhZ2VQcml2YXRl
KFFUb3VjaFdlYlBhZ2UqIHZpZXcpOwotCi0gICAgdm9pZCBzZXRQYWdlUHJveHkoUXRXZWJQYWdl
UHJveHkqKTsKLQotICAgIHZvaWQgX3Ffb25BZnRlclNjZW5lUmVuZGVyKCk7Ci0gICAgdm9pZCBf
cV9vblNjZW5lR3JhcGhJbml0aWFsaXplZCgpOwotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENv
bnRleHQoKTsKLQotICAgIFFUb3VjaFdlYlBhZ2UqIGNvbnN0IHE7Ci0gICAgUXRXZWJQYWdlUHJv
eHkqIHBhZ2VQcm94eTsKLSAgICBRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmlnYXRpb25D
b250cm9sbGVyOwotICAgIFdlYktpdDo6UXRTR1VwZGF0ZVF1ZXVlIHNnVXBkYXRlUXVldWU7Ci0g
ICAgYm9vbCBwYWludGluZ0lzSW5pdGlhbGl6ZWQ7Ci19OwotCi0jZW5kaWYgLyogcXRvdWNod2Vi
cGFnZV9wX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXRvdWNod2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzA0ODgxNWRiNmNh
MmFlMTc0NmJhNWIxZTZkYmUyOWRkZmExNTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNo
d2Vidmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJ2aWV3LmgiCi0K
LSNpbmNsdWRlICJRdFRvdWNoVmlld0ludGVyZmFjZS5oIgotI2luY2x1ZGUgIlF0V2ViUGFnZVBy
b3h5LmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXRvdWNod2Vi
dmlld19wLmgiCi0jaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotCi12b2lkIFFUb3VjaFdl
YlZpZXdQcml2YXRlOjppbml0KFFUb3VjaFdlYlZpZXcqIHZpZXdwb3J0KQotewotICAgIHBhZ2VW
aWV3LnJlc2V0KG5ldyBRVG91Y2hXZWJQYWdlKHZpZXdwb3J0KSk7Ci0gICAgdmlld0ludGVyZmFj
ZS5yZXNldChuZXcgV2ViS2l0OjpRdFRvdWNoVmlld0ludGVyZmFjZSh2aWV3cG9ydCwgcGFnZVZp
ZXcuZGF0YSgpKSk7Ci0gICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQobmV3IFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZSh2aWV3cG9ydCwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0gICAgUVRvdWNo
V2ViUGFnZVByaXZhdGUqIGNvbnN0IHBhZ2VWaWV3UHJpdmF0ZSA9IHBhZ2VWaWV3LmRhdGEoKS0+
ZDsKLSAgICBzZXRQYWdlUHJveHkobmV3IFF0V2ViUGFnZVByb3h5KHZpZXdJbnRlcmZhY2UuZGF0
YSgpLCBpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCkpKTsKLSAgICBwYWdlVmlld1ByaXZhdGUtPnNl
dFBhZ2VQcm94eShwYWdlUHJveHkuZGF0YSgpKTsKLSAgICBRV2ViUHJlZmVyZW5jZXNQcml2YXRl
OjpnZXQocGFnZVByb3h5LT5wcmVmZXJlbmNlcygpKS0+c2V0QXR0cmlidXRlKFFXZWJQcmVmZXJl
bmNlc1ByaXZhdGU6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0cnVlKTsKLSAgICBw
YWdlUHJveHktPmluaXQoKTsKLQotICAgIFFPYmplY3Q6OmNvbm5lY3QoaW50ZXJhY3Rpb25Fbmdp
bmUuZGF0YSgpLCBTSUdOQUwodmlld3BvcnRVcGRhdGVSZXF1ZXN0ZWQoKSksIHZpZXdwb3J0LCBT
TE9UKF9xX3ZpZXdwb3J0VXBkYXRlZCgpKSk7Ci0gICAgUU9iamVjdDo6Y29ubmVjdChpbnRlcmFj
dGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTCh2aWV3cG9ydFRyYWplY3RvcnlWZWN0b3JDaGFuZ2Vk
KGNvbnN0IFFQb2ludEYmKSksIHZpZXdwb3J0LCBTTE9UKF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZl
Y3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYpKSk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlld1By
aXZhdGU6OmxvYWREaWRDb21taXQoKQotewotICAgIGludGVyYWN0aW9uRW5naW5lLT5yZXNldCgp
OwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRlOjpzY3JvbGxQb3NpdGlvblJlcXVlc3Rl
ZChjb25zdCBRUG9pbnQmIHBvcykKLXsKLSAgICBpbnRlcmFjdGlvbkVuZ2luZS0+cGFnZVBvc2l0
aW9uUmVxdWVzdChwb3MpOwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRlOjpfcV92aWV3
cG9ydFVwZGF0ZWQoKQotewotICAgIFFfUShRVG91Y2hXZWJWaWV3KTsKLSAgICBjb25zdCBRUmVj
dEYgdmlzaWJsZVJlY3RJblBhZ2VWaWV3Q29vcmRpbmF0ZXMgPSBxLT5tYXBSZWN0VG9JdGVtKHBh
Z2VWaWV3LmRhdGEoKSwgcS0+Ym91bmRpbmdSZWN0KCkpLmludGVyc2VjdGVkKHBhZ2VWaWV3LT5i
b3VuZGluZ1JlY3QoKSk7Ci0gICAgZmxvYXQgc2NhbGUgPSBwYWdlVmlldy0+c2NhbGUoKTsKLSAg
ICBwYWdlUHJveHktPnNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHZpc2libGVSZWN0SW5Q
YWdlVmlld0Nvb3JkaW5hdGVzLCBzY2FsZSk7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlld1ByaXZh
dGU6Ol9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYgdHJh
amVjdG9yeVZlY3RvcikKLXsKLSAgICBwYWdlUHJveHktPnNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmll
d1ByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCi17Ci0gICAgUV9RKFFUb3VjaFdlYlZpZXcp
OwotICAgIFFTaXplIHZpZXdwb3J0U2l6ZSA9IHEtPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1Np
emUoKTsKLQotICAgIGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvSW1wbChwYWdlUHJveHktPnBhZ2VSZWYo
KSk7Ci0KLSAgICAvLyBMZXQgdGhlIFdlYlByb2Nlc3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdw
b3J0IHNpemUsIHNvIHRoYXQKLSAgICAvLyBpdCBjYW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29y
ZGluZ2x5LgotICAgIHdrUGFnZS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7Ci0KLSAg
ICB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRzKCk7Ci0gICAgX3Ffdmlld3BvcnRVcGRhdGVkKCk7
Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlld1ByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWlu
dHMoKQotewotICAgIFFfUShRVG91Y2hXZWJWaWV3KTsKLSAgICBRU2l6ZSBhdmFpbGFibGVTaXpl
ID0gcS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpOwotCi0gICAgaWYgKGF2YWlsYWJs
ZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQYWdlUHJveHkqIHdr
UGFnZSA9IHRvSW1wbChwYWdlUHJveHktPnBhZ2VSZWYoKSk7Ci0gICAgV2ViUHJlZmVyZW5jZXMq
IHdrUHJlZnMgPSB3a1BhZ2UtPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOwotCi0gICAgLy8g
RklYTUU6IFJlbW92ZSBsYXRlcjsgSGFyZGNvZGUgc29tZSB2YWx1ZXMgZm9yIG5vdyB0byBtYWtl
IHN1cmUgdGhlIERQSSBhZGp1c3RtZW50IGlzIGJlaW5nIHRlc3RlZC4KLSAgICB3a1ByZWZzLT5z
ZXREZXZpY2VEUEkoMjQwKTsKLSAgICB3a1ByZWZzLT5zZXREZXZpY2VXaWR0aCg0ODApOwotICAg
IHdrUHJlZnMtPnNldERldmljZUhlaWdodCg3MjApOwotCi0gICAgaW50IG1pbmltdW1MYXlvdXRG
YWxsYmFja1dpZHRoID0gcU1heDxpbnQ+KHdrUHJlZnMtPmxheW91dEZhbGxiYWNrV2lkdGgoKSwg
YXZhaWxhYmxlU2l6ZS53aWR0aCgpKTsKLQotICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyBhdHRyID0gV2ViQ29yZTo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyh2aWV3cG9ydEFyZ3Vt
ZW50cywgbWluaW11bUxheW91dEZhbGxiYWNrV2lkdGgsIHdrUHJlZnMtPmRldmljZVdpZHRoKCks
IHdrUHJlZnMtPmRldmljZUhlaWdodCgpLCB3a1ByZWZzLT5kZXZpY2VEUEkoKSwgYXZhaWxhYmxl
U2l6ZSk7Ci0gICAgV2ViQ29yZTo6cmVzdHJpY3RNaW5pbXVtU2NhbGVGYWN0b3JUb1ZpZXdwb3J0
U2l6ZShhdHRyLCBhdmFpbGFibGVTaXplKTsKLSAgICBXZWJDb3JlOjpyZXN0cmljdFNjYWxlRmFj
dG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShhdHRyKTsKLQotICAgIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6Q29uc3RyYWludHMgbmV3Q29uc3RyYWludHM7Ci0gICAgbmV3
Q29uc3RyYWludHMuaW5pdGlhbFNjYWxlID0gYXR0ci5pbml0aWFsU2NhbGU7Ci0gICAgbmV3Q29u
c3RyYWludHMubWluaW11bVNjYWxlID0gYXR0ci5taW5pbXVtU2NhbGU7Ci0gICAgbmV3Q29uc3Ry
YWludHMubWF4aW11bVNjYWxlID0gYXR0ci5tYXhpbXVtU2NhbGU7Ci0gICAgbmV3Q29uc3RyYWlu
dHMuZGV2aWNlUGl4ZWxSYXRpbyA9IGF0dHIuZGV2aWNlUGl4ZWxSYXRpbzsKLSAgICBuZXdDb25z
dHJhaW50cy5pc1VzZXJTY2FsYWJsZSA9ICEhYXR0ci51c2VyU2NhbGFibGU7Ci0gICAgaW50ZXJh
Y3Rpb25FbmdpbmUtPnNldENvbnN0cmFpbnRzKG5ld0NvbnN0cmFpbnRzKTsKLQotICAgIC8vIE92
ZXJ3cml0ZSBtaW5pbXVtIHNjYWxlIHZhbHVlIHdpdGggZml0LXRvLXZpZXcgdmFsdWUsIHVubGVz
cyB0aGUgdGhlIGNvbnRlbnQgYXV0aG9yCi0gICAgLy8gZXhwbGljaXRseSBzYXlzIG5vLiBOQjog
V2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIGtub3cgd2UgaGF2ZSBhIHZhbGlkIHNpemUsIGll
LgotICAgIC8vIGFmdGVyIGluaXRpYWwgbGF5b3V0IGhhcyBjb21wbGV0ZWQuCi19Ci0KLXZvaWQg
UVRvdWNoV2ViVmlld1ByaXZhdGU6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJncykKLXsKLSAgICB2aWV3cG9ydEFyZ3VtZW50
cyA9IGFyZ3M7Ci0gICAgdXBkYXRlVmlld3BvcnRDb25zdHJhaW50cygpOwotfQotCi1RVG91Y2hX
ZWJWaWV3OjpRVG91Y2hXZWJWaWV3KFFRdWlja0l0ZW0qIHBhcmVudCkKLSAgICA6IFFCYXNlV2Vi
VmlldygqKG5ldyBRVG91Y2hXZWJWaWV3UHJpdmF0ZSksIHBhcmVudCkKLXsKLSAgICBRX0QoUVRv
dWNoV2ViVmlldyk7Ci0gICAgZC0+aW5pdCh0aGlzKTsKLSAgICBzZXRGbGFncyhRUXVpY2tJdGVt
OjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUpOwotICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHZp
c2libGVDaGFuZ2VkKCkpLCBTTE9UKG9uVmlzaWJsZUNoYW5nZWQoKSkpOwotfQotCi1RVG91Y2hX
ZWJWaWV3Ojp+UVRvdWNoV2ViVmlldygpCi17Ci19Ci0KLVFUb3VjaFdlYlBhZ2UqIFFUb3VjaFdl
YlZpZXc6OnBhZ2UoKQotewotICAgIFFfRChRVG91Y2hXZWJWaWV3KTsKLSAgICByZXR1cm4gZC0+
cGFnZVZpZXcuZGF0YSgpOwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXc6Omdlb21ldHJ5Q2hhbmdl
ZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBjb25zdCBRUmVjdEYmIG9sZEdlb21ldHJ5KQot
ewotICAgIFFfRChRVG91Y2hXZWJWaWV3KTsKLSAgICBRUXVpY2tJdGVtOjpnZW9tZXRyeUNoYW5n
ZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsKLSAgICBpZiAobmV3R2VvbWV0cnkuc2l6ZSgp
ICE9IG9sZEdlb21ldHJ5LnNpemUoKSkKLSAgICAgICAgZC0+dXBkYXRlVmlld3BvcnRTaXplKCk7
Ci19Ci0KLXZvaWQgUVRvdWNoV2ViVmlldzo6dG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQp
Ci17Ci0gICAgZm9yY2VBY3RpdmVGb2N1cygpOwotICAgIFFRdWlja0l0ZW06OnRvdWNoRXZlbnQo
ZXZlbnQpOwotfQotCi12b2lkIFFUb3VjaFdlYlZpZXc6Om9uVmlzaWJsZUNoYW5nZWQoKQotewot
ICAgIFFfRChRVG91Y2hXZWJWaWV3KTsKLSAgICBXZWJQYWdlUHJveHkqIHdrUGFnZSA9IHRvSW1w
bChkLT5wYWdlUHJveHktPnBhZ2VSZWYoKSk7Ci0KLSAgICB3a1BhZ2UtPnZpZXdTdGF0ZURpZENo
YW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc1Zpc2libGUpOwotfQotCi0jaW5jbHVkZSAibW9jX3F0
b3VjaHdlYnZpZXcuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xdG91Y2h3ZWJ2aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0
b3VjaHdlYnZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZmYTBmNTNjMDJj
N2YwODc3ODM4NGZlM2M5NzkzNDQ3MmFkZWQwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAq
LwotCi0jaWZuZGVmIHF0b3VjaHdlYnZpZXdfaAotI2RlZmluZSBxdG91Y2h3ZWJ2aWV3X2gKLQot
I2luY2x1ZGUgInFiYXNld2Vidmlldy5oIgotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNp
bmNsdWRlIDxRdERlY2xhcmF0aXZlL3FxdWlja2l0ZW0uaD4KLQotY2xhc3MgUVRvdWNoRXZlbnQ7
Ci1jbGFzcyBRVG91Y2hXZWJQYWdlOwotY2xhc3MgUVRvdWNoV2ViVmlld1ByaXZhdGU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotY2xhc3MgUXRUb3VjaFZpZXdJbnRlcmZhY2U7Ci19Ci0KLWNsYXNz
IFFXRUJLSVRfRVhQT1JUIFFUb3VjaFdlYlZpZXcgOiBwdWJsaWMgUUJhc2VXZWJWaWV3Ci17Ci0g
ICAgUV9PQkpFQ1QKLSAgICBRX1BST1BFUlRZKFFUb3VjaFdlYlBhZ2UqIHBhZ2UgUkVBRCBwYWdl
IENPTlNUQU5UIEZJTkFMKQotCi1wdWJsaWM6Ci0gICAgUVRvdWNoV2ViVmlldyhRUXVpY2tJdGVt
KiBwYXJlbnQgPSAwKTsKLSAgICB+UVRvdWNoV2ViVmlldygpOwotCi0gICAgUVRvdWNoV2ViUGFn
ZSAqcGFnZSgpOwotCi1wcm90ZWN0ZWQgUV9TTE9UUzoKLSAgICB2b2lkIG9uVmlzaWJsZUNoYW5n
ZWQoKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoY29u
c3QgUVJlY3RGJiwgY29uc3QgUVJlY3RGJik7Ci0gICAgdmlydHVhbCB2b2lkIHRvdWNoRXZlbnQo
UVRvdWNoRXZlbnQqIGV2ZW50KTsKLQotcHJpdmF0ZToKLSAgICBRX1BSSVZBVEVfU0xPVChkX2Z1
bmMoKSwgdm9pZCBfcV92aWV3cG9ydFVwZGF0ZWQoKSk7Ci0gICAgUV9QUklWQVRFX1NMT1QoZF9m
dW5jKCksIHZvaWQgX3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25zdCBRUG9p
bnRGJikpOwotCi0gICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRUb3VjaFZpZXdJbnRlcmZhY2U7
Ci0gICAgUV9ERUNMQVJFX1BSSVZBVEUoUVRvdWNoV2ViVmlldykKLX07Ci0KLVFNTF9ERUNMQVJF
X1RZUEUoUVRvdWNoV2ViVmlldykKLQotI2VuZGlmIC8qIHF0b3VjaHdlYnZpZXdfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3X3Au
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlld19wLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MDBlMWQxNGJmM2Y3MzY0ODE0ZjcwMmEzMTMw
ZGRlMjQ1ZTBiODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3X3AuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIHF0
b3VjaHdlYnZpZXdfcF9oCi0jZGVmaW5lIHF0b3VjaHdlYnZpZXdfcF9oCi0KLSNpbmNsdWRlICJR
dFRvdWNoVmlld0ludGVyZmFjZS5oIgotI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCi0jaW5j
bHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCi0jaW5jbHVkZSAicWJhc2V3ZWJ2
aWV3X3AuaCIKLSNpbmNsdWRlIDxRU2NvcGVkUG9pbnRlcj4KLQotY2xhc3MgUVRvdWNoV2ViUGFn
ZTsKLWNsYXNzIFFUb3VjaFdlYlZpZXc7Ci0KLWNsYXNzIFFUb3VjaFdlYlZpZXdQcml2YXRlIDog
UUJhc2VXZWJWaWV3UHJpdmF0ZQotewotICAgIFFfREVDTEFSRV9QVUJMSUMoUVRvdWNoV2ViVmll
dykKLXB1YmxpYzoKLSAgICB2b2lkIGluaXQoUVRvdWNoV2ViVmlldyogdmlld3BvcnQpOwotCi0g
ICAgdm9pZCBsb2FkRGlkQ29tbWl0KCk7Ci0gICAgdm9pZCBzY3JvbGxQb3NpdGlvblJlcXVlc3Rl
ZChjb25zdCBRUG9pbnQmIHBvcyk7Ci0gICAgdm9pZCBfcV92aWV3cG9ydFVwZGF0ZWQoKTsKLSAg
ICB2b2lkIF9xX3ZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYp
OwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7Ci0gICAgdm9pZCB1cGRhdGVWaWV3cG9y
dENvbnN0cmFpbnRzKCk7Ci0KLSAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhj
b25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJncyk7Ci0KLSAgICBRU2NvcGVkUG9p
bnRlcjxRVG91Y2hXZWJQYWdlPiBwYWdlVmlldzsKLSAgICBRU2NvcGVkUG9pbnRlcjxXZWJLaXQ6
OlF0VG91Y2hWaWV3SW50ZXJmYWNlPiB2aWV3SW50ZXJmYWNlOwotICAgIFFTY29wZWRQb2ludGVy
PFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZT4gaW50ZXJhY3Rpb25FbmdpbmU7Ci0KLSAgICBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50czsKLX07Ci0KLSNlbmRp
ZiAvKiBxdG91Y2h3ZWJ2aWV3X3BfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvY29tbW9udmlld3Rlc3RzLnBybyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL2Nv
bW1vbnZpZXd0ZXN0cy5wcm8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDdjMjJl
YzRjM2RkYmRjYzJiZjU0MDc2ZTIwNWQ4ZjEyNmM1YWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9jb21tb252aWV3dGVzdHMvY29tbW9udmlld3Rlc3RzLnBybworKysgL2Rldi9udWxsCkBA
IC0xLDMgKzAsMCBAQAotaW5jbHVkZSguLi90ZXN0cy5wcmkpCi1IRUFERVJTICs9IHdlYnZpZXdh
YnN0cmFjdGlvbi5oCi1TT1VSQ0VTICs9IHdlYnZpZXdhYnN0cmFjdGlvbi5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3Rz
L3RzdF9jb21tb252aWV3dGVzdHMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9jb21tb252aWV3dGVzdHMvdHN0X2NvbW1vbnZpZXd0ZXN0cy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NzBiMGFiZDQ5YjVlOTdjMmI0MWViMjZhMDcyNWYyNDlj
ZGY2N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvdHN0X2Nv
bW1vbnZpZXd0ZXN0cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2luY2x1ZGUgPFFTY29wZWRQb2ludGVyPgotI2luY2x1ZGUgPFFTaWdu
YWxTcHk+Ci0jaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KLSNpbmNsdWRlICJ3ZWJ2aWV3YWJzdHJh
Y3Rpb24uaCIKLSNpbmNsdWRlICIuLi91dGlsLmgiCi0KLWNsYXNzIHRzdF9Db21tb25WaWV3VGVz
dHMgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICB0c3RfQ29t
bW9uVmlld1Rlc3RzKCk7Ci0KLXByaXZhdGUgc2xvdHM6Ci0gICAgdm9pZCBpbml0KCk7Ci0gICAg
dm9pZCBjbGVhbnVwKCk7Ci0KLSAgICB2b2lkIGJhc2VVcmwoKTsKLSAgICB2b2lkIGxvYWRFbXB0
eVVybCgpOwotICAgIHZvaWQgbG9hZEVtcHR5UGFnZVZpZXdWaXNpYmxlKCk7Ci0gICAgdm9pZCBs
b2FkRW1wdHlQYWdlVmlld0hpZGRlbigpOwotICAgIHZvaWQgbG9hZE5vbmV4aXN0ZW50RmlsZVVy
bCgpOwotICAgIHZvaWQgYmFja0FuZEZvcndhcmQoKTsKLSAgICB2b2lkIHJlbG9hZCgpOwotICAg
IHZvaWQgc3RvcCgpOwotICAgIHZvaWQgbG9hZFByb2dyZXNzKCk7Ci0KLSAgICB2b2lkIHNob3co
KTsKLXByaXZhdGU6Ci0gICAgUVNjb3BlZFBvaW50ZXI8V2ViVmlld0Fic3RyYWN0aW9uPiB2aWV3
QWJzdHJhY3Rpb247Ci19OwotCi10c3RfQ29tbW9uVmlld1Rlc3RzOjp0c3RfQ29tbW9uVmlld1Rl
c3RzKCkKLXsKLSAgICBhZGRRdFdlYlByb2Nlc3NUb1BhdGgoKTsKLX0KLQotdm9pZCB0c3RfQ29t
bW9uVmlld1Rlc3RzOjppbml0KCkKLXsKLSAgICB2aWV3QWJzdHJhY3Rpb24ucmVzZXQobmV3IFdl
YlZpZXdBYnN0cmFjdGlvbik7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6Y2xlYW51
cCgpCi17Ci0gICAgdmlld0Fic3RyYWN0aW9uLnJlc2V0KCk7Ci19Ci0KLXZvaWQgdHN0X0NvbW1v
blZpZXdUZXN0czo6YmFzZVVybCgpCi17Ci0gICAgLy8gVGVzdCB0aGUgdXJsIGlzIGluIGEgd2Vs
bCBkZWZpbmVkIHN0YXRlIHdoZW4gaW5zdGFuY2lhdGluZyB0aGUgdmlldywgYnV0IGJlZm9yZSBs
b2FkaW5nIGFueXRoaW5nLgotICAgIFFVcmwgdXJsOwotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0
aW9uLT51cmwodXJsKSk7Ci0gICAgUVZFUklGWSh1cmwuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCB0
c3RfQ29tbW9uVmlld1Rlc3RzOjpsb2FkRW1wdHlVcmwoKQotewotICAgIHZpZXdBYnN0cmFjdGlv
bi0+bG9hZChRVXJsKCkpOwotICAgIHZpZXdBYnN0cmFjdGlvbi0+bG9hZChRVXJsKFFMYXRpbjFT
dHJpbmcoIiIpKSk7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6bG9hZEVtcHR5UGFn
ZVZpZXdWaXNpYmxlKCkKLXsKLSAgICB2aWV3QWJzdHJhY3Rpb24tPnNob3coKTsKLSAgICBsb2Fk
RW1wdHlQYWdlVmlld0hpZGRlbigpOwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6Omxv
YWRFbXB0eVBhZ2VWaWV3SGlkZGVuKCkKLXsKLSAgICBRU2lnbmFsU3B5IGxvYWRTdGFydGVkU3B5
KHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3RhcnRlZCgpKSk7Ci0KLSAgICB2
aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3RyaW5nKFRF
U1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7Ci0gICAgUVZFUklGWSh3
YWl0Rm9yU2lnbmFsKHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3VjY2VlZGVk
KCkpKSk7Ci0KLSAgICBRQ09NUEFSRShsb2FkU3RhcnRlZFNweS5zaXplKCksIDEpOwotfQotCi12
b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmxvYWROb25leGlzdGVudEZpbGVVcmwoKQotewotICAg
IFFTaWduYWxTcHkgbG9hZEZhaWxlZFNweSh2aWV3QWJzdHJhY3Rpb24uZGF0YSgpLCBTSUdOQUwo
bG9hZFN0YXJ0ZWQoKSkpOwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5sb2FkKFFVcmw6OmZyb21M
b2NhbEZpbGUoUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9maWxlX3RoYXRf
ZG9lc19ub3RfZXhpc3QuaHRtbCIpKSk7Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdB
YnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JU
eXBlLCBpbnQsIFFVcmwpKSkpOwotCi0gICAgUUNPTVBBUkUobG9hZEZhaWxlZFNweS5zaXplKCks
IDEpOwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmJhY2tBbmRGb3J3YXJkKCkKLXsK
LSAgICB2aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3Ry
aW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7Ci0gICAgUVZF
UklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3Vj
Y2VlZGVkKCkpKSk7Ci0KLSAgICBRVXJsIHVybDsKLSAgICBRVkVSSUZZKHZpZXdBYnN0cmFjdGlv
bi0+dXJsKHVybCkpOwotICAgIFFDT01QQVJFKHVybC5wYXRoKCksIFFMYXRpbjFTdHJpbmcoVEVT
VFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZS5odG1sIikpOwotCi0gICAgdmlld0Fic3Ry
YWN0aW9uLT5sb2FkKFFVcmw6OmZyb21Mb2NhbEZpbGUoUUxhdGluMVN0cmluZyhURVNUU19TT1VS
Q0VfRElSICIvaHRtbC9iYXNpY19wYWdlMi5odG1sIikpKTsKLSAgICBRVkVSSUZZKHdhaXRGb3JT
aWduYWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSkpKTsK
LQotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51cmwodXJsKSk7Ci0gICAgUUNPTVBBUkUo
dXJsLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNpY19w
YWdlMi5odG1sIikpOwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5nb0JhY2soKTsKLSAgICBRVkVS
SUZZKHdhaXRGb3JTaWduYWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdWNj
ZWVkZWQoKSkpKTsKLQotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51cmwodXJsKSk7Ci0g
ICAgUUNPTVBBUkUodXJsLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIv
aHRtbC9iYXNpY19wYWdlLmh0bWwiKSk7Ci0KLSAgICB2aWV3QWJzdHJhY3Rpb24tPmdvRm9yd2Fy
ZCgpOwotICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbCh2aWV3QWJzdHJhY3Rpb24uZGF0YSgpLCBT
SUdOQUwobG9hZFN1Y2NlZWRlZCgpKSkpOwotCi0gICAgUVZFUklGWSh2aWV3QWJzdHJhY3Rpb24t
PnVybCh1cmwpKTsKLSAgICBRQ09NUEFSRSh1cmwucGF0aCgpLCBRTGF0aW4xU3RyaW5nKFRFU1RT
X1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UyLmh0bWwiKSk7Ci19Ci0KLXZvaWQgdHN0X0Nv
bW1vblZpZXdUZXN0czo6cmVsb2FkKCkKLXsKLSAgICB2aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVy
bDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jh
c2ljX3BhZ2UuaHRtbCIpKSk7Ci0gICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHZpZXdBYnN0cmFj
dGlvbi5kYXRhKCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7Ci0KLSAgICBRVXJsIHVybDsK
LSAgICBRVkVSSUZZKHZpZXdBYnN0cmFjdGlvbi0+dXJsKHVybCkpOwotICAgIFFDT01QQVJFKHVy
bC5wYXRoKCksIFFMYXRpbjFTdHJpbmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFn
ZS5odG1sIikpOwotCi0gICAgdmlld0Fic3RyYWN0aW9uLT5yZWxvYWQoKTsKLSAgICBRVkVSSUZZ
KHdhaXRGb3JTaWduYWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdWNjZWVk
ZWQoKSkpKTsKLQotICAgIFFWRVJJRlkodmlld0Fic3RyYWN0aW9uLT51cmwodXJsKSk7Ci0gICAg
UUNPTVBBUkUodXJsLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRt
bC9iYXNpY19wYWdlLmh0bWwiKSk7Ci19Ci0KLXZvaWQgdHN0X0NvbW1vblZpZXdUZXN0czo6c3Rv
cCgpCi17Ci0gICAgdmlld0Fic3RyYWN0aW9uLT5sb2FkKFFVcmw6OmZyb21Mb2NhbEZpbGUoUUxh
dGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNpY19wYWdlLmh0bWwiKSkpOwot
ICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbCh2aWV3QWJzdHJhY3Rpb24uZGF0YSgpLCBTSUdOQUwo
bG9hZFN1Y2NlZWRlZCgpKSkpOwotCi0gICAgUVVybCB1cmw7Ci0gICAgUVZFUklGWSh2aWV3QWJz
dHJhY3Rpb24tPnVybCh1cmwpKTsKLSAgICBRQ09NUEFSRSh1cmwucGF0aCgpLCBRTGF0aW4xU3Ry
aW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKTsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIGZsZXNoZWQgb3V0LiBSaWdodCBub3cgaXQncyBq
dXN0IGhlcmUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgotICAgIHZpZXdBYnN0cmFjdGlv
bi0+c3RvcCgpOwotfQotCi12b2lkIHRzdF9Db21tb25WaWV3VGVzdHM6OmxvYWRQcm9ncmVzcygp
Ci17Ci0gICAgUUNPTVBBUkUodmlld0Fic3RyYWN0aW9uLT5sb2FkUHJvZ3Jlc3MoKSwgMCk7Ci0K
LSAgICB2aWV3QWJzdHJhY3Rpb24tPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3Ry
aW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7Ci0gICAgUVNp
Z25hbFNweSBsb2FkUHJvZ3Jlc3NDaGFuZ2VkU3B5KHZpZXdBYnN0cmFjdGlvbi5kYXRhKCksIFNJ
R05BTChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpKTsKLSAgICBRVkVSSUZZKHdhaXRGb3JTaWdu
YWwodmlld0Fic3RyYWN0aW9uLmRhdGEoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSkpKTsKLQot
ICAgIFFWRVJJRlkobG9hZFByb2dyZXNzQ2hhbmdlZFNweS5jb3VudCgpID49IDEpOwotCi0gICAg
UUNPTVBBUkUodmlld0Fic3RyYWN0aW9uLT5sb2FkUHJvZ3Jlc3MoKSwgMTAwKTsKLX0KLQotdm9p
ZCB0c3RfQ29tbW9uVmlld1Rlc3RzOjpzaG93KCkKLXsKLSAgICAvLyBUaGlzIHNob3VsZCBub3Qg
Y3Jhc2guCi0gICAgdmlld0Fic3RyYWN0aW9uLT5zaG93KCk7Ci0gICAgUVRlc3Q6OnFXYWl0KDIw
MCk7Ci0gICAgdmlld0Fic3RyYWN0aW9uLT5oaWRlKCk7Ci19Ci0KLVFUV0VCS0lUX0FQSV9URVNU
X01BSU4odHN0X0NvbW1vblZpZXdUZXN0cykKLQotI2luY2x1ZGUgInRzdF9jb21tb252aWV3dGVz
dHMubW9jIgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL2NvbW1vbnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rpb24uY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vidmlld2Fic3RyYWN0
aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJhYTMzNjM4NzgyYjg5Zjlk
NjU3YzQ2NWEzOGUwOTM0NDZkYTU0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2NvbW1v
bnZpZXd0ZXN0cy93ZWJ2aWV3YWJzdHJhY3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg5
ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlIDxRQWN0aW9uPgotI2luY2x1
ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRGVza3RvcFdpZGdldD4KLSNpbmNsdWRlIDxx
d2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlICJ3ZWJ2aWV3YWJzdHJhY3Rpb24u
aCIKLQotV2ViVmlld0Fic3RyYWN0aW9uOjpXZWJWaWV3QWJzdHJhY3Rpb24oKQotICAgIDogbV90
b3VjaFdlYlZpZXdXaW5kb3cobmV3IFFUb3VjaFdlYlZpZXcpCi0gICAgLCBtX2Rlc2t0b3BXZWJW
aWV3V2luZG93KG5ldyBRRGVza3RvcFdlYlZpZXcpCi17Ci0gICAgUURlc2t0b3BXaWRnZXQqIGNv
bnN0IGRlc2t0b3BXaWRnZXQgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKTsKLSAgICBjb25zdCBR
UmVjdCBtYWluU2NyZWVuR2VvbWV0cnkgPSBkZXNrdG9wV2lkZ2V0LT5hdmFpbGFibGVHZW9tZXRy
eSgpOwotCi0gICAgUVJlY3Qgc2NyZWVuSGFsZihtYWluU2NyZWVuR2VvbWV0cnkudG9wTGVmdCgp
LCBRU2l6ZShtYWluU2NyZWVuR2VvbWV0cnkud2lkdGgoKSAvIDIsIG1haW5TY3JlZW5HZW9tZXRy
eS5oZWlnaHQoKSkpOwotICAgIG1fdG91Y2hXZWJWaWV3V2luZG93LnNldEdlb21ldHJ5KHNjcmVl
bkhhbGYpOwotICAgIG1fdG91Y2hXZWJWaWV3V2luZG93LnNldFdpbmRvd1RpdGxlKFFMYXRpbjFT
dHJpbmcoIlRvdWNoV2ViVmlldyIpKTsKLSAgICBjb25uZWN0KHRvdWNoV2ViVmlldygpLCBTSUdO
QUwobG9hZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1QodG91Y2hWaWV3TG9hZFN0YXJ0ZWQoKSkpOwot
ICAgIGNvbm5lY3QodG91Y2hXZWJWaWV3KCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpLCB0aGlz
LCBTTE9UKHRvdWNoVmlld0xvYWRTdWNjZWVkZWQoKSkpOwotICAgIGNvbm5lY3QodG91Y2hXZWJW
aWV3KCksIFNJR05BTChsb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlLCBpbnQsIGNv
bnN0IFFVcmwmKSksIHRoaXMsIFNMT1QodG91Y2hWaWV3TG9hZEZhaWxlZChRQmFzZVdlYlZpZXc6
OkVycm9yVHlwZSwgaW50LCBjb25zdCBRVXJsJikpKTsKLSAgICBjb25uZWN0KHRvdWNoV2ViVmll
dygpLCBTSUdOQUwobG9hZFByb2dyZXNzQ2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVCh0b3VjaFZp
ZXdMb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpKTsKLQotICAgIHNjcmVlbkhhbGYubW92ZUxlZnQo
c2NyZWVuSGFsZi5yaWdodCgpKTsKLSAgICBtX2Rlc2t0b3BXZWJWaWV3V2luZG93LnNldEdlb21l
dHJ5KHNjcmVlbkhhbGYpOwotICAgIG1fZGVza3RvcFdlYlZpZXdXaW5kb3cuc2V0V2luZG93VGl0
bGUoUUxhdGluMVN0cmluZygiRGVza3RvcFdlYlZpZXciKSk7Ci0gICAgY29ubmVjdChkZXNrdG9w
V2ViVmlldygpLCBTSUdOQUwobG9hZFN0YXJ0ZWQoKSksIHRoaXMsIFNMT1QoZGVza3RvcFZpZXdM
b2FkU3RhcnRlZCgpKSk7Ci0gICAgY29ubmVjdChkZXNrdG9wV2ViVmlldygpLCBTSUdOQUwobG9h
ZFN1Y2NlZWRlZCgpKSwgdGhpcywgU0xPVChkZXNrdG9wVmlld0xvYWRTdWNjZWVkZWQoKSkpOwot
ICAgIGNvbm5lY3QoZGVza3RvcFdlYlZpZXcoKSwgU0lHTkFMKGxvYWRGYWlsZWQoUUJhc2VXZWJW
aWV3OjpFcnJvclR5cGUsIGludCwgY29uc3QgUVVybCYpKSwgdGhpcywgU0xPVChkZXNrdG9wVmll
d0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgY29uc3QgUVVybCYpKSk7
Ci0gICAgY29ubmVjdChkZXNrdG9wV2ViVmlldygpLCBTSUdOQUwobG9hZFByb2dyZXNzQ2hhbmdl
ZChpbnQpKSwgdGhpcywgU0xPVChkZXNrdG9wVmlld0xvYWRQcm9ncmVzc0NoYW5nZWQoaW50KSkp
OwotfQotCi12b2lkIFdlYlZpZXdBYnN0cmFjdGlvbjo6c2hvdygpCi17Ci0gICAgbV90b3VjaFdl
YlZpZXdXaW5kb3cuc2hvdygpOwotICAgIG1fZGVza3RvcFdlYlZpZXdXaW5kb3cuc2hvdygpOwot
ICAgIFFUZXN0OjpxV2FpdEZvcldpbmRvd1Nob3duKCZtX2Rlc2t0b3BXZWJWaWV3V2luZG93KTsK
LX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmhpZGUoKQotewotICAgIG1fdG91Y2hXZWJW
aWV3V2luZG93LmhpZGUoKTsKLSAgICBtX2Rlc2t0b3BXZWJWaWV3V2luZG93LmhpZGUoKTsKLX0K
LQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmxvYWQoY29uc3QgUVVybCYgdXJsKQotewotICAg
IHRvdWNoV2ViVmlldygpLT5sb2FkKHVybCk7Ci0gICAgZGVza3RvcFdlYlZpZXcoKS0+bG9hZCh1
cmwpOwotfQotCi1ib29sIFdlYlZpZXdBYnN0cmFjdGlvbjo6dXJsKFFVcmwmIHVybCkgY29uc3QK
LXsKLSAgICBjb25zdCBRVXJsIHRvdWNoVmlld1VybCA9IHRvdWNoV2ViVmlldygpLT51cmwoKTsK
LSAgICBjb25zdCBRVXJsIGRlc2t0b3BWaWV3VXJsID0gZGVza3RvcFdlYlZpZXcoKS0+dXJsKCk7
Ci0KLSAgICBpZiAodG91Y2hWaWV3VXJsICE9IGRlc2t0b3BWaWV3VXJsKSB7Ci0gICAgICAgIHFX
YXJuaW5nKCkgPDwgIldlYlZpZXdBYnN0cmFjdGlvbjo6dXJsKCk6IHRoZSBVUkxzIGFyZSBub3Qg
ZXF1YWxzLiI7Ci0gICAgICAgIHFXYXJuaW5nKCkgPDwgIlFUb3VjaFZpZXcncyB1cmwgPSAiIDw8
IHRvdWNoVmlld1VybDsKLSAgICAgICAgcVdhcm5pbmcoKSA8PCAiUURlc2t0b3BWaWV3J3MgdXJs
ID0gIiA8PCBkZXNrdG9wVmlld1VybDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHVybCA9IHRvdWNoVmlld1VybDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFdlYlZp
ZXdBYnN0cmFjdGlvbjo6bG9hZFByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpbnQgdG91Y2hWaWV3
UHJvZ3Jlc3MgPSB0b3VjaFdlYlZpZXcoKS0+bG9hZFByb2dyZXNzKCk7Ci0gICAgaW50IGRlc2t0
b3BWaWV3UHJvZ3Jlc3MgPSBkZXNrdG9wV2ViVmlldygpLT5sb2FkUHJvZ3Jlc3MoKTsKLQotICAg
IGlmICh0b3VjaFZpZXdQcm9ncmVzcyAhPSBkZXNrdG9wVmlld1Byb2dyZXNzKSB7Ci0gICAgICAg
IHFXYXJuaW5nKCkgPDwgIldlYlZpZXdBYnN0cmFjdGlvbjo6bG9hZFByb2dyZXNzKCk6IHRoZSBs
b2FkIHByb2dyZXNzIGFyZSBkaWZmZXJlbnQuIjsKLSAgICAgICAgcVdhcm5pbmcoKSA8PCAiUVRv
dWNoVmlldydzIGxvYWQgcHJvZ3Jlc3MgPSAiIDw8IHRvdWNoVmlld1Byb2dyZXNzOwotICAgICAg
ICBxV2FybmluZygpIDw8ICJRRGVza3RvcFZpZXcncyBsb2FkIHByb2dyZXNzID0gIiA8PCBkZXNr
dG9wVmlld1Byb2dyZXNzOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvdWNoVmlld1Byb2dyZXNzOwotfQotCi12b2lkIFdlYlZpZXdBYnN0cmFjdGlvbjo6Z29CYWNr
KCkKLXsKLSAgICB0b3VjaFdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Z29CYWNr
KCk7Ci0gICAgZGVza3RvcFdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Z29CYWNr
KCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjpnb0ZvcndhcmQoKQotewotICAgIHRv
dWNoV2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5nb0ZvcndhcmQoKTsKLSAgICBk
ZXNrdG9wV2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5nb0ZvcndhcmQoKTsKLX0K
LQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OnN0b3AoKQotewotICAgIHRvdWNoV2ViVmlldygp
LT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5zdG9wKCk7Ci0gICAgZGVza3RvcFdlYlZpZXcoKS0+
bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+c3RvcCgpOwotfQotCi12b2lkIFdlYlZpZXdBYnN0cmFj
dGlvbjo6cmVsb2FkKCkKLXsKLSAgICB0b3VjaFdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xs
ZXIoKS0+cmVsb2FkKCk7Ci0gICAgZGVza3RvcFdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xs
ZXIoKS0+cmVsb2FkKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjp0b3VjaFZpZXdM
b2FkU3RhcnRlZCgpCi17Ci0gICAgbV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9h
ZFN0YXJ0ZWQoKSldKys7Ci0gICAgaWYgKG1fdG91Y2hWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFM
KGxvYWRTdGFydGVkKCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxv
YWRTdGFydGVkKCkpXSkKLSAgICAgICAgZW1pdCBsb2FkU3RhcnRlZCgpOwotfQotCi12b2lkIFdl
YlZpZXdBYnN0cmFjdGlvbjo6ZGVza3RvcFZpZXdMb2FkU3RhcnRlZCgpCi17Ci0gICAgbV9kZXNr
dG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3RhcnRlZCgpKV0rKzsKLSAgICBpZiAo
bV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN0YXJ0ZWQoKSldID09IG1fZGVz
a3RvcFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZFN0YXJ0ZWQoKSldKQotICAgICAgICBl
bWl0IGxvYWRTdGFydGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjp0b3VjaFZp
ZXdMb2FkU3VjY2VlZGVkKCkKLXsKLSAgICBtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyW1NJR05B
TChsb2FkU3VjY2VlZGVkKCkpXSsrOwotICAgIGlmIChtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVy
W1NJR05BTChsb2FkU3VjY2VlZGVkKCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJb
U0lHTkFMKGxvYWRTdWNjZWVkZWQoKSldKQotICAgICAgICBlbWl0IGxvYWRTdWNjZWVkZWQoKTsK
LX0KLQotdm9pZCBXZWJWaWV3QWJzdHJhY3Rpb246OmRlc2t0b3BWaWV3TG9hZFN1Y2NlZWRlZCgp
Ci17Ci0gICAgbV9kZXNrdG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3VjY2VlZGVk
KCkpXSsrOwotICAgIGlmIChtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyW1NJR05BTChsb2FkU3Vj
Y2VlZGVkKCkpXSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRTdWNj
ZWVkZWQoKSldKQotICAgICAgICBlbWl0IGxvYWRTdWNjZWVkZWQoKTsKLX0KLQotdm9pZCBXZWJW
aWV3QWJzdHJhY3Rpb246OnRvdWNoVmlld0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5
cGUgZXJyb3JUeXBlLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBRVXJsJiB1cmwpCi17Ci0gICAgbV90
b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZEZhaWxlZChRQmFzZVdlYlZpZXc6OkVy
cm9yVHlwZSwgaW50LCBRVXJsKSldKys7Ci0gICAgaWYgKG1fdG91Y2hWaWV3U2lnbmFsc0NvdW50
ZXJbU0lHTkFMKGxvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgUVVybCkp
XSA9PSBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRGYWlsZWQoUUJhc2VX
ZWJWaWV3OjpFcnJvclR5cGUsIGludCwgUVVybCkpXSkKLSAgICAgICAgZW1pdCBsb2FkRmFpbGVk
KHN0YXRpY19jYXN0PFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlPihlcnJvclR5cGUpLCBlcnJvckNv
ZGUsIHVybCk7Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjpkZXNrdG9wVmlld0xvYWRG
YWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUgZXJyb3JUeXBlLCBpbnQgZXJyb3JDb2RlLCBj
b25zdCBRVXJsJiB1cmwpCi17Ci0gICAgbV9kZXNrdG9wVmlld1NpZ25hbHNDb3VudGVyW1NJR05B
TChsb2FkRmFpbGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlLCBpbnQsIFFVcmwpKV0rKzsKLSAg
ICBpZiAobV90b3VjaFZpZXdTaWduYWxzQ291bnRlcltTSUdOQUwobG9hZEZhaWxlZChRQmFzZVdl
YlZpZXc6OkVycm9yVHlwZSwgaW50LCBRVXJsKSldID09IG1fZGVza3RvcFZpZXdTaWduYWxzQ291
bnRlcltTSUdOQUwobG9hZEZhaWxlZChRQmFzZVdlYlZpZXc6OkVycm9yVHlwZSwgaW50LCBRVXJs
KSldKQotICAgICAgICBlbWl0IGxvYWRGYWlsZWQoZXJyb3JUeXBlLCBlcnJvckNvZGUsIHVybCk7
Ci19Ci0KLXZvaWQgV2ViVmlld0Fic3RyYWN0aW9uOjp0b3VjaFZpZXdMb2FkUHJvZ3Jlc3NDaGFu
Z2VkKGludCBwcm9ncmVzcykKLXsKLSAgICBtX3RvdWNoVmlld1NpZ25hbHNDb3VudGVyW1NJR05B
TChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpXSsrOwotICAgIGlmIChtX3RvdWNoVmlld1NpZ25h
bHNDb3VudGVyW1NJR05BTChsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCkpXSA9PSBtX2Rlc2t0b3BW
aWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50KSldKQotICAg
ICAgICBlbWl0IGxvYWRQcm9ncmVzc0NoYW5nZWQocHJvZ3Jlc3MpOwotfQotCi12b2lkIFdlYlZp
ZXdBYnN0cmFjdGlvbjo6ZGVza3RvcFZpZXdMb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCBwcm9ncmVz
cykKLXsKLSAgICBtX2Rlc2t0b3BWaWV3U2lnbmFsc0NvdW50ZXJbU0lHTkFMKGxvYWRQcm9ncmVz
c0NoYW5nZWQoaW50KSldKys7Ci0gICAgaWYgKG1fdG91Y2hWaWV3U2lnbmFsc0NvdW50ZXJbU0lH
TkFMKGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50KSldID09IG1fZGVza3RvcFZpZXdTaWduYWxzQ291
bnRlcltTSUdOQUwobG9hZFByb2dyZXNzQ2hhbmdlZChpbnQpKV0pCi0gICAgICAgIGVtaXQgbG9h
ZFByb2dyZXNzQ2hhbmdlZChwcm9ncmVzcyk7Ci19Ci0KLVFUb3VjaFdlYlZpZXcqIFdlYlZpZXdB
YnN0cmFjdGlvbjo6dG91Y2hXZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UVRvdWNoV2ViVmlldyo+KG1fdG91Y2hXZWJWaWV3V2luZG93LndlYlZpZXcuZGF0YSgpKTsK
LX0KLQotUURlc2t0b3BXZWJWaWV3KiBXZWJWaWV3QWJzdHJhY3Rpb246OmRlc2t0b3BXZWJWaWV3
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UURlc2t0b3BXZWJWaWV3Kj4obV9k
ZXNrdG9wV2ViVmlld1dpbmRvdy53ZWJWaWV3LmRhdGEoKSk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvY29tbW9udmlld3Rlc3RzL3dlYnZp
ZXdhYnN0cmFjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9j
b21tb252aWV3dGVzdHMvd2Vidmlld2Fic3RyYWN0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNmY2I0NDE2MGEzNzU2MzkxZDk3ZmM0YmI4MjY4MjU2NGQ4NDFkYTIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9jb21tb252aWV3dGVzdHMvd2Vidmlld2Fic3RyYWN0aW9u
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0j
aWZuZGVmIHdlYnZpZXdhYnN0cmFjdGlvbl9oCi0jZGVmaW5lIHdlYnZpZXdhYnN0cmFjdGlvbl9o
Ci0KLSNpbmNsdWRlIDxRSGFzaD4KLSNpbmNsdWRlIDxRVXJsPgotI2luY2x1ZGUgPFF0VGVzdC9R
dFRlc3Q+Ci0jaW5jbHVkZSA8cXRvdWNod2VicGFnZS5oPgotI2luY2x1ZGUgPHF0b3VjaHdlYnZp
ZXcuaD4KLSNpbmNsdWRlIDxxZGVza3RvcHdlYnZpZXcuaD4KLSNpbmNsdWRlICIuLi90ZXN0d2lu
ZG93LmgiCi0KLWNsYXNzIFdlYlZpZXdBYnN0cmFjdGlvbiA6IHB1YmxpYyBRT2JqZWN0Ci17Ci0g
ICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXZWJWaWV3QWJzdHJhY3Rpb24oKTsKLQotICAgIHZv
aWQgc2hvdygpOwotICAgIHZvaWQgaGlkZSgpOwotCi0gICAgdm9pZCBsb2FkKGNvbnN0IFFVcmwm
KTsKLSAgICBib29sIHVybChRVXJsJikgY29uc3Q7Ci0gICAgaW50IGxvYWRQcm9ncmVzcygpIGNv
bnN0OwotCi0gICAgdm9pZCBnb0JhY2soKTsKLSAgICB2b2lkIGdvRm9yd2FyZCgpOwotICAgIHZv
aWQgc3RvcCgpOwotICAgIHZvaWQgcmVsb2FkKCk7Ci0KLVFfU0lHTkFMUzoKLSAgICB2b2lkIGxv
YWRTdGFydGVkKCk7Ci0gICAgdm9pZCBsb2FkU3VjY2VlZGVkKCk7Ci0gICAgdm9pZCBsb2FkRmFp
bGVkKFFCYXNlV2ViVmlldzo6RXJyb3JUeXBlLCBpbnQsIGNvbnN0IFFVcmwmKTsKLSAgICB2b2lk
IGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50KTsKLQotcHJpdmF0ZSBRX1NMT1RTOgotICAgIHZvaWQg
dG91Y2hWaWV3TG9hZFN0YXJ0ZWQoKTsKLSAgICB2b2lkIGRlc2t0b3BWaWV3TG9hZFN0YXJ0ZWQo
KTsKLSAgICB2b2lkIHRvdWNoVmlld0xvYWRTdWNjZWVkZWQoKTsKLSAgICB2b2lkIGRlc2t0b3BW
aWV3TG9hZFN1Y2NlZWRlZCgpOwotICAgIHZvaWQgdG91Y2hWaWV3TG9hZEZhaWxlZChRQmFzZVdl
YlZpZXc6OkVycm9yVHlwZSwgaW50LCBjb25zdCBRVXJsJik7Ci0gICAgdm9pZCBkZXNrdG9wVmll
d0xvYWRGYWlsZWQoUUJhc2VXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgY29uc3QgUVVybCYpOwot
ICAgIHZvaWQgdG91Y2hWaWV3TG9hZFByb2dyZXNzQ2hhbmdlZChpbnQpOwotICAgIHZvaWQgZGVz
a3RvcFZpZXdMb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCk7Ci0KLXByaXZhdGU6Ci0gICAgUVRvdWNo
V2ViVmlldyogdG91Y2hXZWJWaWV3KCkgY29uc3Q7Ci0gICAgUURlc2t0b3BXZWJWaWV3KiBkZXNr
dG9wV2ViVmlldygpIGNvbnN0OwotCi0gICAgVGVzdFdpbmRvdyBtX3RvdWNoV2ViVmlld1dpbmRv
dzsKLSAgICBRSGFzaDxjb25zdCBjaGFyICosIHVuc2lnbmVkIGludD4gbV90b3VjaFZpZXdTaWdu
YWxzQ291bnRlcjsKLQotICAgIFRlc3RXaW5kb3cgbV9kZXNrdG9wV2ViVmlld1dpbmRvdzsKLSAg
ICBRSGFzaDxjb25zdCBjaGFyICosIHVuc2lnbmVkIGludD4gbV9kZXNrdG9wVmlld1NpZ25hbHND
b3VudGVyOwotfTsKLQotI2VuZGlmIC8qIHdlYnZpZXdhYnN0cmFjdGlvbl9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmll
dy9xZGVza3RvcHdlYnZpZXcucHJvIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xZGVza3RvcHdlYnZpZXcvcWRlc2t0b3B3ZWJ2aWV3LnBybwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTk5YzdmNDkzOGNiMTUxMGVlZmVmYWVmY2UzMTY2M2MwOTdmMDU0Mi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNrdG9wd2Vidmlldy9xZGVza3RvcHdlYnZp
ZXcucHJvCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaW5jbHVkZSguLi90ZXN0cy5wcmkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FkZXNr
dG9wd2Vidmlldy90c3RfcWRlc2t0b3B3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcWRlc2t0b3B3ZWJ2aWV3L3RzdF9xZGVza3RvcHdlYnZpZXcuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzI3NDIzOTcyNzIzNTkyMDJjMzc2NjMy
NGY5MjFjYTkwMTQ0OTRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcWRlc2t0b3B3ZWJ2
aWV3L3RzdF9xZGVza3RvcHdlYnZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlIDxRU2NvcGVkUG9pbnRlcj4KLSNpbmNs
dWRlIDxRdFRlc3QvUXRUZXN0PgotI2luY2x1ZGUgPHFkZXNrdG9wd2Vidmlldy5oPgotI2luY2x1
ZGUgPHF3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oPgotI2luY2x1ZGUgIi4uL3Rlc3R3aW5kb3cu
aCIKLSNpbmNsdWRlICIuLi91dGlsLmgiCi0KLWNsYXNzIHRzdF9RRGVza3RvcFdlYlZpZXcgOiBw
dWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICB0c3RfUURlc2t0b3BX
ZWJWaWV3KCk7Ci0KLXByaXZhdGUgc2xvdHM6Ci0gICAgdm9pZCBpbml0KCk7Ci0gICAgdm9pZCBj
bGVhbnVwKCk7Ci0KLSAgICB2b2lkIG5hdmlnYXRpb25TdGF0dXNBdFN0YXJ0dXAoKTsKLSAgICB2
b2lkIHN0b3BFbmFibGVkQWZ0ZXJMb2FkU3RhcnRlZCgpOwotCi1wcml2YXRlOgotICAgIGlubGlu
ZSBRRGVza3RvcFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdDsKLSAgICBRU2NvcGVkUG9pbnRlcjxU
ZXN0V2luZG93PiBtX3dpbmRvdzsKLX07Ci0KLXRzdF9RRGVza3RvcFdlYlZpZXc6OnRzdF9RRGVz
a3RvcFdlYlZpZXcoKQotewotICAgIGFkZFF0V2ViUHJvY2Vzc1RvUGF0aCgpOwotfQotCi12b2lk
IHRzdF9RRGVza3RvcFdlYlZpZXc6OmluaXQoKQotewotICAgIG1fd2luZG93LnJlc2V0KG5ldyBU
ZXN0V2luZG93KG5ldyBRRGVza3RvcFdlYlZpZXcoKSkpOwotfQotCi12b2lkIHRzdF9RRGVza3Rv
cFdlYlZpZXc6OmNsZWFudXAoKQotewotICAgIG1fd2luZG93LnJlc2V0KCk7Ci19Ci0KLWlubGlu
ZSBRRGVza3RvcFdlYlZpZXcqIHRzdF9RRGVza3RvcFdlYlZpZXc6OndlYlZpZXcoKSBjb25zdAot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxRRGVza3RvcFdlYlZpZXcqPihtX3dpbmRvdy0+d2Vi
Vmlldy5kYXRhKCkpOwotfQotCi12b2lkIHRzdF9RRGVza3RvcFdlYlZpZXc6Om5hdmlnYXRpb25T
dGF0dXNBdFN0YXJ0dXAoKQotewotICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+bmF2aWdhdGlvbkNv
bnRyb2xsZXIoKS0+Y2FuR29CYWNrKCksIGZhbHNlKTsKLQotICAgIFFDT01QQVJFKHdlYlZpZXco
KS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuR29Gb3J3YXJkKCksIGZhbHNlKTsKLQotICAg
IFFDT01QQVJFKHdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuU3RvcCgpLCBm
YWxzZSk7Ci0KLSAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCkt
PmNhblJlbG9hZCgpLCBmYWxzZSk7Ci19Ci0KLWNsYXNzIExvYWRTdGFydGVkQ2F0Y2hlciA6IHB1
YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIExvYWRTdGFydGVkQ2F0
Y2hlcihRRGVza3RvcFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgICAgIDogbV93ZWJWaWV3KHdlYlZp
ZXcpCi0gICAgewotICAgICAgICBjb25uZWN0KG1fd2ViVmlldywgU0lHTkFMKGxvYWRTdGFydGVk
KCkpLCB0aGlzLCBTTE9UKG9uTG9hZFN0YXJ0ZWQoKSkpOwotICAgIH0KLQotcHVibGljIHNsb3Rz
OgotICAgIHZvaWQgb25Mb2FkU3RhcnRlZCgpCi0gICAgewotICAgICAgICBRTWV0YU9iamVjdDo6
aW52b2tlTWV0aG9kKHRoaXMsICJmaW5pc2hlZCIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKLQot
ICAgICAgICBRQ09NUEFSRShtX3dlYlZpZXctPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmNhblN0
b3AoKSwgdHJ1ZSk7Ci0gICAgfQotCi1zaWduYWxzOgotICAgIHZvaWQgZmluaXNoZWQoKTsKLQot
cHJpdmF0ZToKLSAgICBRRGVza3RvcFdlYlZpZXcqIG1fd2ViVmlldzsKLX07Ci0KLXZvaWQgdHN0
X1FEZXNrdG9wV2ViVmlldzo6c3RvcEVuYWJsZWRBZnRlckxvYWRTdGFydGVkKCkKLXsKLSAgICBR
Q09NUEFSRSh3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmNhblN0b3AoKSwgZmFs
c2UpOwotCi0gICAgTG9hZFN0YXJ0ZWRDYXRjaGVyIGNhdGNoZXIod2ViVmlldygpKTsKLSAgICB3
ZWJWaWV3KCktPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3RyaW5nKFRFU1RTX1NP
VVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7Ci0gICAgd2FpdEZvclNpZ25hbCgm
Y2F0Y2hlciwgU0lHTkFMKGZpbmlzaGVkKCkpKTsKLQotICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+
bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuU3RvcCgpLCB0cnVlKTsKLQotICAgIHdhaXRGb3JT
aWduYWwod2ViVmlldygpLCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSk7Ci19Ci0KLVFUV0VCS0lU
X0FQSV9URVNUX01BSU4odHN0X1FEZXNrdG9wV2ViVmlldykKLQotI2luY2x1ZGUgInRzdF9xZGVz
a3RvcHdlYnZpZXcubW9jIgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9kb3dubG9hZC5xbWwgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJW
aWV3L3RzdF9kb3dubG9hZC5xbWwKaW5kZXggZWJmNjRkMzRhYzlhNTg5Njc0YmM2MWQ2YmFhZmMy
OGY2MTVmYzBiMS4uZDQ3YWQ3MjE4Njg2YzgwZmIwYjI2NGJmNmE5MTRmMzAyZDY3NjViMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9E
ZXNrdG9wV2ViVmlldy90c3RfZG93bmxvYWQucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2Rvd25sb2FkLnFt
bApAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAK
IGltcG9ydCBRdFdlYktpdCAzLjAKK2ltcG9ydCBRdFdlYktpdFRlc3QgMS4wCiAKIERlc2t0b3BX
ZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbGlua0hvdmVy
ZWQucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9E
ZXNrdG9wV2ViVmlldy90c3RfbGlua0hvdmVyZWQucW1sCmluZGV4IDZiZDlhNjMwNmYwYTlkYzcz
ODJmOGE0ZGVhNzAxMjQzODY3N2JjMjMuLjk5NjcyYmY3OTFlMDQ2YjEyYWIxZmJjMTYwNWRlNTc1
ZGZkN2M5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xpbmtIb3ZlcmVkLnFtbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3
L3RzdF9saW5rSG92ZXJlZC5xbWwKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgUXRRdWljayAyLjAK
IGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCitpbXBvcnQgUXRXZWJLaXRU
ZXN0IDEuMAogCiBEZXNrdG9wV2ViVmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdl
YlZpZXcvdHN0X2xvYWRGYWlsLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRGYWlsLnFtbAppbmRleCA5ODJm
NTM0ODBmMWQxYThkNGVlNzU2MmRjMDlhYWIyY2IxMTk5ZDA5Li4wNTAxODY5NTA1ZTkyNGY0ZWIy
YzBhN2IwZmY4Nzc1ZDhkMDU4YmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkRmFpbC5xbWwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNr
dG9wV2ViVmlldy90c3RfbG9hZEZhaWwucW1sCkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IFF0UXVp
Y2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0IDMuMAoraW1wb3J0IFF0
V2ViS2l0VGVzdCAxLjAKIAogRGVza3RvcFdlYlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rl
c2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFByb2dyZXNz
LnFtbAppbmRleCBiMmIwMTgzNTcwY2JkNTU4YTA0NWJkZjVjYTJkYTg1MTliNTM4NGRkLi5hOTg3
YjVkZjYwODY3M2M3OWU0YzgwNjJhY2IyMDc1MDIyNDZmOTdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3Rz
dF9sb2FkUHJvZ3Jlc3MucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzcy5xbWwKQEAgLTEs
NiArMSw3IEBACiBpbXBvcnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQg
UXRXZWJLaXQgMy4wCitpbXBvcnQgUXRXZWJLaXRUZXN0IDEuMAogCiBEZXNrdG9wV2ViVmlldyB7
CiAgICAgaWQ6IHdlYlZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25h
bC5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rl
c2t0b3BXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWduYWwucW1sCmluZGV4IDBkOTQ5NmEzYjEw
NWJjM2UwNGQ3Nzc3M2EwYzI5MTg1MWE5ZDU2YTEuLjU2MjIyY2I0NjU1ZjNhNWZlNjMxY2YyNTlh
YjFlZWYzY2E1ZmZlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5x
bWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9E
ZXNrdG9wV2ViVmlldy90c3RfbG9hZFByb2dyZXNzU2lnbmFsLnFtbApAQCAtMSw2ICsxLDcgQEAK
IGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAz
LjAKK2ltcG9ydCBRdFdlYktpdFRlc3QgMS4wCiAKIERlc2t0b3BXZWJWaWV3IHsKICAgICBpZDog
d2ViVmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0
cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbG9hZFplcm9TaXplVmlldy5xbWwgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3
L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbAppbmRleCA3Y2UyNjJlNzM4NWJkYTdiYjczYjRhMGQ3
MDU3YmY4MWZmNjBlZDM5Li41MzY2MjdiZjI1OWI3Y2FlOTI1YzM5MGM1ZTk0MmFjMDRjZmE5MjZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3Rz
dF9sb2FkWmVyb1NpemVWaWV3LnFtbApAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBRdFF1aWNrIDIu
MAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKK2ltcG9ydCBRdFdlYktp
dFRlc3QgMS4wCiAKIERlc2t0b3BXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9w
V2ViVmlldy90c3RfbWVzc2FnaW5nLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X21lc3NhZ2luZy5xbWwKaW5kZXgg
ZGViMWM1MGRkOTNiMzE4MjIyZjgyODg5MGU3NWRmZDQ4MDg3NGQ5YS4uNGNmMWMzMDgxODgyYzFh
NWUyMzZmZDM1ZDhhNDcyOGFmN2M5OWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfbWVzc2FnaW5n
LnFtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3Rz
L0Rlc2t0b3BXZWJWaWV3L3RzdF9tZXNzYWdpbmcucW1sCkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0
IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2ViS2l0IDMuMAoraW1w
b3J0IFF0V2ViS2l0VGVzdCAxLjAKIAogSXRlbSB7CiAgICAgRGVza3RvcFdlYlZpZXcgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9E
ZXNrdG9wV2ViVmlldy90c3RfbmF2aWdhdGlvblBvbGljeUZvclVybC5xbWwgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9u
YXZpZ2F0aW9uUG9saWN5Rm9yVXJsLnFtbAppbmRleCAwNGUxZDdhZDlmNmQyODBlOTA0YWNjYjk2
ODFkOGM4YTAyYjZmYzkxLi4zYzBkMDg2MjY0NDk4ZWI0OWJhYjE4ZGNlMmI4MDdkOWM1ZmM5Nzdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9uYXZpZ2F0aW9uUG9saWN5Rm9yVXJsLnFtbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJW
aWV3L3RzdF9uYXZpZ2F0aW9uUG9saWN5Rm9yVXJsLnFtbApAQCAtMSw2ICsxLDcgQEAKIGltcG9y
dCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKK2lt
cG9ydCBRdFdlYktpdFRlc3QgMS4wCiAKIEl0ZW0gewogICAgIERlc2t0b3BXZWJWaWV3IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMv
RGVza3RvcFdlYlZpZXcvdHN0X3ByZWZlcmVuY2VzLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X3ByZWZlcmVuY2Vz
LnFtbAppbmRleCAzMWVlNGNkZDNkNTRjZDdkOTdlZTM2ZDIxZjEyZDkzMWQ0ZmEyYTI5Li44ODM1
NjNkMmI3ZTkyZjc4NjkyM2JjZTZmYzEzNmQyYWVkOTFjNDM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3Rz
dF9wcmVmZXJlbmNlcy5xbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wV2ViVmlldy90c3RfcHJlZmVyZW5jZXMucW1sCkBAIC0xLDYg
KzEsNyBAQAogaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0
V2ViS2l0IDMuMAoraW1wb3J0IFF0V2ViS2l0VGVzdCAxLjAKIAogRGVza3RvcFdlYlZpZXcgewog
ICAgIGlkOiB3ZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BXZWJWaWV3L3RzdF9wcm9wZXJ0aWVzLnFtbCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZp
ZXcvdHN0X3Byb3BlcnRpZXMucW1sCmluZGV4IGNiZDRjM2E4MzA1Mzg2MmRmYjUwY2E1MzlkMmY2
M2M0MjMzMGJjNWIuLjVkYTgyNDE1MGE3MTM3YzJhMTE1ZmQyMDQ3MmM5OWFkZDY5YmQzM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMv
RGVza3RvcFdlYlZpZXcvdHN0X3Byb3BlcnRpZXMucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcFdlYlZpZXcvdHN0X3Byb3BlcnRp
ZXMucW1sCkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0
IDEuMAogaW1wb3J0IFF0V2ViS2l0IDMuMAoraW1wb3J0IFF0V2ViS2l0VGVzdCAxLjAKIAogRGVz
a3RvcFdlYlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZC5x
bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNo
V2ViVmlldy90c3RfbG9hZC5xbWwKaW5kZXggMDRmZjM0NDRmMzJmM2IyNzg0MzMwN2JkNWJjNjQz
NDhjMzdjNTBhNi4uMTIzZjQzNTY4NjNhN2IxMjBkNzFkNjI4NzhkZTU3OGNiMWIzZmUyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9U
b3VjaFdlYlZpZXcvdHN0X2xvYWQucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkLnFtbApAQCAtMiw3ICsy
LDcgQEAgaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEuMAogaW1wb3J0IFF0V2Vi
S2l0IDMuMAogCi1Ub3VjaFdlYlZpZXcgeworV2ViVmlldyB7CiAgICAgaWQ6IHdlYlZpZXcKICAg
ICBoZWlnaHQ6IDYwMAogICAgIHdpZHRoOiA0MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkRmFp
bC5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1Rv
dWNoV2ViVmlldy90c3RfbG9hZEZhaWwucW1sCmluZGV4IGQwYzI5NjcyMDU0MjZjN2NmZDQ0OGI4
Njc5MWY3NGU1YmI5NTdlMGYuLjc1MzllYmY2ZjgxYmNiM2JmOWRjMWE5MzkxNjU2N2M5MjA3ZTNk
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1s
dGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkRmFpbC5xbWwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRGYWls
LnFtbApAQCAtMiw3ICsyLDcgQEAgaW1wb3J0IFF0UXVpY2sgMi4wCiBpbXBvcnQgUXRUZXN0IDEu
MAogaW1wb3J0IFF0V2ViS2l0IDMuMAogCi1Ub3VjaFdlYlZpZXcgeworV2ViVmlldyB7CiAgICAg
aWQ6IHdlYlZpZXcKIAogICAgIHByb3BlcnR5IHZhcmlhbnQgdGVzdFVybApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZp
ZXcvdHN0X2xvYWROZWdhdGl2ZVNpemVWaWV3LnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkTmVnYXRpdmVTaXpl
Vmlldy5xbWwKaW5kZXggNmM0YWNjNjJlOTMyYWViOGU2YmVlMDY2OWE3YzQzMWQ1NmU3N2Q4NS4u
MDk1OTAxMmIxODgzMDc0ZWMzZjNiMjI2MWRmYTE2MjU3OTk0ZWViMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcv
dHN0X2xvYWROZWdhdGl2ZVNpemVWaWV3LnFtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZE5lZ2F0aXZlU2l6
ZVZpZXcucW1sCkBAIC0yLDcgKzIsNyBAQCBpbXBvcnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRl
c3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCiAKLVRvdWNoV2ViVmlldyB7CitXZWJWaWV3IHsK
ICAgICBpZDogd2ViVmlldwogICAgIGhlaWdodDogLTYwMAogICAgIHdpZHRoOiAtNDAwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1Rv
dWNoV2ViVmlldy90c3RfbG9hZFByb2dyZXNzLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1s
CmluZGV4IDdkM2M2ZDE5MWI2ZjNlMDUyNmVmMWYzNTI0NTc2ZTU0ZGYwZDNjYjcuLmQ3OTAxZGY4
MjIwNGJhNWYwZTEzNDdhNTZhNzAwYmE2YzA2ZTQ3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2Fk
UHJvZ3Jlc3MucW1sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3MucW1sCkBAIC0yLDcgKzIsNyBA
QCBpbXBvcnQgUXRRdWljayAyLjAKIGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQg
My4wCiAKLVRvdWNoV2ViVmlldyB7CitXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwogCiAgICAg
U2lnbmFsU3B5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9sb2FkUHJvZ3Jlc3NTaWduYWwucW1sIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZp
ZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwKaW5kZXggMGYyZDliYjg2OTcyYjkzZTAxMGM3
M2ZkMDFlZTkyNTM5ZDBkNWNkNC4uYzc3NDg0OGQ3ZmFkNDZjMjQ3ZGMwMmZhMWI2MDFjOTQyZmY0
YmZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcv
dHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwKQEAgLTIsNyArMiw3IEBAIGltcG9ydCBRdFF1aWNr
IDIuMAogaW1wb3J0IFF0VGVzdCAxLjAKIGltcG9ydCBRdFdlYktpdCAzLjAKIAotVG91Y2hXZWJW
aWV3IHsKK1dlYlZpZXcgewogICAgIGlkOiB3ZWJWaWV3CiAKICAgICBTaWduYWxTcHkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9U
b3VjaFdlYlZpZXcvdHN0X2xvYWRaZXJvU2l6ZVZpZXcucW1sIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZpZXcvdHN0X2xvYWRaZXJvU2l6
ZVZpZXcucW1sCmluZGV4IDc5MmVjZjYxN2YwMzQzZDEwM2MwY2U1YjBiMzQ1Mjg2Zjk0ZjFmMDcu
LjA4ZjdiNWFmNmFjNmUyMDI1MDdkODhiMTkyZGRlYzBiNDJmZGE3ZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3
L3RzdF9sb2FkWmVyb1NpemVWaWV3LnFtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfbG9hZFplcm9TaXplVmlldy5x
bWwKQEAgLTIsNyArMiw3IEBAIGltcG9ydCBRdFF1aWNrIDIuMAogaW1wb3J0IFF0VGVzdCAxLjAK
IGltcG9ydCBRdFdlYktpdCAzLjAKIAotVG91Y2hXZWJWaWV3IHsKK1dlYlZpZXcgewogICAgIGlk
OiB3ZWJWaWV3CiAgICAgaGVpZ2h0OiAwCiAgICAgd2lkdGg6IDAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvVG91Y2hXZWJWaWV3L3Rz
dF9wcm9wZXJ0aWVzLnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cW1sdGVzdHMvVG91Y2hXZWJWaWV3L3RzdF9wcm9wZXJ0aWVzLnFtbAppbmRleCAwODRjYWVmZGIz
NjMwYjE3NGZhNzc5MzY3ZThlNGE4MDE3ZGM2ZGIyLi4xNzVhYjU3NTgzMDljNDgzNzk2ZTFlMGM1
MTEzYmE2ZDU2ZThhMTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FtbHRlc3RzL1RvdWNoV2ViVmlldy90c3RfcHJvcGVydGllcy5xbWwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9Ub3VjaFdlYlZp
ZXcvdHN0X3Byb3BlcnRpZXMucW1sCkBAIC0yLDcgKzIsNyBAQCBpbXBvcnQgUXRRdWljayAyLjAK
IGltcG9ydCBRdFRlc3QgMS4wCiBpbXBvcnQgUXRXZWJLaXQgMy4wCiAKLVRvdWNoV2ViVmlldyB7
CitXZWJWaWV3IHsKICAgICBpZDogd2ViVmlldwogCiAgICAgU2lnbmFsU3B5IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVz
dHMucHJvIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9x
bWx0ZXN0cy5wcm8KaW5kZXggMzZlMGM1MGNhZDk4Y2NlYTc1NGE2YTFkMjdkMjUzMWQxY2RhMmIz
NS4uYjY2NDdiMDdkMWNiMjNiOTA3OWRmNmNhMTMyYTFmYWMyNjJlNTZkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5w
cm8KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9x
bWx0ZXN0cy5wcm8KQEAgLTUsNiArNSwxMSBAQCBDT05GSUcgKz0gd2Fybl9vbiB0ZXN0Y2FzZQog
UVQgLT0gdGVzdGxpYgogUVQgKz0gcW1sdGVzdAogCisjIEZJWE1FOiBXaGVuIHdlYmtpdC1wcml2
YXRlIHdvcmtzIGxldCdzIHVzZSBpdC4KK2xvYWQoamF2YXNjcmlwdGNvcmUpCitsb2FkKHdlYmNv
cmUpCitsb2FkKHdlYmtpdDIpCisKICMgUU1MIGZpbGVzIHRlc3RlZCBhcmUgdGhlIG9uZXMgaW4g
V2ViS2l0IHNvdXJjZSByZXBvc2l0b3J5LgogREVGSU5FUyArPSBRVUlDS19URVNUX1NPVVJDRV9E
SVI9XCJcXFwiJCRQV0RcXFwiXCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwCmluZGV4
IDRiYTNlODBmYTJhZWI4MzlhOTZmZmVkNjRkYWQzM2M1NDhmOTJlZWUuLmYzZGI0ZDJhYTcwZDQy
MDFhYmZhZDJiNTU4YWE3NTMyMDFkNjQyYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvdHN0X3FtbHRlc3RzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3RzdF9xbWx0ZXN0cy5j
cHAKQEAgLTE3LDE1ICsxNywzMSBAQAogICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgog
Ki8KIAorI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIi4uL3V0aWwuaCIKKworI2luY2x1
ZGUgInFxdWlja3dlYnBhZ2UuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3LmgiCisjaW5jbHVk
ZSAicXF1aWNrd2Vidmlld19wLmgiCisKICNpbmNsdWRlIDxRdFF1aWNrVGVzdC9xdWlja3Rlc3Qu
aD4KICNpbmNsdWRlIDxRdFdpZGdldHMvUUFwcGxpY2F0aW9uPgogCitjbGFzcyBEZXNrdG9wV2Vi
VmlldyA6IHB1YmxpYyBRUXVpY2tXZWJWaWV3IHsKK3B1YmxpYzoKKyAgICBEZXNrdG9wV2ViVmll
dyhRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKQorICAgICAgICA6IFFRdWlja1dlYlZpZXcocGFyZW50
KQorICAgIHsKKyAgICAgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldCh0aGlzKS0+c2V0VXNl
VHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKHRydWUpOworICAgIH0KK307CisKIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICBzdXBwcmVzc0RlYnVnT3V0cHV0KCk7CiAg
ICAgLy8gSW5zdGFudGlhdGUgUUFwcGxpY2F0aW9uIHRvIHByZXZlbnQgcXVpY2tfdGVzdF9tYWlu
IHRvIGluc3RhbnRpYXRlIGEgUUd1aUFwcGxpY2F0aW9uLgogICAgIC8vIFRoaXMgY2FuIGJlIHJl
bW92ZWQgYXMgc29vbiBhcyB3ZSBkbyBub3QgdXNlIFF0V2lkZ2V0cyBhbnkgbW9yZS4KICAgICBR
QXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOworICAgIHFtbFJlZ2lzdGVyVHlwZTxEZXNrdG9w
V2ViVmlldz4oIlF0V2ViS2l0VGVzdCIsIDEsIDAsICJEZXNrdG9wV2ViVmlldyIpOwogICAgIHJl
dHVybiBxdWlja190ZXN0X21haW4oYXJnYywgYXJndiwgInFtbHRlc3RzIiwgMCwgUVVJQ0tfVEVT
VF9TT1VSQ0VfRElSKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy9xcXVpY2t3ZWJ2aWV3LnBybyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy9xcXVpY2t3ZWJ2aWV3LnBy
bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lOTljN2Y0OTM4Y2IxNTEwZWVmZWZhZWZjZTMxNjYzYzA5N2YwNTQyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
cXVpY2t3ZWJ2aWV3L3FxdWlja3dlYnZpZXcucHJvCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUoLi4v
dGVzdHMucHJpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmEzOTE1MWI0MDc4NDBiYjRiZTUwYjEyY2RjYWNmZGUwMzgyOGQ0NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAKQEAgLTAsMCArMSwyNDUgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICIuLi90ZXN0d2luZG93LmgiCisjaW5jbHVkZSAi
Li4vdXRpbC5oIgorCisjaW5jbHVkZSA8UVNjb3BlZFBvaW50ZXI+CisjaW5jbHVkZSA8UXRUZXN0
L1F0VGVzdD4KKyNpbmNsdWRlIDxxcXVpY2t3ZWJwYWdlLmg+CisjaW5jbHVkZSA8cXF1aWNrd2Vi
dmlldy5oPgorI2luY2x1ZGUgPHF3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oPgorCitjbGFzcyB0
c3RfUVF1aWNrV2ViVmlldyA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIHRzdF9RUXVpY2tXZWJWaWV3KCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBp
bml0KCk7CisgICAgdm9pZCBjbGVhbnVwKCk7CisKKyAgICB2b2lkIGFjY2Vzc1BhZ2UoKTsKKyAg
ICB2b2lkIG5hdmlnYXRpb25TdGF0dXNBdFN0YXJ0dXAoKTsKKyAgICB2b2lkIHN0b3BFbmFibGVk
QWZ0ZXJMb2FkU3RhcnRlZCgpOworICAgIHZvaWQgYmFzZVVybCgpOworICAgIHZvaWQgbG9hZEVt
cHR5VXJsKCk7CisgICAgdm9pZCBsb2FkRW1wdHlQYWdlVmlld1Zpc2libGUoKTsKKyAgICB2b2lk
IGxvYWRFbXB0eVBhZ2VWaWV3SGlkZGVuKCk7CisgICAgdm9pZCBsb2FkTm9uZXhpc3RlbnRGaWxl
VXJsKCk7CisgICAgdm9pZCBiYWNrQW5kRm9yd2FyZCgpOworICAgIHZvaWQgcmVsb2FkKCk7Cisg
ICAgdm9pZCBzdG9wKCk7CisgICAgdm9pZCBsb2FkUHJvZ3Jlc3MoKTsKKworICAgIHZvaWQgc2hv
dygpOworCitwcml2YXRlOgorICAgIGlubGluZSBRUXVpY2tXZWJWaWV3KiB3ZWJWaWV3KCkgY29u
c3Q7CisgICAgUVNjb3BlZFBvaW50ZXI8VGVzdFdpbmRvdz4gbV93aW5kb3c7Cit9OworCit0c3Rf
UVF1aWNrV2ViVmlldzo6dHN0X1FRdWlja1dlYlZpZXcoKQoreworICAgIGFkZFF0V2ViUHJvY2Vz
c1RvUGF0aCgpOworICAgIHFSZWdpc3Rlck1ldGFUeXBlPFFRdWlja1dlYlBhZ2UqPigiUVF1aWNr
V2ViUGFnZSoiKTsKK30KKwordm9pZCB0c3RfUVF1aWNrV2ViVmlldzo6aW5pdCgpCit7CisgICAg
bV93aW5kb3cucmVzZXQobmV3IFRlc3RXaW5kb3cobmV3IFFRdWlja1dlYlZpZXcoKSkpOworfQor
Cit2b2lkIHRzdF9RUXVpY2tXZWJWaWV3OjpjbGVhbnVwKCkKK3sKKyAgICBtX3dpbmRvdy5yZXNl
dCgpOworfQorCitpbmxpbmUgUVF1aWNrV2ViVmlldyogdHN0X1FRdWlja1dlYlZpZXc6OndlYlZp
ZXcoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxRUXVpY2tXZWJWaWV3Kj4obV93
aW5kb3ctPndlYlZpZXcuZGF0YSgpKTsKK30KKwordm9pZCB0c3RfUVF1aWNrV2ViVmlldzo6YWNj
ZXNzUGFnZSgpCit7CisgICAgUVF1aWNrV2ViUGFnZSogY29uc3QgcGFnZURpcmVjdEFjY2VzcyA9
IHdlYlZpZXcoKS0+cGFnZSgpOworCisgICAgUVZhcmlhbnQgcGFnZVByb3BlcnR5VmFsdWUgPSB3
ZWJWaWV3KCktPnByb3BlcnR5KCJwYWdlIik7CisgICAgUVF1aWNrV2ViUGFnZSogY29uc3QgcGFn
ZVByb3BlcnR5QWNjZXNzID0gcGFnZVByb3BlcnR5VmFsdWUudmFsdWU8UVF1aWNrV2ViUGFnZSo+
KCk7CisgICAgUUNPTVBBUkUocGFnZVByb3BlcnR5QWNjZXNzLCBwYWdlRGlyZWN0QWNjZXNzKTsK
K30KKwordm9pZCB0c3RfUVF1aWNrV2ViVmlldzo6bmF2aWdhdGlvblN0YXR1c0F0U3RhcnR1cCgp
Cit7CisgICAgUUNPTVBBUkUod2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5H
b0JhY2soKSwgZmFsc2UpOworCisgICAgUUNPTVBBUkUod2ViVmlldygpLT5uYXZpZ2F0aW9uQ29u
dHJvbGxlcigpLT5jYW5Hb0ZvcndhcmQoKSwgZmFsc2UpOworCisgICAgUUNPTVBBUkUod2ViVmll
dygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5TdG9wKCksIGZhbHNlKTsKKworICAgIFFD
T01QQVJFKHdlYlZpZXcoKS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuUmVsb2FkKCksIGZh
bHNlKTsKK30KKworY2xhc3MgTG9hZFN0YXJ0ZWRDYXRjaGVyIDogcHVibGljIFFPYmplY3Qgewor
ICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgTG9hZFN0YXJ0ZWRDYXRjaGVyKFFRdWlja1dlYlZp
ZXcqIHdlYlZpZXcpCisgICAgICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgeworICAgICAg
ICBjb25uZWN0KG1fd2ViVmlldywgU0lHTkFMKGxvYWRTdGFydGVkKCkpLCB0aGlzLCBTTE9UKG9u
TG9hZFN0YXJ0ZWQoKSkpOworICAgIH0KKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgb25Mb2Fk
U3RhcnRlZCgpCisgICAgeworICAgICAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKHRoaXMs
ICJmaW5pc2hlZCIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKKworICAgICAgICBRQ09NUEFSRSht
X3dlYlZpZXctPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmNhblN0b3AoKSwgdHJ1ZSk7CisgICAg
fQorCitzaWduYWxzOgorICAgIHZvaWQgZmluaXNoZWQoKTsKKworcHJpdmF0ZToKKyAgICBRUXVp
Y2tXZWJWaWV3KiBtX3dlYlZpZXc7Cit9OworCit2b2lkIHRzdF9RUXVpY2tXZWJWaWV3OjpzdG9w
RW5hYmxlZEFmdGVyTG9hZFN0YXJ0ZWQoKQoreworICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+bmF2
aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuU3RvcCgpLCBmYWxzZSk7CisKKyAgICBMb2FkU3RhcnRl
ZENhdGNoZXIgY2F0Y2hlcih3ZWJWaWV3KCkpOworICAgIHdlYlZpZXcoKS0+bG9hZChRVXJsOjpm
cm9tTG9jYWxGaWxlKFFMYXRpbjFTdHJpbmcoVEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNf
cGFnZS5odG1sIikpKTsKKyAgICB3YWl0Rm9yU2lnbmFsKCZjYXRjaGVyLCBTSUdOQUwoZmluaXNo
ZWQoKSkpOworCisgICAgUUNPTVBBUkUod2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigp
LT5jYW5TdG9wKCksIHRydWUpOworCisgICAgd2FpdEZvclNpZ25hbCh3ZWJWaWV3KCksIFNJR05B
TChsb2FkU3VjY2VlZGVkKCkpKTsKK30KKwordm9pZCB0c3RfUVF1aWNrV2ViVmlldzo6YmFzZVVy
bCgpCit7CisgICAgLy8gVGVzdCB0aGUgdXJsIGlzIGluIGEgd2VsbCBkZWZpbmVkIHN0YXRlIHdo
ZW4gaW5zdGFuY2lhdGluZyB0aGUgdmlldywgYnV0IGJlZm9yZSBsb2FkaW5nIGFueXRoaW5nLgor
ICAgIFFWRVJJRlkod2ViVmlldygpLT51cmwoKS5pc0VtcHR5KCkpOworfQorCit2b2lkIHRzdF9R
UXVpY2tXZWJWaWV3Ojpsb2FkRW1wdHlVcmwoKQoreworICAgIHdlYlZpZXcoKS0+bG9hZChRVXJs
KCkpOworICAgIHdlYlZpZXcoKS0+bG9hZChRVXJsKFFMYXRpbjFTdHJpbmcoIiIpKSk7Cit9CisK
K3ZvaWQgdHN0X1FRdWlja1dlYlZpZXc6OmxvYWRFbXB0eVBhZ2VWaWV3VmlzaWJsZSgpCit7Cisg
ICAgbV93aW5kb3ctPnNob3coKTsKKyAgICBsb2FkRW1wdHlQYWdlVmlld0hpZGRlbigpOworfQor
Cit2b2lkIHRzdF9RUXVpY2tXZWJWaWV3Ojpsb2FkRW1wdHlQYWdlVmlld0hpZGRlbigpCit7Cisg
ICAgUVNpZ25hbFNweSBsb2FkU3RhcnRlZFNweSh3ZWJWaWV3KCksIFNJR05BTChsb2FkU3RhcnRl
ZCgpKSk7CisKKyAgICB3ZWJWaWV3KCktPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4x
U3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7CisgICAg
UVZFUklGWSh3YWl0Rm9yU2lnbmFsKHdlYlZpZXcoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSkp
KTsKKworICAgIFFDT01QQVJFKGxvYWRTdGFydGVkU3B5LnNpemUoKSwgMSk7Cit9CisKK3ZvaWQg
dHN0X1FRdWlja1dlYlZpZXc6OmxvYWROb25leGlzdGVudEZpbGVVcmwoKQoreworICAgIFFTaWdu
YWxTcHkgbG9hZEZhaWxlZFNweSh3ZWJWaWV3KCksIFNJR05BTChsb2FkU3RhcnRlZCgpKSk7CisK
KyAgICB3ZWJWaWV3KCktPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4xU3RyaW5nKFRF
U1RTX1NPVVJDRV9ESVIgIi9odG1sL2ZpbGVfdGhhdF9kb2VzX25vdF9leGlzdC5odG1sIikpKTsK
KyAgICBRVkVSSUZZKHdhaXRGb3JTaWduYWwod2ViVmlldygpLCBTSUdOQUwobG9hZEZhaWxlZChR
UXVpY2tXZWJWaWV3OjpFcnJvclR5cGUsIGludCwgUVVybCkpKSk7CisKKyAgICBRQ09NUEFSRShs
b2FkRmFpbGVkU3B5LnNpemUoKSwgMSk7Cit9CisKK3ZvaWQgdHN0X1FRdWlja1dlYlZpZXc6OmJh
Y2tBbmRGb3J3YXJkKCkKK3sKKyAgICB3ZWJWaWV3KCktPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmls
ZShRTGF0aW4xU3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIp
KSk7CisgICAgUVZFUklGWSh3YWl0Rm9yU2lnbmFsKHdlYlZpZXcoKSwgU0lHTkFMKGxvYWRTdWNj
ZWVkZWQoKSkpKTsKKworICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+dXJsKCkucGF0aCgpLCBRTGF0
aW4xU3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKTsKKwor
ICAgIHdlYlZpZXcoKS0+bG9hZChRVXJsOjpmcm9tTG9jYWxGaWxlKFFMYXRpbjFTdHJpbmcoVEVT
VFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZTIuaHRtbCIpKSk7CisgICAgUVZFUklGWSh3
YWl0Rm9yU2lnbmFsKHdlYlZpZXcoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSkpKTsKKworICAg
IFFDT01QQVJFKHdlYlZpZXcoKS0+dXJsKCkucGF0aCgpLCBRTGF0aW4xU3RyaW5nKFRFU1RTX1NP
VVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UyLmh0bWwiKSk7CisKKyAgICB3ZWJWaWV3KCktPm5h
dmlnYXRpb25Db250cm9sbGVyKCktPmdvQmFjaygpOworICAgIFFWRVJJRlkod2FpdEZvclNpZ25h
bCh3ZWJWaWV3KCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7CisKKyAgICBRQ09NUEFSRSh3
ZWJWaWV3KCktPnVybCgpLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIv
aHRtbC9iYXNpY19wYWdlLmh0bWwiKSk7CisKKyAgICB3ZWJWaWV3KCktPm5hdmlnYXRpb25Db250
cm9sbGVyKCktPmdvRm9yd2FyZCgpOworICAgIFFWRVJJRlkod2FpdEZvclNpZ25hbCh3ZWJWaWV3
KCksIFNJR05BTChsb2FkU3VjY2VlZGVkKCkpKSk7CisKKyAgICBRQ09NUEFSRSh3ZWJWaWV3KCkt
PnVybCgpLnBhdGgoKSwgUUxhdGluMVN0cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNp
Y19wYWdlMi5odG1sIikpOworfQorCit2b2lkIHRzdF9RUXVpY2tXZWJWaWV3OjpyZWxvYWQoKQor
eworICAgIHdlYlZpZXcoKS0+bG9hZChRVXJsOjpmcm9tTG9jYWxGaWxlKFFMYXRpbjFTdHJpbmco
VEVTVFNfU09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZS5odG1sIikpKTsKKyAgICBRVkVSSUZZ
KHdhaXRGb3JTaWduYWwod2ViVmlldygpLCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSkpOworCisg
ICAgUUNPTVBBUkUod2ViVmlldygpLT51cmwoKS5wYXRoKCksIFFMYXRpbjFTdHJpbmcoVEVTVFNf
U09VUkNFX0RJUiAiL2h0bWwvYmFzaWNfcGFnZS5odG1sIikpOworCisgICAgd2ViVmlldygpLT5u
YXZpZ2F0aW9uQ29udHJvbGxlcigpLT5yZWxvYWQoKTsKKyAgICBRVkVSSUZZKHdhaXRGb3JTaWdu
YWwod2ViVmlldygpLCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSkpOworCisgICAgUUNPTVBBUkUo
d2ViVmlldygpLT51cmwoKS5wYXRoKCksIFFMYXRpbjFTdHJpbmcoVEVTVFNfU09VUkNFX0RJUiAi
L2h0bWwvYmFzaWNfcGFnZS5odG1sIikpOworfQorCit2b2lkIHRzdF9RUXVpY2tXZWJWaWV3Ojpz
dG9wKCkKK3sKKyAgICB3ZWJWaWV3KCktPmxvYWQoUVVybDo6ZnJvbUxvY2FsRmlsZShRTGF0aW4x
U3RyaW5nKFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKSk7CisgICAg
UVZFUklGWSh3YWl0Rm9yU2lnbmFsKHdlYlZpZXcoKSwgU0lHTkFMKGxvYWRTdWNjZWVkZWQoKSkp
KTsKKworICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+dXJsKCkucGF0aCgpLCBRTGF0aW4xU3RyaW5n
KFRFU1RTX1NPVVJDRV9ESVIgIi9odG1sL2Jhc2ljX3BhZ2UuaHRtbCIpKTsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIGZsZXNoZWQgb3V0LiBSaWdodCBub3cgaXQncyBqdXN0
IGhlcmUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgorICAgIHdlYlZpZXcoKS0+bmF2aWdh
dGlvbkNvbnRyb2xsZXIoKS0+c3RvcCgpOworfQorCit2b2lkIHRzdF9RUXVpY2tXZWJWaWV3Ojps
b2FkUHJvZ3Jlc3MoKQoreworICAgIFFDT01QQVJFKHdlYlZpZXcoKS0+bG9hZFByb2dyZXNzKCks
IDApOworCisgICAgd2ViVmlldygpLT5sb2FkKFFVcmw6OmZyb21Mb2NhbEZpbGUoUUxhdGluMVN0
cmluZyhURVNUU19TT1VSQ0VfRElSICIvaHRtbC9iYXNpY19wYWdlLmh0bWwiKSkpOworICAgIFFT
aWduYWxTcHkgbG9hZFByb2dyZXNzQ2hhbmdlZFNweSh3ZWJWaWV3KCksIFNJR05BTChsb2FkUHJv
Z3Jlc3NDaGFuZ2VkKGludCkpKTsKKyAgICBRVkVSSUZZKHdhaXRGb3JTaWduYWwod2ViVmlldygp
LCBTSUdOQUwobG9hZFN1Y2NlZWRlZCgpKSkpOworCisgICAgUVZFUklGWShsb2FkUHJvZ3Jlc3ND
aGFuZ2VkU3B5LmNvdW50KCkgPj0gMSk7CisKKyAgICBRQ09NUEFSRSh3ZWJWaWV3KCktPmxvYWRQ
cm9ncmVzcygpLCAxMDApOworfQorCit2b2lkIHRzdF9RUXVpY2tXZWJWaWV3OjpzaG93KCkKK3sK
KyAgICAvLyBUaGlzIHNob3VsZCBub3QgY3Jhc2guCisgICAgbV93aW5kb3ctPnNob3coKTsKKyAg
ICBRVGVzdDo6cVdhaXQoMjAwKTsKKyAgICBtX3dpbmRvdy0+aGlkZSgpOworfQorCitRVFdFQktJ
VF9BUElfVEVTVF9NQUlOKHRzdF9RUXVpY2tXZWJWaWV3KQorCisjaW5jbHVkZSAidHN0X3FxdWlj
a3dlYnZpZXcubW9jIgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3F0b3VjaHdlYnZpZXcvcXRvdWNod2Vidmlldy5wcm8gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0b3VjaHdlYnZpZXcvcXRvdWNod2Vidmlldy5wcm8K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OWM3ZjQ5MzhjYjE1MTBlZWZlZmFlZmNl
MzE2NjNjMDk3ZjA1NDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xdG91Y2h3ZWJ2aWV3
L3F0b3VjaHdlYnZpZXcucHJvCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaW5jbHVkZSgu
Li90ZXN0cy5wcmkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3F0b3VjaHdlYnZpZXcvdHN0X3F0b3VjaHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xdG91Y2h3ZWJ2aWV3L3RzdF9xdG91Y2h3ZWJ2aWV3
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRmMjg3NWZjMDk4YmY3ZDcxZWUy
ZmFjYWZjM2I1OWQ0NWM2OTRjMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3F0b3VjaHdl
YnZpZXcvdHN0X3F0b3VjaHdlYnZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+Ci0jaW5jbHVk
ZSA8cXRvdWNod2VicGFnZS5oPgotI2luY2x1ZGUgPHF0b3VjaHdlYnZpZXcuaD4KLSNpbmNsdWRl
IDxxd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlICIuLi90ZXN0d2luZG93Lmgi
Ci0jaW5jbHVkZSAiLi4vdXRpbC5oIgotCi1RX0RFQ0xBUkVfTUVUQVRZUEUoUVRvdWNoV2ViUGFn
ZSopOwotCi1jbGFzcyB0c3RfUVRvdWNoV2ViVmlldyA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBR
X09CSkVDVAotcHVibGljOgotICAgIHRzdF9RVG91Y2hXZWJWaWV3KCk7Ci1wcml2YXRlIHNsb3Rz
OgotICAgIHZvaWQgaW5pdCgpOwotICAgIHZvaWQgY2xlYW51cCgpOwotCi0gICAgdm9pZCBhY2Nl
c3NQYWdlKCk7Ci0gICAgdm9pZCBuYXZpZ2F0aW9uU3RhdHVzQXRTdGFydHVwKCk7Ci0KLXByaXZh
dGU6Ci0gICAgaW5saW5lIFFUb3VjaFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdDsKLSAgICBRU2Nv
cGVkUG9pbnRlcjxUZXN0V2luZG93PiBtX3dpbmRvdzsKLX07Ci0KLXRzdF9RVG91Y2hXZWJWaWV3
Ojp0c3RfUVRvdWNoV2ViVmlldygpCi17Ci0gICAgYWRkUXRXZWJQcm9jZXNzVG9QYXRoKCk7Ci0g
ICAgcVJlZ2lzdGVyTWV0YVR5cGU8UVRvdWNoV2ViUGFnZSo+KCJRVG91Y2hXZWJQYWdlKiIpOwot
fQotCi12b2lkIHRzdF9RVG91Y2hXZWJWaWV3Ojppbml0KCkKLXsKLSAgICBtX3dpbmRvdy5yZXNl
dChuZXcgVGVzdFdpbmRvdyhuZXcgUVRvdWNoV2ViVmlldykpOwotfQotCi12b2lkIHRzdF9RVG91
Y2hXZWJWaWV3OjpjbGVhbnVwKCkKLXsKLSAgICBtX3dpbmRvdy5yZXNldCgpOwotfQotCi1pbmxp
bmUgUVRvdWNoV2ViVmlldyogdHN0X1FUb3VjaFdlYlZpZXc6OndlYlZpZXcoKSBjb25zdAotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxRVG91Y2hXZWJWaWV3Kj4obV93aW5kb3ctPndlYlZpZXcu
ZGF0YSgpKTsKLX0KLQotdm9pZCB0c3RfUVRvdWNoV2ViVmlldzo6YWNjZXNzUGFnZSgpCi17Ci0g
ICAgUVRvdWNoV2ViUGFnZSogY29uc3QgcGFnZURpcmVjdEFjY2VzcyA9IHdlYlZpZXcoKS0+cGFn
ZSgpOwotCi0gICAgUVZhcmlhbnQgcGFnZVByb3BlcnR5VmFsdWUgPSB3ZWJWaWV3KCktPnByb3Bl
cnR5KCJwYWdlIik7Ci0gICAgUVRvdWNoV2ViUGFnZSogY29uc3QgcGFnZVByb3BlcnR5QWNjZXNz
ID0gcGFnZVByb3BlcnR5VmFsdWUudmFsdWU8UVRvdWNoV2ViUGFnZSo+KCk7Ci0gICAgUUNPTVBB
UkUocGFnZVByb3BlcnR5QWNjZXNzLCBwYWdlRGlyZWN0QWNjZXNzKTsKLX0KLQotdm9pZCB0c3Rf
UVRvdWNoV2ViVmlldzo6bmF2aWdhdGlvblN0YXR1c0F0U3RhcnR1cCgpCi17Ci0gICAgUUNPTVBB
UkUod2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5Hb0JhY2soKSwgZmFsc2Up
OwotCi0gICAgUUNPTVBBUkUod2ViVmlldygpLT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5jYW5H
b0ZvcndhcmQoKSwgZmFsc2UpOwotCi0gICAgUUNPTVBBUkUod2ViVmlldygpLT5uYXZpZ2F0aW9u
Q29udHJvbGxlcigpLT5jYW5TdG9wKCksIGZhbHNlKTsKLQotICAgIFFDT01QQVJFKHdlYlZpZXco
KS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+Y2FuUmVsb2FkKCksIGZhbHNlKTsKLX0KLQotCi1R
VFdFQktJVF9BUElfVEVTVF9NQUlOKHRzdF9RVG91Y2hXZWJWaWV3KQotCi0jaW5jbHVkZSAidHN0
X3F0b3VjaHdlYnZpZXcubW9jIgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3Rlc3R3aW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvdGVzdHdpbmRvdy5oCmluZGV4IDg3ODA5YzMzNDhmY2M3ZDhlOTRhNjQ2MmZm
ODc0YWNlYWJkMDc2ZDguLjdiNTlhZjljYWI2ZGVlOTdkYzQ0ODJhOTIzMWY5NThhMzg3Zjg2ZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHdp
bmRvdy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHdp
bmRvdy5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xcXVpY2tp
dGVtLmg+CiAjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xcXVpY2t2aWV3Lmg+CiAKLS8vIFRlc3RX
aW5kb3c6IFV0aWxpdHkgY2xhc3MgdG8gaWdub3JlIFFHcmFwaGljc1ZpZXcgZGV0YWlscy4KKy8v
IFRlc3RXaW5kb3c6IFV0aWxpdHkgY2xhc3MgdG8gaWdub3JlIFFRdWlja1ZpZXcgZGV0YWlscy4K
IGNsYXNzIFRlc3RXaW5kb3cgOiBwdWJsaWMgUVF1aWNrVmlldyB7CiBwdWJsaWM6CiAgICAgaW5s
aW5lIFRlc3RXaW5kb3coUVF1aWNrSXRlbSogd2ViVmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggODMzZWJlYzhlZmRkNzkx
ODIxZmU1ZGNjZDQyMDQ0MmU4M2QyYzEwOC4uNWNiMWQ5ZDRlYmMyYWZmZTFiODM3NDUwY2Q5ZDlk
ODhiMDQ0YTI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJh
d2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdp
bmdBcmVhUHJveHkuaApAQCAtNjAsOCArNjAsOCBAQCB0eXBlZGVmIFdLVmlldyBQbGF0Zm9ybVdl
YlZpZXc7CiBjbGFzcyBXZWJWaWV3OwogdHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsK
ICNlbGlmIFBMQVRGT1JNKFFUKQotY2xhc3MgUXRUb3VjaFZpZXdJbnRlcmZhY2U7Ci10eXBlZGVm
IFF0VG91Y2hWaWV3SW50ZXJmYWNlIFBsYXRmb3JtV2ViVmlldzsKK2NsYXNzIFF0Vmlld0ludGVy
ZmFjZTsKK3R5cGVkZWYgUXRWaWV3SW50ZXJmYWNlIFBsYXRmb3JtV2ViVmlldzsKICNlbmRpZgog
CiBjbGFzcyBUaWxlZERyYXdpbmdBcmVhUHJveHkgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2du
aXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXpl
ci5jcHAKaW5kZXggYmYzMGIxZWFlNWQ0NzdjYjQ5NjY5NGE0YWFkOThhMmI5N2QxMjZiOS4uZWYx
ZDg3MmY2OTIyZTQxZmU0Mzc2Njc3MzYyZWI3MmViYTg0Mzg3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMzIsNyAr
MzIsNiBAQCBRdEdlc3R1cmVSZWNvZ25pemVyOjpRdEdlc3R1cmVSZWNvZ25pemVyKFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSogdmlld3BvcnRJbgogICAgIDogbV92aWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKHZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCiAgICAgLCBtX3N0YXRlKE5vR2Vz
dHVyZSkKIHsKLSAgICBBU1NFUlQodmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSk7CiB9CiAKIHZv
aWQgUXRHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQpAQCAtNDAsNCArMzksOSBAQCB2b2lkIFF0
R2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KCkKICAgICBtX3N0YXRlID0gTm9HZXN0dXJlOwogfQog
Cit2b2lkIFF0R2VzdHVyZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUo
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUpCit7CisgICAgbV92aWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lID0gZW5naW5lOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCBmNTIyMmM3ZjMzYjQyNjNi
NWY1ZmNjZWU1ZjQ4NTgyYmE2NGY3ZTYxLi40Y2NhNmJjNzI1ZGM4NGU4MmJlOGE0NWIwYzQ1NDZh
NjRkYmU4MzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0
dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1
cmVSZWNvZ25pemVyLmgKQEAgLTM2LDkgKzM2LDEwIEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgog
ICAgIFF0R2VzdHVyZVJlY29nbml6ZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKik7Cisg
ICAgdm9pZCBzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZSopOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZSogY29uc3QgbV92aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOworICAgIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSogbV92aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOwogICAgIGVu
dW0gU3RhdGUgewogICAgICAgICBOb0dlc3R1cmUsCiAgICAgICAgIEdlc3R1cmVSZWNvZ25pdGlv
blN0YXJ0ZWQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5H
ZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5H
ZXN0dXJlUmVjb2duaXplci5jcHAKaW5kZXggNDBjOTc5YTYxZjE4ZmI2NmQ1YmJjMmE2M2M2MjRk
ZGUyNTMxYzdkYi4uYWJlMjY5MmU1YTg5MmRkZjU0YzdhYjUyMDg0YzFlZjI0ODAzYjY3ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNv
Z25pemVyLmNwcApAQCAtMzcsOCArMzcsMTcgQEAgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6UXRQ
YW5HZXN0dXJlUmVjb2duaXplcihRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIGludGUKICAg
ICByZXNldCgpOwogfQogCit2b2lkIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnNldFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUpCit7
CisgICAgUXRHZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShl
bmdpbmUpOworICAgIHJlc2V0KCk7Cit9CisKIGJvb2wgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6
cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCwgcWludDY0IGV2ZW50VGltZXN0YW1w
TWlsbGlzKQogeworICAgIGlmICghbV92aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICAvLyBQYW4gZ2VzdHVyZSBhbHdheXMgc3RhcnRzIG9uIFRv
dWNoQmVnaW4gdW5sZXNzIHRoZSBlbmdpbmUgaXMgc3VzcGVuZGVkLCBvcgogICAgIC8vIHdlIGln
bm9yZWQgdGhlIGV2ZW50LgogICAgIGlmIChtX3N0YXRlID09IE5vR2VzdHVyZSAmJiBldmVudC0+
dHlwZSgpICE9IFFFdmVudDo6VG91Y2hCZWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oCmluZGV4IDI5Y2FmMDZmZDYyYWM2
Y2YwZDFkZjRjNTJiNGFjNmE3MWY4ZDc5NzguLjUxNGZlYTgzNDI1MDczOGZiMmIxMTI5YjIwOGE4
NzUzZWE5MjVjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBh
bkdlc3R1cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
UGFuR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtNDIsNiArNDIsNyBAQCBjb25zdCBxcmVhbCBwYW5u
aW5nSW5pdGlhbFRyaWdnZXJEaXN0YW5jZVRocmVzaG9sZCA9IDUuOwogY2xhc3MgUXRQYW5HZXN0
dXJlUmVjb2duaXplciA6IHB1YmxpYyBRdEdlc3R1cmVSZWNvZ25pemVyIHsKIHB1YmxpYzoKICAg
ICBRdFBhbkdlc3R1cmVSZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSopOwor
ICAgIHZvaWQgc2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUqKTsKICAgICBib29sIHJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCosIHFpbnQ2
NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgdm9pZCByZXNldCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIu
Y3BwCmluZGV4IDE2ZGI1ZGQwYTIyNTAxZGMzYmRiNTExNTgyNzdlOTEwODAzNDZkYTEuLjcyNDY3
YjRkZmRjY2JlMjM1ZTZhNTM5YzEzMDkyMDY4ZDQzNzg2MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBA
IC01Nyw2ICs1Nyw5IEBAIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6UXRQaW5jaEdlc3R1cmVS
ZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSoKIAogYm9vbCBRdFBpbmNoR2Vz
dHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCogZXZlbnQpCiB7Cisg
ICAgaWYgKCFtX3ZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIGNvbnN0IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50PiYgdG91Y2hQb2lu
dHMgPSBldmVudC0+dG91Y2hQb2ludHMoKTsKICAgICBpZiAodG91Y2hQb2ludHMuc2l6ZSgpIDwg
MikgewogICAgICAgICBpZiAobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCkKQEAgLTEzMCw2
ICsxMzMsMTIgQEAgYm9vbCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25z
dCBRVG91Y2hFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFF0UGlu
Y2hHZXN0dXJlUmVjb2duaXplcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUqIGVuZ2luZSkKK3sKKyAgICBRdEdlc3R1cmVSZWNvZ25pemVy
OjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGVuZ2luZSk7CisgICAgcmVzZXQoKTsKK30K
Kwogdm9pZCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KCkKIHsKICAgICBRdEdlc3R1
cmVSZWNvZ25pemVyOjpyZXNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oCmluZGV4IDMwZDE1ZmM3YjA3NTI5OGE0
NDBkNjllNjRmYzc1M2I3YmRiZTRkNGUuLjIwOGMwNWFiZGMwOTMxYmVkZTM4ODU5Y2VjZjYwYTk1
NGY1MGFjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNo
R2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQ
aW5jaEdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTUxLDYgKzUxLDcgQEAgcHVibGljOgogICAgIH07
CiAKICAgICBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKik7CisgICAgdm9pZCBzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZSopOwogICAgIGJvb2wgcmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50
Kik7CiAgICAgdm9pZCByZXNldCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJmYWNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDQ4Njg4MDk5MDlkNzU1OWQ4N2ViNmI2YTYwMDI0NmFhOTRkMGYzMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRUb3VjaFZpZXdJbnRlcmZhY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUXRUb3VjaFZpZXdJbnRlcmZhY2UuaCIKLQotI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKLSNp
bmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZV9wLmgiCi0j
aW5jbHVkZSAicXRvdWNod2Vidmlldy5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnZpZXdfcC5oIgot
Ci0jaW5jbHVkZSA8UURlY2xhcmF0aXZlRW5naW5lPgotI2luY2x1ZGUgPFFRdWlja1ZpZXc+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1RdFRvdWNoVmlld0ludGVyZmFjZTo6UXRUb3VjaFZpZXdJ
bnRlcmZhY2UoUVRvdWNoV2ViVmlldyogdmlld3BvcnRWaWV3LCBRVG91Y2hXZWJQYWdlKiBwYWdl
VmlldykKLSAgICA6IG1fdmlld3BvcnRWaWV3KHZpZXdwb3J0VmlldykKLSAgICAsIG1fcGFnZVZp
ZXcocGFnZVZpZXcpCi17Ci0gICAgUV9BU1NFUlQobV92aWV3cG9ydFZpZXcpOwotICAgIFFfQVNT
RVJUKG1fcGFnZVZpZXcpOwotfQotCi12b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpkaWRGaW5k
Wm9vbWFibGVBcmVhKGNvbnN0IFFQb2ludCYsIGNvbnN0IFFSZWN0JikKLXsKLX0KLQotUXRTR1Vw
ZGF0ZVF1ZXVlKiBRdFRvdWNoVmlld0ludGVyZmFjZTo6c2NlbmVHcmFwaFVwZGF0ZVF1ZXVlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gJm1fcGFnZVZpZXctPmQtPnNnVXBkYXRlUXVldWU7Ci19Ci0K
LXZvaWQgUXRUb3VjaFZpZXdJbnRlcmZhY2U6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgUVJl
Y3QmKQotewotICAgIG1fcGFnZVZpZXctPnVwZGF0ZSgpOwotfQotCi1RU2l6ZSBRdFRvdWNoVmll
d0ludGVyZmFjZTo6ZHJhd2luZ0FyZWFTaXplKCkKLXsKLSAgICByZXR1cm4gUVNpemUobV9wYWdl
Vmlldy0+d2lkdGgoKSwgbV9wYWdlVmlldy0+aGVpZ2h0KCkpOwotfQotCi12b2lkIFF0VG91Y2hW
aWV3SW50ZXJmYWNlOjpjb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUpCi17
Ci0gICAgbV9wYWdlVmlldy0+c2V0V2lkdGgobmV3U2l6ZS53aWR0aCgpKTsKLSAgICBtX3BhZ2VW
aWV3LT5zZXRIZWlnaHQobmV3U2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgUXRUb3VjaFZpZXdJ
bnRlcmZhY2U6OnNjcm9sbFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2ludCYgcG9zKQotewot
ICAgIG1fdmlld3BvcnRWaWV3LT5kX2Z1bmMoKS0+c2Nyb2xsUG9zaXRpb25SZXF1ZXN0ZWQocG9z
KTsKLX0KLQotYm9vbCBRdFRvdWNoVmlld0ludGVyZmFjZTo6aXNBY3RpdmUoKQotewotICAgIC8v
IEZJWE1FOiBUaGUgc2NlbmUgZ3JhcGggZG9lcyBub3QgaGF2ZSB0aGUgY29uY2VwdCBvZiBiZWlu
ZyBhY3RpdmUgb3Igbm90IHdoZW4gdGhpcyB3YXMgd3JpdHRlbi4KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBRdFRvdWNoVmlld0ludGVyZmFjZTo6aGFzRm9jdXMoKQotewotICAgIHJldHVy
biBtX3BhZ2VWaWV3LT5oYXNGb2N1cygpOwotfQotCi1ib29sIFF0VG91Y2hWaWV3SW50ZXJmYWNl
Ojppc1Zpc2libGUoKQotewotICAgIHJldHVybiBtX3ZpZXdwb3J0Vmlldy0+aXNWaXNpYmxlKCkg
JiYgbV9wYWdlVmlldy0+aXNWaXNpYmxlKCk7Ci19Ci0KLXZvaWQgUXRUb3VjaFZpZXdJbnRlcmZh
Y2U6OnN0YXJ0RHJhZyhRdDo6RHJvcEFjdGlvbnMgc3VwcG9ydGVkRHJvcEFjdGlvbnMsIGNvbnN0
IFFJbWFnZSYgZHJhZ0ltYWdlLCBRTWltZURhdGEqIGRhdGEsIFFQb2ludCogY2xpZW50UG9zaXRp
b24sIFFQb2ludCogZ2xvYmFsUG9zaXRpb24sIFF0OjpEcm9wQWN0aW9uKiBkcm9wQWN0aW9uKQot
ewotICAgIC8vIFFUb3VjaFdlYlZpZXcgZG9lcyBub3Qgc3VwcG9ydCBkcmFnIGFuZCBkcm9wLgot
ICAgIFFfQVNTRVJUKGZhbHNlKTsKLX0KLQotdm9pZCBRdFRvdWNoVmlld0ludGVyZmFjZTo6ZGlk
Q2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRz
JiBhcmdzKQotewotICAgIG1fdmlld3BvcnRWaWV3LT5kX2Z1bmMoKS0+ZGlkQ2hhbmdlVmlld3Bv
cnRQcm9wZXJ0aWVzKGFyZ3MpOwotfQotCi12b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpkaWRD
aGFuZ2VVcmwoY29uc3QgUVVybCYgdXJsKQotewotICAgIGVtaXQgbV92aWV3cG9ydFZpZXctPnVy
bENoYW5nZWQodXJsKTsKLX0KLQotdm9pZCBRdFRvdWNoVmlld0ludGVyZmFjZTo6ZGlkQ2hhbmdl
VGl0bGUoY29uc3QgUVN0cmluZyYgbmV3VGl0bGUpCi17Ci0gICAgZW1pdCBtX3ZpZXdwb3J0Vmll
dy0+dGl0bGVDaGFuZ2VkKG5ld1RpdGxlKTsKLX0KLQotdm9pZCBRdFRvdWNoVmlld0ludGVyZmFj
ZTo6ZGlkQ2hhbmdlVG9vbFRpcChjb25zdCBRU3RyaW5nJikKLXsKLSAgICAvLyBUaGVyZSBpcyBu
b3QgeWV0IGFueSBVSSBkZWZpbmVkIGZvciB0aGUgdG9vbHRpcHMgZm9yIG1vYmlsZSBzbyB3ZSBp
Z25vcmUgdGhlIGNoYW5nZS4KLX0KLQotdm9pZCBRdFRvdWNoVmlld0ludGVyZmFjZTo6ZGlkQ2hh
bmdlU3RhdHVzVGV4dChjb25zdCBRU3RyaW5nJikKLXsKLSAgICAvLyBUaGVyZSBpcyBub3QgeWV0
IGFueSBVSSBkZWZpbmVkIGZvciBzdGF0dXMgdGV4dCBzbyB3ZSBpZ25vcmUgdGhlIGNhbGwuCi19
Ci0KLXZvaWQgUXRUb3VjaFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZUN1cnNvcihjb25zdCBRQ3Vy
c29yJikKLXsKLSAgICAvLyBUaGUgY3Vyc29yIGlzIG5vdCB2aXNpYmxlIG9uIG1vYmlsZSwganVz
dCBpZ25vcmUgdGhpcyBtZXNzYWdlLgotfQotCi12b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjps
b2FkRGlkQmVnaW4oKQotewotICAgIGVtaXQgbV92aWV3cG9ydFZpZXctPmxvYWRTdGFydGVkKCk7
Ci19Ci0KLXZvaWQgUXRUb3VjaFZpZXdJbnRlcmZhY2U6OmxvYWREaWRDb21taXQoKQotewotICAg
IG1fdmlld3BvcnRWaWV3LT5kX2Z1bmMoKS0+bG9hZERpZENvbW1pdCgpOwotfQotCi12b2lkIFF0
VG91Y2hWaWV3SW50ZXJmYWNlOjpsb2FkRGlkU3VjY2VlZCgpCi17Ci0gICAgZW1pdCBtX3ZpZXdw
b3J0Vmlldy0+bG9hZFN1Y2NlZWRlZCgpOwotfQotCi12b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNl
Ojpsb2FkRGlkRmFpbChjb25zdCBRdFdlYkVycm9yJiBlcnJvcikKLXsKLSAgICBlbWl0IG1fdmll
d3BvcnRWaWV3LT5sb2FkRmFpbGVkKHN0YXRpY19jYXN0PFFCYXNlV2ViVmlldzo6RXJyb3JUeXBl
PihlcnJvci50eXBlKCkpLCBlcnJvci5lcnJvckNvZGUoKSwgZXJyb3IudXJsKCkpOwotfQotCi12
b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpkaWRDaGFuZ2VMb2FkUHJvZ3Jlc3MoaW50IHBlcmNl
bnRhZ2VMb2FkZWQpCi17Ci0gICAgZW1pdCBtX3ZpZXdwb3J0Vmlldy0+bG9hZFByb2dyZXNzQ2hh
bmdlZChwZXJjZW50YWdlTG9hZGVkKTsKLX0KLQotdm9pZCBRdFRvdWNoVmlld0ludGVyZmFjZTo6
c2hvd0NvbnRleHRNZW51KFFTaGFyZWRQb2ludGVyPFFNZW51PikKLXsKLSAgICAvLyBGSVhNRQot
fQotCi12b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpoaWRlQ29udGV4dE1lbnUoKQotewotICAg
IC8vIEZJWE1FCi19Ci0KLXZvaWQgUXRUb3VjaFZpZXdJbnRlcmZhY2U6OnJ1bkphdmFTY3JpcHRB
bGVydChjb25zdCBRU3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRS4KLX0KLQotYm9vbCBRdFRvdWNo
Vmlld0ludGVyZmFjZTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3QgUVN0cmluZyYpCi17Ci0g
ICAgLy8gRklYTUUuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVFTdHJpbmcgUXRUb3VjaFZpZXdJ
bnRlcmZhY2U6OnJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgYm9vbCYpCi17Ci0gICAgLy8gRklYTUUuCi0gICAgcmV0dXJuIGRl
ZmF1bHRWYWx1ZTsKLX0KLQotdm9pZCBRdFRvdWNoVmlld0ludGVyZmFjZTo6cHJvY2Vzc0RpZENy
YXNoKCkKLXsKLSAgICAvLyBGSVhNRQotfQotCi12b2lkIFF0VG91Y2hWaWV3SW50ZXJmYWNlOjpk
aWRSZWxhdW5jaFByb2Nlc3MoKQotewotICAgIC8vIEZJWE1FCi19Ci0KLVFKU0VuZ2luZSogUXRU
b3VjaFZpZXdJbnRlcmZhY2U6OmVuZ2luZSgpCi17Ci0gICAgUVF1aWNrVmlldyogdmlldyA9IHFv
YmplY3RfY2FzdDxRUXVpY2tWaWV3Kj4obV9wYWdlVmlldy0+Y2FudmFzKCkpOwotICAgIGlmICh2
aWV3KQotICAgICAgICByZXR1cm4gdmlldy0+ZW5naW5lKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRvdWNoVmlld0lu
dGVyZmFjZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJm
YWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZDdlYzE0Mzg3ZGFlYzZiZDNm
MWVmYjA3OTUyNWVjMDRiYzYzMjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VG91Y2hWaWV3SW50ZXJm
YWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQot
I2lmbmRlZiBRdFRvdWNoVmlld0ludGVyZmFjZV9oCi0jZGVmaW5lIFF0VG91Y2hWaWV3SW50ZXJm
YWNlX2gKLQotI2luY2x1ZGUgIlF0Vmlld0ludGVyZmFjZS5oIgotCi1jbGFzcyBRUG9pbnRGOwot
Y2xhc3MgUVRvdWNoV2ViUGFnZTsKLWNsYXNzIFFUb3VjaFdlYlZpZXc7Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIFZpZXdwb3J0QXJndW1lbnRzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgUXRTR1VwZGF0ZVF1ZXVlOwotCi1jbGFzcyBRdFRvdWNoVmlld0ludGVyZmFj
ZSA6IHB1YmxpYyBRdFZpZXdJbnRlcmZhY2UgewotcHVibGljOgotICAgIFF0VG91Y2hWaWV3SW50
ZXJmYWNlKFFUb3VjaFdlYlZpZXcqIHZpZXdwb3J0VmlldywgUVRvdWNoV2ViUGFnZSogcGFnZVZp
ZXcpOwotCi0gICAgUXRTR1VwZGF0ZVF1ZXVlKiBzY2VuZUdyYXBoVXBkYXRlUXVldWUoKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBRdFZpZXdJbnRlcmZhY2Uu
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgUVJlY3QmKTsKLQot
ICAgIHZpcnR1YWwgUVNpemUgZHJhd2luZ0FyZWFTaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNv
bnRlbnRTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxQ
b3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcyk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNBY3RpdmUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzRm9jdXMoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWaXNpYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFF0OjpEcm9wQWN0
aW9ucyBzdXBwb3J0ZWREcm9wQWN0aW9ucywgY29uc3QgUUltYWdlJiBkcmFnSW1hZ2UsIFFNaW1l
RGF0YSosIFFQb2ludCogY2xpZW50UG9zaXRpb24sIFFQb2ludCogZ2xvYmFsUG9zaXRpb24sIFF0
OjpEcm9wQWN0aW9uKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVy
dGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwotCi0gICAgdmlydHVhbCB2
b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgUVBvaW50JiwgY29uc3QgUVJlY3QmKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VVcmwoY29uc3QgUVVybCYpOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRDaGFuZ2VUaXRsZShjb25zdCBRU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZVRvb2xUaXAoY29uc3QgUVN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
Q3Vyc29yKGNvbnN0IFFDdXJzb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZEJlZ2luKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRDb21taXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9h
ZERpZFN1Y2NlZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZEZhaWwoY29uc3QgUXRXZWJF
cnJvciYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VMb2FkUHJvZ3Jlc3MoaW50KTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+KTsK
LSAgICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFFTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcnVu
SmF2YVNjcmlwdENvbmZpcm0oY29uc3QgUVN0cmluZyYpOwotICAgIHZpcnR1YWwgUVN0cmluZyBy
dW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0
VmFsdWUsIGJvb2wmIG9rKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCk7Ci0KLSAgICB2aXJ0dWFsIFFK
U0VuZ2luZSogZW5naW5lKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlRmlsZXMoV0tPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3QgUVN0cmluZ0xpc3QmLCBGaWxlQ2hvb3NlclR5
cGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZFJlcXVlc3RlZChRV2ViRG93bmxvYWRJ
dGVtKiBkb3dubG9hZEl0ZW0pIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZE1vdXNlTW92ZU92
ZXJFbGVtZW50KGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5nJikgeyB9Ci0KLXByaXZhdGU6Ci0g
ICAgUVRvdWNoV2ViVmlldyogY29uc3QgbV92aWV3cG9ydFZpZXc7Ci0gICAgUVRvdWNoV2ViUGFn
ZSogY29uc3QgbV9wYWdlVmlldzsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFF0VG91Y2hWaWV3SW50
ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3SW50
ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZjN2MyNTZmZTRmNmNhOTViMzNkOWNiMjdkY2YyMmI3NGFmMDM4YWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3SW50
ZXJmYWNlLmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJRdFZpZXdJbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgIlF0
V2ViRXJyb3IuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlLmgiCisjaW5jbHVkZSAicXF1aWNr
d2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgorI2luY2x1ZGUgInFxdWlj
a3dlYnZpZXdfcC5oIgorCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RRGVjbGFyYXRpdmVFbmdp
bmU+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RUXVpY2tWaWV3PgorI2luY2x1ZGUgPFF0R3Vp
L1FEcmFnPgorI2luY2x1ZGUgPFF0R3VpL1FHdWlBcHBsaWNhdGlvbj4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1F0Vmlld0ludGVyZmFjZTo6UXRWaWV3SW50ZXJmYWNlKFFRdWlja1dlYlZpZXcq
IHZpZXdwb3J0VmlldywgUVF1aWNrV2ViUGFnZSogcGFnZVZpZXcpCisgICAgOiBtX3ZpZXdwb3J0
Vmlldyh2aWV3cG9ydFZpZXcpCisgICAgLCBtX3BhZ2VWaWV3KHBhZ2VWaWV3KQoreworICAgIFFf
QVNTRVJUKG1fdmlld3BvcnRWaWV3KTsKKyAgICBRX0FTU0VSVChtX3BhZ2VWaWV3KTsKK30KKwor
dm9pZCBRdFZpZXdJbnRlcmZhY2U6OmRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgUVBvaW50Jiwg
Y29uc3QgUVJlY3QmKQoreworfQorCitRdFNHVXBkYXRlUXVldWUqIFF0Vmlld0ludGVyZmFjZTo6
c2NlbmVHcmFwaFVwZGF0ZVF1ZXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1fcGFnZVZpZXct
PmQtPnNnVXBkYXRlUXVldWU7Cit9CisKK3ZvaWQgUXRWaWV3SW50ZXJmYWNlOjpzZXRWaWV3TmVl
ZHNEaXNwbGF5KGNvbnN0IFFSZWN0JikKK3sKKyAgICBtX3BhZ2VWaWV3LT51cGRhdGUoKTsKK30K
KworUVNpemUgUXRWaWV3SW50ZXJmYWNlOjpkcmF3aW5nQXJlYVNpemUoKQoreworICAgIHJldHVy
biBRU2l6ZShtX3BhZ2VWaWV3LT53aWR0aCgpLCBtX3BhZ2VWaWV3LT5oZWlnaHQoKSk7Cit9CisK
K3ZvaWQgUXRWaWV3SW50ZXJmYWNlOjpjb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5l
d1NpemUpCit7CisgICAgbV92aWV3cG9ydFZpZXctPmRfZnVuYygpLT5jb250ZW50U2l6ZUNoYW5n
ZWQobmV3U2l6ZSk7Cit9CisKK3ZvaWQgUXRWaWV3SW50ZXJmYWNlOjpzY3JvbGxQb3NpdGlvblJl
cXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcykKK3sKKyAgICBtX3ZpZXdwb3J0Vmlldy0+ZF9mdW5j
KCktPnNjcm9sbFBvc2l0aW9uUmVxdWVzdGVkKHBvcyk7Cit9CisKK2Jvb2wgUXRWaWV3SW50ZXJm
YWNlOjppc0FjdGl2ZSgpCit7CisgICAgLy8gRklYTUU6IFRoZSBzY2VuZSBncmFwaCBkb2VzIG5v
dCBoYXZlIHRoZSBjb25jZXB0IG9mIGJlaW5nIGFjdGl2ZSBvciBub3Qgd2hlbiB0aGlzIHdhcyB3
cml0dGVuLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFF0Vmlld0ludGVyZmFjZTo6aGFz
Rm9jdXMoKQoreworICAgIHJldHVybiBtX3BhZ2VWaWV3LT5oYXNGb2N1cygpOworfQorCitib29s
IFF0Vmlld0ludGVyZmFjZTo6aXNWaXNpYmxlKCkKK3sKKyAgICByZXR1cm4gbV92aWV3cG9ydFZp
ZXctPmlzVmlzaWJsZSgpICYmIG1fcGFnZVZpZXctPmlzVmlzaWJsZSgpOworfQorCit2b2lkIFF0
Vmlld0ludGVyZmFjZTo6c3RhcnREcmFnKFF0OjpEcm9wQWN0aW9ucyBzdXBwb3J0ZWREcm9wQWN0
aW9ucywgY29uc3QgUUltYWdlJiBkcmFnSW1hZ2UsIFFNaW1lRGF0YSogZGF0YSwgUVBvaW50KiBj
bGllbnRQb3NpdGlvbiwgUVBvaW50KiBnbG9iYWxQb3NpdGlvbiwgUXQ6OkRyb3BBY3Rpb24qIGRy
b3BBY3Rpb24pCit7CisgICAgUVdpbmRvdyogd2luZG93ID0gbV92aWV3cG9ydFZpZXctPmNhbnZh
cygpOworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBRRHJhZyogZHJh
ZyA9IG5ldyBRRHJhZyh3aW5kb3cpOworICAgIGRyYWctPnNldFBpeG1hcChRUGl4bWFwOjpmcm9t
SW1hZ2UoZHJhZ0ltYWdlKSk7CisgICAgZHJhZy0+c2V0TWltZURhdGEoZGF0YSk7CisgICAgKmRy
b3BBY3Rpb24gPSBkcmFnLT5leGVjKHN1cHBvcnRlZERyb3BBY3Rpb25zKTsKKyAgICAqZ2xvYmFs
UG9zaXRpb24gPSBRQ3Vyc29yOjpwb3MoKTsKKyAgICAqY2xpZW50UG9zaXRpb24gPSB3aW5kb3ct
Pm1hcEZyb21HbG9iYWwoKmdsb2JhbFBvc2l0aW9uKTsKK30KKworCit2b2lkIFF0Vmlld0ludGVy
ZmFjZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0
QXJndW1lbnRzJiBhcmdzKQoreworICAgIG1fdmlld3BvcnRWaWV3LT5kX2Z1bmMoKS0+ZGlkQ2hh
bmdlVmlld3BvcnRQcm9wZXJ0aWVzKGFyZ3MpOworfQorCit2b2lkIFF0Vmlld0ludGVyZmFjZTo6
ZGlkQ2hhbmdlVXJsKGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBlbWl0IG1fdmlld3BvcnRWaWV3
LT51cmxDaGFuZ2VkKHVybCk7Cit9CisKK3ZvaWQgUXRWaWV3SW50ZXJmYWNlOjpkaWRDaGFuZ2VU
aXRsZShjb25zdCBRU3RyaW5nJiBuZXdUaXRsZSkKK3sKKyAgICBlbWl0IG1fdmlld3BvcnRWaWV3
LT50aXRsZUNoYW5nZWQobmV3VGl0bGUpOworfQorCit2b2lkIFF0Vmlld0ludGVyZmFjZTo6ZGlk
Q2hhbmdlVG9vbFRpcChjb25zdCBRU3RyaW5nJikKK3sKKyAgICAvLyBUaGVyZSBpcyBub3QgeWV0
IGFueSBVSSBkZWZpbmVkIGZvciB0aGUgdG9vbHRpcHMgZm9yIG1vYmlsZSBzbyB3ZSBpZ25vcmUg
dGhlIGNoYW5nZS4KK30KKwordm9pZCBRdFZpZXdJbnRlcmZhY2U6OmRpZENoYW5nZVN0YXR1c1Rl
eHQoY29uc3QgUVN0cmluZyYgbmV3TWVzc2FnZSkKK3sKKyAgICBlbWl0IG1fdmlld3BvcnRWaWV3
LT5zdGF0dXNCYXJNZXNzYWdlQ2hhbmdlZChuZXdNZXNzYWdlKTsKK30KKwordm9pZCBRdFZpZXdJ
bnRlcmZhY2U6OmRpZENoYW5nZUN1cnNvcihjb25zdCBRQ3Vyc29yJiBuZXdDdXJzb3IpCit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgZml4IHVudGlsIHdlIGdldCBjdXJzb3Ig
c3VwcG9ydCBpbiBRTUwgaXRlbXMuCisgICAgUUd1aUFwcGxpY2F0aW9uOjpzZXRPdmVycmlkZUN1
cnNvcihuZXdDdXJzb3IpOworfQorCit2b2lkIFF0Vmlld0ludGVyZmFjZTo6bG9hZERpZEJlZ2lu
KCkKK3sKKyAgICBlbWl0IG1fdmlld3BvcnRWaWV3LT5sb2FkU3RhcnRlZCgpOworfQorCit2b2lk
IFF0Vmlld0ludGVyZmFjZTo6bG9hZERpZENvbW1pdCgpCit7CisgICAgbV92aWV3cG9ydFZpZXct
PmRfZnVuYygpLT5sb2FkRGlkQ29tbWl0KCk7Cit9CisKK3ZvaWQgUXRWaWV3SW50ZXJmYWNlOjps
b2FkRGlkU3VjY2VlZCgpCit7CisgICAgZW1pdCBtX3ZpZXdwb3J0Vmlldy0+bG9hZFN1Y2NlZWRl
ZCgpOworfQorCit2b2lkIFF0Vmlld0ludGVyZmFjZTo6bG9hZERpZEZhaWwoY29uc3QgUXRXZWJF
cnJvciYgZXJyb3IpCit7CisgICAgZW1pdCBtX3ZpZXdwb3J0Vmlldy0+bG9hZEZhaWxlZChzdGF0
aWNfY2FzdDxRUXVpY2tXZWJWaWV3OjpFcnJvclR5cGU+KGVycm9yLnR5cGUoKSksIGVycm9yLmVy
cm9yQ29kZSgpLCBlcnJvci51cmwoKSk7Cit9CisKK3ZvaWQgUXRWaWV3SW50ZXJmYWNlOjpkaWRD
aGFuZ2VMb2FkUHJvZ3Jlc3MoaW50IHBlcmNlbnRhZ2VMb2FkZWQpCit7CisgICAgZW1pdCBtX3Zp
ZXdwb3J0Vmlldy0+bG9hZFByb2dyZXNzQ2hhbmdlZChwZXJjZW50YWdlTG9hZGVkKTsKK30KKwor
dm9pZCBRdFZpZXdJbnRlcmZhY2U6OmRpZE1vdXNlTW92ZU92ZXJFbGVtZW50KGNvbnN0IFFVcmwm
IGxpbmtVUkwsIGNvbnN0IFFTdHJpbmcmIGxpbmtUaXRsZSkKK3sKKyAgICBpZiAobGlua1VSTCA9
PSBsYXN0SG92ZXJlZFVSTCAmJiBsaW5rVGl0bGUgPT0gbGFzdEhvdmVyZWRUaXRsZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGxhc3RIb3ZlcmVkVVJMID0gbGlua1VSTDsKKyAgICBsYXN0SG92ZXJl
ZFRpdGxlID0gbGlua1RpdGxlOworICAgIGVtaXQgbV92aWV3cG9ydFZpZXctPmxpbmtIb3ZlcmVk
KGxhc3RIb3ZlcmVkVVJMLCBsYXN0SG92ZXJlZFRpdGxlKTsKK30KKwordm9pZCBRdFZpZXdJbnRl
cmZhY2U6OnNob3dDb250ZXh0TWVudShRU2hhcmVkUG9pbnRlcjxRTWVudT4gbWVudSkKK3sKKyAg
ICAvLyBSZW1vdmUgdGhlIGFjdGl2ZSBtZW51IGluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgdHdpY2UuCisgICAgaWYgKGFjdGl2ZU1lbnUpCisgICAgICAgIGFjdGl2ZU1lbnUtPmhpZGUo
KTsKKworICAgIGlmIChtZW51LT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFX
aW5kb3cqIHdpbmRvdyA9IG1fdmlld3BvcnRWaWV3LT5jYW52YXMoKTsKKyAgICBpZiAoIXdpbmRv
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWN0aXZlTWVudSA9IG1lbnU7CisKKyAgICBhY3Rp
dmVNZW51LT53aW5kb3coKS0+d2luSWQoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIG1lbnUgaGFzIGEg
d2luZG93CisgICAgUV9BU1NFUlQoYWN0aXZlTWVudS0+d2luZG93KCktPndpbmRvd0hhbmRsZSgp
KTsKKyAgICBhY3RpdmVNZW51LT53aW5kb3coKS0+d2luZG93SGFuZGxlKCktPnNldFRyYW5zaWVu
dFBhcmVudCh3aW5kb3cpOworCisgICAgUVBvaW50IG1lbnVQb3NpdGlvbkluU2NlbmUgPSBtX3Zp
ZXdwb3J0Vmlldy0+bWFwVG9TY2VuZShtZW51LT5wb3MoKSkudG9Qb2ludCgpOworICAgIG1lbnUt
PmV4ZWMod2luZG93LT5tYXBUb0dsb2JhbChtZW51UG9zaXRpb25JblNjZW5lKSk7CisgICAgLy8g
VGhlIGxhc3QgZnVuY3Rpb24gdG8gZ2V0IG91dCBvZiBleGVjKCkgY2xlYXIgdGhlIGxvY2FsIGNv
cHkuCisgICAgaWYgKGFjdGl2ZU1lbnUgPT0gbWVudSkKKyAgICAgICAgYWN0aXZlTWVudS5jbGVh
cigpOworfQorCit2b2lkIFF0Vmlld0ludGVyZmFjZTo6aGlkZUNvbnRleHRNZW51KCkKK3sKKyAg
ICBpZiAoYWN0aXZlTWVudSkKKyAgICAgICAgYWN0aXZlTWVudS0+aGlkZSgpOworfQorCit2b2lk
IFF0Vmlld0ludGVyZmFjZTo6cnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFFTdHJpbmcmIGFsZXJ0
VGV4dCkKK3sKKyAgICBtX3ZpZXdwb3J0Vmlldy0+ZF9mdW5jKCktPnJ1bkphdmFTY3JpcHRBbGVy
dChhbGVydFRleHQpOworfQorCitib29sIFF0Vmlld0ludGVyZmFjZTo6cnVuSmF2YVNjcmlwdENv
bmZpcm0oY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gbV92aWV3cG9ydFZp
ZXctPmRfZnVuYygpLT5ydW5KYXZhU2NyaXB0Q29uZmlybShtZXNzYWdlKTsKK30KKworUVN0cmlu
ZyBRdFZpZXdJbnRlcmZhY2U6OnJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmluZyYgbWVz
c2FnZSwgY29uc3QgUVN0cmluZyYgZGVmYXVsdFZhbHVlLCBib29sJiBvaykKK3sKKyAgICByZXR1
cm4gbV92aWV3cG9ydFZpZXctPmRfZnVuYygpLT5ydW5KYXZhU2NyaXB0UHJvbXB0KG1lc3NhZ2Us
IGRlZmF1bHRWYWx1ZSwgb2spOworfQorCit2b2lkIFF0Vmlld0ludGVyZmFjZTo6cHJvY2Vzc0Rp
ZENyYXNoKCkKK3sKKyAgICAvLyBGSVhNRQorfQorCit2b2lkIFF0Vmlld0ludGVyZmFjZTo6ZGlk
UmVsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICAvLyBGSVhNRQorfQorCitRSlNFbmdpbmUqIFF0Vmll
d0ludGVyZmFjZTo6ZW5naW5lKCkKK3sKKyAgICBRUXVpY2tWaWV3KiB2aWV3ID0gcW9iamVjdF9j
YXN0PFFRdWlja1ZpZXcqPihtX3BhZ2VWaWV3LT5jYW52YXMoKSk7CisgICAgaWYgKHZpZXcpCisg
ICAgICAgIHJldHVybiB2aWV3LT5lbmdpbmUoKTsKKyAgICByZXR1cm4gMDsKK30KKworCit2b2lk
IFF0Vmlld0ludGVyZmFjZTo6ZG93bmxvYWRSZXF1ZXN0ZWQoUVdlYkRvd25sb2FkSXRlbSogZG93
bmxvYWRJdGVtKQoreworICAgIGlmICghZG93bmxvYWRJdGVtKQorICAgICAgICByZXR1cm47CisK
KyAgICBRRGVjbGFyYXRpdmVFbmdpbmU6OnNldE9iamVjdE93bmVyc2hpcChkb3dubG9hZEl0ZW0s
IFFEZWNsYXJhdGl2ZUVuZ2luZTo6SmF2YVNjcmlwdE93bmVyc2hpcCk7CisgICAgZW1pdCBtX3Zp
ZXdwb3J0Vmlldy0+ZG93bmxvYWRSZXF1ZXN0ZWQoZG93bmxvYWRJdGVtKTsKK30KKwordm9pZCBR
dFZpZXdJbnRlcmZhY2U6OmNob29zZUZpbGVzKFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYg
bGlzdGVuZXJSZWYsIGNvbnN0IFFTdHJpbmdMaXN0JiBzZWxlY3RlZEZpbGVOYW1lcywgUXRWaWV3
SW50ZXJmYWNlOjpGaWxlQ2hvb3NlclR5cGUgdHlwZSkKK3sKKyAgICBtX3ZpZXdwb3J0Vmlldy0+
ZF9mdW5jKCktPmNob29zZUZpbGVzKGxpc3RlbmVyUmVmLCBzZWxlY3RlZEZpbGVOYW1lcywgdHlw
ZSk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
Vmlld0ludGVyZmFjZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld0ludGVy
ZmFjZS5oCmluZGV4IGI1ZjVjNGIzMGNiMjg4MTU1OTU5ZTU1MTNjMTdhNjE5YzQ4ODE4MDEuLmIw
Nzg5OTAyYjBkNWE3ODk2ZDQ1Mzk1YmI0MjA3ODNhZjkyYjAzOTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmgKQEAgLTI0LDggKzI0LDExIEBACiAj
aW5jbHVkZSA8UU1lbnU+CiAjaW5jbHVkZSA8UXRDb3JlL1FTaGFyZWRQb2ludGVyPgogI2luY2x1
ZGUgPFF0Q29yZS9RU2l6ZT4KKyNpbmNsdWRlIDxRdENvcmUvUVVybD4KICNpbmNsdWRlIDxXZWJL
aXQyL1dLQmFzZS5oPgogCitjbGFzcyBRUXVpY2tXZWJQYWdlOworY2xhc3MgUVF1aWNrV2ViVmll
dzsKIGNsYXNzIFF0V2ViRXJyb3I7CiBjbGFzcyBRV2ViRG93bmxvYWRJdGVtOwogCkBAIC0zNyw3
ICs0MCw2IEBAIGNsYXNzIFFKU0VuZ2luZTsKIGNsYXNzIFFNaW1lRGF0YTsKIGNsYXNzIFFQb2lu
dDsKIGNsYXNzIFFSZWN0OwotY2xhc3MgUVVybDsKIGNsYXNzIFFXaWRnZXQ7CiBRVF9FTkRfTkFN
RVNQQUNFCiAKQEAgLTQ3LDYgKzQ5LDggQEAgY2xhc3MgVmlld3BvcnRBcmd1bWVudHM7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBRdFNHVXBkYXRlUXVldWU7CisKIGNsYXNzIFF0Vmll
d0ludGVyZmFjZSB7CiBwdWJsaWM6CiAgICAgZW51bSBGaWxlQ2hvb3NlclR5cGUgewpAQCAtNTQs
NDkgKzU4LDYxIEBAIHB1YmxpYzoKICAgICAgICAgTXVsdGlwbGVGaWxlc1NlbGVjdGlvbgogICAg
IH07CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYp
ID0gMDsKKyAgICBRdFZpZXdJbnRlcmZhY2UoUVF1aWNrV2ViVmlldyogdmlld3BvcnRWaWV3LCBR
UXVpY2tXZWJQYWdlKiBwYWdlVmlldyk7CisKKyAgICBRdFNHVXBkYXRlUXVldWUqIHNjZW5lR3Jh
cGhVcGRhdGVRdWV1ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rp
c3BsYXkoY29uc3QgUVJlY3QmKTsKKworICAgIHZpcnR1YWwgUVNpemUgZHJhd2luZ0FyZWFTaXpl
KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBv
cyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
Rm9jdXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpYmxlKCk7CiAKLSAgICB2aXJ0dWFsIFFT
aXplIGRyYXdpbmdBcmVhU2l6ZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudFNpemVD
aGFuZ2VkKGNvbnN0IFFTaXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxQb3NpdGlv
blJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFy
dERyYWcoUXQ6OkRyb3BBY3Rpb25zIHN1cHBvcnRlZERyb3BBY3Rpb25zLCBjb25zdCBRSW1hZ2Um
IGRyYWdJbWFnZSwgUU1pbWVEYXRhKiwgUVBvaW50KiBjbGllbnRQb3NpdGlvbiwgUVBvaW50KiBn
bG9iYWxQb3NpdGlvbiwgUXQ6OkRyb3BBY3Rpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJik7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhh
c0ZvY3VzKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgUVBvaW50JiwgY29uc3QgUVJlY3Qm
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoUXQ6OkRyb3BBY3Rpb25zIHN1cHBvcnRl
ZERyb3BBY3Rpb25zLCBjb25zdCBRSW1hZ2UmIGRyYWdJbWFnZSwgUU1pbWVEYXRhKiwgUVBvaW50
KiBjbGllbnRQb3NpdGlvbiwgUVBvaW50KiBnbG9iYWxQb3NpdGlvbiwgUXQ6OkRyb3BBY3Rpb24q
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlVXJsKGNvbnN0IFFVcmwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUo
Y29uc3QgUVN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUb29sVGlwKGNvbnN0
IFFTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU3RhdHVzVGV4dChjb25zdCBR
U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUN1cnNvcihjb25zdCBRQ3Vyc29y
Jik7CisgICAgdmlydHVhbCB2b2lkIGxvYWREaWRCZWdpbigpOworICAgIHZpcnR1YWwgdm9pZCBs
b2FkRGlkQ29tbWl0KCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWREaWRTdWNjZWVkKCk7CisgICAg
dmlydHVhbCB2b2lkIGxvYWREaWRGYWlsKGNvbnN0IFF0V2ViRXJyb3ImKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2hhbmdlTG9hZFByb2dyZXNzKGludCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluZFpvb21hYmxlQXJlYShjb25zdCBRUG9pbnQmLCBjb25zdCBRUmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KFFTaGFyZWRQb2ludGVyPFFNZW51Pik7CisgICAg
dmlydHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRpZENo
YW5nZVVybChjb25zdCBRVXJsJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRs
ZShjb25zdCBRU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUb29sVGlw
KGNvbnN0IFFTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVN0YXR1c1Rl
eHQoY29uc3QgUVN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ3Vyc29y
KGNvbnN0IFFDdXJzb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRCZWdpbigpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZENvbW1pdCgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZERpZFN1Y2NlZWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRGYWlsKGNv
bnN0IFF0V2ViRXJyb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUxvYWRQcm9n
cmVzcyhpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0
IFFTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3Qg
UVN0cmluZyYpOworICAgIHZpcnR1YWwgUVN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0
IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9rKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc0RpZENyYXNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2Vz
cygpOwogCi0gICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBRU3RyaW5n
JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBRU3Ry
aW5nJikgPSAwOwotICAgIHZpcnR1YWwgUVN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0
IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9rKSA9IDA7Cisg
ICAgdmlydHVhbCBRSlNFbmdpbmUqIGVuZ2luZSgpOwogCi0gICAgdmlydHVhbCB2b2lkIHByb2Nl
c3NEaWRDcmFzaCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VGaWxlcyhXS09wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyUmVmLCBjb25zdCBRU3RyaW5nTGlzdCYgc2VsZWN0ZWRGaWxlTmFtZXMsIEZpbGVDaG9vc2Vy
VHlwZSk7CiAKLSAgICB2aXJ0dWFsIFFKU0VuZ2luZSogZW5naW5lKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkaWRNb3VzZU1vdmVPdmVyRWxlbWVudChjb25zdCBRVXJsJiwgY29uc3QgUVN0cmlu
ZyYpOwogCi0gICAgdmlydHVhbCB2b2lkIGNob29zZUZpbGVzKFdLT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXJSZWYsIGNvbnN0IFFTdHJpbmdMaXN0JiBzZWxlY3RlZEZpbGVOYW1lcywgRmlsZUNob29z
ZXJUeXBlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkUmVxdWVzdGVkKFFXZWJEb3du
bG9hZEl0ZW0qKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3VzZU1vdmVPdmVyRWxlbWVudChj
b25zdCBRVXJsJiwgY29uc3QgUVN0cmluZyYpID0gMDsKK3ByaXZhdGU6CisgICAgUVF1aWNrV2Vi
VmlldyogY29uc3QgbV92aWV3cG9ydFZpZXc7CisgICAgUVF1aWNrV2ViUGFnZSogY29uc3QgbV9w
YWdlVmlldzsKIAotICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZFJlcXVlc3RlZChRV2ViRG93bmxv
YWRJdGVtKikgPSAwOworICAgIFFTaGFyZWRQb2ludGVyPFFNZW51PiBhY3RpdmVNZW51OworICAg
IFFVcmwgbGFzdEhvdmVyZWRVUkw7CisgICAgUVN0cmluZyBsYXN0SG92ZXJlZFRpdGxlOwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAppbmRl
eCAyZDNlNjU4NzQwNzI3ZDJmZWM0ZGMyMjEzNDA4NTJhYzFhNjExOWY4Li5lZWI2OTBiMGEzYTE5
YmZiODkyOTM5ZjAzZTdhZGU4MTI1NjI4ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlUHJveHkuaApAQCAtMTc0LDYgKzE3NCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldE5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZChib29sKTsKICAgICBib29sIG5hdmlnYXRv
clF0T2JqZWN0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF2aWdhdG9yUXRPYmplY3RFbmFi
bGVkOyB9CiAKKyAgICB2b2lkIHNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUpIHsgbV9pbnRlcmFjdGlvbkVuZ2luZSA9IGVuZ2lu
ZTsgbV9wYW5HZXN0dXJlUmVjb2duaXplci5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGVu
Z2luZSk7IG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKGVuZ2luZSk7fQorCiAgICAgdm9pZCBwb3N0TWVzc2FnZVRvTmF2aWdhdG9yUXRPYmplY3Qo
Y29uc3QgUVN0cmluZyYpOwogCiAgICAgcXJlYWwgdGV4dFpvb21GYWN0b3IoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJv
eHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVBy
b3h5UXQuY3BwCmluZGV4IDQ4OWQ4MjkwMjg1NTQ3Mzc3YzQ1NThjZTUxNzU2NzkwYjJkMTUzODYu
LjhjZWM0MTRhYmVlYmU2MjY0MjJjNTBkNDBmOTk2YWI5OGIyNjFkZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNw
cApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlRpbGVkRHJhd2luZ0FyZWFQcm94eS5oIgog
CiAjaW5jbHVkZSAiUXRTR1VwZGF0ZVF1ZXVlLmgiCi0jaW5jbHVkZSAiUXRUb3VjaFZpZXdJbnRl
cmZhY2UuaCIKKyNpbmNsdWRlICJRdFZpZXdJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJpCmluZGV4IDAzZDBkMWI1Y2JmY2YxNmVmZDE4NGMwNTFjMWIzNjM0NTRi
Y2I2N2EuLjIyOTFmZDlkN2IzZTFiMWMwYWZiZTk0ZGI3NGFjM2NiZjNmMTFlMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIucHJpCkBAIC01MSwxMSArNTEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9VSVByb2Nl
c3MvQVBJL0MvV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5jcHAgXAogICAgICQkUFdEL1VJUHJvY2Vz
cy9BUEkvY3BwL3F0L1dLU3RyaW5nUXQuY3BwIFwKICAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL2Nw
cC9xdC9XS1VSTFF0LmNwcCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZp
ZXcuY3BwIFwKLSAgICAkJFBXRC9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAg
XAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmRvd25sb2FkaXRlbS5jcHAgXAotICAg
ICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAgXAotICAgICQkUFdEL1VJ
UHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHAgXAorICAgICQkUFdEL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgXAorICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAgXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYm5hdmlnYXRp
b25jb250cm9sbGVyLmNwcCBcCiAgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVy
ZW5jZXMuY3BwIFwKICAgICAkJFBXRC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlLmNwcCBcCkBAIC0xMzIsMTggKzEzMCwxNCBAQCBIRUFERVJTICs9IFwKICAgICAkJFBX
RC9VSVByb2Nlc3MvQVBJL2NwcC9XS1JldGFpblB0ci5oIFwKICAgICAkJFBXRC9VSVByb2Nlc3Mv
QVBJL2NwcC9xdC9XS1N0cmluZ1F0LmggXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvY3BwL3F0
L1dLVVJMUXQuaCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXcuaCBc
Ci0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xYmFzZXdlYnZpZXdfcC5oIFwKLSAgICAkJFBX
RC9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5oIFwKLSAgICAkJFBXRC9VSVByb2Nl
c3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlld19wLmggXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkv
cXQvcXdlYnByZWZlcmVuY2VzLmggXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYnBy
ZWZlcmVuY2VzX3AuaCBcCiAgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZG93bmxvYWRp
dGVtLmggXAogICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmRvd25sb2FkaXRlbV9wLmgg
XAotICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oIFwKLSAgICAkJFBX
RC9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2VfcC5oIFwKLSAgICAkJFBXRC9VSVByb2Nl
c3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuaCBcCi0gICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9x
dG91Y2h3ZWJ2aWV3X3AuaCBcCisgICAgJCRQV0QvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJw
YWdlLmggXAorICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wLmggXAor
ICAgICQkUFdEL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5oIFwKKyAgICAkJFBXRC9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oIFwKICAgICAkJFBXRC9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJuYXZpZ2F0aW9uY29udHJvbGxlci5oIFwKICAgICAkJFBXRC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmggXAogICAgICQk
UFdEL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExp
c3RJdGVtLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL3Rlc3RzLnByaSBiL1NvdXJjZS90ZXN0cy5w
cmkKaW5kZXggZWFiZTI1Mzk2Yzk4MjgwMTZkMTAyYTkzMDRlMTI5YzFiMDNmYTMwMS4uMWI0MTVm
ZGYxZGY4ZDIzYWRhZTg2OTFhMTI4ZjYwZjFiZGJkNzUzMCAxMDA2NDQKLS0tIGEvU291cmNlL3Rl
c3RzLnByaQorKysgYi9Tb3VyY2UvdGVzdHMucHJpCkBAIC00Myw4ICs0Myw2IEBAIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAgICAgV0VCS0lUMl9URVNUU19ESVIgPSAkJFBX
RC9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMKIAogICAgIFNVQkRJUlMgKz0gXAotICAg
ICAgICAkJFdFQktJVDJfVEVTVFNfRElSL3F0b3VjaHdlYnZpZXcgXAotICAgICAgICAkJFdFQktJ
VDJfVEVTVFNfRElSL3FkZXNrdG9wd2VidmlldyBcCi0gICAgICAgICQkV0VCS0lUMl9URVNUU19E
SVIvY29tbW9udmlld3Rlc3RzIFwKKyAgICAgICAgJCRXRUJLSVQyX1RFU1RTX0RJUi9xcXVpY2t3
ZWJ2aWV3IFwKICAgICAgICAgJCRXRUJLSVQyX1RFU1RTX0RJUi9xbWx0ZXN0cwogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI1Mzk4MmEyYjAz
Y2UyMTEyOGU0NjQyYzg3OTRhZTMwYzNhZmNmMmUuLjExZGYwNGNjMDc5MzcyMDJmYmQ3NWNiYjQ4
YjRmMDZlY2RmYTE4ODMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMS0xMS0wOSAgQWxleGlzIE1lbmFyZCAgPGFs
ZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdIE1lcmdlIFFUb3VjaFdl
YlZpZXcgYW5kIFFEZXNrdG9wV2ViVmlldyBpbnRvIG9uZSBjbGFzcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzNTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIE1pbmlCcm93c2VyIGFuZCBXZWJL
aXRUZXN0UnVubmVyIHdvcmsgYWdhaW4gYWZ0ZXIgdGhlCisgICAgICAgIG1lcmdlLgorCisgICAg
ICAgICogTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHA6CisgICAgICAgIChCcm93c2Vy
V2luZG93OjpCcm93c2VyV2luZG93KToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OndlYlZpZXcp
OgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybzoKKyAgICAgICAgKiBN
aW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmM6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQv
TWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHA6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvbWFp
bi5jcHA6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sOgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9EZXNrdG9wVmlldy5xbWw6IFJlbW92ZWQuCisg
ICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL1RvdWNoVmlldy5xbWw6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcDoKKyAgICAgICAgKFdUUjo6UGxh
dGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgorCiAyMDExLTExLTA5ICBTaW1vbiBIYXVz
bWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEVuYWJsZSBl
eHBvcnRzIGFuZCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgaW4gc3RhdGljIGxpYnMKZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJy
b3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKaW5kZXggMTQxNWY0ZDY2ZjYxYmI2YWQ3NGM4ZTE0
OWM5NmFkZTBkMDRjNDlmOS4uZjU2MTNiNjc1YmRhMDEzNzEzNWU3ZjhlOTFlODZjOTMxZThhYzc1
NiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKQEAgLTI4LDkgKzI4LDkg
QEAKIAogI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIKIAotI2luY2x1ZGUgInFkZXNrdG9wd2Vi
dmlldy5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnZpZXcuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJw
YWdlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXF1aWNrd2VicGFnZS5oIgor
I2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgogI2luY2x1ZGUgInV0aWxzLmgiCiAKICNpbmNs
dWRlIDxRRGVjbGFyYXRpdmVFbmdpbmU+CkBAIC01Miw2ICs1Miw4IEBAIEJyb3dzZXJXaW5kb3c6
OkJyb3dzZXJXaW5kb3coV2luZG93T3B0aW9ucyogb3B0aW9ucykKICAgICBlbmdpbmUoKS0+cm9v
dENvbnRleHQoKS0+c2V0Q29udGV4dFByb3BlcnR5KCJvcHRpb25zIiwgb3B0aW9ucyk7CiAgICAg
c2V0U291cmNlKFFVcmwoInFyYzovcW1sL0Jyb3dzZXJXaW5kb3cucW1sIikpOwogICAgIGNvbm5l
Y3Qocm9vdE9iamVjdCgpLCBTSUdOQUwocGFnZVRpdGxlQ2hhbmdlZChRU3RyaW5nKSksIHRoaXMs
IFNMT1Qoc2V0V2luZG93VGl0bGUoUVN0cmluZykpKTsKKyAgICBpZiAoIW9wdGlvbnMtPnVzZVRv
dWNoV2ViVmlldygpKQorICAgICAgICBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6Z2V0KHJvb3RPYmpl
Y3QoKS0+cHJvcGVydHkoIndlYnZpZXciKS52YWx1ZTxRUXVpY2tXZWJWaWV3Kj4oKSktPnNldFVz
ZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cih0cnVlKTsKICAgICBpZiAob3B0aW9ucy0+c3Rh
cnRNYXhpbWl6ZWQoKSkKICAgICAgICAgc2V0V2luZG93U3RhdGUoUXQ6OldpbmRvd01heGltaXpl
ZCk7CiAgICAgZWxzZQpAQCAtNjEsMTEgKzYzLDcgQEAgQnJvd3NlcldpbmRvdzo6QnJvd3Nlcldp
bmRvdyhXaW5kb3dPcHRpb25zKiBvcHRpb25zKQogCiBRT2JqZWN0KiBCcm93c2VyV2luZG93Ojp3
ZWJWaWV3KCkgY29uc3QKIHsKLSAgICBRT2JqZWN0KiB3ZWJWaWV3ID0gcm9vdE9iamVjdCgpLT5w
cm9wZXJ0eSgid2ViVmlldyIpLnZhbHVlPFFEZXNrdG9wV2ViVmlldyo+KCk7Ci0gICAgLy8gVGhl
IHdlYlZpZXcgaXMgY3JlYXRlZCBpbiBRTUwsIHRoZXJlZm9yZSBpdCBtaWdodCBub3QgZXhpc3Qg
eWV0LgotICAgIGlmICghd2ViVmlldykKLSAgICAgICAgd2ViVmlldyA9IHJvb3RPYmplY3QoKS0+
cHJvcGVydHkoIndlYlZpZXciKS52YWx1ZTxRVG91Y2hXZWJWaWV3Kj4oKTsKLSAgICByZXR1cm4g
d2ViVmlldzsKKyAgICByZXR1cm4gcm9vdE9iamVjdCgpLT5wcm9wZXJ0eSgid2VidmlldyIpLnZh
bHVlPFFRdWlja1dlYlZpZXcqPigpOwogfQogCiB2b2lkIEJyb3dzZXJXaW5kb3c6OmxvYWQoY29u
c3QgUVN0cmluZyYgdXJsKQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJy
b3dzZXIucHJvIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvCmluZGV4IDMw
ZWNkODFmNzdiODU0ODU3MGFjMmU4M2MyMzQxYTJmZmU2NGNhNjEuLjhjYWQxN2NjNGJmMTY5YjY5
NmFhYzQxNjRmYWEwOGQyZDVkYjkyMTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L01pbmlCcm93c2VyLnBybworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5w
cm8KQEAgLTI0LDYgKzI0LDExIEBAIERFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCiAK
IENPTkZJRyArPSBxdHdlYmtpdAogCisjIEZJWE1FOiBXaGVuIHdlYmtpdC1wcml2YXRlIHdvcmtz
IGxldCdzIHVzZSBpdC4KK2xvYWQoamF2YXNjcmlwdGNvcmUpCitsb2FkKHdlYmNvcmUpCitsb2Fk
KHdlYmtpdDIpCisKIFFUICs9IG5ldHdvcmsgZGVjbGFyYXRpdmUgd2lkZ2V0cwogbWFjeDogUVQg
Kz0geG1sCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFy
YyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYwppbmRleCAxMmRkYzMyNGM4
YmExNWEwOGQyNmZiNDZiMWEyZjhiZWRjNzZiZWQ5Li5hNTdhOTU0NGY0MTUzMzNkYjE0NWIzZWIz
ZGVmODM0NDVhYTAzMWE4IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJv
d3Nlci5xcmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCkBAIC02
LDcgKzYsNSBAQAogICAgICAgICA8ZmlsZT5pY29ucy9zdG9wLnBuZzwvZmlsZT4KICAgICAgICAg
PGZpbGU+cW1sL0Jyb3dzZXJXaW5kb3cucW1sPC9maWxlPgogICAgICAgICA8ZmlsZT51c2VyYWdl
bnRsaXN0LnR4dDwvZmlsZT4KLSAgICAgICAgPGZpbGU+cW1sL0Rlc2t0b3BWaWV3LnFtbDwvZmls
ZT4KLSAgICAgICAgPGZpbGU+cW1sL1RvdWNoVmlldy5xbWw8L2ZpbGU+CiAgICAgPC9xcmVzb3Vy
Y2U+CiA8L1JDQz4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2Vy
QXBwbGljYXRpb24uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNh
dGlvbi5jcHAKaW5kZXggY2E3ZjgxYTQwMTQ4MGFhMmI5MjJiMTNmMWI2OGUwNjhmYjBiNWU2ZS4u
MWJiMjNiMWUzMDRlMjM2NjdkYjRhNDY5OGIxYTA4YThmZTgyNGNkYyAxMDA2NDQKLS0tIGEvVG9v
bHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAKKysrIGIvVG9vbHMv
TWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAKQEAgLTI4LDggKzI4LDYg
QEAKIAogI2luY2x1ZGUgIk1pbmlCcm93c2VyQXBwbGljYXRpb24uaCIKIAotI2luY2x1ZGUgInFk
ZXNrdG9wd2Vidmlldy5oIgotI2luY2x1ZGUgInF0b3VjaHdlYnZpZXcuaCIKICNpbmNsdWRlICJx
d2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJ1dGlscy5oIgogI2luY2x1ZGUg
PFFSZWdFeHA+CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcCBiL1Rv
b2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwCmluZGV4IGEyMGIyNWU3ZDlhMTUwYmY3ZTdjOTgz
ZTI3MmUyNDczZDBkOTkyMmYuLjI2ODc3YWU3NzBlYTE2YmZkNDE2N2Q1NTQ1YzI1NDRmZGZmNzA1
ZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwCisrKyBiL1Rvb2xz
L01pbmlCcm93c2VyL3F0L21haW4uY3BwCkBAIC0zMCw2ICszMCw5IEBACiAKICNpbmNsdWRlICJN
aW5pQnJvd3NlckFwcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiVXJsTG9hZGVyLmgiCisKKyNpbmNs
dWRlIDxxZGVjbGFyYXRpdmUuaD4KKwogI2luY2x1ZGUgPFFEaXI+CiAjaW5jbHVkZSA8UUxhdGlu
MVN0cmluZz4KICNpbmNsdWRlIDxRUmVnRXhwPgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jy
b3dzZXJXaW5kb3cucW1sCmluZGV4IDM4Y2JhMGY3YzQwZTE0MDlkNDg2ZTczNmY5NjU4YWIyNzIw
NDFiODAuLjNmMzE5OWVhZDFmZjllZTgwODM3ZjQ2ZDQ4NGUxZTgwMGZhNzM3NmEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKQEAgLTM1LDggKzM1LDcgQEAg
UmVjdGFuZ2xlIHsKICAgICBwcm9wZXJ0eSBib29sIGNhbkdvQmFjazogZmFsc2UKICAgICBwcm9w
ZXJ0eSBib29sIGNhbkdvRm9yd2FyZDogZmFsc2UKICAgICBwcm9wZXJ0eSBib29sIGNhblN0b3A6
IGZhbHNlCi0gICAgcHJvcGVydHkgaW50IGxvYWRQcm9ncmVzczogMAotICAgIHByb3BlcnR5IGFs
aWFzIHdlYlZpZXc6IHZpZXdMb2FkZXIuaXRlbQorICAgIHByb3BlcnR5IGFsaWFzIHdlYnZpZXc6
IHdlYlZpZXcKIAogICAgIHNpZ25hbCBwYWdlVGl0bGVDaGFuZ2VkKHN0cmluZyB0aXRsZSkKIApA
QCAtMTU1LDEwICsxNTQsMTAgQEAgUmVjdGFuZ2xlIHsKICAgICAgICAgICAgICAgICAgICAgYm90
dG9tOiBwYXJlbnQuYm90dG9tCiAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdpZHRoOiBwYXJlbnQud2lkdGgg
LyAxMDAgKiBsb2FkUHJvZ3Jlc3MKKyAgICAgICAgICAgICAgICB3aWR0aDogcGFyZW50LndpZHRo
IC8gMTAwICogd2ViVmlldy5sb2FkUHJvZ3Jlc3MKICAgICAgICAgICAgICAgICBjb2xvcjogImJs
dWUiCiAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC4zCi0gICAgICAgICAgICAgICAgdmlzaWJs
ZTogbG9hZFByb2dyZXNzICE9IDEwMAorICAgICAgICAgICAgICAgIHZpc2libGU6IHdlYlZpZXcu
bG9hZFByb2dyZXNzICE9IDEwMAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBUZXh0SW5w
dXQgewpAQCAtMTkxLDMyICsxOTAsMzEgQEAgUmVjdGFuZ2xlIHsKICAgICAgICAgfQogICAgIH0K
IAotICAgIExvYWRlciB7Ci0gICAgICAgIGlkOiB2aWV3TG9hZGVyCisgICAgV2ViVmlldyB7Cisg
ICAgICAgIGlkOiB3ZWJWaWV3CiAgICAgICAgIGFuY2hvcnMgewogICAgICAgICAgICAgdG9wOiBu
YXZpZ2F0aW9uQmFyLmJvdHRvbQogICAgICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKICAgICAg
ICAgICAgIHJpZ2h0OiBwYXJlbnQucmlnaHQKICAgICAgICAgICAgIGJvdHRvbTogcGFyZW50LmJv
dHRvbQogICAgICAgICB9Ci0gICAgICAgIHNvdXJjZTogb3B0aW9ucy51c2VUb3VjaFdlYlZpZXcg
PyAiVG91Y2hWaWV3LnFtbCIgOiAiRGVza3RvcFZpZXcucW1sIgotICAgIH0KIAotICAgIENvbm5l
Y3Rpb25zIHsKLSAgICAgICAgdGFyZ2V0OiB2aWV3TG9hZGVyLml0ZW0KLSAgICAgICAgb25UaXRs
ZUNoYW5nZWQ6IHBhZ2VUaXRsZUNoYW5nZWQodmlld0xvYWRlci5pdGVtLnRpdGxlKQorICAgICAg
ICBzaWduYWwgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZAorCisgICAgICAgIENvbXBvbmVudC5vbkNv
bXBsZXRlZDogbmF2aWdhdGlvbi5uYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkLmNvbm5lY3QobmF2aWdh
dGlvblN0YXRlQ2hhbmdlZCk7CisKKyAgICAgICAgb25UaXRsZUNoYW5nZWQ6IHBhZ2VUaXRsZUNo
YW5nZWQodGl0bGUpCiAgICAgICAgIG9uVXJsQ2hhbmdlZDogewotICAgICAgICAgICAgYWRkcmVz
c0xpbmUudGV4dCA9IHZpZXdMb2FkZXIuaXRlbS51cmwKKyAgICAgICAgICAgIGFkZHJlc3NMaW5l
LnRleHQgPSB1cmwKICAgICAgICAgICAgIGlmIChvcHRpb25zLnByaW50TG9hZGVkVXJscykKLSAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTG9hZGVkOiIsIHZpZXdMb2FkZXIuaXRlbS51cmwp
OworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJMb2FkZWQ6Iiwgd2ViVmlldy51cmwpOwog
ICAgICAgICAgICAgZm9yY2VBY3RpdmVGb2N1cygpOwogICAgICAgICB9CiAgICAgICAgIG9uTmF2
aWdhdGlvblN0YXRlQ2hhbmdlZDogewotICAgICAgICAgICAgY2FuR29CYWNrID0gdmlld0xvYWRl
ci5pdGVtLm5hdmlnYXRpb24uY2FuR29CYWNrCi0gICAgICAgICAgICBjYW5Hb0ZvcndhcmQgPSB2
aWV3TG9hZGVyLml0ZW0ubmF2aWdhdGlvbi5jYW5Hb0ZvcndhcmQKLSAgICAgICAgICAgIGNhblN0
b3AgPSB2aWV3TG9hZGVyLml0ZW0ubmF2aWdhdGlvbi5jYW5TdG9wCisgICAgICAgICAgICBjYW5H
b0JhY2sgPSBuYXZpZ2F0aW9uLmNhbkdvQmFjaworICAgICAgICAgICAgY2FuR29Gb3J3YXJkID0g
bmF2aWdhdGlvbi5jYW5Hb0ZvcndhcmQKKyAgICAgICAgICAgIGNhblN0b3AgPSBuYXZpZ2F0aW9u
LmNhblN0b3AKICAgICAgICAgfQotICAgICAgICBvbkxvYWRQcm9ncmVzc0NoYW5nZWQ6IGxvYWRQ
cm9ncmVzcyA9IHZpZXdMb2FkZXIuaXRlbS5sb2FkUHJvZ3Jlc3MKICAgICB9CiAKICAgICBLZXlz
Lm9uUHJlc3NlZDogewpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Rlc2t0
b3BWaWV3LnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9EZXNrdG9wVmlldy5xbWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MmRkZDUwOTdmNTVlMTRiMDBiZDFhZjFjMjE0
MTYxODg1OTk0MDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Rlc2t0b3BWaWV3LnFtbAorKysgL2Rldi9udWxs
CkBAIC0xLDggKzAsMCBAQAotaW1wb3J0IFF0UXVpY2sgMi4wCi1pbXBvcnQgUXRXZWJLaXQgMy4w
Ci0KLURlc2t0b3BXZWJWaWV3IHsKLSAgICBzaWduYWwgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZAot
Ci0gICAgQ29tcG9uZW50Lm9uQ29tcGxldGVkOiBuYXZpZ2F0aW9uLm5hdmlnYXRpb25TdGF0ZUNo
YW5nZWQuY29ubmVjdChuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkKQotfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvcXQvcW1sL1RvdWNoVmlldy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9x
dC9xbWwvVG91Y2hWaWV3LnFtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFhZmRi
MDcwMDFiOTZmMmZmNTI3YjllMDJiOWFjNmZiMTgxMGQ3Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvVG91Y2hW
aWV3LnFtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotaW1wb3J0IFF0UXVpY2sgMi4w
Ci1pbXBvcnQgUXRXZWJLaXQgMy4wCi0KLVRvdWNoV2ViVmlldyB7Ci0gICAgc2lnbmFsIG5hdmln
YXRpb25TdGF0ZUNoYW5nZWQKLQotICAgIENvbXBvbmVudC5vbkNvbXBsZXRlZDogbmF2aWdhdGlv
bi5uYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkLmNvbm5lY3QobmF2aWdhdGlvblN0YXRlQ2hhbmdlZCkK
LX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IDRhNTg5YmU5
MzVlYTQ4ZjRkMDhjZjViMzdhMTRhOGNkOTBhOTQxNzguLmE2ZDUxZjIxMGI4ODlmNzAyZTlhMTdm
ZjA3ODhhOTY3OTQxNzRkYzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZp
ZXcuaApAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4K
IAogI2lmIGRlZmluZWQoQlVJTERJTkdfUVRfXykKLWNsYXNzIFFEZXNrdG9wV2ViVmlldzsKLXR5
cGVkZWYgUURlc2t0b3BXZWJWaWV3KiBQbGF0Zm9ybVdLVmlldzsKK2NsYXNzIFFRdWlja1dlYlZp
ZXc7Cit0eXBlZGVmIFFRdWlja1dlYlZpZXcqIFBsYXRmb3JtV0tWaWV3OwogY2xhc3MgUVF1aWNr
VmlldzsKIHR5cGVkZWYgUVF1aWNrVmlldyogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBkZWZpbmVk
KF9fQVBQTEVfXykgJiYgX19BUFBMRV9fCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQv
UGxhdGZvcm1XZWJWaWV3UXQuY3BwCmluZGV4IDIyZTNhYTY0MWJlMjFiMzFhMmIyNmZjMDg3NzI3
YzlmZmEwMjBlYWQuLjc3YzMxZmYwYzk0MjcxOGI1MDBmMGZhYjgzODk3OWExNWYzZDY1ZTQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCkBA
IC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJQbGF0Zm9y
bVdlYlZpZXcuaCIKLSNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXcuaCIKKyNpbmNsdWRlICJxcXVp
Y2t3ZWJ2aWV3LmgiCiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UURlY2xh
cmF0aXZlUHJvcGVydHk+CkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiB9OwogCiBQbGF0Zm9y
bVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmKQotICAgIDogbV92aWV3KG5ldyBRRGVza3RvcFdlYlZpZXco
Y29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSkKKyAgICA6IG1fdmlldyhuZXcgUVF1aWNrV2ViVmll
dyhjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKQogICAgICwgbV93aW5kb3cobmV3IFdyYXBwZXJX
aW5kb3cobV92aWV3KSkKICAgICAsIG1fd2luZG93SXNLZXkodHJ1ZSkKIHsKZGlmZiAtLWdpdCBh
L0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1ZTE2ZTEyYjZhZmNkNDJiZjIxNDA0NGM1NWNm
MTg2OTQwMzQ0OWZmLi41Zjg3ODM0Y2EwNzExNTE3MDNiOGIxMzFmNjFjM2IwNWJkODdkNTRhIDEw
MDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTEtMTEtMDkgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgW1F0XSBNZXJnZSBRVG91Y2hXZWJWaWV3IGFuZCBRRGVza3RvcFdlYlZpZXcgaW50
byBvbmUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxMzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIG9sZCB0ZXN0cyBhbmQgbWVyZ2UgdGhlbSBpbnRvIHRoZSBuZXcgUVF1aWNrV2Vi
VmlldyBkaXJlY3RvcnkuCisKKyAgICAgICAgKiBTb3VyY2UvdGVzdHMucHJpOgorCiAyMDExLTEx
LTEwICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAg
ICAgICBbUXRdIE1ha2Ugc3VyZSBoZWFkZXJzLnByaSBoYXMgdGhlIHJpZ2h0IHJlbGF0aXZlIHBh
dGhzIGZvciBpbnN0YWxsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>