<?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>18831</bug_id>
          
          <creation_ts>2008-05-01 12:57:56 -0700</creation_ts>
          <short_desc>[GTK] support windowless plugins</short_desc>
          <delta_ts>2010-02-04 11:28:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.communitymx.com/content/source/E5141/wmodetrans.htm</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Otte">otte</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alex.hunziker</cc>
    
    <cc>alp</cc>
    
    <cc>barbieri</cc>
    
    <cc>bjt23</cc>
    
    <cc>bugzilla</cc>
    
    <cc>c.nicolas</cc>
    
    <cc>commit-queue</cc>
    
    <cc>girish</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jakub.rusinek</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>jonathon</cc>
    
    <cc>kenneth</cc>
    
    <cc>marc.ordinasillopis</cc>
    
    <cc>mark.renouf</cc>
    
    <cc>me</cc>
    
    <cc>reinouts</cc>
    
    <cc>s.mathur</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>toshok</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wired</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>79378</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Otte">otte</who>
    <bug_when>2008-05-01 12:57:56 -0700</bug_when>
    <thetext>Firefox 3 NPAPI implements windowless plugin support. This is required to support transparent plugins and (at least for Mozilla) respect stacking order in a web page. Webkit should support it, too.
See https://bugzilla.mozilla.org/show_bug.cgi?id=137189 for the corresponding Mozilla bug. The only plugin supporting it so far is the Swfdec-Mozilla plugin in it&apos;s development version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79451</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Toshok">toshok</who>
    <bug_when>2008-05-02 10:38:31 -0700</bug_when>
    <thetext>Moonlight also supports it, although at the moment it&apos;s rather firefox dependent (that should change in the next couple of days, though).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118501</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Renouf">mark.renouf</who>
    <bug_when>2009-04-23 09:07:08 -0700</bug_when>
    <thetext>Flash 10 for Linux supports this (since July 2008, see: http://blogs.adobe.com/penguin.swf/2008/07/turkish_localization_also_wmod.html).

Any progress on this? I&apos;m kind of surprised this isn&apos;t supported. Is it a Gtk thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147518</commentid>
    <comment_count>3</comment_count>
    <who name="Bastien Nocera">bugzilla</who>
    <bug_when>2009-09-16 06:26:24 -0700</bug_when>
    <thetext>*** Bug 29297 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147519</commentid>
    <comment_count>4</comment_count>
    <who name="Bastien Nocera">bugzilla</who>
    <bug_when>2009-09-16 06:27:52 -0700</bug_when>
    <thetext>Breaks layering as seen in bug 29297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159219</commentid>
    <comment_count>5</comment_count>
      <attachid>42175</attachid>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-10-29 21:46:26 -0700</bug_when>
    <thetext>Created attachment 42175
First mostly-broken patch

Ok, so I &quot;implemented&quot; windowless mode by merging in much of the Qt code to support this, and modifying it for gtk/gdk.  It doesn&apos;t really work so well.  This is my first foray into WebKit&apos;s code, so to be honest I don&apos;t really know what I&apos;m doing.

For windowless plugins, it creates an offscreen X Pixmap and passes that to the plugin to draw on.  There are currently a few problems:

1.  The positioning of the plugin&apos;s contents (the XCopyArea() in PluginView::paint()) is wrong when the page is scrolled to something other than the origin.

2.  There are repaint/invalidation problems: sometimes areas don&apos;t get repainted, some areas seem to not get painted over when they should.

3.  Input handling is pretty messed up, probably at least partly related to #1.

4.  I&apos;m not sure how to implement the difference between the transparent and opaque windowless modes (an XClearArea() before the XCopyArea() doesn&apos;t seem to work, but that&apos;s probably because of my other painting issues, and is likely sub-optimal anyway).

Any hints or guidance would be greatly appreciated.

Note:  I&apos;m using this page:

http://www.communitymx.com/content/source/E5141/wmodenone.htm

as a nice test case.  The URL above is for windowed mode, and there are links to the right to pages for wmode=transparent and wmode=opaque.  To see the placement problem when the view is scrolled, the stock price chart view on finance.yahoo.com works well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159295</commentid>
    <comment_count>6</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2009-10-30 05:24:47 -0700</bug_when>
    <thetext>cc&apos;ing girish, who implement this support for the qt port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159300</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Renouf">mark.renouf</who>
    <bug_when>2009-10-30 06:19:44 -0700</bug_when>
    <thetext>Much appreciated! I will poke at this tomorrow and give you some feedback. You have a better handle on it than I do.

One thing to think about is performance, and whether this can be accelerated in any way (compositing?). I know windowless mode on FF/Linux is really resource intensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159308</commentid>
    <comment_count>8</comment_count>
    <who name="Bastien Nocera">bugzilla</who>
    <bug_when>2009-10-30 06:42:07 -0700</bug_when>
    <thetext>Using client-side windows in the latest GTK+ should allow you to do this without doing the double-buffering yourself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159534</commentid>
    <comment_count>9</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-10-30 19:08:21 -0700</bug_when>
    <thetext>Ok, I figured out (one of) the problems with my first patch: a stupid typo
exchanging an x coordinate for a y coordinate.

I&apos;ve also switched to using cairo instead of gdk to do the drawing.  There are
still some problems (wmode=transparent has some drawing issues, though =opaque works fine), but it&apos;s pretty decent now.

I&apos;ll clean up and attach the patch in a bit.

Not sure about the approach of using client-side windows, especially since we don&apos;t know what toolkit the plugin is using (and we need to pass an X Drawable for the plugin to draw on).  Now that I look at them after the fact, the NPAPI docs on developer.mozilla.org actually specifically say to use an X pixmap for the plugin&apos;s drawing surface.  Not sure if that&apos;s normative or just informative, though.

Mark, not sure about performance... &quot;unfortunately&quot; I have a pretty speedy dual-core machine, so I wouldn&apos;t notice a slowdown without some benchmarking.  It looks *really* nice right now to me, anyway... no noticeable difference from windowed mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159538</commentid>
    <comment_count>10</comment_count>
      <attachid>42247</attachid>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-10-30 20:10:15 -0700</bug_when>
    <thetext>Created attachment 42247
Second mostly-working patch

Ok, this one&apos;s a bit better.

wmode=opaque appears to work perfectly.

wmode=transparent works, but the background doesn&apos;t appear to get painted, and I&apos;m not sure what to do about that.

The input handling code works, but could probably stand to be cleaned up a bit.

On a semi-related note, PluginView.cpp defaults m_isTransparent to false.  Mozilla&apos;s NPAPI docs say that the default for windowless plugins should be transparent.  Maybe this should be changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159711</commentid>
    <comment_count>11</comment_count>
      <attachid>42247</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-01 19:24:06 -0800</bug_when>
    <thetext>Comment on attachment 42247
Second mostly-working patch


&gt; -#if defined(Q_WS_X11) &amp;&amp; ENABLE(NETSCAPE_PLUGIN_API)
&gt; +#if (defined(XP_UNIX) || defined(Q_WS_X11)) &amp;&amp; ENABLE(NETSCAPE_PLUGIN_API)

You can simplify this condition by replacing the use of Q_WS_X11 with XP_UNIX.

Given the existance of platforms like Qt for Embedded Linux or Android that are Unixy without X-Windows, XP_UNIX becomes a confusing term
as it really means a Unix platform that uses X-Windows. But for now XP_UNIX is the right one to use I would say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159730</commentid>
    <comment_count>12</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-11-01 20:57:28 -0800</bug_when>
    <thetext>The XSync&apos;s are not required. They are in the Qt code only because Flash and Qt use different connections. I guess this is not the case with the GTK/WebKit?

Also, you might want to test the testcases in WebCore/manual-tests/plugins/windowless.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159758</commentid>
    <comment_count>13</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-02 00:59:55 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; The XSync&apos;s are not required. They are in the Qt code only because Flash and Qt
&gt; use different connections. I guess this is not the case with the GTK/WebKit?

Hmm, I don&apos;t think we can guarantee that in general.  Plugins need not use gtk, meaning they&apos;d have their own X server connection.  I&apos;m not sure if it&apos;s possible to actually find out if they&apos;re using the same connection, though.

&gt; Also, you might want to test the testcases in
&gt; WebCore/manual-tests/plugins/windowless.html.

Ah, great, I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159948</commentid>
    <comment_count>14</comment_count>
      <attachid>42350</attachid>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-02 16:52:35 -0800</bug_when>
    <thetext>Created attachment 42350
Take 3, mostly working

Ok, here&apos;s v3.  Changes from v2:

* Replace preprocessor checks for (XP_UNIX || Q_WS_X11) with just XP_UNIX, and ifdef out a few more sections that should be XP_UNIX only.
* Copy from gdk&apos;s backing store to fix transparent windowless mode for plugins that use a visual that doesn&apos;t include an alpha channel.
* Use the qt backend&apos;s method of figuring out the colormap/visual to use for the plugin&apos;s backing pixmap.

I left the XSync() stuff in for now, though as it stands it&apos;ll never get called during paint (since m_pluginDisplay == GDK_DISPLAY() always).  It might be useful later, or possibly it could get put into common code with the qt port.  In that vein, there are probably some things that could be made more generic and be shared with the qt port (like the visual/cmap selection code).

I ran the windowless plugin test page included in the webkit source, and it sorta works.  At least, it works just as well as the qt backend does: move is broken (old plugin location doesn&apos;t get invalidated, new location doesn&apos;t get repainted unless the plugin&apos;s contents change), animate is broken (plugin area picks up some text from outside the plugin area, other drawing issues).  But these problems are common to both the qt backend and my new gtk backend code.  I&apos;m not yet sure if they&apos;re issues with the plugin backends, or need to be fixed in common code -- maybe both.

Anyhow, it&apos;s working decently well now.  I think I might be able to at least work on fixing the animation stuff, but I&apos;m not sure how much more time I&apos;ll have to dedicate to fixing other issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159999</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Otte">otte</who>
    <bug_when>2009-11-02 23:50:35 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; * Copy from gdk&apos;s backing store to fix transparent windowless mode for plugins
&gt; that use a visual that doesn&apos;t include an alpha channel.
&gt; 
This sentence reminded me of https://bugzilla.mozilla.org/show_bug.cgi?id=445250 - that bug includes some testcases that you might wanna check if you haven&apos;t yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160122</commentid>
    <comment_count>16</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-03 10:39:54 -0800</bug_when>
    <thetext>Unless I&apos;m missing something, the moonlight guys only provide an XPI for Firefox.  I tried extracting the files and putting the .so files in /usr/lib/mozilla/plugins, but it doesn&apos;t appear to work.  I just get errors on console about it being unable to probe for browser type (despite the fact that my user agent string has &quot;AppleWebKit&quot; in it).  It also complains about failign to load libmoonplugin-webkitbridge.so (so I guess it *is* figuring out my platform?), which isn&apos;t included in the XPI anyway.

I didn&apos;t see references in that bug to any other test cases, aside from the communitymx.com one I&apos;ve been using.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160143</commentid>
    <comment_count>17</comment_count>
    <who name="Benjamin Otte">otte</who>
    <bug_when>2009-11-03 11:20:28 -0800</bug_when>
    <thetext>I think the difference is that https://bugzilla.mozilla.org/attachment.cgi?id=329591 uses &quot;style { opacity: 0.5 }&quot; on the div containing the flash, and the default communitymx page doesn&apos;t do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160166</commentid>
    <comment_count>18</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-03 12:28:45 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; I think the difference is that
&gt; https://bugzilla.mozilla.org/attachment.cgi?id=329591 uses &quot;style { opacity:
&gt; 0.5 }&quot; on the div containing the flash, and the default communitymx page
&gt; doesn&apos;t do that.

Ah, I see.  Well, from that it looks like Firefox is broken there: I can only see the bouncing ball when it&apos;s in the top left corner of the plugin window.  WebKit with my patch works great: I can see the purple star, and the ball moves around on top of it, but semi-transparent such that you can see the star underneath it as it moves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160222</commentid>
    <comment_count>19</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-11-03 14:48:58 -0800</bug_when>
    <thetext>Hey, awesome to see work on this! To draw official reviewers atention you should set the review flag to ? when submitting a patch, since we check the review queue from time to time! =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161044</commentid>
    <comment_count>20</comment_count>
      <attachid>42620</attachid>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-05 19:15:14 -0800</bug_when>
    <thetext>Created attachment 42620
gtk windowless v4

Changes from last patch:

* If needed, set the GdkColormap on the plugin&apos;s GdkPixmap wrapper (necessary if the plugin does not use gtk).
* Don&apos;t bail on visual/colormap selection if xrender&gt;=0.5 isn&apos;t found unless depth is also 32.
* Add ChangeLog entry.

I&apos;m feeling decently good about this.  It&apos;s not perfect, but it seems to work at least as well as the windowless support for Qt.  I&apos;d like to get at least this much checked in if possible and then handle fixes/improvements as they become necessary.

There&apos;s also some work that can be done to avoid some code duplication between the Qt and gtk backends for this, which is probably best done in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161572</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-11-09 07:51:40 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=42620) [details]
&gt; gtk windowless v4
&gt; 
&gt; Changes from last patch:
&gt; 
&gt; * If needed, set the GdkColormap on the plugin&apos;s GdkPixmap wrapper (necessary
&gt; if the plugin does not use gtk).
&gt; * Don&apos;t bail on visual/colormap selection if xrender&gt;=0.5 isn&apos;t found unless
&gt; depth is also 32.
&gt; * Add ChangeLog entry.
&gt; 
&gt; I&apos;m feeling decently good about this.  It&apos;s not perfect, but it seems to work
&gt; at least as well as the windowless support for Qt.  I&apos;d like to get at least
&gt; this much checked in if possible and then handle fixes/improvements as they
&gt; become necessary.
&gt; 
&gt; There&apos;s also some work that can be done to avoid some code duplication between
&gt; the Qt and gtk backends for this, which is probably best done in a future
&gt; patch.

The patch looks good to me, knowing that you will work further on it. It has some coding style violations thought:

+        GtkWidget *widget = m_parentFrame-&gt;view()-&gt;hostWindow()-&gt;platformPageClient();
+        GdkDrawable *gdkBackingStore = NULL;


please run the check-webkit-style script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161642</commentid>
    <comment_count>22</comment_count>
      <attachid>42765</attachid>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-09 10:47:34 -0800</bug_when>
    <thetext>Created attachment 42765
gtk windowless v5

Same as v4 patch, but  with coding style fixes.

Odd, check-webkit-style --git-commit=... --verbose=5 didn&apos;t pick anything up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161985</commentid>
    <comment_count>23</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-11-10 01:20:41 -0800</bug_when>
    <thetext>Looks good to me.

You might also be interested in subscribing to 31232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161999</commentid>
    <comment_count>24</comment_count>
      <attachid>42765</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-11-10 03:02:33 -0800</bug_when>
    <thetext>Comment on attachment 42765
gtk windowless v5

&gt; -#if defined(XP_UNIX) || defined(Q_WS_X11)
&gt; +#if defined(XP_UNIX)
&gt;          bool m_needsXEmbed;
&gt;  #endif

I am wondering about these instances of this change in which we used to have both XP_UNIX, and Q_WS_X11. I wonder if the Qt people had a reason for this? Kenneth? Girish? =)
  
&gt;  #include &lt;gdk/gdkx.h&gt;
&gt; +#define Bool int
&gt; +#define Status int
&gt; +#include &lt;X11/extensions/Xrender.h&gt;

What are these for?

&gt; +
&gt; +    //if (m_windowRect == oldWindowRect &amp;&amp; m_clipRect == oldClipRect)
&gt; +    //    return;
&gt; +

We don&apos;t usually accept commented code into the tree, unless we plan to enable it soon, but then it would need a comment with a TODO mark.

&gt; +#if defined(XP_UNIX)
&gt; +    if (!m_isWindowed &amp;&amp; m_windowRect.size() != oldWindowRect.size()) {
&gt; +        GtkWidget* parentWindow = m_parentFrame-&gt;view()-&gt;hostWindow()-&gt;platformPageClient();

We usually only initialize variables when they are first used, so I suggest moving this to just before XCreatePixmap, or you may consider losing the variable. It will make the line a bit longer, but not too long for WebKit&apos;s standards.

&gt; +        if (m_drawable)
&gt; +            XFreePixmap(GDK_DISPLAY(), m_drawable);
&gt; +
&gt; +        m_drawable = XCreatePixmap(GDK_DISPLAY(), GDK_DRAWABLE_XID(parentWindow-&gt;window),
&gt; +                                   m_windowRect.width(), m_windowRect.height(),
&gt; +                                   ((NPSetWindowCallbackStruct*)m_npWindow.ws_info)-&gt;depth);
&gt; +        XSync(GDK_DISPLAY(), False); // make sure that the server knows about the Drawable
&gt; +    }

Excuse my ignorance of X programming, but why do we need a sync here?

&gt; +    // in order to move/resize the plugin window at the same time as the

A nit - use a capital I there =).

&gt; +        if (gdkBackingStore) {
&gt; +            XCopyArea(GDK_DISPLAY(), GDK_DRAWABLE_XID(gdkBackingStore), m_drawable, gc,
&gt; +                      m_windowRect.x() + exposedRect.x() - xoff,
&gt; +                      m_windowRect.y() + exposedRect.y() - yoff,
&gt; +                      exposedRect.width(), exposedRect.height(),
&gt; +                      exposedRect.x(), exposedRect.y());
&gt; +        } else {
&gt; +            // no valid backing store; clear to the background color
&gt; +            XFillRectangle(GDK_DISPLAY(), m_drawable, gc,
&gt; +                           exposedRect.x(), exposedRect.y(),
&gt; +                           exposedRect.width(), exposedRect.height());
&gt; +        }

Both are single line calls, no need for the brackets.

&gt; +    exposeEvent.width = exposedRect.x() + exposedRect.width(); // flash bug? it thinks width is the right in transparent mode
&gt; +    exposeEvent.height = exposedRect.y() + exposedRect.height(); // flash bug? it thinks height is the bottom in transparent mode

I don&apos;t understand these comments. You mean it thinks height is the absolute y position? Will this break other plugins?

&gt; +    // passed Drawable without first doing gdk_pixmap_lookup().  If we create
&gt; +    // the GdkPixmap here before Adobe does, then Adobe&apos;s _foreign_new() will
&gt; +    // trigger a gdk warning.  (Ideally, gdk would first do a lookup before
&gt; +    // creating a new one, like it does for Windows, but oh well, nothing we
&gt; +    // can do about that.)

I recommend taking the parens out here, they do not add anything.

&gt; +    //IntPoint p = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToWindow(IntPoint(event-&gt;pageX(), event-&gt;pageY()));

Please drop.

&gt; +    // On Unix, only call plugin if it&apos;s full-page or windowed
&gt; +    if (m_mode != NP_FULL &amp;&amp; m_mode != NP_EMBED)
&gt; +        return;

What does &apos;call plugin&apos; mean? Calling setNPWindow?

&gt;      IntRect r(rect-&gt;left, rect-&gt;top, rect-&gt;right - rect-&gt;left, rect-&gt;bottom - rect-&gt;top);
&gt; -    invalidateRect(r);
&gt; +    //invalidateRect(r);

Drop commented line.

&gt; +    int nvi;
&gt; +    XVisualInfo templ;
&gt; +    templ.screen  = gdk_screen_get_number(gdk_screen_get_default());
&gt; +    templ.depth   = depth;
&gt; +    templ.c_class = TrueColor;
&gt; +    XVisualInfo* xvi = XGetVisualInfo(GDK_DISPLAY(), VisualScreenMask | VisualDepthMask | VisualClassMask, &amp;templ, &amp;nvi);

Can we get better names for these variables? visualInfo, for instance, would be more in line with our coding style.

Thanks for your work on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162007</commentid>
    <comment_count>25</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-11-10 03:38:37 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 42765 [details])
&gt; &gt; -#if defined(XP_UNIX) || defined(Q_WS_X11)
&gt; &gt; +#if defined(XP_UNIX)
&gt; &gt;          bool m_needsXEmbed;
&gt; &gt;  #endif
&gt; 
&gt; I am wondering about these instances of this change in which we used to have
&gt; both XP_UNIX, and Q_WS_X11. I wonder if the Qt people had a reason for this?
&gt; Kenneth? Girish? =)

Simon had a comment about that, that if XP_UNIX is true, Q_WS_X11 is as well. 

&gt; &gt;  #include &lt;gdk/gdkx.h&gt;
&gt; &gt; +#define Bool int
&gt; &gt; +#define Status int
&gt; &gt; +#include &lt;X11/extensions/Xrender.h&gt;
&gt; 
&gt; What are these for?

The Bool and Status seems like redefines of some X typedefs. Girish are you using XRender for the windowless support?

&gt; We don&apos;t usually accept commented code into the tree, unless we plan to enable
&gt; it soon, but then it would need a comment with a TODO mark.

I agree

&gt; &gt; +        if (gdkBackingStore) {
&gt; &gt; +            XCopyArea(GDK_DISPLAY(), GDK_DRAWABLE_XID(gdkBackingStore), m_drawable, gc,
&gt; &gt; +                      m_windowRect.x() + exposedRect.x() - xoff,
&gt; &gt; +                      m_windowRect.y() + exposedRect.y() - yoff,
&gt; &gt; +                      exposedRect.width(), exposedRect.height(),
&gt; &gt; +                      exposedRect.x(), exposedRect.y());
&gt; &gt; +        } else {
&gt; &gt; +            // no valid backing store; clear to the background color
&gt; &gt; +            XFillRectangle(GDK_DISPLAY(), m_drawable, gc,
&gt; &gt; +                           exposedRect.x(), exposedRect.y(),
&gt; &gt; +                           exposedRect.width(), exposedRect.height());
&gt; &gt; +        }
&gt; 
&gt; Both are single line calls, no need for the brackets.

It spans multiply lines, thus the coding style guide says to use braces.

&gt; &gt; +    // On Unix, only call plugin if it&apos;s full-page or windowed
&gt; &gt; +    if (m_mode != NP_FULL &amp;&amp; m_mode != NP_EMBED)
&gt; &gt; +        return;
&gt; 
&gt; What does &apos;call plugin&apos; mean? Calling setNPWindow?

the setNPWindow is supposed to be called on all changes to geometry (size or position) according to the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162010</commentid>
    <comment_count>26</comment_count>
    <who name="Benjamin Otte">otte</who>
    <bug_when>2009-11-10 03:53:17 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; +        if (m_drawable)
&gt; &gt; +            XFreePixmap(GDK_DISPLAY(), m_drawable);
&gt; &gt; +
&gt; &gt; +        m_drawable = XCreatePixmap(GDK_DISPLAY(), GDK_DRAWABLE_XID(parentWindow-&gt;window),
&gt; &gt; +                                   m_windowRect.width(), m_windowRect.height(),
&gt; &gt; +                                   ((NPSetWindowCallbackStruct*)m_npWindow.ws_info)-&gt;depth);
&gt; &gt; +        XSync(GDK_DISPLAY(), False); // make sure that the server knows about the Drawable
&gt; &gt; +    }
&gt; 
&gt; Excuse my ignorance of X programming, but why do we need a sync here?
&gt;
It ensures that all previous operations have completed on the server. In this particular case, as the comment says, it ensures that the server has created the pixmap.
This is important when there are multiple X connections (aka displays) in use that can access this resource. In that case the other display could try to do an operation on that resource while the server doesn&apos;t know about it. That would cause an error, and due to the gorgeous error handling of X, would cause an abort of the application.

Now that&apos;s the theory. In practice, I suspect it&apos;s copied from the Qt port which does indeed use two different displays and Brian forgot to delete it when porting to gtk.
 
&gt; &gt; +    exposeEvent.width = exposedRect.x() + exposedRect.width(); // flash bug? it thinks width is the right in transparent mode
&gt; &gt; +    exposeEvent.height = exposedRect.y() + exposedRect.height(); // flash bug? it thinks height is the bottom in transparent mode
&gt; 
&gt; I don&apos;t understand these comments. You mean it thinks height is the absolute y
&gt; position? Will this break other plugins?
&gt;
I&apos;d like a proof that Mozilla does this the same way. Otherwise I suspect it shadows a different bug.
Also, I know Swfdec doesn&apos;t treat it this way.

&gt; I recommend taking the parens out here, they do not add anything.
&gt; 
I like it when people add () to function names as that makes it very clear it&apos;s talking about a function (in code comments as well as email or irc). YMMV of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162014</commentid>
    <comment_count>27</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-11-10 04:18:55 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #24)
&gt; Now that&apos;s the theory. In practice, I suspect it&apos;s copied from the Qt port
&gt; which does indeed use two different displays and Brian forgot to delete it when
&gt; porting to gtk.

Right, thanks.
 
&gt; &gt; I recommend taking the parens out here, they do not add anything.
&gt; &gt; 
&gt; I like it when people add () to function names as that makes it very clear it&apos;s
&gt; talking about a function (in code comments as well as email or irc). YMMV of
&gt; course.

Oh, sorry for the confusion. I do agree with you there, I am talking about the parens surrounding the last sentence. I think they are not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162023</commentid>
    <comment_count>28</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-10 05:27:33 -0800</bug_when>
    <thetext>&gt;&gt;  #include &lt;gdk/gdkx.h&gt;
&gt;&gt; +#define Bool int
&gt;&gt; +#define Status int
&gt;&gt; +#include &lt;X11/extensions/Xrender.h&gt;

&gt; What are these for?

See getVisualAndColormap().  It&apos;s mostly copied from the Qt backend.  When a 32-bit visual is requested, we use XRender to find the most appropriate visual (that is, a visual with an alpha channel).  I&apos;m not sure what the deal is with the defines: apparently *somewhere* a lot of the defines in the Xlib headers get undefined, including Bool and Status.  Xrender.h is not compilable without those defines.  (You&apos;ll also note elsewhere in the code that numbers are used instead of the constants for FocusIn, FocusOut, ButtonPress, etc., as it appears someone undefs those as well for some reason.  This behavior is present in the Qt-related file as well.)

&gt;&gt; +    exposeEvent.width = exposedRect.x() + exposedRect.width(); // flash bug? it thinks width is the right in transparent mode
&gt;&gt; +    exposeEvent.height = exposedRect.y() + exposedRect.height(); // flash bug? it thinks height is the bottom in transparent mode
&gt;
&gt; I don&apos;t understand these comments. You mean it thinks height is the absolute y
&gt; position? Will this break other plugins?

This was also copied over from Qt&apos;s windowless plugin support; I have no evidence for this behavior besides that.  It shouldn&apos;t (in theory) break any other plugins; it can only make the width and height of the exposed region larger than it needs to be (which is sub-optimal, of course, but not broken).  IMHO any plugin that isn&apos;t properly clipping the expose event&apos;s rect to its available drawing area is fundamentally broken anyway.  I&apos;ll test Adobe Flash 10 (x86_64 beta) without the hack and see, but I&apos;d recommend leaving it in regardless of my findings, unless Girish knows differently (since I assume he&apos;s the one who put it in the Qt windowless support).

&gt;&gt; +    // On Unix, only call plugin if it&apos;s full-page or windowed
&gt;&gt; +    if (m_mode != NP_FULL &amp;&amp; m_mode != NP_EMBED)
&gt;&gt; +        return;
&gt;
&gt; What does &apos;call plugin&apos; mean? Calling setNPWindow?

I don&apos;t know; copied from the Qt backend.

&gt;&gt; &gt; +        if (m_drawable)
&gt;&gt; &gt; +            XFreePixmap(GDK_DISPLAY(), m_drawable);
&gt;&gt; &gt; +
&gt;&gt; &gt; +        m_drawable = XCreatePixmap(GDK_DISPLAY(), GDK_DRAWABLE_XID(parentWindow-&gt;window),
&gt;&gt; &gt; +                                   m_windowRect.width(), m_windowRect.height(),
&gt;&gt; &gt; +                                   ((NPSetWindowCallbackStruct*)m_npWindow.ws_info)-&gt;depth);
&gt;&gt; &gt; +        XSync(GDK_DISPLAY(), False); // make sure that the server knows about the Drawable
&gt;&gt; &gt; +    }
&gt;&gt; 
&gt;&gt; Excuse my ignorance of X programming, but why do we need a sync here?
&gt;&gt;
&gt; It ensures that all previous operations have completed on the server. In this
&gt; particular case, as the comment says, it ensures that the server has created
&gt; the pixmap.
&gt; This is important when there are multiple X connections (aka displays) in use
&gt; that can access this resource. In that case the other display could try to do
&gt; an operation on that resource while the server doesn&apos;t know about it. That
&gt; would cause an error, and due to the gorgeous error handling of X, would cause
&gt; an abort of the application.
&gt;
&gt; Now that&apos;s the theory. In practice, I suspect it&apos;s copied from the Qt port
&gt;which does indeed use two different displays and Brian forgot to delete it when
&gt;porting to gtk.

Yes and no.  It is indeed copied from the Qt backend, and is necessary for the reason you mention.  It&apos;s not any less necessary for the gtk backend because we can&apos;t know that a windowless plugin is also using gdk/gtk and is sharing the same X connection.  If it&apos;s using a different X connection (which would be the case if the plugin is using raw xlib, xt, qt, or... well, anything but gtk), then the XSync() is required.

Now what *is* questionable is the m_pluginDisplay and getPluginDisplay() stuff (and the conditional XSync() in ::paint()).  In the Qt backend, we do know that some plugins use gtk, and so they will use a different X connection, and we can &quot;guess&quot; that they&apos;re using gtk by dlopen()ing libgtk and trying to fetch its default display.  If that succeeds (in the Qt backend), then we know at least one plugin is using gtk and has a different X connection open, so keeping an extra Display* around (m_pluginDisplay) and using getPluginDisplay() is necessary.  For the gtk backend, this may or may not be necessary, but, regardless, the current implementation of it is somewhat useless (but does no harm).  So I&apos;d be willing to take it out in the hopes of later either replacing it with code that does something useful, or just doing nothing (because we can&apos;t always figure out the Display* that the plugin is using).  Regardless, though, the commented-upon use of the XSync() after the XCreatePixmap() is correct.

The other requested changes sound fine to me; I&apos;ll work up a new patch tomorrow (5.30am is already far too late for me to be awake!).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162024</commentid>
    <comment_count>29</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-11-10 05:30:04 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt;&gt;  #include &lt;gdk/gdkx.h&gt;
&gt; &gt;&gt; +#define Bool int
&gt; &gt;&gt; +#define Status int
&gt; &gt;&gt; +#include &lt;X11/extensions/Xrender.h&gt;
&gt; 
&gt; &gt; What are these for?
&gt; 
&gt; See getVisualAndColormap().  It&apos;s mostly copied from the Qt backend.  When a
&gt; 32-bit visual is requested, we use XRender to find the most appropriate visual
&gt; (that is, a visual with an alpha channel).  I&apos;m not sure what the deal is with
&gt; the defines: apparently *somewhere* a lot of the defines in the Xlib headers
&gt; get undefined, including Bool and Status.  Xrender.h is not compilable without
&gt; those defines.  (You&apos;ll also note elsewhere in the code that numbers are used
&gt; instead of the constants for FocusIn, FocusOut, ButtonPress, etc., as it
&gt; appears someone undefs those as well for some reason.  This behavior is present
&gt; in the Qt-related file as well.)

Seems like a good idea to add a comment then
&gt; 
&gt; &gt;&gt; +    // On Unix, only call plugin if it&apos;s full-page or windowed
&gt; &gt;&gt; +    if (m_mode != NP_FULL &amp;&amp; m_mode != NP_EMBED)
&gt; &gt;&gt; +        return;
&gt; &gt;
&gt; &gt; What does &apos;call plugin&apos; mean? Calling setNPWindow?

Qt has issues with Flash as it is not being able to ref the GtkPlug, so I guess Gtk doesn&apos;t need this particular piece of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162025</commentid>
    <comment_count>30</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-10 05:58:50 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Looks good to me.
&gt; 
&gt; You might also be interested in subscribing to 31232

Hmm, I probably won&apos;t look into it.  Adobe Flash 10 is windowless and that&apos;s good enough for me.  Composited windowed mode sounds like a bit of an unnecessary hack to me.  Maybe I&apos;m wrong about that, but either way I don&apos;t think I care to do the work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162030</commentid>
    <comment_count>31</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2009-11-10 06:32:27 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt;&gt;  #include &lt;gdk/gdkx.h&gt;
&gt; &gt;&gt; +#define Bool int
&gt; &gt;&gt; +#define Status int
&gt; &gt;&gt; +#include &lt;X11/extensions/Xrender.h&gt;
&gt; 
&gt; &gt; What are these for?
&gt; 
&gt; See getVisualAndColormap().  It&apos;s mostly copied from the Qt backend.  When a
&gt; 32-bit visual is requested, we use XRender to find the most appropriate visual
&gt; (that is, a visual with an alpha channel).  I&apos;m not sure what the deal is with
&gt; the defines: apparently *somewhere* a lot of the defines in the Xlib headers
&gt; get undefined, including Bool and Status. 

Qt undefines them since they conflict with Qt has a type named Status and event enums named FocusIn, FocusOut and all. Also, iirc, JSC also has a Status enum.

&gt; 
&gt; &gt;&gt; +    exposeEvent.width = exposedRect.x() + exposedRect.width(); // flash bug? it thinks width is the right in transparent mode
&gt; &gt;&gt; +    exposeEvent.height = exposedRect.y() + exposedRect.height(); // flash bug? it thinks height is the bottom in transparent mode
&gt; &gt;
&gt; &gt; I don&apos;t understand these comments. You mean it thinks height is the absolute y
&gt; &gt; position? Will this break other plugins?
&gt; 

That&apos;s right. Flash thinks that height parameter is the bottom and width parameter is the right. As Brian said, this can cause no harm to other plugin except that we end up painting a little more than necessary.

&gt; 
&gt; &gt;&gt; +    // On Unix, only call plugin if it&apos;s full-page or windowed
&gt; &gt;&gt; +    if (m_mode != NP_FULL &amp;&amp; m_mode != NP_EMBED)
&gt; &gt;&gt; +        return;
&gt; &gt;
&gt; &gt; What does &apos;call plugin&apos; mean? Calling setNPWindow?
&gt; 
&gt; I don&apos;t know; copied from the Qt backend.
&gt; 

We should change this to &quot;call plugin&apos;s setwindow&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162083</commentid>
    <comment_count>32</comment_count>
    <who name="Mark Renouf">mark.renouf</who>
    <bug_when>2009-11-10 10:13:02 -0800</bug_when>
    <thetext>@ Comment #30

&gt; Hmm, I probably won&apos;t look into it.  Adobe Flash 10 is windowless and that&apos;s
&gt; good enough for me.  Composited windowed mode sounds like a bit of an
&gt; unnecessary hack to me.  Maybe I&apos;m wrong about that, but either way I don&apos;t
&gt; think I care to do the work.

I&apos;ve done some experiments trying to get flash to render into an ARGB visual but I was probably doing it naively. This has gone past my knowledge level, but am I correct in assuming proper compositing isn&apos;t possible unless flash (or any other plugin) makes an alpha channel available in it&apos;s output?

And, just to be sure, does flashplayer&apos;s wmode=&quot;trans&quot; setting work as expected?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162117</commentid>
    <comment_count>33</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-10 11:02:18 -0800</bug_when>
    <thetext>(In reply to comment #32)

&gt; And, just to be sure, does flashplayer&apos;s wmode=&quot;trans&quot; setting work as
&gt; expected?

Yep.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162180</commentid>
    <comment_count>34</comment_count>
    <who name="Mark Renouf">mark.renouf</who>
    <bug_when>2009-11-10 12:58:04 -0800</bug_when>
    <thetext>I just tested this applied to trunk and get a crash on the communitymx test page. Loads of details below, let me know if there&apos;s anything else I can provide. The system is Ubuntu 9.10, x86, without any major customizations. Desktop effects are enabled.

$ svn info
Path: .
URL: http://svn.webkit.org/repository/webkit/trunk
Repository Root: http://svn.webkit.org/repository/webkit
Repository UUID: 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Revision: 50747
Node Kind: directory
Schedule: normal
Last Changed Author: kenneth@webkit.org
Last Changed Rev: 50747
Last Changed Date: 2009-11-10 13:57:34 -0500 (Tue, 10 Nov 2009)

Load URL:
    www.communitymx.com/content/source/E5141/wmodetrans.htm

Shortly after the page begins to load, I get a XError and Segfault.


****** Console Output ******

$ Programs/GtkLauncher 
** (GtkLauncher:15359): DEBUG: NP_Initialize
** (GtkLauncher:15359): DEBUG: NP_Initialize succeeded
** (GtkLauncher:15359): DEBUG: NP_Initialize
** (GtkLauncher:15359): DEBUG: NP_Initialize succeeded
** (GtkLauncher:15359): DEBUG: NP_Initialize
** (GtkLauncher:15359): DEBUG: NP_Initialize succeeded
** (GtkLauncher:15359): DEBUG: NP_Initialize
** (GtkLauncher:15359): DEBUG: NP_Initialize succeeded

(GtkLauncher:15359): Gtk-CRITICAL **: gtk_widget_size_allocate: assertion `GTK_IS_WIDGET (widget)&apos; failed

(GtkLauncher:15359): Gtk-CRITICAL **: gtk_widget_size_allocate: assertion `GTK_IS_WIDGET (widget)&apos; failed

(GtkLauncher:15359): Gtk-CRITICAL **: gtk_widget_size_allocate: assertion `GTK_IS_WIDGET (widget)&apos; failed
The program &apos;GtkLauncher&apos; received an X Window System error.
This probably reflects a bug in the program.

The error was &apos;BadValue (integer parameter out of range for operation)&apos;.
  (Details: serial 32806 error_code 2 request_code 139 minor_code 3)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the --sync command line
   option to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)

******* Backtrace from GDB ********

Program received signal SIGSEGV, Segmentation fault.
0xb6a56d1d in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
(gdb) bt
#0  0xb6a56d1d in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
#1  0xb1730d42 in ?? ()
   from /usr/lib/firefox/plugins/flashplugin-alternative.so
#2  0xb177ef92 in ?? ()
   from /usr/lib/firefox/plugins/flashplugin-alternative.so
#3  0xb15ffa4d in ?? ()
   from /usr/lib/firefox/plugins/flashplugin-alternative.so
#4  0xb15e90d0 in ?? ()
   from /usr/lib/firefox/plugins/flashplugin-alternative.so
#5  0xb693a05f in ?? () from /lib/tls/i686/cmov/libc.so.6
#6  0xb693a0cf in exit () from /lib/tls/i686/cmov/libc.so.6
#7  0xb6e73ec1 in gdk_x_error (display=0x8068138, error=0xbfffd62c)
    at /build/buildd/gtk+2.0-2.18.3/gdk/x11/gdkmain-x11.c:470
#8  0xb541a839 in _XError (dpy=0x8068138, rep=0x8469b28)
    at ../../src/XlibInt.c:2924
#9  0xb5420e9f in process_responses (dpy=0x8068138, 
    wait_for_first_event=&lt;value optimized out&gt;, current_error=0xbfffd75c, 
    current_request=32807) at ../../src/xcb_io.c:207
#10 0xb5421526 in _XReply (dpy=0x8068138, rep=0xbfffd790, extra=0, discard=1)
    at ../../src/xcb_io.c:457
#11 0xb54151a7 in XSync (dpy=0x8068138, discard=0) at ../../src/Sync.c:48
#12 0xb5415335 in _XSyncFunction (dpy=0x8068138) at ../../src/Synchro.c:37
#13 0xb52b1730 in XShmPutImage () from /usr/lib/libXext.so.6
#14 0xb6e67f9e in gdk_x11_draw_image (drawable=0x80eeec0, gc=0x84798c0, 
    image=0x8488068, xsrc=11, ysrc=46, xdest=0, ydest=0, width=200, height=200)
    at /build/buildd/gtk+2.0-2.18.3/gdk/x11/gdkdrawable-x11.c:847
#15 0xb6e31888 in IA__gdk_draw_image (drawable=0x80eeec0, gc=0x84798c0, 
    image=0x8488068, xsrc=11, ysrc=46, xdest=0, ydest=0, width=200, height=200)
    at /build/buildd/gtk+2.0-2.18.3/gdk/gdkdraw.c:726
#16 0xb6e31888 in IA__gdk_draw_image (drawable=0x848e098, gc=0x84798c0, 
    image=0x8488068, xsrc=11, ysrc=46, xdest=0, ydest=0, width=200, height=200)
    at /build/buildd/gtk+2.0-2.18.3/gdk/gdkdraw.c:726
#17 0xb15fef0f in ?? ()
   from /usr/lib/firefox/plugins/flashplugin-alternative.so
#18 0xb15f2b18 in ?? ()
   from /usr/lib/firefox/plugins/flashplugin-alternative.so
#19 0xb15e9110 in ?? ()
   from /usr/lib/firefox/plugins/flashplugin-alternative.so
#20 0xb15edbd4 in ?? ()
   from /usr/lib/firefox/plugins/flashplugin-alternative.so
#21 0xb7b827a0 in WebCore::PluginView::dispatchNPEvent(_XEvent&amp;) ()
   from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#22 0xb7b837d8 in WebCore::PluginView::paint(WebCore::GraphicsContext*, WebCore::IntRect const&amp;) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#23 0xb79bada8 in WebCore::RenderWidget::paint(WebCore::RenderObject::PaintInfo&amp;, int, int) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#24 0xb79130bd in WebCore::InlineBox::paint(WebCore::RenderObject::PaintInfo&amp;, int, int) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#25 0xb791430a in WebCore::InlineFlowBox::paint(WebCore::RenderObject::PaintInfo---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
&amp;, int, int) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#26 0xb79bd9a0 in WebCore::RootInlineBox::paint(WebCore::RenderObject::PaintInfo&amp;, int, int) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#27 0xb797685f in WebCore::RenderLineBoxList::paint(WebCore::RenderBoxModelObject*, WebCore::RenderObject::PaintInfo&amp;, int, int) const ()
   from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#28 0xb7927d93 in WebCore::RenderBlock::paintContents(WebCore::RenderObject::PaintInfo&amp;, int, int) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#29 0xb792d0b5 in WebCore::RenderBlock::paintObject(WebCore::RenderObject::PaintInfo&amp;, int, int) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#30 0xb7926457 in WebCore::RenderBlock::paint(WebCore::RenderObject::PaintInfo&amp;, int, int) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#31 0xb79741ff in WebCore::RenderLayer::paintLayer(WebCore::RenderLayer*, WebCore::GraphicsContext*, WebCore::IntRect const&amp;, WebCore::PaintRestriction, WebCore::RenderObject*, WTF::HashMap&lt;WebCore::OverlapTestRequestClient*, WebCore::IntRect, WTF::PtrHash&lt;WebCore::OverlapTestRequestClient*&gt;, WTF::HashTraits&lt;WebCore::OverlapTestRequestClient*&gt;, WTF::HashTraits&lt;WebCore::IntRect&gt; &gt;*, unsigned int)
    () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#32 0xb7973a39 in WebCore::RenderLayer::paintLayer(WebCore::RenderLayer*, WebCore::GraphicsContext*, WebCore::IntRect const&amp;, WebCore::PaintRestriction, WebCore::RenderObject*, WTF::HashMap&lt;WebCore::OverlapTestRequestClient*, WebCore::IntRect, WTF::PtrHash&lt;WebCore::OverlapTestRequestClient*&gt;, WTF::HashTraits&lt;WebCore::OverlapTestRequestClient*&gt;, WTF::HashTraits&lt;WebCore::IntRect&gt; &gt;*, unsigned int)
    () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#33 0xb7973a39 in WebCore::RenderLayer::paintLayer(WebCore::RenderLayer*, WebCore::GraphicsContext*, WebCore::IntRect const&amp;, WebCore::PaintRestriction, WebCore::RenderObject*, WTF::HashMap&lt;WebCore::OverlapTestRequestClient*, WebCore::IntRect, WTF::PtrHash&lt;WebCore::OverlapTestRequestClient*&gt;, WTF::HashTraits&lt;WebCore::OverlapTestRequestClient*&gt;, WTF::HashTraits&lt;WebCore::IntRect&gt; &gt;*, unsigned int)
    () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#34 0xb79742e1 in WebCore::RenderLayer::paint(WebCore::GraphicsContext*, WebCore::IntRect const&amp;, WebCore::PaintRestriction, WebCore::RenderObject*) ()
   from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#35 0xb786d8e8 in WebCore::FrameView::paintContents(WebCore::GraphicsContext*, WebCore::IntRect const&amp;) ()
   from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#36 0xb78af696 in WebCore::ScrollView::paint(WebCore::GraphicsContext*, WebCore::IntRect const&amp;) () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#37 0xb73bc08a in webkit_web_view_expose_event(_GtkWidget*, _GdkEventExpose*)
    () from /home/mark/Research/WebKit/.libs/libwebkit-1.0.so.2
#38 0xb6fea474 in _gtk_marshal_BOOLEAN__BOXED (closure=0x807f388, 
    return_value=0xbfffec34, n_param_values=2, param_values=0x8469368, 
    invocation_hint=0xbfffec20, marshal_data=0xb73bbf20)
    at /build/buildd/gtk+2.0-2.18.3/gtk/gtkmarshalers.c:84
#39 0xb6b376f9 in g_type_class_meta_marshal (closure=0x807f388, 
    return_value=0xbfffec34, n_param_values=2, param_values=0x8469368, 
    invocation_hint=0xbfffec20, marshal_data=0xc8)
    at /build/buildd/glib2.0-2.22.2/gobject/gclosure.c:878
#40 0xb6b39072 in IA__g_closure_invoke (closure=0x807f388, 
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
    return_value=0xbfffec34, n_param_values=2, param_values=0x8469368, 
    invocation_hint=0xbfffec20)
    at /build/buildd/glib2.0-2.22.2/gobject/gclosure.c:767
#41 0xb6b4e49e in signal_emit_unlocked_R (node=&lt;value optimized out&gt;, 
    detail=&lt;value optimized out&gt;, instance=0x8098000, 
    emission_return=0xbfffed7c, instance_and_params=0x8469368)
    at /build/buildd/glib2.0-2.22.2/gobject/gsignal.c:3285
#42 0xb6b4f9b8 in IA__g_signal_emit_valist (instance=0x8098000, signal_id=41, 
    detail=0, 
    var_args=0xbfffede0 &quot;\034\356\377\277\364\257\352\266\b\356\377\277\364\237&amp;\267&quot;) at /build/buildd/glib2.0-2.22.2/gobject/gsignal.c:2990
#43 0xb6b4ffb6 in IA__g_signal_emit (instance=0x8098000, signal_id=41, 
    detail=0) at /build/buildd/glib2.0-2.22.2/gobject/gsignal.c:3037
#44 0xb710696e in gtk_widget_event_internal (widget=&lt;value optimized out&gt;, 
    event=0xbfffeee8) at /build/buildd/gtk+2.0-2.18.3/gtk/gtkwidget.c:4767
#45 0xb6fe4190 in IA__gtk_main_do_event (event=0xbfffeee8)
    at /build/buildd/gtk+2.0-2.18.3/gtk/gtkmain.c:1571
#46 0xb6e571d4 in _gdk_window_process_updates_recurse (window=0x807bf38, 
    expose_region=0x8496300)
    at /build/buildd/gtk+2.0-2.18.3/gdk/gdkwindow.c:5061
#47 0xb6e7a734 in _gdk_windowing_window_process_updates_recurse (
    window=0x807bf38, region=0x8496300)
    at /build/buildd/gtk+2.0-2.18.3/gdk/x11/gdkwindow-x11.c:5566
#48 0xb6e4e87f in gdk_window_process_updates_internal (window=0x807bf38)
    at /build/buildd/gtk+2.0-2.18.3/gdk/gdkwindow.c:5220
#49 0xb6e5083f in IA__gdk_window_process_all_updates ()
    at /build/buildd/gtk+2.0-2.18.3/gdk/gdkwindow.c:5328
#50 0xb6e508bb in gdk_window_update_idle (data=0x0)
    at /build/buildd/gtk+2.0-2.18.3/gdk/gdkwindow.c:4954
#51 0xb6e2cf78 in gdk_threads_dispatch (data=0x8420930)
    at /build/buildd/gtk+2.0-2.18.3/gdk/gdk.c:506
#52 0xb6a9f0f1 in g_idle_dispatch (source=0x8498af8, callback=0xb040b020, 
    user_data=0x8420930) at /build/buildd/glib2.0-2.22.2/glib/gmain.c:4065
#53 0xb6aa0e78 in g_main_dispatch (context=0x807d7a0)
    at /build/buildd/glib2.0-2.22.2/glib/gmain.c:1960
#54 IA__g_main_context_dispatch (context=0x807d7a0)
    at /build/buildd/glib2.0-2.22.2/glib/gmain.c:2513
#55 0xb6aa4720 in g_main_context_iterate (context=0x807d7a0, 
    block=&lt;value optimized out&gt;, dispatch=1, self=0x8062690)
    at /build/buildd/glib2.0-2.22.2/glib/gmain.c:2591
#56 0xb6aa4b8f in IA__g_main_loop_run (loop=0x8465cc8)
    at /build/buildd/glib2.0-2.22.2/glib/gmain.c:2799
#57 0xb6fe4419 in IA__gtk_main ()
    at /build/buildd/gtk+2.0-2.18.3/gtk/gtkmain.c:1218
#58 0x08049e6d in main ()



Additional system information:


$ uname -a 
Linux crashpad 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686 GNU/Linux

$ dpkg-query -l libgtk2.0*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(noq
ne)/Reinst-required (Status,Err: uppercase=bad)
||/ Name  q         Version        Description
+++-==============-==============-============================================
ii  libgtk2.0-0    2.18.3-1       The GTK+ graphical user interface library
ii  libgtk2.0-0-db 2.18.3-1       The GTK+ libraries and debugging symbols
ii  libgtk2.0-bin  2.18.3-1       The programs for the GTK+ graphical user int
ii  libgtk2.0-cil  2.12.9-1       CLI binding for the GTK+ toolkit 2.12
ii  libgtk2.0-comm 2.18.3-1       Common files for the GTK+ graphical user int
ii  libgtk2.0-dev  2.18.3-1       Development files for the GTK+ library
ii  libgtk2.0-doc  2.18.3-1       Documentation for the GTK+ graphical user in

$ Xorg -version

X.Org X Server 1.6.4
Release Date: 2009-9-27
X Protocol Version 11, Revision 0
Build Operating System: Linux 2.6.24-23-server i686 Ubuntu
Current Operating System: Linux crashpad 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686
Kernel command line: root=UUID=0a46f67d-395d-4573-8a8f-49b22f34b718 ro quiet splash 
Build Date: 26 October 2009  05:15:02PM
xorg-server 2:1.6.4-2ubuntu4 (buildd@) 
	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.

$ xdpyinfo
name of display:    :0.0
version number:    11.0
vendor string:    The X.Org Foundation
vendor release number:    10604000
X.Org version: 1.6.4
maximum request size:  16777212 bytes
motion buffer size:  256
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    7
supported pixmap formats:
    depth 1, bits_per_pixel 1, scanline_pad 32
    depth 4, bits_per_pixel 8, scanline_pad 32
    depth 8, bits_per_pixel 8, scanline_pad 32
    depth 15, bits_per_pixel 16, scanline_pad 32
    depth 16, bits_per_pixel 16, scanline_pad 32
    depth 24, bits_per_pixel 32, scanline_pad 32
    depth 32, bits_per_pixel 32, scanline_pad 32
keycode range:    minimum 8, maximum 255
focus:  window 0x4e00005, revert to Parent
number of extensions:    27
    BIG-REQUESTS
    Composite
    DAMAGE
    DOUBLE-BUFFER
    DPMS
    DRI2
    GLX
    Generic Event Extension
    MIT-SCREEN-SAVER
    MIT-SHM
    RANDR
    RECORD
    RENDER
    SECURITY
    SGI-GLX
    SHAPE
    SYNC
    X-Resource
    XC-MISC
    XFIXES
    XFree86-DGA
    XFree86-VidModeExtension
    XINERAMA
    XInputExtension
    XKEYBOARD
    XTEST
    XVideo
default screen number:    0
number of screens:    1

screen #0:
  dimensions:    1920x1200 pixels (508x317 millimeters)
  resolution:    96x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
  root window id:    0x122
  depth of root window:    24 planes
  number of colormaps:    minimum 1, maximum 1
  default colormap:    0x20
  default number of colormap cells:    256
  preallocated pixels:    black 0, white 16777215
  options:    backing-store NO, save-unders NO
  largest cursor:    64x64
  current input event mask:    0x7a803f
    KeyPressMask             KeyReleaseMask           ButtonPressMask          
    ButtonReleaseMask        EnterWindowMask          LeaveWindowMask          
    ExposureMask             StructureNotifyMask      SubstructureNotifyMask   
    SubstructureRedirectMask FocusChangeMask          PropertyChangeMask       
  number of visuals:    72
  default visual id:  0x21
  visual:
    visual id:    0x21
    class:    TrueColor
    depth:    24 planes
    available colormap entries:    256 per subfield
    red, green, blue masks:    0xff0000, 0xff00, 0xff
    significant bits in color specification:    8 bits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162328</commentid>
    <comment_count>35</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-11-10 20:26:14 -0800</bug_when>
    <thetext>What&apos;s flashplugin-alternative?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162418</commentid>
    <comment_count>36</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-11-11 02:41:52 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; What&apos;s flashplugin-alternative?

That&apos;s Debian&apos;s alternatives system. It allows you to have several packages that do the same thing, and choose the system&apos;s default. It uses symlinks to do that. So you have stuff such as a /usr/bin/editor, which is an alternative symlink to one of the installed editors:

root@goiaba ~# update-alternatives --display editor
editor - manual mode
 link currently points to /usr/bin/emacs23
/bin/ed - priority -100
 slave editor.1.gz: /usr/share/man/man1/ed.1.gz
/bin/nano - priority 40
 slave editor.1.gz: /usr/share/man/man1/nano.1.gz
[...]

This means that may be adobe flash, swfdec, or gnash. I&apos;m guessing it&apos;s adobe&apos;s flash plugin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162427</commentid>
    <comment_count>37</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-11 03:18:06 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 42765 [details])
&gt; &gt; -#if defined(XP_UNIX) || defined(Q_WS_X11)
&gt; &gt; +#if defined(XP_UNIX)
&gt; &gt;          bool m_needsXEmbed;
&gt; &gt;  #endif
&gt; 
&gt; I am wondering about these instances of this change in which we used to have
&gt; both XP_UNIX, and Q_WS_X11. I wonder if the Qt people had a reason for this?
&gt; Kenneth? Girish? =)

The above #ifdef was indeed bogus, but there were other cases where we used #if defined(XP_UNIX) &amp;&amp; defined(Q_WS_X11) to guard code relating to windowless plugins that should only be enabled on Qt/X11 to avoid breaking the Gtk code.

With this effort to add windowless plugin support to the Gtk port some of these #ifdefs collapse to a single #if defined(XP_UNIX). Brian&apos;s change is correct AFAICS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169142</commentid>
    <comment_count>38</comment_count>
    <who name="Mark Renouf">mark.renouf</who>
    <bug_when>2009-12-06 18:16:58 -0800</bug_when>
    <thetext>Any chance this patch can get updated? I&apos;m getting some merge conflicts against the latest tree. And is there a plan to accept this? I need to know how long I might need to maintain a custom build, since this feature is needed for a product I am building.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169189</commentid>
    <comment_count>39</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2009-12-06 22:58:00 -0800</bug_when>
    <thetext>Sorry, I&apos;ve been completely swamped lately (work+vacation... the latter of which just makes me more swamped now).  I&apos;ll try to update the patch and cover the review items within the next couple weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169980</commentid>
    <comment_count>40</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-12-09 05:48:52 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; Any chance this patch can get updated? I&apos;m getting some merge conflicts against
&gt; the latest tree. And is there a plan to accept this? I need to know how long I
&gt; might need to maintain a custom build, since this feature is needed for a
&gt; product I am building.

It will be accepted as long as the patch is as close to being correct as we can get it to, there are no style issues, and it passes the currently available tests. If it is important for you, maybe you would like to contribute helping fix the issues that were raised? =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169984</commentid>
    <comment_count>41</comment_count>
    <who name="Mark Renouf">mark.renouf</who>
    <bug_when>2009-12-09 06:31:22 -0800</bug_when>
    <thetext>Yes, I certainly would! I attempted to apply the patch to the current tree but I do not feel confident enough in my understanding to merge the conflicts myself. If a clean patch can be produced I&apos;d be happy to help in tidying up whatever changes remain, as well as further testing (I experienced some crashes the last time I tried it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170729</commentid>
    <comment_count>42</comment_count>
      <attachid>44682</attachid>
    <who name="Alex Alexander">wired</who>
    <bug_when>2009-12-11 06:19:10 -0800</bug_when>
    <thetext>Created attachment 44682
v5 patch modified to apply on git-svn-id: http://svn.webkit.org/repository/webkit/trunk@51980 268f45cc-cd09-0410-ab3c-d52691b4dbfc (git commit 98b137e9b87d583cb67d8fb83a80960774d0bd61)

Trasparency works.

for example in:
http://www.contra.gr/Soccer/Hellas/Superleague/AEK/257844.html

there&apos;s a flash ad under the photo at the left of the main text.

without the patch, a gray box covers half the text, with the patch you can view the text.

however, even with the patch the flash box is there, meaning you can&apos;t select the text underneath it (flash gets all the events there).

also note that the communitymx test page doesn&apos;t crash here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170773</commentid>
    <comment_count>43</comment_count>
    <who name="Mark Renouf">mark.renouf</who>
    <bug_when>2009-12-11 08:23:23 -0800</bug_when>
    <thetext>Excellent! I&apos;ve applied and tested the new merged patch and I can confirm it resolves the previous crash I was experiencing on the communitymx[1] site. I&apos;ve got it on a local git branch now and if I have time over next few days I will address the remaining issues to get it accepted.

[1] http://www.communitymx.com/content/source/E5141/wmodetrans.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170817</commentid>
    <comment_count>44</comment_count>
    <who name="Alex Alexander">wired</who>
    <bug_when>2009-12-11 10:24:36 -0800</bug_when>
    <thetext>Note that I removed the Changelog part from the patch I attached (there was no need to have that just for a testing patch).

Whoever provides the final patch please make sure you add that info into it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183407</commentid>
    <comment_count>45</comment_count>
      <attachid>47162</attachid>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-01-21 17:16:36 -0800</bug_when>
    <thetext>Created attachment 47162
gtk windowless v6

Finally found some time to get back to this.

Changes from v5:

* Applies cleanly to git master as of today.
* I think I&apos;ve addressed all the style issues and questions in the comments; if not, please let me know.
* Don&apos;t use GDK when painting the Pixmap to the window after the plugin has painted to it.  The API for creating a foreign GdkPixmap is kinda broken IMO, and it&apos;s just as easy to create a cairo_surface_t from the X Pixmap.
* When in transparent mode AND the Pixmap passed to the plugin has a 32bpp depth, clear the expose region of the Pixmap to fully transparent before passing it to the plugin.  Without this, you end up with junk in the Pixmap anywhere where the plugin paints anything with transparency.
* Use the root window when creating the Pixmap instead of GDK_WINDOW_XID() on the parent widget.  XCreatePixmap() just uses the window to figure out which screen it&apos;s on, and GDK_WINDOW_XID() will force the GdkWindow to create a backing native Window on GTK+ 2.18 and above.

I left in the hack regarding the expose rect in based on Girish&apos;s agreement that it can do no harm and is possibly necessary for Adobe Flash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183410</commentid>
    <comment_count>46</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-01-21 17:19:33 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; Created an attachment (id=47162) [details]

&gt; * When in transparent mode AND the Pixmap passed to the plugin has a 32bpp
&gt; depth, clear the expose region of the Pixmap to fully transparent before
&gt; passing it to the plugin.  Without this, you end up with junk in the Pixmap
&gt; anywhere where the plugin paints anything with transparency.

BTW, Girish, I suspect it is a bug in the Qt windowless backend that it doesn&apos;t do this.  I imagine it&apos;s possible that no one has tested with a windowless, transparent plugin that can deal with a 32bit visual before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183412</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-21 17:22:58 -0800</bug_when>
    <thetext>Attachment 47162 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/plugins/gtk/PluginViewGtk.cpp:68:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/plugins/gtk/PluginViewGtk.cpp:69:  One space before end of line comments  [whitespace/comments] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:70:  One space before end of line comments  [whitespace/comments] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:71:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/plugins/gtk/PluginViewGtk.cpp:212:  dummy_w is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/plugins/gtk/PluginViewGtk.cpp:213:  dummy_i is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/plugins/gtk/PluginViewGtk.cpp:214:  dummy_ui is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/plugins/gtk/PluginViewGtk.cpp:232:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:250:  Missing space before ( in if(  [whitespace/parens] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:304:  One space before end of line comments  [whitespace/comments] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:311:  Missing space before ( in if(  [whitespace/parens] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:321:  One space before end of line comments  [whitespace/comments] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:325:  One space before end of line comments  [whitespace/comments] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:468:  One space before end of line comments  [whitespace/comments] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:481:  One space before end of line comments  [whitespace/comments] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:777:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:794:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:844:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:847:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 19


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183425</commentid>
    <comment_count>48</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-01-21 17:50:28 -0800</bug_when>
    <thetext>Sigh, ok...

(In reply to comment #47)
&gt; WebCore/plugins/gtk/PluginViewGtk.cpp:794:  Tests for true/false,
&gt; null/non-null, and zero/non-zero should all be done without equality
&gt; comparisons.  [readability/comparison_to_zero] [5]

I&apos;m not fixing this one, because the test is while checking a version number.  IMO (rmaj == 0 &amp;&amp; rmin &lt; 5) makes it a lot clearer that you&apos;re testing for a version &lt; 0.5.

New patch in a sec with the rest of the fixes, I hope...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183427</commentid>
    <comment_count>49</comment_count>
      <attachid>47166</attachid>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-01-21 17:52:52 -0800</bug_when>
    <thetext>Created attachment 47166
gtk windowless v7

Changes from v6:

* Fix style issues reported by style bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183432</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-21 18:04:04 -0800</bug_when>
    <thetext>Attachment 47166 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/plugins/gtk/PluginViewGtk.cpp:794:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/plugins/gtk/PluginViewGtk.cpp:844:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184159</commentid>
    <comment_count>51</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-24 22:20:15 -0800</bug_when>
    <thetext>&gt; I&apos;m not fixing this one, because the test is while checking a version number. 
&gt; IMO (rmaj == 0 &amp;&amp; rmin &lt; 5) makes it a lot clearer that you&apos;re testing for a
&gt; version &lt; 0.5.

Thanks.  This is one of our biggest remaining sources of false positives.  We&apos;ll need to think about how to improve the style checker here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185041</commentid>
    <comment_count>52</comment_count>
      <attachid>47166</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-01-27 05:06:56 -0800</bug_when>
    <thetext>Comment on attachment 47166
gtk windowless v7

&gt; +        No new tests; there is already a windowless test in the tree.

What test is that? We should unskip it in this patch, I believe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185162</commentid>
    <comment_count>53</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-01-27 11:38:16 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; (From update of attachment 47166 [details])
&gt; &gt; +        No new tests; there is already a windowless test in the tree.
&gt; 
&gt; What test is that? We should unskip it in this patch, I believe.

Gah, I can&apos;t find it now.  Someone pointed me to one back when I was starting on this, coulda sworn it was in LayoutTests/plugins/, but I don&apos;t see it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185163</commentid>
    <comment_count>54</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-01-27 11:41:04 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #52)
&gt; &gt; (From update of attachment 47166 [details] [details])
&gt; &gt; &gt; +        No new tests; there is already a windowless test in the tree.
&gt; &gt; 
&gt; &gt; What test is that? We should unskip it in this patch, I believe.
&gt; 
&gt; Gah, I can&apos;t find it now.  Someone pointed me to one back when I was starting
&gt; on this, coulda sworn it was in LayoutTests/plugins/, but I don&apos;t see it.

i might had been a manual test:

&quot;Also, you might want to test the testcases in
WebCore/manual-tests/plugins/windowless.html.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185183</commentid>
    <comment_count>55</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-01-27 12:20:03 -0800</bug_when>
    <thetext>Aha, thanks, there it is:  WebCore/manual-tests/plugins/windowless.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185206</commentid>
    <comment_count>56</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-01-27 13:41:40 -0800</bug_when>
    <thetext>(In reply to comment #55)
&gt; Aha, thanks, there it is:  WebCore/manual-tests/plugins/windowless.html

OK! I tried it, as well as some other pages, and it seems to work nicely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185210</commentid>
    <comment_count>57</comment_count>
      <attachid>47166</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-01-27 13:52:27 -0800</bug_when>
    <thetext>Comment on attachment 47166
gtk windowless v7

OK, the patch looks good to me, and my testing says it&apos;s quite ready to debut. Let&apos;s find the remaining bugs by using it =). Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185213</commentid>
    <comment_count>58</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-01-27 14:06:05 -0800</bug_when>
    <thetext>Yeah, it&apos;s a little messed up for the move/resize operations, I think just the proper rects aren&apos;t invalidating properly.  But the Qt backend has the same problems.  I&apos;d be happy to address that in a later patch (along with some cleanups and common code refactoring), but I&apos;d really like to get this into mainline as is so I can stop maintaining it out of tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185214</commentid>
    <comment_count>59</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-01-27 14:07:04 -0800</bug_when>
    <thetext>(In reply to comment #57)
&gt; (From update of attachment 47166 [details])
&gt; OK, the patch looks good to me, and my testing says it&apos;s quite ready to debut.
&gt; Let&apos;s find the remaining bugs by using it =). Thanks!

Great to hear!  I must say thanks for the experience -- you guys have been very helpful and the patch submission process is mostly painless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185240</commentid>
    <comment_count>60</comment_count>
      <attachid>47166</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-27 15:16:09 -0800</bug_when>
    <thetext>Comment on attachment 47166
gtk windowless v7

Clearing flags on attachment: 47166

Committed r53955: &lt;http://trac.webkit.org/changeset/53955&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185241</commentid>
    <comment_count>61</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-27 15:16:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187782</commentid>
    <comment_count>62</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2010-02-04 07:22:52 -0800</bug_when>
    <thetext>Brian, 

I take it that the edit from OS(SYMBIAN) to PLATFORM(SYMBIAN) in the diff snippet below was an inadvertent error? It seems to be causing a build bust for QtWebkit on Symbian. 

-#if defined(XP_UNIX) || defined(Q_WS_X11) || OS(SYMBIAN)
+#if defined(XP_UNIX) || PLATFORM(SYMBIAN)

Thanks,
Siddharth</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187873</commentid>
    <comment_count>63</comment_count>
    <who name="Brian Tarricone">bjt23</who>
    <bug_when>2010-02-04 11:28:46 -0800</bug_when>
    <thetext>(In reply to comment #62)

&gt; I take it that the edit from OS(SYMBIAN) to PLATFORM(SYMBIAN) in the diff
&gt; snippet below was an inadvertent error? It seems to be causing a build bust for
&gt; QtWebkit on Symbian. 
&gt; 
&gt; -#if defined(XP_UNIX) || defined(Q_WS_X11) || OS(SYMBIAN)
&gt; +#if defined(XP_UNIX) || PLATFORM(SYMBIAN)

Crap, sorry about that.  All I can think is that I messed that one up when resyncing my patch with git master after it had bitrotted.  It should of course be

#if defined(XP_UNIX) || OS(SYMBIAN)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42175</attachid>
            <date>2009-10-29 21:46:26 -0700</date>
            <delta_ts>2009-10-30 20:10:15 -0700</delta_ts>
            <desc>First mostly-broken patch</desc>
            <filename>windowless-gtk-broken-v1.diff</filename>
            <type>text/plain</type>
            <size>23892</size>
            <attacher name="Brian Tarricone">bjt23</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBkNjlmOGE3Li41ODZkZWM0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXcuY3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVu
dChFdmVudCogZXZlbnQpCiAgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91
c2VFdmVudCo+KGV2ZW50KSk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgp
KQogICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQq
PihldmVudCkpOwotI2lmIGRlZmluZWQoUV9XU19YMTEpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQorI2lmIChkZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmluZWQoUV9XU19YMTEpKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5ET01Gb2N1c091dEV2ZW50KQogICAgICAgICBoYW5kbGVGb2N1c091dEV2
ZW50KCk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuRE9NRm9j
dXNJbkV2ZW50KQpAQCAtODE4LDcgKzgxOCw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJh
bWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwCiAg
ICAgLCBtX2RyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCgtMSkpCiAgICAgLCBtX2V2ZW50TW9k
ZWwoTlBFdmVudE1vZGVsKC0xKSkKICNlbmRpZgotI2lmIGRlZmluZWQoUV9XU19YMTEpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIChkZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmlu
ZWQoUV9XU19YMTEpKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAsIG1faGFz
UGVuZGluZ0dlb21ldHJ5Q2hhbmdlKGZhbHNlKQogICAgICwgbV9kcmF3YWJsZSgwKQogICAgICwg
bV92aXN1YWwoMCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDBhNTdmYTYuLjAxZjk2NWMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaApAQCAtMjU5LDcgKzI1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOwogICAgICAg
ICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopOwotI2lmIGRlZmluZWQoUV9XU19Y
MTEpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIChkZWZpbmVkKFhQX1VOSVgp
IHx8IGRlZmluZWQoUV9XU19YMTEpKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAg
ICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoKTsKICAgICAgICAgdm9pZCBoYW5kbGVGb2N1
c091dEV2ZW50KCk7CiAjZW5kaWYKQEAgLTMzMyw3ICszMzMsNyBAQCBwcml2YXRlOgogICAgICAg
ICBQb2ludCBnbG9iYWxNb3VzZVBvc0ZvclBsdWdpbigpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBk
ZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpZiAoZGVm
aW5lZChYUF9VTklYKSB8fCBkZWZpbmVkKFFfV1NfWDExKSkgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CiAgICAg
ICAgIFBpeG1hcCBtX2RyYXdhYmxlOwogICAgICAgICBWaXN1YWwqIG1fdmlzdWFsOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBiL1dlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKaW5kZXggYmMzYTYyMi4uMGNkNWYxZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKICNpbmNsdWRlICJQ
bHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCkBAIC05OCw5ICs5OSwxNiBAQCBib29sIFBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKICAgICByZXR1cm4gYWNjZXB0
ZWQ7CiB9CiAKK3N0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUp
Cit7CisgICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5o
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIEdka1NjcmVlbiAqZ3NjcmVl
biA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOworICAgIHJldHVybiBHREtf
V0lORE9XX1hXSU5ET1coZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOworfQor
CiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiB7Ci0gICAgaWYgKCFwYXJl
bnQoKSB8fCAhbV9pc1dpbmRvd2VkKQorICAgIGlmICghcGFyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CkBAIC0xMTUsNiArMTIz
LDM0IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIAogICAgIGlmIChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpICYmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8
fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkKICAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRl
ZCgpOworCisgICAgLy9pZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9jbGlw
UmVjdCA9PSBvbGRDbGlwUmVjdCkKKyAgICAvLyAgICByZXR1cm47CisKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpCisgICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgbV93aW5kb3dSZWN0LnNpemUoKSAhPSBv
bGRXaW5kb3dSZWN0LnNpemUoKSkgeworICAgICAgICBHdGtXaWRnZXQqIHBhcmVudFdpbmRvdyA9
IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KTsKKworICAgICAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKEdE
S19ESVNQTEFZKCksIG1fZHJhd2FibGUpOworCisgICAgICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRl
UGl4bWFwKEdES19ESVNQTEFZKCksIEdES19EUkFXQUJMRV9YSUQocGFyZW50V2luZG93LT53aW5k
b3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lk
dGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbykt
PmRlcHRoKTsKKyAgICAgICAgWFN5bmMoR0RLX0RJU1BMQVkoKSwgRmFsc2UpOyAvLyBtYWtlIHN1
cmUgdGhhdCB0aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQorICAgIH0KKworICAg
IC8vIGRvIG5vdCBjYWxsIHNldE5QV2luZG93SWZOZWVkZWQgaW1tZWRpYXRlbHksIHdpbGwgYmUg
Y2FsbGVkIG9uIHBhaW50KCkKKyAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IHRydWU7
CisjZW5kaWYKKworICAgIC8vIGluIG9yZGVyIHRvIG1vdmUvcmVzaXplIHRoZSBwbHVnaW4gd2lu
ZG93IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlCisgICAgLy8gcmVzdCBvZiBmcmFtZSBkdXJpbmcg
ZS5nLiBzY3JvbGxpbmcsIHdlIHNldCB0aGUgd2luZG93IGdlb21ldHJ5CisgICAgLy8gaW4gdGhl
IHBhaW50KCkgZnVuY3Rpb24sIGJ1dCBhcyBwYWludCgpIGlzbid0IGNhbGxlZCB3aGVuIHRoZQor
ICAgIC8vIHBsdWdpbiB3aW5kb3cgaXMgb3V0c2lkZSB0aGUgZnJhbWUgd2hpY2ggY2FuIGJlIGNh
dXNlZCBieSBhCisgICAgLy8gc2Nyb2xsLCB3ZSBuZWVkIHRvIG1vdmUvcmVzaXplIGltbWVkaWF0
ZWx5LgorICAgIGlmICghbV93aW5kb3dSZWN0LmludGVyc2VjdHMoZnJhbWVWaWV3LT5mcmFtZVJl
Y3QoKSkpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQbHVnaW5W
aWV3OjpzZXRGb2N1cygpCkBAIC0xNjAsNDMgKzE5NiwyNTQgQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
aWYgKG1faXNXaW5kb3dlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlBFdmVudCBucEV2ZW50
OwotICAgIC8qIE5lZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47CiAKLSAgICBt
X25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICBjb25zdCBib29sIHN5
bmNYID0gdHJ1ZTsgLy8gbV9wbHVnaW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlzcGxheSAhPSBHREtf
RElTUExBWSgpOwogCi0gICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBH
ZGtEcmF3YWJsZSAqZ2RrRHJhd0Rlc3QgPSBjb250ZXh0LT5nZGtEcmF3YWJsZSgpOworICAgIElu
dFJlY3QgZXhwb3NlZFJlY3QocmVjdCk7CisgICAgZXhwb3NlZFJlY3QuaW50ZXJzZWN0KGZyYW1l
UmVjdCgpKTsKKyAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3QoKS54KCksIC1mcmFtZVJl
Y3QoKS55KCkpOworCisjaWYgMCAgLyogdGhpcyBjaGVjayBuZWVkcyBhbiB4c2VydmVyIHJvdW5k
IHRyaXAgYW5kIHNob3VsZG4ndCBmYWlsIGFueXdheSAqLworICAgIGNvbnN0IGludCBkcmF3YWJs
ZURlcHRoID0gKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8p
LT5kZXB0aDsKKyAgICBBU1NFUlQoZHJhd2FibGVEZXB0aCA9PSBnZGtfZHJhd2FibGVfZ2V0X2Rl
cHRoKEdES19EUkFXQUJMRShnZGtEcmF3YWJsZSkpKTsKKyNlbmRpZgorCisgICAgWEV2ZW50IHhl
dmVudDsKKyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworICAgIFhHcmFw
aGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3NleHBvc2U7Cisg
ICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9zZUV2ZW50LmRp
c3BsYXkgPSBHREtfRElTUExBWSgpOworICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9kcmF3
YWJsZTsKKyAgICBleHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOworICAgIGV4cG9zZUV2
ZW50LnkgPSBleHBvc2VkUmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGggPSBleHBvc2Vk
UmVjdC54KCkgKyBleHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyB3
aWR0aCBpcyB0aGUgcmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQorICAgIGV4cG9zZUV2ZW50Lmhl
aWdodCA9IGV4cG9zZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAvLyBmbGFzaCBi
dWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVudCBtb2RlCisK
KyAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50KTsKKworICAgIGlmIChzeW5jWCkKKyAgICAgICAg
WFN5bmMobV9wbHVnaW5EaXNwbGF5LCBGYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4K
KworI2lmIDAgIC8vIFdlIGNhbid0IHVzZSBnZGtfcGl4bWFwX2ZvcmVpZ25fbmV3KCkgaWYgX2xv
b2t1cCgpIGZhaWxzLCBiZWNhdXNlIEFkb2JlCisgICAgICAgLy8gRmxhc2ggZG9lcyBnZGtfcGl4
bWFwX2ZvcmVpZ25fbmV3KCkgd2l0aG91dCBmaXJzdCBjaGVja2luZyB3aXRoIF9sb29rdXAoKSwK
KyAgICAgICAvLyBhbmQgZ2RrIGlzIGFwcGFyZW50bHkgYnJhaW5kZWFkIGFuZCB3aWxsIGNyZWF0
ZSBhIG5ldyBHZGtQaXhtYXAgZXZlbiBpZgorICAgICAgIC8vIHRoZXJlJ3MgYW4gZXhpc3Rpbmcg
b25lLiAgU28sIHdlIGhhdmUgdG8gdXNlIHhsaWIgZm9yIHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcu
CisKKyAgICBHZGtQaXhtYXAqIGdka0RyYXdhYmxlID0gZ2RrX3BpeG1hcF9sb29rdXAobV9kcmF3
YWJsZSk7CisgICAgaWYgKCFnZGtEcmF3YWJsZSkKKyAgICAgICAgZ2RrRHJhd2FibGUgPSBnZGtf
cGl4bWFwX2ZvcmVpZ25fbmV3KG1fZHJhd2FibGUpOworICAgIEdka0dDICpnZGtHQyA9IGdka19n
Y19uZXcoZ2RrRHJhd2FibGUpOworCisgICAgaWYgKCFtX2lzVHJhbnNwYXJlbnQpIHsKKyAgICAg
ICAgLy8gWFhYOiB0aGVyZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzCisgICAg
ICAgIGdka193aW5kb3dfY2xlYXJfYXJlYShHREtfV0lORE9XKGdka0RyYXdEZXN0KSwgZXhwb3Nl
ZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7CisgICAgfQogCi0g
ICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCi0gICAgICAgIExPRyhFdmVudHMsICJQ
bHVnaW5WaWV3OjpwYWludCgpOiBQYWludCBldmVudCBub3QgYWNjZXB0ZWQiKTsKKyAgICBnZGtf
ZHJhd19kcmF3YWJsZShnZGtEcmF3RGVzdCwgZ2RrR0MsIEdES19EUkFXQUJMRShnZGtEcmF3YWJs
ZSksCisgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55
KCksCisgICAgICAgICAgICAgICAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJlY3Qu
eSgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAgICAg
ICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOworCisgICAg
Z19vYmplY3RfdW5yZWYoZ2RrR0MpOworI2Vsc2UKKyAgICBpZiAoIW1faXNUcmFuc3BhcmVudCkg
eworICAgICAgICAvLyBYWFg6IHRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRo
aXMKKyAgICAgICAgWENsZWFyQXJlYShHREtfRElTUExBWSgpLCBHREtfRFJBV0FCTEVfWElEKGdk
a0RyYXdEZXN0KSwKKyAgICAgICAgICAgICAgICAgICBmcmFtZVJlY3QoKS54KCkgKyBleHBvc2Vk
UmVjdC55KCksIGZyYW1lUmVjdCgpLnkoKSArIGV4cG9zZWRSZWN0LnkoKSwKKyAgICAgICAgICAg
ICAgICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSwgRmFsc2Up
OworICAgIH0KKworICAgIEd0a1dpZGdldCogcGFyZW50V2luZG93ID0gbV9wYXJlbnRGcmFtZS0+
dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIEdka1NjcmVl
biogZ3NjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihwYXJlbnRXaW5kb3cpOworICAgIEdD
IGdjID0gWERlZmF1bHRHQyhHREtfRElTUExBWSgpLCAgZ2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdz
Y3JlZW4pKTsKKyAgICBYQ29weUFyZWEoR0RLX0RJU1BMQVkoKSwgbV9kcmF3YWJsZSwgR0RLX0RS
QVdBQkxFX1hJRChnZGtEcmF3RGVzdCksIGdjLCAKKyAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qu
eCgpLCBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCks
IGV4cG9zZWRSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICBmcmFtZVJlY3QoKS54KCkgKyBl
eHBvc2VkUmVjdC55KCksIGZyYW1lUmVjdCgpLnkoKSArIGV4cG9zZWRSZWN0LnkoKSk7CisjZW5k
aWYKKyNlbmRpZiAgLy8gZGVmaW5lZChYUF9VTklYKQogfQogCiB2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgTlBFdmVudCBu
cEV2ZW50OwotICAgIAotICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNz
IHRocm91Z2ggKi8KLQogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChu
cEV2ZW50KSkKKworICAgIGlmKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+
dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBHZGtFdmVudEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+Z2RrRXZlbnRLZXko
KTsKKyAgICBYRXZlbnQgeEV2ZW50OworCisgICAgeEV2ZW50LnR5cGUgPSAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAgLy8gS2V5UHJlc3MvUmVs
ZWFzZSBnZXQgdW5zZXQgc29tZXdoZXJlCisgICAgeEV2ZW50LnhrZXkucm9vdCA9IGdldFJvb3RX
aW5kb3cobV9wYXJlbnRGcmFtZSk7CisgICAgeEV2ZW50LnhrZXkuc3Vid2luZG93ID0gMDsgLy8g
d2UgaGF2ZSBubyBjaGlsZCB3aW5kb3cKKyAgICB4RXZlbnQueGtleS50aW1lID0gZXZlbnQtPnRp
bWVTdGFtcCgpOworICAgIHhFdmVudC54a2V5LnN0YXRlID0gZ2RrRXZlbnQtPnN0YXRlOyAgLy8g
R2RrTW9kaWZpZXJUeXBlIG1pcnJvcnMgeGxpYiBzdGF0ZSBtYXNrcworICAgIHhFdmVudC54a2V5
LmtleWNvZGUgPSBnZGtFdmVudC0+aGFyZHdhcmVfa2V5Y29kZTsKKyAgICB4RXZlbnQueGtleS5z
YW1lX3NjcmVlbiA9IHRydWU7CisKKyAgICAvLyBOT1RFOiBBcyB0aGUgWEV2ZW50cyBzZW50IHRv
IHRoZSBwbHVnLWluIGFyZSBzeW50aGVzaXplZCBhbmQgdGhlcmUgaXMgbm90IGEgbmF0aXZlIHdp
bmRvdworICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBsdWctaW4gcmVjdGFuZ2xlLCBzb21l
IG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBYRXZlbnQgc3RydWN0dXJlcyBhcmUgbm90CisgICAgLy8g
c2V0IHRvIHRoZWlyIG5vcm1hbCBYc2VydmVyIHZhbHVlcy4gZS5nLiBLZXkgZXZlbnRzIGRvbid0
IGhhdmUgYSBwb3NpdGlvbi4KKyAgICAvLyBzb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuL05QRXZlbnQKKyAgICB4RXZlbnQueGtleS54ID0gMDsKKyAgICB4RXZlbnQueGtl
eS55ID0gMDsKKyAgICB4RXZlbnQueGtleS54X3Jvb3QgPSAwOworICAgIHhFdmVudC54a2V5Lnlf
cm9vdCA9IDA7CisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQogICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVN
b3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQorc3RhdGljIHVuc2lnbmVkIGludCBpbnB1dEV2
ZW50U3RhdGUoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgTlBFdmVudCBucEV2ZW50OworICAg
IHVuc2lnbmVkIGludCBzdGF0ZSA9IDA7CisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAg
ICAgIHN0YXRlIHw9IENvbnRyb2xNYXNrOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAg
ICAgICAgc3RhdGUgfD0gU2hpZnRNYXNrOworICAgIGlmIChldmVudC0+YWx0S2V5KCkpCisgICAg
ICAgIHN0YXRlIHw9IE1vZDFNYXNrOworICAgIGlmIChldmVudC0+bWV0YUtleSgpKQorICAgICAg
ICBzdGF0ZSB8PSBNb2Q0TWFzazsKKyAgICByZXR1cm4gc3RhdGU7Cit9CiAKLSAgICBpZiAoIW1f
aXNXaW5kb3dlZCkKLSAgICAgIHJldHVybjsKK3ZvaWQgUGx1Z2luVmlldzo6aW5pdFhFdmVudChY
RXZlbnQqIHhFdmVudCkKK3sKKyAgICBtZW1zZXQoeEV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7
CisKKyAgICB4RXZlbnQtPnhhbnkuc2VyaWFsID0gMDsgLy8gd2UgYXJlIHVuYXdhcmUgb2YgdGhl
IGxhc3QgcmVxdWVzdCBwcm9jZXNzZWQgYnkgWCBTZXJ2ZXIKKyAgICB4RXZlbnQtPnhhbnkuc2Vu
ZF9ldmVudCA9IGZhbHNlOworICAgIHhFdmVudC0+eGFueS5kaXNwbGF5ID0gR0RLX0RJU1BMQVko
KTsKKyAgICAvLyBOT1RFOiBldmVudC0+eGFueS53aW5kb3cgZG9lc24ndCBhbHdheXMgcmVzcG9u
ZCB0byB0aGUgLndpbmRvdyBwcm9wZXJ0eSBvZiBvdGhlciBYRXZlbnQncworICAgIC8vIGJ1dCBk
b2VzIGluIHRoZSBjYXNlIG9mIEtleVByZXNzLCBLZXlSZWxlYXNlLCBCdXR0b25QcmVzcywgQnV0
dG9uUmVsZWFzZSwgYW5kIE1vdGlvbk5vdGlmeQorICAgIC8vIGV2ZW50czsgdGh1cywgdGhpcyBp
cyByaWdodDoKKyAgICBHdGtXaWRnZXQgKndpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICB4RXZlbnQtPnhhbnkud2lu
ZG93ID0gd2lkZ2V0ID8gR0RLX1dJTkRPV19YV0lORE9XKHdpZGdldC0+d2luZG93KSA6IDA7Cit9
CiAKLSAgICAvKiBGSVhNRTogU3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyB0aHJvdWdoICov
Ci0gICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29u
dGVudHNUb1dpbmRvdyhJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsK
K3N0YXRpYyB2b2lkIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50
LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29tUG9zLCBGcmFtZSog
cGFyZW50RnJhbWUpCit7CisgICAgWEJ1dHRvbkV2ZW50JiB4YnV0dG9uID0geEV2ZW50LT54YnV0
dG9uOworICAgIHhidXR0b24udHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50ID8gQnV0dG9uUHJlc3MgOiBCdXR0b25SZWxlYXNlOworICAgIHhidXR0b24u
cm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOworICAgIHhidXR0b24uc3Vid2luZG93
ID0gMDsKKyAgICB4YnV0dG9uLnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeGJ1dHRv
bi54ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHhidXR0b24ueSA9IHBvc3Rab29tUG9zLnkoKTsK
KyAgICB4YnV0dG9uLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeGJ1dHRvbi55X3Jv
b3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhidXR0b24uc3RhdGUgPSBpbnB1dEV2ZW50U3Rh
dGUoZXZlbnQpOworICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgY2FzZSBNaWRk
bGVCdXR0b246CisgICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0
b24zOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExlZnRCdXR0b246CisgICAgZGVmYXVsdDoK
KyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24xOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgeGJ1dHRvbi5zYW1lX3NjcmVlbiA9IHRydWU7Cit9CiAKK3N0YXRpYyB2b2lkIHNldFhN
b3Rpb25FdmVudFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVu
dCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7Cisg
ICAgWE1vdGlvbkV2ZW50JiB4bW90aW9uID0geEV2ZW50LT54bW90aW9uOworICAgIHhtb3Rpb24u
dHlwZSA9IE1vdGlvbk5vdGlmeTsKKyAgICB4bW90aW9uLnJvb3QgPSBnZXRSb290V2luZG93KHBh
cmVudEZyYW1lKTsKKyAgICB4bW90aW9uLnN1YndpbmRvdyA9IDA7CisgICAgeG1vdGlvbi50aW1l
ID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgIHhtb3Rpb24ueCA9IHBvc3Rab29tUG9zLngoKTsK
KyAgICB4bW90aW9uLnkgPSBwb3N0Wm9vbVBvcy55KCk7CisgICAgeG1vdGlvbi54X3Jvb3QgPSBl
dmVudC0+c2NyZWVuWCgpOworICAgIHhtb3Rpb24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsK
KyAgICB4bW90aW9uLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKKyAgICB4bW90aW9u
LmlzX2hpbnQgPSBOb3RpZnlOb3JtYWw7CisgICAgeG1vdGlvbi5zYW1lX3NjcmVlbiA9IHRydWU7
Cit9CisKK3N0YXRpYyB2b2lkIHNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50
KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3Ms
IEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sKKyAgICBYQ3Jvc3NpbmdFdmVudCYgeGNyb3NzaW5nID0g
eEV2ZW50LT54Y3Jvc3Npbmc7CisgICAgeGNyb3NzaW5nLnR5cGUgPSBldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCA/IEVudGVyTm90aWZ5IDogTGVhdmVOb3RpZnk7
CisgICAgeGNyb3NzaW5nLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4
Y3Jvc3Npbmcuc3Vid2luZG93ID0gMDsKKyAgICB4Y3Jvc3NpbmcudGltZSA9IGV2ZW50LT50aW1l
U3RhbXAoKTsKKyAgICB4Y3Jvc3NpbmcueCA9IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4Y3Jvc3Np
bmcueSA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4Y3Jvc3NpbmcueF9yb290ID0gZXZlbnQtPnNj
cmVlblgoKTsKKyAgICB4Y3Jvc3NpbmcueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4
Y3Jvc3Npbmcuc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHhjcm9zc2luZy5t
b2RlID0gTm90aWZ5Tm9ybWFsOworICAgIHhjcm9zc2luZy5kZXRhaWwgPSBOb3RpZnlEZXRhaWxO
b25lOworICAgIHhjcm9zc2luZy5zYW1lX3NjcmVlbiA9IHRydWU7CisgICAgeGNyb3NzaW5nLmZv
Y3VzID0gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50KiBldmVudCkKK3sKICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgaWYgKCFkaXNwYXRjaE5QRXZl
bnQobnBFdmVudCkpCisKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBYRXZlbnQgeEV2ZW50OworICAgIGluaXRYRXZlbnQoJnhFdmVudCk7CisKKyAgICAvL0lu
dFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9X
aW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CisgICAgSW50
UG9pbnQgcG9zdFpvb21Qb3MgPSByb3VuZGVkSW50UG9pbnQobV9lbGVtZW50LT5yZW5kZXJlcigp
LT5hYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSkpOworCisgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgc2V0WEJ1dHRvbkV2
ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZy
YW1lKTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1v
dmVFdmVudCkKKyAgICAgICAgc2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwg
ZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1lKTsKKyAgICBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KQorICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNw
ZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZSk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudCh4
RXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAordm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIFhFdmVudCBucEV2ZW50Owor
ICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50
ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9IDk7ICAvLyBGb2N1c0luIGdldHMg
dW5zZXQgc29tZXdoZXJlCisgICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVu
dC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZl
bnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAg
IFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZvY3Vz
Q2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9IDEw
OyAgLy8gRm9jdXNPdXQgZ2V0cyB1bnNldCBzb21ld2hlcmUKKyAgICBldmVudC5tb2RlID0gTm90
aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisKKyAgICBk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisKIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50
KFNjcm9sbFZpZXcqIHBhcmVudCkKIHsKICAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwpA
QCAtMjA3LDcgKzQ1NCw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcq
IHBhcmVudCkKIAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVj
dCYpCiB7Ci0gICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworICAgIGlmICghbV9pc1dpbmRvd2Vk
KQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6
c2V0TlBXaW5kb3dJZk5lZWRlZCgpCkBAIC0yMTUsMjQgKzQ2Myw1NyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIXBhcmVu
dCgpIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX25wV2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOwotICAgIG1fbnBXaW5k
b3cueSA9IG1fd2luZG93UmVjdC55KCk7Ci0gICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93
UmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdo
dCgpOworICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQgc3VjZXNzZnVsbHksIG5vIHBv
aW50IGluIGNhbGxpbmcgc2V0d2luZG93CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1
c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50
b3AgPSBtX2NsaXBSZWN0LnkoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9j
bGlwUmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9jbGlw
UmVjdC5oZWlnaHQoKTsKKyAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luIGlmIGl0J3Mg
ZnVsbC1wYWdlIG9yIHdpbmRvd2VkCisgICAgaWYgKG1fbW9kZSAhPSBOUF9GVUxMICYmIG1fbW9k
ZSAhPSBOUF9FTUJFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHBs
YXRmb3JtUGx1Z2luV2lkZ2V0IHN0aWxsIGV4aXN0cworICAgIGlmIChtX2lzV2luZG93ZWQgJiYg
IXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbiA9IHsgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwg
bV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSB9OwotICAgIGd0a193
aWRnZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmYWxsb2NhdGlvbik7
CisgICAgaWYgKCFtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gZmFsc2U7CisKKyAgICBpZiAobV9pc1dp
bmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7CisgICAg
ICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVjdC55KCk7CisgICAgICAgIG1fbnBXaW5kb3cu
d2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQg
PSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5s
ZWZ0ID0gbV9jbGlwUmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0g
bV9jbGlwUmVjdC55KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX2Ns
aXBSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9j
bGlwUmVjdC5oZWlnaHQoKTsKKworICAgICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgp
LCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKICNpZiBQTEFURk9STShY
UF9VTklYKQotICAgIGlmICghbV9uZWVkc1hFbWJlZCkgewotICAgICAgICBndGtfeHRiaW5fc2V0
X3Bvc2l0aW9uKEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSwgbV93aW5kb3dSZWN0
LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7Ci0gICAgICAgIGd0a194dGJpbl9yZXNpemUocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWln
aHQoKSk7Ci0gICAgfQorICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAg
IGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
LCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGd0a194
dGJpbl9yZXNpemUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LndpZHRoKCks
IG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KICNlbmRpZgorICAgIH0gZWxzZSB7
CisgICAgICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisK
KyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0g
MDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSAwOworICAgIH0KKworICAg
IC8vIEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkgc2V0IGluaXRpYWxseS4gTXVsdGlwbGUgY2FsbHMg
dG8KKyAgICAvLyBzZXROUFdpbmRvdygpIGNhdXNlIHRoZSBwbHVnaW4gdG8gY3Jhc2ggaW4gd2lu
ZG93ZWQgbW9kZS4KKyAgICBpZiAoIW1faXNXaW5kb3dlZCB8fCBtX25wV2luZG93LndpZHRoID09
ICh1bnNpZ25lZCBpbnQpLTEgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gKHVuc2lnbmVkIGludCkt
MSkgeworICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7Cisg
ICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOworICAgIH0K
IAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKQEAgLTMxMSw2ICs1OTIsMTQgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0
YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCiAgICAgICAgICpzdGF0aWNf
Y2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwogICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CiAKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6CisjaWYgZGVmaW5lZChYUF9V
TklYKQorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyNlbHNl
CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgor
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKICAgICB9CkBAIC00MTQsNyArNzAzLDggQEAgdm9p
ZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCiAgICAgfQogCiAgICAg
SW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0
LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOwotICAgIGludmFsaWRhdGVSZWN0KHIpOworICAg
IC8vaW52YWxpZGF0ZVJlY3Qocik7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0
KHIpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pCkBA
IC00MzEsNiArNzIxLDE2IEBAIHZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQogICAgICAg
ICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93
KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKIH0KIAorc3RhdGljIERpc3BsYXkgKmdldFBsdWdp
bkRpc3BsYXkoKQoreworICAgIC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBoYXZlIGEgZGlm
ZmVyZW50IFggY29ubmVjdGlvbiBvcGVuLiAgU2luY2Ugd2UncmUKKyAgICAvLyBhIGdkay9ndGsg
YXBwLCB3ZSdsbCAocHJvYmFibHk/KSBoYXZlIHRoZSBzYW1lIFggY29ubmVjdGlvbiBhcyBhbnkg
Z2RrLWJhc2VkCisgICAgLy8gcGx1Z2lucywgc28gd2UgY2FuIHJldHVybiB0aGF0LiAgV2UgbWln
aHQgd2FudCB0byBhZGQgb3RoZXIgaW1wbGVtZW50YXRpb25zIGhlcmUKKyAgICAvLyBsYXRlci4K
KworICAgIHJldHVybiBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpKTsKK30KKwogc3RhdGljIGdib29sZWFuCiBwbHVnX3JlbW92ZWRfY2IoR3RrU29ja2V0ICpz
b2NrZXQsIGdwb2ludGVyKQogewpAQCAtNDUxLDI2ICs3NTEsMzUgQEAgYm9vbCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcoMCk7CiAgICAgfQogCisgICAgaWYgKG1faXNXaW5kb3dlZCkgewogI2lmIGRlZmluZWQoWFBf
VU5JWCkKLSAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICBpZiAobV9uZWVkc1hFbWJl
ZCkgeworICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3NvY2tldF9uZXcoKSk7Cisg
ICAgICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpOworICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLCAicGx1Z19yZW1vdmVkIiwgR19DQUxMQkFDSyhwbHVnX3JlbW92ZWRfY2IpLCBO
VUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0
a194dGJpbl9uZXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpLT53aW5kb3csIDApKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgc2V0
UGxhdGZvcm1XaWRnZXQoZ3RrX3NvY2tldF9uZXcoKSk7CiAgICAgICAgIGd0a19jb250YWluZXJf
YWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpKSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgInBsdWdfcmVtb3ZlZCIsIEdf
Q0FMTEJBQ0socGx1Z19yZW1vdmVkX2NiKSwgTlVMTCk7Ci0gICAgfSBlbHNlIGlmIChtX2lzV2lu
ZG93ZWQpCi0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a194dGJpbl9uZXcobV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT53aW5kb3cs
IDApKTsKLSNlbHNlCi0gICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3NvY2tldF9uZXcoKSk7Ci0g
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudEZyYW1lLT52aWV3KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKTsKICNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDAp
OworICAgICAgICBtX3BsdWdpbkRpc3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7CisgICAgfQor
ICAgIAogICAgIHNob3coKTsKIAotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgbV9u
cFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworCiAjaWYgZGVmaW5lZChYUF9VTklY
KQogICAgICAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0ICp3cyA9IG5ldyBOUFNldFdpbmRv
d0NhbGxiYWNrU3RydWN0KCk7Ci0KICAgICAgICAgd3MtPnR5cGUgPSAwOworI2VuZGlmCiAKKyAg
ICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZVdpbmRvdzsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgICAgIGlmIChtX25lZWRzWEVt
YmVkKSB7CiAgICAgICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSk7CiAgICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilndGtfc29ja2V0
X2dldF9pZChHVEtfU09DS0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpKTsKQEAgLTQ4NiwyNSAr
Nzk1LDc2IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgICAgICAgICB3
cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSktPnh0Y2xpZW50
Lnh0Y29sb3JtYXA7CiAgICAgICAgIH0KICAgICAgICAgWEZsdXNoICh3cy0+ZGlzcGxheSk7Ci0K
LSAgICAgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CiAjZWxpZiBkZWZpbmVkKEdES19XSU5E
T1dJTkdfV0lOMzIpCiAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKUdES19XSU5E
T1dfSFdORChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5kb3cpOwogI2VuZGlmCiAgICAgfSBl
bHNlIHsKICAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0g
ICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSAwOyAvLyBOb3QgdXNlZD8KKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAgICAgR2RrRGlz
cGxheSogZ2RweSA9IGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCk7CisgICAgICAgIEdka1NjcmVl
biAqIGdzY3JlZW4gPSBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdF9zY3JlZW4oZ2RweSk7CisgICAg
ICAgIGludCB4c2NybiA9IGdka19zY3JlZW5fZ2V0X251bWJlcihnc2NyZWVuKTsKKyAgICAgICAg
R2RrVmlzdWFsKiBndmlzdWFsID0gTlVMTDsKKyAgICAgICAgR2RrQ29sb3JtYXAqIGdjbWFwID0g
TlVMTDsKKworICAgICAgICBpZiAoWERlZmF1bHREZXB0aChHREtfRElTUExBWV9YRElTUExBWShn
ZHB5KSwgeHNjcm4pID09IDMyIHx8ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCkpIHsKKyAgICAgICAgICAgIGdjbWFwID0g
Z2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChnc2NyZWVuKTsKKyAgICAgICAgICAgIGlmIChn
Y21hcCkgeworICAgICAgICAgICAgICAgIGd2aXN1YWwgPSBnZGtfY29sb3JtYXBfZ2V0X3Zpc3Vh
bChnY21hcCk7CisKKyAgICAgICAgICAgICAgICBtX2NvbG9ybWFwID0gR0RLX0NPTE9STUFQX1hD
T0xPUk1BUChnY21hcCk7CisgICAgICAgICAgICAgICAgbV92aXN1YWwgPSBHREtfVklTVUFMX1hW
SVNVQUwoZ3Zpc3VhbCk7CisgICAgICAgICAgICAgICAgd3MtPmRlcHRoID0gMzI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fdmlzdWFsKSB7CisgICAgICAgICAg
ICBnY21hcCA9IGdka19jb2xvcm1hcF9nZXRfc3lzdGVtKCk7CisgICAgICAgICAgICBndmlzdWFs
ID0gZ2RrX2NvbG9ybWFwX2dldF92aXN1YWwoZ2NtYXApOworCisgICAgICAgICAgICBtX2NvbG9y
bWFwID0gR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnY21hcCk7CisgICAgICAgICAgICBtX3Zpc3Vh
bCA9IEdES19WSVNVQUxfWFZJU1VBTChndmlzdWFsKTsKKyAgICAgICAgICAgIHdzLT5kZXB0aCA9
IGd2aXN1YWwtPmRlcHRoOworICAgICAgICB9CisKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtf
RElTUExBWSgpOworICAgICAgICB3cy0+dmlzdWFsID0gbV92aXN1YWw7CisgICAgICAgIHdzLT5j
b2xvcm1hcCA9IG1fY29sb3JtYXA7CisKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAg
ICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAg
ICAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworI2Vsc2UKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKICAgICB9CiAKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKwogICAgIC8vIFRPRE8g
cmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRzLCBsaWtlIG1hYyBwb3J0PwotICAgIGlmICgh
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5k
b3dDYWxsKSkpCisgICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1
aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkgewogICAgICAgICB1cGRhdGVQbHVnaW5XaWRn
ZXQoKTsgLy8gd2FzOiBzZXROUFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRvZXNuJ3QgcHJv
ZHVjZSAweDAgcmVjdHMgYXQgZmlyc3QgZ28KKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgp
OworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnBsYXRm
b3JtRGVzdHJveSgpCiB7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlmIChtX2RyYXdhYmxl
KSB7CisgICAgICAgIFhGcmVlUGl4bWFwKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUpOworICAg
ICAgICBtX2RyYXdhYmxlID0gMDsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3
OjpoYWx0KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42247</attachid>
            <date>2009-10-30 20:10:15 -0700</date>
            <delta_ts>2009-11-02 16:52:35 -0800</delta_ts>
            <desc>Second mostly-working patch</desc>
            <filename>windowless-gtk-broken-v2.diff</filename>
            <type>text/plain</type>
            <size>22775</size>
            <attacher name="Brian Tarricone">bjt23</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBkNjlmOGE3Li41ODZkZWM0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXcuY3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVu
dChFdmVudCogZXZlbnQpCiAgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91
c2VFdmVudCo+KGV2ZW50KSk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgp
KQogICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQq
PihldmVudCkpOwotI2lmIGRlZmluZWQoUV9XU19YMTEpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQorI2lmIChkZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmluZWQoUV9XU19YMTEpKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5ET01Gb2N1c091dEV2ZW50KQogICAgICAgICBoYW5kbGVGb2N1c091dEV2
ZW50KCk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuRE9NRm9j
dXNJbkV2ZW50KQpAQCAtODE4LDcgKzgxOCw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJh
bWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwCiAg
ICAgLCBtX2RyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCgtMSkpCiAgICAgLCBtX2V2ZW50TW9k
ZWwoTlBFdmVudE1vZGVsKC0xKSkKICNlbmRpZgotI2lmIGRlZmluZWQoUV9XU19YMTEpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIChkZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmlu
ZWQoUV9XU19YMTEpKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAsIG1faGFz
UGVuZGluZ0dlb21ldHJ5Q2hhbmdlKGZhbHNlKQogICAgICwgbV9kcmF3YWJsZSgwKQogICAgICwg
bV92aXN1YWwoMCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDBhNTdmYTYuLjAxZjk2NWMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaApAQCAtMjU5LDcgKzI1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOwogICAgICAg
ICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopOwotI2lmIGRlZmluZWQoUV9XU19Y
MTEpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIChkZWZpbmVkKFhQX1VOSVgp
IHx8IGRlZmluZWQoUV9XU19YMTEpKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAg
ICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoKTsKICAgICAgICAgdm9pZCBoYW5kbGVGb2N1
c091dEV2ZW50KCk7CiAjZW5kaWYKQEAgLTMzMyw3ICszMzMsNyBAQCBwcml2YXRlOgogICAgICAg
ICBQb2ludCBnbG9iYWxNb3VzZVBvc0ZvclBsdWdpbigpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBk
ZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpZiAoZGVm
aW5lZChYUF9VTklYKSB8fCBkZWZpbmVkKFFfV1NfWDExKSkgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CiAgICAg
ICAgIFBpeG1hcCBtX2RyYXdhYmxlOwogICAgICAgICBWaXN1YWwqIG1fdmlzdWFsOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBiL1dlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKaW5kZXggYmMzYTYyMi4uNDJhNmRiOSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKICNpbmNsdWRlICJQ
bHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCkBAIC05OCw5ICs5OSwxNiBAQCBib29sIFBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKICAgICByZXR1cm4gYWNjZXB0
ZWQ7CiB9CiAKK3N0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUp
Cit7CisgICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5o
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIEdka1NjcmVlbiAqZ3NjcmVl
biA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOworICAgIHJldHVybiBHREtf
V0lORE9XX1hXSU5ET1coZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOworfQor
CiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiB7Ci0gICAgaWYgKCFwYXJl
bnQoKSB8fCAhbV9pc1dpbmRvd2VkKQorICAgIGlmICghcGFyZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CkBAIC0xMTUsNiArMTIz
LDM0IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIAogICAgIGlmIChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpICYmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8
fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkKICAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRl
ZCgpOworCisgICAgLy9pZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9jbGlw
UmVjdCA9PSBvbGRDbGlwUmVjdCkKKyAgICAvLyAgICByZXR1cm47CisKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpCisgICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgbV93aW5kb3dSZWN0LnNpemUoKSAhPSBv
bGRXaW5kb3dSZWN0LnNpemUoKSkgeworICAgICAgICBHdGtXaWRnZXQqIHBhcmVudFdpbmRvdyA9
IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KTsKKworICAgICAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKEdE
S19ESVNQTEFZKCksIG1fZHJhd2FibGUpOworCisgICAgICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRl
UGl4bWFwKEdES19ESVNQTEFZKCksIEdES19EUkFXQUJMRV9YSUQocGFyZW50V2luZG93LT53aW5k
b3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lk
dGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbykt
PmRlcHRoKTsKKyAgICAgICAgWFN5bmMoR0RLX0RJU1BMQVkoKSwgRmFsc2UpOyAvLyBtYWtlIHN1
cmUgdGhhdCB0aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQorICAgIH0KKworICAg
IC8vIGRvIG5vdCBjYWxsIHNldE5QV2luZG93SWZOZWVkZWQgaW1tZWRpYXRlbHksIHdpbGwgYmUg
Y2FsbGVkIG9uIHBhaW50KCkKKyAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IHRydWU7
CisjZW5kaWYKKworICAgIC8vIGluIG9yZGVyIHRvIG1vdmUvcmVzaXplIHRoZSBwbHVnaW4gd2lu
ZG93IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlCisgICAgLy8gcmVzdCBvZiBmcmFtZSBkdXJpbmcg
ZS5nLiBzY3JvbGxpbmcsIHdlIHNldCB0aGUgd2luZG93IGdlb21ldHJ5CisgICAgLy8gaW4gdGhl
IHBhaW50KCkgZnVuY3Rpb24sIGJ1dCBhcyBwYWludCgpIGlzbid0IGNhbGxlZCB3aGVuIHRoZQor
ICAgIC8vIHBsdWdpbiB3aW5kb3cgaXMgb3V0c2lkZSB0aGUgZnJhbWUgd2hpY2ggY2FuIGJlIGNh
dXNlZCBieSBhCisgICAgLy8gc2Nyb2xsLCB3ZSBuZWVkIHRvIG1vdmUvcmVzaXplIGltbWVkaWF0
ZWx5LgorICAgIGlmICghbV93aW5kb3dSZWN0LmludGVyc2VjdHMoZnJhbWVWaWV3LT5mcmFtZVJl
Y3QoKSkpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQbHVnaW5W
aWV3OjpzZXRGb2N1cygpCkBAIC0xNjAsNDMgKzE5NiwyNDMgQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
aWYgKG1faXNXaW5kb3dlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlBFdmVudCBucEV2ZW50
OwotICAgIC8qIE5lZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47CiAKLSAgICBt
X25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICBjb25zdCBib29sIHN5
bmNYID0gbV9wbHVnaW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlzcGxheSAhPSBHREtfRElTUExBWSgp
OwogCi0gICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBJbnRSZWN0IGV4
cG9zZWRSZWN0KHJlY3QpOworICAgIGV4cG9zZWRSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7
CisgICAgZXhwb3NlZFJlY3QubW92ZSgtZnJhbWVSZWN0KCkueCgpLCAtZnJhbWVSZWN0KCkueSgp
KTsKIAotICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBMT0coRXZl
bnRzLCAiUGx1Z2luVmlldzo6cGFpbnQoKTogUGFpbnQgZXZlbnQgbm90IGFjY2VwdGVkIik7Cisj
aWYgMCAgLyogdGhpcyBjaGVjayBuZWVkcyBhbiB4c2VydmVyIHJvdW5kIHRyaXAgYW5kIHNob3Vs
ZG4ndCBmYWlsIGFueXdheSAqLworICAgIGNvbnN0IGludCBkcmF3YWJsZURlcHRoID0gKChOUFNl
dFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aDsKKyAgICBB
U1NFUlQoZHJhd2FibGVEZXB0aCA9PSBnZGtfZHJhd2FibGVfZ2V0X2RlcHRoKEdES19EUkFXQUJM
RShnZGtEcmF3YWJsZSkpKTsKKyNlbmRpZgorCisgICAgWEV2ZW50IHhldmVudDsKKyAgICBtZW1z
ZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOworICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50
JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3NleHBvc2U7CisgICAgZXhwb3NlRXZlbnQu
dHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9zZUV2ZW50LmRpc3BsYXkgPSBHREtfRElT
UExBWSgpOworICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxlID0gbV9kcmF3YWJsZTsKKyAgICBleHBv
c2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOworICAgIGV4cG9zZUV2ZW50LnkgPSBleHBvc2Vk
UmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGggPSBleHBvc2VkUmVjdC54KCkgKyBleHBv
c2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmln
aHQgaW4gdHJhbnNwYXJlbnQgbW9kZQorICAgIGV4cG9zZUV2ZW50LmhlaWdodCA9IGV4cG9zZWRS
ZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyBo
ZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVudCBtb2RlCisKKyAgICBkaXNwYXRjaE5Q
RXZlbnQoeGV2ZW50KTsKKworICAgIGlmIChzeW5jWCkKKyAgICAgICAgWFN5bmMobV9wbHVnaW5E
aXNwbGF5LCBGYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4KKworICAgIC8vIFRoaXMg
Y2FsbCAqbXVzdCogYmUgZG9uZSBhZnRlciB0aGUgYWJvdmUgZXhwb3NlLCBiZWNhdXNlIHNvbWUg
cGx1Z2lucworICAgIC8vIChsaWtlIEFkb2JlIEZsYXNoKSBhcHBlYXIgdG8gY2FsbCBnZGtfcGl4
bWFwX2ZvcmVpZ25fbmV3KCkgb24gdGhlCisgICAgLy8gcGFzc2VkIERyYXdhYmxlIHdpdGhvdXQg
Zmlyc3QgZG9pbmcgZ2RrX3BpeG1hcF9sb29rdXAoKS4gIElmIHdlIGNyZWF0ZQorICAgIC8vIHRo
ZSBHZGtQaXhtYXAgaGVyZSBiZWZvcmUgQWRvYmUgZG9lcywgdGhlbiBBZG9iZSdzIF9mb3JlaWdu
X25ldygpIHdpbGwKKyAgICAvLyB0cmlnZ2VyIGEgZ2RrIHdhcm5pbmcuICAoSWRlYWxseSwgZ2Rr
IHdvdWxkIGZpcnN0IGRvIGEgbG9va3VwIGJlZm9yZQorICAgIC8vIGNyZWF0aW5nIGEgbmV3IG9u
ZSwgbGlrZSBpdCBkb2VzIGZvciBXaW5kb3dzLCBidXQgb2ggd2VsbCwgbm90aGluZyB3ZQorICAg
IC8vIGNhbiBkbyBhYm91dCB0aGF0LikKKyAgICBHZGtQaXhtYXAqIGdka0RyYXdhYmxlID0gZ2Rr
X3BpeG1hcF9sb29rdXAobV9kcmF3YWJsZSk7CisgICAgaWYgKCFnZGtEcmF3YWJsZSkKKyAgICAg
ICAgZ2RrRHJhd2FibGUgPSBnZGtfcGl4bWFwX2ZvcmVpZ25fbmV3KG1fZHJhd2FibGUpOworCisg
ICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBjYWlyb19z
YXZlKGNyKTsKKworICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeG1hcChjciwgZ2RrRHJhd2Fi
bGUsIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpKTsKKworICAgIGNhaXJvX3JlY3Rh
bmdsZShjciwKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJl
Y3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICBj
YWlyb19jbGlwKGNyKTsKKworICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpIC8vIFRoaXMgY2F1c2Vz
IHBhaW50aW5nIHByb2JsZW1zCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9f
T1BFUkFUT1JfT1ZFUik7CisgICAgZWxzZQorICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3Is
IENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworCisgICAgY2Fp
cm9fcmVzdG9yZShjcik7CisjZW5kaWYgIC8vIGRlZmluZWQoWFBfVU5JWCkKIH0KIAogdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewot
ICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICAKLSAgICAvKiBGSVhNRTogU3ludGhlc2l6ZSBhbiBY
RXZlbnQgdG8gcGFzcyB0aHJvdWdoICovCi0KICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgaWYgKCFkaXNw
YXRjaE5QRXZlbnQobnBFdmVudCkpCisKKyAgICBpZihtX2lzV2luZG93ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZl
bnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR2RrRXZlbnRLZXkqIGdka0V2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCkt
Pmdka0V2ZW50S2V5KCk7CisgICAgWEV2ZW50IHhFdmVudDsKKworICAgIHhFdmVudC50eXBlID0g
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgPyAyIDogMzsgIC8v
IEtleVByZXNzL1JlbGVhc2UgZ2V0IHVuc2V0IHNvbWV3aGVyZQorICAgIHhFdmVudC54a2V5LnJv
b3QgPSBnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUpOworICAgIHhFdmVudC54a2V5LnN1Yndp
bmRvdyA9IDA7IC8vIHdlIGhhdmUgbm8gY2hpbGQgd2luZG93CisgICAgeEV2ZW50LnhrZXkudGlt
ZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4RXZlbnQueGtleS5zdGF0ZSA9IGdka0V2ZW50
LT5zdGF0ZTsgIC8vIEdka01vZGlmaWVyVHlwZSBtaXJyb3JzIHhsaWIgc3RhdGUgbWFza3MKKyAg
ICB4RXZlbnQueGtleS5rZXljb2RlID0gZ2RrRXZlbnQtPmhhcmR3YXJlX2tleWNvZGU7CisgICAg
eEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4gPSB0cnVlOworCisgICAgLy8gTk9URTogQXMgdGhlIFhF
dmVudHMgc2VudCB0byB0aGUgcGx1Zy1pbiBhcmUgc3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5v
dCBhIG5hdGl2ZSB3aW5kb3cKKyAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJl
Y3RhbmdsZSwgc29tZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJl
IG5vdAorICAgIC8vIHNldCB0byB0aGVpciBub3JtYWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5
IGV2ZW50cyBkb24ndCBoYXZlIGEgcG9zaXRpb24uCisgICAgLy8gc291cmNlOiBodHRwczovL2Rl
dmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OUEV2ZW50CisgICAgeEV2ZW50LnhrZXkueCA9IDA7Cisg
ICAgeEV2ZW50LnhrZXkueSA9IDA7CisgICAgeEV2ZW50LnhrZXkueF9yb290ID0gMDsKKyAgICB4
RXZlbnQueGtleS55X3Jvb3QgPSAwOworCisgICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQoeEV2ZW50
KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKLXZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3N0YXRpYyB1bnNpZ25l
ZCBpbnQgaW5wdXRFdmVudFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIE5QRXZlbnQg
bnBFdmVudDsKKyAgICB1bnNpZ25lZCBpbnQgc3RhdGUgPSAwOworICAgIGlmIChldmVudC0+Y3Ry
bEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBDb250cm9sTWFzazsKKyAgICBpZiAoZXZlbnQtPnNo
aWZ0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IFNoaWZ0TWFzazsKKyAgICBpZiAoZXZlbnQtPmFs
dEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2QxTWFzazsKKyAgICBpZiAoZXZlbnQtPm1ldGFL
ZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kNE1hc2s7CisgICAgcmV0dXJuIHN0YXRlOworfQog
Ci0gICAgaWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICByZXR1cm47Cit2b2lkIFBsdWdpblZpZXc6
OmluaXRYRXZlbnQoWEV2ZW50KiB4RXZlbnQpCit7CisgICAgbWVtc2V0KHhFdmVudCwgMCwgc2l6
ZW9mKFhFdmVudCkpOworCisgICAgeEV2ZW50LT54YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFyZSB1
bmF3YXJlIG9mIHRoZSBsYXN0IHJlcXVlc3QgcHJvY2Vzc2VkIGJ5IFggU2VydmVyCisgICAgeEV2
ZW50LT54YW55LnNlbmRfZXZlbnQgPSBmYWxzZTsKKyAgICB4RXZlbnQtPnhhbnkuZGlzcGxheSA9
IEdES19ESVNQTEFZKCk7CisgICAgLy8gTk9URTogZXZlbnQtPnhhbnkud2luZG93IGRvZXNuJ3Qg
YWx3YXlzIHJlc3BvbmQgdG8gdGhlIC53aW5kb3cgcHJvcGVydHkgb2Ygb3RoZXIgWEV2ZW50J3MK
KyAgICAvLyBidXQgZG9lcyBpbiB0aGUgY2FzZSBvZiBLZXlQcmVzcywgS2V5UmVsZWFzZSwgQnV0
dG9uUHJlc3MsIEJ1dHRvblJlbGVhc2UsIGFuZCBNb3Rpb25Ob3RpZnkKKyAgICAvLyBldmVudHM7
IHRodXMsIHRoaXMgaXMgcmlnaHQ6CisgICAgR3RrV2lkZ2V0ICp3aWRnZXQgPSBtX3BhcmVudEZy
YW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgeEV2
ZW50LT54YW55LndpbmRvdyA9IHdpZGdldCA/IEdES19XSU5ET1dfWFdJTkRPVyh3aWRnZXQtPndp
bmRvdykgOiAwOworfQogCi0gICAgLyogRklYTUU6IFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBh
c3MgdGhyb3VnaCAqLwotICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihw
YXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50
LT5wYWdlWSgpKSk7CitzdGF0aWMgdm9pZCBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhY
RXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9v
bVBvcywgRnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIFhCdXR0b25FdmVudCYgeGJ1dHRvbiA9
IHhFdmVudC0+eGJ1dHRvbjsKKyAgICB4YnV0dG9uLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRvblByZXNzIDogQnV0dG9uUmVsZWFzZTsK
KyAgICB4YnV0dG9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4YnV0
dG9uLnN1YndpbmRvdyA9IDA7CisgICAgeGJ1dHRvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgp
OworICAgIHhidXR0b24ueCA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4YnV0dG9uLnkgPSBwb3N0
Wm9vbVBvcy55KCk7CisgICAgeGJ1dHRvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAg
IHhidXR0b24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4YnV0dG9uLnN0YXRlID0g
aW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKKyAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewor
ICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgIHhidXR0b24u
YnV0dG9uID0gQnV0dG9uMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZWZ0QnV0dG9uOgor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVlOworfQorCitzdGF0
aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91
c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJhbWUqIHBhcmVu
dEZyYW1lKQoreworICAgIFhNb3Rpb25FdmVudCYgeG1vdGlvbiA9IHhFdmVudC0+eG1vdGlvbjsK
KyAgICB4bW90aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgeG1vdGlvbi5yb290ID0gZ2V0
Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeG1vdGlvbi5zdWJ3aW5kb3cgPSAwOworICAg
IHhtb3Rpb24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4bW90aW9uLnggPSBwb3N0
Wm9vbVBvcy54KCk7CisgICAgeG1vdGlvbi55ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhtb3Rp
b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4bW90aW9uLnlfcm9vdCA9IGV2ZW50
LT5zY3JlZW5ZKCk7CisgICAgeG1vdGlvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7
CisgICAgeG1vdGlvbi5pc19oaW50ID0gTm90aWZ5Tm9ybWFsOworICAgIHhtb3Rpb24uc2FtZV9z
Y3JlZW4gPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmlj
RmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQm
IHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWENyb3NzaW5nRXZlbnQm
IHhjcm9zc2luZyA9IHhFdmVudC0+eGNyb3NzaW5nOworICAgIHhjcm9zc2luZy50eXBlID0gZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBFbnRlck5vdGlmeSA6
IExlYXZlTm90aWZ5OworICAgIHhjcm9zc2luZy5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRG
cmFtZSk7CisgICAgeGNyb3NzaW5nLnN1YndpbmRvdyA9IDA7CisgICAgeGNyb3NzaW5nLnRpbWUg
PSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeGNyb3NzaW5nLnggPSBwb3N0Wm9vbVBvcy55KCk7
CisgICAgeGNyb3NzaW5nLnkgPSBwb3N0Wm9vbVBvcy54KCk7CisgICAgeGNyb3NzaW5nLnhfcm9v
dCA9IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeGNyb3NzaW5nLnlfcm9vdCA9IGV2ZW50LT5zY3Jl
ZW5ZKCk7CisgICAgeGNyb3NzaW5nLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKKyAg
ICB4Y3Jvc3NpbmcubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICB4Y3Jvc3NpbmcuZGV0YWlsID0g
Tm90aWZ5RGV0YWlsTm9uZTsKKyAgICB4Y3Jvc3Npbmcuc2FtZV9zY3JlZW4gPSB0cnVlOworICAg
IHhjcm9zc2luZy5mb2N1cyA9IGZhbHNlOworfQogCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgWEV2ZW50IHhFdmVudDsKKyAgICBpbml0WEV2ZW50KCZ4RXZlbnQp
OworCisgICAgLy9JbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkp
LT5jb250ZW50c1RvV2luZG93KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVko
KSkpOworICAgIEludFBvaW50IHBvc3Rab29tUG9zID0gcm91bmRlZEludFBvaW50KG1fZWxlbWVu
dC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKGV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkp
KTsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCisgICAgICAg
IHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBv
cywgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vtb3ZlRXZlbnQpCisgICAgICAgIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmll
bGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKKyAgICAgICAgc2V0WENy
b3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1f
cGFyZW50RnJhbWUpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFkaXNw
YXRjaE5QRXZlbnQoeEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiB9CiAKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBYRXZl
bnQgbnBFdmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKworICAgIFhGb2N1c0NoYW5n
ZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50LnR5cGUgPSA5OyAgLy8g
Rm9jdXNJbiBnZXRzIHVuc2V0IHNvbWV3aGVyZQorICAgIGV2ZW50Lm1vZGUgPSBOb3RpZnlOb3Jt
YWw7CisgICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKKworICAgIGRpc3BhdGNo
TlBFdmVudChucEV2ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2
ZW50KCkKK3sKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsK
KworICAgIFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2
ZW50LnR5cGUgPSAxMDsgIC8vIEZvY3VzT3V0IGdldHMgdW5zZXQgc29tZXdoZXJlCisgICAgZXZl
bnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxO
b25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCiB2b2lkIFBsdWdpblZp
ZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiB7CiAgICAgV2lkZ2V0OjpzZXRQYXJl
bnQocGFyZW50KTsKQEAgLTIwNyw3ICs0NDMsOCBAQCB2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVu
dChTY3JvbGxWaWV3KiBwYXJlbnQpCiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0
KGNvbnN0IEludFJlY3QmKQogewotICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKyAgICBpZiAo
IW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogfQogCiB2b2lk
IFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQpAQCAtMjE1LDI0ICs0NTIsNTcgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICBpZiAoIW1faXNTdGFy
dGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsK
LSAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOwotICAgIG1fbnBXaW5kb3cud2lk
dGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2lu
ZG93UmVjdC5oZWlnaHQoKTsKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGRpZG4ndCBsb2FkIHN1Y2Vz
c2Z1bGx5LCBubyBwb2ludCBpbiBjYWxsaW5nIHNldHdpbmRvdworICAgIGlmIChtX3N0YXR1cyAh
PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKIAotICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOwotICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LmJv
dHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisgICAgLy8gT24gVW5peCwgb25seSBjYWxsIHBs
dWdpbiBpZiBpdCdzIGZ1bGwtcGFnZSBvciB3aW5kb3dlZAorICAgIGlmIChtX21vZGUgIT0gTlBf
RlVMTCAmJiBtX21vZGUgIT0gTlBfRU1CRUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENo
ZWNrIGlmIHRoZSBwbGF0Zm9ybVBsdWdpbldpZGdldCBzdGlsbCBleGlzdHMKKyAgICBpZiAobV9p
c1dpbmRvd2VkICYmICFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICByZXR1cm47CiAK
LSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVjdC54KCksIG1fd2lu
ZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkg
fTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
JmFsbG9jYXRpb24pOworICAgIGlmICghbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNlOworCisg
ICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2luZG93LnggPSBtX3dpbmRvd1Jl
Y3QueCgpOworICAgICAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOworICAgICAg
ICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBX
aW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOworCisgICAgICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOworICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LnRvcCA9IG1fY2xpcFJlY3QueSgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0
LnJpZ2h0ID0gbV9jbGlwUmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0
LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisKKyAgICAgICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRv
d1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmYWxsb2NhdGlvbik7CiAj
aWYgUExBVEZPUk0oWFBfVU5JWCkKLSAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAg
Z3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSks
IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOwotICAgICAgICBndGtfeHRiaW5f
cmVzaXplKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dp
bmRvd1JlY3QuaGVpZ2h0KCkpOwotICAgIH0KKyAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7
CisgICAgICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAg
ICAgICAgICBndGtfeHRiaW5fcmVzaXplKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93
UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CiAjZW5kaWYK
KyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93LnggPSAwOworICAgICAgICBtX25wV2lu
ZG93LnkgPSAwOworCisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAg
ICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5yaWdodCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gMDsK
KyAgICB9CisKKyAgICAvLyBGTEFTSCBXT1JLQVJPVU5EOiBPbmx5IHNldCBpbml0aWFsbHkuIE11
bHRpcGxlIGNhbGxzIHRvCisgICAgLy8gc2V0TlBXaW5kb3coKSBjYXVzZSB0aGUgcGx1Z2luIHRv
IGNyYXNoIGluIHdpbmRvd2VkIG1vZGUuCisgICAgaWYgKCFtX2lzV2luZG93ZWQgfHwgbV9ucFdp
bmRvdy53aWR0aCA9PSAodW5zaWduZWQgaW50KS0xIHx8IG1fbnBXaW5kb3cuaGVpZ2h0ID09ICh1
bnNpZ25lZCBpbnQpLTEpIHsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93UmVj
dC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWln
aHQoKTsKKyAgICB9CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlz
KTsKICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CkBAIC0zMTEsNiArNTgxLDE0IEBAIE5QRXJyb3IgUGx1Z2luVmll
dzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQogICAg
ICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOwogCisgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorI2lm
IGRlZmluZWQoWFBfVU5JWCkKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9
IHRydWU7CisjZWxzZQorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFs
c2U7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCiAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAgICAgfQpAQCAtNDE0LDcg
KzY5Miw4IEBAIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQog
ICAgIH0KIAogICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0
IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKLSAgICBpbnZhbGlkYXRl
UmVjdChyKTsKKyAgICAvL2ludmFsaWRhdGVSZWN0KHIpOworICAgIGludmFsaWRhdGVXaW5kb3ds
ZXNzUGx1Z2luUmVjdChyKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9u
KE5QUmVnaW9uKQpAQCAtNDMxLDYgKzcxMCwxNiBAQCB2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVk
cmF3KCkKICAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1fcGFyZW50RnJhbWUtPnZpZXco
KS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7CiB9CiAKK3N0YXRpYyBEaXNw
bGF5ICpnZXRQbHVnaW5EaXNwbGF5KCkKK3sKKyAgICAvLyBUaGUgcGx1Z2luIHRvb2xraXQgbWln
aHQgaGF2ZSBhIGRpZmZlcmVudCBYIGNvbm5lY3Rpb24gb3Blbi4gIFNpbmNlIHdlJ3JlCisgICAg
Ly8gYSBnZGsvZ3RrIGFwcCwgd2UnbGwgKHByb2JhYmx5PykgaGF2ZSB0aGUgc2FtZSBYIGNvbm5l
Y3Rpb24gYXMgYW55IGdkay1iYXNlZAorICAgIC8vIHBsdWdpbnMsIHNvIHdlIGNhbiByZXR1cm4g
dGhhdC4gIFdlIG1pZ2h0IHdhbnQgdG8gYWRkIG90aGVyIGltcGxlbWVudGF0aW9ucyBoZXJlCisg
ICAgLy8gbGF0ZXIuCisKKyAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3Bs
YXlfZ2V0X2RlZmF1bHQoKSk7Cit9CisKIHN0YXRpYyBnYm9vbGVhbgogcGx1Z19yZW1vdmVkX2Ni
KEd0a1NvY2tldCAqc29ja2V0LCBncG9pbnRlcikKIHsKQEAgLTQ1MSwyNiArNzQwLDM1IEBAIGJv
b2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KDApOwogICAgIH0KIAorICAgIGlmIChtX2lzV2luZG93ZWQpIHsKICNp
ZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgaWYg
KG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2Nr
ZXRfbmV3KCkpOworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkp
LCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgInBsdWdfcmVtb3ZlZCIsIEdfQ0FMTEJBQ0socGx1Z19y
ZW1vdmVkX2NiKSwgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXRQbGF0
Zm9ybVdpZGdldChndGtfeHRiaW5fbmV3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRv
dygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+d2luZG93LCAwKSk7CisgICAgICAgIH0KKyNlbHNl
CiAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkpOwogICAgICAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
OwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVn
X3JlbW92ZWQiLCBHX0NBTExCQUNLKHBsdWdfcmVtb3ZlZF9jYiksIE5VTEwpOwotICAgIH0gZWxz
ZSBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfeHRiaW5f
bmV3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKS0+d2luZG93LCAwKSk7Ci0jZWxzZQotICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2Nr
ZXRfbmV3KCkpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSwgcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSk7CiAjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBzZXRQbGF0
Zm9ybVdpZGdldCgwKTsKKyAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxh
eSgpOworICAgIH0KKyAgICAKICAgICBzaG93KCk7CiAKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7
Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKwogI2lmIGRl
ZmluZWQoWFBfVU5JWCkKICAgICAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAqd3MgPSBu
ZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwotCiAgICAgICAgIHdzLT50eXBlID0gMDsK
KyNlbmRpZgogCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2luZG93LnR5
cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisjaWYgZGVmaW5lZChYUF9VTklYKQogICAgICAgICBp
ZiAobV9uZWVkc1hFbWJlZCkgewogICAgICAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpOwogICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9p
ZCopZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSk7
CkBAIC00ODYsMjUgKzc4NCw2OCBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQog
ICAgICAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpLT54dGNsaWVudC54dGNvbG9ybWFwOwogICAgICAgICB9CiAgICAgICAgIFhGbHVzaCAod3Mt
PmRpc3BsYXkpOwotCi0gICAgICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOwogI2VsaWYgZGVm
aW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQogICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2
b2lkKilHREtfV0lORE9XX0hXTkQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+d2luZG93KTsKICNl
bmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CisgICAgICAgIG1fbnBX
aW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisg
ICAgICAgIEdka1Zpc3VhbCogZ3Zpc3VhbDsKKyAgICAgICAgR2RrQ29sb3JtYXAqIGdjbWFwOwor
CisgICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1
aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCkpIHsKKyAgICAgICAgICAgIGdjbWFwID0gZ2RrX2NvbG9y
bWFwX2dldF9zeXN0ZW0oKTsKKyAgICAgICAgICAgIGd2aXN1YWwgPSBnZGtfY29sb3JtYXBfZ2V0
X3Zpc3VhbChnY21hcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHdGtXaWRnZXQq
IHBhcmVudFdpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0
Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgICAgIGdjbWFwID0gZ3RrX3dpZGdldF9nZXRfY29s
b3JtYXAocGFyZW50V2lkZ2V0KTsKKyAgICAgICAgICAgIGd2aXN1YWwgPSBndGtfd2lkZ2V0X2dl
dF92aXN1YWwocGFyZW50V2lkZ2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29sb3JtYXAg
PSBHREtfQ09MT1JNQVBfWENPTE9STUFQKGdjbWFwKTsKKyAgICAgICAgbV92aXN1YWwgPSBHREtf
VklTVUFMX1hWSVNVQUwoZ3Zpc3VhbCk7CisgICAgICAgIHdzLT5kZXB0aCA9IGd2aXN1YWwtPmRl
cHRoOworCisgICAgICAgIHByaW50ZigiZGVwdGggPSAlZFxuIiwgd3MtPmRlcHRoKTsKKworICAg
ICAgICB3cy0+ZGlzcGxheSA9IEdES19ESVNQTEFZKCk7CisgICAgICAgIHdzLT52aXN1YWwgPSBt
X3Zpc3VhbDsKKyAgICAgICAgd3MtPmNvbG9ybWFwID0gbV9jb2xvcm1hcDsKKworICAgICAgICBt
X25wV2luZG93LnggPSAwOworICAgICAgICBtX25wV2luZG93LnkgPSAwOworICAgICAgICBtX25w
V2luZG93LndpZHRoID0gLTE7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7CisjZWxz
ZQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0
YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogICAg
IH0KIAorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBtX25wV2luZG93LndzX2luZm8gPSB3czsK
KyNlbmRpZgorCiAgICAgLy8gVE9ETyByZW1vdmUgaW4gZmF2b3Igb2YgbnVsbCBldmVudHMsIGxp
a2UgbWFjIHBvcnQ/Ci0gICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkKKyAgICBpZiAoIShtX3BsdWdpbi0+cXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKSB7CiAg
ICAgICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOyAvLyB3YXM6IHNldE5QV2luZG93SWZOZWVkZWQo
KSwgYnV0IHRoaXMgZG9lc24ndCBwcm9kdWNlIDB4MCByZWN0cyBhdCBmaXJzdCBnbworICAgICAg
ICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IHZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKIHsKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgaWYgKG1fZHJhd2FibGUpIHsKKyAgICAgICAgWEZyZWVQaXhtYXAoR0RLX0RJU1BM
QVkoKSwgbV9kcmF3YWJsZSk7CisgICAgICAgIG1fZHJhd2FibGUgPSAwOworICAgIH0KKyNlbmRp
ZgogfQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbHQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42350</attachid>
            <date>2009-11-02 16:52:35 -0800</date>
            <delta_ts>2009-11-05 19:15:14 -0800</delta_ts>
            <desc>Take 3, mostly working</desc>
            <filename>windowless-gtk-v3.diff</filename>
            <type>text/plain</type>
            <size>26761</size>
            <attacher name="Brian Tarricone">bjt23</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3BjcmUvcGNyZV90YWJsZXMuY3BwIGIvSmF2YVNj
cmlwdENvcmUvcGNyZS9wY3JlX3RhYmxlcy5jcHAKaW5kZXggODY5Njg3OS4uMjlmNDg5MSAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcGNyZS9wY3JlX3RhYmxlcy5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvcGNyZS9wY3JlX3RhYmxlcy5jcHAKQEAgLTY5LDQgKzY5LDYgQEAgY29uc3QgdW5z
aWduZWQgY2hhciBqc2NfcGNyZV91dGY4X3RhYmxlNFsweDQwXSA9IHsKICAgMiwyLDIsMiwyLDIs
MiwyLDIsMiwyLDIsMiwyLDIsMiwKICAgMywzLDMsMywzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSB9
OwogCisjaWYgIWRlZmluZWQoUV9XU19YMTEpCiAjaW5jbHVkZSAiY2hhcnRhYmxlcy5jIgorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggZDY5ZjhhNy4uMTU3YmIxMiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
RXZlbnQoRXZlbnQqIGV2ZW50KQogICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0
PE1vdXNlRXZlbnQqPihldmVudCkpOwogICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZl
bnQoKSkKICAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZXZlbnQpKTsKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLkRPTUZv
Y3VzT3V0RXZlbnQpCiAgICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICAgICBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01Gb2N1c0luRXZlbnQpCkBAIC04MDEs
NyArODAxLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAKICAgICAsIG1faXNUcmFuc3BhcmVu
dChmYWxzZSkKICAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV9pc1dhaXRp
bmdUb1N0YXJ0KGZhbHNlKQotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gx
MSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oV1gpICYmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpAQCAtODE4LDcgKzgxOCw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZp
ZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdl
KiBwCiAgICAgLCBtX2RyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCgtMSkpCiAgICAgLCBtX2V2
ZW50TW9kZWwoTlBFdmVudE1vZGVsKC0xKSkKICNlbmRpZgotI2lmIGRlZmluZWQoUV9XU19YMTEp
ICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNo
YW5nZShmYWxzZSkKICAgICAsIG1fZHJhd2FibGUoMCkKICAgICAsIG1fdmlzdWFsKDApCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaAppbmRleCAwYTU3ZmE2Li45YjJiY2RhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAg
LTI1OSw3ICsyNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICAgICAgdm9pZCBoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqKTsKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQogICAgICAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudCgpOwogICAgICAg
ICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICNlbmRpZgpAQCAtMjkyLDcgKzI5Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKICAg
ICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7CiAKLSNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8
IGRlZmluZWQoUV9XU19YMTEpCisjaWYgZGVmaW5lZChYUF9VTklYKQogICAgICAgICBib29sIG1f
bmVlZHNYRW1iZWQ7CiAjZW5kaWYKIApAQCAtMzIwLDcgKzMyMCw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKIAotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gxMSkgfHwgUExB
VEZPUk0oU1lNQklBTikKKyNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBMQVRGT1JNKFNZTUJJQU4p
CiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2VsaWYgZGVmaW5lZChYUF9N
QUNPU1gpCiAgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OwpAQCAtMzMzLDcgKzMz
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIFBvaW50IGdsb2JhbE1vdXNlUG9zRm9yUGx1Z2luKCkg
Y29uc3Q7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUV9XU19YMTEpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CiAgICAg
ICAgIFBpeG1hcCBtX2RyYXdhYmxlOwogICAgICAgICBWaXN1YWwqIG1fdmlzdWFsOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBiL1dlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKaW5kZXggYmMzYTYyMi4uODljYzUwYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKICNpbmNsdWRlICJQ
bHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCkBAIC02Miw2ICs2Myw5IEBACiAjaWYgZGVmaW5l
ZChYUF9VTklYKQogI2luY2x1ZGUgImd0azJ4dGJpbi5oIgogI2luY2x1ZGUgPGdkay9nZGt4Lmg+
CisjZGVmaW5lIEJvb2wgaW50CisjZGVmaW5lIFN0YXR1cyBpbnQKKyNpbmNsdWRlIDxYMTEvZXh0
ZW5zaW9ucy9YcmVuZGVyLmg+CiAjZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfV0lOMzIpCiAj
aW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgogI2luY2x1ZGUgPGdkay9nZGt3
aW4zMi5oPgpAQCAtOTgsOSArMTAyLDE4IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2
ZW50KE5QRXZlbnQmIGV2ZW50KQogICAgIHJldHVybiBhY2NlcHRlZDsKIH0KIAorI2lmIGRlZmlu
ZWQoWFBfVU5JWCkKK3N0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJh
bWUpCit7CisgICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIEdka1NjcmVlbiogZ3Nj
cmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOworICAgIHJldHVybiBH
REtfV0lORE9XX1hXSU5ET1coZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOwor
fQorI2VuZGlmCisKIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIHsKLSAg
ICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisgICAgaWYgKCFwYXJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKQEAg
LTExNSw2ICsxMjgsMzQgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQog
CiAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgJiYgKG1fd2luZG93UmVjdCAhPSBvbGRX
aW5kb3dSZWN0IHx8IG1fY2xpcFJlY3QgIT0gb2xkQ2xpcFJlY3QpKQogICAgICAgICBzZXROUFdp
bmRvd0lmTmVlZGVkKCk7CisKKyAgICAvL2lmIChtX3dpbmRvd1JlY3QgPT0gb2xkV2luZG93UmVj
dCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQorICAgIC8vICAgIHJldHVybjsKKworI2lm
IGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAoIW1faXNXaW5kb3dlZCAmJiBtX3dpbmRvd1JlY3Qu
c2l6ZSgpICE9IG9sZFdpbmRvd1JlY3Quc2l6ZSgpKSB7CisgICAgICAgIEd0a1dpZGdldCogcGFy
ZW50V2luZG93ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpOworCisgICAgICAgIGlmIChtX2RyYXdhYmxlKQorICAgICAgICAgICAgWEZy
ZWVQaXhtYXAoR0RLX0RJU1BMQVkoKSwgbV9kcmF3YWJsZSk7CisKKyAgICAgICAgbV9kcmF3YWJs
ZSA9IFhDcmVhdGVQaXhtYXAoR0RLX0RJU1BMQVkoKSwgR0RLX0RSQVdBQkxFX1hJRChwYXJlbnRX
aW5kb3ctPndpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2lu
ZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRv
dy53c19pbmZvKS0+ZGVwdGgpOworICAgICAgICBYU3luYyhHREtfRElTUExBWSgpLCBGYWxzZSk7
IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIga25vd3MgYWJvdXQgdGhlIERyYXdhYmxlCisg
ICAgfQorCisgICAgLy8gZG8gbm90IGNhbGwgc2V0TlBXaW5kb3dJZk5lZWRlZCBpbW1lZGlhdGVs
eSwgd2lsbCBiZSBjYWxsZWQgb24gcGFpbnQoKQorICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hh
bmdlID0gdHJ1ZTsKKyNlbmRpZgorCisgICAgLy8gaW4gb3JkZXIgdG8gbW92ZS9yZXNpemUgdGhl
IHBsdWdpbiB3aW5kb3cgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUKKyAgICAvLyByZXN0IG9mIGZy
YW1lIGR1cmluZyBlLmcuIHNjcm9sbGluZywgd2Ugc2V0IHRoZSB3aW5kb3cgZ2VvbWV0cnkKKyAg
ICAvLyBpbiB0aGUgcGFpbnQoKSBmdW5jdGlvbiwgYnV0IGFzIHBhaW50KCkgaXNuJ3QgY2FsbGVk
IHdoZW4gdGhlCisgICAgLy8gcGx1Z2luIHdpbmRvdyBpcyBvdXRzaWRlIHRoZSBmcmFtZSB3aGlj
aCBjYW4gYmUgY2F1c2VkIGJ5IGEKKyAgICAvLyBzY3JvbGwsIHdlIG5lZWQgdG8gbW92ZS9yZXNp
emUgaW1tZWRpYXRlbHkuCisgICAgaWYgKCFtX3dpbmRvd1JlY3QuaW50ZXJzZWN0cyhmcmFtZVZp
ZXctPmZyYW1lUmVjdCgpKSkKKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogfQogCiB2
b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkKQEAgLTE2MCw0MyArMjAxLDI4MCBAQCB2b2lkIFBs
dWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKICAgICBpZiAobV9pc1dpbmRvd2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBOUEV2
ZW50IG5wRXZlbnQ7Ci0gICAgLyogTmVlZCB0byBzeW50aGVzaXplIFhldmVudHMgaGVyZSAqLwor
I2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVy
bjsKIAotICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgIGNv
bnN0IGJvb2wgc3luY1ggPSBtX3BsdWdpbkRpc3BsYXkgJiYgbV9wbHVnaW5EaXNwbGF5ICE9IEdE
S19ESVNQTEFZKCk7CisKKyAgICBJbnRSZWN0IGV4cG9zZWRSZWN0KHJlY3QpOworICAgIGV4cG9z
ZWRSZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CisgICAgZXhwb3NlZFJlY3QubW92ZSgtZnJh
bWVSZWN0KCkueCgpLCAtZnJhbWVSZWN0KCkueSgpKTsKKworICAgIFdpbmRvdyBkdW1teV93Owor
ICAgIGludCBkdW1teV9pOworICAgIHVuc2lnbmVkIGludCBkdW1teV91aSwgYWN0dWFsRGVwdGgg
PSAwOworICAgIFhHZXRHZW9tZXRyeShHREtfRElTUExBWSgpLCBtX2RyYXdhYmxlLCAmZHVtbXlf
dywgJmR1bW15X2ksICZkdW1teV9pLAorICAgICAgICAgICAgICAgICAmZHVtbXlfdWksICZkdW1t
eV91aSwgJmR1bW15X3VpLCAmYWN0dWFsRGVwdGgpOworCisgICAgY29uc3QgaW50IGRyYXdhYmxl
RGVwdGggPSAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbykt
PmRlcHRoOworICAgIEFTU0VSVChkcmF3YWJsZURlcHRoID09IGFjdHVhbERlcHRoKTsKKworICAg
IGlmIChtX2lzVHJhbnNwYXJlbnQgJiYgZHJhd2FibGVEZXB0aCAhPSAzMikgeworICAgICAgICAv
LyBBdHRlbXB0IHRvIGZha2UgaXQgd2hlbiB3ZSBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwg
b24gb3VyCisgICAgICAgIC8vIHBpeG1hcC4gIElmIHRoYXQncyBub3QgcG9zc2libGUsIGF0IGxl
YXN0IGNsZWFyIHRoZSB3aW5kb3cgdG8KKyAgICAgICAgLy8gYXZvaWQgZHJhd2luZyBhcnRpZmFj
dHMuCisgICAgICAgIEdDIGdjID0gWERlZmF1bHRHQyhHREtfRElTUExBWSgpLCBnZGtfc2NyZWVu
X2dldF9udW1iZXIoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKSk7CisgICAgICAgIEd0a1dpZGdl
dCAqd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpOworICAgICAgICBHZGtEcmF3YWJsZSAqZ2RrQmFja2luZ1N0b3JlID0gTlVM
TDsKKyAgICAgICAgZ2ludCB4b2ZmID0gMCwgeW9mZiA9IDA7CisKKyAgICAgICAgZ2RrX3dpbmRv
d19nZXRfaW50ZXJuYWxfcGFpbnRfaW5mbyh3aWRnZXQtPndpbmRvdywgJmdka0JhY2tpbmdTdG9y
ZSwgJnhvZmYsICZ5b2ZmKTsKKworICAgICAgICBpZiAoZ2RrQmFja2luZ1N0b3JlKSB7CisgICAg
ICAgICAgICBYQ29weUFyZWEoR0RLX0RJU1BMQVkoKSwgR0RLX0RSQVdBQkxFX1hJRChnZGtCYWNr
aW5nU3RvcmUpLCBtX2RyYXdhYmxlLCBnYywKKyAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRv
d1JlY3QueCgpICsgZXhwb3NlZFJlY3QueCgpIC0geG9mZiwKKyAgICAgICAgICAgICAgICAgICAg
ICBtX3dpbmRvd1JlY3QueSgpICsgZXhwb3NlZFJlY3QueSgpIC0geW9mZiwKKyAgICAgICAgICAg
ICAgICAgICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBubyB2YWxpZCBiYWNraW5nIHN0b3JlOyBj
bGVhciB0byB0aGUgYmFja2dyb3VuZCBjb2xvcgorICAgICAgICAgICAgWEZpbGxSZWN0YW5nbGUo
R0RLX0RJU1BMQVkoKSwgbV9kcmF3YWJsZSwgZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICAg
ICAgfQorICAgIH0KIAotICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAg
WEV2ZW50IHhldmVudDsKKyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhFdmVudCkpOwor
ICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54Z3JhcGhpY3Nl
eHBvc2U7CisgICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOworICAgIGV4cG9z
ZUV2ZW50LmRpc3BsYXkgPSBHREtfRElTUExBWSgpOworICAgIGV4cG9zZUV2ZW50LmRyYXdhYmxl
ID0gbV9kcmF3YWJsZTsKKyAgICBleHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3QueCgpOworICAg
IGV4cG9zZUV2ZW50LnkgPSBleHBvc2VkUmVjdC55KCk7CisgICAgZXhwb3NlRXZlbnQud2lkdGgg
PSBleHBvc2VkUmVjdC54KCkgKyBleHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFzaCBidWc/IGl0
IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQorICAgIGV4cG9z
ZUV2ZW50LmhlaWdodCA9IGV4cG9zZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0LmhlaWdodCgpOyAv
LyBmbGFzaCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0cmFuc3BhcmVu
dCBtb2RlCisKKyAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50KTsKKworICAgIGlmIChzeW5jWCkK
KyAgICAgICAgWFN5bmMobV9wbHVnaW5EaXNwbGF5LCBGYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBi
eSBwbHVnaW4KKworICAgIC8vIFRoaXMgY2FsbCAqbXVzdCogYmUgZG9uZSBhZnRlciB0aGUgYWJv
dmUgZXhwb3NlLCBiZWNhdXNlIHNvbWUgcGx1Z2lucworICAgIC8vIChsaWtlIEFkb2JlIEZsYXNo
KSBhcHBlYXIgdG8gY2FsbCBnZGtfcGl4bWFwX2ZvcmVpZ25fbmV3KCkgb24gdGhlCisgICAgLy8g
cGFzc2VkIERyYXdhYmxlIHdpdGhvdXQgZmlyc3QgZG9pbmcgZ2RrX3BpeG1hcF9sb29rdXAoKS4g
IElmIHdlIGNyZWF0ZQorICAgIC8vIHRoZSBHZGtQaXhtYXAgaGVyZSBiZWZvcmUgQWRvYmUgZG9l
cywgdGhlbiBBZG9iZSdzIF9mb3JlaWduX25ldygpIHdpbGwKKyAgICAvLyB0cmlnZ2VyIGEgZ2Rr
IHdhcm5pbmcuICAoSWRlYWxseSwgZ2RrIHdvdWxkIGZpcnN0IGRvIGEgbG9va3VwIGJlZm9yZQor
ICAgIC8vIGNyZWF0aW5nIGEgbmV3IG9uZSwgbGlrZSBpdCBkb2VzIGZvciBXaW5kb3dzLCBidXQg
b2ggd2VsbCwgbm90aGluZyB3ZQorICAgIC8vIGNhbiBkbyBhYm91dCB0aGF0LikKKyAgICBHZGtQ
aXhtYXAqIGdka0RyYXdhYmxlID0gZ2RrX3BpeG1hcF9sb29rdXAobV9kcmF3YWJsZSk7CisgICAg
aWYgKCFnZGtEcmF3YWJsZSkKKyAgICAgICAgZ2RrRHJhd2FibGUgPSBnZGtfcGl4bWFwX2ZvcmVp
Z25fbmV3KG1fZHJhd2FibGUpOworCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBjYWlyb19zYXZlKGNyKTsKKworICAgIGdka19jYWlyb19zZXRfc291
cmNlX3BpeG1hcChjciwgZ2RrRHJhd2FibGUsIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCku
eSgpKTsKKworICAgIGNhaXJvX3JlY3RhbmdsZShjciwKKyAgICAgICAgICAgICAgICAgICAgZnJh
bWVSZWN0KCkueCgpICsgZXhwb3NlZFJlY3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2Vk
UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9z
ZWRSZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19jbGlwKGNyKTsKKworICAgIGlmIChtX2lzVHJh
bnNwYXJlbnQpCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1Jf
T1ZFUik7CisgICAgZWxzZQorICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09Q
RVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOwogCi0gICAgaWYgKCFkaXNwYXRj
aE5QRXZlbnQobnBFdmVudCkpCi0gICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpwYWlu
dCgpOiBQYWludCBldmVudCBub3QgYWNjZXB0ZWQiKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsK
KyNlbmRpZiAgLy8gZGVmaW5lZChYUF9VTklYKQogfQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgTlBFdmVudCBucEV2
ZW50OwotICAgIAotICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRo
cm91Z2ggKi8KLQogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2
ZW50KSkKKworICAgIGlmKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+dHlw
ZSgpICE9IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBO
UEV2ZW50IHhFdmVudDsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgR2RrRXZlbnRLZXkqIGdk
a0V2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5KCk7CisKKyAgICB4RXZlbnQu
dHlwZSA9IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpID8gMiA6
IDM7ICAvLyBLZXlQcmVzcy9SZWxlYXNlIGdldCB1bnNldCBzb21ld2hlcmUKKyAgICB4RXZlbnQu
eGtleS5yb290ID0gZ2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lKTsKKyAgICB4RXZlbnQueGtl
eS5zdWJ3aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNoaWxkIHdpbmRvdworICAgIHhFdmVudC54
a2V5LnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBn
ZGtFdmVudC0+c3RhdGU7ICAvLyBHZGtNb2RpZmllclR5cGUgbWlycm9ycyB4bGliIHN0YXRlIG1h
c2tzCisgICAgeEV2ZW50LnhrZXkua2V5Y29kZSA9IGdka0V2ZW50LT5oYXJkd2FyZV9rZXljb2Rl
OworICAgIHhFdmVudC54a2V5LnNhbWVfc2NyZWVuID0gdHJ1ZTsKKworICAgIC8vIE5PVEU6IEFz
IHRoZSBYRXZlbnRzIHNlbnQgdG8gdGhlIHBsdWctaW4gYXJlIHN5bnRoZXNpemVkIGFuZCB0aGVy
ZSBpcyBub3QgYSBuYXRpdmUgd2luZG93CisgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgcGx1
Zy1pbiByZWN0YW5nbGUsIHNvbWUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIFhFdmVudCBzdHJ1Y3R1
cmVzIGFyZSBub3QKKyAgICAvLyBzZXQgdG8gdGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFsdWVzLiBl
LmcuIEtleSBldmVudHMgZG9uJ3QgaGF2ZSBhIHBvc2l0aW9uLgorICAgIC8vIHNvdXJjZTogaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vTlBFdmVudAorICAgIHhFdmVudC54a2V5Lngg
PSAwOworICAgIHhFdmVudC54a2V5LnkgPSAwOworICAgIHhFdmVudC54a2V5Lnhfcm9vdCA9IDA7
CisgICAgeEV2ZW50LnhrZXkueV9yb290ID0gMDsKKyNlbmRpZgorCisgICAgaWYgKCFkaXNwYXRj
aE5QRXZlbnQoeEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9
CiAKLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCitzdGF0aWMgdW5zaWduZWQgaW50IGlucHV0RXZlbnRTdGF0
ZShNb3VzZUV2ZW50KiBldmVudCkKIHsKLSAgICBOUEV2ZW50IG5wRXZlbnQ7CisgICAgdW5zaWdu
ZWQgaW50IHN0YXRlID0gMDsKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgc3Rh
dGUgfD0gQ29udHJvbE1hc2s7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBz
dGF0ZSB8PSBTaGlmdE1hc2s7CisgICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAgc3Rh
dGUgfD0gTW9kMU1hc2s7CisgICAgaWYgKGV2ZW50LT5tZXRhS2V5KCkpCisgICAgICAgIHN0YXRl
IHw9IE1vZDRNYXNrOworICAgIHJldHVybiBzdGF0ZTsKK30KIAotICAgIGlmICghbV9pc1dpbmRv
d2VkKQotICAgICAgcmV0dXJuOwordm9pZCBQbHVnaW5WaWV3Ojppbml0WEV2ZW50KFhFdmVudCog
eEV2ZW50KQoreworICAgIG1lbXNldCh4RXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsKKworICAg
IHhFdmVudC0+eGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBhcmUgdW5hd2FyZSBvZiB0aGUgbGFzdCBy
ZXF1ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgorICAgIHhFdmVudC0+eGFueS5zZW5kX2V2ZW50
ID0gZmFsc2U7CisgICAgeEV2ZW50LT54YW55LmRpc3BsYXkgPSBHREtfRElTUExBWSgpOworICAg
IC8vIE5PVEU6IGV2ZW50LT54YW55LndpbmRvdyBkb2Vzbid0IGFsd2F5cyByZXNwb25kIHRvIHRo
ZSAud2luZG93IHByb3BlcnR5IG9mIG90aGVyIFhFdmVudCdzCisgICAgLy8gYnV0IGRvZXMgaW4g
dGhlIGNhc2Ugb2YgS2V5UHJlc3MsIEtleVJlbGVhc2UsIEJ1dHRvblByZXNzLCBCdXR0b25SZWxl
YXNlLCBhbmQgTW90aW9uTm90aWZ5CisgICAgLy8gZXZlbnRzOyB0aHVzLCB0aGlzIGlzIHJpZ2h0
OgorICAgIEd0a1dpZGdldCAqd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2lu
ZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIHhFdmVudC0+eGFueS53aW5kb3cgPSB3
aWRnZXQgPyBHREtfV0lORE9XX1hXSU5ET1cod2lkZ2V0LT53aW5kb3cpIDogMDsKK30KIAotICAg
IC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91Z2ggKi8KLSAgICBJ
bnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1Rv
V2luZG93KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworc3RhdGlj
IHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNl
RXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRG
cmFtZSkKK3sKKyAgICBYQnV0dG9uRXZlbnQmIHhidXR0b24gPSB4RXZlbnQtPnhidXR0b247Cisg
ICAgeGJ1dHRvbi50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQgPyBCdXR0b25QcmVzcyA6IEJ1dHRvblJlbGVhc2U7CisgICAgeGJ1dHRvbi5yb290ID0g
Z2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeGJ1dHRvbi5zdWJ3aW5kb3cgPSAwOwor
ICAgIHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4YnV0dG9uLnggPSBw
b3N0Wm9vbVBvcy54KCk7CisgICAgeGJ1dHRvbi55ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhi
dXR0b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4YnV0dG9uLnlfcm9vdCA9IGV2
ZW50LT5zY3JlZW5ZKCk7CisgICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVu
dCk7CisgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICBjYXNlIE1pZGRsZUJ1dHRv
bjoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjM7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICBkZWZhdWx0OgorICAgICAg
ICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB4
YnV0dG9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0WE1vdGlvbkV2
ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25z
dCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sKKyAgICBYTW90
aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247CisgICAgeG1vdGlvbi50eXBlID0g
TW90aW9uTm90aWZ5OworICAgIHhtb3Rpb24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJh
bWUpOworICAgIHhtb3Rpb24uc3Vid2luZG93ID0gMDsKKyAgICB4bW90aW9uLnRpbWUgPSBldmVu
dC0+dGltZVN0YW1wKCk7CisgICAgeG1vdGlvbi54ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHht
b3Rpb24ueSA9IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4bW90aW9uLnhfcm9vdCA9IGV2ZW50LT5z
Y3JlZW5YKCk7CisgICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHht
b3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHhtb3Rpb24uaXNfaGlu
dCA9IE5vdGlmeU5vcm1hbDsKKyAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKK30KKwor
c3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVu
dCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJhbWUq
IHBhcmVudEZyYW1lKQoreworICAgIFhDcm9zc2luZ0V2ZW50JiB4Y3Jvc3NpbmcgPSB4RXZlbnQt
Pnhjcm9zc2luZzsKKyAgICB4Y3Jvc3NpbmcudHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlb3ZlckV2ZW50ID8gRW50ZXJOb3RpZnkgOiBMZWF2ZU5vdGlmeTsKKyAgICB4
Y3Jvc3Npbmcucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOworICAgIHhjcm9zc2lu
Zy5zdWJ3aW5kb3cgPSAwOworICAgIHhjcm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgp
OworICAgIHhjcm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhjcm9zc2luZy55ID0g
cG9zdFpvb21Qb3MueCgpOworICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgp
OworICAgIHhjcm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhjcm9zc2lu
Zy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CisgICAgeGNyb3NzaW5nLm1vZGUgPSBO
b3RpZnlOb3JtYWw7CisgICAgeGNyb3NzaW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7Cisg
ICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB4Y3Jvc3NpbmcuZm9jdXMgPSBm
YWxzZTsKK30KKyNlbmRpZgogCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFdmVudCogZXZlbnQpCit7CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGlmICghZGlzcGF0Y2hOUEV2
ZW50KG5wRXZlbnQpKQorCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTlBFdmVudCB4RXZlbnQ7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGluaXRYRXZl
bnQoJnhFdmVudCk7CisKKyAgICAvL0ludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
PihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2
ZW50LT5wYWdlWSgpKSk7CisgICAgSW50UG9pbnQgcG9zdFpvb21Qb3MgPSByb3VuZGVkSW50UG9p
bnQobV9lbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFic29sdXRl
TG9jYXRpb24oKSkpOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVu
dCkKKyAgICAgICAgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQs
IHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1lKTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKKyAgICAgICAgc2V0WE1vdGlvbkV2ZW50
U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1l
KTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2
ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KQorICAg
ICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0
Wm9vbVBvcywgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKworICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkpCiAgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCisjaWYgZGVmaW5lZChYUF9VTklYKQordm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIFhFdmVudCBucEV2ZW50OworICAg
IGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0g
bnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9IDk7ICAvLyBGb2N1c0luIGdldHMgdW5z
ZXQgc29tZXdoZXJlCisgICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVudC5k
ZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQp
OworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIFhF
dmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZvY3VzQ2hh
bmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9IDEwOyAg
Ly8gRm9jdXNPdXQgZ2V0cyB1bnNldCBzb21ld2hlcmUKKyAgICBldmVudC5tb2RlID0gTm90aWZ5
Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisKKyAgICBkaXNw
YXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisjZW5kaWYKKwogdm9pZCBQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogewogICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVu
dCk7CkBAIC0yMDcsNyArNDg1LDggQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xs
VmlldyogcGFyZW50KQogCiB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJ
bnRSZWN0JikKIHsKLSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgaWYgKCFtX2lzV2lu
ZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKQEAgLTIxNSwyNCArNDk0LDU3IEBAIHZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAh
cGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7Ci0gICAgbV9u
cFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKLSAgICBtX25wV2luZG93LndpZHRoID0gbV93
aW5kb3dSZWN0LndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3Qu
aGVpZ2h0KCk7CisgICAgLy8gSWYgdGhlIHBsdWdpbiBkaWRuJ3QgbG9hZCBzdWNlc3NmdWxseSwg
bm8gcG9pbnQgaW4gY2FsbGluZyBzZXR3aW5kb3cKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbiBV
bml4LCBvbmx5IGNhbGwgcGx1Z2luIGlmIGl0J3MgZnVsbC1wYWdlIG9yIHdpbmRvd2VkCisgICAg
aWYgKG1fbW9kZSAhPSBOUF9GVUxMICYmIG1fbW9kZSAhPSBOUF9FTUJFRCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHBsYXRmb3JtUGx1Z2luV2lkZ2V0IHN0aWxsIGV4
aXN0cworICAgIGlmIChtX2lzV2luZG93ZWQgJiYgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisg
ICAgICAgIHJldHVybjsKIAotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJl
Y3QueCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7Ci0g
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsKLSAgICBt
X25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisgICAgaWYg
KCFtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGFz
UGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gZmFsc2U7CiAKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9j
YXRpb24gPSB7IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVj
dC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmFsbG9jYXRpb24pOworICAgIGlmICht
X2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsK
KyAgICAgICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdp
bmRvdy53aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93Lmhl
aWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKKworICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LmxlZnQgPSBtX2NsaXBSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50
b3AgPSBtX2NsaXBSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9
IG1fY2xpcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
PSBtX2NsaXBSZWN0LmhlaWdodCgpOworCisgICAgICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0Lndp
ZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgICAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogI2lmIFBMQVRG
T1JNKFhQX1VOSVgpCi0gICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgIGd0a194dGJp
bl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCBtX3dpbmRv
d1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKLSAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShw
bGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0
LmhlaWdodCgpKTsKLSAgICB9CisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAg
ICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworICAgICAgICAgICAg
Z3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3Qud2lk
dGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQogI2VuZGlmCisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy55ID0g
MDsKKworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgICAgICBtX25w
V2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qucmln
aHQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IDA7CisgICAgfQor
CisgICAgLy8gRkxBU0ggV09SS0FST1VORDogT25seSBzZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBj
YWxscyB0bworICAgIC8vIHNldE5QV2luZG93KCkgY2F1c2UgdGhlIHBsdWdpbiB0byBjcmFzaCBp
biB3aW5kb3dlZCBtb2RlLgorICAgIGlmICghbV9pc1dpbmRvd2VkIHx8IG1fbnBXaW5kb3cud2lk
dGggPT0gKHVuc2lnbmVkIGludCktMSB8fCBtX25wV2luZG93LmhlaWdodCA9PSAodW5zaWduZWQg
aW50KS0xKSB7CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgo
KTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7Cisg
ICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwpAQCAtMzExLDYgKzYyMywxNCBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZh
bHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKICAgICAgICAgKnN0
YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgIHJldHVybiBOUEVSUl9O
T19FUlJPUjsKIAorICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwor
I2Vsc2UKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworI2Vu
ZGlmCisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogICAgIH0KQEAgLTQxNCw3ICs3MzQsOCBA
QCB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKICAgICB9CiAK
ICAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3Qt
PmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7Ci0gICAgaW52YWxpZGF0ZVJlY3Qocik7
CisgICAgLy9pbnZhbGlkYXRlUmVjdChyKTsKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdp
blJlY3Qocik7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lv
bikKQEAgLTQzMSwxMiArNzUyLDY0IEBAIHZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQog
ICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0
V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKIH0KIAorc3RhdGljIERpc3BsYXkgKmdl
dFBsdWdpbkRpc3BsYXkoKQoreworICAgIC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBoYXZl
IGEgZGlmZmVyZW50IFggY29ubmVjdGlvbiBvcGVuLiAgU2luY2Ugd2UncmUKKyAgICAvLyBhIGdk
ay9ndGsgYXBwLCB3ZSdsbCAocHJvYmFibHk/KSBoYXZlIHRoZSBzYW1lIFggY29ubmVjdGlvbiBh
cyBhbnkgZ2RrLWJhc2VkCisgICAgLy8gcGx1Z2lucywgc28gd2UgY2FuIHJldHVybiB0aGF0LiAg
V2UgbWlnaHQgd2FudCB0byBhZGQgb3RoZXIgaW1wbGVtZW50YXRpb25zIGhlcmUKKyAgICAvLyBs
YXRlci4KKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJ
U1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisjZWxzZQorICAgIHJldHVybiBOVUxM
OworI2VuZGlmCit9CisKIHN0YXRpYyBnYm9vbGVhbgogcGx1Z19yZW1vdmVkX2NiKEd0a1NvY2tl
dCAqc29ja2V0LCBncG9pbnRlcikKIHsKICAgICByZXR1cm4gVFJVRTsKIH0KIAorI2lmIGRlZmlu
ZWQoWFBfVU5JWCkKK3N0YXRpYyB2b2lkIGdldFZpc3VhbEFuZENvbG9ybWFwKGludCBkZXB0aCwg
VmlzdWFsICoqdmlzdWFsLCBDb2xvcm1hcCAqY29sb3JtYXApCit7CisgICAgKnZpc3VhbCA9IDA7
CisgICAgKmNvbG9ybWFwID0gMDsKKworICAgIGludCBybWFqLCBybWluOworICAgIGlmICghWFJl
bmRlclF1ZXJ5VmVyc2lvbihHREtfRElTUExBWSgpLCAmcm1haiwgJnJtaW4pIHx8IChybWFqID09
IDAgJiYgcm1pbiA8IDUpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbnZpOworICAgIFhW
aXN1YWxJbmZvIHRlbXBsOworICAgIHRlbXBsLnNjcmVlbiAgPSBnZGtfc2NyZWVuX2dldF9udW1i
ZXIoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICB0ZW1wbC5kZXB0aCAgID0gZGVwdGg7
CisgICAgdGVtcGwuY19jbGFzcyA9IFRydWVDb2xvcjsKKyAgICBYVmlzdWFsSW5mbyogeHZpID0g
WEdldFZpc3VhbEluZm8oR0RLX0RJU1BMQVkoKSwgVmlzdWFsU2NyZWVuTWFzayB8IFZpc3VhbERl
cHRoTWFzayB8IFZpc3VhbENsYXNzTWFzaywgJnRlbXBsLCAmbnZpKTsKKworICAgIGlmICgheHZp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGVwdGggPT0gMzIpIHsKKyAgICAgICAgZm9y
IChpbnQgaWR4ID0gMDsgaWR4IDwgbnZpOyArK2lkeCkgeworICAgICAgICAgICAgWFJlbmRlclBp
Y3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KEdES19ESVNQTEFZKCks
IHh2aVtpZHhdLnZpc3VhbCk7CisgICAgICAgICAgICBpZiAoZm9ybWF0LT50eXBlID09IFBpY3RU
eXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzaykgeworICAgICAgICAgICAgICAg
ICAqdmlzdWFsID0geHZpW2lkeF0udmlzdWFsOworICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgKnZpc3VhbCA9IHh2
aVswXS52aXN1YWw7CisKKyAgICBYRnJlZSh4dmkpOworCisgICAgaWYgKCp2aXN1YWwpCisgICAg
ICAgICpjb2xvcm1hcCA9IFhDcmVhdGVDb2xvcm1hcChHREtfRElTUExBWSgpLCBHREtfUk9PVF9X
SU5ET1coKSwgKnZpc3VhbCwgQWxsb2NOb25lKTsKK30KKyNlbmRpZgorCiBib29sIFBsdWdpblZp
ZXc6OnBsYXRmb3JtU3RhcnQoKQogewogICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CkBAIC00NTEs
MjYgKzgyNCwzNSBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKICAgICB9CiAKKyAgICBpZiAobV9p
c1dpbmRvd2VkKSB7CiAjaWYgZGVmaW5lZChYUF9VTklYKQotICAgIGlmIChtX25lZWRzWEVtYmVk
KSB7CisgICAgICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICBzZXRQbGF0Zm9y
bVdpZGdldChndGtfc29ja2V0X25ldygpKTsKKyAgICAgICAgICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRm
b3JtUGFnZUNsaWVudCgpKSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnX3JlbW92ZWQiLCBH
X0NBTExCQUNLKHBsdWdfcmVtb3ZlZF9jYiksIE5VTEwpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3h0YmluX25ldyhtX3BhcmVudEZyYW1lLT52
aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPndpbmRvdywgMCkpOwor
ICAgICAgICB9CisjZWxzZQogICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29ja2V0X25l
dygpKTsKICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudEZy
YW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLCAicGx1Z19yZW1vdmVkIiwgR19DQUxMQkFDSyhwbHVnX3JlbW92ZWRfY2IpLCBO
VUxMKTsKLSAgICB9IGVsc2UgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgc2V0UGxhdGZvcm1X
aWRnZXQoZ3RrX3h0YmluX25ldyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+
cGxhdGZvcm1QYWdlQ2xpZW50KCktPndpbmRvdywgMCkpOwotI2Vsc2UKLSAgICBzZXRQbGF0Zm9y
bVdpZGdldChndGtfc29ja2V0X25ldygpKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09O
VEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKSksIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogI2VuZGlmCisgICAgfSBlbHNlIHsK
KyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7CisgICAgICAgIG1fcGx1Z2luRGlzcGxheSA9
IGdldFBsdWdpbkRpc3BsYXkoKTsKKyAgICB9CisKICAgICBzaG93KCk7CiAKLSAgICBpZiAobV9p
c1dpbmRvd2VkKSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRv
dzsKKwogI2lmIGRlZmluZWQoWFBfVU5JWCkKICAgICAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0
cnVjdCAqd3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwotCiAgICAgICAgIHdz
LT50eXBlID0gMDsKKyNlbmRpZgogCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBt
X25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisjaWYgZGVmaW5lZChYUF9VTklY
KQogICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgewogICAgICAgICAgICAgZ3RrX3dpZGdldF9y
ZWFsaXplKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogICAgICAgICAgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSAodm9pZCopZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKSk7CkBAIC00ODYsMjUgKzg2OCw2MyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRm
b3JtU3RhcnQoKQogICAgICAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGNvbG9ybWFwOwogICAgICAgICB9CiAgICAgICAg
IFhGbHVzaCAod3MtPmRpc3BsYXkpOwotCi0gICAgICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdz
OwogI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQogICAgICAgICBtX25wV2luZG93
LndpbmRvdyA9ICh2b2lkKilHREtfV0lORE9XX0hXTkQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+
d2luZG93KTsKICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Cisg
ICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisgICAgICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2Rl
ZmF1bHQoKTsKKyAgICAgICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lz
dGVtX3Zpc3VhbChnc2NyZWVuKTsKKworICAgICAgICBpZiAoZ3Zpc3VhbC0+ZGVwdGggPT0gMzIg
fHwgIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVs
dFNjcmVlbkRlcHRoKSkgeworICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoMzIsICZt
X3Zpc3VhbCwgJm1fY29sb3JtYXApOworICAgICAgICAgICAgd3MtPmRlcHRoID0gMzI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIW1fdmlzdWFsKSB7CisgICAgICAgICAgICBnZXRWaXN1YWxB
bmRDb2xvcm1hcChndmlzdWFsLT5kZXB0aCwgJm1fdmlzdWFsLCAmbV9jb2xvcm1hcCk7CisgICAg
ICAgICAgICB3cy0+ZGVwdGggPSBndmlzdWFsLT5kZXB0aDsKKyAgICAgICAgfQorCisgICAgICAg
IHdzLT5kaXNwbGF5ID0gR0RLX0RJU1BMQVkoKTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IG1fdmlz
dWFsOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworCisgICAgICAgIG1fbnBX
aW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgICAgIG1fbnBXaW5k
b3cud2lkdGggPSAtMTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyNlbHNlCisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVz
Q2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgfQog
CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOworI2Vu
ZGlmCisKICAgICAvLyBUT0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2ZW50cywgbGlrZSBt
YWMgcG9ydD8KLSAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpIHsKICAgICAg
ICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7IC8vIHdhczogc2V0TlBXaW5kb3dJZk5lZWRlZCgpLCBi
dXQgdGhpcyBkb2Vzbid0IHByb2R1Y2UgMHgwIHJlY3RzIGF0IGZpcnN0IGdvCisgICAgICAgIHNl
dE5QV2luZG93SWZOZWVkZWQoKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQogeworI2lmIGRlZmluZWQoWFBfVU5JWCkK
KyAgICBpZiAobV9kcmF3YWJsZSkgeworICAgICAgICBYRnJlZVBpeG1hcChHREtfRElTUExBWSgp
LCBtX2RyYXdhYmxlKTsKKyAgICAgICAgbV9kcmF3YWJsZSA9IDA7CisgICAgfQorI2VuZGlmCiB9
CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFsdCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42620</attachid>
            <date>2009-11-05 19:15:14 -0800</date>
            <delta_ts>2009-11-09 10:47:34 -0800</delta_ts>
            <desc>gtk windowless v4</desc>
            <filename>windowless-gtk-v4.diff</filename>
            <type>text/plain</type>
            <size>28807</size>
            <attacher name="Brian Tarricone">bjt23</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWNmYTM3Yi4uNGMxYTJlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAwOS0xMS0wNSAgQnJpYW4gVGFycmlj
b25lICA8YnJpYW5Aa2FrYWkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtndGtdIEFkZCBzdXBwb3J0IGZvciB3aW5kb3dsZXNzIE5QQVBJIHBs
dWdpbnMKKworICAgICAgICBNdWNoIG9mIHRoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiBob3cgdGhl
IFF0IGJhY2tlbmQgZG9lcworICAgICAgICB0aGlzLCBtb2RpZmllZCBmb3IgR3RrLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgzMQorCisgICAg
ICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OlBsdWdpblZp
ZXcpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIHBsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Um9vdFdpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjppbnB1dEV2
ZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW5pdFhFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmhhbmRsZUZvY3VzT3V0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGx1
Z2luRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpwbHVnX3JlbW92ZWRfY2IpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0VmlzdWFsQW5kQ29sb3JtYXApOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
bGF0Zm9ybURlc3Ryb3kpOgorCiAyMDA5LTExLTA0ICBQYXRyaWNrIE11ZWxsZXIgIDxQYXRyaWNr
X011ZWxsZXJAdXMuaWJtLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNo
ZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggZDY5ZjhhNy4uMTU3YmIxMiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
RXZlbnQoRXZlbnQqIGV2ZW50KQogICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0
PE1vdXNlRXZlbnQqPihldmVudCkpOwogICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZl
bnQoKSkKICAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZXZlbnQpKTsKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLkRPTUZv
Y3VzT3V0RXZlbnQpCiAgICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICAgICBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01Gb2N1c0luRXZlbnQpCkBAIC04MDEs
NyArODAxLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAKICAgICAsIG1faXNUcmFuc3BhcmVu
dChmYWxzZSkKICAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV9pc1dhaXRp
bmdUb1N0YXJ0KGZhbHNlKQotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gx
MSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oV1gpICYmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpAQCAtODE4LDcgKzgxOCw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZp
ZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdl
KiBwCiAgICAgLCBtX2RyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCgtMSkpCiAgICAgLCBtX2V2
ZW50TW9kZWwoTlBFdmVudE1vZGVsKC0xKSkKICNlbmRpZgotI2lmIGRlZmluZWQoUV9XU19YMTEp
ICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNo
YW5nZShmYWxzZSkKICAgICAsIG1fZHJhd2FibGUoMCkKICAgICAsIG1fdmlzdWFsKDApCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaAppbmRleCAwYTU3ZmE2Li45YjJiY2RhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAg
LTI1OSw3ICsyNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICAgICAgdm9pZCBoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqKTsKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQogICAgICAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudCgpOwogICAgICAg
ICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICNlbmRpZgpAQCAtMjkyLDcgKzI5Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKICAg
ICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7CiAKLSNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8
IGRlZmluZWQoUV9XU19YMTEpCisjaWYgZGVmaW5lZChYUF9VTklYKQogICAgICAgICBib29sIG1f
bmVlZHNYRW1iZWQ7CiAjZW5kaWYKIApAQCAtMzIwLDcgKzMyMCw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKIAotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gxMSkgfHwgUExB
VEZPUk0oU1lNQklBTikKKyNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBMQVRGT1JNKFNZTUJJQU4p
CiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2VsaWYgZGVmaW5lZChYUF9N
QUNPU1gpCiAgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OwpAQCAtMzMzLDcgKzMz
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIFBvaW50IGdsb2JhbE1vdXNlUG9zRm9yUGx1Z2luKCkg
Y29uc3Q7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUV9XU19YMTEpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CiAgICAg
ICAgIFBpeG1hcCBtX2RyYXdhYmxlOwogICAgICAgICBWaXN1YWwqIG1fdmlzdWFsOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBiL1dlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKaW5kZXggYmMzYTYyMi4uZjM2NzgzNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2FrYWksIEluYy4gPGJyaWFuQGtha2FpLmNvbT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCiAjaW5jbHVkZSAiUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgpAQCAtNjIsNiArNjQsOSBAQAogI2lmIGRlZmluZWQo
WFBfVU5JWCkKICNpbmNsdWRlICJndGsyeHRiaW4uaCIKICNpbmNsdWRlIDxnZGsvZ2RreC5oPgor
I2RlZmluZSBCb29sIGludAorI2RlZmluZSBTdGF0dXMgaW50CisjaW5jbHVkZSA8WDExL2V4dGVu
c2lvbnMvWHJlbmRlci5oPgogI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQogI2lu
Y2x1ZGUgIlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCIKICNpbmNsdWRlIDxnZGsvZ2Rrd2lu
MzIuaD4KQEAgLTk4LDkgKzEwMywxOCBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVu
dChOUEV2ZW50JiBldmVudCkKICAgICByZXR1cm4gYWNjZXB0ZWQ7CiB9CiAKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCitzdGF0aWMgV2luZG93IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1l
KQoreworICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBHZGtTY3JlZW4qIGdzY3Jl
ZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4ocGFyZW50V2lkZ2V0KTsKKyAgICByZXR1cm4gR0RL
X1dJTkRPV19YV0lORE9XKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KGdzY3JlZW4pKTsKK30K
KyNlbmRpZgorCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiB7Ci0gICAg
aWYgKCFwYXJlbnQoKSB8fCAhbV9pc1dpbmRvd2VkKQorICAgIGlmICghcGFyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CkBAIC0x
MTUsNiArMTI5LDM0IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIAog
ICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2lu
ZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkKICAgICAgICAgc2V0TlBXaW5k
b3dJZk5lZWRlZCgpOworCisgICAgLy9pZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3Qg
JiYgbV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkKKyAgICAvLyAgICByZXR1cm47CisKKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgbV93aW5kb3dSZWN0LnNp
emUoKSAhPSBvbGRXaW5kb3dSZWN0LnNpemUoKSkgeworICAgICAgICBHdGtXaWRnZXQqIHBhcmVu
dFdpbmRvdyA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKTsKKworICAgICAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAgICAgICAgIFhGcmVl
UGl4bWFwKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUpOworCisgICAgICAgIG1fZHJhd2FibGUg
PSBYQ3JlYXRlUGl4bWFwKEdES19ESVNQTEFZKCksIEdES19EUkFXQUJMRV9YSUQocGFyZW50V2lu
ZG93LT53aW5kb3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRv
d1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cu
d3NfaW5mbyktPmRlcHRoKTsKKyAgICAgICAgWFN5bmMoR0RLX0RJU1BMQVkoKSwgRmFsc2UpOyAv
LyBtYWtlIHN1cmUgdGhhdCB0aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQorICAg
IH0KKworICAgIC8vIGRvIG5vdCBjYWxsIHNldE5QV2luZG93SWZOZWVkZWQgaW1tZWRpYXRlbHks
IHdpbGwgYmUgY2FsbGVkIG9uIHBhaW50KCkKKyAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5n
ZSA9IHRydWU7CisjZW5kaWYKKworICAgIC8vIGluIG9yZGVyIHRvIG1vdmUvcmVzaXplIHRoZSBw
bHVnaW4gd2luZG93IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlCisgICAgLy8gcmVzdCBvZiBmcmFt
ZSBkdXJpbmcgZS5nLiBzY3JvbGxpbmcsIHdlIHNldCB0aGUgd2luZG93IGdlb21ldHJ5CisgICAg
Ly8gaW4gdGhlIHBhaW50KCkgZnVuY3Rpb24sIGJ1dCBhcyBwYWludCgpIGlzbid0IGNhbGxlZCB3
aGVuIHRoZQorICAgIC8vIHBsdWdpbiB3aW5kb3cgaXMgb3V0c2lkZSB0aGUgZnJhbWUgd2hpY2gg
Y2FuIGJlIGNhdXNlZCBieSBhCisgICAgLy8gc2Nyb2xsLCB3ZSBuZWVkIHRvIG1vdmUvcmVzaXpl
IGltbWVkaWF0ZWx5LgorICAgIGlmICghbV93aW5kb3dSZWN0LmludGVyc2VjdHMoZnJhbWVWaWV3
LT5mcmFtZVJlY3QoKSkpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpCkBAIC0xNjAsNDMgKzIwMiwyODYgQEAgdm9pZCBQbHVn
aW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiAgICAgaWYgKG1faXNXaW5kb3dlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlBFdmVu
dCBucEV2ZW50OwotICAgIC8qIE5lZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKyNp
ZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBib29sIHN5bmNYID0gbV9wbHVnaW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlz
cGxheSAhPSBHREtfRElTUExBWSgpOworCisgICAgSW50UmVjdCBleHBvc2VkUmVjdChyZWN0KTsK
KyAgICBleHBvc2VkUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGV4cG9zZWRSZWN0
Lm1vdmUoLWZyYW1lUmVjdCgpLngoKSwgLWZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICBXaW5kb3cg
ZHVtbXlfdzsKKyAgICBpbnQgZHVtbXlfaTsKKyAgICB1bnNpZ25lZCBpbnQgZHVtbXlfdWksIGFj
dHVhbERlcHRoID0gMDsKKyAgICBYR2V0R2VvbWV0cnkoR0RLX0RJU1BMQVkoKSwgbV9kcmF3YWJs
ZSwgJmR1bW15X3csICZkdW1teV9pLCAmZHVtbXlfaSwKKyAgICAgICAgICAgICAgICAgJmR1bW15
X3VpLCAmZHVtbXlfdWksICZkdW1teV91aSwgJmFjdHVhbERlcHRoKTsKKworICAgIGNvbnN0IGlu
dCBkcmF3YWJsZURlcHRoID0gKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93
LndzX2luZm8pLT5kZXB0aDsKKyAgICBBU1NFUlQoZHJhd2FibGVEZXB0aCA9PSBhY3R1YWxEZXB0
aCk7CisKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50ICYmIGRyYXdhYmxlRGVwdGggIT0gMzIpIHsK
KyAgICAgICAgLy8gQXR0ZW1wdCB0byBmYWtlIGl0IHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBhbHBo
YSBjaGFubmVsIG9uIG91cgorICAgICAgICAvLyBwaXhtYXAuICBJZiB0aGF0J3Mgbm90IHBvc3Np
YmxlLCBhdCBsZWFzdCBjbGVhciB0aGUgd2luZG93IHRvCisgICAgICAgIC8vIGF2b2lkIGRyYXdp
bmcgYXJ0aWZhY3RzLgorICAgICAgICBHQyBnYyA9IFhEZWZhdWx0R0MoR0RLX0RJU1BMQVkoKSwg
Z2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkpOworICAgICAg
ICBHdGtXaWRnZXQgKndpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgR2RrRHJhd2FibGUgKmdka0JhY2tpbmdT
dG9yZSA9IE5VTEw7CisgICAgICAgIGdpbnQgeG9mZiA9IDAsIHlvZmYgPSAwOworCisgICAgICAg
IGdka193aW5kb3dfZ2V0X2ludGVybmFsX3BhaW50X2luZm8od2lkZ2V0LT53aW5kb3csICZnZGtC
YWNraW5nU3RvcmUsICZ4b2ZmLCAmeW9mZik7CisKKyAgICAgICAgaWYgKGdka0JhY2tpbmdTdG9y
ZSkgeworICAgICAgICAgICAgWENvcHlBcmVhKEdES19ESVNQTEFZKCksIEdES19EUkFXQUJMRV9Y
SUQoZ2RrQmFja2luZ1N0b3JlKSwgbV9kcmF3YWJsZSwgZ2MsCisgICAgICAgICAgICAgICAgICAg
ICAgbV93aW5kb3dSZWN0LngoKSArIGV4cG9zZWRSZWN0LngoKSAtIHhvZmYsCisgICAgICAgICAg
ICAgICAgICAgICAgbV93aW5kb3dSZWN0LnkoKSArIGV4cG9zZWRSZWN0LnkoKSAtIHlvZmYsCisg
ICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVj
dC55KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gbm8gdmFsaWQgYmFja2lu
ZyBzdG9yZTsgY2xlYXIgdG8gdGhlIGJhY2tncm91bmQgY29sb3IKKyAgICAgICAgICAgIFhGaWxs
UmVjdGFuZ2xlKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUsIGdjLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQo
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBYRXZlbnQgeGV2ZW50OworICAgIG1lbXNldCgm
eGV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7CisgICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4
cG9zZUV2ZW50ID0geGV2ZW50LnhncmFwaGljc2V4cG9zZTsKKyAgICBleHBvc2VFdmVudC50eXBl
ID0gR3JhcGhpY3NFeHBvc2U7CisgICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IEdES19ESVNQTEFZ
KCk7CisgICAgZXhwb3NlRXZlbnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlOworICAgIGV4cG9zZUV2
ZW50LnggPSBleHBvc2VkUmVjdC54KCk7CisgICAgZXhwb3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0
LnkoKTsKKyAgICBleHBvc2VFdmVudC53aWR0aCA9IGV4cG9zZWRSZWN0LngoKSArIGV4cG9zZWRS
ZWN0LndpZHRoKCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodCBp
biB0cmFuc3BhcmVudCBtb2RlCisgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3Qu
eSgpICsgZXhwb3NlZFJlY3QuaGVpZ2h0KCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdo
dCBpcyB0aGUgYm90dG9tIGluIHRyYW5zcGFyZW50IG1vZGUKKworICAgIGRpc3BhdGNoTlBFdmVu
dCh4ZXZlbnQpOworCisgICAgaWYgKHN5bmNYKQorICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3Bs
YXksIEZhbHNlKTsgLy8gc3luYyBjaGFuZ2VzIGJ5IHBsdWdpbgorCisgICAgLy8gVGhpcyBjYWxs
ICptdXN0KiBiZSBkb25lIGFmdGVyIHRoZSBhYm92ZSBleHBvc2UsIGJlY2F1c2Ugc29tZSBwbHVn
aW5zCisgICAgLy8gKGxpa2UgQWRvYmUgRmxhc2gpIGFwcGVhciB0byBjYWxsIGdka19waXhtYXBf
Zm9yZWlnbl9uZXcoKSBvbiB0aGUKKyAgICAvLyBwYXNzZWQgRHJhd2FibGUgd2l0aG91dCBmaXJz
dCBkb2luZyBnZGtfcGl4bWFwX2xvb2t1cCgpLiAgSWYgd2UgY3JlYXRlCisgICAgLy8gdGhlIEdk
a1BpeG1hcCBoZXJlIGJlZm9yZSBBZG9iZSBkb2VzLCB0aGVuIEFkb2JlJ3MgX2ZvcmVpZ25fbmV3
KCkgd2lsbAorICAgIC8vIHRyaWdnZXIgYSBnZGsgd2FybmluZy4gIChJZGVhbGx5LCBnZGsgd291
bGQgZmlyc3QgZG8gYSBsb29rdXAgYmVmb3JlCisgICAgLy8gY3JlYXRpbmcgYSBuZXcgb25lLCBs
aWtlIGl0IGRvZXMgZm9yIFdpbmRvd3MsIGJ1dCBvaCB3ZWxsLCBub3RoaW5nIHdlCisgICAgLy8g
Y2FuIGRvIGFib3V0IHRoYXQuKQorICAgIEdka1BpeG1hcCogZ2RrRHJhd2FibGUgPSBnZGtfcGl4
bWFwX2xvb2t1cChtX2RyYXdhYmxlKTsKKyAgICBpZiAoIWdka0RyYXdhYmxlKQorICAgICAgICBn
ZGtEcmF3YWJsZSA9IGdka19waXhtYXBfZm9yZWlnbl9uZXcobV9kcmF3YWJsZSk7CisKKyAgICBp
ZiAoIWdka19kcmF3YWJsZV9nZXRfY29sb3JtYXAoR0RLX0RSQVdBQkxFKGdka0RyYXdhYmxlKSkp
IHsKKyAgICAgICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2RreF92aXN1YWxfZ2V0KG1fdmlzdWFs
LT52aXN1YWxpZCk7CisgICAgICAgIEdka0NvbG9ybWFwKiBnY21hcCA9IGdka194MTFfY29sb3Jt
YXBfZm9yZWlnbl9uZXcoZ3Zpc3VhbCwgbV9jb2xvcm1hcCk7CisgICAgICAgIGdka19kcmF3YWJs
ZV9zZXRfY29sb3JtYXAoR0RLX0RSQVdBQkxFKGdka0RyYXdhYmxlKSwgZ2NtYXApOworICAgIH0K
IAotICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgIGNhaXJv
X3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fc2F2ZShjcik7
CiAKLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIGdka19jYWlyb19z
ZXRfc291cmNlX3BpeG1hcChjciwgZ2RrRHJhd2FibGUsIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVS
ZWN0KCkueSgpKTsKKworICAgIGNhaXJvX3JlY3RhbmdsZShjciwKKyAgICAgICAgICAgICAgICAg
ICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJlY3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBl
eHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCks
IGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19jbGlwKGNyKTsKIAotICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmll
dzo6cGFpbnQoKTogUGFpbnQgZXZlbnQgbm90IGFjY2VwdGVkIik7CisgICAgaWYgKG1faXNUcmFu
c3BhcmVudCkKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9P
VkVSKTsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BF
UkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19wYWludChjcik7CisKKyAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKKyNlbmRpZiAgLy8gZGVmaW5lZChYUF9VTklYKQogfQogCiB2b2lkIFBsdWdpblZpZXc6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgTlBFdmVu
dCBucEV2ZW50OwotICAgIAotICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBw
YXNzIHRocm91Z2ggKi8KLQogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBpZiAoIWRpc3BhdGNoTlBFdmVu
dChucEV2ZW50KSkKKworICAgIGlmKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVu
dC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBOUEV2ZW50IHhFdmVudDsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgR2RrRXZlbnRL
ZXkqIGdka0V2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5KCk7CisKKyAgICB4
RXZlbnQudHlwZSA9IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
ID8gMiA6IDM7ICAvLyBLZXlQcmVzcy9SZWxlYXNlIGdldCB1bnNldCBzb21ld2hlcmUKKyAgICB4
RXZlbnQueGtleS5yb290ID0gZ2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lKTsKKyAgICB4RXZl
bnQueGtleS5zdWJ3aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNoaWxkIHdpbmRvdworICAgIHhF
dmVudC54a2V5LnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeEV2ZW50LnhrZXkuc3Rh
dGUgPSBnZGtFdmVudC0+c3RhdGU7ICAvLyBHZGtNb2RpZmllclR5cGUgbWlycm9ycyB4bGliIHN0
YXRlIG1hc2tzCisgICAgeEV2ZW50LnhrZXkua2V5Y29kZSA9IGdka0V2ZW50LT5oYXJkd2FyZV9r
ZXljb2RlOworICAgIHhFdmVudC54a2V5LnNhbWVfc2NyZWVuID0gdHJ1ZTsKKworICAgIC8vIE5P
VEU6IEFzIHRoZSBYRXZlbnRzIHNlbnQgdG8gdGhlIHBsdWctaW4gYXJlIHN5bnRoZXNpemVkIGFu
ZCB0aGVyZSBpcyBub3QgYSBuYXRpdmUgd2luZG93CisgICAgLy8gY29ycmVzcG9uZGluZyB0byB0
aGUgcGx1Zy1pbiByZWN0YW5nbGUsIHNvbWUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIFhFdmVudCBz
dHJ1Y3R1cmVzIGFyZSBub3QKKyAgICAvLyBzZXQgdG8gdGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFs
dWVzLiBlLmcuIEtleSBldmVudHMgZG9uJ3QgaGF2ZSBhIHBvc2l0aW9uLgorICAgIC8vIHNvdXJj
ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vTlBFdmVudAorICAgIHhFdmVudC54
a2V5LnggPSAwOworICAgIHhFdmVudC54a2V5LnkgPSAwOworICAgIHhFdmVudC54a2V5Lnhfcm9v
dCA9IDA7CisgICAgeEV2ZW50LnhrZXkueV9yb290ID0gMDsKKyNlbmRpZgorCisgICAgaWYgKCFk
aXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBl
dmVudCkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCitzdGF0aWMgdW5zaWduZWQgaW50IGlucHV0RXZl
bnRTdGF0ZShNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3RhdGUgPSAw
OworICAgIGlmIChldmVudC0+Y3RybEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBDb250cm9sTWFz
azsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IFNoaWZ0TWFz
azsKKyAgICBpZiAoZXZlbnQtPmFsdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2QxTWFzazsK
KyAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kNE1hc2s7Cisg
ICAgcmV0dXJuIHN0YXRlOworfQorCit2b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2ZW50
KiB4RXZlbnQpCiB7Ci0gICAgTlBFdmVudCBucEV2ZW50OworICAgIG1lbXNldCh4RXZlbnQsIDAs
IHNpemVvZihYRXZlbnQpKTsKKworICAgIHhFdmVudC0+eGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBh
cmUgdW5hd2FyZSBvZiB0aGUgbGFzdCByZXF1ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgorICAg
IHhFdmVudC0+eGFueS5zZW5kX2V2ZW50ID0gZmFsc2U7CisgICAgeEV2ZW50LT54YW55LmRpc3Bs
YXkgPSBHREtfRElTUExBWSgpOworICAgIC8vIE5PVEU6IGV2ZW50LT54YW55LndpbmRvdyBkb2Vz
bid0IGFsd2F5cyByZXNwb25kIHRvIHRoZSAud2luZG93IHByb3BlcnR5IG9mIG90aGVyIFhFdmVu
dCdzCisgICAgLy8gYnV0IGRvZXMgaW4gdGhlIGNhc2Ugb2YgS2V5UHJlc3MsIEtleVJlbGVhc2Us
IEJ1dHRvblByZXNzLCBCdXR0b25SZWxlYXNlLCBhbmQgTW90aW9uTm90aWZ5CisgICAgLy8gZXZl
bnRzOyB0aHVzLCB0aGlzIGlzIHJpZ2h0OgorICAgIEd0a1dpZGdldCAqd2lkZ2V0ID0gbV9wYXJl
bnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAg
IHhFdmVudC0+eGFueS53aW5kb3cgPSB3aWRnZXQgPyBHREtfV0lORE9XX1hXSU5ET1cod2lkZ2V0
LT53aW5kb3cpIDogMDsKK30KIAotICAgIGlmICghbV9pc1dpbmRvd2VkKQotICAgICAgcmV0dXJu
Oworc3RhdGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZl
bnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1l
KiBwYXJlbnRGcmFtZSkKK3sKKyAgICBYQnV0dG9uRXZlbnQmIHhidXR0b24gPSB4RXZlbnQtPnhi
dXR0b247CisgICAgeGJ1dHRvbi50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vkb3duRXZlbnQgPyBCdXR0b25QcmVzcyA6IEJ1dHRvblJlbGVhc2U7CisgICAgeGJ1dHRv
bi5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeGJ1dHRvbi5zdWJ3aW5k
b3cgPSAwOworICAgIHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4YnV0
dG9uLnggPSBwb3N0Wm9vbVBvcy54KCk7CisgICAgeGJ1dHRvbi55ID0gcG9zdFpvb21Qb3MueSgp
OworICAgIHhidXR0b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4YnV0dG9uLnlf
cm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRT
dGF0ZShldmVudCk7CisgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICBjYXNlIE1p
ZGRsZUJ1dHRvbjoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1
dHRvbjM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICBkZWZhdWx0
OgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjE7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICB4YnV0dG9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0
WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2
ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sK
KyAgICBYTW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247CisgICAgeG1vdGlv
bi50eXBlID0gTW90aW9uTm90aWZ5OworICAgIHhtb3Rpb24ucm9vdCA9IGdldFJvb3RXaW5kb3co
cGFyZW50RnJhbWUpOworICAgIHhtb3Rpb24uc3Vid2luZG93ID0gMDsKKyAgICB4bW90aW9uLnRp
bWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeG1vdGlvbi54ID0gcG9zdFpvb21Qb3MueCgp
OworICAgIHhtb3Rpb24ueSA9IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4bW90aW9uLnhfcm9vdCA9
IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgp
OworICAgIHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHhtb3Rp
b24uaXNfaGludCA9IE5vdGlmeU5vcm1hbDsKKyAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1
ZTsKK30KIAotICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91
Z2ggKi8KLSAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkp
LT5jb250ZW50c1RvV2luZG93KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVko
KSkpOworc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQq
IHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywg
RnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIFhDcm9zc2luZ0V2ZW50JiB4Y3Jvc3NpbmcgPSB4
RXZlbnQtPnhjcm9zc2luZzsKKyAgICB4Y3Jvc3NpbmcudHlwZSA9IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ID8gRW50ZXJOb3RpZnkgOiBMZWF2ZU5vdGlmeTsK
KyAgICB4Y3Jvc3Npbmcucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOworICAgIHhj
cm9zc2luZy5zdWJ3aW5kb3cgPSAwOworICAgIHhjcm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVT
dGFtcCgpOworICAgIHhjcm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhjcm9zc2lu
Zy55ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2Ny
ZWVuWCgpOworICAgIHhjcm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhj
cm9zc2luZy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CisgICAgeGNyb3NzaW5nLm1v
ZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgeGNyb3NzaW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5v
bmU7CisgICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB4Y3Jvc3NpbmcuZm9j
dXMgPSBmYWxzZTsKK30KKyNlbmRpZgogCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZl
bnQoTW91c2VFdmVudCogZXZlbnQpCit7CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGlmICghZGlzcGF0
Y2hOUEV2ZW50KG5wRXZlbnQpKQorCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTlBFdmVudCB4RXZlbnQ7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlu
aXRYRXZlbnQoJnhFdmVudCk7CisKKyAgICAvL0ludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VY
KCksIGV2ZW50LT5wYWdlWSgpKSk7CisgICAgSW50UG9pbnQgcG9zdFpvb21Qb3MgPSByb3VuZGVk
SW50UG9pbnQobV9lbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFi
c29sdXRlTG9jYXRpb24oKSkpOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
dXBFdmVudCkKKyAgICAgICAgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwg
ZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1lKTsKKyAgICBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKKyAgICAgICAgc2V0WE1vdGlv
bkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVu
dEZyYW1lKTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW91dEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50
KQorICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50
LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47
CisjZW5kaWYKKworICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkpCiAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCisjaWYgZGVmaW5lZChYUF9VTklYKQordm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIFhFdmVudCBucEV2ZW50
OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2
ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9IDk7ICAvLyBGb2N1c0luIGdl
dHMgdW5zZXQgc29tZXdoZXJlCisgICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBl
dmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQorewor
ICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZv
Y3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9
IDEwOyAgLy8gRm9jdXNPdXQgZ2V0cyB1bnNldCBzb21ld2hlcmUKKyAgICBldmVudC5tb2RlID0g
Tm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisKKyAg
ICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisjZW5kaWYKKwogdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogewogICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudCk7CkBAIC0yMDcsNyArNDkyLDggQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQo
U2Nyb2xsVmlldyogcGFyZW50KQogCiB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChj
b25zdCBJbnRSZWN0JikKIHsKLSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgaWYgKCFt
X2lzV2luZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKQEAgLTIxNSwyNCArNTAxLDU5IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgaWYgKCFtX2lzU3RhcnRl
ZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7Ci0g
ICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKLSAgICBtX25wV2luZG93LndpZHRo
ID0gbV93aW5kb3dSZWN0LndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRv
d1JlY3QuaGVpZ2h0KCk7CisgICAgLy8gSWYgdGhlIHBsdWdpbiBkaWRuJ3QgbG9hZCBzdWNlc3Nm
dWxseSwgbm8gcG9pbnQgaW4gY2FsbGluZyBzZXR3aW5kb3cKKyAgICBpZiAobV9zdGF0dXMgIT0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luIGlmIGl0J3MgZnVsbC1wYWdlIG9yIHdpbmRvd2Vk
CisgICAgaWYgKG1fbW9kZSAhPSBOUF9GVUxMICYmIG1fbW9kZSAhPSBOUF9FTUJFRCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHBsYXRmb3JtUGx1Z2luV2lkZ2V0IHN0
aWxsIGV4aXN0cworICAgIGlmIChtX2lzV2luZG93ZWQgJiYgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1f
Y2xpcFJlY3QueCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55
KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsK
LSAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7Cisj
aWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlmICghbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNl
OworI2VuZGlmCiAKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVj
dC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1Jl
Y3QuaGVpZ2h0KCkgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSwgJmFsbG9jYXRpb24pOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAg
ICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy55
ID0gbV93aW5kb3dSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93
UmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5o
ZWlnaHQoKTsKKworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX2NsaXBSZWN0
LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsK
KyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsK
KyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0LmhlaWdodCgp
OworCisgICAgICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbV93aW5kb3dSZWN0Lngo
KSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5o
ZWlnaHQoKSB9OworICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogI2lmIFBMQVRGT1JNKFhQX1VOSVgpCi0gICAgaWYg
KCFtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hU
QklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpKTsKLSAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKLSAgICB9Cisg
ICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9w
b3NpdGlvbihHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54
KCksIG1fd2luZG93UmVjdC55KCkpOworICAgICAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgfQogI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdp
bmRvdy54ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsKKworICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9
IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSAwOworICAgICAgICBtX25w
V2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IDA7CisgICAgfQorCisgICAgLy8gRkxBU0ggV09SS0FS
T1VORDogT25seSBzZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBjYWxscyB0bworICAgIC8vIHNldE5Q
V2luZG93KCkgY2F1c2UgdGhlIHBsdWdpbiB0byBjcmFzaCBpbiB3aW5kb3dlZCBtb2RlLgorICAg
IGlmICghbV9pc1dpbmRvd2VkIHx8IG1fbnBXaW5kb3cud2lkdGggPT0gKHVuc2lnbmVkIGludCkt
MSB8fCBtX25wV2luZG93LmhlaWdodCA9PSAodW5zaWduZWQgaW50KS0xKSB7CisgICAgICAgIG1f
bnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRv
dy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgfQogCiAgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMzExLDYg
KzYzMiwxNCBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZh
bHVlKSA9IHRydWU7CiAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKIAorICAgIGNhc2Ug
TlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgICAgICpz
dGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwogICAgIH0KQEAgLTQxNCw3ICs3NDMsOCBAQCB2b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKICAgICB9CiAKICAgICBJbnRSZWN0IHIocmVjdC0+
bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAt
IHJlY3QtPnRvcCk7Ci0gICAgaW52YWxpZGF0ZVJlY3Qocik7CisgICAgLy9pbnZhbGlkYXRlUmVj
dChyKTsKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qocik7CiB9CiAKIHZvaWQg
UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikKQEAgLTQzMSwxMiArNzYxLDY0
IEBAIHZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQogICAgICAgICBndGtfd2lkZ2V0X3F1
ZXVlX2RyYXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpKTsKIH0KIAorc3RhdGljIERpc3BsYXkgKmdldFBsdWdpbkRpc3BsYXkoKQorewor
ICAgIC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBoYXZlIGEgZGlmZmVyZW50IFggY29ubmVj
dGlvbiBvcGVuLiAgU2luY2Ugd2UncmUKKyAgICAvLyBhIGdkay9ndGsgYXBwLCB3ZSdsbCAocHJv
YmFibHk/KSBoYXZlIHRoZSBzYW1lIFggY29ubmVjdGlvbiBhcyBhbnkgZ2RrLWJhc2VkCisgICAg
Ly8gcGx1Z2lucywgc28gd2UgY2FuIHJldHVybiB0aGF0LiAgV2UgbWlnaHQgd2FudCB0byBhZGQg
b3RoZXIgaW1wbGVtZW50YXRpb25zIGhlcmUKKyAgICAvLyBsYXRlci4KKworI2lmIGRlZmluZWQo
WFBfVU5JWCkKKyAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKSk7CisjZWxzZQorICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9CisKIHN0YXRp
YyBnYm9vbGVhbgogcGx1Z19yZW1vdmVkX2NiKEd0a1NvY2tldCAqc29ja2V0LCBncG9pbnRlcikK
IHsKICAgICByZXR1cm4gVFJVRTsKIH0KIAorI2lmIGRlZmluZWQoWFBfVU5JWCkKK3N0YXRpYyB2
b2lkIGdldFZpc3VhbEFuZENvbG9ybWFwKGludCBkZXB0aCwgVmlzdWFsICoqdmlzdWFsLCBDb2xv
cm1hcCAqY29sb3JtYXApCit7CisgICAgKnZpc3VhbCA9IDA7CisgICAgKmNvbG9ybWFwID0gMDsK
KworICAgIGludCBybWFqLCBybWluOworICAgIGlmIChkZXB0aCA9PSAzMiAmJiAoIVhSZW5kZXJR
dWVyeVZlcnNpb24oR0RLX0RJU1BMQVkoKSwgJnJtYWosICZybWluKSB8fCAocm1haiA9PSAwICYm
IHJtaW4gPCA1KSkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBudmk7CisgICAgWFZpc3Vh
bEluZm8gdGVtcGw7CisgICAgdGVtcGwuc2NyZWVuICA9IGdka19zY3JlZW5fZ2V0X251bWJlcihn
ZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOworICAgIHRlbXBsLmRlcHRoICAgPSBkZXB0aDsKKyAg
ICB0ZW1wbC5jX2NsYXNzID0gVHJ1ZUNvbG9yOworICAgIFhWaXN1YWxJbmZvKiB4dmkgPSBYR2V0
VmlzdWFsSW5mbyhHREtfRElTUExBWSgpLCBWaXN1YWxTY3JlZW5NYXNrIHwgVmlzdWFsRGVwdGhN
YXNrIHwgVmlzdWFsQ2xhc3NNYXNrLCAmdGVtcGwsICZudmkpOworCisgICAgaWYgKCF4dmkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXB0aCA9PSAzMikgeworICAgICAgICBmb3IgKGlu
dCBpZHggPSAwOyBpZHggPCBudmk7ICsraWR4KSB7CisgICAgICAgICAgICBYUmVuZGVyUGljdEZv
cm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoR0RLX0RJU1BMQVkoKSwgeHZp
W2lkeF0udmlzdWFsKTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVE
aXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKSB7CisgICAgICAgICAgICAgICAgICp2
aXN1YWwgPSB4dmlbaWR4XS52aXN1YWw7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICAqdmlzdWFsID0geHZpWzBd
LnZpc3VhbDsKKworICAgIFhGcmVlKHh2aSk7CisKKyAgICBpZiAoKnZpc3VhbCkKKyAgICAgICAg
KmNvbG9ybWFwID0gWENyZWF0ZUNvbG9ybWFwKEdES19ESVNQTEFZKCksIEdES19ST09UX1dJTkRP
VygpLCAqdmlzdWFsLCBBbGxvY05vbmUpOworfQorI2VuZGlmCisKIGJvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCgpCiB7CiAgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKQEAgLTQ1MSwyNiAr
ODMzLDM0IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwogICAgIH0KIAorICAgIGlmIChtX2lzV2lu
ZG93ZWQpIHsKICNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsK
KyAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lk
Z2V0KGd0a19zb2NrZXRfbmV3KCkpOworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RL
X0NPTlRBSU5FUihtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1Q
YWdlQ2xpZW50KCkpLCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICAgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgInBsdWdfcmVtb3ZlZCIsIEdfQ0FM
TEJBQ0socGx1Z19yZW1vdmVkX2NiKSwgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfeHRiaW5fbmV3KG1fcGFyZW50RnJhbWUtPnZpZXco
KS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+d2luZG93LCAwKSk7CisgICAg
ICAgIH0KKyNlbHNlCiAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkp
OwogICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksICJwbHVnX3JlbW92ZWQiLCBHX0NBTExCQUNLKHBsdWdfcmVtb3ZlZF9jYiksIE5VTEwp
OwotICAgIH0gZWxzZSBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICBzZXRQbGF0Zm9ybVdpZGdl
dChndGtfeHRiaW5fbmV3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0
Zm9ybVBhZ2VDbGllbnQoKS0+d2luZG93LCAwKSk7Ci0jZWxzZQotICAgIHNldFBsYXRmb3JtV2lk
Z2V0KGd0a19zb2NrZXRfbmV3KCkpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlO
RVIobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CiAjZW5kaWYKKyAgICB9IGVsc2UgeworICAg
ICAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKKyAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0
UGx1Z2luRGlzcGxheSgpOworICAgIH0KKwogICAgIHNob3coKTsKIAotICAgIGlmIChtX2lzV2lu
ZG93ZWQpIHsKLSAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93Owog
I2lmIGRlZmluZWQoWFBfVU5JWCkKICAgICAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAq
d3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwotCiAgICAgICAgIHdzLT50eXBl
ID0gMDsKKyNlbmRpZgogCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2lu
ZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisjaWYgZGVmaW5lZChYUF9VTklYKQogICAg
ICAgICBpZiAobV9uZWVkc1hFbWJlZCkgewogICAgICAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXpl
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogICAgICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSAodm9pZCopZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVChwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKSk7CkBAIC00ODYsMjUgKzg3Niw2MyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3Rh
cnQoKQogICAgICAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpLT54dGNsaWVudC54dGNvbG9ybWFwOwogICAgICAgICB9CiAgICAgICAgIFhGbHVz
aCAod3MtPmRpc3BsYXkpOwotCi0gICAgICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOwogI2Vs
aWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQogICAgICAgICBtX25wV2luZG93LndpbmRv
dyA9ICh2b2lkKilHREtfV0lORE9XX0hXTkQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+d2luZG93
KTsKICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2lu
ZG93VHlwZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CisgICAgICAg
IG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KTsKKyAgICAgICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zp
c3VhbChnc2NyZWVuKTsKKworICAgICAgICBpZiAoZ3Zpc3VhbC0+ZGVwdGggPT0gMzIgfHwgIW1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVl
bkRlcHRoKSkgeworICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoMzIsICZtX3Zpc3Vh
bCwgJm1fY29sb3JtYXApOworICAgICAgICAgICAgd3MtPmRlcHRoID0gMzI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIW1fdmlzdWFsKSB7CisgICAgICAgICAgICBnZXRWaXN1YWxBbmRDb2xv
cm1hcChndmlzdWFsLT5kZXB0aCwgJm1fdmlzdWFsLCAmbV9jb2xvcm1hcCk7CisgICAgICAgICAg
ICB3cy0+ZGVwdGggPSBndmlzdWFsLT5kZXB0aDsKKyAgICAgICAgfQorCisgICAgICAgIHdzLT5k
aXNwbGF5ID0gR0RLX0RJU1BMQVkoKTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IG1fdmlzdWFsOwor
ICAgICAgICB3cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworCisgICAgICAgIG1fbnBXaW5kb3cu
eCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cud2lk
dGggPSAtMTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyNlbHNlCisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgfQogCisjaWYg
ZGVmaW5lZChYUF9VTklYKQorICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOworI2VuZGlmCisK
ICAgICAvLyBUT0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2ZW50cywgbGlrZSBtYWMgcG9y
dD8KLSAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZl
ckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpIHsKICAgICAgICAgdXBk
YXRlUGx1Z2luV2lkZ2V0KCk7IC8vIHdhczogc2V0TlBXaW5kb3dJZk5lZWRlZCgpLCBidXQgdGhp
cyBkb2Vzbid0IHByb2R1Y2UgMHgwIHJlY3RzIGF0IGZpcnN0IGdvCisgICAgICAgIHNldE5QV2lu
ZG93SWZOZWVkZWQoKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQogeworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBp
ZiAobV9kcmF3YWJsZSkgeworICAgICAgICBYRnJlZVBpeG1hcChHREtfRElTUExBWSgpLCBtX2Ry
YXdhYmxlKTsKKyAgICAgICAgbV9kcmF3YWJsZSA9IDA7CisgICAgfQorI2VuZGlmCiB9CiAKIHZv
aWQgUGx1Z2luVmlldzo6aGFsdCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42765</attachid>
            <date>2009-11-09 10:47:34 -0800</date>
            <delta_ts>2010-01-21 17:16:36 -0800</delta_ts>
            <desc>gtk windowless v5</desc>
            <filename>windowless-gtk-v5.diff</filename>
            <type>text/plain</type>
            <size>28927</size>
            <attacher name="Brian Tarricone">bjt23</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWNmYTM3Yi4uNGMxYTJlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAwOS0xMS0wNSAgQnJpYW4gVGFycmlj
b25lICA8YnJpYW5Aa2FrYWkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtndGtdIEFkZCBzdXBwb3J0IGZvciB3aW5kb3dsZXNzIE5QQVBJIHBs
dWdpbnMKKworICAgICAgICBNdWNoIG9mIHRoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiBob3cgdGhl
IFF0IGJhY2tlbmQgZG9lcworICAgICAgICB0aGlzLCBtb2RpZmllZCBmb3IgR3RrLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgzMQorCisgICAg
ICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OlBsdWdpblZp
ZXcpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIHBsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Um9vdFdpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjppbnB1dEV2
ZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW5pdFhFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmhhbmRsZUZvY3VzT3V0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGx1
Z2luRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpwbHVnX3JlbW92ZWRfY2IpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0VmlzdWFsQW5kQ29sb3JtYXApOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
bGF0Zm9ybURlc3Ryb3kpOgorCiAyMDA5LTExLTA0ICBQYXRyaWNrIE11ZWxsZXIgIDxQYXRyaWNr
X011ZWxsZXJAdXMuaWJtLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNo
ZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggZDY5ZjhhNy4uMTU3YmIxMiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
RXZlbnQoRXZlbnQqIGV2ZW50KQogICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0
PE1vdXNlRXZlbnQqPihldmVudCkpOwogICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZl
bnQoKSkKICAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZXZlbnQpKTsKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLkRPTUZv
Y3VzT3V0RXZlbnQpCiAgICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICAgICBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01Gb2N1c0luRXZlbnQpCkBAIC04MDEs
NyArODAxLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAKICAgICAsIG1faXNUcmFuc3BhcmVu
dChmYWxzZSkKICAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV9pc1dhaXRp
bmdUb1N0YXJ0KGZhbHNlKQotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gx
MSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oV0lOX09TKSAmJiAhUExBVEZPUk0oV1gpICYmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpAQCAtODE4LDcgKzgxOCw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZp
ZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdl
KiBwCiAgICAgLCBtX2RyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCgtMSkpCiAgICAgLCBtX2V2
ZW50TW9kZWwoTlBFdmVudE1vZGVsKC0xKSkKICNlbmRpZgotI2lmIGRlZmluZWQoUV9XU19YMTEp
ICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNo
YW5nZShmYWxzZSkKICAgICAsIG1fZHJhd2FibGUoMCkKICAgICAsIG1fdmlzdWFsKDApCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaAppbmRleCAwYTU3ZmE2Li45YjJiY2RhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAg
LTI1OSw3ICsyNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICAgICAgdm9pZCBoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqKTsKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQogICAgICAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudCgpOwogICAgICAg
ICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICNlbmRpZgpAQCAtMjkyLDcgKzI5Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKICAg
ICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7CiAKLSNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8
IGRlZmluZWQoUV9XU19YMTEpCisjaWYgZGVmaW5lZChYUF9VTklYKQogICAgICAgICBib29sIG1f
bmVlZHNYRW1iZWQ7CiAjZW5kaWYKIApAQCAtMzIwLDcgKzMyMCw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKIAotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVmaW5lZChRX1dTX1gxMSkgfHwgUExB
VEZPUk0oU1lNQklBTikKKyNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBMQVRGT1JNKFNZTUJJQU4p
CiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2VsaWYgZGVmaW5lZChYUF9N
QUNPU1gpCiAgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OwpAQCAtMzMzLDcgKzMz
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIFBvaW50IGdsb2JhbE1vdXNlUG9zRm9yUGx1Z2luKCkg
Y29uc3Q7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUV9XU19YMTEpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7CiAgICAg
ICAgIFBpeG1hcCBtX2RyYXdhYmxlOwogICAgICAgICBWaXN1YWwqIG1fdmlzdWFsOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBiL1dlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKaW5kZXggYmMzYTYyMi4uZWY0YmZjOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2FrYWksIEluYy4gPGJyaWFuQGtha2FpLmNvbT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUg
IktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCiAjaW5jbHVkZSAiUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgpAQCAtNjIsNiArNjQsOSBAQAogI2lmIGRlZmluZWQo
WFBfVU5JWCkKICNpbmNsdWRlICJndGsyeHRiaW4uaCIKICNpbmNsdWRlIDxnZGsvZ2RreC5oPgor
I2RlZmluZSBCb29sIGludAorI2RlZmluZSBTdGF0dXMgaW50CisjaW5jbHVkZSA8WDExL2V4dGVu
c2lvbnMvWHJlbmRlci5oPgogI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQogI2lu
Y2x1ZGUgIlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCIKICNpbmNsdWRlIDxnZGsvZ2Rrd2lu
MzIuaD4KQEAgLTk4LDkgKzEwMywxOCBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVu
dChOUEV2ZW50JiBldmVudCkKICAgICByZXR1cm4gYWNjZXB0ZWQ7CiB9CiAKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCitzdGF0aWMgV2luZG93IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1l
KQoreworICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBHZGtTY3JlZW4qIGdzY3Jl
ZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4ocGFyZW50V2lkZ2V0KTsKKyAgICByZXR1cm4gR0RL
X1dJTkRPV19YV0lORE9XKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KGdzY3JlZW4pKTsKK30K
KyNlbmRpZgorCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCiB7Ci0gICAg
aWYgKCFwYXJlbnQoKSB8fCAhbV9pc1dpbmRvd2VkKQorICAgIGlmICghcGFyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CkBAIC0x
MTUsNiArMTI5LDM0IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIAog
ICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2lu
ZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkKICAgICAgICAgc2V0TlBXaW5k
b3dJZk5lZWRlZCgpOworCisgICAgLy9pZiAobV93aW5kb3dSZWN0ID09IG9sZFdpbmRvd1JlY3Qg
JiYgbV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkKKyAgICAvLyAgICByZXR1cm47CisKKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgbV93aW5kb3dSZWN0LnNp
emUoKSAhPSBvbGRXaW5kb3dSZWN0LnNpemUoKSkgeworICAgICAgICBHdGtXaWRnZXQqIHBhcmVu
dFdpbmRvdyA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKTsKKworICAgICAgICBpZiAobV9kcmF3YWJsZSkKKyAgICAgICAgICAgIFhGcmVl
UGl4bWFwKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUpOworCisgICAgICAgIG1fZHJhd2FibGUg
PSBYQ3JlYXRlUGl4bWFwKEdES19ESVNQTEFZKCksIEdES19EUkFXQUJMRV9YSUQocGFyZW50V2lu
ZG93LT53aW5kb3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRv
d1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cu
d3NfaW5mbyktPmRlcHRoKTsKKyAgICAgICAgWFN5bmMoR0RLX0RJU1BMQVkoKSwgRmFsc2UpOyAv
LyBtYWtlIHN1cmUgdGhhdCB0aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQorICAg
IH0KKworICAgIC8vIGRvIG5vdCBjYWxsIHNldE5QV2luZG93SWZOZWVkZWQgaW1tZWRpYXRlbHks
IHdpbGwgYmUgY2FsbGVkIG9uIHBhaW50KCkKKyAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5n
ZSA9IHRydWU7CisjZW5kaWYKKworICAgIC8vIGluIG9yZGVyIHRvIG1vdmUvcmVzaXplIHRoZSBw
bHVnaW4gd2luZG93IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlCisgICAgLy8gcmVzdCBvZiBmcmFt
ZSBkdXJpbmcgZS5nLiBzY3JvbGxpbmcsIHdlIHNldCB0aGUgd2luZG93IGdlb21ldHJ5CisgICAg
Ly8gaW4gdGhlIHBhaW50KCkgZnVuY3Rpb24sIGJ1dCBhcyBwYWludCgpIGlzbid0IGNhbGxlZCB3
aGVuIHRoZQorICAgIC8vIHBsdWdpbiB3aW5kb3cgaXMgb3V0c2lkZSB0aGUgZnJhbWUgd2hpY2gg
Y2FuIGJlIGNhdXNlZCBieSBhCisgICAgLy8gc2Nyb2xsLCB3ZSBuZWVkIHRvIG1vdmUvcmVzaXpl
IGltbWVkaWF0ZWx5LgorICAgIGlmICghbV93aW5kb3dSZWN0LmludGVyc2VjdHMoZnJhbWVWaWV3
LT5mcmFtZVJlY3QoKSkpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpCkBAIC0xNjAsNDMgKzIwMiwyODYgQEAgdm9pZCBQbHVn
aW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiAgICAgaWYgKG1faXNXaW5kb3dlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlBFdmVu
dCBucEV2ZW50OwotICAgIC8qIE5lZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKyNp
ZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBib29sIHN5bmNYID0gbV9wbHVnaW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlz
cGxheSAhPSBHREtfRElTUExBWSgpOworCisgICAgSW50UmVjdCBleHBvc2VkUmVjdChyZWN0KTsK
KyAgICBleHBvc2VkUmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworICAgIGV4cG9zZWRSZWN0
Lm1vdmUoLWZyYW1lUmVjdCgpLngoKSwgLWZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICBXaW5kb3cg
ZHVtbXlfdzsKKyAgICBpbnQgZHVtbXlfaTsKKyAgICB1bnNpZ25lZCBpbnQgZHVtbXlfdWksIGFj
dHVhbERlcHRoID0gMDsKKyAgICBYR2V0R2VvbWV0cnkoR0RLX0RJU1BMQVkoKSwgbV9kcmF3YWJs
ZSwgJmR1bW15X3csICZkdW1teV9pLCAmZHVtbXlfaSwKKyAgICAgICAgICAgICAgICAgJmR1bW15
X3VpLCAmZHVtbXlfdWksICZkdW1teV91aSwgJmFjdHVhbERlcHRoKTsKKworICAgIGNvbnN0IGlu
dCBkcmF3YWJsZURlcHRoID0gKChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93
LndzX2luZm8pLT5kZXB0aDsKKyAgICBBU1NFUlQoZHJhd2FibGVEZXB0aCA9PSBhY3R1YWxEZXB0
aCk7CisKKyAgICBpZiAobV9pc1RyYW5zcGFyZW50ICYmIGRyYXdhYmxlRGVwdGggIT0gMzIpIHsK
KyAgICAgICAgLy8gQXR0ZW1wdCB0byBmYWtlIGl0IHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBhbHBo
YSBjaGFubmVsIG9uIG91cgorICAgICAgICAvLyBwaXhtYXAuICBJZiB0aGF0J3Mgbm90IHBvc3Np
YmxlLCBhdCBsZWFzdCBjbGVhciB0aGUgd2luZG93IHRvCisgICAgICAgIC8vIGF2b2lkIGRyYXdp
bmcgYXJ0aWZhY3RzLgorICAgICAgICBHQyBnYyA9IFhEZWZhdWx0R0MoR0RLX0RJU1BMQVkoKSwg
Z2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkpOworICAgICAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgR2RrRHJhd2FibGUqIGdka0JhY2tpbmdT
dG9yZSA9IE5VTEw7CisgICAgICAgIGdpbnQgeG9mZiA9IDAsIHlvZmYgPSAwOworCisgICAgICAg
IGdka193aW5kb3dfZ2V0X2ludGVybmFsX3BhaW50X2luZm8od2lkZ2V0LT53aW5kb3csICZnZGtC
YWNraW5nU3RvcmUsICZ4b2ZmLCAmeW9mZik7CisKKyAgICAgICAgaWYgKGdka0JhY2tpbmdTdG9y
ZSkgeworICAgICAgICAgICAgWENvcHlBcmVhKEdES19ESVNQTEFZKCksIEdES19EUkFXQUJMRV9Y
SUQoZ2RrQmFja2luZ1N0b3JlKSwgbV9kcmF3YWJsZSwgZ2MsCisgICAgICAgICAgICAgICAgICAg
ICAgbV93aW5kb3dSZWN0LngoKSArIGV4cG9zZWRSZWN0LngoKSAtIHhvZmYsCisgICAgICAgICAg
ICAgICAgICAgICAgbV93aW5kb3dSZWN0LnkoKSArIGV4cG9zZWRSZWN0LnkoKSAtIHlvZmYsCisg
ICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVj
dC55KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gbm8gdmFsaWQgYmFja2lu
ZyBzdG9yZTsgY2xlYXIgdG8gdGhlIGJhY2tncm91bmQgY29sb3IKKyAgICAgICAgICAgIFhGaWxs
UmVjdGFuZ2xlKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUsIGdjLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQo
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBYRXZlbnQgeGV2ZW50OworICAgIG1lbXNldCgm
eGV2ZW50LCAwLCBzaXplb2YoWEV2ZW50KSk7CisgICAgWEdyYXBoaWNzRXhwb3NlRXZlbnQmIGV4
cG9zZUV2ZW50ID0geGV2ZW50LnhncmFwaGljc2V4cG9zZTsKKyAgICBleHBvc2VFdmVudC50eXBl
ID0gR3JhcGhpY3NFeHBvc2U7CisgICAgZXhwb3NlRXZlbnQuZGlzcGxheSA9IEdES19ESVNQTEFZ
KCk7CisgICAgZXhwb3NlRXZlbnQuZHJhd2FibGUgPSBtX2RyYXdhYmxlOworICAgIGV4cG9zZUV2
ZW50LnggPSBleHBvc2VkUmVjdC54KCk7CisgICAgZXhwb3NlRXZlbnQueSA9IGV4cG9zZWRSZWN0
LnkoKTsKKyAgICBleHBvc2VFdmVudC53aWR0aCA9IGV4cG9zZWRSZWN0LngoKSArIGV4cG9zZWRS
ZWN0LndpZHRoKCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIHdpZHRoIGlzIHRoZSByaWdodCBp
biB0cmFuc3BhcmVudCBtb2RlCisgICAgZXhwb3NlRXZlbnQuaGVpZ2h0ID0gZXhwb3NlZFJlY3Qu
eSgpICsgZXhwb3NlZFJlY3QuaGVpZ2h0KCk7IC8vIGZsYXNoIGJ1Zz8gaXQgdGhpbmtzIGhlaWdo
dCBpcyB0aGUgYm90dG9tIGluIHRyYW5zcGFyZW50IG1vZGUKKworICAgIGRpc3BhdGNoTlBFdmVu
dCh4ZXZlbnQpOworCisgICAgaWYgKHN5bmNYKQorICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3Bs
YXksIEZhbHNlKTsgLy8gc3luYyBjaGFuZ2VzIGJ5IHBsdWdpbgorCisgICAgLy8gVGhpcyBjYWxs
ICptdXN0KiBiZSBkb25lIGFmdGVyIHRoZSBhYm92ZSBleHBvc2UsIGJlY2F1c2Ugc29tZSBwbHVn
aW5zCisgICAgLy8gKGxpa2UgQWRvYmUgRmxhc2gpIGFwcGVhciB0byBjYWxsIGdka19waXhtYXBf
Zm9yZWlnbl9uZXcoKSBvbiB0aGUKKyAgICAvLyBwYXNzZWQgRHJhd2FibGUgd2l0aG91dCBmaXJz
dCBkb2luZyBnZGtfcGl4bWFwX2xvb2t1cCgpLiAgSWYgd2UgY3JlYXRlCisgICAgLy8gdGhlIEdk
a1BpeG1hcCBoZXJlIGJlZm9yZSBBZG9iZSBkb2VzLCB0aGVuIEFkb2JlJ3MgX2ZvcmVpZ25fbmV3
KCkgd2lsbAorICAgIC8vIHRyaWdnZXIgYSBnZGsgd2FybmluZy4gIChJZGVhbGx5LCBnZGsgd291
bGQgZmlyc3QgZG8gYSBsb29rdXAgYmVmb3JlCisgICAgLy8gY3JlYXRpbmcgYSBuZXcgb25lLCBs
aWtlIGl0IGRvZXMgZm9yIFdpbmRvd3MsIGJ1dCBvaCB3ZWxsLCBub3RoaW5nIHdlCisgICAgLy8g
Y2FuIGRvIGFib3V0IHRoYXQuKQorICAgIEdka1BpeG1hcCogZ2RrRHJhd2FibGUgPSBnZGtfcGl4
bWFwX2xvb2t1cChtX2RyYXdhYmxlKTsKKyAgICBpZiAoIWdka0RyYXdhYmxlKQorICAgICAgICBn
ZGtEcmF3YWJsZSA9IGdka19waXhtYXBfZm9yZWlnbl9uZXcobV9kcmF3YWJsZSk7CisKKyAgICBp
ZiAoIWdka19kcmF3YWJsZV9nZXRfY29sb3JtYXAoR0RLX0RSQVdBQkxFKGdka0RyYXdhYmxlKSkp
IHsKKyAgICAgICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2RreF92aXN1YWxfZ2V0KG1fdmlzdWFs
LT52aXN1YWxpZCk7CisgICAgICAgIEdka0NvbG9ybWFwKiBnY21hcCA9IGdka194MTFfY29sb3Jt
YXBfZm9yZWlnbl9uZXcoZ3Zpc3VhbCwgbV9jb2xvcm1hcCk7CisgICAgICAgIGdka19kcmF3YWJs
ZV9zZXRfY29sb3JtYXAoR0RLX0RSQVdBQkxFKGdka0RyYXdhYmxlKSwgZ2NtYXApOworICAgIH0K
IAotICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgIGNhaXJv
X3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgY2Fpcm9fc2F2ZShjcik7
CiAKLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIGdka19jYWlyb19z
ZXRfc291cmNlX3BpeG1hcChjciwgZ2RrRHJhd2FibGUsIGZyYW1lUmVjdCgpLngoKSwgZnJhbWVS
ZWN0KCkueSgpKTsKKworICAgIGNhaXJvX3JlY3RhbmdsZShjciwKKyAgICAgICAgICAgICAgICAg
ICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJlY3QueCgpLCBmcmFtZVJlY3QoKS55KCkgKyBl
eHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0LndpZHRoKCks
IGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19jbGlwKGNyKTsKIAotICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmll
dzo6cGFpbnQoKTogUGFpbnQgZXZlbnQgbm90IGFjY2VwdGVkIik7CisgICAgaWYgKG1faXNUcmFu
c3BhcmVudCkKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9P
VkVSKTsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BF
UkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19wYWludChjcik7CisKKyAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKKyNlbmRpZiAgLy8gZGVmaW5lZChYUF9VTklYKQogfQogCiB2b2lkIFBsdWdpblZpZXc6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgTlBFdmVu
dCBucEV2ZW50OwotICAgIAotICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBw
YXNzIHRocm91Z2ggKi8KLQogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBpZiAoIWRpc3BhdGNoTlBFdmVu
dChucEV2ZW50KSkKKworICAgIGlmKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVu
dC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBOUEV2ZW50IHhFdmVudDsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgR2RrRXZlbnRL
ZXkqIGdka0V2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5KCk7CisKKyAgICB4
RXZlbnQudHlwZSA9IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
ID8gMiA6IDM7ICAvLyBLZXlQcmVzcy9SZWxlYXNlIGdldCB1bnNldCBzb21ld2hlcmUKKyAgICB4
RXZlbnQueGtleS5yb290ID0gZ2V0Um9vdFdpbmRvdyhtX3BhcmVudEZyYW1lKTsKKyAgICB4RXZl
bnQueGtleS5zdWJ3aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNoaWxkIHdpbmRvdworICAgIHhF
dmVudC54a2V5LnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeEV2ZW50LnhrZXkuc3Rh
dGUgPSBnZGtFdmVudC0+c3RhdGU7ICAvLyBHZGtNb2RpZmllclR5cGUgbWlycm9ycyB4bGliIHN0
YXRlIG1hc2tzCisgICAgeEV2ZW50LnhrZXkua2V5Y29kZSA9IGdka0V2ZW50LT5oYXJkd2FyZV9r
ZXljb2RlOworICAgIHhFdmVudC54a2V5LnNhbWVfc2NyZWVuID0gdHJ1ZTsKKworICAgIC8vIE5P
VEU6IEFzIHRoZSBYRXZlbnRzIHNlbnQgdG8gdGhlIHBsdWctaW4gYXJlIHN5bnRoZXNpemVkIGFu
ZCB0aGVyZSBpcyBub3QgYSBuYXRpdmUgd2luZG93CisgICAgLy8gY29ycmVzcG9uZGluZyB0byB0
aGUgcGx1Zy1pbiByZWN0YW5nbGUsIHNvbWUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIFhFdmVudCBz
dHJ1Y3R1cmVzIGFyZSBub3QKKyAgICAvLyBzZXQgdG8gdGhlaXIgbm9ybWFsIFhzZXJ2ZXIgdmFs
dWVzLiBlLmcuIEtleSBldmVudHMgZG9uJ3QgaGF2ZSBhIHBvc2l0aW9uLgorICAgIC8vIHNvdXJj
ZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vTlBFdmVudAorICAgIHhFdmVudC54
a2V5LnggPSAwOworICAgIHhFdmVudC54a2V5LnkgPSAwOworICAgIHhFdmVudC54a2V5Lnhfcm9v
dCA9IDA7CisgICAgeEV2ZW50LnhrZXkueV9yb290ID0gMDsKKyNlbmRpZgorCisgICAgaWYgKCFk
aXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBl
dmVudCkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCitzdGF0aWMgdW5zaWduZWQgaW50IGlucHV0RXZl
bnRTdGF0ZShNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3RhdGUgPSAw
OworICAgIGlmIChldmVudC0+Y3RybEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBDb250cm9sTWFz
azsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IFNoaWZ0TWFz
azsKKyAgICBpZiAoZXZlbnQtPmFsdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2QxTWFzazsK
KyAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kNE1hc2s7Cisg
ICAgcmV0dXJuIHN0YXRlOworfQorCit2b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2ZW50
KiB4RXZlbnQpCiB7Ci0gICAgTlBFdmVudCBucEV2ZW50OworICAgIG1lbXNldCh4RXZlbnQsIDAs
IHNpemVvZihYRXZlbnQpKTsKKworICAgIHhFdmVudC0+eGFueS5zZXJpYWwgPSAwOyAvLyB3ZSBh
cmUgdW5hd2FyZSBvZiB0aGUgbGFzdCByZXF1ZXN0IHByb2Nlc3NlZCBieSBYIFNlcnZlcgorICAg
IHhFdmVudC0+eGFueS5zZW5kX2V2ZW50ID0gZmFsc2U7CisgICAgeEV2ZW50LT54YW55LmRpc3Bs
YXkgPSBHREtfRElTUExBWSgpOworICAgIC8vIE5PVEU6IGV2ZW50LT54YW55LndpbmRvdyBkb2Vz
bid0IGFsd2F5cyByZXNwb25kIHRvIHRoZSAud2luZG93IHByb3BlcnR5IG9mIG90aGVyIFhFdmVu
dCdzCisgICAgLy8gYnV0IGRvZXMgaW4gdGhlIGNhc2Ugb2YgS2V5UHJlc3MsIEtleVJlbGVhc2Us
IEJ1dHRvblByZXNzLCBCdXR0b25SZWxlYXNlLCBhbmQgTW90aW9uTm90aWZ5CisgICAgLy8gZXZl
bnRzOyB0aHVzLCB0aGlzIGlzIHJpZ2h0OgorICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gbV9wYXJl
bnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAg
IHhFdmVudC0+eGFueS53aW5kb3cgPSB3aWRnZXQgPyBHREtfV0lORE9XX1hXSU5ET1cod2lkZ2V0
LT53aW5kb3cpIDogMDsKK30KIAotICAgIGlmICghbV9pc1dpbmRvd2VkKQotICAgICAgcmV0dXJu
Oworc3RhdGljIHZvaWQgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZl
bnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1l
KiBwYXJlbnRGcmFtZSkKK3sKKyAgICBYQnV0dG9uRXZlbnQmIHhidXR0b24gPSB4RXZlbnQtPnhi
dXR0b247CisgICAgeGJ1dHRvbi50eXBlID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vkb3duRXZlbnQgPyBCdXR0b25QcmVzcyA6IEJ1dHRvblJlbGVhc2U7CisgICAgeGJ1dHRv
bi5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeGJ1dHRvbi5zdWJ3aW5k
b3cgPSAwOworICAgIHhidXR0b24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4YnV0
dG9uLnggPSBwb3N0Wm9vbVBvcy54KCk7CisgICAgeGJ1dHRvbi55ID0gcG9zdFpvb21Qb3MueSgp
OworICAgIHhidXR0b24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4YnV0dG9uLnlf
cm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeGJ1dHRvbi5zdGF0ZSA9IGlucHV0RXZlbnRT
dGF0ZShldmVudCk7CisgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICBjYXNlIE1p
ZGRsZUJ1dHRvbjoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24yOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1
dHRvbjM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICBkZWZhdWx0
OgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjE7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICB4YnV0dG9uLnNhbWVfc2NyZWVuID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0
WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2
ZW50LCBjb25zdCBJbnRQb2ludCYgcG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sK
KyAgICBYTW90aW9uRXZlbnQmIHhtb3Rpb24gPSB4RXZlbnQtPnhtb3Rpb247CisgICAgeG1vdGlv
bi50eXBlID0gTW90aW9uTm90aWZ5OworICAgIHhtb3Rpb24ucm9vdCA9IGdldFJvb3RXaW5kb3co
cGFyZW50RnJhbWUpOworICAgIHhtb3Rpb24uc3Vid2luZG93ID0gMDsKKyAgICB4bW90aW9uLnRp
bWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeG1vdGlvbi54ID0gcG9zdFpvb21Qb3MueCgp
OworICAgIHhtb3Rpb24ueSA9IHBvc3Rab29tUG9zLnkoKTsKKyAgICB4bW90aW9uLnhfcm9vdCA9
IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeG1vdGlvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgp
OworICAgIHhtb3Rpb24uc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHhtb3Rp
b24uaXNfaGludCA9IE5vdGlmeU5vcm1hbDsKKyAgICB4bW90aW9uLnNhbWVfc2NyZWVuID0gdHJ1
ZTsKK30KIAotICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91
Z2ggKi8KLSAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkp
LT5jb250ZW50c1RvV2luZG93KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVko
KSkpOworc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQq
IHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywg
RnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIFhDcm9zc2luZ0V2ZW50JiB4Y3Jvc3NpbmcgPSB4
RXZlbnQtPnhjcm9zc2luZzsKKyAgICB4Y3Jvc3NpbmcudHlwZSA9IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ID8gRW50ZXJOb3RpZnkgOiBMZWF2ZU5vdGlmeTsK
KyAgICB4Y3Jvc3Npbmcucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOworICAgIHhj
cm9zc2luZy5zdWJ3aW5kb3cgPSAwOworICAgIHhjcm9zc2luZy50aW1lID0gZXZlbnQtPnRpbWVT
dGFtcCgpOworICAgIHhjcm9zc2luZy54ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhjcm9zc2lu
Zy55ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHhjcm9zc2luZy54X3Jvb3QgPSBldmVudC0+c2Ny
ZWVuWCgpOworICAgIHhjcm9zc2luZy55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhj
cm9zc2luZy5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CisgICAgeGNyb3NzaW5nLm1v
ZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgeGNyb3NzaW5nLmRldGFpbCA9IE5vdGlmeURldGFpbE5v
bmU7CisgICAgeGNyb3NzaW5nLnNhbWVfc2NyZWVuID0gdHJ1ZTsKKyAgICB4Y3Jvc3NpbmcuZm9j
dXMgPSBmYWxzZTsKK30KKyNlbmRpZgogCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZl
bnQoTW91c2VFdmVudCogZXZlbnQpCit7CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGlmICghZGlzcGF0
Y2hOUEV2ZW50KG5wRXZlbnQpKQorCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTlBFdmVudCB4RXZlbnQ7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlu
aXRYRXZlbnQoJnhFdmVudCk7CisKKyAgICAvL0ludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VY
KCksIGV2ZW50LT5wYWdlWSgpKSk7CisgICAgSW50UG9pbnQgcG9zdFpvb21Qb3MgPSByb3VuZGVk
SW50UG9pbnQobV9lbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFi
c29sdXRlTG9jYXRpb24oKSkpOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
dXBFdmVudCkKKyAgICAgICAgc2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwg
ZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1lKTsKKyAgICBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKKyAgICAgICAgc2V0WE1vdGlv
bkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVu
dEZyYW1lKTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW91dEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50
KQorICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50
LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47
CisjZW5kaWYKKworICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkpCiAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCisjaWYgZGVmaW5lZChYUF9VTklYKQordm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIFhFdmVudCBucEV2ZW50
OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2
ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9IDk7ICAvLyBGb2N1c0luIGdl
dHMgdW5zZXQgc29tZXdoZXJlCisgICAgZXZlbnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBl
dmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQorewor
ICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZv
Y3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9
IDEwOyAgLy8gRm9jdXNPdXQgZ2V0cyB1bnNldCBzb21ld2hlcmUKKyAgICBldmVudC5tb2RlID0g
Tm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRldGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisKKyAg
ICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisjZW5kaWYKKwogdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQogewogICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudCk7CkBAIC0yMDcsNyArNDkyLDggQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQo
U2Nyb2xsVmlldyogcGFyZW50KQogCiB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChj
b25zdCBJbnRSZWN0JikKIHsKLSAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisgICAgaWYgKCFt
X2lzV2luZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKQEAgLTIxNSwyNCArNTAxLDU5IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgaWYgKCFtX2lzU3RhcnRl
ZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7Ci0g
ICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKLSAgICBtX25wV2luZG93LndpZHRo
ID0gbV93aW5kb3dSZWN0LndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRv
d1JlY3QuaGVpZ2h0KCk7CisgICAgLy8gSWYgdGhlIHBsdWdpbiBkaWRuJ3QgbG9hZCBzdWNlc3Nm
dWxseSwgbm8gcG9pbnQgaW4gY2FsbGluZyBzZXR3aW5kb3cKKyAgICBpZiAobV9zdGF0dXMgIT0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBPbiBVbml4LCBvbmx5IGNhbGwgcGx1Z2luIGlmIGl0J3MgZnVsbC1wYWdlIG9yIHdpbmRvd2Vk
CisgICAgaWYgKG1fbW9kZSAhPSBOUF9GVUxMICYmIG1fbW9kZSAhPSBOUF9FTUJFRCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHBsYXRmb3JtUGx1Z2luV2lkZ2V0IHN0
aWxsIGV4aXN0cworICAgIGlmIChtX2lzV2luZG93ZWQgJiYgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1f
Y2xpcFJlY3QueCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55
KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsK
LSAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7Cisj
aWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlmICghbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNl
OworI2VuZGlmCiAKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVj
dC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1Jl
Y3QuaGVpZ2h0KCkgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSwgJmFsbG9jYXRpb24pOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAg
ICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy55
ID0gbV93aW5kb3dSZWN0LnkoKTsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IG1fd2luZG93
UmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5o
ZWlnaHQoKTsKKworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX2NsaXBSZWN0
LngoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsK
KyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3Qud2lkdGgoKTsK
KyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0LmhlaWdodCgp
OworCisgICAgICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbV93aW5kb3dSZWN0Lngo
KSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5o
ZWlnaHQoKSB9OworICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogI2lmIFBMQVRGT1JNKFhQX1VOSVgpCi0gICAgaWYg
KCFtX25lZWRzWEVtYmVkKSB7Ci0gICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hU
QklOKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpKTsKLSAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKLSAgICB9Cisg
ICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9w
b3NpdGlvbihHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54
KCksIG1fd2luZG93UmVjdC55KCkpOworICAgICAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgfQogI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdp
bmRvdy54ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsKKworICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9
IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSAwOworICAgICAgICBtX25w
V2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IDA7CisgICAgfQorCisgICAgLy8gRkxBU0ggV09SS0FS
T1VORDogT25seSBzZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBjYWxscyB0bworICAgIC8vIHNldE5Q
V2luZG93KCkgY2F1c2UgdGhlIHBsdWdpbiB0byBjcmFzaCBpbiB3aW5kb3dlZCBtb2RlLgorICAg
IGlmICghbV9pc1dpbmRvd2VkIHx8IG1fbnBXaW5kb3cud2lkdGggPT0gKHVuc2lnbmVkIGludCkt
MSB8fCBtX25wV2luZG93LmhlaWdodCA9PSAodW5zaWduZWQgaW50KS0xKSB7CisgICAgICAgIG1f
bnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRv
dy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgfQogCiAgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMzExLDYg
KzYzMiwxNCBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKICAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZh
bHVlKSA9IHRydWU7CiAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKIAorICAgIGNhc2Ug
TlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgICAgICpz
dGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwogICAgIH0KQEAgLTQxNCw3ICs3NDMsOCBAQCB2b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKICAgICB9CiAKICAgICBJbnRSZWN0IHIocmVjdC0+
bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAt
IHJlY3QtPnRvcCk7Ci0gICAgaW52YWxpZGF0ZVJlY3Qocik7CisgICAgLy9pbnZhbGlkYXRlUmVj
dChyKTsKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qocik7CiB9CiAKIHZvaWQg
UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikKQEAgLTQzMSwxMiArNzYxLDY0
IEBAIHZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQogICAgICAgICBndGtfd2lkZ2V0X3F1
ZXVlX2RyYXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpKTsKIH0KIAorc3RhdGljIERpc3BsYXkqIGdldFBsdWdpbkRpc3BsYXkoKQorewor
ICAgIC8vIFRoZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBoYXZlIGEgZGlmZmVyZW50IFggY29ubmVj
dGlvbiBvcGVuLiAgU2luY2Ugd2UncmUKKyAgICAvLyBhIGdkay9ndGsgYXBwLCB3ZSdsbCAocHJv
YmFibHk/KSBoYXZlIHRoZSBzYW1lIFggY29ubmVjdGlvbiBhcyBhbnkgZ2RrLWJhc2VkCisgICAg
Ly8gcGx1Z2lucywgc28gd2UgY2FuIHJldHVybiB0aGF0LiAgV2UgbWlnaHQgd2FudCB0byBhZGQg
b3RoZXIgaW1wbGVtZW50YXRpb25zIGhlcmUKKyAgICAvLyBsYXRlci4KKworI2lmIGRlZmluZWQo
WFBfVU5JWCkKKyAgICByZXR1cm4gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKSk7CisjZWxzZQorICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9CisKIHN0YXRp
YyBnYm9vbGVhbgotcGx1Z19yZW1vdmVkX2NiKEd0a1NvY2tldCAqc29ja2V0LCBncG9pbnRlcikK
K3BsdWdfcmVtb3ZlZF9jYihHdGtTb2NrZXQqIHNvY2tldCwgZ3BvaW50ZXIpCiB7CiAgICAgcmV0
dXJuIFRSVUU7CiB9CiAKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCitzdGF0aWMgdm9pZCBnZXRWaXN1
YWxBbmRDb2xvcm1hcChpbnQgZGVwdGgsIFZpc3VhbCoqIHZpc3VhbCwgQ29sb3JtYXAqIGNvbG9y
bWFwKQoreworICAgICp2aXN1YWwgPSAwOworICAgICpjb2xvcm1hcCA9IDA7CisKKyAgICBpbnQg
cm1haiwgcm1pbjsKKyAgICBpZiAoZGVwdGggPT0gMzIgJiYgKCFYUmVuZGVyUXVlcnlWZXJzaW9u
KEdES19ESVNQTEFZKCksICZybWFqLCAmcm1pbikgfHwgKHJtYWogPT0gMCAmJiBybWluIDwgNSkp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbnZpOworICAgIFhWaXN1YWxJbmZvIHRlbXBs
OworICAgIHRlbXBsLnNjcmVlbiAgPSBnZGtfc2NyZWVuX2dldF9udW1iZXIoZ2RrX3NjcmVlbl9n
ZXRfZGVmYXVsdCgpKTsKKyAgICB0ZW1wbC5kZXB0aCAgID0gZGVwdGg7CisgICAgdGVtcGwuY19j
bGFzcyA9IFRydWVDb2xvcjsKKyAgICBYVmlzdWFsSW5mbyogeHZpID0gWEdldFZpc3VhbEluZm8o
R0RLX0RJU1BMQVkoKSwgVmlzdWFsU2NyZWVuTWFzayB8IFZpc3VhbERlcHRoTWFzayB8IFZpc3Vh
bENsYXNzTWFzaywgJnRlbXBsLCAmbnZpKTsKKworICAgIGlmICgheHZpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoZGVwdGggPT0gMzIpIHsKKyAgICAgICAgZm9yIChpbnQgaWR4ID0gMDsg
aWR4IDwgbnZpOyArK2lkeCkgeworICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1h
dCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KEdES19ESVNQTEFZKCksIHh2aVtpZHhdLnZpc3Vh
bCk7CisgICAgICAgICAgICBpZiAoZm9ybWF0LT50eXBlID09IFBpY3RUeXBlRGlyZWN0ICYmIGZv
cm1hdC0+ZGlyZWN0LmFscGhhTWFzaykgeworICAgICAgICAgICAgICAgICAqdmlzdWFsID0geHZp
W2lkeF0udmlzdWFsOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgKnZpc3VhbCA9IHh2aVswXS52aXN1YWw7CisK
KyAgICBYRnJlZSh4dmkpOworCisgICAgaWYgKCp2aXN1YWwpCisgICAgICAgICpjb2xvcm1hcCA9
IFhDcmVhdGVDb2xvcm1hcChHREtfRElTUExBWSgpLCBHREtfUk9PVF9XSU5ET1coKSwgKnZpc3Vh
bCwgQWxsb2NOb25lKTsKK30KKyNlbmRpZgorCiBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3Rh
cnQoKQogewogICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CkBAIC00NTEsMjYgKzgzMywzNCBAQCBi
b29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldygwKTsKICAgICB9CiAKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CiAj
aWYgZGVmaW5lZChYUF9VTklYKQotICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIGlm
IChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29j
a2V0X25ldygpKTsKKyAgICAgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
bV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgp
KSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnX3JlbW92ZWQiLCBHX0NBTExCQUNLKHBsdWdf
cmVtb3ZlZF9jYiksIE5VTEwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2V0UGxh
dGZvcm1XaWRnZXQoZ3RrX3h0YmluX25ldyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5k
b3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCktPndpbmRvdywgMCkpOworICAgICAgICB9CisjZWxz
ZQogICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29ja2V0X25ldygpKTsKICAgICAgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudEZyYW1lLT52aWV3KCktPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAicGx1
Z19yZW1vdmVkIiwgR19DQUxMQkFDSyhwbHVnX3JlbW92ZWRfY2IpLCBOVUxMKTsKLSAgICB9IGVs
c2UgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3h0Ymlu
X25ldyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xp
ZW50KCktPndpbmRvdywgMCkpOwotI2Vsc2UKLSAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29j
a2V0X25ldygpKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50
RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpOwogI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0UGxh
dGZvcm1XaWRnZXQoMCk7CisgICAgICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3Bs
YXkoKTsKKyAgICB9CisKICAgICBzaG93KCk7CiAKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0g
ICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKICNpZiBkZWZpbmVk
KFhQX1VOSVgpCi0gICAgICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QgKndzID0gbmV3IE5Q
U2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKLQorICAgICAgICBOUFNldFdpbmRvd0NhbGxiYWNr
U3RydWN0KiB3cyA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KCk7CiAgICAgICAgIHdz
LT50eXBlID0gMDsKKyNlbmRpZgogCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBt
X25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisjaWYgZGVmaW5lZChYUF9VTklY
KQogICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgewogICAgICAgICAgICAgZ3RrX3dpZGdldF9y
ZWFsaXplKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwogICAgICAgICAgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSAodm9pZCopZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKSk7CkBAIC00ODYsMjUgKzg3Niw2MyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRm
b3JtU3RhcnQoKQogICAgICAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpLT54dGNsaWVudC54dGNvbG9ybWFwOwogICAgICAgICB9CiAgICAgICAg
IFhGbHVzaCAod3MtPmRpc3BsYXkpOwotCi0gICAgICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdz
OwogI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQogICAgICAgICBtX25wV2luZG93
LndpbmRvdyA9ICh2b2lkKilHREtfV0lORE9XX0hXTkQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+
d2luZG93KTsKICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Cisg
ICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisgICAgICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2Rl
ZmF1bHQoKTsKKyAgICAgICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lz
dGVtX3Zpc3VhbChnc2NyZWVuKTsKKworICAgICAgICBpZiAoZ3Zpc3VhbC0+ZGVwdGggPT0gMzIg
fHwgIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVs
dFNjcmVlbkRlcHRoKSkgeworICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoMzIsICZt
X3Zpc3VhbCwgJm1fY29sb3JtYXApOworICAgICAgICAgICAgd3MtPmRlcHRoID0gMzI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIW1fdmlzdWFsKSB7CisgICAgICAgICAgICBnZXRWaXN1YWxB
bmRDb2xvcm1hcChndmlzdWFsLT5kZXB0aCwgJm1fdmlzdWFsLCAmbV9jb2xvcm1hcCk7CisgICAg
ICAgICAgICB3cy0+ZGVwdGggPSBndmlzdWFsLT5kZXB0aDsKKyAgICAgICAgfQorCisgICAgICAg
IHdzLT5kaXNwbGF5ID0gR0RLX0RJU1BMQVkoKTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IG1fdmlz
dWFsOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworCisgICAgICAgIG1fbnBX
aW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cueSA9IDA7CisgICAgICAgIG1fbnBXaW5k
b3cud2lkdGggPSAtMTsKKyAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKKyNlbHNlCisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVz
Q2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgfQog
CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOworI2Vu
ZGlmCisKICAgICAvLyBUT0RPIHJlbW92ZSBpbiBmYXZvciBvZiBudWxsIGV2ZW50cywgbGlrZSBt
YWMgcG9ydD8KLSAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpIHsKICAgICAg
ICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7IC8vIHdhczogc2V0TlBXaW5kb3dJZk5lZWRlZCgpLCBi
dXQgdGhpcyBkb2Vzbid0IHByb2R1Y2UgMHgwIHJlY3RzIGF0IGZpcnN0IGdvCisgICAgICAgIHNl
dE5QV2luZG93SWZOZWVkZWQoKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQogeworI2lmIGRlZmluZWQoWFBfVU5JWCkK
KyAgICBpZiAobV9kcmF3YWJsZSkgeworICAgICAgICBYRnJlZVBpeG1hcChHREtfRElTUExBWSgp
LCBtX2RyYXdhYmxlKTsKKyAgICAgICAgbV9kcmF3YWJsZSA9IDA7CisgICAgfQorI2VuZGlmCiB9
CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFsdCgpCg==
</data>
<flag name="review"
          id="24334"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44682</attachid>
            <date>2009-12-11 06:19:10 -0800</date>
            <delta_ts>2009-12-11 06:19:10 -0800</delta_ts>
            <desc>v5 patch modified to apply on git-svn-id: http://svn.webkit.org/repository/webkit/trunk@51980 268f45cc-cd09-0410-ab3c-d52691b4dbfc (git commit 98b137e9b87d583cb67d8fb83a80960774d0bd61)</desc>
            <filename>gtk-windowless.patch</filename>
            <type>text/plain</type>
            <size>27062</size>
            <attacher name="Alex Alexander">wired</attacher>
            
              <data encoding="base64">ZGlmZiAtcnUgd2Via2l0LWd0ay05OTk5LW9sZC9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwIHdlYmtpdC1ndGstOTk5OS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdH
dGsuY3BwCi0tLSB3ZWJraXQtZ3RrLTk5OTktb2xkL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5jcHAJMjAwOS0xMi0xMSAxNTo1MTowOC4xNjM2NjI3NTAgKzAyMDAKKysrIHdlYmtp
dC1ndGstOTk5OS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCTIwMDktMTIt
MTEgMTU6NTg6MTEuMTA5Njg3NjY3ICswMjAwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgS2FrYWksIEluYy4gPGJyaWFuQGtha2FpLmNvbT4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUgIktl
eWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
TWFpblRocmVhZFNjaGVkdWxlci5oIgpAQCAtNjIsNiArNjQsOSBAQAogI2lmIGRlZmluZWQoWFBf
VU5JWCkKICNpbmNsdWRlICJndGsyeHRiaW4uaCIKICNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2Rl
ZmluZSBCb29sIGludAorI2RlZmluZSBTdGF0dXMgaW50CisjaW5jbHVkZSA8WDExL2V4dGVuc2lv
bnMvWHJlbmRlci5oPgogI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQogI2luY2x1
ZGUgIlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCIKICNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIu
aD4KQEAgLTk4LDkgKzEwMywxOCBAQAogICAgIHJldHVybiBhY2NlcHRlZDsKIH0KIAorI2lmIGRl
ZmluZWQoWFBfVU5JWCkKK3N0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50
RnJhbWUpCit7CisgICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmll
dygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIEdka1NjcmVlbiog
Z3NjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOworICAgIHJldHVy
biBHREtfV0lORE9XX1hXSU5ET1coZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikp
OworfQorI2VuZGlmCisKIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIHsK
LSAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisgICAgaWYgKCFwYXJlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsK
QEAgLTExNSw2ICsxMjksMzQgQEAKIAogICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYm
IChtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBS
ZWN0KSkKICAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworCisgICAgLy9pZiAobV93aW5k
b3dSZWN0ID09IG9sZFdpbmRvd1JlY3QgJiYgbV9jbGlwUmVjdCA9PSBvbGRDbGlwUmVjdCkKKyAg
ICAvLyAgICByZXR1cm47CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKCFtX2lzV2lu
ZG93ZWQgJiYgbV93aW5kb3dSZWN0LnNpemUoKSAhPSBvbGRXaW5kb3dSZWN0LnNpemUoKSkgewor
ICAgICAgICBHdGtXaWRnZXQqIHBhcmVudFdpbmRvdyA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKworICAgICAgICBpZiAobV9kcmF3
YWJsZSkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUp
OworCisgICAgICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRlUGl4bWFwKEdES19ESVNQTEFZKCksIEdE
S19EUkFXQUJMRV9YSUQocGFyZW50V2luZG93LT53aW5kb3cpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5QU2V0V2luZG93Q2Fs
bGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPmRlcHRoKTsKKyAgICAgICAgWFN5bmMo
R0RLX0RJU1BMQVkoKSwgRmFsc2UpOyAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgc2VydmVyIGtub3dz
IGFib3V0IHRoZSBEcmF3YWJsZQorICAgIH0KKworICAgIC8vIGRvIG5vdCBjYWxsIHNldE5QV2lu
ZG93SWZOZWVkZWQgaW1tZWRpYXRlbHksIHdpbGwgYmUgY2FsbGVkIG9uIHBhaW50KCkKKyAgICBt
X2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IHRydWU7CisjZW5kaWYKKworICAgIC8vIGluIG9y
ZGVyIHRvIG1vdmUvcmVzaXplIHRoZSBwbHVnaW4gd2luZG93IGF0IHRoZSBzYW1lIHRpbWUgYXMg
dGhlCisgICAgLy8gcmVzdCBvZiBmcmFtZSBkdXJpbmcgZS5nLiBzY3JvbGxpbmcsIHdlIHNldCB0
aGUgd2luZG93IGdlb21ldHJ5CisgICAgLy8gaW4gdGhlIHBhaW50KCkgZnVuY3Rpb24sIGJ1dCBh
cyBwYWludCgpIGlzbid0IGNhbGxlZCB3aGVuIHRoZQorICAgIC8vIHBsdWdpbiB3aW5kb3cgaXMg
b3V0c2lkZSB0aGUgZnJhbWUgd2hpY2ggY2FuIGJlIGNhdXNlZCBieSBhCisgICAgLy8gc2Nyb2xs
LCB3ZSBuZWVkIHRvIG1vdmUvcmVzaXplIGltbWVkaWF0ZWx5LgorICAgIGlmICghbV93aW5kb3dS
ZWN0LmludGVyc2VjdHMoZnJhbWVWaWV3LT5mcmFtZVJlY3QoKSkpCisgICAgICAgIHNldE5QV2lu
ZG93SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpCkBAIC0xNjAs
NDMgKzIwMiwyODYgQEAKICAgICBpZiAobV9pc1dpbmRvd2VkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgLyogTmVlZCB0byBzeW50aGVzaXplIFhldmVudHMg
aGVyZSAqLworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAg
ICAgIHJldHVybjsKIAotICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxl
OworICAgIGNvbnN0IGJvb2wgc3luY1ggPSBtX3BsdWdpbkRpc3BsYXkgJiYgbV9wbHVnaW5EaXNw
bGF5ICE9IEdES19ESVNQTEFZKCk7CiAKLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3
KCkpOworICAgIEludFJlY3QgZXhwb3NlZFJlY3QocmVjdCk7CisgICAgZXhwb3NlZFJlY3QuaW50
ZXJzZWN0KGZyYW1lUmVjdCgpKTsKKyAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3QoKS54
KCksIC1mcmFtZVJlY3QoKS55KCkpOworCisgICAgV2luZG93IGR1bW15X3c7CisgICAgaW50IGR1
bW15X2k7CisgICAgdW5zaWduZWQgaW50IGR1bW15X3VpLCBhY3R1YWxEZXB0aCA9IDA7CisgICAg
WEdldEdlb21ldHJ5KEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUsICZkdW1teV93LCAmZHVtbXlf
aSwgJmR1bW15X2ksCisgICAgICAgICAgICAgICAgICZkdW1teV91aSwgJmR1bW15X3VpLCAmZHVt
bXlfdWksICZhY3R1YWxEZXB0aCk7CisKKyAgICBjb25zdCBpbnQgZHJhd2FibGVEZXB0aCA9ICgo
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+ZGVwdGg7Cisg
ICAgQVNTRVJUKGRyYXdhYmxlRGVwdGggPT0gYWN0dWFsRGVwdGgpOworCisgICAgaWYgKG1faXNU
cmFuc3BhcmVudCAmJiBkcmF3YWJsZURlcHRoICE9IDMyKSB7CisgICAgICAgIC8vIEF0dGVtcHQg
dG8gZmFrZSBpdCB3aGVuIHdlIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCBvbiBvdXIKKyAg
ICAgICAgLy8gcGl4bWFwLiAgSWYgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYXQgbGVhc3QgY2xlYXIg
dGhlIHdpbmRvdyB0bworICAgICAgICAvLyBhdm9pZCBkcmF3aW5nIGFydGlmYWN0cy4KKyAgICAg
ICAgR0MgZ2MgPSBYRGVmYXVsdEdDKEdES19ESVNQTEFZKCksIGdka19zY3JlZW5fZ2V0X251bWJl
cihnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpKTsKKyAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQg
PSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50
KCk7CisgICAgICAgIEdka0RyYXdhYmxlKiBnZGtCYWNraW5nU3RvcmUgPSBOVUxMOworICAgICAg
ICBnaW50IHhvZmYgPSAwLCB5b2ZmID0gMDsKKworICAgICAgICBnZGtfd2luZG93X2dldF9pbnRl
cm5hbF9wYWludF9pbmZvKHdpZGdldC0+d2luZG93LCAmZ2RrQmFja2luZ1N0b3JlLCAmeG9mZiwg
JnlvZmYpOworCisgICAgICAgIGlmIChnZGtCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIFhD
b3B5QXJlYShHREtfRElTUExBWSgpLCBHREtfRFJBV0FCTEVfWElEKGdka0JhY2tpbmdTdG9yZSks
IG1fZHJhd2FibGUsIGdjLAorICAgICAgICAgICAgICAgICAgICAgIG1fd2luZG93UmVjdC54KCkg
KyBleHBvc2VkUmVjdC54KCkgLSB4b2ZmLAorICAgICAgICAgICAgICAgICAgICAgIG1fd2luZG93
UmVjdC55KCkgKyBleHBvc2VkUmVjdC55KCkgLSB5b2ZmLAorICAgICAgICAgICAgICAgICAgICAg
IGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAg
ICAgICAgICAgIGV4cG9zZWRSZWN0LngoKSwgZXhwb3NlZFJlY3QueSgpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIG5vIHZhbGlkIGJhY2tpbmcgc3RvcmU7IGNsZWFyIHRvIHRo
ZSBiYWNrZ3JvdW5kIGNvbG9yCisgICAgICAgICAgICBYRmlsbFJlY3RhbmdsZShHREtfRElTUExB
WSgpLCBtX2RyYXdhYmxlLCBnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRS
ZWN0LngoKSwgZXhwb3NlZFJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
b3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgWEV2ZW50IHhldmVudDsKKyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhF
dmVudCkpOworICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54
Z3JhcGhpY3NleHBvc2U7CisgICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOwor
ICAgIGV4cG9zZUV2ZW50LmRpc3BsYXkgPSBHREtfRElTUExBWSgpOworICAgIGV4cG9zZUV2ZW50
LmRyYXdhYmxlID0gbV9kcmF3YWJsZTsKKyAgICBleHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3Qu
eCgpOworICAgIGV4cG9zZUV2ZW50LnkgPSBleHBvc2VkUmVjdC55KCk7CisgICAgZXhwb3NlRXZl
bnQud2lkdGggPSBleHBvc2VkUmVjdC54KCkgKyBleHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFz
aCBidWc/IGl0IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQor
ICAgIGV4cG9zZUV2ZW50LmhlaWdodCA9IGV4cG9zZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0Lmhl
aWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0
cmFuc3BhcmVudCBtb2RlCisKKyAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50KTsKKworICAgIGlm
IChzeW5jWCkKKyAgICAgICAgWFN5bmMobV9wbHVnaW5EaXNwbGF5LCBGYWxzZSk7IC8vIHN5bmMg
Y2hhbmdlcyBieSBwbHVnaW4KKworICAgIC8vIFRoaXMgY2FsbCAqbXVzdCogYmUgZG9uZSBhZnRl
ciB0aGUgYWJvdmUgZXhwb3NlLCBiZWNhdXNlIHNvbWUgcGx1Z2lucworICAgIC8vIChsaWtlIEFk
b2JlIEZsYXNoKSBhcHBlYXIgdG8gY2FsbCBnZGtfcGl4bWFwX2ZvcmVpZ25fbmV3KCkgb24gdGhl
CisgICAgLy8gcGFzc2VkIERyYXdhYmxlIHdpdGhvdXQgZmlyc3QgZG9pbmcgZ2RrX3BpeG1hcF9s
b29rdXAoKS4gIElmIHdlIGNyZWF0ZQorICAgIC8vIHRoZSBHZGtQaXhtYXAgaGVyZSBiZWZvcmUg
QWRvYmUgZG9lcywgdGhlbiBBZG9iZSdzIF9mb3JlaWduX25ldygpIHdpbGwKKyAgICAvLyB0cmln
Z2VyIGEgZ2RrIHdhcm5pbmcuICAoSWRlYWxseSwgZ2RrIHdvdWxkIGZpcnN0IGRvIGEgbG9va3Vw
IGJlZm9yZQorICAgIC8vIGNyZWF0aW5nIGEgbmV3IG9uZSwgbGlrZSBpdCBkb2VzIGZvciBXaW5k
b3dzLCBidXQgb2ggd2VsbCwgbm90aGluZyB3ZQorICAgIC8vIGNhbiBkbyBhYm91dCB0aGF0LikK
KyAgICBHZGtQaXhtYXAqIGdka0RyYXdhYmxlID0gZ2RrX3BpeG1hcF9sb29rdXAobV9kcmF3YWJs
ZSk7CisgICAgaWYgKCFnZGtEcmF3YWJsZSkKKyAgICAgICAgZ2RrRHJhd2FibGUgPSBnZGtfcGl4
bWFwX2ZvcmVpZ25fbmV3KG1fZHJhd2FibGUpOworCisgICAgaWYgKCFnZGtfZHJhd2FibGVfZ2V0
X2NvbG9ybWFwKEdES19EUkFXQUJMRShnZGtEcmF3YWJsZSkpKSB7CisgICAgICAgIEdka1Zpc3Vh
bCogZ3Zpc3VhbCA9IGdka3hfdmlzdWFsX2dldChtX3Zpc3VhbC0+dmlzdWFsaWQpOworICAgICAg
ICBHZGtDb2xvcm1hcCogZ2NtYXAgPSBnZGtfeDExX2NvbG9ybWFwX2ZvcmVpZ25fbmV3KGd2aXN1
YWwsIG1fY29sb3JtYXApOworICAgICAgICBnZGtfZHJhd2FibGVfc2V0X2NvbG9ybWFwKEdES19E
UkFXQUJMRShnZGtEcmF3YWJsZSksIGdjbWFwKTsKKyAgICB9CisKKyAgICBjYWlyb190KiBjciA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNhaXJvX3NhdmUoY3IpOworCisgICAg
Z2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4bWFwKGNyLCBnZGtEcmF3YWJsZSwgZnJhbWVSZWN0KCku
eCgpLCBmcmFtZVJlY3QoKS55KCkpOwogCi0gICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQobnBFdmVu
dCkpCi0gICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpwYWludCgpOiBQYWludCBldmVu
dCBub3QgYWNjZXB0ZWQiKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsCisgICAgICAgICAgICAg
ICAgICAgIGZyYW1lUmVjdCgpLngoKSArIGV4cG9zZWRSZWN0LngoKSwgZnJhbWVSZWN0KCkueSgp
ICsgZXhwb3NlZFJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC53aWR0
aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fY2xpcChjcik7CisKKyAgICBp
ZiAobV9pc1RyYW5zcGFyZW50KQorICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJP
X09QRVJBVE9SX09WRVIpOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KGNyKTsKKworICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOworI2VuZGlmICAvLyBkZWZpbmVkKFhQX1VOSVgpCiB9CiAKIHZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsK
LSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgCi0gICAgLyogRklYTUU6IFN5bnRoZXNpemUgYW4g
WEV2ZW50IHRvIHBhc3MgdGhyb3VnaCAqLwotCiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGlmICghZGlz
cGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorCisgICAgaWYobV9pc1dpbmRvd2VkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93bkV2
ZW50ICYmIGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIE5QRXZlbnQgeEV2ZW50OworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAg
ICBHZGtFdmVudEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+Z2RrRXZlbnRLZXko
KTsKKworICAgIHhFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eWRvd25FdmVudCkgPyAyIDogMzsgIC8vIEtleVByZXNzL1JlbGVhc2UgZ2V0IHVuc2V0IHNvbWV3
aGVyZQorICAgIHhFdmVudC54a2V5LnJvb3QgPSBnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUp
OworICAgIHhFdmVudC54a2V5LnN1YndpbmRvdyA9IDA7IC8vIHdlIGhhdmUgbm8gY2hpbGQgd2lu
ZG93CisgICAgeEV2ZW50LnhrZXkudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4RXZl
bnQueGtleS5zdGF0ZSA9IGdka0V2ZW50LT5zdGF0ZTsgIC8vIEdka01vZGlmaWVyVHlwZSBtaXJy
b3JzIHhsaWIgc3RhdGUgbWFza3MKKyAgICB4RXZlbnQueGtleS5rZXljb2RlID0gZ2RrRXZlbnQt
PmhhcmR3YXJlX2tleWNvZGU7CisgICAgeEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4gPSB0cnVlOwor
CisgICAgLy8gTk9URTogQXMgdGhlIFhFdmVudHMgc2VudCB0byB0aGUgcGx1Zy1pbiBhcmUgc3lu
dGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5vdCBhIG5hdGl2ZSB3aW5kb3cKKyAgICAvLyBjb3JyZXNw
b25kaW5nIHRvIHRoZSBwbHVnLWluIHJlY3RhbmdsZSwgc29tZSBvZiB0aGUgbWVtYmVycyBvZiB0
aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJlIG5vdAorICAgIC8vIHNldCB0byB0aGVpciBub3JtYWwg
WHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5IGV2ZW50cyBkb24ndCBoYXZlIGEgcG9zaXRpb24uCisg
ICAgLy8gc291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OUEV2ZW50Cisg
ICAgeEV2ZW50LnhrZXkueCA9IDA7CisgICAgeEV2ZW50LnhrZXkueSA9IDA7CisgICAgeEV2ZW50
LnhrZXkueF9yb290ID0gMDsKKyAgICB4RXZlbnQueGtleS55X3Jvb3QgPSAwOworI2VuZGlmCisK
KyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKIH0KIAorI2lmIGRlZmluZWQoWFBfVU5JWCkKK3N0YXRpYyB1bnNpZ25l
ZCBpbnQgaW5wdXRFdmVudFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIHVuc2lnbmVk
IGludCBzdGF0ZSA9IDA7CisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIHN0YXRl
IHw9IENvbnRyb2xNYXNrOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgc3Rh
dGUgfD0gU2hpZnRNYXNrOworICAgIGlmIChldmVudC0+YWx0S2V5KCkpCisgICAgICAgIHN0YXRl
IHw9IE1vZDFNYXNrOworICAgIGlmIChldmVudC0+bWV0YUtleSgpKQorICAgICAgICBzdGF0ZSB8
PSBNb2Q0TWFzazsKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW5p
dFhFdmVudChYRXZlbnQqIHhFdmVudCkKK3sKKyAgICBtZW1zZXQoeEV2ZW50LCAwLCBzaXplb2Yo
WEV2ZW50KSk7CisKKyAgICB4RXZlbnQtPnhhbnkuc2VyaWFsID0gMDsgLy8gd2UgYXJlIHVuYXdh
cmUgb2YgdGhlIGxhc3QgcmVxdWVzdCBwcm9jZXNzZWQgYnkgWCBTZXJ2ZXIKKyAgICB4RXZlbnQt
Pnhhbnkuc2VuZF9ldmVudCA9IGZhbHNlOworICAgIHhFdmVudC0+eGFueS5kaXNwbGF5ID0gR0RL
X0RJU1BMQVkoKTsKKyAgICAvLyBOT1RFOiBldmVudC0+eGFueS53aW5kb3cgZG9lc24ndCBhbHdh
eXMgcmVzcG9uZCB0byB0aGUgLndpbmRvdyBwcm9wZXJ0eSBvZiBvdGhlciBYRXZlbnQncworICAg
IC8vIGJ1dCBkb2VzIGluIHRoZSBjYXNlIG9mIEtleVByZXNzLCBLZXlSZWxlYXNlLCBCdXR0b25Q
cmVzcywgQnV0dG9uUmVsZWFzZSwgYW5kIE1vdGlvbk5vdGlmeQorICAgIC8vIGV2ZW50czsgdGh1
cywgdGhpcyBpcyByaWdodDoKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IG1fcGFyZW50RnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICB4RXZlbnQt
Pnhhbnkud2luZG93ID0gd2lkZ2V0ID8gR0RLX1dJTkRPV19YV0lORE9XKHdpZGdldC0+d2luZG93
KSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKFhF
dmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29t
UG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWEJ1dHRvbkV2ZW50JiB4YnV0dG9uID0g
eEV2ZW50LT54YnV0dG9uOworICAgIHhidXR0b24udHlwZSA9IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ID8gQnV0dG9uUHJlc3MgOiBCdXR0b25SZWxlYXNlOwor
ICAgIHhidXR0b24ucm9vdCA9IGdldFJvb3RXaW5kb3cocGFyZW50RnJhbWUpOworICAgIHhidXR0
b24uc3Vid2luZG93ID0gMDsKKyAgICB4YnV0dG9uLnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7
CisgICAgeGJ1dHRvbi54ID0gcG9zdFpvb21Qb3MueCgpOworICAgIHhidXR0b24ueSA9IHBvc3Ra
b29tUG9zLnkoKTsKKyAgICB4YnV0dG9uLnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CisgICAg
eGJ1dHRvbi55X3Jvb3QgPSBldmVudC0+c2NyZWVuWSgpOworICAgIHhidXR0b24uc3RhdGUgPSBp
bnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7Cisg
ICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgeGJ1dHRvbi5i
dXR0b24gPSBCdXR0b24zOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExlZnRCdXR0b246Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgeGJ1dHRvbi5idXR0b24gPSBCdXR0b24xOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgeGJ1dHRvbi5zYW1lX3NjcmVlbiA9IHRydWU7Cit9CisKK3N0YXRp
YyB2b2lkIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3Vz
ZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50
RnJhbWUpCit7CisgICAgWE1vdGlvbkV2ZW50JiB4bW90aW9uID0geEV2ZW50LT54bW90aW9uOwor
ICAgIHhtb3Rpb24udHlwZSA9IE1vdGlvbk5vdGlmeTsKKyAgICB4bW90aW9uLnJvb3QgPSBnZXRS
b290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4bW90aW9uLnN1YndpbmRvdyA9IDA7CisgICAg
eG1vdGlvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAgIHhtb3Rpb24ueCA9IHBvc3Ra
b29tUG9zLngoKTsKKyAgICB4bW90aW9uLnkgPSBwb3N0Wm9vbVBvcy55KCk7CisgICAgeG1vdGlv
bi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgIHhtb3Rpb24ueV9yb290ID0gZXZlbnQt
PnNjcmVlblkoKTsKKyAgICB4bW90aW9uLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsK
KyAgICB4bW90aW9uLmlzX2hpbnQgPSBOb3RpZnlOb3JtYWw7CisgICAgeG1vdGlvbi5zYW1lX3Nj
cmVlbiA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNG
aWVsZHMoWEV2ZW50KiB4RXZlbnQsIE1vdXNlRXZlbnQqIGV2ZW50LCBjb25zdCBJbnRQb2ludCYg
cG9zdFpvb21Qb3MsIEZyYW1lKiBwYXJlbnRGcmFtZSkKK3sKKyAgICBYQ3Jvc3NpbmdFdmVudCYg
eGNyb3NzaW5nID0geEV2ZW50LT54Y3Jvc3Npbmc7CisgICAgeGNyb3NzaW5nLnR5cGUgPSBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCA/IEVudGVyTm90aWZ5IDog
TGVhdmVOb3RpZnk7CisgICAgeGNyb3NzaW5nLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZy
YW1lKTsKKyAgICB4Y3Jvc3Npbmcuc3Vid2luZG93ID0gMDsKKyAgICB4Y3Jvc3NpbmcudGltZSA9
IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4Y3Jvc3NpbmcueCA9IHBvc3Rab29tUG9zLnkoKTsK
KyAgICB4Y3Jvc3NpbmcueSA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4Y3Jvc3NpbmcueF9yb290
ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4Y3Jvc3NpbmcueV9yb290ID0gZXZlbnQtPnNjcmVl
blkoKTsKKyAgICB4Y3Jvc3Npbmcuc3RhdGUgPSBpbnB1dEV2ZW50U3RhdGUoZXZlbnQpOworICAg
IHhjcm9zc2luZy5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIHhjcm9zc2luZy5kZXRhaWwgPSBO
b3RpZnlEZXRhaWxOb25lOworICAgIHhjcm9zc2luZy5zYW1lX3NjcmVlbiA9IHRydWU7CisgICAg
eGNyb3NzaW5nLmZvY3VzID0gZmFsc2U7Cit9CisjZW5kaWYKKwogdm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIE5QRXZlbnQgbnBFdmVu
dDsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAKLSAgICBpZiAoIW1faXNXaW5kb3dlZCkKLSAgICAgIHJldHVy
bjsKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CiAKLSAgICAvKiBGSVhN
RTogU3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyB0aHJvdWdoICovCi0gICAgSW50UG9pbnQg
cCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJ
bnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKyAgICBOUEV2ZW50IHhF
dmVudDsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgaW5pdFhFdmVudCgmeEV2ZW50KTsKIAot
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKLSAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKyAgICAv
L0ludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRz
VG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CisgICAg
SW50UG9pbnQgcG9zdFpvb21Qb3MgPSByb3VuZGVkSW50UG9pbnQobV9lbGVtZW50LT5yZW5kZXJl
cigpLT5hYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSkpOworCisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50IHx8IGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgc2V0WEJ1dHRv
bkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVudCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVu
dEZyYW1lKTsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW1vdmVFdmVudCkKKyAgICAgICAgc2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMoJnhFdmVu
dCwgZXZlbnQsIHBvc3Rab29tUG9zLCBtX3BhcmVudEZyYW1lKTsKKyAgICBlbHNlIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KQorICAgICAgICBzZXRYQ3Jvc3NpbmdFdmVu
dFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFt
ZSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworICAgIGlmICghZGlzcGF0
Y2hOUEV2ZW50KHhFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwog
fQogCisjaWYgZGVmaW5lZChYUF9VTklYKQordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0lu
RXZlbnQoKQoreworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5wRXZlbnQp
OworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7CisgICAg
ZXZlbnQudHlwZSA9IDk7ICAvLyBGb2N1c0luIGdldHMgdW5zZXQgc29tZXdoZXJlCisgICAgZXZl
bnQubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxO
b25lOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIFhFdmVudCBucEV2ZW50OworICAgIGlu
aXRYRXZlbnQoJm5wRXZlbnQpOworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBF
dmVudC54Zm9jdXM7CisgICAgZXZlbnQudHlwZSA9IDEwOyAgLy8gRm9jdXNPdXQgZ2V0cyB1bnNl
dCBzb21ld2hlcmUKKyAgICBldmVudC5tb2RlID0gTm90aWZ5Tm9ybWFsOworICAgIGV2ZW50LmRl
dGFpbCA9IE5vdGlmeURldGFpbE5vbmU7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7
Cit9CisjZW5kaWYKKwogdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFy
ZW50KQogewogICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CkBAIC0yMDcsNyArNDkyLDgg
QEAKIAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpCiB7
Ci0gICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAg
ICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCgpCkBAIC0yMTUsMjQgKzUwMSw1OSBAQAogICAgIGlmICghbV9pc1N0YXJ0
ZWQgfHwgIXBhcmVudCgpIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX25wV2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgpOwot
ICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVjdC55KCk7Ci0gICAgbV9ucFdpbmRvdy53aWR0
aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5k
b3dSZWN0LmhlaWdodCgpOwotCi0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9jbGlw
UmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsK
LSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC53aWR0aCgpOwotICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9jbGlwUmVjdC5oZWlnaHQoKTsKLQotICAg
IEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dS
ZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSB9Owot
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmYWxs
b2NhdGlvbik7Ci0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgIGlmICghbV9uZWVkc1hFbWJlZCkg
ewotICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7Ci0gICAgICAg
IGd0a194dGJpbl9yZXNpemUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0Lndp
ZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7Ci0gICAgfQorICAgIC8vIElmIHRoZSBwbHVn
aW4gZGlkbid0IGxvYWQgc3VjZXNzZnVsbHksIG5vIHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93
CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gT24gVW5peCwgb25seSBjYWxsIHBsdWdpbiBpZiBpdCdz
IGZ1bGwtcGFnZSBvciB3aW5kb3dlZAorICAgIGlmIChtX21vZGUgIT0gTlBfRlVMTCAmJiBtX21v
ZGUgIT0gTlBfRU1CRUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENoZWNrIGlmIHRoZSBw
bGF0Zm9ybVBsdWdpbldpZGdldCBzdGlsbCBleGlzdHMKKyAgICBpZiAobV9pc1dpbmRvd2VkICYm
ICFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICByZXR1cm47CisgCisjaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIGlmICghbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNlOwogI2VuZGlm
CisgCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2luZG93LnggPSBtX3dp
bmRvd1JlY3QueCgpOworICAgICAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOwor
ICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgICAg
IG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOworCisgICAgICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOworICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJlY3QueSgpOworICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisKKyAgICAgICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBt
X3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmYWxsb2NhdGlv
bik7CisgI2lmIFBMQVRGT1JNKFhQX1VOSVgpCisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkg
eworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4ocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworICAg
ICAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRv
d1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorICNlbmRp
ZgorICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBX
aW5kb3cueSA9IDA7CisKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAg
ICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LnJpZ2h0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSAw
OworICAgIH0KKworICAgIC8vIEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkgc2V0IGluaXRpYWxseS4g
TXVsdGlwbGUgY2FsbHMgdG8KKyAgICAvLyBzZXROUFdpbmRvdygpIGNhdXNlIHRoZSBwbHVnaW4g
dG8gY3Jhc2ggaW4gd2luZG93ZWQgbW9kZS4KKyAgICBpZiAoIW1faXNXaW5kb3dlZCB8fCBtX25w
V2luZG93LndpZHRoID09ICh1bnNpZ25lZCBpbnQpLTEgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0g
KHVuc2lnbmVkIGludCktMSkgeworICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dS
ZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0Lmhl
aWdodCgpOworICAgIH0KIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKQEAgLTMxMSw2ICs2MzIsMTQgQEAKICAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgIHJldHVybiBOUEVSUl9OT19F
UlJPUjsKIAorICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworI2Vs
c2UKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworI2VuZGlm
CisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogICAgIH0KQEAgLTQxNCw3ICs3NDMsOCBAQAog
ICAgIH0KIAogICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0
IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKLSAgICBpbnZhbGlkYXRl
UmVjdChyKTsKKyAgICAvL2ludmFsaWRhdGVSZWN0KHIpOworICAgIGludmFsaWRhdGVXaW5kb3ds
ZXNzUGx1Z2luUmVjdChyKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9u
KE5QUmVnaW9uKQpAQCAtNDMxLDEyICs3NjEsNjQgQEAKICAgICAgICAgZ3RrX3dpZGdldF9xdWV1
ZV9kcmF3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKSk7CiB9CiAKK3N0YXRpYyBEaXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KCkKK3sKKyAg
ICAvLyBUaGUgcGx1Z2luIHRvb2xraXQgbWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBYIGNvbm5lY3Rp
b24gb3Blbi4gIFNpbmNlIHdlJ3JlCisgICAgLy8gYSBnZGsvZ3RrIGFwcCwgd2UnbGwgKHByb2Jh
Ymx5PykgaGF2ZSB0aGUgc2FtZSBYIGNvbm5lY3Rpb24gYXMgYW55IGdkay1iYXNlZAorICAgIC8v
IHBsdWdpbnMsIHNvIHdlIGNhbiByZXR1cm4gdGhhdC4gIFdlIG1pZ2h0IHdhbnQgdG8gYWRkIG90
aGVyIGltcGxlbWVudGF0aW9ucyBoZXJlCisgICAgLy8gbGF0ZXIuCisKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpCisgICAgcmV0dXJuIEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpOworI2Vsc2UKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCiBzdGF0aWMg
Z2Jvb2xlYW4KLXBsdWdfcmVtb3ZlZF9jYihHdGtTb2NrZXQgKnNvY2tldCwgZ3BvaW50ZXIpCitw
bHVnX3JlbW92ZWRfY2IoR3RrU29ja2V0KiBzb2NrZXQsIGdwb2ludGVyKQogewogICAgIHJldHVy
biBUUlVFOwogfQogCisjaWYgZGVmaW5lZChYUF9VTklYKQorc3RhdGljIHZvaWQgZ2V0VmlzdWFs
QW5kQ29sb3JtYXAoaW50IGRlcHRoLCBWaXN1YWwqKiB2aXN1YWwsIENvbG9ybWFwKiBjb2xvcm1h
cCkKK3sKKyAgICAqdmlzdWFsID0gMDsKKyAgICAqY29sb3JtYXAgPSAwOworCisgICAgaW50IHJt
YWosIHJtaW47CisgICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRlclF1ZXJ5VmVyc2lvbihH
REtfRElTUExBWSgpLCAmcm1haiwgJnJtaW4pIHx8IChybWFqID09IDAgJiYgcm1pbiA8IDUpKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG52aTsKKyAgICBYVmlzdWFsSW5mbyB0ZW1wbDsK
KyAgICB0ZW1wbC5zY3JlZW4gID0gZ2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0
X2RlZmF1bHQoKSk7CisgICAgdGVtcGwuZGVwdGggICA9IGRlcHRoOworICAgIHRlbXBsLmNfY2xh
c3MgPSBUcnVlQ29sb3I7CisgICAgWFZpc3VhbEluZm8qIHh2aSA9IFhHZXRWaXN1YWxJbmZvKEdE
S19ESVNQTEFZKCksIFZpc3VhbFNjcmVlbk1hc2sgfCBWaXN1YWxEZXB0aE1hc2sgfCBWaXN1YWxD
bGFzc01hc2ssICZ0ZW1wbCwgJm52aSk7CisKKyAgICBpZiAoIXh2aSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGRlcHRoID09IDMyKSB7CisgICAgICAgIGZvciAoaW50IGlkeCA9IDA7IGlk
eCA8IG52aTsgKytpZHgpIHsKKyAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQg
PSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChHREtfRElTUExBWSgpLCB4dmlbaWR4XS52aXN1YWwp
OworICAgICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAmJiBmb3Jt
YXQtPmRpcmVjdC5hbHBoYU1hc2spIHsKKyAgICAgICAgICAgICAgICAgKnZpc3VhbCA9IHh2aVtp
ZHhdLnZpc3VhbDsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICB9CisgICAgfSBlbHNlCisgICAgICAgICp2aXN1YWwgPSB4dmlbMF0udmlzdWFsOworCisg
ICAgWEZyZWUoeHZpKTsKKworICAgIGlmICgqdmlzdWFsKQorICAgICAgICAqY29sb3JtYXAgPSBY
Q3JlYXRlQ29sb3JtYXAoR0RLX0RJU1BMQVkoKSwgR0RLX1JPT1RfV0lORE9XKCksICp2aXN1YWws
IEFsbG9jTm9uZSk7Cit9CisjZW5kaWYKKwogYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0
KCkKIHsKICAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwpAQCAtNDUxLDI2ICs4MzMsMzQgQEAKICAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CiAgICAgfQogCisgICAg
aWYgKG1faXNXaW5kb3dlZCkgewogI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICBpZiAobV9uZWVk
c1hFbWJlZCkgeworICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgc2V0
UGxhdGZvcm1XaWRnZXQoZ3RrX3NvY2tldF9uZXcoKSk7CisgICAgICAgICAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgICAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAicGx1Z19yZW1v
dmVkIiwgR19DQUxMQkFDSyhwbHVnX3JlbW92ZWRfY2IpLCBOVUxMKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a194dGJpbl9uZXcobV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT53aW5kb3cs
IDApKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3Nv
Y2tldF9uZXcoKSk7CiAgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9w
YXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSwg
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgInBsdWdfcmVtb3ZlZCIsIEdfQ0FMTEJBQ0socGx1Z19yZW1vdmVk
X2NiKSwgTlVMTCk7Ci0gICAgfSBlbHNlIGlmIChtX2lzV2luZG93ZWQpCi0gICAgICAgIHNldFBs
YXRmb3JtV2lkZ2V0KGd0a194dGJpbl9uZXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2lu
ZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpLT53aW5kb3csIDApKTsKLSNlbHNlCi0gICAgc2V0
UGxhdGZvcm1XaWRnZXQoZ3RrX3NvY2tldF9uZXcoKSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZv
cm1QYWdlQ2xpZW50KCkpLCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKICNlbmRpZgorICAgIH0g
ZWxzZSB7CisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOworICAgICAgICBtX3BsdWdpbkRp
c3BsYXkgPSBnZXRQbHVnaW5EaXNwbGF5KCk7CisgICAgfQorCiAgICAgc2hvdygpOwogCi0gICAg
aWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVXaW5kb3c7CiAjaWYgZGVmaW5lZChYUF9VTklYKQotICAgICAgICBOUFNldFdpbmRvd0NhbGxi
YWNrU3RydWN0ICp3cyA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KCk7Ci0KKyAgICAg
ICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCgpOwogICAgICAgICB3cy0+dHlwZSA9IDA7CisjZW5kaWYKIAorICAgIGlmIChtX2lz
V2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93
OworI2lmIGRlZmluZWQoWFBfVU5JWCkKICAgICAgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKICAg
ICAgICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKICAg
ICAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKWd0a19zb2NrZXRfZ2V0X2lkKEdU
S19TT0NLRVQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkpOwpAQCAtNDg2LDI1ICs4NzYsNjMgQEAK
ICAgICAgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdUS19YVEJJTihwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKS0+eHRjbGllbnQueHRjb2xvcm1hcDsKICAgICAgICAgfQogICAgICAgICBYRmx1c2ggKHdz
LT5kaXNwbGF5KTsKLQotICAgICAgICBtX25wV2luZG93LndzX2luZm8gPSB3czsKICNlbGlmIGRl
ZmluZWQoR0RLX1dJTkRPV0lOR19XSU4zMikKICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAo
dm9pZCopR0RLX1dJTkRPV19IV05EKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPndpbmRvdyk7CiAj
ZW5kaWYKICAgICB9IGVsc2UgewogICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVEcmF3YWJsZTsKLSAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgICAgICBtX25w
V2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2VkPworCisjaWYgZGVmaW5lZChYUF9VTklYKQor
ICAgICAgICBHZGtTY3JlZW4qIGdzY3JlZW4gPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7Cisg
ICAgICAgIEdka1Zpc3VhbCogZ3Zpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwo
Z3NjcmVlbik7CisKKyAgICAgICAgaWYgKGd2aXN1YWwtPmRlcHRoID09IDMyIHx8ICFtX3BsdWdp
bi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0
aCkpIHsKKyAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKDMyLCAmbV92aXN1YWwsICZt
X2NvbG9ybWFwKTsKKyAgICAgICAgICAgIHdzLT5kZXB0aCA9IDMyOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFtX3Zpc3VhbCkgeworICAgICAgICAgICAgZ2V0VmlzdWFsQW5kQ29sb3JtYXAo
Z3Zpc3VhbC0+ZGVwdGgsICZtX3Zpc3VhbCwgJm1fY29sb3JtYXApOworICAgICAgICAgICAgd3Mt
PmRlcHRoID0gZ3Zpc3VhbC0+ZGVwdGg7CisgICAgICAgIH0KKworICAgICAgICB3cy0+ZGlzcGxh
eSA9IEdES19ESVNQTEFZKCk7CisgICAgICAgIHdzLT52aXN1YWwgPSBtX3Zpc3VhbDsKKyAgICAg
ICAgd3MtPmNvbG9ybWFwID0gbV9jb2xvcm1hcDsKKworICAgICAgICBtX25wV2luZG93LnggPSAw
OworICAgICAgICBtX25wV2luZG93LnkgPSAwOworICAgICAgICBtX25wV2luZG93LndpZHRoID0g
LTE7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7CisjZWxzZQorICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQ
bHVnaW47CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogICAgIH0KIAorI2lmIGRlZmlu
ZWQoWFBfVU5JWCkKKyAgICBtX25wV2luZG93LndzX2luZm8gPSB3czsKKyNlbmRpZgorCiAgICAg
Ly8gVE9ETyByZW1vdmUgaW4gZmF2b3Igb2YgbnVsbCBldmVudHMsIGxpa2UgbWFjIHBvcnQ/Ci0g
ICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJz
dFNldFdpbmRvd0NhbGwpKSkKKyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKSB7CiAgICAgICAgIHVwZGF0ZVBs
dWdpbldpZGdldCgpOyAvLyB3YXM6IHNldE5QV2luZG93SWZOZWVkZWQoKSwgYnV0IHRoaXMgZG9l
c24ndCBwcm9kdWNlIDB4MCByZWN0cyBhdCBmaXJzdCBnbworICAgICAgICBzZXROUFdpbmRvd0lm
TmVlZGVkKCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUGx1Z2luVmll
dzo6cGxhdGZvcm1EZXN0cm95KCkKIHsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKG1f
ZHJhd2FibGUpIHsKKyAgICAgICAgWEZyZWVQaXhtYXAoR0RLX0RJU1BMQVkoKSwgbV9kcmF3YWJs
ZSk7CisgICAgICAgIG1fZHJhd2FibGUgPSAwOworICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIFBs
dWdpblZpZXc6OmhhbHQoKQpPbmx5IGluIHdlYmtpdC1ndGstOTk5OS9XZWJDb3JlL3BsdWdpbnMv
Z3RrOiBQbHVnaW5WaWV3R3RrLmNwcC5vcmlnCk9ubHkgaW4gd2Via2l0LWd0ay05OTk5L1dlYkNv
cmUvcGx1Z2lucy9ndGs6IFBsdWdpblZpZXdHdGsuY3BwLnJlagpkaWZmIC1ydSB3ZWJraXQtZ3Rr
LTk5OTktb2xkL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCB3ZWJraXQtZ3RrLTk5OTkv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCi0tLSB3ZWJraXQtZ3RrLTk5OTktb2xkL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkyMDA5LTEyLTExIDE1OjUxOjA4LjE2MzY2Mjc1
MCArMDIwMAorKysgd2Via2l0LWd0ay05OTk5L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNw
cAkyMDA5LTEyLTExIDE1OjU0OjIzLjE1MjUzNzUxMCArMDIwMApAQCAtMTQ4LDcgKzE0OCw3IEBA
CiAgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KSk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICBoYW5k
bGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwotI2lm
IGRlZmluZWQoUV9XU19YMTEpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRl
ZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuRE9NRm9jdXNPdXRFdmVudCkKICAgICAg
ICAgaGFuZGxlRm9jdXNPdXRFdmVudCgpOwogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLkRPTUZvY3VzSW5FdmVudCkKQEAgLTc5OSw3ICs3OTksNyBAQAogICAgICwg
bV9pc1RyYW5zcGFyZW50KGZhbHNlKQogICAgICwgbV9oYXZlSW5pdGlhbGl6ZWQoZmFsc2UpCiAg
ICAgLCBtX2lzV2FpdGluZ1RvU3RhcnQoZmFsc2UpCi0jaWYgZGVmaW5lZChYUF9VTklYKSB8fCBk
ZWZpbmVkKFFfV1NfWDExKQorI2lmIGRlZmluZWQoWFBfVU5JWCkKICAgICAsIG1fbmVlZHNYRW1i
ZWQoZmFsc2UpCiAjZW5kaWYKICNpZiBQTEFURk9STShXSU5fT1MpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQpAQCAtODE4LDcgKzgxOCw3IEBACiAgICAgLCBtX2NvbnRleHRSZWYoMCkK
ICAgICAsIG1fZmFrZVdpbmRvdygwKQogI2VuZGlmCi0jaWYgZGVmaW5lZChRX1dTX1gxMSkgJiYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdl
KHRydWUpCiAgICAgLCBtX2RyYXdhYmxlKDApCiAgICAgLCBtX3Zpc3VhbCgwKQpPbmx5IGluIHdl
YmtpdC1ndGstOTk5OS9XZWJDb3JlL3BsdWdpbnM6IFBsdWdpblZpZXcuY3BwLm9yaWcKT25seSBp
biB3ZWJraXQtZ3RrLTk5OTkvV2ViQ29yZS9wbHVnaW5zOiBQbHVnaW5WaWV3LmNwcC5yZWoKZGlm
ZiAtcnUgd2Via2l0LWd0ay05OTk5LW9sZC9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIHdl
YmtpdC1ndGstOTk5OS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCi0tLSB3ZWJraXQtZ3Rr
LTk5OTktb2xkL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgJMjAwOS0xMi0xMSAxNTo1MTow
OC4xNjM2NjI3NTAgKzAyMDAKKysrIHdlYmtpdC1ndGstOTk5OS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5oCTIwMDktMTItMTEgMTU6NTM6MTIuMzg5NzkxNTM0ICswMjAwCkBAIC0yNjUsNyAr
MjY1LDcgQEAKIAogICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVu
dCopOwogICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopOwotI2lmIGRl
ZmluZWQoUV9XU19YMTEpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRlZmlu
ZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIHZvaWQg
aGFuZGxlRm9jdXNJbkV2ZW50KCk7CiAgICAgICAgIHZvaWQgaGFuZGxlRm9jdXNPdXRFdmVudCgp
OwogI2VuZGlmCkBAIC0yOTgsNyArMjk4LDcgQEAKICAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFs
aXplZDsKICAgICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7CiAKLSNpZiBkZWZpbmVkKFhQ
X1VOSVgpIHx8IGRlZmluZWQoUV9XU19YMTEpCisjaWYgZGVmaW5lZChYUF9VTklYKQogICAgICAg
ICBib29sIG1fbmVlZHNYRW1iZWQ7CiAjZW5kaWYKIApAQCAtMzI2LDcgKzMyNiw3IEBACiAKIHBy
aXZhdGU6CiAKLSNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmluZWQoUV9XU19YMTEpIHx8IFBM
QVRGT1JNKFNZTUJJQU4pCisjaWYgZGVmaW5lZChYUF9VTklYKSB8fCBQTEFURk9STShTWU1CSUFO
KQogICAgICAgICB2b2lkIHNldE5QV2luZG93SWZOZWVkZWQoKTsKICNlbGlmIGRlZmluZWQoWFBf
TUFDT1NYKQogICAgICAgICBOUF9DR0NvbnRleHQgbV9ucENnQ29udGV4dDsKQEAgLTM0Miw3ICsz
NDIsNyBAQAogICAgICAgICBQb2ludCBnbG9iYWxNb3VzZVBvc0ZvclBsdWdpbigpIGNvbnN0Owog
I2VuZGlmCiAKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQogICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOwogICAgICAgICBQaXht
YXAgbV9kcmF3YWJsZTsKICAgICAgICAgVmlzdWFsKiBtX3Zpc3VhbDsKT25seSBpbiB3ZWJraXQt
Z3RrLTk5OTkvV2ViQ29yZS9wbHVnaW5zOiBQbHVnaW5WaWV3Lmgub3JpZwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47162</attachid>
            <date>2010-01-21 17:16:36 -0800</date>
            <delta_ts>2010-01-21 17:52:52 -0800</delta_ts>
            <desc>gtk windowless v6</desc>
            <filename>windowless-gtk-v6.diff</filename>
            <type>text/plain</type>
            <size>29028</size>
            <attacher name="Brian Tarricone">bjt23</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWY1NTlhOS4uMTQxZWZkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0wMS0yMSAgQnJpYW4gVGFycmlj
b25lICA8YnJpYW5Aa2FrYWkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtndGtdIEFkZCBzdXBwb3J0IGZvciB3aW5kb3dsZXNzIE5QQVBJIHBs
dWdpbnMKKworICAgICAgICBNdWNoIG9mIHRoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiBob3cgdGhl
IFF0IGJhY2tlbmQgZG9lcyB0aGlzLAorICAgICAgICBtb2RpZmllZCBmb3IgR3RrLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgzMQorCisgICAg
ICAgIE5vIG5ldyB0ZXN0czsgdGhlcmUgaXMgYWxyZWFkeSBhIHdpbmRvd2xlc3MgdGVzdCBpbiB0
aGUgdHJlZS4KKworICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpQbHVnaW5WaWV3KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAg
ICAgICAgKiBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdldFJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1
Z2luV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6aW5wdXRFdmVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmluaXRYRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNG
aWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBsdWdpbkRpc3BsYXkpOgorICAgICAgICAo
V2ViQ29yZTo6cGx1Z19yZW1vdmVkX2NiKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFZpc3VhbEFu
ZENvbG9ybWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKwogMjAx
MC0wMS0yMSAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggZjY2OWM2
ZC4uM2ZmNGM4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCisr
KyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgICAgICBoYW5kbGVN
b3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOwogICAgIGVsc2UgaWYg
KGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKLSNpZiBkZWZpbmVkKFFfV1NfWDEx
KSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLkRPTUZvY3VzT3V0RXZlbnQpCiAgICAgICAgIGhhbmRsZUZvY3VzT3V0
RXZlbnQoKTsKICAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01G
b2N1c0luRXZlbnQpCkBAIC04MDQsNyArODA0LDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhG
cmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAK
ICAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKICAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZh
bHNlKQogICAgICwgbV9pc1dhaXRpbmdUb1N0YXJ0KGZhbHNlKQotI2lmIGRlZmluZWQoWFBfVU5J
WCkgfHwgZGVmaW5lZChRX1dTX1gxMSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgLCBtX25l
ZWRzWEVtYmVkKGZhbHNlKQogI2VuZGlmCiAjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCkBAIC04MjMsNyArODIzLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmll
dyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2Uq
IHAKICAgICAsIG1fY29udGV4dFJlZigwKQogICAgICwgbV9mYWtlV2luZG93KDApCiAjZW5kaWYK
LSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNp
ZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICwg
bV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UodHJ1ZSkKICAgICAsIG1fZHJhd2FibGUoMCkKICAg
ICAsIG1fdmlzdWFsKDApCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5o
IGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCBkYmJiOTRkLi4wZGQ1ZTBiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTI2NSw3ICsyNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAg
ICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKLSNpZiBkZWZpbmVkKFFf
V1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICAgICB2b2lkIGhhbmRsZUZv
Y3VzSW5FdmVudCgpOwogICAgICAgICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICNlbmRp
ZgpAQCAtMjk4LDcgKzI5OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X2hhdmVJbml0aWFsaXplZDsKICAgICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7CiAKLSNp
ZiBkZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmluZWQoUV9XU19YMTEpCisjaWYgZGVmaW5lZChYUF9V
TklYKQogICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CiAjZW5kaWYKIApAQCAtMzI2LDcgKzMy
Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKIAotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVm
aW5lZChRX1dTX1gxMSkgfHwgT1MoU1lNQklBTikKKyNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBM
QVRGT1JNKFNZTUJJQU4pCiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2Vs
aWYgZGVmaW5lZChYUF9NQUNPU1gpCiAgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0
OwpAQCAtMzQyLDcgKzM0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIFBvaW50IGdsb2JhbE1vdXNl
UG9zRm9yUGx1Z2luKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUV9XU19YMTEpICYm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0
cnlDaGFuZ2U7CiAgICAgICAgIFBpeG1hcCBtX2RyYXdhYmxlOwogICAgICAgICBWaXN1YWwqIG1f
dmlzdWFsOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNw
cCBiL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKaW5kZXggZjFhZGQ2NS4u
OWRkZDgyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNw
cAorKysgYi9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgS2FrYWksIEluYy4g
PGJyaWFuQGtha2FpLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQs
NiArNDUsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2
ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRl
YnVnLmgiCiAjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgpAQCAtNjMsNiAr
NjUsMTAgQEAKICNpZiBkZWZpbmVkKFhQX1VOSVgpCiAjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCiAj
aW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxjYWlyby9jYWlyby14bGliLmg+CisjZGVm
aW5lIEJvb2wgaW50ICAgIC8vIHRoaXMgZ290IHVuZGVmaW5lZCBzb21ld2hlcmUKKyNkZWZpbmUg
U3RhdHVzIGludCAgLy8gZGl0dG8KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+
CiAjZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfV0lOMzIpCiAjaW5jbHVkZSAiUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5oIgogI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgpAQCAtOTksOSAr
MTA1LDE4IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50
KQogICAgIHJldHVybiBhY2NlcHRlZDsKIH0KIAorI2lmIGRlZmluZWQoWFBfVU5JWCkKK3N0YXRp
YyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgR3RrV2lk
Z2V0KiBwYXJlbnRXaWRnZXQgPSBwYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpOworICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGd0a193aWRnZXRf
Z2V0X3NjcmVlbihwYXJlbnRXaWRnZXQpOworICAgIHJldHVybiBHREtfV0lORE9XX1hXSU5ET1co
Z2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coZ3NjcmVlbikpOworfQorI2VuZGlmCisKIHZvaWQg
UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKIHsKLSAgICBpZiAoIXBhcmVudCgpIHx8
ICFtX2lzV2luZG93ZWQpCisgICAgaWYgKCFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKQEAgLTExNiw2ICsxMzEsMjkgQEAg
dm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogCiAgICAgaWYgKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkgJiYgKG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0IHx8IG1fY2xp
cFJlY3QgIT0gb2xkQ2xpcFJlY3QpKQogICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgaWYgKCFtX2lzV2luZG93ZWQgJiYgbV93aW5kb3dS
ZWN0LnNpemUoKSAhPSBvbGRXaW5kb3dSZWN0LnNpemUoKSkgeworICAgICAgICBpZiAobV9kcmF3
YWJsZSkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUp
OworCisgICAgICAgIG1fZHJhd2FibGUgPSBYQ3JlYXRlUGl4bWFwKEdES19ESVNQTEFZKCksIGdl
dFJvb3RXaW5kb3cobV9wYXJlbnRGcmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVj
dCopbV9ucFdpbmRvdy53c19pbmZvKS0+ZGVwdGgpOworICAgICAgICBYU3luYyhHREtfRElTUExB
WSgpLCBGYWxzZSk7IC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIga25vd3MgYWJvdXQgdGhl
IERyYXdhYmxlCisgICAgfQorCisgICAgLy8gZG8gbm90IGNhbGwgc2V0TlBXaW5kb3dJZk5lZWRl
ZCgpIGltbWVkaWF0ZWx5LCB3aWxsIGJlIGNhbGxlZCBvbiBwYWludCgpCisgICAgbV9oYXNQZW5k
aW5nR2VvbWV0cnlDaGFuZ2UgPSB0cnVlOworI2VuZGlmCisKKyAgICAvLyBJbiBvcmRlciB0byBt
b3ZlL3Jlc2l6ZSB0aGUgcGx1Z2luIHdpbmRvdyBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZQorICAg
IC8vIHJlc3Qgb2YgZnJhbWUgZHVyaW5nIGUuZy4gc2Nyb2xsaW5nLCB3ZSBzZXQgdGhlIHdpbmRv
dyBnZW9tZXRyeQorICAgIC8vIGluIHRoZSBwYWludCgpIGZ1bmN0aW9uLCBidXQgYXMgcGFpbnQo
KSBpc24ndCBjYWxsZWQgd2hlbiB0aGUKKyAgICAvLyBwbHVnaW4gd2luZG93IGlzIG91dHNpZGUg
dGhlIGZyYW1lIHdoaWNoIGNhbiBiZSBjYXVzZWQgYnkgYQorICAgIC8vIHNjcm9sbCwgd2UgbmVl
ZCB0byBtb3ZlL3Jlc2l6ZSBpbW1lZGlhdGVseS4KKyAgICBpZiAoIW1fd2luZG93UmVjdC5pbnRl
cnNlY3RzKGZyYW1lVmlldy0+ZnJhbWVSZWN0KCkpKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVl
ZGVkKCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoKQpAQCAtMTYxLDQzICsxOTks
MjkzIEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmIChtX2lzV2luZG93ZWQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICAvKiBOZWVkIHRvIHN5bnRoZXNpemUgWGV2
ZW50cyBoZXJlICovCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlmICghbV9kcmF3YWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgYm9vbCBzeW5jWCA9IG1fcGx1Z2luRGlzcGxh
eSAmJiBtX3BsdWdpbkRpc3BsYXkgIT0gR0RLX0RJU1BMQVkoKTsKKworICAgIEludFJlY3QgZXhw
b3NlZFJlY3QocmVjdCk7CisgICAgZXhwb3NlZFJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsK
KyAgICBleHBvc2VkUmVjdC5tb3ZlKC1mcmFtZVJlY3QoKS54KCksIC1mcmFtZVJlY3QoKS55KCkp
OworCisgICAgV2luZG93IGR1bW15X3c7CisgICAgaW50IGR1bW15X2k7CisgICAgdW5zaWduZWQg
aW50IGR1bW15X3VpLCBhY3R1YWxEZXB0aCA9IDA7CisgICAgWEdldEdlb21ldHJ5KEdES19ESVNQ
TEFZKCksIG1fZHJhd2FibGUsICZkdW1teV93LCAmZHVtbXlfaSwgJmR1bW15X2ksCisgICAgICAg
ICAgICAgICAgICZkdW1teV91aSwgJmR1bW15X3VpLCAmZHVtbXlfdWksICZhY3R1YWxEZXB0aCk7
CisKKyAgICBjb25zdCBpbnQgZHJhd2FibGVEZXB0aCA9ICgoTlBTZXRXaW5kb3dDYWxsYmFja1N0
cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+ZGVwdGg7CisgICAgQVNTRVJUKGRyYXdhYmxlRGVw
dGggPT0gYWN0dWFsRGVwdGgpOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBkcmF3YWJsZVN1cmZh
Y2UgPSBjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKEdES19ESVNQTEFZKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZHJhd2FibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdmlzdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKworICAgIGlmIChtX2lzVHJhbnNw
YXJlbnQgJiYgZHJhd2FibGVEZXB0aCAhPSAzMikgeworICAgICAgICAvLyBBdHRlbXB0IHRvIGZh
a2UgaXQgd2hlbiB3ZSBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgb24gb3VyCisgICAgICAg
IC8vIHBpeG1hcC4gIElmIHRoYXQncyBub3QgcG9zc2libGUsIGF0IGxlYXN0IGNsZWFyIHRoZSB3
aW5kb3cgdG8KKyAgICAgICAgLy8gYXZvaWQgZHJhd2luZyBhcnRpZmFjdHMuCisgICAgICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpOworICAgICAgICBHZGtEcmF3YWJsZSogZ2RrQmFja2luZ1N0b3Jl
ID0gTlVMTDsKKyAgICAgICAgZ2ludCB4b2ZmID0gMCwgeW9mZiA9IDA7CisKKyAgICAgICAgZ2Rr
X3dpbmRvd19nZXRfaW50ZXJuYWxfcGFpbnRfaW5mbyh3aWRnZXQtPndpbmRvdywgJmdka0JhY2tp
bmdTdG9yZSwgJnhvZmYsICZ5b2ZmKTsKKworICAgICAgICBHQyBnYyA9IFhEZWZhdWx0R0MoR0RL
X0RJU1BMQVkoKSwgZ2RrX3NjcmVlbl9nZXRfbnVtYmVyKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KSkpOworICAgICAgICBpZiAoZ2RrQmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBYQ29weUFy
ZWEoR0RLX0RJU1BMQVkoKSwgR0RLX0RSQVdBQkxFX1hJRChnZGtCYWNraW5nU3RvcmUpLCBtX2Ry
YXdhYmxlLCBnYywKKyAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3QueCgpICsgZXhw
b3NlZFJlY3QueCgpIC0geG9mZiwKKyAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qu
eSgpICsgZXhwb3NlZFJlY3QueSgpIC0geW9mZiwKKyAgICAgICAgICAgICAgICAgICAgICBleHBv
c2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICBleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBubyB2YWxpZCBiYWNraW5nIHN0b3JlOyBjbGVhciB0byB0aGUgYmFj
a2dyb3VuZCBjb2xvcgorICAgICAgICAgICAgWEZpbGxSZWN0YW5nbGUoR0RLX0RJU1BMQVkoKSwg
bV9kcmF3YWJsZSwgZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC54
KCksIGV4cG9zZWRSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRS
ZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZihtX2lzVHJhbnNwYXJlbnQpIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIDMyIGJpdCBk
cmF3YWJsZSBhbmQgdGhlIHBsdWdpbiB3YW50cyB0cmFuc3BhcmVuY3ksCisgICAgICAgIC8vIHdl
J2xsIGNsZWFyIHRoZSBleHBvc2VkIGFyZWEgdG8gdHJhbnNwYXJlbnQgZmlyc3QuICBPdGhlcndp
c2UsCisgICAgICAgIC8vIHdlJ2QgZW5kIHVwIHdpdGgganVuayBpbiB0aGVyZSBmcm9tIHRoZSBs
YXN0IHBhaW50LCBvciwgd29yc2UsCisgICAgICAgIC8vIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAg
ICAgICAgY2Fpcm9fdCogY3JGaWxsID0gY2Fpcm9fY3JlYXRlKGRyYXdhYmxlU3VyZmFjZSk7CisK
KyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyRmlsbCwgQ0FJUk9fT1BFUkFUT1JfU09VUkNF
KTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl90KiBmaWxsID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVf
cmdiYSgwLiwgMC4sIDAuLCAwLik7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3JGaWxsLCBm
aWxsKTsKKworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3JGaWxsLCBleHBvc2VkUmVjdC54KCks
IGV4cG9zZWRSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9zZWRSZWN0Lndp
ZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY2Fpcm9fY2xpcChjckZpbGwp
OworICAgICAgICBjYWlyb19wYWludChjckZpbGwpOworCisgICAgICAgIGNhaXJvX2Rlc3Ryb3ko
Y3JGaWxsKTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KGZpbGwpOworICAgIH0KIAot
ICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgIFhFdmVudCB4
ZXZlbnQ7CisgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZihYRXZlbnQpKTsKKyAgICBYR3Jh
cGhpY3NFeHBvc2VFdmVudCYgZXhwb3NlRXZlbnQgPSB4ZXZlbnQueGdyYXBoaWNzZXhwb3NlOwor
ICAgIGV4cG9zZUV2ZW50LnR5cGUgPSBHcmFwaGljc0V4cG9zZTsKKyAgICBleHBvc2VFdmVudC5k
aXNwbGF5ID0gR0RLX0RJU1BMQVkoKTsKKyAgICBleHBvc2VFdmVudC5kcmF3YWJsZSA9IG1fZHJh
d2FibGU7CisgICAgZXhwb3NlRXZlbnQueCA9IGV4cG9zZWRSZWN0LngoKTsKKyAgICBleHBvc2VF
dmVudC55ID0gZXhwb3NlZFJlY3QueSgpOworICAgIGV4cG9zZUV2ZW50LndpZHRoID0gZXhwb3Nl
ZFJlY3QueCgpICsgZXhwb3NlZFJlY3Qud2lkdGgoKTsgLy8gZmxhc2ggYnVnPyBpdCB0aGlua3Mg
d2lkdGggaXMgdGhlIHJpZ2h0IGluIHRyYW5zcGFyZW50IG1vZGUKKyAgICBleHBvc2VFdmVudC5o
ZWlnaHQgPSBleHBvc2VkUmVjdC55KCkgKyBleHBvc2VkUmVjdC5oZWlnaHQoKTsgLy8gZmxhc2gg
YnVnPyBpdCB0aGlua3MgaGVpZ2h0IGlzIHRoZSBib3R0b20gaW4gdHJhbnNwYXJlbnQgbW9kZQog
Ci0gICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBkaXNwYXRjaE5QRXZl
bnQoeGV2ZW50KTsKKworICAgIGlmIChzeW5jWCkKKyAgICAgICAgWFN5bmMobV9wbHVnaW5EaXNw
bGF5LCBGYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4KIAotICAgIGlmICghZGlzcGF0
Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6cGFp
bnQoKTogUGFpbnQgZXZlbnQgbm90IGFjY2VwdGVkIik7CisgICAgY2Fpcm9fdCogY3IgPSBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBjYWlyb19zYXZlKGNyKTsKKworICAgIGNhaXJv
X3NldF9zb3VyY2Vfc3VyZmFjZShjciwgZHJhd2FibGVTdXJmYWNlLCBmcmFtZVJlY3QoKS54KCks
IGZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsCisgICAgICAgICAg
ICAgICAgICAgIGZyYW1lUmVjdCgpLngoKSArIGV4cG9zZWRSZWN0LngoKSwgZnJhbWVSZWN0KCku
eSgpICsgZXhwb3NlZFJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICBleHBvc2VkUmVjdC53
aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fY2xpcChjcik7CisKKyAg
ICBpZiAobV9pc1RyYW5zcGFyZW50KQorICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENB
SVJPX09QRVJBVE9SX09WRVIpOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KGNyKTsKKworICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShkcmF3YWJsZVN1
cmZhY2UpOworI2VuZGlmICAvLyBkZWZpbmVkKFhQX1VOSVgpCiB9CiAKIHZvaWQgUGx1Z2luVmll
dzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBOUEV2
ZW50IG5wRXZlbnQ7Ci0gICAgCi0gICAgLyogRklYTUU6IFN5bnRoZXNpemUgYW4gWEV2ZW50IHRv
IHBhc3MgdGhyb3VnaCAqLwotCiAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGlmICghZGlzcGF0Y2hOUEV2
ZW50KG5wRXZlbnQpKQorCisgICAgaWYobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGV2
ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIE5QRXZlbnQgeEV2ZW50OworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBHZGtFdmVu
dEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKS0+Z2RrRXZlbnRLZXkoKTsKKworICAg
IHhFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVu
dCkgPyAyIDogMzsgIC8vIEtleVByZXNzL1JlbGVhc2UgZ2V0IHVuc2V0IHNvbWV3aGVyZQorICAg
IHhFdmVudC54a2V5LnJvb3QgPSBnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUpOworICAgIHhF
dmVudC54a2V5LnN1YndpbmRvdyA9IDA7IC8vIHdlIGhhdmUgbm8gY2hpbGQgd2luZG93CisgICAg
eEV2ZW50LnhrZXkudGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4RXZlbnQueGtleS5z
dGF0ZSA9IGdka0V2ZW50LT5zdGF0ZTsgIC8vIEdka01vZGlmaWVyVHlwZSBtaXJyb3JzIHhsaWIg
c3RhdGUgbWFza3MKKyAgICB4RXZlbnQueGtleS5rZXljb2RlID0gZ2RrRXZlbnQtPmhhcmR3YXJl
X2tleWNvZGU7CisgICAgeEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4gPSB0cnVlOworCisgICAgLy8g
Tk9URTogQXMgdGhlIFhFdmVudHMgc2VudCB0byB0aGUgcGx1Zy1pbiBhcmUgc3ludGhlc2l6ZWQg
YW5kIHRoZXJlIGlzIG5vdCBhIG5hdGl2ZSB3aW5kb3cKKyAgICAvLyBjb3JyZXNwb25kaW5nIHRv
IHRoZSBwbHVnLWluIHJlY3RhbmdsZSwgc29tZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgWEV2ZW50
IHN0cnVjdHVyZXMgYXJlIG5vdAorICAgIC8vIHNldCB0byB0aGVpciBub3JtYWwgWHNlcnZlciB2
YWx1ZXMuIGUuZy4gS2V5IGV2ZW50cyBkb24ndCBoYXZlIGEgcG9zaXRpb24uCisgICAgLy8gc291
cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OUEV2ZW50CisgICAgeEV2ZW50
LnhrZXkueCA9IDA7CisgICAgeEV2ZW50LnhrZXkueSA9IDA7CisgICAgeEV2ZW50LnhrZXkueF9y
b290ID0gMDsKKyAgICB4RXZlbnQueGtleS55X3Jvb3QgPSAwOworI2VuZGlmCisKKyAgICBpZiAo
IWRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
IGV2ZW50KQorI2lmIGRlZmluZWQoWFBfVU5JWCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRF
dmVudFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIE5QRXZlbnQgbnBFdmVudDsKKyAg
ICB1bnNpZ25lZCBpbnQgc3RhdGUgPSAwOworICAgIGlmIChldmVudC0+Y3RybEtleSgpKQorICAg
ICAgICBzdGF0ZSB8PSBDb250cm9sTWFzazsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisg
ICAgICAgIHN0YXRlIHw9IFNoaWZ0TWFzazsKKyAgICBpZiAoZXZlbnQtPmFsdEtleSgpKQorICAg
ICAgICBzdGF0ZSB8PSBNb2QxTWFzazsKKyAgICBpZiAoZXZlbnQtPm1ldGFLZXkoKSkKKyAgICAg
ICAgc3RhdGUgfD0gTW9kNE1hc2s7CisgICAgcmV0dXJuIHN0YXRlOworfQogCi0gICAgaWYgKCFt
X2lzV2luZG93ZWQpCi0gICAgICByZXR1cm47Cit2b2lkIFBsdWdpblZpZXc6OmluaXRYRXZlbnQo
WEV2ZW50KiB4RXZlbnQpCit7CisgICAgbWVtc2V0KHhFdmVudCwgMCwgc2l6ZW9mKFhFdmVudCkp
OworCisgICAgeEV2ZW50LT54YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFyZSB1bmF3YXJlIG9mIHRo
ZSBsYXN0IHJlcXVlc3QgcHJvY2Vzc2VkIGJ5IFggU2VydmVyCisgICAgeEV2ZW50LT54YW55LnNl
bmRfZXZlbnQgPSBmYWxzZTsKKyAgICB4RXZlbnQtPnhhbnkuZGlzcGxheSA9IEdES19ESVNQTEFZ
KCk7CisgICAgLy8gTk9URTogZXZlbnQtPnhhbnkud2luZG93IGRvZXNuJ3QgYWx3YXlzIGNvcnJl
c3BvbmQgdG8gdGhlIC53aW5kb3cgcHJvcGVydHkgb2Ygb3RoZXIgWEV2ZW50J3MKKyAgICAvLyBi
dXQgZG9lcyBpbiB0aGUgY2FzZSBvZiBLZXlQcmVzcywgS2V5UmVsZWFzZSwgQnV0dG9uUHJlc3Ms
IEJ1dHRvblJlbGVhc2UsIGFuZCBNb3Rpb25Ob3RpZnkKKyAgICAvLyBldmVudHM7IHRodXMsIHRo
aXMgaXMgcmlnaHQ6CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBtX3BhcmVudEZyYW1lLT52aWV3
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgeEV2ZW50LT54YW55
LndpbmRvdyA9IHdpZGdldCA/IEdES19XSU5ET1dfWFdJTkRPVyh3aWRnZXQtPndpbmRvdykgOiAw
OworfQorCitzdGF0aWMgdm9pZCBzZXRYQnV0dG9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQq
IHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywg
RnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIFhCdXR0b25FdmVudCYgeGJ1dHRvbiA9IHhFdmVu
dC0+eGJ1dHRvbjsKKyAgICB4YnV0dG9uLnR5cGUgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRvblByZXNzIDogQnV0dG9uUmVsZWFzZTsKKyAgICB4
YnV0dG9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsKKyAgICB4YnV0dG9uLnN1
YndpbmRvdyA9IDA7CisgICAgeGJ1dHRvbi50aW1lID0gZXZlbnQtPnRpbWVTdGFtcCgpOworICAg
IHhidXR0b24ueCA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4YnV0dG9uLnkgPSBwb3N0Wm9vbVBv
cy55KCk7CisgICAgeGJ1dHRvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVuWCgpOworICAgIHhidXR0
b24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4YnV0dG9uLnN0YXRlID0gaW5wdXRF
dmVudFN0YXRlKGV2ZW50KTsKKyAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgIGNh
c2UgTWlkZGxlQnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9IEJ1dHRvbjI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgIHhidXR0b24uYnV0dG9u
ID0gQnV0dG9uMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVlOworfQogCi0gICAgLyogRklY
TUU6IFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3MgdGhyb3VnaCAqLwotICAgIEludFBvaW50
IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3co
SW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CitzdGF0aWMgdm9pZCBz
ZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCog
ZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJhbWUqIHBhcmVudEZyYW1lKQor
eworICAgIFhNb3Rpb25FdmVudCYgeG1vdGlvbiA9IHhFdmVudC0+eG1vdGlvbjsKKyAgICB4bW90
aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgeG1vdGlvbi5yb290ID0gZ2V0Um9vdFdpbmRv
dyhwYXJlbnRGcmFtZSk7CisgICAgeG1vdGlvbi5zdWJ3aW5kb3cgPSAwOworICAgIHhtb3Rpb24u
dGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4bW90aW9uLnggPSBwb3N0Wm9vbVBvcy54
KCk7CisgICAgeG1vdGlvbi55ID0gcG9zdFpvb21Qb3MueSgpOworICAgIHhtb3Rpb24ueF9yb290
ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4bW90aW9uLnlfcm9vdCA9IGV2ZW50LT5zY3JlZW5Z
KCk7CisgICAgeG1vdGlvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0ZShldmVudCk7CisgICAgeG1v
dGlvbi5pc19oaW50ID0gTm90aWZ5Tm9ybWFsOworICAgIHhtb3Rpb24uc2FtZV9zY3JlZW4gPSB0
cnVlOworfQorCitzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllbGRzKFhF
dmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc3Rab29t
UG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWENyb3NzaW5nRXZlbnQmIHhjcm9zc2lu
ZyA9IHhFdmVudC0+eGNyb3NzaW5nOworICAgIHhjcm9zc2luZy50eXBlID0gZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBFbnRlck5vdGlmeSA6IExlYXZlTm90
aWZ5OworICAgIHhjcm9zc2luZy5yb290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7Cisg
ICAgeGNyb3NzaW5nLnN1YndpbmRvdyA9IDA7CisgICAgeGNyb3NzaW5nLnRpbWUgPSBldmVudC0+
dGltZVN0YW1wKCk7CisgICAgeGNyb3NzaW5nLnggPSBwb3N0Wm9vbVBvcy55KCk7CisgICAgeGNy
b3NzaW5nLnkgPSBwb3N0Wm9vbVBvcy54KCk7CisgICAgeGNyb3NzaW5nLnhfcm9vdCA9IGV2ZW50
LT5zY3JlZW5YKCk7CisgICAgeGNyb3NzaW5nLnlfcm9vdCA9IGV2ZW50LT5zY3JlZW5ZKCk7Cisg
ICAgeGNyb3NzaW5nLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKKyAgICB4Y3Jvc3Np
bmcubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICB4Y3Jvc3NpbmcuZGV0YWlsID0gTm90aWZ5RGV0
YWlsTm9uZTsKKyAgICB4Y3Jvc3Npbmcuc2FtZV9zY3JlZW4gPSB0cnVlOworICAgIHhjcm9zc2lu
Zy5mb2N1cyA9IGZhbHNlOworfQorI2VuZGlmCiAKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91
c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgaWYgKCFk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCisKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBOUEV2ZW50IHhFdmVudDsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisg
ICAgaW5pdFhFdmVudCgmeEV2ZW50KTsKKworICAgIEludFBvaW50IHBvc3Rab29tUG9zID0gcm91
bmRlZEludFBvaW50KG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKGV2ZW50
LT5hYnNvbHV0ZUxvY2F0aW9uKCkpKTsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQpCisgICAgICAgIHNldFhCdXR0b25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZl
bnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCisgICAgICAgIHNldFhN
b3Rpb25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9w
YXJlbnRGcmFtZSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2VvdXRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJF
dmVudCkKKyAgICAgICAgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcygmeEV2ZW50LCBl
dmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUpOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuOworI2VuZGlmCisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQogICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAorI2lmIGRlZmluZWQoWFBfVU5JWCkK
K3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBYRXZlbnQgbnBF
dmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKworICAgIFhGb2N1c0NoYW5nZUV2ZW50
JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50LnR5cGUgPSA5OyAgLy8gRm9jdXNJ
biBnZXRzIHVuc2V0IHNvbWV3aGVyZQorICAgIGV2ZW50Lm1vZGUgPSBOb3RpZnlOb3JtYWw7Cisg
ICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKKworICAgIGRpc3BhdGNoTlBFdmVu
dChucEV2ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkK
K3sKKyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKworICAg
IFhGb2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50LnR5
cGUgPSAxMDsgIC8vIEZvY3VzT3V0IGdldHMgdW5zZXQgc29tZXdoZXJlCisgICAgZXZlbnQubW9k
ZSA9IE5vdGlmeU5vcm1hbDsKKyAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOwor
CisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorI2VuZGlmCisKIHZvaWQgUGx1Z2lu
Vmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKIHsKICAgICBXaWRnZXQ6OnNldFBh
cmVudChwYXJlbnQpOwpAQCAtMjA4LDcgKzQ5Niw4IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFy
ZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKIAogdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1Jl
Y3QoY29uc3QgSW50UmVjdCYpCiB7Ci0gICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworICAgIGlm
ICghbV9pc1dpbmRvd2VkKQorICAgICAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CiB9CiAKIHZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCkBAIC0yMTYsMjQgKzUwNSw1OSBA
QCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgIGlmICghbV9pc1N0
YXJ0ZWQgfHwgIXBhcmVudCgpIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX25wV2luZG93LnggPSBtX3dpbmRvd1JlY3QueCgp
OwotICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVjdC55KCk7Ci0gICAgbV9ucFdpbmRvdy53
aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93
aW5kb3dSZWN0LmhlaWdodCgpOworICAgIC8vIElmIHRoZSBwbHVnaW4gZGlkbid0IGxvYWQgc3Vj
ZXNzZnVsbHksIG5vIHBvaW50IGluIGNhbGxpbmcgc2V0d2luZG93CisgICAgaWYgKG1fc3RhdHVz
ICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7Ci0gICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKLSAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
Ym90dG9tID0gbV9jbGlwUmVjdC5oZWlnaHQoKTsKKyAgICAvLyBPbiBVbml4LCBvbmx5IGNhbGwg
cGx1Z2luJ3Mgc2V0d2luZG93IGlmIGl0J3MgZnVsbC1wYWdlIG9yIHdpbmRvd2VkCisgICAgaWYg
KG1fbW9kZSAhPSBOUF9GVUxMICYmIG1fbW9kZSAhPSBOUF9FTUJFRCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHBsYXRmb3JtUGx1Z2luV2lkZ2V0IHN0aWxsIGV4aXN0
cworICAgIGlmIChtX2lzV2luZG93ZWQgJiYgIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAg
ICAgIHJldHVybjsKIAotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbV93aW5kb3dS
ZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93
UmVjdC5oZWlnaHQoKSB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLCAmYWxsb2NhdGlvbik7CiAjaWYgZGVmaW5lZChYUF9VTklYKQotICAgIGlm
ICghbV9uZWVkc1hFbWJlZCkgewotICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19Y
VEJJTihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dS
ZWN0LnkoKSk7Ci0gICAgICAgIGd0a194dGJpbl9yZXNpemUocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7Ci0gICAgfQor
ICAgIGlmICghbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7
CisgICAgICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVjdC55KCk7CisgICAgICAgIG1fbnBX
aW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICAgICAgbV9ucFdpbmRvdy5o
ZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
dG9wID0gbV9jbGlwUmVjdC55KCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQg
PSBtX2NsaXBSZWN0LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9t
ID0gbV9jbGlwUmVjdC5oZWlnaHQoKTsKKworICAgICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSB7IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53
aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgZ3RrX3dpZGdldF9zaXpl
X2FsbG9jYXRlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpCisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAg
Z3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSks
IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworICAgICAgICAgICAgZ3RrX3h0
YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwg
bV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQogI2VuZGlmCisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsKKwor
ICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgICAgICBtX25wV2luZG93
LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSAw
OworICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IDA7CisgICAgfQorCisgICAg
Ly8gRkxBU0ggV09SS0FST1VORDogT25seSBzZXQgaW5pdGlhbGx5LiBNdWx0aXBsZSBjYWxscyB0
bworICAgIC8vIHNldE5QV2luZG93KCkgY2F1c2UgdGhlIHBsdWdpbiB0byBjcmFzaCBpbiB3aW5k
b3dlZCBtb2RlLgorICAgIGlmICghbV9pc1dpbmRvd2VkIHx8IG1fbnBXaW5kb3cud2lkdGggPT0g
KHVuc2lnbmVkIGludCktMSB8fCBtX25wV2luZG93LmhlaWdodCA9PSAodW5zaWduZWQgaW50KS0x
KSB7CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAg
ICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgfQog
CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwpAQCAtMzEyLDYgKzYzNiwxNCBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlU3Rh
dGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKICAgICAgICAgKnN0YXRpY19j
YXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CiAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKIAorICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworI2Vsc2UK
KyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogICAgIH0KQEAgLTQxNSw3ICs3NDcsNyBAQCB2b2lk
IFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKICAgICB9CiAKICAgICBJ
bnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQs
IHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7Ci0gICAgaW52YWxpZGF0ZVJlY3Qocik7CisgICAg
aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHIpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pCkBAIC00MzIsMTIgKzc2NCw2NCBAQCB2b2lkIFBs
dWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKICAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7
CiB9CiAKK3N0YXRpYyBEaXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KCkKK3sKKyAgICAvLyBUaGUg
cGx1Z2luIHRvb2xraXQgbWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBYIGNvbm5lY3Rpb24gb3Blbi4g
IFNpbmNlIHdlJ3JlCisgICAgLy8gYSBnZGsvZ3RrIGFwcCwgd2UnbGwgKHByb2JhYmx5PykgaGF2
ZSB0aGUgc2FtZSBYIGNvbm5lY3Rpb24gYXMgYW55IGdkay1iYXNlZAorICAgIC8vIHBsdWdpbnMs
IHNvIHdlIGNhbiByZXR1cm4gdGhhdC4gIFdlIG1pZ2h0IHdhbnQgdG8gYWRkIG90aGVyIGltcGxl
bWVudGF0aW9ucyBoZXJlCisgICAgLy8gbGF0ZXIuCisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisg
ICAgcmV0dXJuIEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkp
OworI2Vsc2UKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCiBzdGF0aWMgZ2Jvb2xlYW4K
LXBsdWdfcmVtb3ZlZF9jYihHdGtTb2NrZXQgKnNvY2tldCwgZ3BvaW50ZXIpCitwbHVnX3JlbW92
ZWRfY2IoR3RrU29ja2V0KiBzb2NrZXQsIGdwb2ludGVyKQogewogICAgIHJldHVybiBUUlVFOwog
fQogCisjaWYgZGVmaW5lZChYUF9VTklYKQorc3RhdGljIHZvaWQgZ2V0VmlzdWFsQW5kQ29sb3Jt
YXAoaW50IGRlcHRoLCBWaXN1YWwqKiB2aXN1YWwsIENvbG9ybWFwKiBjb2xvcm1hcCkKK3sKKyAg
ICAqdmlzdWFsID0gMDsKKyAgICAqY29sb3JtYXAgPSAwOworCisgICAgaW50IHJtYWosIHJtaW47
CisgICAgaWYgKGRlcHRoID09IDMyICYmICghWFJlbmRlclF1ZXJ5VmVyc2lvbihHREtfRElTUExB
WSgpLCAmcm1haiwgJnJtaW4pIHx8IChybWFqID09IDAgJiYgcm1pbiA8IDUpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgWFZpc3VhbEluZm8gdGVtcGw7CisgICAgdGVtcGwuc2NyZWVuICA9IGdk
a19zY3JlZW5fZ2V0X251bWJlcihnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOworICAgIHRlbXBs
LmRlcHRoICAgPSBkZXB0aDsKKyAgICB0ZW1wbC5jX2NsYXNzID0gVHJ1ZUNvbG9yOworICAgIGlu
dCBuVmlzdWFsczsKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJbmZv
KEdES19ESVNQTEFZKCksIFZpc3VhbFNjcmVlbk1hc2sgfCBWaXN1YWxEZXB0aE1hc2sgfCBWaXN1
YWxDbGFzc01hc2ssICZ0ZW1wbCwgJm5WaXN1YWxzKTsKKworICAgIGlmICghblZpc3VhbHMpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXB0aCA9PSAzMikgeworICAgICAgICBmb3IgKGlu
dCBpZHggPSAwOyBpZHggPCBuVmlzdWFsczsgKytpZHgpIHsKKyAgICAgICAgICAgIFhSZW5kZXJQ
aWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChHREtfRElTUExBWSgp
LCB2aXN1YWxJbmZvW2lkeF0udmlzdWFsKTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQtPnR5cGUg
PT0gUGljdFR5cGVEaXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKSB7CisgICAgICAg
ICAgICAgICAgICp2aXN1YWwgPSB2aXN1YWxJbmZvW2lkeF0udmlzdWFsOworICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAg
ICAgKnZpc3VhbCA9IHZpc3VhbEluZm9bMF0udmlzdWFsOworCisgICAgWEZyZWUodmlzdWFsSW5m
byk7CisKKyAgICBpZiAoKnZpc3VhbCkKKyAgICAgICAgKmNvbG9ybWFwID0gWENyZWF0ZUNvbG9y
bWFwKEdES19ESVNQTEFZKCksIEdES19ST09UX1dJTkRPVygpLCAqdmlzdWFsLCBBbGxvY05vbmUp
OworfQorI2VuZGlmCisKIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiB7CiAgICAg
QVNTRVJUKG1faXNTdGFydGVkKTsKQEAgLTQ1MiwyNiArODM2LDM0IEBAIGJvb2wgUGx1Z2luVmll
dzo6cGxhdGZvcm1TdGFydCgpCiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KDApOwogICAgIH0KIAorICAgIGlmIChtX2lzV2luZG93ZWQpIHsKICNpZiBkZWZpbmVkKFhQ
X1VOSVgpCi0gICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgaWYgKG1fbmVlZHNYRW1i
ZWQpIHsKKyAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkpOwor
ICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudEZyYW1l
LT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSwgInBsdWdfcmVtb3ZlZCIsIEdfQ0FMTEJBQ0socGx1Z19yZW1vdmVkX2NiKSwg
TlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChn
dGtfeHRiaW5fbmV3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKS0+d2luZG93LCAwKSk7CisgICAgICAgIH0KKyNlbHNlCiAgICAgICAgIHNl
dFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkpOwogICAgICAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSksIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnX3JlbW92ZWQiLCBH
X0NBTExCQUNLKHBsdWdfcmVtb3ZlZF9jYiksIE5VTEwpOwotICAgIH0gZWxzZSBpZiAobV9pc1dp
bmRvd2VkKQotICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfeHRiaW5fbmV3KG1fcGFyZW50
RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+d2luZG93
LCAwKSk7Ci0jZWxzZQotICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkpOwot
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRGcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSwgcGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSk7CiAjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgw
KTsKKyAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOworICAgIH0K
KwogICAgIHNob3coKTsKIAotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgbV9ucFdp
bmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OwogI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAg
ICAgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAqd3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxs
YmFja1N0cnVjdCgpOwotCisgICAgICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0g
bmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKICAgICAgICAgd3MtPnR5cGUgPSAwOwor
I2VuZGlmCiAKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlw
ZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgICAgIGlm
IChtX25lZWRzWEVtYmVkKSB7CiAgICAgICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSk7CiAgICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lk
KilndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpKTsK
QEAgLTQ4NywyNSArODc5LDYzIEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAg
ICAgICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CiAgICAgICAgIH0KICAgICAgICAgWEZsdXNoICh3cy0+
ZGlzcGxheSk7Ci0KLSAgICAgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CiAjZWxpZiBkZWZp
bmVkKEdES19XSU5ET1dJTkdfV0lOMzIpCiAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZv
aWQqKUdES19XSU5ET1dfSFdORChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5kb3cpOwogI2Vu
ZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBl
RHJhd2FibGU7Ci0gICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICAgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAg
ICAgICAgR2RrU2NyZWVuKiBnc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworICAg
ICAgICBHZGtWaXN1YWwqIGd2aXN1YWwgPSBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKGdz
Y3JlZW4pOworCisgICAgICAgIGlmIChndmlzdWFsLT5kZXB0aCA9PSAzMiB8fCAhbV9wbHVnaW4t
PnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgp
KSB7CisgICAgICAgICAgICBnZXRWaXN1YWxBbmRDb2xvcm1hcCgzMiwgJm1fdmlzdWFsLCAmbV9j
b2xvcm1hcCk7CisgICAgICAgICAgICB3cy0+ZGVwdGggPSAzMjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghbV92aXN1YWwpIHsKKyAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKGd2
aXN1YWwtPmRlcHRoLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKKyAgICAgICAgICAgIHdzLT5k
ZXB0aCA9IGd2aXN1YWwtPmRlcHRoOworICAgICAgICB9CisKKyAgICAgICAgd3MtPmRpc3BsYXkg
PSBHREtfRElTUExBWSgpOworICAgICAgICB3cy0+dmlzdWFsID0gbV92aXN1YWw7CisgICAgICAg
IHdzLT5jb2xvcm1hcCA9IG1fY29sb3JtYXA7CisKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsK
KyAgICAgICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0x
OworICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworI2Vsc2UKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1
Z2luOworICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKICAgICB9CiAKKyNpZiBkZWZpbmVk
KFhQX1VOSVgpCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKwogICAgIC8v
IFRPRE8gcmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRzLCBsaWtlIG1hYyBwb3J0PwotICAg
IGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RT
ZXRXaW5kb3dDYWxsKSkpCisgICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkgewogICAgICAgICB1cGRhdGVQbHVn
aW5XaWRnZXQoKTsgLy8gd2FzOiBzZXROUFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRvZXNu
J3QgcHJvZHVjZSAweDAgcmVjdHMgYXQgZmlyc3QgZ28KKyAgICAgICAgc2V0TlBXaW5kb3dJZk5l
ZWRlZCgpOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFBsdWdpblZpZXc6
OnBsYXRmb3JtRGVzdHJveSgpCiB7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlmIChtX2Ry
YXdhYmxlKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUp
OworICAgICAgICBtX2RyYXdhYmxlID0gMDsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBQbHVn
aW5WaWV3OjpoYWx0KCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47166</attachid>
            <date>2010-01-21 17:52:52 -0800</date>
            <delta_ts>2010-01-27 15:16:09 -0800</delta_ts>
            <desc>gtk windowless v7</desc>
            <filename>windowless-gtk-v7.diff</filename>
            <type>text/plain</type>
            <size>28968</size>
            <attacher name="Brian Tarricone">bjt23</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWY1NTlhOS4uMTQxZWZkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0wMS0yMSAgQnJpYW4gVGFycmlj
b25lICA8YnJpYW5Aa2FrYWkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtndGtdIEFkZCBzdXBwb3J0IGZvciB3aW5kb3dsZXNzIE5QQVBJIHBs
dWdpbnMKKworICAgICAgICBNdWNoIG9mIHRoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiBob3cgdGhl
IFF0IGJhY2tlbmQgZG9lcyB0aGlzLAorICAgICAgICBtb2RpZmllZCBmb3IgR3RrLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODgzMQorCisgICAg
ICAgIE5vIG5ldyB0ZXN0czsgdGhlcmUgaXMgYWxyZWFkeSBhIHdpbmRvd2xlc3MgdGVzdCBpbiB0
aGUgdHJlZS4KKworICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpQbHVnaW5WaWV3KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAg
ICAgICAgKiBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmdldFJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1
Z2luV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6aW5wdXRFdmVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmluaXRYRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WEJ1dHRvbkV2ZW50U3BlY2lmaWNG
aWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0WE1vdGlvbkV2ZW50U3BlY2lmaWNGaWVsZHMp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZWxkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBsdWdpbkRpc3BsYXkpOgorICAgICAgICAo
V2ViQ29yZTo6cGx1Z19yZW1vdmVkX2NiKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFZpc3VhbEFu
ZENvbG9ybWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKwogMjAx
MC0wMS0yMSAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggZjY2OWM2
ZC4uM2ZmNGM4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCisr
KyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgICAgICBoYW5kbGVN
b3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOwogICAgIGVsc2UgaWYg
KGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKLSNpZiBkZWZpbmVkKFFfV1NfWDEx
KSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLkRPTUZvY3VzT3V0RXZlbnQpCiAgICAgICAgIGhhbmRsZUZvY3VzT3V0
RXZlbnQoKTsKICAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01G
b2N1c0luRXZlbnQpCkBAIC04MDQsNyArODA0LDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhG
cmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAK
ICAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKICAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZh
bHNlKQogICAgICwgbV9pc1dhaXRpbmdUb1N0YXJ0KGZhbHNlKQotI2lmIGRlZmluZWQoWFBfVU5J
WCkgfHwgZGVmaW5lZChRX1dTX1gxMSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgLCBtX25l
ZWRzWEVtYmVkKGZhbHNlKQogI2VuZGlmCiAjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCkBAIC04MjMsNyArODIzLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmll
dyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2Uq
IHAKICAgICAsIG1fY29udGV4dFJlZigwKQogICAgICwgbV9mYWtlV2luZG93KDApCiAjZW5kaWYK
LSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNp
ZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICwg
bV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UodHJ1ZSkKICAgICAsIG1fZHJhd2FibGUoMCkKICAg
ICAsIG1fdmlzdWFsKDApCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5o
IGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCBkYmJiOTRkLi4wZGQ1ZTBiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTI2NSw3ICsyNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAg
ICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKLSNpZiBkZWZpbmVkKFFf
V1NfWDExKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICAgICB2b2lkIGhhbmRsZUZv
Y3VzSW5FdmVudCgpOwogICAgICAgICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICNlbmRp
ZgpAQCAtMjk4LDcgKzI5OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X2hhdmVJbml0aWFsaXplZDsKICAgICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7CiAKLSNp
ZiBkZWZpbmVkKFhQX1VOSVgpIHx8IGRlZmluZWQoUV9XU19YMTEpCisjaWYgZGVmaW5lZChYUF9V
TklYKQogICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CiAjZW5kaWYKIApAQCAtMzI2LDcgKzMy
Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKIAotI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgZGVm
aW5lZChRX1dTX1gxMSkgfHwgT1MoU1lNQklBTikKKyNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBM
QVRGT1JNKFNZTUJJQU4pCiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2Vs
aWYgZGVmaW5lZChYUF9NQUNPU1gpCiAgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0
OwpAQCAtMzQyLDcgKzM0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIFBvaW50IGdsb2JhbE1vdXNl
UG9zRm9yUGx1Z2luKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUV9XU19YMTEpICYm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0
cnlDaGFuZ2U7CiAgICAgICAgIFBpeG1hcCBtX2RyYXdhYmxlOwogICAgICAgICBWaXN1YWwqIG1f
dmlzdWFsOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNw
cCBiL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKaW5kZXggZjFhZGQ2NS4u
YzQ3M2MzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNw
cAorKysgYi9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgS2FrYWksIEluYy4g
PGJyaWFuQGtha2FpLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQs
NiArNDUsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2
ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRl
YnVnLmgiCiAjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgpAQCAtNjIsNiAr
NjQsMTAgQEAKIAogI2lmIGRlZmluZWQoWFBfVU5JWCkKICNpbmNsdWRlICJndGsyeHRiaW4uaCIK
KyNkZWZpbmUgQm9vbCBpbnQgLy8gdGhpcyBnb3QgdW5kZWZpbmVkIHNvbWV3aGVyZQorI2RlZmlu
ZSBTdGF0dXMgaW50IC8vIGRpdHRvCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5o
PgorI2luY2x1ZGUgPGNhaXJvL2NhaXJvLXhsaWIuaD4KICNpbmNsdWRlIDxnZGsvZ2RreC5oPgog
I2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQogI2luY2x1ZGUgIlBsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW4uaCIKQEAgLTk5LDkgKzEwNSwxOCBAQCBib29sIFBsdWdpblZpZXc6OmRp
c3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKICAgICByZXR1cm4gYWNjZXB0ZWQ7CiB9CiAK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCitzdGF0aWMgV2luZG93IGdldFJvb3RXaW5kb3coRnJhbWUq
IHBhcmVudEZyYW1lKQoreworICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gcGFyZW50RnJh
bWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBHZGtT
Y3JlZW4qIGdzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4ocGFyZW50V2lkZ2V0KTsKKyAg
ICByZXR1cm4gR0RLX1dJTkRPV19YV0lORE9XKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KGdz
Y3JlZW4pKTsKK30KKyNlbmRpZgorCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdl
dCgpCiB7Ci0gICAgaWYgKCFwYXJlbnQoKSB8fCAhbV9pc1dpbmRvd2VkKQorICAgIGlmICghcGFy
ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSk7CkBAIC0xMTYsNiArMTMxLDI5IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2lu
V2lkZ2V0KCkKIAogICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmIChtX3dpbmRvd1Jl
Y3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkKICAgICAg
ICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlm
ICghbV9pc1dpbmRvd2VkICYmIG1fd2luZG93UmVjdC5zaXplKCkgIT0gb2xkV2luZG93UmVjdC5z
aXplKCkpIHsKKyAgICAgICAgaWYgKG1fZHJhd2FibGUpCisgICAgICAgICAgICBYRnJlZVBpeG1h
cChHREtfRElTUExBWSgpLCBtX2RyYXdhYmxlKTsKKworICAgICAgICBtX2RyYXdhYmxlID0gWENy
ZWF0ZVBpeG1hcChHREtfRElTUExBWSgpLCBnZXRSb290V2luZG93KG1fcGFyZW50RnJhbWUpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpbmRvd1JlY3Qud2lkdGgoKSwg
bV93aW5kb3dSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPmRlcHRo
KTsKKyAgICAgICAgWFN5bmMoR0RLX0RJU1BMQVkoKSwgRmFsc2UpOyAvLyBtYWtlIHN1cmUgdGhh
dCB0aGUgc2VydmVyIGtub3dzIGFib3V0IHRoZSBEcmF3YWJsZQorICAgIH0KKworICAgIC8vIGRv
IG5vdCBjYWxsIHNldE5QV2luZG93SWZOZWVkZWQoKSBpbW1lZGlhdGVseSwgd2lsbCBiZSBjYWxs
ZWQgb24gcGFpbnQoKQorICAgIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlID0gdHJ1ZTsKKyNl
bmRpZgorCisgICAgLy8gSW4gb3JkZXIgdG8gbW92ZS9yZXNpemUgdGhlIHBsdWdpbiB3aW5kb3cg
YXQgdGhlIHNhbWUgdGltZSBhcyB0aGUKKyAgICAvLyByZXN0IG9mIGZyYW1lIGR1cmluZyBlLmcu
IHNjcm9sbGluZywgd2Ugc2V0IHRoZSB3aW5kb3cgZ2VvbWV0cnkKKyAgICAvLyBpbiB0aGUgcGFp
bnQoKSBmdW5jdGlvbiwgYnV0IGFzIHBhaW50KCkgaXNuJ3QgY2FsbGVkIHdoZW4gdGhlCisgICAg
Ly8gcGx1Z2luIHdpbmRvdyBpcyBvdXRzaWRlIHRoZSBmcmFtZSB3aGljaCBjYW4gYmUgY2F1c2Vk
IGJ5IGEKKyAgICAvLyBzY3JvbGwsIHdlIG5lZWQgdG8gbW92ZS9yZXNpemUgaW1tZWRpYXRlbHku
CisgICAgaWYgKCFtX3dpbmRvd1JlY3QuaW50ZXJzZWN0cyhmcmFtZVZpZXctPmZyYW1lUmVjdCgp
KSkKKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6
OnNldEZvY3VzKCkKQEAgLTE2MSw0MyArMTk5LDI5MyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBpZiAo
bV9pc1dpbmRvd2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0g
ICAgLyogTmVlZCB0byBzeW50aGVzaXplIFhldmVudHMgaGVyZSAqLworI2lmIGRlZmluZWQoWFBf
VU5JWCkKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0
IGJvb2wgc3luY1ggPSBtX3BsdWdpbkRpc3BsYXkgJiYgbV9wbHVnaW5EaXNwbGF5ICE9IEdES19E
SVNQTEFZKCk7CisKKyAgICBJbnRSZWN0IGV4cG9zZWRSZWN0KHJlY3QpOworICAgIGV4cG9zZWRS
ZWN0LmludGVyc2VjdChmcmFtZVJlY3QoKSk7CisgICAgZXhwb3NlZFJlY3QubW92ZSgtZnJhbWVS
ZWN0KCkueCgpLCAtZnJhbWVSZWN0KCkueSgpKTsKKworICAgIFdpbmRvdyBkdW1teVc7CisgICAg
aW50IGR1bW15STsKKyAgICB1bnNpZ25lZCBpbnQgZHVtbXlVSSwgYWN0dWFsRGVwdGggPSAwOwor
ICAgIFhHZXRHZW9tZXRyeShHREtfRElTUExBWSgpLCBtX2RyYXdhYmxlLCAmZHVtbXlXLCAmZHVt
bXlJLCAmZHVtbXlJLAorICAgICAgICAgICAgICAgICAmZHVtbXlVSSwgJmR1bW15VUksICZkdW1t
eVVJLCAmYWN0dWFsRGVwdGgpOworCisgICAgY29uc3QgaW50IGRyYXdhYmxlRGVwdGggPSAoKE5Q
U2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPmRlcHRoOworICAg
IEFTU0VSVChkcmF3YWJsZURlcHRoID09IGFjdHVhbERlcHRoKTsKKworICAgIGNhaXJvX3N1cmZh
Y2VfdCogZHJhd2FibGVTdXJmYWNlID0gY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShHREtfRElT
UExBWSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2RyYXdhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Zpc3VhbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV93aW5kb3dSZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisK
KyAgICBpZiAobV9pc1RyYW5zcGFyZW50ICYmIGRyYXdhYmxlRGVwdGggIT0gMzIpIHsKKyAgICAg
ICAgLy8gQXR0ZW1wdCB0byBmYWtlIGl0IHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFu
bmVsIG9uIG91cgorICAgICAgICAvLyBwaXhtYXAuICBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlLCBh
dCBsZWFzdCBjbGVhciB0aGUgd2luZG93IHRvCisgICAgICAgIC8vIGF2b2lkIGRyYXdpbmcgYXJ0
aWZhY3RzLgorICAgICAgICBHdGtXaWRnZXQqIHdpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXco
KS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgR2RrRHJhd2Fi
bGUqIGdka0JhY2tpbmdTdG9yZSA9IDA7CisgICAgICAgIGdpbnQgeG9mZiA9IDAsIHlvZmYgPSAw
OworCisgICAgICAgIGdka193aW5kb3dfZ2V0X2ludGVybmFsX3BhaW50X2luZm8od2lkZ2V0LT53
aW5kb3csICZnZGtCYWNraW5nU3RvcmUsICZ4b2ZmLCAmeW9mZik7CisKKyAgICAgICAgR0MgZ2Mg
PSBYRGVmYXVsdEdDKEdES19ESVNQTEFZKCksIGdka19zY3JlZW5fZ2V0X251bWJlcihnZGtfc2Ny
ZWVuX2dldF9kZWZhdWx0KCkpKTsKKyAgICAgICAgaWYgKGdka0JhY2tpbmdTdG9yZSkgeworICAg
ICAgICAgICAgWENvcHlBcmVhKEdES19ESVNQTEFZKCksIEdES19EUkFXQUJMRV9YSUQoZ2RrQmFj
a2luZ1N0b3JlKSwgbV9kcmF3YWJsZSwgZ2MsCisgICAgICAgICAgICAgICAgICAgICAgbV93aW5k
b3dSZWN0LngoKSArIGV4cG9zZWRSZWN0LngoKSAtIHhvZmYsCisgICAgICAgICAgICAgICAgICAg
ICAgbV93aW5kb3dSZWN0LnkoKSArIGV4cG9zZWRSZWN0LnkoKSAtIHlvZmYsCisgICAgICAgICAg
ICAgICAgICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gbm8gdmFsaWQgYmFja2luZyBzdG9yZTsg
Y2xlYXIgdG8gdGhlIGJhY2tncm91bmQgY29sb3IKKyAgICAgICAgICAgIFhGaWxsUmVjdGFuZ2xl
KEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUsIGdjLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKG1faXNUcmFuc3BhcmVudCkgeworICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgMzIgYml0IGRyYXdhYmxlIGFuZCB0aGUgcGx1Z2luIHdhbnRzIHRyYW5zcGFyZW5j
eSwKKyAgICAgICAgLy8gd2UnbGwgY2xlYXIgdGhlIGV4cG9zZWQgYXJlYSB0byB0cmFuc3BhcmVu
dCBmaXJzdC4gIE90aGVyd2lzZSwKKyAgICAgICAgLy8gd2UnZCBlbmQgdXAgd2l0aCBqdW5rIGlu
IHRoZXJlIGZyb20gdGhlIGxhc3QgcGFpbnQsIG9yLCB3b3JzZSwKKyAgICAgICAgLy8gdW5pbml0
aWFsaXplZCBkYXRhLgorICAgICAgICBjYWlyb190KiBjckZpbGwgPSBjYWlyb19jcmVhdGUoZHJh
d2FibGVTdXJmYWNlKTsKKworICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3JGaWxsLCBDQUlS
T19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3QqIGZpbGwgPSBjYWly
b19wYXR0ZXJuX2NyZWF0ZV9yZ2JhKDAuLCAwLiwgMC4sIDAuKTsKKyAgICAgICAgY2Fpcm9fc2V0
X3NvdXJjZShjckZpbGwsIGZpbGwpOworCisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjckZpbGws
IGV4cG9zZWRSZWN0LngoKSwgZXhwb3NlZFJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBj
YWlyb19jbGlwKGNyRmlsbCk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyRmlsbCk7CisKKyAgICAg
ICAgY2Fpcm9fZGVzdHJveShjckZpbGwpOworICAgICAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3ko
ZmlsbCk7CisgICAgfQogCi0gICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2Fi
bGU7CisgICAgWEV2ZW50IHhldmVudDsKKyAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKFhF
dmVudCkpOworICAgIFhHcmFwaGljc0V4cG9zZUV2ZW50JiBleHBvc2VFdmVudCA9IHhldmVudC54
Z3JhcGhpY3NleHBvc2U7CisgICAgZXhwb3NlRXZlbnQudHlwZSA9IEdyYXBoaWNzRXhwb3NlOwor
ICAgIGV4cG9zZUV2ZW50LmRpc3BsYXkgPSBHREtfRElTUExBWSgpOworICAgIGV4cG9zZUV2ZW50
LmRyYXdhYmxlID0gbV9kcmF3YWJsZTsKKyAgICBleHBvc2VFdmVudC54ID0gZXhwb3NlZFJlY3Qu
eCgpOworICAgIGV4cG9zZUV2ZW50LnkgPSBleHBvc2VkUmVjdC55KCk7CisgICAgZXhwb3NlRXZl
bnQud2lkdGggPSBleHBvc2VkUmVjdC54KCkgKyBleHBvc2VkUmVjdC53aWR0aCgpOyAvLyBmbGFz
aCBidWc/IGl0IHRoaW5rcyB3aWR0aCBpcyB0aGUgcmlnaHQgaW4gdHJhbnNwYXJlbnQgbW9kZQor
ICAgIGV4cG9zZUV2ZW50LmhlaWdodCA9IGV4cG9zZWRSZWN0LnkoKSArIGV4cG9zZWRSZWN0Lmhl
aWdodCgpOyAvLyBmbGFzaCBidWc/IGl0IHRoaW5rcyBoZWlnaHQgaXMgdGhlIGJvdHRvbSBpbiB0
cmFuc3BhcmVudCBtb2RlCiAKLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwor
ICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQpOworCisgICAgaWYgKHN5bmNYKQorICAgICAgICBY
U3luYyhtX3BsdWdpbkRpc3BsYXksIEZhbHNlKTsgLy8gc3luYyBjaGFuZ2VzIGJ5IHBsdWdpbgog
Ci0gICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCi0gICAgICAgIExPRyhFdmVudHMs
ICJQbHVnaW5WaWV3OjpwYWludCgpOiBQYWludCBldmVudCBub3QgYWNjZXB0ZWQiKTsKKyAgICBj
YWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNhaXJvX3NhdmUo
Y3IpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBkcmF3YWJsZVN1cmZhY2Us
IGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpKTsKKworICAgIGNhaXJvX3JlY3Rhbmds
ZShjciwKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVSZWN0KCkueCgpICsgZXhwb3NlZFJlY3Qu
eCgpLCBmcmFtZVJlY3QoKS55KCkgKyBleHBvc2VkUmVjdC55KCksCisgICAgICAgICAgICAgICAg
ICAgIGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpKTsKKyAgICBjYWly
b19jbGlwKGNyKTsKKworICAgIGlmIChtX2lzVHJhbnNwYXJlbnQpCisgICAgICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7CisgICAgZWxzZQorICAgICAgICBj
YWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9f
cGFpbnQoY3IpOworCisgICAgY2Fpcm9fcmVzdG9yZShjcik7CisgICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KGRyYXdhYmxlU3VyZmFjZSk7CisjZW5kaWYgLy8gZGVmaW5lZChYUF9VTklYKQogfQog
CiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZl
bnQpCiB7Ci0gICAgTlBFdmVudCBucEV2ZW50OwotICAgIAotICAgIC8qIEZJWE1FOiBTeW50aGVz
aXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91Z2ggKi8KLQogICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBp
ZiAoIWRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKworICAgIGlmIChtX2lzV2luZG93ZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCB4RXZlbnQ7CisjaWYgZGVmaW5lZChYUF9V
TklYKQorICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpLT5nZGtF
dmVudEtleSgpOworCisgICAgeEV2ZW50LnR5cGUgPSAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50KSA/IDIgOiAzOyAvLyBLZXlQcmVzcy9SZWxlYXNlIGdldCB1bnNl
dCBzb21ld2hlcmUKKyAgICB4RXZlbnQueGtleS5yb290ID0gZ2V0Um9vdFdpbmRvdyhtX3BhcmVu
dEZyYW1lKTsKKyAgICB4RXZlbnQueGtleS5zdWJ3aW5kb3cgPSAwOyAvLyB3ZSBoYXZlIG5vIGNo
aWxkIHdpbmRvdworICAgIHhFdmVudC54a2V5LnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7Cisg
ICAgeEV2ZW50LnhrZXkuc3RhdGUgPSBnZGtFdmVudC0+c3RhdGU7IC8vIEdka01vZGlmaWVyVHlw
ZSBtaXJyb3JzIHhsaWIgc3RhdGUgbWFza3MKKyAgICB4RXZlbnQueGtleS5rZXljb2RlID0gZ2Rr
RXZlbnQtPmhhcmR3YXJlX2tleWNvZGU7CisgICAgeEV2ZW50LnhrZXkuc2FtZV9zY3JlZW4gPSB0
cnVlOworCisgICAgLy8gTk9URTogQXMgdGhlIFhFdmVudHMgc2VudCB0byB0aGUgcGx1Zy1pbiBh
cmUgc3ludGhlc2l6ZWQgYW5kIHRoZXJlIGlzIG5vdCBhIG5hdGl2ZSB3aW5kb3cKKyAgICAvLyBj
b3JyZXNwb25kaW5nIHRvIHRoZSBwbHVnLWluIHJlY3RhbmdsZSwgc29tZSBvZiB0aGUgbWVtYmVy
cyBvZiB0aGUgWEV2ZW50IHN0cnVjdHVyZXMgYXJlIG5vdAorICAgIC8vIHNldCB0byB0aGVpciBu
b3JtYWwgWHNlcnZlciB2YWx1ZXMuIGUuZy4gS2V5IGV2ZW50cyBkb24ndCBoYXZlIGEgcG9zaXRp
b24uCisgICAgLy8gc291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OUEV2
ZW50CisgICAgeEV2ZW50LnhrZXkueCA9IDA7CisgICAgeEV2ZW50LnhrZXkueSA9IDA7CisgICAg
eEV2ZW50LnhrZXkueF9yb290ID0gMDsKKyAgICB4RXZlbnQueGtleS55X3Jvb3QgPSAwOworI2Vu
ZGlmCisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQogICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2
ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQorI2lmIGRlZmluZWQoWFBfVU5JWCkKK3N0YXRpYyB1bnNp
Z25lZCBpbnQgaW5wdXRFdmVudFN0YXRlKE1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIE5QRXZl
bnQgbnBFdmVudDsKKyAgICB1bnNpZ25lZCBpbnQgc3RhdGUgPSAwOworICAgIGlmIChldmVudC0+
Y3RybEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBDb250cm9sTWFzazsKKyAgICBpZiAoZXZlbnQt
PnNoaWZ0S2V5KCkpCisgICAgICAgIHN0YXRlIHw9IFNoaWZ0TWFzazsKKyAgICBpZiAoZXZlbnQt
PmFsdEtleSgpKQorICAgICAgICBzdGF0ZSB8PSBNb2QxTWFzazsKKyAgICBpZiAoZXZlbnQtPm1l
dGFLZXkoKSkKKyAgICAgICAgc3RhdGUgfD0gTW9kNE1hc2s7CisgICAgcmV0dXJuIHN0YXRlOwor
fQogCi0gICAgaWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICByZXR1cm47Cit2b2lkIFBsdWdpblZp
ZXc6OmluaXRYRXZlbnQoWEV2ZW50KiB4RXZlbnQpCit7CisgICAgbWVtc2V0KHhFdmVudCwgMCwg
c2l6ZW9mKFhFdmVudCkpOworCisgICAgeEV2ZW50LT54YW55LnNlcmlhbCA9IDA7IC8vIHdlIGFy
ZSB1bmF3YXJlIG9mIHRoZSBsYXN0IHJlcXVlc3QgcHJvY2Vzc2VkIGJ5IFggU2VydmVyCisgICAg
eEV2ZW50LT54YW55LnNlbmRfZXZlbnQgPSBmYWxzZTsKKyAgICB4RXZlbnQtPnhhbnkuZGlzcGxh
eSA9IEdES19ESVNQTEFZKCk7CisgICAgLy8gTk9URTogZXZlbnQtPnhhbnkud2luZG93IGRvZXNu
J3QgYWx3YXlzIGNvcnJlc3BvbmQgdG8gdGhlIC53aW5kb3cgcHJvcGVydHkgb2Ygb3RoZXIgWEV2
ZW50J3MKKyAgICAvLyBidXQgZG9lcyBpbiB0aGUgY2FzZSBvZiBLZXlQcmVzcywgS2V5UmVsZWFz
ZSwgQnV0dG9uUHJlc3MsIEJ1dHRvblJlbGVhc2UsIGFuZCBNb3Rpb25Ob3RpZnkKKyAgICAvLyBl
dmVudHM7IHRodXMsIHRoaXMgaXMgcmlnaHQ6CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBtX3Bh
cmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Cisg
ICAgeEV2ZW50LT54YW55LndpbmRvdyA9IHdpZGdldCA/IEdES19XSU5ET1dfWFdJTkRPVyh3aWRn
ZXQtPndpbmRvdykgOiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRYQnV0dG9uRXZlbnRTcGVjaWZp
Y0ZpZWxkcyhYRXZlbnQqIHhFdmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50
JiBwb3N0Wm9vbVBvcywgRnJhbWUqIHBhcmVudEZyYW1lKQoreworICAgIFhCdXR0b25FdmVudCYg
eGJ1dHRvbiA9IHhFdmVudC0+eGJ1dHRvbjsKKyAgICB4YnV0dG9uLnR5cGUgPSBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCA/IEJ1dHRvblByZXNzIDogQnV0dG9u
UmVsZWFzZTsKKyAgICB4YnV0dG9uLnJvb3QgPSBnZXRSb290V2luZG93KHBhcmVudEZyYW1lKTsK
KyAgICB4YnV0dG9uLnN1YndpbmRvdyA9IDA7CisgICAgeGJ1dHRvbi50aW1lID0gZXZlbnQtPnRp
bWVTdGFtcCgpOworICAgIHhidXR0b24ueCA9IHBvc3Rab29tUG9zLngoKTsKKyAgICB4YnV0dG9u
LnkgPSBwb3N0Wm9vbVBvcy55KCk7CisgICAgeGJ1dHRvbi54X3Jvb3QgPSBldmVudC0+c2NyZWVu
WCgpOworICAgIHhidXR0b24ueV9yb290ID0gZXZlbnQtPnNjcmVlblkoKTsKKyAgICB4YnV0dG9u
LnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50KTsKKyAgICBzd2l0Y2ggKGV2ZW50LT5idXR0
b24oKSkgeworICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICB4YnV0dG9uLmJ1dHRvbiA9
IEJ1dHRvbjI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAg
IHhidXR0b24uYnV0dG9uID0gQnV0dG9uMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZWZ0
QnV0dG9uOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHhidXR0b24uYnV0dG9uID0gQnV0dG9uMTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHhidXR0b24uc2FtZV9zY3JlZW4gPSB0cnVlOwor
fQorCitzdGF0aWMgdm9pZCBzZXRYTW90aW9uRXZlbnRTcGVjaWZpY0ZpZWxkcyhYRXZlbnQqIHhF
dmVudCwgTW91c2VFdmVudCogZXZlbnQsIGNvbnN0IEludFBvaW50JiBwb3N0Wm9vbVBvcywgRnJh
bWUqIHBhcmVudEZyYW1lKQoreworICAgIFhNb3Rpb25FdmVudCYgeG1vdGlvbiA9IHhFdmVudC0+
eG1vdGlvbjsKKyAgICB4bW90aW9uLnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgeG1vdGlvbi5y
b290ID0gZ2V0Um9vdFdpbmRvdyhwYXJlbnRGcmFtZSk7CisgICAgeG1vdGlvbi5zdWJ3aW5kb3cg
PSAwOworICAgIHhtb3Rpb24udGltZSA9IGV2ZW50LT50aW1lU3RhbXAoKTsKKyAgICB4bW90aW9u
LnggPSBwb3N0Wm9vbVBvcy54KCk7CisgICAgeG1vdGlvbi55ID0gcG9zdFpvb21Qb3MueSgpOwor
ICAgIHhtb3Rpb24ueF9yb290ID0gZXZlbnQtPnNjcmVlblgoKTsKKyAgICB4bW90aW9uLnlfcm9v
dCA9IGV2ZW50LT5zY3JlZW5ZKCk7CisgICAgeG1vdGlvbi5zdGF0ZSA9IGlucHV0RXZlbnRTdGF0
ZShldmVudCk7CisgICAgeG1vdGlvbi5pc19oaW50ID0gTm90aWZ5Tm9ybWFsOworICAgIHhtb3Rp
b24uc2FtZV9zY3JlZW4gPSB0cnVlOworfQogCi0gICAgLyogRklYTUU6IFN5bnRoZXNpemUgYW4g
WEV2ZW50IHRvIHBhc3MgdGhyb3VnaCAqLwotICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBh
Z2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CitzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNw
ZWNpZmljRmllbGRzKFhFdmVudCogeEV2ZW50LCBNb3VzZUV2ZW50KiBldmVudCwgY29uc3QgSW50
UG9pbnQmIHBvc3Rab29tUG9zLCBGcmFtZSogcGFyZW50RnJhbWUpCit7CisgICAgWENyb3NzaW5n
RXZlbnQmIHhjcm9zc2luZyA9IHhFdmVudC0+eGNyb3NzaW5nOworICAgIHhjcm9zc2luZy50eXBl
ID0gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgPyBFbnRlck5v
dGlmeSA6IExlYXZlTm90aWZ5OworICAgIHhjcm9zc2luZy5yb290ID0gZ2V0Um9vdFdpbmRvdyhw
YXJlbnRGcmFtZSk7CisgICAgeGNyb3NzaW5nLnN1YndpbmRvdyA9IDA7CisgICAgeGNyb3NzaW5n
LnRpbWUgPSBldmVudC0+dGltZVN0YW1wKCk7CisgICAgeGNyb3NzaW5nLnggPSBwb3N0Wm9vbVBv
cy55KCk7CisgICAgeGNyb3NzaW5nLnkgPSBwb3N0Wm9vbVBvcy54KCk7CisgICAgeGNyb3NzaW5n
Lnhfcm9vdCA9IGV2ZW50LT5zY3JlZW5YKCk7CisgICAgeGNyb3NzaW5nLnlfcm9vdCA9IGV2ZW50
LT5zY3JlZW5ZKCk7CisgICAgeGNyb3NzaW5nLnN0YXRlID0gaW5wdXRFdmVudFN0YXRlKGV2ZW50
KTsKKyAgICB4Y3Jvc3NpbmcubW9kZSA9IE5vdGlmeU5vcm1hbDsKKyAgICB4Y3Jvc3NpbmcuZGV0
YWlsID0gTm90aWZ5RGV0YWlsTm9uZTsKKyAgICB4Y3Jvc3Npbmcuc2FtZV9zY3JlZW4gPSB0cnVl
OworICAgIHhjcm9zc2luZy5mb2N1cyA9IGZhbHNlOworfQorI2VuZGlmCiAKK3ZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7Ci0gICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCisKKyAgICBpZiAobV9pc1dp
bmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBOUEV2ZW50IHhFdmVudDsKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpCisgICAgaW5pdFhFdmVudCgmeEV2ZW50KTsKKworICAgIEludFBvaW50IHBv
c3Rab29tUG9zID0gcm91bmRlZEludFBvaW50KG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+YWJzb2x1
dGVUb0xvY2FsKGV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpKTsKKworICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCisgICAgICAgIHNldFhCdXR0b25FdmVudFNwZWNp
ZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBwb3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZSk7Cisg
ICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQp
CisgICAgICAgIHNldFhNb3Rpb25FdmVudFNwZWNpZmljRmllbGRzKCZ4RXZlbnQsIGV2ZW50LCBw
b3N0Wm9vbVBvcywgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZW92ZXJFdmVudCkKKyAgICAgICAgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0Zp
ZWxkcygmeEV2ZW50LCBldmVudCwgcG9zdFpvb21Qb3MsIG1fcGFyZW50RnJhbWUpOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudCh4
RXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAorI2lmIGRl
ZmluZWQoWFBfVU5JWCkKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sK
KyAgICBYRXZlbnQgbnBFdmVudDsKKyAgICBpbml0WEV2ZW50KCZucEV2ZW50KTsKKworICAgIFhG
b2N1c0NoYW5nZUV2ZW50JiBldmVudCA9IG5wRXZlbnQueGZvY3VzOworICAgIGV2ZW50LnR5cGUg
PSA5OyAvLyBGb2N1c0luIGdldHMgdW5zZXQgc29tZXdoZXJlCisgICAgZXZlbnQubW9kZSA9IE5v
dGlmeU5vcm1hbDsKKyAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOworCisgICAg
ZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZv
Y3VzT3V0RXZlbnQoKQoreworICAgIFhFdmVudCBucEV2ZW50OworICAgIGluaXRYRXZlbnQoJm5w
RXZlbnQpOworCisgICAgWEZvY3VzQ2hhbmdlRXZlbnQmIGV2ZW50ID0gbnBFdmVudC54Zm9jdXM7
CisgICAgZXZlbnQudHlwZSA9IDEwOyAvLyBGb2N1c091dCBnZXRzIHVuc2V0IHNvbWV3aGVyZQor
ICAgIGV2ZW50Lm1vZGUgPSBOb3RpZnlOb3JtYWw7CisgICAgZXZlbnQuZGV0YWlsID0gTm90aWZ5
RGV0YWlsTm9uZTsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKyNlbmRpZgor
CiB2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiB7CiAgICAg
V2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKQEAgLTIwOCw3ICs0OTYsOCBAQCB2b2lkIFBsdWdp
blZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiAKIHZvaWQgUGx1Z2luVmlldzo6
c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQogewotICAgIHNldE5QV2luZG93SWZOZWVk
ZWQoKTsKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRl
ZCgpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQpAQCAtMjE2
LDI0ICs1MDUsNTkgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAg
ICBpZiAoIW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnNldHdpbmRvdykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ucFdpbmRvdy54ID0gbV93
aW5kb3dSZWN0LngoKTsKLSAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOwotICAg
IG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKLSAgICBtX25wV2luZG93
LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGRp
ZG4ndCBsb2FkIHN1Y2Vzc2Z1bGx5LCBubyBwb2ludCBpbiBjYWxsaW5nIHNldHdpbmRvdworICAg
IGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIE9uIFVuaXgsIG9ubHkgY2FsbCBwbHVnaW4ncyBzZXR3aW5kb3cg
aWYgaXQncyBmdWxsLXBhZ2Ugb3Igd2luZG93ZWQKKyAgICBpZiAobV9tb2RlICE9IE5QX0ZVTEwg
JiYgbV9tb2RlICE9IE5QX0VNQkVEKQorICAgICAgICByZXR1cm47CiAKLSAgICBtX25wV2luZG93
LmNsaXBSZWN0LmxlZnQgPSBtX2NsaXBSZWN0LngoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0
LnRvcCA9IG1fY2xpcFJlY3QueSgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBt
X2NsaXBSZWN0LndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX2Ns
aXBSZWN0LmhlaWdodCgpOworICAgIC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybVBsdWdpbldpZGdl
dCBzdGlsbCBleGlzdHMKKyAgICBpZiAobV9pc1dpbmRvd2VkICYmICFwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0
aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2Nh
dGUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogI2lmIGRlZmluZWQoWFBf
VU5JWCkKLSAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKLSAgICAgICAgZ3RrX3h0YmluX3NldF9w
b3NpdGlvbihHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54
KCksIG1fd2luZG93UmVjdC55KCkpOwotICAgICAgICBndGtfeHRiaW5fcmVzaXplKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0
KCkpOwotICAgIH0KKyAgICBpZiAoIW1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKQorICAgICAg
ICByZXR1cm47CisgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UgPSBmYWxzZTsKKyNlbmRp
ZgorCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2luZG93LnggPSBtX3dp
bmRvd1JlY3QueCgpOworICAgICAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3QueSgpOwor
ICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgICAg
IG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdodCgpOworCisgICAgICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOworICAgICAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJlY3QueSgpOworICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC53aWR0aCgpOworICAgICAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuaGVpZ2h0KCk7CisKKyAgICAgICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBt
X3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmYWxsb2NhdGlv
bik7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsK
KyAgICAgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKKyAgICAg
ICAgICAgIGd0a194dGJpbl9yZXNpemUocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dS
ZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KICNlbmRpZgor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgICAgIG1fbnBXaW5k
b3cueSA9IDA7CisKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICAg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSAwOwor
ICAgIH0KKworICAgIC8vIEZMQVNIIFdPUktBUk9VTkQ6IE9ubHkgc2V0IGluaXRpYWxseS4gTXVs
dGlwbGUgY2FsbHMgdG8KKyAgICAvLyBzZXROUFdpbmRvdygpIGNhdXNlIHRoZSBwbHVnaW4gdG8g
Y3Jhc2ggaW4gd2luZG93ZWQgbW9kZS4KKyAgICBpZiAoIW1faXNXaW5kb3dlZCB8fCBtX25wV2lu
ZG93LndpZHRoID09ICh1bnNpZ25lZCBpbnQpLTEgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPT0gKHVu
c2lnbmVkIGludCktMSkgeworICAgICAgICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0
LndpZHRoKCk7CisgICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV93aW5kb3dSZWN0LmhlaWdo
dCgpOworICAgIH0KIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwogICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKQEAgLTMxMiw2ICs2MzYsMTQgQEAgTlBFcnJvciBQbHVnaW5WaWV3
OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCiAgICAg
ICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOwogICAgICAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7CiAKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6CisjaWYg
ZGVmaW5lZChYUF9VTklYKQorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0g
dHJ1ZTsKKyNlbHNlCisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxz
ZTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKICAgICB9CkBAIC00MTUsNyAr
NzQ3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCiAg
ICAgfQogCiAgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQg
LSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOwotICAgIGludmFsaWRhdGVS
ZWN0KHIpOworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyKTsKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKQpAQCAtNDMyLDEyICs3NjQs
NjQgQEAgdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCiAgICAgICAgIGd0a193aWRnZXRf
cXVldWVfZHJhdyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1Q
YWdlQ2xpZW50KCkpOwogfQogCitzdGF0aWMgRGlzcGxheSogZ2V0UGx1Z2luRGlzcGxheSgpCit7
CisgICAgLy8gVGhlIHBsdWdpbiB0b29sa2l0IG1pZ2h0IGhhdmUgYSBkaWZmZXJlbnQgWCBjb25u
ZWN0aW9uIG9wZW4uICBTaW5jZSB3ZSdyZQorICAgIC8vIGEgZ2RrL2d0ayBhcHAsIHdlJ2xsIChw
cm9iYWJseT8pIGhhdmUgdGhlIHNhbWUgWCBjb25uZWN0aW9uIGFzIGFueSBnZGstYmFzZWQKKyAg
ICAvLyBwbHVnaW5zLCBzbyB3ZSBjYW4gcmV0dXJuIHRoYXQuICBXZSBtaWdodCB3YW50IHRvIGFk
ZCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGVyZQorICAgIC8vIGxhdGVyLgorCisjaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIHJldHVybiBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwogc3RhdGlj
IGdib29sZWFuCi1wbHVnX3JlbW92ZWRfY2IoR3RrU29ja2V0ICpzb2NrZXQsIGdwb2ludGVyKQor
cGx1Z19yZW1vdmVkX2NiKEd0a1NvY2tldCogc29ja2V0LCBncG9pbnRlcikKIHsKICAgICByZXR1
cm4gVFJVRTsKIH0KIAorI2lmIGRlZmluZWQoWFBfVU5JWCkKK3N0YXRpYyB2b2lkIGdldFZpc3Vh
bEFuZENvbG9ybWFwKGludCBkZXB0aCwgVmlzdWFsKiogdmlzdWFsLCBDb2xvcm1hcCogY29sb3Jt
YXApCit7CisgICAgKnZpc3VhbCA9IDA7CisgICAgKmNvbG9ybWFwID0gMDsKKworICAgIGludCBy
bWFqLCBybWluOworICAgIGlmIChkZXB0aCA9PSAzMiAmJiAoIVhSZW5kZXJRdWVyeVZlcnNpb24o
R0RLX0RJU1BMQVkoKSwgJnJtYWosICZybWluKSB8fCAocm1haiA9PSAwICYmIHJtaW4gPCA1KSkp
CisgICAgICAgIHJldHVybjsKKworICAgIFhWaXN1YWxJbmZvIHRlbXBsOworICAgIHRlbXBsLnNj
cmVlbiAgPSBnZGtfc2NyZWVuX2dldF9udW1iZXIoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsK
KyAgICB0ZW1wbC5kZXB0aCAgID0gZGVwdGg7CisgICAgdGVtcGwuY19jbGFzcyA9IFRydWVDb2xv
cjsKKyAgICBpbnQgblZpc3VhbHM7CisgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBYR2V0
VmlzdWFsSW5mbyhHREtfRElTUExBWSgpLCBWaXN1YWxTY3JlZW5NYXNrIHwgVmlzdWFsRGVwdGhN
YXNrIHwgVmlzdWFsQ2xhc3NNYXNrLCAmdGVtcGwsICZuVmlzdWFscyk7CisKKyAgICBpZiAoIW5W
aXN1YWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGVwdGggPT0gMzIpIHsKKyAgICAg
ICAgZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgblZpc3VhbHM7ICsraWR4KSB7CisgICAgICAgICAg
ICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoR0RL
X0RJU1BMQVkoKSwgdmlzdWFsSW5mb1tpZHhdLnZpc3VhbCk7CisgICAgICAgICAgICBpZiAoZm9y
bWF0LT50eXBlID09IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzaykg
eworICAgICAgICAgICAgICAgICAqdmlzdWFsID0gdmlzdWFsSW5mb1tpZHhdLnZpc3VhbDsKKyAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgfSBl
bHNlCisgICAgICAgICp2aXN1YWwgPSB2aXN1YWxJbmZvWzBdLnZpc3VhbDsKKworICAgIFhGcmVl
KHZpc3VhbEluZm8pOworCisgICAgaWYgKCp2aXN1YWwpCisgICAgICAgICpjb2xvcm1hcCA9IFhD
cmVhdGVDb2xvcm1hcChHREtfRElTUExBWSgpLCBHREtfUk9PVF9XSU5ET1coKSwgKnZpc3VhbCwg
QWxsb2NOb25lKTsKK30KKyNlbmRpZgorCiBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQo
KQogewogICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CkBAIC00NTIsMjYgKzgzNiwzMyBAQCBib29s
IFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldygwKTsKICAgICB9CiAKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CiAjaWYg
ZGVmaW5lZChYUF9VTklYKQotICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIGlmICht
X25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfc29ja2V0
X25ldygpKTsKKyAgICAgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9w
YXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSwg
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnX3JlbW92ZWQiLCBHX0NBTExCQUNLKHBsdWdfcmVt
b3ZlZF9jYiksIE5VTEwpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNldFBsYXRmb3Jt
V2lkZ2V0KGd0a194dGJpbl9uZXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCkt
PnBsYXRmb3JtUGFnZUNsaWVudCgpLT53aW5kb3csIDApKTsKKyNlbHNlCiAgICAgICAgIHNldFBs
YXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkpOwogICAgICAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0
Zm9ybVBhZ2VDbGllbnQoKSksIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICJwbHVnX3JlbW92ZWQiLCBHX0NB
TExCQUNLKHBsdWdfcmVtb3ZlZF9jYiksIE5VTEwpOwotICAgIH0gZWxzZSBpZiAobV9pc1dpbmRv
d2VkKQotICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldChndGtfeHRiaW5fbmV3KG1fcGFyZW50RnJh
bWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+d2luZG93LCAw
KSk7Ci0jZWxzZQotICAgIHNldFBsYXRmb3JtV2lkZ2V0KGd0a19zb2NrZXRfbmV3KCkpOwotICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRGcmFtZS0+dmlldygpLT5o
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSk7CiAjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsK
KyAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOworICAgIH0KKwog
ICAgIHNob3coKTsKIAotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgbV9ucFdpbmRv
dy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OwogI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAg
ICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAqd3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCgpOwotCisgICAgICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gbmV3
IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKICAgICAgICAgd3MtPnR5cGUgPSAwOworI2Vu
ZGlmCiAKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZVdpbmRvdzsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgICAgIGlmICht
X25lZWRzWEVtYmVkKSB7CiAgICAgICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSk7CiAgICAgICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKiln
dGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpKTsKQEAg
LTQ4NywyNSArODc4LDYzIEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAg
ICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkt
Pnh0Y2xpZW50Lnh0Y29sb3JtYXA7CiAgICAgICAgIH0KICAgICAgICAgWEZsdXNoICh3cy0+ZGlz
cGxheSk7Ci0KLSAgICAgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CiAjZWxpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfV0lOMzIpCiAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQq
KUdES19XSU5ET1dfSFdORChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT53aW5kb3cpOwogI2VuZGlm
CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJh
d2FibGU7Ci0gICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICAgICAgbV9ucFdpbmRv
dy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAg
ICAgR2RrU2NyZWVuKiBnc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworICAgICAg
ICBHZGtWaXN1YWwqIGd2aXN1YWwgPSBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKGdzY3Jl
ZW4pOworCisgICAgICAgIGlmIChndmlzdWFsLT5kZXB0aCA9PSAzMiB8fCAhbV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgpKSB7
CisgICAgICAgICAgICBnZXRWaXN1YWxBbmRDb2xvcm1hcCgzMiwgJm1fdmlzdWFsLCAmbV9jb2xv
cm1hcCk7CisgICAgICAgICAgICB3cy0+ZGVwdGggPSAzMjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbV92aXN1YWwpIHsKKyAgICAgICAgICAgIGdldFZpc3VhbEFuZENvbG9ybWFwKGd2aXN1
YWwtPmRlcHRoLCAmbV92aXN1YWwsICZtX2NvbG9ybWFwKTsKKyAgICAgICAgICAgIHdzLT5kZXB0
aCA9IGd2aXN1YWwtPmRlcHRoOworICAgICAgICB9CisKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBH
REtfRElTUExBWSgpOworICAgICAgICB3cy0+dmlzdWFsID0gbV92aXN1YWw7CisgICAgICAgIHdz
LT5jb2xvcm1hcCA9IG1fY29sb3JtYXA7CisKKyAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAg
ICAgICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOwor
ICAgICAgICBtX25wV2luZG93LmhlaWdodCA9IC0xOworI2Vsc2UKKyAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2lu
OworICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKICAgICB9CiAKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKwogICAgIC8vIFRP
RE8gcmVtb3ZlIGluIGZhdm9yIG9mIG51bGwgZXZlbnRzLCBsaWtlIG1hYyBwb3J0PwotICAgIGlm
ICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsKSkpCisgICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkgewogICAgICAgICB1cGRhdGVQbHVnaW5X
aWRnZXQoKTsgLy8gd2FzOiBzZXROUFdpbmRvd0lmTmVlZGVkKCksIGJ1dCB0aGlzIGRvZXNuJ3Qg
cHJvZHVjZSAweDAgcmVjdHMgYXQgZmlyc3QgZ28KKyAgICAgICAgc2V0TlBXaW5kb3dJZk5lZWRl
ZCgpOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnBs
YXRmb3JtRGVzdHJveSgpCiB7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGlmIChtX2RyYXdh
YmxlKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUpOwor
ICAgICAgICBtX2RyYXdhYmxlID0gMDsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5W
aWV3OjpoYWx0KCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>