<?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>56067</bug_id>
          
          <creation_ts>2011-03-09 18:14:02 -0800</creation_ts>
          <short_desc>Overlay scrollers in overflow areas need send notifications at appropriate times (showing up, resizing)</short_desc>
          <delta_ts>2012-02-03 08:48:30 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56163</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>364932</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-09 18:14:02 -0800</bug_when>
    <thetext>The view&apos;s scrollbars send notifications through the ScrollAnimator for things like painting, resizing, etc. Scrollbars for overflow areas need to do the same.

&lt;rdar://problem/8944558&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364933</commentid>
    <comment_count>1</comment_count>
      <attachid>85271</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-09 18:14:53 -0800</bug_when>
    <thetext>Created attachment 85271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364939</commentid>
    <comment_count>2</comment_count>
      <attachid>85271</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-03-09 18:27:45 -0800</bug_when>
    <thetext>Comment on attachment 85271
Patch

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

&gt; Source/WebCore/page/FocusController.cpp:416
&gt; +        HashSet&lt;ScrollableArea*&gt;::iterator end = scrollableAreas-&gt;end(); 
&gt; +        for (HashSet&lt;ScrollableArea*&gt;::iterator it = scrollableAreas-&gt;begin(); it != end; ++it) {

These could be const_iterators.

&gt; Source/WebCore/page/FrameView.cpp:2063
&gt; +    HashSet&lt;ScrollableArea*&gt;::iterator end = scrollableAreas-&gt;end(); 
&gt; +    for (HashSet&lt;ScrollableArea*&gt;::iterator it = scrollableAreas-&gt;begin(); it != end; ++it)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364941</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-09 18:31:41 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 85271 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85271&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FocusController.cpp:416
&gt; &gt; +        HashSet&lt;ScrollableArea*&gt;::iterator end = scrollableAreas-&gt;end(); 
&gt; &gt; +        for (HashSet&lt;ScrollableArea*&gt;::iterator it = scrollableAreas-&gt;begin(); it != end; ++it) {
&gt; 
&gt; These could be const_iterators.
&gt; 
&gt; &gt; Source/WebCore/page/FrameView.cpp:2063
&gt; &gt; +    HashSet&lt;ScrollableArea*&gt;::iterator end = scrollableAreas-&gt;end(); 
&gt; &gt; +    for (HashSet&lt;ScrollableArea*&gt;::iterator it = scrollableAreas-&gt;begin(); it != end; ++it)
&gt; 
&gt; Ditto.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365672</commentid>
    <comment_count>4</comment_count>
      <attachid>85271</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-10 16:58:30 -0800</bug_when>
    <thetext>Comment on attachment 85271
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:1873
&gt; +        RenderLayer* layerForLastNode = m_lastNodeUnderMouse &amp;&amp; m_lastNodeUnderMouse-&gt;renderer()
&gt; +                                        ? m_lastNodeUnderMouse-&gt;renderer()-&gt;enclosingLayer() : 0;
&gt; +        RenderLayer* layerForNodeUnderMouse = m_nodeUnderMouse &amp;&amp; m_nodeUnderMouse-&gt;renderer()
&gt; +                                        ? m_nodeUnderMouse-&gt;renderer()-&gt;enclosingLayer() : 0;

I’d like to use a helper function to get the layer for a node so we don’t have these unpleasant ? : expressions. That helper could also be used in EventHandler::mouseMoved.

&gt; Source/WebCore/page/EventHandler.cpp:1877
&gt; +            // The mouse has moved between frames

We normally use periods in this kind of comment.

&gt; Source/WebCore/page/FocusController.cpp:414
&gt; +        HashSet&lt;ScrollableArea*&gt;* scrollableAreas = m_page-&gt;scrollableAreaSet();

Missing check for null.

&gt; Source/WebCore/page/FrameView.cpp:2061
&gt; +    HashSet&lt;ScrollableArea*&gt;* scrollableAreas = page-&gt;scrollableAreaSet();

Missing check for null.

&gt; Source/WebCore/page/Page.cpp:898
&gt; +        m_scrollableAreaSet = new ScrollableAreaSet;

Please use adoptPtr here.

&gt; Source/WebCore/page/Page.h:286
&gt; +        bool pageContainsScrollableArea(ScrollableArea*) const;

Don’t need the word page in this function name. The class is Page.

&gt; Source/WebCore/page/Page.h:287
&gt; +        ScrollableAreaSet* scrollableAreaSet() const { return m_scrollableAreaSet.get(); }

This should probably return a const ScrollableAreaSet* since you only use it to iterate all the areas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365673</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-10 16:59:52 -0800</bug_when>
    <thetext>Thanks Darin! I will address all of your comments before checking in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365714</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-10 17:54:09 -0800</bug_when>
    <thetext>Fixed with revision 80800.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365733</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-10 18:55:32 -0800</bug_when>
    <thetext>It seems like this patch caused all sorts of crashes on Windows 7 bot:
http://build.webkit.org/results/Windows%207%20Release%20(Tests)/r80797%20(10268)/results.html
http://build.webkit.org/results/Windows%207%20Release%20(Tests)/r80800%20(10269)/results.html

blame list:
http://build.webkit.org/builders/Windows%207%20Release%20%28Tests%29/builds/10269</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365735</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-10 18:55:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80800 might have broken Qt Linux Release
The following tests are not passing:
editing/selection/4975120.html
editing/selection/caret-and-focus-ring.html
fast/dom/Window/window-onFocus.html
fast/events/blur-focus-window-should-blur-focus-element.html
fast/events/show-modal-dialog-onblur-onfocus.html
fast/repaint/fixed-move-after-keyboard-scroll.html
plugins/netscape-plugin-setwindow-size-2.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365743</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-10 19:04:47 -0800</bug_when>
    <thetext>I rolled it out in http://trac.webkit.org/changeset/80804 for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365750</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-10 19:20:53 -0800</bug_when>
    <thetext>Also caused similar failures on GTK:
http://build.webkit.org/builders/GTK%20Linux%2032-bit%20Debug/builds/14301
http://build.webkit.org/builders/GTK%20Linux%2064-bit%20Debug/builds/20246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365768</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-10 19:39:46 -0800</bug_when>
    <thetext>Looks like it also caused crashes in FocusController::setActive on Leopard: http://build.webkit.org/results/Leopard%20Intel%20Debug%20(Tests)/r80803%20(27453)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365769</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-10 19:41:12 -0800</bug_when>
    <thetext>The Windows crash log say a null dereference is happening here:

FAULTING_SOURCE_CODE:  
  2064:         return;
  2065: 
  2066:     HashSet&lt;ScrollableArea*&gt;::const_iterator end = scrollableAreas-&gt;end(); 
  2067:     for (HashSet&lt;ScrollableArea*&gt;::const_iterator it = scrollableAreas-&gt;begin(); it != end; ++it)
&gt; 2068:         (*it)-&gt;scrollAnimator()-&gt;contentAreaWillPaint();
  2069: }
  2070: 
  2071: #if ENABLE(DASHBOARD_SUPPORT)
  2072: void FrameView::updateDashboardRegions()
  2073: {

I don&apos;t know whether *it was null or scrollAnimator() was null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366078</commentid>
    <comment_count>13</comment_count>
      <attachid>85488</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-11 10:22:06 -0800</bug_when>
    <thetext>Created attachment 85488
Better Patch

Sorry about the crashes. The crashes happen on MacOS X too, and I was able to find a reproducible case. I discovered that when we crashed, the ScrollableArea was garbage. The problem is that we added the ScrollableArea, and were not able to remove it because when the ScrollableArea was destroyed, we no longer had a reference to the Page. Here is a new patch that adds a member variable to the relevant ScrollableArea classes to keep a weak pointer to Page so that they don&apos;t have to rely on Frames and/or Renderers having Pages still. This patch fixes the reproducible case that I found. 

However, I do not have time to give this patch the testing that it needs today, so I do not intend to check it in until I live on it more. I will update the bug once I have done that.

In the meantime, if anyone has comments on the approach or the patch in general, please comment :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366085</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-11 10:26:22 -0800</bug_when>
    <thetext>Attachment 85488 did not pass style-queue:

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

Source/WebCore/page/Page.cpp:198:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366199</commentid>
    <comment_count>15</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-11 12:01:20 -0800</bug_when>
    <thetext>Oops, meant to re-open this when I posted the new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366584</commentid>
    <comment_count>16</comment_count>
      <attachid>85488</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-12 07:58:46 -0800</bug_when>
    <thetext>Comment on attachment 85488
Better Patch

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

Not sure why the patch is not applying on some platforms.

&gt;&gt; Source/WebCore/page/Page.cpp:198
&gt;&gt; +        }
&gt; 
&gt; One line control clauses should not use braces.  [whitespace/braces] [4]

I agree with the style bot on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368141</commentid>
    <comment_count>17</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2011-03-15 19:22:21 -0700</bug_when>
    <thetext>Patch committed with revision 81209.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368363</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-16 09:58:11 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/81209 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548174</commentid>
    <comment_count>19</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-02-02 14:39:51 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=85488) [details]
&gt; Better Patch
&gt; 
&gt; Sorry about the crashes. The crashes happen on MacOS X too, and I was able to find a reproducible case. I discovered that when we crashed, the ScrollableArea was garbage. The problem is that we added the ScrollableArea, and were not able to remove it because when the ScrollableArea was destroyed, we no longer had a reference to the Page. Here is a new patch that adds a member variable to the relevant ScrollableArea classes to keep a weak pointer to Page so that they don&apos;t have to rely on Frames and/or Renderers having Pages still. This patch fixes the reproducible case that I found. 
&gt; 
&gt; However, I do not have time to give this patch the testing that it needs today, so I do not intend to check it in until I live on it more. I will update the bug once I have done that.
&gt; 
&gt; In the meantime, if anyone has comments on the approach or the patch in general, please comment :-)

m_page seems dangerous and redundant. Is it safe to remove the ScrollableArea through Frame::detachFromPage or FrameLoader::detachFromParent so we can remove m_page?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548761</commentid>
    <comment_count>20</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-03 08:48:30 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #13)
&gt; &gt; Created an attachment (id=85488) [details] [details]
&gt; &gt; Better Patch
&gt; &gt; 
&gt; &gt; Sorry about the crashes. The crashes happen on MacOS X too, and I was able to find a reproducible case. I discovered that when we crashed, the ScrollableArea was garbage. The problem is that we added the ScrollableArea, and were not able to remove it because when the ScrollableArea was destroyed, we no longer had a reference to the Page. Here is a new patch that adds a member variable to the relevant ScrollableArea classes to keep a weak pointer to Page so that they don&apos;t have to rely on Frames and/or Renderers having Pages still. This patch fixes the reproducible case that I found. 
&gt; &gt; 
&gt; &gt; However, I do not have time to give this patch the testing that it needs today, so I do not intend to check it in until I live on it more. I will update the bug once I have done that.
&gt; &gt; 
&gt; &gt; In the meantime, if anyone has comments on the approach or the patch in general, please comment :-)
&gt; 
&gt; m_page seems dangerous and redundant. Is it safe to remove the ScrollableArea through Frame::detachFromPage or FrameLoader::detachFromParent so we can remove m_page?

Beth, we are seeing issues where the cached   m_page  (named weak, but in fact just a raw point to page) is cause crashes, likely in middle of its destruction or in rare cases.

I think Yong&apos;s question is pertinent, so we avoid the m_page cache at all. What do you think?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85271</attachid>
            <date>2011-03-09 18:14:53 -0800</date>
            <delta_ts>2011-03-11 10:22:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>16312</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDMtMDkgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg5NDQ1NTg+IE92ZXJsYXkg
c2Nyb2xsZXJzIGluIG92ZXJmbG93IGFyZWFzIG5lZWQgdG8gCisgICAgICAgIHNlbmQgbm90aWZp
Y2F0aW9ucyBhcHByb3ByaWF0ZSB0aW1lcyAoc2hvd2luZyB1cCwgcmVzaXppbmcpCisKKyAgICAg
ICAgVGhlIGdlbmVyYWwgc3RyYXRlZ3kgaGVyZSBpcyB0byBhZGQgYSBIYXNoU2V0IG9mIFNjcm9s
bGFibGVBcmVhcyB0byB0aGUgcGFnZSB0aGF0IAorICAgICAgICBjYW4gYmUgYWNjZXNzZWQgd2hl
biBuZWNlc3NhcnkgdG8gc2VuZCBub3RpZmljYXRpb25zIHRvIGFsbCBTY3JvbGxhYmxlQXJlYXMu
CisKKyAgICAgICAgRmluZCBsYXllcnMgZm9yIHJlbGV2YW50IG5vZGUgYW5kIGlmIHRoZSBsYXll
cnMgYXJlIGluIHRoZSBQYWdlJ3MgU2Nyb2xsYWJsZUFyZWEgCisgICAgICAgIHNldCwgdGhlbiBz
ZW5kIHRoZSByZWxldmFudCBub3RpZmljYXRpb24uCisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUp
OgorCisgICAgICAgIFdoZW4gdGhlIHBhZ2UgaXMgc2V0IGFjdGl2ZSBvciBub3QgYWN0aXZlLCBp
dGVyYXRlIHRocm91Z2ggdGhlIFBhZ2UncyAKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWFzIHRvIHNl
bmQgaGlkZS9zaG93IG5vdGlmaWNhdGlvbnMuIAorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6c2V0QWN0aXZlKToK
KworICAgICAgICBXaGVuIGEgRnJhbWVWaWV3IGlzIGNyZWF0ZWQsIGFkZCBpdCB0byB0aGUgU2Ny
b2xsYWJsZUFyZWEgc2V0LiBXaGVuIGl0J3MgCisgICAgICAgIGRlc3Ryb3llZCwgcmVtb3ZlIGl0
LgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6RnJhbWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6fkZyYW1lVmll
dyk6CisKKyAgICAgICAgSXRlcmF0ZSB0aHJvdWdoIHRoZSBQYWdlJ3MgU2Nyb2xsYWJsZUFyZWFz
IHRvIHNlbmQgdGhlIHBhaW50IG5vdGlmaWNhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6bm90aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCk6CisgICAgICAgICogcGFn
ZS9GcmFtZVZpZXcuaDoKKworICAgICAgICBBZGQgdGhlIG5ldyBTY3JvbGxhYmxlQXJlYSBzZXQu
CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmFkZFNj
cm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbW92ZVNjcm9sbGFibGVB
cmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnBhZ2VDb250YWluc1Njcm9sbGFibGVBcmVh
KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNjcm9s
bGFibGVBcmVhU2V0KToKKworICAgICAgICBub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVhV2lsbFBh
aW50KCkgaXMgYSBkdW1teSBmdW5jdGlvbiBpbXBsZW1lbnRlZCBpbiBGcmFtZVZpZXcuCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3Ojpub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVhV2lsbFBhaW50KToKKworICAgICAgICBDYWxs
IG5vdGlmeVBhZ2VUaGF0Q29udGVudEFyZWFXaWxsUGFpbnQoKSBpbnN0ZWFkIG9mIGNhbGxpbmcg
CisgICAgICAgIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkganVzdCBmb3IgdGhlIFNjcm9sbFZpZXcu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwYWludCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVmlldy5oOgorCisgICAgICAgIEFkZC9yZW1vdmUgU2Nyb2xsYWJsZUFyZWFzIHRv
IHRoZSBzZXQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpSZW5kZXJEYXRhR3JpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJEYXRhR3JpZDo6flJlbmRlckRhdGFHcmlkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94
OjpSZW5kZXJMaXN0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6On5SZW5k
ZXJMaXN0Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorCisgICAgICAgIFNob3VsZCBoYXZlIGltcGxl
bWVudGVkIHRoaXMgU2Nyb2xsYWJsZUFyZWEtaW50ZXJmYWNlIGZ1bmN0aW9uIGEgd2hpbGUgYWdv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRNb3VzZVBvc2l0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKwogMjAxMS0wMy0wOSAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlh
dHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA4MDQ4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ0OCw2ICsxNDQ4LDE1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNv
bnN0IFBsYXQKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKKyAgICBp
ZiAoTm9kZSogbm9kZSA9IGhvdmVyZWROb2RlLmlubmVyTm9kZSgpKSB7CisgICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKSkgeworICAgICAgICAgICAg
aWYgKFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHBhZ2UtPnBhZ2VDb250YWluc1Njcm9sbGFibGVBcmVhKGxheWVy
KSkKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbEFuaW1hdG9yKCktPm1vdXNlTW92
ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgIGZy
YW1lVmlldy0+c2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsgIAog
CkBAIC0xODU4LDIxICsxODY3LDM0IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVNb3VzZUV2
ZW50VGFyZ2UKIAogICAgIC8vIEZpcmUgbW91c2VvdXQvbW91c2VvdmVyIGlmIHRoZSBtb3VzZSBo
YXMgc2hpZnRlZCB0byBhIGRpZmZlcmVudCBub2RlLgogICAgIGlmIChmaXJlTW91c2VPdmVyT3V0
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgd2lsbCBvbmx5IGNvcnJlY3RseSBoYW5k
bGUgdHJhbnNpdGlvbnMgYmV0d2VlbiBmcmFtZXMgd2l0aCBzY3JvbGxiYXJzLAotICAgICAgICAv
LyBub3QgdHJhbnNpdGlvbnMgYmV0d2VlbiBvdmVyZmxvdyByZWdpb25zLCBvciB0cmFuc2l0aW9u
cyBiZXR3ZWVuIHR3byBmcmFtZXMKLSAgICAgICAgLy8gdGhhdCBkb24ndCBoYXZlIHNjcm9sbGJh
cnMgY29udGFpbmVkIHdpdGhpbiBhIGZyYW1lIHRoYXQgZG9lcy4KKyAgICAgICAgUmVuZGVyTGF5
ZXIqIGxheWVyRm9yTGFzdE5vZGUgPSBtX2xhc3ROb2RlVW5kZXJNb3VzZSAmJiBtX2xhc3ROb2Rl
VW5kZXJNb3VzZS0+cmVuZGVyZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gbV9sYXN0Tm9kZVVuZGVyTW91c2UtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCkgOiAwOworICAgICAgICBSZW5kZXJMYXllciogbGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSA9IG1f
bm9kZVVuZGVyTW91c2UgJiYgbV9ub2RlVW5kZXJNb3VzZS0+cmVuZGVyZXIoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbV9ub2RlVW5kZXJNb3VzZS0+cmVuZGVy
ZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IDA7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1l
LT5wYWdlKCk7CisKICAgICAgICAgaWYgKG1fbGFzdE5vZGVVbmRlck1vdXNlICYmICghbV9ub2Rl
VW5kZXJNb3VzZSB8fCBtX25vZGVVbmRlck1vdXNlLT5kb2N1bWVudCgpICE9IG1fZnJhbWUtPmRv
Y3VtZW50KCkpKSB7CisgICAgICAgICAgICAvLyBUaGUgbW91c2UgaGFzIG1vdmVkIGJldHdlZW4g
ZnJhbWVzCiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9sYXN0Tm9kZVVuZGVyTW91
c2UtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpKQogICAgICAgICAgICAgICAgICAgICBmcmFtZVZp
ZXctPnNjcm9sbEFuaW1hdG9yKCktPm1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKICAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChwYWdlICYmIChsYXllckZvckxhc3ROb2RlICYmICgh
bGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSB8fCBsYXllckZvck5vZGVVbmRlck1vdXNlICE9IGxheWVy
Rm9yTGFzdE5vZGUpKSkgeworICAgICAgICAgICAgLy8gVGhlIG1vdXNlIGhhcyBtb3ZlZCBiZXR3
ZWVuIGxheWVycworICAgICAgICAgICAgaWYgKHBhZ2UtPnBhZ2VDb250YWluc1Njcm9sbGFibGVB
cmVhKGxheWVyRm9yTGFzdE5vZGUpKQorICAgICAgICAgICAgICAgIGxheWVyRm9yTGFzdE5vZGUt
PnNjcm9sbEFuaW1hdG9yKCktPm1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZVVuZGVyTW91c2UgJiYgKCFtX2xhc3ROb2RlVW5k
ZXJNb3VzZSB8fCBtX2xhc3ROb2RlVW5kZXJNb3VzZS0+ZG9jdW1lbnQoKSAhPSBtX2ZyYW1lLT5k
b2N1bWVudCgpKSkgeworICAgICAgICAgICAgLy8gVGhlIG1vdXNlIGhhcyBtb3ZlZCBiZXR3ZWVu
IGZyYW1lcwogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fbm9kZVVuZGVyTW91c2Ut
PmRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBmcmFtZS0+dmlldygpKQogICAgICAgICAgICAgICAgICAgICBmcmFtZVZpZXct
PnNjcm9sbEFuaW1hdG9yKCktPm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CiAgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAocGFnZSAmJiAobGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSAm
JiAoIWxheWVyRm9yTGFzdE5vZGUgfHwgbGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSAhPSBsYXllckZv
ckxhc3ROb2RlKSkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBtb3VzZSBoYXMgbW92ZWQgYmV0d2Vl
biBsYXllcnMKKyAgICAgICAgICAgIGlmIChwYWdlLT5wYWdlQ29udGFpbnNTY3JvbGxhYmxlQXJl
YShsYXllckZvck5vZGVVbmRlck1vdXNlKSkKKyAgICAgICAgICAgICAgICBsYXllckZvck5vZGVV
bmRlck1vdXNlLT5zY3JvbGxBbmltYXRvcigpLT5tb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9sYXN0Tm9kZVVuZGVyTW91c2UgJiYg
bV9sYXN0Tm9kZVVuZGVyTW91c2UtPmRvY3VtZW50KCkgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
ODA0ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxMCwxMSArNDEwLDE1IEBAIHZvaWQgRm9jdXNDb250cm9sbGVyOjpzZXRB
Y3RpdmUoYm9vbCBhY3QKICAgICAgICAgICAgIHZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZO
ZWVkZWRSZWN1cnNpdmUoKTsKICAgICAgICAgICAgIHZpZXctPnVwZGF0ZUNvbnRyb2xUaW50cygp
OwogICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9wb2dhdGUgdG8g
YWxsIFNjcm9sbGFibGVBcmVhcy4KLSAgICAgICAgaWYgKCFhY3RpdmUpCi0gICAgICAgICAgICB2
aWV3LT5zY3JvbGxBbmltYXRvcigpLT5jb250ZW50QXJlYURpZEhpZGUoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdmlldy0+c2Nyb2xsQW5pbWF0b3IoKS0+Y29udGVudEFyZWFEaWRTaG93
KCk7CisKKyAgICAgICAgSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+KiBzY3JvbGxhYmxlQXJlYXMg
PSBtX3BhZ2UtPnNjcm9sbGFibGVBcmVhU2V0KCk7CisgICAgICAgIEhhc2hTZXQ8U2Nyb2xsYWJs
ZUFyZWEqPjo6aXRlcmF0b3IgZW5kID0gc2Nyb2xsYWJsZUFyZWFzLT5lbmQoKTsgCisgICAgICAg
IGZvciAoSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+OjppdGVyYXRvciBpdCA9IHNjcm9sbGFibGVB
cmVhcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoIWFjdGl2
ZSkKKyAgICAgICAgICAgICAgICAoKml0KS0+c2Nyb2xsQW5pbWF0b3IoKS0+Y29udGVudEFyZWFE
aWRIaWRlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKCppdCktPnNjcm9s
bEFuaW1hdG9yKCktPmNvbnRlbnRBcmVhRGlkU2hvdygpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgZm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5wYWdlQWN0aXZhdGlvbkNoYW5n
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDgwNDg5KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNiArMTM2LDExIEBAIEZyYW1lVmlldzo6RnJhbWVWaWV3KEZyYW1lKiBmcmFtZSkKICAgICAs
IG1fc2Nyb2xsQ29ybmVyKDApCiB7CiAgICAgaW5pdCgpOworCisgICAgaWYgKG1fZnJhbWUpIHsK
KyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBw
YWdlLT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICB9CiB9CiAKIFBhc3NSZWZQdHI8RnJh
bWVWaWV3PiBGcmFtZVZpZXc6OmNyZWF0ZShGcmFtZSogZnJhbWUpCkBAIC0xNzcsNiArMTgyLDkg
QEAgRnJhbWVWaWV3Ojp+RnJhbWVWaWV3KCkKICAgICBBU1NFUlQobV9hY3Rpb25TY2hlZHVsZXIt
PmlzRW1wdHkoKSk7CiAKICAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPnJlbW92ZVNjcm9sbGFibGVB
cmVhKHRoaXMpOworCiAgICAgICAgIEFTU0VSVChtX2ZyYW1lLT52aWV3KCkgIT0gdGhpcyB8fCAh
bV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpOwogICAgICAgICBSZW5kZXJQYXJ0KiByZW5kZXJl
ciA9IG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT53aWRnZXQoKSA9PSB0aGlzKQpAQCAtMjA0Nyw2ICsyMDU1LDE1IEBAIHZvaWQgRnJh
bWVWaWV3OjpkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY28KICAgICByZXR1cm4gcGFnZS0+Y2hyb21l
KCktPmNsaWVudCgpLT5kaWRDb21wbGV0ZVJ1YmJlckJhbmRGb3JNYWluRnJhbWUoaW5pdGlhbE92
ZXJoYW5nKTsKIH0KIAordm9pZCBGcmFtZVZpZXc6Om5vdGlmeVBhZ2VUaGF0Q29udGVudEFyZWFX
aWxsUGFpbnQoKSBjb25zdAoreworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7Cisg
ICAgSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+KiBzY3JvbGxhYmxlQXJlYXMgPSBwYWdlLT5zY3Jv
bGxhYmxlQXJlYVNldCgpOworICAgIEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPjo6aXRlcmF0b3Ig
ZW5kID0gc2Nyb2xsYWJsZUFyZWFzLT5lbmQoKTsgCisgICAgZm9yIChIYXNoU2V0PFNjcm9sbGFi
bGVBcmVhKj46Oml0ZXJhdG9yIGl0ID0gc2Nyb2xsYWJsZUFyZWFzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zY3JvbGxBbmltYXRvcigpLT5jb250ZW50QXJlYVdp
bGxQYWludCgpOworfQorCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogdm9pZCBGcmFt
ZVZpZXc6OnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMoKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCShyZXZpc2lvbiA4MDQ4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw2ICszMTYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxUbyhjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENv
bXBsZXRlUnViYmVyQmFuZChjb25zdCBJbnRTaXplJikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0OworCiAgICAgdm9p
ZCBkZWZlcnJlZFJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPEZyYW1lVmlldz4qKTsKICAgICB2b2lk
IGRvRGVmZXJyZWRSZXBhaW50cygpOwogICAgIHZvaWQgdXBkYXRlRGVmZXJyZWRSZXBhaW50RGVs
YXkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gODA0ODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTIsNiArODkyLDI3IEBA
IHZvaWQgUGFnZTo6ZGlkU3RvcFBsdWdpbihIYWx0YWJsZVBsdWdpbioKICAgICAgICAgbV9wbHVn
aW5IYWx0ZXItPmRpZFN0b3BQbHVnaW4ob2JqKTsKIH0KIAordm9pZCBQYWdlOjphZGRTY3JvbGxh
YmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgaWYgKCFtX3Nj
cm9sbGFibGVBcmVhU2V0KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhU2V0ID0gbmV3IFNjcm9s
bGFibGVBcmVhU2V0OworICAgIG1fc2Nyb2xsYWJsZUFyZWFTZXQtPmFkZChzY3JvbGxhYmxlQXJl
YSk7Cit9CisKK3ZvaWQgUGFnZTo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYVNldCkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fc2Nyb2xsYWJsZUFyZWFTZXQtPnJlbW92ZShzY3JvbGxhYmxlQXJl
YSk7Cit9CisKK2Jvb2wgUGFnZTo6cGFnZUNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJl
YVNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVh
U2V0LT5jb250YWlucyhzY3JvbGxhYmxlQXJlYSk7Cit9CisKICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiB2b2lkIFBhZ2U6OmNoZWNrRnJhbWVDb3VudENvbnNpc3RlbmN5KCkgY29uc3QKIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5oCShyZXZpc2lvbiA4MDQ4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiAgICAgY2xhc3MgUmVuZGVyVGhlbWU7CiAgICAg
Y2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKyAgICBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKICAgICBj
bGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOwogICAgIGNsYXNzIFNldHRpbmdzOwogICAgIGNsYXNz
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwpAQCAtMjc5LDYgKzI4MCwxMiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0SmF2YVNjcmlwdFVSTHNBcmVBbGxvd2VkKGJvb2wp
OwogICAgICAgICBib29sIGphdmFTY3JpcHRVUkxzQXJlQWxsb3dlZCgpIGNvbnN0OwogCisgICAg
ICAgIHR5cGVkZWYgSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+IFNjcm9sbGFibGVBcmVhU2V0Owor
ICAgICAgICB2b2lkIGFkZFNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKik7CisgICAgICAg
IHZvaWQgcmVtb3ZlU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqKTsKKyAgICAgICAgYm9v
bCBwYWdlQ29udGFpbnNTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSopIGNvbnN0OworICAg
ICAgICBTY3JvbGxhYmxlQXJlYVNldCogc2Nyb2xsYWJsZUFyZWFTZXQoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGFibGVBcmVhU2V0LmdldCgpOyB9CisKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cg
bW9yZSB0aGFuIGEgY2VydGFpbiBudW1iZXIgb2YgZnJhbWVzIGluIGEgcGFnZS4KICAgICAgICAg
Ly8gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB1cHBlciBib3VuZCwgYW5kIG90aGVyd2lz
ZSBtdXR1YWxseQogICAgICAgICAvLyByZWN1cnNpdmUgZnJhbWVzZXQgcGFnZXMgY2FuIHF1aWNr
bHkgYnJpbmcgdGhlIHByb2dyYW0gdG8gaXRzIGtuZWVzCkBAIC0zODYsNiArMzkzLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWaWV3cG9ydEFyZ3VtZW50cyBtX3ZpZXdwb3J0QXJn
dW1lbnRzOwogCiAgICAgICAgIGRvdWJsZSBtX21pbmltdW1UaW1lckludGVydmFsOworCisgICAg
ICAgIE93blB0cjxTY3JvbGxhYmxlQXJlYVNldD4gbV9zY3JvbGxhYmxlQXJlYVNldDsKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcAkocmV2aXNpb24gODA0ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNywxMCBAQCB2b2lk
IFNjcm9sbFZpZXc6OmRpZENvbXBsZXRlUnViYmVyQmFuZChjCiB7CiB9CiAKK3ZvaWQgU2Nyb2xs
Vmlldzo6bm90aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0Cit7Cit9CisK
IHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQp
CiB7CiAgICAgaW50IGhvcml6b250YWxPZmZzZXQgPSBvZmZzZXQueCgpOwpAQCAtOTE0LDcgKzkx
OCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKICAgICBpZiAo
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpICYmICFjb250ZXh0LT51cGRhdGluZ0NvbnRyb2xU
aW50cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzY3JvbGxBbmltYXRvcigpLT5jb250ZW50
QXJlYVdpbGxQYWludCgpOworICAgIG5vdGlmeVBhZ2VUaGF0Q29udGVudEFyZWFXaWxsUGFpbnQo
KTsKICAgICAKICAgICBJbnRSZWN0IGRvY3VtZW50RGlydHlSZWN0ID0gcmVjdDsKICAgICBkb2N1
bWVudERpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gODA0ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCgpIGNv
bnN0OwogCiAgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92
ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KICAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAkocmV2aXNpb24gODA0ODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwxMCArNDYsMTQgQEAgc3RhdGljIGNvbnN0IGludCBjRGVmYXVsdFdpZHRoID0g
MzAwOwogUmVuZGVyRGF0YUdyaWQ6OlJlbmRlckRhdGFHcmlkKEVsZW1lbnQqIGVsdCkKICAgICA6
IFJlbmRlckJsb2NrKGVsdCkKIHsKKyAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lKCktPnBhZ2Uo
KSkKKyAgICAgICAgcGFnZS0+YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CiB9CiAKIFJlbmRlckRh
dGFHcmlkOjp+UmVuZGVyRGF0YUdyaWQoKQogeworICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUo
KS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKIH0K
IAogdm9pZCBSZW5kZXJEYXRhR3JpZDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRp
ZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gODA0ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4
LDExIEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJCb3hNb2RlbE8KICAgICAgICAg
bV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7CiAgICAgICAgIG1faGFzVmlzaWJs
ZUNvbnRlbnQgPSByZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEU7CiAg
ICAgfQorCisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJlbmRlcmVyLT5mcmFtZSgpKSB7CisgICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmFk
ZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5SZW5kZXJM
YXllcigpCkBAIC0xOTcsNiArMjAyLDExIEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQog
ICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5yZXNpemVMYXllckRlc3Ryb3llZCgp
OwogICAgIH0KIAorICAgIGlmIChGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgpKSB7
CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBh
Z2UtPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KKwogICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CiAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNh
bFNjcm9sbGJhcik7CiAKQEAgLTE3OTAsNiArMTgwMCwxMSBAQCBpbnQgUmVuZGVyTGF5ZXI6OnZp
c2libGVXaWR0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fd2lkdGg7CiB9CiAKK0ludFBvaW50IFJl
bmRlckxheWVyOjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJl
bmRlcmVyKCktPmZyYW1lKCkgPyByZW5kZXJlcigpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
Y3VycmVudE1vdXNlUG9zaXRpb24oKSA6IEludFBvaW50KCk7Cit9CisKIEludFNpemUgUmVuZGVy
TGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QK
IHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDgwNDg5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNiw2ICs1MjYs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
dmlzaWJsZVdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQ
b3NpdGlvbigpIGNvbnN0OwogCiAgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4K
ICAgICB2b2lkIHNjcm9sbFRvKGludCB4LCBpbnQgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4MDQ4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIs
MTAgKzgyLDE1IEBAIFJlbmRlckxpc3RCb3g6OlJlbmRlckxpc3RCb3goRWxlbWVudCogZWwKICAg
ICAsIG1fb3B0aW9uc1dpZHRoKDApCiAgICAgLCBtX2luZGV4T2Zmc2V0KDApCiB7CisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmFkZFNjcm9sbGFi
bGVBcmVhKHRoaXMpOwogfQogCiBSZW5kZXJMaXN0Qm94Ojp+UmVuZGVyTGlzdEJveCgpCiB7Cisg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPnJlbW92
ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCiAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoZmFs
c2UpOwogfQogCg==
</data>
<flag name="review"
          id="77373"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85488</attachid>
            <date>2011-03-11 10:22:06 -0800</date>
            <delta_ts>2011-03-12 07:58:45 -0800</delta_ts>
            <desc>Better Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>20478</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwODU5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEgQEAKKzIwMTEtMDMtMTEgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg5NDQ1NTg+IE92ZXJsYXkg
c2Nyb2xsZXJzIGluIG92ZXJmbG93IGFyZWFzIG5lZWQgdG8gCisgICAgICAgIHNlbmQgbm90aWZp
Y2F0aW9ucyBhcHByb3ByaWF0ZSB0aW1lcyAoc2hvd2luZyB1cCwgcmVzaXppbmcpCisgICAgICAg
IC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU2MDY3CisKKyAgICAgICAgVGhlIGdlbmVyYWwgc3RyYXRlZ3kgaGVyZSBp
cyB0byBhZGQgYSBIYXNoU2V0IG9mIFNjcm9sbGFibGVBcmVhcyB0byB0aGUgcGFnZSB0aGF0IAor
ICAgICAgICBjYW4gYmUgYWNjZXNzZWQgd2hlbiBuZWNlc3NhcnkgdG8gc2VuZCBub3RpZmljYXRp
b25zIHRvIGFsbCBTY3JvbGxhYmxlQXJlYXMuIEluIAorICAgICAgICB0dXJuLCBhbGwgb2YgdGhl
IFNjcm9sbGFibGVBcmVhIGNsYXNzZXMgdGhhdCBhZGQgdGhlbXNlbHZlcyB0byB0aGUgSGFzaFNl
dCBtdXN0IAorICAgICAgICBrZWVwIGEgd2VhayBwb2ludGVyIHRvIFBhZ2Ugc28gdGhhdCB0aGV5
IGNhbiByZW1vdmUgdGhlbXNlbHZlcyB3aXRob3V0IHJlbHlpbmcgb24gCisgICAgICAgIEZyYW1l
cyBvciBSZW5kZXJlcnMgdG8gc3RpbGwgaGF2ZSByZWZlcmVuY2VzLgorCisgICAgICAgIEZpbmQg
bGF5ZXJzIGZvciByZWxldmFudCBub2RlIGFuZCBpZiB0aGUgbGF5ZXJzIGFyZSBpbiB0aGUgUGFn
ZSdzIFNjcm9sbGFibGVBcmVhIAorICAgICAgICBzZXQsIHRoZW4gc2VuZCB0aGUgcmVsZXZhbnQg
bm90aWZpY2F0aW9uLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmxheWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
Om1vdXNlTW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVNb3Vz
ZUV2ZW50VGFyZ2V0Tm9kZSk6CisKKyAgICAgICAgV2hlbiB0aGUgcGFnZSBpcyBzZXQgYWN0aXZl
IG9yIG5vdCBhY3RpdmUsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgUGFnZSdzIAorICAgICAgICBTY3Jv
bGxhYmxlQXJlYXMgdG8gc2VuZCBoaWRlL3Nob3cgbm90aWZpY2F0aW9ucy4gCisgICAgICAgICog
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9s
bGVyOjpzZXRBY3RpdmUpOgorCisgICAgICAgIFdoZW4gYSBGcmFtZVZpZXcgaXMgY3JlYXRlZCwg
YWRkIGl0IHRvIHRoZSBTY3JvbGxhYmxlQXJlYSBzZXQuIFdoZW4gaXQncyAKKyAgICAgICAgZGVz
dHJveWVkLCByZW1vdmUgaXQuCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp+RnJhbWVWaWV3KToKKworICAgICAgICBJdGVyYXRlIHRocm91Z2ggdGhlIFBhZ2Un
cyBTY3JvbGxhYmxlQXJlYXMgdG8gc2VuZCB0aGUgcGFpbnQgbm90aWZpY2F0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVhV2lsbFBhaW50
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpkaXNjb25uZWN0RnJvbVBhZ2UpOgorCisgICAgICAgIEFkZCB0aGUgbmV3IFNjcm9sbGFi
bGVBcmVhIHNldC4KKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6flBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6YWRkU2Nyb2xsYWJsZUFyZWEp
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6Y29udGFpbnNTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgICogcGFn
ZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzY3JvbGxhYmxlQXJlYVNldCk6CisK
KyAgICAgICAgbm90aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCgpIGlzIGEgZHVtbXkg
ZnVuY3Rpb24gaW1wbGVtZW50ZWQgaW4gRnJhbWVWaWV3LgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6bm90aWZ5UGFnZVRo
YXRDb250ZW50QXJlYVdpbGxQYWludCk6CisgICAgICAgIAorICAgICAgICBDYWxsIG5vdGlmeVBh
Z2VUaGF0Q29udGVudEFyZWFXaWxsUGFpbnQoKSBpbnN0ZWFkIG9mIGNhbGxpbmcgCisgICAgICAg
IGNvbnRlbnRBcmVhV2lsbFBhaW50KCkganVzdCBmb3IgdGhlIFNjcm9sbFZpZXcuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xs
Vmlldy5oOgorCisgICAgICAgIEFkZC9yZW1vdmUgU2Nyb2xsYWJsZUFyZWFzIHRvIHRoZSBzZXQu
IEFkZCBuZXcgZGlzY29ubmVjdEZyb21QYWdlKCkuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xs
YWJsZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpkaXNjb25uZWN0
RnJvbVBhZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJEYXRhR3JpZDo6UmVuZGVyRGF0YUdyaWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6On5SZW5kZXJEYXRhR3JpZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckRhdGFHcmlkLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEYXRhR3Jp
ZDo6ZGlzY29ubmVjdEZyb21QYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpc2Nv
bm5lY3RGcm9tUGFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6UmVuZGVyTGlzdEJveCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp+UmVuZGVyTGlzdEJveCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OmRpc2Nvbm5lY3RGcm9tUGFnZSk6CisKKyAgICAgICAgU2hvdWxkIGhhdmUgaW1wbGVtZW50ZWQg
dGhpcyBTY3JvbGxhYmxlQXJlYS1pbnRlcmZhY2UgZnVuY3Rpb24gYSB3aGlsZSBhZ28uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3VycmVudE1vdXNlUG9zaXRpb24pOgorCiAyMDEx
LTAzLTExICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgRml4IGNyYXNoZXMgaW4gZG9tL2h0bWwvbGV2ZWwyL2h0bWwvSFRNTElucHV0RWxlbWVudCou
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA4MDgwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQzOSw2ICsxNDM5LDIyIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZURvdWJs
ZUNsaWMKICAgICByZXR1cm4gc3dhbGxvd01vdXNlVXBFdmVudCB8fCBzd2FsbG93Q2xpY2tFdmVu
dCB8fCBzd2FsbG93TW91c2VSZWxlYXNlRXZlbnQ7CiB9CiAKK3N0YXRpYyBSZW5kZXJMYXllciog
bGF5ZXJGb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwor
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKIGJvb2wgRXZlbnRIYW5k
bGVyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAg
SGl0VGVzdFJlc3VsdCBob3ZlcmVkTm9kZSA9IEhpdFRlc3RSZXN1bHQoSW50UG9pbnQoKSk7CkBA
IC0xNDQ4LDYgKzE0NjQsMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoY29uc3Qg
UGxhdAogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAorICAgIGlmIChS
ZW5kZXJMYXllciogbGF5ZXIgPSBsYXllckZvck5vZGUoaG92ZXJlZE5vZGUuaW5uZXJOb2RlKCkp
KSB7CisgICAgICAgIGlmIChwYWdlLT5jb250YWluc1Njcm9sbGFibGVBcmVhKGxheWVyKSkKKyAg
ICAgICAgICAgIGxheWVyLT5zY3JvbGxBbmltYXRvcigpLT5tb3VzZU1vdmVkSW5Db250ZW50QXJl
YSgpOworICAgIH0KKwogICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPnZp
ZXcoKSkKICAgICAgICAgZnJhbWVWaWV3LT5zY3JvbGxBbmltYXRvcigpLT5tb3VzZU1vdmVkSW5D
b250ZW50QXJlYSgpOyAgCiAKQEAgLTE4NTgsMjEgKzE4NzksMzIgQEAgdm9pZCBFdmVudEhhbmRs
ZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZQogCiAgICAgLy8gRmlyZSBtb3VzZW91dC9tb3VzZW92
ZXIgaWYgdGhlIG1vdXNlIGhhcyBzaGlmdGVkIHRvIGEgZGlmZmVyZW50IG5vZGUuCiAgICAgaWYg
KGZpcmVNb3VzZU92ZXJPdXQpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSB3aWxsIG9u
bHkgY29ycmVjdGx5IGhhbmRsZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIGZyYW1lcyB3aXRoIHNjcm9s
bGJhcnMsCi0gICAgICAgIC8vIG5vdCB0cmFuc2l0aW9ucyBiZXR3ZWVuIG92ZXJmbG93IHJlZ2lv
bnMsIG9yIHRyYW5zaXRpb25zIGJldHdlZW4gdHdvIGZyYW1lcwotICAgICAgICAvLyB0aGF0IGRv
bid0IGhhdmUgc2Nyb2xsYmFycyBjb250YWluZWQgd2l0aGluIGEgZnJhbWUgdGhhdCBkb2VzLgor
ICAgICAgICBSZW5kZXJMYXllciogbGF5ZXJGb3JMYXN0Tm9kZSA9IGxheWVyRm9yTm9kZShtX2xh
c3ROb2RlVW5kZXJNb3VzZS5nZXQoKSk7CisgICAgICAgIFJlbmRlckxheWVyKiBsYXllckZvck5v
ZGVVbmRlck1vdXNlID0gbGF5ZXJGb3JOb2RlKG1fbm9kZVVuZGVyTW91c2UuZ2V0KCkpOworICAg
ICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworCiAgICAgICAgIGlmIChtX2xhc3RO
b2RlVW5kZXJNb3VzZSAmJiAoIW1fbm9kZVVuZGVyTW91c2UgfHwgbV9ub2RlVW5kZXJNb3VzZS0+
ZG9jdW1lbnQoKSAhPSBtX2ZyYW1lLT5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgLy8gVGhl
IG1vdXNlIGhhcyBtb3ZlZCBiZXR3ZWVuIGZyYW1lcy4KICAgICAgICAgICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBtX2xhc3ROb2RlVW5kZXJNb3VzZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewogICAg
ICAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGZyYW1lVmlldy0+c2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VFeGl0
ZWRDb250ZW50QXJlYSgpOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHBhZ2Ug
JiYgKGxheWVyRm9yTGFzdE5vZGUgJiYgKCFsYXllckZvck5vZGVVbmRlck1vdXNlIHx8IGxheWVy
Rm9yTm9kZVVuZGVyTW91c2UgIT0gbGF5ZXJGb3JMYXN0Tm9kZSkpKSB7CisgICAgICAgICAgICAv
LyBUaGUgbW91c2UgaGFzIG1vdmVkIGJldHdlZW4gbGF5ZXJzLgorICAgICAgICAgICAgaWYgKHBh
Z2UtPmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEobGF5ZXJGb3JMYXN0Tm9kZSkpCisgICAgICAgICAg
ICAgICAgbGF5ZXJGb3JMYXN0Tm9kZS0+c2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VFeGl0ZWRDb250
ZW50QXJlYSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlVW5kZXJN
b3VzZSAmJiAoIW1fbGFzdE5vZGVVbmRlck1vdXNlIHx8IG1fbGFzdE5vZGVVbmRlck1vdXNlLT5k
b2N1bWVudCgpICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICAvLyBUaGUg
bW91c2UgaGFzIG1vdmVkIGJldHdlZW4gZnJhbWVzLgogICAgICAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IG1fbm9kZVVuZGVyTW91c2UtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpKQogICAgICAg
ICAgICAgICAgICAgICBmcmFtZVZpZXctPnNjcm9sbEFuaW1hdG9yKCktPm1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhKCk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocGFnZSAmJiAo
bGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSAmJiAoIWxheWVyRm9yTGFzdE5vZGUgfHwgbGF5ZXJGb3JO
b2RlVW5kZXJNb3VzZSAhPSBsYXllckZvckxhc3ROb2RlKSkpIHsKKyAgICAgICAgICAgIC8vIFRo
ZSBtb3VzZSBoYXMgbW92ZWQgYmV0d2VlbiBsYXllcnMuCisgICAgICAgICAgICBpZiAocGFnZS0+
Y29udGFpbnNTY3JvbGxhYmxlQXJlYShsYXllckZvck5vZGVVbmRlck1vdXNlKSkKKyAgICAgICAg
ICAgICAgICBsYXllckZvck5vZGVVbmRlck1vdXNlLT5zY3JvbGxBbmltYXRvcigpLT5tb3VzZUVu
dGVyZWRDb250ZW50QXJlYSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9s
YXN0Tm9kZVVuZGVyTW91c2UgJiYgbV9sYXN0Tm9kZVVuZGVyTW91c2UtPmRvY3VtZW50KCkgIT0g
bV9mcmFtZS0+ZG9jdW1lbnQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gODA4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMCwxMSArNDEwLDE2IEBAIHZvaWQg
Rm9jdXNDb250cm9sbGVyOjpzZXRBY3RpdmUoYm9vbCBhY3QKICAgICAgICAgICAgIHZpZXctPnVw
ZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKICAgICAgICAgICAgIHZpZXct
PnVwZGF0ZUNvbnRyb2xUaW50cygpOwogICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBwcm9wb2dhdGUgdG8gYWxsIFNjcm9sbGFibGVBcmVhcy4KLSAgICAgICAgaWYgKCFh
Y3RpdmUpCi0gICAgICAgICAgICB2aWV3LT5zY3JvbGxBbmltYXRvcigpLT5jb250ZW50QXJlYURp
ZEhpZGUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmlldy0+c2Nyb2xsQW5pbWF0b3Io
KS0+Y29udGVudEFyZWFEaWRTaG93KCk7CisKKyAgICAgICAgaWYgKGNvbnN0IEhhc2hTZXQ8U2Ny
b2xsYWJsZUFyZWEqPiogc2Nyb2xsYWJsZUFyZWFzID0gbV9wYWdlLT5zY3JvbGxhYmxlQXJlYVNl
dCgpKSB7CisgICAgICAgICAgICBIYXNoU2V0PFNjcm9sbGFibGVBcmVhKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHNjcm9sbGFibGVBcmVhcy0+ZW5kKCk7IAorICAgICAgICAgICAgZm9yIChIYXNo
U2V0PFNjcm9sbGFibGVBcmVhKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2Nyb2xsYWJsZUFyZWFz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdGl2
ZSkKKyAgICAgICAgICAgICAgICAgICAgKCppdCktPnNjcm9sbEFuaW1hdG9yKCktPmNvbnRlbnRB
cmVhRGlkSGlkZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
KCppdCktPnNjcm9sbEFuaW1hdG9yKCktPmNvbnRlbnRBcmVhRGlkU2hvdygpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgZm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVj
dGlvbigpLT5wYWdlQWN0aXZhdGlvbkNoYW5nZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAJKHJldmlzaW9uIDgwODA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDEzIEBAIEZyYW1lVmlldzo6RnJh
bWVWaWV3KEZyYW1lKiBmcmFtZSkKICAgICAsIG1fc2Nyb2xsQ29ybmVyKDApCiB7CiAgICAgaW5p
dCgpOworCisgICAgaWYgKG1fZnJhbWUpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgIG1fcGFnZSA9IHBhZ2U7CisgICAgICAgICAgICBt
X3BhZ2UtPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICB9CisgICAgfQogfQogCiBQ
YXNzUmVmUHRyPEZyYW1lVmlldz4gRnJhbWVWaWV3OjpjcmVhdGUoRnJhbWUqIGZyYW1lKQpAQCAt
MTc2LDYgKzE4Myw5IEBAIEZyYW1lVmlldzo6fkZyYW1lVmlldygpCiAgICAgQVNTRVJUKCFtX3Nj
cm9sbENvcm5lcik7CiAgICAgQVNTRVJUKG1fYWN0aW9uU2NoZWR1bGVyLT5pc0VtcHR5KCkpOwog
CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKKwogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIEFTU0VSVChtX2ZyYW1lLT52aWV3
KCkgIT0gdGhpcyB8fCAhbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpOwogICAgICAgICBSZW5k
ZXJQYXJ0KiByZW5kZXJlciA9IG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKTsKQEAgLTIwNDgsNiAr
MjA1OCwxOCBAQCB2b2lkIEZyYW1lVmlldzo6ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvCiAgICAg
cmV0dXJuIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+ZGlkQ29tcGxldGVSdWJiZXJCYW5kRm9y
TWFpbkZyYW1lKGluaXRpYWxPdmVyaGFuZyk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3Ojpub3RpZnlQ
YWdlVGhhdENvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0g
bV9mcmFtZS0+cGFnZSgpOworICAgIGNvbnN0IEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiogc2Ny
b2xsYWJsZUFyZWFzID0gcGFnZS0+c2Nyb2xsYWJsZUFyZWFTZXQoKTsKKyAgICBpZiAoIXNjcm9s
bGFibGVBcmVhcykKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxTY3JvbGxhYmxlQXJl
YSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzY3JvbGxhYmxlQXJlYXMtPmVuZCgpOyAKKyAgICBm
b3IgKEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY3JvbGxh
YmxlQXJlYXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnNjcm9s
bEFuaW1hdG9yKCktPmNvbnRlbnRBcmVhV2lsbFBhaW50KCk7Cit9CisKICNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRGFzaGJvYXJkUmVnaW9ucygp
CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDgwODA4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMx
Niw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvKGNvbnN0IEludFNpemUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUm
KSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVhV2ls
bFBhaW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsg
bV9wYWdlID0gMDsgfQorCiAgICAgdm9pZCBkZWZlcnJlZFJlcGFpbnRUaW1lckZpcmVkKFRpbWVy
PEZyYW1lVmlldz4qKTsKICAgICB2b2lkIGRvRGVmZXJyZWRSZXBhaW50cygpOwogICAgIHZvaWQg
dXBkYXRlRGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKQEAgLTQxNSw2ICs0MTgsOCBAQCBwcml2YXRl
OgogICAgIC8vIFJlbmRlcmVyIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyLgogICAg
IFJlbmRlclNjcm9sbGJhclBhcnQqIG1fc2Nyb2xsQ29ybmVyOwogCisgICAgUGFnZSogbV9wYWdl
OworCiAgICAgc3RhdGljIGRvdWJsZSBzX2RlZmVycmVkUmVwYWludERlbGF5OwogICAgIHN0YXRp
YyBkb3VibGUgc19pbml0aWFsRGVmZXJyZWRSZXBhaW50RGVsYXlEdXJpbmdMb2FkaW5nOwogICAg
IHN0YXRpYyBkb3VibGUgc19tYXhEZWZlcnJlZFJlcGFpbnREZWxheUR1cmluZ0xvYWRpbmc7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDgwODA4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSwxMyBAQCBQYWdlOjp+
UGFnZSgpCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCiAgICAgICAgIGZyYW1lLT5wYWdlRGVz
dHJveWVkKCk7CiAKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYVNldCkgeworICAgICAgICBTY3Jv
bGxhYmxlQXJlYVNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zY3JvbGxhYmxlQXJlYVNldC0+
ZW5kKCk7IAorICAgICAgICBmb3IgKFNjcm9sbGFibGVBcmVhU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc2Nyb2xsYWJsZUFyZWFTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgKCppdCktPmRpc2Nvbm5lY3RGcm9tUGFnZSgpOworICAgICAgICB9CisgICAgfQor
CiAgICAgbV9lZGl0b3JDbGllbnQtPnBhZ2VEZXN0cm95ZWQoKTsKIAogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCh0aGlzKTsKQEAgLTg5Miw2ICs4
OTksMjcgQEAgdm9pZCBQYWdlOjpkaWRTdG9wUGx1Z2luKEhhbHRhYmxlUGx1Z2luKgogICAgICAg
ICBtX3BsdWdpbkhhbHRlci0+ZGlkU3RvcFBsdWdpbihvYmopOwogfQogCit2b2lkIFBhZ2U6OmFk
ZFNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICBp
ZiAoIW1fc2Nyb2xsYWJsZUFyZWFTZXQpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFTZXQgPSBh
ZG9wdFB0cihuZXcgU2Nyb2xsYWJsZUFyZWFTZXQpOworICAgIG1fc2Nyb2xsYWJsZUFyZWFTZXQt
PmFkZChzY3JvbGxhYmxlQXJlYSk7Cit9CisKK3ZvaWQgUGFnZTo6cmVtb3ZlU2Nyb2xsYWJsZUFy
ZWEoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQoreworICAgIGlmICghbV9zY3JvbGxh
YmxlQXJlYVNldCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2Nyb2xsYWJsZUFyZWFTZXQtPnJl
bW92ZShzY3JvbGxhYmxlQXJlYSk7Cit9CisKK2Jvb2wgUGFnZTo6Y29udGFpbnNTY3JvbGxhYmxl
QXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3Njcm9sbGFibGVBcmVhU2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1f
c2Nyb2xsYWJsZUFyZWFTZXQtPmNvbnRhaW5zKHNjcm9sbGFibGVBcmVhKTsKK30KKwogI2lmICFB
U1NFUlRfRElTQUJMRUQKIHZvaWQgUGFnZTo6Y2hlY2tGcmFtZUNvdW50Q29uc2lzdGVuY3koKSBj
b25zdAogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDgwODA4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKICAgICBjbGFzcyBSZW5k
ZXJUaGVtZTsKICAgICBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOworICAgIGNsYXNzIFNjcm9sbGFi
bGVBcmVhOwogICAgIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CiAgICAgY2xhc3MgU2V0dGlu
Z3M7CiAgICAgY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC0yNzksNiArMjgwLDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0VVJMc0Fy
ZUFsbG93ZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgamF2YVNjcmlwdFVSTHNBcmVBbGxvd2VkKCkg
Y29uc3Q7CiAKKyAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFNjcm9sbGFibGVBcmVhKj4gU2Nyb2xs
YWJsZUFyZWFTZXQ7CisgICAgICAgIHZvaWQgYWRkU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFy
ZWEqKTsKKyAgICAgICAgdm9pZCByZW1vdmVTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSop
OworICAgICAgICBib29sIGNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqKSBj
b25zdDsKKyAgICAgICAgY29uc3QgU2Nyb2xsYWJsZUFyZWFTZXQqIHNjcm9sbGFibGVBcmVhU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYVNldC5nZXQoKTsgfQorCiAgICAgICAg
IC8vIERvbid0IGFsbG93IG1vcmUgdGhhbiBhIGNlcnRhaW4gbnVtYmVyIG9mIGZyYW1lcyBpbiBh
IHBhZ2UuCiAgICAgICAgIC8vIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgdXBwZXIgYm91
bmQsIGFuZCBvdGhlcndpc2UgbXV0dWFsbHkKICAgICAgICAgLy8gcmVjdXJzaXZlIGZyYW1lc2V0
IHBhZ2VzIGNhbiBxdWlja2x5IGJyaW5nIHRoZSBwcm9ncmFtIHRvIGl0cyBrbmVlcwpAQCAtMzg2
LDYgKzM5Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmlld3BvcnRBcmd1bWVu
dHMgbV92aWV3cG9ydEFyZ3VtZW50czsKIAogICAgICAgICBkb3VibGUgbV9taW5pbXVtVGltZXJJ
bnRlcnZhbDsKKworICAgICAgICBPd25QdHI8U2Nyb2xsYWJsZUFyZWFTZXQ+IG1fc2Nyb2xsYWJs
ZUFyZWFTZXQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDgwODA4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw2
ICszMjcsMTAgQEAgdm9pZCBTY3JvbGxWaWV3OjpkaWRDb21wbGV0ZVJ1YmJlckJhbmQoYwogewog
fQogCit2b2lkIFNjcm9sbFZpZXc6Om5vdGlmeVBhZ2VUaGF0Q29udGVudEFyZWFXaWxsUGFpbnQo
KSBjb25zdAoreworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldChjb25zdCBJ
bnRQb2ludCYgb2Zmc2V0KQogewogICAgIGludCBob3Jpem9udGFsT2Zmc2V0ID0gb2Zmc2V0Lngo
KTsKQEAgLTkxNyw3ICs5MjEsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogCiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSAmJiAhY29udGV4dC0+
dXBkYXRpbmdDb250cm9sVGludHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2Nyb2xsQW5p
bWF0b3IoKS0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKKyAgICBub3RpZnlQYWdlVGhhdENvbnRl
bnRBcmVhV2lsbFBhaW50KCk7CiAgICAgCiAgICAgSW50UmVjdCBkb2N1bWVudERpcnR5UmVjdCA9
IHJlY3Q7CiAgICAgZG9jdW1lbnREaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDgwODA4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw2ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IElu
dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnViYmVyQmFuZChjb25zdCBJ
bnRTaXplJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VUaGF0Q29udGVudEFy
ZWFXaWxsUGFpbnQoKSBjb25zdDsKIAogICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFy
ZWEuCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9u
IDgwODA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFBv
aW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gSW50UG9pbnQoKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29uc3QgSW50U2l6ZSYpIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBkaXNjb25u
ZWN0RnJvbVBhZ2UoKSB7IH0KKwogcHJpdmF0ZToKICAgICAvLyBOT1RFOiBPbmx5IGNhbGxlZCBm
cm9tIHRoZSBTY3JvbGxBbmltYXRvci4KICAgICBmcmllbmQgY2xhc3MgU2Nyb2xsQW5pbWF0b3I7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJl
dmlzaW9uIDgwODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDE2IEBAIHN0YXRpYyBjb25zdCBpbnQg
Y0RlZmF1bHRXaWR0aCA9IDMwMDsKIFJlbmRlckRhdGFHcmlkOjpSZW5kZXJEYXRhR3JpZChFbGVt
ZW50KiBlbHQpCiAgICAgOiBSZW5kZXJCbG9jayhlbHQpCiB7CisgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBmcmFtZSgpLT5wYWdlKCkpIHsKKyAgICAgICAgbV9wYWdlID0gcGFnZTsKKyAgICAgICAgbV9w
YWdlLT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICB9CiB9CiAKIFJlbmRlckRhdGFHcmlk
Ojp+UmVuZGVyRGF0YUdyaWQoKQogeworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+
cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAko
cmV2aXNpb24gODA4MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdy
aWQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UG9pbnQg
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNv
bnN0IEludFBvaW50JikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21Q
YWdlKCkgeyBtX3BhZ2UgPSAwOyB9CisKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisK
KyAgICBQYWdlKiBtX3BhZ2U7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDgwODA4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwxMyBA
QCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94TW9kZWxPCiAgICAgICAgIG1fdmlz
aWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250
ZW50ID0gcmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFOwogICAgIH0K
KworICAgIGlmIChGcmFtZSogZnJhbWUgPSByZW5kZXJlci0+ZnJhbWUoKSkgeworICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgIG1fcGFnZSA9IHBh
Z2U7CisgICAgICAgICAgICBtX3BhZ2UtPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAg
ICB9CisgICAgfQogfQogCiBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKQEAgLTE5Nyw2ICsy
MDQsOSBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKICAgICAgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+cmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKICAgICB9CiAKKyAgICBpZiAo
bV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCiAg
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKICAgICBkZXN0cm95U2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKIApAQCAtMTc5MCw2ICsxODAwLDExIEBAIGludCBS
ZW5kZXJMYXllcjo6dmlzaWJsZVdpZHRoKCkgY29uc3QKICAgICByZXR1cm4gbV93aWR0aDsKIH0K
IAorSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcmVuZGVyZXIoKS0+ZnJhbWUoKSA/IHJlbmRlcmVyKCktPmZyYW1lKCktPmV2
ZW50SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpIDogSW50UG9pbnQoKTsKK30KKwog
SW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyKSBjb25zdAogewogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gODA4MDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTI2LDYgKzUyNiw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRz
U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50
IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29u
bmVjdEZyb21QYWdlKCkgeyBtX3BhZ2UgPSAwOyB9CiAKICAgICAvLyBOT1RFOiBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNj
cm9sbGFibGVBcmVhLgogICAgIHZvaWQgc2Nyb2xsVG8oaW50IHgsIGludCB5KTsKQEAgLTcwMCw2
ICs3MDMsOCBAQCBwcml2YXRlOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBPd25QdHI8UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CiAjZW5kaWYKKworICAgIFBh
Z2UqIG1fcGFnZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDgwODA4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MiwxMCArODIsMTcgQEAgUmVuZGVyTGlzdEJveDo6UmVuZGVyTGlzdEJveChFbGVtZW50
KiBlbAogICAgICwgbV9vcHRpb25zV2lkdGgoMCkKICAgICAsIG1faW5kZXhPZmZzZXQoMCkKIHsK
KyAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lKCktPnBhZ2UoKSkgeworICAgICAgICBtX3BhZ2Ug
PSBwYWdlOworICAgICAgICBtX3BhZ2UtPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0K
IH0KIAogUmVuZGVyTGlzdEJveDo6flJlbmRlckxpc3RCb3goKQogeworICAgIGlmIChtX3BhZ2Up
CisgICAgICAgIG1fcGFnZS0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKICAgICBzZXRI
YXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gODA4MDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEz
LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Q7CiAKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBtX3BhZ2UgPSAwOyB9CisKICAgICAv
LyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNj
cm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgogICAgIHZvaWQgc2Nyb2xsVG8oaW50IG5l
d09mZnNldCk7CiAKQEAgLTEzOCw2ICsxNDAsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2luZGV4
T2Zmc2V0OwogCiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOworCisgICAgUGFnZSogbV9w
YWdlOwogfTsKIAogaW5saW5lIFJlbmRlckxpc3RCb3gqIHRvUmVuZGVyTGlzdEJveChSZW5kZXJP
YmplY3QqIG9iamVjdCkK
</data>
<flag name="review"
          id="77621"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>