<?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>19069</bug_id>
          
          <creation_ts>2008-05-14 20:39:56 -0700</creation_ts>
          <short_desc>Renderers for wx</short_desc>
          <delta_ts>2008-08-02 09:36:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit wx</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Wx</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Dunn">robin</reporter>
          <assigned_to name="Kevin Ollivier">kevino</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>kevino</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>80450</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Dunn">robin</who>
    <bug_when>2008-05-14 20:39:56 -0700</bug_when>
    <thetext>This patch adds some renderers for wxWebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80451</commentid>
    <comment_count>1</comment_count>
      <attachid>21153</attachid>
    <who name="Robin Dunn">robin</who>
    <bug_when>2008-05-14 20:40:49 -0700</bug_when>
    <thetext>Created attachment 21153
Renderers for wx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81730</commentid>
    <comment_count>2</comment_count>
      <attachid>21153</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-05-28 07:55:20 -0700</bug_when>
    <thetext>Comment on attachment 21153
Renderers for wx

&gt;+#include &quot;WebKit/wx/WebView.h&quot;
&gt;+
&gt; #include &lt;wx/defs.h&gt;
&gt; #include &lt;wx/renderer.h&gt;
&gt; #include &lt;wx/dcclient.h&gt;

Should this be #include &lt;wx/WebView.h&gt;?

&gt;+void RenderThemeWx::adjustRepaintRect(const RenderObject* o, IntRect&amp; r)
&gt;+{
&gt;+    switch (o-&gt;style()-&gt;appearance()) {
&gt;+        case MenulistAppearance: {
&gt;+            r.setWidth(r.width() + 100); // = inflateRect(r, popupButtonSizes()[[popupButton() controlSize]], popupButtonMargins());
&gt;+            //fprintf(stderr, &quot;caling adjustRepaintRect, width is %d...\n&quot;, r.width());
&gt;+            break;
&gt;+        }
&gt;+        default:
&gt;+            break;
&gt;+    }
&gt;+}

Please remove commented-out code (especially debugging statements :).

&gt;     if (!isEnabled(o))
&gt;         flags |= wxCONTROL_DISABLED;
&gt;-
&gt;+        
&gt;     EAppearance appearance = o-&gt;style()-&gt;appearance();
&gt;     if (supportsFocus(o-&gt;style()-&gt;appearance()) &amp;&amp; isFocused(o))
&gt;         flags |= wxCONTROL_FOCUSED;
&gt;@@ -204,16 +233,18 @@
&gt;     if (isPressed(o))
&gt;         flags |= wxCONTROL_PRESSED;
&gt;     
&gt;-    if (appearance == PushButtonAppearance || appearance == ButtonAppearance)
&gt;+    if (appearance == PushButtonAppearance || appearance == ButtonAppearance) 
&gt;         wxRendererNative::Get().DrawPushButton(window, *dc, r, flags);

Gratuitous whitespace changes.

&gt;+int RenderThemeWx::popupInternalPaddingLeft(RenderStyle*) const 
&gt;+{ 
&gt;+    return 6; 
&gt; }
&gt; 
&gt;+int RenderThemeWx::popupInternalPaddingRight(RenderStyle*) const 
&gt;+{
&gt;+#ifdef __WXMAC__
&gt;+    return 22;
&gt;+#else
&gt;+    return 20;
&gt;+#endif
&gt;+}
&gt;+
&gt;+int RenderThemeWx::popupInternalPaddingTop(RenderStyle*) const 
&gt;+{
&gt;+    return 2;
&gt;+}
&gt;+
&gt;+int RenderThemeWx::popupInternalPaddingBottom(RenderStyle*) const
&gt;+{ 
&gt;+    return 2; 
&gt;+}

Might be nice to use const int variables (to match RenderThemeMac.mm and RenderThemeSafari.cpp), but not necessary.

Needs a ChangeLog entry (as do your other patches :).  See &lt;http://webkit.org/coding/contributing.html&gt; for details.

r- for commented-out code, #include formatting and no ChangeLog entry, but otherwise the patch looks good!  Thanks, Robin!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85497</commentid>
    <comment_count>3</comment_count>
      <attachid>22165</attachid>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-07-08 16:13:09 -0700</bug_when>
    <thetext>Created attachment 22165
Updated version of Robin&apos;s patch, addressing David&apos;s comments

Regarding the proper include for WebView.h, I&apos;m leaving it as-is as we haven&apos;t decided how we will handle that, but it should be noted that wxWebKit will probably not be made an official part of the wxWidgets project due to the size of WebKit and the fact that most wxWidgets users build from source, meaning that checkouts and builds will take significantly longer. Given that, &lt;wx/WebView.h&gt; may give people the wrong impression that WebView is part of wx proper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86890</commentid>
    <comment_count>4</comment_count>
      <attachid>22165</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-24 11:56:39 -0700</bug_when>
    <thetext>Comment on attachment 22165
Updated version of Robin&apos;s patch, addressing David&apos;s comments

This doesn&apos;t really belong in the file:
+// A good URL for testing form element rendering: http://www.tizag.com/htmlT/forms.php
+

instead you should land a test case as part of WebCore/manual_tests or use one of the existing test cases.

WebCore style omits argument names when they don&apos;t add to the understanding of the method signature:
+    virtual void adjustRepaintRect(const RenderObject* o, IntRect&amp; r);
Both of those should be omited.

This should be in the .cpp file (along with the rest of your changes) and probably with some sort of explanation as to why it&apos;s 21... or maybe you should look up that constant somewhere from a wx call.  21 seems rather arbitrary, and it&apos;s sad to have constants typed manually, since then if wx ever were to change, this code would be wrong.
+    virtual int minimumMenuListSize(RenderStyle*) const { return 21; }


Why is the local variable needed here?
+    IntRect rect = r;
+
+    wxRenderer_DrawChoice(window, *dc, rect, flags);

Shouldn&apos;t wx&apos;s NativeContentPtr (platformContext() return value) just be a wxDC*?

Otherwise this looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87394</commentid>
    <comment_count>5</comment_count>
      <attachid>22554</attachid>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-07-30 10:05:30 -0700</bug_when>
    <thetext>Created attachment 22554
Patch with Eric&apos;s comments addressed

Patch with Eric&apos;s comments addressed. Regarding the wxDC issue, the issue is that the actual class used for the DC is different depending on whether you enable wxGraphicsContext support (i.e. vector-based drawing) or not. The goal is to make vector-based drawing &quot;just work&quot; on all platforms we support, but currently there are issues with that. For example, on Windows, the lack of GDI+ hardware acceleration really hurts performance there. (We&apos;re discussing using the Cairo implementation of wxGraphicsContext there, but it requires some work to get going.) Also, some embedded platforms may not support wxGraphicsContext, so we&apos;re leaving both implementations in the tree for the foreseeable future, as wxWebKit does work reasonably well with even the old drawing context. 

Since both implementations use classes derived from wxDC, but have different APIs, we decided to just cast to the base class when the base class APIs can be used for both implementations.

As for the hardcoded numbers, wx doesn&apos;t yet have a way to get those numbers internally. What we&apos;ll try to do is to &quot;get it right&quot; here in wxWebKit first over time, then move the implementations back into wx once we&apos;ve got the bugs worked out. 

Anyway, hopefully this explains things. :-) Lastly, rather than add to manual_tests, I&apos;ll probably put time into getting DumpRenderTree going when I can. In the meantime, I&apos;ve removed the link.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87641</commentid>
    <comment_count>6</comment_count>
      <attachid>22554</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-01 16:11:12 -0700</bug_when>
    <thetext>Comment on attachment 22554
Patch with Eric&apos;s comments addressed

Looks OK.

Two comments:

1.  Whenever you use a numeric constant, it is always better to use a constant variable.  Because the variable can have a nice long name to describe what the numeric constant means.  In  the case of these 20, 2, 100, etc. values, it would be nice to have either a comment or the use of a constant.  example:

int RenderThemeWx::minimumMenuListSize(RenderStyle*) const 
{ 
   // The minimum menu list size is document at:
  // http://wx.com/my_cool_docs/
    return 21; 
}

or:
        case MenulistAppearance: {
            // The menu pop-down width is documented at:
            // www.wx.com/my_even_cooler_docs
             static const wxMenuPopDownWidth = 100;
            r.setWidth(r.width() + wxMenuPopDownWidth);
            break;
        }

My second comment is:
static_cast&lt;wxDC*&gt;(i.context-&gt;platformContext());

Why can&apos;t platformContext() just be a wxDC*?

In general looks fine.  I don&apos;t need to see the patch again.  You&apos;re a commiter (IIRC), so feel free to make modifications and land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87656</commentid>
    <comment_count>7</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-08-01 17:15:01 -0700</bug_when>
    <thetext>Did my previous comments not answer your questions? Anyway, the current constants are temporary - wx has no method right now to provide the right constants, and we&apos;ll have to do more testing with wxWebKit to determine how to best get those values. Once we do, we&apos;ll fix the problem properly in wx and move this code to use that. The wxDC* question is a bit complicated and I&apos;m not sure how to give an easier answer than the one I gave last time. :(

Landed in r35518.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87658</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-08-01 19:47:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Did my previous comments not answer your questions? Anyway, the current
&gt; constants are temporary - wx has no method right now to provide the right
&gt; constants, and we&apos;ll have to do more testing with wxWebKit to determine how to
&gt; best get those values. Once we do, we&apos;ll fix the problem properly in wx and
&gt; move this code to use that.

What Eric and I meant was that it would be a good idea to define the constants locally in the .cpp file, even if means replacing them later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87691</commentid>
    <comment_count>9</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-08-02 09:36:00 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Did my previous comments not answer your questions? Anyway, the current
&gt; &gt; constants are temporary - wx has no method right now to provide the right
&gt; &gt; constants, and we&apos;ll have to do more testing with wxWebKit to determine how to
&gt; &gt; best get those values. Once we do, we&apos;ll fix the problem properly in wx and
&gt; &gt; move this code to use that.
&gt; 
&gt; What Eric and I meant was that it would be a good idea to define the constants
&gt; locally in the .cpp file, even if means replacing them later.
&gt; 

Yes, I know it&apos;s good policy in general to use defines for constants. In this case, though, RenderTheme has functions whose sole purpose is to return the constant, and any code that needs the constant will call that function, so the usual benefits of using a constant (replace the value in multiple contexts by changing the defined value) don&apos;t apply here. 

i.e. the following code seems rather redundant:

int RenderThemeWx::popupInternalPaddingTop(RenderStyle*) const 
{
    return POPUP_INTERNAL_PADDING_TOP;
}

Don&apos;t defining popupInternalPaddingTop and POPUP_INTERNAL_PADDING_TOP both serve to solve the same problem (a single, centralized place to get the constant value)?

Anyway, I have no problems changing the code to use constants for all the numbers for now, as it should only take 10 mins or so, and I&apos;ll go ahead and commit an update hopefully today. 
 </thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21153</attachid>
            <date>2008-05-14 20:40:49 -0700</date>
            <delta_ts>2008-07-08 16:13:09 -0700</delta_ts>
            <desc>Renderers for wx</desc>
            <filename>webkit-renderer.patch</filename>
            <type>text/plain</type>
            <size>6729</size>
            <attacher name="Robin Dunn">robin</attacher>
            
              <data encoding="base64">SW5kZXg6IC9wcm9qZWN0cy93ay9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS93eC9SZW5kZXJUaGVt
ZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSAvcHJvamVjdHMvd2svV2ViS2l0L1dlYkNvcmUvcGxhdGZv
cm0vd3gvUmVuZGVyVGhlbWVXeC5jcHAJKHJldmlzaW9uIDMzMDM3KQorKysgL3Byb2plY3RzL3dr
L1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw4ICsyOSwxMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKKyNpbmNsdWRlICJXZWJL
aXQvd3gvV2ViVmlldy5oIgorCiAjaW5jbHVkZSA8d3gvZGVmcy5oPgogI2luY2x1ZGUgPHd4L3Jl
bmRlcmVyLmg+CiAjaW5jbHVkZSA8d3gvZGNjbGllbnQuaD4KQEAgLTYwLDEyICs2MywyMiBAQAog
CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywg
SW50UmVjdCYgcik7CisKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0Rmll
bGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCisgICAgdmlydHVhbCBp
bnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDIxOyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKICAgICB2aXJ0dWFs
IGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0
YSYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImLCBj
b25zdCBDb2xvciYpIGNvbnN0OwogCkBAIC03OCw2ICs5MSwxMSBAQAogICAgIAogICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xl
ZnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRl
cm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSopIGNvbnN0OwpAQCAtMTAx
LDYgKzExOSwxOSBAQAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0
eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKK3ZvaWQgUmVu
ZGVyVGhlbWVXeDo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRS
ZWN0JiByKQoreworICAgIHN3aXRjaCAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSB7CisgICAg
ICAgIGNhc2UgTWVudWxpc3RBcHBlYXJhbmNlOiB7CisgICAgICAgICAgICByLnNldFdpZHRoKHIu
d2lkdGgoKSArIDEwMCk7IC8vID0gaW5mbGF0ZVJlY3QociwgcG9wdXBCdXR0b25TaXplcygpW1tw
b3B1cEJ1dHRvbigpIGNvbnRyb2xTaXplXV0sIHBvcHVwQnV0dG9uTWFyZ2lucygpKTsKKyAgICAg
ICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJjYWxpbmcgYWRqdXN0UmVwYWludFJlY3QsIHdpZHRo
IGlzICVkLi4uXG4iLCByLndpZHRoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogYm9vbCBS
ZW5kZXJUaGVtZVd4Ojpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8p
IGNvbnN0CiB7CiAgICAgaWYgKCFpc0VuYWJsZWQobykpCkBAIC0xOTAsMTMgKzIyMSwxMSBAQAog
ewogICAgIHd4V2luZG93KiB3aW5kb3cgPSBvLT52aWV3KCktPmZyYW1lVmlldygpLT5uYXRpdmVX
aW5kb3coKTsKICAgICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4REMqPihpLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICB3eEFTU0VSVChkYy0+SXNPaygpKTsKLQogICAgIGludCBm
bGFncyA9IDA7CiAgICAgCiAgICAgaWYgKCFpc0VuYWJsZWQobykpCiAgICAgICAgIGZsYWdzIHw9
IHd4Q09OVFJPTF9ESVNBQkxFRDsKLQorICAgICAgICAKICAgICBFQXBwZWFyYW5jZSBhcHBlYXJh
bmNlID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwogICAgIGlmIChzdXBwb3J0c0ZvY3VzKG8t
PnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgJiYgaXNGb2N1c2VkKG8pKQogICAgICAgICBmbGFncyB8
PSB3eENPTlRST0xfRk9DVVNFRDsKQEAgLTIwNCwxNiArMjMzLDE4IEBACiAgICAgaWYgKGlzUHJl
c3NlZChvKSkKICAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX1BSRVNTRUQ7CiAgICAgCi0gICAg
aWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvbkFwcGVhcmFuY2UgfHwgYXBwZWFyYW5jZSA9PSBC
dXR0b25BcHBlYXJhbmNlKQorICAgIGlmIChhcHBlYXJhbmNlID09IFB1c2hCdXR0b25BcHBlYXJh
bmNlIHx8IGFwcGVhcmFuY2UgPT0gQnV0dG9uQXBwZWFyYW5jZSkgCiAgICAgICAgIHd4UmVuZGVy
ZXJOYXRpdmU6OkdldCgpLkRyYXdQdXNoQnV0dG9uKHdpbmRvdywgKmRjLCByLCBmbGFncyk7Ci0g
ICAgLy8gVE9ETzogYWRkIGEgcmFkaW8gYnV0dG9uIHJlbmRlcmluZyBBUEkgdG8gd3gKLSAgICAv
L2Vsc2UgaWYoYXBwZWFyYW5jZSA9PSBSYWRpb0FwcGVhcmFuY2UpCisgICAgZWxzZSBpZihhcHBl
YXJhbmNlID09IFJhZGlvQXBwZWFyYW5jZSkgeworICAgICAgICBpZiAoaXNDaGVja2VkKG8pKQor
ICAgICAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0NIRUNLRUQ7ICAgICAgICAKKyAgICAgICAg
d3hSZW5kZXJlcl9EcmF3UmFkaW9CdXR0b24od2luZG93LCAqZGMsIHIsIGZsYWdzKTsKKyAgICB9
CiAgICAgZWxzZSBpZihhcHBlYXJhbmNlID09IENoZWNrYm94QXBwZWFyYW5jZSkgewogICAgICAg
ICBpZiAoaXNDaGVja2VkKG8pKQogICAgICAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0NIRUNL
RUQ7CiAgICAgICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdDaGVja0JveCh3aW5kb3cs
ICpkYywgciwgZmxhZ3MpOwogICAgIH0KLSAgICAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC0yMjQsMTUgKzI1NSw2NCBAQAogCiBib29sIFJlbmRlclRoZW1lV3g6OnBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCiB7Ci0gICAgaS5jb250ZXh0LT5zYXZlKCk7Ci0gICAgaS5jb250ZXh0
LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgaS5jb250ZXh0LT5zZXRTdHJva2VU
aGlja25lc3MoMSk7Ci0gICAgaS5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAw
KSk7Ci0gICAgaS5jb250ZXh0LT5kcmF3UmVjdChyKTsKLSAgICBpLmNvbnRleHQtPnJlc3RvcmUo
KTsKKyAgICB3eFdpbmRvdyogd2luZG93ID0gby0+dmlldygpLT5mcmFtZVZpZXcoKS0+bmF0aXZl
V2luZG93KCk7CisgICAgd3hEQyogZGMgPSBzdGF0aWNfY2FzdDx3eERDKj4oaS5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgd3hSZW5kZXJlcl9EcmF3VGV4dEN0cmwod2luZG93LCAq
ZGMsIHIsIDApOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBSZW5kZXJUaGVtZVd4Ojph
ZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAoreworfQorICAgIAorYm9vbCBSZW5kZXJUaGVtZVd4OjpwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgd3hXaW5kb3cqIHdpbmRvdyA9IG8tPnZpZXcoKS0+
ZnJhbWVWaWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAgIHd4REMqIGRjID0gc3RhdGljX2Nhc3Q8
d3hEQyo+KGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIAorICAgIGludCBmbGFn
cyA9IDA7ICAgICAgCisgICAgaWYgKCFpc0VuYWJsZWQobykpCisgICAgICAgIGZsYWdzIHw9IHd4
Q09OVFJPTF9ESVNBQkxFRDsKKyAgICAgICAgCisgICAgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQobykpCisgICAgICAgIGZsYWdzIHw9IHd4
Q09OVFJPTF9GT0NVU0VEOworCisgICAgaWYgKGlzUHJlc3NlZChvKSkKKyAgICAgICAgZmxhZ3Mg
fD0gd3hDT05UUk9MX1BSRVNTRUQ7CisKKyAgICBJbnRSZWN0IHJlY3QgPSByOworCisgICAgd3hS
ZW5kZXJlcl9EcmF3Q2hvaWNlKHdpbmRvdywgKmRjLCByZWN0LCBmbGFncyk7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorICAgIAorYm9vbCBSZW5kZXJUaGVtZVd4OjpwYWlu
dE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgd3hXaW5kb3cqIHdpbmRvdyA9IG8t
PnZpZXcoKS0+ZnJhbWVWaWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAgIHd4REMqIGRjID0gc3Rh
dGljX2Nhc3Q8d3hEQyo+KGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIAorICAg
IGludCBmbGFncyA9IDA7ICAgICAgCisgICAgaWYgKCFpc0VuYWJsZWQobykpCisgICAgICAgIGZs
YWdzIHw9IHd4Q09OVFJPTF9ESVNBQkxFRDsKKyAgICAgICAgCisgICAgaWYgKHN1cHBvcnRzRm9j
dXMoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQobykpCisgICAgICAgIGZs
YWdzIHw9IHd4Q09OVFJPTF9GT0NVU0VEOworICAgIAorICAgIGlmIChpc1ByZXNzZWQobykpCisg
ICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9QUkVTU0VEOworCisgICAgd3hSZW5kZXJlck5hdGl2
ZTo6R2V0KCkuRHJhd0NvbWJvQm94RHJvcEJ1dHRvbih3aW5kb3csICpkYywgciwgZmxhZ3MpOwor
ICAgICAgICAgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCisgICAgCiBDb2xvciBSZW5kZXJU
aGVtZVd4OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHd4U3lzdGVtU2V0dGluZ3M6OkdldENvbG91cih3eFNZU19DT0xPVVJfSElH
SExJR0hUKTsKQEAgLTI2Miw1ICszNDIsMjkgQEAKICNlbmRpZgogfQogCitpbnQgUmVuZGVyVGhl
bWVXeDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3QgCit7IAor
ICAgIHJldHVybiA2OyAKIH0KIAoraW50IFJlbmRlclRoZW1lV3g6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCAKK3sKKyNpZmRlZiBfX1dYTUFDX18KKyAgICBy
ZXR1cm4gMjI7CisjZWxzZQorICAgIHJldHVybiAyMDsKKyNlbmRpZgorfQorCitpbnQgUmVuZGVy
VGhlbWVXeDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCAKK3sK
KyAgICByZXR1cm4gMjsKK30KKworaW50IFJlbmRlclRoZW1lV3g6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3QKK3sgCisgICAgcmV0dXJuIDI7IAorfQorCit9
CisK
</data>
<flag name="review"
          id="9243"
          type_id="1"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22165</attachid>
            <date>2008-07-08 16:13:09 -0700</date>
            <delta_ts>2008-07-30 10:05:30 -0700</delta_ts>
            <desc>Updated version of Robin&apos;s patch, addressing David&apos;s comments</desc>
            <filename>wx-renderers.patch</filename>
            <type>text/plain</type>
            <size>7514</size>
            <attacher name="Kevin Ollivier">kevino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9SZW5kZXJUaGVtZVd4LmNwcAkocmV2aXNpb24gMzUwNjUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxNCArMjksMTkgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCisjaW5jbHVkZSAiV2ViS2l0
L3d4L1dlYlZpZXcuaCIKKwogI2luY2x1ZGUgPHd4L2RlZnMuaD4KICNpbmNsdWRlIDx3eC9yZW5k
ZXJlci5oPgogI2luY2x1ZGUgPHd4L2RjY2xpZW50Lmg+CiAjaW5jbHVkZSA8d3gvc2Nyb2x3aW4u
aD4KICNpbmNsdWRlIDx3eC9zZXR0aW5ncy5oPgogCisvLyBBIGdvb2QgVVJMIGZvciB0ZXN0aW5n
IGZvcm0gZWxlbWVudCByZW5kZXJpbmc6IGh0dHA6Ly93d3cudGl6YWcuY29tL2h0bWxUL2Zvcm1z
LnBocAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlclRoZW1lV3ggOiBwdWJs
aWMgUmVuZGVyVGhlbWUgewpAQCAtNjAsMTIgKzY1LDIyIEBACiAKICAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKTsKKwogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RT
aXplKFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMjE7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHls
ZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJikgY29uc3Q7
CiAKQEAgLTc4LDYgKzkzLDExIEBACiAgICAgCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwogICAgIHZpcnR1YWwgQ29sb3Ig
cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgIAor
ICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNv
bnN0OworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5k
ZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90
dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRJbnRyaW5z
aWNNYXJnaW5zKFJlbmRlclN0eWxlKikgY29uc3Q7CkBAIC0xMDEsNiArMTIxLDE4IEBACiAgICAg
cmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dy
b3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAordm9pZCBSZW5kZXJUaGVtZVd4OjphZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHIpCit7CisgICAgc3dp
dGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKKyAgICAgICAgY2FzZSBNZW51bGlzdEFw
cGVhcmFuY2U6IHsKKyAgICAgICAgICAgIHIuc2V0V2lkdGgoci53aWR0aCgpICsgMTAwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVXeDo6Y29udHJvbFN1cHBvcnRz
VGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewogICAgIGlmICghaXNFbmFibGVk
KG8pKQpAQCAtMTkwLDggKzIyMiw2IEBACiB7CiAgICAgd3hXaW5kb3cqIHdpbmRvdyA9IG8tPnZp
ZXcoKS0+ZnJhbWVWaWV3KCktPm5hdGl2ZVdpbmRvdygpOwogICAgIHd4REMqIGRjID0gc3RhdGlj
X2Nhc3Q8d3hEQyo+KGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHd4QVNTRVJU
KGRjLT5Jc09rKCkpOwotCiAgICAgaW50IGZsYWdzID0gMDsKICAgICAKICAgICBpZiAoIWlzRW5h
YmxlZChvKSkKQEAgLTIwNiwxNCArMjM2LDE2IEBACiAgICAgCiAgICAgaWYgKGFwcGVhcmFuY2Ug
PT0gUHVzaEJ1dHRvbkFwcGVhcmFuY2UgfHwgYXBwZWFyYW5jZSA9PSBCdXR0b25BcHBlYXJhbmNl
KQogICAgICAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5EcmF3UHVzaEJ1dHRvbih3aW5kb3cs
ICpkYywgciwgZmxhZ3MpOwotICAgIC8vIFRPRE86IGFkZCBhIHJhZGlvIGJ1dHRvbiByZW5kZXJp
bmcgQVBJIHRvIHd4Ci0gICAgLy9lbHNlIGlmKGFwcGVhcmFuY2UgPT0gUmFkaW9BcHBlYXJhbmNl
KQorICAgIGVsc2UgaWYoYXBwZWFyYW5jZSA9PSBSYWRpb0FwcGVhcmFuY2UpIHsKKyAgICAgICAg
aWYgKGlzQ2hlY2tlZChvKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9DSEVDS0VE
OyAgICAgICAgCisgICAgICAgIHd4UmVuZGVyZXJfRHJhd1JhZGlvQnV0dG9uKHdpbmRvdywgKmRj
LCByLCBmbGFncyk7CisgICAgfQogICAgIGVsc2UgaWYoYXBwZWFyYW5jZSA9PSBDaGVja2JveEFw
cGVhcmFuY2UpIHsKICAgICAgICAgaWYgKGlzQ2hlY2tlZChvKSkKICAgICAgICAgICAgIGZsYWdz
IHw9IHd4Q09OVFJPTF9DSEVDS0VEOwogICAgICAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5E
cmF3Q2hlY2tCb3god2luZG93LCAqZGMsIHIsIGZsYWdzKTsKICAgICB9Ci0gICAgICAgIAogICAg
IHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjI0LDE1ICsyNTYsNjQgQEAKIAogYm9vbCBSZW5kZXJU
aGVtZVd4OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIGkuY29udGV4dC0+c2F2
ZSgpOwotICAgIGkuY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgIGku
Y29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKDEpOwotICAgIGkuY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoQ29sb3IoMCwgMCwgMCkpOwotICAgIGkuY29udGV4dC0+ZHJhd1JlY3Qocik7Ci0gICAg
aS5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAgd3hXaW5kb3cqIHdpbmRvdyA9IG8tPnZpZXcoKS0+
ZnJhbWVWaWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAgIHd4REMqIGRjID0gc3RhdGljX2Nhc3Q8
d3hEQyo+KGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHd4UmVuZGVyZXJfRHJh
d1RleHRDdHJsKHdpbmRvdywgKmRjLCByLCAwKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3Zv
aWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKK30KKyAgICAKK2Jvb2wgUmVu
ZGVyVGhlbWVXeDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIHd4V2luZG93KiB3
aW5kb3cgPSBvLT52aWV3KCktPmZyYW1lVmlldygpLT5uYXRpdmVXaW5kb3coKTsKKyAgICB3eERD
KiBkYyA9IHN0YXRpY19jYXN0PHd4REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICAKKyAgICBpbnQgZmxhZ3MgPSAwOyAgICAgIAorICAgIGlmICghaXNFbmFibGVkKG8pKQor
ICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRElTQUJMRUQ7CisgICAgICAgIAorICAgIGlmIChz
dXBwb3J0c0ZvY3VzKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgJiYgaXNGb2N1c2VkKG8pKQor
ICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRk9DVVNFRDsKKworICAgIGlmIChpc1ByZXNzZWQo
bykpCisgICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9QUkVTU0VEOworCisgICAgSW50UmVjdCBy
ZWN0ID0gcjsKKworICAgIHd4UmVuZGVyZXJfRHJhd0Nob2ljZSh3aW5kb3csICpkYywgcmVjdCwg
ZmxhZ3MpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lV3g6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyAgICAKK2Jvb2wg
UmVuZGVyVGhlbWVXeDo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIHd4
V2luZG93KiB3aW5kb3cgPSBvLT52aWV3KCktPmZyYW1lVmlldygpLT5uYXRpdmVXaW5kb3coKTsK
KyAgICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpKTsKKyAgICAKKyAgICBpbnQgZmxhZ3MgPSAwOyAgICAgIAorICAgIGlmICghaXNFbmFi
bGVkKG8pKQorICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRElTQUJMRUQ7CisgICAgICAgIAor
ICAgIGlmIChzdXBwb3J0c0ZvY3VzKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgJiYgaXNGb2N1
c2VkKG8pKQorICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRk9DVVNFRDsKKyAgICAKKyAgICBp
ZiAoaXNQcmVzc2VkKG8pKQorICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfUFJFU1NFRDsKKwor
ICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdDb21ib0JveERyb3BCdXR0b24od2luZG93
LCAqZGMsIHIsIGZsYWdzKTsKKyAgICAgICAgICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
ICAgIAogQ29sb3IgUmVuZGVyVGhlbWVXeDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiB3eFN5c3RlbVNldHRpbmdzOjpHZXRDb2xv
dXIod3hTWVNfQ09MT1VSX0hJR0hMSUdIVCk7CkBAIC0yNjIsNSArMzQzLDI5IEBACiAjZW5kaWYK
IH0KIAoraW50IFJlbmRlclRoZW1lV3g6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJT
dHlsZSopIGNvbnN0IAoreyAKKyAgICByZXR1cm4gNjsgCiB9CiAKK2ludCBSZW5kZXJUaGVtZVd4
Ojpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3QgCit7CisjaWZk
ZWYgX19XWE1BQ19fCisgICAgcmV0dXJuIDIyOworI2Vsc2UKKyAgICByZXR1cm4gMjA7CisjZW5k
aWYKK30KKworaW50IFJlbmRlclRoZW1lV3g6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRl
clN0eWxlKikgY29uc3QgCit7CisgICAgcmV0dXJuIDI7Cit9CisKK2ludCBSZW5kZXJUaGVtZVd4
Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0Cit7IAorICAg
IHJldHVybiAyOyAKK30KKworfQorCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzUwNjYpCisrKyBXZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDA4LTA3LTA4ICBSb2JpbiBE
dW5uICA8cm9iaW5AYWxsZHVubi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTmF0aXZlIHJlbmRlcmluZyBpbXBsZW1lbnRhdGlvbnMgZm9yIGZv
cm0gZWxlbWVudHMgaW4gdGhlIHd4IHBvcnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9SZW5k
ZXJUaGVtZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6Om1pbmltdW1N
ZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6YWRqdXN0UmVw
YWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6cGFpbnRCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6cGFpbnRUZXh0RmllbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4OjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV3g6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGluZ1Rv
cCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGlu
Z0JvdHRvbSk6CisKIDIwMDgtMDctMDggIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21h
aWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgo=
</data>
<flag name="review"
          id="9760"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22554</attachid>
            <date>2008-07-30 10:05:30 -0700</date>
            <delta_ts>2008-08-01 16:11:12 -0700</delta_ts>
            <desc>Patch with Eric&apos;s comments addressed</desc>
            <filename>wx-renderers2.patch</filename>
            <type>text/plain</type>
            <size>7330</size>
            <attacher name="Kevin Ollivier">kevino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9SZW5kZXJUaGVtZVd4LmNwcAkocmV2aXNpb24gMzU0NTEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4ICsyOSwxMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKKyNpbmNsdWRlICJXZWJLaXQv
d3gvV2ViVmlldy5oIgorCiAjaW5jbHVkZSA8d3gvZGVmcy5oPgogI2luY2x1ZGUgPHd4L3JlbmRl
cmVyLmg+CiAjaW5jbHVkZSA8d3gvZGNjbGllbnQuaD4KQEAgLTYwLDEyICs2MywyMiBAQAogCiAg
ICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJl
Y3QmKTsKKwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBh
aW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKKyAgICB2aXJ0dWFsIGludCBtaW5p
bXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVk
KGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYpIGNvbnN0Owog
CkBAIC03OCw2ICs5MSwxMSBAQAogICAgIAogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICAKKyAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxl
KikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRv
bShSZW5kZXJTdHlsZSopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgYWRkSW50cmluc2lj
TWFyZ2lucyhSZW5kZXJTdHlsZSopIGNvbnN0OwpAQCAtMTAxLDYgKzExOSwxOCBAQAogICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91
bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKK3ZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0UmVw
YWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKQoreworICAgIHN3aXRj
aCAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSB7CisgICAgICAgIGNhc2UgTWVudWxpc3RBcHBl
YXJhbmNlOiB7CisgICAgICAgICAgICByLnNldFdpZHRoKHIud2lkdGgoKSArIDEwMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCiBib29sIFJlbmRlclRoZW1lV3g6OmNvbnRyb2xTdXBwb3J0c1Rp
bnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKIHsKICAgICBpZiAoIWlzRW5hYmxlZChv
KSkKQEAgLTE5MCw4ICsyMjAsNiBAQAogewogICAgIHd4V2luZG93KiB3aW5kb3cgPSBvLT52aWV3
KCktPmZyYW1lVmlldygpLT5uYXRpdmVXaW5kb3coKTsKICAgICB3eERDKiBkYyA9IHN0YXRpY19j
YXN0PHd4REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB3eEFTU0VSVChk
Yy0+SXNPaygpKTsKLQogICAgIGludCBmbGFncyA9IDA7CiAgICAgCiAgICAgaWYgKCFpc0VuYWJs
ZWQobykpCkBAIC0yMDYsMTQgKzIzNCwxNiBAQAogICAgIAogICAgIGlmIChhcHBlYXJhbmNlID09
IFB1c2hCdXR0b25BcHBlYXJhbmNlIHx8IGFwcGVhcmFuY2UgPT0gQnV0dG9uQXBwZWFyYW5jZSkK
ICAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJhd1B1c2hCdXR0b24od2luZG93LCAq
ZGMsIHIsIGZsYWdzKTsKLSAgICAvLyBUT0RPOiBhZGQgYSByYWRpbyBidXR0b24gcmVuZGVyaW5n
IEFQSSB0byB3eAotICAgIC8vZWxzZSBpZihhcHBlYXJhbmNlID09IFJhZGlvQXBwZWFyYW5jZSkK
KyAgICBlbHNlIGlmKGFwcGVhcmFuY2UgPT0gUmFkaW9BcHBlYXJhbmNlKSB7CisgICAgICAgIGlm
IChpc0NoZWNrZWQobykpCisgICAgICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfQ0hFQ0tFRDsg
ICAgICAgIAorICAgICAgICB3eFJlbmRlcmVyX0RyYXdSYWRpb0J1dHRvbih3aW5kb3csICpkYywg
ciwgZmxhZ3MpOworICAgIH0KICAgICBlbHNlIGlmKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hBcHBl
YXJhbmNlKSB7CiAgICAgICAgIGlmIChpc0NoZWNrZWQobykpCiAgICAgICAgICAgICBmbGFncyB8
PSB3eENPTlRST0xfQ0hFQ0tFRDsKICAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJh
d0NoZWNrQm94KHdpbmRvdywgKmRjLCByLCBmbGFncyk7CiAgICAgfQotICAgICAgICAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTIyNCwxNSArMjU0LDY3IEBACiAKIGJvb2wgUmVuZGVyVGhl
bWVXeDo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBpLmNvbnRleHQtPnNhdmUo
KTsKLSAgICBpLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBpLmNv
bnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxKTsKLSAgICBpLmNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKENvbG9yKDAsIDAsIDApKTsKLSAgICBpLmNvbnRleHQtPmRyYXdSZWN0KHIpOwotICAgIGku
Y29udGV4dC0+cmVzdG9yZSgpOworICAgIHd4V2luZG93KiB3aW5kb3cgPSBvLT52aWV3KCktPmZy
YW1lVmlldygpLT5uYXRpdmVXaW5kb3coKTsKKyAgICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4
REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICB3eFJlbmRlcmVyX0RyYXdU
ZXh0Q3RybCh3aW5kb3csICpkYywgciwgMCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbnQg
UmVuZGVyVGhlbWVXeDo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IAor
eyAKKyAgICByZXR1cm4gMjE7IAorfQorCit2b2lkIFJlbmRlclRoZW1lV3g6OmFkanVzdE1lbnVM
aXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit7Cit9CisgICAgCitib29sIFJlbmRlclRoZW1lV3g6OnBhaW50TWVudUxpc3QoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICB3eFdpbmRvdyogd2luZG93ID0gby0+dmlldygpLT5mcmFtZVZpZXco
KS0+bmF0aXZlV2luZG93KCk7CisgICAgd3hEQyogZGMgPSBzdGF0aWNfY2FzdDx3eERDKj4oaS5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgCisgICAgaW50IGZsYWdzID0gMDsgICAg
ICAKKyAgICBpZiAoIWlzRW5hYmxlZChvKSkKKyAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0RJ
U0FCTEVEOworICAgICAgICAKKyAgICBpZiAoc3VwcG9ydHNGb2N1cyhvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkpICYmIGlzRm9jdXNlZChvKSkKKyAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0ZP
Q1VTRUQ7CisKKyAgICBpZiAoaXNQcmVzc2VkKG8pKQorICAgICAgICBmbGFncyB8PSB3eENPTlRS
T0xfUFJFU1NFRDsKKworICAgIHd4UmVuZGVyZXJfRHJhd0Nob2ljZSh3aW5kb3csICpkYywgciwg
ZmxhZ3MpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lV3g6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyAgICAKK2Jvb2wg
UmVuZGVyVGhlbWVXeDo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIHd4
V2luZG93KiB3aW5kb3cgPSBvLT52aWV3KCktPmZyYW1lVmlldygpLT5uYXRpdmVXaW5kb3coKTsK
KyAgICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpKTsKKyAgICAKKyAgICBpbnQgZmxhZ3MgPSAwOyAgICAgIAorICAgIGlmICghaXNFbmFi
bGVkKG8pKQorICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRElTQUJMRUQ7CisgICAgICAgIAor
ICAgIGlmIChzdXBwb3J0c0ZvY3VzKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgJiYgaXNGb2N1
c2VkKG8pKQorICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRk9DVVNFRDsKKyAgICAKKyAgICBp
ZiAoaXNQcmVzc2VkKG8pKQorICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfUFJFU1NFRDsKKwor
ICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdDb21ib0JveERyb3BCdXR0b24od2luZG93
LCAqZGMsIHIsIGZsYWdzKTsKKyAgICAgICAgICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
ICAgIAogQ29sb3IgUmVuZGVyVGhlbWVXeDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiB3eFN5c3RlbVNldHRpbmdzOjpHZXRDb2xv
dXIod3hTWVNfQ09MT1VSX0hJR0hMSUdIVCk7CkBAIC0yNjIsNSArMzQ0LDI5IEBACiAjZW5kaWYK
IH0KIAoraW50IFJlbmRlclRoZW1lV3g6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJT
dHlsZSopIGNvbnN0IAoreyAKKyAgICByZXR1cm4gNjsgCiB9CiAKK2ludCBSZW5kZXJUaGVtZVd4
Ojpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3QgCit7CisjaWZk
ZWYgX19XWE1BQ19fCisgICAgcmV0dXJuIDIyOworI2Vsc2UKKyAgICByZXR1cm4gMjA7CisjZW5k
aWYKK30KKworaW50IFJlbmRlclRoZW1lV3g6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRl
clN0eWxlKikgY29uc3QgCit7CisgICAgcmV0dXJuIDI7Cit9CisKK2ludCBSZW5kZXJUaGVtZVd4
Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0Cit7IAorICAg
IHJldHVybiAyOyAKK30KKworfQorCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzU0NTEpCisrKyBXZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDA4LTA3LTMwICBSb2JpbiBE
dW5uICA8cm9iaW5AYWxsZHVubi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTmF0aXZlIHJlbmRlcmluZyBpbXBsZW1lbnRhdGlvbnMgZm9yIGZv
cm0gZWxlbWVudHMgaW4gdGhlIHd4IHBvcnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9SZW5k
ZXJUaGVtZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6OmFkanVzdFJl
cGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6OnBhaW50QnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6OnBhaW50VGV4dEZpZWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4OjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV3g6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGluZ1Rv
cCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGlu
Z0JvdHRvbSk6CisKIDIwMDgtMDctMjkgIEtldmluIENhbGhvdW4gIDxrY2FsaG91bkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUuCg==
</data>
<flag name="review"
          id="9957"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>