<?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>40050</bug_id>
          
          <creation_ts>2010-06-02 02:50:05 -0700</creation_ts>
          <short_desc>[Qt] Upstream the WebKit QML integration plugin</short_desc>
          <delta_ts>2011-04-19 05:15:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Alexis Menard (darktears)">menard</assigned_to>
          <cc>jesus</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>233174</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-06-02 02:50:05 -0700</bug_when>
    <thetext>Qt 4.7 provides an integration of WebKit into QML. The integration is provided through a plugin located in the src/imports/webkit directory. It is self-contained and only depends on public QtDeclarative and QtWebKit API.

In order to implement new optimizations and in order to reduce the dependency of code inside Qt on WebKit, the QML WebKit integration should be moved into the upstream QtWebKit development.

A possible location would be WebKit/qt/declarative</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233224</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-02 05:50:28 -0700</bug_when>
    <thetext>So what is the idea?

It is yet another view of a QWebPage, not benefiting from accelerated compositing, it has another kind of tiling implementation, etc.

Can we somehow reuse or sync this with the the QGraphicsWebView?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233255</commentid>
    <comment_count>2</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2010-06-02 07:20:39 -0700</bug_when>
    <thetext>No problem Kenneth the QML component is using QGraphicsWebView. It&apos;s just add some properties and some basic interactions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233257</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-02 07:25:10 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; No problem Kenneth the QML component is using QGraphicsWebView. It&apos;s just add some properties and some basic interactions.

That is great! I wonder if we need to enforce some settings, like you surely want to use it with tiling enabled right, frame flattening etc. We need good defaults, but I&apos;m not quite sure how to deal with this yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233443</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-06-02 14:07:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; No problem Kenneth the QML component is using QGraphicsWebView. It&apos;s just add some properties and some basic interactions.
&gt; 
&gt; That is great! I wonder if we need to enforce some settings, like you surely want to use it with tiling enabled right, frame flattening etc. We need good defaults, but I&apos;m not quite sure how to deal with this yet.

The current implementation - which you can find in Qt&apos;s 4.7 branch - uses the tiled backing store. That replaces the previous tiling implementation based on Qt Declarative&apos;s QDeclarativePaintedItem.

One thing QDeclarativeWebView should set though - and it doesn&apos;t right now - is the frame flattening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233445</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-02 14:10:30 -0700</bug_when>
    <thetext>What about the viewport hints (viewpost meta tag)?

Some of our documentation like in QWebSettings says that for instance FrameFlattening is disabled by default. Should we remove these from the docs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233716</commentid>
    <comment_count>6</comment_count>
      <attachid>57756</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2010-06-03 05:32:00 -0700</bug_when>
    <thetext>Created attachment 57756
Patch for the import</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233717</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-03 05:34:47 -0700</bug_when>
    <thetext>Attachment 57756 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
WebKit/qt/declarative/qdeclarativewebview.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/declarative/qdeclarativewebview.cpp:43:  MAX_DOUBLECLICK_TIME is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/qt/declarative/plugin.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
WebKit/qt/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
WebKit/qt/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
WebKit/qt/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
WebKit/qt/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 9 in 9 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>233718</commentid>
    <comment_count>8</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-03 05:37:56 -0700</bug_when>
    <thetext>Attachment 57756 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/2979031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233731</commentid>
    <comment_count>9</comment_count>
      <attachid>57756</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-03 06:19:11 -0700</bug_when>
    <thetext>Comment on attachment 57756
Patch for the import

OK, here are some initial style explanations. Please understand these carefully and fix them through-out the code.

There is a style bot checking the style, but it only checks a subset so please read the style guide on www.webkit.org


&gt; diff --git a/ChangeLog b/ChangeLog
&gt; index ef17c28..e502688 100644
&gt; --- a/ChangeLog
&gt; +++ b/ChangeLog
&gt; @@ -1,3 +1,14 @@
&gt; +2010-06-03  Alexis Menard  &lt;alexis.menard@nokia.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [Qt] Upstream the WebKit QML integration plugin
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=40050
&gt; +
&gt; +		Add to the build the QML WebKit integration plugin.

Wrong indentation


&gt; +
&gt; +        [Qt] Upstream the WebKit QML integration plugin
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=40050
&gt; +
&gt; +		Add to the Qt port the QML webkit integration plugin.
&gt; +		QDeclarativeWebView is creating the item that is added
&gt; +		to the QGraphicsScene. The .h file is not meant to be
&gt; +		public.
&gt; +
&gt; +		QmlDir is describing the plugin.

Wrong indentation again. Plus it is called WebKit, not webkit.


&gt; +
&gt; +#include &quot;qdeclarativewebview_p.h&quot;
&gt; +#include &quot;qdeclarativewebview_p_p.h&quot;

A private of a private? :)

&gt; +
&gt; +#include &lt;QtDeclarative/qdeclarative.h&gt;
&gt; +#include &lt;QtDeclarative/qdeclarativeextensionplugin.h&gt;
&gt; +
&gt; +QT_BEGIN_NAMESPACE
&gt; +
&gt; +class WebKitQmlPlugin : public QDeclarativeExtensionPlugin {
&gt; +    Q_OBJECT
&gt; +public:
&gt; +    virtual void registerTypes(const char *uri)

* should be left aligned.

&gt; +
&gt; +static const int MAX_DOUBLECLICK_TIME = 500; // XXX need better gesture system

In WebKit do not use capitals for globals. maxDoubleClickTime is fine. 
Do not use XXX, but use FIXME:

&gt; +
&gt; +class QDeclarativeWebViewPrivate {
&gt; +public:
&gt; +    QDeclarativeWebViewPrivate(QDeclarativeWebView* qq)
&gt; +      : q(qq), page(0), preferredwidth(0), preferredheight(0),
&gt; +            progress(1.0), status(QDeclarativeWebView::Null), pending(PendingNone),
&gt; +            newWindowComponent(0), newWindowParent(0),
&gt; +            pressTime(400),
&gt; +            rendering(true)


Put each on one line and add the comma (,) to the right, like

    : q(qq)
    , page(0)
    , etc


&gt; +    int pressTime; // milliseconds before it&apos;s a &quot;hold&quot;

What is a hold? could the name be improed?

&gt; +
&gt; +    static void windowObjectsAppend(QDeclarativeListProperty&lt;QObject&gt; *prop, QObject *o)

* is aligned wrongly

&gt; +    {
&gt; +        static_cast&lt;QDeclarativeWebViewPrivate *&gt;(prop-&gt;data)-&gt;windowObjects.append(o);

No space between Private and *

&gt; +        static_cast&lt;QDeclarativeWebViewPrivate *&gt;(prop-&gt;data)-&gt;updateWindowObjects();
&gt; +    }
&gt; +
&gt; +    void updateWindowObjects();
&gt; +    QObjectList windowObjects;
&gt; +
&gt; +    bool rendering;
&gt; +};
&gt; +
&gt; +/*!
&gt; +    \qmlclass WebView QDeclarativeWebView
&gt; +  \since 4.7

Something went wrong with indentation here

&gt; +void QDeclarativeWebView::doLoadFinished(bool ok)
&gt; +{
&gt; +
&gt; +    if (title().isEmpty())
&gt; +        pageUrlChanged(); // XXX bug 232556 - pages with no title never get urlChanged()

Qt bug? Again do not use XXX and please add the full url.

&gt; +void QDeclarativeWebView::setPreferredWidth(int iw)

iw? Use better variable names, like &apos;width


&gt; +void QDeclarativeWebView::setPreferredHeight(int ih)

Here as well

&gt; +QVariant QDeclarativeWebView::evaluateJavaScript(const QString &amp;scriptSource)

&amp; is aligned wrongly

&gt; +{
&gt; +    return this-&gt;page()-&gt;mainFrame()-&gt;evaluateJavaScript(scriptSource);
&gt; +}
&gt; +
&gt; +void QDeclarativeWebView::propagateFocusToWebPage(bool hasFocus)
&gt; +{
&gt; +    QFocusEvent e(hasFocus ? QEvent::FocusIn : QEvent::FocusOut);

write e out as event or at least &apos;ev&apos;

&gt; +    page()-&gt;event(&amp;e);


&gt; +void QDeclarativeWebView::updateContentsSize()
&gt; +{
&gt; +    if (d-&gt;page)
&gt; +        d-&gt;page-&gt;setPreferredContentsSize(QSize(
&gt; +            d-&gt;preferredwidth&gt;0 ? d-&gt;preferredwidth : width(),
&gt; +            d-&gt;preferredheight&gt;0 ? d-&gt;preferredheight : height()));
&gt; +}
ly
According to the style guide this will need braces and the contents of the if textually spans multiple lines (incl comments if any)


&gt; +
&gt; +void QDeclarativeWebView::geometryChanged(const QRectF &amp;newGeometry,
&gt; +                                 const QRectF &amp;oldGeometry)

&amp; alignment

&gt; +{
&gt; +    if (newGeometry.size() != oldGeometry.size() &amp;&amp; d-&gt;page) {
&gt; +        QSize cs = d-&gt;page-&gt;preferredContentsSize();

cs is a badly named variable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233759</commentid>
    <comment_count>10</comment_count>
      <attachid>57769</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2010-06-03 08:07:14 -0700</bug_when>
    <thetext>Created attachment 57769
Version 2

Fixes coding style and other feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233760</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-03 08:08:29 -0700</bug_when>
    <thetext>Attachment 57769 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/qt/declarative/qdeclarativewebview.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/declarative/plugin.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 8 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>233761</commentid>
    <comment_count>12</comment_count>
      <attachid>57770</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2010-06-03 08:17:08 -0700</bug_when>
    <thetext>Created attachment 57770
Version 3

Manage to get some URL for the bugs inside the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233762</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-03 08:19:45 -0700</bug_when>
    <thetext>Attachment 57770 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/qt/declarative/qdeclarativewebview.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/declarative/plugin.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 8 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>233820</commentid>
    <comment_count>14</comment_count>
      <attachid>57770</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-03 10:33:14 -0700</bug_when>
    <thetext>Comment on attachment 57770
Version 3

WebKit/qt/declarative/qdeclarativewebview.cpp:226
 +  
unneeded newline :-)

WebKit/qt/declarative/qdeclarativewebview.cpp:246
 +      if ((d-&gt;url.isEmpty() &amp;&amp; page()-&gt;mainFrame()-&gt;url() != QUrl(QLatin1String(&quot;about:blank&quot;)))
Why do you control an url locally? Why not always use the url from the mainFrame? you could even make an inline accessor for it.

WebKit/qt/declarative/qdeclarativewebview.cpp:287
 +  void QDeclarativeWebView::setUrl(const QUrl &amp;url)
&amp; should be to the left

WebKit/qt/declarative/qdeclarativewebview.cpp:314
 +  int QDeclarativeWebView::preferredWidth() const
Be careful, we already have an API called setPreferredSize or something similar, which actually forces layout at that size and not of the max(preferred, min required my contents)

WebKit/qt/declarative/qdeclarativewebview.cpp:319
 +  void QDeclarativeWebView::setPreferredWidth(int width)
Is this preferredwidth/height a QML concept?

WebKit/qt/declarative/qdeclarativewebview.cpp:361
 +  void QDeclarativeWebView::propagateFocusToWebPage(bool hasFocus)
The hasFocus seems confusing here given the name of the method. It should like a setting, but it is not. Simon?

WebKit/qt/declarative/qdeclarativewebview.cpp:389
 +                                   const QRectF&amp; oldGeometry)
function definitions should never include newline, thus they should be on one line only :-) even if that line spans 300 chars!

WebKit/qt/declarative/qdeclarativewebview.cpp:393
 +          if (widthValid())
widthValid seems like a strange name, what about hasValidWidth? widthIsValid? I prefer the former

WebKit/qt/declarative/qdeclarativewebview.cpp:455
 +      for (int ii = 0; ii &lt; windowObjects.count(); ++ii) {
int ii? Why not use i? or it? or something more saying

WebKit/qt/declarative/qdeclarativewebview.cpp:457
 +          QDeclarativeWebViewAttached* attached = static_cast&lt;QDeclarativeWebViewAttached *&gt;(qmlAttachedPropertiesObject&lt;QDeclarativeWebView&gt;(object));
Sometimes we make casting methos like toQDeclarativeWebViewAttached(QObject* object). This can be quite handy for adding ASSERTS to the cast, plus it makes the code look cleaner. It should be inline though

WebKit/qt/declarative/qdeclarativewebview.cpp:478
 +  QMouseEvent* QDeclarativeWebView::sceneMouseEventToMouseEvent(QGraphicsSceneMouseEvent* e)
For consistency use ev&apos; as we are trying to use that elsewhere.

WebKit/qt/declarative/qdeclarativewebview.cpp:478
 +  QMouseEvent* QDeclarativeWebView::sceneMouseEventToMouseEvent(QGraphicsSceneMouseEvent* e)
Oh btw, we have the other methods for handling mouse etc in the QWebPagePrivate, I believe. I guess this code belongs there.

WebKit/qt/declarative/qdeclarativewebview.cpp:511
 +      \qmlsignal WebView::onDoubleClick(clickx,clicky)
space after , ?

WebKit/qt/declarative/qdeclarativewebview.cpp:539
 +  bool QDeclarativeWebView::heuristicZoom(int clickX, int clickY, qreal maxzoom)
maxzoom should be maxZoom. Btw if you are using tiling you DO NOT want to use zoom, you want to use SCALE instead :)

WebKit/qt/declarative/qdeclarativewebview.cpp:543
 +      qreal ozf = contentsScale();
ozf? I have no idea what that is short for.

WebKit/qt/declarative/qdeclarativewebview.cpp:544
 +      QRect showarea = elementAreaAt(clickX, clickY, d-&gt;preferredwidth / maxzoom, d-&gt;preferredheight / maxzoom);
showArea... that is now we name variables.

WebKit/qt/declarative/qdeclarativewebview.cpp:549
 +          QRectF r(showarea.left()*z, showarea.top() * z, showarea.width() * z, showarea.height() * z);
showarea.left()*z should have spaces around the *

WebKit/qt/declarative/qdeclarativewebview.cpp:571
 +  void QDeclarativeWebView::setPressGrabTime(int ms)
I think WebKit normally uses millis, you can do a greb and check.

WebKit/qt/declarative/qdeclarativewebview.cpp:599
 +    */
Comments in code uses // and starts with a capital and ends with a punctuation mark (dot). I personally try to make them stay within 100 chars, but that is just me.

WebKit/qt/declarative/qdeclarativewebview.cpp:743
 +  
Why so many newlines here ?

WebKit/qt/declarative/qdeclarativewebview.cpp:750
 +      return page()-&gt;mainFrame()-&gt;icon().pixmap(QSize(256, 256));
Where does that size come from? Make it either a global value with a descriptive name or add a comment.

WebKit/qt/declarative/qdeclarativewebview.cpp:758
 +  void QDeclarativeWebView::setZoomFactor(qreal factor)
I still guess that we want to enforce tiling and use scale instead of zoom factor.

WebKit/qt/declarative/qdeclarativewebview.cpp:780
 +  void QDeclarativeWebView::setStatusText(const QString&amp; s)
call s for text

WebKit/qt/declarative/qdeclarativewebview.cpp:798
 +  
unneeded newline

WebKit/qt/declarative/qdeclarativewebview.cpp:799
 +      if (!d-&gt;page) {
You can avoid indentating the below lines by saying
if (d-&gt;page)
    return d-&gt;page;

instead, always a good thing.

WebKit/qt/declarative/qdeclarativewebview.cpp:856
 +  QDeclarativeWebSettings* QDeclarativeWebView::settingsObject() const
we need to be VERY careful with which settings we really want to expose to QML.

WebKit/qt/declarative/qdeclarativewebview.cpp:862
 +  void QDeclarativeWebView::setPage(QWebPage* page)
How is the whole PageClient handled? This needs to be thought out!

WebKit/qt/declarative/qdeclarativewebview.cpp:923
 +            const QByteArray &amp;body)
Function definition on one line please

WebKit/qt/declarative/qdeclarativewebview.cpp:945
 +  void QDeclarativeWebView::setHtml(const QString &amp;html, const QUrl &amp;baseUrl)
&amp; placement

WebKit/qt/declarative/qdeclarativewebview.cpp:958
 +  void QDeclarativeWebView::setContent(const QByteArray &amp;data, const QString &amp;mimeType, const QUrl &amp;baseUrl)
&amp; placement

WebKit/qt/declarative/qdeclarativewebview.cpp:999
 +                      delete nobj;
newObject?

WebKit/qt/declarative/qdeclarativewebview.cpp:1011
 +              }
This is a one line, thus must not have braces :-) yeah I know, different from Qt style guide.

WebKit/qt/declarative/qdeclarativewebview.cpp:1105
 +          maxwidth = INT_MAX;
I think we normally use the max from stl.

WebKit/qt/declarative/qdeclarativewebview.cpp:1105
 +          maxwidth = INT_MAX;
should be maxWidth.

WebKit/qt/declarative/qdeclarativewebview.cpp:1112
 +      return rv;
rv?

WebKit/qt/declarative/qdeclarativewebview.cpp:1133
 +      qWarning() &lt;&lt; sourceID &lt;&lt; &apos;:&apos; &lt;&lt; lineNumber &lt;&lt; &apos;:&apos; &lt;&lt; message;
Do you really want to upstream this? it seems like debugging code

WebKit/qt/declarative/qdeclarativewebview.cpp:1136
 +  QString QDeclarativeWebPage::chooseFile(QWebFrame *originatingFrame, const QString&amp; oldFile)
* placement

Still a lot to check, but this is it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233822</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-03 10:34:50 -0700</bug_when>
    <thetext>Jesus, can you please look at the WebPageClient issues and how we should go about them? or at least talk to Alexis about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236353</commentid>
    <comment_count>16</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-06-10 07:11:41 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Jesus, can you please look at the WebPageClient issues and how we should go about them? or at least talk to Alexis about it.

I looked at the patch and I think that nothing else is needed from the PageClient perspective since you use a QGraphicsWebView and you call its setPage. In this function a PageClient is created for the view, so right now your view might be able to use Accelerated Compositing and Tiling just out of the box, but this need to be tested. In the worst case scenario there will be some hooks missing somewhere, but nothing that taking a look at QtTestBrowser and yberbrowser wouldn&apos;t point out.

About the patch itself, I had to remove the &quot;private-private&quot; includes (something_p_p.h) from two files and there was a duplicate forward declaration &apos;class QDeclarativeSomething;&apos; in the .cpp. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239354</commentid>
    <comment_count>17</comment_count>
      <attachid>58989</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2010-06-17 06:03:19 -0700</bug_when>
    <thetext>Created attachment 58989
version 4

Refactor, remove the private private header and change the way the items are organized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239357</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-17 06:08:21 -0700</bug_when>
    <thetext>Attachment 58989 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/qt/declarative/qdeclarativewebview.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/declarative/plugin.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 9 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>239363</commentid>
    <comment_count>19</comment_count>
      <attachid>58989</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-17 06:27:38 -0700</bug_when>
    <thetext>Comment on attachment 58989
version 4

Almost there.

WebKit/qt/ChangeLog:8
 +          Add to the Qt port the QML WebKit integration plugin.
now in English please :-) &quot;Add the QML WebKit integration plugin to the Qt port&quot;

WebKit/qt/ChangeLog:9
 +          QDeclarativeWebView is creating the item and expose
exposes ?

WebKit/qt/declarative/qdeclarativewebview.cpp:44
 +        : q(qq)
wrong indentation :-) indentation is a multiply of 4

WebKit/qt/declarative/qdeclarativewebview.cpp:47
 +        , progress(1.0)
is starts fully loaded?

WebKit/qt/declarative/qdeclarativewebview.cpp:52
 +        , rendering(true)
isRendering

WebKit/qt/declarative/qdeclarativewebview.cpp:58
 +      QUrl url; // page url might be different if it has not loaded yet
might be? Page URL is different if the page hasn&apos;t been loaded yet.

comments start with capital and ends with a punctuation mark.

WebKit/qt/declarative/qdeclarativewebview.cpp:61
 +      int preferredwidth, preferredheight;
preferred_W_idth

WebKit/qt/declarative/qdeclarativewebview.cpp:88
 +      , pressTime(400)
pressTimeMillis

WebKit/qt/declarative/qdeclarativewebview.cpp:223
 +      QWebPage* wp = new QDeclarativeWebPage(this);
wp? maybe just use page

WebKit/qt/declarative/qdeclarativewebview.cpp:279
 +  void QDeclarativeWebView::doLoadProgress(int p)
progress. Btw, how can you &quot;do a load progress&quot;? is this like a onLoadProgressChange ?

WebKit/qt/declarative/qdeclarativewebview.cpp:503
 +  void QDeclarativeWebView::setRenderingEnabled(bool enabled)
any reason this is called rendering and not painting?

WebKit/qt/declarative/qdeclarativewebview.cpp:627
 +      return page()-&gt;mainFrame()-&gt;icon().pixmap(QSize(256, 256));
won&apos;t this look terrible? Most icons are quite small and never uses at this size

WebKit/qt/declarative/qdeclarativewebview.cpp:678
 +      \qmlproperty bool WebView::settings.developerExtrasEnabled
do you support the web inspector with qml???

WebKit/qt/declarative/qdeclarativewebview.cpp:729
 +  
why a newline here?

WebKit/qt/declarative/qdeclarativewebview.cpp:817
 +  QDeclarativeWebView* QDeclarativeWebView::createWindow(QWebPage::WebWindowType type)
can&apos;t this method be refactored a bit ?

WebKit/qt/declarative/qdeclarativewebview.cpp:939
 +          maxWidth = INT_MAX;
use stl constants

WebKit/qt/declarative/qdeclarativewebview_p.h:160
 +                const QByteArray &amp;body = QByteArray());
keep on one line.

WebKit/qt/declarative/qdeclarativewebview_p.h:169
 +      QDeclarativeWebSettings *settingsObject() const;
* placement

WebKit/qt/declarative/qdeclarativewebview_p.h:179
 +      void setNewWindowComponent(QDeclarativeComponent *newWindow);
here as well

WebKit/qt/declarative/qdeclarativewebview_p.h:178
 +      QDeclarativeComponent *newWindowComponent() const;
here

WebKit/qt/declarative/qdeclarativewebview_p.h:232
 +                                   const QRectF &amp;oldGeometry);
keep on one line

WebKit/qt/declarative/qdeclarativewebview_p.h:260
 +      void setWindowObjectName(const QString &amp;n)
n? baad name :-) also wrong placement of  &amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239382</commentid>
    <comment_count>20</comment_count>
      <attachid>58994</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2010-06-17 07:42:02 -0700</bug_when>
    <thetext>Created attachment 58994
Version 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239384</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-17 07:48:14 -0700</bug_when>
    <thetext>Attachment 58994 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/qt/declarative/qdeclarativewebview.cpp:21:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/declarative/plugin.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 9 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>239395</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-06-17 08:05:43 -0700</bug_when>
    <thetext>Committed r61325: &lt;http://trac.webkit.org/changeset/61325&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239403</commentid>
    <comment_count>23</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-06-17 08:20:01 -0700</bug_when>
    <thetext>Revision r61325 cherry-picked into qtwebkit-2.0 with commit c6f08f4c13f88491a5d1ae1794c72166af0c26ba</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57756</attachid>
            <date>2010-06-03 05:32:00 -0700</date>
            <delta_ts>2010-06-03 08:07:14 -0700</delta_ts>
            <desc>Patch for the import</desc>
            <filename>40050-QML.diff</filename>
            <type>text/plain</type>
            <size>67555</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlZjE3YzI4Li5lNTAyNjg4
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDYtMDMgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFVwc3Ry
ZWFtIHRoZSBXZWJLaXQgUU1MIGludGVncmF0aW9uIHBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwNTAKKworCQlBZGQgdG8gdGhlIGJ1aWxk
IHRoZSBRTUwgV2ViS2l0IGludGVncmF0aW9uIHBsdWdpbi4KKworICAgICAgICAqIFdlYktpdC5w
cm86CisKIDIwMTAtMDYtMDIgIFN0ZXJsaW5nIFN3aWdhcnQgIDxzc3dpZ2FydEBnb29nbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
LnBybyBiL1dlYktpdC5wcm8KaW5kZXggNzlkZTA3Mi4uOGQ5Y2U3OCAxMDA2NDQKLS0tIGEvV2Vi
S2l0LnBybworKysgYi9XZWJLaXQucHJvCkBAIC05LDYgKzksNyBAQCBTVUJESVJTICs9IFwKIAog
IyBJZiB0aGUgc291cmNlIGV4aXN0cywgYnVpbHQgaXQKIGV4aXN0cygkJFBXRC9XZWJLaXRUb29s
cy9RdFRlc3RCcm93c2VyKTogU1VCRElSUyArPSBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyCitl
eGlzdHMoJCRQV0QvV2ViS2l0L3F0L2RlY2xhcmF0aXZlKTogU1VCRElSUyArPSBXZWJLaXQvcXQv
ZGVjbGFyYXRpdmUKIGV4aXN0cygkJFBXRC9KYXZhU2NyaXB0Q29yZS9qc2MucHJvKTogU1VCRElS
UyArPSBKYXZhU2NyaXB0Q29yZS9qc2MucHJvCiBleGlzdHMoJCRQV0QvV2ViS2l0L3F0L3Rlc3Rz
KTogU1VCRElSUyArPSBXZWJLaXQvcXQvdGVzdHMKIGV4aXN0cygkJFBXRC9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8pOiBTVUJESVJTICs9IFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggY2Y0YjI1Mi4uN2E5
ODE4YSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYxIEBACisyMDEwLTA2LTAzICBBbGV4aXMgTWVuYXJkICA8YWxl
eGlzLm1lbmFyZEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1F0XSBVcHN0cmVhbSB0aGUgV2ViS2l0IFFNTCBpbnRlZ3JhdGlvbiBw
bHVnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQw
MDUwCisKKwkJQWRkIHRvIHRoZSBRdCBwb3J0IHRoZSBRTUwgd2Via2l0IGludGVncmF0aW9uIHBs
dWdpbi4KKwkJUURlY2xhcmF0aXZlV2ViVmlldyBpcyBjcmVhdGluZyB0aGUgaXRlbSB0aGF0IGlz
IGFkZGVkCisJCXRvIHRoZSBRR3JhcGhpY3NTY2VuZS4gVGhlIC5oIGZpbGUgaXMgbm90IG1lYW50
IHRvIGJlCisJCXB1YmxpYy4KKworCQlRbWxEaXIgaXMgZGVzY3JpYmluZyB0aGUgcGx1Z2luLgor
CisgICAgICAgICogZGVjbGFyYXRpdmUvZGVjbGFyYXRpdmUucHJvOiBBZGRlZC4KKyAgICAgICAg
KiBkZWNsYXJhdGl2ZS9wbHVnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFFtbFBsdWdp
bjo6cmVnaXN0ZXJUeXBlcyk6CisgICAgICAgICogZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vi
dmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU6OlFE
ZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdQ
cml2YXRlOjopOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU6OndpbmRvd09i
amVjdHNBcHBlbmQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6UURlY2xhcmF0aXZl
V2ViVmlldyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojp+UURlY2xhcmF0aXZlV2Vi
Vmlldyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojppbml0KToKKyAgICAgICAgKFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OmNvbXBvbmVudENvbXBsZXRlKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6OnN0YXR1cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpwcm9n
cmVzcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpkb0xvYWRTdGFydGVkKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmRvTG9hZFByb2dyZXNzKToKKyAgICAgICAgKFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OnBhZ2VVcmxDaGFuZ2VkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OmRvTG9hZEZpbmlzaGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6
OnVybCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRVcmwpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlldzo6cHJlZmVycmVkV2lkdGgpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViVmlldzo6c2V0UHJlZmVycmVkV2lkdGgpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
Vmlldzo6cHJlZmVycmVkSGVpZ2h0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNl
dFByZWZlcnJlZEhlaWdodCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpldmFsdWF0
ZUphdmFTY3JpcHQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cHJvcGFnYXRlRm9j
dXNUb1dlYlBhZ2UpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6dXBkYXRlRGVjbGFy
YXRpdmVXZWJWaWV3U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojppbml0aWFs
TGF5b3V0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVwZGF0ZUNvbnRlbnRzU2l6
ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6amF2YVNjcmlwdFdpbmRvd09iamVjdHMpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cW1sQXR0YWNoZWRQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjp1cGRhdGVXaW5kb3dPYmplY3RzKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnJlbmRlcmluZ0VuYWJsZWQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UmVuZGVyaW5nRW5hYmxlZCk6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJWaWV3OjpzY2VuZU1vdXNlRXZlbnRUb01vdXNlRXZlbnQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlldzo6c2NlbmVIb3Zlck1vdmVFdmVudFRvTW91c2VFdmVudCk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojptb3VzZURvdWJsZUNsaWNrRXZlbnQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6aGV1cmlzdGljWm9vbSk6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJWaWV3OjpwcmVzc0dyYWJUaW1lKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXc6OnNldFByZXNzR3JhYlRpbWUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6
bW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNlUmVs
ZWFzZUV2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnRpbWVyRXZlbnQpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6bW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlldzo6aG92ZXJNb3ZlRXZlbnQpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViVmlldzo6c2NlbmVFdmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpi
YWNrQWN0aW9uKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmZvcndhcmRBY3Rpb24p
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cmVsb2FkQWN0aW9uKToKKyAgICAgICAg
KFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnN0b3BBY3Rpb24pOgorICAgICAgICAoUURlY2xhcmF0aXZl
V2ViVmlldzo6dGl0bGUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6aWNvbik6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRab29tRmFjdG9yKToKKyAgICAgICAgKFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6Onpvb21GYWN0b3IpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
Vmlldzo6c2V0U3RhdHVzVGV4dCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojp3aW5k
b3dPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnN0YXR1c1Rl
eHQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cGFnZSk6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJWaWV3OjpzZXR0aW5nc09iamVjdCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJWaWV3OjpzZXRQYWdlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmxvYWQpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6aHRtbCk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJWaWV3OjpzZXRIdG1sKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldENv
bnRlbnQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6aGlzdG9yeSk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXR0aW5ncyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJWaWV3OjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6bmV3
V2luZG93Q29tcG9uZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldE5ld1dp
bmRvd0NvbXBvbmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpuZXdXaW5kb3dQ
YXJlbnQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0TmV3V2luZG93UGFyZW50
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmNvbnRlbnRzU2l6ZSk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpjb250ZW50c1NjYWxlKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
Vmlldzo6ZWxlbWVudEFyZWFBdCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpRRGVj
bGFyYXRpdmVXZWJQYWdlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlBhZ2U6On5RRGVjbGFy
YXRpdmVXZWJQYWdlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmphdmFTY3JpcHRD
b25zb2xlTWVzc2FnZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpjaG9vc2VGaWxl
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmphdmFTY3JpcHRBbGVydCk6CisgICAg
ICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlBhZ2U6OnZpZXdJdGVtKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmNy
ZWF0ZVdpbmRvdyk6CisgICAgICAgICogZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19w
Lmg6IEFkZGVkLgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6KToKKyAgICAgICAgKFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OmlzQ29tcG9uZW50Q29tcGxldGVQdWJsaWMpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkOjpRRGVjbGFyYXRpdmVXZWJWaWV3QXR0YWNoZWQp
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkOjp3aW5kb3dPYmplY3ROYW1l
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hlZDo6c2V0V2luZG93T2JqZWN0
TmFtZSk6CisgICAgICAgICogZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19wX3AuaDog
QWRkZWQuCisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6UURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnN0YW5kYXJkRm9u
dEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0U3RhbmRhcmRG
b250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpmaXhlZEZvbnRG
YW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldEZpeGVkRm9udEZh
bWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkp
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNhbnNTZXJpZkZvbnRGYW1pbHkp
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldFNhbnNTZXJpZkZvbnRGYW1p
bHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OmN1cnNpdmVGb250RmFtaWx5
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRDdXJzaXZlRm9udEZhbWls
eSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6ZmFudGFzeUZvbnRGYW1pbHkp
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjptaW5pbXVtRm9udFNpemUpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldE1pbmltdW1Gb250U2l6ZSk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6bWluaW11bUxvZ2ljYWxGb250U2l6ZSk6
CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0TWluaW11bUxvZ2ljYWxGb250
U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6ZGVmYXVsdEZvbnRTaXpl
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXREZWZhdWx0Rm9udFNpemUp
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OmRlZmF1bHRGaXhlZEZvbnRTaXpl
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXREZWZhdWx0Rml4ZWRGb250
U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6YXV0b0xvYWRJbWFnZXMp
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldEF1dG9Mb2FkSW1hZ2VzKToK
KyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpqYXZhc2NyaXB0RW5hYmxlZCk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0SmF2YXNjcmlwdEVuYWJsZWQpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OmphdmFFbmFibGVkKToKKyAgICAgICAg
KFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRKYXZhRW5hYmxlZCk6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJTZXR0aW5nczo6cGx1Z2luc0VuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViU2V0dGluZ3M6OnNldFBsdWdpbnNFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlNldHRpbmdzOjpwcml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlNldHRpbmdzOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKFFE
ZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpqYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MpOgorICAgICAg
ICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldEphdmFzY3JpcHRDYW5PcGVuV2luZG93cyk6
CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6amF2YXNjcmlwdENhbkFjY2Vzc0Ns
aXBib2FyZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0SmF2YXNjcmlw
dENhbkFjY2Vzc0NsaXBib2FyZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6
ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJT
ZXR0aW5nczo6bGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbik6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6c2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbik6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6em9vbVRleHRPbmx5KToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlNldHRpbmdzOjpzZXRab29tVGV4dE9ubHkpOgorICAgICAgICAoUURlY2xhcmF0aXZl
V2ViU2V0dGluZ3M6OnByaW50RWxlbWVudEJhY2tncm91bmRzKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlNldHRpbmdzOjpzZXRQcmludEVsZW1lbnRCYWNrZ3JvdW5kcyk6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6b2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldE9mZmxpbmVTdG9yYWdlRGF0YWJh
c2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpvZmZsaW5lV2Vi
QXBwbGljYXRpb25DYWNoZUVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGlu
Z3M6OnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCk6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJTZXR0aW5nczo6bG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAg
ICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJs
ZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OmxvY2FsQ29udGVudENhbkFj
Y2Vzc1JlbW90ZVVybHMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldExv
Y2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3Ft
bGRpcjogQWRkZWQuCisKIDIwMTAtMDYtMDIgIFRhc3VrdSBTdXp1a2kgIDx0YXN1a3Uuc3V6dWtp
QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaGluaWNoaXJvIEhhbWFqaS4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9kZWNsYXJhdGl2ZS5wcm8gYi9XZWJLaXQv
cXQvZGVjbGFyYXRpdmUvZGVjbGFyYXRpdmUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmU2NjZkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvZGVjbGFyYXRpdmUucHJvCkBAIC0wLDAgKzEsNTkgQEAKK1RBUkdFVCAgPSBxbWx3ZWJraXRw
bHVnaW4KK1RBUkdFVFBBVEggPSBvcmcvd2Via2l0CisKK1RFTVBMQVRFID0gbGliCitDT05GSUcg
Kz0gcXQgcGx1Z2luCisKK3dpbjMyfG1hYzohd2luY2UqOiF3aW4zMi1tc3ZjOiFtYWN4LXhjb2Rl
OkNPTkZJRyArPSBkZWJ1Z19hbmRfcmVsZWFzZQorCitRTUxESVJGSUxFID0gJCR7X1BST19GSUxF
X1BXRF99L3FtbGRpcgorY29weTJidWlsZC5pbnB1dCA9IFFNTERJUkZJTEUKK0NPTkZJRyhRVERJ
Ul9idWlsZCkgeworICAgIGNvcHkyYnVpbGQub3V0cHV0ID0gJCRRVF9CVUlMRF9UUkVFL2ltcG9y
dHMvJCRUQVJHRVRQQVRIL3FtbGRpcgorfSBlbHNlIHsKKyAgICBjb3B5MmJ1aWxkLm91dHB1dCA9
ICQkT1VUUFVUX0RJUi9pbXBvcnRzLyQkVEFSR0VUUEFUSC9xbWxkaXIKK30KKyFjb250YWlucyhU
RU1QTEFURV9QUkVGSVgsIHZjKTpjb3B5MmJ1aWxkLnZhcmlhYmxlX291dCA9IFBSRV9UQVJHRVRE
RVBTCitjb3B5MmJ1aWxkLmNvbW1hbmRzID0gJCRRTUFLRV9DT1BZICR7UU1BS0VfRklMRV9JTn0g
JHtRTUFLRV9GSUxFX09VVH0KK2NvcHkyYnVpbGQubmFtZSA9IENPUFkgJHtRTUFLRV9GSUxFX0lO
fQorY29weTJidWlsZC5DT05GSUcgKz0gbm9fbGluaworUU1BS0VfRVhUUkFfQ09NUElMRVJTICs9
IGNvcHkyYnVpbGQKKworVEFSR0VUID0gJCRxdExpYnJhcnlUYXJnZXQoJCRUQVJHRVQpCitjb250
YWlucyhRVF9DT05GSUcsIHJlZHVjZV9leHBvcnRzKTpDT05GSUcgKz0gaGlkZV9zeW1ib2xzCisK
K3dpbmNlKjpMSUJTICs9ICQkUU1BS0VfTElCU19HVUkKKworc3ltYmlhbjogeworICAgIFRBUkdF
VC5FUE9DQUxMT1dETExEQVRBPTEKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSA9IEFsbCAtVGNiCisg
ICAgbG9hZChhcm1jY193YXJuaW5ncykKK30KKworUVQgKz0gZGVjbGFyYXRpdmUKKworU09VUkNF
UyArPSBxZGVjbGFyYXRpdmV3ZWJ2aWV3LmNwcCBwbHVnaW4uY3BwCitIRUFERVJTICs9IHFkZWNs
YXJhdGl2ZXdlYnZpZXdfcC5oIFwKKyAgICBxZGVjbGFyYXRpdmV3ZWJ2aWV3X3BfcC5oCisKK0NP
TkZJRyhRVERJUl9idWlsZCkgeworICAgIERFU1RESVIgPSAkJFFUX0JVSUxEX1RSRUUvaW1wb3J0
cy8kJFRBUkdFVFBBVEgKK30gZWxzZSB7CisgICAgREVTVERJUiA9ICQkT1VUUFVUX0RJUi9pbXBv
cnRzLyQkVEFSR0VUUEFUSAorfQordGFyZ2V0LnBhdGggPSAkJFtRVF9JTlNUQUxMX0lNUE9SVFNd
LyQkVEFSR0VUUEFUSAorCitxbWxkaXIuZmlsZXMgKz0gJCRQV0QvcW1sZGlyCitxbWxkaXIucGF0
aCArPSAgJCRbUVRfSU5TVEFMTF9JTVBPUlRTXS8kJFRBUkdFVFBBVEgKKworc3ltYmlhbjp7Cisg
ICAgbG9hZChkYXRhX2NhZ2luZ19wYXRocykKKyAgICBpbmNsdWRlKCQkUVRfU09VUkNFX1RSRUUv
ZGVtb3Mvc3ltYmlhbnBrZ3J1bGVzLnByaSkKKworICAgIGltcG9ydEZpbGVzLnNvdXJjZXMgPSBx
bWx3ZWJraXRwbHVnaW4uZGxsIHFtbGRpcgorICAgIGltcG9ydEZpbGVzLnBhdGggPSAkJFFUX0lN
UE9SVFNfQkFTRV9ESVIvJCRUQVJHRVRQQVRICisKKyAgICBERVBMT1lNRU5UID0gaW1wb3J0Rmls
ZXMKK30KKworSU5TVEFMTFMgKz0gdGFyZ2V0IHFtbGRpcgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0
L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTMyYzk1Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdlYnZpZXdfcC5o
IgorI2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9wLmgiCisKKyNpbmNsdWRlIDxRdERl
Y2xhcmF0aXZlL3FkZWNsYXJhdGl2ZS5oPgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xh
cmF0aXZlZXh0ZW5zaW9ucGx1Z2luLmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorCitjbGFzcyBX
ZWJLaXRRbWxQbHVnaW4gOiBwdWJsaWMgUURlY2xhcmF0aXZlRXh0ZW5zaW9uUGx1Z2luIHsKKyAg
ICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclR5cGVzKGNvbnN0
IGNoYXIgKnVyaSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9
PSBRTGF0aW4xU3RyaW5nKCJvcmcud2Via2l0IikpOworICAgICAgICBxbWxSZWdpc3RlclR5cGU8
UURlY2xhcmF0aXZlV2ViU2V0dGluZ3M+KCk7CisgICAgICAgIHFtbFJlZ2lzdGVyVHlwZTxRRGVj
bGFyYXRpdmVXZWJWaWV3Pih1cmksIDEsIDAsICJXZWJWaWV3Iik7CisgICAgfQorfTsKKworUVRf
RU5EX05BTUVTUEFDRQorCisjaW5jbHVkZSAicGx1Z2luLm1vYyIKKworUV9FWFBPUlRfUExVR0lO
MihxbWx3ZWJraXRwbHVnaW4sIFFUX1BSRVBFTkRfTkFNRVNQQUNFKFdlYktpdFFtbFBsdWdpbikp
OworCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmll
dy5jcHAgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlldy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5NzQyZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmV3ZWJ2aWV3LmNwcApAQCAtMCww
ICsxLDExODYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKworI2luY2x1ZGUgInFkZWNsYXJhdGl2
ZXdlYnZpZXdfcC5oIgorI2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9wLmgiCisKKyNp
bmNsdWRlIDxRdENvcmUvUUJhc2ljVGltZXI+CisjaW5jbHVkZSA8UXRDb3JlL1FEZWJ1Zz4KKyNp
bmNsdWRlIDxRdENvcmUvUUV2ZW50PgorI2luY2x1ZGUgPFF0Q29yZS9RRmlsZT4KKyNpbmNsdWRl
IDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUNvbnRleHQ+CisjaW5jbHVkZSA8UXREZWNsYXJh
dGl2ZS9RRGVjbGFyYXRpdmVFbmdpbmU+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFy
YXRpdmUuaD4KKyNpbmNsdWRlIDxRdEd1aS9RQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UXRHdWkv
UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50PgorI2luY2x1ZGUgPFF0R3VpL1FLZXlFdmVudD4KKyNp
bmNsdWRlIDxRdEd1aS9RTW91c2VFdmVudD4KKyNpbmNsdWRlIDxRdEd1aS9RUGVuPgorI2luY2x1
ZGUgPFF0V2ViS2l0L1FXZWJFbGVtZW50PgorI2luY2x1ZGUgPFF0V2ViS2l0L1FXZWJGcmFtZT4K
KyNpbmNsdWRlIDxRdFdlYktpdC9RV2ViUGFnZT4KKyNpbmNsdWRlIDxRdFdlYktpdC9RV2ViU2V0
dGluZ3M+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorCitzdGF0aWMgY29uc3QgaW50IE1BWF9ET1VC
TEVDTElDS19USU1FID0gNTAwOyAvLyBYWFggbmVlZCBiZXR0ZXIgZ2VzdHVyZSBzeXN0ZW0KKwor
Y2xhc3MgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGUgeworcHVibGljOgorICAgIFFEZWNsYXJh
dGl2ZVdlYlZpZXdQcml2YXRlKFFEZWNsYXJhdGl2ZVdlYlZpZXcqIHFxKQorICAgICAgOiBxKHFx
KSwgcGFnZSgwKSwgcHJlZmVycmVkd2lkdGgoMCksIHByZWZlcnJlZGhlaWdodCgwKSwKKyAgICAg
ICAgICAgIHByb2dyZXNzKDEuMCksIHN0YXR1cyhRRGVjbGFyYXRpdmVXZWJWaWV3OjpOdWxsKSwg
cGVuZGluZyhQZW5kaW5nTm9uZSksCisgICAgICAgICAgICBuZXdXaW5kb3dDb21wb25lbnQoMCks
IG5ld1dpbmRvd1BhcmVudCgwKSwKKyAgICAgICAgICAgIHByZXNzVGltZSg0MDApLAorICAgICAg
ICAgICAgcmVuZGVyaW5nKHRydWUpCisgICAgeworICAgICAgICBRT2JqZWN0Ojpjb25uZWN0KHEs
IFNJR05BTChmb2N1c0NoYW5nZWQoYm9vbCkpLCBxLCBTTE9UKHByb3BhZ2F0ZUZvY3VzVG9XZWJQ
YWdlKGJvb2wpKSk7CisgICAgfQorCisgICAgUURlY2xhcmF0aXZlV2ViVmlldyogcTsKKworICAg
IFFVcmwgdXJsOyAvLyBwYWdlIHVybCBtaWdodCBiZSBkaWZmZXJlbnQgaWYgaXQgaGFzIG5vdCBs
b2FkZWQgeWV0CisgICAgUVdlYlBhZ2UqIHBhZ2U7CisgICAgUUdyYXBoaWNzV2ViVmlldyogdmll
dzsKKworICAgIGludCBwcmVmZXJyZWR3aWR0aCwgcHJlZmVycmVkaGVpZ2h0OworICAgIHFyZWFs
IHByb2dyZXNzOworICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OlN0YXR1cyBzdGF0dXM7CisgICAg
UVN0cmluZyBzdGF0dXNUZXh0OworICAgIGVudW0geyBQZW5kaW5nTm9uZSwgUGVuZGluZ1VybCwg
UGVuZGluZ0h0bWwsIFBlbmRpbmdDb250ZW50IH0gcGVuZGluZzsKKyAgICBRVXJsIHBlbmRpbmdV
cmw7CisgICAgUVN0cmluZyBwZW5kaW5nU3RyaW5nOworICAgIFFCeXRlQXJyYXkgcGVuZGluZ0Rh
dGE7CisgICAgbXV0YWJsZSBRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBR
RGVjbGFyYXRpdmVDb21wb25lbnQqIG5ld1dpbmRvd0NvbXBvbmVudDsKKyAgICBRRGVjbGFyYXRp
dmVJdGVtKiBuZXdXaW5kb3dQYXJlbnQ7CisKKyAgICBRQmFzaWNUaW1lciBwcmVzc1RpbWVyOwor
ICAgIFFQb2ludCBwcmVzc1BvaW50OworICAgIGludCBwcmVzc1RpbWU7IC8vIG1pbGxpc2Vjb25k
cyBiZWZvcmUgaXQncyBhICJob2xkIgorCisgICAgc3RhdGljIHZvaWQgd2luZG93T2JqZWN0c0Fw
cGVuZChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gKnByb3AsIFFPYmplY3QgKm8p
CisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZSAq
Pihwcm9wLT5kYXRhKS0+d2luZG93T2JqZWN0cy5hcHBlbmQobyk7CisgICAgICAgIHN0YXRpY19j
YXN0PFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlICo+KHByb3AtPmRhdGEpLT51cGRhdGVXaW5k
b3dPYmplY3RzKCk7CisgICAgfQorCisgICAgdm9pZCB1cGRhdGVXaW5kb3dPYmplY3RzKCk7Cisg
ICAgUU9iamVjdExpc3Qgd2luZG93T2JqZWN0czsKKworICAgIGJvb2wgcmVuZGVyaW5nOworfTsK
KworLyohCisgICAgXHFtbGNsYXNzIFdlYlZpZXcgUURlY2xhcmF0aXZlV2ViVmlldworICBcc2lu
Y2UgNC43CisgICAgXGJyaWVmIFRoZSBXZWJWaWV3IGl0ZW0gYWxsb3dzIHlvdSB0byBhZGQgd2Vi
IGNvbnRlbnQgdG8gYSBjYW52YXMuCisgICAgXGluaGVyaXRzIEl0ZW0KKworICAgIEEgV2ViVmll
dyByZW5kZXJzIHdlYiBjb250ZW50IGJhc2VkIG9uIGEgVVJMLgorCisgICAgVGhpcyB0eXBlIGlz
IG1hZGUgYXZhaWxhYmxlIGJ5IGltcG9ydGluZyB0aGUgXGMgb3JnLndlYmtpdCBtb2R1bGU6CisK
KyAgICBcYm9sZHtpbXBvcnQgb3JnLndlYmtpdCAxLjB9CisKKyAgICBJZiB0aGUgd2lkdGggYW5k
IGhlaWdodCBvZiB0aGUgaXRlbSBpcyBub3Qgc2V0LCB0aGV5IHdpbGwKKyAgICBkeW5hbWljYWxs
eSBhZGp1c3QgdG8gYSBzaXplIGFwcHJvcHJpYXRlIGZvciB0aGUgY29udGVudC4KKyAgICBUaGlz
IHdpZHRoIG1heSBiZSBsYXJnZSBmb3IgdHlwaWNhbCBvbmxpbmUgd2ViIHBhZ2VzLgorCisgICAg
SWYgdGhlIHdpZHRoIG9yIGhlaWdodCBpcyBleHBsaWN0bHkgc2V0LCB0aGUgcmVuZGVyZWQgd2Vi
c2l0ZQorICAgIHdpbGwgYmUgY2xpcHBlZCwgbm90IHNjYWxlZCwgdG8gZml0IGludG8gdGhlIHNl
dCBkaW1lbnNpb25zLgorCisgICAgSWYgdGhlIHByZWZlcnJlZFdpZHRoIGlzIHNldCwgdGhlIHdp
ZHRoIHdpbGwgYmUgdGhpcyBhbW91bnQgb3IgbGFyZ2VyLAorICAgIHVzdWFsbHkgbGF5aW5nIG91
dCB0aGUgd2ViIGNvbnRlbnQgdG8gZml0IHRoZSBwcmVmZXJyZWRXaWR0aC4KKworICAgIFxxbWwK
KyAgICBpbXBvcnQgb3JnLndlYmtpdCAxLjAKKworICAgIFdlYlZpZXcgeworICAgICAgICB1cmw6
ICJodHRwOi8vd3d3Lm5va2lhLmNvbSIKKyAgICAgICAgcHJlZmVycmVkV2lkdGg6IDQ5MAorICAg
ICAgICBwcmVmZXJyZWRIZWlnaHQ6IDQwMAorICAgICAgICBzY2FsZTogMC41CisgICAgICAgIHNt
b290aDogZmFsc2UKKyAgICAgICAgc21vb3RoQ2FjaGU6IHRydWUKKyAgICB9CisgICAgXGVuZHFt
bAorCisgICAgXGltYWdlIHdlYnZpZXcucG5nCisKKyAgICBUaGUgaXRlbSBpbmNsdWRlcyBubyBz
Y3JvbGxpbmcsIHNjYWxpbmcsCisgICAgdG9vbGJhcnMsIGV0Yy4sIHRob3NlIG11c3QgYmUgaW1w
bGVtZW50ZWQgYXJvdW5kIFdlYlZpZXcuIFNlZSB0aGUgV2ViQnJvd3NlciBleGFtcGxlCisgICAg
Zm9yIGEgZGVtb25zdHJhdGlvbiBvZiB0aGlzLgorCisgICAgV2hlbiB0aGlzIGl0ZW0gaGFzIGtl
eWJvYXJkIGZvY3VzLCBhbGwga2V5Ym9hcmQgaW5wdXQgd2lsbCBiZSBzZW50IGRpcmVjdGx5IHRv
IHRoZQorICAgIHdlYiBwYWdlIHdpdGhpbi4KKyovCisKKy8qIQorICAgIFxpbnRlcm5hbAorICAg
IFxjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3CisgICAgXGJyaWVmIFRoZSBRRGVjbGFyYXRpdmVX
ZWJWaWV3IGNsYXNzIGFsbG93cyB5b3UgdG8gYWRkIHdlYiBjb250ZW50IHRvIGEgUURlY2xhcmF0
aXZlVmlldy4KKworICAgIEEgV2ViVmlldyByZW5kZXJzIHdlYiBjb250ZW50IGJhc2Ugb24gYSBV
UkwuCisKKyAgICBcaW1hZ2Ugd2Vidmlldy5wbmcKKworICAgIFRoZSBpdGVtIGluY2x1ZGVzIG5v
IHNjcm9sbGluZywgc2NhbGluZywKKyAgICB0b29sYmFycywgZXRjLiwgdGhvc2UgbXVzdCBiZSBp
bXBsZW1lbnRlZCBhcm91bmQgV2ViVmlldy4gU2VlIHRoZSBXZWJCcm93c2VyIGV4YW1wbGUKKyAg
ICBmb3IgYSBkZW1vbnN0cmF0aW9uIG9mIHRoaXMuCisKKyAgICBBIFFEZWNsYXJhdGl2ZVdlYlZp
ZXcgb2JqZWN0IGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gUW1sIHVzaW5nIHRoZSB0YWcgXGwgV2Vi
Vmlldy4KKyovCisKK1FEZWNsYXJhdGl2ZVdlYlZpZXc6OlFEZWNsYXJhdGl2ZVdlYlZpZXcoUURl
Y2xhcmF0aXZlSXRlbSAqcGFyZW50KSA6IFFEZWNsYXJhdGl2ZUl0ZW0ocGFyZW50KQoreworICAg
IGluaXQoKTsKK30KKworUURlY2xhcmF0aXZlV2ViVmlldzo6flFEZWNsYXJhdGl2ZVdlYlZpZXco
KQoreworICAgIGRlbGV0ZSBkLT5wYWdlOworICAgIGRlbGV0ZSBkOworfQorCit2b2lkIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OmluaXQoKQoreworICAgIGQgPSBuZXcgUURlY2xhcmF0aXZlV2ViVmll
d1ByaXZhdGUodGhpcyk7CisKKyAgICBRV2ViU2V0dGluZ3M6OmVuYWJsZVBlcnNpc3RlbnRTdG9y
YWdlKCk7CisKKyAgICBzZXRBY2NlcHRIb3ZlckV2ZW50cyh0cnVlKTsKKyAgICBzZXRBY2NlcHRl
ZE1vdXNlQnV0dG9ucyhRdDo6TGVmdEJ1dHRvbik7CisgICAgc2V0RmxhZyhRR3JhcGhpY3NJdGVt
OjpJdGVtSGFzTm9Db250ZW50cywgdHJ1ZSk7CisgICAgc2V0Q2xpcCh0cnVlKTsKKworICAgIGQt
PnBhZ2UgPSAwOworICAgIGQtPnZpZXcgPSBuZXcgUUdyYXBoaWNzV2ViVmlldyh0aGlzKTsKKyAg
ICBkLT52aWV3LT5zZXRSZXNpemVzVG9Db250ZW50cyh0cnVlKTsKKyAgICBkLT52aWV3LT5zZXRG
bGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1TdGFja3NCZWhpbmRQYXJlbnQsIHRydWUpOworICAgIGNv
bm5lY3QoZC0+dmlldywgU0lHTkFMKGdlb21ldHJ5Q2hhbmdlZCgpKSwgdGhpcywgU0xPVCh1cGRh
dGVEZWNsYXJhdGl2ZVdlYlZpZXdTaXplKCkpKTsKKyAgICBjb25uZWN0KGQtPnZpZXcsIFNJR05B
TChzY2FsZUNoYW5nZWQoKSksIHRoaXMsIFNJR05BTChjb250ZW50c1NjYWxlQ2hhbmdlZCgpKSk7
Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6Y29tcG9uZW50Q29tcGxldGUoKQorewor
ICAgIFFEZWNsYXJhdGl2ZUl0ZW06OmNvbXBvbmVudENvbXBsZXRlKCk7CisgICAgc3dpdGNoIChk
LT5wZW5kaW5nKSB7CisgICAgY2FzZSBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6UGVuZGlu
Z1VybDoKKyAgICAgICAgc2V0VXJsKGQtPnBlbmRpbmdVcmwpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjpQZW5kaW5nSHRtbDoKKyAgICAgICAg
c2V0SHRtbChkLT5wZW5kaW5nU3RyaW5nLCBkLT5wZW5kaW5nVXJsKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6UGVuZGluZ0NvbnRlbnQ6Cisg
ICAgICAgIHNldENvbnRlbnQoZC0+cGVuZGluZ0RhdGEsIGQtPnBlbmRpbmdTdHJpbmcsIGQtPnBl
bmRpbmdVcmwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZC0+cGVuZGluZyA9IFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjpQZW5k
aW5nTm9uZTsKKyAgICBkLT51cGRhdGVXaW5kb3dPYmplY3RzKCk7Cit9CisKK1FEZWNsYXJhdGl2
ZVdlYlZpZXc6OlN0YXR1cyBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXMoKSBjb25zdAorewor
ICAgIHJldHVybiBkLT5zdGF0dXM7Cit9CisKKworLyohCisgICAgXHFtbHByb3BlcnR5IHJlYWwg
V2ViVmlldzo6cHJvZ3Jlc3MKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBwcm9ncmVzcyBv
ZiBsb2FkaW5nIHRoZSBjdXJyZW50IFVSTCwgZnJvbSAwIHRvIDEuCisKKyAgICBJZiB5b3UganVz
dCB3YW50IHRvIGtub3cgd2hlbiBwcm9ncmVzcyBnZXRzIHRvIDEsIHVzZQorICAgIFdlYlZpZXc6
Om9uTG9hZEZpbmlzaGVkKCkgb3IgV2ViVmlldzo6b25Mb2FkRmFpbGVkKCkgaW5zdGVhZC4KKyov
CitxcmVhbCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojpwcm9ncmVzcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGQtPnByb2dyZXNzOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmRvTG9hZFN0
YXJ0ZWQoKQoreworCisgICAgaWYgKCFkLT51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIGQtPnN0
YXR1cyA9IExvYWRpbmc7CisgICAgICAgIGVtaXQgc3RhdHVzQ2hhbmdlZChkLT5zdGF0dXMpOwor
ICAgIH0KKyAgICBlbWl0IGxvYWRTdGFydGVkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2Vi
Vmlldzo6ZG9Mb2FkUHJvZ3Jlc3MoaW50IHApCit7CisgICAgaWYgKGQtPnByb2dyZXNzID09IHAg
LyAxMDAuMCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByb2dyZXNzID0gcCAvIDEwMC4wOwor
ICAgIGVtaXQgcHJvZ3Jlc3NDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmll
dzo6cGFnZVVybENoYW5nZWQoKQoreworICAgIHVwZGF0ZUNvbnRlbnRzU2l6ZSgpOworCisgICAg
aWYgKChkLT51cmwuaXNFbXB0eSgpICYmIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpICE9IFFV
cmwoUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkpCisgICAgICAgIHx8IChkLT51cmwgIT0g
cGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCkgJiYgIXBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgp
LmlzRW1wdHkoKSkpCisgICAgeworICAgICAgICBkLT51cmwgPSBwYWdlKCktPm1haW5GcmFtZSgp
LT51cmwoKTsKKyAgICAgICAgaWYgKGQtPnVybCA9PSBRVXJsKFFMYXRpbjFTdHJpbmcoImFib3V0
OmJsYW5rIikpKQorICAgICAgICAgICAgZC0+dXJsID0gUVVybCgpOworICAgICAgICBlbWl0IHVy
bENoYW5nZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2Fk
RmluaXNoZWQoYm9vbCBvaykKK3sKKworICAgIGlmICh0aXRsZSgpLmlzRW1wdHkoKSkKKyAgICAg
ICAgcGFnZVVybENoYW5nZWQoKTsgLy8gWFhYIGJ1ZyAyMzI1NTYgLSBwYWdlcyB3aXRoIG5vIHRp
dGxlIG5ldmVyIGdldCB1cmxDaGFuZ2VkKCkKKworICAgIGlmIChvaykgeworICAgICAgICBkLT5z
dGF0dXMgPSBkLT51cmwuaXNFbXB0eSgpID8gTnVsbCA6IFJlYWR5OworICAgICAgICBlbWl0IGxv
YWRGaW5pc2hlZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGQtPnN0YXR1cyA9IEVycm9yOwor
ICAgICAgICBlbWl0IGxvYWRGYWlsZWQoKTsKKyAgICB9CisgICAgZW1pdCBzdGF0dXNDaGFuZ2Vk
KGQtPnN0YXR1cyk7Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSB1cmwgV2ViVmlldzo6dXJs
CisgICAgVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgVVJMIHRvIHRoZSBwYWdlIGRpc3BsYXllZCBp
biB0aGlzIGl0ZW0uIEl0IGNhbiBiZSBzZXQsCisgICAgYnV0IGFsc28gY2FuIGNoYW5nZSBzcG9u
dGFuZW91c2x5IChlZy4gYmVjYXVzZSBvZiBuZXR3b3JrIHJlZGlyZWN0aW9uKS4KKworICAgIElm
IHRoZSB1cmwgaXMgZW1wdHksIHRoZSBwYWdlIGlzIGJsYW5rLgorCisgICAgVGhlIHVybCBpcyBh
bHdheXMgYWJzb2x1dGUgKFFNTCB3aWxsIHJlc29sdmUgcmVsYXRpdmUgVVJMIHN0cmluZ3MgaW4g
dGhlIGNvbnRleHQKKyAgICBvZiB0aGUgY29udGFpbmluZyBRTUwgZG9jdW1lbnQpLgorKi8KK1FV
cmwgUURlY2xhcmF0aXZlV2ViVmlldzo6dXJsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+dXJs
OworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFVybChjb25zdCBRVXJsICZ1cmwp
Cit7CisgICAgaWYgKHVybCA9PSBkLT51cmwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChp
c0NvbXBvbmVudENvbXBsZXRlKCkpIHsKKyAgICAgICAgZC0+dXJsID0gdXJsOworICAgICAgICB1
cGRhdGVDb250ZW50c1NpemUoKTsKKyAgICAgICAgUVVybCBzZXR1cmwgPSB1cmw7CisgICAgICAg
IGlmIChzZXR1cmwuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2V0dXJsID0gUVVybChRTGF0aW4x
U3RyaW5nKCJhYm91dDpibGFuayIpKTsKKworICAgICAgICBRX0FTU0VSVCghc2V0dXJsLmlzUmVs
YXRpdmUoKSk7CisKKyAgICAgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+bG9hZChzZXR1cmwpOwor
CisgICAgICAgIGVtaXQgdXJsQ2hhbmdlZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGQtPnBl
bmRpbmcgPSBkLT5QZW5kaW5nVXJsOworICAgICAgICBkLT5wZW5kaW5nVXJsID0gdXJsOworICAg
IH0KK30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGludCBXZWJWaWV3OjpwcmVmZXJyZWRXaWR0
aAorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIGlkZWFsIHdpZHRoIGZvciBkaXNwbGF5aW5n
IHRoZSBjdXJyZW50IFVSTC4KKyovCitpbnQgUURlY2xhcmF0aXZlV2ViVmlldzo6cHJlZmVycmVk
V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBkLT5wcmVmZXJyZWR3aWR0aDsKK30KKwordm9p
ZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRXaWR0aChpbnQgaXcpCit7CisgICAg
aWYgKGQtPnByZWZlcnJlZHdpZHRoID09IGl3KQorICAgICAgICByZXR1cm47CisgICAgZC0+cHJl
ZmVycmVkd2lkdGggPSBpdzsKKyAgICB1cGRhdGVDb250ZW50c1NpemUoKTsKKyAgICBlbWl0IHBy
ZWZlcnJlZFdpZHRoQ2hhbmdlZCgpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgaW50IFdl
YlZpZXc6OnByZWZlcnJlZEhlaWdodAorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIGlkZWFs
IGhlaWdodCBmb3IgZGlzcGxheWluZyB0aGUgY3VycmVudCBVUkwuCisgICAgVGhpcyBvbmx5IGFm
ZmVjdHMgdGhlIGFyZWEgem9vbWVkIGJ5IGhldXJpc3RpY1pvb20oKS4KKyovCitpbnQgUURlY2xh
cmF0aXZlV2ViVmlldzo6cHJlZmVycmVkSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+
cHJlZmVycmVkaGVpZ2h0OworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFByZWZl
cnJlZEhlaWdodChpbnQgaWgpCit7CisgICAgaWYgKGQtPnByZWZlcnJlZGhlaWdodCA9PSBpaCkK
KyAgICAgICAgcmV0dXJuOworICAgIGQtPnByZWZlcnJlZGhlaWdodCA9IGloOworICAgIHVwZGF0
ZUNvbnRlbnRzU2l6ZSgpOworICAgIGVtaXQgcHJlZmVycmVkSGVpZ2h0Q2hhbmdlZCgpOworfQor
CisvKiEKKyAgICBccW1sbWV0aG9kIGJvb2wgV2ViVmlldzo6ZXZhbHVhdGVKYXZhU2NyaXB0KHN0
cmluZykKKworICAgIEV2YWx1YXRlcyB0aGUgXGEgc2NyaXB0U291cmNlIEphdmFTY3JpcHQgaW5z
aWRlIHRoZSBjb250ZXh0IG9mIHRoZQorICAgIG1haW4gd2ViIGZyYW1lLCBhbmQgcmV0dXJucyB0
aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGV4ZWN1dGVkIHN0YXRlbWVudC4KKworICAgIE5vdGUgdGhh
dCB0aGlzIEphdmFTY3JpcHQgZG9lcyBcZSBub3QgaGF2ZSBhbnkgYWNjZXNzIHRvIFFNTCBvYmpl
Y3RzCisgICAgZXhjZXB0IGFzIG1hZGUgYXZhaWxhYmxlIGFzIHdpbmRvd09iamVjdHMuCisqLwor
UVZhcmlhbnQgUURlY2xhcmF0aXZlV2ViVmlldzo6ZXZhbHVhdGVKYXZhU2NyaXB0KGNvbnN0IFFT
dHJpbmcgJnNjcmlwdFNvdXJjZSkKK3sKKyAgICByZXR1cm4gdGhpcy0+cGFnZSgpLT5tYWluRnJh
bWUoKS0+ZXZhbHVhdGVKYXZhU2NyaXB0KHNjcmlwdFNvdXJjZSk7Cit9CisKK3ZvaWQgUURlY2xh
cmF0aXZlV2ViVmlldzo6cHJvcGFnYXRlRm9jdXNUb1dlYlBhZ2UoYm9vbCBoYXNGb2N1cykKK3sK
KyAgICBRRm9jdXNFdmVudCBlKGhhc0ZvY3VzID8gUUV2ZW50OjpGb2N1c0luIDogUUV2ZW50OjpG
b2N1c091dCk7CisgICAgcGFnZSgpLT5ldmVudCgmZSk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZl
V2ViVmlldzo6dXBkYXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpCit7CisgICAgUVNpemVGIHNp
emUgPSBkLT52aWV3LT5nZW9tZXRyeSgpLnNpemUoKSAqIGNvbnRlbnRzU2NhbGUoKTsKKyAgICBz
ZXRJbXBsaWNpdFdpZHRoKHNpemUud2lkdGgoKSk7CisgICAgc2V0SW1wbGljaXRIZWlnaHQoc2l6
ZS5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6aW5pdGlhbExheW91
dCgpCit7CisgICAgLy8gbm90aGluZyB1c2VmdWwgdG8gZG8gYXQgdGhpcyBwb2ludAorfQorCit2
b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVwZGF0ZUNvbnRlbnRzU2l6ZSgpCit7CisgICAgaWYg
KGQtPnBhZ2UpCisgICAgICAgIGQtPnBhZ2UtPnNldFByZWZlcnJlZENvbnRlbnRzU2l6ZShRU2l6
ZSgKKyAgICAgICAgICAgIGQtPnByZWZlcnJlZHdpZHRoPjAgPyBkLT5wcmVmZXJyZWR3aWR0aCA6
IHdpZHRoKCksCisgICAgICAgICAgICBkLT5wcmVmZXJyZWRoZWlnaHQ+MCA/IGQtPnByZWZlcnJl
ZGhlaWdodCA6IGhlaWdodCgpKSk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6Z2Vv
bWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiAmbmV3R2VvbWV0cnksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRUmVjdEYgJm9sZEdlb21ldHJ5KQoreworICAgIGlmIChu
ZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpICYmIGQtPnBhZ2UpIHsKKyAg
ICAgICAgUVNpemUgY3MgPSBkLT5wYWdlLT5wcmVmZXJyZWRDb250ZW50c1NpemUoKTsKKyAgICAg
ICAgaWYgKHdpZHRoVmFsaWQoKSkKKyAgICAgICAgICAgIGNzLnNldFdpZHRoKHdpZHRoKCkpOwor
ICAgICAgICBpZiAoaGVpZ2h0VmFsaWQoKSkKKyAgICAgICAgICAgIGNzLnNldEhlaWdodChoZWln
aHQoKSk7CisgICAgICAgIGlmIChjcyAhPSBkLT5wYWdlLT5wcmVmZXJyZWRDb250ZW50c1NpemUo
KSkKKyAgICAgICAgICAgIGQtPnBhZ2UtPnNldFByZWZlcnJlZENvbnRlbnRzU2l6ZShjcyk7Cisg
ICAgfQorICAgIFFEZWNsYXJhdGl2ZUl0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwg
b2xkR2VvbWV0cnkpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgbGlzdDxvYmplY3Q+IFdl
YlZpZXc6OmphdmFTY3JpcHRXaW5kb3dPYmplY3RzCisKKyAgICBBIGxpc3Qgb2YgUU1MIG9iamVj
dHMgdG8gZXhwb3NlIHRvIHRoZSB3ZWIgcGFnZS4KKworICAgIEVhY2ggb2JqZWN0IHdpbGwgYmUg
YWRkZWQgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgd2ViIGZyYW1lJ3Mgd2luZG93IG9iamVjdC4gIFRo
ZQorICAgIHByb3BlcnR5IG5hbWUgaXMgY29udHJvbGxlZCBieSB0aGUgdmFsdWUgb2YgXGMgV2Vi
Vmlldy53aW5kb3dPYmplY3ROYW1lIAorICAgIGF0dGFjaGVkIHByb3BlcnR5LgorCisgICAgRXhw
b3NpbmcgUU1MIG9iamVjdHMgdG8gYSB3ZWIgcGFnZSBhbGxvd3MgSmF2YVNjcmlwdCBleGVjdXRp
bmcgaW4gdGhlIHdlYiAKKyAgICBwYWdlIGl0c2VsZiB0byBjb21tdW5pY2F0ZSB3aXRoIFFNTCwg
YnkgcmVhZGluZyBhbmQgd3JpdGluZyBwcm9wZXJ0aWVzIGFuZAorICAgIGJ5IGNhbGxpbmcgbWV0
aG9kcyBvZiB0aGUgZXhwb3NlZCBRTUwgb2JqZWN0cy4KKworICAgIFRoaXMgZXhhbXBsZSBzaG93
cyBob3cgdG8gY2FsbCBpbnRvIGEgUU1MIG1ldGhvZCB1c2luZyBhIHdpbmRvdyBvYmplY3QuCisK
KyAgICBccW1sCisgICAgV2ViVmlldyB7CisgICAgICAgIGphdmFTY3JpcHRXaW5kb3dPYmplY3Rz
OiBRdE9iamVjdCB7CisgICAgICAgICAgICBXZWJWaWV3LndpbmRvd09iamVjdE5hbWU6ICJxbWwi
CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHFtbENhbGwoKSB7CisgICAgICAgICAgICAgICAgY29u
c29sZS5sb2coIlRoaXMgY2FsbCBpcyBpbiBRTUwhIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBodG1sOiAiPHNjcmlwdD5jb25zb2xlLmxvZyhcIlRoaXMgaXMgaW4gV2Vi
S2l0IVwiKTsgd2luZG93LnFtbC5xbWxDYWxsKCk7PC9zY3JpcHQ+IgorICAgIH0KKyAgICBcZW5k
cW1sCisKKyAgICBUaGUgb3V0cHV0IG9mIHRoZSBleGFtcGxlIHdpbGwgYmU6CisgICAgXGNvZGUK
KyAgICBUaGlzIGlzIGluIFdlYktpdCEKKyAgICBUaGlzIGNhbGwgaXMgaW4gUU1MIQorICAgIFxl
bmRjb2RlCisKKyAgICBJZiBKYXZhc2NyaXB0IGlzIG5vdCBlbmFibGVkIGZvciB0aGUgcGFnZSwg
dGhlbiB0aGlzIHByb3BlcnR5IGRvZXMgbm90aGluZy4KKyovCitRRGVjbGFyYXRpdmVMaXN0UHJv
cGVydHk8UU9iamVjdD4gUURlY2xhcmF0aXZlV2ViVmlldzo6amF2YVNjcmlwdFdpbmRvd09iamVj
dHMoKQoreworICAgIHJldHVybiBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4odGhp
cywgZCwgJlFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjp3aW5kb3dPYmplY3RzQXBwZW5kKTsK
K30KKworUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkKiBRRGVjbGFyYXRpdmVXZWJWaWV3Ojpx
bWxBdHRhY2hlZFByb3BlcnRpZXMoUU9iamVjdCogbykKK3sKKyAgICByZXR1cm4gbmV3IFFEZWNs
YXJhdGl2ZVdlYlZpZXdBdHRhY2hlZChvKTsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3
UHJpdmF0ZTo6dXBkYXRlV2luZG93T2JqZWN0cygpCit7CisgICAgaWYgKCFxLT5pc0NvbXBvbmVu
dENvbXBsZXRlUHVibGljKCkgfHwgIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAo
aW50IGlpID0gMDsgaWkgPCB3aW5kb3dPYmplY3RzLmNvdW50KCk7ICsraWkpIHsKKyAgICAgICAg
UU9iamVjdCogb2JqZWN0ID0gd2luZG93T2JqZWN0cy5hdChpaSk7CisgICAgICAgIFFEZWNsYXJh
dGl2ZVdlYlZpZXdBdHRhY2hlZCogYXR0YWNoZWQgPSBzdGF0aWNfY2FzdDxRRGVjbGFyYXRpdmVX
ZWJWaWV3QXR0YWNoZWQgKj4ocW1sQXR0YWNoZWRQcm9wZXJ0aWVzT2JqZWN0PFFEZWNsYXJhdGl2
ZVdlYlZpZXc+KG9iamVjdCkpOworICAgICAgICBpZiAoYXR0YWNoZWQgJiYgIWF0dGFjaGVkLT53
aW5kb3dPYmplY3ROYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1l
KCktPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdChhdHRhY2hlZC0+d2luZG93T2JqZWN0TmFt
ZSgpLCBvYmplY3QpOworICAgIH0KK30KKworYm9vbCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpyZW5k
ZXJpbmdFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cmVuZGVyaW5nOworfQorCit2
b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFJlbmRlcmluZ0VuYWJsZWQoYm9vbCBlbmFibGVk
KQoreworICAgIGlmIChkLT5yZW5kZXJpbmcgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGQtPnJlbmRlcmluZyA9IGVuYWJsZWQ7CisgICAgZW1pdCByZW5kZXJpbmdFbmFibGVkQ2hh
bmdlZCgpOworCisgICAgZC0+dmlldy0+c2V0VGlsZWRCYWNraW5nU3RvcmVGcm96ZW4oIWVuYWJs
ZWQpOworfQorCitRTW91c2VFdmVudCogUURlY2xhcmF0aXZlV2ViVmlldzo6c2NlbmVNb3VzZUV2
ZW50VG9Nb3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZSkKK3sKKyAgICBRRXZl
bnQ6OlR5cGUgdDsKKyAgICBzd2l0Y2ggKGUtPnR5cGUoKSkgeworICAgIGRlZmF1bHQ6CisgICAg
Y2FzZSBRRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZVByZXNzOgorICAgICAgICB0ID0gUUV2ZW50
OjpNb3VzZUJ1dHRvblByZXNzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFFdmVudDo6R3Jh
cGhpY3NTY2VuZU1vdXNlUmVsZWFzZToKKyAgICAgICAgdCA9IFFFdmVudDo6TW91c2VCdXR0b25S
ZWxlYXNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1v
dXNlTW92ZToKKyAgICAgICAgdCA9IFFFdmVudDo6TW91c2VNb3ZlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFFHcmFwaGljc1NjZW5lRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZURvdWJsZUNs
aWNrOgorICAgICAgICB0ID0gUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBRTW91c2VFdmVudCogbWUgPSBuZXcgUU1vdXNlRXZlbnQodCwg
KGUtPnBvcygpIC8gY29udGVudHNTY2FsZSgpKS50b1BvaW50KCksIGUtPmJ1dHRvbigpLCBlLT5i
dXR0b25zKCksIDApOworICAgIHJldHVybiBtZTsKK30KKworUU1vdXNlRXZlbnQqIFFEZWNsYXJh
dGl2ZVdlYlZpZXc6OnNjZW5lSG92ZXJNb3ZlRXZlbnRUb01vdXNlRXZlbnQoUUdyYXBoaWNzU2Nl
bmVIb3ZlckV2ZW50KiBlKQoreworICAgIFFFdmVudDo6VHlwZSB0ID0gUUV2ZW50OjpNb3VzZU1v
dmU7CisKKyAgICBRTW91c2VFdmVudCogbWUgPSBuZXcgUU1vdXNlRXZlbnQodCwgKGUtPnBvcygp
IC8gY29udGVudHNTY2FsZSgpKS50b1BvaW50KCksIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9u
LCAwKTsKKworICAgIHJldHVybiBtZTsKK30KKworLyohCisgICAgXHFtbHNpZ25hbCBXZWJWaWV3
OjpvbkRvdWJsZUNsaWNrKGNsaWNreCxjbGlja3kpCisKKyAgICBUaGUgV2ViVmlldyBkb2VzIG5v
dCBwYXNzIGRvdWJsZS1jbGljayBldmVudHMgdG8gdGhlIHdlYiBlbmdpbmUsIGJ1dCByYXRoZXIK
KyAgICBlbWl0cyB0aGlzIHNpZ25hbHMuCisqLworCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6
Om1vdXNlRG91YmxlQ2xpY2tFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KQor
eworICAgIFFNb3VzZUV2ZW50KiBtZSA9IHNjZW5lTW91c2VFdmVudFRvTW91c2VFdmVudChldmVu
dCk7CisgICAgZW1pdCBkb3VibGVDbGljayhtZS0+eCgpLCBtZS0+eSgpKTsKKyAgICBkZWxldGUg
bWU7Cit9CisKKy8qIQorICAgIFxxbWxtZXRob2QgYm9vbCBXZWJWaWV3OjpoZXVyaXN0aWNab29t
KGNsaWNrWCxjbGlja1ksbWF4em9vbSkKKworICAgIEZpbmRzIGEgem9vbSB0aGF0OgorICAgIFxs
aXN0CisgICAgXGkgc2hvd3MgYSB3aG9sZSBpdGVtCisgICAgXGkgaW5jbHVkZXMgKFxhIGNsaWNr
WCwgXGEgY2xpY2tZKQorICAgIFxpIGZpdHMgaW50byB0aGUgcHJlZmVycmVkV2lkdGggYW5kIHBy
ZWZlcnJlZEhlaWdodAorICAgIFxpIHpvb21zIGJ5IG5vIG1vcmUgdGhhbiBcYSBtYXh6b29tCisg
ICAgXGkgaXMgbW9yZSB0aGFuIDEwJSBhYm92ZSB0aGUgY3VycmVudCB6b29tCisgICAgXGVuZGxp
c3QKKworICAgIElmIHN1Y2ggYSB6b29tIGV4aXN0cywgZW1pdHMgem9vbVRvKHpvb20sY2VudGVy
WCxjZW50ZXJZKSBhbmQgcmV0dXJucyB0cnVlOyBvdGhlcndpc2UsCisgICAgbm8gc2lnbmFsIGlz
IGVtaXR0ZWQgYW5kIHJldHVybnMgZmFsc2UuCisqLworYm9vbCBRRGVjbGFyYXRpdmVXZWJWaWV3
OjpoZXVyaXN0aWNab29tKGludCBjbGlja1gsIGludCBjbGlja1ksIHFyZWFsIG1heHpvb20pCit7
CisgICAgaWYgKGNvbnRlbnRzU2NhbGUoKSA+PSBtYXh6b29tIC8gem9vbUZhY3RvcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcXJlYWwgb3pmID0gY29udGVudHNTY2FsZSgpOworICAg
IFFSZWN0IHNob3dhcmVhID0gZWxlbWVudEFyZWFBdChjbGlja1gsIGNsaWNrWSwgZC0+cHJlZmVy
cmVkd2lkdGggLyBtYXh6b29tLCBkLT5wcmVmZXJyZWRoZWlnaHQgLyBtYXh6b29tKTsKKyAgICBx
cmVhbCB6ID0gcU1pbihxcmVhbChkLT5wcmVmZXJyZWR3aWR0aCkgLyBzaG93YXJlYS53aWR0aCgp
LCBxcmVhbChkLT5wcmVmZXJyZWRoZWlnaHQpIC8gc2hvd2FyZWEuaGVpZ2h0KCkpOworICAgIGlm
ICh6ID4gbWF4em9vbSAvIHpvb21GYWN0b3IoKSkKKyAgICAgICAgeiA9IG1heHpvb20gLyB6b29t
RmFjdG9yKCk7CisgICAgaWYgKHogLyBvemYgPiAxLjIpIHsKKyAgICAgICAgUVJlY3RGIHIoc2hv
d2FyZWEubGVmdCgpKnosIHNob3dhcmVhLnRvcCgpICogeiwgc2hvd2FyZWEud2lkdGgoKSAqIHos
IHNob3dhcmVhLmhlaWdodCgpICogeik7CisgICAgICAgIGVtaXQgem9vbVRvKHosIHIueCgpICsg
ci53aWR0aCgpIC8gMiwgci55KCkgKyByLmhlaWdodCgpIC8gMik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0
eSBpbnQgV2ViVmlldzo6cHJlc3NHcmFiVGltZQorCisgICAgVGhlIG51bWJlciBvZiBtaWxsaXNl
Y29uZHMgdGhlIHVzZXIgbXVzdCBwcmVzcyBiZWZvcmUgdGhlIFdlYlZpZXcKKyAgICBzdGFydHMg
cGFzc2luZyBtb3ZlIGV2ZW50cyB0aHJvdWdoIHRvIHRoZSB3ZWIgZW5naW5lIChyYXRoZXIgdGhh
bgorICAgIGxldHRpbmcgb3RoZXIgUU1MIGVsZW1lbnRzIHN1Y2ggYXMgYSBGbGlja2FibGUgdGFr
ZSB0aGVtKS4KKworICAgIERlZmF1bHRzIHRvIDQwMG1zLiBTZXQgdG8gMCB0byBhbHdheXMgZ3Jh
YiBhbmQgcGFzcyBtb3ZlIGV2ZW50cyB0bworICAgIHRoZSB3ZWIgZW5naW5lLgorKi8KK2ludCBR
RGVjbGFyYXRpdmVXZWJWaWV3OjpwcmVzc0dyYWJUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZC0+cHJlc3NUaW1lOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFByZXNzR3Jh
YlRpbWUoaW50IG1zKQoreworICAgIGlmIChkLT5wcmVzc1RpbWUgPT0gbXMpIAorICAgICAgICBy
ZXR1cm47CisgICAgZC0+cHJlc3NUaW1lID0gbXM7CisgICAgZW1pdCBwcmVzc0dyYWJUaW1lQ2hh
bmdlZCgpOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNlUHJlc3NFdmVudChR
R3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHNldEZvY3VzKHRydWUpOwor
ICAgIFFNb3VzZUV2ZW50KiBtZSA9IHNjZW5lTW91c2VFdmVudFRvTW91c2VFdmVudChldmVudCk7
CisKKyAgICBkLT5wcmVzc1BvaW50ID0gbWUtPnBvcygpOworICAgIGlmIChkLT5wcmVzc1RpbWUp
IHsKKyAgICAgICAgZC0+cHJlc3NUaW1lci5zdGFydChkLT5wcmVzc1RpbWUsIHRoaXMpOworICAg
ICAgICBzZXRLZWVwTW91c2VHcmFiKGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBncmFi
TW91c2UoKTsKKyAgICAgICAgc2V0S2VlcE1vdXNlR3JhYih0cnVlKTsKKyAgICB9CisKKyAgICBw
YWdlKCktPmV2ZW50KG1lKTsKKyAgICBldmVudC0+c2V0QWNjZXB0ZWQoCisvKgorICBJdCBpcyBu
b3QgY29ycmVjdCB0byBzZW5kIHRoZSBwcmVzcyBldmVudCB1cHdhcmRzLCBpZiBpdCBpcyBub3Qg
YWNjZXB0ZWQgYnkgV2ViS2l0CisgIGUuZy4gcHVzaCBidXR0b24gZG9lcyBub3Qgd29yaywgaWYg
ZG9uZSBzbyBhcyBRR3JhcGhpY3NTY2VuZSB3aWxsIG5vdCBzZW5kIHRoZSByZWxlYXNlIGV2ZW50
IGF0IGFsbCB0byBXZWJLaXQKKyAgTWlnaHQgYmUgYSBidWcgaW4gV2ViS2l0LCB0aG91Z2gKKyAg
Ki8KKyNpZiAxIC8vIFFUX1ZFUlNJT04gPD0gMHgwNDA1MDAgLy8gWFhYIHNlZSBidWcgMjMwODM1
CisgICAgICAgIHRydWUKKyNlbHNlCisgICAgICAgIG1lLT5pc0FjY2VwdGVkKCkKKyNlbmRpZgor
ICAgICAgICApOworICAgIGRlbGV0ZSBtZTsKKyAgICBpZiAoIWV2ZW50LT5pc0FjY2VwdGVkKCkp
CisgICAgICAgIFFEZWNsYXJhdGl2ZUl0ZW06Om1vdXNlUHJlc3NFdmVudChldmVudCk7Cit9CisK
K3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6bW91c2VSZWxlYXNlRXZlbnQoUUdyYXBoaWNzU2Nl
bmVNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBRTW91c2VFdmVudCogbWUgPSBzY2VuZU1vdXNl
RXZlbnRUb01vdXNlRXZlbnQoZXZlbnQpOworICAgIHBhZ2UoKS0+ZXZlbnQobWUpOworICAgIGQt
PnByZXNzVGltZXIuc3RvcCgpOworICAgIGV2ZW50LT5zZXRBY2NlcHRlZCgKKy8qCisgIEl0IGlz
IG5vdCBjb3JyZWN0IHRvIHNlbmQgdGhlIHByZXNzIGV2ZW50IHVwd2FyZHMsIGlmIGl0IGlzIG5v
dCBhY2NlcHRlZCBieSBXZWJLaXQKKyAgZS5nLiBwdXNoIGJ1dHRvbiBkb2VzIG5vdCB3b3JrLCBp
ZiBkb25lIHNvIGFzIFFHcmFwaGljc1NjZW5lIHdpbGwgbm90IHNlbmQgYWxsIHRoZSBldmVudHMg
dG8gV2ViS2l0CisgICovCisjaWYgMSAvLyBRVF9WRVJTSU9OIDw9IDB4MDQwNTAwIC8vIFhYWCBz
ZWUgYnVnIDIzMDgzNQorICAgICAgICB0cnVlCisjZWxzZQorICAgICAgICBtZS0+aXNBY2NlcHRl
ZCgpCisjZW5kaWYKKyAgICAgICAgKTsKKyAgICBkZWxldGUgbWU7CisgICAgaWYgKCFldmVudC0+
aXNBY2NlcHRlZCgpKQorICAgICAgICBRRGVjbGFyYXRpdmVJdGVtOjptb3VzZVJlbGVhc2VFdmVu
dChldmVudCk7CisgICAgc2V0S2VlcE1vdXNlR3JhYihmYWxzZSk7CisgICAgdW5ncmFiTW91c2Uo
KTsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50
KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnRpbWVySWQoKSA9PSBkLT5wcmVzc1RpbWVyLnRp
bWVySWQoKSkgeworICAgICAgICBkLT5wcmVzc1RpbWVyLnN0b3AoKTsKKyAgICAgICAgZ3JhYk1v
dXNlKCk7CisgICAgICAgIHNldEtlZXBNb3VzZUdyYWIodHJ1ZSk7CisgICAgfQorfQorCit2b2lk
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VF
dmVudCogZXZlbnQpCit7CisgICAgUU1vdXNlRXZlbnQqIG1lID0gc2NlbmVNb3VzZUV2ZW50VG9N
b3VzZUV2ZW50KGV2ZW50KTsKKyAgICBpZiAoZC0+cHJlc3NUaW1lci5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIGlmICgobWUtPnBvcygpIC0gZC0+cHJlc3NQb2ludCkubWFuaGF0dGFuTGVuZ3RoKCkg
PiBRQXBwbGljYXRpb246OnN0YXJ0RHJhZ0Rpc3RhbmNlKCkpCisgICAgICAgICAgICBkLT5wcmVz
c1RpbWVyLnN0b3AoKTsKKyAgICB9CisgICAgaWYgKGtlZXBNb3VzZUdyYWIoKSkgeworICAgICAg
ICBwYWdlKCktPmV2ZW50KG1lKTsKKyAgICAgICAgZXZlbnQtPnNldEFjY2VwdGVkKAorLyoKKyAg
SXQgaXMgbm90IGNvcnJlY3QgdG8gc2VuZCB0aGUgcHJlc3MgZXZlbnQgdXB3YXJkcywgaWYgaXQg
aXMgbm90IGFjY2VwdGVkIGJ5IFdlYktpdAorICBlLmcuIHB1c2ggYnV0dG9uIGRvZXMgbm90IHdv
cmssIGlmIGRvbmUgc28gYXMgUUdyYXBoaWNzU2NlbmUgd2lsbCBub3Qgc2VuZCB0aGUgcmVsZWFz
ZSBldmVudCBhdCBhbGwgdG8gV2ViS2l0CisgIE1pZ2h0IGJlIGEgYnVnIGluIFdlYktpdCwgdGhv
dWdoCisgICovCisjaWYgMSAvLyBRVF9WRVJTSU9OIDw9IDB4MDQwNTAwIC8vIFhYWCBzZWUgYnVn
IDIzMDgzNQorICAgICAgICAgICAgdHJ1ZQorI2Vsc2UKKyAgICAgICAgICAgIG1lLT5pc0FjY2Vw
dGVkKCkKKyNlbmRpZgorICAgICAgICApOworICAgIH0KKyAgICBkZWxldGUgbWU7CisgICAgaWYg
KCFldmVudC0+aXNBY2NlcHRlZCgpKQorICAgICAgICBRRGVjbGFyYXRpdmVJdGVtOjptb3VzZU1v
dmVFdmVudChldmVudCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6aG92ZXJNb3Zl
RXZlbnQoUUdyYXBoaWNzU2NlbmVIb3ZlckV2ZW50KiBldmVudCkKK3sKKyAgICBRTW91c2VFdmVu
dCogbWUgPSBzY2VuZUhvdmVyTW92ZUV2ZW50VG9Nb3VzZUV2ZW50KGV2ZW50KTsKKyAgICBwYWdl
KCktPmV2ZW50KG1lKTsKKyAgICBldmVudC0+c2V0QWNjZXB0ZWQoCisjaWYgUVRfVkVSU0lPTiA8
PSAweDA0MDUwMCAvLyBYWFggc2VlIGJ1ZyAyMzA4MzUKKyAgICAgICAgdHJ1ZQorI2Vsc2UKKyAg
ICAgICAgbWUtPmlzQWNjZXB0ZWQoKQorI2VuZGlmCisgICAgKTsKKyAgICBkZWxldGUgbWU7Cisg
ICAgaWYgKCFldmVudC0+aXNBY2NlcHRlZCgpKQorICAgICAgICBRRGVjbGFyYXRpdmVJdGVtOjpo
b3Zlck1vdmVFdmVudChldmVudCk7Cit9CisKK2Jvb2wgUURlY2xhcmF0aXZlV2ViVmlldzo6c2Nl
bmVFdmVudChRRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVu
dDo6S2V5UHJlc3MgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OktleVJlbGVhc2UpCisgICAg
ICAgIC8vIEtleSBldmVudHMgZ28gdG8gdGhlIHBhZ2UKKyAgICAgICAgcmV0dXJuIHBhZ2UoKS0+
ZXZlbnQoZXZlbnQpOworICAgIHJldHVybiBRRGVjbGFyYXRpdmVJdGVtOjpzY2VuZUV2ZW50KGV2
ZW50KTsKK30KKworCisvKiEKKyAgICBccW1scHJvcGVydHkgYWN0aW9uIFdlYlZpZXc6OmJhY2sK
KyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBhY3Rpb24gZm9yIGNhdXNpbmcgdGhlIHByZXZp
b3VzIFVSTCBpbiB0aGUgaGlzdG9yeSB0byBiZSBkaXNwbGF5ZWQuCisqLworUUFjdGlvbiogUURl
Y2xhcmF0aXZlV2ViVmlldzo6YmFja0FjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2Uo
KS0+YWN0aW9uKFFXZWJQYWdlOjpCYWNrKTsKK30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGFj
dGlvbiBXZWJWaWV3Ojpmb3J3YXJkCisgICAgVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgYWN0aW9u
IGZvciBjYXVzaW5nIHRoZSBuZXh0IFVSTCBpbiB0aGUgaGlzdG9yeSB0byBiZSBkaXNwbGF5ZWQu
CisqLworUUFjdGlvbiogUURlY2xhcmF0aXZlV2ViVmlldzo6Zm9yd2FyZEFjdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpGb3J3YXJkKTsKK30KKwor
LyohCisgICAgXHFtbHByb3BlcnR5IGFjdGlvbiBXZWJWaWV3OjpyZWxvYWQKKyAgICBUaGlzIHBy
b3BlcnR5IGhvbGRzIHRoZSBhY3Rpb24gZm9yIHJlbG9hZGluZyB3aXRoIHRoZSBjdXJyZW50IFVS
TAorKi8KK1FBY3Rpb24qIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnJlbG9hZEFjdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpSZWxvYWQpOworfQorCisv
KiEKKyAgICBccW1scHJvcGVydHkgYWN0aW9uIFdlYlZpZXc6OnN0b3AKKyAgICBUaGlzIHByb3Bl
cnR5IGhvbGRzIHRoZSBhY3Rpb24gZm9yIHN0b3BwaW5nIGxvYWRpbmcgd2l0aCB0aGUgY3VycmVu
dCBVUkwKKyovCitRQWN0aW9uKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdG9wQWN0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlN0b3ApOworfQorCisv
KiEKKyAgICBccW1scHJvcGVydHkgcmVhbCBXZWJWaWV3Ojp0aXRsZQorICAgIFRoaXMgcHJvcGVy
dHkgaG9sZHMgdGhlIHRpdGxlIG9mIHRoZSB3ZWIgcGFnZSBjdXJyZW50bHkgdmlld2VkCisKKyAg
ICBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIGFuIGVtcHR5IHN0cmluZy4KKyov
CitRU3RyaW5nIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcGFnZSgpLT5tYWluRnJhbWUoKS0+dGl0bGUoKTsKK30KKworCisKKy8qIQorICAgIFxxbWxw
cm9wZXJ0eSBwaXhtYXAgV2ViVmlldzo6aWNvbgorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhl
IGljb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWIgcGFnZSBjdXJyZW50bHkgdmlld2VkCisqLwor
UVBpeG1hcCBRRGVjbGFyYXRpdmVXZWJWaWV3OjppY29uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
cGFnZSgpLT5tYWluRnJhbWUoKS0+aWNvbigpLnBpeG1hcChRU2l6ZSgyNTYsIDI1NikpOworfQor
CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSByZWFsIFdlYlZpZXc6Onpvb21GYWN0b3IKKyAgICBU
aGlzIHByb3BlcnR5IGhvbGRzIHRoZSBtdWx0aXBsaWVyIHVzZWQgdG8gc2NhbGUgdGhlIGNvbnRl
bnRzIG9mIGEgV2ViIHBhZ2UuCisqLwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRab29t
RmFjdG9yKHFyZWFsIGZhY3RvcikKK3sKKyAgICBpZiAoZmFjdG9yID09IHBhZ2UoKS0+bWFpbkZy
YW1lKCktPnpvb21GYWN0b3IoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZSgpLT5tYWlu
RnJhbWUoKS0+c2V0Wm9vbUZhY3RvcihmYWN0b3IpOworICAgIHVwZGF0ZUNvbnRlbnRzU2l6ZSgp
OworCisgICAgZW1pdCB6b29tRmFjdG9yQ2hhbmdlZCgpOworfQorCitxcmVhbCBRRGVjbGFyYXRp
dmVXZWJWaWV3Ojp6b29tRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5tYWlu
RnJhbWUoKS0+em9vbUZhY3RvcigpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgc3RyaW5n
IFdlYlZpZXc6OnN0YXR1c1RleHQKKworICAgIFRoaXMgcHJvcGVydHkgaXMgdGhlIGN1cnJlbnQg
c3RhdHVzIHN1Z2dlc3RlZCBieSB0aGUgY3VycmVudCB3ZWIgcGFnZS4gSW4gYSB3ZWIgYnJvd3Nl
ciwKKyAgICBzdWNoIHN0YXR1cyBpcyBvZnRlbiBzaG93biBpbiBzb21lIGtpbmQgb2Ygc3RhdHVz
IGJhci4KKyovCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFN0YXR1c1RleHQoY29uc3Qg
UVN0cmluZyYgcykKK3sKKyAgICBkLT5zdGF0dXNUZXh0ID0gczsKKyAgICBlbWl0IHN0YXR1c1Rl
eHRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6d2luZG93T2JqZWN0
Q2xlYXJlZCgpCit7CisgICAgZC0+dXBkYXRlV2luZG93T2JqZWN0cygpOworfQorCitRU3RyaW5n
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnN0YXR1c1RleHQoKSBjb25zdAoreworICAgIHJldHVybiBk
LT5zdGF0dXNUZXh0OworfQorCitRV2ViUGFnZSogUURlY2xhcmF0aXZlV2ViVmlldzo6cGFnZSgp
IGNvbnN0Cit7CisKKyAgICBpZiAoIWQtPnBhZ2UpIHsKKyAgICAgICAgUURlY2xhcmF0aXZlV2Vi
Vmlldyogc2VsZiA9IGNvbnN0X2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlldyo+KHRoaXMpOworICAg
ICAgICBRV2ViUGFnZSogd3AgPSBuZXcgUURlY2xhcmF0aXZlV2ViUGFnZShzZWxmKTsKKworICAg
ICAgICB3cC0+c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIocW1sRW5naW5lKHRoaXMpLT5uZXR3b3Jr
QWNjZXNzTWFuYWdlcigpKTsKKworICAgICAgICBzZWxmLT5zZXRQYWdlKHdwKTsKKworICAgICAg
ICByZXR1cm4gd3A7CisgICAgfQorCisgICAgcmV0dXJuIGQtPnBhZ2U7Cit9CisKKworLy8gVGhl
IFFPYmplY3QgaW50ZXJmYWNlIHRvIHNldHRpbmdzKCkuCisvKiEKKyAgICBccW1scHJvcGVydHkg
c3RyaW5nIFdlYlZpZXc6OnNldHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseQorICAgIFxxbWxwcm9w
ZXJ0eSBzdHJpbmcgV2ViVmlldzo6c2V0dGluZ3MuZml4ZWRGb250RmFtaWx5CisgICAgXHFtbHBy
b3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5zZXJpZkZvbnRGYW1pbHkKKyAgICBccW1s
cHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6OnNldHRpbmdzLnNhbnNTZXJpZkZvbnRGYW1pbHkKKyAg
ICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6OnNldHRpbmdzLmN1cnNpdmVGb250RmFtaWx5
CisgICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5mYW50YXN5Rm9udEZh
bWlseQorCisgICAgXHFtbHByb3BlcnR5IGludCBXZWJWaWV3OjpzZXR0aW5ncy5taW5pbXVtRm9u
dFNpemUKKyAgICBccW1scHJvcGVydHkgaW50IFdlYlZpZXc6OnNldHRpbmdzLm1pbmltdW1Mb2dp
Y2FsRm9udFNpemUKKyAgICBccW1scHJvcGVydHkgaW50IFdlYlZpZXc6OnNldHRpbmdzLmRlZmF1
bHRGb250U2l6ZQorICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmlldzo6c2V0dGluZ3MuZGVmYXVs
dEZpeGVkRm9udFNpemUKKworICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdz
LmF1dG9Mb2FkSW1hZ2VzCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3Mu
amF2YXNjcmlwdEVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5n
cy5qYXZhRW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnBs
dWdpbnNFbmFibGVkCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MucHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRp
bmdzLmphdmFzY3JpcHRDYW5PcGVuV2luZG93cworICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZp
ZXc6OnNldHRpbmdzLmphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQKKyAgICBccW1scHJvcGVy
dHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5kZXZlbG9wZXJFeHRyYXNFbmFibGVkCisgICAgXHFt
bHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MubGlua3NJbmNsdWRlZEluRm9jdXNDaGFp
bgorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnpvb21UZXh0T25seQor
ICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnByaW50RWxlbWVudEJhY2tn
cm91bmRzCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3Mub2ZmbGluZVN0
b3JhZ2VEYXRhYmFzZUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0
aW5ncy5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkg
Ym9vbCBXZWJWaWV3OjpzZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQKKyAgICBc
cW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5sb2NhbENvbnRlbnRDYW5BY2Nlc3NS
ZW1vdGVVcmxzCisKKyAgICBUaGVzZSBwcm9wZXJ0aWVzIGdpdmUgYWNjZXNzIHRvIHRoZSBzZXR0
aW5ncyBjb250cm9sbGluZyB0aGUgd2ViIHZpZXcuCisKKyAgICBTZWUgUVdlYlNldHRpbmdzIGZv
ciBkZXRhaWxzIG9mIHRoZXNlIHByb3BlcnRpZXMuCisKKyAgICBccW1sCisgICAgICAgIFdlYlZp
ZXcgeworICAgICAgICAgICAgc2V0dGluZ3MucGx1Z2luc0VuYWJsZWQ6IHRydWUKKyAgICAgICAg
ICAgIHNldHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseTogIkFyaWFsIgorICAgICAgICAgICAgLi4u
CisgICAgICAgIH0KKyAgICBcZW5kcW1sCisqLworUURlY2xhcmF0aXZlV2ViU2V0dGluZ3MqIFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OnNldHRpbmdzT2JqZWN0KCkgY29uc3QKK3sKKyAgICBkLT5zZXR0
aW5ncy5zID0gcGFnZSgpLT5zZXR0aW5ncygpOworICAgIHJldHVybiAmZC0+c2V0dGluZ3M7Cit9
CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UGFnZShRV2ViUGFnZSogcGFnZSkKK3sK
KyAgICBpZiAoZC0+cGFnZSA9PSBwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGQtPnBh
Z2UpIHsKKyAgICAgICAgaWYgKGQtPnBhZ2UtPnBhcmVudCgpID09IHRoaXMpCisgICAgICAgICAg
ICBkZWxldGUgZC0+cGFnZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZC0+cGFnZS0+ZGlz
Y29ubmVjdCh0aGlzKTsKKyAgICB9CisgICAgZC0+cGFnZSA9IHBhZ2U7CisgICAgdXBkYXRlQ29u
dGVudHNTaXplKCk7CisgICAgZC0+cGFnZS0+bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGlj
eShRdDo6SG9yaXpvbnRhbCwgUXQ6OlNjcm9sbEJhckFsd2F5c09mZik7CisgICAgZC0+cGFnZS0+
bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwsIFF0OjpTY3JvbGxC
YXJBbHdheXNPZmYpOworICAgIGNvbm5lY3QoZC0+cGFnZS0+bWFpbkZyYW1lKCksIFNJR05BTCh1
cmxDaGFuZ2VkKFFVcmwpKSwgdGhpcywgU0xPVChwYWdlVXJsQ2hhbmdlZCgpKSk7CisgICAgY29u
bmVjdChkLT5wYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSks
IHRoaXMsIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpKTsKKyAgICBjb25uZWN0KGQtPnBh
Z2UtPm1haW5GcmFtZSgpLCBTSUdOQUwodGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSwgdGhpcywgU0lH
TkFMKGljb25DaGFuZ2VkKCkpKTsKKyAgICBjb25uZWN0KGQtPnBhZ2UtPm1haW5GcmFtZSgpLCBT
SUdOQUwoaWNvbkNoYW5nZWQoKSksIHRoaXMsIFNJR05BTChpY29uQ2hhbmdlZCgpKSk7CisgICAg
Y29ubmVjdChkLT5wYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKGluaXRpYWxMYXlvdXRDb21wbGV0
ZWQoKSksIHRoaXMsIFNMT1QoaW5pdGlhbExheW91dCgpKSk7CisgICAgY29ubmVjdChkLT5wYWdl
LT5tYWluRnJhbWUoKSwgU0lHTkFMKGNvbnRlbnRzU2l6ZUNoYW5nZWQoUVNpemUpKSwgdGhpcywg
U0lHTkFMKGNvbnRlbnRzU2l6ZUNoYW5nZWQoUVNpemUpKSk7CisKKyAgICBjb25uZWN0KGQtPnBh
Z2UsIFNJR05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChkb0xvYWRTdGFydGVkKCkpKTsK
KyAgICBjb25uZWN0KGQtPnBhZ2UsIFNJR05BTChsb2FkUHJvZ3Jlc3MoaW50KSksIHRoaXMsIFNM
T1QoZG9Mb2FkUHJvZ3Jlc3MoaW50KSkpOworICAgIGNvbm5lY3QoZC0+cGFnZSwgU0lHTkFMKGxv
YWRGaW5pc2hlZChib29sKSksIHRoaXMsIFNMT1QoZG9Mb2FkRmluaXNoZWQoYm9vbCkpKTsKKyAg
ICBjb25uZWN0KGQtPnBhZ2UsIFNJR05BTChzdGF0dXNCYXJNZXNzYWdlKFFTdHJpbmcpKSwgdGhp
cywgU0xPVChzZXRTdGF0dXNUZXh0KFFTdHJpbmcpKSk7CisKKyAgICBjb25uZWN0KGQtPnBhZ2Ut
Pm1haW5GcmFtZSgpLCBTSUdOQUwoamF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKSksIHRo
aXMsIFNMT1Qod2luZG93T2JqZWN0Q2xlYXJlZCgpKSk7CisKKyAgICBkLT5wYWdlLT5zZXR0aW5n
cygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpUaWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQs
IHRydWUpOworCisgICAgZC0+dmlldy0+c2V0UGFnZShwYWdlKTsKK30KKworLyohCisgICAgXHFt
bHNpZ25hbCBXZWJWaWV3OjpvbkxvYWRTdGFydGVkKCkKKworICAgIFRoaXMgaGFuZGxlciBpcyBj
YWxsZWQgd2hlbiB0aGUgd2ViIGVuZ2luZSBiZWdpbnMgbG9hZGluZworICAgIGEgcGFnZS4gTGF0
ZXIsIFdlYlZpZXc6Om9uTG9hZEZpbmlzaGVkKCkgb3IgV2ViVmlldzo6b25Mb2FkRmFpbGVkKCkK
KyAgICB3aWxsIGJlIGVtaXR0ZWQuCisqLworCisvKiEKKyAgICBccW1sc2lnbmFsIFdlYlZpZXc6
Om9uTG9hZEZpbmlzaGVkKCkKKworICAgIFRoaXMgaGFuZGxlciBpcyBjYWxsZWQgd2hlbiB0aGUg
d2ViIGVuZ2luZSBcZSBzdWNjZXNzZnVsbHkKKyAgICBmaW5pc2hlcyBsb2FkaW5nIGEgcGFnZSwg
aW5jbHVkaW5nIGFueSBjb21wb25lbnQgY29udGVudAorICAgIChXZWJWaWV3OjpvbkxvYWRGYWls
ZWQoKSB3aWxsIGJlIGVtaXR0ZWQgb3RoZXJ3aXNlKS4KKworICAgIFxzYSBwcm9ncmVzcworKi8K
KworLyohCisgICAgXHFtbHNpZ25hbCBXZWJWaWV3OjpvbkxvYWRGYWlsZWQoKQorCisgICAgVGhp
cyBoYW5kbGVyIGlzIGNhbGxlZCB3aGVuIHRoZSB3ZWIgZW5naW5lIGZhaWxzIGxvYWRpbmcKKyAg
ICBhIHBhZ2Ugb3IgYW55IGNvbXBvbmVudCBjb250ZW50CisgICAgKFdlYlZpZXc6Om9uTG9hZEZp
bmlzaGVkKCkgd2lsbCBiZSBlbWl0dGVkIG9uIHN1Y2Nlc3MpLgorKi8KKwordm9pZCBRRGVjbGFy
YXRpdmVXZWJWaWV3Ojpsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwKKyAgICAg
ICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24sCisgICAgICAg
ICAgY29uc3QgUUJ5dGVBcnJheSAmYm9keSkKK3sKKyAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5s
b2FkKHJlcXVlc3QsIG9wZXJhdGlvbiwgYm9keSk7Cit9CisKK1FTdHJpbmcgUURlY2xhcmF0aXZl
V2ViVmlldzo6aHRtbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnRvSHRtbCgpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6Omh0
bWwKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIEhUTUwgdGV4dCBzZXQgZGlyZWN0bHkKKworICAg
IFRoZSBodG1sIHByb3BlcnR5IGNhbiBiZSBzZXQgYXMgYSBzdHJpbmcuCisKKyAgICBccW1sCisg
ICAgV2ViVmlldyB7CisgICAgICAgIGh0bWw6ICI8cD5UaGlzIGlzIDxiPkhUTUw8L2I+LiIKKyAg
ICB9CisgICAgXGVuZHFtbAorKi8KK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0SHRtbChj
b25zdCBRU3RyaW5nICZodG1sLCBjb25zdCBRVXJsICZiYXNlVXJsKQoreworICAgIHVwZGF0ZUNv
bnRlbnRzU2l6ZSgpOworICAgIGlmIChpc0NvbXBvbmVudENvbXBsZXRlKCkpCisgICAgICAgIHBh
Z2UoKS0+bWFpbkZyYW1lKCktPnNldEh0bWwoaHRtbCwgYmFzZVVybCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGQtPnBlbmRpbmcgPSBkLT5QZW5kaW5nSHRtbDsKKyAgICAgICAgZC0+cGVuZGluZ1Vy
bCA9IGJhc2VVcmw7CisgICAgICAgIGQtPnBlbmRpbmdTdHJpbmcgPSBodG1sOworICAgIH0KKyAg
ICBlbWl0IGh0bWxDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0
Q29udGVudChjb25zdCBRQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwg
Y29uc3QgUVVybCAmYmFzZVVybCkKK3sKKyAgICB1cGRhdGVDb250ZW50c1NpemUoKTsKKworICAg
IGlmIChpc0NvbXBvbmVudENvbXBsZXRlKCkpCisgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnNldENvbnRlbnQoZGF0YSwgbWltZVR5cGUsIHFtbENvbnRleHQodGhpcyktPnJlc29sdmVkVXJs
KGJhc2VVcmwpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZC0+cGVuZGluZyA9IGQtPlBlbmRpbmdD
b250ZW50OworICAgICAgICBkLT5wZW5kaW5nVXJsID0gYmFzZVVybDsKKyAgICAgICAgZC0+cGVu
ZGluZ1N0cmluZyA9IG1pbWVUeXBlOworICAgICAgICBkLT5wZW5kaW5nRGF0YSA9IGRhdGE7Cisg
ICAgfQorfQorCitRV2ViSGlzdG9yeSogUURlY2xhcmF0aXZlV2ViVmlldzo6aGlzdG9yeSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+aGlzdG9yeSgpOworfQorCitRV2ViU2V0dGluZ3Mq
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFn
ZSgpLT5zZXR0aW5ncygpOworfQorCitRRGVjbGFyYXRpdmVXZWJWaWV3KiBRRGVjbGFyYXRpdmVX
ZWJWaWV3OjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFFXZWJQYWdlOjpXZWJCcm93c2VyV2luZG93OiB7
CisgICAgICAgIGlmICghZC0+bmV3V2luZG93Q29tcG9uZW50ICYmIGQtPm5ld1dpbmRvd1BhcmVu
dCkKKyAgICAgICAgICAgIHFXYXJuaW5nKCJXZWJWaWV3OjpuZXdXaW5kb3dDb21wb25lbnQgbm90
IHNldCAtIFdlYlZpZXc6Om5ld1dpbmRvd1BhcmVudCBpZ25vcmVkIik7CisgICAgICAgIGVsc2Ug
aWYgKGQtPm5ld1dpbmRvd0NvbXBvbmVudCAmJiAhZC0+bmV3V2luZG93UGFyZW50KQorICAgICAg
ICAgICAgcVdhcm5pbmcoIldlYlZpZXc6Om5ld1dpbmRvd1BhcmVudCBub3Qgc2V0IC0gV2ViVmll
dzo6bmV3V2luZG93Q29tcG9uZW50IGlnbm9yZWQiKTsKKyAgICAgICAgZWxzZSBpZiAoZC0+bmV3
V2luZG93Q29tcG9uZW50ICYmIGQtPm5ld1dpbmRvd1BhcmVudCkgeworICAgICAgICAgICAgUURl
Y2xhcmF0aXZlV2ViVmlldyogd2VidmlldyA9IDA7CisgICAgICAgICAgICBRRGVjbGFyYXRpdmVD
b250ZXh0KiB3aW5kb3dDb250ZXh0ID0gbmV3IFFEZWNsYXJhdGl2ZUNvbnRleHQocW1sQ29udGV4
dCh0aGlzKSk7CisKKyAgICAgICAgICAgIFFPYmplY3QqIG5vYmogPSBkLT5uZXdXaW5kb3dDb21w
b25lbnQtPmNyZWF0ZSh3aW5kb3dDb250ZXh0KTsKKyAgICAgICAgICAgIGlmIChub2JqKSB7Cisg
ICAgICAgICAgICAgICAgd2luZG93Q29udGV4dC0+c2V0UGFyZW50KG5vYmopOworICAgICAgICAg
ICAgICAgIFFEZWNsYXJhdGl2ZUl0ZW0qIGl0ZW0gPSBxb2JqZWN0X2Nhc3Q8UURlY2xhcmF0aXZl
SXRlbSAqPihub2JqKTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBub2JqOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICB3ZWJ2aWV3ID0gaXRlbS0+ZmluZENoaWxkPFFEZWNsYXJhdGl2ZVdlYlZpZXcqPigp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIXdlYnZpZXcpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgaXRlbTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2JqLT5zZXRQYXJlbnQoZC0+bmV3V2luZG93UGFyZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFFHcmFwaGljc09iamVjdCo+KGl0ZW0pLT5z
ZXRQYXJlbnRJdGVtKGQtPm5ld1dpbmRvd1BhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGRlbGV0ZSB3aW5kb3dDb250ZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gd2VidmlldzsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIFFXZWJQ
YWdlOjpXZWJNb2RhbERpYWxvZzogeworICAgICAgICAvLyBOb3Qgc3VwcG9ydGVkCisgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGNvbXBvbmVu
dCBXZWJWaWV3OjpuZXdXaW5kb3dDb21wb25lbnQKKworICAgIFRoaXMgcHJvcGVydHkgaG9sZHMg
dGhlIGNvbXBvbmVudCB0byB1c2UgZm9yIG5ldyB3aW5kb3dzLgorICAgIFRoZSBjb21wb25lbnQg
bXVzdCBoYXZlIGEgV2ViVmlldyBzb21ld2hlcmUgaW4gaXRzIHN0cnVjdHVyZS4KKworICAgIFdo
ZW4gdGhlIHdlYiBlbmdpbmUgcmVxdWVzdHMgYSBuZXcgd2luZG93LCBpdCB3aWxsIGJlIGFuIGlu
c3RhbmNlIG9mCisgICAgdGhpcyBjb21wb25lbnQuCisKKyAgICBUaGUgcGFyZW50IG9mIHRoZSBu
ZXcgd2luZG93IGlzIHNldCBieSBuZXdXaW5kb3dQYXJlbnQuIEl0IG11c3QgYmUgc2V0LgorKi8K
K1FEZWNsYXJhdGl2ZUNvbXBvbmVudCogUURlY2xhcmF0aXZlV2ViVmlldzo6bmV3V2luZG93Q29t
cG9uZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bmV3V2luZG93Q29tcG9uZW50OworfQor
Cit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldE5ld1dpbmRvd0NvbXBvbmVudChRRGVjbGFy
YXRpdmVDb21wb25lbnQqIG5ld1dpbmRvdykKK3sKKyAgICBpZiAobmV3V2luZG93ID09IGQtPm5l
d1dpbmRvd0NvbXBvbmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPm5ld1dpbmRvd0NvbXBv
bmVudCA9IG5ld1dpbmRvdzsKKyAgICBlbWl0IG5ld1dpbmRvd0NvbXBvbmVudENoYW5nZWQoKTsK
K30KKworCisvKiEKKyAgICBccW1scHJvcGVydHkgaXRlbSBXZWJWaWV3OjpuZXdXaW5kb3dQYXJl
bnQKKworICAgIFRoZSBwYXJlbnQgaXRlbSBmb3IgbmV3IHdpbmRvd3MuCisKKyAgICBcc2EgbmV3
V2luZG93Q29tcG9uZW50CisqLworUURlY2xhcmF0aXZlSXRlbSogUURlY2xhcmF0aXZlV2ViVmll
dzo6bmV3V2luZG93UGFyZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bmV3V2luZG93UGFy
ZW50OworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldE5ld1dpbmRvd1BhcmVudChR
RGVjbGFyYXRpdmVJdGVtKiBwYXJlbnQpCit7CisgICAgaWYgKHBhcmVudCA9PSBkLT5uZXdXaW5k
b3dQYXJlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZC0+bmV3V2luZG93UGFyZW50ICYm
IHBhcmVudCkgeworICAgICAgICBRTGlzdDxRR3JhcGhpY3NJdGVtICo+IGNoaWxkcmVuID0gZC0+
bmV3V2luZG93UGFyZW50LT5jaGlsZEl0ZW1zKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY2hpbGRyZW4uY291bnQoKTsgKytpKQorICAgICAgICAgICAgY2hpbGRyZW4uYXQoaSktPnNl
dFBhcmVudEl0ZW0ocGFyZW50KTsKKyAgICB9CisgICAgZC0+bmV3V2luZG93UGFyZW50ID0gcGFy
ZW50OworICAgIGVtaXQgbmV3V2luZG93UGFyZW50Q2hhbmdlZCgpOworfQorCitRU2l6ZSBRRGVj
bGFyYXRpdmVXZWJWaWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBkLT5w
YWdlLT5tYWluRnJhbWUoKS0+Y29udGVudHNTaXplKCkgKiBjb250ZW50c1NjYWxlKCk7Cit9CisK
K3FyZWFsIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAg
IHJldHVybiBkLT52aWV3LT5zY2FsZSgpOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6
OnNldENvbnRlbnRzU2NhbGUocXJlYWwgc2NhbGUpCit7CisgICAgaWYgKHNjYWxlID09IGQtPnZp
ZXctPnNjYWxlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBkLT52aWV3LT5zZXRTY2FsZShzY2Fs
ZSk7CisgICAgdXBkYXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpOworICAgIGVtaXQgY29udGVu
dHNTY2FsZUNoYW5nZWQoKTsKK30KKworLyohCisgICAgUmV0dXJucyB0aGUgYXJlYSBvZiB0aGUg
bGFyZ2VzdCBlbGVtZW50IGF0IHBvc2l0aW9uIChcYSB4LFxhIHkpIHRoYXQgaXMgbm8gbGFyZ2Vy
CisgICAgdGhhbiBcYSBtYXh3aWR0aCBieSBcYSBtYXhoZWlnaHQgcGl4ZWxzLgorCisgICAgTWF5
IHJldHVybiBhbiBhcmVhIGxhcmdlciBpbiB0aGUgY2FzZSB3aGVuIG5vIHNtYWxsZXIgZWxlbWVu
dCBpcyBhdCB0aGUgcG9zaXRpb24uCisqLworUVJlY3QgUURlY2xhcmF0aXZlV2ViVmlldzo6ZWxl
bWVudEFyZWFBdChpbnQgeCwgaW50IHksIGludCBtYXh3aWR0aCwgaW50IG1heGhlaWdodCkgY29u
c3QKK3sKKyAgICBRV2ViSGl0VGVzdFJlc3VsdCBoaXQgPSBwYWdlKCktPm1haW5GcmFtZSgpLT5o
aXRUZXN0Q29udGVudChRUG9pbnQoeCwgeSkpOworICAgIFFSZWN0IHJ2ID0gaGl0LmJvdW5kaW5n
UmVjdCgpOworICAgIFFXZWJFbGVtZW50IGVsZW1lbnQgPSBoaXQuZW5jbG9zaW5nQmxvY2tFbGVt
ZW50KCk7CisgICAgaWYgKG1heHdpZHRoIDw9IDApCisgICAgICAgIG1heHdpZHRoID0gSU5UX01B
WDsKKyAgICBpZiAobWF4aGVpZ2h0IDw9IDApCisgICAgICAgIG1heGhlaWdodCA9IElOVF9NQVg7
CisgICAgd2hpbGUgKCFlbGVtZW50LnBhcmVudCgpLmlzTnVsbCgpICYmIGVsZW1lbnQuZ2VvbWV0
cnkoKS53aWR0aCgpIDw9IG1heHdpZHRoICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS5oZWlnaHQoKSA8
PSBtYXhoZWlnaHQpIHsKKyAgICAgICAgcnYgPSBlbGVtZW50Lmdlb21ldHJ5KCk7CisgICAgICAg
IGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudCgpOworICAgIH0KKyAgICByZXR1cm4gcnY7Cit9CisK
Ky8qIQorICAgIFxpbnRlcm5hbAorICAgIFxjbGFzcyBRRGVjbGFyYXRpdmVXZWJQYWdlCisgICAg
XGJyaWVmIFRoZSBRRGVjbGFyYXRpdmVXZWJQYWdlIGNsYXNzIGlzIGEgUVdlYlBhZ2UgdGhhdCBj
YW4gY3JlYXRlIFFNTCBwbHVnaW5zLgorCisgICAgXHNhIFFEZWNsYXJhdGl2ZVdlYlZpZXcKKyov
CitRRGVjbGFyYXRpdmVXZWJQYWdlOjpRRGVjbGFyYXRpdmVXZWJQYWdlKFFEZWNsYXJhdGl2ZVdl
YlZpZXcqIHBhcmVudCkgOgorICAgIFFXZWJQYWdlKHBhcmVudCkKK3sKK30KKworUURlY2xhcmF0
aXZlV2ViUGFnZTo6flFEZWNsYXJhdGl2ZVdlYlBhZ2UoKQoreworfQorCit2b2lkIFFEZWNsYXJh
dGl2ZVdlYlBhZ2U6OmphdmFTY3JpcHRDb25zb2xlTWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNz
YWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgUVN0cmluZyYgc291cmNlSUQpCit7CisgICAgcVdh
cm5pbmcoKSA8PCBzb3VyY2VJRCA8PCAnOicgPDwgbGluZU51bWJlciA8PCAnOicgPDwgbWVzc2Fn
ZTsKK30KKworUVN0cmluZyBRRGVjbGFyYXRpdmVXZWJQYWdlOjpjaG9vc2VGaWxlKFFXZWJGcmFt
ZSAqb3JpZ2luYXRpbmdGcmFtZSwgY29uc3QgUVN0cmluZyYgb2xkRmlsZSkKK3sKKyAgICAvLyBO
b3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUp
CisgICAgUV9VTlVTRUQob2xkRmlsZSkKKyAgICByZXR1cm4gb2xkRmlsZTsKK30KKworLyohCisg
ICAgXHFtbHNpZ25hbCBXZWJWaWV3OjphbGVydChtZXNzYWdlKQorCisgICAgVGhpcyBzaWduYWwg
aXMgZW1pdHRlZCB3aGVuIHRoZSB3ZWIgZW5naW5lIHNlbmRzIGEgSmF2YVNjcmlwdCBhbGVydC4g
VGhlIFxhIG1lc3NhZ2UgaXMgdGhlIHRleHQKKyAgICB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGFs
ZXJ0IHRvIHRoZSB1c2VyLgorKi8KKworCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmphdmFT
Y3JpcHRBbGVydChRV2ViRnJhbWUqIG9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1z
ZykKK3sKKyAgICBRX1VOVVNFRChvcmlnaW5hdGluZ0ZyYW1lKQorICAgIGVtaXQgdmlld0l0ZW0o
KS0+YWxlcnQobXNnKTsKK30KKworYm9vbCBRRGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0
Q29uZmlybShRV2ViRnJhbWUqIG9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykK
K3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdp
bmF0aW5nRnJhbWUpCisgICAgUV9VTlVTRUQobXNnKQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBRRGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSogb3Jp
Z2luYXRpbmdGcmFtZSwgY29uc3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0
VmFsdWUsIFFTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1v
ZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAgUV9VTlVTRUQobXNnKQor
ICAgIFFfVU5VU0VEKGRlZmF1bHRWYWx1ZSkKKyAgICBRX1VOVVNFRChyZXN1bHQpCisgICAgcmV0
dXJuIGZhbHNlOworfQorCisKK1FEZWNsYXJhdGl2ZVdlYlZpZXcqIFFEZWNsYXJhdGl2ZVdlYlBh
Z2U6OnZpZXdJdGVtKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UURlY2xhcmF0aXZlV2Vi
Vmlldyo+KHBhcmVudCgpKTsKK30KKworUVdlYlBhZ2UqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmNy
ZWF0ZVdpbmRvdyhXZWJXaW5kb3dUeXBlIHR5cGUpCit7CisgICAgUURlY2xhcmF0aXZlV2ViVmll
dyogbmV3VmlldyA9IHZpZXdJdGVtKCktPmNyZWF0ZVdpbmRvdyh0eXBlKTsKKyAgICBpZiAobmV3
VmlldykKKyAgICAgICAgcmV0dXJuIG5ld1ZpZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gMDsKK30K
KworUVRfRU5EX05BTUVTUEFDRQorCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUv
cWRlY2xhcmF0aXZld2Vidmlld19wLmggYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0
aXZld2Vidmlld19wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1OTUz
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmV3
ZWJ2aWV3X3AuaApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaWZu
ZGVmIHFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9oCisjZGVmaW5lIHFkZWNsYXJhdGl2ZXdlYnZpZXdf
cF9oCisKKyNpbmNsdWRlIDxRdENvcmUvUVVybD4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FE
ZWNsYXJhdGl2ZUl0ZW0+CisjaW5jbHVkZSA8UXRHdWkvUUFjdGlvbj4KKyNpbmNsdWRlIDxRdE5l
dHdvcmsvUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFF0V2ViS2l0L1FHcmFwaGlj
c1dlYlZpZXc+CisjaW5jbHVkZSA8UXRXZWJLaXQvUVdlYlBhZ2U+CisKKworUVRfQkVHSU5fSEVB
REVSCisKK2NsYXNzIFFXZWJIaXN0b3J5OworY2xhc3MgUVdlYlNldHRpbmdzOworCitRVF9CRUdJ
Tl9OQU1FU1BBQ0UKKworUVRfTU9EVUxFKERlY2xhcmF0aXZlKQorY2xhc3MgUURlY2xhcmF0aXZl
V2ViU2V0dGluZ3M7CitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTsKK2NsYXNzIFFO
ZXR3b3JrUmVxdWVzdDsKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlZpZXc7CitjbGFzcyBRRGVjbGFy
YXRpdmVXZWJWaWV3UHJpdmF0ZTsKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViUGFnZSA6IHB1Ymxp
YyBRV2ViUGFnZSB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBRRGVjbGFy
YXRpdmVXZWJQYWdlKFFEZWNsYXJhdGl2ZVdlYlZpZXcgKnBhcmVudCk7CisgICAgflFEZWNsYXJh
dGl2ZVdlYlBhZ2UoKTsKK3Byb3RlY3RlZDoKKyAgICBRV2ViUGFnZSAqY3JlYXRlV2luZG93KFdl
YldpbmRvd1R5cGUgdHlwZSk7CisgICAgdm9pZCBqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29u
c3QgUVN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFFTdHJpbmcmIHNvdXJj
ZUlEKTsKKyAgICBRU3RyaW5nIGNob29zZUZpbGUoUVdlYkZyYW1lICpvcmlnaW5hdGluZ0ZyYW1l
LCBjb25zdCBRU3RyaW5nJiBvbGRGaWxlKTsKKyAgICB2b2lkIGphdmFTY3JpcHRBbGVydChRV2Vi
RnJhbWUgKm9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZyk7CisgICAgYm9vbCBq
YXZhU2NyaXB0Q29uZmlybShRV2ViRnJhbWUgKm9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJp
bmcmIG1zZyk7CisgICAgYm9vbCBqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSAqb3JpZ2luYXRp
bmdGcmFtZSwgY29uc3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUs
IFFTdHJpbmcqIHJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyAq
dmlld0l0ZW0oKTsKK307CisKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkOwor
CisvLyAjIyMgVE9ETzogYnJvd3NlciBwbHVnaW5zCisKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlZp
ZXcgOiBwdWJsaWMgUURlY2xhcmF0aXZlSXRlbSB7CisgICAgUV9PQkpFQ1QKKworICAgIFFfRU5V
TVMoU3RhdHVzIFNlbGVjdGlvbk1vZGUpCisKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgdGl0bGUg
UkVBRCB0aXRsZSBOT1RJRlkgdGl0bGVDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUVBpeG1hcCBp
Y29uIFJFQUQgaWNvbiBOT1RJRlkgaWNvbkNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShxcmVhbCB6
b29tRmFjdG9yIFJFQUQgem9vbUZhY3RvciBXUklURSBzZXRab29tRmFjdG9yIE5PVElGWSB6b29t
RmFjdG9yQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgc3RhdHVzVGV4dCBSRUFEIHN0
YXR1c1RleHQgTk9USUZZIHN0YXR1c1RleHRDaGFuZ2VkKQorCisgICAgUV9QUk9QRVJUWShRU3Ry
aW5nIGh0bWwgUkVBRCBodG1sIFdSSVRFIHNldEh0bWwgTk9USUZZIGh0bWxDaGFuZ2VkKQorCisg
ICAgUV9QUk9QRVJUWShpbnQgcHJlc3NHcmFiVGltZSBSRUFEIHByZXNzR3JhYlRpbWUgV1JJVEUg
c2V0UHJlc3NHcmFiVGltZSBOT1RJRlkgcHJlc3NHcmFiVGltZUNoYW5nZWQpCisKKyAgICBRX1BS
T1BFUlRZKGludCBwcmVmZXJyZWRXaWR0aCBSRUFEIHByZWZlcnJlZFdpZHRoIFdSSVRFIHNldFBy
ZWZlcnJlZFdpZHRoIE5PVElGWSBwcmVmZXJyZWRXaWR0aENoYW5nZWQpCisgICAgUV9QUk9QRVJU
WShpbnQgcHJlZmVycmVkSGVpZ2h0IFJFQUQgcHJlZmVycmVkSGVpZ2h0IFdSSVRFIHNldFByZWZl
cnJlZEhlaWdodCBOT1RJRlkgcHJlZmVycmVkSGVpZ2h0Q2hhbmdlZCkKKyAgICBRX1BST1BFUlRZ
KFFVcmwgdXJsIFJFQUQgdXJsIFdSSVRFIHNldFVybCBOT1RJRlkgdXJsQ2hhbmdlZCkKKyAgICBR
X1BST1BFUlRZKHFyZWFsIHByb2dyZXNzIFJFQUQgcHJvZ3Jlc3MgTk9USUZZIHByb2dyZXNzQ2hh
bmdlZCkKKyAgICBRX1BST1BFUlRZKFN0YXR1cyBzdGF0dXMgUkVBRCBzdGF0dXMgTk9USUZZIHN0
YXR1c0NoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZKFFBY3Rpb24qIHJlbG9hZCBSRUFEIHJlbG9h
ZEFjdGlvbiBDT05TVEFOVCkKKyAgICBRX1BST1BFUlRZKFFBY3Rpb24qIGJhY2sgUkVBRCBiYWNr
QWN0aW9uIENPTlNUQU5UKQorICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogZm9yd2FyZCBSRUFEIGZv
cndhcmRBY3Rpb24gQ09OU1RBTlQpCisgICAgUV9QUk9QRVJUWShRQWN0aW9uKiBzdG9wIFJFQUQg
c3RvcEFjdGlvbiBDT05TVEFOVCkKKworICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3MqIHNldHRpbmdzIFJFQUQgc2V0dGluZ3NPYmplY3QgQ09OU1RBTlQpCisKKyAgICBRX1BS
T1BFUlRZKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBqYXZhU2NyaXB0V2luZG93
T2JqZWN0cyBSRUFEIGphdmFTY3JpcHRXaW5kb3dPYmplY3RzIENPTlNUQU5UKQorCisgICAgUV9Q
Uk9QRVJUWShRRGVjbGFyYXRpdmVDb21wb25lbnQqIG5ld1dpbmRvd0NvbXBvbmVudCBSRUFEIG5l
d1dpbmRvd0NvbXBvbmVudCBXUklURSBzZXROZXdXaW5kb3dDb21wb25lbnQgTk9USUZZIG5ld1dp
bmRvd0NvbXBvbmVudENoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVJdGVtKiBu
ZXdXaW5kb3dQYXJlbnQgUkVBRCBuZXdXaW5kb3dQYXJlbnQgV1JJVEUgc2V0TmV3V2luZG93UGFy
ZW50IE5PVElGWSBuZXdXaW5kb3dQYXJlbnRDaGFuZ2VkKQorCisgICAgUV9QUk9QRVJUWShib29s
IHJlbmRlcmluZ0VuYWJsZWQgUkVBRCByZW5kZXJpbmdFbmFibGVkIFdSSVRFIHNldFJlbmRlcmlu
Z0VuYWJsZWQgTk9USUZZIHJlbmRlcmluZ0VuYWJsZWRDaGFuZ2VkKQorCisgICAgUV9QUk9QRVJU
WShRU2l6ZSBjb250ZW50c1NpemUgUkVBRCBjb250ZW50c1NpemUgTk9USUZZIGNvbnRlbnRzU2l6
ZUNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShxcmVhbCBjb250ZW50c1NjYWxlIFJFQUQgY29udGVu
dHNTY2FsZSBXUklURSBzZXRDb250ZW50c1NjYWxlIE5PVElGWSBjb250ZW50c1NjYWxlQ2hhbmdl
ZCkKKworcHVibGljOgorICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXcoUURlY2xhcmF0aXZlSXRlbSAq
cGFyZW50ID0gMCk7CisgICAgflFEZWNsYXJhdGl2ZVdlYlZpZXcoKTsKKworICAgIFFVcmwgdXJs
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRVcmwoY29uc3QgUVVybCAmKTsKKworICAgIFFTdHJpbmcg
dGl0bGUoKSBjb25zdDsKKworICAgIFFQaXhtYXAgaWNvbigpIGNvbnN0OworCisgICAgcXJlYWwg
em9vbUZhY3RvcigpIGNvbnN0OworICAgIHZvaWQgc2V0Wm9vbUZhY3RvcihxcmVhbCk7CisgICAg
UV9JTlZPS0FCTEUgYm9vbCBoZXVyaXN0aWNab29tKGludCBjbGlja1gsIGludCBjbGlja1ksIHFy
ZWFsIG1heHpvb20pOworICAgIFFSZWN0IGVsZW1lbnRBcmVhQXQoaW50IHgsIGludCB5LCBpbnQg
bWlud2lkdGgsIGludCBtaW5oZWlnaHQpIGNvbnN0OworCisgICAgaW50IHByZXNzR3JhYlRpbWUo
KSBjb25zdDsKKyAgICB2b2lkIHNldFByZXNzR3JhYlRpbWUoaW50KTsKKworICAgIGludCBwcmVm
ZXJyZWRXaWR0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0UHJlZmVycmVkV2lkdGgoaW50KTsKKyAg
ICBpbnQgcHJlZmVycmVkSGVpZ2h0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRQcmVmZXJyZWRIZWln
aHQoaW50KTsKKworICAgIGVudW0gU3RhdHVzIHsgTnVsbCwgUmVhZHksIExvYWRpbmcsIEVycm9y
IH07CisgICAgU3RhdHVzIHN0YXR1cygpIGNvbnN0OworICAgIHFyZWFsIHByb2dyZXNzKCkgY29u
c3Q7CisgICAgUVN0cmluZyBzdGF0dXNUZXh0KCkgY29uc3Q7CisKKyAgICBRQWN0aW9uICpyZWxv
YWRBY3Rpb24oKSBjb25zdDsKKyAgICBRQWN0aW9uICpiYWNrQWN0aW9uKCkgY29uc3Q7CisgICAg
UUFjdGlvbiAqZm9yd2FyZEFjdGlvbigpIGNvbnN0OworICAgIFFBY3Rpb24gKnN0b3BBY3Rpb24o
KSBjb25zdDsKKworICAgIFFXZWJQYWdlICpwYWdlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQYWdl
KFFXZWJQYWdlICpwYWdlKTsKKworICAgIHZvaWQgbG9hZChjb25zdCBRTmV0d29ya1JlcXVlc3Qg
JnJlcXVlc3QsCisgICAgICAgICAgICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9u
IG9wZXJhdGlvbiA9IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uLAorICAgICAg
ICAgICAgICBjb25zdCBRQnl0ZUFycmF5ICZib2R5ID0gUUJ5dGVBcnJheSgpKTsKKworICAgIFFT
dHJpbmcgaHRtbCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRIdG1sKGNvbnN0IFFTdHJpbmcgJmh0
bWwsIGNvbnN0IFFVcmwgJmJhc2VVcmwgPSBRVXJsKCkpOworICAgIHZvaWQgc2V0Q29udGVudChj
b25zdCBRQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSA9IFFTdHJpbmco
KSwgY29uc3QgUVVybCAmYmFzZVVybCA9IFFVcmwoKSk7CisKKyAgICBRV2ViSGlzdG9yeSogaGlz
dG9yeSgpIGNvbnN0OworICAgIFFXZWJTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdDsKKyAgICBR
RGVjbGFyYXRpdmVXZWJTZXR0aW5ncyAqc2V0dGluZ3NPYmplY3QoKSBjb25zdDsKKworICAgIGJv
b2wgcmVuZGVyaW5nRW5hYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0UmVuZGVyaW5nRW5hYmxl
ZChib29sKTsKKworICAgIFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBqYXZhU2Ny
aXB0V2luZG93T2JqZWN0cygpOworCisgICAgc3RhdGljIFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRh
Y2hlZCogcW1sQXR0YWNoZWRQcm9wZXJ0aWVzKFFPYmplY3QqKTsKKworICAgIFFEZWNsYXJhdGl2
ZUNvbXBvbmVudCAqbmV3V2luZG93Q29tcG9uZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXROZXdX
aW5kb3dDb21wb25lbnQoUURlY2xhcmF0aXZlQ29tcG9uZW50ICpuZXdXaW5kb3cpOworICAgIFFE
ZWNsYXJhdGl2ZUl0ZW0qIG5ld1dpbmRvd1BhcmVudCgpIGNvbnN0OworICAgIHZvaWQgc2V0TmV3
V2luZG93UGFyZW50KFFEZWNsYXJhdGl2ZUl0ZW0qIG5ld1dpbmRvdyk7CisKKyAgICBib29sIGlz
Q29tcG9uZW50Q29tcGxldGVQdWJsaWMoKSBjb25zdCB7IHJldHVybiBpc0NvbXBvbmVudENvbXBs
ZXRlKCk7IH0KKworICAgIFFTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OworCisgICAgdm9pZCBz
ZXRDb250ZW50c1NjYWxlKHFyZWFsIHNjYWxlKTsKKyAgICBxcmVhbCBjb250ZW50c1NjYWxlKCkg
Y29uc3Q7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHByZWZlcnJlZFdpZHRoQ2hhbmdlZCgpOwor
ICAgIHZvaWQgcHJlZmVycmVkSGVpZ2h0Q2hhbmdlZCgpOworICAgIHZvaWQgdXJsQ2hhbmdlZCgp
OworICAgIHZvaWQgcHJvZ3Jlc3NDaGFuZ2VkKCk7CisgICAgdm9pZCBzdGF0dXNDaGFuZ2VkKFN0
YXR1cyk7CisgICAgdm9pZCB0aXRsZUNoYW5nZWQoY29uc3QgUVN0cmluZyYpOworICAgIHZvaWQg
aWNvbkNoYW5nZWQoKTsKKyAgICB2b2lkIHN0YXR1c1RleHRDaGFuZ2VkKCk7CisgICAgdm9pZCBo
dG1sQ2hhbmdlZCgpOworICAgIHZvaWQgcHJlc3NHcmFiVGltZUNoYW5nZWQoKTsKKyAgICB2b2lk
IHpvb21GYWN0b3JDaGFuZ2VkKCk7CisgICAgdm9pZCBuZXdXaW5kb3dDb21wb25lbnRDaGFuZ2Vk
KCk7CisgICAgdm9pZCBuZXdXaW5kb3dQYXJlbnRDaGFuZ2VkKCk7CisgICAgdm9pZCByZW5kZXJp
bmdFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBR
U2l6ZSYpOworICAgIHZvaWQgY29udGVudHNTY2FsZUNoYW5nZWQoKTsKKworICAgIHZvaWQgbG9h
ZFN0YXJ0ZWQoKTsKKyAgICB2b2lkIGxvYWRGaW5pc2hlZCgpOworICAgIHZvaWQgbG9hZEZhaWxl
ZCgpOworCisgICAgdm9pZCBkb3VibGVDbGljayhpbnQgY2xpY2tYLCBpbnQgY2xpY2tZKTsKKwor
ICAgIHZvaWQgem9vbVRvKHFyZWFsIHpvb20sIGludCBjZW50ZXJYLCBpbnQgY2VudGVyWSk7CisK
KyAgICB2b2lkIGFsZXJ0KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpOworCitwdWJsaWMgUV9TTE9U
UzoKKyAgICBRVmFyaWFudCBldmFsdWF0ZUphdmFTY3JpcHQoY29uc3QgUVN0cmluZyYpOworCitw
cml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCBkb0xvYWRTdGFydGVkKCk7CisgICAgdm9pZCBkb0xv
YWRQcm9ncmVzcyhpbnQgcCk7CisgICAgdm9pZCBkb0xvYWRGaW5pc2hlZChib29sIG9rKTsKKyAg
ICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgUVN0cmluZyYpOworICAgIHZvaWQgd2luZG93T2Jq
ZWN0Q2xlYXJlZCgpOworICAgIHZvaWQgcGFnZVVybENoYW5nZWQoKTsKKyAgICB2b2lkIGluaXRp
YWxMYXlvdXQoKTsKKworICAgIHZvaWQgcHJvcGFnYXRlRm9jdXNUb1dlYlBhZ2UoYm9vbCk7CisK
KyAgICB2b2lkIHVwZGF0ZURlY2xhcmF0aXZlV2ViVmlld1NpemUoKTsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQp
OworICAgIHZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBl
dmVudCk7CisgICAgdm9pZCBtb3VzZU1vdmVFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQq
IGV2ZW50KTsKKyAgICB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChRR3JhcGhpY3NTY2VuZU1v
dXNlRXZlbnQgKmV2ZW50KTsKKyAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50
KTsKKyAgICB2b2lkIGhvdmVyTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lSG92ZXJFdmVudCogZXZl
bnQpOworICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGICZuZXdH
ZW9tZXRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFSZWN0RiAm
b2xkR2VvbWV0cnkpOworICAgIHZpcnR1YWwgYm9vbCBzY2VuZUV2ZW50KFFFdmVudCogZXZlbnQp
OworICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXcqIGNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2lu
ZG93VHlwZSB0eXBlKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZSgp
OworICAgIHZvaWQgaW5pdCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb25lbnRDb21wbGV0ZSgp
OworICAgIFFfRElTQUJMRV9DT1BZKFFEZWNsYXJhdGl2ZVdlYlZpZXcpCisgICAgUURlY2xhcmF0
aXZlV2ViVmlld1ByaXZhdGUqIGQ7CisgICAgUU1vdXNlRXZlbnQqIHNjZW5lTW91c2VFdmVudFRv
TW91c2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqKTsKKyAgICBRTW91c2VFdmVudCog
c2NlbmVIb3Zlck1vdmVFdmVudFRvTW91c2VFdmVudChRR3JhcGhpY3NTY2VuZUhvdmVyRXZlbnQq
KTsKKyAgICBmcmllbmQgY2xhc3MgUURlY2xhcmF0aXZlV2ViUGFnZTsKK307CisKK2NsYXNzIFFE
ZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hlZCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVD
VAorICAgIFFfUFJPUEVSVFkoUVN0cmluZyB3aW5kb3dPYmplY3ROYW1lIFJFQUQgd2luZG93T2Jq
ZWN0TmFtZSBXUklURSBzZXRXaW5kb3dPYmplY3ROYW1lKQorcHVibGljOgorICAgIFFEZWNsYXJh
dGl2ZVdlYlZpZXdBdHRhY2hlZChRT2JqZWN0KiBwYXJlbnQpCisgICAgICAgIDogUU9iamVjdChw
YXJlbnQpCisgICAgeworICAgIH0KKworICAgIFFTdHJpbmcgd2luZG93T2JqZWN0TmFtZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aW5kb3dPYmplY3ROYW1lOworICAgIH0KKwor
ICAgIHZvaWQgc2V0V2luZG93T2JqZWN0TmFtZShjb25zdCBRU3RyaW5nICZuKQorICAgIHsKKyAg
ICAgICAgbV93aW5kb3dPYmplY3ROYW1lID0gbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUVN0
cmluZyBtX3dpbmRvd09iamVjdE5hbWU7Cit9OworCisKK1FUX0VORF9OQU1FU1BBQ0UKKworUU1M
X0RFQ0xBUkVfVFlQRShRRGVjbGFyYXRpdmVXZWJWaWV3KQorUU1MX0RFQ0xBUkVfVFlQRUlORk8o
UURlY2xhcmF0aXZlV2ViVmlldywgUU1MX0hBU19BVFRBQ0hFRF9QUk9QRVJUSUVTKQorCitRVF9F
TkRfSEVBREVSCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3Fk
ZWNsYXJhdGl2ZXdlYnZpZXdfcF9wLmggYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0
aXZld2Vidmlld19wX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFk
YjU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3FkZWNsYXJhdGl2
ZXdlYnZpZXdfcF9wLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKwor
I2lmbmRlZiBxZGVjbGFyYXRpdmV3ZWJ2aWV3X3BfcF9oCisjZGVmaW5lIHFkZWNsYXJhdGl2ZXdl
YnZpZXdfcF9wX2gKKworI2luY2x1ZGUgPFF0V2ViS2l0L1FXZWJQYWdlPgorI2luY2x1ZGUgPHFk
ZWNsYXJhdGl2ZS5oPgorCitRVF9CRUdJTl9IRUFERVIKKworUVRfQkVHSU5fTkFNRVNQQUNFCisK
K1FUX01PRFVMRShEZWNsYXJhdGl2ZSkKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViU2V0dGluZ3Mg
OiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworICAgIFFfUFJPUEVSVFkoUVN0cmlu
ZyBzdGFuZGFyZEZvbnRGYW1pbHkgUkVBRCBzdGFuZGFyZEZvbnRGYW1pbHkgV1JJVEUgc2V0U3Rh
bmRhcmRGb250RmFtaWx5KQorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBmaXhlZEZvbnRGYW1pbHkg
UkVBRCBmaXhlZEZvbnRGYW1pbHkgV1JJVEUgc2V0Rml4ZWRGb250RmFtaWx5KQorICAgIFFfUFJP
UEVSVFkoUVN0cmluZyBzZXJpZkZvbnRGYW1pbHkgUkVBRCBzZXJpZkZvbnRGYW1pbHkgV1JJVEUg
c2V0U2VyaWZGb250RmFtaWx5KQorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBzYW5zU2VyaWZGb250
RmFtaWx5IFJFQUQgc2Fuc1NlcmlmRm9udEZhbWlseSBXUklURSBzZXRTYW5zU2VyaWZGb250RmFt
aWx5KQorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBjdXJzaXZlRm9udEZhbWlseSBSRUFEIGN1cnNp
dmVGb250RmFtaWx5IFdSSVRFIHNldEN1cnNpdmVGb250RmFtaWx5KQorICAgIFFfUFJPUEVSVFko
UVN0cmluZyBmYW50YXN5Rm9udEZhbWlseSBSRUFEIGZhbnRhc3lGb250RmFtaWx5IFdSSVRFIHNl
dEZhbnRhc3lGb250RmFtaWx5KQorCisgICAgUV9QUk9QRVJUWShpbnQgbWluaW11bUZvbnRTaXpl
IFJFQUQgbWluaW11bUZvbnRTaXplIFdSSVRFIHNldE1pbmltdW1Gb250U2l6ZSkKKyAgICBRX1BS
T1BFUlRZKGludCBtaW5pbXVtTG9naWNhbEZvbnRTaXplIFJFQUQgbWluaW11bUxvZ2ljYWxGb250
U2l6ZSBXUklURSBzZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKQorICAgIFFfUFJPUEVSVFkoaW50
IGRlZmF1bHRGb250U2l6ZSBSRUFEIGRlZmF1bHRGb250U2l6ZSBXUklURSBzZXREZWZhdWx0Rm9u
dFNpemUpCisgICAgUV9QUk9QRVJUWShpbnQgZGVmYXVsdEZpeGVkRm9udFNpemUgUkVBRCBkZWZh
dWx0Rml4ZWRGb250U2l6ZSBXUklURSBzZXREZWZhdWx0Rml4ZWRGb250U2l6ZSkKKworICAgIFFf
UFJPUEVSVFkoYm9vbCBhdXRvTG9hZEltYWdlcyBSRUFEIGF1dG9Mb2FkSW1hZ2VzIFdSSVRFIHNl
dEF1dG9Mb2FkSW1hZ2VzKQorICAgIFFfUFJPUEVSVFkoYm9vbCBqYXZhc2NyaXB0RW5hYmxlZCBS
RUFEIGphdmFzY3JpcHRFbmFibGVkIFdSSVRFIHNldEphdmFzY3JpcHRFbmFibGVkKQorICAgIFFf
UFJPUEVSVFkoYm9vbCBqYXZhRW5hYmxlZCBSRUFEIGphdmFFbmFibGVkIFdSSVRFIHNldEphdmFF
bmFibGVkKQorICAgIFFfUFJPUEVSVFkoYm9vbCBwbHVnaW5zRW5hYmxlZCBSRUFEIHBsdWdpbnNF
bmFibGVkIFdSSVRFIHNldFBsdWdpbnNFbmFibGVkKQorICAgIFFfUFJPUEVSVFkoYm9vbCBwcml2
YXRlQnJvd3NpbmdFbmFibGVkIFJFQUQgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCBXUklURSBzZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKQorICAgIFFfUFJPUEVSVFkoYm9vbCBqYXZhc2NyaXB0Q2Fu
T3BlbldpbmRvd3MgUkVBRCBqYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MgV1JJVEUgc2V0SmF2YXNj
cmlwdENhbk9wZW5XaW5kb3dzKQorICAgIFFfUFJPUEVSVFkoYm9vbCBqYXZhc2NyaXB0Q2FuQWNj
ZXNzQ2xpcGJvYXJkIFJFQUQgamF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCBXUklURSBzZXRK
YXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKQorICAgIFFfUFJPUEVSVFkoYm9vbCBkZXZlbG9w
ZXJFeHRyYXNFbmFibGVkIFJFQUQgZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCBXUklURSBzZXREZXZl
bG9wZXJFeHRyYXNFbmFibGVkKQorICAgIFFfUFJPUEVSVFkoYm9vbCBsaW5rc0luY2x1ZGVkSW5G
b2N1c0NoYWluIFJFQUQgbGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbiBXUklURSBzZXRMaW5rc0lu
Y2x1ZGVkSW5Gb2N1c0NoYWluKQorICAgIFFfUFJPUEVSVFkoYm9vbCB6b29tVGV4dE9ubHkgUkVB
RCB6b29tVGV4dE9ubHkgV1JJVEUgc2V0Wm9vbVRleHRPbmx5KQorICAgIFFfUFJPUEVSVFkoYm9v
bCBwcmludEVsZW1lbnRCYWNrZ3JvdW5kcyBSRUFEIHByaW50RWxlbWVudEJhY2tncm91bmRzIFdS
SVRFIHNldFByaW50RWxlbWVudEJhY2tncm91bmRzKQorICAgIFFfUFJPUEVSVFkoYm9vbCBvZmZs
aW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCBSRUFEIG9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFi
bGVkIFdSSVRFIHNldE9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKQorICAgIFFfUFJPUEVS
VFkoYm9vbCBvZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQgUkVBRCBvZmZsaW5lV2Vi
QXBwbGljYXRpb25DYWNoZUVuYWJsZWQgV1JJVEUgc2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2Fj
aGVFbmFibGVkKQorICAgIFFfUFJPUEVSVFkoYm9vbCBsb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJs
ZWQgUkVBRCBsb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQgV1JJVEUgc2V0TG9jYWxTdG9yYWdl
RGF0YWJhc2VFbmFibGVkKQorICAgIFFfUFJPUEVSVFkoYm9vbCBsb2NhbENvbnRlbnRDYW5BY2Nl
c3NSZW1vdGVVcmxzIFJFQUQgbG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscyBXUklURSBz
ZXRMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzKQorCitwdWJsaWM6CisgICAgUURlY2xh
cmF0aXZlV2ViU2V0dGluZ3MoKSB7fQorCisgICAgUVN0cmluZyBzdGFuZGFyZEZvbnRGYW1pbHko
KSBjb25zdCB7IHJldHVybiBzLT5mb250RmFtaWx5KFFXZWJTZXR0aW5nczo6U3RhbmRhcmRGb250
KTsgfQorICAgIHZvaWQgc2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IFFTdHJpbmcmIGYpIHsg
cy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6OlN0YW5kYXJkRm9udCwgZik7IH0KKyAgICBR
U3RyaW5nIGZpeGVkRm9udEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRGYW1pbHkoUVdl
YlNldHRpbmdzOjpGaXhlZEZvbnQpOyB9CisgICAgdm9pZCBzZXRGaXhlZEZvbnRGYW1pbHkoY29u
c3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5KFFXZWJTZXR0aW5nczo6Rml4ZWRGb250
LCBmKTsgfQorICAgIFFTdHJpbmcgc2VyaWZGb250RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gcy0+
Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OlNlcmlmRm9udCk7IH0KKyAgICB2b2lkIHNldFNlcmlm
Rm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBmKSB7IHMtPnNldEZvbnRGYW1pbHkoUVdlYlNldHRp
bmdzOjpTZXJpZkZvbnQsIGYpOyB9CisgICAgUVN0cmluZyBzYW5zU2VyaWZGb250RmFtaWx5KCkg
Y29uc3QgeyByZXR1cm4gcy0+Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OlNhbnNTZXJpZkZvbnQp
OyB9CisgICAgdm9pZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IFFTdHJpbmcmIGYpIHsg
cy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6OlNhbnNTZXJpZkZvbnQsIGYpOyB9CisgICAg
UVN0cmluZyBjdXJzaXZlRm9udEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRGYW1pbHko
UVdlYlNldHRpbmdzOjpDdXJzaXZlRm9udCk7IH0KKyAgICB2b2lkIHNldEN1cnNpdmVGb250RmFt
aWx5KGNvbnN0IFFTdHJpbmcmIGYpIHsgcy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkN1
cnNpdmVGb250LCBmKTsgfQorICAgIFFTdHJpbmcgZmFudGFzeUZvbnRGYW1pbHkoKSBjb25zdCB7
IHJldHVybiBzLT5mb250RmFtaWx5KFFXZWJTZXR0aW5nczo6RmFudGFzeUZvbnQpOyB9CisgICAg
dm9pZCBzZXRGYW50YXN5Rm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBmKSB7IHMtPnNldEZvbnRG
YW1pbHkoUVdlYlNldHRpbmdzOjpGYW50YXN5Rm9udCwgZik7IH0KKworICAgIGludCBtaW5pbXVt
Rm9udFNpemUoKSBjb25zdCB7IHJldHVybiBzLT5mb250U2l6ZShRV2ViU2V0dGluZ3M6Ok1pbmlt
dW1Gb250U2l6ZSk7IH0KKyAgICB2b2lkIHNldE1pbmltdW1Gb250U2l6ZShpbnQgc2l6ZSkgeyBz
LT5zZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6Ok1pbmltdW1Gb250U2l6ZSwgc2l6ZSk7IH0KKyAg
ICBpbnQgbWluaW11bUxvZ2ljYWxGb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRTaXpl
KFFXZWJTZXR0aW5nczo6TWluaW11bUxvZ2ljYWxGb250U2l6ZSk7IH0KKyAgICB2b2lkIHNldE1p
bmltdW1Mb2dpY2FsRm9udFNpemUoaW50IHNpemUpIHsgcy0+c2V0Rm9udFNpemUoUVdlYlNldHRp
bmdzOjpNaW5pbXVtTG9naWNhbEZvbnRTaXplLCBzaXplKTsgfQorICAgIGludCBkZWZhdWx0Rm9u
dFNpemUoKSBjb25zdCB7IHJldHVybiBzLT5mb250U2l6ZShRV2ViU2V0dGluZ3M6OkRlZmF1bHRG
b250U2l6ZSk7IH0KKyAgICB2b2lkIHNldERlZmF1bHRGb250U2l6ZShpbnQgc2l6ZSkgeyBzLT5z
ZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6OkRlZmF1bHRGb250U2l6ZSwgc2l6ZSk7IH0KKyAgICBp
bnQgZGVmYXVsdEZpeGVkRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBzLT5mb250U2l6ZShRV2Vi
U2V0dGluZ3M6OkRlZmF1bHRGaXhlZEZvbnRTaXplKTsgfQorICAgIHZvaWQgc2V0RGVmYXVsdEZp
eGVkRm9udFNpemUoaW50IHNpemUpIHsgcy0+c2V0Rm9udFNpemUoUVdlYlNldHRpbmdzOjpEZWZh
dWx0Rml4ZWRGb250U2l6ZSwgc2l6ZSk7IH0KKworICAgIGJvb2wgYXV0b0xvYWRJbWFnZXMoKSBj
b25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6QXV0b0xvYWRJbWFn
ZXMpOyB9CisgICAgdm9pZCBzZXRBdXRvTG9hZEltYWdlcyhib29sIG9uKSB7IHMtPnNldEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OkF1dG9Mb2FkSW1hZ2VzLCBvbik7IH0KKyAgICBib29sIGphdmFz
Y3JpcHRFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkphdmFzY3JpcHRFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0SmF2YXNjcmlwdEVuYWJsZWQo
Ym9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0RW5hYmxl
ZCwgb24pOyB9CisgICAgYm9vbCBqYXZhRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhRW5hYmxlZCk7IH0KKyAgICB2b2lkIHNldEphdmFF
bmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YUVuYWJs
ZWQsIG9uKTsgfQorICAgIGJvb2wgcGx1Z2luc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBzLT50
ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UGx1Z2luc0VuYWJsZWQpOyB9CisgICAgdm9pZCBz
ZXRQbHVnaW5zRW5hYmxlZChib29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6
OlBsdWdpbnNFbmFibGVkLCBvbik7IH0KKyAgICBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCk7IH0KKyAgICB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9v
bCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQcml2YXRlQnJvd3NpbmdFbmFi
bGVkLCBvbik7IH0KKyAgICBib29sIGphdmFzY3JpcHRDYW5PcGVuV2luZG93cygpIGNvbnN0IHsg
cmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuT3Blbldp
bmRvd3MpOyB9CisgICAgdm9pZCBzZXRKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MoYm9vbCBvbikg
eyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3Ms
IG9uKTsgfQorICAgIGJvb2wgamF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCgpIGNvbnN0IHsg
cmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuQWNjZXNz
Q2xpcGJvYXJkKTsgfQorICAgIHZvaWQgc2V0SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChi
b29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5BY2Nl
c3NDbGlwYm9hcmQsIG9uKTsgfQorICAgIGJvb2wgZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRy
YXNFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIG9u
KSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQs
IG9uKTsgfQorICAgIGJvb2wgbGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbigpIGNvbnN0IHsgcmV0
dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMaW5rc0luY2x1ZGVkSW5Gb2N1c0No
YWluKTsgfQorICAgIHZvaWQgc2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbihib29sIG9uKSB7
IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4s
IG9uKTsgfQorICAgIGJvb2wgem9vbVRleHRPbmx5KCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6Olpvb21UZXh0T25seSk7IH0KKyAgICB2b2lkIHNldFpvb21U
ZXh0T25seShib29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Olpvb21UZXh0
T25seSwgb24pOyB9CisgICAgYm9vbCBwcmludEVsZW1lbnRCYWNrZ3JvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQcmludEVsZW1lbnRCYWNrZ3Jv
dW5kcyk7IH0KKyAgICB2b2lkIHNldFByaW50RWxlbWVudEJhY2tncm91bmRzKGJvb2wgb24pIHsg
cy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpbnRFbGVtZW50QmFja2dyb3VuZHMsIG9u
KTsgfQorICAgIGJvb2wgb2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVN0b3JhZ2VEYXRhYmFz
ZUVuYWJsZWQpOyB9CisgICAgdm9pZCBzZXRPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZChi
b29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVTdG9yYWdlRGF0
YWJhc2VFbmFibGVkLCBvbik7IH0KKyAgICBib29sIG9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hl
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQpOyB9CisgICAgdm9pZCBzZXRPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdl
YlNldHRpbmdzOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQsIG9uKTsgfQorICAg
IGJvb2wgbG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVz
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsU3RvcmFnZURhdGFiYXNlRW5hYmxlZCk7IH0K
KyAgICB2b2lkIHNldExvY2FsU3RvcmFnZURhdGFiYXNlRW5hYmxlZChib29sIG9uKSB7IHMtPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsU3RvcmFnZURhdGFiYXNlRW5hYmxlZCwgb24p
OyB9CisgICAgYm9vbCBsb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzKCkgY29uc3QgeyBy
ZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsQ29udGVudENhbkFjY2Vz
c1JlbW90ZVVybHMpOyB9CisgICAgdm9pZCBzZXRMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVV
cmxzKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50
Q2FuQWNjZXNzUmVtb3RlVXJscywgb24pOyB9CisKKyAgICBRV2ViU2V0dGluZ3MgKnM7Cit9Owor
CitRVF9FTkRfTkFNRVNQQUNFCisKK1FNTF9ERUNMQVJFX1RZUEUoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3MpCisKK1FUX0VORF9IRUFERVIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvcW1sZGlyIGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3FtbGRpcgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZkZDA2Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L3F0L2RlY2xhcmF0aXZlL3FtbGRpcgpAQCAtMCwwICsxIEBACitwbHVnaW4gcW1sd2Vi
a2l0cGx1Z2luCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57769</attachid>
            <date>2010-06-03 08:07:14 -0700</date>
            <delta_ts>2010-06-03 08:17:08 -0700</delta_ts>
            <desc>Version 2</desc>
            <filename>40050-QML.diff</filename>
            <type>text/plain</type>
            <size>66350</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlZjE3YzI4Li5jNDY1ZDhj
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDYtMDMgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFVwc3Ry
ZWFtIHRoZSBXZWJLaXQgUU1MIGludGVncmF0aW9uIHBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwNTAKKworICAgICAgICBBZGQgdG8gdGhl
IGJ1aWxkIHRoZSBRTUwgV2ViS2l0IGludGVncmF0aW9uIHBsdWdpbi4KKworICAgICAgICAqIFdl
YktpdC5wcm86CisKIDIwMTAtMDYtMDIgIFN0ZXJsaW5nIFN3aWdhcnQgIDxzc3dpZ2FydEBnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0LnBybyBiL1dlYktpdC5wcm8KaW5kZXggNzlkZTA3Mi4uYzZlNzA5ZiAxMDA2NDQKLS0t
IGEvV2ViS2l0LnBybworKysgYi9XZWJLaXQucHJvCkBAIC05LDYgKzksOSBAQCBTVUJESVJTICs9
IFwKIAogIyBJZiB0aGUgc291cmNlIGV4aXN0cywgYnVpbHQgaXQKIGV4aXN0cygkJFBXRC9XZWJL
aXRUb29scy9RdFRlc3RCcm93c2VyKTogU1VCRElSUyArPSBXZWJLaXRUb29scy9RdFRlc3RCcm93
c2VyCitncmVhdGVyVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA2KSB7CisgICAgZXhpc3RzKCQkUFdE
L1dlYktpdC9xdC9kZWNsYXJhdGl2ZSk6IFNVQkRJUlMgKz0gV2ViS2l0L3F0L2RlY2xhcmF0aXZl
Cit9CiBleGlzdHMoJCRQV0QvSmF2YVNjcmlwdENvcmUvanNjLnBybyk6IFNVQkRJUlMgKz0gSmF2
YVNjcmlwdENvcmUvanNjLnBybwogZXhpc3RzKCQkUFdEL1dlYktpdC9xdC90ZXN0cyk6IFNVQkRJ
UlMgKz0gV2ViS2l0L3F0L3Rlc3RzCiBleGlzdHMoJCRQV0QvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvKTogU1VCRElSUyArPSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGNmNGIyNTIuLjY1ZTBkZmYgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2MSBAQAorMjAxMC0wNi0wMyAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5h
cmRAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gVXBzdHJlYW0gdGhlIFdlYktpdCBRTUwgaW50ZWdyYXRpb24gcGx1Z2luCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA1MAorCisg
ICAgICAgIEFkZCB0byB0aGUgUXQgcG9ydCB0aGUgUU1MIFdlYktpdCBpbnRlZ3JhdGlvbiBwbHVn
aW4uCisgICAgICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXcgaXMgY3JlYXRpbmcgdGhlIGl0ZW0gdGhh
dCBpcyBhZGRlZAorICAgICAgICB0byB0aGUgUUdyYXBoaWNzU2NlbmUuIFRoZSAuaCBmaWxlIGlz
IG5vdCBtZWFudCB0byBiZQorICAgICAgICBwdWJsaWMuCisKKyAgICAgICAgUW1sRGlyIGlzIGRl
c2NyaWJpbmcgdGhlIHBsdWdpbi4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2RlY2xhcmF0aXZl
LnBybzogQWRkZWQuCisgICAgICAgICogZGVjbGFyYXRpdmUvcGx1Z2luLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXRRbWxQbHVnaW46OnJlZ2lzdGVyVHlwZXMpOgorICAgICAgICAqIGRlY2xh
cmF0aXZlL3FkZWNsYXJhdGl2ZXdlYnZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXdQcml2YXRlOjpRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXdQcml2YXRlOjp3aW5kb3dPYmplY3RzQXBwZW5kKToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OlFEZWNsYXJhdGl2ZVdlYlZpZXcpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
Vmlldzo6flFEZWNsYXJhdGl2ZVdlYlZpZXcpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmll
dzo6aW5pdCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpjb21wb25lbnRDb21wbGV0
ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXMpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViVmlldzo6cHJvZ3Jlc3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmll
dzo6ZG9Mb2FkU3RhcnRlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpkb0xvYWRQ
cm9ncmVzcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpwYWdlVXJsQ2hhbmdlZCk6
CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpkb0xvYWRGaW5pc2hlZCk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3Ojp1cmwpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmll
dzo6c2V0VXJsKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJlZFdpZHRo
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFByZWZlcnJlZFdpZHRoKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJlZEhlaWdodCk6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlldzo6ZXZhbHVhdGVKYXZhU2NyaXB0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OnByb3BhZ2F0ZUZvY3VzVG9XZWJQYWdlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OnVwZGF0ZURlY2xhcmF0aXZlV2ViVmlld1NpemUpOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlldzo6aW5pdGlhbExheW91dCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJW
aWV3Ojp1cGRhdGVDb250ZW50c1NpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6
Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmphdmFTY3Jp
cHRXaW5kb3dPYmplY3RzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnFtbEF0dGFj
aGVkUHJvcGVydGllcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6dXBk
YXRlV2luZG93T2JqZWN0cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpyZW5kZXJp
bmdFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFJlbmRlcmluZ0Vu
YWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2NlbmVNb3VzZUV2ZW50VG9N
b3VzZUV2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNjZW5lSG92ZXJNb3Zl
RXZlbnRUb01vdXNlRXZlbnQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6bW91c2VE
b3VibGVDbGlja0V2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmhldXJpc3Rp
Y1pvb20pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cHJlc3NHcmFiVGltZSk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVzc0dyYWJUaW1lKToKKyAgICAgICAg
KFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3Ojptb3VzZVJlbGVhc2VFdmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojp0aW1lckV2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNl
TW92ZUV2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmhvdmVyTW92ZUV2ZW50
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNjZW5lRXZlbnQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlldzo6YmFja0FjdGlvbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojpmb3J3YXJkQWN0aW9uKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnJl
bG9hZEFjdGlvbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdG9wQWN0aW9uKToK
KyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnRpdGxlKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6Omljb24pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0Wm9v
bUZhY3Rvcik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojp6b29tRmFjdG9yKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFN0YXR1c1RleHQpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViVmlldzo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3OjpzdGF0dXNUZXh0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6
OnBhZ2UpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0dGluZ3NPYmplY3QpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UGFnZSk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3Ojpsb2FkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Omh0bWwp
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0SHRtbCk6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6Omhpc3RvcnkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0dGluZ3MpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6Om5ld1dpbmRvd0NvbXBvbmVudCk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3OjpzZXROZXdXaW5kb3dDb21wb25lbnQpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViVmlldzo6bmV3V2luZG93UGFyZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OnNldE5ld1dpbmRvd1BhcmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpj
b250ZW50c1NpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y29udGVudHNTY2Fs
ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50c1NjYWxlKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmVsZW1lbnRBcmVhQXQpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViUGFnZTo6UURlY2xhcmF0aXZlV2ViUGFnZSk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJQYWdlOjp+UURlY2xhcmF0aXZlV2ViUGFnZSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJQYWdlOjpqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViUGFnZTo6Y2hvb3NlRmlsZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpq
YXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViUGFnZTo6amF2YVNjcmlw
dENvbmZpcm0pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViUGFnZTo6amF2YVNjcmlwdFByb21w
dCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjp2aWV3SXRlbSk6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJQYWdlOjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAqIGRlY2xhcmF0aXZl
L3FkZWNsYXJhdGl2ZXdlYnZpZXdfcC5oOiBBZGRlZC4KKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXc6Oik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojppc0NvbXBvbmVudENvbXBs
ZXRlUHVibGljKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hlZDo6UURlY2xh
cmF0aXZlV2ViVmlld0F0dGFjaGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRh
Y2hlZDo6d2luZG93T2JqZWN0TmFtZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3QXR0
YWNoZWQ6OnNldFdpbmRvd09iamVjdE5hbWUpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3FkZWNs
YXJhdGl2ZXdlYnZpZXdfcF9wLmg6IEFkZGVkLgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OlFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzdGFuZGFyZEZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNl
dHRpbmdzOjpzZXRGaXhlZEZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OnNlcmlmRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0U2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzYW5zU2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRp
bmdzOjpjdXJzaXZlRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGlu
Z3M6OmZhbnRhc3lGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzZXRGYW50YXN5Rm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6bWluaW11bUZvbnRTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpz
ZXRNaW5pbXVtRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6Om1p
bmltdW1Mb2dpY2FsRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6
OnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OmRlZmF1bHRGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0RGVmYXVsdEZvbnRTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpkZWZhdWx0Rml4ZWRGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0RGVmYXVsdEZpeGVkRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OmF1dG9Mb2FkSW1hZ2VzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzZXRBdXRvTG9hZEltYWdlcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6
amF2YXNjcmlwdEVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNl
dEphdmFzY3JpcHRFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpq
YXZhRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0SmF2YUVu
YWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnBsdWdpbnNFbmFibGVk
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRQbHVnaW5zRW5hYmxlZCk6
CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6amF2YXNjcmlwdENh
bk9wZW5XaW5kb3dzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRKYXZh
c2NyaXB0Q2FuT3BlbldpbmRvd3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6
OmphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldEphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViU2V0dGluZ3M6OmRldmVsb3BlckV4dHJhc0VuYWJsZWQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OmxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4p
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldExpbmtzSW5jbHVkZWRJbkZv
Y3VzQ2hhaW4pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6Onpvb21UZXh0T25s
eSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0Wm9vbVRleHRPbmx5KToK
KyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpwcmludEVsZW1lbnRCYWNrZ3JvdW5k
cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0UHJpbnRFbGVtZW50QmFj
a2dyb3VuZHMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6Om9mZmxpbmVTdG9y
YWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpz
ZXRPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJTZXR0aW5nczo6b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKToKKyAgICAgICAg
KFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OmxvY2FsU3RvcmFnZURh
dGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0TG9j
YWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRp
bmdzOjpsb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlNldHRpbmdzOjpzZXRMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzKToKKyAg
ICAgICAgKiBkZWNsYXJhdGl2ZS9xbWxkaXI6IEFkZGVkLgorCiAyMDEwLTA2LTAyICBUYXN1a3Ug
U3V6dWtpICA8dGFzdWt1LnN1enVraUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
U2hpbmljaGlybyBIYW1hamkuCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZGVj
bGFyYXRpdmUucHJvIGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZlLnBybwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjM1ZDM5Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZlLnBybwpAQCAtMCwwICsxLDYwIEBA
CitUQVJHRVQgID0gcW1sd2Via2l0cGx1Z2luCitUQVJHRVRQQVRIID0gb3JnL3dlYmtpdAorCitU
RU1QTEFURSA9IGxpYgorQ09ORklHICs9IHF0IHBsdWdpbgorCit3aW4zMnxtYWM6IXdpbmNlKjoh
d2luMzItbXN2YzohbWFjeC14Y29kZTpDT05GSUcgKz0gZGVidWdfYW5kX3JlbGVhc2UKKworUU1M
RElSRklMRSA9ICQke19QUk9fRklMRV9QV0RffS9xbWxkaXIKK2NvcHkyYnVpbGQuaW5wdXQgPSBR
TUxESVJGSUxFCitDT05GSUcoUVRESVJfYnVpbGQpIHsKKyAgICBjb3B5MmJ1aWxkLm91dHB1dCA9
ICQkUVRfQlVJTERfVFJFRS9pbXBvcnRzLyQkVEFSR0VUUEFUSC9xbWxkaXIKK30gZWxzZSB7Cisg
ICAgY29weTJidWlsZC5vdXRwdXQgPSAkJE9VVFBVVF9ESVIvaW1wb3J0cy8kJFRBUkdFVFBBVEgv
cW1sZGlyCit9CishY29udGFpbnMoVEVNUExBVEVfUFJFRklYLCB2Yyk6Y29weTJidWlsZC52YXJp
YWJsZV9vdXQgPSBQUkVfVEFSR0VUREVQUworY29weTJidWlsZC5jb21tYW5kcyA9ICQkUU1BS0Vf
Q09QWSAke1FNQUtFX0ZJTEVfSU59ICR7UU1BS0VfRklMRV9PVVR9Citjb3B5MmJ1aWxkLm5hbWUg
PSBDT1BZICR7UU1BS0VfRklMRV9JTn0KK2NvcHkyYnVpbGQuQ09ORklHICs9IG5vX2xpbmsKK1FN
QUtFX0VYVFJBX0NPTVBJTEVSUyArPSBjb3B5MmJ1aWxkCisKK1RBUkdFVCA9ICQkcXRMaWJyYXJ5
VGFyZ2V0KCQkVEFSR0VUKQorY29udGFpbnMoUVRfQ09ORklHLCByZWR1Y2VfZXhwb3J0cyk6Q09O
RklHICs9IGhpZGVfc3ltYm9scworCit3aW5jZSo6TElCUyArPSAkJFFNQUtFX0xJQlNfR1VJCisK
K3N5bWJpYW46IHsKKyAgICBUQVJHRVQuRVBPQ0FMTE9XRExMREFUQT0xCisgICAgVEFSR0VULkNB
UEFCSUxJVFkgPSBBbGwgLVRjYgorICAgIGxvYWQoYXJtY2Nfd2FybmluZ3MpCit9CisKK1FUICs9
IGRlY2xhcmF0aXZlCisKK2luY2x1ZGUoLi4vLi4vLi4vV2ViS2l0LnByaSkKKworU09VUkNFUyAr
PSBxZGVjbGFyYXRpdmV3ZWJ2aWV3LmNwcCBwbHVnaW4uY3BwCitIRUFERVJTICs9IHFkZWNsYXJh
dGl2ZXdlYnZpZXdfcC5oCisKK0NPTkZJRyhRVERJUl9idWlsZCkgeworICAgIERFU1RESVIgPSAk
JFFUX0JVSUxEX1RSRUUvaW1wb3J0cy8kJFRBUkdFVFBBVEgKK30gZWxzZSB7CisgICAgREVTVERJ
UiA9ICQkT1VUUFVUX0RJUi9pbXBvcnRzLyQkVEFSR0VUUEFUSAorfQordGFyZ2V0LnBhdGggPSAk
JFtRVF9JTlNUQUxMX0lNUE9SVFNdLyQkVEFSR0VUUEFUSAorCitxbWxkaXIuZmlsZXMgKz0gJCRQ
V0QvcW1sZGlyCitxbWxkaXIucGF0aCArPSAgJCRbUVRfSU5TVEFMTF9JTVBPUlRTXS8kJFRBUkdF
VFBBVEgKKworc3ltYmlhbjp7CisgICAgbG9hZChkYXRhX2NhZ2luZ19wYXRocykKKyAgICBpbmNs
dWRlKCQkUVRfU09VUkNFX1RSRUUvZGVtb3Mvc3ltYmlhbnBrZ3J1bGVzLnByaSkKKworICAgIGlt
cG9ydEZpbGVzLnNvdXJjZXMgPSBxbWx3ZWJraXRwbHVnaW4uZGxsIHFtbGRpcgorICAgIGltcG9y
dEZpbGVzLnBhdGggPSAkJFFUX0lNUE9SVFNfQkFTRV9ESVIvJCRUQVJHRVRQQVRICisKKyAgICBE
RVBMT1lNRU5UID0gaW1wb3J0RmlsZXMKK30KKworSU5TVEFMTFMgKz0gdGFyZ2V0IHFtbGRpcgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAgYi9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvcGx1Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kNjZhNzYwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdp
bi5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgInFk
ZWNsYXJhdGl2ZXdlYnZpZXdfcC5oIgorI2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9w
LmgiCisKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZS5oPgorI2luY2x1ZGUg
PFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZXh0ZW5zaW9ucGx1Z2luLmg+CisKK1FUX0JFR0lO
X05BTUVTUEFDRQorCitjbGFzcyBXZWJLaXRRbWxQbHVnaW4gOiBwdWJsaWMgUURlY2xhcmF0aXZl
RXh0ZW5zaW9uUGx1Z2luIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlclR5cGVzKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJU
KFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJvcmcud2Via2l0IikpOworICAg
ICAgICBxbWxSZWdpc3RlclR5cGU8UURlY2xhcmF0aXZlV2ViU2V0dGluZ3M+KCk7CisgICAgICAg
IHFtbFJlZ2lzdGVyVHlwZTxRRGVjbGFyYXRpdmVXZWJWaWV3Pih1cmksIDEsIDAsICJXZWJWaWV3
Iik7CisgICAgfQorfTsKKworUVRfRU5EX05BTUVTUEFDRQorCisjaW5jbHVkZSAicGx1Z2luLm1v
YyIKKworUV9FWFBPUlRfUExVR0lOMihxbWx3ZWJraXRwbHVnaW4sIFFUX1BSRVBFTkRfTkFNRVNQ
QUNFKFdlYktpdFFtbFBsdWdpbikpOworCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvcWRlY2xhcmF0aXZld2Vidmlldy5jcHAgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xh
cmF0aXZld2Vidmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1
OWMzZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xZGVjbGFyYXRp
dmV3ZWJ2aWV3LmNwcApAQCAtMCwwICsxLDExOTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKwor
I2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdlYnZpZXdfcC5oIgorI2luY2x1ZGUgInFkZWNsYXJhdGl2
ZXdlYnZpZXdfcF9wLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvUUJhc2ljVGltZXI+CisjaW5jbHVk
ZSA8UXRDb3JlL1FEZWJ1Zz4KKyNpbmNsdWRlIDxRdENvcmUvUUV2ZW50PgorI2luY2x1ZGUgPFF0
Q29yZS9RRmlsZT4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUNvbnRleHQ+
CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RRGVjbGFyYXRpdmVFbmdpbmU+CisjaW5jbHVkZSA8
UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmUuaD4KKyNpbmNsdWRlIDxRdEd1aS9RQXBwbGljYXRp
b24+CisjaW5jbHVkZSA8UXRHdWkvUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50PgorI2luY2x1ZGUg
PFF0R3VpL1FLZXlFdmVudD4KKyNpbmNsdWRlIDxRdEd1aS9RTW91c2VFdmVudD4KKyNpbmNsdWRl
IDxRdEd1aS9RUGVuPgorI2luY2x1ZGUgPFF0V2ViS2l0L1FXZWJFbGVtZW50PgorI2luY2x1ZGUg
PFF0V2ViS2l0L1FXZWJGcmFtZT4KKyNpbmNsdWRlIDxRdFdlYktpdC9RV2ViUGFnZT4KKyNpbmNs
dWRlIDxRdFdlYktpdC9RV2ViU2V0dGluZ3M+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorCitjbGFz
cyBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgUURlY2xhcmF0aXZl
V2ViVmlld1ByaXZhdGUoUURlY2xhcmF0aXZlV2ViVmlldyogcXEpCisgICAgICA6IHEocXEpCisg
ICAgICAsIHBhZ2UoMCkKKyAgICAgICwgcHJlZmVycmVkd2lkdGgoMCkKKyAgICAgICwgcHJlZmVy
cmVkaGVpZ2h0KDApCisgICAgICAsIHByb2dyZXNzKDEuMCkKKyAgICAgICwgc3RhdHVzKFFEZWNs
YXJhdGl2ZVdlYlZpZXc6Ok51bGwpCisgICAgICAsIHBlbmRpbmcoUGVuZGluZ05vbmUpCisgICAg
ICAsIG5ld1dpbmRvd0NvbXBvbmVudCgwKQorICAgICAgLCBuZXdXaW5kb3dQYXJlbnQoMCkKKyAg
ICAgICwgcHJlc3NUaW1lKDQwMCkKKyAgICAgICwgcmVuZGVyaW5nKHRydWUpCisgICAgeworICAg
ICAgICBRT2JqZWN0Ojpjb25uZWN0KHEsIFNJR05BTChmb2N1c0NoYW5nZWQoYm9vbCkpLCBxLCBT
TE9UKHByb3BhZ2F0ZUZvY3VzVG9XZWJQYWdlKGJvb2wpKSk7CisgICAgfQorCisgICAgUURlY2xh
cmF0aXZlV2ViVmlldyogcTsKKworICAgIFFVcmwgdXJsOyAvLyBwYWdlIHVybCBtaWdodCBiZSBk
aWZmZXJlbnQgaWYgaXQgaGFzIG5vdCBsb2FkZWQgeWV0CisgICAgUVdlYlBhZ2UqIHBhZ2U7Cisg
ICAgUUdyYXBoaWNzV2ViVmlldyogdmlldzsKKworICAgIGludCBwcmVmZXJyZWR3aWR0aCwgcHJl
ZmVycmVkaGVpZ2h0OworICAgIHFyZWFsIHByb2dyZXNzOworICAgIFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OlN0YXR1cyBzdGF0dXM7CisgICAgUVN0cmluZyBzdGF0dXNUZXh0OworICAgIGVudW0geyBQ
ZW5kaW5nTm9uZSwgUGVuZGluZ1VybCwgUGVuZGluZ0h0bWwsIFBlbmRpbmdDb250ZW50IH0gcGVu
ZGluZzsKKyAgICBRVXJsIHBlbmRpbmdVcmw7CisgICAgUVN0cmluZyBwZW5kaW5nU3RyaW5nOwor
ICAgIFFCeXRlQXJyYXkgcGVuZGluZ0RhdGE7CisgICAgbXV0YWJsZSBRRGVjbGFyYXRpdmVXZWJT
ZXR0aW5ncyBzZXR0aW5nczsKKyAgICBRRGVjbGFyYXRpdmVDb21wb25lbnQqIG5ld1dpbmRvd0Nv
bXBvbmVudDsKKyAgICBRRGVjbGFyYXRpdmVJdGVtKiBuZXdXaW5kb3dQYXJlbnQ7CisKKyAgICBR
QmFzaWNUaW1lciBwcmVzc1RpbWVyOworICAgIFFQb2ludCBwcmVzc1BvaW50OworICAgIGludCBw
cmVzc1RpbWU7IC8vIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHRvdWNoIGV2ZW50IGJlY29tZXMg
YSAidGFwIGFuZCBob2xkIgorCisgICAgc3RhdGljIHZvaWQgd2luZG93T2JqZWN0c0FwcGVuZChR
RGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4qIHByb3AsIFFPYmplY3QqIG8pCisgICAg
eworICAgICAgICBzdGF0aWNfY2FzdDxRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZSo+KHByb3At
PmRhdGEpLT53aW5kb3dPYmplY3RzLmFwcGVuZChvKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UURl
Y2xhcmF0aXZlV2ViVmlld1ByaXZhdGUqPihwcm9wLT5kYXRhKS0+dXBkYXRlV2luZG93T2JqZWN0
cygpOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlV2luZG93T2JqZWN0cygpOworICAgIFFPYmpl
Y3RMaXN0IHdpbmRvd09iamVjdHM7CisKKyAgICBib29sIHJlbmRlcmluZzsKK307CisKKy8qIQor
ICAgIFxxbWxjbGFzcyBXZWJWaWV3IFFEZWNsYXJhdGl2ZVdlYlZpZXcKKyAgICBcc2luY2UgNC43
CisgICAgXGJyaWVmIFRoZSBXZWJWaWV3IGl0ZW0gYWxsb3dzIHlvdSB0byBhZGQgd2ViIGNvbnRl
bnQgdG8gYSBjYW52YXMuCisgICAgXGluaGVyaXRzIEl0ZW0KKworICAgIEEgV2ViVmlldyByZW5k
ZXJzIHdlYiBjb250ZW50IGJhc2VkIG9uIGEgVVJMLgorCisgICAgVGhpcyB0eXBlIGlzIG1hZGUg
YXZhaWxhYmxlIGJ5IGltcG9ydGluZyB0aGUgXGMgb3JnLndlYmtpdCBtb2R1bGU6CisKKyAgICBc
Ym9sZHtpbXBvcnQgb3JnLndlYmtpdCAxLjB9CisKKyAgICBJZiB0aGUgd2lkdGggYW5kIGhlaWdo
dCBvZiB0aGUgaXRlbSBpcyBub3Qgc2V0LCB0aGV5IHdpbGwKKyAgICBkeW5hbWljYWxseSBhZGp1
c3QgdG8gYSBzaXplIGFwcHJvcHJpYXRlIGZvciB0aGUgY29udGVudC4KKyAgICBUaGlzIHdpZHRo
IG1heSBiZSBsYXJnZSBmb3IgdHlwaWNhbCBvbmxpbmUgd2ViIHBhZ2VzLgorCisgICAgSWYgdGhl
IHdpZHRoIG9yIGhlaWdodCBpcyBleHBsaWN0bHkgc2V0LCB0aGUgcmVuZGVyZWQgd2Vic2l0ZQor
ICAgIHdpbGwgYmUgY2xpcHBlZCwgbm90IHNjYWxlZCwgdG8gZml0IGludG8gdGhlIHNldCBkaW1l
bnNpb25zLgorCisgICAgSWYgdGhlIHByZWZlcnJlZFdpZHRoIGlzIHNldCwgdGhlIHdpZHRoIHdp
bGwgYmUgdGhpcyBhbW91bnQgb3IgbGFyZ2VyLAorICAgIHVzdWFsbHkgbGF5aW5nIG91dCB0aGUg
d2ViIGNvbnRlbnQgdG8gZml0IHRoZSBwcmVmZXJyZWRXaWR0aC4KKworICAgIFxxbWwKKyAgICBp
bXBvcnQgb3JnLndlYmtpdCAxLjAKKworICAgIFdlYlZpZXcgeworICAgICAgICB1cmw6ICJodHRw
Oi8vd3d3Lm5va2lhLmNvbSIKKyAgICAgICAgcHJlZmVycmVkV2lkdGg6IDQ5MAorICAgICAgICBw
cmVmZXJyZWRIZWlnaHQ6IDQwMAorICAgICAgICBzY2FsZTogMC41CisgICAgICAgIHNtb290aDog
ZmFsc2UKKyAgICAgICAgc21vb3RoQ2FjaGU6IHRydWUKKyAgICB9CisgICAgXGVuZHFtbAorCisg
ICAgXGltYWdlIHdlYnZpZXcucG5nCisKKyAgICBUaGUgaXRlbSBpbmNsdWRlcyBubyBzY3JvbGxp
bmcsIHNjYWxpbmcsCisgICAgdG9vbGJhcnMsIGV0Yy4sIHRob3NlIG11c3QgYmUgaW1wbGVtZW50
ZWQgYXJvdW5kIFdlYlZpZXcuIFNlZSB0aGUgV2ViQnJvd3NlciBleGFtcGxlCisgICAgZm9yIGEg
ZGVtb25zdHJhdGlvbiBvZiB0aGlzLgorCisgICAgV2hlbiB0aGlzIGl0ZW0gaGFzIGtleWJvYXJk
IGZvY3VzLCBhbGwga2V5Ym9hcmQgaW5wdXQgd2lsbCBiZSBzZW50IGRpcmVjdGx5IHRvIHRoZQor
ICAgIHdlYiBwYWdlIHdpdGhpbi4KKyovCisKKy8qIQorICAgIFxpbnRlcm5hbAorICAgIFxjbGFz
cyBRRGVjbGFyYXRpdmVXZWJWaWV3CisgICAgXGJyaWVmIFRoZSBRRGVjbGFyYXRpdmVXZWJWaWV3
IGNsYXNzIGFsbG93cyB5b3UgdG8gYWRkIHdlYiBjb250ZW50IHRvIGEgUURlY2xhcmF0aXZlVmll
dy4KKworICAgIEEgV2ViVmlldyByZW5kZXJzIHdlYiBjb250ZW50IGJhc2Ugb24gYSBVUkwuCisK
KyAgICBcaW1hZ2Ugd2Vidmlldy5wbmcKKworICAgIFRoZSBpdGVtIGluY2x1ZGVzIG5vIHNjcm9s
bGluZywgc2NhbGluZywKKyAgICB0b29sYmFycywgZXRjLiwgdGhvc2UgbXVzdCBiZSBpbXBsZW1l
bnRlZCBhcm91bmQgV2ViVmlldy4gU2VlIHRoZSBXZWJCcm93c2VyIGV4YW1wbGUKKyAgICBmb3Ig
YSBkZW1vbnN0cmF0aW9uIG9mIHRoaXMuCisKKyAgICBBIFFEZWNsYXJhdGl2ZVdlYlZpZXcgb2Jq
ZWN0IGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gUW1sIHVzaW5nIHRoZSB0YWcgXGwgV2ViVmlldy4K
KyovCisKK1FEZWNsYXJhdGl2ZVdlYlZpZXc6OlFEZWNsYXJhdGl2ZVdlYlZpZXcoUURlY2xhcmF0
aXZlSXRlbSAqcGFyZW50KSA6IFFEZWNsYXJhdGl2ZUl0ZW0ocGFyZW50KQoreworICAgIGluaXQo
KTsKK30KKworUURlY2xhcmF0aXZlV2ViVmlldzo6flFEZWNsYXJhdGl2ZVdlYlZpZXcoKQorewor
ICAgIGRlbGV0ZSBkLT5wYWdlOworICAgIGRlbGV0ZSBkOworfQorCit2b2lkIFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OmluaXQoKQoreworICAgIGQgPSBuZXcgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZh
dGUodGhpcyk7CisKKyAgICBRV2ViU2V0dGluZ3M6OmVuYWJsZVBlcnNpc3RlbnRTdG9yYWdlKCk7
CisKKyAgICBzZXRBY2NlcHRIb3ZlckV2ZW50cyh0cnVlKTsKKyAgICBzZXRBY2NlcHRlZE1vdXNl
QnV0dG9ucyhRdDo6TGVmdEJ1dHRvbik7CisgICAgc2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVt
SGFzTm9Db250ZW50cywgdHJ1ZSk7CisgICAgc2V0Q2xpcCh0cnVlKTsKKworICAgIGQtPnBhZ2Ug
PSAwOworICAgIGQtPnZpZXcgPSBuZXcgUUdyYXBoaWNzV2ViVmlldyh0aGlzKTsKKyAgICBkLT52
aWV3LT5zZXRSZXNpemVzVG9Db250ZW50cyh0cnVlKTsKKyAgICBkLT52aWV3LT5zZXRGbGFnKFFH
cmFwaGljc0l0ZW06Okl0ZW1TdGFja3NCZWhpbmRQYXJlbnQsIHRydWUpOworICAgIGNvbm5lY3Qo
ZC0+dmlldywgU0lHTkFMKGdlb21ldHJ5Q2hhbmdlZCgpKSwgdGhpcywgU0xPVCh1cGRhdGVEZWNs
YXJhdGl2ZVdlYlZpZXdTaXplKCkpKTsKKyAgICBjb25uZWN0KGQtPnZpZXcsIFNJR05BTChzY2Fs
ZUNoYW5nZWQoKSksIHRoaXMsIFNJR05BTChjb250ZW50c1NjYWxlQ2hhbmdlZCgpKSk7Cit9CisK
K3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6Y29tcG9uZW50Q29tcGxldGUoKQoreworICAgIFFE
ZWNsYXJhdGl2ZUl0ZW06OmNvbXBvbmVudENvbXBsZXRlKCk7CisgICAgc3dpdGNoIChkLT5wZW5k
aW5nKSB7CisgICAgY2FzZSBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6UGVuZGluZ1VybDoK
KyAgICAgICAgc2V0VXJsKGQtPnBlbmRpbmdVcmwpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjpQZW5kaW5nSHRtbDoKKyAgICAgICAgc2V0SHRt
bChkLT5wZW5kaW5nU3RyaW5nLCBkLT5wZW5kaW5nVXJsKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6UGVuZGluZ0NvbnRlbnQ6CisgICAgICAg
IHNldENvbnRlbnQoZC0+cGVuZGluZ0RhdGEsIGQtPnBlbmRpbmdTdHJpbmcsIGQtPnBlbmRpbmdV
cmwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgZC0+cGVuZGluZyA9IFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjpQZW5kaW5nTm9u
ZTsKKyAgICBkLT51cGRhdGVXaW5kb3dPYmplY3RzKCk7Cit9CisKK1FEZWNsYXJhdGl2ZVdlYlZp
ZXc6OlN0YXR1cyBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXMoKSBjb25zdAoreworICAgIHJl
dHVybiBkLT5zdGF0dXM7Cit9CisKKworLyohCisgICAgXHFtbHByb3BlcnR5IHJlYWwgV2ViVmll
dzo6cHJvZ3Jlc3MKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBwcm9ncmVzcyBvZiBsb2Fk
aW5nIHRoZSBjdXJyZW50IFVSTCwgZnJvbSAwIHRvIDEuCisKKyAgICBJZiB5b3UganVzdCB3YW50
IHRvIGtub3cgd2hlbiBwcm9ncmVzcyBnZXRzIHRvIDEsIHVzZQorICAgIFdlYlZpZXc6Om9uTG9h
ZEZpbmlzaGVkKCkgb3IgV2ViVmlldzo6b25Mb2FkRmFpbGVkKCkgaW5zdGVhZC4KKyovCitxcmVh
bCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojpwcm9ncmVzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQt
PnByb2dyZXNzOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmRvTG9hZFN0YXJ0ZWQo
KQoreworCisgICAgaWYgKCFkLT51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIGQtPnN0YXR1cyA9
IExvYWRpbmc7CisgICAgICAgIGVtaXQgc3RhdHVzQ2hhbmdlZChkLT5zdGF0dXMpOworICAgIH0K
KyAgICBlbWl0IGxvYWRTdGFydGVkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6
ZG9Mb2FkUHJvZ3Jlc3MoaW50IHApCit7CisgICAgaWYgKGQtPnByb2dyZXNzID09IHAgLyAxMDAu
MCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByb2dyZXNzID0gcCAvIDEwMC4wOworICAgIGVt
aXQgcHJvZ3Jlc3NDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6cGFn
ZVVybENoYW5nZWQoKQoreworICAgIHVwZGF0ZUNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKChk
LT51cmwuaXNFbXB0eSgpICYmIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpICE9IFFVcmwoUUxh
dGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkpCisgICAgICAgIHx8IChkLT51cmwgIT0gcGFnZSgp
LT5tYWluRnJhbWUoKS0+dXJsKCkgJiYgIXBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpLmlzRW1w
dHkoKSkpCisgICAgeworICAgICAgICBkLT51cmwgPSBwYWdlKCktPm1haW5GcmFtZSgpLT51cmwo
KTsKKyAgICAgICAgaWYgKGQtPnVybCA9PSBRVXJsKFFMYXRpbjFTdHJpbmcoImFib3V0OmJsYW5r
IikpKQorICAgICAgICAgICAgZC0+dXJsID0gUVVybCgpOworICAgICAgICBlbWl0IHVybENoYW5n
ZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2FkRmluaXNo
ZWQoYm9vbCBvaykKK3sKKworICAgIGlmICh0aXRsZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcGFn
ZVVybENoYW5nZWQoKTsgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI5MzkwIC0gcGFnZXMgd2l0aCBubyB0aXRsZSBuZXZlciBnZXQgdXJsQ2hhbmdlZCgpCisKKyAg
ICBpZiAob2spIHsKKyAgICAgICAgZC0+c3RhdHVzID0gZC0+dXJsLmlzRW1wdHkoKSA/IE51bGwg
OiBSZWFkeTsKKyAgICAgICAgZW1pdCBsb2FkRmluaXNoZWQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBkLT5zdGF0dXMgPSBFcnJvcjsKKyAgICAgICAgZW1pdCBsb2FkRmFpbGVkKCk7CisgICAg
fQorICAgIGVtaXQgc3RhdHVzQ2hhbmdlZChkLT5zdGF0dXMpOworfQorCisvKiEKKyAgICBccW1s
cHJvcGVydHkgdXJsIFdlYlZpZXc6OnVybAorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIFVS
TCB0byB0aGUgcGFnZSBkaXNwbGF5ZWQgaW4gdGhpcyBpdGVtLiBJdCBjYW4gYmUgc2V0LAorICAg
IGJ1dCBhbHNvIGNhbiBjaGFuZ2Ugc3BvbnRhbmVvdXNseSAoZWcuIGJlY2F1c2Ugb2YgbmV0d29y
ayByZWRpcmVjdGlvbikuCisKKyAgICBJZiB0aGUgdXJsIGlzIGVtcHR5LCB0aGUgcGFnZSBpcyBi
bGFuay4KKworICAgIFRoZSB1cmwgaXMgYWx3YXlzIGFic29sdXRlIChRTUwgd2lsbCByZXNvbHZl
IHJlbGF0aXZlIFVSTCBzdHJpbmdzIGluIHRoZSBjb250ZXh0CisgICAgb2YgdGhlIGNvbnRhaW5p
bmcgUU1MIGRvY3VtZW50KS4KKyovCitRVXJsIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVybCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGQtPnVybDsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3
OjpzZXRVcmwoY29uc3QgUVVybCAmdXJsKQoreworICAgIGlmICh1cmwgPT0gZC0+dXJsKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoaXNDb21wb25lbnRDb21wbGV0ZSgpKSB7CisgICAgICAg
IGQtPnVybCA9IHVybDsKKyAgICAgICAgdXBkYXRlQ29udGVudHNTaXplKCk7CisgICAgICAgIFFV
cmwgc2V0dXJsID0gdXJsOworICAgICAgICBpZiAoc2V0dXJsLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHNldHVybCA9IFFVcmwoUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSk7CisKKyAgICAg
ICAgUV9BU1NFUlQoIXNldHVybC5pc1JlbGF0aXZlKCkpOworCisgICAgICAgIHBhZ2UoKS0+bWFp
bkZyYW1lKCktPmxvYWQoc2V0dXJsKTsKKworICAgICAgICBlbWl0IHVybENoYW5nZWQoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBkLT5wZW5kaW5nID0gZC0+UGVuZGluZ1VybDsKKyAgICAgICAg
ZC0+cGVuZGluZ1VybCA9IHVybDsKKyAgICB9Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBp
bnQgV2ViVmlldzo6cHJlZmVycmVkV2lkdGgKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBp
ZGVhbCB3aWR0aCBmb3IgZGlzcGxheWluZyB0aGUgY3VycmVudCBVUkwuCisqLworaW50IFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJlZFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+
cHJlZmVycmVkd2lkdGg7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UHJlZmVy
cmVkV2lkdGgoaW50IHdpZHRoKQoreworICAgIGlmIChkLT5wcmVmZXJyZWR3aWR0aCA9PSB3aWR0
aCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByZWZlcnJlZHdpZHRoID0gd2lkdGg7CisgICAg
dXBkYXRlQ29udGVudHNTaXplKCk7CisgICAgZW1pdCBwcmVmZXJyZWRXaWR0aENoYW5nZWQoKTsK
K30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGludCBXZWJWaWV3OjpwcmVmZXJyZWRIZWlnaHQK
KyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBpZGVhbCBoZWlnaHQgZm9yIGRpc3BsYXlpbmcg
dGhlIGN1cnJlbnQgVVJMLgorICAgIFRoaXMgb25seSBhZmZlY3RzIHRoZSBhcmVhIHpvb21lZCBi
eSBoZXVyaXN0aWNab29tKCkuCisqLworaW50IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJl
ZEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnByZWZlcnJlZGhlaWdodDsKK30KKwor
dm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRIZWlnaHQoaW50IGhlaWdodCkK
K3sKKyAgICBpZiAoZC0+cHJlZmVycmVkaGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgcmV0dXJu
OworICAgIGQtPnByZWZlcnJlZGhlaWdodCA9IGhlaWdodDsKKyAgICB1cGRhdGVDb250ZW50c1Np
emUoKTsKKyAgICBlbWl0IHByZWZlcnJlZEhlaWdodENoYW5nZWQoKTsKK30KKworLyohCisgICAg
XHFtbG1ldGhvZCBib29sIFdlYlZpZXc6OmV2YWx1YXRlSmF2YVNjcmlwdChzdHJpbmcpCisKKyAg
ICBFdmFsdWF0ZXMgdGhlIFxhIHNjcmlwdFNvdXJjZSBKYXZhU2NyaXB0IGluc2lkZSB0aGUgY29u
dGV4dCBvZiB0aGUKKyAgICBtYWluIHdlYiBmcmFtZSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBv
ZiB0aGUgbGFzdCBleGVjdXRlZCBzdGF0ZW1lbnQuCisKKyAgICBOb3RlIHRoYXQgdGhpcyBKYXZh
U2NyaXB0IGRvZXMgXGUgbm90IGhhdmUgYW55IGFjY2VzcyB0byBRTUwgb2JqZWN0cworICAgIGV4
Y2VwdCBhcyBtYWRlIGF2YWlsYWJsZSBhcyB3aW5kb3dPYmplY3RzLgorKi8KK1FWYXJpYW50IFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OmV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJiBzY3Jp
cHRTb3VyY2UpCit7CisgICAgcmV0dXJuIHRoaXMtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1
YXRlSmF2YVNjcmlwdChzY3JpcHRTb3VyY2UpOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OnByb3BhZ2F0ZUZvY3VzVG9XZWJQYWdlKGJvb2wgaGFzRm9jdXMpCit7CisgICAgUUZvY3Vz
RXZlbnQgZXZlbnQoaGFzRm9jdXMgPyBRRXZlbnQ6OkZvY3VzSW4gOiBRRXZlbnQ6OkZvY3VzT3V0
KTsKKyAgICBwYWdlKCktPmV2ZW50KCZldmVudCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2Vi
Vmlldzo6dXBkYXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpCit7CisgICAgUVNpemVGIHNpemUg
PSBkLT52aWV3LT5nZW9tZXRyeSgpLnNpemUoKSAqIGNvbnRlbnRzU2NhbGUoKTsKKyAgICBzZXRJ
bXBsaWNpdFdpZHRoKHNpemUud2lkdGgoKSk7CisgICAgc2V0SW1wbGljaXRIZWlnaHQoc2l6ZS5o
ZWlnaHQoKSk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6aW5pdGlhbExheW91dCgp
Cit7CisgICAgLy8gbm90aGluZyB1c2VmdWwgdG8gZG8gYXQgdGhpcyBwb2ludAorfQorCit2b2lk
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVwZGF0ZUNvbnRlbnRzU2l6ZSgpCit7CisgICAgaWYgKGQt
PnBhZ2UpIHsKKyAgICAgICAgZC0+cGFnZS0+c2V0UHJlZmVycmVkQ29udGVudHNTaXplKFFTaXpl
KAorICAgICAgICAgICAgZC0+cHJlZmVycmVkd2lkdGg+MCA/IGQtPnByZWZlcnJlZHdpZHRoIDog
d2lkdGgoKSwKKyAgICAgICAgICAgIGQtPnByZWZlcnJlZGhlaWdodD4wID8gZC0+cHJlZmVycmVk
aGVpZ2h0IDogaGVpZ2h0KCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmll
dzo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUmVjdEYmIG9sZEdlb21ldHJ5KQoreworICAg
IGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpICYmIGQtPnBhZ2Up
IHsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBkLT5wYWdlLT5wcmVmZXJyZWRDb250ZW50
c1NpemUoKTsKKyAgICAgICAgaWYgKHdpZHRoVmFsaWQoKSkKKyAgICAgICAgICAgIGNvbnRlbnRT
aXplLnNldFdpZHRoKHdpZHRoKCkpOworICAgICAgICBpZiAoaGVpZ2h0VmFsaWQoKSkKKyAgICAg
ICAgICAgIGNvbnRlbnRTaXplLnNldEhlaWdodChoZWlnaHQoKSk7CisgICAgICAgIGlmIChjb250
ZW50U2l6ZSAhPSBkLT5wYWdlLT5wcmVmZXJyZWRDb250ZW50c1NpemUoKSkKKyAgICAgICAgICAg
IGQtPnBhZ2UtPnNldFByZWZlcnJlZENvbnRlbnRzU2l6ZShjb250ZW50U2l6ZSk7CisgICAgfQor
ICAgIFFEZWNsYXJhdGl2ZUl0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2Vv
bWV0cnkpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgbGlzdDxvYmplY3Q+IFdlYlZpZXc6
OmphdmFTY3JpcHRXaW5kb3dPYmplY3RzCisKKyAgICBBIGxpc3Qgb2YgUU1MIG9iamVjdHMgdG8g
ZXhwb3NlIHRvIHRoZSB3ZWIgcGFnZS4KKworICAgIEVhY2ggb2JqZWN0IHdpbGwgYmUgYWRkZWQg
YXMgYSBwcm9wZXJ0eSBvZiB0aGUgd2ViIGZyYW1lJ3Mgd2luZG93IG9iamVjdC4gIFRoZQorICAg
IHByb3BlcnR5IG5hbWUgaXMgY29udHJvbGxlZCBieSB0aGUgdmFsdWUgb2YgXGMgV2ViVmlldy53
aW5kb3dPYmplY3ROYW1lIAorICAgIGF0dGFjaGVkIHByb3BlcnR5LgorCisgICAgRXhwb3Npbmcg
UU1MIG9iamVjdHMgdG8gYSB3ZWIgcGFnZSBhbGxvd3MgSmF2YVNjcmlwdCBleGVjdXRpbmcgaW4g
dGhlIHdlYiAKKyAgICBwYWdlIGl0c2VsZiB0byBjb21tdW5pY2F0ZSB3aXRoIFFNTCwgYnkgcmVh
ZGluZyBhbmQgd3JpdGluZyBwcm9wZXJ0aWVzIGFuZAorICAgIGJ5IGNhbGxpbmcgbWV0aG9kcyBv
ZiB0aGUgZXhwb3NlZCBRTUwgb2JqZWN0cy4KKworICAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cg
dG8gY2FsbCBpbnRvIGEgUU1MIG1ldGhvZCB1c2luZyBhIHdpbmRvdyBvYmplY3QuCisKKyAgICBc
cW1sCisgICAgV2ViVmlldyB7CisgICAgICAgIGphdmFTY3JpcHRXaW5kb3dPYmplY3RzOiBRdE9i
amVjdCB7CisgICAgICAgICAgICBXZWJWaWV3LndpbmRvd09iamVjdE5hbWU6ICJxbWwiCisKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIHFtbENhbGwoKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coIlRoaXMgY2FsbCBpcyBpbiBRTUwhIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBodG1sOiAiPHNjcmlwdD5jb25zb2xlLmxvZyhcIlRoaXMgaXMgaW4gV2ViS2l0IVwi
KTsgd2luZG93LnFtbC5xbWxDYWxsKCk7PC9zY3JpcHQ+IgorICAgIH0KKyAgICBcZW5kcW1sCisK
KyAgICBUaGUgb3V0cHV0IG9mIHRoZSBleGFtcGxlIHdpbGwgYmU6CisgICAgXGNvZGUKKyAgICBU
aGlzIGlzIGluIFdlYktpdCEKKyAgICBUaGlzIGNhbGwgaXMgaW4gUU1MIQorICAgIFxlbmRjb2Rl
CisKKyAgICBJZiBKYXZhc2NyaXB0IGlzIG5vdCBlbmFibGVkIGZvciB0aGUgcGFnZSwgdGhlbiB0
aGlzIHByb3BlcnR5IGRvZXMgbm90aGluZy4KKyovCitRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8
UU9iamVjdD4gUURlY2xhcmF0aXZlV2ViVmlldzo6amF2YVNjcmlwdFdpbmRvd09iamVjdHMoKQor
eworICAgIHJldHVybiBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4odGhpcywgZCwg
JlFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjp3aW5kb3dPYmplY3RzQXBwZW5kKTsKK30KKwor
UURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpxbWxBdHRh
Y2hlZFByb3BlcnRpZXMoUU9iamVjdCogbykKK3sKKyAgICByZXR1cm4gbmV3IFFEZWNsYXJhdGl2
ZVdlYlZpZXdBdHRhY2hlZChvKTsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0
ZTo6dXBkYXRlV2luZG93T2JqZWN0cygpCit7CisgICAgaWYgKCFxLT5pc0NvbXBvbmVudENvbXBs
ZXRlUHVibGljKCkgfHwgIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGlp
ID0gMDsgaWkgPCB3aW5kb3dPYmplY3RzLmNvdW50KCk7ICsraWkpIHsKKyAgICAgICAgUU9iamVj
dCogb2JqZWN0ID0gd2luZG93T2JqZWN0cy5hdChpaSk7CisgICAgICAgIFFEZWNsYXJhdGl2ZVdl
YlZpZXdBdHRhY2hlZCogYXR0YWNoZWQgPSBzdGF0aWNfY2FzdDxRRGVjbGFyYXRpdmVXZWJWaWV3
QXR0YWNoZWQgKj4ocW1sQXR0YWNoZWRQcm9wZXJ0aWVzT2JqZWN0PFFEZWNsYXJhdGl2ZVdlYlZp
ZXc+KG9iamVjdCkpOworICAgICAgICBpZiAoYXR0YWNoZWQgJiYgIWF0dGFjaGVkLT53aW5kb3dP
YmplY3ROYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmFk
ZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdChhdHRhY2hlZC0+d2luZG93T2JqZWN0TmFtZSgpLCBv
YmplY3QpOworICAgIH0KK30KKworYm9vbCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpyZW5kZXJpbmdF
bmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cmVuZGVyaW5nOworfQorCit2b2lkIFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFJlbmRlcmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmIChkLT5yZW5kZXJpbmcgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGQt
PnJlbmRlcmluZyA9IGVuYWJsZWQ7CisgICAgZW1pdCByZW5kZXJpbmdFbmFibGVkQ2hhbmdlZCgp
OworCisgICAgZC0+dmlldy0+c2V0VGlsZWRCYWNraW5nU3RvcmVGcm96ZW4oIWVuYWJsZWQpOwor
fQorCitRTW91c2VFdmVudCogUURlY2xhcmF0aXZlV2ViVmlldzo6c2NlbmVNb3VzZUV2ZW50VG9N
b3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZSkKK3sKKyAgICBRRXZlbnQ6OlR5
cGUgdDsKKyAgICBzd2l0Y2ggKGUtPnR5cGUoKSkgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBR
RXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZVByZXNzOgorICAgICAgICB0ID0gUUV2ZW50OjpNb3Vz
ZUJ1dHRvblByZXNzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NT
Y2VuZU1vdXNlUmVsZWFzZToKKyAgICAgICAgdCA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlTW92
ZToKKyAgICAgICAgdCA9IFFFdmVudDo6TW91c2VNb3ZlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFFHcmFwaGljc1NjZW5lRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZURvdWJsZUNsaWNrOgor
ICAgICAgICB0ID0gUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBRTW91c2VFdmVudCogbWUgPSBuZXcgUU1vdXNlRXZlbnQodCwgKGUtPnBv
cygpIC8gY29udGVudHNTY2FsZSgpKS50b1BvaW50KCksIGUtPmJ1dHRvbigpLCBlLT5idXR0b25z
KCksIDApOworICAgIHJldHVybiBtZTsKK30KKworUU1vdXNlRXZlbnQqIFFEZWNsYXJhdGl2ZVdl
YlZpZXc6OnNjZW5lSG92ZXJNb3ZlRXZlbnRUb01vdXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVIb3Zl
ckV2ZW50KiBlKQoreworICAgIFFFdmVudDo6VHlwZSB0ID0gUUV2ZW50OjpNb3VzZU1vdmU7CisK
KyAgICBRTW91c2VFdmVudCogbWUgPSBuZXcgUU1vdXNlRXZlbnQodCwgKGUtPnBvcygpIC8gY29u
dGVudHNTY2FsZSgpKS50b1BvaW50KCksIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9uLCAwKTsK
KworICAgIHJldHVybiBtZTsKK30KKworLyohCisgICAgXHFtbHNpZ25hbCBXZWJWaWV3OjpvbkRv
dWJsZUNsaWNrKGNsaWNreCxjbGlja3kpCisKKyAgICBUaGUgV2ViVmlldyBkb2VzIG5vdCBwYXNz
IGRvdWJsZS1jbGljayBldmVudHMgdG8gdGhlIHdlYiBlbmdpbmUsIGJ1dCByYXRoZXIKKyAgICBl
bWl0cyB0aGlzIHNpZ25hbHMuCisqLworCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNl
RG91YmxlQ2xpY2tFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAg
IFFNb3VzZUV2ZW50KiBtZSA9IHNjZW5lTW91c2VFdmVudFRvTW91c2VFdmVudChldmVudCk7Cisg
ICAgZW1pdCBkb3VibGVDbGljayhtZS0+eCgpLCBtZS0+eSgpKTsKKyAgICBkZWxldGUgbWU7Cit9
CisKKy8qIQorICAgIFxxbWxtZXRob2QgYm9vbCBXZWJWaWV3OjpoZXVyaXN0aWNab29tKGNsaWNr
WCxjbGlja1ksbWF4em9vbSkKKworICAgIEZpbmRzIGEgem9vbSB0aGF0OgorICAgIFxsaXN0Cisg
ICAgXGkgc2hvd3MgYSB3aG9sZSBpdGVtCisgICAgXGkgaW5jbHVkZXMgKFxhIGNsaWNrWCwgXGEg
Y2xpY2tZKQorICAgIFxpIGZpdHMgaW50byB0aGUgcHJlZmVycmVkV2lkdGggYW5kIHByZWZlcnJl
ZEhlaWdodAorICAgIFxpIHpvb21zIGJ5IG5vIG1vcmUgdGhhbiBcYSBtYXh6b29tCisgICAgXGkg
aXMgbW9yZSB0aGFuIDEwJSBhYm92ZSB0aGUgY3VycmVudCB6b29tCisgICAgXGVuZGxpc3QKKwor
ICAgIElmIHN1Y2ggYSB6b29tIGV4aXN0cywgZW1pdHMgem9vbVRvKHpvb20sY2VudGVyWCxjZW50
ZXJZKSBhbmQgcmV0dXJucyB0cnVlOyBvdGhlcndpc2UsCisgICAgbm8gc2lnbmFsIGlzIGVtaXR0
ZWQgYW5kIHJldHVybnMgZmFsc2UuCisqLworYm9vbCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpoZXVy
aXN0aWNab29tKGludCBjbGlja1gsIGludCBjbGlja1ksIHFyZWFsIG1heHpvb20pCit7CisgICAg
aWYgKGNvbnRlbnRzU2NhbGUoKSA+PSBtYXh6b29tIC8gem9vbUZhY3RvcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcXJlYWwgb3pmID0gY29udGVudHNTY2FsZSgpOworICAgIFFSZWN0
IHNob3dhcmVhID0gZWxlbWVudEFyZWFBdChjbGlja1gsIGNsaWNrWSwgZC0+cHJlZmVycmVkd2lk
dGggLyBtYXh6b29tLCBkLT5wcmVmZXJyZWRoZWlnaHQgLyBtYXh6b29tKTsKKyAgICBxcmVhbCB6
ID0gcU1pbihxcmVhbChkLT5wcmVmZXJyZWR3aWR0aCkgLyBzaG93YXJlYS53aWR0aCgpLCBxcmVh
bChkLT5wcmVmZXJyZWRoZWlnaHQpIC8gc2hvd2FyZWEuaGVpZ2h0KCkpOworICAgIGlmICh6ID4g
bWF4em9vbSAvIHpvb21GYWN0b3IoKSkKKyAgICAgICAgeiA9IG1heHpvb20gLyB6b29tRmFjdG9y
KCk7CisgICAgaWYgKHogLyBvemYgPiAxLjIpIHsKKyAgICAgICAgUVJlY3RGIHIoc2hvd2FyZWEu
bGVmdCgpKnosIHNob3dhcmVhLnRvcCgpICogeiwgc2hvd2FyZWEud2lkdGgoKSAqIHosIHNob3dh
cmVhLmhlaWdodCgpICogeik7CisgICAgICAgIGVtaXQgem9vbVRvKHosIHIueCgpICsgci53aWR0
aCgpIC8gMiwgci55KCkgKyByLmhlaWdodCgpIC8gMik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBpbnQg
V2ViVmlldzo6cHJlc3NHcmFiVGltZQorCisgICAgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMg
dGhlIHVzZXIgbXVzdCBwcmVzcyBiZWZvcmUgdGhlIFdlYlZpZXcKKyAgICBzdGFydHMgcGFzc2lu
ZyBtb3ZlIGV2ZW50cyB0aHJvdWdoIHRvIHRoZSB3ZWIgZW5naW5lIChyYXRoZXIgdGhhbgorICAg
IGxldHRpbmcgb3RoZXIgUU1MIGVsZW1lbnRzIHN1Y2ggYXMgYSBGbGlja2FibGUgdGFrZSB0aGVt
KS4KKworICAgIERlZmF1bHRzIHRvIDQwMG1zLiBTZXQgdG8gMCB0byBhbHdheXMgZ3JhYiBhbmQg
cGFzcyBtb3ZlIGV2ZW50cyB0bworICAgIHRoZSB3ZWIgZW5naW5lLgorKi8KK2ludCBRRGVjbGFy
YXRpdmVXZWJWaWV3OjpwcmVzc0dyYWJUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cHJl
c3NUaW1lOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFByZXNzR3JhYlRpbWUo
aW50IG1zKQoreworICAgIGlmIChkLT5wcmVzc1RpbWUgPT0gbXMpIAorICAgICAgICByZXR1cm47
CisgICAgZC0+cHJlc3NUaW1lID0gbXM7CisgICAgZW1pdCBwcmVzc0dyYWJUaW1lQ2hhbmdlZCgp
OworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNlUHJlc3NFdmVudChRR3JhcGhp
Y3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHNldEZvY3VzKHRydWUpOworICAgIFFN
b3VzZUV2ZW50KiBtZSA9IHNjZW5lTW91c2VFdmVudFRvTW91c2VFdmVudChldmVudCk7CisKKyAg
ICBkLT5wcmVzc1BvaW50ID0gbWUtPnBvcygpOworICAgIGlmIChkLT5wcmVzc1RpbWUpIHsKKyAg
ICAgICAgZC0+cHJlc3NUaW1lci5zdGFydChkLT5wcmVzc1RpbWUsIHRoaXMpOworICAgICAgICBz
ZXRLZWVwTW91c2VHcmFiKGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBncmFiTW91c2Uo
KTsKKyAgICAgICAgc2V0S2VlcE1vdXNlR3JhYih0cnVlKTsKKyAgICB9CisKKyAgICBwYWdlKCkt
PmV2ZW50KG1lKTsKKyAgICBldmVudC0+c2V0QWNjZXB0ZWQoCisvKgorICBJdCBpcyBub3QgY29y
cmVjdCB0byBzZW5kIHRoZSBwcmVzcyBldmVudCB1cHdhcmRzLCBpZiBpdCBpcyBub3QgYWNjZXB0
ZWQgYnkgV2ViS2l0CisgIGUuZy4gcHVzaCBidXR0b24gZG9lcyBub3Qgd29yaywgaWYgZG9uZSBz
byBhcyBRR3JhcGhpY3NTY2VuZSB3aWxsIG5vdCBzZW5kIHRoZSByZWxlYXNlIGV2ZW50IGF0IGFs
bCB0byBXZWJLaXQKKyAgTWlnaHQgYmUgYSBidWcgaW4gV2ViS2l0LCB0aG91Z2gKKyAgKi8KKyNp
ZiAxIC8vIFFUX1ZFUlNJT04gPD0gMHgwNDA1MDAgLy8gWFhYIHNlZSBidWcgMjMwODM1CisgICAg
ICAgIHRydWUKKyNlbHNlCisgICAgICAgIG1lLT5pc0FjY2VwdGVkKCkKKyNlbmRpZgorICAgICAg
ICApOworICAgIGRlbGV0ZSBtZTsKKyAgICBpZiAoIWV2ZW50LT5pc0FjY2VwdGVkKCkpCisgICAg
ICAgIFFEZWNsYXJhdGl2ZUl0ZW06Om1vdXNlUHJlc3NFdmVudChldmVudCk7Cit9CisKK3ZvaWQg
UURlY2xhcmF0aXZlV2ViVmlldzo6bW91c2VSZWxlYXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3Vz
ZUV2ZW50KiBldmVudCkKK3sKKyAgICBRTW91c2VFdmVudCogbWUgPSBzY2VuZU1vdXNlRXZlbnRU
b01vdXNlRXZlbnQoZXZlbnQpOworICAgIHBhZ2UoKS0+ZXZlbnQobWUpOworICAgIGQtPnByZXNz
VGltZXIuc3RvcCgpOworICAgIGV2ZW50LT5zZXRBY2NlcHRlZCgKKy8qCisgIEl0IGlzIG5vdCBj
b3JyZWN0IHRvIHNlbmQgdGhlIHByZXNzIGV2ZW50IHVwd2FyZHMsIGlmIGl0IGlzIG5vdCBhY2Nl
cHRlZCBieSBXZWJLaXQKKyAgZS5nLiBwdXNoIGJ1dHRvbiBkb2VzIG5vdCB3b3JrLCBpZiBkb25l
IHNvIGFzIFFHcmFwaGljc1NjZW5lIHdpbGwgbm90IHNlbmQgYWxsIHRoZSBldmVudHMgdG8gV2Vi
S2l0CisgICovCisjaWYgMSAvLyBRVF9WRVJTSU9OIDw9IDB4MDQwNTAwIC8vIFhYWCBzZWUgYnVn
IDIzMDgzNQorICAgICAgICB0cnVlCisjZWxzZQorICAgICAgICBtZS0+aXNBY2NlcHRlZCgpCisj
ZW5kaWYKKyAgICAgICAgKTsKKyAgICBkZWxldGUgbWU7CisgICAgaWYgKCFldmVudC0+aXNBY2Nl
cHRlZCgpKQorICAgICAgICBRRGVjbGFyYXRpdmVJdGVtOjptb3VzZVJlbGVhc2VFdmVudChldmVu
dCk7CisgICAgc2V0S2VlcE1vdXNlR3JhYihmYWxzZSk7CisgICAgdW5ncmFiTW91c2UoKTsKK30K
Kwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVu
dCkKK3sKKyAgICBpZiAoZXZlbnQtPnRpbWVySWQoKSA9PSBkLT5wcmVzc1RpbWVyLnRpbWVySWQo
KSkgeworICAgICAgICBkLT5wcmVzc1RpbWVyLnN0b3AoKTsKKyAgICAgICAgZ3JhYk1vdXNlKCk7
CisgICAgICAgIHNldEtlZXBNb3VzZUdyYWIodHJ1ZSk7CisgICAgfQorfQorCit2b2lkIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6Om1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCog
ZXZlbnQpCit7CisgICAgUU1vdXNlRXZlbnQqIG1lID0gc2NlbmVNb3VzZUV2ZW50VG9Nb3VzZUV2
ZW50KGV2ZW50KTsKKyAgICBpZiAoZC0+cHJlc3NUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGlmICgobWUtPnBvcygpIC0gZC0+cHJlc3NQb2ludCkubWFuaGF0dGFuTGVuZ3RoKCkgPiBRQXBw
bGljYXRpb246OnN0YXJ0RHJhZ0Rpc3RhbmNlKCkpCisgICAgICAgICAgICBkLT5wcmVzc1RpbWVy
LnN0b3AoKTsKKyAgICB9CisgICAgaWYgKGtlZXBNb3VzZUdyYWIoKSkgeworICAgICAgICBwYWdl
KCktPmV2ZW50KG1lKTsKKyAgICAgICAgZXZlbnQtPnNldEFjY2VwdGVkKAorLyoKKyAgSXQgaXMg
bm90IGNvcnJlY3QgdG8gc2VuZCB0aGUgcHJlc3MgZXZlbnQgdXB3YXJkcywgaWYgaXQgaXMgbm90
IGFjY2VwdGVkIGJ5IFdlYktpdAorICBlLmcuIHB1c2ggYnV0dG9uIGRvZXMgbm90IHdvcmssIGlm
IGRvbmUgc28gYXMgUUdyYXBoaWNzU2NlbmUgd2lsbCBub3Qgc2VuZCB0aGUgcmVsZWFzZSBldmVu
dCBhdCBhbGwgdG8gV2ViS2l0CisgIE1pZ2h0IGJlIGEgYnVnIGluIFdlYktpdCwgdGhvdWdoCisg
ICovCisjaWYgMSAvLyBRVF9WRVJTSU9OIDw9IDB4MDQwNTAwIC8vIFhYWCBzZWUgYnVnIDIzMDgz
NQorICAgICAgICAgICAgdHJ1ZQorI2Vsc2UKKyAgICAgICAgICAgIG1lLT5pc0FjY2VwdGVkKCkK
KyNlbmRpZgorICAgICAgICApOworICAgIH0KKyAgICBkZWxldGUgbWU7CisgICAgaWYgKCFldmVu
dC0+aXNBY2NlcHRlZCgpKQorICAgICAgICBRRGVjbGFyYXRpdmVJdGVtOjptb3VzZU1vdmVFdmVu
dChldmVudCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6aG92ZXJNb3ZlRXZlbnQo
UUdyYXBoaWNzU2NlbmVIb3ZlckV2ZW50KiBldmVudCkKK3sKKyAgICBRTW91c2VFdmVudCogbWUg
PSBzY2VuZUhvdmVyTW92ZUV2ZW50VG9Nb3VzZUV2ZW50KGV2ZW50KTsKKyAgICBwYWdlKCktPmV2
ZW50KG1lKTsKKyAgICBldmVudC0+c2V0QWNjZXB0ZWQoCisjaWYgUVRfVkVSU0lPTiA8PSAweDA0
MDUwMCAvLyBYWFggc2VlIGJ1ZyAyMzA4MzUKKyAgICAgICAgdHJ1ZQorI2Vsc2UKKyAgICAgICAg
bWUtPmlzQWNjZXB0ZWQoKQorI2VuZGlmCisgICAgKTsKKyAgICBkZWxldGUgbWU7CisgICAgaWYg
KCFldmVudC0+aXNBY2NlcHRlZCgpKQorICAgICAgICBRRGVjbGFyYXRpdmVJdGVtOjpob3Zlck1v
dmVFdmVudChldmVudCk7Cit9CisKK2Jvb2wgUURlY2xhcmF0aXZlV2ViVmlldzo6c2NlbmVFdmVu
dChRRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6S2V5
UHJlc3MgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OktleVJlbGVhc2UpCisgICAgICAgIC8v
IEtleSBldmVudHMgZ28gdG8gdGhlIHBhZ2UKKyAgICAgICAgcmV0dXJuIHBhZ2UoKS0+ZXZlbnQo
ZXZlbnQpOworICAgIHJldHVybiBRRGVjbGFyYXRpdmVJdGVtOjpzY2VuZUV2ZW50KGV2ZW50KTsK
K30KKworCisvKiEKKyAgICBccW1scHJvcGVydHkgYWN0aW9uIFdlYlZpZXc6OmJhY2sKKyAgICBU
aGlzIHByb3BlcnR5IGhvbGRzIHRoZSBhY3Rpb24gZm9yIGNhdXNpbmcgdGhlIHByZXZpb3VzIFVS
TCBpbiB0aGUgaGlzdG9yeSB0byBiZSBkaXNwbGF5ZWQuCisqLworUUFjdGlvbiogUURlY2xhcmF0
aXZlV2ViVmlldzo6YmFja0FjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+YWN0
aW9uKFFXZWJQYWdlOjpCYWNrKTsKK30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGFjdGlvbiBX
ZWJWaWV3Ojpmb3J3YXJkCisgICAgVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgYWN0aW9uIGZvciBj
YXVzaW5nIHRoZSBuZXh0IFVSTCBpbiB0aGUgaGlzdG9yeSB0byBiZSBkaXNwbGF5ZWQuCisqLwor
UUFjdGlvbiogUURlY2xhcmF0aXZlV2ViVmlldzo6Zm9yd2FyZEFjdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpGb3J3YXJkKTsKK30KKworLyohCisg
ICAgXHFtbHByb3BlcnR5IGFjdGlvbiBXZWJWaWV3OjpyZWxvYWQKKyAgICBUaGlzIHByb3BlcnR5
IGhvbGRzIHRoZSBhY3Rpb24gZm9yIHJlbG9hZGluZyB3aXRoIHRoZSBjdXJyZW50IFVSTAorKi8K
K1FBY3Rpb24qIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnJlbG9hZEFjdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpSZWxvYWQpOworfQorCisvKiEKKyAg
ICBccW1scHJvcGVydHkgYWN0aW9uIFdlYlZpZXc6OnN0b3AKKyAgICBUaGlzIHByb3BlcnR5IGhv
bGRzIHRoZSBhY3Rpb24gZm9yIHN0b3BwaW5nIGxvYWRpbmcgd2l0aCB0aGUgY3VycmVudCBVUkwK
KyovCitRQWN0aW9uKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdG9wQWN0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlN0b3ApOworfQorCisvKiEKKyAg
ICBccW1scHJvcGVydHkgcmVhbCBXZWJWaWV3Ojp0aXRsZQorICAgIFRoaXMgcHJvcGVydHkgaG9s
ZHMgdGhlIHRpdGxlIG9mIHRoZSB3ZWIgcGFnZSBjdXJyZW50bHkgdmlld2VkCisKKyAgICBCeSBk
ZWZhdWx0LCB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIGFuIGVtcHR5IHN0cmluZy4KKyovCitRU3Ry
aW5nIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFn
ZSgpLT5tYWluRnJhbWUoKS0+dGl0bGUoKTsKK30KKworCisKKy8qIQorICAgIFxxbWxwcm9wZXJ0
eSBwaXhtYXAgV2ViVmlldzo6aWNvbgorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIGljb24g
YXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWIgcGFnZSBjdXJyZW50bHkgdmlld2VkCisqLworUVBpeG1h
cCBRRGVjbGFyYXRpdmVXZWJWaWV3OjppY29uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgp
LT5tYWluRnJhbWUoKS0+aWNvbigpLnBpeG1hcChRU2l6ZSgyNTYsIDI1NikpOworfQorCisKKy8q
IQorICAgIFxxbWxwcm9wZXJ0eSByZWFsIFdlYlZpZXc6Onpvb21GYWN0b3IKKyAgICBUaGlzIHBy
b3BlcnR5IGhvbGRzIHRoZSBtdWx0aXBsaWVyIHVzZWQgdG8gc2NhbGUgdGhlIGNvbnRlbnRzIG9m
IGEgV2ViIHBhZ2UuCisqLwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRab29tRmFjdG9y
KHFyZWFsIGZhY3RvcikKK3sKKyAgICBpZiAoZmFjdG9yID09IHBhZ2UoKS0+bWFpbkZyYW1lKCkt
Pnpvb21GYWN0b3IoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZSgpLT5tYWluRnJhbWUo
KS0+c2V0Wm9vbUZhY3RvcihmYWN0b3IpOworICAgIHVwZGF0ZUNvbnRlbnRzU2l6ZSgpOworCisg
ICAgZW1pdCB6b29tRmFjdG9yQ2hhbmdlZCgpOworfQorCitxcmVhbCBRRGVjbGFyYXRpdmVXZWJW
aWV3Ojp6b29tRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5tYWluRnJhbWUo
KS0+em9vbUZhY3RvcigpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZp
ZXc6OnN0YXR1c1RleHQKKworICAgIFRoaXMgcHJvcGVydHkgaXMgdGhlIGN1cnJlbnQgc3RhdHVz
IHN1Z2dlc3RlZCBieSB0aGUgY3VycmVudCB3ZWIgcGFnZS4gSW4gYSB3ZWIgYnJvd3NlciwKKyAg
ICBzdWNoIHN0YXR1cyBpcyBvZnRlbiBzaG93biBpbiBzb21lIGtpbmQgb2Ygc3RhdHVzIGJhci4K
KyovCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFN0YXR1c1RleHQoY29uc3QgUVN0cmlu
ZyYgcykKK3sKKyAgICBkLT5zdGF0dXNUZXh0ID0gczsKKyAgICBlbWl0IHN0YXR1c1RleHRDaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6d2luZG93T2JqZWN0Q2xlYXJl
ZCgpCit7CisgICAgZC0+dXBkYXRlV2luZG93T2JqZWN0cygpOworfQorCitRU3RyaW5nIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OnN0YXR1c1RleHQoKSBjb25zdAoreworICAgIHJldHVybiBkLT5zdGF0
dXNUZXh0OworfQorCitRV2ViUGFnZSogUURlY2xhcmF0aXZlV2ViVmlldzo6cGFnZSgpIGNvbnN0
Cit7CisKKyAgICBpZiAoIWQtPnBhZ2UpIHsKKyAgICAgICAgUURlY2xhcmF0aXZlV2ViVmlldyog
c2VsZiA9IGNvbnN0X2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlldyo+KHRoaXMpOworICAgICAgICBR
V2ViUGFnZSogd3AgPSBuZXcgUURlY2xhcmF0aXZlV2ViUGFnZShzZWxmKTsKKworICAgICAgICB3
cC0+c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIocW1sRW5naW5lKHRoaXMpLT5uZXR3b3JrQWNjZXNz
TWFuYWdlcigpKTsKKworICAgICAgICBzZWxmLT5zZXRQYWdlKHdwKTsKKworICAgICAgICByZXR1
cm4gd3A7CisgICAgfQorCisgICAgcmV0dXJuIGQtPnBhZ2U7Cit9CisKKworLy8gVGhlIFFPYmpl
Y3QgaW50ZXJmYWNlIHRvIHNldHRpbmdzKCkuCisvKiEKKyAgICBccW1scHJvcGVydHkgc3RyaW5n
IFdlYlZpZXc6OnNldHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseQorICAgIFxxbWxwcm9wZXJ0eSBz
dHJpbmcgV2ViVmlldzo6c2V0dGluZ3MuZml4ZWRGb250RmFtaWx5CisgICAgXHFtbHByb3BlcnR5
IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5zZXJpZkZvbnRGYW1pbHkKKyAgICBccW1scHJvcGVy
dHkgc3RyaW5nIFdlYlZpZXc6OnNldHRpbmdzLnNhbnNTZXJpZkZvbnRGYW1pbHkKKyAgICBccW1s
cHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6OnNldHRpbmdzLmN1cnNpdmVGb250RmFtaWx5CisgICAg
XHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5mYW50YXN5Rm9udEZhbWlseQor
CisgICAgXHFtbHByb3BlcnR5IGludCBXZWJWaWV3OjpzZXR0aW5ncy5taW5pbXVtRm9udFNpemUK
KyAgICBccW1scHJvcGVydHkgaW50IFdlYlZpZXc6OnNldHRpbmdzLm1pbmltdW1Mb2dpY2FsRm9u
dFNpemUKKyAgICBccW1scHJvcGVydHkgaW50IFdlYlZpZXc6OnNldHRpbmdzLmRlZmF1bHRGb250
U2l6ZQorICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmlldzo6c2V0dGluZ3MuZGVmYXVsdEZpeGVk
Rm9udFNpemUKKworICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLmF1dG9M
b2FkSW1hZ2VzCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MuamF2YXNj
cmlwdEVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5qYXZh
RW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnBsdWdpbnNF
bmFibGVkCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MucHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLmph
dmFzY3JpcHRDYW5PcGVuV2luZG93cworICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNl
dHRpbmdzLmphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQKKyAgICBccW1scHJvcGVydHkgYm9v
bCBXZWJWaWV3OjpzZXR0aW5ncy5kZXZlbG9wZXJFeHRyYXNFbmFibGVkCisgICAgXHFtbHByb3Bl
cnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MubGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbgorICAg
IFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnpvb21UZXh0T25seQorICAgIFxx
bWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnByaW50RWxlbWVudEJhY2tncm91bmRz
CisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3Mub2ZmbGluZVN0b3JhZ2VE
YXRhYmFzZUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5v
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9vbCBX
ZWJWaWV3OjpzZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQKKyAgICBccW1scHJv
cGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5sb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVV
cmxzCisKKyAgICBUaGVzZSBwcm9wZXJ0aWVzIGdpdmUgYWNjZXNzIHRvIHRoZSBzZXR0aW5ncyBj
b250cm9sbGluZyB0aGUgd2ViIHZpZXcuCisKKyAgICBTZWUgUVdlYlNldHRpbmdzIGZvciBkZXRh
aWxzIG9mIHRoZXNlIHByb3BlcnRpZXMuCisKKyAgICBccW1sCisgICAgICAgIFdlYlZpZXcgewor
ICAgICAgICAgICAgc2V0dGluZ3MucGx1Z2luc0VuYWJsZWQ6IHRydWUKKyAgICAgICAgICAgIHNl
dHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseTogIkFyaWFsIgorICAgICAgICAgICAgLi4uCisgICAg
ICAgIH0KKyAgICBcZW5kcW1sCisqLworUURlY2xhcmF0aXZlV2ViU2V0dGluZ3MqIFFEZWNsYXJh
dGl2ZVdlYlZpZXc6OnNldHRpbmdzT2JqZWN0KCkgY29uc3QKK3sKKyAgICBkLT5zZXR0aW5ncy5z
ID0gcGFnZSgpLT5zZXR0aW5ncygpOworICAgIHJldHVybiAmZC0+c2V0dGluZ3M7Cit9CisKK3Zv
aWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UGFnZShRV2ViUGFnZSogcGFnZSkKK3sKKyAgICBp
ZiAoZC0+cGFnZSA9PSBwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGQtPnBhZ2UpIHsK
KyAgICAgICAgaWYgKGQtPnBhZ2UtPnBhcmVudCgpID09IHRoaXMpCisgICAgICAgICAgICBkZWxl
dGUgZC0+cGFnZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZC0+cGFnZS0+ZGlzY29ubmVj
dCh0aGlzKTsKKyAgICB9CisgICAgZC0+cGFnZSA9IHBhZ2U7CisgICAgdXBkYXRlQ29udGVudHNT
aXplKCk7CisgICAgZC0+cGFnZS0+bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGljeShRdDo6
SG9yaXpvbnRhbCwgUXQ6OlNjcm9sbEJhckFsd2F5c09mZik7CisgICAgZC0+cGFnZS0+bWFpbkZy
YW1lKCktPnNldFNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwsIFF0OjpTY3JvbGxCYXJBbHdh
eXNPZmYpOworICAgIGNvbm5lY3QoZC0+cGFnZS0+bWFpbkZyYW1lKCksIFNJR05BTCh1cmxDaGFu
Z2VkKFFVcmwpKSwgdGhpcywgU0xPVChwYWdlVXJsQ2hhbmdlZCgpKSk7CisgICAgY29ubmVjdChk
LT5wYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSksIHRoaXMs
IFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpKTsKKyAgICBjb25uZWN0KGQtPnBhZ2UtPm1h
aW5GcmFtZSgpLCBTSUdOQUwodGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSwgdGhpcywgU0lHTkFMKGlj
b25DaGFuZ2VkKCkpKTsKKyAgICBjb25uZWN0KGQtPnBhZ2UtPm1haW5GcmFtZSgpLCBTSUdOQUwo
aWNvbkNoYW5nZWQoKSksIHRoaXMsIFNJR05BTChpY29uQ2hhbmdlZCgpKSk7CisgICAgY29ubmVj
dChkLT5wYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKGluaXRpYWxMYXlvdXRDb21wbGV0ZWQoKSks
IHRoaXMsIFNMT1QoaW5pdGlhbExheW91dCgpKSk7CisgICAgY29ubmVjdChkLT5wYWdlLT5tYWlu
RnJhbWUoKSwgU0lHTkFMKGNvbnRlbnRzU2l6ZUNoYW5nZWQoUVNpemUpKSwgdGhpcywgU0lHTkFM
KGNvbnRlbnRzU2l6ZUNoYW5nZWQoUVNpemUpKSk7CisKKyAgICBjb25uZWN0KGQtPnBhZ2UsIFNJ
R05BTChsb2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChkb0xvYWRTdGFydGVkKCkpKTsKKyAgICBj
b25uZWN0KGQtPnBhZ2UsIFNJR05BTChsb2FkUHJvZ3Jlc3MoaW50KSksIHRoaXMsIFNMT1QoZG9M
b2FkUHJvZ3Jlc3MoaW50KSkpOworICAgIGNvbm5lY3QoZC0+cGFnZSwgU0lHTkFMKGxvYWRGaW5p
c2hlZChib29sKSksIHRoaXMsIFNMT1QoZG9Mb2FkRmluaXNoZWQoYm9vbCkpKTsKKyAgICBjb25u
ZWN0KGQtPnBhZ2UsIFNJR05BTChzdGF0dXNCYXJNZXNzYWdlKFFTdHJpbmcpKSwgdGhpcywgU0xP
VChzZXRTdGF0dXNUZXh0KFFTdHJpbmcpKSk7CisKKyAgICBjb25uZWN0KGQtPnBhZ2UtPm1haW5G
cmFtZSgpLCBTSUdOQUwoamF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKSksIHRoaXMsIFNM
T1Qod2luZG93T2JqZWN0Q2xlYXJlZCgpKSk7CisKKyAgICBkLT5wYWdlLT5zZXR0aW5ncygpLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpUaWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQsIHRydWUp
OworCisgICAgZC0+dmlldy0+c2V0UGFnZShwYWdlKTsKK30KKworLyohCisgICAgXHFtbHNpZ25h
bCBXZWJWaWV3OjpvbkxvYWRTdGFydGVkKCkKKworICAgIFRoaXMgaGFuZGxlciBpcyBjYWxsZWQg
d2hlbiB0aGUgd2ViIGVuZ2luZSBiZWdpbnMgbG9hZGluZworICAgIGEgcGFnZS4gTGF0ZXIsIFdl
YlZpZXc6Om9uTG9hZEZpbmlzaGVkKCkgb3IgV2ViVmlldzo6b25Mb2FkRmFpbGVkKCkKKyAgICB3
aWxsIGJlIGVtaXR0ZWQuCisqLworCisvKiEKKyAgICBccW1sc2lnbmFsIFdlYlZpZXc6Om9uTG9h
ZEZpbmlzaGVkKCkKKworICAgIFRoaXMgaGFuZGxlciBpcyBjYWxsZWQgd2hlbiB0aGUgd2ViIGVu
Z2luZSBcZSBzdWNjZXNzZnVsbHkKKyAgICBmaW5pc2hlcyBsb2FkaW5nIGEgcGFnZSwgaW5jbHVk
aW5nIGFueSBjb21wb25lbnQgY29udGVudAorICAgIChXZWJWaWV3OjpvbkxvYWRGYWlsZWQoKSB3
aWxsIGJlIGVtaXR0ZWQgb3RoZXJ3aXNlKS4KKworICAgIFxzYSBwcm9ncmVzcworKi8KKworLyoh
CisgICAgXHFtbHNpZ25hbCBXZWJWaWV3OjpvbkxvYWRGYWlsZWQoKQorCisgICAgVGhpcyBoYW5k
bGVyIGlzIGNhbGxlZCB3aGVuIHRoZSB3ZWIgZW5naW5lIGZhaWxzIGxvYWRpbmcKKyAgICBhIHBh
Z2Ugb3IgYW55IGNvbXBvbmVudCBjb250ZW50CisgICAgKFdlYlZpZXc6Om9uTG9hZEZpbmlzaGVk
KCkgd2lsbCBiZSBlbWl0dGVkIG9uIHN1Y2Nlc3MpLgorKi8KKwordm9pZCBRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojpsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwKKyAgICAgICAgICBR
TmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24sCisgICAgICAgICAgY29u
c3QgUUJ5dGVBcnJheSAmYm9keSkKK3sKKyAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkKHJl
cXVlc3QsIG9wZXJhdGlvbiwgYm9keSk7Cit9CisKK1FTdHJpbmcgUURlY2xhcmF0aXZlV2ViVmll
dzo6aHRtbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnRvSHRt
bCgpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6Omh0bWwKKyAg
ICBUaGlzIHByb3BlcnR5IGhvbGRzIEhUTUwgdGV4dCBzZXQgZGlyZWN0bHkKKworICAgIFRoZSBo
dG1sIHByb3BlcnR5IGNhbiBiZSBzZXQgYXMgYSBzdHJpbmcuCisKKyAgICBccW1sCisgICAgV2Vi
VmlldyB7CisgICAgICAgIGh0bWw6ICI8cD5UaGlzIGlzIDxiPkhUTUw8L2I+LiIKKyAgICB9Cisg
ICAgXGVuZHFtbAorKi8KK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0SHRtbChjb25zdCBR
U3RyaW5nICZodG1sLCBjb25zdCBRVXJsICZiYXNlVXJsKQoreworICAgIHVwZGF0ZUNvbnRlbnRz
U2l6ZSgpOworICAgIGlmIChpc0NvbXBvbmVudENvbXBsZXRlKCkpCisgICAgICAgIHBhZ2UoKS0+
bWFpbkZyYW1lKCktPnNldEh0bWwoaHRtbCwgYmFzZVVybCk7CisgICAgZWxzZSB7CisgICAgICAg
IGQtPnBlbmRpbmcgPSBkLT5QZW5kaW5nSHRtbDsKKyAgICAgICAgZC0+cGVuZGluZ1VybCA9IGJh
c2VVcmw7CisgICAgICAgIGQtPnBlbmRpbmdTdHJpbmcgPSBodG1sOworICAgIH0KKyAgICBlbWl0
IGh0bWxDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0Q29udGVu
dChjb25zdCBRQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwgY29uc3Qg
UVVybCAmYmFzZVVybCkKK3sKKyAgICB1cGRhdGVDb250ZW50c1NpemUoKTsKKworICAgIGlmIChp
c0NvbXBvbmVudENvbXBsZXRlKCkpCisgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnNldENv
bnRlbnQoZGF0YSwgbWltZVR5cGUsIHFtbENvbnRleHQodGhpcyktPnJlc29sdmVkVXJsKGJhc2VV
cmwpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZC0+cGVuZGluZyA9IGQtPlBlbmRpbmdDb250ZW50
OworICAgICAgICBkLT5wZW5kaW5nVXJsID0gYmFzZVVybDsKKyAgICAgICAgZC0+cGVuZGluZ1N0
cmluZyA9IG1pbWVUeXBlOworICAgICAgICBkLT5wZW5kaW5nRGF0YSA9IGRhdGE7CisgICAgfQor
fQorCitRV2ViSGlzdG9yeSogUURlY2xhcmF0aXZlV2ViVmlldzo6aGlzdG9yeSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHBhZ2UoKS0+aGlzdG9yeSgpOworfQorCitRV2ViU2V0dGluZ3MqIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5z
ZXR0aW5ncygpOworfQorCitRRGVjbGFyYXRpdmVXZWJWaWV3KiBRRGVjbGFyYXRpdmVXZWJWaWV3
OjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFFXZWJQYWdlOjpXZWJCcm93c2VyV2luZG93OiB7CisgICAg
ICAgIGlmICghZC0+bmV3V2luZG93Q29tcG9uZW50ICYmIGQtPm5ld1dpbmRvd1BhcmVudCkKKyAg
ICAgICAgICAgIHFXYXJuaW5nKCJXZWJWaWV3OjpuZXdXaW5kb3dDb21wb25lbnQgbm90IHNldCAt
IFdlYlZpZXc6Om5ld1dpbmRvd1BhcmVudCBpZ25vcmVkIik7CisgICAgICAgIGVsc2UgaWYgKGQt
Pm5ld1dpbmRvd0NvbXBvbmVudCAmJiAhZC0+bmV3V2luZG93UGFyZW50KQorICAgICAgICAgICAg
cVdhcm5pbmcoIldlYlZpZXc6Om5ld1dpbmRvd1BhcmVudCBub3Qgc2V0IC0gV2ViVmlldzo6bmV3
V2luZG93Q29tcG9uZW50IGlnbm9yZWQiKTsKKyAgICAgICAgZWxzZSBpZiAoZC0+bmV3V2luZG93
Q29tcG9uZW50ICYmIGQtPm5ld1dpbmRvd1BhcmVudCkgeworICAgICAgICAgICAgUURlY2xhcmF0
aXZlV2ViVmlldyogd2VidmlldyA9IDA7CisgICAgICAgICAgICBRRGVjbGFyYXRpdmVDb250ZXh0
KiB3aW5kb3dDb250ZXh0ID0gbmV3IFFEZWNsYXJhdGl2ZUNvbnRleHQocW1sQ29udGV4dCh0aGlz
KSk7CisKKyAgICAgICAgICAgIFFPYmplY3QqIG5vYmogPSBkLT5uZXdXaW5kb3dDb21wb25lbnQt
PmNyZWF0ZSh3aW5kb3dDb250ZXh0KTsKKyAgICAgICAgICAgIGlmIChub2JqKSB7CisgICAgICAg
ICAgICAgICAgd2luZG93Q29udGV4dC0+c2V0UGFyZW50KG5vYmopOworICAgICAgICAgICAgICAg
IFFEZWNsYXJhdGl2ZUl0ZW0qIGl0ZW0gPSBxb2JqZWN0X2Nhc3Q8UURlY2xhcmF0aXZlSXRlbSAq
Pihub2JqKTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSBub2JqOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB3ZWJ2aWV3ID0gaXRlbS0+ZmluZENoaWxkPFFEZWNsYXJhdGl2ZVdlYlZpZXcqPigpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXdlYnZpZXcpCisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgaXRlbTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2JqLT5zZXRQYXJlbnQoZC0+bmV3V2luZG93UGFyZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFFHcmFwaGljc09iamVjdCo+KGl0ZW0pLT5zZXRQYXJl
bnRJdGVtKGQtPm5ld1dpbmRvd1BhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbGV0
ZSB3aW5kb3dDb250ZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gd2Vi
dmlldzsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIFFXZWJQYWdlOjpX
ZWJNb2RhbERpYWxvZzogeworICAgICAgICAvLyBOb3Qgc3VwcG9ydGVkCisgICAgfQorICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGNvbXBvbmVudCBXZWJW
aWV3OjpuZXdXaW5kb3dDb21wb25lbnQKKworICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIGNv
bXBvbmVudCB0byB1c2UgZm9yIG5ldyB3aW5kb3dzLgorICAgIFRoZSBjb21wb25lbnQgbXVzdCBo
YXZlIGEgV2ViVmlldyBzb21ld2hlcmUgaW4gaXRzIHN0cnVjdHVyZS4KKworICAgIFdoZW4gdGhl
IHdlYiBlbmdpbmUgcmVxdWVzdHMgYSBuZXcgd2luZG93LCBpdCB3aWxsIGJlIGFuIGluc3RhbmNl
IG9mCisgICAgdGhpcyBjb21wb25lbnQuCisKKyAgICBUaGUgcGFyZW50IG9mIHRoZSBuZXcgd2lu
ZG93IGlzIHNldCBieSBuZXdXaW5kb3dQYXJlbnQuIEl0IG11c3QgYmUgc2V0LgorKi8KK1FEZWNs
YXJhdGl2ZUNvbXBvbmVudCogUURlY2xhcmF0aXZlV2ViVmlldzo6bmV3V2luZG93Q29tcG9uZW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bmV3V2luZG93Q29tcG9uZW50OworfQorCit2b2lk
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldE5ld1dpbmRvd0NvbXBvbmVudChRRGVjbGFyYXRpdmVD
b21wb25lbnQqIG5ld1dpbmRvdykKK3sKKyAgICBpZiAobmV3V2luZG93ID09IGQtPm5ld1dpbmRv
d0NvbXBvbmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPm5ld1dpbmRvd0NvbXBvbmVudCA9
IG5ld1dpbmRvdzsKKyAgICBlbWl0IG5ld1dpbmRvd0NvbXBvbmVudENoYW5nZWQoKTsKK30KKwor
CisvKiEKKyAgICBccW1scHJvcGVydHkgaXRlbSBXZWJWaWV3OjpuZXdXaW5kb3dQYXJlbnQKKwor
ICAgIFRoZSBwYXJlbnQgaXRlbSBmb3IgbmV3IHdpbmRvd3MuCisKKyAgICBcc2EgbmV3V2luZG93
Q29tcG9uZW50CisqLworUURlY2xhcmF0aXZlSXRlbSogUURlY2xhcmF0aXZlV2ViVmlldzo6bmV3
V2luZG93UGFyZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bmV3V2luZG93UGFyZW50Owor
fQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldE5ld1dpbmRvd1BhcmVudChRRGVjbGFy
YXRpdmVJdGVtKiBwYXJlbnQpCit7CisgICAgaWYgKHBhcmVudCA9PSBkLT5uZXdXaW5kb3dQYXJl
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZC0+bmV3V2luZG93UGFyZW50ICYmIHBhcmVu
dCkgeworICAgICAgICBRTGlzdDxRR3JhcGhpY3NJdGVtICo+IGNoaWxkcmVuID0gZC0+bmV3V2lu
ZG93UGFyZW50LT5jaGlsZEl0ZW1zKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hp
bGRyZW4uY291bnQoKTsgKytpKQorICAgICAgICAgICAgY2hpbGRyZW4uYXQoaSktPnNldFBhcmVu
dEl0ZW0ocGFyZW50KTsKKyAgICB9CisgICAgZC0+bmV3V2luZG93UGFyZW50ID0gcGFyZW50Owor
ICAgIGVtaXQgbmV3V2luZG93UGFyZW50Q2hhbmdlZCgpOworfQorCitRU2l6ZSBRRGVjbGFyYXRp
dmVXZWJWaWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBkLT5wYWdlLT5t
YWluRnJhbWUoKS0+Y29udGVudHNTaXplKCkgKiBjb250ZW50c1NjYWxlKCk7Cit9CisKK3FyZWFs
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAgIHJldHVy
biBkLT52aWV3LT5zY2FsZSgpOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldENv
bnRlbnRzU2NhbGUocXJlYWwgc2NhbGUpCit7CisgICAgaWYgKHNjYWxlID09IGQtPnZpZXctPnNj
YWxlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBkLT52aWV3LT5zZXRTY2FsZShzY2FsZSk7Cisg
ICAgdXBkYXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpOworICAgIGVtaXQgY29udGVudHNTY2Fs
ZUNoYW5nZWQoKTsKK30KKworLyohCisgICAgUmV0dXJucyB0aGUgYXJlYSBvZiB0aGUgbGFyZ2Vz
dCBlbGVtZW50IGF0IHBvc2l0aW9uIChcYSB4LFxhIHkpIHRoYXQgaXMgbm8gbGFyZ2VyCisgICAg
dGhhbiBcYSBtYXh3aWR0aCBieSBcYSBtYXhoZWlnaHQgcGl4ZWxzLgorCisgICAgTWF5IHJldHVy
biBhbiBhcmVhIGxhcmdlciBpbiB0aGUgY2FzZSB3aGVuIG5vIHNtYWxsZXIgZWxlbWVudCBpcyBh
dCB0aGUgcG9zaXRpb24uCisqLworUVJlY3QgUURlY2xhcmF0aXZlV2ViVmlldzo6ZWxlbWVudEFy
ZWFBdChpbnQgeCwgaW50IHksIGludCBtYXh3aWR0aCwgaW50IG1heGhlaWdodCkgY29uc3QKK3sK
KyAgICBRV2ViSGl0VGVzdFJlc3VsdCBoaXQgPSBwYWdlKCktPm1haW5GcmFtZSgpLT5oaXRUZXN0
Q29udGVudChRUG9pbnQoeCwgeSkpOworICAgIFFSZWN0IHJ2ID0gaGl0LmJvdW5kaW5nUmVjdCgp
OworICAgIFFXZWJFbGVtZW50IGVsZW1lbnQgPSBoaXQuZW5jbG9zaW5nQmxvY2tFbGVtZW50KCk7
CisgICAgaWYgKG1heHdpZHRoIDw9IDApCisgICAgICAgIG1heHdpZHRoID0gSU5UX01BWDsKKyAg
ICBpZiAobWF4aGVpZ2h0IDw9IDApCisgICAgICAgIG1heGhlaWdodCA9IElOVF9NQVg7CisgICAg
d2hpbGUgKCFlbGVtZW50LnBhcmVudCgpLmlzTnVsbCgpICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS53
aWR0aCgpIDw9IG1heHdpZHRoICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS5oZWlnaHQoKSA8PSBtYXho
ZWlnaHQpIHsKKyAgICAgICAgcnYgPSBlbGVtZW50Lmdlb21ldHJ5KCk7CisgICAgICAgIGVsZW1l
bnQgPSBlbGVtZW50LnBhcmVudCgpOworICAgIH0KKyAgICByZXR1cm4gcnY7Cit9CisKKy8qIQor
ICAgIFxpbnRlcm5hbAorICAgIFxjbGFzcyBRRGVjbGFyYXRpdmVXZWJQYWdlCisgICAgXGJyaWVm
IFRoZSBRRGVjbGFyYXRpdmVXZWJQYWdlIGNsYXNzIGlzIGEgUVdlYlBhZ2UgdGhhdCBjYW4gY3Jl
YXRlIFFNTCBwbHVnaW5zLgorCisgICAgXHNhIFFEZWNsYXJhdGl2ZVdlYlZpZXcKKyovCitRRGVj
bGFyYXRpdmVXZWJQYWdlOjpRRGVjbGFyYXRpdmVXZWJQYWdlKFFEZWNsYXJhdGl2ZVdlYlZpZXcq
IHBhcmVudCkgOgorICAgIFFXZWJQYWdlKHBhcmVudCkKK3sKK30KKworUURlY2xhcmF0aXZlV2Vi
UGFnZTo6flFEZWNsYXJhdGl2ZVdlYlBhZ2UoKQoreworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdl
YlBhZ2U6OmphdmFTY3JpcHRDb25zb2xlTWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlLCBp
bnQgbGluZU51bWJlciwgY29uc3QgUVN0cmluZyYgc291cmNlSUQpCit7CisgICAgcVdhcm5pbmco
KSA8PCBzb3VyY2VJRCA8PCAnOicgPDwgbGluZU51bWJlciA8PCAnOicgPDwgbWVzc2FnZTsKK30K
KworUVN0cmluZyBRRGVjbGFyYXRpdmVXZWJQYWdlOjpjaG9vc2VGaWxlKFFXZWJGcmFtZSAqb3Jp
Z2luYXRpbmdGcmFtZSwgY29uc3QgUVN0cmluZyYgb2xkRmlsZSkKK3sKKyAgICAvLyBOb3Qgc3Vw
cG9ydGVkIChpdCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAg
UV9VTlVTRUQob2xkRmlsZSkKKyAgICByZXR1cm4gb2xkRmlsZTsKK30KKworLyohCisgICAgXHFt
bHNpZ25hbCBXZWJWaWV3OjphbGVydChtZXNzYWdlKQorCisgICAgVGhpcyBzaWduYWwgaXMgZW1p
dHRlZCB3aGVuIHRoZSB3ZWIgZW5naW5lIHNlbmRzIGEgSmF2YVNjcmlwdCBhbGVydC4gVGhlIFxh
IG1lc3NhZ2UgaXMgdGhlIHRleHQKKyAgICB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGFsZXJ0IHRv
IHRoZSB1c2VyLgorKi8KKworCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmphdmFTY3JpcHRB
bGVydChRV2ViRnJhbWUqIG9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sK
KyAgICBRX1VOVVNFRChvcmlnaW5hdGluZ0ZyYW1lKQorICAgIGVtaXQgdmlld0l0ZW0oKS0+YWxl
cnQobXNnKTsKK30KKworYm9vbCBRRGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0Q29uZmly
bShRV2ViRnJhbWUqIG9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sKKyAg
ICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5n
RnJhbWUpCisgICAgUV9VTlVTRUQobXNnKQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBR
RGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSogb3JpZ2luYXRp
bmdGcmFtZSwgY29uc3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUs
IFFTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQor
ICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAgUV9VTlVTRUQobXNnKQorICAgIFFf
VU5VU0VEKGRlZmF1bHRWYWx1ZSkKKyAgICBRX1VOVVNFRChyZXN1bHQpCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisKK1FEZWNsYXJhdGl2ZVdlYlZpZXcqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OnZp
ZXdJdGVtKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlldyo+
KHBhcmVudCgpKTsKK30KKworUVdlYlBhZ2UqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmNyZWF0ZVdp
bmRvdyhXZWJXaW5kb3dUeXBlIHR5cGUpCit7CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyogbmV3
VmlldyA9IHZpZXdJdGVtKCktPmNyZWF0ZVdpbmRvdyh0eXBlKTsKKyAgICBpZiAobmV3VmlldykK
KyAgICAgICAgcmV0dXJuIG5ld1ZpZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworUVRf
RU5EX05BTUVTUEFDRQorCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xh
cmF0aXZld2Vidmlld19wLmggYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vi
dmlld19wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0YTM5MQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmV3ZWJ2aWV3
X3AuaApAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaWZuZGVmIHFk
ZWNsYXJhdGl2ZXdlYnZpZXdfcF9oCisjZGVmaW5lIHFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9oCisK
KyNpbmNsdWRlIDxRdENvcmUvUVVybD4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJh
dGl2ZUl0ZW0+CisjaW5jbHVkZSA8UXRHdWkvUUFjdGlvbj4KKyNpbmNsdWRlIDxRdE5ldHdvcmsv
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFF0V2ViS2l0L1FHcmFwaGljc1dlYlZp
ZXc+CisjaW5jbHVkZSA8UXRXZWJLaXQvUVdlYlBhZ2U+CisKKworUVRfQkVHSU5fSEVBREVSCisK
K2NsYXNzIFFXZWJIaXN0b3J5OworY2xhc3MgUVdlYlNldHRpbmdzOworCitRVF9CRUdJTl9OQU1F
U1BBQ0UKKworUVRfTU9EVUxFKERlY2xhcmF0aXZlKQorY2xhc3MgUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M7CitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTsKK2NsYXNzIFFOZXR3b3Jr
UmVxdWVzdDsKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlZpZXc7CitjbGFzcyBRRGVjbGFyYXRpdmVX
ZWJWaWV3UHJpdmF0ZTsKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViUGFnZSA6IHB1YmxpYyBRV2Vi
UGFnZSB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBRRGVjbGFyYXRpdmVX
ZWJQYWdlKFFEZWNsYXJhdGl2ZVdlYlZpZXcgKnBhcmVudCk7CisgICAgflFEZWNsYXJhdGl2ZVdl
YlBhZ2UoKTsKK3Byb3RlY3RlZDoKKyAgICBRV2ViUGFnZSAqY3JlYXRlV2luZG93KFdlYldpbmRv
d1R5cGUgdHlwZSk7CisgICAgdm9pZCBqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29uc3QgUVN0
cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUlEKTsK
KyAgICBRU3RyaW5nIGNob29zZUZpbGUoUVdlYkZyYW1lICpvcmlnaW5hdGluZ0ZyYW1lLCBjb25z
dCBRU3RyaW5nJiBvbGRGaWxlKTsKKyAgICB2b2lkIGphdmFTY3JpcHRBbGVydChRV2ViRnJhbWUg
Km9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZyk7CisgICAgYm9vbCBqYXZhU2Ny
aXB0Q29uZmlybShRV2ViRnJhbWUgKm9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1z
Zyk7CisgICAgYm9vbCBqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSAqb3JpZ2luYXRpbmdGcmFt
ZSwgY29uc3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFTdHJp
bmcqIHJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyAqdmlld0l0
ZW0oKTsKK307CisKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkOworCisvLyBU
T0RPOiBicm93c2VyIHBsdWdpbnMKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViVmlldyA6IHB1Ymxp
YyBRRGVjbGFyYXRpdmVJdGVtIHsKKyAgICBRX09CSkVDVAorCisgICAgUV9FTlVNUyhTdGF0dXMg
U2VsZWN0aW9uTW9kZSkKKworICAgIFFfUFJPUEVSVFkoUVN0cmluZyB0aXRsZSBSRUFEIHRpdGxl
IE5PVElGWSB0aXRsZUNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRUGl4bWFwIGljb24gUkVBRCBp
Y29uIE5PVElGWSBpY29uQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKHFyZWFsIHpvb21GYWN0b3Ig
UkVBRCB6b29tRmFjdG9yIFdSSVRFIHNldFpvb21GYWN0b3IgTk9USUZZIHpvb21GYWN0b3JDaGFu
Z2VkKQorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBzdGF0dXNUZXh0IFJFQUQgc3RhdHVzVGV4dCBO
T1RJRlkgc3RhdHVzVGV4dENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgaHRtbCBS
RUFEIGh0bWwgV1JJVEUgc2V0SHRtbCBOT1RJRlkgaHRtbENoYW5nZWQpCisKKyAgICBRX1BST1BF
UlRZKGludCBwcmVzc0dyYWJUaW1lIFJFQUQgcHJlc3NHcmFiVGltZSBXUklURSBzZXRQcmVzc0dy
YWJUaW1lIE5PVElGWSBwcmVzc0dyYWJUaW1lQ2hhbmdlZCkKKworICAgIFFfUFJPUEVSVFkoaW50
IHByZWZlcnJlZFdpZHRoIFJFQUQgcHJlZmVycmVkV2lkdGggV1JJVEUgc2V0UHJlZmVycmVkV2lk
dGggTk9USUZZIHByZWZlcnJlZFdpZHRoQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKGludCBwcmVm
ZXJyZWRIZWlnaHQgUkVBRCBwcmVmZXJyZWRIZWlnaHQgV1JJVEUgc2V0UHJlZmVycmVkSGVpZ2h0
IE5PVElGWSBwcmVmZXJyZWRIZWlnaHRDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUVVybCB1cmwg
UkVBRCB1cmwgV1JJVEUgc2V0VXJsIE5PVElGWSB1cmxDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFko
cXJlYWwgcHJvZ3Jlc3MgUkVBRCBwcm9ncmVzcyBOT1RJRlkgcHJvZ3Jlc3NDaGFuZ2VkKQorICAg
IFFfUFJPUEVSVFkoU3RhdHVzIHN0YXR1cyBSRUFEIHN0YXR1cyBOT1RJRlkgc3RhdHVzQ2hhbmdl
ZCkKKworICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogcmVsb2FkIFJFQUQgcmVsb2FkQWN0aW9uIENP
TlNUQU5UKQorICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogYmFjayBSRUFEIGJhY2tBY3Rpb24gQ09O
U1RBTlQpCisgICAgUV9QUk9QRVJUWShRQWN0aW9uKiBmb3J3YXJkIFJFQUQgZm9yd2FyZEFjdGlv
biBDT05TVEFOVCkKKyAgICBRX1BST1BFUlRZKFFBY3Rpb24qIHN0b3AgUkVBRCBzdG9wQWN0aW9u
IENPTlNUQU5UKQorCisgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncyogc2V0
dGluZ3MgUkVBRCBzZXR0aW5nc09iamVjdCBDT05TVEFOVCkKKworICAgIFFfUFJPUEVSVFkoUURl
Y2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGphdmFTY3JpcHRXaW5kb3dPYmplY3RzIFJF
QUQgamF2YVNjcmlwdFdpbmRvd09iamVjdHMgQ09OU1RBTlQpCisKKyAgICBRX1BST1BFUlRZKFFE
ZWNsYXJhdGl2ZUNvbXBvbmVudCogbmV3V2luZG93Q29tcG9uZW50IFJFQUQgbmV3V2luZG93Q29t
cG9uZW50IFdSSVRFIHNldE5ld1dpbmRvd0NvbXBvbmVudCBOT1RJRlkgbmV3V2luZG93Q29tcG9u
ZW50Q2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUl0ZW0qIG5ld1dpbmRvd1Bh
cmVudCBSRUFEIG5ld1dpbmRvd1BhcmVudCBXUklURSBzZXROZXdXaW5kb3dQYXJlbnQgTk9USUZZ
IG5ld1dpbmRvd1BhcmVudENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZKGJvb2wgcmVuZGVyaW5n
RW5hYmxlZCBSRUFEIHJlbmRlcmluZ0VuYWJsZWQgV1JJVEUgc2V0UmVuZGVyaW5nRW5hYmxlZCBO
T1RJRlkgcmVuZGVyaW5nRW5hYmxlZENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZKFFTaXplIGNv
bnRlbnRzU2l6ZSBSRUFEIGNvbnRlbnRzU2l6ZSBOT1RJRlkgY29udGVudHNTaXplQ2hhbmdlZCkK
KyAgICBRX1BST1BFUlRZKHFyZWFsIGNvbnRlbnRzU2NhbGUgUkVBRCBjb250ZW50c1NjYWxlIFdS
SVRFIHNldENvbnRlbnRzU2NhbGUgTk9USUZZIGNvbnRlbnRzU2NhbGVDaGFuZ2VkKQorCitwdWJs
aWM6CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyhRRGVjbGFyYXRpdmVJdGVtICpwYXJlbnQgPSAw
KTsKKyAgICB+UURlY2xhcmF0aXZlV2ViVmlldygpOworCisgICAgUVVybCB1cmwoKSBjb25zdDsK
KyAgICB2b2lkIHNldFVybChjb25zdCBRVXJsICYpOworCisgICAgUVN0cmluZyB0aXRsZSgpIGNv
bnN0OworCisgICAgUVBpeG1hcCBpY29uKCkgY29uc3Q7CisKKyAgICBxcmVhbCB6b29tRmFjdG9y
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRab29tRmFjdG9yKHFyZWFsKTsKKyAgICBRX0lOVk9LQUJM
RSBib29sIGhldXJpc3RpY1pvb20oaW50IGNsaWNrWCwgaW50IGNsaWNrWSwgcXJlYWwgbWF4em9v
bSk7CisgICAgUVJlY3QgZWxlbWVudEFyZWFBdChpbnQgeCwgaW50IHksIGludCBtaW53aWR0aCwg
aW50IG1pbmhlaWdodCkgY29uc3Q7CisKKyAgICBpbnQgcHJlc3NHcmFiVGltZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0UHJlc3NHcmFiVGltZShpbnQpOworCisgICAgaW50IHByZWZlcnJlZFdpZHRo
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRQcmVmZXJyZWRXaWR0aChpbnQpOworICAgIGludCBwcmVm
ZXJyZWRIZWlnaHQoKSBjb25zdDsKKyAgICB2b2lkIHNldFByZWZlcnJlZEhlaWdodChpbnQpOwor
CisgICAgZW51bSBTdGF0dXMgeyBOdWxsLCBSZWFkeSwgTG9hZGluZywgRXJyb3IgfTsKKyAgICBT
dGF0dXMgc3RhdHVzKCkgY29uc3Q7CisgICAgcXJlYWwgcHJvZ3Jlc3MoKSBjb25zdDsKKyAgICBR
U3RyaW5nIHN0YXR1c1RleHQoKSBjb25zdDsKKworICAgIFFBY3Rpb24gKnJlbG9hZEFjdGlvbigp
IGNvbnN0OworICAgIFFBY3Rpb24gKmJhY2tBY3Rpb24oKSBjb25zdDsKKyAgICBRQWN0aW9uICpm
b3J3YXJkQWN0aW9uKCkgY29uc3Q7CisgICAgUUFjdGlvbiAqc3RvcEFjdGlvbigpIGNvbnN0Owor
CisgICAgUVdlYlBhZ2UgKnBhZ2UoKSBjb25zdDsKKyAgICB2b2lkIHNldFBhZ2UoUVdlYlBhZ2Ug
KnBhZ2UpOworCisgICAgdm9pZCBsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwK
KyAgICAgICAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9u
ID0gUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb24sCisgICAgICAgICAgICAgIGNv
bnN0IFFCeXRlQXJyYXkgJmJvZHkgPSBRQnl0ZUFycmF5KCkpOworCisgICAgUVN0cmluZyBodG1s
KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEh0bWwoY29uc3QgUVN0cmluZyAmaHRtbCwgY29uc3Qg
UVVybCAmYmFzZVVybCA9IFFVcmwoKSk7CisgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFFCeXRl
QXJyYXkgJmRhdGEsIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlID0gUVN0cmluZygpLCBjb25zdCBR
VXJsICZiYXNlVXJsID0gUVVybCgpKTsKKworICAgIFFXZWJIaXN0b3J5KiBoaXN0b3J5KCkgY29u
c3Q7CisgICAgUVdlYlNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0OworICAgIFFEZWNsYXJhdGl2
ZVdlYlNldHRpbmdzICpzZXR0aW5nc09iamVjdCgpIGNvbnN0OworCisgICAgYm9vbCByZW5kZXJp
bmdFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZW5kZXJpbmdFbmFibGVkKGJvb2wpOwor
CisgICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGphdmFTY3JpcHRXaW5kb3dP
YmplY3RzKCk7CisKKyAgICBzdGF0aWMgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkKiBxbWxB
dHRhY2hlZFByb3BlcnRpZXMoUU9iamVjdCopOworCisgICAgUURlY2xhcmF0aXZlQ29tcG9uZW50
ICpuZXdXaW5kb3dDb21wb25lbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldE5ld1dpbmRvd0NvbXBv
bmVudChRRGVjbGFyYXRpdmVDb21wb25lbnQgKm5ld1dpbmRvdyk7CisgICAgUURlY2xhcmF0aXZl
SXRlbSogbmV3V2luZG93UGFyZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXROZXdXaW5kb3dQYXJl
bnQoUURlY2xhcmF0aXZlSXRlbSogbmV3V2luZG93KTsKKworICAgIGJvb2wgaXNDb21wb25lbnRD
b21wbGV0ZVB1YmxpYygpIGNvbnN0IHsgcmV0dXJuIGlzQ29tcG9uZW50Q29tcGxldGUoKTsgfQor
CisgICAgUVNpemUgY29udGVudHNTaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldENvbnRlbnRz
U2NhbGUocXJlYWwgc2NhbGUpOworICAgIHFyZWFsIGNvbnRlbnRzU2NhbGUoKSBjb25zdDsKKwor
UV9TSUdOQUxTOgorICAgIHZvaWQgcHJlZmVycmVkV2lkdGhDaGFuZ2VkKCk7CisgICAgdm9pZCBw
cmVmZXJyZWRIZWlnaHRDaGFuZ2VkKCk7CisgICAgdm9pZCB1cmxDaGFuZ2VkKCk7CisgICAgdm9p
ZCBwcm9ncmVzc0NoYW5nZWQoKTsKKyAgICB2b2lkIHN0YXR1c0NoYW5nZWQoU3RhdHVzKTsKKyAg
ICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCBpY29uQ2hhbmdl
ZCgpOworICAgIHZvaWQgc3RhdHVzVGV4dENoYW5nZWQoKTsKKyAgICB2b2lkIGh0bWxDaGFuZ2Vk
KCk7CisgICAgdm9pZCBwcmVzc0dyYWJUaW1lQ2hhbmdlZCgpOworICAgIHZvaWQgem9vbUZhY3Rv
ckNoYW5nZWQoKTsKKyAgICB2b2lkIG5ld1dpbmRvd0NvbXBvbmVudENoYW5nZWQoKTsKKyAgICB2
b2lkIG5ld1dpbmRvd1BhcmVudENoYW5nZWQoKTsKKyAgICB2b2lkIHJlbmRlcmluZ0VuYWJsZWRD
aGFuZ2VkKCk7CisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJik7Cisg
ICAgdm9pZCBjb250ZW50c1NjYWxlQ2hhbmdlZCgpOworCisgICAgdm9pZCBsb2FkU3RhcnRlZCgp
OworICAgIHZvaWQgbG9hZEZpbmlzaGVkKCk7CisgICAgdm9pZCBsb2FkRmFpbGVkKCk7CisKKyAg
ICB2b2lkIGRvdWJsZUNsaWNrKGludCBjbGlja1gsIGludCBjbGlja1kpOworCisgICAgdm9pZCB6
b29tVG8ocXJlYWwgem9vbSwgaW50IGNlbnRlclgsIGludCBjZW50ZXJZKTsKKworICAgIHZvaWQg
YWxlcnQoY29uc3QgUVN0cmluZyYgbWVzc2FnZSk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIFFW
YXJpYW50IGV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJik7CisKK3ByaXZhdGUgUV9T
TE9UUzoKKyAgICB2b2lkIGRvTG9hZFN0YXJ0ZWQoKTsKKyAgICB2b2lkIGRvTG9hZFByb2dyZXNz
KGludCBwKTsKKyAgICB2b2lkIGRvTG9hZEZpbmlzaGVkKGJvb2wgb2spOworICAgIHZvaWQgc2V0
U3RhdHVzVGV4dChjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVk
KCk7CisgICAgdm9pZCBwYWdlVXJsQ2hhbmdlZCgpOworICAgIHZvaWQgaW5pdGlhbExheW91dCgp
OworCisgICAgdm9pZCBwcm9wYWdhdGVGb2N1c1RvV2ViUGFnZShib29sKTsKKworICAgIHZvaWQg
dXBkYXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBt
b3VzZVByZXNzRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCk7CisgICAgdm9p
ZCBtb3VzZVJlbGVhc2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KTsKKyAg
ICB2b2lkIG1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQpOwor
ICAgIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCAq
ZXZlbnQpOworICAgIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCogZXZlbnQpOworICAgIHZv
aWQgaG92ZXJNb3ZlRXZlbnQoUUdyYXBoaWNzU2NlbmVIb3ZlckV2ZW50KiBldmVudCk7CisgICAg
dmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYgJm5ld0dlb21ldHJ5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVJlY3RGICZvbGRHZW9tZXRy
eSk7CisgICAgdmlydHVhbCBib29sIHNjZW5lRXZlbnQoUUV2ZW50KiBldmVudCk7CisgICAgUURl
Y2xhcmF0aXZlV2ViVmlldyogY3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dUeXBlIHR5
cGUpOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlQ29udGVudHNTaXplKCk7CisgICAgdm9p
ZCBpbml0KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvbmVudENvbXBsZXRlKCk7CisgICAgUV9E
SVNBQkxFX0NPUFkoUURlY2xhcmF0aXZlV2ViVmlldykKKyAgICBRRGVjbGFyYXRpdmVXZWJWaWV3
UHJpdmF0ZSogZDsKKyAgICBRTW91c2VFdmVudCogc2NlbmVNb3VzZUV2ZW50VG9Nb3VzZUV2ZW50
KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCopOworICAgIFFNb3VzZUV2ZW50KiBzY2VuZUhvdmVy
TW92ZUV2ZW50VG9Nb3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lSG92ZXJFdmVudCopOworICAgIGZy
aWVuZCBjbGFzcyBRRGVjbGFyYXRpdmVXZWJQYWdlOworfTsKKworY2xhc3MgUURlY2xhcmF0aXZl
V2ViVmlld0F0dGFjaGVkIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9Q
Uk9QRVJUWShRU3RyaW5nIHdpbmRvd09iamVjdE5hbWUgUkVBRCB3aW5kb3dPYmplY3ROYW1lIFdS
SVRFIHNldFdpbmRvd09iamVjdE5hbWUpCitwdWJsaWM6CisgICAgUURlY2xhcmF0aXZlV2ViVmll
d0F0dGFjaGVkKFFPYmplY3QqIHBhcmVudCkKKyAgICAgICAgOiBRT2JqZWN0KHBhcmVudCkKKyAg
ICB7CisgICAgfQorCisgICAgUVN0cmluZyB3aW5kb3dPYmplY3ROYW1lKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3dpbmRvd09iamVjdE5hbWU7CisgICAgfQorCisgICAgdm9pZCBz
ZXRXaW5kb3dPYmplY3ROYW1lKGNvbnN0IFFTdHJpbmcgJm4pCisgICAgeworICAgICAgICBtX3dp
bmRvd09iamVjdE5hbWUgPSBuOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRU3RyaW5nIG1fd2lu
ZG93T2JqZWN0TmFtZTsKK307CisKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzIDogcHVi
bGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgc3Rh
bmRhcmRGb250RmFtaWx5IFJFQUQgc3RhbmRhcmRGb250RmFtaWx5IFdSSVRFIHNldFN0YW5kYXJk
Rm9udEZhbWlseSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgZml4ZWRGb250RmFtaWx5IFJFQUQg
Zml4ZWRGb250RmFtaWx5IFdSSVRFIHNldEZpeGVkRm9udEZhbWlseSkKKyAgICBRX1BST1BFUlRZ
KFFTdHJpbmcgc2VyaWZGb250RmFtaWx5IFJFQUQgc2VyaWZGb250RmFtaWx5IFdSSVRFIHNldFNl
cmlmRm9udEZhbWlseSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgc2Fuc1NlcmlmRm9udEZhbWls
eSBSRUFEIHNhbnNTZXJpZkZvbnRGYW1pbHkgV1JJVEUgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSkK
KyAgICBRX1BST1BFUlRZKFFTdHJpbmcgY3Vyc2l2ZUZvbnRGYW1pbHkgUkVBRCBjdXJzaXZlRm9u
dEZhbWlseSBXUklURSBzZXRDdXJzaXZlRm9udEZhbWlseSkKKyAgICBRX1BST1BFUlRZKFFTdHJp
bmcgZmFudGFzeUZvbnRGYW1pbHkgUkVBRCBmYW50YXN5Rm9udEZhbWlseSBXUklURSBzZXRGYW50
YXN5Rm9udEZhbWlseSkKKworICAgIFFfUFJPUEVSVFkoaW50IG1pbmltdW1Gb250U2l6ZSBSRUFE
IG1pbmltdW1Gb250U2l6ZSBXUklURSBzZXRNaW5pbXVtRm9udFNpemUpCisgICAgUV9QUk9QRVJU
WShpbnQgbWluaW11bUxvZ2ljYWxGb250U2l6ZSBSRUFEIG1pbmltdW1Mb2dpY2FsRm9udFNpemUg
V1JJVEUgc2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSkKKyAgICBRX1BST1BFUlRZKGludCBkZWZh
dWx0Rm9udFNpemUgUkVBRCBkZWZhdWx0Rm9udFNpemUgV1JJVEUgc2V0RGVmYXVsdEZvbnRTaXpl
KQorICAgIFFfUFJPUEVSVFkoaW50IGRlZmF1bHRGaXhlZEZvbnRTaXplIFJFQUQgZGVmYXVsdEZp
eGVkRm9udFNpemUgV1JJVEUgc2V0RGVmYXVsdEZpeGVkRm9udFNpemUpCisKKyAgICBRX1BST1BF
UlRZKGJvb2wgYXV0b0xvYWRJbWFnZXMgUkVBRCBhdXRvTG9hZEltYWdlcyBXUklURSBzZXRBdXRv
TG9hZEltYWdlcykKKyAgICBRX1BST1BFUlRZKGJvb2wgamF2YXNjcmlwdEVuYWJsZWQgUkVBRCBq
YXZhc2NyaXB0RW5hYmxlZCBXUklURSBzZXRKYXZhc2NyaXB0RW5hYmxlZCkKKyAgICBRX1BST1BF
UlRZKGJvb2wgamF2YUVuYWJsZWQgUkVBRCBqYXZhRW5hYmxlZCBXUklURSBzZXRKYXZhRW5hYmxl
ZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgcGx1Z2luc0VuYWJsZWQgUkVBRCBwbHVnaW5zRW5hYmxl
ZCBXUklURSBzZXRQbHVnaW5zRW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgcHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCBSRUFEIHByaXZhdGVCcm93c2luZ0VuYWJsZWQgV1JJVEUgc2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgamF2YXNjcmlwdENhbk9wZW5X
aW5kb3dzIFJFQUQgamF2YXNjcmlwdENhbk9wZW5XaW5kb3dzIFdSSVRFIHNldEphdmFzY3JpcHRD
YW5PcGVuV2luZG93cykKKyAgICBRX1BST1BFUlRZKGJvb2wgamF2YXNjcmlwdENhbkFjY2Vzc0Ns
aXBib2FyZCBSRUFEIGphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQgV1JJVEUgc2V0SmF2YXNj
cmlwdENhbkFjY2Vzc0NsaXBib2FyZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgZGV2ZWxvcGVyRXh0
cmFzRW5hYmxlZCBSRUFEIGRldmVsb3BlckV4dHJhc0VuYWJsZWQgV1JJVEUgc2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgbGlua3NJbmNsdWRlZEluRm9jdXND
aGFpbiBSRUFEIGxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4gV1JJVEUgc2V0TGlua3NJbmNsdWRl
ZEluRm9jdXNDaGFpbikKKyAgICBRX1BST1BFUlRZKGJvb2wgem9vbVRleHRPbmx5IFJFQUQgem9v
bVRleHRPbmx5IFdSSVRFIHNldFpvb21UZXh0T25seSkKKyAgICBRX1BST1BFUlRZKGJvb2wgcHJp
bnRFbGVtZW50QmFja2dyb3VuZHMgUkVBRCBwcmludEVsZW1lbnRCYWNrZ3JvdW5kcyBXUklURSBz
ZXRQcmludEVsZW1lbnRCYWNrZ3JvdW5kcykKKyAgICBRX1BST1BFUlRZKGJvb2wgb2ZmbGluZVN0
b3JhZ2VEYXRhYmFzZUVuYWJsZWQgUkVBRCBvZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCBX
UklURSBzZXRPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJv
b2wgb2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkIFJFQUQgb2ZmbGluZVdlYkFwcGxp
Y2F0aW9uQ2FjaGVFbmFibGVkIFdSSVRFIHNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5h
YmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgbG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkIFJF
QUQgbG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkIFdSSVRFIHNldExvY2FsU3RvcmFnZURhdGFi
YXNlRW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgbG9jYWxDb250ZW50Q2FuQWNjZXNzUmVt
b3RlVXJscyBSRUFEIGxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMgV1JJVEUgc2V0TG9j
YWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscykKKworcHVibGljOgorICAgIFFEZWNsYXJhdGl2
ZVdlYlNldHRpbmdzKCkge30KKworICAgIFFTdHJpbmcgc3RhbmRhcmRGb250RmFtaWx5KCkgY29u
c3QgeyByZXR1cm4gcy0+Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OlN0YW5kYXJkRm9udCk7IH0K
KyAgICB2b2lkIHNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBmKSB7IHMtPnNl
dEZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpTdGFuZGFyZEZvbnQsIGYpOyB9CisgICAgUVN0cmlu
ZyBmaXhlZEZvbnRGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzLT5mb250RmFtaWx5KFFXZWJTZXR0
aW5nczo6Rml4ZWRGb250KTsgfQorICAgIHZvaWQgc2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IFFT
dHJpbmcmIGYpIHsgcy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkZpeGVkRm9udCwgZik7
IH0KKyAgICBRU3RyaW5nIHNlcmlmRm9udEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRG
YW1pbHkoUVdlYlNldHRpbmdzOjpTZXJpZkZvbnQpOyB9CisgICAgdm9pZCBzZXRTZXJpZkZvbnRG
YW1pbHkoY29uc3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5KFFXZWJTZXR0aW5nczo6
U2VyaWZGb250LCBmKTsgfQorICAgIFFTdHJpbmcgc2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0
IHsgcmV0dXJuIHMtPmZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpTYW5zU2VyaWZGb250KTsgfQor
ICAgIHZvaWQgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBmKSB7IHMtPnNl
dEZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpTYW5zU2VyaWZGb250LCBmKTsgfQorICAgIFFTdHJp
bmcgY3Vyc2l2ZUZvbnRGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzLT5mb250RmFtaWx5KFFXZWJT
ZXR0aW5nczo6Q3Vyc2l2ZUZvbnQpOyB9CisgICAgdm9pZCBzZXRDdXJzaXZlRm9udEZhbWlseShj
b25zdCBRU3RyaW5nJiBmKSB7IHMtPnNldEZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpDdXJzaXZl
Rm9udCwgZik7IH0KKyAgICBRU3RyaW5nIGZhbnRhc3lGb250RmFtaWx5KCkgY29uc3QgeyByZXR1
cm4gcy0+Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkZhbnRhc3lGb250KTsgfQorICAgIHZvaWQg
c2V0RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5
KFFXZWJTZXR0aW5nczo6RmFudGFzeUZvbnQsIGYpOyB9CisKKyAgICBpbnQgbWluaW11bUZvbnRT
aXplKCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udFNpemUoUVdlYlNldHRpbmdzOjpNaW5pbXVtRm9u
dFNpemUpOyB9CisgICAgdm9pZCBzZXRNaW5pbXVtRm9udFNpemUoaW50IHNpemUpIHsgcy0+c2V0
Rm9udFNpemUoUVdlYlNldHRpbmdzOjpNaW5pbXVtRm9udFNpemUsIHNpemUpOyB9CisgICAgaW50
IG1pbmltdW1Mb2dpY2FsRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBzLT5mb250U2l6ZShRV2Vi
U2V0dGluZ3M6Ok1pbmltdW1Mb2dpY2FsRm9udFNpemUpOyB9CisgICAgdm9pZCBzZXRNaW5pbXVt
TG9naWNhbEZvbnRTaXplKGludCBzaXplKSB7IHMtPnNldEZvbnRTaXplKFFXZWJTZXR0aW5nczo6
TWluaW11bUxvZ2ljYWxGb250U2l6ZSwgc2l6ZSk7IH0KKyAgICBpbnQgZGVmYXVsdEZvbnRTaXpl
KCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udFNpemUoUVdlYlNldHRpbmdzOjpEZWZhdWx0Rm9udFNp
emUpOyB9CisgICAgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50IHNpemUpIHsgcy0+c2V0Rm9u
dFNpemUoUVdlYlNldHRpbmdzOjpEZWZhdWx0Rm9udFNpemUsIHNpemUpOyB9CisgICAgaW50IGRl
ZmF1bHRGaXhlZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udFNpemUoUVdlYlNldHRp
bmdzOjpEZWZhdWx0Rml4ZWRGb250U2l6ZSk7IH0KKyAgICB2b2lkIHNldERlZmF1bHRGaXhlZEZv
bnRTaXplKGludCBzaXplKSB7IHMtPnNldEZvbnRTaXplKFFXZWJTZXR0aW5nczo6RGVmYXVsdEZp
eGVkRm9udFNpemUsIHNpemUpOyB9CisKKyAgICBib29sIGF1dG9Mb2FkSW1hZ2VzKCkgY29uc3Qg
eyByZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkF1dG9Mb2FkSW1hZ2VzKTsg
fQorICAgIHZvaWQgc2V0QXV0b0xvYWRJbWFnZXMoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpBdXRvTG9hZEltYWdlcywgb24pOyB9CisgICAgYm9vbCBqYXZhc2NyaXB0
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpK
YXZhc2NyaXB0RW5hYmxlZCk7IH0KKyAgICB2b2lkIHNldEphdmFzY3JpcHRFbmFibGVkKGJvb2wg
b24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdEVuYWJsZWQsIG9u
KTsgfQorICAgIGJvb2wgamF2YUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6SmF2YUVuYWJsZWQpOyB9CisgICAgdm9pZCBzZXRKYXZhRW5hYmxl
ZChib29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFFbmFibGVkLCBv
bik7IH0KKyAgICBib29sIHBsdWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlBsdWdpbnNFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0UGx1
Z2luc0VuYWJsZWQoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQbHVn
aW5zRW5hYmxlZCwgb24pOyB9CisgICAgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlByaXZhdGVCcm93c2lu
Z0VuYWJsZWQpOyB9CisgICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgb24p
IHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwg
b24pOyB9CisgICAgYm9vbCBqYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MoKSBjb25zdCB7IHJldHVy
biBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dz
KTsgfQorICAgIHZvaWQgc2V0SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKGJvb2wgb24pIHsgcy0+
c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzLCBvbik7
IH0KKyAgICBib29sIGphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoKSBjb25zdCB7IHJldHVy
biBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBi
b2FyZCk7IH0KKyAgICB2b2lkIHNldEphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBv
bikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkLCBvbik7IH0KKyAgICBib29sIGRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCk7IH0KKyAgICB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBvbikgeyBz
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRyYXNFbmFibGVkLCBvbik7
IH0KKyAgICBib29sIGxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oKSBjb25zdCB7IHJldHVybiBz
LT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbik7
IH0KKyAgICB2b2lkIHNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oYm9vbCBvbikgeyBzLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluLCBvbik7
IH0KKyAgICBib29sIHpvb21UZXh0T25seSgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1
dGUoUVdlYlNldHRpbmdzOjpab29tVGV4dE9ubHkpOyB9CisgICAgdm9pZCBzZXRab29tVGV4dE9u
bHkoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpab29tVGV4dE9ubHks
IG9uKTsgfQorICAgIGJvb2wgcHJpbnRFbGVtZW50QmFja2dyb3VuZHMoKSBjb25zdCB7IHJldHVy
biBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpbnRFbGVtZW50QmFja2dyb3VuZHMp
OyB9CisgICAgdm9pZCBzZXRQcmludEVsZW1lbnRCYWNrZ3JvdW5kcyhib29sIG9uKSB7IHMtPnNl
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlByaW50RWxlbWVudEJhY2tncm91bmRzLCBvbik7IH0K
KyAgICBib29sIG9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
cy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFi
bGVkKTsgfQorICAgIHZvaWQgc2V0T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQoYm9vbCBv
bikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpPZmZsaW5lU3RvcmFnZURhdGFiYXNl
RW5hYmxlZCwgb24pOyB9CisgICAgYm9vbCBvZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGlu
ZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0T2ZmbGluZVdlYkFw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0
aW5nczo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkLCBvbik7IH0KKyAgICBib29s
IGxvY2FsU3RvcmFnZURhdGFiYXNlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRy
aWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpOyB9CisgICAg
dm9pZCBzZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQoYm9vbCBvbikgeyBzLT5zZXRBdHRy
aWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQsIG9uKTsgfQor
ICAgIGJvb2wgbG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscygpIGNvbnN0IHsgcmV0dXJu
IHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1v
dGVVcmxzKTsgfQorICAgIHZvaWQgc2V0TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscyhi
b29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsQ29udGVudENhbkFj
Y2Vzc1JlbW90ZVVybHMsIG9uKTsgfQorCisgICAgUVdlYlNldHRpbmdzICpzOworfTsKKworUVRf
RU5EX05BTUVTUEFDRQorCitRTUxfREVDTEFSRV9UWVBFKFFEZWNsYXJhdGl2ZVdlYlZpZXcpCitR
TUxfREVDTEFSRV9UWVBFKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzKQorUU1MX0RFQ0xBUkVfVFlQ
RUlORk8oUURlY2xhcmF0aXZlV2ViVmlldywgUU1MX0hBU19BVFRBQ0hFRF9QUk9QRVJUSUVTKQor
CitRVF9FTkRfSEVBREVSCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L2RlY2xhcmF0
aXZlL3FtbGRpciBiL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xbWxkaXIKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmZGQwNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9x
dC9kZWNsYXJhdGl2ZS9xbWxkaXIKQEAgLTAsMCArMSBAQAorcGx1Z2luIHFtbHdlYmtpdHBsdWdp
bgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57770</attachid>
            <date>2010-06-03 08:17:08 -0700</date>
            <delta_ts>2010-06-17 06:03:19 -0700</delta_ts>
            <desc>Version 3</desc>
            <filename>40050-QML.diff</filename>
            <type>text/plain</type>
            <size>66401</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlZjE3YzI4Li5jNDY1ZDhj
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDYtMDMgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFVwc3Ry
ZWFtIHRoZSBXZWJLaXQgUU1MIGludGVncmF0aW9uIHBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwNTAKKworICAgICAgICBBZGQgdG8gdGhl
IGJ1aWxkIHRoZSBRTUwgV2ViS2l0IGludGVncmF0aW9uIHBsdWdpbi4KKworICAgICAgICAqIFdl
YktpdC5wcm86CisKIDIwMTAtMDYtMDIgIFN0ZXJsaW5nIFN3aWdhcnQgIDxzc3dpZ2FydEBnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0LnBybyBiL1dlYktpdC5wcm8KaW5kZXggNzlkZTA3Mi4uYzZlNzA5ZiAxMDA2NDQKLS0t
IGEvV2ViS2l0LnBybworKysgYi9XZWJLaXQucHJvCkBAIC05LDYgKzksOSBAQCBTVUJESVJTICs9
IFwKIAogIyBJZiB0aGUgc291cmNlIGV4aXN0cywgYnVpbHQgaXQKIGV4aXN0cygkJFBXRC9XZWJL
aXRUb29scy9RdFRlc3RCcm93c2VyKTogU1VCRElSUyArPSBXZWJLaXRUb29scy9RdFRlc3RCcm93
c2VyCitncmVhdGVyVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA2KSB7CisgICAgZXhpc3RzKCQkUFdE
L1dlYktpdC9xdC9kZWNsYXJhdGl2ZSk6IFNVQkRJUlMgKz0gV2ViS2l0L3F0L2RlY2xhcmF0aXZl
Cit9CiBleGlzdHMoJCRQV0QvSmF2YVNjcmlwdENvcmUvanNjLnBybyk6IFNVQkRJUlMgKz0gSmF2
YVNjcmlwdENvcmUvanNjLnBybwogZXhpc3RzKCQkUFdEL1dlYktpdC9xdC90ZXN0cyk6IFNVQkRJ
UlMgKz0gV2ViS2l0L3F0L3Rlc3RzCiBleGlzdHMoJCRQV0QvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvKTogU1VCRElSUyArPSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGNmNGIyNTIuLjkyNzE5MmIgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2MCBAQAorMjAxMC0wNi0wMyAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5h
cmRAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gVXBzdHJlYW0gdGhlIFdlYktpdCBRTUwgaW50ZWdyYXRpb24gcGx1Z2luCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA1MAorCisg
ICAgICAgIEFkZCB0byB0aGUgUXQgcG9ydCB0aGUgUU1MIFdlYktpdCBpbnRlZ3JhdGlvbiBwbHVn
aW4uCisgICAgICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXcgaXMgY3JlYXRpbmcgdGhlIGl0ZW0gdGhh
dCBpcyBhZGRlZAorICAgICAgICB0byB0aGUgUUdyYXBoaWNzU2NlbmUuIFRoZSAuaCBmaWxlIGlz
IG5vdCBtZWFudCB0byBiZQorICAgICAgICBwdWJsaWMuCisKKyAgICAgICAgUW1sRGlyIGlzIGRl
c2NyaWJpbmcgdGhlIHBsdWdpbi4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2RlY2xhcmF0aXZl
LnBybzogQWRkZWQuCisgICAgICAgICogZGVjbGFyYXRpdmUvcGx1Z2luLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXRRbWxQbHVnaW46OnJlZ2lzdGVyVHlwZXMpOgorICAgICAgICAqIGRlY2xh
cmF0aXZlL3FkZWNsYXJhdGl2ZXdlYnZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXdQcml2YXRlOjpRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXdQcml2YXRlOjp3aW5kb3dPYmplY3RzQXBwZW5kKToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OlFEZWNsYXJhdGl2ZVdlYlZpZXcpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
Vmlldzo6flFEZWNsYXJhdGl2ZVdlYlZpZXcpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmll
dzo6aW5pdCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpjb21wb25lbnRDb21wbGV0
ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXMpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViVmlldzo6cHJvZ3Jlc3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmll
dzo6ZG9Mb2FkU3RhcnRlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpkb0xvYWRQ
cm9ncmVzcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpwYWdlVXJsQ2hhbmdlZCk6
CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpkb0xvYWRGaW5pc2hlZCk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3Ojp1cmwpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmll
dzo6c2V0VXJsKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJlZFdpZHRo
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFByZWZlcnJlZFdpZHRoKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJlZEhlaWdodCk6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlldzo6ZXZhbHVhdGVKYXZhU2NyaXB0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OnByb3BhZ2F0ZUZvY3VzVG9XZWJQYWdlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OnVwZGF0ZURlY2xhcmF0aXZlV2ViVmlld1NpemUpOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlldzo6aW5pdGlhbExheW91dCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJW
aWV3Ojp1cGRhdGVDb250ZW50c1NpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6
Z2VvbWV0cnlDaGFuZ2VkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmphdmFTY3Jp
cHRXaW5kb3dPYmplY3RzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnFtbEF0dGFj
aGVkUHJvcGVydGllcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6dXBk
YXRlV2luZG93T2JqZWN0cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpyZW5kZXJp
bmdFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFJlbmRlcmluZ0Vu
YWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2NlbmVNb3VzZUV2ZW50VG9N
b3VzZUV2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNjZW5lSG92ZXJNb3Zl
RXZlbnRUb01vdXNlRXZlbnQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6bW91c2VE
b3VibGVDbGlja0V2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmhldXJpc3Rp
Y1pvb20pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cHJlc3NHcmFiVGltZSk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVzc0dyYWJUaW1lKToKKyAgICAgICAg
KFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3Ojptb3VzZVJlbGVhc2VFdmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojp0aW1lckV2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNl
TW92ZUV2ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmhvdmVyTW92ZUV2ZW50
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNjZW5lRXZlbnQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlldzo6YmFja0FjdGlvbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojpmb3J3YXJkQWN0aW9uKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnJl
bG9hZEFjdGlvbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdG9wQWN0aW9uKToK
KyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnRpdGxlKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6Omljb24pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0Wm9v
bUZhY3Rvcik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojp6b29tRmFjdG9yKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFN0YXR1c1RleHQpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViVmlldzo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3OjpzdGF0dXNUZXh0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6
OnBhZ2UpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0dGluZ3NPYmplY3QpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UGFnZSk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3Ojpsb2FkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Omh0bWwp
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0SHRtbCk6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6Omhpc3RvcnkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0dGluZ3MpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y3JlYXRlV2luZG93KToKKyAgICAgICAgKFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6Om5ld1dpbmRvd0NvbXBvbmVudCk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3OjpzZXROZXdXaW5kb3dDb21wb25lbnQpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViVmlldzo6bmV3V2luZG93UGFyZW50KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OnNldE5ld1dpbmRvd1BhcmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpj
b250ZW50c1NpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y29udGVudHNTY2Fs
ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50c1NjYWxlKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmVsZW1lbnRBcmVhQXQpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViUGFnZTo6UURlY2xhcmF0aXZlV2ViUGFnZSk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJQYWdlOjp+UURlY2xhcmF0aXZlV2ViUGFnZSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJQYWdlOjpqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViUGFnZTo6Y2hvb3NlRmlsZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpq
YXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViUGFnZTo6amF2YVNjcmlw
dENvbmZpcm0pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViUGFnZTo6amF2YVNjcmlwdFByb21w
dCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjp2aWV3SXRlbSk6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJQYWdlOjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAqIGRlY2xhcmF0aXZl
L3FkZWNsYXJhdGl2ZXdlYnZpZXdfcC5oOiBBZGRlZC4KKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXc6Oik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojppc0NvbXBvbmVudENvbXBs
ZXRlUHVibGljKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hlZDo6UURlY2xh
cmF0aXZlV2ViVmlld0F0dGFjaGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRh
Y2hlZDo6d2luZG93T2JqZWN0TmFtZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3QXR0
YWNoZWQ6OnNldFdpbmRvd09iamVjdE5hbWUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OlFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzdGFuZGFyZEZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNl
dHRpbmdzOjpzZXRGaXhlZEZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OnNlcmlmRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0U2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzYW5zU2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRp
bmdzOjpjdXJzaXZlRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGlu
Z3M6OmZhbnRhc3lGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzZXRGYW50YXN5Rm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6bWluaW11bUZvbnRTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpz
ZXRNaW5pbXVtRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6Om1p
bmltdW1Mb2dpY2FsRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6
OnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OmRlZmF1bHRGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0RGVmYXVsdEZvbnRTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpkZWZhdWx0Rml4ZWRGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5n
czo6c2V0RGVmYXVsdEZpeGVkRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OmF1dG9Mb2FkSW1hZ2VzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzZXRBdXRvTG9hZEltYWdlcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6
amF2YXNjcmlwdEVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNl
dEphdmFzY3JpcHRFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpq
YXZhRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0SmF2YUVu
YWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnBsdWdpbnNFbmFibGVk
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRQbHVnaW5zRW5hYmxlZCk6
CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6amF2YXNjcmlwdENh
bk9wZW5XaW5kb3dzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRKYXZh
c2NyaXB0Q2FuT3BlbldpbmRvd3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6
OmphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldEphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViU2V0dGluZ3M6OmRldmVsb3BlckV4dHJhc0VuYWJsZWQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OmxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4p
OgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldExpbmtzSW5jbHVkZWRJbkZv
Y3VzQ2hhaW4pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6Onpvb21UZXh0T25s
eSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0Wm9vbVRleHRPbmx5KToK
KyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpwcmludEVsZW1lbnRCYWNrZ3JvdW5k
cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0UHJpbnRFbGVtZW50QmFj
a2dyb3VuZHMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6Om9mZmxpbmVTdG9y
YWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpz
ZXRPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJTZXR0aW5nczo6b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKToKKyAgICAgICAg
KFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OmxvY2FsU3RvcmFnZURh
dGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0TG9j
YWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRp
bmdzOjpsb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlNldHRpbmdzOjpzZXRMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzKToKKyAg
ICAgICAgKiBkZWNsYXJhdGl2ZS9xbWxkaXI6IEFkZGVkLgorCiAyMDEwLTA2LTAyICBUYXN1a3Ug
U3V6dWtpICA8dGFzdWt1LnN1enVraUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
U2hpbmljaGlybyBIYW1hamkuCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZGVj
bGFyYXRpdmUucHJvIGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZlLnBybwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjM1ZDM5Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZlLnBybwpAQCAtMCwwICsxLDYwIEBA
CitUQVJHRVQgID0gcW1sd2Via2l0cGx1Z2luCitUQVJHRVRQQVRIID0gb3JnL3dlYmtpdAorCitU
RU1QTEFURSA9IGxpYgorQ09ORklHICs9IHF0IHBsdWdpbgorCit3aW4zMnxtYWM6IXdpbmNlKjoh
d2luMzItbXN2YzohbWFjeC14Y29kZTpDT05GSUcgKz0gZGVidWdfYW5kX3JlbGVhc2UKKworUU1M
RElSRklMRSA9ICQke19QUk9fRklMRV9QV0RffS9xbWxkaXIKK2NvcHkyYnVpbGQuaW5wdXQgPSBR
TUxESVJGSUxFCitDT05GSUcoUVRESVJfYnVpbGQpIHsKKyAgICBjb3B5MmJ1aWxkLm91dHB1dCA9
ICQkUVRfQlVJTERfVFJFRS9pbXBvcnRzLyQkVEFSR0VUUEFUSC9xbWxkaXIKK30gZWxzZSB7Cisg
ICAgY29weTJidWlsZC5vdXRwdXQgPSAkJE9VVFBVVF9ESVIvaW1wb3J0cy8kJFRBUkdFVFBBVEgv
cW1sZGlyCit9CishY29udGFpbnMoVEVNUExBVEVfUFJFRklYLCB2Yyk6Y29weTJidWlsZC52YXJp
YWJsZV9vdXQgPSBQUkVfVEFSR0VUREVQUworY29weTJidWlsZC5jb21tYW5kcyA9ICQkUU1BS0Vf
Q09QWSAke1FNQUtFX0ZJTEVfSU59ICR7UU1BS0VfRklMRV9PVVR9Citjb3B5MmJ1aWxkLm5hbWUg
PSBDT1BZICR7UU1BS0VfRklMRV9JTn0KK2NvcHkyYnVpbGQuQ09ORklHICs9IG5vX2xpbmsKK1FN
QUtFX0VYVFJBX0NPTVBJTEVSUyArPSBjb3B5MmJ1aWxkCisKK1RBUkdFVCA9ICQkcXRMaWJyYXJ5
VGFyZ2V0KCQkVEFSR0VUKQorY29udGFpbnMoUVRfQ09ORklHLCByZWR1Y2VfZXhwb3J0cyk6Q09O
RklHICs9IGhpZGVfc3ltYm9scworCit3aW5jZSo6TElCUyArPSAkJFFNQUtFX0xJQlNfR1VJCisK
K3N5bWJpYW46IHsKKyAgICBUQVJHRVQuRVBPQ0FMTE9XRExMREFUQT0xCisgICAgVEFSR0VULkNB
UEFCSUxJVFkgPSBBbGwgLVRjYgorICAgIGxvYWQoYXJtY2Nfd2FybmluZ3MpCit9CisKK1FUICs9
IGRlY2xhcmF0aXZlCisKK2luY2x1ZGUoLi4vLi4vLi4vV2ViS2l0LnByaSkKKworU09VUkNFUyAr
PSBxZGVjbGFyYXRpdmV3ZWJ2aWV3LmNwcCBwbHVnaW4uY3BwCitIRUFERVJTICs9IHFkZWNsYXJh
dGl2ZXdlYnZpZXdfcC5oCisKK0NPTkZJRyhRVERJUl9idWlsZCkgeworICAgIERFU1RESVIgPSAk
JFFUX0JVSUxEX1RSRUUvaW1wb3J0cy8kJFRBUkdFVFBBVEgKK30gZWxzZSB7CisgICAgREVTVERJ
UiA9ICQkT1VUUFVUX0RJUi9pbXBvcnRzLyQkVEFSR0VUUEFUSAorfQordGFyZ2V0LnBhdGggPSAk
JFtRVF9JTlNUQUxMX0lNUE9SVFNdLyQkVEFSR0VUUEFUSAorCitxbWxkaXIuZmlsZXMgKz0gJCRQ
V0QvcW1sZGlyCitxbWxkaXIucGF0aCArPSAgJCRbUVRfSU5TVEFMTF9JTVBPUlRTXS8kJFRBUkdF
VFBBVEgKKworc3ltYmlhbjp7CisgICAgbG9hZChkYXRhX2NhZ2luZ19wYXRocykKKyAgICBpbmNs
dWRlKCQkUVRfU09VUkNFX1RSRUUvZGVtb3Mvc3ltYmlhbnBrZ3J1bGVzLnByaSkKKworICAgIGlt
cG9ydEZpbGVzLnNvdXJjZXMgPSBxbWx3ZWJraXRwbHVnaW4uZGxsIHFtbGRpcgorICAgIGltcG9y
dEZpbGVzLnBhdGggPSAkJFFUX0lNUE9SVFNfQkFTRV9ESVIvJCRUQVJHRVRQQVRICisKKyAgICBE
RVBMT1lNRU5UID0gaW1wb3J0RmlsZXMKK30KKworSU5TVEFMTFMgKz0gdGFyZ2V0IHFtbGRpcgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAgYi9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvcGx1Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kNjZhNzYwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdp
bi5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgInFk
ZWNsYXJhdGl2ZXdlYnZpZXdfcC5oIgorI2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9w
LmgiCisKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZS5oPgorI2luY2x1ZGUg
PFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZXh0ZW5zaW9ucGx1Z2luLmg+CisKK1FUX0JFR0lO
X05BTUVTUEFDRQorCitjbGFzcyBXZWJLaXRRbWxQbHVnaW4gOiBwdWJsaWMgUURlY2xhcmF0aXZl
RXh0ZW5zaW9uUGx1Z2luIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlclR5cGVzKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJU
KFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJvcmcud2Via2l0IikpOworICAg
ICAgICBxbWxSZWdpc3RlclR5cGU8UURlY2xhcmF0aXZlV2ViU2V0dGluZ3M+KCk7CisgICAgICAg
IHFtbFJlZ2lzdGVyVHlwZTxRRGVjbGFyYXRpdmVXZWJWaWV3Pih1cmksIDEsIDAsICJXZWJWaWV3
Iik7CisgICAgfQorfTsKKworUVRfRU5EX05BTUVTUEFDRQorCisjaW5jbHVkZSAicGx1Z2luLm1v
YyIKKworUV9FWFBPUlRfUExVR0lOMihxbWx3ZWJraXRwbHVnaW4sIFFUX1BSRVBFTkRfTkFNRVNQ
QUNFKFdlYktpdFFtbFBsdWdpbikpOworCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvcWRlY2xhcmF0aXZld2Vidmlldy5jcHAgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xh
cmF0aXZld2Vidmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2
NDUxZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xZGVjbGFyYXRp
dmV3ZWJ2aWV3LmNwcApAQCAtMCwwICsxLDExOTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKwor
I2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdlYnZpZXdfcC5oIgorI2luY2x1ZGUgInFkZWNsYXJhdGl2
ZXdlYnZpZXdfcF9wLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvUUJhc2ljVGltZXI+CisjaW5jbHVk
ZSA8UXRDb3JlL1FEZWJ1Zz4KKyNpbmNsdWRlIDxRdENvcmUvUUV2ZW50PgorI2luY2x1ZGUgPFF0
Q29yZS9RRmlsZT4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUNvbnRleHQ+
CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RRGVjbGFyYXRpdmVFbmdpbmU+CisjaW5jbHVkZSA8
UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmUuaD4KKyNpbmNsdWRlIDxRdEd1aS9RQXBwbGljYXRp
b24+CisjaW5jbHVkZSA8UXRHdWkvUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50PgorI2luY2x1ZGUg
PFF0R3VpL1FLZXlFdmVudD4KKyNpbmNsdWRlIDxRdEd1aS9RTW91c2VFdmVudD4KKyNpbmNsdWRl
IDxRdEd1aS9RUGVuPgorI2luY2x1ZGUgPFF0V2ViS2l0L1FXZWJFbGVtZW50PgorI2luY2x1ZGUg
PFF0V2ViS2l0L1FXZWJGcmFtZT4KKyNpbmNsdWRlIDxRdFdlYktpdC9RV2ViUGFnZT4KKyNpbmNs
dWRlIDxRdFdlYktpdC9RV2ViU2V0dGluZ3M+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorCitjbGFz
cyBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgUURlY2xhcmF0aXZl
V2ViVmlld1ByaXZhdGUoUURlY2xhcmF0aXZlV2ViVmlldyogcXEpCisgICAgICA6IHEocXEpCisg
ICAgICAsIHBhZ2UoMCkKKyAgICAgICwgcHJlZmVycmVkd2lkdGgoMCkKKyAgICAgICwgcHJlZmVy
cmVkaGVpZ2h0KDApCisgICAgICAsIHByb2dyZXNzKDEuMCkKKyAgICAgICwgc3RhdHVzKFFEZWNs
YXJhdGl2ZVdlYlZpZXc6Ok51bGwpCisgICAgICAsIHBlbmRpbmcoUGVuZGluZ05vbmUpCisgICAg
ICAsIG5ld1dpbmRvd0NvbXBvbmVudCgwKQorICAgICAgLCBuZXdXaW5kb3dQYXJlbnQoMCkKKyAg
ICAgICwgcHJlc3NUaW1lKDQwMCkKKyAgICAgICwgcmVuZGVyaW5nKHRydWUpCisgICAgeworICAg
ICAgICBRT2JqZWN0Ojpjb25uZWN0KHEsIFNJR05BTChmb2N1c0NoYW5nZWQoYm9vbCkpLCBxLCBT
TE9UKHByb3BhZ2F0ZUZvY3VzVG9XZWJQYWdlKGJvb2wpKSk7CisgICAgfQorCisgICAgUURlY2xh
cmF0aXZlV2ViVmlldyogcTsKKworICAgIFFVcmwgdXJsOyAvLyBwYWdlIHVybCBtaWdodCBiZSBk
aWZmZXJlbnQgaWYgaXQgaGFzIG5vdCBsb2FkZWQgeWV0CisgICAgUVdlYlBhZ2UqIHBhZ2U7Cisg
ICAgUUdyYXBoaWNzV2ViVmlldyogdmlldzsKKworICAgIGludCBwcmVmZXJyZWR3aWR0aCwgcHJl
ZmVycmVkaGVpZ2h0OworICAgIHFyZWFsIHByb2dyZXNzOworICAgIFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OlN0YXR1cyBzdGF0dXM7CisgICAgUVN0cmluZyBzdGF0dXNUZXh0OworICAgIGVudW0geyBQ
ZW5kaW5nTm9uZSwgUGVuZGluZ1VybCwgUGVuZGluZ0h0bWwsIFBlbmRpbmdDb250ZW50IH0gcGVu
ZGluZzsKKyAgICBRVXJsIHBlbmRpbmdVcmw7CisgICAgUVN0cmluZyBwZW5kaW5nU3RyaW5nOwor
ICAgIFFCeXRlQXJyYXkgcGVuZGluZ0RhdGE7CisgICAgbXV0YWJsZSBRRGVjbGFyYXRpdmVXZWJT
ZXR0aW5ncyBzZXR0aW5nczsKKyAgICBRRGVjbGFyYXRpdmVDb21wb25lbnQqIG5ld1dpbmRvd0Nv
bXBvbmVudDsKKyAgICBRRGVjbGFyYXRpdmVJdGVtKiBuZXdXaW5kb3dQYXJlbnQ7CisKKyAgICBR
QmFzaWNUaW1lciBwcmVzc1RpbWVyOworICAgIFFQb2ludCBwcmVzc1BvaW50OworICAgIGludCBw
cmVzc1RpbWU7IC8vIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHRvdWNoIGV2ZW50IGJlY29tZXMg
YSAidGFwIGFuZCBob2xkIgorCisgICAgc3RhdGljIHZvaWQgd2luZG93T2JqZWN0c0FwcGVuZChR
RGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4qIHByb3AsIFFPYmplY3QqIG8pCisgICAg
eworICAgICAgICBzdGF0aWNfY2FzdDxRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZSo+KHByb3At
PmRhdGEpLT53aW5kb3dPYmplY3RzLmFwcGVuZChvKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UURl
Y2xhcmF0aXZlV2ViVmlld1ByaXZhdGUqPihwcm9wLT5kYXRhKS0+dXBkYXRlV2luZG93T2JqZWN0
cygpOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlV2luZG93T2JqZWN0cygpOworICAgIFFPYmpl
Y3RMaXN0IHdpbmRvd09iamVjdHM7CisKKyAgICBib29sIHJlbmRlcmluZzsKK307CisKKy8qIQor
ICAgIFxxbWxjbGFzcyBXZWJWaWV3IFFEZWNsYXJhdGl2ZVdlYlZpZXcKKyAgICBcc2luY2UgNC43
CisgICAgXGJyaWVmIFRoZSBXZWJWaWV3IGl0ZW0gYWxsb3dzIHlvdSB0byBhZGQgd2ViIGNvbnRl
bnQgdG8gYSBjYW52YXMuCisgICAgXGluaGVyaXRzIEl0ZW0KKworICAgIEEgV2ViVmlldyByZW5k
ZXJzIHdlYiBjb250ZW50IGJhc2VkIG9uIGEgVVJMLgorCisgICAgVGhpcyB0eXBlIGlzIG1hZGUg
YXZhaWxhYmxlIGJ5IGltcG9ydGluZyB0aGUgXGMgb3JnLndlYmtpdCBtb2R1bGU6CisKKyAgICBc
Ym9sZHtpbXBvcnQgb3JnLndlYmtpdCAxLjB9CisKKyAgICBJZiB0aGUgd2lkdGggYW5kIGhlaWdo
dCBvZiB0aGUgaXRlbSBpcyBub3Qgc2V0LCB0aGV5IHdpbGwKKyAgICBkeW5hbWljYWxseSBhZGp1
c3QgdG8gYSBzaXplIGFwcHJvcHJpYXRlIGZvciB0aGUgY29udGVudC4KKyAgICBUaGlzIHdpZHRo
IG1heSBiZSBsYXJnZSBmb3IgdHlwaWNhbCBvbmxpbmUgd2ViIHBhZ2VzLgorCisgICAgSWYgdGhl
IHdpZHRoIG9yIGhlaWdodCBpcyBleHBsaWN0bHkgc2V0LCB0aGUgcmVuZGVyZWQgd2Vic2l0ZQor
ICAgIHdpbGwgYmUgY2xpcHBlZCwgbm90IHNjYWxlZCwgdG8gZml0IGludG8gdGhlIHNldCBkaW1l
bnNpb25zLgorCisgICAgSWYgdGhlIHByZWZlcnJlZFdpZHRoIGlzIHNldCwgdGhlIHdpZHRoIHdp
bGwgYmUgdGhpcyBhbW91bnQgb3IgbGFyZ2VyLAorICAgIHVzdWFsbHkgbGF5aW5nIG91dCB0aGUg
d2ViIGNvbnRlbnQgdG8gZml0IHRoZSBwcmVmZXJyZWRXaWR0aC4KKworICAgIFxxbWwKKyAgICBp
bXBvcnQgb3JnLndlYmtpdCAxLjAKKworICAgIFdlYlZpZXcgeworICAgICAgICB1cmw6ICJodHRw
Oi8vd3d3Lm5va2lhLmNvbSIKKyAgICAgICAgcHJlZmVycmVkV2lkdGg6IDQ5MAorICAgICAgICBw
cmVmZXJyZWRIZWlnaHQ6IDQwMAorICAgICAgICBzY2FsZTogMC41CisgICAgICAgIHNtb290aDog
ZmFsc2UKKyAgICAgICAgc21vb3RoQ2FjaGU6IHRydWUKKyAgICB9CisgICAgXGVuZHFtbAorCisg
ICAgXGltYWdlIHdlYnZpZXcucG5nCisKKyAgICBUaGUgaXRlbSBpbmNsdWRlcyBubyBzY3JvbGxp
bmcsIHNjYWxpbmcsCisgICAgdG9vbGJhcnMsIGV0Yy4sIHRob3NlIG11c3QgYmUgaW1wbGVtZW50
ZWQgYXJvdW5kIFdlYlZpZXcuIFNlZSB0aGUgV2ViQnJvd3NlciBleGFtcGxlCisgICAgZm9yIGEg
ZGVtb25zdHJhdGlvbiBvZiB0aGlzLgorCisgICAgV2hlbiB0aGlzIGl0ZW0gaGFzIGtleWJvYXJk
IGZvY3VzLCBhbGwga2V5Ym9hcmQgaW5wdXQgd2lsbCBiZSBzZW50IGRpcmVjdGx5IHRvIHRoZQor
ICAgIHdlYiBwYWdlIHdpdGhpbi4KKyovCisKKy8qIQorICAgIFxpbnRlcm5hbAorICAgIFxjbGFz
cyBRRGVjbGFyYXRpdmVXZWJWaWV3CisgICAgXGJyaWVmIFRoZSBRRGVjbGFyYXRpdmVXZWJWaWV3
IGNsYXNzIGFsbG93cyB5b3UgdG8gYWRkIHdlYiBjb250ZW50IHRvIGEgUURlY2xhcmF0aXZlVmll
dy4KKworICAgIEEgV2ViVmlldyByZW5kZXJzIHdlYiBjb250ZW50IGJhc2Ugb24gYSBVUkwuCisK
KyAgICBcaW1hZ2Ugd2Vidmlldy5wbmcKKworICAgIFRoZSBpdGVtIGluY2x1ZGVzIG5vIHNjcm9s
bGluZywgc2NhbGluZywKKyAgICB0b29sYmFycywgZXRjLiwgdGhvc2UgbXVzdCBiZSBpbXBsZW1l
bnRlZCBhcm91bmQgV2ViVmlldy4gU2VlIHRoZSBXZWJCcm93c2VyIGV4YW1wbGUKKyAgICBmb3Ig
YSBkZW1vbnN0cmF0aW9uIG9mIHRoaXMuCisKKyAgICBBIFFEZWNsYXJhdGl2ZVdlYlZpZXcgb2Jq
ZWN0IGNhbiBiZSBpbnN0YW50aWF0ZWQgaW4gUW1sIHVzaW5nIHRoZSB0YWcgXGwgV2ViVmlldy4K
KyovCisKK1FEZWNsYXJhdGl2ZVdlYlZpZXc6OlFEZWNsYXJhdGl2ZVdlYlZpZXcoUURlY2xhcmF0
aXZlSXRlbSAqcGFyZW50KSA6IFFEZWNsYXJhdGl2ZUl0ZW0ocGFyZW50KQoreworICAgIGluaXQo
KTsKK30KKworUURlY2xhcmF0aXZlV2ViVmlldzo6flFEZWNsYXJhdGl2ZVdlYlZpZXcoKQorewor
ICAgIGRlbGV0ZSBkLT5wYWdlOworICAgIGRlbGV0ZSBkOworfQorCit2b2lkIFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OmluaXQoKQoreworICAgIGQgPSBuZXcgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZh
dGUodGhpcyk7CisKKyAgICBRV2ViU2V0dGluZ3M6OmVuYWJsZVBlcnNpc3RlbnRTdG9yYWdlKCk7
CisKKyAgICBzZXRBY2NlcHRIb3ZlckV2ZW50cyh0cnVlKTsKKyAgICBzZXRBY2NlcHRlZE1vdXNl
QnV0dG9ucyhRdDo6TGVmdEJ1dHRvbik7CisgICAgc2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVt
SGFzTm9Db250ZW50cywgdHJ1ZSk7CisgICAgc2V0Q2xpcCh0cnVlKTsKKworICAgIGQtPnBhZ2Ug
PSAwOworICAgIGQtPnZpZXcgPSBuZXcgUUdyYXBoaWNzV2ViVmlldyh0aGlzKTsKKyAgICBkLT52
aWV3LT5zZXRSZXNpemVzVG9Db250ZW50cyh0cnVlKTsKKyAgICBkLT52aWV3LT5zZXRGbGFnKFFH
cmFwaGljc0l0ZW06Okl0ZW1TdGFja3NCZWhpbmRQYXJlbnQsIHRydWUpOworICAgIGNvbm5lY3Qo
ZC0+dmlldywgU0lHTkFMKGdlb21ldHJ5Q2hhbmdlZCgpKSwgdGhpcywgU0xPVCh1cGRhdGVEZWNs
YXJhdGl2ZVdlYlZpZXdTaXplKCkpKTsKKyAgICBjb25uZWN0KGQtPnZpZXcsIFNJR05BTChzY2Fs
ZUNoYW5nZWQoKSksIHRoaXMsIFNJR05BTChjb250ZW50c1NjYWxlQ2hhbmdlZCgpKSk7Cit9CisK
K3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6Y29tcG9uZW50Q29tcGxldGUoKQoreworICAgIFFE
ZWNsYXJhdGl2ZUl0ZW06OmNvbXBvbmVudENvbXBsZXRlKCk7CisgICAgc3dpdGNoIChkLT5wZW5k
aW5nKSB7CisgICAgY2FzZSBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6UGVuZGluZ1VybDoK
KyAgICAgICAgc2V0VXJsKGQtPnBlbmRpbmdVcmwpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjpQZW5kaW5nSHRtbDoKKyAgICAgICAgc2V0SHRt
bChkLT5wZW5kaW5nU3RyaW5nLCBkLT5wZW5kaW5nVXJsKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTo6UGVuZGluZ0NvbnRlbnQ6CisgICAgICAg
IHNldENvbnRlbnQoZC0+cGVuZGluZ0RhdGEsIGQtPnBlbmRpbmdTdHJpbmcsIGQtPnBlbmRpbmdV
cmwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgZC0+cGVuZGluZyA9IFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjpQZW5kaW5nTm9u
ZTsKKyAgICBkLT51cGRhdGVXaW5kb3dPYmplY3RzKCk7Cit9CisKK1FEZWNsYXJhdGl2ZVdlYlZp
ZXc6OlN0YXR1cyBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXMoKSBjb25zdAoreworICAgIHJl
dHVybiBkLT5zdGF0dXM7Cit9CisKKworLyohCisgICAgXHFtbHByb3BlcnR5IHJlYWwgV2ViVmll
dzo6cHJvZ3Jlc3MKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBwcm9ncmVzcyBvZiBsb2Fk
aW5nIHRoZSBjdXJyZW50IFVSTCwgZnJvbSAwIHRvIDEuCisKKyAgICBJZiB5b3UganVzdCB3YW50
IHRvIGtub3cgd2hlbiBwcm9ncmVzcyBnZXRzIHRvIDEsIHVzZQorICAgIFdlYlZpZXc6Om9uTG9h
ZEZpbmlzaGVkKCkgb3IgV2ViVmlldzo6b25Mb2FkRmFpbGVkKCkgaW5zdGVhZC4KKyovCitxcmVh
bCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojpwcm9ncmVzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQt
PnByb2dyZXNzOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmRvTG9hZFN0YXJ0ZWQo
KQoreworCisgICAgaWYgKCFkLT51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIGQtPnN0YXR1cyA9
IExvYWRpbmc7CisgICAgICAgIGVtaXQgc3RhdHVzQ2hhbmdlZChkLT5zdGF0dXMpOworICAgIH0K
KyAgICBlbWl0IGxvYWRTdGFydGVkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6
ZG9Mb2FkUHJvZ3Jlc3MoaW50IHApCit7CisgICAgaWYgKGQtPnByb2dyZXNzID09IHAgLyAxMDAu
MCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByb2dyZXNzID0gcCAvIDEwMC4wOworICAgIGVt
aXQgcHJvZ3Jlc3NDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6cGFn
ZVVybENoYW5nZWQoKQoreworICAgIHVwZGF0ZUNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKChk
LT51cmwuaXNFbXB0eSgpICYmIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpICE9IFFVcmwoUUxh
dGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkpCisgICAgICAgIHx8IChkLT51cmwgIT0gcGFnZSgp
LT5tYWluRnJhbWUoKS0+dXJsKCkgJiYgIXBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpLmlzRW1w
dHkoKSkpCisgICAgeworICAgICAgICBkLT51cmwgPSBwYWdlKCktPm1haW5GcmFtZSgpLT51cmwo
KTsKKyAgICAgICAgaWYgKGQtPnVybCA9PSBRVXJsKFFMYXRpbjFTdHJpbmcoImFib3V0OmJsYW5r
IikpKQorICAgICAgICAgICAgZC0+dXJsID0gUVVybCgpOworICAgICAgICBlbWl0IHVybENoYW5n
ZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2FkRmluaXNo
ZWQoYm9vbCBvaykKK3sKKworICAgIGlmICh0aXRsZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcGFn
ZVVybENoYW5nZWQoKTsgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI5MzkwIC0gcGFnZXMgd2l0aCBubyB0aXRsZSBuZXZlciBnZXQgdXJsQ2hhbmdlZCgpCisKKyAg
ICBpZiAob2spIHsKKyAgICAgICAgZC0+c3RhdHVzID0gZC0+dXJsLmlzRW1wdHkoKSA/IE51bGwg
OiBSZWFkeTsKKyAgICAgICAgZW1pdCBsb2FkRmluaXNoZWQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBkLT5zdGF0dXMgPSBFcnJvcjsKKyAgICAgICAgZW1pdCBsb2FkRmFpbGVkKCk7CisgICAg
fQorICAgIGVtaXQgc3RhdHVzQ2hhbmdlZChkLT5zdGF0dXMpOworfQorCisvKiEKKyAgICBccW1s
cHJvcGVydHkgdXJsIFdlYlZpZXc6OnVybAorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIFVS
TCB0byB0aGUgcGFnZSBkaXNwbGF5ZWQgaW4gdGhpcyBpdGVtLiBJdCBjYW4gYmUgc2V0LAorICAg
IGJ1dCBhbHNvIGNhbiBjaGFuZ2Ugc3BvbnRhbmVvdXNseSAoZWcuIGJlY2F1c2Ugb2YgbmV0d29y
ayByZWRpcmVjdGlvbikuCisKKyAgICBJZiB0aGUgdXJsIGlzIGVtcHR5LCB0aGUgcGFnZSBpcyBi
bGFuay4KKworICAgIFRoZSB1cmwgaXMgYWx3YXlzIGFic29sdXRlIChRTUwgd2lsbCByZXNvbHZl
IHJlbGF0aXZlIFVSTCBzdHJpbmdzIGluIHRoZSBjb250ZXh0CisgICAgb2YgdGhlIGNvbnRhaW5p
bmcgUU1MIGRvY3VtZW50KS4KKyovCitRVXJsIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVybCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGQtPnVybDsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3
OjpzZXRVcmwoY29uc3QgUVVybCAmdXJsKQoreworICAgIGlmICh1cmwgPT0gZC0+dXJsKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoaXNDb21wb25lbnRDb21wbGV0ZSgpKSB7CisgICAgICAg
IGQtPnVybCA9IHVybDsKKyAgICAgICAgdXBkYXRlQ29udGVudHNTaXplKCk7CisgICAgICAgIFFV
cmwgc2V0dXJsID0gdXJsOworICAgICAgICBpZiAoc2V0dXJsLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHNldHVybCA9IFFVcmwoUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSk7CisKKyAgICAg
ICAgUV9BU1NFUlQoIXNldHVybC5pc1JlbGF0aXZlKCkpOworCisgICAgICAgIHBhZ2UoKS0+bWFp
bkZyYW1lKCktPmxvYWQoc2V0dXJsKTsKKworICAgICAgICBlbWl0IHVybENoYW5nZWQoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBkLT5wZW5kaW5nID0gZC0+UGVuZGluZ1VybDsKKyAgICAgICAg
ZC0+cGVuZGluZ1VybCA9IHVybDsKKyAgICB9Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBp
bnQgV2ViVmlldzo6cHJlZmVycmVkV2lkdGgKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBp
ZGVhbCB3aWR0aCBmb3IgZGlzcGxheWluZyB0aGUgY3VycmVudCBVUkwuCisqLworaW50IFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJlZFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+
cHJlZmVycmVkd2lkdGg7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UHJlZmVy
cmVkV2lkdGgoaW50IHdpZHRoKQoreworICAgIGlmIChkLT5wcmVmZXJyZWR3aWR0aCA9PSB3aWR0
aCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByZWZlcnJlZHdpZHRoID0gd2lkdGg7CisgICAg
dXBkYXRlQ29udGVudHNTaXplKCk7CisgICAgZW1pdCBwcmVmZXJyZWRXaWR0aENoYW5nZWQoKTsK
K30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGludCBXZWJWaWV3OjpwcmVmZXJyZWRIZWlnaHQK
KyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBpZGVhbCBoZWlnaHQgZm9yIGRpc3BsYXlpbmcg
dGhlIGN1cnJlbnQgVVJMLgorICAgIFRoaXMgb25seSBhZmZlY3RzIHRoZSBhcmVhIHpvb21lZCBi
eSBoZXVyaXN0aWNab29tKCkuCisqLworaW50IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJl
ZEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnByZWZlcnJlZGhlaWdodDsKK30KKwor
dm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRIZWlnaHQoaW50IGhlaWdodCkK
K3sKKyAgICBpZiAoZC0+cHJlZmVycmVkaGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgcmV0dXJu
OworICAgIGQtPnByZWZlcnJlZGhlaWdodCA9IGhlaWdodDsKKyAgICB1cGRhdGVDb250ZW50c1Np
emUoKTsKKyAgICBlbWl0IHByZWZlcnJlZEhlaWdodENoYW5nZWQoKTsKK30KKworLyohCisgICAg
XHFtbG1ldGhvZCBib29sIFdlYlZpZXc6OmV2YWx1YXRlSmF2YVNjcmlwdChzdHJpbmcpCisKKyAg
ICBFdmFsdWF0ZXMgdGhlIFxhIHNjcmlwdFNvdXJjZSBKYXZhU2NyaXB0IGluc2lkZSB0aGUgY29u
dGV4dCBvZiB0aGUKKyAgICBtYWluIHdlYiBmcmFtZSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBv
ZiB0aGUgbGFzdCBleGVjdXRlZCBzdGF0ZW1lbnQuCisKKyAgICBOb3RlIHRoYXQgdGhpcyBKYXZh
U2NyaXB0IGRvZXMgXGUgbm90IGhhdmUgYW55IGFjY2VzcyB0byBRTUwgb2JqZWN0cworICAgIGV4
Y2VwdCBhcyBtYWRlIGF2YWlsYWJsZSBhcyB3aW5kb3dPYmplY3RzLgorKi8KK1FWYXJpYW50IFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OmV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJiBzY3Jp
cHRTb3VyY2UpCit7CisgICAgcmV0dXJuIHRoaXMtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1
YXRlSmF2YVNjcmlwdChzY3JpcHRTb3VyY2UpOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OnByb3BhZ2F0ZUZvY3VzVG9XZWJQYWdlKGJvb2wgaGFzRm9jdXMpCit7CisgICAgUUZvY3Vz
RXZlbnQgZXZlbnQoaGFzRm9jdXMgPyBRRXZlbnQ6OkZvY3VzSW4gOiBRRXZlbnQ6OkZvY3VzT3V0
KTsKKyAgICBwYWdlKCktPmV2ZW50KCZldmVudCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2Vi
Vmlldzo6dXBkYXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpCit7CisgICAgUVNpemVGIHNpemUg
PSBkLT52aWV3LT5nZW9tZXRyeSgpLnNpemUoKSAqIGNvbnRlbnRzU2NhbGUoKTsKKyAgICBzZXRJ
bXBsaWNpdFdpZHRoKHNpemUud2lkdGgoKSk7CisgICAgc2V0SW1wbGljaXRIZWlnaHQoc2l6ZS5o
ZWlnaHQoKSk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6aW5pdGlhbExheW91dCgp
Cit7CisgICAgLy8gbm90aGluZyB1c2VmdWwgdG8gZG8gYXQgdGhpcyBwb2ludAorfQorCit2b2lk
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVwZGF0ZUNvbnRlbnRzU2l6ZSgpCit7CisgICAgaWYgKGQt
PnBhZ2UpIHsKKyAgICAgICAgZC0+cGFnZS0+c2V0UHJlZmVycmVkQ29udGVudHNTaXplKFFTaXpl
KAorICAgICAgICAgICAgZC0+cHJlZmVycmVkd2lkdGg+MCA/IGQtPnByZWZlcnJlZHdpZHRoIDog
d2lkdGgoKSwKKyAgICAgICAgICAgIGQtPnByZWZlcnJlZGhlaWdodD4wID8gZC0+cHJlZmVycmVk
aGVpZ2h0IDogaGVpZ2h0KCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmll
dzo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUmVjdEYmIG9sZEdlb21ldHJ5KQoreworICAg
IGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpICYmIGQtPnBhZ2Up
IHsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBkLT5wYWdlLT5wcmVmZXJyZWRDb250ZW50
c1NpemUoKTsKKyAgICAgICAgaWYgKHdpZHRoVmFsaWQoKSkKKyAgICAgICAgICAgIGNvbnRlbnRT
aXplLnNldFdpZHRoKHdpZHRoKCkpOworICAgICAgICBpZiAoaGVpZ2h0VmFsaWQoKSkKKyAgICAg
ICAgICAgIGNvbnRlbnRTaXplLnNldEhlaWdodChoZWlnaHQoKSk7CisgICAgICAgIGlmIChjb250
ZW50U2l6ZSAhPSBkLT5wYWdlLT5wcmVmZXJyZWRDb250ZW50c1NpemUoKSkKKyAgICAgICAgICAg
IGQtPnBhZ2UtPnNldFByZWZlcnJlZENvbnRlbnRzU2l6ZShjb250ZW50U2l6ZSk7CisgICAgfQor
ICAgIFFEZWNsYXJhdGl2ZUl0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2Vv
bWV0cnkpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgbGlzdDxvYmplY3Q+IFdlYlZpZXc6
OmphdmFTY3JpcHRXaW5kb3dPYmplY3RzCisKKyAgICBBIGxpc3Qgb2YgUU1MIG9iamVjdHMgdG8g
ZXhwb3NlIHRvIHRoZSB3ZWIgcGFnZS4KKworICAgIEVhY2ggb2JqZWN0IHdpbGwgYmUgYWRkZWQg
YXMgYSBwcm9wZXJ0eSBvZiB0aGUgd2ViIGZyYW1lJ3Mgd2luZG93IG9iamVjdC4gIFRoZQorICAg
IHByb3BlcnR5IG5hbWUgaXMgY29udHJvbGxlZCBieSB0aGUgdmFsdWUgb2YgXGMgV2ViVmlldy53
aW5kb3dPYmplY3ROYW1lIAorICAgIGF0dGFjaGVkIHByb3BlcnR5LgorCisgICAgRXhwb3Npbmcg
UU1MIG9iamVjdHMgdG8gYSB3ZWIgcGFnZSBhbGxvd3MgSmF2YVNjcmlwdCBleGVjdXRpbmcgaW4g
dGhlIHdlYiAKKyAgICBwYWdlIGl0c2VsZiB0byBjb21tdW5pY2F0ZSB3aXRoIFFNTCwgYnkgcmVh
ZGluZyBhbmQgd3JpdGluZyBwcm9wZXJ0aWVzIGFuZAorICAgIGJ5IGNhbGxpbmcgbWV0aG9kcyBv
ZiB0aGUgZXhwb3NlZCBRTUwgb2JqZWN0cy4KKworICAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cg
dG8gY2FsbCBpbnRvIGEgUU1MIG1ldGhvZCB1c2luZyBhIHdpbmRvdyBvYmplY3QuCisKKyAgICBc
cW1sCisgICAgV2ViVmlldyB7CisgICAgICAgIGphdmFTY3JpcHRXaW5kb3dPYmplY3RzOiBRdE9i
amVjdCB7CisgICAgICAgICAgICBXZWJWaWV3LndpbmRvd09iamVjdE5hbWU6ICJxbWwiCisKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIHFtbENhbGwoKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coIlRoaXMgY2FsbCBpcyBpbiBRTUwhIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBodG1sOiAiPHNjcmlwdD5jb25zb2xlLmxvZyhcIlRoaXMgaXMgaW4gV2ViS2l0IVwi
KTsgd2luZG93LnFtbC5xbWxDYWxsKCk7PC9zY3JpcHQ+IgorICAgIH0KKyAgICBcZW5kcW1sCisK
KyAgICBUaGUgb3V0cHV0IG9mIHRoZSBleGFtcGxlIHdpbGwgYmU6CisgICAgXGNvZGUKKyAgICBU
aGlzIGlzIGluIFdlYktpdCEKKyAgICBUaGlzIGNhbGwgaXMgaW4gUU1MIQorICAgIFxlbmRjb2Rl
CisKKyAgICBJZiBKYXZhc2NyaXB0IGlzIG5vdCBlbmFibGVkIGZvciB0aGUgcGFnZSwgdGhlbiB0
aGlzIHByb3BlcnR5IGRvZXMgbm90aGluZy4KKyovCitRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8
UU9iamVjdD4gUURlY2xhcmF0aXZlV2ViVmlldzo6amF2YVNjcmlwdFdpbmRvd09iamVjdHMoKQor
eworICAgIHJldHVybiBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4odGhpcywgZCwg
JlFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjp3aW5kb3dPYmplY3RzQXBwZW5kKTsKK30KKwor
UURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpxbWxBdHRh
Y2hlZFByb3BlcnRpZXMoUU9iamVjdCogbykKK3sKKyAgICByZXR1cm4gbmV3IFFEZWNsYXJhdGl2
ZVdlYlZpZXdBdHRhY2hlZChvKTsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0
ZTo6dXBkYXRlV2luZG93T2JqZWN0cygpCit7CisgICAgaWYgKCFxLT5pc0NvbXBvbmVudENvbXBs
ZXRlUHVibGljKCkgfHwgIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGlp
ID0gMDsgaWkgPCB3aW5kb3dPYmplY3RzLmNvdW50KCk7ICsraWkpIHsKKyAgICAgICAgUU9iamVj
dCogb2JqZWN0ID0gd2luZG93T2JqZWN0cy5hdChpaSk7CisgICAgICAgIFFEZWNsYXJhdGl2ZVdl
YlZpZXdBdHRhY2hlZCogYXR0YWNoZWQgPSBzdGF0aWNfY2FzdDxRRGVjbGFyYXRpdmVXZWJWaWV3
QXR0YWNoZWQgKj4ocW1sQXR0YWNoZWRQcm9wZXJ0aWVzT2JqZWN0PFFEZWNsYXJhdGl2ZVdlYlZp
ZXc+KG9iamVjdCkpOworICAgICAgICBpZiAoYXR0YWNoZWQgJiYgIWF0dGFjaGVkLT53aW5kb3dP
YmplY3ROYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmFk
ZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdChhdHRhY2hlZC0+d2luZG93T2JqZWN0TmFtZSgpLCBv
YmplY3QpOworICAgIH0KK30KKworYm9vbCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpyZW5kZXJpbmdF
bmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cmVuZGVyaW5nOworfQorCit2b2lkIFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFJlbmRlcmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIGlmIChkLT5yZW5kZXJpbmcgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGQt
PnJlbmRlcmluZyA9IGVuYWJsZWQ7CisgICAgZW1pdCByZW5kZXJpbmdFbmFibGVkQ2hhbmdlZCgp
OworCisgICAgZC0+dmlldy0+c2V0VGlsZWRCYWNraW5nU3RvcmVGcm96ZW4oIWVuYWJsZWQpOwor
fQorCitRTW91c2VFdmVudCogUURlY2xhcmF0aXZlV2ViVmlldzo6c2NlbmVNb3VzZUV2ZW50VG9N
b3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZSkKK3sKKyAgICBRRXZlbnQ6OlR5
cGUgdDsKKyAgICBzd2l0Y2ggKGUtPnR5cGUoKSkgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBR
RXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZVByZXNzOgorICAgICAgICB0ID0gUUV2ZW50OjpNb3Vz
ZUJ1dHRvblByZXNzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NT
Y2VuZU1vdXNlUmVsZWFzZToKKyAgICAgICAgdCA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFFdmVudDo6R3JhcGhpY3NTY2VuZU1vdXNlTW92
ZToKKyAgICAgICAgdCA9IFFFdmVudDo6TW91c2VNb3ZlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFFHcmFwaGljc1NjZW5lRXZlbnQ6OkdyYXBoaWNzU2NlbmVNb3VzZURvdWJsZUNsaWNrOgor
ICAgICAgICB0ID0gUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNrOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBRTW91c2VFdmVudCogbWUgPSBuZXcgUU1vdXNlRXZlbnQodCwgKGUtPnBv
cygpIC8gY29udGVudHNTY2FsZSgpKS50b1BvaW50KCksIGUtPmJ1dHRvbigpLCBlLT5idXR0b25z
KCksIDApOworICAgIHJldHVybiBtZTsKK30KKworUU1vdXNlRXZlbnQqIFFEZWNsYXJhdGl2ZVdl
YlZpZXc6OnNjZW5lSG92ZXJNb3ZlRXZlbnRUb01vdXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVIb3Zl
ckV2ZW50KiBlKQoreworICAgIFFFdmVudDo6VHlwZSB0ID0gUUV2ZW50OjpNb3VzZU1vdmU7CisK
KyAgICBRTW91c2VFdmVudCogbWUgPSBuZXcgUU1vdXNlRXZlbnQodCwgKGUtPnBvcygpIC8gY29u
dGVudHNTY2FsZSgpKS50b1BvaW50KCksIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9uLCAwKTsK
KworICAgIHJldHVybiBtZTsKK30KKworLyohCisgICAgXHFtbHNpZ25hbCBXZWJWaWV3OjpvbkRv
dWJsZUNsaWNrKGNsaWNreCxjbGlja3kpCisKKyAgICBUaGUgV2ViVmlldyBkb2VzIG5vdCBwYXNz
IGRvdWJsZS1jbGljayBldmVudHMgdG8gdGhlIHdlYiBlbmdpbmUsIGJ1dCByYXRoZXIKKyAgICBl
bWl0cyB0aGlzIHNpZ25hbHMuCisqLworCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNl
RG91YmxlQ2xpY2tFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAg
IFFNb3VzZUV2ZW50KiBtZSA9IHNjZW5lTW91c2VFdmVudFRvTW91c2VFdmVudChldmVudCk7Cisg
ICAgZW1pdCBkb3VibGVDbGljayhtZS0+eCgpLCBtZS0+eSgpKTsKKyAgICBkZWxldGUgbWU7Cit9
CisKKy8qIQorICAgIFxxbWxtZXRob2QgYm9vbCBXZWJWaWV3OjpoZXVyaXN0aWNab29tKGNsaWNr
WCxjbGlja1ksbWF4em9vbSkKKworICAgIEZpbmRzIGEgem9vbSB0aGF0OgorICAgIFxsaXN0Cisg
ICAgXGkgc2hvd3MgYSB3aG9sZSBpdGVtCisgICAgXGkgaW5jbHVkZXMgKFxhIGNsaWNrWCwgXGEg
Y2xpY2tZKQorICAgIFxpIGZpdHMgaW50byB0aGUgcHJlZmVycmVkV2lkdGggYW5kIHByZWZlcnJl
ZEhlaWdodAorICAgIFxpIHpvb21zIGJ5IG5vIG1vcmUgdGhhbiBcYSBtYXh6b29tCisgICAgXGkg
aXMgbW9yZSB0aGFuIDEwJSBhYm92ZSB0aGUgY3VycmVudCB6b29tCisgICAgXGVuZGxpc3QKKwor
ICAgIElmIHN1Y2ggYSB6b29tIGV4aXN0cywgZW1pdHMgem9vbVRvKHpvb20sY2VudGVyWCxjZW50
ZXJZKSBhbmQgcmV0dXJucyB0cnVlOyBvdGhlcndpc2UsCisgICAgbm8gc2lnbmFsIGlzIGVtaXR0
ZWQgYW5kIHJldHVybnMgZmFsc2UuCisqLworYm9vbCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpoZXVy
aXN0aWNab29tKGludCBjbGlja1gsIGludCBjbGlja1ksIHFyZWFsIG1heHpvb20pCit7CisgICAg
aWYgKGNvbnRlbnRzU2NhbGUoKSA+PSBtYXh6b29tIC8gem9vbUZhY3RvcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcXJlYWwgb3pmID0gY29udGVudHNTY2FsZSgpOworICAgIFFSZWN0
IHNob3dhcmVhID0gZWxlbWVudEFyZWFBdChjbGlja1gsIGNsaWNrWSwgZC0+cHJlZmVycmVkd2lk
dGggLyBtYXh6b29tLCBkLT5wcmVmZXJyZWRoZWlnaHQgLyBtYXh6b29tKTsKKyAgICBxcmVhbCB6
ID0gcU1pbihxcmVhbChkLT5wcmVmZXJyZWR3aWR0aCkgLyBzaG93YXJlYS53aWR0aCgpLCBxcmVh
bChkLT5wcmVmZXJyZWRoZWlnaHQpIC8gc2hvd2FyZWEuaGVpZ2h0KCkpOworICAgIGlmICh6ID4g
bWF4em9vbSAvIHpvb21GYWN0b3IoKSkKKyAgICAgICAgeiA9IG1heHpvb20gLyB6b29tRmFjdG9y
KCk7CisgICAgaWYgKHogLyBvemYgPiAxLjIpIHsKKyAgICAgICAgUVJlY3RGIHIoc2hvd2FyZWEu
bGVmdCgpKnosIHNob3dhcmVhLnRvcCgpICogeiwgc2hvd2FyZWEud2lkdGgoKSAqIHosIHNob3dh
cmVhLmhlaWdodCgpICogeik7CisgICAgICAgIGVtaXQgem9vbVRvKHosIHIueCgpICsgci53aWR0
aCgpIC8gMiwgci55KCkgKyByLmhlaWdodCgpIC8gMik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBpbnQg
V2ViVmlldzo6cHJlc3NHcmFiVGltZQorCisgICAgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMg
dGhlIHVzZXIgbXVzdCBwcmVzcyBiZWZvcmUgdGhlIFdlYlZpZXcKKyAgICBzdGFydHMgcGFzc2lu
ZyBtb3ZlIGV2ZW50cyB0aHJvdWdoIHRvIHRoZSB3ZWIgZW5naW5lIChyYXRoZXIgdGhhbgorICAg
IGxldHRpbmcgb3RoZXIgUU1MIGVsZW1lbnRzIHN1Y2ggYXMgYSBGbGlja2FibGUgdGFrZSB0aGVt
KS4KKworICAgIERlZmF1bHRzIHRvIDQwMG1zLiBTZXQgdG8gMCB0byBhbHdheXMgZ3JhYiBhbmQg
cGFzcyBtb3ZlIGV2ZW50cyB0bworICAgIHRoZSB3ZWIgZW5naW5lLgorKi8KK2ludCBRRGVjbGFy
YXRpdmVXZWJWaWV3OjpwcmVzc0dyYWJUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cHJl
c3NUaW1lOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFByZXNzR3JhYlRpbWUo
aW50IG1zKQoreworICAgIGlmIChkLT5wcmVzc1RpbWUgPT0gbXMpIAorICAgICAgICByZXR1cm47
CisgICAgZC0+cHJlc3NUaW1lID0gbXM7CisgICAgZW1pdCBwcmVzc0dyYWJUaW1lQ2hhbmdlZCgp
OworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om1vdXNlUHJlc3NFdmVudChRR3JhcGhp
Y3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHNldEZvY3VzKHRydWUpOworICAgIFFN
b3VzZUV2ZW50KiBtZSA9IHNjZW5lTW91c2VFdmVudFRvTW91c2VFdmVudChldmVudCk7CisKKyAg
ICBkLT5wcmVzc1BvaW50ID0gbWUtPnBvcygpOworICAgIGlmIChkLT5wcmVzc1RpbWUpIHsKKyAg
ICAgICAgZC0+cHJlc3NUaW1lci5zdGFydChkLT5wcmVzc1RpbWUsIHRoaXMpOworICAgICAgICBz
ZXRLZWVwTW91c2VHcmFiKGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBncmFiTW91c2Uo
KTsKKyAgICAgICAgc2V0S2VlcE1vdXNlR3JhYih0cnVlKTsKKyAgICB9CisKKyAgICBwYWdlKCkt
PmV2ZW50KG1lKTsKKyAgICBldmVudC0+c2V0QWNjZXB0ZWQoCisvKgorICBJdCBpcyBub3QgY29y
cmVjdCB0byBzZW5kIHRoZSBwcmVzcyBldmVudCB1cHdhcmRzLCBpZiBpdCBpcyBub3QgYWNjZXB0
ZWQgYnkgV2ViS2l0CisgIGUuZy4gcHVzaCBidXR0b24gZG9lcyBub3Qgd29yaywgaWYgZG9uZSBz
byBhcyBRR3JhcGhpY3NTY2VuZSB3aWxsIG5vdCBzZW5kIHRoZSByZWxlYXNlIGV2ZW50IGF0IGFs
bCB0byBXZWJLaXQKKyAgTWlnaHQgYmUgYSBidWcgaW4gV2ViS2l0LCB0aG91Z2gKKyAgKi8KKyNp
ZiAxIC8vIFFUX1ZFUlNJT04gPD0gMHgwNDA1MDAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI5Mzg5CisgICAgICAgIHRydWUKKyNlbHNlCisgICAgICAgIG1lLT5p
c0FjY2VwdGVkKCkKKyNlbmRpZgorICAgICAgICApOworICAgIGRlbGV0ZSBtZTsKKyAgICBpZiAo
IWV2ZW50LT5pc0FjY2VwdGVkKCkpCisgICAgICAgIFFEZWNsYXJhdGl2ZUl0ZW06Om1vdXNlUHJl
c3NFdmVudChldmVudCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6bW91c2VSZWxl
YXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBRTW91c2VF
dmVudCogbWUgPSBzY2VuZU1vdXNlRXZlbnRUb01vdXNlRXZlbnQoZXZlbnQpOworICAgIHBhZ2Uo
KS0+ZXZlbnQobWUpOworICAgIGQtPnByZXNzVGltZXIuc3RvcCgpOworICAgIGV2ZW50LT5zZXRB
Y2NlcHRlZCgKKy8qCisgIEl0IGlzIG5vdCBjb3JyZWN0IHRvIHNlbmQgdGhlIHByZXNzIGV2ZW50
IHVwd2FyZHMsIGlmIGl0IGlzIG5vdCBhY2NlcHRlZCBieSBXZWJLaXQKKyAgZS5nLiBwdXNoIGJ1
dHRvbiBkb2VzIG5vdCB3b3JrLCBpZiBkb25lIHNvIGFzIFFHcmFwaGljc1NjZW5lIHdpbGwgbm90
IHNlbmQgYWxsIHRoZSBldmVudHMgdG8gV2ViS2l0CisgICovCisjaWYgMSAvLyBRVF9WRVJTSU9O
IDw9IDB4MDQwNTAwIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
OTM4OQorICAgICAgICB0cnVlCisjZWxzZQorICAgICAgICBtZS0+aXNBY2NlcHRlZCgpCisjZW5k
aWYKKyAgICAgICAgKTsKKyAgICBkZWxldGUgbWU7CisgICAgaWYgKCFldmVudC0+aXNBY2NlcHRl
ZCgpKQorICAgICAgICBRRGVjbGFyYXRpdmVJdGVtOjptb3VzZVJlbGVhc2VFdmVudChldmVudCk7
CisgICAgc2V0S2VlcE1vdXNlR3JhYihmYWxzZSk7CisgICAgdW5ncmFiTW91c2UoKTsKK30KKwor
dm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCkK
K3sKKyAgICBpZiAoZXZlbnQtPnRpbWVySWQoKSA9PSBkLT5wcmVzc1RpbWVyLnRpbWVySWQoKSkg
eworICAgICAgICBkLT5wcmVzc1RpbWVyLnN0b3AoKTsKKyAgICAgICAgZ3JhYk1vdXNlKCk7Cisg
ICAgICAgIHNldEtlZXBNb3VzZUdyYWIodHJ1ZSk7CisgICAgfQorfQorCit2b2lkIFFEZWNsYXJh
dGl2ZVdlYlZpZXc6Om1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZl
bnQpCit7CisgICAgUU1vdXNlRXZlbnQqIG1lID0gc2NlbmVNb3VzZUV2ZW50VG9Nb3VzZUV2ZW50
KGV2ZW50KTsKKyAgICBpZiAoZC0+cHJlc3NUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGlm
ICgobWUtPnBvcygpIC0gZC0+cHJlc3NQb2ludCkubWFuaGF0dGFuTGVuZ3RoKCkgPiBRQXBwbGlj
YXRpb246OnN0YXJ0RHJhZ0Rpc3RhbmNlKCkpCisgICAgICAgICAgICBkLT5wcmVzc1RpbWVyLnN0
b3AoKTsKKyAgICB9CisgICAgaWYgKGtlZXBNb3VzZUdyYWIoKSkgeworICAgICAgICBwYWdlKCkt
PmV2ZW50KG1lKTsKKyAgICAgICAgZXZlbnQtPnNldEFjY2VwdGVkKAorLyoKKyAgSXQgaXMgbm90
IGNvcnJlY3QgdG8gc2VuZCB0aGUgcHJlc3MgZXZlbnQgdXB3YXJkcywgaWYgaXQgaXMgbm90IGFj
Y2VwdGVkIGJ5IFdlYktpdAorICBlLmcuIHB1c2ggYnV0dG9uIGRvZXMgbm90IHdvcmssIGlmIGRv
bmUgc28gYXMgUUdyYXBoaWNzU2NlbmUgd2lsbCBub3Qgc2VuZCB0aGUgcmVsZWFzZSBldmVudCBh
dCBhbGwgdG8gV2ViS2l0CisgIE1pZ2h0IGJlIGEgYnVnIGluIFdlYktpdCwgdGhvdWdoCisgICov
CisjaWYgMSAvLyBRVF9WRVJTSU9OIDw9IDB4MDQwNTAwIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yOTM4OQorICAgICAgICAgICAgdHJ1ZQorI2Vsc2UKKyAgICAg
ICAgICAgIG1lLT5pc0FjY2VwdGVkKCkKKyNlbmRpZgorICAgICAgICApOworICAgIH0KKyAgICBk
ZWxldGUgbWU7CisgICAgaWYgKCFldmVudC0+aXNBY2NlcHRlZCgpKQorICAgICAgICBRRGVjbGFy
YXRpdmVJdGVtOjptb3VzZU1vdmVFdmVudChldmVudCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZl
V2ViVmlldzo6aG92ZXJNb3ZlRXZlbnQoUUdyYXBoaWNzU2NlbmVIb3ZlckV2ZW50KiBldmVudCkK
K3sKKyAgICBRTW91c2VFdmVudCogbWUgPSBzY2VuZUhvdmVyTW92ZUV2ZW50VG9Nb3VzZUV2ZW50
KGV2ZW50KTsKKyAgICBwYWdlKCktPmV2ZW50KG1lKTsKKyAgICBldmVudC0+c2V0QWNjZXB0ZWQo
CisjaWYgUVRfVkVSU0lPTiA8PSAweDA0MDUwMCAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjkzODkKKyAgICAgICAgdHJ1ZQorI2Vsc2UKKyAgICAgICAgbWUtPmlz
QWNjZXB0ZWQoKQorI2VuZGlmCisgICAgKTsKKyAgICBkZWxldGUgbWU7CisgICAgaWYgKCFldmVu
dC0+aXNBY2NlcHRlZCgpKQorICAgICAgICBRRGVjbGFyYXRpdmVJdGVtOjpob3Zlck1vdmVFdmVu
dChldmVudCk7Cit9CisKK2Jvb2wgUURlY2xhcmF0aXZlV2ViVmlldzo6c2NlbmVFdmVudChRRXZl
bnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6S2V5UHJlc3Mg
fHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OktleVJlbGVhc2UpCisgICAgICAgIC8vIEtleSBl
dmVudHMgZ28gdG8gdGhlIHBhZ2UKKyAgICAgICAgcmV0dXJuIHBhZ2UoKS0+ZXZlbnQoZXZlbnQp
OworICAgIHJldHVybiBRRGVjbGFyYXRpdmVJdGVtOjpzY2VuZUV2ZW50KGV2ZW50KTsKK30KKwor
CisvKiEKKyAgICBccW1scHJvcGVydHkgYWN0aW9uIFdlYlZpZXc6OmJhY2sKKyAgICBUaGlzIHBy
b3BlcnR5IGhvbGRzIHRoZSBhY3Rpb24gZm9yIGNhdXNpbmcgdGhlIHByZXZpb3VzIFVSTCBpbiB0
aGUgaGlzdG9yeSB0byBiZSBkaXNwbGF5ZWQuCisqLworUUFjdGlvbiogUURlY2xhcmF0aXZlV2Vi
Vmlldzo6YmFja0FjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+YWN0aW9uKFFX
ZWJQYWdlOjpCYWNrKTsKK30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGFjdGlvbiBXZWJWaWV3
Ojpmb3J3YXJkCisgICAgVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgYWN0aW9uIGZvciBjYXVzaW5n
IHRoZSBuZXh0IFVSTCBpbiB0aGUgaGlzdG9yeSB0byBiZSBkaXNwbGF5ZWQuCisqLworUUFjdGlv
biogUURlY2xhcmF0aXZlV2ViVmlldzo6Zm9yd2FyZEFjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpGb3J3YXJkKTsKK30KKworLyohCisgICAgXHFt
bHByb3BlcnR5IGFjdGlvbiBXZWJWaWV3OjpyZWxvYWQKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRz
IHRoZSBhY3Rpb24gZm9yIHJlbG9hZGluZyB3aXRoIHRoZSBjdXJyZW50IFVSTAorKi8KK1FBY3Rp
b24qIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnJlbG9hZEFjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpSZWxvYWQpOworfQorCisvKiEKKyAgICBccW1s
cHJvcGVydHkgYWN0aW9uIFdlYlZpZXc6OnN0b3AKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRo
ZSBhY3Rpb24gZm9yIHN0b3BwaW5nIGxvYWRpbmcgd2l0aCB0aGUgY3VycmVudCBVUkwKKyovCitR
QWN0aW9uKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdG9wQWN0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlN0b3ApOworfQorCisvKiEKKyAgICBccW1s
cHJvcGVydHkgcmVhbCBXZWJWaWV3Ojp0aXRsZQorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhl
IHRpdGxlIG9mIHRoZSB3ZWIgcGFnZSBjdXJyZW50bHkgdmlld2VkCisKKyAgICBCeSBkZWZhdWx0
LCB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIGFuIGVtcHR5IHN0cmluZy4KKyovCitRU3RyaW5nIFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5t
YWluRnJhbWUoKS0+dGl0bGUoKTsKK30KKworCisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBwaXht
YXAgV2ViVmlldzo6aWNvbgorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIGljb24gYXNzb2Np
YXRlZCB3aXRoIHRoZSB3ZWIgcGFnZSBjdXJyZW50bHkgdmlld2VkCisqLworUVBpeG1hcCBRRGVj
bGFyYXRpdmVXZWJWaWV3OjppY29uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5tYWlu
RnJhbWUoKS0+aWNvbigpLnBpeG1hcChRU2l6ZSgyNTYsIDI1NikpOworfQorCisKKy8qIQorICAg
IFxxbWxwcm9wZXJ0eSByZWFsIFdlYlZpZXc6Onpvb21GYWN0b3IKKyAgICBUaGlzIHByb3BlcnR5
IGhvbGRzIHRoZSBtdWx0aXBsaWVyIHVzZWQgdG8gc2NhbGUgdGhlIGNvbnRlbnRzIG9mIGEgV2Vi
IHBhZ2UuCisqLwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRab29tRmFjdG9yKHFyZWFs
IGZhY3RvcikKK3sKKyAgICBpZiAoZmFjdG9yID09IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnpvb21G
YWN0b3IoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+c2V0
Wm9vbUZhY3RvcihmYWN0b3IpOworICAgIHVwZGF0ZUNvbnRlbnRzU2l6ZSgpOworCisgICAgZW1p
dCB6b29tRmFjdG9yQ2hhbmdlZCgpOworfQorCitxcmVhbCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojp6
b29tRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5tYWluRnJhbWUoKS0+em9v
bUZhY3RvcigpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6OnN0
YXR1c1RleHQKKworICAgIFRoaXMgcHJvcGVydHkgaXMgdGhlIGN1cnJlbnQgc3RhdHVzIHN1Z2dl
c3RlZCBieSB0aGUgY3VycmVudCB3ZWIgcGFnZS4gSW4gYSB3ZWIgYnJvd3NlciwKKyAgICBzdWNo
IHN0YXR1cyBpcyBvZnRlbiBzaG93biBpbiBzb21lIGtpbmQgb2Ygc3RhdHVzIGJhci4KKyovCit2
b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFN0YXR1c1RleHQoY29uc3QgUVN0cmluZyYgcykK
K3sKKyAgICBkLT5zdGF0dXNUZXh0ID0gczsKKyAgICBlbWl0IHN0YXR1c1RleHRDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7
CisgICAgZC0+dXBkYXRlV2luZG93T2JqZWN0cygpOworfQorCitRU3RyaW5nIFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OnN0YXR1c1RleHQoKSBjb25zdAoreworICAgIHJldHVybiBkLT5zdGF0dXNUZXh0
OworfQorCitRV2ViUGFnZSogUURlY2xhcmF0aXZlV2ViVmlldzo6cGFnZSgpIGNvbnN0Cit7CisK
KyAgICBpZiAoIWQtPnBhZ2UpIHsKKyAgICAgICAgUURlY2xhcmF0aXZlV2ViVmlldyogc2VsZiA9
IGNvbnN0X2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlldyo+KHRoaXMpOworICAgICAgICBRV2ViUGFn
ZSogd3AgPSBuZXcgUURlY2xhcmF0aXZlV2ViUGFnZShzZWxmKTsKKworICAgICAgICB3cC0+c2V0
TmV0d29ya0FjY2Vzc01hbmFnZXIocW1sRW5naW5lKHRoaXMpLT5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpKTsKKworICAgICAgICBzZWxmLT5zZXRQYWdlKHdwKTsKKworICAgICAgICByZXR1cm4gd3A7
CisgICAgfQorCisgICAgcmV0dXJuIGQtPnBhZ2U7Cit9CisKKworLy8gVGhlIFFPYmplY3QgaW50
ZXJmYWNlIHRvIHNldHRpbmdzKCkuCisvKiEKKyAgICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZp
ZXc6OnNldHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseQorICAgIFxxbWxwcm9wZXJ0eSBzdHJpbmcg
V2ViVmlldzo6c2V0dGluZ3MuZml4ZWRGb250RmFtaWx5CisgICAgXHFtbHByb3BlcnR5IHN0cmlu
ZyBXZWJWaWV3OjpzZXR0aW5ncy5zZXJpZkZvbnRGYW1pbHkKKyAgICBccW1scHJvcGVydHkgc3Ry
aW5nIFdlYlZpZXc6OnNldHRpbmdzLnNhbnNTZXJpZkZvbnRGYW1pbHkKKyAgICBccW1scHJvcGVy
dHkgc3RyaW5nIFdlYlZpZXc6OnNldHRpbmdzLmN1cnNpdmVGb250RmFtaWx5CisgICAgXHFtbHBy
b3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5mYW50YXN5Rm9udEZhbWlseQorCisgICAg
XHFtbHByb3BlcnR5IGludCBXZWJWaWV3OjpzZXR0aW5ncy5taW5pbXVtRm9udFNpemUKKyAgICBc
cW1scHJvcGVydHkgaW50IFdlYlZpZXc6OnNldHRpbmdzLm1pbmltdW1Mb2dpY2FsRm9udFNpemUK
KyAgICBccW1scHJvcGVydHkgaW50IFdlYlZpZXc6OnNldHRpbmdzLmRlZmF1bHRGb250U2l6ZQor
ICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmlldzo6c2V0dGluZ3MuZGVmYXVsdEZpeGVkRm9udFNp
emUKKworICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLmF1dG9Mb2FkSW1h
Z2VzCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MuamF2YXNjcmlwdEVu
YWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5qYXZhRW5hYmxl
ZAorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnBsdWdpbnNFbmFibGVk
CisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MucHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLmphdmFzY3Jp
cHRDYW5PcGVuV2luZG93cworICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdz
LmphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJW
aWV3OjpzZXR0aW5ncy5kZXZlbG9wZXJFeHRyYXNFbmFibGVkCisgICAgXHFtbHByb3BlcnR5IGJv
b2wgV2ViVmlldzo6c2V0dGluZ3MubGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbgorICAgIFxxbWxw
cm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnpvb21UZXh0T25seQorICAgIFxxbWxwcm9w
ZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLnByaW50RWxlbWVudEJhY2tncm91bmRzCisgICAg
XHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3Mub2ZmbGluZVN0b3JhZ2VEYXRhYmFz
ZUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5vZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3
OjpzZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkg
Ym9vbCBXZWJWaWV3OjpzZXR0aW5ncy5sb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzCisK
KyAgICBUaGVzZSBwcm9wZXJ0aWVzIGdpdmUgYWNjZXNzIHRvIHRoZSBzZXR0aW5ncyBjb250cm9s
bGluZyB0aGUgd2ViIHZpZXcuCisKKyAgICBTZWUgUVdlYlNldHRpbmdzIGZvciBkZXRhaWxzIG9m
IHRoZXNlIHByb3BlcnRpZXMuCisKKyAgICBccW1sCisgICAgICAgIFdlYlZpZXcgeworICAgICAg
ICAgICAgc2V0dGluZ3MucGx1Z2luc0VuYWJsZWQ6IHRydWUKKyAgICAgICAgICAgIHNldHRpbmdz
LnN0YW5kYXJkRm9udEZhbWlseTogIkFyaWFsIgorICAgICAgICAgICAgLi4uCisgICAgICAgIH0K
KyAgICBcZW5kcW1sCisqLworUURlY2xhcmF0aXZlV2ViU2V0dGluZ3MqIFFEZWNsYXJhdGl2ZVdl
YlZpZXc6OnNldHRpbmdzT2JqZWN0KCkgY29uc3QKK3sKKyAgICBkLT5zZXR0aW5ncy5zID0gcGFn
ZSgpLT5zZXR0aW5ncygpOworICAgIHJldHVybiAmZC0+c2V0dGluZ3M7Cit9CisKK3ZvaWQgUURl
Y2xhcmF0aXZlV2ViVmlldzo6c2V0UGFnZShRV2ViUGFnZSogcGFnZSkKK3sKKyAgICBpZiAoZC0+
cGFnZSA9PSBwYWdlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGQtPnBhZ2UpIHsKKyAgICAg
ICAgaWYgKGQtPnBhZ2UtPnBhcmVudCgpID09IHRoaXMpCisgICAgICAgICAgICBkZWxldGUgZC0+
cGFnZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZC0+cGFnZS0+ZGlzY29ubmVjdCh0aGlz
KTsKKyAgICB9CisgICAgZC0+cGFnZSA9IHBhZ2U7CisgICAgdXBkYXRlQ29udGVudHNTaXplKCk7
CisgICAgZC0+cGFnZS0+bWFpbkZyYW1lKCktPnNldFNjcm9sbEJhclBvbGljeShRdDo6SG9yaXpv
bnRhbCwgUXQ6OlNjcm9sbEJhckFsd2F5c09mZik7CisgICAgZC0+cGFnZS0+bWFpbkZyYW1lKCkt
PnNldFNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwsIFF0OjpTY3JvbGxCYXJBbHdheXNPZmYp
OworICAgIGNvbm5lY3QoZC0+cGFnZS0+bWFpbkZyYW1lKCksIFNJR05BTCh1cmxDaGFuZ2VkKFFV
cmwpKSwgdGhpcywgU0xPVChwYWdlVXJsQ2hhbmdlZCgpKSk7CisgICAgY29ubmVjdChkLT5wYWdl
LT5tYWluRnJhbWUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSksIHRoaXMsIFNJR05B
TCh0aXRsZUNoYW5nZWQoUVN0cmluZykpKTsKKyAgICBjb25uZWN0KGQtPnBhZ2UtPm1haW5GcmFt
ZSgpLCBTSUdOQUwodGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSwgdGhpcywgU0lHTkFMKGljb25DaGFu
Z2VkKCkpKTsKKyAgICBjb25uZWN0KGQtPnBhZ2UtPm1haW5GcmFtZSgpLCBTSUdOQUwoaWNvbkNo
YW5nZWQoKSksIHRoaXMsIFNJR05BTChpY29uQ2hhbmdlZCgpKSk7CisgICAgY29ubmVjdChkLT5w
YWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKGluaXRpYWxMYXlvdXRDb21wbGV0ZWQoKSksIHRoaXMs
IFNMT1QoaW5pdGlhbExheW91dCgpKSk7CisgICAgY29ubmVjdChkLT5wYWdlLT5tYWluRnJhbWUo
KSwgU0lHTkFMKGNvbnRlbnRzU2l6ZUNoYW5nZWQoUVNpemUpKSwgdGhpcywgU0lHTkFMKGNvbnRl
bnRzU2l6ZUNoYW5nZWQoUVNpemUpKSk7CisKKyAgICBjb25uZWN0KGQtPnBhZ2UsIFNJR05BTChs
b2FkU3RhcnRlZCgpKSwgdGhpcywgU0xPVChkb0xvYWRTdGFydGVkKCkpKTsKKyAgICBjb25uZWN0
KGQtPnBhZ2UsIFNJR05BTChsb2FkUHJvZ3Jlc3MoaW50KSksIHRoaXMsIFNMT1QoZG9Mb2FkUHJv
Z3Jlc3MoaW50KSkpOworICAgIGNvbm5lY3QoZC0+cGFnZSwgU0lHTkFMKGxvYWRGaW5pc2hlZChi
b29sKSksIHRoaXMsIFNMT1QoZG9Mb2FkRmluaXNoZWQoYm9vbCkpKTsKKyAgICBjb25uZWN0KGQt
PnBhZ2UsIFNJR05BTChzdGF0dXNCYXJNZXNzYWdlKFFTdHJpbmcpKSwgdGhpcywgU0xPVChzZXRT
dGF0dXNUZXh0KFFTdHJpbmcpKSk7CisKKyAgICBjb25uZWN0KGQtPnBhZ2UtPm1haW5GcmFtZSgp
LCBTSUdOQUwoamF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKSksIHRoaXMsIFNMT1Qod2lu
ZG93T2JqZWN0Q2xlYXJlZCgpKSk7CisKKyAgICBkLT5wYWdlLT5zZXR0aW5ncygpLT5zZXRBdHRy
aWJ1dGUoUVdlYlNldHRpbmdzOjpUaWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQsIHRydWUpOworCisg
ICAgZC0+dmlldy0+c2V0UGFnZShwYWdlKTsKK30KKworLyohCisgICAgXHFtbHNpZ25hbCBXZWJW
aWV3OjpvbkxvYWRTdGFydGVkKCkKKworICAgIFRoaXMgaGFuZGxlciBpcyBjYWxsZWQgd2hlbiB0
aGUgd2ViIGVuZ2luZSBiZWdpbnMgbG9hZGluZworICAgIGEgcGFnZS4gTGF0ZXIsIFdlYlZpZXc6
Om9uTG9hZEZpbmlzaGVkKCkgb3IgV2ViVmlldzo6b25Mb2FkRmFpbGVkKCkKKyAgICB3aWxsIGJl
IGVtaXR0ZWQuCisqLworCisvKiEKKyAgICBccW1sc2lnbmFsIFdlYlZpZXc6Om9uTG9hZEZpbmlz
aGVkKCkKKworICAgIFRoaXMgaGFuZGxlciBpcyBjYWxsZWQgd2hlbiB0aGUgd2ViIGVuZ2luZSBc
ZSBzdWNjZXNzZnVsbHkKKyAgICBmaW5pc2hlcyBsb2FkaW5nIGEgcGFnZSwgaW5jbHVkaW5nIGFu
eSBjb21wb25lbnQgY29udGVudAorICAgIChXZWJWaWV3OjpvbkxvYWRGYWlsZWQoKSB3aWxsIGJl
IGVtaXR0ZWQgb3RoZXJ3aXNlKS4KKworICAgIFxzYSBwcm9ncmVzcworKi8KKworLyohCisgICAg
XHFtbHNpZ25hbCBXZWJWaWV3OjpvbkxvYWRGYWlsZWQoKQorCisgICAgVGhpcyBoYW5kbGVyIGlz
IGNhbGxlZCB3aGVuIHRoZSB3ZWIgZW5naW5lIGZhaWxzIGxvYWRpbmcKKyAgICBhIHBhZ2Ugb3Ig
YW55IGNvbXBvbmVudCBjb250ZW50CisgICAgKFdlYlZpZXc6Om9uTG9hZEZpbmlzaGVkKCkgd2ls
bCBiZSBlbWl0dGVkIG9uIHN1Y2Nlc3MpLgorKi8KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3
Ojpsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwKKyAgICAgICAgICBRTmV0d29y
a0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24sCisgICAgICAgICAgY29uc3QgUUJ5
dGVBcnJheSAmYm9keSkKK3sKKyAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkKHJlcXVlc3Qs
IG9wZXJhdGlvbiwgYm9keSk7Cit9CisKK1FTdHJpbmcgUURlY2xhcmF0aXZlV2ViVmlldzo6aHRt
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnRvSHRtbCgpOwor
fQorCisvKiEKKyAgICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6Omh0bWwKKyAgICBUaGlz
IHByb3BlcnR5IGhvbGRzIEhUTUwgdGV4dCBzZXQgZGlyZWN0bHkKKworICAgIFRoZSBodG1sIHBy
b3BlcnR5IGNhbiBiZSBzZXQgYXMgYSBzdHJpbmcuCisKKyAgICBccW1sCisgICAgV2ViVmlldyB7
CisgICAgICAgIGh0bWw6ICI8cD5UaGlzIGlzIDxiPkhUTUw8L2I+LiIKKyAgICB9CisgICAgXGVu
ZHFtbAorKi8KK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0SHRtbChjb25zdCBRU3RyaW5n
ICZodG1sLCBjb25zdCBRVXJsICZiYXNlVXJsKQoreworICAgIHVwZGF0ZUNvbnRlbnRzU2l6ZSgp
OworICAgIGlmIChpc0NvbXBvbmVudENvbXBsZXRlKCkpCisgICAgICAgIHBhZ2UoKS0+bWFpbkZy
YW1lKCktPnNldEh0bWwoaHRtbCwgYmFzZVVybCk7CisgICAgZWxzZSB7CisgICAgICAgIGQtPnBl
bmRpbmcgPSBkLT5QZW5kaW5nSHRtbDsKKyAgICAgICAgZC0+cGVuZGluZ1VybCA9IGJhc2VVcmw7
CisgICAgICAgIGQtPnBlbmRpbmdTdHJpbmcgPSBodG1sOworICAgIH0KKyAgICBlbWl0IGh0bWxD
aGFuZ2VkKCk7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0Q29udGVudChjb25z
dCBRQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwgY29uc3QgUVVybCAm
YmFzZVVybCkKK3sKKyAgICB1cGRhdGVDb250ZW50c1NpemUoKTsKKworICAgIGlmIChpc0NvbXBv
bmVudENvbXBsZXRlKCkpCisgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnNldENvbnRlbnQo
ZGF0YSwgbWltZVR5cGUsIHFtbENvbnRleHQodGhpcyktPnJlc29sdmVkVXJsKGJhc2VVcmwpKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgZC0+cGVuZGluZyA9IGQtPlBlbmRpbmdDb250ZW50OworICAg
ICAgICBkLT5wZW5kaW5nVXJsID0gYmFzZVVybDsKKyAgICAgICAgZC0+cGVuZGluZ1N0cmluZyA9
IG1pbWVUeXBlOworICAgICAgICBkLT5wZW5kaW5nRGF0YSA9IGRhdGE7CisgICAgfQorfQorCitR
V2ViSGlzdG9yeSogUURlY2xhcmF0aXZlV2ViVmlldzo6aGlzdG9yeSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHBhZ2UoKS0+aGlzdG9yeSgpOworfQorCitRV2ViU2V0dGluZ3MqIFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OnNldHRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5zZXR0aW5n
cygpOworfQorCitRRGVjbGFyYXRpdmVXZWJWaWV3KiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpjcmVh
dGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIFFXZWJQYWdlOjpXZWJCcm93c2VyV2luZG93OiB7CisgICAgICAgIGlm
ICghZC0+bmV3V2luZG93Q29tcG9uZW50ICYmIGQtPm5ld1dpbmRvd1BhcmVudCkKKyAgICAgICAg
ICAgIHFXYXJuaW5nKCJXZWJWaWV3OjpuZXdXaW5kb3dDb21wb25lbnQgbm90IHNldCAtIFdlYlZp
ZXc6Om5ld1dpbmRvd1BhcmVudCBpZ25vcmVkIik7CisgICAgICAgIGVsc2UgaWYgKGQtPm5ld1dp
bmRvd0NvbXBvbmVudCAmJiAhZC0+bmV3V2luZG93UGFyZW50KQorICAgICAgICAgICAgcVdhcm5p
bmcoIldlYlZpZXc6Om5ld1dpbmRvd1BhcmVudCBub3Qgc2V0IC0gV2ViVmlldzo6bmV3V2luZG93
Q29tcG9uZW50IGlnbm9yZWQiKTsKKyAgICAgICAgZWxzZSBpZiAoZC0+bmV3V2luZG93Q29tcG9u
ZW50ICYmIGQtPm5ld1dpbmRvd1BhcmVudCkgeworICAgICAgICAgICAgUURlY2xhcmF0aXZlV2Vi
Vmlldyogd2VidmlldyA9IDA7CisgICAgICAgICAgICBRRGVjbGFyYXRpdmVDb250ZXh0KiB3aW5k
b3dDb250ZXh0ID0gbmV3IFFEZWNsYXJhdGl2ZUNvbnRleHQocW1sQ29udGV4dCh0aGlzKSk7CisK
KyAgICAgICAgICAgIFFPYmplY3QqIG5vYmogPSBkLT5uZXdXaW5kb3dDb21wb25lbnQtPmNyZWF0
ZSh3aW5kb3dDb250ZXh0KTsKKyAgICAgICAgICAgIGlmIChub2JqKSB7CisgICAgICAgICAgICAg
ICAgd2luZG93Q29udGV4dC0+c2V0UGFyZW50KG5vYmopOworICAgICAgICAgICAgICAgIFFEZWNs
YXJhdGl2ZUl0ZW0qIGl0ZW0gPSBxb2JqZWN0X2Nhc3Q8UURlY2xhcmF0aXZlSXRlbSAqPihub2Jq
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBub2JqOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3ZWJ2
aWV3ID0gaXRlbS0+ZmluZENoaWxkPFFEZWNsYXJhdGl2ZVdlYlZpZXcqPigpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIXdlYnZpZXcpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUg
aXRlbTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBub2JqLT5zZXRQYXJlbnQoZC0+bmV3V2luZG93UGFyZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFFHcmFwaGljc09iamVjdCo+KGl0ZW0pLT5zZXRQYXJlbnRJdGVt
KGQtPm5ld1dpbmRvd1BhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbGV0ZSB3aW5k
b3dDb250ZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gd2VidmlldzsK
KyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlIFFXZWJQYWdlOjpXZWJNb2Rh
bERpYWxvZzogeworICAgICAgICAvLyBOb3Qgc3VwcG9ydGVkCisgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKworLyohCisgICAgXHFtbHByb3BlcnR5IGNvbXBvbmVudCBXZWJWaWV3Ojpu
ZXdXaW5kb3dDb21wb25lbnQKKworICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIGNvbXBvbmVu
dCB0byB1c2UgZm9yIG5ldyB3aW5kb3dzLgorICAgIFRoZSBjb21wb25lbnQgbXVzdCBoYXZlIGEg
V2ViVmlldyBzb21ld2hlcmUgaW4gaXRzIHN0cnVjdHVyZS4KKworICAgIFdoZW4gdGhlIHdlYiBl
bmdpbmUgcmVxdWVzdHMgYSBuZXcgd2luZG93LCBpdCB3aWxsIGJlIGFuIGluc3RhbmNlIG9mCisg
ICAgdGhpcyBjb21wb25lbnQuCisKKyAgICBUaGUgcGFyZW50IG9mIHRoZSBuZXcgd2luZG93IGlz
IHNldCBieSBuZXdXaW5kb3dQYXJlbnQuIEl0IG11c3QgYmUgc2V0LgorKi8KK1FEZWNsYXJhdGl2
ZUNvbXBvbmVudCogUURlY2xhcmF0aXZlV2ViVmlldzo6bmV3V2luZG93Q29tcG9uZW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZC0+bmV3V2luZG93Q29tcG9uZW50OworfQorCit2b2lkIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OnNldE5ld1dpbmRvd0NvbXBvbmVudChRRGVjbGFyYXRpdmVDb21wb25l
bnQqIG5ld1dpbmRvdykKK3sKKyAgICBpZiAobmV3V2luZG93ID09IGQtPm5ld1dpbmRvd0NvbXBv
bmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPm5ld1dpbmRvd0NvbXBvbmVudCA9IG5ld1dp
bmRvdzsKKyAgICBlbWl0IG5ld1dpbmRvd0NvbXBvbmVudENoYW5nZWQoKTsKK30KKworCisvKiEK
KyAgICBccW1scHJvcGVydHkgaXRlbSBXZWJWaWV3OjpuZXdXaW5kb3dQYXJlbnQKKworICAgIFRo
ZSBwYXJlbnQgaXRlbSBmb3IgbmV3IHdpbmRvd3MuCisKKyAgICBcc2EgbmV3V2luZG93Q29tcG9u
ZW50CisqLworUURlY2xhcmF0aXZlSXRlbSogUURlY2xhcmF0aXZlV2ViVmlldzo6bmV3V2luZG93
UGFyZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bmV3V2luZG93UGFyZW50OworfQorCit2
b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldE5ld1dpbmRvd1BhcmVudChRRGVjbGFyYXRpdmVJ
dGVtKiBwYXJlbnQpCit7CisgICAgaWYgKHBhcmVudCA9PSBkLT5uZXdXaW5kb3dQYXJlbnQpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZC0+bmV3V2luZG93UGFyZW50ICYmIHBhcmVudCkgewor
ICAgICAgICBRTGlzdDxRR3JhcGhpY3NJdGVtICo+IGNoaWxkcmVuID0gZC0+bmV3V2luZG93UGFy
ZW50LT5jaGlsZEl0ZW1zKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4u
Y291bnQoKTsgKytpKQorICAgICAgICAgICAgY2hpbGRyZW4uYXQoaSktPnNldFBhcmVudEl0ZW0o
cGFyZW50KTsKKyAgICB9CisgICAgZC0+bmV3V2luZG93UGFyZW50ID0gcGFyZW50OworICAgIGVt
aXQgbmV3V2luZG93UGFyZW50Q2hhbmdlZCgpOworfQorCitRU2l6ZSBRRGVjbGFyYXRpdmVXZWJW
aWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBkLT5wYWdlLT5tYWluRnJh
bWUoKS0+Y29udGVudHNTaXplKCkgKiBjb250ZW50c1NjYWxlKCk7Cit9CisKK3FyZWFsIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBkLT52
aWV3LT5zY2FsZSgpOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldENvbnRlbnRz
U2NhbGUocXJlYWwgc2NhbGUpCit7CisgICAgaWYgKHNjYWxlID09IGQtPnZpZXctPnNjYWxlKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBkLT52aWV3LT5zZXRTY2FsZShzY2FsZSk7CisgICAgdXBk
YXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpOworICAgIGVtaXQgY29udGVudHNTY2FsZUNoYW5n
ZWQoKTsKK30KKworLyohCisgICAgUmV0dXJucyB0aGUgYXJlYSBvZiB0aGUgbGFyZ2VzdCBlbGVt
ZW50IGF0IHBvc2l0aW9uIChcYSB4LFxhIHkpIHRoYXQgaXMgbm8gbGFyZ2VyCisgICAgdGhhbiBc
YSBtYXh3aWR0aCBieSBcYSBtYXhoZWlnaHQgcGl4ZWxzLgorCisgICAgTWF5IHJldHVybiBhbiBh
cmVhIGxhcmdlciBpbiB0aGUgY2FzZSB3aGVuIG5vIHNtYWxsZXIgZWxlbWVudCBpcyBhdCB0aGUg
cG9zaXRpb24uCisqLworUVJlY3QgUURlY2xhcmF0aXZlV2ViVmlldzo6ZWxlbWVudEFyZWFBdChp
bnQgeCwgaW50IHksIGludCBtYXh3aWR0aCwgaW50IG1heGhlaWdodCkgY29uc3QKK3sKKyAgICBR
V2ViSGl0VGVzdFJlc3VsdCBoaXQgPSBwYWdlKCktPm1haW5GcmFtZSgpLT5oaXRUZXN0Q29udGVu
dChRUG9pbnQoeCwgeSkpOworICAgIFFSZWN0IHJ2ID0gaGl0LmJvdW5kaW5nUmVjdCgpOworICAg
IFFXZWJFbGVtZW50IGVsZW1lbnQgPSBoaXQuZW5jbG9zaW5nQmxvY2tFbGVtZW50KCk7CisgICAg
aWYgKG1heHdpZHRoIDw9IDApCisgICAgICAgIG1heHdpZHRoID0gSU5UX01BWDsKKyAgICBpZiAo
bWF4aGVpZ2h0IDw9IDApCisgICAgICAgIG1heGhlaWdodCA9IElOVF9NQVg7CisgICAgd2hpbGUg
KCFlbGVtZW50LnBhcmVudCgpLmlzTnVsbCgpICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS53aWR0aCgp
IDw9IG1heHdpZHRoICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS5oZWlnaHQoKSA8PSBtYXhoZWlnaHQp
IHsKKyAgICAgICAgcnYgPSBlbGVtZW50Lmdlb21ldHJ5KCk7CisgICAgICAgIGVsZW1lbnQgPSBl
bGVtZW50LnBhcmVudCgpOworICAgIH0KKyAgICByZXR1cm4gcnY7Cit9CisKKy8qIQorICAgIFxp
bnRlcm5hbAorICAgIFxjbGFzcyBRRGVjbGFyYXRpdmVXZWJQYWdlCisgICAgXGJyaWVmIFRoZSBR
RGVjbGFyYXRpdmVXZWJQYWdlIGNsYXNzIGlzIGEgUVdlYlBhZ2UgdGhhdCBjYW4gY3JlYXRlIFFN
TCBwbHVnaW5zLgorCisgICAgXHNhIFFEZWNsYXJhdGl2ZVdlYlZpZXcKKyovCitRRGVjbGFyYXRp
dmVXZWJQYWdlOjpRRGVjbGFyYXRpdmVXZWJQYWdlKFFEZWNsYXJhdGl2ZVdlYlZpZXcqIHBhcmVu
dCkgOgorICAgIFFXZWJQYWdlKHBhcmVudCkKK3sKK30KKworUURlY2xhcmF0aXZlV2ViUGFnZTo6
flFEZWNsYXJhdGl2ZVdlYlBhZ2UoKQoreworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6
OmphdmFTY3JpcHRDb25zb2xlTWVzc2FnZShjb25zdCBRU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGlu
ZU51bWJlciwgY29uc3QgUVN0cmluZyYgc291cmNlSUQpCit7CisgICAgcVdhcm5pbmcoKSA8PCBz
b3VyY2VJRCA8PCAnOicgPDwgbGluZU51bWJlciA8PCAnOicgPDwgbWVzc2FnZTsKK30KKworUVN0
cmluZyBRRGVjbGFyYXRpdmVXZWJQYWdlOjpjaG9vc2VGaWxlKFFXZWJGcmFtZSAqb3JpZ2luYXRp
bmdGcmFtZSwgY29uc3QgUVN0cmluZyYgb2xkRmlsZSkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVk
IChpdCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAgUV9VTlVT
RUQob2xkRmlsZSkKKyAgICByZXR1cm4gb2xkRmlsZTsKK30KKworLyohCisgICAgXHFtbHNpZ25h
bCBXZWJWaWV3OjphbGVydChtZXNzYWdlKQorCisgICAgVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3
aGVuIHRoZSB3ZWIgZW5naW5lIHNlbmRzIGEgSmF2YVNjcmlwdCBhbGVydC4gVGhlIFxhIG1lc3Nh
Z2UgaXMgdGhlIHRleHQKKyAgICB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGFsZXJ0IHRvIHRoZSB1
c2VyLgorKi8KKworCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmphdmFTY3JpcHRBbGVydChR
V2ViRnJhbWUqIG9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sKKyAgICBR
X1VOVVNFRChvcmlnaW5hdGluZ0ZyYW1lKQorICAgIGVtaXQgdmlld0l0ZW0oKS0+YWxlcnQobXNn
KTsKK30KKworYm9vbCBRRGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0Q29uZmlybShRV2Vi
RnJhbWUqIG9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sKKyAgICAvLyBO
b3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUp
CisgICAgUV9VTlVTRUQobXNnKQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBRRGVjbGFy
YXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSogb3JpZ2luYXRpbmdGcmFt
ZSwgY29uc3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFTdHJp
bmcqIHJlc3VsdCkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQorICAgIFFf
VU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAgUV9VTlVTRUQobXNnKQorICAgIFFfVU5VU0VE
KGRlZmF1bHRWYWx1ZSkKKyAgICBRX1VOVVNFRChyZXN1bHQpCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisKK1FEZWNsYXJhdGl2ZVdlYlZpZXcqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OnZpZXdJdGVt
KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlldyo+KHBhcmVu
dCgpKTsKK30KKworUVdlYlBhZ2UqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhX
ZWJXaW5kb3dUeXBlIHR5cGUpCit7CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyogbmV3VmlldyA9
IHZpZXdJdGVtKCktPmNyZWF0ZVdpbmRvdyh0eXBlKTsKKyAgICBpZiAobmV3VmlldykKKyAgICAg
ICAgcmV0dXJuIG5ld1ZpZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworUVRfRU5EX05B
TUVTUEFDRQorCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZl
d2Vidmlld19wLmggYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19w
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0YTM5MQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmV3ZWJ2aWV3X3AuaApA
QCAtMCwwICsxLDM2MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaWZuZGVmIHFkZWNsYXJh
dGl2ZXdlYnZpZXdfcF9oCisjZGVmaW5lIHFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9oCisKKyNpbmNs
dWRlIDxRdENvcmUvUVVybD4KKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUl0
ZW0+CisjaW5jbHVkZSA8UXRHdWkvUUFjdGlvbj4KKyNpbmNsdWRlIDxRdE5ldHdvcmsvUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFF0V2ViS2l0L1FHcmFwaGljc1dlYlZpZXc+Cisj
aW5jbHVkZSA8UXRXZWJLaXQvUVdlYlBhZ2U+CisKKworUVRfQkVHSU5fSEVBREVSCisKK2NsYXNz
IFFXZWJIaXN0b3J5OworY2xhc3MgUVdlYlNldHRpbmdzOworCitRVF9CRUdJTl9OQU1FU1BBQ0UK
KworUVRfTU9EVUxFKERlY2xhcmF0aXZlKQorY2xhc3MgUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M7
CitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0ZTsKK2NsYXNzIFFOZXR3b3JrUmVxdWVz
dDsKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlZpZXc7CitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3
UHJpdmF0ZTsKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViUGFnZSA6IHB1YmxpYyBRV2ViUGFnZSB7
CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBRRGVjbGFyYXRpdmVXZWJQYWdl
KFFEZWNsYXJhdGl2ZVdlYlZpZXcgKnBhcmVudCk7CisgICAgflFEZWNsYXJhdGl2ZVdlYlBhZ2Uo
KTsKK3Byb3RlY3RlZDoKKyAgICBRV2ViUGFnZSAqY3JlYXRlV2luZG93KFdlYldpbmRvd1R5cGUg
dHlwZSk7CisgICAgdm9pZCBqYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29uc3QgUVN0cmluZyYg
bWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFFTdHJpbmcmIHNvdXJjZUlEKTsKKyAgICBR
U3RyaW5nIGNob29zZUZpbGUoUVdlYkZyYW1lICpvcmlnaW5hdGluZ0ZyYW1lLCBjb25zdCBRU3Ry
aW5nJiBvbGRGaWxlKTsKKyAgICB2b2lkIGphdmFTY3JpcHRBbGVydChRV2ViRnJhbWUgKm9yaWdp
bmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZyk7CisgICAgYm9vbCBqYXZhU2NyaXB0Q29u
ZmlybShRV2ViRnJhbWUgKm9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZyk7Cisg
ICAgYm9vbCBqYXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSAqb3JpZ2luYXRpbmdGcmFtZSwgY29u
c3QgUVN0cmluZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFTdHJpbmcqIHJl
c3VsdCk7CisKK3ByaXZhdGU6CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyAqdmlld0l0ZW0oKTsK
K307CisKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkOworCisvLyBUT0RPOiBi
cm93c2VyIHBsdWdpbnMKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViVmlldyA6IHB1YmxpYyBRRGVj
bGFyYXRpdmVJdGVtIHsKKyAgICBRX09CSkVDVAorCisgICAgUV9FTlVNUyhTdGF0dXMgU2VsZWN0
aW9uTW9kZSkKKworICAgIFFfUFJPUEVSVFkoUVN0cmluZyB0aXRsZSBSRUFEIHRpdGxlIE5PVElG
WSB0aXRsZUNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRUGl4bWFwIGljb24gUkVBRCBpY29uIE5P
VElGWSBpY29uQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKHFyZWFsIHpvb21GYWN0b3IgUkVBRCB6
b29tRmFjdG9yIFdSSVRFIHNldFpvb21GYWN0b3IgTk9USUZZIHpvb21GYWN0b3JDaGFuZ2VkKQor
ICAgIFFfUFJPUEVSVFkoUVN0cmluZyBzdGF0dXNUZXh0IFJFQUQgc3RhdHVzVGV4dCBOT1RJRlkg
c3RhdHVzVGV4dENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgaHRtbCBSRUFEIGh0
bWwgV1JJVEUgc2V0SHRtbCBOT1RJRlkgaHRtbENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZKGlu
dCBwcmVzc0dyYWJUaW1lIFJFQUQgcHJlc3NHcmFiVGltZSBXUklURSBzZXRQcmVzc0dyYWJUaW1l
IE5PVElGWSBwcmVzc0dyYWJUaW1lQ2hhbmdlZCkKKworICAgIFFfUFJPUEVSVFkoaW50IHByZWZl
cnJlZFdpZHRoIFJFQUQgcHJlZmVycmVkV2lkdGggV1JJVEUgc2V0UHJlZmVycmVkV2lkdGggTk9U
SUZZIHByZWZlcnJlZFdpZHRoQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKGludCBwcmVmZXJyZWRI
ZWlnaHQgUkVBRCBwcmVmZXJyZWRIZWlnaHQgV1JJVEUgc2V0UHJlZmVycmVkSGVpZ2h0IE5PVElG
WSBwcmVmZXJyZWRIZWlnaHRDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUVVybCB1cmwgUkVBRCB1
cmwgV1JJVEUgc2V0VXJsIE5PVElGWSB1cmxDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkocXJlYWwg
cHJvZ3Jlc3MgUkVBRCBwcm9ncmVzcyBOT1RJRlkgcHJvZ3Jlc3NDaGFuZ2VkKQorICAgIFFfUFJP
UEVSVFkoU3RhdHVzIHN0YXR1cyBSRUFEIHN0YXR1cyBOT1RJRlkgc3RhdHVzQ2hhbmdlZCkKKwor
ICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogcmVsb2FkIFJFQUQgcmVsb2FkQWN0aW9uIENPTlNUQU5U
KQorICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogYmFjayBSRUFEIGJhY2tBY3Rpb24gQ09OU1RBTlQp
CisgICAgUV9QUk9QRVJUWShRQWN0aW9uKiBmb3J3YXJkIFJFQUQgZm9yd2FyZEFjdGlvbiBDT05T
VEFOVCkKKyAgICBRX1BST1BFUlRZKFFBY3Rpb24qIHN0b3AgUkVBRCBzdG9wQWN0aW9uIENPTlNU
QU5UKQorCisgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncyogc2V0dGluZ3Mg
UkVBRCBzZXR0aW5nc09iamVjdCBDT05TVEFOVCkKKworICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0
aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGphdmFTY3JpcHRXaW5kb3dPYmplY3RzIFJFQUQgamF2
YVNjcmlwdFdpbmRvd09iamVjdHMgQ09OU1RBTlQpCisKKyAgICBRX1BST1BFUlRZKFFEZWNsYXJh
dGl2ZUNvbXBvbmVudCogbmV3V2luZG93Q29tcG9uZW50IFJFQUQgbmV3V2luZG93Q29tcG9uZW50
IFdSSVRFIHNldE5ld1dpbmRvd0NvbXBvbmVudCBOT1RJRlkgbmV3V2luZG93Q29tcG9uZW50Q2hh
bmdlZCkKKyAgICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUl0ZW0qIG5ld1dpbmRvd1BhcmVudCBS
RUFEIG5ld1dpbmRvd1BhcmVudCBXUklURSBzZXROZXdXaW5kb3dQYXJlbnQgTk9USUZZIG5ld1dp
bmRvd1BhcmVudENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZKGJvb2wgcmVuZGVyaW5nRW5hYmxl
ZCBSRUFEIHJlbmRlcmluZ0VuYWJsZWQgV1JJVEUgc2V0UmVuZGVyaW5nRW5hYmxlZCBOT1RJRlkg
cmVuZGVyaW5nRW5hYmxlZENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZKFFTaXplIGNvbnRlbnRz
U2l6ZSBSRUFEIGNvbnRlbnRzU2l6ZSBOT1RJRlkgY29udGVudHNTaXplQ2hhbmdlZCkKKyAgICBR
X1BST1BFUlRZKHFyZWFsIGNvbnRlbnRzU2NhbGUgUkVBRCBjb250ZW50c1NjYWxlIFdSSVRFIHNl
dENvbnRlbnRzU2NhbGUgTk9USUZZIGNvbnRlbnRzU2NhbGVDaGFuZ2VkKQorCitwdWJsaWM6Cisg
ICAgUURlY2xhcmF0aXZlV2ViVmlldyhRRGVjbGFyYXRpdmVJdGVtICpwYXJlbnQgPSAwKTsKKyAg
ICB+UURlY2xhcmF0aXZlV2ViVmlldygpOworCisgICAgUVVybCB1cmwoKSBjb25zdDsKKyAgICB2
b2lkIHNldFVybChjb25zdCBRVXJsICYpOworCisgICAgUVN0cmluZyB0aXRsZSgpIGNvbnN0Owor
CisgICAgUVBpeG1hcCBpY29uKCkgY29uc3Q7CisKKyAgICBxcmVhbCB6b29tRmFjdG9yKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRab29tRmFjdG9yKHFyZWFsKTsKKyAgICBRX0lOVk9LQUJMRSBib29s
IGhldXJpc3RpY1pvb20oaW50IGNsaWNrWCwgaW50IGNsaWNrWSwgcXJlYWwgbWF4em9vbSk7Cisg
ICAgUVJlY3QgZWxlbWVudEFyZWFBdChpbnQgeCwgaW50IHksIGludCBtaW53aWR0aCwgaW50IG1p
bmhlaWdodCkgY29uc3Q7CisKKyAgICBpbnQgcHJlc3NHcmFiVGltZSgpIGNvbnN0OworICAgIHZv
aWQgc2V0UHJlc3NHcmFiVGltZShpbnQpOworCisgICAgaW50IHByZWZlcnJlZFdpZHRoKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRQcmVmZXJyZWRXaWR0aChpbnQpOworICAgIGludCBwcmVmZXJyZWRI
ZWlnaHQoKSBjb25zdDsKKyAgICB2b2lkIHNldFByZWZlcnJlZEhlaWdodChpbnQpOworCisgICAg
ZW51bSBTdGF0dXMgeyBOdWxsLCBSZWFkeSwgTG9hZGluZywgRXJyb3IgfTsKKyAgICBTdGF0dXMg
c3RhdHVzKCkgY29uc3Q7CisgICAgcXJlYWwgcHJvZ3Jlc3MoKSBjb25zdDsKKyAgICBRU3RyaW5n
IHN0YXR1c1RleHQoKSBjb25zdDsKKworICAgIFFBY3Rpb24gKnJlbG9hZEFjdGlvbigpIGNvbnN0
OworICAgIFFBY3Rpb24gKmJhY2tBY3Rpb24oKSBjb25zdDsKKyAgICBRQWN0aW9uICpmb3J3YXJk
QWN0aW9uKCkgY29uc3Q7CisgICAgUUFjdGlvbiAqc3RvcEFjdGlvbigpIGNvbnN0OworCisgICAg
UVdlYlBhZ2UgKnBhZ2UoKSBjb25zdDsKKyAgICB2b2lkIHNldFBhZ2UoUVdlYlBhZ2UgKnBhZ2Up
OworCisgICAgdm9pZCBsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwKKyAgICAg
ICAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9uID0gUU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb24sCisgICAgICAgICAgICAgIGNvbnN0IFFC
eXRlQXJyYXkgJmJvZHkgPSBRQnl0ZUFycmF5KCkpOworCisgICAgUVN0cmluZyBodG1sKCkgY29u
c3Q7CisKKyAgICB2b2lkIHNldEh0bWwoY29uc3QgUVN0cmluZyAmaHRtbCwgY29uc3QgUVVybCAm
YmFzZVVybCA9IFFVcmwoKSk7CisgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFFCeXRlQXJyYXkg
JmRhdGEsIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlID0gUVN0cmluZygpLCBjb25zdCBRVXJsICZi
YXNlVXJsID0gUVVybCgpKTsKKworICAgIFFXZWJIaXN0b3J5KiBoaXN0b3J5KCkgY29uc3Q7Cisg
ICAgUVdlYlNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0OworICAgIFFEZWNsYXJhdGl2ZVdlYlNl
dHRpbmdzICpzZXR0aW5nc09iamVjdCgpIGNvbnN0OworCisgICAgYm9vbCByZW5kZXJpbmdFbmFi
bGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZW5kZXJpbmdFbmFibGVkKGJvb2wpOworCisgICAg
UURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGphdmFTY3JpcHRXaW5kb3dPYmplY3Rz
KCk7CisKKyAgICBzdGF0aWMgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkKiBxbWxBdHRhY2hl
ZFByb3BlcnRpZXMoUU9iamVjdCopOworCisgICAgUURlY2xhcmF0aXZlQ29tcG9uZW50ICpuZXdX
aW5kb3dDb21wb25lbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldE5ld1dpbmRvd0NvbXBvbmVudChR
RGVjbGFyYXRpdmVDb21wb25lbnQgKm5ld1dpbmRvdyk7CisgICAgUURlY2xhcmF0aXZlSXRlbSog
bmV3V2luZG93UGFyZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXROZXdXaW5kb3dQYXJlbnQoUURl
Y2xhcmF0aXZlSXRlbSogbmV3V2luZG93KTsKKworICAgIGJvb2wgaXNDb21wb25lbnRDb21wbGV0
ZVB1YmxpYygpIGNvbnN0IHsgcmV0dXJuIGlzQ29tcG9uZW50Q29tcGxldGUoKTsgfQorCisgICAg
UVNpemUgY29udGVudHNTaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUo
cXJlYWwgc2NhbGUpOworICAgIHFyZWFsIGNvbnRlbnRzU2NhbGUoKSBjb25zdDsKKworUV9TSUdO
QUxTOgorICAgIHZvaWQgcHJlZmVycmVkV2lkdGhDaGFuZ2VkKCk7CisgICAgdm9pZCBwcmVmZXJy
ZWRIZWlnaHRDaGFuZ2VkKCk7CisgICAgdm9pZCB1cmxDaGFuZ2VkKCk7CisgICAgdm9pZCBwcm9n
cmVzc0NoYW5nZWQoKTsKKyAgICB2b2lkIHN0YXR1c0NoYW5nZWQoU3RhdHVzKTsKKyAgICB2b2lk
IHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCBpY29uQ2hhbmdlZCgpOwor
ICAgIHZvaWQgc3RhdHVzVGV4dENoYW5nZWQoKTsKKyAgICB2b2lkIGh0bWxDaGFuZ2VkKCk7Cisg
ICAgdm9pZCBwcmVzc0dyYWJUaW1lQ2hhbmdlZCgpOworICAgIHZvaWQgem9vbUZhY3RvckNoYW5n
ZWQoKTsKKyAgICB2b2lkIG5ld1dpbmRvd0NvbXBvbmVudENoYW5nZWQoKTsKKyAgICB2b2lkIG5l
d1dpbmRvd1BhcmVudENoYW5nZWQoKTsKKyAgICB2b2lkIHJlbmRlcmluZ0VuYWJsZWRDaGFuZ2Vk
KCk7CisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJik7CisgICAgdm9p
ZCBjb250ZW50c1NjYWxlQ2hhbmdlZCgpOworCisgICAgdm9pZCBsb2FkU3RhcnRlZCgpOworICAg
IHZvaWQgbG9hZEZpbmlzaGVkKCk7CisgICAgdm9pZCBsb2FkRmFpbGVkKCk7CisKKyAgICB2b2lk
IGRvdWJsZUNsaWNrKGludCBjbGlja1gsIGludCBjbGlja1kpOworCisgICAgdm9pZCB6b29tVG8o
cXJlYWwgem9vbSwgaW50IGNlbnRlclgsIGludCBjZW50ZXJZKTsKKworICAgIHZvaWQgYWxlcnQo
Y29uc3QgUVN0cmluZyYgbWVzc2FnZSk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIFFWYXJpYW50
IGV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJik7CisKK3ByaXZhdGUgUV9TTE9UUzoK
KyAgICB2b2lkIGRvTG9hZFN0YXJ0ZWQoKTsKKyAgICB2b2lkIGRvTG9hZFByb2dyZXNzKGludCBw
KTsKKyAgICB2b2lkIGRvTG9hZEZpbmlzaGVkKGJvb2wgb2spOworICAgIHZvaWQgc2V0U3RhdHVz
VGV4dChjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCk7Cisg
ICAgdm9pZCBwYWdlVXJsQ2hhbmdlZCgpOworICAgIHZvaWQgaW5pdGlhbExheW91dCgpOworCisg
ICAgdm9pZCBwcm9wYWdhdGVGb2N1c1RvV2ViUGFnZShib29sKTsKKworICAgIHZvaWQgdXBkYXRl
RGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBtb3VzZVBy
ZXNzRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCk7CisgICAgdm9pZCBtb3Vz
ZVJlbGVhc2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KTsKKyAgICB2b2lk
IG1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQpOworICAgIHZv
aWQgbW91c2VEb3VibGVDbGlja0V2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCAqZXZlbnQp
OworICAgIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCogZXZlbnQpOworICAgIHZvaWQgaG92
ZXJNb3ZlRXZlbnQoUUdyYXBoaWNzU2NlbmVIb3ZlckV2ZW50KiBldmVudCk7CisgICAgdmlydHVh
bCB2b2lkIGdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYgJm5ld0dlb21ldHJ5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVJlY3RGICZvbGRHZW9tZXRyeSk7Cisg
ICAgdmlydHVhbCBib29sIHNjZW5lRXZlbnQoUUV2ZW50KiBldmVudCk7CisgICAgUURlY2xhcmF0
aXZlV2ViVmlldyogY3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dUeXBlIHR5cGUpOwor
Citwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlQ29udGVudHNTaXplKCk7CisgICAgdm9pZCBpbml0
KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvbmVudENvbXBsZXRlKCk7CisgICAgUV9ESVNBQkxF
X0NPUFkoUURlY2xhcmF0aXZlV2ViVmlldykKKyAgICBRRGVjbGFyYXRpdmVXZWJWaWV3UHJpdmF0
ZSogZDsKKyAgICBRTW91c2VFdmVudCogc2NlbmVNb3VzZUV2ZW50VG9Nb3VzZUV2ZW50KFFHcmFw
aGljc1NjZW5lTW91c2VFdmVudCopOworICAgIFFNb3VzZUV2ZW50KiBzY2VuZUhvdmVyTW92ZUV2
ZW50VG9Nb3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lSG92ZXJFdmVudCopOworICAgIGZyaWVuZCBj
bGFzcyBRRGVjbGFyYXRpdmVXZWJQYWdlOworfTsKKworY2xhc3MgUURlY2xhcmF0aXZlV2ViVmll
d0F0dGFjaGVkIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJU
WShRU3RyaW5nIHdpbmRvd09iamVjdE5hbWUgUkVBRCB3aW5kb3dPYmplY3ROYW1lIFdSSVRFIHNl
dFdpbmRvd09iamVjdE5hbWUpCitwdWJsaWM6CisgICAgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFj
aGVkKFFPYmplY3QqIHBhcmVudCkKKyAgICAgICAgOiBRT2JqZWN0KHBhcmVudCkKKyAgICB7Cisg
ICAgfQorCisgICAgUVN0cmluZyB3aW5kb3dPYmplY3ROYW1lKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3dpbmRvd09iamVjdE5hbWU7CisgICAgfQorCisgICAgdm9pZCBzZXRXaW5k
b3dPYmplY3ROYW1lKGNvbnN0IFFTdHJpbmcgJm4pCisgICAgeworICAgICAgICBtX3dpbmRvd09i
amVjdE5hbWUgPSBuOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRU3RyaW5nIG1fd2luZG93T2Jq
ZWN0TmFtZTsKK307CisKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzIDogcHVibGljIFFP
YmplY3QgeworICAgIFFfT0JKRUNUCisKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgc3RhbmRhcmRG
b250RmFtaWx5IFJFQUQgc3RhbmRhcmRGb250RmFtaWx5IFdSSVRFIHNldFN0YW5kYXJkRm9udEZh
bWlseSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgZml4ZWRGb250RmFtaWx5IFJFQUQgZml4ZWRG
b250RmFtaWx5IFdSSVRFIHNldEZpeGVkRm9udEZhbWlseSkKKyAgICBRX1BST1BFUlRZKFFTdHJp
bmcgc2VyaWZGb250RmFtaWx5IFJFQUQgc2VyaWZGb250RmFtaWx5IFdSSVRFIHNldFNlcmlmRm9u
dEZhbWlseSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgc2Fuc1NlcmlmRm9udEZhbWlseSBSRUFE
IHNhbnNTZXJpZkZvbnRGYW1pbHkgV1JJVEUgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSkKKyAgICBR
X1BST1BFUlRZKFFTdHJpbmcgY3Vyc2l2ZUZvbnRGYW1pbHkgUkVBRCBjdXJzaXZlRm9udEZhbWls
eSBXUklURSBzZXRDdXJzaXZlRm9udEZhbWlseSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgZmFu
dGFzeUZvbnRGYW1pbHkgUkVBRCBmYW50YXN5Rm9udEZhbWlseSBXUklURSBzZXRGYW50YXN5Rm9u
dEZhbWlseSkKKworICAgIFFfUFJPUEVSVFkoaW50IG1pbmltdW1Gb250U2l6ZSBSRUFEIG1pbmlt
dW1Gb250U2l6ZSBXUklURSBzZXRNaW5pbXVtRm9udFNpemUpCisgICAgUV9QUk9QRVJUWShpbnQg
bWluaW11bUxvZ2ljYWxGb250U2l6ZSBSRUFEIG1pbmltdW1Mb2dpY2FsRm9udFNpemUgV1JJVEUg
c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSkKKyAgICBRX1BST1BFUlRZKGludCBkZWZhdWx0Rm9u
dFNpemUgUkVBRCBkZWZhdWx0Rm9udFNpemUgV1JJVEUgc2V0RGVmYXVsdEZvbnRTaXplKQorICAg
IFFfUFJPUEVSVFkoaW50IGRlZmF1bHRGaXhlZEZvbnRTaXplIFJFQUQgZGVmYXVsdEZpeGVkRm9u
dFNpemUgV1JJVEUgc2V0RGVmYXVsdEZpeGVkRm9udFNpemUpCisKKyAgICBRX1BST1BFUlRZKGJv
b2wgYXV0b0xvYWRJbWFnZXMgUkVBRCBhdXRvTG9hZEltYWdlcyBXUklURSBzZXRBdXRvTG9hZElt
YWdlcykKKyAgICBRX1BST1BFUlRZKGJvb2wgamF2YXNjcmlwdEVuYWJsZWQgUkVBRCBqYXZhc2Ny
aXB0RW5hYmxlZCBXUklURSBzZXRKYXZhc2NyaXB0RW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJv
b2wgamF2YUVuYWJsZWQgUkVBRCBqYXZhRW5hYmxlZCBXUklURSBzZXRKYXZhRW5hYmxlZCkKKyAg
ICBRX1BST1BFUlRZKGJvb2wgcGx1Z2luc0VuYWJsZWQgUkVBRCBwbHVnaW5zRW5hYmxlZCBXUklU
RSBzZXRQbHVnaW5zRW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgcHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCBSRUFEIHByaXZhdGVCcm93c2luZ0VuYWJsZWQgV1JJVEUgc2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgamF2YXNjcmlwdENhbk9wZW5XaW5kb3dz
IFJFQUQgamF2YXNjcmlwdENhbk9wZW5XaW5kb3dzIFdSSVRFIHNldEphdmFzY3JpcHRDYW5PcGVu
V2luZG93cykKKyAgICBRX1BST1BFUlRZKGJvb2wgamF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2Fy
ZCBSRUFEIGphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQgV1JJVEUgc2V0SmF2YXNjcmlwdENh
bkFjY2Vzc0NsaXBib2FyZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgZGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCBSRUFEIGRldmVsb3BlckV4dHJhc0VuYWJsZWQgV1JJVEUgc2V0RGV2ZWxvcGVyRXh0cmFz
RW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgbGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbiBS
RUFEIGxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4gV1JJVEUgc2V0TGlua3NJbmNsdWRlZEluRm9j
dXNDaGFpbikKKyAgICBRX1BST1BFUlRZKGJvb2wgem9vbVRleHRPbmx5IFJFQUQgem9vbVRleHRP
bmx5IFdSSVRFIHNldFpvb21UZXh0T25seSkKKyAgICBRX1BST1BFUlRZKGJvb2wgcHJpbnRFbGVt
ZW50QmFja2dyb3VuZHMgUkVBRCBwcmludEVsZW1lbnRCYWNrZ3JvdW5kcyBXUklURSBzZXRQcmlu
dEVsZW1lbnRCYWNrZ3JvdW5kcykKKyAgICBRX1BST1BFUlRZKGJvb2wgb2ZmbGluZVN0b3JhZ2VE
YXRhYmFzZUVuYWJsZWQgUkVBRCBvZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCBXUklURSBz
ZXRPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgb2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkIFJFQUQgb2ZmbGluZVdlYkFwcGxpY2F0aW9u
Q2FjaGVFbmFibGVkIFdSSVRFIHNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCkK
KyAgICBRX1BST1BFUlRZKGJvb2wgbG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkIFJFQUQgbG9j
YWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkIFdSSVRFIHNldExvY2FsU3RvcmFnZURhdGFiYXNlRW5h
YmxlZCkKKyAgICBRX1BST1BFUlRZKGJvb2wgbG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJs
cyBSRUFEIGxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMgV1JJVEUgc2V0TG9jYWxDb250
ZW50Q2FuQWNjZXNzUmVtb3RlVXJscykKKworcHVibGljOgorICAgIFFEZWNsYXJhdGl2ZVdlYlNl
dHRpbmdzKCkge30KKworICAgIFFTdHJpbmcgc3RhbmRhcmRGb250RmFtaWx5KCkgY29uc3QgeyBy
ZXR1cm4gcy0+Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OlN0YW5kYXJkRm9udCk7IH0KKyAgICB2
b2lkIHNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBmKSB7IHMtPnNldEZvbnRG
YW1pbHkoUVdlYlNldHRpbmdzOjpTdGFuZGFyZEZvbnQsIGYpOyB9CisgICAgUVN0cmluZyBmaXhl
ZEZvbnRGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzLT5mb250RmFtaWx5KFFXZWJTZXR0aW5nczo6
Rml4ZWRGb250KTsgfQorICAgIHZvaWQgc2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IFFTdHJpbmcm
IGYpIHsgcy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkZpeGVkRm9udCwgZik7IH0KKyAg
ICBRU3RyaW5nIHNlcmlmRm9udEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRGYW1pbHko
UVdlYlNldHRpbmdzOjpTZXJpZkZvbnQpOyB9CisgICAgdm9pZCBzZXRTZXJpZkZvbnRGYW1pbHko
Y29uc3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5KFFXZWJTZXR0aW5nczo6U2VyaWZG
b250LCBmKTsgfQorICAgIFFTdHJpbmcgc2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0IHsgcmV0
dXJuIHMtPmZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpTYW5zU2VyaWZGb250KTsgfQorICAgIHZv
aWQgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBmKSB7IHMtPnNldEZvbnRG
YW1pbHkoUVdlYlNldHRpbmdzOjpTYW5zU2VyaWZGb250LCBmKTsgfQorICAgIFFTdHJpbmcgY3Vy
c2l2ZUZvbnRGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzLT5mb250RmFtaWx5KFFXZWJTZXR0aW5n
czo6Q3Vyc2l2ZUZvbnQpOyB9CisgICAgdm9pZCBzZXRDdXJzaXZlRm9udEZhbWlseShjb25zdCBR
U3RyaW5nJiBmKSB7IHMtPnNldEZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpDdXJzaXZlRm9udCwg
Zik7IH0KKyAgICBRU3RyaW5nIGZhbnRhc3lGb250RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gcy0+
Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkZhbnRhc3lGb250KTsgfQorICAgIHZvaWQgc2V0RmFu
dGFzeUZvbnRGYW1pbHkoY29uc3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5KFFXZWJT
ZXR0aW5nczo6RmFudGFzeUZvbnQsIGYpOyB9CisKKyAgICBpbnQgbWluaW11bUZvbnRTaXplKCkg
Y29uc3QgeyByZXR1cm4gcy0+Zm9udFNpemUoUVdlYlNldHRpbmdzOjpNaW5pbXVtRm9udFNpemUp
OyB9CisgICAgdm9pZCBzZXRNaW5pbXVtRm9udFNpemUoaW50IHNpemUpIHsgcy0+c2V0Rm9udFNp
emUoUVdlYlNldHRpbmdzOjpNaW5pbXVtRm9udFNpemUsIHNpemUpOyB9CisgICAgaW50IG1pbmlt
dW1Mb2dpY2FsRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBzLT5mb250U2l6ZShRV2ViU2V0dGlu
Z3M6Ok1pbmltdW1Mb2dpY2FsRm9udFNpemUpOyB9CisgICAgdm9pZCBzZXRNaW5pbXVtTG9naWNh
bEZvbnRTaXplKGludCBzaXplKSB7IHMtPnNldEZvbnRTaXplKFFXZWJTZXR0aW5nczo6TWluaW11
bUxvZ2ljYWxGb250U2l6ZSwgc2l6ZSk7IH0KKyAgICBpbnQgZGVmYXVsdEZvbnRTaXplKCkgY29u
c3QgeyByZXR1cm4gcy0+Zm9udFNpemUoUVdlYlNldHRpbmdzOjpEZWZhdWx0Rm9udFNpemUpOyB9
CisgICAgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50IHNpemUpIHsgcy0+c2V0Rm9udFNpemUo
UVdlYlNldHRpbmdzOjpEZWZhdWx0Rm9udFNpemUsIHNpemUpOyB9CisgICAgaW50IGRlZmF1bHRG
aXhlZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udFNpemUoUVdlYlNldHRpbmdzOjpE
ZWZhdWx0Rml4ZWRGb250U2l6ZSk7IH0KKyAgICB2b2lkIHNldERlZmF1bHRGaXhlZEZvbnRTaXpl
KGludCBzaXplKSB7IHMtPnNldEZvbnRTaXplKFFXZWJTZXR0aW5nczo6RGVmYXVsdEZpeGVkRm9u
dFNpemUsIHNpemUpOyB9CisKKyAgICBib29sIGF1dG9Mb2FkSW1hZ2VzKCkgY29uc3QgeyByZXR1
cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkF1dG9Mb2FkSW1hZ2VzKTsgfQorICAg
IHZvaWQgc2V0QXV0b0xvYWRJbWFnZXMoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNl
dHRpbmdzOjpBdXRvTG9hZEltYWdlcywgb24pOyB9CisgICAgYm9vbCBqYXZhc2NyaXB0RW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2Ny
aXB0RW5hYmxlZCk7IH0KKyAgICB2b2lkIHNldEphdmFzY3JpcHRFbmFibGVkKGJvb2wgb24pIHsg
cy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdEVuYWJsZWQsIG9uKTsgfQor
ICAgIGJvb2wgamF2YUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6SmF2YUVuYWJsZWQpOyB9CisgICAgdm9pZCBzZXRKYXZhRW5hYmxlZChib29s
IG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFFbmFibGVkLCBvbik7IH0K
KyAgICBib29sIHBsdWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OlBsdWdpbnNFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0UGx1Z2luc0Vu
YWJsZWQoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQbHVnaW5zRW5h
YmxlZCwgb24pOyB9CisgICAgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlByaXZhdGVCcm93c2luZ0VuYWJs
ZWQpOyB9CisgICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgb24pIHsgcy0+
c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgb24pOyB9
CisgICAgYm9vbCBqYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MoKSBjb25zdCB7IHJldHVybiBzLT50
ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKTsgfQor
ICAgIHZvaWQgc2V0SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKGJvb2wgb24pIHsgcy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzLCBvbik7IH0KKyAg
ICBib29sIGphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBzLT50
ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7
IH0KKyAgICB2b2lkIHNldEphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBvbikgeyBz
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJk
LCBvbik7IH0KKyAgICBib29sIGRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk7
IH0KKyAgICB2b2lkIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBvbikgeyBzLT5zZXRB
dHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpEZXZlbG9wZXJFeHRyYXNFbmFibGVkLCBvbik7IH0KKyAg
ICBib29sIGxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oKSBjb25zdCB7IHJldHVybiBzLT50ZXN0
QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbik7IH0KKyAg
ICB2b2lkIHNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oYm9vbCBvbikgeyBzLT5zZXRBdHRy
aWJ1dGUoUVdlYlNldHRpbmdzOjpMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluLCBvbik7IH0KKyAg
ICBib29sIHpvb21UZXh0T25seSgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdl
YlNldHRpbmdzOjpab29tVGV4dE9ubHkpOyB9CisgICAgdm9pZCBzZXRab29tVGV4dE9ubHkoYm9v
bCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpab29tVGV4dE9ubHksIG9uKTsg
fQorICAgIGJvb2wgcHJpbnRFbGVtZW50QmFja2dyb3VuZHMoKSBjb25zdCB7IHJldHVybiBzLT50
ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UHJpbnRFbGVtZW50QmFja2dyb3VuZHMpOyB9Cisg
ICAgdm9pZCBzZXRQcmludEVsZW1lbnRCYWNrZ3JvdW5kcyhib29sIG9uKSB7IHMtPnNldEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OlByaW50RWxlbWVudEJhY2tncm91bmRzLCBvbik7IH0KKyAgICBi
b29sIG9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVz
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKTsg
fQorICAgIHZvaWQgc2V0T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQoYm9vbCBvbikgeyBz
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxl
ZCwgb24pOyB9CisgICAgYm9vbCBvZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVdlYkFw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0T2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGVFbmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkLCBvbik7IH0KKyAgICBib29sIGxvY2Fs
U3RvcmFnZURhdGFiYXNlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpOyB9CisgICAgdm9pZCBz
ZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQsIG9uKTsgfQorICAgIGJv
b2wgbG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscygpIGNvbnN0IHsgcmV0dXJuIHMtPnRl
c3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxz
KTsgfQorICAgIHZvaWQgc2V0TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscyhib29sIG9u
KSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2FsQ29udGVudENhbkFjY2Vzc1Jl
bW90ZVVybHMsIG9uKTsgfQorCisgICAgUVdlYlNldHRpbmdzICpzOworfTsKKworUVRfRU5EX05B
TUVTUEFDRQorCitRTUxfREVDTEFSRV9UWVBFKFFEZWNsYXJhdGl2ZVdlYlZpZXcpCitRTUxfREVD
TEFSRV9UWVBFKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzKQorUU1MX0RFQ0xBUkVfVFlQRUlORk8o
UURlY2xhcmF0aXZlV2ViVmlldywgUU1MX0hBU19BVFRBQ0hFRF9QUk9QRVJUSUVTKQorCitRVF9F
TkRfSEVBREVSCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3Ft
bGRpciBiL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xbWxkaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZGNmZGQwNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9xbWxkaXIKQEAgLTAsMCArMSBAQAorcGx1Z2luIHFtbHdlYmtpdHBsdWdpbgo=
</data>
<flag name="review"
          id="42416"
          type_id="1"
          status="-"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="42417"
          type_id="3"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58989</attachid>
            <date>2010-06-17 06:03:19 -0700</date>
            <delta_ts>2010-06-17 07:42:02 -0700</delta_ts>
            <desc>version 4</desc>
            <filename>40050-QML.diff</filename>
            <type>text/plain</type>
            <size>62299</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhYWZjZGU3Li4xZDY4Yzli
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDYtMTcgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFVwc3Ry
ZWFtIHRoZSBXZWJLaXQgUU1MIGludGVncmF0aW9uIHBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwNTAKKworICAgICAgICBBZGQgdG8gdGhl
IGJ1aWxkIHRoZSBRTUwgV2ViS2l0IGludGVncmF0aW9uIHBsdWdpbi4KKworICAgICAgICAqIFdl
YktpdC5wcm86CisKIDIwMTAtMDYtMTcgIE1hcmsgQnJhbmQgIDxtYWJyYW5kQG1hYnJhbmQubmw+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJL
aXQucHJvIGIvV2ViS2l0LnBybwppbmRleCA3OWRlMDcyLi5jNmU3MDlmIDEwMDY0NAotLS0gYS9X
ZWJLaXQucHJvCisrKyBiL1dlYktpdC5wcm8KQEAgLTksNiArOSw5IEBAIFNVQkRJUlMgKz0gXAog
CiAjIElmIHRoZSBzb3VyY2UgZXhpc3RzLCBidWlsdCBpdAogZXhpc3RzKCQkUFdEL1dlYktpdFRv
b2xzL1F0VGVzdEJyb3dzZXIpOiBTVUJESVJTICs9IFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIK
K2dyZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04sIDYpIHsKKyAgICBleGlzdHMoJCRQV0QvV2Vi
S2l0L3F0L2RlY2xhcmF0aXZlKTogU1VCRElSUyArPSBXZWJLaXQvcXQvZGVjbGFyYXRpdmUKK30K
IGV4aXN0cygkJFBXRC9KYXZhU2NyaXB0Q29yZS9qc2MucHJvKTogU1VCRElSUyArPSBKYXZhU2Ny
aXB0Q29yZS9qc2MucHJvCiBleGlzdHMoJCRQV0QvV2ViS2l0L3F0L3Rlc3RzKTogU1VCRElSUyAr
PSBXZWJLaXQvcXQvdGVzdHMKIGV4aXN0cygkJFBXRC9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8pOiBTVUJESVJTICs9IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMDAwM2IyMS4uZGEyNGVhYiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUyIEBACisyMDEwLTA2LTE3ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBu
b2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW1F0XSBVcHN0cmVhbSB0aGUgV2ViS2l0IFFNTCBpbnRlZ3JhdGlvbiBwbHVnaW4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDUwCisKKyAgICAg
ICAgQWRkIHRvIHRoZSBRdCBwb3J0IHRoZSBRTUwgV2ViS2l0IGludGVncmF0aW9uIHBsdWdpbi4K
KyAgICAgICAgUURlY2xhcmF0aXZlV2ViVmlldyBpcyBjcmVhdGluZyB0aGUgaXRlbSBhbmQgZXhw
b3NlCisgICAgICAgIHByb3BlcnRpZXMuIFRoZSBDKysgQVBJIGlzIG5vdCBwdWJsaWMsIG9ubHkg
dGhlCisgICAgICAgIHByb3BlcnRpZXMgYXJlLgorCisgICAgICAgICogZGVjbGFyYXRpdmUvZGVj
bGFyYXRpdmUucHJvOiBBZGRlZC4KKyAgICAgICAgKiBkZWNsYXJhdGl2ZS9wbHVnaW4uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdFFtbFBsdWdpbjo6cmVnaXN0ZXJUeXBlcyk6CisgICAgICAg
ICogZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlldy5jcHA6IEFkZGVkLgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU6OlFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlKToK
KyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjopOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlld1ByaXZhdGU6OndpbmRvd09iamVjdHNBcHBlbmQpOgorICAgICAgICAoR3Jh
cGhpY3NXZWJWaWV3OjpHcmFwaGljc1dlYlZpZXcpOgorICAgICAgICAoR3JhcGhpY3NXZWJWaWV3
Ojptb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoR3JhcGhpY3NXZWJWaWV3Ojptb3VzZVJlbGVh
c2VFdmVudCk6CisgICAgICAgIChHcmFwaGljc1dlYlZpZXc6Om1vdXNlRG91YmxlQ2xpY2tFdmVu
dCk6CisgICAgICAgIChHcmFwaGljc1dlYlZpZXc6OnRpbWVyRXZlbnQpOgorICAgICAgICAoR3Jh
cGhpY3NXZWJWaWV3Ojptb3VzZU1vdmVFdmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJW
aWV3OjpRRGVjbGFyYXRpdmVXZWJWaWV3KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6
On5RRGVjbGFyYXRpdmVXZWJWaWV3KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Omlu
aXQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y29tcG9uZW50Q29tcGxldGUpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6OnByb2dyZXNzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmRv
TG9hZFN0YXJ0ZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2FkUHJvZ3Jl
c3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cGFnZVVybENoYW5nZWQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2FkRmluaXNoZWQpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViVmlldzo6dXJsKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNl
dFVybCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpwcmVmZXJyZWRXaWR0aCk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRXaWR0aCk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3OjpwcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlldzo6c2V0UHJlZmVycmVkSGVpZ2h0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OmV2YWx1YXRlSmF2YVNjcmlwdCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJW
aWV3Ojp1cGRhdGVEZWNsYXJhdGl2ZVdlYlZpZXdTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OmluaXRpYWxMYXlvdXQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6
dXBkYXRlQ29udGVudHNTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Omdlb21l
dHJ5Q2hhbmdlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpqYXZhU2NyaXB0V2lu
ZG93T2JqZWN0cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpxbWxBdHRhY2hlZFBy
b3BlcnRpZXMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU6OnVwZGF0ZVdp
bmRvd09iamVjdHMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cmVuZGVyaW5nRW5h
YmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRSZW5kZXJpbmdFbmFibGVk
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmhldXJpc3RpY1pvb20pOgorICAgICAg
ICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cHJlc3NHcmFiVGltZSk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3OjpzZXRQcmVzc0dyYWJUaW1lKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXc6OmJhY2tBY3Rpb24pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Zm9yd2Fy
ZEFjdGlvbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpyZWxvYWRBY3Rpb24pOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c3RvcEFjdGlvbik6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJWaWV3Ojp0aXRsZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpp
Y29uKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFN0YXR1c1RleHQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXNUZXh0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0dGluZ3NP
YmplY3QpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UGFnZSk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpsb2FkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6Omh0bWwpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0SHRtbCk6CisgICAg
ICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50KToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6Omhpc3RvcnkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0
dGluZ3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y3JlYXRlV2luZG93KToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om5ld1dpbmRvd0NvbXBvbmVudCk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXROZXdXaW5kb3dDb21wb25lbnQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlldzo6bmV3V2luZG93UGFyZW50KToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6OnNldE5ld1dpbmRvd1BhcmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojpjb250ZW50c1NpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y29u
dGVudHNTY2FsZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50c1Nj
YWxlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmVsZW1lbnRBcmVhQXQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViUGFnZTo6UURlY2xhcmF0aXZlV2ViUGFnZSk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJQYWdlOjp+UURlY2xhcmF0aXZlV2ViUGFnZSk6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJQYWdlOjpjaG9vc2VGaWxlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlBhZ2U6OmphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpq
YXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2Ny
aXB0UHJvbXB0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OnZpZXdJdGVtKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogZGVj
bGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19wLmg6IEFkZGVkLgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlldzo6KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmlzQ29tcG9u
ZW50Q29tcGxldGVQdWJsaWMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVk
OjpRRGVjbGFyYXRpdmVXZWJWaWV3QXR0YWNoZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
Vmlld0F0dGFjaGVkOjp3aW5kb3dPYmplY3ROYW1lKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXdBdHRhY2hlZDo6c2V0V2luZG93T2JqZWN0TmFtZSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6UURlY2xhcmF0aXZlV2ViU2V0dGluZ3MpOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViU2V0dGluZ3M6OnN0YW5kYXJkRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJTZXR0aW5nczo6c2V0U3RhbmRhcmRGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNs
YXJhdGl2ZVdlYlNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViU2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNhbnNTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldFNhbnNTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZl
V2ViU2V0dGluZ3M6OmN1cnNpdmVGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzZXRDdXJzaXZlRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJTZXR0aW5nczo6ZmFudGFzeUZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjptaW5pbXVtRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OnNldE1pbmltdW1Gb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0
aW5nczo6bWluaW11bUxvZ2ljYWxGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJT
ZXR0aW5nczo6c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6ZGVmYXVsdEZvbnRTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzZXREZWZhdWx0Rm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OmRlZmF1bHRGaXhlZEZvbnRTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzZXREZWZhdWx0Rml4ZWRGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6YXV0b0xvYWRJbWFnZXMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldEF1dG9Mb2FkSW1hZ2VzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNl
dHRpbmdzOjpqYXZhc2NyaXB0RW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0
aW5nczo6c2V0SmF2YXNjcmlwdEVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OmphdmFFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpz
ZXRKYXZhRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6cGx1Z2lu
c0VuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldFBsdWdpbnNF
bmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpwcml2YXRlQnJvd3Np
bmdFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRQcml2YXRl
QnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpqYXZh
c2NyaXB0Q2FuT3BlbldpbmRvd3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6
OnNldEphdmFzY3JpcHRDYW5PcGVuV2luZG93cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJT
ZXR0aW5nczo6amF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJTZXR0aW5nczo6c2V0SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk6CisgICAg
ICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6bGlua3NJbmNsdWRlZEluRm9j
dXNDaGFpbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0TGlua3NJbmNs
dWRlZEluRm9jdXNDaGFpbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6em9v
bVRleHRPbmx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRab29tVGV4
dE9ubHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnByaW50RWxlbWVudEJh
Y2tncm91bmRzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRQcmludEVs
ZW1lbnRCYWNrZ3JvdW5kcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6b2Zm
bGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OnNldE9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNs
YXJhdGl2ZVdlYlNldHRpbmdzOjpvZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldE9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6bG9jYWxT
dG9yYWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZl
V2ViU2V0dGluZ3M6OmxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldExvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVy
bHMpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3FtbGRpcjogQWRkZWQuCisgICAgICAgICogZG9j
cy9xdHdlYmtpdC5xZG9jY29uZjoKKwogMjAxMC0wNi0xNyAgTWFyayBCcmFuZCAgPG1hYnJhbmRA
bWFicmFuZC5ubD4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9kZWNsYXJhdGl2ZS5wcm8gYi9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvZGVjbGFyYXRpdmUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjljMTU1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUv
ZGVjbGFyYXRpdmUucHJvCkBAIC0wLDAgKzEsNzQgQEAKK1RBUkdFVCAgPSBxbWx3ZWJraXRwbHVn
aW4KK1RBUkdFVFBBVEggPSBvcmcvd2Via2l0CisKK1RFTVBMQVRFID0gbGliCitDT05GSUcgKz0g
cXQgcGx1Z2luCisKK3dpbjMyfG1hYzohd2luY2UqOiF3aW4zMi1tc3ZjOiFtYWN4LXhjb2RlOkNP
TkZJRyArPSBkZWJ1Z19hbmRfcmVsZWFzZQorCitRTUxESVJGSUxFID0gJCR7X1BST19GSUxFX1BX
RF99L3FtbGRpcgorY29weTJidWlsZC5pbnB1dCA9IFFNTERJUkZJTEUKK0NPTkZJRyhRVERJUl9i
dWlsZCkgeworICAgIGNvcHkyYnVpbGQub3V0cHV0ID0gJCRRVF9CVUlMRF9UUkVFL2ltcG9ydHMv
JCRUQVJHRVRQQVRIL3FtbGRpcgorfSBlbHNlIHsKKyAgICBjb3B5MmJ1aWxkLm91dHB1dCA9ICQk
T1VUUFVUX0RJUi9pbXBvcnRzLyQkVEFSR0VUUEFUSC9xbWxkaXIKK30KKyFjb250YWlucyhURU1Q
TEFURV9QUkVGSVgsIHZjKTpjb3B5MmJ1aWxkLnZhcmlhYmxlX291dCA9IFBSRV9UQVJHRVRERVBT
Citjb3B5MmJ1aWxkLmNvbW1hbmRzID0gJCRRTUFLRV9DT1BZICR7UU1BS0VfRklMRV9JTn0gJHtR
TUFLRV9GSUxFX09VVH0KK2NvcHkyYnVpbGQubmFtZSA9IENPUFkgJHtRTUFLRV9GSUxFX0lOfQor
Y29weTJidWlsZC5DT05GSUcgKz0gbm9fbGluaworUU1BS0VfRVhUUkFfQ09NUElMRVJTICs9IGNv
cHkyYnVpbGQKKworVEFSR0VUID0gJCRxdExpYnJhcnlUYXJnZXQoJCRUQVJHRVQpCitjb250YWlu
cyhRVF9DT05GSUcsIHJlZHVjZV9leHBvcnRzKTpDT05GSUcgKz0gaGlkZV9zeW1ib2xzCisKK3dp
bmNlKjpMSUJTICs9ICQkUU1BS0VfTElCU19HVUkKKworc3ltYmlhbjogeworICAgIFRBUkdFVC5F
UE9DQUxMT1dETExEQVRBPTEKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSA9IEFsbCAtVGNiCisgICAg
bG9hZChhcm1jY193YXJuaW5ncykKK30KKworaW5jbHVkZSguLi8uLi8uLi9XZWJLaXQucHJpKQor
CitRVCArPSBkZWNsYXJhdGl2ZQorCitsaW51eC0qIHsKKyAgICAjIEZyb20gQ3JlYXRvcidzIHNy
Yy9ycGF0aC5wcmk6CisgICAgIyBEbyB0aGUgcnBhdGggYnkgaGFuZCBzaW5jZSBpdCdzIG5vdCBw
b3NzaWJsZSB0byB1c2UgT1JJR0lOIGluIFFNQUtFX1JQQVRIRElSCisgICAgIyB0aGlzIGV4cGFu
ZHMgdG8gJE9SSUdJTiAoYWZ0ZXIgcW1ha2UgYW5kIG1ha2UpLCBpdCBkb2VzIE5PVCByZWFkIGEg
cW1ha2UgdmFyLgorICAgIFFNQUtFX1JQQVRIRElSID0gJCRPVVRQVVRfRElSL2xpYiAkJFFNQUtF
X1JQQVRIRElSCisgICAgTVlfUlBBVEggPSAkJGpvaW4oUU1BS0VfUlBBVEhESVIsICI6IikKKwor
ICAgIFFNQUtFX0xGTEFHUyArPSAtV2wsLXosb3JpZ2luIFwnLVdsLC1ycGF0aCwkJHtNWV9SUEFU
SH1cJworICAgIFFNQUtFX1JQQVRIRElSID0KK30gZWxzZSB7CisgICAgUU1BS0VfUlBBVEhESVIg
PSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0VfUlBBVEhESVIKK30KKworU09VUkNFUyArPSBxZGVj
bGFyYXRpdmV3ZWJ2aWV3LmNwcCBwbHVnaW4uY3BwCitIRUFERVJTICs9IHFkZWNsYXJhdGl2ZXdl
YnZpZXdfcC5oCisKK0NPTkZJRyhRVERJUl9idWlsZCkgeworICAgIERFU1RESVIgPSAkJFFUX0JV
SUxEX1RSRUUvaW1wb3J0cy8kJFRBUkdFVFBBVEgKK30gZWxzZSB7CisgICAgREVTVERJUiA9ICQk
T1VUUFVUX0RJUi9pbXBvcnRzLyQkVEFSR0VUUEFUSAorfQordGFyZ2V0LnBhdGggPSAkJFtRVF9J
TlNUQUxMX0lNUE9SVFNdLyQkVEFSR0VUUEFUSAorCisKK3FtbGRpci5maWxlcyArPSAkJFBXRC9x
bWxkaXIKK3FtbGRpci5wYXRoICs9ICAkJFtRVF9JTlNUQUxMX0lNUE9SVFNdLyQkVEFSR0VUUEFU
SAorCitzeW1iaWFuOnsKKyAgICBsb2FkKGRhdGFfY2FnaW5nX3BhdGhzKQorICAgIGluY2x1ZGUo
JCRRVF9TT1VSQ0VfVFJFRS9kZW1vcy9zeW1iaWFucGtncnVsZXMucHJpKQorCisgICAgaW1wb3J0
RmlsZXMuc291cmNlcyA9IHFtbHdlYmtpdHBsdWdpbi5kbGwgcW1sZGlyCisgICAgaW1wb3J0Rmls
ZXMucGF0aCA9ICQkUVRfSU1QT1JUU19CQVNFX0RJUi8kJFRBUkdFVFBBVEgKKworICAgIERFUExP
WU1FTlQgPSBpbXBvcnRGaWxlcworfQorCitJTlNUQUxMUyArPSB0YXJnZXQgcW1sZGlyCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcCBiL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wbHVnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYx
ZjE2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNw
cApAQCAtMCwwICsxLDQzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAicWRlY2xh
cmF0aXZld2Vidmlld19wLmgiCisKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2
ZS5oPgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZXh0ZW5zaW9ucGx1Z2lu
Lmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorCitjbGFzcyBXZWJLaXRRbWxQbHVnaW4gOiBwdWJs
aWMgUURlY2xhcmF0aXZlRXh0ZW5zaW9uUGx1Z2luIHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclR5cGVzKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7Cisg
ICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdl
YktpdCIpKTsKKyAgICAgICAgcW1sUmVnaXN0ZXJUeXBlPFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
PigpOworICAgICAgICBxbWxSZWdpc3RlclR5cGU8UURlY2xhcmF0aXZlV2ViVmlldz4odXJpLCAx
LCAwLCAiV2ViVmlldyIpOworICAgIH0KK307CisKK1FUX0VORF9OQU1FU1BBQ0UKKworI2luY2x1
ZGUgInBsdWdpbi5tb2MiCisKK1FfRVhQT1JUX1BMVUdJTjIocW1sd2Via2l0cGx1Z2luLCBRVF9Q
UkVQRU5EX05BTUVTUEFDRShXZWJLaXRRbWxQbHVnaW4pKTsKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L2RlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZXdlYnZpZXcuY3BwIGIvV2ViS2l0L3F0L2RlY2xh
cmF0aXZlL3FkZWNsYXJhdGl2ZXdlYnZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY4ZTE3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvcWRlY2xhcmF0aXZld2Vidmlldy5jcHAKQEAgLTAsMCArMSwxMDIwIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisKKyNpbmNsdWRlICJxZGVjbGFyYXRpdmV3ZWJ2aWV3X3AuaCIKKworI2luY2x1
ZGUgPFF0Q29yZS9RRGVidWc+CisjaW5jbHVkZSA8UXRDb3JlL1FFdmVudD4KKyNpbmNsdWRlIDxR
dENvcmUvUUZpbGU+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RRGVjbGFyYXRpdmVDb250ZXh0
PgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvUURlY2xhcmF0aXZlRW5naW5lPgorI2luY2x1ZGUg
PFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlLmg+CisjaW5jbHVkZSA8UXRHdWkvUUFwcGxpY2F0
aW9uPgorI2luY2x1ZGUgPFF0R3VpL1FHcmFwaGljc1NjZW5lTW91c2VFdmVudD4KKyNpbmNsdWRl
IDxRdEd1aS9RS2V5RXZlbnQ+CisjaW5jbHVkZSA8UXRHdWkvUU1vdXNlRXZlbnQ+CisjaW5jbHVk
ZSA8UXRHdWkvUVBlbj4KKyNpbmNsdWRlIDxRdFdlYktpdC9RV2ViRWxlbWVudD4KKyNpbmNsdWRl
IDxRdFdlYktpdC9RV2ViRnJhbWU+CisjaW5jbHVkZSA8UXRXZWJLaXQvUVdlYlBhZ2U+CisjaW5j
bHVkZSA8UXRXZWJLaXQvUVdlYlNldHRpbmdzPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKKworY2xh
c3MgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGUgeworcHVibGljOgorICAgIFFEZWNsYXJhdGl2
ZVdlYlZpZXdQcml2YXRlKFFEZWNsYXJhdGl2ZVdlYlZpZXcqIHFxKQorICAgICAgOiBxKHFxKQor
ICAgICAgLCBwcmVmZXJyZWR3aWR0aCgwKQorICAgICAgLCBwcmVmZXJyZWRoZWlnaHQoMCkKKyAg
ICAgICwgcHJvZ3Jlc3MoMS4wKQorICAgICAgLCBzdGF0dXMoUURlY2xhcmF0aXZlV2ViVmlldzo6
TnVsbCkKKyAgICAgICwgcGVuZGluZyhQZW5kaW5nTm9uZSkKKyAgICAgICwgbmV3V2luZG93Q29t
cG9uZW50KDApCisgICAgICAsIG5ld1dpbmRvd1BhcmVudCgwKQorICAgICAgLCByZW5kZXJpbmco
dHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgUURlY2xhcmF0aXZlV2ViVmlldyogcTsKKworICAg
IFFVcmwgdXJsOyAvLyBwYWdlIHVybCBtaWdodCBiZSBkaWZmZXJlbnQgaWYgaXQgaGFzIG5vdCBs
b2FkZWQgeWV0CisgICAgR3JhcGhpY3NXZWJWaWV3KiB2aWV3OworCisgICAgaW50IHByZWZlcnJl
ZHdpZHRoLCBwcmVmZXJyZWRoZWlnaHQ7CisgICAgcXJlYWwgcHJvZ3Jlc3M7CisgICAgUURlY2xh
cmF0aXZlV2ViVmlldzo6U3RhdHVzIHN0YXR1czsKKyAgICBRU3RyaW5nIHN0YXR1c1RleHQ7Cisg
ICAgZW51bSB7IFBlbmRpbmdOb25lLCBQZW5kaW5nVXJsLCBQZW5kaW5nSHRtbCwgUGVuZGluZ0Nv
bnRlbnQgfSBwZW5kaW5nOworICAgIFFVcmwgcGVuZGluZ1VybDsKKyAgICBRU3RyaW5nIHBlbmRp
bmdTdHJpbmc7CisgICAgUUJ5dGVBcnJheSBwZW5kaW5nRGF0YTsKKyAgICBtdXRhYmxlIFFEZWNs
YXJhdGl2ZVdlYlNldHRpbmdzIHNldHRpbmdzOworICAgIFFEZWNsYXJhdGl2ZUNvbXBvbmVudCog
bmV3V2luZG93Q29tcG9uZW50OworICAgIFFEZWNsYXJhdGl2ZUl0ZW0qIG5ld1dpbmRvd1BhcmVu
dDsKKworICAgIHN0YXRpYyB2b2lkIHdpbmRvd09iamVjdHNBcHBlbmQoUURlY2xhcmF0aXZlTGlz
dFByb3BlcnR5PFFPYmplY3Q+KiBwcm9wLCBRT2JqZWN0KiBvKQorICAgIHsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGUqPihwcm9wLT5kYXRhKS0+d2luZG93
T2JqZWN0cy5hcHBlbmQobyk7CisgICAgICAgIHN0YXRpY19jYXN0PFFEZWNsYXJhdGl2ZVdlYlZp
ZXdQcml2YXRlKj4ocHJvcC0+ZGF0YSktPnVwZGF0ZVdpbmRvd09iamVjdHMoKTsKKyAgICB9CisK
KyAgICB2b2lkIHVwZGF0ZVdpbmRvd09iamVjdHMoKTsKKyAgICBRT2JqZWN0TGlzdCB3aW5kb3dP
YmplY3RzOworCisgICAgYm9vbCByZW5kZXJpbmc7Cit9OworCitHcmFwaGljc1dlYlZpZXc6Okdy
YXBoaWNzV2ViVmlldyhRRGVjbGFyYXRpdmVXZWJWaWV3KiBwYXJlbnQpCisgICAgOiBRR3JhcGhp
Y3NXZWJWaWV3KHBhcmVudCkKKyAgICAsIHBhcmVudChwYXJlbnQpCisgICAgLCBwcmVzc1RpbWUo
NDAwKQoreworfQorCit2b2lkIEdyYXBoaWNzV2ViVmlldzo6bW91c2VQcmVzc0V2ZW50KFFHcmFw
aGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgc2V0Rm9jdXMoKTsKKyAgICBwcmVz
c1BvaW50ID0gZXZlbnQtPnBvcygpOworICAgIGlmIChwcmVzc1RpbWUpIHsKKyAgICAgICAgcHJl
c3NUaW1lci5zdGFydChwcmVzc1RpbWUsIHRoaXMpOworICAgICAgICBwYXJlbnQtPnNldEtlZXBN
b3VzZUdyYWIoZmFsc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdyYWJNb3VzZSgpOworICAg
ICAgICBwYXJlbnQtPnNldEtlZXBNb3VzZUdyYWIodHJ1ZSk7CisgICAgfQorICAgIFFHcmFwaGlj
c1dlYlZpZXc6Om1vdXNlUHJlc3NFdmVudChldmVudCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NXZWJW
aWV3Ojptb3VzZVJlbGVhc2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KQor
eworICAgIFFHcmFwaGljc1dlYlZpZXc6Om1vdXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKKyAgICBw
cmVzc1RpbWVyLnN0b3AoKTsKKyAgICBwYXJlbnQtPnNldEtlZXBNb3VzZUdyYWIoZmFsc2UpOwor
ICAgIHVuZ3JhYk1vdXNlKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NXZWJWaWV3Ojptb3VzZURvdWJs
ZUNsaWNrRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBRTW91
c2VFdmVudCogbWUgPSBuZXcgUU1vdXNlRXZlbnQoUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNr
LCAoZXZlbnQtPnBvcygpIC8gcGFyZW50LT5jb250ZW50c1NjYWxlKCkpLnRvUG9pbnQoKSwgZXZl
bnQtPmJ1dHRvbigpLCBldmVudC0+YnV0dG9ucygpLCAwKTsKKyAgICBlbWl0IGRvdWJsZUNsaWNr
KGV2ZW50LT5wb3MoKS54KCksIGV2ZW50LT5wb3MoKS55KCkpOworICAgIGRlbGV0ZSBtZTsKK30K
Kwordm9pZCBHcmFwaGljc1dlYlZpZXc6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQor
eworICAgIGlmIChldmVudC0+dGltZXJJZCgpID09IHByZXNzVGltZXIudGltZXJJZCgpKSB7Cisg
ICAgICAgIHByZXNzVGltZXIuc3RvcCgpOworICAgICAgICBncmFiTW91c2UoKTsKKyAgICAgICAg
cGFyZW50LT5zZXRLZWVwTW91c2VHcmFiKHRydWUpOworICAgIH0KK30KKwordm9pZCBHcmFwaGlj
c1dlYlZpZXc6Om1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQp
Cit7CisgICAgaWYgKHByZXNzVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAoKGV2ZW50
LT5wb3MoKSAtIHByZXNzUG9pbnQpLm1hbmhhdHRhbkxlbmd0aCgpID4gUUFwcGxpY2F0aW9uOjpz
dGFydERyYWdEaXN0YW5jZSgpKQorICAgICAgICAgICAgcHJlc3NUaW1lci5zdG9wKCk7CisgICAg
fQorICAgIGlmIChwYXJlbnQtPmtlZXBNb3VzZUdyYWIoKSkKKyAgICAgICAgUUdyYXBoaWNzV2Vi
Vmlldzo6bW91c2VNb3ZlRXZlbnQoZXZlbnQpOworfQorCisvKiEKKyAgICBccW1sY2xhc3MgV2Vi
VmlldyBRRGVjbGFyYXRpdmVXZWJWaWV3CisgICAgXHNpbmNlIDQuNworICAgIFxicmllZiBUaGUg
V2ViVmlldyBpdGVtIGFsbG93cyB5b3UgdG8gYWRkIHdlYiBjb250ZW50IHRvIGEgY2FudmFzLgor
ICAgIFxpbmhlcml0cyBJdGVtCisKKyAgICBBIFdlYlZpZXcgcmVuZGVycyB3ZWIgY29udGVudCBi
YXNlZCBvbiBhIFVSTC4KKworICAgIFRoaXMgdHlwZSBpcyBtYWRlIGF2YWlsYWJsZSBieSBpbXBv
cnRpbmcgdGhlIFxjIG9yZy53ZWJraXQgbW9kdWxlOgorCisgICAgXGJvbGR7aW1wb3J0IG9yZy53
ZWJraXQgMS4wfQorCisgICAgSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGl0ZW0gaXMg
bm90IHNldCwgdGhleSB3aWxsCisgICAgZHluYW1pY2FsbHkgYWRqdXN0IHRvIGEgc2l6ZSBhcHBy
b3ByaWF0ZSBmb3IgdGhlIGNvbnRlbnQuCisgICAgVGhpcyB3aWR0aCBtYXkgYmUgbGFyZ2UgZm9y
IHR5cGljYWwgb25saW5lIHdlYiBwYWdlcy4KKworICAgIElmIHRoZSB3aWR0aCBvciBoZWlnaHQg
aXMgZXhwbGljdGx5IHNldCwgdGhlIHJlbmRlcmVkIHdlYnNpdGUKKyAgICB3aWxsIGJlIGNsaXBw
ZWQsIG5vdCBzY2FsZWQsIHRvIGZpdCBpbnRvIHRoZSBzZXQgZGltZW5zaW9ucy4KKworICAgIElm
IHRoZSBwcmVmZXJyZWRXaWR0aCBpcyBzZXQsIHRoZSB3aWR0aCB3aWxsIGJlIHRoaXMgYW1vdW50
IG9yIGxhcmdlciwKKyAgICB1c3VhbGx5IGxheWluZyBvdXQgdGhlIHdlYiBjb250ZW50IHRvIGZp
dCB0aGUgcHJlZmVycmVkV2lkdGguCisKKyAgICBccW1sCisgICAgaW1wb3J0IG9yZy53ZWJraXQg
MS4wCisKKyAgICBXZWJWaWV3IHsKKyAgICAgICAgdXJsOiAiaHR0cDovL3d3dy5ub2tpYS5jb20i
CisgICAgICAgIHByZWZlcnJlZFdpZHRoOiA0OTAKKyAgICAgICAgcHJlZmVycmVkSGVpZ2h0OiA0
MDAKKyAgICAgICAgc2NhbGU6IDAuNQorICAgICAgICBzbW9vdGg6IGZhbHNlCisgICAgICAgIHNt
b290aENhY2hlOiB0cnVlCisgICAgfQorICAgIFxlbmRxbWwKKworICAgIFxpbWFnZSB3ZWJ2aWV3
LnBuZworCisgICAgVGhlIGl0ZW0gaW5jbHVkZXMgbm8gc2Nyb2xsaW5nLCBzY2FsaW5nLAorICAg
IHRvb2xiYXJzLCBldGMuLCB0aG9zZSBtdXN0IGJlIGltcGxlbWVudGVkIGFyb3VuZCBXZWJWaWV3
LiBTZWUgdGhlIFdlYkJyb3dzZXIgZXhhbXBsZQorICAgIGZvciBhIGRlbW9uc3RyYXRpb24gb2Yg
dGhpcy4KKworICAgIFdoZW4gdGhpcyBpdGVtIGhhcyBrZXlib2FyZCBmb2N1cywgYWxsIGtleWJv
YXJkIGlucHV0IHdpbGwgYmUgc2VudCBkaXJlY3RseSB0byB0aGUKKyAgICB3ZWIgcGFnZSB3aXRo
aW4uCisqLworCisvKiEKKyAgICBcaW50ZXJuYWwKKyAgICBcY2xhc3MgUURlY2xhcmF0aXZlV2Vi
VmlldworICAgIFxicmllZiBUaGUgUURlY2xhcmF0aXZlV2ViVmlldyBjbGFzcyBhbGxvd3MgeW91
IHRvIGFkZCB3ZWIgY29udGVudCB0byBhIFFEZWNsYXJhdGl2ZVZpZXcuCisKKyAgICBBIFdlYlZp
ZXcgcmVuZGVycyB3ZWIgY29udGVudCBiYXNlIG9uIGEgVVJMLgorCisgICAgXGltYWdlIHdlYnZp
ZXcucG5nCisKKyAgICBUaGUgaXRlbSBpbmNsdWRlcyBubyBzY3JvbGxpbmcsIHNjYWxpbmcsCisg
ICAgdG9vbGJhcnMsIGV0Yy4sIHRob3NlIG11c3QgYmUgaW1wbGVtZW50ZWQgYXJvdW5kIFdlYlZp
ZXcuIFNlZSB0aGUgV2ViQnJvd3NlciBleGFtcGxlCisgICAgZm9yIGEgZGVtb25zdHJhdGlvbiBv
ZiB0aGlzLgorCisgICAgQSBRRGVjbGFyYXRpdmVXZWJWaWV3IG9iamVjdCBjYW4gYmUgaW5zdGFu
dGlhdGVkIGluIFFtbCB1c2luZyB0aGUgdGFnIFxsIFdlYlZpZXcuCisqLworCitRRGVjbGFyYXRp
dmVXZWJWaWV3OjpRRGVjbGFyYXRpdmVXZWJWaWV3KFFEZWNsYXJhdGl2ZUl0ZW0gKnBhcmVudCkg
OiBRRGVjbGFyYXRpdmVJdGVtKHBhcmVudCkKK3sKKyAgICBpbml0KCk7Cit9CisKK1FEZWNsYXJh
dGl2ZVdlYlZpZXc6On5RRGVjbGFyYXRpdmVXZWJWaWV3KCkKK3sKKyAgICBkZWxldGUgZDsKK30K
Kwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojppbml0KCkKK3sKKyAgICBkID0gbmV3IFFEZWNs
YXJhdGl2ZVdlYlZpZXdQcml2YXRlKHRoaXMpOworCisgICAgUVdlYlNldHRpbmdzOjplbmFibGVQ
ZXJzaXN0ZW50U3RvcmFnZSgpOworCisgICAgc2V0QWNjZXB0ZWRNb3VzZUJ1dHRvbnMoUXQ6Okxl
ZnRCdXR0b24pOworICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUhhc05vQ29udGVudHMs
IHRydWUpOworICAgIHNldENsaXAodHJ1ZSk7CisKKyAgICBkLT52aWV3ID0gbmV3IEdyYXBoaWNz
V2ViVmlldyh0aGlzKTsKKyAgICBkLT52aWV3LT5zZXRSZXNpemVzVG9Db250ZW50cyh0cnVlKTsK
KyAgICBRV2ViUGFnZSogd3AgPSBuZXcgUURlY2xhcmF0aXZlV2ViUGFnZSh0aGlzKTsKKyAgICBz
ZXRQYWdlKHdwKTsKKyAgICBjb25uZWN0KGQtPnZpZXcsIFNJR05BTChnZW9tZXRyeUNoYW5nZWQo
KSksIHRoaXMsIFNMT1QodXBkYXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpKSk7CisgICAgY29u
bmVjdChkLT52aWV3LCBTSUdOQUwoZG91YmxlQ2xpY2soaW50LCBpbnQpKSwgdGhpcywgU0lHTkFM
KGRvdWJsZUNsaWNrKGludCwgaW50KSkpOworICAgIGNvbm5lY3QoZC0+dmlldywgU0lHTkFMKHNj
YWxlQ2hhbmdlZCgpKSwgdGhpcywgU0lHTkFMKGNvbnRlbnRzU2NhbGVDaGFuZ2VkKCkpKTsKK30K
Kwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojpjb21wb25lbnRDb21wbGV0ZSgpCit7CisgICAg
UURlY2xhcmF0aXZlSXRlbTo6Y29tcG9uZW50Q29tcGxldGUoKTsKKyAgICBwYWdlKCktPnNldE5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKHFtbEVuZ2luZSh0aGlzKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIo
KSk7CisKKyAgICBzd2l0Y2ggKGQtPnBlbmRpbmcpIHsKKyAgICBjYXNlIFFEZWNsYXJhdGl2ZVdl
YlZpZXdQcml2YXRlOjpQZW5kaW5nVXJsOgorICAgICAgICBzZXRVcmwoZC0+cGVuZGluZ1VybCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU6OlBl
bmRpbmdIdG1sOgorICAgICAgICBzZXRIdG1sKGQtPnBlbmRpbmdTdHJpbmcsIGQtPnBlbmRpbmdV
cmwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRl
OjpQZW5kaW5nQ29udGVudDoKKyAgICAgICAgc2V0Q29udGVudChkLT5wZW5kaW5nRGF0YSwgZC0+
cGVuZGluZ1N0cmluZywgZC0+cGVuZGluZ1VybCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkLT5wZW5kaW5nID0gUURlY2xhcmF0aXZl
V2ViVmlld1ByaXZhdGU6OlBlbmRpbmdOb25lOworICAgIGQtPnVwZGF0ZVdpbmRvd09iamVjdHMo
KTsKK30KKworUURlY2xhcmF0aXZlV2ViVmlldzo6U3RhdHVzIFFEZWNsYXJhdGl2ZVdlYlZpZXc6
OnN0YXR1cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnN0YXR1czsKK30KKworCisvKiEKKyAg
ICBccW1scHJvcGVydHkgcmVhbCBXZWJWaWV3Ojpwcm9ncmVzcworICAgIFRoaXMgcHJvcGVydHkg
aG9sZHMgdGhlIHByb2dyZXNzIG9mIGxvYWRpbmcgdGhlIGN1cnJlbnQgVVJMLCBmcm9tIDAgdG8g
MS4KKworICAgIElmIHlvdSBqdXN0IHdhbnQgdG8ga25vdyB3aGVuIHByb2dyZXNzIGdldHMgdG8g
MSwgdXNlCisgICAgV2ViVmlldzo6b25Mb2FkRmluaXNoZWQoKSBvciBXZWJWaWV3OjpvbkxvYWRG
YWlsZWQoKSBpbnN0ZWFkLgorKi8KK3FyZWFsIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByb2dyZXNz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cHJvZ3Jlc3M7Cit9CisKK3ZvaWQgUURlY2xhcmF0
aXZlV2ViVmlldzo6ZG9Mb2FkU3RhcnRlZCgpCit7CisgICAgaWYgKCFkLT51cmwuaXNFbXB0eSgp
KSB7CisgICAgICAgIGQtPnN0YXR1cyA9IExvYWRpbmc7CisgICAgICAgIGVtaXQgc3RhdHVzQ2hh
bmdlZChkLT5zdGF0dXMpOworICAgIH0KKyAgICBlbWl0IGxvYWRTdGFydGVkKCk7Cit9CisKK3Zv
aWQgUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2FkUHJvZ3Jlc3MoaW50IHApCit7CisgICAgaWYg
KGQtPnByb2dyZXNzID09IHAgLyAxMDAuMCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByb2dy
ZXNzID0gcCAvIDEwMC4wOworICAgIGVtaXQgcHJvZ3Jlc3NDaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
UURlY2xhcmF0aXZlV2ViVmlldzo6cGFnZVVybENoYW5nZWQoKQoreworICAgIHVwZGF0ZUNvbnRl
bnRzU2l6ZSgpOworCisgICAgaWYgKChkLT51cmwuaXNFbXB0eSgpICYmIHBhZ2UoKS0+bWFpbkZy
YW1lKCktPnVybCgpICE9IFFVcmwoUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkpCisgICAg
ICAgIHx8IChkLT51cmwgIT0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCkgJiYgIXBhZ2UoKS0+
bWFpbkZyYW1lKCktPnVybCgpLmlzRW1wdHkoKSkpCisgICAgeworICAgICAgICBkLT51cmwgPSBw
YWdlKCktPm1haW5GcmFtZSgpLT51cmwoKTsKKyAgICAgICAgaWYgKGQtPnVybCA9PSBRVXJsKFFM
YXRpbjFTdHJpbmcoImFib3V0OmJsYW5rIikpKQorICAgICAgICAgICAgZC0+dXJsID0gUVVybCgp
OworICAgICAgICBlbWl0IHVybENoYW5nZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUURlY2xhcmF0
aXZlV2ViVmlldzo6ZG9Mb2FkRmluaXNoZWQoYm9vbCBvaykKK3sKKyAgICBpZiAob2spIHsKKyAg
ICAgICAgZC0+c3RhdHVzID0gZC0+dXJsLmlzRW1wdHkoKSA/IE51bGwgOiBSZWFkeTsKKyAgICAg
ICAgZW1pdCBsb2FkRmluaXNoZWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkLT5zdGF0dXMg
PSBFcnJvcjsKKyAgICAgICAgZW1pdCBsb2FkRmFpbGVkKCk7CisgICAgfQorICAgIGVtaXQgc3Rh
dHVzQ2hhbmdlZChkLT5zdGF0dXMpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgdXJsIFdl
YlZpZXc6OnVybAorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIFVSTCB0byB0aGUgcGFnZSBk
aXNwbGF5ZWQgaW4gdGhpcyBpdGVtLiBJdCBjYW4gYmUgc2V0LAorICAgIGJ1dCBhbHNvIGNhbiBj
aGFuZ2Ugc3BvbnRhbmVvdXNseSAoZWcuIGJlY2F1c2Ugb2YgbmV0d29yayByZWRpcmVjdGlvbiku
CisKKyAgICBJZiB0aGUgdXJsIGlzIGVtcHR5LCB0aGUgcGFnZSBpcyBibGFuay4KKworICAgIFRo
ZSB1cmwgaXMgYWx3YXlzIGFic29sdXRlIChRTUwgd2lsbCByZXNvbHZlIHJlbGF0aXZlIFVSTCBz
dHJpbmdzIGluIHRoZSBjb250ZXh0CisgICAgb2YgdGhlIGNvbnRhaW5pbmcgUU1MIGRvY3VtZW50
KS4KKyovCitRVXJsIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVybCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGQtPnVybDsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRVcmwoY29uc3Qg
UVVybCYgdXJsKQoreworICAgIGlmICh1cmwgPT0gZC0+dXJsKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoaXNDb21wb25lbnRDb21wbGV0ZSgpKSB7CisgICAgICAgIGQtPnVybCA9IHVybDsK
KyAgICAgICAgdXBkYXRlQ29udGVudHNTaXplKCk7CisgICAgICAgIFFVcmwgc2V0dXJsID0gdXJs
OworICAgICAgICBpZiAoc2V0dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNldHVybCA9IFFV
cmwoUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSk7CisKKyAgICAgICAgUV9BU1NFUlQoIXNl
dHVybC5pc1JlbGF0aXZlKCkpOworCisgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPmxvYWQo
c2V0dXJsKTsKKworICAgICAgICBlbWl0IHVybENoYW5nZWQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBkLT5wZW5kaW5nID0gZC0+UGVuZGluZ1VybDsKKyAgICAgICAgZC0+cGVuZGluZ1VybCA9
IHVybDsKKyAgICB9Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmlldzo6cHJl
ZmVycmVkV2lkdGgKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBpZGVhbCB3aWR0aCBmb3Ig
ZGlzcGxheWluZyB0aGUgY3VycmVudCBVUkwuCisqLworaW50IFFEZWNsYXJhdGl2ZVdlYlZpZXc6
OnByZWZlcnJlZFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cHJlZmVycmVkd2lkdGg7
Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UHJlZmVycmVkV2lkdGgoaW50IHdp
ZHRoKQoreworICAgIGlmIChkLT5wcmVmZXJyZWR3aWR0aCA9PSB3aWR0aCkKKyAgICAgICAgcmV0
dXJuOworICAgIGQtPnByZWZlcnJlZHdpZHRoID0gd2lkdGg7CisgICAgdXBkYXRlQ29udGVudHNT
aXplKCk7CisgICAgZW1pdCBwcmVmZXJyZWRXaWR0aENoYW5nZWQoKTsKK30KKworLyohCisgICAg
XHFtbHByb3BlcnR5IGludCBXZWJWaWV3OjpwcmVmZXJyZWRIZWlnaHQKKyAgICBUaGlzIHByb3Bl
cnR5IGhvbGRzIHRoZSBpZGVhbCBoZWlnaHQgZm9yIGRpc3BsYXlpbmcgdGhlIGN1cnJlbnQgVVJM
LgorICAgIFRoaXMgb25seSBhZmZlY3RzIHRoZSBhcmVhIHpvb21lZCBieSBoZXVyaXN0aWNab29t
KCkuCisqLworaW50IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJlZEhlaWdodCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGQtPnByZWZlcnJlZGhlaWdodDsKK30KKwordm9pZCBRRGVjbGFyYXRp
dmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRIZWlnaHQoaW50IGhlaWdodCkKK3sKKyAgICBpZiAoZC0+
cHJlZmVycmVkaGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByZWZl
cnJlZGhlaWdodCA9IGhlaWdodDsKKyAgICB1cGRhdGVDb250ZW50c1NpemUoKTsKKyAgICBlbWl0
IHByZWZlcnJlZEhlaWdodENoYW5nZWQoKTsKK30KKworLyohCisgICAgXHFtbG1ldGhvZCBib29s
IFdlYlZpZXc6OmV2YWx1YXRlSmF2YVNjcmlwdChzdHJpbmcpCisKKyAgICBFdmFsdWF0ZXMgdGhl
IFxhIHNjcmlwdFNvdXJjZSBKYXZhU2NyaXB0IGluc2lkZSB0aGUgY29udGV4dCBvZiB0aGUKKyAg
ICBtYWluIHdlYiBmcmFtZSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBleGVj
dXRlZCBzdGF0ZW1lbnQuCisKKyAgICBOb3RlIHRoYXQgdGhpcyBKYXZhU2NyaXB0IGRvZXMgXGUg
bm90IGhhdmUgYW55IGFjY2VzcyB0byBRTUwgb2JqZWN0cworICAgIGV4Y2VwdCBhcyBtYWRlIGF2
YWlsYWJsZSBhcyB3aW5kb3dPYmplY3RzLgorKi8KK1FWYXJpYW50IFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OmV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHRTb3VyY2UpCit7Cisg
ICAgcmV0dXJuIHRoaXMtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdChz
Y3JpcHRTb3VyY2UpOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVwZGF0ZURlY2xh
cmF0aXZlV2ViVmlld1NpemUoKQoreworICAgIFFTaXplRiBzaXplID0gZC0+dmlldy0+Z2VvbWV0
cnkoKS5zaXplKCkgKiBjb250ZW50c1NjYWxlKCk7CisgICAgc2V0SW1wbGljaXRXaWR0aChzaXpl
LndpZHRoKCkpOworICAgIHNldEltcGxpY2l0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworfQorCit2
b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmluaXRpYWxMYXlvdXQoKQoreworICAgIC8vIG5vdGhp
bmcgdXNlZnVsIHRvIGRvIGF0IHRoaXMgcG9pbnQKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJW
aWV3Ojp1cGRhdGVDb250ZW50c1NpemUoKQoreworICAgIGlmIChwYWdlKCkpIHsKKyAgICAgICAg
cGFnZSgpLT5zZXRQcmVmZXJyZWRDb250ZW50c1NpemUoUVNpemUoCisgICAgICAgICAgICBkLT5w
cmVmZXJyZWR3aWR0aD4wID8gZC0+cHJlZmVycmVkd2lkdGggOiB3aWR0aCgpLAorICAgICAgICAg
ICAgZC0+cHJlZmVycmVkaGVpZ2h0PjAgPyBkLT5wcmVmZXJyZWRoZWlnaHQgOiBoZWlnaHQoKSkp
OworICAgIH0KK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQo
Y29uc3QgUVJlY3RGJiBuZXdHZW9tZXRyeSwgY29uc3QgUVJlY3RGJiBvbGRHZW9tZXRyeSkKK3sK
KyAgICBRV2ViUGFnZSogd2ViUGFnZSA9IHBhZ2UoKTsKKyAgICBpZiAobmV3R2VvbWV0cnkuc2l6
ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUoKSAmJiB3ZWJQYWdlKSB7CisgICAgICAgIFFTaXplIGNv
bnRlbnRTaXplID0gd2ViUGFnZS0+cHJlZmVycmVkQ29udGVudHNTaXplKCk7CisgICAgICAgIGlm
ICh3aWR0aFZhbGlkKCkpCisgICAgICAgICAgICBjb250ZW50U2l6ZS5zZXRXaWR0aCh3aWR0aCgp
KTsKKyAgICAgICAgaWYgKGhlaWdodFZhbGlkKCkpCisgICAgICAgICAgICBjb250ZW50U2l6ZS5z
ZXRIZWlnaHQoaGVpZ2h0KCkpOworICAgICAgICBpZiAoY29udGVudFNpemUgIT0gd2ViUGFnZS0+
cHJlZmVycmVkQ29udGVudHNTaXplKCkpCisgICAgICAgICAgICB3ZWJQYWdlLT5zZXRQcmVmZXJy
ZWRDb250ZW50c1NpemUoY29udGVudFNpemUpOworICAgIH0KKyAgICBRRGVjbGFyYXRpdmVJdGVt
OjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsKK30KKworLyohCisg
ICAgXHFtbHByb3BlcnR5IGxpc3Q8b2JqZWN0PiBXZWJWaWV3OjpqYXZhU2NyaXB0V2luZG93T2Jq
ZWN0cworCisgICAgQSBsaXN0IG9mIFFNTCBvYmplY3RzIHRvIGV4cG9zZSB0byB0aGUgd2ViIHBh
Z2UuCisKKyAgICBFYWNoIG9iamVjdCB3aWxsIGJlIGFkZGVkIGFzIGEgcHJvcGVydHkgb2YgdGhl
IHdlYiBmcmFtZSdzIHdpbmRvdyBvYmplY3QuICBUaGUKKyAgICBwcm9wZXJ0eSBuYW1lIGlzIGNv
bnRyb2xsZWQgYnkgdGhlIHZhbHVlIG9mIFxjIFdlYlZpZXcud2luZG93T2JqZWN0TmFtZQorICAg
IGF0dGFjaGVkIHByb3BlcnR5LgorCisgICAgRXhwb3NpbmcgUU1MIG9iamVjdHMgdG8gYSB3ZWIg
cGFnZSBhbGxvd3MgSmF2YVNjcmlwdCBleGVjdXRpbmcgaW4gdGhlIHdlYgorICAgIHBhZ2UgaXRz
ZWxmIHRvIGNvbW11bmljYXRlIHdpdGggUU1MLCBieSByZWFkaW5nIGFuZCB3cml0aW5nIHByb3Bl
cnRpZXMgYW5kCisgICAgYnkgY2FsbGluZyBtZXRob2RzIG9mIHRoZSBleHBvc2VkIFFNTCBvYmpl
Y3RzLgorCisgICAgVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byBjYWxsIGludG8gYSBRTUwgbWV0
aG9kIHVzaW5nIGEgd2luZG93IG9iamVjdC4KKworICAgIFxxbWwKKyAgICBXZWJWaWV3IHsKKyAg
ICAgICAgamF2YVNjcmlwdFdpbmRvd09iamVjdHM6IFF0T2JqZWN0IHsKKyAgICAgICAgICAgIFdl
YlZpZXcud2luZG93T2JqZWN0TmFtZTogInFtbCIKKworICAgICAgICAgICAgZnVuY3Rpb24gcW1s
Q2FsbCgpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGhpcyBjYWxsIGlzIGluIFFN
TCEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGh0bWw6ICI8c2NyaXB0
PmNvbnNvbGUubG9nKFwiVGhpcyBpcyBpbiBXZWJLaXQhXCIpOyB3aW5kb3cucW1sLnFtbENhbGwo
KTs8L3NjcmlwdD4iCisgICAgfQorICAgIFxlbmRxbWwKKworICAgIFRoZSBvdXRwdXQgb2YgdGhl
IGV4YW1wbGUgd2lsbCBiZToKKyAgICBcY29kZQorICAgIFRoaXMgaXMgaW4gV2ViS2l0IQorICAg
IFRoaXMgY2FsbCBpcyBpbiBRTUwhCisgICAgXGVuZGNvZGUKKworICAgIElmIEphdmFzY3JpcHQg
aXMgbm90IGVuYWJsZWQgZm9yIHRoZSBwYWdlLCB0aGVuIHRoaXMgcHJvcGVydHkgZG9lcyBub3Ro
aW5nLgorKi8KK1FEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBRRGVjbGFyYXRpdmVX
ZWJWaWV3OjpqYXZhU2NyaXB0V2luZG93T2JqZWN0cygpCit7CisgICAgcmV0dXJuIFFEZWNsYXJh
dGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0Pih0aGlzLCBkLCAmUURlY2xhcmF0aXZlV2ViVmlld1By
aXZhdGU6OndpbmRvd09iamVjdHNBcHBlbmQpOworfQorCitRRGVjbGFyYXRpdmVXZWJWaWV3QXR0
YWNoZWQqIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnFtbEF0dGFjaGVkUHJvcGVydGllcyhRT2JqZWN0
KiBvKQoreworICAgIHJldHVybiBuZXcgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkKG8pOwor
fQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjp1cGRhdGVXaW5kb3dPYmplY3Rz
KCkKK3sKKyAgICBpZiAoIXEtPmlzQ29tcG9uZW50Q29tcGxldGVQdWJsaWMoKSB8fCAhcS0+cGFn
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpbmRvd09i
amVjdHMuY291bnQoKTsgKytpKSB7CisgICAgICAgIFFPYmplY3QqIG9iamVjdCA9IHdpbmRvd09i
amVjdHMuYXQoaSk7CisgICAgICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hlZCogYXR0YWNo
ZWQgPSBzdGF0aWNfY2FzdDxRRGVjbGFyYXRpdmVXZWJWaWV3QXR0YWNoZWQgKj4ocW1sQXR0YWNo
ZWRQcm9wZXJ0aWVzT2JqZWN0PFFEZWNsYXJhdGl2ZVdlYlZpZXc+KG9iamVjdCkpOworICAgICAg
ICBpZiAoYXR0YWNoZWQgJiYgIWF0dGFjaGVkLT53aW5kb3dPYmplY3ROYW1lKCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2lu
ZG93T2JqZWN0KGF0dGFjaGVkLT53aW5kb3dPYmplY3ROYW1lKCksIG9iamVjdCk7CisgICAgfQor
fQorCitib29sIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnJlbmRlcmluZ0VuYWJsZWQoKSBjb25zdAor
eworICAgIHJldHVybiBkLT5yZW5kZXJpbmc7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmll
dzo6c2V0UmVuZGVyaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKGQtPnJlbmRl
cmluZyA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgZC0+cmVuZGVyaW5nID0gZW5h
YmxlZDsKKyAgICBlbWl0IHJlbmRlcmluZ0VuYWJsZWRDaGFuZ2VkKCk7CisgICAgZC0+dmlldy0+
c2V0VGlsZWRCYWNraW5nU3RvcmVGcm96ZW4oIWVuYWJsZWQpOworfQorCisvKiEKKyAgICBccW1s
c2lnbmFsIFdlYlZpZXc6Om9uRG91YmxlQ2xpY2soY2xpY2t4LCBjbGlja3kpCisKKyAgICBUaGUg
V2ViVmlldyBkb2VzIG5vdCBwYXNzIGRvdWJsZS1jbGljayBldmVudHMgdG8gdGhlIHdlYiBlbmdp
bmUsIGJ1dCByYXRoZXIKKyAgICBlbWl0cyB0aGlzIHNpZ25hbHMuCisqLworCisvKiEKKyAgICBc
cW1sbWV0aG9kIGJvb2wgV2ViVmlldzo6aGV1cmlzdGljWm9vbShjbGlja1gsY2xpY2tZLG1heHpv
b20pCisKKyAgICBGaW5kcyBhIHpvb20gdGhhdDoKKyAgICBcbGlzdAorICAgIFxpIHNob3dzIGEg
d2hvbGUgaXRlbQorICAgIFxpIGluY2x1ZGVzIChcYSBjbGlja1gsIFxhIGNsaWNrWSkKKyAgICBc
aSBmaXRzIGludG8gdGhlIHByZWZlcnJlZFdpZHRoIGFuZCBwcmVmZXJyZWRIZWlnaHQKKyAgICBc
aSB6b29tcyBieSBubyBtb3JlIHRoYW4gXGEgbWF4Wm9vbQorICAgIFxpIGlzIG1vcmUgdGhhbiAx
MCUgYWJvdmUgdGhlIGN1cnJlbnQgem9vbQorICAgIFxlbmRsaXN0CisKKyAgICBJZiBzdWNoIGEg
em9vbSBleGlzdHMsIGVtaXRzIHpvb21Ubyh6b29tLGNlbnRlclgsY2VudGVyWSkgYW5kIHJldHVy
bnMgdHJ1ZTsgb3RoZXJ3aXNlLAorICAgIG5vIHNpZ25hbCBpcyBlbWl0dGVkIGFuZCByZXR1cm5z
IGZhbHNlLgorKi8KK2Jvb2wgUURlY2xhcmF0aXZlV2ViVmlldzo6aGV1cmlzdGljWm9vbShpbnQg
Y2xpY2tYLCBpbnQgY2xpY2tZLCBxcmVhbCBtYXhab29tKQoreworICAgIGlmIChjb250ZW50c1Nj
YWxlKCkgPj0gbWF4Wm9vbSAvIHNjYWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBx
cmVhbCBvemYgPSBjb250ZW50c1NjYWxlKCk7CisgICAgUVJlY3Qgc2hvd0FyZWEgPSBlbGVtZW50
QXJlYUF0KGNsaWNrWCwgY2xpY2tZLCBkLT5wcmVmZXJyZWR3aWR0aCAvIG1heFpvb20sIGQtPnBy
ZWZlcnJlZGhlaWdodCAvIG1heFpvb20pOworICAgIHFyZWFsIHogPSBxTWluKHFyZWFsKGQtPnBy
ZWZlcnJlZHdpZHRoKSAvIHNob3dBcmVhLndpZHRoKCksIHFyZWFsKGQtPnByZWZlcnJlZGhlaWdo
dCkgLyBzaG93QXJlYS5oZWlnaHQoKSk7CisgICAgaWYgKHogPiBtYXhab29tIC8gc2NhbGUoKSkK
KyAgICAgICAgeiA9IG1heFpvb20gLyBzY2FsZSgpOworICAgIGlmICh6IC8gb3pmID4gMS4yKSB7
CisgICAgICAgIFFSZWN0RiByKHNob3dBcmVhLmxlZnQoKSAqIHosIHNob3dBcmVhLnRvcCgpICog
eiwgc2hvd0FyZWEud2lkdGgoKSAqIHosIHNob3dBcmVhLmhlaWdodCgpICogeik7CisgICAgICAg
IGVtaXQgem9vbVRvKHosIHIueCgpICsgci53aWR0aCgpIC8gMiwgci55KCkgKyByLmhlaWdodCgp
IC8gMik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmlldzo6cHJlc3NHcmFiVGltZQorCisg
ICAgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIHVzZXIgbXVzdCBwcmVzcyBiZWZvcmUg
dGhlIFdlYlZpZXcKKyAgICBzdGFydHMgcGFzc2luZyBtb3ZlIGV2ZW50cyB0aHJvdWdoIHRvIHRo
ZSB3ZWIgZW5naW5lIChyYXRoZXIgdGhhbgorICAgIGxldHRpbmcgb3RoZXIgUU1MIGVsZW1lbnRz
IHN1Y2ggYXMgYSBGbGlja2FibGUgdGFrZSB0aGVtKS4KKworICAgIERlZmF1bHRzIHRvIDQwMG1z
LiBTZXQgdG8gMCB0byBhbHdheXMgZ3JhYiBhbmQgcGFzcyBtb3ZlIGV2ZW50cyB0bworICAgIHRo
ZSB3ZWIgZW5naW5lLgorKi8KK2ludCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpwcmVzc0dyYWJUaW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+dmlldy0+cHJlc3NUaW1lOworfQorCit2b2lkIFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFByZXNzR3JhYlRpbWUoaW50IG1pbGxpcykKK3sKKyAgICBp
ZiAoZC0+dmlldy0+cHJlc3NUaW1lID09IG1pbGxpcykKKyAgICAgICAgcmV0dXJuOworICAgIGQt
PnZpZXctPnByZXNzVGltZSA9IG1pbGxpczsKKyAgICBlbWl0IHByZXNzR3JhYlRpbWVDaGFuZ2Vk
KCk7Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBhY3Rpb24gV2ViVmlldzo6YmFjaworICAg
IFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIGFjdGlvbiBmb3IgY2F1c2luZyB0aGUgcHJldmlvdXMg
VVJMIGluIHRoZSBoaXN0b3J5IHRvIGJlIGRpc3BsYXllZC4KKyovCitRQWN0aW9uKiBRRGVjbGFy
YXRpdmVXZWJWaWV3OjpiYWNrQWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5h
Y3Rpb24oUVdlYlBhZ2U6OkJhY2spOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgYWN0aW9u
IFdlYlZpZXc6OmZvcndhcmQKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBhY3Rpb24gZm9y
IGNhdXNpbmcgdGhlIG5leHQgVVJMIGluIHRoZSBoaXN0b3J5IHRvIGJlIGRpc3BsYXllZC4KKyov
CitRQWN0aW9uKiBRRGVjbGFyYXRpdmVXZWJWaWV3Ojpmb3J3YXJkQWN0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OkZvcndhcmQpOworfQorCisvKiEK
KyAgICBccW1scHJvcGVydHkgYWN0aW9uIFdlYlZpZXc6OnJlbG9hZAorICAgIFRoaXMgcHJvcGVy
dHkgaG9sZHMgdGhlIGFjdGlvbiBmb3IgcmVsb2FkaW5nIHdpdGggdGhlIGN1cnJlbnQgVVJMCisq
LworUUFjdGlvbiogUURlY2xhcmF0aXZlV2ViVmlldzo6cmVsb2FkQWN0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlJlbG9hZCk7Cit9CisKKy8qIQor
ICAgIFxxbWxwcm9wZXJ0eSBhY3Rpb24gV2ViVmlldzo6c3RvcAorICAgIFRoaXMgcHJvcGVydHkg
aG9sZHMgdGhlIGFjdGlvbiBmb3Igc3RvcHBpbmcgbG9hZGluZyB3aXRoIHRoZSBjdXJyZW50IFVS
TAorKi8KK1FBY3Rpb24qIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnN0b3BBY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiBwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6U3RvcCk7Cit9CisKKy8qIQor
ICAgIFxxbWxwcm9wZXJ0eSByZWFsIFdlYlZpZXc6OnRpdGxlCisgICAgVGhpcyBwcm9wZXJ0eSBo
b2xkcyB0aGUgdGl0bGUgb2YgdGhlIHdlYiBwYWdlIGN1cnJlbnRseSB2aWV3ZWQKKworICAgIEJ5
IGRlZmF1bHQsIHRoaXMgcHJvcGVydHkgY29udGFpbnMgYW4gZW1wdHkgc3RyaW5nLgorKi8KK1FT
dHJpbmcgUURlY2xhcmF0aXZlV2ViVmlldzo6dGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBw
YWdlKCktPm1haW5GcmFtZSgpLT50aXRsZSgpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkg
cGl4bWFwIFdlYlZpZXc6Omljb24KKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBpY29uIGFz
c29jaWF0ZWQgd2l0aCB0aGUgd2ViIHBhZ2UgY3VycmVudGx5IHZpZXdlZAorKi8KK1FQaXhtYXAg
UURlY2xhcmF0aXZlV2ViVmlldzo6aWNvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+
bWFpbkZyYW1lKCktPmljb24oKS5waXhtYXAoUVNpemUoMjU2LCAyNTYpKTsKK30KKworLyohCisg
ICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzdGF0dXNUZXh0CisKKyAgICBUaGlzIHBy
b3BlcnR5IGlzIHRoZSBjdXJyZW50IHN0YXR1cyBzdWdnZXN0ZWQgYnkgdGhlIGN1cnJlbnQgd2Vi
IHBhZ2UuIEluIGEgd2ViIGJyb3dzZXIsCisgICAgc3VjaCBzdGF0dXMgaXMgb2Z0ZW4gc2hvd24g
aW4gc29tZSBraW5kIG9mIHN0YXR1cyBiYXIuCisqLwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3
OjpzZXRTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmIHRleHQpCit7CisgICAgZC0+c3RhdHVzVGV4
dCA9IHRleHQ7CisgICAgZW1pdCBzdGF0dXNUZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OndpbmRvd09iamVjdENsZWFyZWQoKQoreworICAgIGQtPnVwZGF0ZVdp
bmRvd09iamVjdHMoKTsKK30KKworUVN0cmluZyBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXNU
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+c3RhdHVzVGV4dDsKK30KKworUVdlYlBhZ2Uq
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBkLT52aWV3
LT5wYWdlKCk7Cit9CisKKy8vIFRoZSBRT2JqZWN0IGludGVyZmFjZSB0byBzZXR0aW5ncygpLgor
LyohCisgICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5zdGFuZGFyZEZv
bnRGYW1pbHkKKyAgICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6OnNldHRpbmdzLmZpeGVk
Rm9udEZhbWlseQorICAgIFxxbWxwcm9wZXJ0eSBzdHJpbmcgV2ViVmlldzo6c2V0dGluZ3Muc2Vy
aWZGb250RmFtaWx5CisgICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5z
YW5zU2VyaWZGb250RmFtaWx5CisgICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0
aW5ncy5jdXJzaXZlRm9udEZhbWlseQorICAgIFxxbWxwcm9wZXJ0eSBzdHJpbmcgV2ViVmlldzo6
c2V0dGluZ3MuZmFudGFzeUZvbnRGYW1pbHkKKworICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmll
dzo6c2V0dGluZ3MubWluaW11bUZvbnRTaXplCisgICAgXHFtbHByb3BlcnR5IGludCBXZWJWaWV3
OjpzZXR0aW5ncy5taW5pbXVtTG9naWNhbEZvbnRTaXplCisgICAgXHFtbHByb3BlcnR5IGludCBX
ZWJWaWV3OjpzZXR0aW5ncy5kZWZhdWx0Rm9udFNpemUKKyAgICBccW1scHJvcGVydHkgaW50IFdl
YlZpZXc6OnNldHRpbmdzLmRlZmF1bHRGaXhlZEZvbnRTaXplCisKKyAgICBccW1scHJvcGVydHkg
Ym9vbCBXZWJWaWV3OjpzZXR0aW5ncy5hdXRvTG9hZEltYWdlcworICAgIFxxbWxwcm9wZXJ0eSBi
b29sIFdlYlZpZXc6OnNldHRpbmdzLmphdmFzY3JpcHRFbmFibGVkCisgICAgXHFtbHByb3BlcnR5
IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MuamF2YUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9v
bCBXZWJWaWV3OjpzZXR0aW5ncy5wbHVnaW5zRW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29s
IFdlYlZpZXc6OnNldHRpbmdzLnByaXZhdGVCcm93c2luZ0VuYWJsZWQKKyAgICBccW1scHJvcGVy
dHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5qYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MKKyAgICBc
cW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5qYXZhc2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MuZGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLmxp
bmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4KKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3Ojpz
ZXR0aW5ncy56b29tVGV4dE9ubHkKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0
aW5ncy5wcmludEVsZW1lbnRCYWNrZ3JvdW5kcworICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZp
ZXc6OnNldHRpbmdzLm9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkCisgICAgXHFtbHByb3Bl
cnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3Mub2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFi
bGVkCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MubG9jYWxTdG9yYWdl
RGF0YWJhc2VFbmFibGVkCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3Mu
bG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscworCisgICAgVGhlc2UgcHJvcGVydGllcyBn
aXZlIGFjY2VzcyB0byB0aGUgc2V0dGluZ3MgY29udHJvbGxpbmcgdGhlIHdlYiB2aWV3LgorCisg
ICAgU2VlIFFXZWJTZXR0aW5ncyBmb3IgZGV0YWlscyBvZiB0aGVzZSBwcm9wZXJ0aWVzLgorCisg
ICAgXHFtbAorICAgICAgICBXZWJWaWV3IHsKKyAgICAgICAgICAgIHNldHRpbmdzLnBsdWdpbnNF
bmFibGVkOiB0cnVlCisgICAgICAgICAgICBzZXR0aW5ncy5zdGFuZGFyZEZvbnRGYW1pbHk6ICJB
cmlhbCIKKyAgICAgICAgICAgIC4uLgorICAgICAgICB9CisgICAgXGVuZHFtbAorKi8KK1FEZWNs
YXJhdGl2ZVdlYlNldHRpbmdzKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXR0aW5nc09iamVjdCgp
IGNvbnN0Cit7CisgICAgZC0+c2V0dGluZ3MucyA9IHBhZ2UoKS0+c2V0dGluZ3MoKTsKKyAgICBy
ZXR1cm4gJmQtPnNldHRpbmdzOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFBh
Z2UoUVdlYlBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKGQtPnZpZXctPnBhZ2UoKSA9PSBwYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBkLT52aWV3LT5zZXRQYWdlKHBhZ2UpOworICAgIHVwZGF0
ZUNvbnRlbnRzU2l6ZSgpOworICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xp
Y3koUXQ6Okhvcml6b250YWwsIFF0OjpTY3JvbGxCYXJBbHdheXNPZmYpOworICAgIHBhZ2UtPm1h
aW5GcmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xpY3koUXQ6OlZlcnRpY2FsLCBRdDo6U2Nyb2xsQmFy
QWx3YXlzT2ZmKTsKKyAgICBjb25uZWN0KHBhZ2UtPm1haW5GcmFtZSgpLCBTSUdOQUwodXJsQ2hh
bmdlZChRVXJsKSksIHRoaXMsIFNMT1QocGFnZVVybENoYW5nZWQoKSkpOworICAgIGNvbm5lY3Qo
cGFnZS0+bWFpbkZyYW1lKCksIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpLCB0aGlzLCBT
SUdOQUwodGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSk7CisgICAgY29ubmVjdChwYWdlLT5tYWluRnJh
bWUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSksIHRoaXMsIFNJR05BTChpY29uQ2hh
bmdlZCgpKSk7CisgICAgY29ubmVjdChwYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKGljb25DaGFu
Z2VkKCkpLCB0aGlzLCBTSUdOQUwoaWNvbkNoYW5nZWQoKSkpOworICAgIGNvbm5lY3QocGFnZS0+
bWFpbkZyYW1lKCksIFNJR05BTChpbml0aWFsTGF5b3V0Q29tcGxldGVkKCkpLCB0aGlzLCBTTE9U
KGluaXRpYWxMYXlvdXQoKSkpOworICAgIGNvbm5lY3QocGFnZS0+bWFpbkZyYW1lKCksIFNJR05B
TChjb250ZW50c1NpemVDaGFuZ2VkKFFTaXplKSksIHRoaXMsIFNJR05BTChjb250ZW50c1NpemVD
aGFuZ2VkKFFTaXplKSkpOworCisgICAgY29ubmVjdChwYWdlLCBTSUdOQUwobG9hZFN0YXJ0ZWQo
KSksIHRoaXMsIFNMT1QoZG9Mb2FkU3RhcnRlZCgpKSk7CisgICAgY29ubmVjdChwYWdlLCBTSUdO
QUwobG9hZFByb2dyZXNzKGludCkpLCB0aGlzLCBTTE9UKGRvTG9hZFByb2dyZXNzKGludCkpKTsK
KyAgICBjb25uZWN0KHBhZ2UsIFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkpLCB0aGlzLCBTTE9U
KGRvTG9hZEZpbmlzaGVkKGJvb2wpKSk7CisgICAgY29ubmVjdChwYWdlLCBTSUdOQUwoc3RhdHVz
QmFyTWVzc2FnZShRU3RyaW5nKSksIHRoaXMsIFNMT1Qoc2V0U3RhdHVzVGV4dChRU3RyaW5nKSkp
OworCisgICAgY29ubmVjdChwYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKGphdmFTY3JpcHRXaW5k
b3dPYmplY3RDbGVhcmVkKCkpLCB0aGlzLCBTTE9UKHdpbmRvd09iamVjdENsZWFyZWQoKSkpOwor
CisgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6VGlsZWRC
YWNraW5nU3RvcmVFbmFibGVkLCB0cnVlKTsKKworfQorCisvKiEKKyAgICBccW1sc2lnbmFsIFdl
YlZpZXc6Om9uTG9hZFN0YXJ0ZWQoKQorCisgICAgVGhpcyBoYW5kbGVyIGlzIGNhbGxlZCB3aGVu
IHRoZSB3ZWIgZW5naW5lIGJlZ2lucyBsb2FkaW5nCisgICAgYSBwYWdlLiBMYXRlciwgV2ViVmll
dzo6b25Mb2FkRmluaXNoZWQoKSBvciBXZWJWaWV3OjpvbkxvYWRGYWlsZWQoKQorICAgIHdpbGwg
YmUgZW1pdHRlZC4KKyovCisKKy8qIQorICAgIFxxbWxzaWduYWwgV2ViVmlldzo6b25Mb2FkRmlu
aXNoZWQoKQorCisgICAgVGhpcyBoYW5kbGVyIGlzIGNhbGxlZCB3aGVuIHRoZSB3ZWIgZW5naW5l
IFxlIHN1Y2Nlc3NmdWxseQorICAgIGZpbmlzaGVzIGxvYWRpbmcgYSBwYWdlLCBpbmNsdWRpbmcg
YW55IGNvbXBvbmVudCBjb250ZW50CisgICAgKFdlYlZpZXc6Om9uTG9hZEZhaWxlZCgpIHdpbGwg
YmUgZW1pdHRlZCBvdGhlcndpc2UpLgorCisgICAgXHNhIHByb2dyZXNzCisqLworCisvKiEKKyAg
ICBccW1sc2lnbmFsIFdlYlZpZXc6Om9uTG9hZEZhaWxlZCgpCisKKyAgICBUaGlzIGhhbmRsZXIg
aXMgY2FsbGVkIHdoZW4gdGhlIHdlYiBlbmdpbmUgZmFpbHMgbG9hZGluZworICAgIGEgcGFnZSBv
ciBhbnkgY29tcG9uZW50IGNvbnRlbnQKKyAgICAoV2ViVmlldzo6b25Mb2FkRmluaXNoZWQoKSB3
aWxsIGJlIGVtaXR0ZWQgb24gc3VjY2VzcykuCisqLworCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OmxvYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRTmV0d29ya0FjY2Vzc01h
bmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IFFCeXRlQXJyYXkmIGJvZHkpCit7Cisg
ICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+bG9hZChyZXF1ZXN0LCBvcGVyYXRpb24sIGJvZHkpOwor
fQorCitRU3RyaW5nIFFEZWNsYXJhdGl2ZVdlYlZpZXc6Omh0bWwoKSBjb25zdAoreworICAgIHJl
dHVybiBwYWdlKCktPm1haW5GcmFtZSgpLT50b0h0bWwoKTsKK30KKworLyohCisgICAgXHFtbHBy
b3BlcnR5IHN0cmluZyBXZWJWaWV3OjpodG1sCisgICAgVGhpcyBwcm9wZXJ0eSBob2xkcyBIVE1M
IHRleHQgc2V0IGRpcmVjdGx5CisKKyAgICBUaGUgaHRtbCBwcm9wZXJ0eSBjYW4gYmUgc2V0IGFz
IGEgc3RyaW5nLgorCisgICAgXHFtbAorICAgIFdlYlZpZXcgeworICAgICAgICBodG1sOiAiPHA+
VGhpcyBpcyA8Yj5IVE1MPC9iPi4iCisgICAgfQorICAgIFxlbmRxbWwKKyovCit2b2lkIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OnNldEh0bWwoY29uc3QgUVN0cmluZyYgaHRtbCwgY29uc3QgUVVybCYg
YmFzZVVybCkKK3sKKyAgICB1cGRhdGVDb250ZW50c1NpemUoKTsKKyAgICBpZiAoaXNDb21wb25l
bnRDb21wbGV0ZSgpKQorICAgICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5zZXRIdG1sKGh0bWws
IGJhc2VVcmwpOworICAgIGVsc2UgeworICAgICAgICBkLT5wZW5kaW5nID0gZC0+UGVuZGluZ0h0
bWw7CisgICAgICAgIGQtPnBlbmRpbmdVcmwgPSBiYXNlVXJsOworICAgICAgICBkLT5wZW5kaW5n
U3RyaW5nID0gaHRtbDsKKyAgICB9CisgICAgZW1pdCBodG1sQ2hhbmdlZCgpOworfQorCit2b2lk
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldENvbnRlbnQoY29uc3QgUUJ5dGVBcnJheSYgZGF0YSwg
Y29uc3QgUVN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFFVcmwmIGJhc2VVcmwpCit7CisgICAgdXBk
YXRlQ29udGVudHNTaXplKCk7CisKKyAgICBpZiAoaXNDb21wb25lbnRDb21wbGV0ZSgpKQorICAg
ICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5zZXRDb250ZW50KGRhdGEsIG1pbWVUeXBlLCBxbWxD
b250ZXh0KHRoaXMpLT5yZXNvbHZlZFVybChiYXNlVXJsKSk7CisgICAgZWxzZSB7CisgICAgICAg
IGQtPnBlbmRpbmcgPSBkLT5QZW5kaW5nQ29udGVudDsKKyAgICAgICAgZC0+cGVuZGluZ1VybCA9
IGJhc2VVcmw7CisgICAgICAgIGQtPnBlbmRpbmdTdHJpbmcgPSBtaW1lVHlwZTsKKyAgICAgICAg
ZC0+cGVuZGluZ0RhdGEgPSBkYXRhOworICAgIH0KK30KKworUVdlYkhpc3RvcnkqIFFEZWNsYXJh
dGl2ZVdlYlZpZXc6Omhpc3RvcnkoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCktPmhpc3Rv
cnkoKTsKK30KKworUVdlYlNldHRpbmdzKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXR0aW5ncygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+c2V0dGluZ3MoKTsKK30KKworUURlY2xhcmF0
aXZlV2ViVmlldyogUURlY2xhcmF0aXZlV2ViVmlldzo6Y3JlYXRlV2luZG93KFFXZWJQYWdlOjpX
ZWJXaW5kb3dUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBRV2Vi
UGFnZTo6V2ViQnJvd3NlcldpbmRvdzogeworICAgICAgICBpZiAoIWQtPm5ld1dpbmRvd0NvbXBv
bmVudCAmJiBkLT5uZXdXaW5kb3dQYXJlbnQpCisgICAgICAgICAgICBxV2FybmluZygiV2ViVmll
dzo6bmV3V2luZG93Q29tcG9uZW50IG5vdCBzZXQgLSBXZWJWaWV3OjpuZXdXaW5kb3dQYXJlbnQg
aWdub3JlZCIpOworICAgICAgICBlbHNlIGlmIChkLT5uZXdXaW5kb3dDb21wb25lbnQgJiYgIWQt
Pm5ld1dpbmRvd1BhcmVudCkKKyAgICAgICAgICAgIHFXYXJuaW5nKCJXZWJWaWV3OjpuZXdXaW5k
b3dQYXJlbnQgbm90IHNldCAtIFdlYlZpZXc6Om5ld1dpbmRvd0NvbXBvbmVudCBpZ25vcmVkIik7
CisgICAgICAgIGVsc2UgaWYgKGQtPm5ld1dpbmRvd0NvbXBvbmVudCAmJiBkLT5uZXdXaW5kb3dQ
YXJlbnQpIHsKKyAgICAgICAgICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXcqIHdlYnZpZXcgPSAwOwor
ICAgICAgICAgICAgUURlY2xhcmF0aXZlQ29udGV4dCogd2luZG93Q29udGV4dCA9IG5ldyBRRGVj
bGFyYXRpdmVDb250ZXh0KHFtbENvbnRleHQodGhpcykpOworCisgICAgICAgICAgICBRT2JqZWN0
KiBuZXdPYmplY3QgPSBkLT5uZXdXaW5kb3dDb21wb25lbnQtPmNyZWF0ZSh3aW5kb3dDb250ZXh0
KTsKKyAgICAgICAgICAgIGlmIChuZXdPYmplY3QpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3dD
b250ZXh0LT5zZXRQYXJlbnQobmV3T2JqZWN0KTsKKyAgICAgICAgICAgICAgICBRRGVjbGFyYXRp
dmVJdGVtKiBpdGVtID0gcW9iamVjdF9jYXN0PFFEZWNsYXJhdGl2ZUl0ZW0gKj4obmV3T2JqZWN0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBuZXdPYmplY3Q7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHdlYnZpZXcgPSBpdGVtLT5maW5kQ2hpbGQ8UURlY2xhcmF0aXZlV2ViVmlldyo+KCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghd2VidmlldykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBpdGVtOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld09iamVjdC0+c2V0UGFyZW50KGQtPm5ld1dpbmRvd1BhcmVudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxRR3JhcGhpY3NPYmplY3QqPihpdGVtKS0+c2V0
UGFyZW50SXRlbShkLT5uZXdXaW5kb3dQYXJlbnQpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZGVs
ZXRlIHdpbmRvd0NvbnRleHQ7CisKKyAgICAgICAgICAgIHJldHVybiB3ZWJ2aWV3OworICAgICAg
ICB9CisgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgUVdlYlBhZ2U6OldlYk1vZGFsRGlhbG9n
OiB7CisgICAgICAgIC8vIE5vdCBzdXBwb3J0ZWQKKyAgICB9CisgICAgfQorICAgIHJldHVybiAw
OworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgY29tcG9uZW50IFdlYlZpZXc6Om5ld1dpbmRv
d0NvbXBvbmVudAorCisgICAgVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgY29tcG9uZW50IHRvIHVz
ZSBmb3IgbmV3IHdpbmRvd3MuCisgICAgVGhlIGNvbXBvbmVudCBtdXN0IGhhdmUgYSBXZWJWaWV3
IHNvbWV3aGVyZSBpbiBpdHMgc3RydWN0dXJlLgorCisgICAgV2hlbiB0aGUgd2ViIGVuZ2luZSBy
ZXF1ZXN0cyBhIG5ldyB3aW5kb3csIGl0IHdpbGwgYmUgYW4gaW5zdGFuY2Ugb2YKKyAgICB0aGlz
IGNvbXBvbmVudC4KKworICAgIFRoZSBwYXJlbnQgb2YgdGhlIG5ldyB3aW5kb3cgaXMgc2V0IGJ5
IG5ld1dpbmRvd1BhcmVudC4gSXQgbXVzdCBiZSBzZXQuCisqLworUURlY2xhcmF0aXZlQ29tcG9u
ZW50KiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpuZXdXaW5kb3dDb21wb25lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBkLT5uZXdXaW5kb3dDb21wb25lbnQ7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZl
V2ViVmlldzo6c2V0TmV3V2luZG93Q29tcG9uZW50KFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogbmV3
V2luZG93KQoreworICAgIGlmIChuZXdXaW5kb3cgPT0gZC0+bmV3V2luZG93Q29tcG9uZW50KQor
ICAgICAgICByZXR1cm47CisgICAgZC0+bmV3V2luZG93Q29tcG9uZW50ID0gbmV3V2luZG93Owor
ICAgIGVtaXQgbmV3V2luZG93Q29tcG9uZW50Q2hhbmdlZCgpOworfQorCisKKy8qIQorICAgIFxx
bWxwcm9wZXJ0eSBpdGVtIFdlYlZpZXc6Om5ld1dpbmRvd1BhcmVudAorCisgICAgVGhlIHBhcmVu
dCBpdGVtIGZvciBuZXcgd2luZG93cy4KKworICAgIFxzYSBuZXdXaW5kb3dDb21wb25lbnQKKyov
CitRRGVjbGFyYXRpdmVJdGVtKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpuZXdXaW5kb3dQYXJlbnQo
KSBjb25zdAoreworICAgIHJldHVybiBkLT5uZXdXaW5kb3dQYXJlbnQ7Cit9CisKK3ZvaWQgUURl
Y2xhcmF0aXZlV2ViVmlldzo6c2V0TmV3V2luZG93UGFyZW50KFFEZWNsYXJhdGl2ZUl0ZW0qIHBh
cmVudCkKK3sKKyAgICBpZiAocGFyZW50ID09IGQtPm5ld1dpbmRvd1BhcmVudCkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChkLT5uZXdXaW5kb3dQYXJlbnQgJiYgcGFyZW50KSB7CisgICAgICAg
IFFMaXN0PFFHcmFwaGljc0l0ZW0gKj4gY2hpbGRyZW4gPSBkLT5uZXdXaW5kb3dQYXJlbnQtPmNo
aWxkSXRlbXMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5jb3VudCgp
OyArK2kpCisgICAgICAgICAgICBjaGlsZHJlbi5hdChpKS0+c2V0UGFyZW50SXRlbShwYXJlbnQp
OworICAgIH0KKyAgICBkLT5uZXdXaW5kb3dQYXJlbnQgPSBwYXJlbnQ7CisgICAgZW1pdCBuZXdX
aW5kb3dQYXJlbnRDaGFuZ2VkKCk7Cit9CisKK1FTaXplIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmNv
bnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+bWFpbkZyYW1lKCktPmNv
bnRlbnRzU2l6ZSgpICogY29udGVudHNTY2FsZSgpOworfQorCitxcmVhbCBRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojpjb250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+dmlldy0+c2Nh
bGUoKTsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50c1NjYWxlKHFy
ZWFsIHNjYWxlKQoreworICAgIGlmIChzY2FsZSA9PSBkLT52aWV3LT5zY2FsZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgZC0+dmlldy0+c2V0U2NhbGUoc2NhbGUpOworICAgIHVwZGF0ZURlY2xh
cmF0aXZlV2ViVmlld1NpemUoKTsKKyAgICBlbWl0IGNvbnRlbnRzU2NhbGVDaGFuZ2VkKCk7Cit9
CisKKy8qIQorICAgIFJldHVybnMgdGhlIGFyZWEgb2YgdGhlIGxhcmdlc3QgZWxlbWVudCBhdCBw
b3NpdGlvbiAoXGEgeCxcYSB5KSB0aGF0IGlzIG5vIGxhcmdlcgorICAgIHRoYW4gXGEgbWF4V2lk
dGggYnkgXGEgbWF4SGVpZ2h0IHBpeGVscy4KKworICAgIE1heSByZXR1cm4gYW4gYXJlYSBsYXJn
ZXIgaW4gdGhlIGNhc2Ugd2hlbiBubyBzbWFsbGVyIGVsZW1lbnQgaXMgYXQgdGhlIHBvc2l0aW9u
LgorKi8KK1FSZWN0IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmVsZW1lbnRBcmVhQXQoaW50IHgsIGlu
dCB5LCBpbnQgbWF4V2lkdGgsIGludCBtYXhIZWlnaHQpIGNvbnN0Cit7CisgICAgUVdlYkhpdFRl
c3RSZXN1bHQgaGl0ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+aGl0VGVzdENvbnRlbnQoUVBvaW50
KHgsIHkpKTsKKyAgICBRUmVjdCBoaXRSZWN0ID0gaGl0LmJvdW5kaW5nUmVjdCgpOworICAgIFFX
ZWJFbGVtZW50IGVsZW1lbnQgPSBoaXQuZW5jbG9zaW5nQmxvY2tFbGVtZW50KCk7CisgICAgaWYg
KG1heFdpZHRoIDw9IDApCisgICAgICAgIG1heFdpZHRoID0gSU5UX01BWDsKKyAgICBpZiAobWF4
SGVpZ2h0IDw9IDApCisgICAgICAgIG1heEhlaWdodCA9IElOVF9NQVg7CisgICAgd2hpbGUgKCFl
bGVtZW50LnBhcmVudCgpLmlzTnVsbCgpICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS53aWR0aCgpIDw9
IG1heFdpZHRoICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS5oZWlnaHQoKSA8PSBtYXhIZWlnaHQpIHsK
KyAgICAgICAgaGl0UmVjdCA9IGVsZW1lbnQuZ2VvbWV0cnkoKTsKKyAgICAgICAgZWxlbWVudCA9
IGVsZW1lbnQucGFyZW50KCk7CisgICAgfQorICAgIHJldHVybiBoaXRSZWN0OworfQorCisvKiEK
KyAgICBcaW50ZXJuYWwKKyAgICBcY2xhc3MgUURlY2xhcmF0aXZlV2ViUGFnZQorICAgIFxicmll
ZiBUaGUgUURlY2xhcmF0aXZlV2ViUGFnZSBjbGFzcyBpcyBhIFFXZWJQYWdlIHRoYXQgY2FuIGNy
ZWF0ZSBRTUwgcGx1Z2lucy4KKworICAgIFxzYSBRRGVjbGFyYXRpdmVXZWJWaWV3CisqLworUURl
Y2xhcmF0aXZlV2ViUGFnZTo6UURlY2xhcmF0aXZlV2ViUGFnZShRRGVjbGFyYXRpdmVXZWJWaWV3
KiBwYXJlbnQpIDoKKyAgICBRV2ViUGFnZShwYXJlbnQpCit7Cit9CisKK1FEZWNsYXJhdGl2ZVdl
YlBhZ2U6On5RRGVjbGFyYXRpdmVXZWJQYWdlKCkKK3sKK30KKworUVN0cmluZyBRRGVjbGFyYXRp
dmVXZWJQYWdlOjpjaG9vc2VGaWxlKFFXZWJGcmFtZSogb3JpZ2luYXRpbmdGcmFtZSwgY29uc3Qg
UVN0cmluZyYgb2xkRmlsZSkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQor
ICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAgUV9VTlVTRUQob2xkRmlsZSkKKyAg
ICByZXR1cm4gb2xkRmlsZTsKK30KKworLyohCisgICAgXHFtbHNpZ25hbCBXZWJWaWV3OjphbGVy
dChtZXNzYWdlKQorCisgICAgVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB3ZWIgZW5n
aW5lIHNlbmRzIGEgSmF2YVNjcmlwdCBhbGVydC4gVGhlIFxhIG1lc3NhZ2UgaXMgdGhlIHRleHQK
KyAgICB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGFsZXJ0IHRvIHRoZSB1c2VyLgorKi8KKworCit2
b2lkIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmphdmFTY3JpcHRBbGVydChRV2ViRnJhbWUqIG9yaWdp
bmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sKKyAgICBRX1VOVVNFRChvcmlnaW5h
dGluZ0ZyYW1lKQorICAgIGVtaXQgdmlld0l0ZW0oKS0+YWxlcnQobXNnKTsKK30KKworYm9vbCBR
RGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0Q29uZmlybShRV2ViRnJhbWUqIG9yaWdpbmF0
aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIChp
dCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAgUV9VTlVTRUQo
bXNnKQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBRRGVjbGFyYXRpdmVXZWJQYWdlOjpq
YXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSogb3JpZ2luYXRpbmdGcmFtZSwgY29uc3QgUVN0cmlu
ZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFTdHJpbmcqIHJlc3VsdCkKK3sK
KyAgICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0
aW5nRnJhbWUpCisgICAgUV9VTlVTRUQobXNnKQorICAgIFFfVU5VU0VEKGRlZmF1bHRWYWx1ZSkK
KyAgICBRX1VOVVNFRChyZXN1bHQpCisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK1FEZWNsYXJh
dGl2ZVdlYlZpZXcqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OnZpZXdJdGVtKCkKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlldyo+KHBhcmVudCgpKTsKK30KKworUVdl
YlBhZ2UqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhXZWJXaW5kb3dUeXBlIHR5
cGUpCit7CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyogbmV3VmlldyA9IHZpZXdJdGVtKCktPmNy
ZWF0ZVdpbmRvdyh0eXBlKTsKKyAgICBpZiAobmV3VmlldykKKyAgICAgICAgcmV0dXJuIG5ld1Zp
ZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworUVRfRU5EX05BTUVTUEFDRQorCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19wLmggYi9X
ZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19wLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjYTk2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9xdC9kZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmV3ZWJ2aWV3X3AuaApAQCAtMCwwICsxLDM2NyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaWZuZGVmIHFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9o
CisjZGVmaW5lIHFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9oCisKKyNpbmNsdWRlIDxRdENvcmUvUUJh
c2ljVGltZXI+CisjaW5jbHVkZSA8UXRDb3JlL1FVcmw+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZS9RRGVjbGFyYXRpdmVJdGVtPgorI2luY2x1ZGUgPFF0R3VpL1FBY3Rpb24+CisjaW5jbHVkZSA8
UXROZXR3b3JrL1FOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRlIDxRdFdlYktpdC9RR3Jh
cGhpY3NXZWJWaWV3PgorI2luY2x1ZGUgPFF0V2ViS2l0L1FXZWJQYWdlPgorCisKK1FUX0JFR0lO
X0hFQURFUgorCitjbGFzcyBRV2ViSGlzdG9yeTsKK2NsYXNzIFFXZWJTZXR0aW5nczsKKworUVRf
QkVHSU5fTkFNRVNQQUNFCisKK1FUX01PRFVMRShEZWNsYXJhdGl2ZSkKK2NsYXNzIFFEZWNsYXJh
dGl2ZVdlYlNldHRpbmdzOworY2xhc3MgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU7CitjbGFz
cyBRTmV0d29ya1JlcXVlc3Q7CitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3OworY2xhc3MgUURl
Y2xhcmF0aXZlV2ViVmlld1ByaXZhdGU7CisKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlBhZ2UgOiBw
dWJsaWMgUVdlYlBhZ2UgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgZXhwbGljaXQgUURl
Y2xhcmF0aXZlV2ViUGFnZShRRGVjbGFyYXRpdmVXZWJWaWV3ICpwYXJlbnQpOworICAgIH5RRGVj
bGFyYXRpdmVXZWJQYWdlKCk7Citwcm90ZWN0ZWQ6CisgICAgUVdlYlBhZ2UgKmNyZWF0ZVdpbmRv
dyhXZWJXaW5kb3dUeXBlIHR5cGUpOworICAgIFFTdHJpbmcgY2hvb3NlRmlsZShRV2ViRnJhbWUg
Km9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG9sZEZpbGUpOworICAgIHZvaWQgamF2
YVNjcmlwdEFsZXJ0KFFXZWJGcmFtZSAqb3JpZ2luYXRpbmdGcmFtZSwgY29uc3QgUVN0cmluZyYg
bXNnKTsKKyAgICBib29sIGphdmFTY3JpcHRDb25maXJtKFFXZWJGcmFtZSAqb3JpZ2luYXRpbmdG
cmFtZSwgY29uc3QgUVN0cmluZyYgbXNnKTsKKyAgICBib29sIGphdmFTY3JpcHRQcm9tcHQoUVdl
YkZyYW1lICpvcmlnaW5hdGluZ0ZyYW1lLCBjb25zdCBRU3RyaW5nJiBtc2csIGNvbnN0IFFTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgUVN0cmluZyogcmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBRRGVj
bGFyYXRpdmVXZWJWaWV3ICp2aWV3SXRlbSgpOworfTsKKworY2xhc3MgR3JhcGhpY3NXZWJWaWV3
IDogcHVibGljIFFHcmFwaGljc1dlYlZpZXcgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAg
R3JhcGhpY3NXZWJWaWV3KFFEZWNsYXJhdGl2ZVdlYlZpZXcqIHBhcmVudCA9IDApOworcHJvdGVj
dGVkOgorICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCog
ZXZlbnQpOworICAgIHZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2
ZW50KiBldmVudCk7CisgICAgdm9pZCBtb3VzZU1vdmVFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNl
RXZlbnQqIGV2ZW50KTsKKyAgICB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChRR3JhcGhpY3NT
Y2VuZU1vdXNlRXZlbnQgKmV2ZW50KTsKKyAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQq
IGV2ZW50KTsKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGRvdWJsZUNsaWNrKGludCBjbGlja1gsIGlu
dCBjbGlja1kpOworcHJpdmF0ZToKKyAgICBRRGVjbGFyYXRpdmVXZWJWaWV3ICpwYXJlbnQ7Cisg
ICAgUVBvaW50RiBwcmVzc1BvaW50OworICAgIFFCYXNpY1RpbWVyIHByZXNzVGltZXI7CisgICAg
aW50IHByZXNzVGltZTsgLy8gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgdG91Y2ggZXZlbnQgYmVj
b21lcyBhICJ0YXAgYW5kIGhvbGQiCisgICAgZnJpZW5kIGNsYXNzIFFEZWNsYXJhdGl2ZVdlYlZp
ZXc7Cit9OworCitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3QXR0YWNoZWQ7CisKKy8vIFRPRE86
IGJyb3dzZXIgcGx1Z2lucworCitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3IDogcHVibGljIFFE
ZWNsYXJhdGl2ZUl0ZW0geworICAgIFFfT0JKRUNUCisKKyAgICBRX0VOVU1TKFN0YXR1cyBTZWxl
Y3Rpb25Nb2RlKQorCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQgdGl0bGUgTk9U
SUZZIHRpdGxlQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFQaXhtYXAgaWNvbiBSRUFEIGljb24g
Tk9USUZZIGljb25DaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBzdGF0dXNUZXh0IFJF
QUQgc3RhdHVzVGV4dCBOT1RJRlkgc3RhdHVzVGV4dENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZ
KFFTdHJpbmcgaHRtbCBSRUFEIGh0bWwgV1JJVEUgc2V0SHRtbCBOT1RJRlkgaHRtbENoYW5nZWQp
CisKKyAgICBRX1BST1BFUlRZKGludCBwcmVzc0dyYWJUaW1lIFJFQUQgcHJlc3NHcmFiVGltZSBX
UklURSBzZXRQcmVzc0dyYWJUaW1lIE5PVElGWSBwcmVzc0dyYWJUaW1lQ2hhbmdlZCkKKworICAg
IFFfUFJPUEVSVFkoaW50IHByZWZlcnJlZFdpZHRoIFJFQUQgcHJlZmVycmVkV2lkdGggV1JJVEUg
c2V0UHJlZmVycmVkV2lkdGggTk9USUZZIHByZWZlcnJlZFdpZHRoQ2hhbmdlZCkKKyAgICBRX1BS
T1BFUlRZKGludCBwcmVmZXJyZWRIZWlnaHQgUkVBRCBwcmVmZXJyZWRIZWlnaHQgV1JJVEUgc2V0
UHJlZmVycmVkSGVpZ2h0IE5PVElGWSBwcmVmZXJyZWRIZWlnaHRDaGFuZ2VkKQorICAgIFFfUFJP
UEVSVFkoUVVybCB1cmwgUkVBRCB1cmwgV1JJVEUgc2V0VXJsIE5PVElGWSB1cmxDaGFuZ2VkKQor
ICAgIFFfUFJPUEVSVFkocXJlYWwgcHJvZ3Jlc3MgUkVBRCBwcm9ncmVzcyBOT1RJRlkgcHJvZ3Jl
c3NDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoU3RhdHVzIHN0YXR1cyBSRUFEIHN0YXR1cyBOT1RJ
Rlkgc3RhdHVzQ2hhbmdlZCkKKworICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogcmVsb2FkIFJFQUQg
cmVsb2FkQWN0aW9uIENPTlNUQU5UKQorICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogYmFjayBSRUFE
IGJhY2tBY3Rpb24gQ09OU1RBTlQpCisgICAgUV9QUk9QRVJUWShRQWN0aW9uKiBmb3J3YXJkIFJF
QUQgZm9yd2FyZEFjdGlvbiBDT05TVEFOVCkKKyAgICBRX1BST1BFUlRZKFFBY3Rpb24qIHN0b3Ag
UkVBRCBzdG9wQWN0aW9uIENPTlNUQU5UKQorCisgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVX
ZWJTZXR0aW5ncyogc2V0dGluZ3MgUkVBRCBzZXR0aW5nc09iamVjdCBDT05TVEFOVCkKKworICAg
IFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGphdmFTY3JpcHRX
aW5kb3dPYmplY3RzIFJFQUQgamF2YVNjcmlwdFdpbmRvd09iamVjdHMgQ09OU1RBTlQpCisKKyAg
ICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogbmV3V2luZG93Q29tcG9uZW50IFJF
QUQgbmV3V2luZG93Q29tcG9uZW50IFdSSVRFIHNldE5ld1dpbmRvd0NvbXBvbmVudCBOT1RJRlkg
bmV3V2luZG93Q29tcG9uZW50Q2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUl0
ZW0qIG5ld1dpbmRvd1BhcmVudCBSRUFEIG5ld1dpbmRvd1BhcmVudCBXUklURSBzZXROZXdXaW5k
b3dQYXJlbnQgTk9USUZZIG5ld1dpbmRvd1BhcmVudENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZ
KGJvb2wgcmVuZGVyaW5nRW5hYmxlZCBSRUFEIHJlbmRlcmluZ0VuYWJsZWQgV1JJVEUgc2V0UmVu
ZGVyaW5nRW5hYmxlZCBOT1RJRlkgcmVuZGVyaW5nRW5hYmxlZENoYW5nZWQpCisKKyAgICBRX1BS
T1BFUlRZKFFTaXplIGNvbnRlbnRzU2l6ZSBSRUFEIGNvbnRlbnRzU2l6ZSBOT1RJRlkgY29udGVu
dHNTaXplQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKHFyZWFsIGNvbnRlbnRzU2NhbGUgUkVBRCBj
b250ZW50c1NjYWxlIFdSSVRFIHNldENvbnRlbnRzU2NhbGUgTk9USUZZIGNvbnRlbnRzU2NhbGVD
aGFuZ2VkKQorCitwdWJsaWM6CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyhRRGVjbGFyYXRpdmVJ
dGVtICpwYXJlbnQgPSAwKTsKKyAgICB+UURlY2xhcmF0aXZlV2ViVmlldygpOworCisgICAgUVVy
bCB1cmwoKSBjb25zdDsKKyAgICB2b2lkIHNldFVybChjb25zdCBRVXJsICYpOworCisgICAgUVN0
cmluZyB0aXRsZSgpIGNvbnN0OworCisgICAgUVBpeG1hcCBpY29uKCkgY29uc3Q7CisKKyAgICBR
X0lOVk9LQUJMRSBib29sIGhldXJpc3RpY1pvb20oaW50IGNsaWNrWCwgaW50IGNsaWNrWSwgcXJl
YWwgbWF4em9vbSk7CisgICAgUVJlY3QgZWxlbWVudEFyZWFBdChpbnQgeCwgaW50IHksIGludCBt
aW53aWR0aCwgaW50IG1pbmhlaWdodCkgY29uc3Q7CisKKyAgICBpbnQgcHJlc3NHcmFiVGltZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0UHJlc3NHcmFiVGltZShpbnQpOworCisgICAgaW50IHByZWZl
cnJlZFdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQcmVmZXJyZWRXaWR0aChpbnQpOworICAg
IGludCBwcmVmZXJyZWRIZWlnaHQoKSBjb25zdDsKKyAgICB2b2lkIHNldFByZWZlcnJlZEhlaWdo
dChpbnQpOworCisgICAgZW51bSBTdGF0dXMgeyBOdWxsLCBSZWFkeSwgTG9hZGluZywgRXJyb3Ig
fTsKKyAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3Q7CisgICAgcXJlYWwgcHJvZ3Jlc3MoKSBjb25z
dDsKKyAgICBRU3RyaW5nIHN0YXR1c1RleHQoKSBjb25zdDsKKworICAgIFFBY3Rpb24gKnJlbG9h
ZEFjdGlvbigpIGNvbnN0OworICAgIFFBY3Rpb24gKmJhY2tBY3Rpb24oKSBjb25zdDsKKyAgICBR
QWN0aW9uICpmb3J3YXJkQWN0aW9uKCkgY29uc3Q7CisgICAgUUFjdGlvbiAqc3RvcEFjdGlvbigp
IGNvbnN0OworCisgICAgUVdlYlBhZ2UgKnBhZ2UoKSBjb25zdDsKKyAgICB2b2lkIHNldFBhZ2Uo
UVdlYlBhZ2UgKnBhZ2UpOworCisgICAgdm9pZCBsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAm
cmVxdWVzdCwKKyAgICAgICAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24g
b3BlcmF0aW9uID0gUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb24sCisgICAgICAg
ICAgICAgIGNvbnN0IFFCeXRlQXJyYXkgJmJvZHkgPSBRQnl0ZUFycmF5KCkpOworCisgICAgUVN0
cmluZyBodG1sKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEh0bWwoY29uc3QgUVN0cmluZyAmaHRt
bCwgY29uc3QgUVVybCAmYmFzZVVybCA9IFFVcmwoKSk7CisgICAgdm9pZCBzZXRDb250ZW50KGNv
bnN0IFFCeXRlQXJyYXkgJmRhdGEsIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlID0gUVN0cmluZygp
LCBjb25zdCBRVXJsICZiYXNlVXJsID0gUVVybCgpKTsKKworICAgIFFXZWJIaXN0b3J5KiBoaXN0
b3J5KCkgY29uc3Q7CisgICAgUVdlYlNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0OworICAgIFFE
ZWNsYXJhdGl2ZVdlYlNldHRpbmdzICpzZXR0aW5nc09iamVjdCgpIGNvbnN0OworCisgICAgYm9v
bCByZW5kZXJpbmdFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZW5kZXJpbmdFbmFibGVk
KGJvb2wpOworCisgICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGphdmFTY3Jp
cHRXaW5kb3dPYmplY3RzKCk7CisKKyAgICBzdGF0aWMgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFj
aGVkKiBxbWxBdHRhY2hlZFByb3BlcnRpZXMoUU9iamVjdCopOworCisgICAgUURlY2xhcmF0aXZl
Q29tcG9uZW50ICpuZXdXaW5kb3dDb21wb25lbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldE5ld1dp
bmRvd0NvbXBvbmVudChRRGVjbGFyYXRpdmVDb21wb25lbnQgKm5ld1dpbmRvdyk7CisgICAgUURl
Y2xhcmF0aXZlSXRlbSogbmV3V2luZG93UGFyZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXROZXdX
aW5kb3dQYXJlbnQoUURlY2xhcmF0aXZlSXRlbSogbmV3V2luZG93KTsKKworICAgIGJvb2wgaXND
b21wb25lbnRDb21wbGV0ZVB1YmxpYygpIGNvbnN0IHsgcmV0dXJuIGlzQ29tcG9uZW50Q29tcGxl
dGUoKTsgfQorCisgICAgUVNpemUgY29udGVudHNTaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dENvbnRlbnRzU2NhbGUocXJlYWwgc2NhbGUpOworICAgIHFyZWFsIGNvbnRlbnRzU2NhbGUoKSBj
b25zdDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgcHJlZmVycmVkV2lkdGhDaGFuZ2VkKCk7Cisg
ICAgdm9pZCBwcmVmZXJyZWRIZWlnaHRDaGFuZ2VkKCk7CisgICAgdm9pZCB1cmxDaGFuZ2VkKCk7
CisgICAgdm9pZCBwcm9ncmVzc0NoYW5nZWQoKTsKKyAgICB2b2lkIHN0YXR1c0NoYW5nZWQoU3Rh
dHVzKTsKKyAgICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCBp
Y29uQ2hhbmdlZCgpOworICAgIHZvaWQgc3RhdHVzVGV4dENoYW5nZWQoKTsKKyAgICB2b2lkIGh0
bWxDaGFuZ2VkKCk7CisgICAgdm9pZCBwcmVzc0dyYWJUaW1lQ2hhbmdlZCgpOworICAgIHZvaWQg
bmV3V2luZG93Q29tcG9uZW50Q2hhbmdlZCgpOworICAgIHZvaWQgbmV3V2luZG93UGFyZW50Q2hh
bmdlZCgpOworICAgIHZvaWQgcmVuZGVyaW5nRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lkIGNv
bnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmKTsKKyAgICB2b2lkIGNvbnRlbnRzU2NhbGVD
aGFuZ2VkKCk7CisKKyAgICB2b2lkIGxvYWRTdGFydGVkKCk7CisgICAgdm9pZCBsb2FkRmluaXNo
ZWQoKTsKKyAgICB2b2lkIGxvYWRGYWlsZWQoKTsKKworICAgIHZvaWQgZG91YmxlQ2xpY2soaW50
IGNsaWNrWCwgaW50IGNsaWNrWSk7CisKKyAgICB2b2lkIHpvb21UbyhxcmVhbCB6b29tLCBpbnQg
Y2VudGVyWCwgaW50IGNlbnRlclkpOworCisgICAgdm9pZCBhbGVydChjb25zdCBRU3RyaW5nJiBt
ZXNzYWdlKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgUVZhcmlhbnQgZXZhbHVhdGVKYXZhU2Ny
aXB0KGNvbnN0IFFTdHJpbmcmKTsKKworcHJpdmF0ZSBRX1NMT1RTOgorICAgIHZvaWQgZG9Mb2Fk
U3RhcnRlZCgpOworICAgIHZvaWQgZG9Mb2FkUHJvZ3Jlc3MoaW50IHApOworICAgIHZvaWQgZG9M
b2FkRmluaXNoZWQoYm9vbCBvayk7CisgICAgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFFTdHJp
bmcmKTsKKyAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKTsKKyAgICB2b2lkIHBhZ2VVcmxD
aGFuZ2VkKCk7CisgICAgdm9pZCBpbml0aWFsTGF5b3V0KCk7CisKKyAgICB2b2lkIHVwZGF0ZURl
Y2xhcmF0aXZlV2ViVmlld1NpemUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5n
ZWQoY29uc3QgUVJlY3RGICZuZXdHZW9tZXRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFSZWN0RiAmb2xkR2VvbWV0cnkpOworICAgIFFEZWNsYXJhdGl2ZVdlYlZp
ZXcqIGNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlwZSB0eXBlKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZSgpOworICAgIHZvaWQgaW5pdCgpOworICAg
IHZpcnR1YWwgdm9pZCBjb21wb25lbnRDb21wbGV0ZSgpOworICAgIFFfRElTQUJMRV9DT1BZKFFE
ZWNsYXJhdGl2ZVdlYlZpZXcpCisgICAgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGUqIGQ7Cisg
ICAgUU1vdXNlRXZlbnQqIHNjZW5lTW91c2VFdmVudFRvTW91c2VFdmVudChRR3JhcGhpY3NTY2Vu
ZU1vdXNlRXZlbnQqKTsKKyAgICBRTW91c2VFdmVudCogc2NlbmVIb3Zlck1vdmVFdmVudFRvTW91
c2VFdmVudChRR3JhcGhpY3NTY2VuZUhvdmVyRXZlbnQqKTsKKyAgICBmcmllbmQgY2xhc3MgUURl
Y2xhcmF0aXZlV2ViUGFnZTsKK307CisKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hl
ZCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoUVN0cmlu
ZyB3aW5kb3dPYmplY3ROYW1lIFJFQUQgd2luZG93T2JqZWN0TmFtZSBXUklURSBzZXRXaW5kb3dP
YmplY3ROYW1lKQorcHVibGljOgorICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hlZChRT2Jq
ZWN0KiBwYXJlbnQpCisgICAgICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgeworICAgIH0KKwor
ICAgIFFTdHJpbmcgd2luZG93T2JqZWN0TmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV93aW5kb3dPYmplY3ROYW1lOworICAgIH0KKworICAgIHZvaWQgc2V0V2luZG93T2JqZWN0
TmFtZShjb25zdCBRU3RyaW5nICZuKQorICAgIHsKKyAgICAgICAgbV93aW5kb3dPYmplY3ROYW1l
ID0gbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUVN0cmluZyBtX3dpbmRvd09iamVjdE5hbWU7
Cit9OworCitjbGFzcyBRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncyA6IHB1YmxpYyBRT2JqZWN0IHsK
KyAgICBRX09CSkVDVAorCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHN0YW5kYXJkRm9udEZhbWls
eSBSRUFEIHN0YW5kYXJkRm9udEZhbWlseSBXUklURSBzZXRTdGFuZGFyZEZvbnRGYW1pbHkpCisg
ICAgUV9QUk9QRVJUWShRU3RyaW5nIGZpeGVkRm9udEZhbWlseSBSRUFEIGZpeGVkRm9udEZhbWls
eSBXUklURSBzZXRGaXhlZEZvbnRGYW1pbHkpCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHNlcmlm
Rm9udEZhbWlseSBSRUFEIHNlcmlmRm9udEZhbWlseSBXUklURSBzZXRTZXJpZkZvbnRGYW1pbHkp
CisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHNhbnNTZXJpZkZvbnRGYW1pbHkgUkVBRCBzYW5zU2Vy
aWZGb250RmFtaWx5IFdSSVRFIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkpCisgICAgUV9QUk9QRVJU
WShRU3RyaW5nIGN1cnNpdmVGb250RmFtaWx5IFJFQUQgY3Vyc2l2ZUZvbnRGYW1pbHkgV1JJVEUg
c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkpCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIGZhbnRhc3lGb250
RmFtaWx5IFJFQUQgZmFudGFzeUZvbnRGYW1pbHkgV1JJVEUgc2V0RmFudGFzeUZvbnRGYW1pbHkp
CisKKyAgICBRX1BST1BFUlRZKGludCBtaW5pbXVtRm9udFNpemUgUkVBRCBtaW5pbXVtRm9udFNp
emUgV1JJVEUgc2V0TWluaW11bUZvbnRTaXplKQorICAgIFFfUFJPUEVSVFkoaW50IG1pbmltdW1M
b2dpY2FsRm9udFNpemUgUkVBRCBtaW5pbXVtTG9naWNhbEZvbnRTaXplIFdSSVRFIHNldE1pbmlt
dW1Mb2dpY2FsRm9udFNpemUpCisgICAgUV9QUk9QRVJUWShpbnQgZGVmYXVsdEZvbnRTaXplIFJF
QUQgZGVmYXVsdEZvbnRTaXplIFdSSVRFIHNldERlZmF1bHRGb250U2l6ZSkKKyAgICBRX1BST1BF
UlRZKGludCBkZWZhdWx0Rml4ZWRGb250U2l6ZSBSRUFEIGRlZmF1bHRGaXhlZEZvbnRTaXplIFdS
SVRFIHNldERlZmF1bHRGaXhlZEZvbnRTaXplKQorCisgICAgUV9QUk9QRVJUWShib29sIGF1dG9M
b2FkSW1hZ2VzIFJFQUQgYXV0b0xvYWRJbWFnZXMgV1JJVEUgc2V0QXV0b0xvYWRJbWFnZXMpCisg
ICAgUV9QUk9QRVJUWShib29sIGphdmFzY3JpcHRFbmFibGVkIFJFQUQgamF2YXNjcmlwdEVuYWJs
ZWQgV1JJVEUgc2V0SmF2YXNjcmlwdEVuYWJsZWQpCisgICAgUV9QUk9QRVJUWShib29sIGphdmFF
bmFibGVkIFJFQUQgamF2YUVuYWJsZWQgV1JJVEUgc2V0SmF2YUVuYWJsZWQpCisgICAgUV9QUk9Q
RVJUWShib29sIHBsdWdpbnNFbmFibGVkIFJFQUQgcGx1Z2luc0VuYWJsZWQgV1JJVEUgc2V0UGx1
Z2luc0VuYWJsZWQpCisgICAgUV9QUk9QRVJUWShib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQg
UkVBRCBwcml2YXRlQnJvd3NpbmdFbmFibGVkIFdSSVRFIHNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQpCisgICAgUV9QUk9QRVJUWShib29sIGphdmFzY3JpcHRDYW5PcGVuV2luZG93cyBSRUFEIGph
dmFzY3JpcHRDYW5PcGVuV2luZG93cyBXUklURSBzZXRKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3Mp
CisgICAgUV9QUk9QRVJUWShib29sIGphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQgUkVBRCBq
YXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkIFdSSVRFIHNldEphdmFzY3JpcHRDYW5BY2Nlc3ND
bGlwYm9hcmQpCisgICAgUV9QUk9QRVJUWShib29sIGRldmVsb3BlckV4dHJhc0VuYWJsZWQgUkVB
RCBkZXZlbG9wZXJFeHRyYXNFbmFibGVkIFdSSVRFIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQp
CisgICAgUV9QUk9QRVJUWShib29sIGxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4gUkVBRCBsaW5r
c0luY2x1ZGVkSW5Gb2N1c0NoYWluIFdSSVRFIHNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4p
CisgICAgUV9QUk9QRVJUWShib29sIHpvb21UZXh0T25seSBSRUFEIHpvb21UZXh0T25seSBXUklU
RSBzZXRab29tVGV4dE9ubHkpCisgICAgUV9QUk9QRVJUWShib29sIHByaW50RWxlbWVudEJhY2tn
cm91bmRzIFJFQUQgcHJpbnRFbGVtZW50QmFja2dyb3VuZHMgV1JJVEUgc2V0UHJpbnRFbGVtZW50
QmFja2dyb3VuZHMpCisgICAgUV9QUk9QRVJUWShib29sIG9mZmxpbmVTdG9yYWdlRGF0YWJhc2VF
bmFibGVkIFJFQUQgb2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQgV1JJVEUgc2V0T2ZmbGlu
ZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpCisgICAgUV9QUk9QRVJUWShib29sIG9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCBSRUFEIG9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5h
YmxlZCBXUklURSBzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQpCisgICAgUV9Q
Uk9QRVJUWShib29sIGxvY2FsU3RvcmFnZURhdGFiYXNlRW5hYmxlZCBSRUFEIGxvY2FsU3RvcmFn
ZURhdGFiYXNlRW5hYmxlZCBXUklURSBzZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpCisg
ICAgUV9QUk9QRVJUWShib29sIGxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMgUkVBRCBs
b2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzIFdSSVRFIHNldExvY2FsQ29udGVudENhbkFj
Y2Vzc1JlbW90ZVVybHMpCisKK3B1YmxpYzoKKyAgICBRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncygp
IHt9CisKKyAgICBRU3RyaW5nIHN0YW5kYXJkRm9udEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHMt
PmZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpTdGFuZGFyZEZvbnQpOyB9CisgICAgdm9pZCBzZXRT
dGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5KFFX
ZWJTZXR0aW5nczo6U3RhbmRhcmRGb250LCBmKTsgfQorICAgIFFTdHJpbmcgZml4ZWRGb250RmFt
aWx5KCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkZpeGVkRm9u
dCk7IH0KKyAgICB2b2lkIHNldEZpeGVkRm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBmKSB7IHMt
PnNldEZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpGaXhlZEZvbnQsIGYpOyB9CisgICAgUVN0cmlu
ZyBzZXJpZkZvbnRGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzLT5mb250RmFtaWx5KFFXZWJTZXR0
aW5nczo6U2VyaWZGb250KTsgfQorICAgIHZvaWQgc2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IFFT
dHJpbmcmIGYpIHsgcy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6OlNlcmlmRm9udCwgZik7
IH0KKyAgICBRU3RyaW5nIHNhbnNTZXJpZkZvbnRGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzLT5m
b250RmFtaWx5KFFXZWJTZXR0aW5nczo6U2Fuc1NlcmlmRm9udCk7IH0KKyAgICB2b2lkIHNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoY29uc3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5KFFX
ZWJTZXR0aW5nczo6U2Fuc1NlcmlmRm9udCwgZik7IH0KKyAgICBRU3RyaW5nIGN1cnNpdmVGb250
RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkN1cnNp
dmVGb250KTsgfQorICAgIHZvaWQgc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3QgUVN0cmluZyYg
ZikgeyBzLT5zZXRGb250RmFtaWx5KFFXZWJTZXR0aW5nczo6Q3Vyc2l2ZUZvbnQsIGYpOyB9Cisg
ICAgUVN0cmluZyBmYW50YXN5Rm9udEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRGYW1p
bHkoUVdlYlNldHRpbmdzOjpGYW50YXN5Rm9udCk7IH0KKyAgICB2b2lkIHNldEZhbnRhc3lGb250
RmFtaWx5KGNvbnN0IFFTdHJpbmcmIGYpIHsgcy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6
OkZhbnRhc3lGb250LCBmKTsgfQorCisgICAgaW50IG1pbmltdW1Gb250U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHMtPmZvbnRTaXplKFFXZWJTZXR0aW5nczo6TWluaW11bUZvbnRTaXplKTsgfQorICAg
IHZvaWQgc2V0TWluaW11bUZvbnRTaXplKGludCBzaXplKSB7IHMtPnNldEZvbnRTaXplKFFXZWJT
ZXR0aW5nczo6TWluaW11bUZvbnRTaXplLCBzaXplKTsgfQorICAgIGludCBtaW5pbXVtTG9naWNh
bEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udFNpemUoUVdlYlNldHRpbmdzOjpNaW5p
bXVtTG9naWNhbEZvbnRTaXplKTsgfQorICAgIHZvaWQgc2V0TWluaW11bUxvZ2ljYWxGb250U2l6
ZShpbnQgc2l6ZSkgeyBzLT5zZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6Ok1pbmltdW1Mb2dpY2Fs
Rm9udFNpemUsIHNpemUpOyB9CisgICAgaW50IGRlZmF1bHRGb250U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHMtPmZvbnRTaXplKFFXZWJTZXR0aW5nczo6RGVmYXVsdEZvbnRTaXplKTsgfQorICAgIHZv
aWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCBzaXplKSB7IHMtPnNldEZvbnRTaXplKFFXZWJTZXR0
aW5nczo6RGVmYXVsdEZvbnRTaXplLCBzaXplKTsgfQorICAgIGludCBkZWZhdWx0Rml4ZWRGb250
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRTaXplKFFXZWJTZXR0aW5nczo6RGVmYXVsdEZp
eGVkRm9udFNpemUpOyB9CisgICAgdm9pZCBzZXREZWZhdWx0Rml4ZWRGb250U2l6ZShpbnQgc2l6
ZSkgeyBzLT5zZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6OkRlZmF1bHRGaXhlZEZvbnRTaXplLCBz
aXplKTsgfQorCisgICAgYm9vbCBhdXRvTG9hZEltYWdlcygpIGNvbnN0IHsgcmV0dXJuIHMtPnRl
c3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBdXRvTG9hZEltYWdlcyk7IH0KKyAgICB2b2lkIHNl
dEF1dG9Mb2FkSW1hZ2VzKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
QXV0b0xvYWRJbWFnZXMsIG9uKTsgfQorICAgIGJvb2wgamF2YXNjcmlwdEVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdEVuYWJs
ZWQpOyB9CisgICAgdm9pZCBzZXRKYXZhc2NyaXB0RW5hYmxlZChib29sIG9uKSB7IHMtPnNldEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRFbmFibGVkLCBvbik7IH0KKyAgICBib29s
IGphdmFFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkphdmFFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0SmF2YUVuYWJsZWQoYm9vbCBvbikgeyBz
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhRW5hYmxlZCwgb24pOyB9CisgICAgYm9v
bCBwbHVnaW5zRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNl
dHRpbmdzOjpQbHVnaW5zRW5hYmxlZCk7IH0KKyAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJv
b2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UGx1Z2luc0VuYWJsZWQsIG9u
KTsgfQorICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMt
PnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQcml2YXRlQnJvd3NpbmdFbmFibGVkKTsgfQor
ICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIG9uKSB7IHMtPnNldEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OlByaXZhdGVCcm93c2luZ0VuYWJsZWQsIG9uKTsgfQorICAgIGJv
b2wgamF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cyk7IH0KKyAgICB2b2lk
IHNldEphdmFzY3JpcHRDYW5PcGVuV2luZG93cyhib29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cywgb24pOyB9CisgICAgYm9vbCBq
YXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQpOyB9CisgICAg
dm9pZCBzZXRKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgb24pIHsgcy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCwgb24pOyB9
CisgICAgYm9vbCBkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVz
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQpOyB9CisgICAg
dm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgb24pOyB9CisgICAgYm9vbCBs
aW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4pOyB9CisgICAgdm9pZCBz
ZXRMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbiwgb24pOyB9CisgICAgYm9vbCB6
b29tVGV4dE9ubHkoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5n
czo6Wm9vbVRleHRPbmx5KTsgfQorICAgIHZvaWQgc2V0Wm9vbVRleHRPbmx5KGJvb2wgb24pIHsg
cy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Wm9vbVRleHRPbmx5LCBvbik7IH0KKyAgICBi
b29sIHByaW50RWxlbWVudEJhY2tncm91bmRzKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OlByaW50RWxlbWVudEJhY2tncm91bmRzKTsgfQorICAgIHZvaWQg
c2V0UHJpbnRFbGVtZW50QmFja2dyb3VuZHMoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdl
YlNldHRpbmdzOjpQcmludEVsZW1lbnRCYWNrZ3JvdW5kcywgb24pOyB9CisgICAgYm9vbCBvZmZs
aW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1
dGUoUVdlYlNldHRpbmdzOjpPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCk7IH0KKyAgICB2
b2lkIHNldE9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQsIG9uKTsg
fQorICAgIGJvb2wgb2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZCk7IH0KKyAgICB2b2lkIHNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hl
RW5hYmxlZChib29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCwgb24pOyB9CisgICAgYm9vbCBsb2NhbFN0b3JhZ2VE
YXRhYmFzZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0
aW5nczo6TG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0TG9jYWxT
dG9yYWdlRGF0YWJhc2VFbmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0
aW5nczo6TG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkLCBvbik7IH0KKyAgICBib29sIGxvY2Fs
Q29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscyk7IH0KKyAg
ICB2b2lkIHNldExvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMoYm9vbCBvbikgeyBzLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxz
LCBvbik7IH0KKworICAgIFFXZWJTZXR0aW5ncyAqczsKK307CisKK1FUX0VORF9OQU1FU1BBQ0UK
KworUU1MX0RFQ0xBUkVfVFlQRShRRGVjbGFyYXRpdmVXZWJWaWV3KQorUU1MX0RFQ0xBUkVfVFlQ
RShRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncykKK1FNTF9ERUNMQVJFX1RZUEVJTkZPKFFEZWNsYXJh
dGl2ZVdlYlZpZXcsIFFNTF9IQVNfQVRUQUNIRURfUFJPUEVSVElFUykKKworUVRfRU5EX0hFQURF
UgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xbWxkaXIgYi9X
ZWJLaXQvcXQvZGVjbGFyYXRpdmUvcW1sZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmRjZmRkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUv
cW1sZGlyCkBAIC0wLDAgKzEgQEAKK3BsdWdpbiBxbWx3ZWJraXRwbHVnaW4KZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mIGIvV2ViS2l0L3F0L2RvY3MvcXR3ZWJr
aXQucWRvY2NvbmYKaW5kZXggMjkyYzEyNC4uNWY4NzdjMiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L2RvY3MvcXR3ZWJraXQucWRvY2NvbmYKKysrIGIvV2ViS2l0L3F0L2RvY3MvcXR3ZWJraXQucWRv
Y2NvbmYKQEAgLTMsOCArMyw4IEBACiBwcm9qZWN0ICAgICA9IHF0d2Via2l0CiBkZXNjcmlwdGlv
biA9ICJRdCBXZWJLaXQgQVBJIERvY3VtZW50YXRpb24iCiAKLWhlYWRlcmRpcnMgPSAkU1JDRElS
L1dlYktpdC9xdC9BcGkKLXNvdXJjZWRpcnMgPSAkU1JDRElSL1dlYktpdC9xdC9BcGkgJFNSQ0RJ
Ui9XZWJLaXQvcXQvZG9jcyAkU1JDRElSL0phdmFTY3JpcHRDb3JlL3F0L2FwaQoraGVhZGVyZGly
cyA9ICRTUkNESVIvV2ViS2l0L3F0L0FwaSAkU1JDRElSL1dlYktpdC9xdC9kZWNsYXJhdGl2ZQor
c291cmNlZGlycyA9ICRTUkNESVIvV2ViS2l0L3F0L0FwaSAkU1JDRElSL1dlYktpdC9xdC9kb2Nz
ICRTUkNESVIvSmF2YVNjcmlwdENvcmUvcXQvYXBpICRTUkNESVIvV2ViS2l0L3F0L2RlY2xhcmF0
aXZlCiBvdXRwdXRkaXIgPSAkT1VUUFVUX0RJUi9kb2MvaHRtbAogb3V0cHV0Zm9ybWF0cyA9IEhU
TUwKIHNvdXJjZXMuZmlsZWV4dGVuc2lvbnMgID0gIiouY3BwICouZG9jICoucWRvYyAqLmgiCg==
</data>
<flag name="review"
          id="45559"
          type_id="1"
          status="-"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="45560"
          type_id="3"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58994</attachid>
            <date>2010-06-17 07:42:02 -0700</date>
            <delta_ts>2010-06-17 08:01:09 -0700</delta_ts>
            <desc>Version 5</desc>
            <filename>40050-QML.diff</filename>
            <type>text/plain</type>
            <size>62299</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhYWZjZGU3Li4xZDY4Yzli
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDYtMTcgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFVwc3Ry
ZWFtIHRoZSBXZWJLaXQgUU1MIGludGVncmF0aW9uIHBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwNTAKKworICAgICAgICBBZGQgdG8gdGhl
IGJ1aWxkIHRoZSBRTUwgV2ViS2l0IGludGVncmF0aW9uIHBsdWdpbi4KKworICAgICAgICAqIFdl
YktpdC5wcm86CisKIDIwMTAtMDYtMTcgIE1hcmsgQnJhbmQgIDxtYWJyYW5kQG1hYnJhbmQubmw+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJL
aXQucHJvIGIvV2ViS2l0LnBybwppbmRleCA3OWRlMDcyLi5jNmU3MDlmIDEwMDY0NAotLS0gYS9X
ZWJLaXQucHJvCisrKyBiL1dlYktpdC5wcm8KQEAgLTksNiArOSw5IEBAIFNVQkRJUlMgKz0gXAog
CiAjIElmIHRoZSBzb3VyY2UgZXhpc3RzLCBidWlsdCBpdAogZXhpc3RzKCQkUFdEL1dlYktpdFRv
b2xzL1F0VGVzdEJyb3dzZXIpOiBTVUJESVJTICs9IFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIK
K2dyZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04sIDYpIHsKKyAgICBleGlzdHMoJCRQV0QvV2Vi
S2l0L3F0L2RlY2xhcmF0aXZlKTogU1VCRElSUyArPSBXZWJLaXQvcXQvZGVjbGFyYXRpdmUKK30K
IGV4aXN0cygkJFBXRC9KYXZhU2NyaXB0Q29yZS9qc2MucHJvKTogU1VCRElSUyArPSBKYXZhU2Ny
aXB0Q29yZS9qc2MucHJvCiBleGlzdHMoJCRQV0QvV2ViS2l0L3F0L3Rlc3RzKTogU1VCRElSUyAr
PSBXZWJLaXQvcXQvdGVzdHMKIGV4aXN0cygkJFBXRC9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8pOiBTVUJESVJTICs9IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMDAwM2IyMS4uZGEyNGVhYiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUyIEBACisyMDEwLTA2LTE3ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBu
b2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW1F0XSBVcHN0cmVhbSB0aGUgV2ViS2l0IFFNTCBpbnRlZ3JhdGlvbiBwbHVnaW4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDUwCisKKyAgICAg
ICAgQWRkIHRvIHRoZSBRdCBwb3J0IHRoZSBRTUwgV2ViS2l0IGludGVncmF0aW9uIHBsdWdpbi4K
KyAgICAgICAgUURlY2xhcmF0aXZlV2ViVmlldyBpcyBjcmVhdGluZyB0aGUgaXRlbSBhbmQgZXhw
b3NlCisgICAgICAgIHByb3BlcnRpZXMuIFRoZSBDKysgQVBJIGlzIG5vdCBwdWJsaWMsIG9ubHkg
dGhlCisgICAgICAgIHByb3BlcnRpZXMgYXJlLgorCisgICAgICAgICogZGVjbGFyYXRpdmUvZGVj
bGFyYXRpdmUucHJvOiBBZGRlZC4KKyAgICAgICAgKiBkZWNsYXJhdGl2ZS9wbHVnaW4uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdFFtbFBsdWdpbjo6cmVnaXN0ZXJUeXBlcyk6CisgICAgICAg
ICogZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlldy5jcHA6IEFkZGVkLgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU6OlFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlKToK
KyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjopOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlld1ByaXZhdGU6OndpbmRvd09iamVjdHNBcHBlbmQpOgorICAgICAgICAoR3Jh
cGhpY3NXZWJWaWV3OjpHcmFwaGljc1dlYlZpZXcpOgorICAgICAgICAoR3JhcGhpY3NXZWJWaWV3
Ojptb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoR3JhcGhpY3NXZWJWaWV3Ojptb3VzZVJlbGVh
c2VFdmVudCk6CisgICAgICAgIChHcmFwaGljc1dlYlZpZXc6Om1vdXNlRG91YmxlQ2xpY2tFdmVu
dCk6CisgICAgICAgIChHcmFwaGljc1dlYlZpZXc6OnRpbWVyRXZlbnQpOgorICAgICAgICAoR3Jh
cGhpY3NXZWJWaWV3Ojptb3VzZU1vdmVFdmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJW
aWV3OjpRRGVjbGFyYXRpdmVXZWJWaWV3KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6
On5RRGVjbGFyYXRpdmVXZWJWaWV3KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Omlu
aXQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y29tcG9uZW50Q29tcGxldGUpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6OnByb2dyZXNzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmRv
TG9hZFN0YXJ0ZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2FkUHJvZ3Jl
c3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cGFnZVVybENoYW5nZWQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2FkRmluaXNoZWQpOgorICAgICAgICAoUURl
Y2xhcmF0aXZlV2ViVmlldzo6dXJsKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNl
dFVybCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpwcmVmZXJyZWRXaWR0aCk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRXaWR0aCk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3OjpwcmVmZXJyZWRIZWlnaHQpOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlldzo6c2V0UHJlZmVycmVkSGVpZ2h0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OmV2YWx1YXRlSmF2YVNjcmlwdCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJW
aWV3Ojp1cGRhdGVEZWNsYXJhdGl2ZVdlYlZpZXdTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OmluaXRpYWxMYXlvdXQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6
dXBkYXRlQ29udGVudHNTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Omdlb21l
dHJ5Q2hhbmdlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpqYXZhU2NyaXB0V2lu
ZG93T2JqZWN0cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpxbWxBdHRhY2hlZFBy
b3BlcnRpZXMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU6OnVwZGF0ZVdp
bmRvd09iamVjdHMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cmVuZGVyaW5nRW5h
YmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRSZW5kZXJpbmdFbmFibGVk
KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmhldXJpc3RpY1pvb20pOgorICAgICAg
ICAoUURlY2xhcmF0aXZlV2ViVmlldzo6cHJlc3NHcmFiVGltZSk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJWaWV3OjpzZXRQcmVzc0dyYWJUaW1lKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXc6OmJhY2tBY3Rpb24pOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Zm9yd2Fy
ZEFjdGlvbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpyZWxvYWRBY3Rpb24pOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c3RvcEFjdGlvbik6CisgICAgICAgIChRRGVj
bGFyYXRpdmVXZWJWaWV3Ojp0aXRsZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpp
Y29uKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFN0YXR1c1RleHQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXNUZXh0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2
ZVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0dGluZ3NP
YmplY3QpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UGFnZSk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3Ojpsb2FkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6Omh0bWwpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0SHRtbCk6CisgICAg
ICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50KToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6Omhpc3RvcnkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0
dGluZ3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y3JlYXRlV2luZG93KToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6Om5ld1dpbmRvd0NvbXBvbmVudCk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXROZXdXaW5kb3dDb21wb25lbnQpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViVmlldzo6bmV3V2luZG93UGFyZW50KToKKyAgICAgICAgKFFEZWNsYXJh
dGl2ZVdlYlZpZXc6OnNldE5ld1dpbmRvd1BhcmVudCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojpjb250ZW50c1NpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlldzo6Y29u
dGVudHNTY2FsZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50c1Nj
YWxlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmVsZW1lbnRBcmVhQXQpOgorICAg
ICAgICAoUURlY2xhcmF0aXZlV2ViUGFnZTo6UURlY2xhcmF0aXZlV2ViUGFnZSk6CisgICAgICAg
IChRRGVjbGFyYXRpdmVXZWJQYWdlOjp+UURlY2xhcmF0aXZlV2ViUGFnZSk6CisgICAgICAgIChR
RGVjbGFyYXRpdmVXZWJQYWdlOjpjaG9vc2VGaWxlKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlBhZ2U6OmphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpq
YXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2Ny
aXB0UHJvbXB0KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OnZpZXdJdGVtKToKKyAg
ICAgICAgKFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogZGVj
bGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19wLmg6IEFkZGVkLgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViVmlldzo6KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmlzQ29tcG9u
ZW50Q29tcGxldGVQdWJsaWMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVk
OjpRRGVjbGFyYXRpdmVXZWJWaWV3QXR0YWNoZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
Vmlld0F0dGFjaGVkOjp3aW5kb3dPYmplY3ROYW1lKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlZpZXdBdHRhY2hlZDo6c2V0V2luZG93T2JqZWN0TmFtZSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6UURlY2xhcmF0aXZlV2ViU2V0dGluZ3MpOgorICAgICAgICAoUURlY2xh
cmF0aXZlV2ViU2V0dGluZ3M6OnN0YW5kYXJkRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJTZXR0aW5nczo6c2V0U3RhbmRhcmRGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNs
YXJhdGl2ZVdlYlNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0
aXZlV2ViU2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNhbnNTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldFNhbnNTZXJpZkZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZl
V2ViU2V0dGluZ3M6OmN1cnNpdmVGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzZXRDdXJzaXZlRm9udEZhbWlseSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVX
ZWJTZXR0aW5nczo6ZmFudGFzeUZvbnRGYW1pbHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjptaW5pbXVtRm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OnNldE1pbmltdW1Gb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0
aW5nczo6bWluaW11bUxvZ2ljYWxGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJT
ZXR0aW5nczo6c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6ZGVmYXVsdEZvbnRTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzZXREZWZhdWx0Rm9udFNpemUpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OmRlZmF1bHRGaXhlZEZvbnRTaXplKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdl
YlNldHRpbmdzOjpzZXREZWZhdWx0Rml4ZWRGb250U2l6ZSk6CisgICAgICAgIChRRGVjbGFyYXRp
dmVXZWJTZXR0aW5nczo6YXV0b0xvYWRJbWFnZXMpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2Vi
U2V0dGluZ3M6OnNldEF1dG9Mb2FkSW1hZ2VzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNl
dHRpbmdzOjpqYXZhc2NyaXB0RW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0
aW5nczo6c2V0SmF2YXNjcmlwdEVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OmphdmFFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpz
ZXRKYXZhRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6cGx1Z2lu
c0VuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldFBsdWdpbnNF
bmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpwcml2YXRlQnJvd3Np
bmdFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRQcml2YXRl
QnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpqYXZh
c2NyaXB0Q2FuT3BlbldpbmRvd3MpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6
OnNldEphdmFzY3JpcHRDYW5PcGVuV2luZG93cyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJT
ZXR0aW5nczo6amF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk6CisgICAgICAgIChRRGVjbGFy
YXRpdmVXZWJTZXR0aW5nczo6c2V0SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk6CisgICAg
ICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk6Cisg
ICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6bGlua3NJbmNsdWRlZEluRm9j
dXNDaGFpbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6c2V0TGlua3NJbmNs
dWRlZEluRm9jdXNDaGFpbik6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6em9v
bVRleHRPbmx5KToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRab29tVGV4
dE9ubHkpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnByaW50RWxlbWVudEJh
Y2tncm91bmRzKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdzOjpzZXRQcmludEVs
ZW1lbnRCYWNrZ3JvdW5kcyk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6b2Zm
bGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0
dGluZ3M6OnNldE9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNs
YXJhdGl2ZVdlYlNldHRpbmdzOjpvZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQpOgor
ICAgICAgICAoUURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldE9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZCk6CisgICAgICAgIChRRGVjbGFyYXRpdmVXZWJTZXR0aW5nczo6bG9jYWxT
dG9yYWdlRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
OjpzZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAoUURlY2xhcmF0aXZl
V2ViU2V0dGluZ3M6OmxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMpOgorICAgICAgICAo
UURlY2xhcmF0aXZlV2ViU2V0dGluZ3M6OnNldExvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVy
bHMpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3FtbGRpcjogQWRkZWQuCisgICAgICAgICogZG9j
cy9xdHdlYmtpdC5xZG9jY29uZjoKKwogMjAxMC0wNi0xNyAgTWFyayBCcmFuZCAgPG1hYnJhbmRA
bWFicmFuZC5ubD4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9kZWNsYXJhdGl2ZS5wcm8gYi9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvZGVjbGFyYXRpdmUucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjljMTU1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUv
ZGVjbGFyYXRpdmUucHJvCkBAIC0wLDAgKzEsNzQgQEAKK1RBUkdFVCAgPSBxbWx3ZWJraXRwbHVn
aW4KK1RBUkdFVFBBVEggPSBvcmcvd2Via2l0CisKK1RFTVBMQVRFID0gbGliCitDT05GSUcgKz0g
cXQgcGx1Z2luCisKK3dpbjMyfG1hYzohd2luY2UqOiF3aW4zMi1tc3ZjOiFtYWN4LXhjb2RlOkNP
TkZJRyArPSBkZWJ1Z19hbmRfcmVsZWFzZQorCitRTUxESVJGSUxFID0gJCR7X1BST19GSUxFX1BX
RF99L3FtbGRpcgorY29weTJidWlsZC5pbnB1dCA9IFFNTERJUkZJTEUKK0NPTkZJRyhRVERJUl9i
dWlsZCkgeworICAgIGNvcHkyYnVpbGQub3V0cHV0ID0gJCRRVF9CVUlMRF9UUkVFL2ltcG9ydHMv
JCRUQVJHRVRQQVRIL3FtbGRpcgorfSBlbHNlIHsKKyAgICBjb3B5MmJ1aWxkLm91dHB1dCA9ICQk
T1VUUFVUX0RJUi9pbXBvcnRzLyQkVEFSR0VUUEFUSC9xbWxkaXIKK30KKyFjb250YWlucyhURU1Q
TEFURV9QUkVGSVgsIHZjKTpjb3B5MmJ1aWxkLnZhcmlhYmxlX291dCA9IFBSRV9UQVJHRVRERVBT
Citjb3B5MmJ1aWxkLmNvbW1hbmRzID0gJCRRTUFLRV9DT1BZICR7UU1BS0VfRklMRV9JTn0gJHtR
TUFLRV9GSUxFX09VVH0KK2NvcHkyYnVpbGQubmFtZSA9IENPUFkgJHtRTUFLRV9GSUxFX0lOfQor
Y29weTJidWlsZC5DT05GSUcgKz0gbm9fbGluaworUU1BS0VfRVhUUkFfQ09NUElMRVJTICs9IGNv
cHkyYnVpbGQKKworVEFSR0VUID0gJCRxdExpYnJhcnlUYXJnZXQoJCRUQVJHRVQpCitjb250YWlu
cyhRVF9DT05GSUcsIHJlZHVjZV9leHBvcnRzKTpDT05GSUcgKz0gaGlkZV9zeW1ib2xzCisKK3dp
bmNlKjpMSUJTICs9ICQkUU1BS0VfTElCU19HVUkKKworc3ltYmlhbjogeworICAgIFRBUkdFVC5F
UE9DQUxMT1dETExEQVRBPTEKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSA9IEFsbCAtVGNiCisgICAg
bG9hZChhcm1jY193YXJuaW5ncykKK30KKworaW5jbHVkZSguLi8uLi8uLi9XZWJLaXQucHJpKQor
CitRVCArPSBkZWNsYXJhdGl2ZQorCitsaW51eC0qIHsKKyAgICAjIEZyb20gQ3JlYXRvcidzIHNy
Yy9ycGF0aC5wcmk6CisgICAgIyBEbyB0aGUgcnBhdGggYnkgaGFuZCBzaW5jZSBpdCdzIG5vdCBw
b3NzaWJsZSB0byB1c2UgT1JJR0lOIGluIFFNQUtFX1JQQVRIRElSCisgICAgIyB0aGlzIGV4cGFu
ZHMgdG8gJE9SSUdJTiAoYWZ0ZXIgcW1ha2UgYW5kIG1ha2UpLCBpdCBkb2VzIE5PVCByZWFkIGEg
cW1ha2UgdmFyLgorICAgIFFNQUtFX1JQQVRIRElSID0gJCRPVVRQVVRfRElSL2xpYiAkJFFNQUtF
X1JQQVRIRElSCisgICAgTVlfUlBBVEggPSAkJGpvaW4oUU1BS0VfUlBBVEhESVIsICI6IikKKwor
ICAgIFFNQUtFX0xGTEFHUyArPSAtV2wsLXosb3JpZ2luIFwnLVdsLC1ycGF0aCwkJHtNWV9SUEFU
SH1cJworICAgIFFNQUtFX1JQQVRIRElSID0KK30gZWxzZSB7CisgICAgUU1BS0VfUlBBVEhESVIg
PSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0VfUlBBVEhESVIKK30KKworU09VUkNFUyArPSBxZGVj
bGFyYXRpdmV3ZWJ2aWV3LmNwcCBwbHVnaW4uY3BwCitIRUFERVJTICs9IHFkZWNsYXJhdGl2ZXdl
YnZpZXdfcC5oCisKK0NPTkZJRyhRVERJUl9idWlsZCkgeworICAgIERFU1RESVIgPSAkJFFUX0JV
SUxEX1RSRUUvaW1wb3J0cy8kJFRBUkdFVFBBVEgKK30gZWxzZSB7CisgICAgREVTVERJUiA9ICQk
T1VUUFVUX0RJUi9pbXBvcnRzLyQkVEFSR0VUUEFUSAorfQordGFyZ2V0LnBhdGggPSAkJFtRVF9J
TlNUQUxMX0lNUE9SVFNdLyQkVEFSR0VUUEFUSAorCisKK3FtbGRpci5maWxlcyArPSAkJFBXRC9x
bWxkaXIKK3FtbGRpci5wYXRoICs9ICAkJFtRVF9JTlNUQUxMX0lNUE9SVFNdLyQkVEFSR0VUUEFU
SAorCitzeW1iaWFuOnsKKyAgICBsb2FkKGRhdGFfY2FnaW5nX3BhdGhzKQorICAgIGluY2x1ZGUo
JCRRVF9TT1VSQ0VfVFJFRS9kZW1vcy9zeW1iaWFucGtncnVsZXMucHJpKQorCisgICAgaW1wb3J0
RmlsZXMuc291cmNlcyA9IHFtbHdlYmtpdHBsdWdpbi5kbGwgcW1sZGlyCisgICAgaW1wb3J0Rmls
ZXMucGF0aCA9ICQkUVRfSU1QT1JUU19CQVNFX0RJUi8kJFRBUkdFVFBBVEgKKworICAgIERFUExP
WU1FTlQgPSBpbXBvcnRGaWxlcworfQorCitJTlNUQUxMUyArPSB0YXJnZXQgcW1sZGlyCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcCBiL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wbHVnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYx
ZjE2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNw
cApAQCAtMCwwICsxLDQzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAicWRlY2xh
cmF0aXZld2Vidmlld19wLmgiCisKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2
ZS5oPgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZXh0ZW5zaW9ucGx1Z2lu
Lmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorCitjbGFzcyBXZWJLaXRRbWxQbHVnaW4gOiBwdWJs
aWMgUURlY2xhcmF0aXZlRXh0ZW5zaW9uUGx1Z2luIHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclR5cGVzKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7Cisg
ICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdl
YktpdCIpKTsKKyAgICAgICAgcW1sUmVnaXN0ZXJUeXBlPFFEZWNsYXJhdGl2ZVdlYlNldHRpbmdz
PigpOworICAgICAgICBxbWxSZWdpc3RlclR5cGU8UURlY2xhcmF0aXZlV2ViVmlldz4odXJpLCAx
LCAwLCAiV2ViVmlldyIpOworICAgIH0KK307CisKK1FUX0VORF9OQU1FU1BBQ0UKKworI2luY2x1
ZGUgInBsdWdpbi5tb2MiCisKK1FfRVhQT1JUX1BMVUdJTjIocW1sd2Via2l0cGx1Z2luLCBRVF9Q
UkVQRU5EX05BTUVTUEFDRShXZWJLaXRRbWxQbHVnaW4pKTsKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L2RlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZXdlYnZpZXcuY3BwIGIvV2ViS2l0L3F0L2RlY2xh
cmF0aXZlL3FkZWNsYXJhdGl2ZXdlYnZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY4ZTE3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRp
dmUvcWRlY2xhcmF0aXZld2Vidmlldy5jcHAKQEAgLTAsMCArMSwxMDIwIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisKKyNpbmNsdWRlICJxZGVjbGFyYXRpdmV3ZWJ2aWV3X3AuaCIKKworI2luY2x1
ZGUgPFF0Q29yZS9RRGVidWc+CisjaW5jbHVkZSA8UXRDb3JlL1FFdmVudD4KKyNpbmNsdWRlIDxR
dENvcmUvUUZpbGU+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9RRGVjbGFyYXRpdmVDb250ZXh0
PgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvUURlY2xhcmF0aXZlRW5naW5lPgorI2luY2x1ZGUg
PFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlLmg+CisjaW5jbHVkZSA8UXRHdWkvUUFwcGxpY2F0
aW9uPgorI2luY2x1ZGUgPFF0R3VpL1FHcmFwaGljc1NjZW5lTW91c2VFdmVudD4KKyNpbmNsdWRl
IDxRdEd1aS9RS2V5RXZlbnQ+CisjaW5jbHVkZSA8UXRHdWkvUU1vdXNlRXZlbnQ+CisjaW5jbHVk
ZSA8UXRHdWkvUVBlbj4KKyNpbmNsdWRlIDxRdFdlYktpdC9RV2ViRWxlbWVudD4KKyNpbmNsdWRl
IDxRdFdlYktpdC9RV2ViRnJhbWU+CisjaW5jbHVkZSA8UXRXZWJLaXQvUVdlYlBhZ2U+CisjaW5j
bHVkZSA8UXRXZWJLaXQvUVdlYlNldHRpbmdzPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKKworY2xh
c3MgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGUgeworcHVibGljOgorICAgIFFEZWNsYXJhdGl2
ZVdlYlZpZXdQcml2YXRlKFFEZWNsYXJhdGl2ZVdlYlZpZXcqIHFxKQorICAgICAgOiBxKHFxKQor
ICAgICAgLCBwcmVmZXJyZWR3aWR0aCgwKQorICAgICAgLCBwcmVmZXJyZWRoZWlnaHQoMCkKKyAg
ICAgICwgcHJvZ3Jlc3MoMS4wKQorICAgICAgLCBzdGF0dXMoUURlY2xhcmF0aXZlV2ViVmlldzo6
TnVsbCkKKyAgICAgICwgcGVuZGluZyhQZW5kaW5nTm9uZSkKKyAgICAgICwgbmV3V2luZG93Q29t
cG9uZW50KDApCisgICAgICAsIG5ld1dpbmRvd1BhcmVudCgwKQorICAgICAgLCByZW5kZXJpbmco
dHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgUURlY2xhcmF0aXZlV2ViVmlldyogcTsKKworICAg
IFFVcmwgdXJsOyAvLyBwYWdlIHVybCBtaWdodCBiZSBkaWZmZXJlbnQgaWYgaXQgaGFzIG5vdCBs
b2FkZWQgeWV0CisgICAgR3JhcGhpY3NXZWJWaWV3KiB2aWV3OworCisgICAgaW50IHByZWZlcnJl
ZHdpZHRoLCBwcmVmZXJyZWRoZWlnaHQ7CisgICAgcXJlYWwgcHJvZ3Jlc3M7CisgICAgUURlY2xh
cmF0aXZlV2ViVmlldzo6U3RhdHVzIHN0YXR1czsKKyAgICBRU3RyaW5nIHN0YXR1c1RleHQ7Cisg
ICAgZW51bSB7IFBlbmRpbmdOb25lLCBQZW5kaW5nVXJsLCBQZW5kaW5nSHRtbCwgUGVuZGluZ0Nv
bnRlbnQgfSBwZW5kaW5nOworICAgIFFVcmwgcGVuZGluZ1VybDsKKyAgICBRU3RyaW5nIHBlbmRp
bmdTdHJpbmc7CisgICAgUUJ5dGVBcnJheSBwZW5kaW5nRGF0YTsKKyAgICBtdXRhYmxlIFFEZWNs
YXJhdGl2ZVdlYlNldHRpbmdzIHNldHRpbmdzOworICAgIFFEZWNsYXJhdGl2ZUNvbXBvbmVudCog
bmV3V2luZG93Q29tcG9uZW50OworICAgIFFEZWNsYXJhdGl2ZUl0ZW0qIG5ld1dpbmRvd1BhcmVu
dDsKKworICAgIHN0YXRpYyB2b2lkIHdpbmRvd09iamVjdHNBcHBlbmQoUURlY2xhcmF0aXZlTGlz
dFByb3BlcnR5PFFPYmplY3Q+KiBwcm9wLCBRT2JqZWN0KiBvKQorICAgIHsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGUqPihwcm9wLT5kYXRhKS0+d2luZG93
T2JqZWN0cy5hcHBlbmQobyk7CisgICAgICAgIHN0YXRpY19jYXN0PFFEZWNsYXJhdGl2ZVdlYlZp
ZXdQcml2YXRlKj4ocHJvcC0+ZGF0YSktPnVwZGF0ZVdpbmRvd09iamVjdHMoKTsKKyAgICB9CisK
KyAgICB2b2lkIHVwZGF0ZVdpbmRvd09iamVjdHMoKTsKKyAgICBRT2JqZWN0TGlzdCB3aW5kb3dP
YmplY3RzOworCisgICAgYm9vbCByZW5kZXJpbmc7Cit9OworCitHcmFwaGljc1dlYlZpZXc6Okdy
YXBoaWNzV2ViVmlldyhRRGVjbGFyYXRpdmVXZWJWaWV3KiBwYXJlbnQpCisgICAgOiBRR3JhcGhp
Y3NXZWJWaWV3KHBhcmVudCkKKyAgICAsIHBhcmVudChwYXJlbnQpCisgICAgLCBwcmVzc1RpbWUo
NDAwKQoreworfQorCit2b2lkIEdyYXBoaWNzV2ViVmlldzo6bW91c2VQcmVzc0V2ZW50KFFHcmFw
aGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgc2V0Rm9jdXMoKTsKKyAgICBwcmVz
c1BvaW50ID0gZXZlbnQtPnBvcygpOworICAgIGlmIChwcmVzc1RpbWUpIHsKKyAgICAgICAgcHJl
c3NUaW1lci5zdGFydChwcmVzc1RpbWUsIHRoaXMpOworICAgICAgICBwYXJlbnQtPnNldEtlZXBN
b3VzZUdyYWIoZmFsc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdyYWJNb3VzZSgpOworICAg
ICAgICBwYXJlbnQtPnNldEtlZXBNb3VzZUdyYWIodHJ1ZSk7CisgICAgfQorICAgIFFHcmFwaGlj
c1dlYlZpZXc6Om1vdXNlUHJlc3NFdmVudChldmVudCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NXZWJW
aWV3Ojptb3VzZVJlbGVhc2VFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQqIGV2ZW50KQor
eworICAgIFFHcmFwaGljc1dlYlZpZXc6Om1vdXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKKyAgICBw
cmVzc1RpbWVyLnN0b3AoKTsKKyAgICBwYXJlbnQtPnNldEtlZXBNb3VzZUdyYWIoZmFsc2UpOwor
ICAgIHVuZ3JhYk1vdXNlKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NXZWJWaWV3Ojptb3VzZURvdWJs
ZUNsaWNrRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBRTW91
c2VFdmVudCogbWUgPSBuZXcgUU1vdXNlRXZlbnQoUUV2ZW50OjpNb3VzZUJ1dHRvbkRibENsaWNr
LCAoZXZlbnQtPnBvcygpIC8gcGFyZW50LT5jb250ZW50c1NjYWxlKCkpLnRvUG9pbnQoKSwgZXZl
bnQtPmJ1dHRvbigpLCBldmVudC0+YnV0dG9ucygpLCAwKTsKKyAgICBlbWl0IGRvdWJsZUNsaWNr
KGV2ZW50LT5wb3MoKS54KCksIGV2ZW50LT5wb3MoKS55KCkpOworICAgIGRlbGV0ZSBtZTsKK30K
Kwordm9pZCBHcmFwaGljc1dlYlZpZXc6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQor
eworICAgIGlmIChldmVudC0+dGltZXJJZCgpID09IHByZXNzVGltZXIudGltZXJJZCgpKSB7Cisg
ICAgICAgIHByZXNzVGltZXIuc3RvcCgpOworICAgICAgICBncmFiTW91c2UoKTsKKyAgICAgICAg
cGFyZW50LT5zZXRLZWVwTW91c2VHcmFiKHRydWUpOworICAgIH0KK30KKwordm9pZCBHcmFwaGlj
c1dlYlZpZXc6Om1vdXNlTW92ZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQp
Cit7CisgICAgaWYgKHByZXNzVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAoKGV2ZW50
LT5wb3MoKSAtIHByZXNzUG9pbnQpLm1hbmhhdHRhbkxlbmd0aCgpID4gUUFwcGxpY2F0aW9uOjpz
dGFydERyYWdEaXN0YW5jZSgpKQorICAgICAgICAgICAgcHJlc3NUaW1lci5zdG9wKCk7CisgICAg
fQorICAgIGlmIChwYXJlbnQtPmtlZXBNb3VzZUdyYWIoKSkKKyAgICAgICAgUUdyYXBoaWNzV2Vi
Vmlldzo6bW91c2VNb3ZlRXZlbnQoZXZlbnQpOworfQorCisvKiEKKyAgICBccW1sY2xhc3MgV2Vi
VmlldyBRRGVjbGFyYXRpdmVXZWJWaWV3CisgICAgXHNpbmNlIDQuNworICAgIFxicmllZiBUaGUg
V2ViVmlldyBpdGVtIGFsbG93cyB5b3UgdG8gYWRkIHdlYiBjb250ZW50IHRvIGEgY2FudmFzLgor
ICAgIFxpbmhlcml0cyBJdGVtCisKKyAgICBBIFdlYlZpZXcgcmVuZGVycyB3ZWIgY29udGVudCBi
YXNlZCBvbiBhIFVSTC4KKworICAgIFRoaXMgdHlwZSBpcyBtYWRlIGF2YWlsYWJsZSBieSBpbXBv
cnRpbmcgdGhlIFxjIG9yZy53ZWJraXQgbW9kdWxlOgorCisgICAgXGJvbGR7aW1wb3J0IG9yZy53
ZWJraXQgMS4wfQorCisgICAgSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGl0ZW0gaXMg
bm90IHNldCwgdGhleSB3aWxsCisgICAgZHluYW1pY2FsbHkgYWRqdXN0IHRvIGEgc2l6ZSBhcHBy
b3ByaWF0ZSBmb3IgdGhlIGNvbnRlbnQuCisgICAgVGhpcyB3aWR0aCBtYXkgYmUgbGFyZ2UgZm9y
IHR5cGljYWwgb25saW5lIHdlYiBwYWdlcy4KKworICAgIElmIHRoZSB3aWR0aCBvciBoZWlnaHQg
aXMgZXhwbGljdGx5IHNldCwgdGhlIHJlbmRlcmVkIHdlYnNpdGUKKyAgICB3aWxsIGJlIGNsaXBw
ZWQsIG5vdCBzY2FsZWQsIHRvIGZpdCBpbnRvIHRoZSBzZXQgZGltZW5zaW9ucy4KKworICAgIElm
IHRoZSBwcmVmZXJyZWRXaWR0aCBpcyBzZXQsIHRoZSB3aWR0aCB3aWxsIGJlIHRoaXMgYW1vdW50
IG9yIGxhcmdlciwKKyAgICB1c3VhbGx5IGxheWluZyBvdXQgdGhlIHdlYiBjb250ZW50IHRvIGZp
dCB0aGUgcHJlZmVycmVkV2lkdGguCisKKyAgICBccW1sCisgICAgaW1wb3J0IG9yZy53ZWJraXQg
MS4wCisKKyAgICBXZWJWaWV3IHsKKyAgICAgICAgdXJsOiAiaHR0cDovL3d3dy5ub2tpYS5jb20i
CisgICAgICAgIHByZWZlcnJlZFdpZHRoOiA0OTAKKyAgICAgICAgcHJlZmVycmVkSGVpZ2h0OiA0
MDAKKyAgICAgICAgc2NhbGU6IDAuNQorICAgICAgICBzbW9vdGg6IGZhbHNlCisgICAgICAgIHNt
b290aENhY2hlOiB0cnVlCisgICAgfQorICAgIFxlbmRxbWwKKworICAgIFxpbWFnZSB3ZWJ2aWV3
LnBuZworCisgICAgVGhlIGl0ZW0gaW5jbHVkZXMgbm8gc2Nyb2xsaW5nLCBzY2FsaW5nLAorICAg
IHRvb2xiYXJzLCBldGMuLCB0aG9zZSBtdXN0IGJlIGltcGxlbWVudGVkIGFyb3VuZCBXZWJWaWV3
LiBTZWUgdGhlIFdlYkJyb3dzZXIgZXhhbXBsZQorICAgIGZvciBhIGRlbW9uc3RyYXRpb24gb2Yg
dGhpcy4KKworICAgIFdoZW4gdGhpcyBpdGVtIGhhcyBrZXlib2FyZCBmb2N1cywgYWxsIGtleWJv
YXJkIGlucHV0IHdpbGwgYmUgc2VudCBkaXJlY3RseSB0byB0aGUKKyAgICB3ZWIgcGFnZSB3aXRo
aW4uCisqLworCisvKiEKKyAgICBcaW50ZXJuYWwKKyAgICBcY2xhc3MgUURlY2xhcmF0aXZlV2Vi
VmlldworICAgIFxicmllZiBUaGUgUURlY2xhcmF0aXZlV2ViVmlldyBjbGFzcyBhbGxvd3MgeW91
IHRvIGFkZCB3ZWIgY29udGVudCB0byBhIFFEZWNsYXJhdGl2ZVZpZXcuCisKKyAgICBBIFdlYlZp
ZXcgcmVuZGVycyB3ZWIgY29udGVudCBiYXNlIG9uIGEgVVJMLgorCisgICAgXGltYWdlIHdlYnZp
ZXcucG5nCisKKyAgICBUaGUgaXRlbSBpbmNsdWRlcyBubyBzY3JvbGxpbmcsIHNjYWxpbmcsCisg
ICAgdG9vbGJhcnMsIGV0Yy4sIHRob3NlIG11c3QgYmUgaW1wbGVtZW50ZWQgYXJvdW5kIFdlYlZp
ZXcuIFNlZSB0aGUgV2ViQnJvd3NlciBleGFtcGxlCisgICAgZm9yIGEgZGVtb25zdHJhdGlvbiBv
ZiB0aGlzLgorCisgICAgQSBRRGVjbGFyYXRpdmVXZWJWaWV3IG9iamVjdCBjYW4gYmUgaW5zdGFu
dGlhdGVkIGluIFFtbCB1c2luZyB0aGUgdGFnIFxsIFdlYlZpZXcuCisqLworCitRRGVjbGFyYXRp
dmVXZWJWaWV3OjpRRGVjbGFyYXRpdmVXZWJWaWV3KFFEZWNsYXJhdGl2ZUl0ZW0gKnBhcmVudCkg
OiBRRGVjbGFyYXRpdmVJdGVtKHBhcmVudCkKK3sKKyAgICBpbml0KCk7Cit9CisKK1FEZWNsYXJh
dGl2ZVdlYlZpZXc6On5RRGVjbGFyYXRpdmVXZWJWaWV3KCkKK3sKKyAgICBkZWxldGUgZDsKK30K
Kwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojppbml0KCkKK3sKKyAgICBkID0gbmV3IFFEZWNs
YXJhdGl2ZVdlYlZpZXdQcml2YXRlKHRoaXMpOworCisgICAgUVdlYlNldHRpbmdzOjplbmFibGVQ
ZXJzaXN0ZW50U3RvcmFnZSgpOworCisgICAgc2V0QWNjZXB0ZWRNb3VzZUJ1dHRvbnMoUXQ6Okxl
ZnRCdXR0b24pOworICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUhhc05vQ29udGVudHMs
IHRydWUpOworICAgIHNldENsaXAodHJ1ZSk7CisKKyAgICBkLT52aWV3ID0gbmV3IEdyYXBoaWNz
V2ViVmlldyh0aGlzKTsKKyAgICBkLT52aWV3LT5zZXRSZXNpemVzVG9Db250ZW50cyh0cnVlKTsK
KyAgICBRV2ViUGFnZSogd3AgPSBuZXcgUURlY2xhcmF0aXZlV2ViUGFnZSh0aGlzKTsKKyAgICBz
ZXRQYWdlKHdwKTsKKyAgICBjb25uZWN0KGQtPnZpZXcsIFNJR05BTChnZW9tZXRyeUNoYW5nZWQo
KSksIHRoaXMsIFNMT1QodXBkYXRlRGVjbGFyYXRpdmVXZWJWaWV3U2l6ZSgpKSk7CisgICAgY29u
bmVjdChkLT52aWV3LCBTSUdOQUwoZG91YmxlQ2xpY2soaW50LCBpbnQpKSwgdGhpcywgU0lHTkFM
KGRvdWJsZUNsaWNrKGludCwgaW50KSkpOworICAgIGNvbm5lY3QoZC0+dmlldywgU0lHTkFMKHNj
YWxlQ2hhbmdlZCgpKSwgdGhpcywgU0lHTkFMKGNvbnRlbnRzU2NhbGVDaGFuZ2VkKCkpKTsKK30K
Kwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3Ojpjb21wb25lbnRDb21wbGV0ZSgpCit7CisgICAg
UURlY2xhcmF0aXZlSXRlbTo6Y29tcG9uZW50Q29tcGxldGUoKTsKKyAgICBwYWdlKCktPnNldE5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKHFtbEVuZ2luZSh0aGlzKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIo
KSk7CisKKyAgICBzd2l0Y2ggKGQtPnBlbmRpbmcpIHsKKyAgICBjYXNlIFFEZWNsYXJhdGl2ZVdl
YlZpZXdQcml2YXRlOjpQZW5kaW5nVXJsOgorICAgICAgICBzZXRVcmwoZC0+cGVuZGluZ1VybCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU6OlBl
bmRpbmdIdG1sOgorICAgICAgICBzZXRIdG1sKGQtPnBlbmRpbmdTdHJpbmcsIGQtPnBlbmRpbmdV
cmwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRl
OjpQZW5kaW5nQ29udGVudDoKKyAgICAgICAgc2V0Q29udGVudChkLT5wZW5kaW5nRGF0YSwgZC0+
cGVuZGluZ1N0cmluZywgZC0+cGVuZGluZ1VybCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkLT5wZW5kaW5nID0gUURlY2xhcmF0aXZl
V2ViVmlld1ByaXZhdGU6OlBlbmRpbmdOb25lOworICAgIGQtPnVwZGF0ZVdpbmRvd09iamVjdHMo
KTsKK30KKworUURlY2xhcmF0aXZlV2ViVmlldzo6U3RhdHVzIFFEZWNsYXJhdGl2ZVdlYlZpZXc6
OnN0YXR1cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnN0YXR1czsKK30KKworCisvKiEKKyAg
ICBccW1scHJvcGVydHkgcmVhbCBXZWJWaWV3Ojpwcm9ncmVzcworICAgIFRoaXMgcHJvcGVydHkg
aG9sZHMgdGhlIHByb2dyZXNzIG9mIGxvYWRpbmcgdGhlIGN1cnJlbnQgVVJMLCBmcm9tIDAgdG8g
MS4KKworICAgIElmIHlvdSBqdXN0IHdhbnQgdG8ga25vdyB3aGVuIHByb2dyZXNzIGdldHMgdG8g
MSwgdXNlCisgICAgV2ViVmlldzo6b25Mb2FkRmluaXNoZWQoKSBvciBXZWJWaWV3OjpvbkxvYWRG
YWlsZWQoKSBpbnN0ZWFkLgorKi8KK3FyZWFsIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByb2dyZXNz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cHJvZ3Jlc3M7Cit9CisKK3ZvaWQgUURlY2xhcmF0
aXZlV2ViVmlldzo6ZG9Mb2FkU3RhcnRlZCgpCit7CisgICAgaWYgKCFkLT51cmwuaXNFbXB0eSgp
KSB7CisgICAgICAgIGQtPnN0YXR1cyA9IExvYWRpbmc7CisgICAgICAgIGVtaXQgc3RhdHVzQ2hh
bmdlZChkLT5zdGF0dXMpOworICAgIH0KKyAgICBlbWl0IGxvYWRTdGFydGVkKCk7Cit9CisKK3Zv
aWQgUURlY2xhcmF0aXZlV2ViVmlldzo6ZG9Mb2FkUHJvZ3Jlc3MoaW50IHApCit7CisgICAgaWYg
KGQtPnByb2dyZXNzID09IHAgLyAxMDAuMCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByb2dy
ZXNzID0gcCAvIDEwMC4wOworICAgIGVtaXQgcHJvZ3Jlc3NDaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
UURlY2xhcmF0aXZlV2ViVmlldzo6cGFnZVVybENoYW5nZWQoKQoreworICAgIHVwZGF0ZUNvbnRl
bnRzU2l6ZSgpOworCisgICAgaWYgKChkLT51cmwuaXNFbXB0eSgpICYmIHBhZ2UoKS0+bWFpbkZy
YW1lKCktPnVybCgpICE9IFFVcmwoUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkpCisgICAg
ICAgIHx8IChkLT51cmwgIT0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCkgJiYgIXBhZ2UoKS0+
bWFpbkZyYW1lKCktPnVybCgpLmlzRW1wdHkoKSkpCisgICAgeworICAgICAgICBkLT51cmwgPSBw
YWdlKCktPm1haW5GcmFtZSgpLT51cmwoKTsKKyAgICAgICAgaWYgKGQtPnVybCA9PSBRVXJsKFFM
YXRpbjFTdHJpbmcoImFib3V0OmJsYW5rIikpKQorICAgICAgICAgICAgZC0+dXJsID0gUVVybCgp
OworICAgICAgICBlbWl0IHVybENoYW5nZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUURlY2xhcmF0
aXZlV2ViVmlldzo6ZG9Mb2FkRmluaXNoZWQoYm9vbCBvaykKK3sKKyAgICBpZiAob2spIHsKKyAg
ICAgICAgZC0+c3RhdHVzID0gZC0+dXJsLmlzRW1wdHkoKSA/IE51bGwgOiBSZWFkeTsKKyAgICAg
ICAgZW1pdCBsb2FkRmluaXNoZWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkLT5zdGF0dXMg
PSBFcnJvcjsKKyAgICAgICAgZW1pdCBsb2FkRmFpbGVkKCk7CisgICAgfQorICAgIGVtaXQgc3Rh
dHVzQ2hhbmdlZChkLT5zdGF0dXMpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgdXJsIFdl
YlZpZXc6OnVybAorICAgIFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIFVSTCB0byB0aGUgcGFnZSBk
aXNwbGF5ZWQgaW4gdGhpcyBpdGVtLiBJdCBjYW4gYmUgc2V0LAorICAgIGJ1dCBhbHNvIGNhbiBj
aGFuZ2Ugc3BvbnRhbmVvdXNseSAoZWcuIGJlY2F1c2Ugb2YgbmV0d29yayByZWRpcmVjdGlvbiku
CisKKyAgICBJZiB0aGUgdXJsIGlzIGVtcHR5LCB0aGUgcGFnZSBpcyBibGFuay4KKworICAgIFRo
ZSB1cmwgaXMgYWx3YXlzIGFic29sdXRlIChRTUwgd2lsbCByZXNvbHZlIHJlbGF0aXZlIFVSTCBz
dHJpbmdzIGluIHRoZSBjb250ZXh0CisgICAgb2YgdGhlIGNvbnRhaW5pbmcgUU1MIGRvY3VtZW50
KS4KKyovCitRVXJsIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVybCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGQtPnVybDsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRVcmwoY29uc3Qg
UVVybCYgdXJsKQoreworICAgIGlmICh1cmwgPT0gZC0+dXJsKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoaXNDb21wb25lbnRDb21wbGV0ZSgpKSB7CisgICAgICAgIGQtPnVybCA9IHVybDsK
KyAgICAgICAgdXBkYXRlQ29udGVudHNTaXplKCk7CisgICAgICAgIFFVcmwgc2V0dXJsID0gdXJs
OworICAgICAgICBpZiAoc2V0dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNldHVybCA9IFFV
cmwoUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSk7CisKKyAgICAgICAgUV9BU1NFUlQoIXNl
dHVybC5pc1JlbGF0aXZlKCkpOworCisgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPmxvYWQo
c2V0dXJsKTsKKworICAgICAgICBlbWl0IHVybENoYW5nZWQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBkLT5wZW5kaW5nID0gZC0+UGVuZGluZ1VybDsKKyAgICAgICAgZC0+cGVuZGluZ1VybCA9
IHVybDsKKyAgICB9Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmlldzo6cHJl
ZmVycmVkV2lkdGgKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBpZGVhbCB3aWR0aCBmb3Ig
ZGlzcGxheWluZyB0aGUgY3VycmVudCBVUkwuCisqLworaW50IFFEZWNsYXJhdGl2ZVdlYlZpZXc6
OnByZWZlcnJlZFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cHJlZmVycmVkd2lkdGg7
Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmlldzo6c2V0UHJlZmVycmVkV2lkdGgoaW50IHdp
ZHRoKQoreworICAgIGlmIChkLT5wcmVmZXJyZWR3aWR0aCA9PSB3aWR0aCkKKyAgICAgICAgcmV0
dXJuOworICAgIGQtPnByZWZlcnJlZHdpZHRoID0gd2lkdGg7CisgICAgdXBkYXRlQ29udGVudHNT
aXplKCk7CisgICAgZW1pdCBwcmVmZXJyZWRXaWR0aENoYW5nZWQoKTsKK30KKworLyohCisgICAg
XHFtbHByb3BlcnR5IGludCBXZWJWaWV3OjpwcmVmZXJyZWRIZWlnaHQKKyAgICBUaGlzIHByb3Bl
cnR5IGhvbGRzIHRoZSBpZGVhbCBoZWlnaHQgZm9yIGRpc3BsYXlpbmcgdGhlIGN1cnJlbnQgVVJM
LgorICAgIFRoaXMgb25seSBhZmZlY3RzIHRoZSBhcmVhIHpvb21lZCBieSBoZXVyaXN0aWNab29t
KCkuCisqLworaW50IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnByZWZlcnJlZEhlaWdodCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGQtPnByZWZlcnJlZGhlaWdodDsKK30KKwordm9pZCBRRGVjbGFyYXRp
dmVXZWJWaWV3OjpzZXRQcmVmZXJyZWRIZWlnaHQoaW50IGhlaWdodCkKK3sKKyAgICBpZiAoZC0+
cHJlZmVycmVkaGVpZ2h0ID09IGhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIGQtPnByZWZl
cnJlZGhlaWdodCA9IGhlaWdodDsKKyAgICB1cGRhdGVDb250ZW50c1NpemUoKTsKKyAgICBlbWl0
IHByZWZlcnJlZEhlaWdodENoYW5nZWQoKTsKK30KKworLyohCisgICAgXHFtbG1ldGhvZCBib29s
IFdlYlZpZXc6OmV2YWx1YXRlSmF2YVNjcmlwdChzdHJpbmcpCisKKyAgICBFdmFsdWF0ZXMgdGhl
IFxhIHNjcmlwdFNvdXJjZSBKYXZhU2NyaXB0IGluc2lkZSB0aGUgY29udGV4dCBvZiB0aGUKKyAg
ICBtYWluIHdlYiBmcmFtZSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBleGVj
dXRlZCBzdGF0ZW1lbnQuCisKKyAgICBOb3RlIHRoYXQgdGhpcyBKYXZhU2NyaXB0IGRvZXMgXGUg
bm90IGhhdmUgYW55IGFjY2VzcyB0byBRTUwgb2JqZWN0cworICAgIGV4Y2VwdCBhcyBtYWRlIGF2
YWlsYWJsZSBhcyB3aW5kb3dPYmplY3RzLgorKi8KK1FWYXJpYW50IFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OmV2YWx1YXRlSmF2YVNjcmlwdChjb25zdCBRU3RyaW5nJiBzY3JpcHRTb3VyY2UpCit7Cisg
ICAgcmV0dXJuIHRoaXMtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2YWx1YXRlSmF2YVNjcmlwdChz
Y3JpcHRTb3VyY2UpOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnVwZGF0ZURlY2xh
cmF0aXZlV2ViVmlld1NpemUoKQoreworICAgIFFTaXplRiBzaXplID0gZC0+dmlldy0+Z2VvbWV0
cnkoKS5zaXplKCkgKiBjb250ZW50c1NjYWxlKCk7CisgICAgc2V0SW1wbGljaXRXaWR0aChzaXpl
LndpZHRoKCkpOworICAgIHNldEltcGxpY2l0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworfQorCit2
b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmluaXRpYWxMYXlvdXQoKQoreworICAgIC8vIG5vdGhp
bmcgdXNlZnVsIHRvIGRvIGF0IHRoaXMgcG9pbnQKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJW
aWV3Ojp1cGRhdGVDb250ZW50c1NpemUoKQoreworICAgIGlmIChwYWdlKCkpIHsKKyAgICAgICAg
cGFnZSgpLT5zZXRQcmVmZXJyZWRDb250ZW50c1NpemUoUVNpemUoCisgICAgICAgICAgICBkLT5w
cmVmZXJyZWR3aWR0aD4wID8gZC0+cHJlZmVycmVkd2lkdGggOiB3aWR0aCgpLAorICAgICAgICAg
ICAgZC0+cHJlZmVycmVkaGVpZ2h0PjAgPyBkLT5wcmVmZXJyZWRoZWlnaHQgOiBoZWlnaHQoKSkp
OworICAgIH0KK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQo
Y29uc3QgUVJlY3RGJiBuZXdHZW9tZXRyeSwgY29uc3QgUVJlY3RGJiBvbGRHZW9tZXRyeSkKK3sK
KyAgICBRV2ViUGFnZSogd2ViUGFnZSA9IHBhZ2UoKTsKKyAgICBpZiAobmV3R2VvbWV0cnkuc2l6
ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUoKSAmJiB3ZWJQYWdlKSB7CisgICAgICAgIFFTaXplIGNv
bnRlbnRTaXplID0gd2ViUGFnZS0+cHJlZmVycmVkQ29udGVudHNTaXplKCk7CisgICAgICAgIGlm
ICh3aWR0aFZhbGlkKCkpCisgICAgICAgICAgICBjb250ZW50U2l6ZS5zZXRXaWR0aCh3aWR0aCgp
KTsKKyAgICAgICAgaWYgKGhlaWdodFZhbGlkKCkpCisgICAgICAgICAgICBjb250ZW50U2l6ZS5z
ZXRIZWlnaHQoaGVpZ2h0KCkpOworICAgICAgICBpZiAoY29udGVudFNpemUgIT0gd2ViUGFnZS0+
cHJlZmVycmVkQ29udGVudHNTaXplKCkpCisgICAgICAgICAgICB3ZWJQYWdlLT5zZXRQcmVmZXJy
ZWRDb250ZW50c1NpemUoY29udGVudFNpemUpOworICAgIH0KKyAgICBRRGVjbGFyYXRpdmVJdGVt
OjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsKK30KKworLyohCisg
ICAgXHFtbHByb3BlcnR5IGxpc3Q8b2JqZWN0PiBXZWJWaWV3OjpqYXZhU2NyaXB0V2luZG93T2Jq
ZWN0cworCisgICAgQSBsaXN0IG9mIFFNTCBvYmplY3RzIHRvIGV4cG9zZSB0byB0aGUgd2ViIHBh
Z2UuCisKKyAgICBFYWNoIG9iamVjdCB3aWxsIGJlIGFkZGVkIGFzIGEgcHJvcGVydHkgb2YgdGhl
IHdlYiBmcmFtZSdzIHdpbmRvdyBvYmplY3QuICBUaGUKKyAgICBwcm9wZXJ0eSBuYW1lIGlzIGNv
bnRyb2xsZWQgYnkgdGhlIHZhbHVlIG9mIFxjIFdlYlZpZXcud2luZG93T2JqZWN0TmFtZQorICAg
IGF0dGFjaGVkIHByb3BlcnR5LgorCisgICAgRXhwb3NpbmcgUU1MIG9iamVjdHMgdG8gYSB3ZWIg
cGFnZSBhbGxvd3MgSmF2YVNjcmlwdCBleGVjdXRpbmcgaW4gdGhlIHdlYgorICAgIHBhZ2UgaXRz
ZWxmIHRvIGNvbW11bmljYXRlIHdpdGggUU1MLCBieSByZWFkaW5nIGFuZCB3cml0aW5nIHByb3Bl
cnRpZXMgYW5kCisgICAgYnkgY2FsbGluZyBtZXRob2RzIG9mIHRoZSBleHBvc2VkIFFNTCBvYmpl
Y3RzLgorCisgICAgVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byBjYWxsIGludG8gYSBRTUwgbWV0
aG9kIHVzaW5nIGEgd2luZG93IG9iamVjdC4KKworICAgIFxxbWwKKyAgICBXZWJWaWV3IHsKKyAg
ICAgICAgamF2YVNjcmlwdFdpbmRvd09iamVjdHM6IFF0T2JqZWN0IHsKKyAgICAgICAgICAgIFdl
YlZpZXcud2luZG93T2JqZWN0TmFtZTogInFtbCIKKworICAgICAgICAgICAgZnVuY3Rpb24gcW1s
Q2FsbCgpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGhpcyBjYWxsIGlzIGluIFFN
TCEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGh0bWw6ICI8c2NyaXB0
PmNvbnNvbGUubG9nKFwiVGhpcyBpcyBpbiBXZWJLaXQhXCIpOyB3aW5kb3cucW1sLnFtbENhbGwo
KTs8L3NjcmlwdD4iCisgICAgfQorICAgIFxlbmRxbWwKKworICAgIFRoZSBvdXRwdXQgb2YgdGhl
IGV4YW1wbGUgd2lsbCBiZToKKyAgICBcY29kZQorICAgIFRoaXMgaXMgaW4gV2ViS2l0IQorICAg
IFRoaXMgY2FsbCBpcyBpbiBRTUwhCisgICAgXGVuZGNvZGUKKworICAgIElmIEphdmFzY3JpcHQg
aXMgbm90IGVuYWJsZWQgZm9yIHRoZSBwYWdlLCB0aGVuIHRoaXMgcHJvcGVydHkgZG9lcyBub3Ro
aW5nLgorKi8KK1FEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0PiBRRGVjbGFyYXRpdmVX
ZWJWaWV3OjpqYXZhU2NyaXB0V2luZG93T2JqZWN0cygpCit7CisgICAgcmV0dXJuIFFEZWNsYXJh
dGl2ZUxpc3RQcm9wZXJ0eTxRT2JqZWN0Pih0aGlzLCBkLCAmUURlY2xhcmF0aXZlV2ViVmlld1By
aXZhdGU6OndpbmRvd09iamVjdHNBcHBlbmQpOworfQorCitRRGVjbGFyYXRpdmVXZWJWaWV3QXR0
YWNoZWQqIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnFtbEF0dGFjaGVkUHJvcGVydGllcyhRT2JqZWN0
KiBvKQoreworICAgIHJldHVybiBuZXcgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFjaGVkKG8pOwor
fQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXdQcml2YXRlOjp1cGRhdGVXaW5kb3dPYmplY3Rz
KCkKK3sKKyAgICBpZiAoIXEtPmlzQ29tcG9uZW50Q29tcGxldGVQdWJsaWMoKSB8fCAhcS0+cGFn
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpbmRvd09i
amVjdHMuY291bnQoKTsgKytpKSB7CisgICAgICAgIFFPYmplY3QqIG9iamVjdCA9IHdpbmRvd09i
amVjdHMuYXQoaSk7CisgICAgICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hlZCogYXR0YWNo
ZWQgPSBzdGF0aWNfY2FzdDxRRGVjbGFyYXRpdmVXZWJWaWV3QXR0YWNoZWQgKj4ocW1sQXR0YWNo
ZWRQcm9wZXJ0aWVzT2JqZWN0PFFEZWNsYXJhdGl2ZVdlYlZpZXc+KG9iamVjdCkpOworICAgICAg
ICBpZiAoYXR0YWNoZWQgJiYgIWF0dGFjaGVkLT53aW5kb3dPYmplY3ROYW1lKCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2lu
ZG93T2JqZWN0KGF0dGFjaGVkLT53aW5kb3dPYmplY3ROYW1lKCksIG9iamVjdCk7CisgICAgfQor
fQorCitib29sIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnJlbmRlcmluZ0VuYWJsZWQoKSBjb25zdAor
eworICAgIHJldHVybiBkLT5yZW5kZXJpbmc7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZlV2ViVmll
dzo6c2V0UmVuZGVyaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKGQtPnJlbmRl
cmluZyA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgZC0+cmVuZGVyaW5nID0gZW5h
YmxlZDsKKyAgICBlbWl0IHJlbmRlcmluZ0VuYWJsZWRDaGFuZ2VkKCk7CisgICAgZC0+dmlldy0+
c2V0VGlsZWRCYWNraW5nU3RvcmVGcm96ZW4oIWVuYWJsZWQpOworfQorCisvKiEKKyAgICBccW1s
c2lnbmFsIFdlYlZpZXc6Om9uRG91YmxlQ2xpY2soY2xpY2t4LCBjbGlja3kpCisKKyAgICBUaGUg
V2ViVmlldyBkb2VzIG5vdCBwYXNzIGRvdWJsZS1jbGljayBldmVudHMgdG8gdGhlIHdlYiBlbmdp
bmUsIGJ1dCByYXRoZXIKKyAgICBlbWl0cyB0aGlzIHNpZ25hbHMuCisqLworCisvKiEKKyAgICBc
cW1sbWV0aG9kIGJvb2wgV2ViVmlldzo6aGV1cmlzdGljWm9vbShjbGlja1gsY2xpY2tZLG1heHpv
b20pCisKKyAgICBGaW5kcyBhIHpvb20gdGhhdDoKKyAgICBcbGlzdAorICAgIFxpIHNob3dzIGEg
d2hvbGUgaXRlbQorICAgIFxpIGluY2x1ZGVzIChcYSBjbGlja1gsIFxhIGNsaWNrWSkKKyAgICBc
aSBmaXRzIGludG8gdGhlIHByZWZlcnJlZFdpZHRoIGFuZCBwcmVmZXJyZWRIZWlnaHQKKyAgICBc
aSB6b29tcyBieSBubyBtb3JlIHRoYW4gXGEgbWF4Wm9vbQorICAgIFxpIGlzIG1vcmUgdGhhbiAx
MCUgYWJvdmUgdGhlIGN1cnJlbnQgem9vbQorICAgIFxlbmRsaXN0CisKKyAgICBJZiBzdWNoIGEg
em9vbSBleGlzdHMsIGVtaXRzIHpvb21Ubyh6b29tLGNlbnRlclgsY2VudGVyWSkgYW5kIHJldHVy
bnMgdHJ1ZTsgb3RoZXJ3aXNlLAorICAgIG5vIHNpZ25hbCBpcyBlbWl0dGVkIGFuZCByZXR1cm5z
IGZhbHNlLgorKi8KK2Jvb2wgUURlY2xhcmF0aXZlV2ViVmlldzo6aGV1cmlzdGljWm9vbShpbnQg
Y2xpY2tYLCBpbnQgY2xpY2tZLCBxcmVhbCBtYXhab29tKQoreworICAgIGlmIChjb250ZW50c1Nj
YWxlKCkgPj0gbWF4Wm9vbSAvIHNjYWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBx
cmVhbCBvemYgPSBjb250ZW50c1NjYWxlKCk7CisgICAgUVJlY3Qgc2hvd0FyZWEgPSBlbGVtZW50
QXJlYUF0KGNsaWNrWCwgY2xpY2tZLCBkLT5wcmVmZXJyZWR3aWR0aCAvIG1heFpvb20sIGQtPnBy
ZWZlcnJlZGhlaWdodCAvIG1heFpvb20pOworICAgIHFyZWFsIHogPSBxTWluKHFyZWFsKGQtPnBy
ZWZlcnJlZHdpZHRoKSAvIHNob3dBcmVhLndpZHRoKCksIHFyZWFsKGQtPnByZWZlcnJlZGhlaWdo
dCkgLyBzaG93QXJlYS5oZWlnaHQoKSk7CisgICAgaWYgKHogPiBtYXhab29tIC8gc2NhbGUoKSkK
KyAgICAgICAgeiA9IG1heFpvb20gLyBzY2FsZSgpOworICAgIGlmICh6IC8gb3pmID4gMS4yKSB7
CisgICAgICAgIFFSZWN0RiByKHNob3dBcmVhLmxlZnQoKSAqIHosIHNob3dBcmVhLnRvcCgpICog
eiwgc2hvd0FyZWEud2lkdGgoKSAqIHosIHNob3dBcmVhLmhlaWdodCgpICogeik7CisgICAgICAg
IGVtaXQgem9vbVRvKHosIHIueCgpICsgci53aWR0aCgpIC8gMiwgci55KCkgKyByLmhlaWdodCgp
IC8gMik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmlldzo6cHJlc3NHcmFiVGltZQorCisg
ICAgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIHVzZXIgbXVzdCBwcmVzcyBiZWZvcmUg
dGhlIFdlYlZpZXcKKyAgICBzdGFydHMgcGFzc2luZyBtb3ZlIGV2ZW50cyB0aHJvdWdoIHRvIHRo
ZSB3ZWIgZW5naW5lIChyYXRoZXIgdGhhbgorICAgIGxldHRpbmcgb3RoZXIgUU1MIGVsZW1lbnRz
IHN1Y2ggYXMgYSBGbGlja2FibGUgdGFrZSB0aGVtKS4KKworICAgIERlZmF1bHRzIHRvIDQwMG1z
LiBTZXQgdG8gMCB0byBhbHdheXMgZ3JhYiBhbmQgcGFzcyBtb3ZlIGV2ZW50cyB0bworICAgIHRo
ZSB3ZWIgZW5naW5lLgorKi8KK2ludCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpwcmVzc0dyYWJUaW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+dmlldy0+cHJlc3NUaW1lOworfQorCit2b2lkIFFE
ZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFByZXNzR3JhYlRpbWUoaW50IG1pbGxpcykKK3sKKyAgICBp
ZiAoZC0+dmlldy0+cHJlc3NUaW1lID09IG1pbGxpcykKKyAgICAgICAgcmV0dXJuOworICAgIGQt
PnZpZXctPnByZXNzVGltZSA9IG1pbGxpczsKKyAgICBlbWl0IHByZXNzR3JhYlRpbWVDaGFuZ2Vk
KCk7Cit9CisKKy8qIQorICAgIFxxbWxwcm9wZXJ0eSBhY3Rpb24gV2ViVmlldzo6YmFjaworICAg
IFRoaXMgcHJvcGVydHkgaG9sZHMgdGhlIGFjdGlvbiBmb3IgY2F1c2luZyB0aGUgcHJldmlvdXMg
VVJMIGluIHRoZSBoaXN0b3J5IHRvIGJlIGRpc3BsYXllZC4KKyovCitRQWN0aW9uKiBRRGVjbGFy
YXRpdmVXZWJWaWV3OjpiYWNrQWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLT5h
Y3Rpb24oUVdlYlBhZ2U6OkJhY2spOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgYWN0aW9u
IFdlYlZpZXc6OmZvcndhcmQKKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBhY3Rpb24gZm9y
IGNhdXNpbmcgdGhlIG5leHQgVVJMIGluIHRoZSBoaXN0b3J5IHRvIGJlIGRpc3BsYXllZC4KKyov
CitRQWN0aW9uKiBRRGVjbGFyYXRpdmVXZWJWaWV3Ojpmb3J3YXJkQWN0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OkZvcndhcmQpOworfQorCisvKiEK
KyAgICBccW1scHJvcGVydHkgYWN0aW9uIFdlYlZpZXc6OnJlbG9hZAorICAgIFRoaXMgcHJvcGVy
dHkgaG9sZHMgdGhlIGFjdGlvbiBmb3IgcmVsb2FkaW5nIHdpdGggdGhlIGN1cnJlbnQgVVJMCisq
LworUUFjdGlvbiogUURlY2xhcmF0aXZlV2ViVmlldzo6cmVsb2FkQWN0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlJlbG9hZCk7Cit9CisKKy8qIQor
ICAgIFxxbWxwcm9wZXJ0eSBhY3Rpb24gV2ViVmlldzo6c3RvcAorICAgIFRoaXMgcHJvcGVydHkg
aG9sZHMgdGhlIGFjdGlvbiBmb3Igc3RvcHBpbmcgbG9hZGluZyB3aXRoIHRoZSBjdXJyZW50IFVS
TAorKi8KK1FBY3Rpb24qIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnN0b3BBY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiBwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6U3RvcCk7Cit9CisKKy8qIQor
ICAgIFxxbWxwcm9wZXJ0eSByZWFsIFdlYlZpZXc6OnRpdGxlCisgICAgVGhpcyBwcm9wZXJ0eSBo
b2xkcyB0aGUgdGl0bGUgb2YgdGhlIHdlYiBwYWdlIGN1cnJlbnRseSB2aWV3ZWQKKworICAgIEJ5
IGRlZmF1bHQsIHRoaXMgcHJvcGVydHkgY29udGFpbnMgYW4gZW1wdHkgc3RyaW5nLgorKi8KK1FT
dHJpbmcgUURlY2xhcmF0aXZlV2ViVmlldzo6dGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBw
YWdlKCktPm1haW5GcmFtZSgpLT50aXRsZSgpOworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkg
cGl4bWFwIFdlYlZpZXc6Omljb24KKyAgICBUaGlzIHByb3BlcnR5IGhvbGRzIHRoZSBpY29uIGFz
c29jaWF0ZWQgd2l0aCB0aGUgd2ViIHBhZ2UgY3VycmVudGx5IHZpZXdlZAorKi8KK1FQaXhtYXAg
UURlY2xhcmF0aXZlV2ViVmlldzo6aWNvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+
bWFpbkZyYW1lKCktPmljb24oKS5waXhtYXAoUVNpemUoMjU2LCAyNTYpKTsKK30KKworLyohCisg
ICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzdGF0dXNUZXh0CisKKyAgICBUaGlzIHBy
b3BlcnR5IGlzIHRoZSBjdXJyZW50IHN0YXR1cyBzdWdnZXN0ZWQgYnkgdGhlIGN1cnJlbnQgd2Vi
IHBhZ2UuIEluIGEgd2ViIGJyb3dzZXIsCisgICAgc3VjaCBzdGF0dXMgaXMgb2Z0ZW4gc2hvd24g
aW4gc29tZSBraW5kIG9mIHN0YXR1cyBiYXIuCisqLwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3
OjpzZXRTdGF0dXNUZXh0KGNvbnN0IFFTdHJpbmcmIHRleHQpCit7CisgICAgZC0+c3RhdHVzVGV4
dCA9IHRleHQ7CisgICAgZW1pdCBzdGF0dXNUZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OndpbmRvd09iamVjdENsZWFyZWQoKQoreworICAgIGQtPnVwZGF0ZVdp
bmRvd09iamVjdHMoKTsKK30KKworUVN0cmluZyBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzdGF0dXNU
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+c3RhdHVzVGV4dDsKK30KKworUVdlYlBhZ2Uq
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBkLT52aWV3
LT5wYWdlKCk7Cit9CisKKy8vIFRoZSBRT2JqZWN0IGludGVyZmFjZSB0byBzZXR0aW5ncygpLgor
LyohCisgICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5zdGFuZGFyZEZv
bnRGYW1pbHkKKyAgICBccW1scHJvcGVydHkgc3RyaW5nIFdlYlZpZXc6OnNldHRpbmdzLmZpeGVk
Rm9udEZhbWlseQorICAgIFxxbWxwcm9wZXJ0eSBzdHJpbmcgV2ViVmlldzo6c2V0dGluZ3Muc2Vy
aWZGb250RmFtaWx5CisgICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0aW5ncy5z
YW5zU2VyaWZGb250RmFtaWx5CisgICAgXHFtbHByb3BlcnR5IHN0cmluZyBXZWJWaWV3OjpzZXR0
aW5ncy5jdXJzaXZlRm9udEZhbWlseQorICAgIFxxbWxwcm9wZXJ0eSBzdHJpbmcgV2ViVmlldzo6
c2V0dGluZ3MuZmFudGFzeUZvbnRGYW1pbHkKKworICAgIFxxbWxwcm9wZXJ0eSBpbnQgV2ViVmll
dzo6c2V0dGluZ3MubWluaW11bUZvbnRTaXplCisgICAgXHFtbHByb3BlcnR5IGludCBXZWJWaWV3
OjpzZXR0aW5ncy5taW5pbXVtTG9naWNhbEZvbnRTaXplCisgICAgXHFtbHByb3BlcnR5IGludCBX
ZWJWaWV3OjpzZXR0aW5ncy5kZWZhdWx0Rm9udFNpemUKKyAgICBccW1scHJvcGVydHkgaW50IFdl
YlZpZXc6OnNldHRpbmdzLmRlZmF1bHRGaXhlZEZvbnRTaXplCisKKyAgICBccW1scHJvcGVydHkg
Ym9vbCBXZWJWaWV3OjpzZXR0aW5ncy5hdXRvTG9hZEltYWdlcworICAgIFxxbWxwcm9wZXJ0eSBi
b29sIFdlYlZpZXc6OnNldHRpbmdzLmphdmFzY3JpcHRFbmFibGVkCisgICAgXHFtbHByb3BlcnR5
IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MuamF2YUVuYWJsZWQKKyAgICBccW1scHJvcGVydHkgYm9v
bCBXZWJWaWV3OjpzZXR0aW5ncy5wbHVnaW5zRW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29s
IFdlYlZpZXc6OnNldHRpbmdzLnByaXZhdGVCcm93c2luZ0VuYWJsZWQKKyAgICBccW1scHJvcGVy
dHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5qYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MKKyAgICBc
cW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0aW5ncy5qYXZhc2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MuZGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZAorICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZpZXc6OnNldHRpbmdzLmxp
bmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4KKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3Ojpz
ZXR0aW5ncy56b29tVGV4dE9ubHkKKyAgICBccW1scHJvcGVydHkgYm9vbCBXZWJWaWV3OjpzZXR0
aW5ncy5wcmludEVsZW1lbnRCYWNrZ3JvdW5kcworICAgIFxxbWxwcm9wZXJ0eSBib29sIFdlYlZp
ZXc6OnNldHRpbmdzLm9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkCisgICAgXHFtbHByb3Bl
cnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3Mub2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFi
bGVkCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3MubG9jYWxTdG9yYWdl
RGF0YWJhc2VFbmFibGVkCisgICAgXHFtbHByb3BlcnR5IGJvb2wgV2ViVmlldzo6c2V0dGluZ3Mu
bG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscworCisgICAgVGhlc2UgcHJvcGVydGllcyBn
aXZlIGFjY2VzcyB0byB0aGUgc2V0dGluZ3MgY29udHJvbGxpbmcgdGhlIHdlYiB2aWV3LgorCisg
ICAgU2VlIFFXZWJTZXR0aW5ncyBmb3IgZGV0YWlscyBvZiB0aGVzZSBwcm9wZXJ0aWVzLgorCisg
ICAgXHFtbAorICAgICAgICBXZWJWaWV3IHsKKyAgICAgICAgICAgIHNldHRpbmdzLnBsdWdpbnNF
bmFibGVkOiB0cnVlCisgICAgICAgICAgICBzZXR0aW5ncy5zdGFuZGFyZEZvbnRGYW1pbHk6ICJB
cmlhbCIKKyAgICAgICAgICAgIC4uLgorICAgICAgICB9CisgICAgXGVuZHFtbAorKi8KK1FEZWNs
YXJhdGl2ZVdlYlNldHRpbmdzKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXR0aW5nc09iamVjdCgp
IGNvbnN0Cit7CisgICAgZC0+c2V0dGluZ3MucyA9IHBhZ2UoKS0+c2V0dGluZ3MoKTsKKyAgICBy
ZXR1cm4gJmQtPnNldHRpbmdzOworfQorCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldFBh
Z2UoUVdlYlBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKGQtPnZpZXctPnBhZ2UoKSA9PSBwYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBkLT52aWV3LT5zZXRQYWdlKHBhZ2UpOworICAgIHVwZGF0
ZUNvbnRlbnRzU2l6ZSgpOworICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xp
Y3koUXQ6Okhvcml6b250YWwsIFF0OjpTY3JvbGxCYXJBbHdheXNPZmYpOworICAgIHBhZ2UtPm1h
aW5GcmFtZSgpLT5zZXRTY3JvbGxCYXJQb2xpY3koUXQ6OlZlcnRpY2FsLCBRdDo6U2Nyb2xsQmFy
QWx3YXlzT2ZmKTsKKyAgICBjb25uZWN0KHBhZ2UtPm1haW5GcmFtZSgpLCBTSUdOQUwodXJsQ2hh
bmdlZChRVXJsKSksIHRoaXMsIFNMT1QocGFnZVVybENoYW5nZWQoKSkpOworICAgIGNvbm5lY3Qo
cGFnZS0+bWFpbkZyYW1lKCksIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpLCB0aGlzLCBT
SUdOQUwodGl0bGVDaGFuZ2VkKFFTdHJpbmcpKSk7CisgICAgY29ubmVjdChwYWdlLT5tYWluRnJh
bWUoKSwgU0lHTkFMKHRpdGxlQ2hhbmdlZChRU3RyaW5nKSksIHRoaXMsIFNJR05BTChpY29uQ2hh
bmdlZCgpKSk7CisgICAgY29ubmVjdChwYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKGljb25DaGFu
Z2VkKCkpLCB0aGlzLCBTSUdOQUwoaWNvbkNoYW5nZWQoKSkpOworICAgIGNvbm5lY3QocGFnZS0+
bWFpbkZyYW1lKCksIFNJR05BTChpbml0aWFsTGF5b3V0Q29tcGxldGVkKCkpLCB0aGlzLCBTTE9U
KGluaXRpYWxMYXlvdXQoKSkpOworICAgIGNvbm5lY3QocGFnZS0+bWFpbkZyYW1lKCksIFNJR05B
TChjb250ZW50c1NpemVDaGFuZ2VkKFFTaXplKSksIHRoaXMsIFNJR05BTChjb250ZW50c1NpemVD
aGFuZ2VkKFFTaXplKSkpOworCisgICAgY29ubmVjdChwYWdlLCBTSUdOQUwobG9hZFN0YXJ0ZWQo
KSksIHRoaXMsIFNMT1QoZG9Mb2FkU3RhcnRlZCgpKSk7CisgICAgY29ubmVjdChwYWdlLCBTSUdO
QUwobG9hZFByb2dyZXNzKGludCkpLCB0aGlzLCBTTE9UKGRvTG9hZFByb2dyZXNzKGludCkpKTsK
KyAgICBjb25uZWN0KHBhZ2UsIFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkpLCB0aGlzLCBTTE9U
KGRvTG9hZEZpbmlzaGVkKGJvb2wpKSk7CisgICAgY29ubmVjdChwYWdlLCBTSUdOQUwoc3RhdHVz
QmFyTWVzc2FnZShRU3RyaW5nKSksIHRoaXMsIFNMT1Qoc2V0U3RhdHVzVGV4dChRU3RyaW5nKSkp
OworCisgICAgY29ubmVjdChwYWdlLT5tYWluRnJhbWUoKSwgU0lHTkFMKGphdmFTY3JpcHRXaW5k
b3dPYmplY3RDbGVhcmVkKCkpLCB0aGlzLCBTTE9UKHdpbmRvd09iamVjdENsZWFyZWQoKSkpOwor
CisgICAgcGFnZS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6VGlsZWRC
YWNraW5nU3RvcmVFbmFibGVkLCB0cnVlKTsKKworfQorCisvKiEKKyAgICBccW1sc2lnbmFsIFdl
YlZpZXc6Om9uTG9hZFN0YXJ0ZWQoKQorCisgICAgVGhpcyBoYW5kbGVyIGlzIGNhbGxlZCB3aGVu
IHRoZSB3ZWIgZW5naW5lIGJlZ2lucyBsb2FkaW5nCisgICAgYSBwYWdlLiBMYXRlciwgV2ViVmll
dzo6b25Mb2FkRmluaXNoZWQoKSBvciBXZWJWaWV3OjpvbkxvYWRGYWlsZWQoKQorICAgIHdpbGwg
YmUgZW1pdHRlZC4KKyovCisKKy8qIQorICAgIFxxbWxzaWduYWwgV2ViVmlldzo6b25Mb2FkRmlu
aXNoZWQoKQorCisgICAgVGhpcyBoYW5kbGVyIGlzIGNhbGxlZCB3aGVuIHRoZSB3ZWIgZW5naW5l
IFxlIHN1Y2Nlc3NmdWxseQorICAgIGZpbmlzaGVzIGxvYWRpbmcgYSBwYWdlLCBpbmNsdWRpbmcg
YW55IGNvbXBvbmVudCBjb250ZW50CisgICAgKFdlYlZpZXc6Om9uTG9hZEZhaWxlZCgpIHdpbGwg
YmUgZW1pdHRlZCBvdGhlcndpc2UpLgorCisgICAgXHNhIHByb2dyZXNzCisqLworCisvKiEKKyAg
ICBccW1sc2lnbmFsIFdlYlZpZXc6Om9uTG9hZEZhaWxlZCgpCisKKyAgICBUaGlzIGhhbmRsZXIg
aXMgY2FsbGVkIHdoZW4gdGhlIHdlYiBlbmdpbmUgZmFpbHMgbG9hZGluZworICAgIGEgcGFnZSBv
ciBhbnkgY29tcG9uZW50IGNvbnRlbnQKKyAgICAoV2ViVmlldzo6b25Mb2FkRmluaXNoZWQoKSB3
aWxsIGJlIGVtaXR0ZWQgb24gc3VjY2VzcykuCisqLworCit2b2lkIFFEZWNsYXJhdGl2ZVdlYlZp
ZXc6OmxvYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRTmV0d29ya0FjY2Vzc01h
bmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IFFCeXRlQXJyYXkmIGJvZHkpCit7Cisg
ICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+bG9hZChyZXF1ZXN0LCBvcGVyYXRpb24sIGJvZHkpOwor
fQorCitRU3RyaW5nIFFEZWNsYXJhdGl2ZVdlYlZpZXc6Omh0bWwoKSBjb25zdAoreworICAgIHJl
dHVybiBwYWdlKCktPm1haW5GcmFtZSgpLT50b0h0bWwoKTsKK30KKworLyohCisgICAgXHFtbHBy
b3BlcnR5IHN0cmluZyBXZWJWaWV3OjpodG1sCisgICAgVGhpcyBwcm9wZXJ0eSBob2xkcyBIVE1M
IHRleHQgc2V0IGRpcmVjdGx5CisKKyAgICBUaGUgaHRtbCBwcm9wZXJ0eSBjYW4gYmUgc2V0IGFz
IGEgc3RyaW5nLgorCisgICAgXHFtbAorICAgIFdlYlZpZXcgeworICAgICAgICBodG1sOiAiPHA+
VGhpcyBpcyA8Yj5IVE1MPC9iPi4iCisgICAgfQorICAgIFxlbmRxbWwKKyovCit2b2lkIFFEZWNs
YXJhdGl2ZVdlYlZpZXc6OnNldEh0bWwoY29uc3QgUVN0cmluZyYgaHRtbCwgY29uc3QgUVVybCYg
YmFzZVVybCkKK3sKKyAgICB1cGRhdGVDb250ZW50c1NpemUoKTsKKyAgICBpZiAoaXNDb21wb25l
bnRDb21wbGV0ZSgpKQorICAgICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5zZXRIdG1sKGh0bWws
IGJhc2VVcmwpOworICAgIGVsc2UgeworICAgICAgICBkLT5wZW5kaW5nID0gZC0+UGVuZGluZ0h0
bWw7CisgICAgICAgIGQtPnBlbmRpbmdVcmwgPSBiYXNlVXJsOworICAgICAgICBkLT5wZW5kaW5n
U3RyaW5nID0gaHRtbDsKKyAgICB9CisgICAgZW1pdCBodG1sQ2hhbmdlZCgpOworfQorCit2b2lk
IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OnNldENvbnRlbnQoY29uc3QgUUJ5dGVBcnJheSYgZGF0YSwg
Y29uc3QgUVN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFFVcmwmIGJhc2VVcmwpCit7CisgICAgdXBk
YXRlQ29udGVudHNTaXplKCk7CisKKyAgICBpZiAoaXNDb21wb25lbnRDb21wbGV0ZSgpKQorICAg
ICAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5zZXRDb250ZW50KGRhdGEsIG1pbWVUeXBlLCBxbWxD
b250ZXh0KHRoaXMpLT5yZXNvbHZlZFVybChiYXNlVXJsKSk7CisgICAgZWxzZSB7CisgICAgICAg
IGQtPnBlbmRpbmcgPSBkLT5QZW5kaW5nQ29udGVudDsKKyAgICAgICAgZC0+cGVuZGluZ1VybCA9
IGJhc2VVcmw7CisgICAgICAgIGQtPnBlbmRpbmdTdHJpbmcgPSBtaW1lVHlwZTsKKyAgICAgICAg
ZC0+cGVuZGluZ0RhdGEgPSBkYXRhOworICAgIH0KK30KKworUVdlYkhpc3RvcnkqIFFEZWNsYXJh
dGl2ZVdlYlZpZXc6Omhpc3RvcnkoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCktPmhpc3Rv
cnkoKTsKK30KKworUVdlYlNldHRpbmdzKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXR0aW5ncygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+c2V0dGluZ3MoKTsKK30KKworUURlY2xhcmF0
aXZlV2ViVmlldyogUURlY2xhcmF0aXZlV2ViVmlldzo6Y3JlYXRlV2luZG93KFFXZWJQYWdlOjpX
ZWJXaW5kb3dUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBRV2Vi
UGFnZTo6V2ViQnJvd3NlcldpbmRvdzogeworICAgICAgICBpZiAoIWQtPm5ld1dpbmRvd0NvbXBv
bmVudCAmJiBkLT5uZXdXaW5kb3dQYXJlbnQpCisgICAgICAgICAgICBxV2FybmluZygiV2ViVmll
dzo6bmV3V2luZG93Q29tcG9uZW50IG5vdCBzZXQgLSBXZWJWaWV3OjpuZXdXaW5kb3dQYXJlbnQg
aWdub3JlZCIpOworICAgICAgICBlbHNlIGlmIChkLT5uZXdXaW5kb3dDb21wb25lbnQgJiYgIWQt
Pm5ld1dpbmRvd1BhcmVudCkKKyAgICAgICAgICAgIHFXYXJuaW5nKCJXZWJWaWV3OjpuZXdXaW5k
b3dQYXJlbnQgbm90IHNldCAtIFdlYlZpZXc6Om5ld1dpbmRvd0NvbXBvbmVudCBpZ25vcmVkIik7
CisgICAgICAgIGVsc2UgaWYgKGQtPm5ld1dpbmRvd0NvbXBvbmVudCAmJiBkLT5uZXdXaW5kb3dQ
YXJlbnQpIHsKKyAgICAgICAgICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXcqIHdlYnZpZXcgPSAwOwor
ICAgICAgICAgICAgUURlY2xhcmF0aXZlQ29udGV4dCogd2luZG93Q29udGV4dCA9IG5ldyBRRGVj
bGFyYXRpdmVDb250ZXh0KHFtbENvbnRleHQodGhpcykpOworCisgICAgICAgICAgICBRT2JqZWN0
KiBuZXdPYmplY3QgPSBkLT5uZXdXaW5kb3dDb21wb25lbnQtPmNyZWF0ZSh3aW5kb3dDb250ZXh0
KTsKKyAgICAgICAgICAgIGlmIChuZXdPYmplY3QpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3dD
b250ZXh0LT5zZXRQYXJlbnQobmV3T2JqZWN0KTsKKyAgICAgICAgICAgICAgICBRRGVjbGFyYXRp
dmVJdGVtKiBpdGVtID0gcW9iamVjdF9jYXN0PFFEZWNsYXJhdGl2ZUl0ZW0gKj4obmV3T2JqZWN0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBuZXdPYmplY3Q7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHdlYnZpZXcgPSBpdGVtLT5maW5kQ2hpbGQ8UURlY2xhcmF0aXZlV2ViVmlldyo+KCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghd2VidmlldykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBpdGVtOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld09iamVjdC0+c2V0UGFyZW50KGQtPm5ld1dpbmRvd1BhcmVudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxRR3JhcGhpY3NPYmplY3QqPihpdGVtKS0+c2V0
UGFyZW50SXRlbShkLT5uZXdXaW5kb3dQYXJlbnQpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZGVs
ZXRlIHdpbmRvd0NvbnRleHQ7CisKKyAgICAgICAgICAgIHJldHVybiB3ZWJ2aWV3OworICAgICAg
ICB9CisgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgUVdlYlBhZ2U6OldlYk1vZGFsRGlhbG9n
OiB7CisgICAgICAgIC8vIE5vdCBzdXBwb3J0ZWQKKyAgICB9CisgICAgfQorICAgIHJldHVybiAw
OworfQorCisvKiEKKyAgICBccW1scHJvcGVydHkgY29tcG9uZW50IFdlYlZpZXc6Om5ld1dpbmRv
d0NvbXBvbmVudAorCisgICAgVGhpcyBwcm9wZXJ0eSBob2xkcyB0aGUgY29tcG9uZW50IHRvIHVz
ZSBmb3IgbmV3IHdpbmRvd3MuCisgICAgVGhlIGNvbXBvbmVudCBtdXN0IGhhdmUgYSBXZWJWaWV3
IHNvbWV3aGVyZSBpbiBpdHMgc3RydWN0dXJlLgorCisgICAgV2hlbiB0aGUgd2ViIGVuZ2luZSBy
ZXF1ZXN0cyBhIG5ldyB3aW5kb3csIGl0IHdpbGwgYmUgYW4gaW5zdGFuY2Ugb2YKKyAgICB0aGlz
IGNvbXBvbmVudC4KKworICAgIFRoZSBwYXJlbnQgb2YgdGhlIG5ldyB3aW5kb3cgaXMgc2V0IGJ5
IG5ld1dpbmRvd1BhcmVudC4gSXQgbXVzdCBiZSBzZXQuCisqLworUURlY2xhcmF0aXZlQ29tcG9u
ZW50KiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpuZXdXaW5kb3dDb21wb25lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBkLT5uZXdXaW5kb3dDb21wb25lbnQ7Cit9CisKK3ZvaWQgUURlY2xhcmF0aXZl
V2ViVmlldzo6c2V0TmV3V2luZG93Q29tcG9uZW50KFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogbmV3
V2luZG93KQoreworICAgIGlmIChuZXdXaW5kb3cgPT0gZC0+bmV3V2luZG93Q29tcG9uZW50KQor
ICAgICAgICByZXR1cm47CisgICAgZC0+bmV3V2luZG93Q29tcG9uZW50ID0gbmV3V2luZG93Owor
ICAgIGVtaXQgbmV3V2luZG93Q29tcG9uZW50Q2hhbmdlZCgpOworfQorCisKKy8qIQorICAgIFxx
bWxwcm9wZXJ0eSBpdGVtIFdlYlZpZXc6Om5ld1dpbmRvd1BhcmVudAorCisgICAgVGhlIHBhcmVu
dCBpdGVtIGZvciBuZXcgd2luZG93cy4KKworICAgIFxzYSBuZXdXaW5kb3dDb21wb25lbnQKKyov
CitRRGVjbGFyYXRpdmVJdGVtKiBRRGVjbGFyYXRpdmVXZWJWaWV3OjpuZXdXaW5kb3dQYXJlbnQo
KSBjb25zdAoreworICAgIHJldHVybiBkLT5uZXdXaW5kb3dQYXJlbnQ7Cit9CisKK3ZvaWQgUURl
Y2xhcmF0aXZlV2ViVmlldzo6c2V0TmV3V2luZG93UGFyZW50KFFEZWNsYXJhdGl2ZUl0ZW0qIHBh
cmVudCkKK3sKKyAgICBpZiAocGFyZW50ID09IGQtPm5ld1dpbmRvd1BhcmVudCkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChkLT5uZXdXaW5kb3dQYXJlbnQgJiYgcGFyZW50KSB7CisgICAgICAg
IFFMaXN0PFFHcmFwaGljc0l0ZW0gKj4gY2hpbGRyZW4gPSBkLT5uZXdXaW5kb3dQYXJlbnQtPmNo
aWxkSXRlbXMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5jb3VudCgp
OyArK2kpCisgICAgICAgICAgICBjaGlsZHJlbi5hdChpKS0+c2V0UGFyZW50SXRlbShwYXJlbnQp
OworICAgIH0KKyAgICBkLT5uZXdXaW5kb3dQYXJlbnQgPSBwYXJlbnQ7CisgICAgZW1pdCBuZXdX
aW5kb3dQYXJlbnRDaGFuZ2VkKCk7Cit9CisKK1FTaXplIFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmNv
bnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS0+bWFpbkZyYW1lKCktPmNv
bnRlbnRzU2l6ZSgpICogY29udGVudHNTY2FsZSgpOworfQorCitxcmVhbCBRRGVjbGFyYXRpdmVX
ZWJWaWV3Ojpjb250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+dmlldy0+c2Nh
bGUoKTsKK30KKwordm9pZCBRRGVjbGFyYXRpdmVXZWJWaWV3OjpzZXRDb250ZW50c1NjYWxlKHFy
ZWFsIHNjYWxlKQoreworICAgIGlmIChzY2FsZSA9PSBkLT52aWV3LT5zY2FsZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgZC0+dmlldy0+c2V0U2NhbGUoc2NhbGUpOworICAgIHVwZGF0ZURlY2xh
cmF0aXZlV2ViVmlld1NpemUoKTsKKyAgICBlbWl0IGNvbnRlbnRzU2NhbGVDaGFuZ2VkKCk7Cit9
CisKKy8qIQorICAgIFJldHVybnMgdGhlIGFyZWEgb2YgdGhlIGxhcmdlc3QgZWxlbWVudCBhdCBw
b3NpdGlvbiAoXGEgeCxcYSB5KSB0aGF0IGlzIG5vIGxhcmdlcgorICAgIHRoYW4gXGEgbWF4V2lk
dGggYnkgXGEgbWF4SGVpZ2h0IHBpeGVscy4KKworICAgIE1heSByZXR1cm4gYW4gYXJlYSBsYXJn
ZXIgaW4gdGhlIGNhc2Ugd2hlbiBubyBzbWFsbGVyIGVsZW1lbnQgaXMgYXQgdGhlIHBvc2l0aW9u
LgorKi8KK1FSZWN0IFFEZWNsYXJhdGl2ZVdlYlZpZXc6OmVsZW1lbnRBcmVhQXQoaW50IHgsIGlu
dCB5LCBpbnQgbWF4V2lkdGgsIGludCBtYXhIZWlnaHQpIGNvbnN0Cit7CisgICAgUVdlYkhpdFRl
c3RSZXN1bHQgaGl0ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+aGl0VGVzdENvbnRlbnQoUVBvaW50
KHgsIHkpKTsKKyAgICBRUmVjdCBoaXRSZWN0ID0gaGl0LmJvdW5kaW5nUmVjdCgpOworICAgIFFX
ZWJFbGVtZW50IGVsZW1lbnQgPSBoaXQuZW5jbG9zaW5nQmxvY2tFbGVtZW50KCk7CisgICAgaWYg
KG1heFdpZHRoIDw9IDApCisgICAgICAgIG1heFdpZHRoID0gSU5UX01BWDsKKyAgICBpZiAobWF4
SGVpZ2h0IDw9IDApCisgICAgICAgIG1heEhlaWdodCA9IElOVF9NQVg7CisgICAgd2hpbGUgKCFl
bGVtZW50LnBhcmVudCgpLmlzTnVsbCgpICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS53aWR0aCgpIDw9
IG1heFdpZHRoICYmIGVsZW1lbnQuZ2VvbWV0cnkoKS5oZWlnaHQoKSA8PSBtYXhIZWlnaHQpIHsK
KyAgICAgICAgaGl0UmVjdCA9IGVsZW1lbnQuZ2VvbWV0cnkoKTsKKyAgICAgICAgZWxlbWVudCA9
IGVsZW1lbnQucGFyZW50KCk7CisgICAgfQorICAgIHJldHVybiBoaXRSZWN0OworfQorCisvKiEK
KyAgICBcaW50ZXJuYWwKKyAgICBcY2xhc3MgUURlY2xhcmF0aXZlV2ViUGFnZQorICAgIFxicmll
ZiBUaGUgUURlY2xhcmF0aXZlV2ViUGFnZSBjbGFzcyBpcyBhIFFXZWJQYWdlIHRoYXQgY2FuIGNy
ZWF0ZSBRTUwgcGx1Z2lucy4KKworICAgIFxzYSBRRGVjbGFyYXRpdmVXZWJWaWV3CisqLworUURl
Y2xhcmF0aXZlV2ViUGFnZTo6UURlY2xhcmF0aXZlV2ViUGFnZShRRGVjbGFyYXRpdmVXZWJWaWV3
KiBwYXJlbnQpIDoKKyAgICBRV2ViUGFnZShwYXJlbnQpCit7Cit9CisKK1FEZWNsYXJhdGl2ZVdl
YlBhZ2U6On5RRGVjbGFyYXRpdmVXZWJQYWdlKCkKK3sKK30KKworUVN0cmluZyBRRGVjbGFyYXRp
dmVXZWJQYWdlOjpjaG9vc2VGaWxlKFFXZWJGcmFtZSogb3JpZ2luYXRpbmdGcmFtZSwgY29uc3Qg
UVN0cmluZyYgb2xkRmlsZSkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQor
ICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAgUV9VTlVTRUQob2xkRmlsZSkKKyAg
ICByZXR1cm4gb2xkRmlsZTsKK30KKworLyohCisgICAgXHFtbHNpZ25hbCBXZWJWaWV3OjphbGVy
dChtZXNzYWdlKQorCisgICAgVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB3ZWIgZW5n
aW5lIHNlbmRzIGEgSmF2YVNjcmlwdCBhbGVydC4gVGhlIFxhIG1lc3NhZ2UgaXMgdGhlIHRleHQK
KyAgICB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGFsZXJ0IHRvIHRoZSB1c2VyLgorKi8KKworCit2
b2lkIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmphdmFTY3JpcHRBbGVydChRV2ViRnJhbWUqIG9yaWdp
bmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sKKyAgICBRX1VOVVNFRChvcmlnaW5h
dGluZ0ZyYW1lKQorICAgIGVtaXQgdmlld0l0ZW0oKS0+YWxlcnQobXNnKTsKK30KKworYm9vbCBR
RGVjbGFyYXRpdmVXZWJQYWdlOjpqYXZhU2NyaXB0Q29uZmlybShRV2ViRnJhbWUqIG9yaWdpbmF0
aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG1zZykKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIChp
dCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0aW5nRnJhbWUpCisgICAgUV9VTlVTRUQo
bXNnKQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBRRGVjbGFyYXRpdmVXZWJQYWdlOjpq
YXZhU2NyaXB0UHJvbXB0KFFXZWJGcmFtZSogb3JpZ2luYXRpbmdGcmFtZSwgY29uc3QgUVN0cmlu
ZyYgbXNnLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFFTdHJpbmcqIHJlc3VsdCkKK3sK
KyAgICAvLyBOb3Qgc3VwcG9ydGVkIChpdCdzIG1vZGFsKQorICAgIFFfVU5VU0VEKG9yaWdpbmF0
aW5nRnJhbWUpCisgICAgUV9VTlVTRUQobXNnKQorICAgIFFfVU5VU0VEKGRlZmF1bHRWYWx1ZSkK
KyAgICBRX1VOVVNFRChyZXN1bHQpCisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK1FEZWNsYXJh
dGl2ZVdlYlZpZXcqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OnZpZXdJdGVtKCkKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UURlY2xhcmF0aXZlV2ViVmlldyo+KHBhcmVudCgpKTsKK30KKworUVdl
YlBhZ2UqIFFEZWNsYXJhdGl2ZVdlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhXZWJXaW5kb3dUeXBlIHR5
cGUpCit7CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyogbmV3VmlldyA9IHZpZXdJdGVtKCktPmNy
ZWF0ZVdpbmRvdyh0eXBlKTsKKyAgICBpZiAobmV3VmlldykKKyAgICAgICAgcmV0dXJuIG5ld1Zp
ZXctPnBhZ2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworUVRfRU5EX05BTUVTUEFDRQorCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19wLmggYi9X
ZWJLaXQvcXQvZGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZld2Vidmlld19wLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjYTk2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9xdC9kZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmV3ZWJ2aWV3X3AuaApAQCAtMCwwICsxLDM2NyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaWZuZGVmIHFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9o
CisjZGVmaW5lIHFkZWNsYXJhdGl2ZXdlYnZpZXdfcF9oCisKKyNpbmNsdWRlIDxRdENvcmUvUUJh
c2ljVGltZXI+CisjaW5jbHVkZSA8UXRDb3JlL1FVcmw+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZS9RRGVjbGFyYXRpdmVJdGVtPgorI2luY2x1ZGUgPFF0R3VpL1FBY3Rpb24+CisjaW5jbHVkZSA8
UXROZXR3b3JrL1FOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRlIDxRdFdlYktpdC9RR3Jh
cGhpY3NXZWJWaWV3PgorI2luY2x1ZGUgPFF0V2ViS2l0L1FXZWJQYWdlPgorCisKK1FUX0JFR0lO
X0hFQURFUgorCitjbGFzcyBRV2ViSGlzdG9yeTsKK2NsYXNzIFFXZWJTZXR0aW5nczsKKworUVRf
QkVHSU5fTkFNRVNQQUNFCisKK1FUX01PRFVMRShEZWNsYXJhdGl2ZSkKK2NsYXNzIFFEZWNsYXJh
dGl2ZVdlYlNldHRpbmdzOworY2xhc3MgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGU7CitjbGFz
cyBRTmV0d29ya1JlcXVlc3Q7CitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3OworY2xhc3MgUURl
Y2xhcmF0aXZlV2ViVmlld1ByaXZhdGU7CisKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlBhZ2UgOiBw
dWJsaWMgUVdlYlBhZ2UgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgZXhwbGljaXQgUURl
Y2xhcmF0aXZlV2ViUGFnZShRRGVjbGFyYXRpdmVXZWJWaWV3ICpwYXJlbnQpOworICAgIH5RRGVj
bGFyYXRpdmVXZWJQYWdlKCk7Citwcm90ZWN0ZWQ6CisgICAgUVdlYlBhZ2UgKmNyZWF0ZVdpbmRv
dyhXZWJXaW5kb3dUeXBlIHR5cGUpOworICAgIFFTdHJpbmcgY2hvb3NlRmlsZShRV2ViRnJhbWUg
Km9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG9sZEZpbGUpOworICAgIHZvaWQgamF2
YVNjcmlwdEFsZXJ0KFFXZWJGcmFtZSAqb3JpZ2luYXRpbmdGcmFtZSwgY29uc3QgUVN0cmluZyYg
bXNnKTsKKyAgICBib29sIGphdmFTY3JpcHRDb25maXJtKFFXZWJGcmFtZSAqb3JpZ2luYXRpbmdG
cmFtZSwgY29uc3QgUVN0cmluZyYgbXNnKTsKKyAgICBib29sIGphdmFTY3JpcHRQcm9tcHQoUVdl
YkZyYW1lICpvcmlnaW5hdGluZ0ZyYW1lLCBjb25zdCBRU3RyaW5nJiBtc2csIGNvbnN0IFFTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgUVN0cmluZyogcmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBRRGVj
bGFyYXRpdmVXZWJWaWV3ICp2aWV3SXRlbSgpOworfTsKKworY2xhc3MgR3JhcGhpY3NXZWJWaWV3
IDogcHVibGljIFFHcmFwaGljc1dlYlZpZXcgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAg
R3JhcGhpY3NXZWJWaWV3KFFEZWNsYXJhdGl2ZVdlYlZpZXcqIHBhcmVudCA9IDApOworcHJvdGVj
dGVkOgorICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCog
ZXZlbnQpOworICAgIHZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUUdyYXBoaWNzU2NlbmVNb3VzZUV2
ZW50KiBldmVudCk7CisgICAgdm9pZCBtb3VzZU1vdmVFdmVudChRR3JhcGhpY3NTY2VuZU1vdXNl
RXZlbnQqIGV2ZW50KTsKKyAgICB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChRR3JhcGhpY3NT
Y2VuZU1vdXNlRXZlbnQgKmV2ZW50KTsKKyAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQq
IGV2ZW50KTsKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGRvdWJsZUNsaWNrKGludCBjbGlja1gsIGlu
dCBjbGlja1kpOworcHJpdmF0ZToKKyAgICBRRGVjbGFyYXRpdmVXZWJWaWV3ICpwYXJlbnQ7Cisg
ICAgUVBvaW50RiBwcmVzc1BvaW50OworICAgIFFCYXNpY1RpbWVyIHByZXNzVGltZXI7CisgICAg
aW50IHByZXNzVGltZTsgLy8gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgdG91Y2ggZXZlbnQgYmVj
b21lcyBhICJ0YXAgYW5kIGhvbGQiCisgICAgZnJpZW5kIGNsYXNzIFFEZWNsYXJhdGl2ZVdlYlZp
ZXc7Cit9OworCitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3QXR0YWNoZWQ7CisKKy8vIFRPRE86
IGJyb3dzZXIgcGx1Z2lucworCitjbGFzcyBRRGVjbGFyYXRpdmVXZWJWaWV3IDogcHVibGljIFFE
ZWNsYXJhdGl2ZUl0ZW0geworICAgIFFfT0JKRUNUCisKKyAgICBRX0VOVU1TKFN0YXR1cyBTZWxl
Y3Rpb25Nb2RlKQorCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQgdGl0bGUgTk9U
SUZZIHRpdGxlQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFQaXhtYXAgaWNvbiBSRUFEIGljb24g
Tk9USUZZIGljb25DaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBzdGF0dXNUZXh0IFJF
QUQgc3RhdHVzVGV4dCBOT1RJRlkgc3RhdHVzVGV4dENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZ
KFFTdHJpbmcgaHRtbCBSRUFEIGh0bWwgV1JJVEUgc2V0SHRtbCBOT1RJRlkgaHRtbENoYW5nZWQp
CisKKyAgICBRX1BST1BFUlRZKGludCBwcmVzc0dyYWJUaW1lIFJFQUQgcHJlc3NHcmFiVGltZSBX
UklURSBzZXRQcmVzc0dyYWJUaW1lIE5PVElGWSBwcmVzc0dyYWJUaW1lQ2hhbmdlZCkKKworICAg
IFFfUFJPUEVSVFkoaW50IHByZWZlcnJlZFdpZHRoIFJFQUQgcHJlZmVycmVkV2lkdGggV1JJVEUg
c2V0UHJlZmVycmVkV2lkdGggTk9USUZZIHByZWZlcnJlZFdpZHRoQ2hhbmdlZCkKKyAgICBRX1BS
T1BFUlRZKGludCBwcmVmZXJyZWRIZWlnaHQgUkVBRCBwcmVmZXJyZWRIZWlnaHQgV1JJVEUgc2V0
UHJlZmVycmVkSGVpZ2h0IE5PVElGWSBwcmVmZXJyZWRIZWlnaHRDaGFuZ2VkKQorICAgIFFfUFJP
UEVSVFkoUVVybCB1cmwgUkVBRCB1cmwgV1JJVEUgc2V0VXJsIE5PVElGWSB1cmxDaGFuZ2VkKQor
ICAgIFFfUFJPUEVSVFkocXJlYWwgcHJvZ3Jlc3MgUkVBRCBwcm9ncmVzcyBOT1RJRlkgcHJvZ3Jl
c3NDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoU3RhdHVzIHN0YXR1cyBSRUFEIHN0YXR1cyBOT1RJ
Rlkgc3RhdHVzQ2hhbmdlZCkKKworICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogcmVsb2FkIFJFQUQg
cmVsb2FkQWN0aW9uIENPTlNUQU5UKQorICAgIFFfUFJPUEVSVFkoUUFjdGlvbiogYmFjayBSRUFE
IGJhY2tBY3Rpb24gQ09OU1RBTlQpCisgICAgUV9QUk9QRVJUWShRQWN0aW9uKiBmb3J3YXJkIFJF
QUQgZm9yd2FyZEFjdGlvbiBDT05TVEFOVCkKKyAgICBRX1BST1BFUlRZKFFBY3Rpb24qIHN0b3Ag
UkVBRCBzdG9wQWN0aW9uIENPTlNUQU5UKQorCisgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVX
ZWJTZXR0aW5ncyogc2V0dGluZ3MgUkVBRCBzZXR0aW5nc09iamVjdCBDT05TVEFOVCkKKworICAg
IFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGphdmFTY3JpcHRX
aW5kb3dPYmplY3RzIFJFQUQgamF2YVNjcmlwdFdpbmRvd09iamVjdHMgQ09OU1RBTlQpCisKKyAg
ICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogbmV3V2luZG93Q29tcG9uZW50IFJF
QUQgbmV3V2luZG93Q29tcG9uZW50IFdSSVRFIHNldE5ld1dpbmRvd0NvbXBvbmVudCBOT1RJRlkg
bmV3V2luZG93Q29tcG9uZW50Q2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUl0
ZW0qIG5ld1dpbmRvd1BhcmVudCBSRUFEIG5ld1dpbmRvd1BhcmVudCBXUklURSBzZXROZXdXaW5k
b3dQYXJlbnQgTk9USUZZIG5ld1dpbmRvd1BhcmVudENoYW5nZWQpCisKKyAgICBRX1BST1BFUlRZ
KGJvb2wgcmVuZGVyaW5nRW5hYmxlZCBSRUFEIHJlbmRlcmluZ0VuYWJsZWQgV1JJVEUgc2V0UmVu
ZGVyaW5nRW5hYmxlZCBOT1RJRlkgcmVuZGVyaW5nRW5hYmxlZENoYW5nZWQpCisKKyAgICBRX1BS
T1BFUlRZKFFTaXplIGNvbnRlbnRzU2l6ZSBSRUFEIGNvbnRlbnRzU2l6ZSBOT1RJRlkgY29udGVu
dHNTaXplQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKHFyZWFsIGNvbnRlbnRzU2NhbGUgUkVBRCBj
b250ZW50c1NjYWxlIFdSSVRFIHNldENvbnRlbnRzU2NhbGUgTk9USUZZIGNvbnRlbnRzU2NhbGVD
aGFuZ2VkKQorCitwdWJsaWM6CisgICAgUURlY2xhcmF0aXZlV2ViVmlldyhRRGVjbGFyYXRpdmVJ
dGVtICpwYXJlbnQgPSAwKTsKKyAgICB+UURlY2xhcmF0aXZlV2ViVmlldygpOworCisgICAgUVVy
bCB1cmwoKSBjb25zdDsKKyAgICB2b2lkIHNldFVybChjb25zdCBRVXJsICYpOworCisgICAgUVN0
cmluZyB0aXRsZSgpIGNvbnN0OworCisgICAgUVBpeG1hcCBpY29uKCkgY29uc3Q7CisKKyAgICBR
X0lOVk9LQUJMRSBib29sIGhldXJpc3RpY1pvb20oaW50IGNsaWNrWCwgaW50IGNsaWNrWSwgcXJl
YWwgbWF4em9vbSk7CisgICAgUVJlY3QgZWxlbWVudEFyZWFBdChpbnQgeCwgaW50IHksIGludCBt
aW53aWR0aCwgaW50IG1pbmhlaWdodCkgY29uc3Q7CisKKyAgICBpbnQgcHJlc3NHcmFiVGltZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0UHJlc3NHcmFiVGltZShpbnQpOworCisgICAgaW50IHByZWZl
cnJlZFdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQcmVmZXJyZWRXaWR0aChpbnQpOworICAg
IGludCBwcmVmZXJyZWRIZWlnaHQoKSBjb25zdDsKKyAgICB2b2lkIHNldFByZWZlcnJlZEhlaWdo
dChpbnQpOworCisgICAgZW51bSBTdGF0dXMgeyBOdWxsLCBSZWFkeSwgTG9hZGluZywgRXJyb3Ig
fTsKKyAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3Q7CisgICAgcXJlYWwgcHJvZ3Jlc3MoKSBjb25z
dDsKKyAgICBRU3RyaW5nIHN0YXR1c1RleHQoKSBjb25zdDsKKworICAgIFFBY3Rpb24gKnJlbG9h
ZEFjdGlvbigpIGNvbnN0OworICAgIFFBY3Rpb24gKmJhY2tBY3Rpb24oKSBjb25zdDsKKyAgICBR
QWN0aW9uICpmb3J3YXJkQWN0aW9uKCkgY29uc3Q7CisgICAgUUFjdGlvbiAqc3RvcEFjdGlvbigp
IGNvbnN0OworCisgICAgUVdlYlBhZ2UgKnBhZ2UoKSBjb25zdDsKKyAgICB2b2lkIHNldFBhZ2Uo
UVdlYlBhZ2UgKnBhZ2UpOworCisgICAgdm9pZCBsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAm
cmVxdWVzdCwKKyAgICAgICAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24g
b3BlcmF0aW9uID0gUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb24sCisgICAgICAg
ICAgICAgIGNvbnN0IFFCeXRlQXJyYXkgJmJvZHkgPSBRQnl0ZUFycmF5KCkpOworCisgICAgUVN0
cmluZyBodG1sKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEh0bWwoY29uc3QgUVN0cmluZyAmaHRt
bCwgY29uc3QgUVVybCAmYmFzZVVybCA9IFFVcmwoKSk7CisgICAgdm9pZCBzZXRDb250ZW50KGNv
bnN0IFFCeXRlQXJyYXkgJmRhdGEsIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlID0gUVN0cmluZygp
LCBjb25zdCBRVXJsICZiYXNlVXJsID0gUVVybCgpKTsKKworICAgIFFXZWJIaXN0b3J5KiBoaXN0
b3J5KCkgY29uc3Q7CisgICAgUVdlYlNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0OworICAgIFFE
ZWNsYXJhdGl2ZVdlYlNldHRpbmdzICpzZXR0aW5nc09iamVjdCgpIGNvbnN0OworCisgICAgYm9v
bCByZW5kZXJpbmdFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZW5kZXJpbmdFbmFibGVk
KGJvb2wpOworCisgICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGphdmFTY3Jp
cHRXaW5kb3dPYmplY3RzKCk7CisKKyAgICBzdGF0aWMgUURlY2xhcmF0aXZlV2ViVmlld0F0dGFj
aGVkKiBxbWxBdHRhY2hlZFByb3BlcnRpZXMoUU9iamVjdCopOworCisgICAgUURlY2xhcmF0aXZl
Q29tcG9uZW50ICpuZXdXaW5kb3dDb21wb25lbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldE5ld1dp
bmRvd0NvbXBvbmVudChRRGVjbGFyYXRpdmVDb21wb25lbnQgKm5ld1dpbmRvdyk7CisgICAgUURl
Y2xhcmF0aXZlSXRlbSogbmV3V2luZG93UGFyZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXROZXdX
aW5kb3dQYXJlbnQoUURlY2xhcmF0aXZlSXRlbSogbmV3V2luZG93KTsKKworICAgIGJvb2wgaXND
b21wb25lbnRDb21wbGV0ZVB1YmxpYygpIGNvbnN0IHsgcmV0dXJuIGlzQ29tcG9uZW50Q29tcGxl
dGUoKTsgfQorCisgICAgUVNpemUgY29udGVudHNTaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dENvbnRlbnRzU2NhbGUocXJlYWwgc2NhbGUpOworICAgIHFyZWFsIGNvbnRlbnRzU2NhbGUoKSBj
b25zdDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgcHJlZmVycmVkV2lkdGhDaGFuZ2VkKCk7Cisg
ICAgdm9pZCBwcmVmZXJyZWRIZWlnaHRDaGFuZ2VkKCk7CisgICAgdm9pZCB1cmxDaGFuZ2VkKCk7
CisgICAgdm9pZCBwcm9ncmVzc0NoYW5nZWQoKTsKKyAgICB2b2lkIHN0YXR1c0NoYW5nZWQoU3Rh
dHVzKTsKKyAgICB2b2lkIHRpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJik7CisgICAgdm9pZCBp
Y29uQ2hhbmdlZCgpOworICAgIHZvaWQgc3RhdHVzVGV4dENoYW5nZWQoKTsKKyAgICB2b2lkIGh0
bWxDaGFuZ2VkKCk7CisgICAgdm9pZCBwcmVzc0dyYWJUaW1lQ2hhbmdlZCgpOworICAgIHZvaWQg
bmV3V2luZG93Q29tcG9uZW50Q2hhbmdlZCgpOworICAgIHZvaWQgbmV3V2luZG93UGFyZW50Q2hh
bmdlZCgpOworICAgIHZvaWQgcmVuZGVyaW5nRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lkIGNv
bnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmKTsKKyAgICB2b2lkIGNvbnRlbnRzU2NhbGVD
aGFuZ2VkKCk7CisKKyAgICB2b2lkIGxvYWRTdGFydGVkKCk7CisgICAgdm9pZCBsb2FkRmluaXNo
ZWQoKTsKKyAgICB2b2lkIGxvYWRGYWlsZWQoKTsKKworICAgIHZvaWQgZG91YmxlQ2xpY2soaW50
IGNsaWNrWCwgaW50IGNsaWNrWSk7CisKKyAgICB2b2lkIHpvb21UbyhxcmVhbCB6b29tLCBpbnQg
Y2VudGVyWCwgaW50IGNlbnRlclkpOworCisgICAgdm9pZCBhbGVydChjb25zdCBRU3RyaW5nJiBt
ZXNzYWdlKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgUVZhcmlhbnQgZXZhbHVhdGVKYXZhU2Ny
aXB0KGNvbnN0IFFTdHJpbmcmKTsKKworcHJpdmF0ZSBRX1NMT1RTOgorICAgIHZvaWQgZG9Mb2Fk
U3RhcnRlZCgpOworICAgIHZvaWQgZG9Mb2FkUHJvZ3Jlc3MoaW50IHApOworICAgIHZvaWQgZG9M
b2FkRmluaXNoZWQoYm9vbCBvayk7CisgICAgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFFTdHJp
bmcmKTsKKyAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKTsKKyAgICB2b2lkIHBhZ2VVcmxD
aGFuZ2VkKCk7CisgICAgdm9pZCBpbml0aWFsTGF5b3V0KCk7CisKKyAgICB2b2lkIHVwZGF0ZURl
Y2xhcmF0aXZlV2ViVmlld1NpemUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5n
ZWQoY29uc3QgUVJlY3RGICZuZXdHZW9tZXRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFSZWN0RiAmb2xkR2VvbWV0cnkpOworICAgIFFEZWNsYXJhdGl2ZVdlYlZp
ZXcqIGNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlwZSB0eXBlKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZSgpOworICAgIHZvaWQgaW5pdCgpOworICAg
IHZpcnR1YWwgdm9pZCBjb21wb25lbnRDb21wbGV0ZSgpOworICAgIFFfRElTQUJMRV9DT1BZKFFE
ZWNsYXJhdGl2ZVdlYlZpZXcpCisgICAgUURlY2xhcmF0aXZlV2ViVmlld1ByaXZhdGUqIGQ7Cisg
ICAgUU1vdXNlRXZlbnQqIHNjZW5lTW91c2VFdmVudFRvTW91c2VFdmVudChRR3JhcGhpY3NTY2Vu
ZU1vdXNlRXZlbnQqKTsKKyAgICBRTW91c2VFdmVudCogc2NlbmVIb3Zlck1vdmVFdmVudFRvTW91
c2VFdmVudChRR3JhcGhpY3NTY2VuZUhvdmVyRXZlbnQqKTsKKyAgICBmcmllbmQgY2xhc3MgUURl
Y2xhcmF0aXZlV2ViUGFnZTsKK307CisKK2NsYXNzIFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hl
ZCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoUVN0cmlu
ZyB3aW5kb3dPYmplY3ROYW1lIFJFQUQgd2luZG93T2JqZWN0TmFtZSBXUklURSBzZXRXaW5kb3dP
YmplY3ROYW1lKQorcHVibGljOgorICAgIFFEZWNsYXJhdGl2ZVdlYlZpZXdBdHRhY2hlZChRT2Jq
ZWN0KiBwYXJlbnQpCisgICAgICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgeworICAgIH0KKwor
ICAgIFFTdHJpbmcgd2luZG93T2JqZWN0TmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV93aW5kb3dPYmplY3ROYW1lOworICAgIH0KKworICAgIHZvaWQgc2V0V2luZG93T2JqZWN0
TmFtZShjb25zdCBRU3RyaW5nICZuKQorICAgIHsKKyAgICAgICAgbV93aW5kb3dPYmplY3ROYW1l
ID0gbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUVN0cmluZyBtX3dpbmRvd09iamVjdE5hbWU7
Cit9OworCitjbGFzcyBRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncyA6IHB1YmxpYyBRT2JqZWN0IHsK
KyAgICBRX09CSkVDVAorCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHN0YW5kYXJkRm9udEZhbWls
eSBSRUFEIHN0YW5kYXJkRm9udEZhbWlseSBXUklURSBzZXRTdGFuZGFyZEZvbnRGYW1pbHkpCisg
ICAgUV9QUk9QRVJUWShRU3RyaW5nIGZpeGVkRm9udEZhbWlseSBSRUFEIGZpeGVkRm9udEZhbWls
eSBXUklURSBzZXRGaXhlZEZvbnRGYW1pbHkpCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHNlcmlm
Rm9udEZhbWlseSBSRUFEIHNlcmlmRm9udEZhbWlseSBXUklURSBzZXRTZXJpZkZvbnRGYW1pbHkp
CisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHNhbnNTZXJpZkZvbnRGYW1pbHkgUkVBRCBzYW5zU2Vy
aWZGb250RmFtaWx5IFdSSVRFIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkpCisgICAgUV9QUk9QRVJU
WShRU3RyaW5nIGN1cnNpdmVGb250RmFtaWx5IFJFQUQgY3Vyc2l2ZUZvbnRGYW1pbHkgV1JJVEUg
c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkpCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIGZhbnRhc3lGb250
RmFtaWx5IFJFQUQgZmFudGFzeUZvbnRGYW1pbHkgV1JJVEUgc2V0RmFudGFzeUZvbnRGYW1pbHkp
CisKKyAgICBRX1BST1BFUlRZKGludCBtaW5pbXVtRm9udFNpemUgUkVBRCBtaW5pbXVtRm9udFNp
emUgV1JJVEUgc2V0TWluaW11bUZvbnRTaXplKQorICAgIFFfUFJPUEVSVFkoaW50IG1pbmltdW1M
b2dpY2FsRm9udFNpemUgUkVBRCBtaW5pbXVtTG9naWNhbEZvbnRTaXplIFdSSVRFIHNldE1pbmlt
dW1Mb2dpY2FsRm9udFNpemUpCisgICAgUV9QUk9QRVJUWShpbnQgZGVmYXVsdEZvbnRTaXplIFJF
QUQgZGVmYXVsdEZvbnRTaXplIFdSSVRFIHNldERlZmF1bHRGb250U2l6ZSkKKyAgICBRX1BST1BF
UlRZKGludCBkZWZhdWx0Rml4ZWRGb250U2l6ZSBSRUFEIGRlZmF1bHRGaXhlZEZvbnRTaXplIFdS
SVRFIHNldERlZmF1bHRGaXhlZEZvbnRTaXplKQorCisgICAgUV9QUk9QRVJUWShib29sIGF1dG9M
b2FkSW1hZ2VzIFJFQUQgYXV0b0xvYWRJbWFnZXMgV1JJVEUgc2V0QXV0b0xvYWRJbWFnZXMpCisg
ICAgUV9QUk9QRVJUWShib29sIGphdmFzY3JpcHRFbmFibGVkIFJFQUQgamF2YXNjcmlwdEVuYWJs
ZWQgV1JJVEUgc2V0SmF2YXNjcmlwdEVuYWJsZWQpCisgICAgUV9QUk9QRVJUWShib29sIGphdmFF
bmFibGVkIFJFQUQgamF2YUVuYWJsZWQgV1JJVEUgc2V0SmF2YUVuYWJsZWQpCisgICAgUV9QUk9Q
RVJUWShib29sIHBsdWdpbnNFbmFibGVkIFJFQUQgcGx1Z2luc0VuYWJsZWQgV1JJVEUgc2V0UGx1
Z2luc0VuYWJsZWQpCisgICAgUV9QUk9QRVJUWShib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQg
UkVBRCBwcml2YXRlQnJvd3NpbmdFbmFibGVkIFdSSVRFIHNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQpCisgICAgUV9QUk9QRVJUWShib29sIGphdmFzY3JpcHRDYW5PcGVuV2luZG93cyBSRUFEIGph
dmFzY3JpcHRDYW5PcGVuV2luZG93cyBXUklURSBzZXRKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3Mp
CisgICAgUV9QUk9QRVJUWShib29sIGphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQgUkVBRCBq
YXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkIFdSSVRFIHNldEphdmFzY3JpcHRDYW5BY2Nlc3ND
bGlwYm9hcmQpCisgICAgUV9QUk9QRVJUWShib29sIGRldmVsb3BlckV4dHJhc0VuYWJsZWQgUkVB
RCBkZXZlbG9wZXJFeHRyYXNFbmFibGVkIFdSSVRFIHNldERldmVsb3BlckV4dHJhc0VuYWJsZWQp
CisgICAgUV9QUk9QRVJUWShib29sIGxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4gUkVBRCBsaW5r
c0luY2x1ZGVkSW5Gb2N1c0NoYWluIFdSSVRFIHNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4p
CisgICAgUV9QUk9QRVJUWShib29sIHpvb21UZXh0T25seSBSRUFEIHpvb21UZXh0T25seSBXUklU
RSBzZXRab29tVGV4dE9ubHkpCisgICAgUV9QUk9QRVJUWShib29sIHByaW50RWxlbWVudEJhY2tn
cm91bmRzIFJFQUQgcHJpbnRFbGVtZW50QmFja2dyb3VuZHMgV1JJVEUgc2V0UHJpbnRFbGVtZW50
QmFja2dyb3VuZHMpCisgICAgUV9QUk9QRVJUWShib29sIG9mZmxpbmVTdG9yYWdlRGF0YWJhc2VF
bmFibGVkIFJFQUQgb2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQgV1JJVEUgc2V0T2ZmbGlu
ZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpCisgICAgUV9QUk9QRVJUWShib29sIG9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCBSRUFEIG9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5h
YmxlZCBXUklURSBzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQpCisgICAgUV9Q
Uk9QRVJUWShib29sIGxvY2FsU3RvcmFnZURhdGFiYXNlRW5hYmxlZCBSRUFEIGxvY2FsU3RvcmFn
ZURhdGFiYXNlRW5hYmxlZCBXUklURSBzZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQpCisg
ICAgUV9QUk9QRVJUWShib29sIGxvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMgUkVBRCBs
b2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxzIFdSSVRFIHNldExvY2FsQ29udGVudENhbkFj
Y2Vzc1JlbW90ZVVybHMpCisKK3B1YmxpYzoKKyAgICBRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncygp
IHt9CisKKyAgICBRU3RyaW5nIHN0YW5kYXJkRm9udEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHMt
PmZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpTdGFuZGFyZEZvbnQpOyB9CisgICAgdm9pZCBzZXRT
dGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5KFFX
ZWJTZXR0aW5nczo6U3RhbmRhcmRGb250LCBmKTsgfQorICAgIFFTdHJpbmcgZml4ZWRGb250RmFt
aWx5KCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkZpeGVkRm9u
dCk7IH0KKyAgICB2b2lkIHNldEZpeGVkRm9udEZhbWlseShjb25zdCBRU3RyaW5nJiBmKSB7IHMt
PnNldEZvbnRGYW1pbHkoUVdlYlNldHRpbmdzOjpGaXhlZEZvbnQsIGYpOyB9CisgICAgUVN0cmlu
ZyBzZXJpZkZvbnRGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzLT5mb250RmFtaWx5KFFXZWJTZXR0
aW5nczo6U2VyaWZGb250KTsgfQorICAgIHZvaWQgc2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IFFT
dHJpbmcmIGYpIHsgcy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6OlNlcmlmRm9udCwgZik7
IH0KKyAgICBRU3RyaW5nIHNhbnNTZXJpZkZvbnRGYW1pbHkoKSBjb25zdCB7IHJldHVybiBzLT5m
b250RmFtaWx5KFFXZWJTZXR0aW5nczo6U2Fuc1NlcmlmRm9udCk7IH0KKyAgICB2b2lkIHNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoY29uc3QgUVN0cmluZyYgZikgeyBzLT5zZXRGb250RmFtaWx5KFFX
ZWJTZXR0aW5nczo6U2Fuc1NlcmlmRm9udCwgZik7IH0KKyAgICBRU3RyaW5nIGN1cnNpdmVGb250
RmFtaWx5KCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udEZhbWlseShRV2ViU2V0dGluZ3M6OkN1cnNp
dmVGb250KTsgfQorICAgIHZvaWQgc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3QgUVN0cmluZyYg
ZikgeyBzLT5zZXRGb250RmFtaWx5KFFXZWJTZXR0aW5nczo6Q3Vyc2l2ZUZvbnQsIGYpOyB9Cisg
ICAgUVN0cmluZyBmYW50YXN5Rm9udEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRGYW1p
bHkoUVdlYlNldHRpbmdzOjpGYW50YXN5Rm9udCk7IH0KKyAgICB2b2lkIHNldEZhbnRhc3lGb250
RmFtaWx5KGNvbnN0IFFTdHJpbmcmIGYpIHsgcy0+c2V0Rm9udEZhbWlseShRV2ViU2V0dGluZ3M6
OkZhbnRhc3lGb250LCBmKTsgfQorCisgICAgaW50IG1pbmltdW1Gb250U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHMtPmZvbnRTaXplKFFXZWJTZXR0aW5nczo6TWluaW11bUZvbnRTaXplKTsgfQorICAg
IHZvaWQgc2V0TWluaW11bUZvbnRTaXplKGludCBzaXplKSB7IHMtPnNldEZvbnRTaXplKFFXZWJT
ZXR0aW5nczo6TWluaW11bUZvbnRTaXplLCBzaXplKTsgfQorICAgIGludCBtaW5pbXVtTG9naWNh
bEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gcy0+Zm9udFNpemUoUVdlYlNldHRpbmdzOjpNaW5p
bXVtTG9naWNhbEZvbnRTaXplKTsgfQorICAgIHZvaWQgc2V0TWluaW11bUxvZ2ljYWxGb250U2l6
ZShpbnQgc2l6ZSkgeyBzLT5zZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6Ok1pbmltdW1Mb2dpY2Fs
Rm9udFNpemUsIHNpemUpOyB9CisgICAgaW50IGRlZmF1bHRGb250U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHMtPmZvbnRTaXplKFFXZWJTZXR0aW5nczo6RGVmYXVsdEZvbnRTaXplKTsgfQorICAgIHZv
aWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCBzaXplKSB7IHMtPnNldEZvbnRTaXplKFFXZWJTZXR0
aW5nczo6RGVmYXVsdEZvbnRTaXplLCBzaXplKTsgfQorICAgIGludCBkZWZhdWx0Rml4ZWRGb250
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHMtPmZvbnRTaXplKFFXZWJTZXR0aW5nczo6RGVmYXVsdEZp
eGVkRm9udFNpemUpOyB9CisgICAgdm9pZCBzZXREZWZhdWx0Rml4ZWRGb250U2l6ZShpbnQgc2l6
ZSkgeyBzLT5zZXRGb250U2l6ZShRV2ViU2V0dGluZ3M6OkRlZmF1bHRGaXhlZEZvbnRTaXplLCBz
aXplKTsgfQorCisgICAgYm9vbCBhdXRvTG9hZEltYWdlcygpIGNvbnN0IHsgcmV0dXJuIHMtPnRl
c3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBdXRvTG9hZEltYWdlcyk7IH0KKyAgICB2b2lkIHNl
dEF1dG9Mb2FkSW1hZ2VzKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
QXV0b0xvYWRJbWFnZXMsIG9uKTsgfQorICAgIGJvb2wgamF2YXNjcmlwdEVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdEVuYWJs
ZWQpOyB9CisgICAgdm9pZCBzZXRKYXZhc2NyaXB0RW5hYmxlZChib29sIG9uKSB7IHMtPnNldEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRFbmFibGVkLCBvbik7IH0KKyAgICBib29s
IGphdmFFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkphdmFFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0SmF2YUVuYWJsZWQoYm9vbCBvbikgeyBz
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhRW5hYmxlZCwgb24pOyB9CisgICAgYm9v
bCBwbHVnaW5zRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1dGUoUVdlYlNl
dHRpbmdzOjpQbHVnaW5zRW5hYmxlZCk7IH0KKyAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJv
b2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6UGx1Z2luc0VuYWJsZWQsIG9u
KTsgfQorICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMt
PnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpQcml2YXRlQnJvd3NpbmdFbmFibGVkKTsgfQor
ICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIG9uKSB7IHMtPnNldEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OlByaXZhdGVCcm93c2luZ0VuYWJsZWQsIG9uKTsgfQorICAgIGJv
b2wgamF2YXNjcmlwdENhbk9wZW5XaW5kb3dzKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cyk7IH0KKyAgICB2b2lk
IHNldEphdmFzY3JpcHRDYW5PcGVuV2luZG93cyhib29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5PcGVuV2luZG93cywgb24pOyB9CisgICAgYm9vbCBq
YXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQpOyB9CisgICAg
dm9pZCBzZXRKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgb24pIHsgcy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCwgb24pOyB9
CisgICAgYm9vbCBkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gcy0+dGVz
dEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkRldmVsb3BlckV4dHJhc0VuYWJsZWQpOyB9CisgICAg
dm9pZCBzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRl
KFFXZWJTZXR0aW5nczo6RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCwgb24pOyB9CisgICAgYm9vbCBs
aW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4pOyB9CisgICAgdm9pZCBz
ZXRMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFX
ZWJTZXR0aW5nczo6TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbiwgb24pOyB9CisgICAgYm9vbCB6
b29tVGV4dE9ubHkoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5n
czo6Wm9vbVRleHRPbmx5KTsgfQorICAgIHZvaWQgc2V0Wm9vbVRleHRPbmx5KGJvb2wgb24pIHsg
cy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Wm9vbVRleHRPbmx5LCBvbik7IH0KKyAgICBi
b29sIHByaW50RWxlbWVudEJhY2tncm91bmRzKCkgY29uc3QgeyByZXR1cm4gcy0+dGVzdEF0dHJp
YnV0ZShRV2ViU2V0dGluZ3M6OlByaW50RWxlbWVudEJhY2tncm91bmRzKTsgfQorICAgIHZvaWQg
c2V0UHJpbnRFbGVtZW50QmFja2dyb3VuZHMoYm9vbCBvbikgeyBzLT5zZXRBdHRyaWJ1dGUoUVdl
YlNldHRpbmdzOjpQcmludEVsZW1lbnRCYWNrZ3JvdW5kcywgb24pOyB9CisgICAgYm9vbCBvZmZs
aW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHMtPnRlc3RBdHRyaWJ1
dGUoUVdlYlNldHRpbmdzOjpPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCk7IH0KKyAgICB2
b2lkIHNldE9mZmxpbmVTdG9yYWdlRGF0YWJhc2VFbmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0
cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJsZWQsIG9uKTsg
fQorICAgIGJvb2wgb2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gcy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZCk7IH0KKyAgICB2b2lkIHNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hl
RW5hYmxlZChib29sIG9uKSB7IHMtPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Ok9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCwgb24pOyB9CisgICAgYm9vbCBsb2NhbFN0b3JhZ2VE
YXRhYmFzZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0
aW5nczo6TG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkKTsgfQorICAgIHZvaWQgc2V0TG9jYWxT
dG9yYWdlRGF0YWJhc2VFbmFibGVkKGJvb2wgb24pIHsgcy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0
aW5nczo6TG9jYWxTdG9yYWdlRGF0YWJhc2VFbmFibGVkLCBvbik7IH0KKyAgICBib29sIGxvY2Fs
Q29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMoKSBjb25zdCB7IHJldHVybiBzLT50ZXN0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6TG9jYWxDb250ZW50Q2FuQWNjZXNzUmVtb3RlVXJscyk7IH0KKyAg
ICB2b2lkIHNldExvY2FsQ29udGVudENhbkFjY2Vzc1JlbW90ZVVybHMoYm9vbCBvbikgeyBzLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMb2NhbENvbnRlbnRDYW5BY2Nlc3NSZW1vdGVVcmxz
LCBvbik7IH0KKworICAgIFFXZWJTZXR0aW5ncyAqczsKK307CisKK1FUX0VORF9OQU1FU1BBQ0UK
KworUU1MX0RFQ0xBUkVfVFlQRShRRGVjbGFyYXRpdmVXZWJWaWV3KQorUU1MX0RFQ0xBUkVfVFlQ
RShRRGVjbGFyYXRpdmVXZWJTZXR0aW5ncykKK1FNTF9ERUNMQVJFX1RZUEVJTkZPKFFEZWNsYXJh
dGl2ZVdlYlZpZXcsIFFNTF9IQVNfQVRUQUNIRURfUFJPUEVSVElFUykKKworUVRfRU5EX0hFQURF
UgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9xbWxkaXIgYi9X
ZWJLaXQvcXQvZGVjbGFyYXRpdmUvcW1sZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmRjZmRkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvZGVjbGFyYXRpdmUv
cW1sZGlyCkBAIC0wLDAgKzEgQEAKK3BsdWdpbiBxbWx3ZWJraXRwbHVnaW4KZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9kb2NzL3F0d2Via2l0LnFkb2Njb25mIGIvV2ViS2l0L3F0L2RvY3MvcXR3ZWJr
aXQucWRvY2NvbmYKaW5kZXggMjkyYzEyNC4uNWY4NzdjMiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L2RvY3MvcXR3ZWJraXQucWRvY2NvbmYKKysrIGIvV2ViS2l0L3F0L2RvY3MvcXR3ZWJraXQucWRv
Y2NvbmYKQEAgLTMsOCArMyw4IEBACiBwcm9qZWN0ICAgICA9IHF0d2Via2l0CiBkZXNjcmlwdGlv
biA9ICJRdCBXZWJLaXQgQVBJIERvY3VtZW50YXRpb24iCiAKLWhlYWRlcmRpcnMgPSAkU1JDRElS
L1dlYktpdC9xdC9BcGkKLXNvdXJjZWRpcnMgPSAkU1JDRElSL1dlYktpdC9xdC9BcGkgJFNSQ0RJ
Ui9XZWJLaXQvcXQvZG9jcyAkU1JDRElSL0phdmFTY3JpcHRDb3JlL3F0L2FwaQoraGVhZGVyZGly
cyA9ICRTUkNESVIvV2ViS2l0L3F0L0FwaSAkU1JDRElSL1dlYktpdC9xdC9kZWNsYXJhdGl2ZQor
c291cmNlZGlycyA9ICRTUkNESVIvV2ViS2l0L3F0L0FwaSAkU1JDRElSL1dlYktpdC9xdC9kb2Nz
ICRTUkNESVIvSmF2YVNjcmlwdENvcmUvcXQvYXBpICRTUkNESVIvV2ViS2l0L3F0L2RlY2xhcmF0
aXZlCiBvdXRwdXRkaXIgPSAkT1VUUFVUX0RJUi9kb2MvaHRtbAogb3V0cHV0Zm9ybWF0cyA9IEhU
TUwKIHNvdXJjZXMuZmlsZWV4dGVuc2lvbnMgID0gIiouY3BwICouZG9jICoucWRvYyAqLmgiCg==
</data>
<flag name="review"
          id="45565"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>