<?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>95807</bug_id>
          
          <creation_ts>2012-09-04 18:04:05 -0700</creation_ts>
          <short_desc>ENH: Add Logging to StringImpl to track String Types</short_desc>
          <delta_ts>2012-09-06 17:44:55 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>benjamin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>711622</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-04 18:04:05 -0700</bug_when>
    <thetext>As an aid to converting more WebKit code to process 8 bit strings, it would be good to have statistics showing various statistics like the number of strings, how many are 8 versus 16 bits, how many bytes they use and how many 8 bit strings are up converted to 16 bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712522</commentid>
    <comment_count>1</comment_count>
      <attachid>162328</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-05 14:05:05 -0700</bug_when>
    <thetext>Created attachment 162328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712580</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-05 15:20:36 -0700</bug_when>
    <thetext>I am not super convinced we should have that in the code.

I agree we need better instrumentation, but I have found in my owns that the origins of strings is important to be able to work.

I also think this is gonna become dead code once you move on to another part of WebCore.

What I would like for instrumentations is:
-log all the creation and destruction of StringImpl with DTrace
-log the pointer so we can track individual strings
-parse everything with python to a SQLLite database
--&gt;make query on the data

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712600</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-05 15:40:48 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I am not super convinced we should have that in the code.
&gt; 
&gt; I agree we need better instrumentation, but I have found in my owns that the origins of strings is important to be able to work.
&gt; 
&gt; I also think this is gonna become dead code once you move on to another part of WebCore.
&gt; 
&gt; What I would like for instrumentations is:
&gt; -log all the creation and destruction of StringImpl with DTrace
&gt; -log the pointer so we can track individual strings
&gt; -parse everything with python to a SQLLite database
&gt; --&gt;make query on the data
&gt; 
&gt; What do you think?

This code provides a dashboard style of statistics.  I have already used it side by side with a before / after change running Safari.  You can quickly see deltas.

What you describe would allow more introspection but with greater effort to get the information.  As I see it, this changes tells you how much work you have to do to remove 16 bit strings, while your suggestion helps find the problem once you know there is an issue.  This change can provide some help with that as well, as you can run under the debugger with breakpoints in StringStats::add16BitString or StringStats::addUpconvertedString.

As far as becoming dead code, the changes are localized to two files and easily removed if/when we get to that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712771</commentid>
    <comment_count>4</comment_count>
      <attachid>162328</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-05 19:02:22 -0700</bug_when>
    <thetext>Comment on attachment 162328
Patch

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

I have nothing against this, but I don&apos;t get why this should be in WebKit instead of just a &quot;tool commit&quot; on your local tree.


&gt; Source/WTF/ChangeLog:11
&gt; +        strings as well as the number of 8 bit strings up converted to 16 bits.  The number of characrters
&gt; +        for each type is also accumulated.  These statistics are output via DataLog every 5000
&gt; +        calls to StringImpl destructor.  The 5000 can be adjusted via s_printStringStatsFrequency.

Two spaces after each period for some reason...

&gt; Source/WTF/wtf/text/StringImpl.h:234
&gt; +
&gt; +        STRING_STATS_ADD_8BIT_STRING(m_length);

Reporting m_length here is not always accurate, it is a own buffer.

&gt; Source/WTF/wtf/text/StringImpl.h:249
&gt; +
&gt; +        STRING_STATS_ADD_8BIT_STRING(m_length);

Reporting m_length  here is incorrect.
String from literal do not allocate memory for the data.

&gt; Source/WTF/wtf/text/StringImpl.h:263
&gt; +
&gt; +        STRING_STATS_ADD_16BIT_STRING(m_length);

Same comment about buffer owned.

&gt; Source/WTF/wtf/text/StringImpl.h:341
&gt; +
&gt; +        STRING_STATS_ADD_16BIT_STRING(m_length);

This code is using a buffer ownership type dependency. It does not allocate m_length memory. This is similar to BufferOwned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712886</commentid>
    <comment_count>5</comment_count>
      <attachid>162328</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-09-05 22:29:32 -0700</bug_when>
    <thetext>Comment on attachment 162328
Patch

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

&gt;&gt; Source/WTF/ChangeLog:11
&gt;&gt; +        calls to StringImpl destructor.  The 5000 can be adjusted via s_printStringStatsFrequency.
&gt; 
&gt; Two spaces after each period for some reason...

Some habits are hard to drop.

&gt; Source/WTF/wtf/text/StringImpl.cpp:33
&gt; +#ifdef STRING_STATS
&gt; +#include &lt;wtf/DataLog.h&gt;
&gt; +#endif

It reads cleaner if you put the #ifdef #includes at the bottom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713459</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-06 10:58:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 162328 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162328&amp;action=review
&gt; 
&gt; I have nothing against this, but I don&apos;t get why this should be in WebKit instead of just a &quot;tool commit&quot; on your local tree.
&gt; 
&gt; 
&gt; &gt; Source/WTF/ChangeLog:11
&gt; &gt; +        strings as well as the number of 8 bit strings up converted to 16 bits.  The number of characrters
&gt; &gt; +        for each type is also accumulated.  These statistics are output via DataLog every 5000
&gt; &gt; +        calls to StringImpl destructor.  The 5000 can be adjusted via s_printStringStatsFrequency.
&gt; 
&gt; Two spaces after each period for some reason...

Two spaces after a period for a fixed pitch font (like a ChangeLog) was drilled into me many years ago and she learned it probably in the 40&apos;s or 50&apos;s (that&apos;s 1940-1950&apos;s). ;-) It&apos;s hard to unlearn muscle memory as Sam points out.

&gt; &gt; Source/WTF/wtf/text/StringImpl.h:234
&gt; &gt; +
&gt; &gt; +        STRING_STATS_ADD_8BIT_STRING(m_length);
&gt; 
&gt; Reporting m_length here is not always accurate, it is a own buffer.

Reporting own buffer lengths is a debatable point. Much of this comes from StringBuilder or other build-as-you-go constructs. I actually do want to know how much data is stored in strings for this type.

&gt; &gt; Source/WTF/wtf/text/StringImpl.h:249
&gt; &gt; +
&gt; &gt; +        STRING_STATS_ADD_8BIT_STRING(m_length);
&gt; 
&gt; Reporting m_length  here is incorrect.
&gt; String from literal do not allocate memory for the data.

Changed this to 0.

&gt; &gt; Source/WTF/wtf/text/StringImpl.h:263
&gt; &gt; +
&gt; &gt; +        STRING_STATS_ADD_16BIT_STRING(m_length);
&gt; 
&gt; Same comment about buffer owned.
&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:341
&gt; &gt; +
&gt; &gt; +        STRING_STATS_ADD_16BIT_STRING(m_length);
&gt; 
&gt; This code is using a buffer ownership type dependency. It does not allocate m_length memory. This is similar to BufferOwned.

I can post an updated patch.

The real issue is whether or not this change is generally useful. I find it useful and think others will as well. I do think that its usefulness extends beyond the current make as much code 8 bit aware as possible since it can be used to find regressions.  If the consensus is that it is code pollution, I&apos;ll just keep my own copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713828</commentid>
    <comment_count>7</comment_count>
      <attachid>162328</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-06 16:24:56 -0700</bug_when>
    <thetext>Comment on attachment 162328
Patch

Ok, I am convinced :)

r+ with the updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713844</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-06 16:41:10 -0700</bug_when>
    <thetext>Committed r127799: &lt;http://trac.webkit.org/changeset/127799&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713921</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-06 17:44:55 -0700</bug_when>
    <thetext>Additional commit to fix building with STRING_STATS enabled.

Committed r127805: &lt;http://trac.webkit.org/changeset/127805&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162328</attachid>
            <date>2012-09-05 14:05:05 -0700</date>
            <delta_ts>2012-09-06 16:24:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>95807.patch</filename>
            <type>text/plain</type>
            <size>12233</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjc2MTIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA5LTA1ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEVOSDogQWRkIExvZ2dpbmcgdG8gU3RyaW5nSW1w
bCB0byB0cmFjayBTdHJpbmcgVHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk1ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgU3RyaW5nc1N0YXRzIGNsYXNzIHRoYXQga2VlcHMgdHJhY2sg
b2YgdGhlIG51bWJlciBvZiBzdHJpbmdzLCBudW1iZXIgb2YgOCBhbmQgMTYgYml0CisgICAgICAg
IHN0cmluZ3MgYXMgd2VsbCBhcyB0aGUgbnVtYmVyIG9mIDggYml0IHN0cmluZ3MgdXAgY29udmVy
dGVkIHRvIDE2IGJpdHMuICBUaGUgbnVtYmVyIG9mIGNoYXJhY3J0ZXJzCisgICAgICAgIGZvciBl
YWNoIHR5cGUgaXMgYWxzbyBhY2N1bXVsYXRlZC4gIFRoZXNlIHN0YXRpc3RpY3MgYXJlIG91dHB1
dCB2aWEgRGF0YUxvZyBldmVyeSA1MDAwCisgICAgICAgIGNhbGxzIHRvIFN0cmluZ0ltcGwgZGVz
dHJ1Y3Rvci4gIFRoZSA1MDAwIGNhbiBiZSBhZGp1c3RlZCB2aWEgc19wcmludFN0cmluZ1N0YXRz
RnJlcXVlbmN5LgorICAgICAgICBUaGlzIFN0cmluZ1N0YXRzIGNvZGUgaXMgZGlzYWJsZWQgYnkg
ZGVmYXVsdCBhbmQgZW5hYmxlZCBieSBkZWZpbmluZyBTVFJJTkdfU1RBVFMgaW4KKyAgICAgICAg
d3RmL3RleHQvU3RyaW5nSW1wbC5oLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5j
cHA6CisgICAgICAgIChXVEY6OlN0cmluZ1N0YXRzOjpyZW1vdmVTdHJpbmcpOgorICAgICAgICAo
V1RGOjpTdHJpbmdTdGF0czo6cHJpbnRTdGF0cyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
On5TdHJpbmdJbXBsKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Z2V0RGF0YTE2U2xvd0Nh
c2UpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3Ry
aW5nU3RhdHM6OmFkZDhCaXRTdHJpbmcpOgorICAgICAgICAoU3RyaW5nU3RhdHMpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdTdGF0czo6YWRkMTZCaXRTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJp
bmdTdGF0czo6YWRkVXBjb252ZXJ0ZWRTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
OjpTdHJpbmdJbXBsKToKKyAgICAgICAgKFN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjppc1N1YlN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnN0cmluZ1N0
YXRzKToKKwogMjAxMi0wOS0wNSAgR2Fib3IgUmFwY3NhbnlpICA8cmdhYm9yQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgREZHIEpJVCBkb2Vzbid0IHdvcmsgcHJvcGVybHkgb24gQVJNIGhhcmRmcApJ
bmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisrKyBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw5IEBACiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2lmZGVmIFNUUklOR19TVEFUUworI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9DaGFyYWN0ZXJOYW1lcy5oPgpAQCAtNDEsMTAgKzQ0LDY5IEBAIHVzaW5nIG5hbWVzcGFjZSBV
bmljb2RlOwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoU3RyaW5nSW1wbCkgPT0gMiAqIHNpemVv
ZihpbnQpICsgMyAqIHNpemVvZih2b2lkKiksIFN0cmluZ0ltcGxfc2hvdWxkX3N0YXlfc21hbGwp
OwogCisjaWZkZWYgU1RSSU5HX1NUQVRTCitTdHJpbmdTdGF0cyBTdHJpbmdJbXBsOjptX3N0cmlu
Z1N0YXRzOworCitzdGF0aWMgdW5zaWduZWQgU3RyaW5nU3RhdHM6OnNfc3RyaW5nUmVtb3Zlc1Rp
bGxQcmludFN0YXRzID0gU3RyaW5nU3RhdHM6OnNfcHJpbnRTdHJpbmdTdGF0c0ZyZXF1ZW5jeTsK
Kwordm9pZCBTdHJpbmdTdGF0czo6cmVtb3ZlU3RyaW5nKFN0cmluZ0ltcGwqIHN0cmluZykKK3sK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOworICAgIGJvb2wgaXNTdWJT
dHJpbmcgPSBzdHJpbmctPmlzU3ViU3RyaW5nKCk7CisKKyAgICAtLW1fdG90YWxOdW1iZXJTdHJp
bmdzOworCisgICAgaWYgKHN0cmluZy0+aGFzMTZCaXRTaGFkb3coKSkgeworICAgICAgICAtLW1f
bnVtYmVyVXBjb252ZXJ0ZWRTdHJpbmdzOworICAgICAgICBpZiAoIWlzU3ViU3RyaW5nKQorICAg
ICAgICAgICAgbV90b3RhbFVwY29udmVydGVkRGF0YSAtPSBsZW5ndGg7CisgICAgfQorCisgICAg
aWYgKHN0cmluZy0+aXM4Qml0KCkpIHsKKyAgICAgICAgLS1tX251bWJlcjhCaXRTdHJpbmdzOwor
ICAgICAgICBpZiAoIWlzU3ViU3RyaW5nKQorICAgICAgICAgICAgbV90b3RhbDhCaXREYXRhIC09
IGxlbmd0aDsKKyAgICB9IGVsc2UgeworICAgICAgICAtLW1fbnVtYmVyMTZCaXRTdHJpbmdzOwor
ICAgICAgICBpZiAoIWlzU3ViU3RyaW5nKQorICAgICAgICAgICAgbV90b3RhbDE2Qml0RGF0YSAt
PSBsZW5ndGg7CisgICAgfQorCisgICAgaWYgKCEtLXNfc3RyaW5nUmVtb3Zlc1RpbGxQcmludFN0
YXRzKSB7CisgICAgICAgIHNfc3RyaW5nUmVtb3Zlc1RpbGxQcmludFN0YXRzID0gc19wcmludFN0
cmluZ1N0YXRzRnJlcXVlbmN5OworICAgICAgICBwcmludFN0YXRzKCk7CisgICAgfQorfQorCit2
b2lkIFN0cmluZ1N0YXRzOjpwcmludFN0YXRzKCkKK3sKKyAgICBkYXRhTG9nKCJTdHJpbmcgc3Rh
dHMgZm9yIHByb2Nlc3MgaWQgJWQ6XG4iLCBnZXRwaWQoKSk7CisKKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgdG90YWxOdW1iZXJDaGFyYWN0ZXJzID0gbV90b3RhbDhCaXREYXRhICsgbV90b3RhbDE2
Qml0RGF0YTsKKyAgICBkb3VibGUgcGVyY2VudDhCaXQgPSBtX3RvdGFsTnVtYmVyU3RyaW5ncyA/
ICgoZG91YmxlKW1fbnVtYmVyOEJpdFN0cmluZ3MgKiAxMDApIC8gKGRvdWJsZSltX3RvdGFsTnVt
YmVyU3RyaW5ncyA6IDAuMDsKKyAgICBkb3VibGUgYXZlcmFnZThiaXRMZW5ndGggPSBtX251bWJl
cjhCaXRTdHJpbmdzID8gKGRvdWJsZSltX3RvdGFsOEJpdERhdGEgLyAoZG91YmxlKW1fbnVtYmVy
OEJpdFN0cmluZ3MgOiAwLjA7CisgICAgZGF0YUxvZygiJTh1ICglNS4yZiUlKSA4IGJpdCAgICAg
ICAgJTEybGx1IGNoYXJzICAlMTJsbHUgYnl0ZXMgIGF2ZyBsZW5ndGggJTYuMWZcbiIsIG1fbnVt
YmVyOEJpdFN0cmluZ3MsIHBlcmNlbnQ4Qml0LCBtX3RvdGFsOEJpdERhdGEsIG1fdG90YWw4Qml0
RGF0YSwgYXZlcmFnZThiaXRMZW5ndGgpOworCisgICAgZG91YmxlIHBlcmNlbnQxNkJpdCA9IG1f
dG90YWxOdW1iZXJTdHJpbmdzID8gKChkb3VibGUpbV9udW1iZXIxNkJpdFN0cmluZ3MgKiAxMDAp
IC8gKGRvdWJsZSltX3RvdGFsTnVtYmVyU3RyaW5ncyA6IDAuMDsKKyAgICBkb3VibGUgYXZlcmFn
ZTE2Yml0TGVuZ3RoID0gbV9udW1iZXIxNkJpdFN0cmluZ3MgPyAoZG91YmxlKW1fdG90YWwxNkJp
dERhdGEgLyAoZG91YmxlKW1fbnVtYmVyMTZCaXRTdHJpbmdzIDogMC4wOworICAgIGRhdGFMb2co
IiU4dSAoJTUuMmYlJSkgMTYgYml0ICAgICAgICUxMmxsdSBjaGFycyAgJTEybGx1IGJ5dGVzICBh
dmcgbGVuZ3RoICU2LjFmXG4iLCBtX251bWJlcjE2Qml0U3RyaW5ncywgcGVyY2VudDE2Qml0LCBt
X3RvdGFsMTZCaXREYXRhLCBtX3RvdGFsMTZCaXREYXRhICogMiwgYXZlcmFnZTE2Yml0TGVuZ3Ro
KTsKKworICAgIGRvdWJsZSBwZXJjZW50VXBjb252ZXJ0ZWQgPSBtX3RvdGFsTnVtYmVyU3RyaW5n
cyA/ICgoZG91YmxlKW1fbnVtYmVyVXBjb252ZXJ0ZWRTdHJpbmdzICogMTAwKSAvIChkb3VibGUp
bV9udW1iZXI4Qml0U3RyaW5ncyA6IDAuMDsKKyAgICBkb3VibGUgYXZlcmFnZVVwY29udmVydGVk
TGVuZ3RoID0gbV9udW1iZXJVcGNvbnZlcnRlZFN0cmluZ3MgPyAoZG91YmxlKW1fdG90YWxVcGNv
bnZlcnRlZERhdGEgLyAoZG91YmxlKW1fbnVtYmVyVXBjb252ZXJ0ZWRTdHJpbmdzIDogMC4wOwor
ICAgIGRhdGFMb2coIiU4dSAoJTUuMmYlJSkgdXBjb252ZXJ0ZWQgICUxMmxsdSBjaGFycyAgJTEy
bGx1IGJ5dGVzICBhdmcgbGVuZ3RoICU2LjFmXG4iLCBtX251bWJlclVwY29udmVydGVkU3RyaW5n
cywgcGVyY2VudFVwY29udmVydGVkLCBtX3RvdGFsVXBjb252ZXJ0ZWREYXRhLCBtX3RvdGFsVXBj
b252ZXJ0ZWREYXRhICogMiwgYXZlcmFnZVVwY29udmVydGVkTGVuZ3RoKTsKKworICAgIGRvdWJs
ZSBhdmVyYWdlTGVuZ3RoID0gbV90b3RhbE51bWJlclN0cmluZ3MgPyAoZG91YmxlKXRvdGFsTnVt
YmVyQ2hhcmFjdGVycyAvIChkb3VibGUpbV90b3RhbE51bWJlclN0cmluZ3MgOiAwLjA7CisgICAg
ZGF0YUxvZygiJTh1IFRvdGFsICAgICAgICAgICAgICAgICAlMTJsbHUgY2hhcnMgICUxMmxsdSBi
eXRlcyAgYXZnIGxlbmd0aCAlNi4xZlxuIiwgbV90b3RhbE51bWJlclN0cmluZ3MsIHRvdGFsTnVt
YmVyQ2hhcmFjdGVycywgbV90b3RhbDhCaXREYXRhICsgKG1fdG90YWwxNkJpdERhdGEgKyBtX3Rv
dGFsVXBjb252ZXJ0ZWREYXRhKSAqIDIsIGF2ZXJhZ2VMZW5ndGgpOworfQorI2VuZGlmCisKKwog
U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogewogICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7CiAK
KyAgICBTVFJJTkdfU1RBVFNfUkVNT1ZFX1NUUklORyh0aGlzKTsKKwogICAgIGlmIChpc0F0b21p
YygpKQogICAgICAgICBBdG9taWNTdHJpbmc6OnJlbW92ZSh0aGlzKTsKICNpZiBVU0UoSlNDKQpA
QCAtMjIxLDYgKzI4Myw4IEBAIGNvbnN0IFVDaGFyKiBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93
Q2EKICAgICAgICAgcmV0dXJuIG1fc3Vic3RyaW5nQnVmZmVyLT5jaGFyYWN0ZXJzKCkgKyBvZmZz
ZXQ7CiAgICAgfQogCisgICAgU1RSSU5HX1NUQVRTX0FERF9VUENPTlZFUlRFRF9TVFJJTkcobV9s
ZW5ndGgpOworICAgIAogICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwogICAgIGlmIChoYXNU
ZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSkKICAgICAgICAgbGVuKys7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDYzIEBAIGVudW0gVGV4
dENhc2VTZW5zaXRpdml0eSB7IFRleHRDYXNlU2Vuc2kKIHR5cGVkZWYgYm9vbCAoKkNoYXJhY3Rl
ck1hdGNoRnVuY3Rpb25QdHIpKFVDaGFyKTsKIHR5cGVkZWYgYm9vbCAoKklzV2hpdGVTcGFjZUZ1
bmN0aW9uUHRyKShVQ2hhcik7CiAKKy8vIERlZmluZSBTVFJJTkdfU1RBVFMgdG8gdHVybiBvbiBy
dW4gdGltZSBzdGF0aXN0aWNzIG9mIHN0cmluZyBzaXplcyBhbmQgbWVtb3J5IHVzYWdlCisjdW5k
ZWYgU1RSSU5HX1NUQVRTCisKKyNpZmRlZiBTVFJJTkdfU1RBVFMKK3N0cnVjdCBTdHJpbmdTdGF0
cyB7CisgICAgaW5saW5lIHZvaWQgYWRkOEJpdFN0cmluZyh1bnNpZ25lZCBsZW5ndGgsIGJvb2wg
aXNTdWJTdHJpbmcgPSBmYWxzZSkKKyAgICB7CisgICAgICAgICsrbV90b3RhbE51bWJlclN0cmlu
Z3M7CisgICAgICAgICsrbV9udW1iZXI4Qml0U3RyaW5nczsKKyAgICAgICAgaWYgKCFpc1N1YlN0
cmluZykKKyAgICAgICAgICAgIG1fdG90YWw4Qml0RGF0YSArPSBsZW5ndGg7CisgICAgfQorCisg
ICAgaW5saW5lIHZvaWQgYWRkMTZCaXRTdHJpbmcodW5zaWduZWQgbGVuZ3RoLCBib29sIGlzU3Vi
U3RyaW5nID0gZmFsc2UpCisgICAgeworICAgICAgICArK21fdG90YWxOdW1iZXJTdHJpbmdzOwor
ICAgICAgICArK21fbnVtYmVyMTZCaXRTdHJpbmdzOworICAgICAgICBpZiAoIWlzU3ViU3RyaW5n
KQorICAgICAgICAgICAgbV90b3RhbDE2Qml0RGF0YSArPSBsZW5ndGg7CisgICAgfQorCisgICAg
aW5saW5lIHZvaWQgYWRkVXBjb252ZXJ0ZWRTdHJpbmcodW5zaWduZWQgbGVuZ3RoKQorICAgIHsK
KyAgICAgICAgKyttX251bWJlclVwY29udmVydGVkU3RyaW5nczsKKyAgICAgICAgbV90b3RhbFVw
Y29udmVydGVkRGF0YSArPSBsZW5ndGg7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVTdHJpbmco
U3RyaW5nSW1wbCopOworICAgIHZvaWQgcHJpbnRTdGF0cygpOworCisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfcHJpbnRTdHJpbmdTdGF0c0ZyZXF1ZW5jeSA9IDUwMDA7CisgICAgc3RhdGlj
IHVuc2lnbmVkIHNfc3RyaW5nUmVtb3Zlc1RpbGxQcmludFN0YXRzOworCisgICAgdW5zaWduZWQg
bV90b3RhbE51bWJlclN0cmluZ3M7CisgICAgdW5zaWduZWQgbV9udW1iZXI4Qml0U3RyaW5nczsK
KyAgICB1bnNpZ25lZCBtX251bWJlcjE2Qml0U3RyaW5nczsKKyAgICB1bnNpZ25lZCBtX251bWJl
clVwY29udmVydGVkU3RyaW5nczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV90b3RhbDhCaXRE
YXRhOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3RvdGFsMTZCaXREYXRhOworICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBtX3RvdGFsVXBjb252ZXJ0ZWREYXRhOworfTsKKworI2RlZmluZSBTVFJJ
TkdfU1RBVFNfQUREXzhCSVRfU1RSSU5HKGxlbmd0aCkgU3RyaW5nSW1wbDo6c3RyaW5nU3RhdHMo
KS5hZGQ4Qml0U3RyaW5nKGxlbmd0aCkKKyNkZWZpbmUgU1RSSU5HX1NUQVRTX0FERF84QklUX1NU
UklORzIobGVuZ3RoLCBpc1N1YlN0cmluZykgU3RyaW5nSW1wbDo6c3RyaW5nU3RhdHMoKS5hZGQ4
Qml0U3RyaW5nKGxlbmd0aCwgaXNTdWJTdHJpbmcpCisjZGVmaW5lIFNUUklOR19TVEFUU19BRERf
MTZCSVRfU1RSSU5HKGxlbmd0aCkgU3RyaW5nSW1wbDo6c3RyaW5nU3RhdHMoKS5hZGQxNkJpdFN0
cmluZyhsZW5ndGgpCisjZGVmaW5lIFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5HMihsZW5n
dGgsIGlzU3ViU3RyaW5nKSBTdHJpbmdJbXBsOjpzdHJpbmdTdGF0cygpLmFkZDE2Qml0U3RyaW5n
KGxlbmd0aCwgaXNTdWJTdHJpbmcpCisjZGVmaW5lIFNUUklOR19TVEFUU19BRERfVVBDT05WRVJU
RURfU1RSSU5HKGxlbmd0aCkgU3RyaW5nSW1wbDo6c3RyaW5nU3RhdHMoKS5hZGRVcGNvbnZlcnRl
ZFN0cmluZyhsZW5ndGgpCisjZGVmaW5lIFNUUklOR19TVEFUU19SRU1PVkVfU1RSSU5HKHN0cmlu
ZykgU3RyaW5nSW1wbDo6c3RyaW5nU3RhdHMoKS5yZW1vdmVTdHJpbmcoc3RyaW5nKQorI2Vsc2UK
KyNkZWZpbmUgU1RSSU5HX1NUQVRTX0FERF84QklUX1NUUklORyhsZW5ndGgpICgodm9pZCkwKQor
I2RlZmluZSBTVFJJTkdfU1RBVFNfQUREXzhCSVRfU1RSSU5HMihsZW5ndGgsIGlzU3ViU3RyaW5n
KSAoKHZvaWQpMCkKKyNkZWZpbmUgU1RSSU5HX1NUQVRTX0FERF8xNkJJVF9TVFJJTkcobGVuZ3Ro
KSAoKHZvaWQpMCkKKyNkZWZpbmUgU1RSSU5HX1NUQVRTX0FERF8xNkJJVF9TVFJJTkcyKGxlbmd0
aCwgaXNTdWJTdHJpbmcpICgodm9pZCkwKQorI2RlZmluZSBTVFJJTkdfU1RBVFNfQUREX1VQQ09O
VkVSVEVEX1NUUklORyhsZW5ndGgpICgodm9pZCkwKQorI2RlZmluZSBTVFJJTkdfU1RBVFNfUkVN
T1ZFX1NUUklORyhzdHJpbmcpICgodm9pZCkwKQorI2VuZGlmCisKIGNsYXNzIFN0cmluZ0ltcGwg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cmluZ0ltcGwpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKICAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllckFTQ0lJU3RyaW5nVHJh
bnNsYXRvcjsKQEAgLTExMCw2ICsxNjcsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBFbnN1cmUg
dGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0b21pY1N0cmluZ0hhc2ggY2FuIGNh
bGwgZXhpc3RpbmdIYXNoKCkKICAgICAgICAgLy8gd2l0aCBpbXB1bml0eS4gVGhlIGVtcHR5IHN0
cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIgZW50ZXJlZCBpbnRvCiAgICAgICAg
IC8vIEF0b21pY1N0cmluZydzIEhhc2hLZXksIGJ1dCBzdGlsbCBuZWVkcyB0byBjb21wYXJlIGNv
cnJlY3RseS4KKyAgICAgICAgU1RSSU5HX1NUQVRTX0FERF8xNkJJVF9TVFJJTkcobV9sZW5ndGgp
OworCiAgICAgICAgIGhhc2goKTsKICAgICB9CiAKQEAgLTEyNiw2ICsxODUsOCBAQCBwcml2YXRl
OgogICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0
b21pY1N0cmluZ0hhc2ggY2FuIGNhbGwgZXhpc3RpbmdIYXNoKCkKICAgICAgICAgLy8gd2l0aCBp
bXB1bml0eS4gVGhlIGVtcHR5IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIg
ZW50ZXJlZCBpbnRvCiAgICAgICAgIC8vIEF0b21pY1N0cmluZydzIEhhc2hLZXksIGJ1dCBzdGls
bCBuZWVkcyB0byBjb21wYXJlIGNvcnJlY3RseS4KKyAgICAgICAgU1RSSU5HX1NUQVRTX0FERF84
QklUX1NUUklORyhtX2xlbmd0aCk7CisKICAgICAgICAgaGFzaCgpOwogICAgIH0KIApAQCAtMTQx
LDYgKzIwMiw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CiAg
ICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CisKKyAgICAgICAgU1RSSU5HX1NUQVRTX0FERF84QklU
X1NUUklORyhtX2xlbmd0aCk7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDE2LWJp
dCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKQEAgLTE1Myw2
ICsyMTYsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAg
ICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKKworICAgICAgICBTVFJJTkdfU1RBVFNfQUREXzE2QklU
X1NUUklORyhtX2xlbmd0aCk7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGEgU3RyaW5nSW1wbCBh
ZG9wdGluZyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciAoQnVmZmVyT3duZWQpCkBA
IC0xNjUsNiArMjMwLDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2RhdGE4
KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKKworICAgICAgICBTVFJJTkdfU1RBVFNfQURE
XzhCSVRfU1RSSU5HKG1fbGVuZ3RoKTsKICAgICB9CiAKICAgICBlbnVtIENvbnN0cnVjdEZyb21M
aXRlcmFsVGFnIHsgQ29uc3RydWN0RnJvbUxpdGVyYWwgfTsKQEAgLTE3OCw2ICsyNDUsOCBAQCBw
cml2YXRlOgogICAgICAgICBBU1NFUlQobV9kYXRhOCk7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0
aCk7CiAgICAgICAgIEFTU0VSVCghY2hhcmFjdGVyc1tsZW5ndGhdKTsKKworICAgICAgICBTVFJJ
TkdfU1RBVFNfQUREXzhCSVRfU1RSSU5HKG1fbGVuZ3RoKTsKICAgICB9CiAKICAgICAvLyBDcmVh
dGUgYSBTdHJpbmdJbXBsIGFkb3B0aW5nIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVy
IChCdWZmZXJPd25lZCkKQEAgLTE5MCw2ICsyNTksOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKKworICAgICAg
ICBTVFJJTkdfU1RBVFNfQUREXzE2QklUX1NUUklORyhtX2xlbmd0aCk7CiAgICAgfQogCiAgICAg
Ly8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4g
ZXhpc3RpbmcgOC1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQpAQCAtMjA0LDYgKzI3
NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2RhdGE4KTsKICAgICAgICAgQVNTRVJU
KG1fbGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKG1fc3Vic3RyaW5nQnVmZmVyLT5idWZmZXJPd25l
cnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcpOworCisgICAgICAgIFNUUklOR19TVEFUU19BRERf
OEJJVF9TVFJJTkcyKG1fbGVuZ3RoLCB0cnVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNy
ZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyAxNi1i
aXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQpAQCAtMjE4LDYgKzI5MSw4IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChtX2RhdGExNik7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7
CiAgICAgICAgIEFTU0VSVChtX3N1YnN0cmluZ0J1ZmZlci0+YnVmZmVyT3duZXJzaGlwKCkgIT0g
QnVmZmVyU3Vic3RyaW5nKTsKKworICAgICAgICBTVFJJTkdfU1RBVFNfQUREXzE2QklUX1NUUklO
RzIobV9sZW5ndGgsIHRydWUpOwogICAgIH0KIAogICAgIGVudW0gQ3JlYXRlRW1wdHlVbmlxdWVf
VCB7IENyZWF0ZUVtcHR5VW5pcXVlIH07CkBAIC0yMzgsNiArMzEzLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgaWYgKCFoYXNoKQogICAgICAgICAgICAgaGFzaCA9IDEgPDwgc19mbGFnQ291bnQ7CiAg
ICAgICAgIG1faGFzaEFuZEZsYWdzID0gaGFzaCB8IEJ1ZmZlckludGVybmFsOworCisgICAgICAg
IFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5HKG1fbGVuZ3RoKTsKICAgICB9CiAKICNpZiBQ
TEFURk9STShRVCkKQEAgLTI2MCw2ICszMzcsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBOb3cg
dGhhdCB3ZSBoYXZlIGEgcmVmIHdlIGNhbiBzYWZlbHkgcmVmZXJlbmNlIHRoZSBzdHJpbmcgZGF0
YQogICAgICAgICBtX2RhdGExNiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFVDaGFyKj4o
cVN0cmluZ0RhdGEtPmRhdGEoKSk7CiAgICAgICAgIEFTU0VSVChtX2RhdGExNik7CisKKyAgICAg
ICAgU1RSSU5HX1NUQVRTX0FERF8xNkJJVF9TVFJJTkcobV9sZW5ndGgpOwogICAgIH0KICNlbmRp
ZgogCkBAIC00MzIsNiArNTExLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1faGFzaEFuZEZs
YWdzICY9IH5zX2hhc2hGbGFnSXNBdG9taWM7CiAgICAgfQogCisjaWZkZWYgU1RSSU5HX1NUQVRT
CisgICAgYm9vbCBpc1N1YlN0cmluZygpIGNvbnN0IHsgcmV0dXJuICBidWZmZXJPd25lcnNoaXAo
KSA9PSBCdWZmZXJTdWJzdHJpbmc7IH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
UVN0cmluZ0RhdGEqIHFTdHJpbmdEYXRhKCkgeyByZXR1cm4gYnVmZmVyT3duZXJzaGlwKCkgPT0g
QnVmZmVyQWRvcHRlZFFTdHJpbmcgPyBtX3FTdHJpbmdEYXRhIDogMDsgfQogI2VuZGlmCkBAIC02
MjIsNiArNzA1LDkgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIE5TU3RyaW5nKigpOwogI2VuZGlm
CiAKKyNpZmRlZiBTVFJJTkdfU1RBVFMKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBTdHJpbmdT
dGF0cyYgc3RyaW5nU3RhdHMoKSB7IHJldHVybiBtX3N0cmluZ1N0YXRzOyB9CisjZW5kaWYKIHBy
aXZhdGU6CiAgICAgLy8gVGhpcyBudW1iZXIgbXVzdCBiZSBhdCBsZWFzdCAyIHRvIGF2b2lkIHNo
YXJpbmcgZW1wdHksIG51bGwgYXMgd2VsbCBhcyAxIGNoYXJhY3RlciBzdHJpbmdzIGZyb20gU21h
bGxTdHJpbmdzLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2NvcHlDaGFyc0lubGluZUN1
dE9mZiA9IDIwOwpAQCAtNjUwLDYgKzczNiw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfaGFzaEZsYWdJc0lkZW50aWZpZXIgPSAxdSA8PCAyOwogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwID0gMXUgfCAoMXUgPDwgMSk7
CiAKKyNpZmRlZiBTVFJJTkdfU1RBVFMKKyAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMgU3RyaW5n
U3RhdHMgbV9zdHJpbmdTdGF0czsKKyNlbmRpZgogICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CiAg
ICAgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgdW5pb24gewo=
</data>
<flag name="review"
          id="173410"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="173411"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>