<?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>60396</bug_id>
          
          <creation_ts>2011-05-06 12:42:34 -0700</creation_ts>
          <short_desc>Add RAII-style DenormalDisabler class to disable denormals which hurt audio performance</short_desc>
          <delta_ts>2011-05-09 16:41:48 -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>New Bugs</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="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>399737</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-06 12:42:34 -0700</bug_when>
    <thetext>Add macros to disable denormals on x86 for audio-intensive algorithms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399739</commentid>
    <comment_count>1</comment_count>
      <attachid>92627</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-06 12:45:55 -0700</bug_when>
    <thetext>Created attachment 92627
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399947</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-06 17:35:09 -0700</bug_when>
    <thetext>Can this be a RIAA-style class instead of a pair of macros? This class could disable denormals in constructor, and enable them back in destructor, making sure that we don&apos;t accidentally leak the state by taking an unusual code path with an early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399984</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-06 18:09:28 -0700</bug_when>
    <thetext>Sure, I can probably whip something up like that.  Just curious, what is RIAA?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400278</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-08 12:54:18 -0700</bug_when>
    <thetext>http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400690</commentid>
    <comment_count>5</comment_count>
      <attachid>92834</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-09 12:55:11 -0700</bug_when>
    <thetext>Created attachment 92834
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400693</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-09 12:57:43 -0700</bug_when>
    <thetext>Latest patch turns this into an RIAA-style class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400703</commentid>
    <comment_count>7</comment_count>
      <attachid>92834</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-09 13:23:06 -0700</bug_when>
    <thetext>Comment on attachment 92834
Patch

Looks nice.  Need someone who actually knows about this stuff to comment though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400706</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-09 13:23:47 -0700</bug_when>
    <thetext>CCing folks who might know something about denormal disabiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400714</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-05-09 13:33:35 -0700</bug_when>
    <thetext>In terms of actual data behaviour what does this do?  If I load a denormalised value into an xmm register what happens?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400752</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-09 14:24:29 -0700</bug_when>
    <thetext>Oliver, I don&apos;t think a simple load will be any different.  Setting the denormal mask tells the processor to ignore any exceptions which occur due to any floating-point math which is dealing with denormals.  Not handling the exception causes a tiny amount of precision loss, which is acceptable for audio processing.  The performance benefit is very large because once these denormals get into a stateful audio processing algorithms they tend to stick around (in filter state, decaying delay lines, parameter slewing/de-glitching, etc.).  They can cause a very large number of exceptions to occur, causing enormous slowdown.

For all AudioUnits we used to disable them -- here&apos;s an old copy of an audio SDK file with this type of disabling (near the top of the file):
http://www.google.com/codesearch/p?hl=en#9WNLlqRP2nE/trunk/PublicUtility/AUPublic/AUBase/AUBase.cpp&amp;q=AUPublic&amp;sa=N&amp;cd=2&amp;ct=rc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400772</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-05-09 14:49:21 -0700</bug_when>
    <thetext>I think Alexey meant RAII, not RIAA. Very different concepts. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400779</commentid>
    <comment_count>12</comment_count>
      <attachid>92834</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-05-09 14:59:19 -0700</bug_when>
    <thetext>Comment on attachment 92834
Patch

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

Couple of minor comments; feel free to fix upon landing.

&gt; Source/WebCore/ChangeLog:5
&gt; +        Add RIAA-style DenormalDisabler class to disable denormals which hurt audio performance.

RIAA -&gt; RAII

&gt; Source/WebCore/platform/audio/DenormalDisabler.h:50
&gt; +        asm volatile(&quot;stmxcsr %0&quot; : &quot;=m&quot; (*&amp;result));

It looks like the *&amp; isn&apos;t needed here or on the ldmxcsr; see http://gcc.gnu.org/bugzilla/attachment.cgi?id=11062 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400858</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-09 16:02:16 -0700</bug_when>
    <thetext>Committed r86099: &lt;http://trac.webkit.org/changeset/86099&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400870</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-05-09 16:14:10 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Oliver, I don&apos;t think a simple load will be any different.  Setting the denormal mask tells the processor to ignore any exceptions which occur due to any floating-point math which is dealing with denormals.  Not handling the exception causes a tiny amount of precision loss, which is acceptable for audio processing.  The performance benefit is very large because once these denormals get into a stateful audio processing algorithms they tend to stick around (in filter state, decaying delay lines, parameter slewing/de-glitching, etc.).  They can cause a very large number of exceptions to occur, causing enormous slowdown.
&gt; 
&gt; For all AudioUnits we used to disable them -- here&apos;s an old copy of an audio SDK file with this type of disabling (near the top of the file):
&gt; http://www.google.com/codesearch/p?hl=en#9WNLlqRP2nE/trunk/PublicUtility/AUPublic/AUBase/AUBase.cpp&amp;q=AUPublic&amp;sa=N&amp;cd=2&amp;ct=rc

Can JavaScript run in the scope this is activated for?  If so, can the change in precision show up there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400892</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-09 16:41:48 -0700</bug_when>
    <thetext>Hi Sam, no this will only run in audio-specific threads.  It&apos;s per-thread state and will not affect the main JS thread or any worker threads.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92627</attachid>
            <date>2011-05-06 12:45:55 -0700</date>
            <delta_ts>2011-05-09 12:55:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60396-20110506124554.patch</filename>
            <type>text/plain</type>
            <size>1994</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1OTcwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDUtMDYgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgbWFjcm9zIHRvIGRpc2FibGUgZGVub3JtYWxzIG9uIHg4
NiBmb3IgYXVkaW8taW50ZW5zaXZlIGFsZ29yaXRobXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzk2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNp
bmNlIGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vQXVkaW9VdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdFVENTUik6Cisg
ICAgICAgIChXZWJDb3JlOjpTRVRDU1IpOgorCiAyMDExLTA1LTA2ICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9VdGlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1V0aWxpdGllcy5oCShy
ZXZpc2lvbiA4NTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvVXRp
bGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDM1IEBAIGRvdWJsZSBkZWNpYmVs
c1RvTGluZWFyKGRvdWJsZSk7CiAvLyB0byByZWFjaCB0aGUgdmFsdWUgMSAtIDEvZSAoYXJvdW5k
IDYzLjIlKSBnaXZlbiBhIHN0ZXAgaW5wdXQgcmVzcG9uc2UuCiAvLyBkaXNjcmV0ZVRpbWVDb25z
dGFudEZvclNhbXBsZVJhdGUoKSB3aWxsIHJldHVybiB0aGUgZGlzY3JldGUgdGltZS1jb25zdGFu
dCBmb3IgdGhlIHNwZWNpZmljIHNhbXBsZVJhdGUuCiBkb3VibGUgZGlzY3JldGVUaW1lQ29uc3Rh
bnRGb3JTYW1wbGVSYXRlKGRvdWJsZSB0aW1lQ29uc3RhbnQsIGRvdWJsZSBzYW1wbGVSYXRlKTsK
LSAgICAKKwogfSAvLyBBdWRpb1V0aWxpdGVzCiAKKy8vIERlYWwgd2l0aCBkZW5vcm1hbHMuIFRo
ZXkgY2FuIHZlcnkgc2VyaW91c2x5IGltcGFjdCBwZXJmb3JtYW5jZSBvbiB4ODYuCisKKyNpZiBk
ZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82
NF9fKSkKKy8vIGdjYyBkb2VzIEFMTCBmbG9hdGluZyBwb2ludCB3aXRoIFNTRQoraW5saW5lIGlu
dCBHRVRDU1IoKQoreworICAgIGludCByZXN1bHQ7CisgICAgYXNtIHZvbGF0aWxlKCJzdG14Y3Ny
ICUwIiA6ICI9bSIgKComcmVzdWx0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5l
IHZvaWQgU0VUQ1NSKGludCBhKQoreworICAgIGludCB0ZW1wID0gYTsKKyAgICBhc20gdm9sYXRp
bGUoImxkbXhjc3IgJTAiIDogOiAibSIgKComdGVtcCkpOworfQorCisjZGVmaW5lIERJU0FCTEVf
REVOT1JNQUxTIGludCBfc2F2ZW14Y3NyID0gR0VUQ1NSKCk7IFNFVENTUihfc2F2ZW14Y3NyIHwg
MHg4MDQwKTsKKyNkZWZpbmUgUkVTVE9SRV9ERU5PUk1BTFMgU0VUQ1NSKF9zYXZlbXhjc3IpOwor
CisjZWxzZQorLy8gRklYTUU6IGFkZCBWaXN1YWwgU3R1ZGlvIGNvbXBpbGVyIHZlcnNpb24gaGVy
ZS4uLgorI2RlZmluZSBESVNBQkxFX0RFTk9STUFMUworI2RlZmluZSBSRVNUT1JFX0RFTk9STUFM
UworI2VuZGlmCisKIH0gLy8gV2ViQ29yZQogCiAjZW5kaWYgLy8gQXVkaW9VdGlsaXRpZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92834</attachid>
            <date>2011-05-09 12:55:11 -0700</date>
            <delta_ts>2011-05-09 14:59:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60396-20110509125510.patch</filename>
            <type>text/plain</type>
            <size>8976</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2MDgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDUtMDkgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgUklBQS1zdHlsZSBEZW5vcm1hbERpc2FibGVyIGNsYXNz
IHRvIGRpc2FibGUgZGVub3JtYWxzIHdoaWNoIGh1cnQgYXVkaW8gcGVyZm9ybWFuY2UuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDM5NgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBhdWRpbyBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRGVub3JtYWxEaXNhYmxl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRlbm9ybWFsRGlzYWJsZXI6OkRlbm9ybWFs
RGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVub3JtYWxEaXNhYmxlcjo6fkRlbm9ybWFs
RGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVub3JtYWxEaXNhYmxlcjo6Z2V0Q1NSKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlbm9ybWFsRGlzYWJsZXI6OnNldENTUik6CisgICAgICAgICog
d2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9EZXN0aW5hdGlvbk5vZGU6OnByb3ZpZGVJbnB1dCk6CisKIDIwMTEtMDUtMDkgIEFuZHJlYXMg
S2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODYwNzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM2NDcs
NiArMzY0Nyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vQmlxdWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0NvbmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9hdWRpby9Db25lLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0Rlbm9ybWFsRGlz
YWJsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRGlzdGFuY2UuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EaXN0YW5jZS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4NjA3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTczNSw2ICs1NzM1LDcgQEAKIAkJRkJDMjIwREYxMjM3RkJFQjAwQkNG
Nzg4IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHAgKi87IH07CiAJCUZEMDZERkE1MTM0QTRERUYwMDZGNUQ3
RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwNkRGQTMxMzRBNERFRjAwNkY1RDdEIC8qIERl
ZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi87IH07CiAJCUZEMDZERkE2MTM0QTRERUYw
MDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDZERkE0MTM0QTRERUYwMDZGNUQ3RCAv
KiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCAqLzsgfTsKKwkJRkQxNjYwQTUxMzc4N0M2
RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMTY2MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1h
bERpc2FibGVyLmggKi87IH07CiAJCUZEMkRCRjEyMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVy
YXRlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZEMkRCRjBFMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZyYW1ld29yayAq
LzsgfTsKIAkJRkQyREJGMTMxMkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlvVG9vbGJveC5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDJE
QkYwRjEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9Ub29sYm94LmZyYW1ld29yayAqLzsgfTsKIAkJ
RkQyREJGMTQxMkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlvVW5pdC5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDJEQkYxMDEyQjA0OEEz
MDBFRDk4QzYgLyogQXVkaW9Vbml0LmZyYW1ld29yayAqLzsgfTsKQEAgLTEyMjMyLDYgKzEyMjMz
LDcgQEAKIAkJRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwNkRGQTMx
MzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5v
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDA2REZBNDEzNEE0REVGMDA2
RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRDE2NjBBNDEzNzg3QzZEMDAxRkZBN0IgLyogRGVub3JtYWxE
aXNhYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEZW5vcm1hbERpc2Fi
bGVyLmg7IHBhdGggPSB3ZWJhdWRpby9hdWRpby9EZW5vcm1hbERpc2FibGVyLmg7IHNvdXJjZVRy
ZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJRkQyREJGMEUxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2Vs
ZXJhdGUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBBY2NlbGVyYXRlLmZyYW1ld29yazsg
cGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlGRDJEQkYwRjEyQjA0OEEzMDBFRDk4QzYg
LyogQXVkaW9Ub29sYm94LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQXVkaW9Ub29sYm94
LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVG9vbGJv
eC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUZEMkRCRjEwMTJC
MDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBB
dWRpb1VuaXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXVk
aW9Vbml0LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKQEAgLTE5NTYy
LDYgKzE5NTY0LDcgQEAKIAkJCQlGRDMxNjA1OTEyQjAyNkY3MDBDMUEzNTkgLyogQ29uZS5oICov
LAogCQkJCUZEMzE2MDVBMTJCMDI2RjcwMEMxQTM1OSAvKiBEaXN0YW5jZS5jcHAgKi8sCiAJCQkJ
RkQzMTYwNUIxMkIwMjZGNzAwQzFBMzU5IC8qIERpc3RhbmNlLmggKi8sCisJCQkJRkQxNjYwQTQx
Mzc4N0M2RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCAqLywKIAkJCQlGRDMxNjA1QzEy
QjAyNkY3MDBDMUEzNTkgLyogRXF1YWxQb3dlclBhbm5lci5jcHAgKi8sCiAJCQkJRkQzMTYwNUQx
MkIwMjZGNzAwQzFBMzU5IC8qIEVxdWFsUG93ZXJQYW5uZXIuaCAqLywKIAkJCQlGRDMxNjA1RTEy
QjAyNkY3MDBDMUEzNTkgLyogRkZUQ29udm9sdmVyLmNwcCAqLywKQEAgLTIyNzQxLDYgKzIyNzQ0
LDcgQEAKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTRmlsdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzN0FGRkRGNzEzNzBBMEI4MDBFODk1QzAgLyogU2hhcmVkQnVmZmVyQ1JM
RkxpbmVSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OUUzNzE3MTM3MzZBNjYwMEI5RTkx
OSAvKiBRdW90ZWRQcmludGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZEMTY2MEE1MTM3ODdD
NkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rlbm9ybWFsRGlzYWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EZW5vcm1hbERpc2FibGVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EZW5vcm1hbERpc2Fi
bGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IERlbm9ybWFsRGlzYWJsZXJfaAorI2RlZmluZSBEZW5vcm1hbERpc2FibGVyX2gKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBEZWFsIHdpdGggZGVub3JtYWxzLiBUaGV5IGNhbiB2ZXJ5IHNl
cmlvdXNseSBpbXBhY3QgcGVyZm9ybWFuY2Ugb24geDg2LgorCisjaWYgZGVmaW5lZChfX0dOVUNf
XykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCitjbGFzcyBE
ZW5vcm1hbERpc2FibGVyIHsKK3B1YmxpYzoKKyAgICBEZW5vcm1hbERpc2FibGVyKCkKKyAgICB7
CisgICAgICAgIG1fc2F2ZWRDU1IgPSBnZXRDU1IoKTsKKyAgICAgICAgc2V0Q1NSKG1fc2F2ZWRD
U1IgfCAweDgwNDApOworICAgIH0KKworICAgIH5EZW5vcm1hbERpc2FibGVyKCkKKyAgICB7Cisg
ICAgICAgIHNldENTUihtX3NhdmVkQ1NSKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW5saW5l
IGludCBnZXRDU1IoKQorICAgIHsKKyAgICAgICAgaW50IHJlc3VsdDsKKyAgICAgICAgYXNtIHZv
bGF0aWxlKCJzdG14Y3NyICUwIiA6ICI9bSIgKComcmVzdWx0KSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgc2V0Q1NSKGludCBhKQorICAgIHsKKyAg
ICAgICAgaW50IHRlbXAgPSBhOworICAgICAgICBhc20gdm9sYXRpbGUoImxkbXhjc3IgJTAiIDog
OiAibSIgKComdGVtcCkpOworICAgIH0KKworICAgIGludCBtX3NhdmVkQ1NSOworfTsKKworI2Vs
c2UKKy8vIEZJWE1FOiBhZGQgaW1wbGVtZW50YXRpb25zIGZvciBvdGhlciBhcmNoaXRlY3R1cmVz
IGFuZCBjb21waWxlcnMgc3VjaCBhcyBWaXN1YWwgU3R1ZGlvLgorY2xhc3MgRGVub3JtYWxEaXNh
YmxlciB7CitwdWJsaWM6CisgICAgRGVub3JtYWxEaXNhYmxlcigpIHsgfQorfTsKKworI2VuZGlm
CisKK30gLy8gV2ViQ29yZQorCisjZW5kaWYgLy8gRGVub3JtYWxEaXNhYmxlcl9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCShy
ZXZpc2lvbiA4NjA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkF1
ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCiAjaW5jbHVkZSAiQXVk
aW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiRGVub3JtYWxEaXNhYmxlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCkBAIC01Miw2ICs1MywxMSBAQCBBdWRpb0Rlc3RpbmF0aW9uTm9k
ZTo6fkF1ZGlvRGVzdGluYXRpb25OCiAvLyBUaGUgYXVkaW8gaGFyZHdhcmUgY2FsbHMgdXMgYmFj
ayBoZXJlIHRvIGdldHMgaXRzIGlucHV0IHN0cmVhbS4KIHZvaWQgQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHNpemVfdCBudW1iZXJP
ZkZyYW1lcykKIHsKKyAgICAvLyBXZSBkb24ndCB3YW50IGRlbm9ybWFscyBzbG93aW5nIGRvd24g
YW55IG9mIHRoZSBhdWRpbyBwcm9jZXNzaW5nCisgICAgLy8gc2luY2UgdGhleSBjYW4gdmVyeSBz
ZXJpb3VzbHkgaHVydCBwZXJmb3JtYW5jZS4KKyAgICAvLyBUaGlzIHdpbGwgdGFrZSBjYXJlIG9m
IGFsbCBBdWRpb05vZGVzIGJlY2F1c2UgdGhleSBhbGwgcHJvY2VzcyB3aXRoaW4gdGhpcyBzY29w
ZS4KKyAgICBEZW5vcm1hbERpc2FibGVyIGRlbm9ybWFsRGlzYWJsZXI7CisgICAgCiAgICAgY29u
dGV4dCgpLT5zZXRBdWRpb1RocmVhZChjdXJyZW50VGhyZWFkKCkpOwogICAgIAogICAgIGlmICgh
Y29udGV4dCgpLT5pc1J1bm5hYmxlKCkpIHsK
</data>
<flag name="review"
          id="85870"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>