<?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>103216</bug_id>
          
          <creation_ts>2012-11-25 23:01:07 -0800</creation_ts>
          <short_desc>PNG decode performance: avoid using frame buffer.setRGBA(x,y)</short_desc>
          <delta_ts>2012-11-27 16:51:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</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>
          
          <blocked>88424</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="noel gordon">noel.gordon</reporter>
          <assigned_to name="noel gordon">noel.gordon</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>ostap73</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>775168</commentid>
    <comment_count>0</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-25 23:01:07 -0800</bug_when>
    <thetext>Writing decoded row pixels to the frame buffer with buffer.setRGBA(x,y) is slow compared to writing direct to the frame buffer. 

I disabled color profiles in the PNG decoder, and instrumented the total decode time and time taken to write row data to the frame buffer.  The amount in ()&apos;s is the percentage of decode time spent writing row data.

http://duke.kenai.com/eco/DukeTreeHuggerSmall.png
           row write time 0.002204
           PNG decode ends 0.016935 (13%)

http://duke.kenai.com/eco/DukeTreeHuggerSmall.png
           row write time 0.022714
           PNG decode ends 0.141308 (16%)

http://trac.webkit.org/browser/trunk/LayoutTests/fast/images/resources/red-at-12-oclock-with-color-profile.png
           row write time 0.001901
           PNG decode ends 0.012777 (14%)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775171</commentid>
    <comment_count>1</comment_count>
      <attachid>175930</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-25 23:05:23 -0800</bug_when>
    <thetext>Created attachment 175930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775173</commentid>
    <comment_count>2</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-25 23:12:25 -0800</bug_when>
    <thetext>The patch avoids using buffer.setRGBA(x,y), and writes direct to the frame buffer.  This reduces decoding time 2% or more for these images. 

http://duke.kenai.com/eco/DukeTreeHuggerSmall.png
          row write time 0.001829
          PNG decode ends 0.016632 (10%)

http://duke.kenai.com/eco/DukeTreeHuggerSmall.png
          row write time 0.017736
          PNG decode ends 0.136413 (13%)

http://trac.webkit.org/browser/trunk/LayoutTests/fast/images/resources/red-at-12-oclock-with-color-profile.png
          row write time 0.001005
          PNG decode ends 0.012086 (8%)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775213</commentid>
    <comment_count>3</comment_count>
      <attachid>175930</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-26 00:26:01 -0800</bug_when>
    <thetext>Comment on attachment 175930
Patch

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

Looks good. I&apos;ll r+ after the EWS finishes running.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:134
&gt; +        void reportMemoryUsage(MemoryObjectInfo*) const;

Why was this moved?

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:170
&gt; +                float alphaPercent = a / 255.0f;

Divides are costly. It might save ~20 cycles to multiply a by a precomputed &quot;1/255.0f&quot; I&apos;m not sure if this would create any significant inaccuracies due to the vagaries of floating point math...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775291</commentid>
    <comment_count>4</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 02:47:24 -0800</bug_when>
    <thetext>
(In reply to comment #3)

&gt; &gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:134
&gt; &gt; +        void reportMemoryUsage(MemoryObjectInfo*) const;
&gt; 
&gt; Why was this moved?

It was in the middle of routines dealing with frame buffer writing.  Seemed misplaced to me, so I moved it elsewhere.

&gt; &gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:170
&gt; &gt; +                float alphaPercent = a / 255.0f;
&gt; 
&gt; Divides are costly. It might save ~20 cycles to multiply a by a precomputed &quot;1/255.0f&quot; I&apos;m not sure if this would create any significant inaccuracies due to the vagaries of floating point math...

Indeed.  We have inaccuracies as the code stands for other reasons, and a change here might introduce more.  Not looking to change behavior on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775466</commentid>
    <comment_count>5</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-11-26 07:29:51 -0800</bug_when>
    <thetext>This is basically duplicate of bug 88424 and recent patch there does the same for all image formats with some extra.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775480</commentid>
    <comment_count>6</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-11-26 07:53:22 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 175930 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175930&amp;action=review
&gt; 
&gt; Looks good. I&apos;ll r+ after the EWS finishes running.

I would ask you too look at the complete patch which has this as a part: https://bugs.webkit.org/attachment.cgi?id=175328&amp;action=review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775591</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-26 10:01:13 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 175930 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175930&amp;action=review
&gt; &gt; 
&gt; &gt; Looks good. I&apos;ll r+ after the EWS finishes running.
&gt; 
&gt; I would ask you too look at the complete patch which has this as a part: https://bugs.webkit.org/attachment.cgi?id=175328&amp;action=review

Battle of the competing patches!

I must admit that I prefer Viatcheslav&apos;s handling of the advancement of the address position, but otherwise I think that committing these as individual changes is better from a review standpoint.

Noel, do you have committer rights?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775698</commentid>
    <comment_count>8</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-11-26 11:20:40 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 175930 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175930&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Looks good. I&apos;ll r+ after the EWS finishes running.
&gt; &gt; 
&gt; &gt; I would ask you too look at the complete patch which has this as a part: https://bugs.webkit.org/attachment.cgi?id=175328&amp;action=review
&gt; 
&gt; Battle of the competing patches!
&gt; 
&gt; I must admit that I prefer Viatcheslav&apos;s 

Actually it is not my patch. I just rebaselined original patch from a person who submitted it half a year ago, but doesn&apos;t work on webkit anymore. This upstreamed patch showed great improvement on mobile devices where CPU branch prediction is not so good as on desktop processors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775984</commentid>
    <comment_count>9</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 15:39:19 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; This is basically duplicate of bug 88424 and recent patch there does the same for all image formats with some extra.

(In reply to comment #6)
&gt; 
&gt; I would ask you too look at the complete patch which has this as a part: https://bugs.webkit.org/attachment.cgi?id=175328&amp;action=review

I would r- that patch: insufficient ChangeLog, it breaks JPEG on some ports, and is poorly tested, yet you claim it greatly improves performance on mobile mobile devices.

We are shipping code in a production browser environments: production is the wrong place to test webkit patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775987</commentid>
    <comment_count>10</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 15:41:44 -0800</bug_when>
    <thetext>(In reply to comment #7)

&gt; I must admit that I prefer Viatcheslav&apos;s handling of the advancement of the address position, but otherwise I think that committing these as individual changes is better from a review standpoint.

Moreover, individual changes are easier to test, and roll out.

&gt; Noel, do you have committer rights?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776054</commentid>
    <comment_count>11</comment_count>
      <attachid>175930</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-26 16:38:15 -0800</bug_when>
    <thetext>Comment on attachment 175930
Patch

Let&apos;s get this started!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776056</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-26 16:40:17 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; 
&gt; &gt; I must admit that I prefer Viatcheslav&apos;s handling of the advancement of the address position, but otherwise I think that committing these as individual changes is better from a review standpoint.
&gt; 
&gt; Moreover, individual changes are easier to test, and roll out.
&gt; 
&gt; &gt; Noel, do you have committer rights?
&gt; 
&gt; Yes.

Okay. I marked this as r+, and cq+.  I&apos;ll update 88424 to rebaseline after this lands, as those changes will no longer be necessary.

Incidentally, how are you instrumenting the code to run your performance checks? If this is documented somewhere I&apos;d like to get up-to-speed with it for some future changes I&apos;d like to try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776084</commentid>
    <comment_count>13</comment_count>
      <attachid>175930</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 16:58:45 -0800</bug_when>
    <thetext>Comment on attachment 175930
Patch

Rejecting attachment 175930 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
 (content): Merge conflict in Source/WebKit/chromium/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 RenderStyle: Move &apos;list-style-image&apos; to rare inherited data.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 154.

Full output: http://queues.webkit.org/results/14989805</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776111</commentid>
    <comment_count>14</comment_count>
      <attachid>176121</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 17:21:21 -0800</bug_when>
    <thetext>Created attachment 176121
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776119</commentid>
    <comment_count>15</comment_count>
      <attachid>176121</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-26 17:25:20 -0800</bug_when>
    <thetext>Comment on attachment 176121
Patch for landing

Thanks for rebaselining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776166</commentid>
    <comment_count>16</comment_count>
      <attachid>176121</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 18:11:04 -0800</bug_when>
    <thetext>Comment on attachment 176121
Patch for landing

Clearing flags on attachment: 176121

Committed r135799: &lt;http://trac.webkit.org/changeset/135799&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776167</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 18:11:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776172</commentid>
    <comment_count>18</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 18:15:57 -0800</bug_when>
    <thetext>(In reply to comment #0)

The second image URL was wrong: should be http://duke.kenai.com/eco/GreenThumbLarge.png

&gt; Writing decoded row pixels to the frame buffer with buffer.setRGBA(x,y) is slow compared to writing direct to the frame buffer. 
&gt; 
&gt; I disabled color profiles in the PNG decoder, and instrumented the total decode time and time taken to write row data to the frame buffer.  The amount in ()&apos;s is the percentage of decode time spent writing row data.

http://duke.kenai.com/eco/DukeTreeHuggerSmall.png
           row write time 0.002204
           PNG decode ends 0.016935 (13%)

http://duke.kenai.com/eco/GreenThumbLarge.png
           row write time 0.022714
           PNG decode ends 0.141308 (16%)

http://trac.webkit.org/browser/trunk/LayoutTests/fast/images/resources/red-at-12-oclock-with-color-profile.png
           row write time 0.001901
           PNG decode ends 0.012777 (14%)

(In reply to comment #2)

&gt; The patch avoids using buffer.setRGBA(x,y), and writes direct to the frame buffer.  This reduces decoding time 2% or more for these images. 
 
http://duke.kenai.com/eco/DukeTreeHuggerSmall.png
           row write time 0.001829
           PNG decode ends 0.016632 (10%)
 
http://duke.kenai.com/eco/GreenThumbLarge.png
           row write time 0.017736
           PNG decode ends 0.136413 (13%)
 
http://trac.webkit.org/browser/trunk/LayoutTests/fast/images/resources/red-at-12-oclock-with-color-profile.png
           row write time 0.001005
           PNG decode ends 0.012086 (8%)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776192</commentid>
    <comment_count>19</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 18:39:50 -0800</bug_when>
    <thetext>(In reply to comment #12)

&gt; Incidentally, how are you instrumenting the code to run your performance checks? If this is documented somewhere I&apos;d like to get up-to-speed with it for some future changes I&apos;d like to try.

My only documentation is a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776193</commentid>
    <comment_count>20</comment_count>
      <attachid>176140</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 18:41:28 -0800</bug_when>
    <thetext>Created attachment 176140
png.write.time.git.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776197</commentid>
    <comment_count>21</comment_count>
      <attachid>176143</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 18:44:02 -0800</bug_when>
    <thetext>Created attachment 176143
png.decoder.time.git.diff

This is the timing patch I used for the test results on this bug.  Enjoy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776564</commentid>
    <comment_count>22</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-27 03:22:22 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; Divides are costly. It might save ~20 cycles to multiply a by a precomputed &quot;1/255.0f&quot; I&apos;m not sure if this would create any significant inaccuracies due to the vagaries of floating point math...

Given the above timing patch, one can try multiplying by the constant factor 1/255.0 to avoid the division.  My result on Chromium Mac is no speed improvement :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776963</commentid>
    <comment_count>23</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-27 10:43:27 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #3)
&gt; 
&gt; &gt; Divides are costly. It might save ~20 cycles to multiply a by a precomputed &quot;1/255.0f&quot; I&apos;m not sure if this would create any significant inaccuracies due to the vagaries of floating point math...
&gt; 
&gt; Given the above timing patch, one can try multiplying by the constant factor 1/255.0 to avoid the division.  My result on Chromium Mac is no speed improvement :/

Thanks for checking -- it was worth a try.  I&apos;ve seen this shave a few percent off of tight loops in the past, but we must not be hitting this hard enough for typical use cases.

There are other places where we do this kind of pass over the entire contents of a buffer.  Converting to multiplies across the board would probably help some, and taking advantage of SSE vectorizing would potentially be an even bigger win, assuming alignment is dealt with properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777228</commentid>
    <comment_count>24</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-27 14:25:55 -0800</bug_when>
    <thetext>(In reply to comment #23)

I&apos;ve similarly seen a few percent shaved off tight loops by converting a div to a mul (example below).  Perhaps Clang automatically computes the inverse.

&gt; Converting to multiplies across the board would probably help some, and taking advantage of SSE vectorizing would potentially be an even bigger win ...

Indeed.  Skia has alpha pre-multiplication converters that avoid the division by using shifts 

http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/skia/src/core/SkMathPriv.h&amp;exact_package=chromium&amp;q=SkMulDiv255&amp;type=cs&amp;l=72

and SSE would be faster still.  However, doing it right either way requires a  understanding of whether to round, truncate, or ceiling the result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777233</commentid>
    <comment_count>25</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-27 14:31:18 -0800</bug_when>
    <thetext>Also you asked for ImageFrame width() and height() to be inlined in this bug and I prepared a separate patch for that: bug 103401 -- did I misunderstand https://bugs.webkit.org/show_bug.cgi?id=88424#c38 ??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777243</commentid>
    <comment_count>26</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-27 14:49:03 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Also you asked for ImageFrame width() and height() to be inlined in this bug and I prepared a separate patch for that: bug 103401 -- did I misunderstand https://bugs.webkit.org/show_bug.cgi?id=88424#c38 ??

No -- you didn&apos;t misunderstand, though it may not be worth doing in its own patch.  I think ostap&apos;s current patch  (rebaselined after landing this bug) includes the inlining.

I think it would be good to combine the width/height inlining with a possible templatized setRGBA implementation that gets rid of the branching for premultiplication, since we know outside the main loop whether we need to apply those transformations or not.  No need to test for each pixel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777305</commentid>
    <comment_count>27</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-27 16:05:33 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; Also you asked for ImageFrame width() and height() to be inlined in this bug and I prepared a separate patch for that: bug 103401 -- did I misunderstand https://bugs.webkit.org/show_bug.cgi?id=88424#c38 ??
&gt; 
&gt; No -- you didn&apos;t misunderstand, though it may not be worth doing in its own patch.  I think ostap&apos;s current patch  (rebaselined after landing this bug) includes the inlining.

But as public symbols.  Can we please not do that.

&gt; I think it would be good to combine the width/height inlining with a possible templatized setRGBA implementation that gets rid of the branching for premultiplication, since we know outside the main loop whether we need to apply those transformations or not.  No need to test for each pixel.

Noting that the 3d canvas (WebGL) performance and tests will need to be looked as a result.  Perhaps one simple step at a time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777382</commentid>
    <comment_count>28</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-27 16:51:53 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; But as public symbols.  Can we please not do that.

Oh!  Right, they don&apos;t need to be exposed at all.

&gt; Noting that the 3d canvas (WebGL) performance and tests will need to be looked as a result.  Perhaps one simple step at a time.

Sounds good.  By the way, I&apos;ve created a patch to track adding ostap&apos;s profiling utility (https://bugs.webkit.org/show_bug.cgi?id=103463).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175930</attachid>
            <date>2012-11-25 23:05:23 -0800</date>
            <delta_ts>2012-11-26 17:21:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103216-20121126180301.patch</filename>
            <type>text/plain</type>
            <size>5821</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk5MzgzMDYyYmQ0MGZl
ZTIwODE0NDBhYjQ5OTYzNDgxNmEwN2ZiMi4uY2RmNDE4Y2Y0MjdjOWVlOWU5NTc3MDZkMjk5ZTU4
Y2IwNWQ5OGFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTExLTI1ICBOb2Vs
IEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KKworICAgICAgICBQTkcgZGVjb2RlIHBl
cmZvcm1hbmNlOiBhdm9pZCB1c2luZyBmcmFtZSBidWZmZXIuc2V0UkdCQSh4LHkpCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMyMTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXcml0aW5nIGRlY29kZWQg
cm93IHBpeGVscyB0byB0aGUgZnJhbWUgYnVmZmVyIHdpdGggYnVmZmVyLnNldFJHQkEoeCx5KSBp
cyBzbG93IGNvbXBhcmVkCisgICAgICAgIHRvIHdyaXRpbmcgZGlyZWN0IHRvIHRoZSBmcmFtZSBi
dWZmZXIgYWRkcmVzcy4gVXNlIGJ1ZmZlci5nZXRBZGRyKCkgdG8gb2J0YWluIHRoZSBvdXRwdXQK
KyAgICAgICAgcGl4ZWwgcm93IGFkZHJlc3MsIHdyaXRlIHRoZSBkZWNvZGVkIHJvdyBwaXhlbHMg
dG8gdGhhdCBhZGRyZXNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBtYW55
IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKTogTWFr
ZSByb3V0aW5lIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCAuLi4pIHB1YmxpYy4gVGVzdAorICAg
ICAgICBtX3ByZW11bHRpcGx5QWxwaGEgb25jZSB0byBtaW5pbWl6ZSBjb2RlIGJyYW5jaGluZyBp
biB0aGlzIHJvdXRpbmUuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJv
d0F2YWlsYWJsZSk6IFdyaXRlIGRlY29kZWQgcm93IHBpeGVscyB0byB0aGUgZnJhbWUgYnVmZmVy
CisgICAgICAgIHVzaW5nIHRoZSBwaXhlbCBhZGRyZXNzIGZvcm06IGJ1ZmZlci5zZXRSR0JBKGFk
ZHJlc3MrKywgLi4uKS4KKwogMjAxMi0xMS0xOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBNYWtlIG5hbWVkSXRlbSByZXR1cm4gYSBub2RlIGxpc3Qgb25seSBp
biBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiBhbmQgSFRNTE9wdGlvbnNDb2xsZWN0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCmluZGV4IDJiNWM5ODM2YTM5ZDIxM2U4OWI2MzliNjY4ZGVhMTI1ZWI2OWNhOTguLjMy
Nzc1YzRjZmU5NzkzNDQ3YjFjYjc2YTU3YjA1Mjk1OTVhYmZkNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0x
MzEsNiArMTMxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldER1cmF0
aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAgICAg
ICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1f
ZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KICAgICAgICAgdm9pZCBzZXRQcmVtdWx0aXBseUFs
cGhhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkgeyBtX3ByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0
aXBseUFscGhhOyB9CisgICAgICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyopIGNvbnN0OwogCiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5
LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAg
ICB7CkBAIC0xNDYsOCArMTQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAg
ICAgIH0KIAotICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
KSBjb25zdDsKLQogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgICAgICB2b2lkIHNldFNrQml0
bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCiAgICAgICAgIHsKQEAgLTE2MCwzMiArMTU5LDMy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogI2VuZGlmCiAKLSAgICBwcml2YXRl
OgotICAgICAgICBpbnQgd2lkdGgoKSBjb25zdDsKLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0
OwotCiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25l
ZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmICFhKQotICAgICAgICAgICAgICAgICpk
ZXN0ID0gMDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChtX3ByZW11
bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbHBo
YVBlcmNlbnQgPSBhIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgICAgICByID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHIgKiBhbHBoYVBlcmNlbnQpOwotICAgICAgICAgICAgICAgICAgICBnID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGcgKiBhbHBoYVBlcmNlbnQpOwotICAgICAgICAgICAgICAg
ICAgICBiID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGIgKiBhbHBoYVBlcmNlbnQpOworICAgICAg
ICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFhKSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZs
b2F0IGFscGhhUGVyY2VudCA9IGEgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgciA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihyICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgICAgICBnID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGcgKiBhbHBoYVBlcmNlbnQpOworICAgICAgICAgICAgICAg
IGIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYiAqIGFscGhhUGVyY2VudCk7CisgICAgICAgICAg
ICB9CiAjaWYgVVNFKFNLSUEpCi0gICAgICAgICAgICAgICAgLy8gd2UgYXJlIHN1cmUgdG8gY2Fs
bCB0aGUgTm9DaGVjayB2ZXJzaW9uLCBzaW5jZSB3ZSBtYXkKLSAgICAgICAgICAgICAgICAvLyBk
ZWxpYmVyYXRlbHkgcGFzcyBub24tcHJlbXVsdGlwbGllZCB2YWx1ZXMsIGFuZCB3ZSBkb24ndCB3
YW50Ci0gICAgICAgICAgICAgICAgLy8gYW4gYXNzZXJ0LgotICAgICAgICAgICAgICAgICpkZXN0
ID0gU2tQYWNrQVJHQjMyTm9DaGVjayhhLCByLCBnLCBiKTsKKyAgICAgICAgICAgIC8vIENhbGwg
dGhlICJOb0NoZWNrIiB2ZXJzaW9uIHNpbmNlIHdlIG1heSBkZWxpYmVyYXRlbHkgcGFzcyBub24t
cHJlbXVsdGlwbGllZAorICAgICAgICAgICAgLy8gdmFsdWVzLCBhbmQgd2UgZG9uJ3Qgd2FudCBh
biBhc3NlcnQuCisgICAgICAgICAgICAqZGVzdCA9IFNrUGFja0FSR0IzMk5vQ2hlY2soYSwgciwg
ZywgYik7CiAjZWxzZQotICAgICAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2
IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8
IGcgPDwgOCB8IGIpOwogI2VuZGlmCi0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgIHBy
aXZhdGU6CisgICAgICAgIGludCB3aWR0aCgpIGNvbnN0OworICAgICAgICBpbnQgaGVpZ2h0KCkg
Y29uc3Q7CisKICNpZiBVU0UoU0tJQSkKICAgICAgICAgTmF0aXZlSW1hZ2VTa2lhIG1fYml0bWFw
OwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggYjBjMmFkYzlmMTIzN2U1
OGNiYTEwMmYxYWYwNTkyOTEzYTlhMzhkMC4uNzk4NGM5YWU4MDYzZjNmOTc4Y2QzZmNkODRkNzJi
NWQyYzg4YzUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTQ5OSw2ICs0OTks
NyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJv
d0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAjZW5kaWYKIAogICAgIC8vIFdyaXRlIHRoZSBk
ZWNvZGVkIHJvdyBwaXhlbHMgdG8gdGhlIGZyYW1lIGJ1ZmZlci4KKyAgICBJbWFnZUZyYW1lOjpQ
aXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCB5KTsKICAgICBpbnQgd2lkdGgg
PSBzY2FsZWRTaXplKCkud2lkdGgoKTsKICAgICBib29sIG5vblRyaXZpYWxBbHBoYSA9IGZhbHNl
OwogCkBAIC01MDYsNyArNTA3LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewogICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSBy
b3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAqIGNvbG9yQ2hhbm5lbHM7
CiAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKLSAg
ICAgICAgYnVmZmVyLnNldFJHQkEoeCwgeSwgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwg
YWxwaGEpOworICAgICAgICBidWZmZXIuc2V0UkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhl
bFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgbm9uVHJpdmlhbEFscGhhIHw9IGFscGhh
IDwgMjU1OwogICAgIH0KICNlbHNlCkBAIC01MTQsNyArNTE1LDcgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJv
d0luZGV4LAogICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyArK3gsIHBpeGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAgICAgdW5zaWdu
ZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwotICAgICAgICBidWZmZXIuc2V0
UkdCQSh4LCB5LCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CisgICAgICAg
IGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwg
YWxwaGEpOwogICAgICAgICBub25Ucml2aWFsQWxwaGEgfD0gYWxwaGEgPCAyNTU7CiAgICAgfQog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176121</attachid>
            <date>2012-11-26 17:21:21 -0800</date>
            <delta_ts>2012-11-26 18:11:04 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103216-20121127121857.patch</filename>
            <type>text/plain</type>
            <size>5754</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTMxZmQ2YzAxODhmNDFi
YjFjOTE0OWVjYzE3ZDc4OWVhZWU1MmM2Ni4uNmMwOTRmZDdkNmJjYTJhMmVjNWUzNTM5ZGQwZjc1
ZmY4ZDg4MTdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTExLTI2ICBOb2Vs
IEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KKworICAgICAgICBQTkcgZGVjb2RlIHBl
cmZvcm1hbmNlOiBhdm9pZCB1c2luZyBmcmFtZSBidWZmZXIuc2V0UkdCQSh4LHkpCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMyMTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBCcmVudCBGdWxnaGFtLgorCisgICAgICAgIFdyaXRpbmcgZGVjb2RlZCBy
b3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIgd2l0aCBidWZmZXIuc2V0UkdCQSh4LHkpIGlz
IHNsb3cgY29tcGFyZWQKKyAgICAgICAgdG8gd3JpdGluZyBkaXJlY3QgdG8gdGhlIGZyYW1lIGJ1
ZmZlciBhZGRyZXNzLiBVc2UgYnVmZmVyLmdldEFkZHIoKSB0byBvYnRhaW4gdGhlIG91dHB1dAor
ICAgICAgICBwaXhlbCByb3cgYWRkcmVzcywgd3JpdGUgdGhlIGRlY29kZWQgcm93IHBpeGVscyB0
byB0aGF0IGFkZHJlc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IG1hbnkg
ZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJHQkEpOiBNYWtl
IHJvdXRpbmUgc2V0UkdCQShQaXhlbERhdGEqIGRlc3QsIC4uLikgcHVibGljLiBUZXN0CisgICAg
ICAgIG1fcHJlbXVsdGlwbHlBbHBoYSBvbmNlIHRvIG1pbmltaXplIGNvZGUgYnJhbmNoaW5nIGlu
IHRoaXMgcm91dGluZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93
QXZhaWxhYmxlKTogV3JpdGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIK
KyAgICAgICAgdXNpbmcgdGhlIHBpeGVsIGFkZHJlc3MgZm9ybTogYnVmZmVyLnNldFJHQkEoYWRk
cmVzcysrLCAuLi4pLgorCiAyMDEyLTExLTI2ICBWYXJ1biBKYWluICA8dmFydW5qYWluQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBMb25nUHJlc3MgYW5kIExvbmdUYXAgZ2VzdHVyZXMgc2hvdWxk
IHN0YXJ0IGRyYWcvZHJvcCBhbmQgb3BlbiBjb250ZXh0IG1lbnUgcmVzcGVjdGl2ZWx5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaAppbmRleCAyYjVjOTgzNmEzOWQyMTNlODliNjM5YjY2OGRlYTEyNWViNjljYTk4Li5lNDJi
YjczZGNhZTkwYTM1ODFiMjUzNjBjMmE2YzUxMmVhMTY2YTY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMTIz
LDYgKzEyMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgZHVyYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxN
ZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9
CiAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVs
dGlwbHlBbHBoYTsgfQorICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwog
ICAgICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShjb25zdCBDb2xvclByb2ZpbGUmKTsKQEAgLTE0
Niw4ICsxNDcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICAgICAgfQogCi0g
ICAgICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0Owot
CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIHZvaWQgc2V0U2tCaXRtYXAoY29uc3Qg
U2tCaXRtYXAmIGJpdG1hcCkKICAgICAgICAgewpAQCAtMTYwLDMyICsxNTksMzIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB9CiAjZW5kaWYKIAotICAgIHByaXZhdGU6Ci0gICAgICAg
IGludCB3aWR0aCgpIGNvbnN0OwotICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7Ci0KICAgICAg
ICAgaW5saW5lIHZvaWQgc2V0UkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2ln
bmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX3ByZW11bHRpcGx5QWxwaGEgJiYgIWEpCi0gICAgICAgICAgICAgICAgKmRlc3QgPSAwOwot
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBo
YSAmJiBhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGFscGhhUGVyY2VudCA9
IGEgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ociAqIGFscGhhUGVyY2VudCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZyAqIGFscGhhUGVyY2VudCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYiAqIGFscGhhUGVyY2VudCk7CisgICAgICAgICAgICBpZiAo
bV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWEp
IHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmxvYXQgYWxwaGFQ
ZXJjZW50ID0gYSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICByID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHIgKiBhbHBoYVBlcmNlbnQpOworICAgICAgICAgICAgICAgIGcgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZyAqIGFscGhhUGVyY2VudCk7CisgICAgICAgICAgICAgICAgYiA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihiICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgIH0KICNpZiBV
U0UoU0tJQSkKLSAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgc3VyZSB0byBjYWxsIHRoZSBOb0No
ZWNrIHZlcnNpb24sIHNpbmNlIHdlIG1heQotICAgICAgICAgICAgICAgIC8vIGRlbGliZXJhdGVs
eSBwYXNzIG5vbi1wcmVtdWx0aXBsaWVkIHZhbHVlcywgYW5kIHdlIGRvbid0IHdhbnQKLSAgICAg
ICAgICAgICAgICAvLyBhbiBhc3NlcnQuCi0gICAgICAgICAgICAgICAgKmRlc3QgPSBTa1BhY2tB
UkdCMzJOb0NoZWNrKGEsIHIsIGcsIGIpOworICAgICAgICAgICAgLy8gQ2FsbCB0aGUgIk5vQ2hl
Y2siIHZlcnNpb24gc2luY2Ugd2UgbWF5IGRlbGliZXJhdGVseSBwYXNzIG5vbi1wcmVtdWx0aXBs
aWVkCisgICAgICAgICAgICAvLyB2YWx1ZXMsIGFuZCB3ZSBkb24ndCB3YW50IGFuIGFzc2VydC4K
KyAgICAgICAgICAgICpkZXN0ID0gU2tQYWNrQVJHQjMyTm9DaGVjayhhLCByLCBnLCBiKTsKICNl
bHNlCi0gICAgICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDgg
fCBiKTsKKyAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwg
Yik7CiAjZW5kaWYKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgICAgIGludCBoZWlnaHQoKSBjb25zdDsKKwog
I2lmIFVTRShTS0lBKQogICAgICAgICBOYXRpdmVJbWFnZVNraWEgbV9iaXRtYXA7CiAjZWxzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBiMGMyYWRjOWYxMjM3ZTU4Y2JhMTAyZjFh
ZjA1OTI5MTNhOWEzOGQwLi43OTg0YzlhZTgwNjNmM2Y5NzhjZDNmY2Q4NGQ3MmI1ZDJjODhjNTJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApAQCAtNDk5LDYgKzQ5OSw3IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1
bnNpZ25lZCByb3dJbmRleCwKICNlbmRpZgogCiAgICAgLy8gV3JpdGUgdGhlIGRlY29kZWQgcm93
IHBpeGVscyB0byB0aGUgZnJhbWUgYnVmZmVyLgorICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSog
YWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIHkpOwogICAgIGludCB3aWR0aCA9IHNjYWxlZFNp
emUoKS53aWR0aCgpOwogICAgIGJvb2wgbm9uVHJpdmlhbEFscGhhID0gZmFsc2U7CiAKQEAgLTUw
Niw3ICs1MDcsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVk
IGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgKyt4KSB7CiAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3Nj
YWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAgICAg
dW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwotICAgICAgICBidWZm
ZXIuc2V0UkdCQSh4LCB5LCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7Cisg
ICAgICAgIGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhl
bFsyXSwgYWxwaGEpOwogICAgICAgICBub25Ucml2aWFsQWxwaGEgfD0gYWxwaGEgPCAyNTU7CiAg
ICAgfQogI2Vsc2UKQEAgLTUxNCw3ICs1MTUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93
QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAg
ICAgcG5nX2J5dGVwIHBpeGVsID0gcm93OwogICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
ICsreCwgcGl4ZWwgKz0gY29sb3JDaGFubmVscykgewogICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7Ci0gICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHks
IHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAgICAgYnVmZmVyLnNl
dFJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAg
ICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKICAgICB9CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>176140</attachid>
            <date>2012-11-26 18:41:28 -0800</date>
            <delta_ts>2012-11-26 18:41:28 -0800</delta_ts>
            <desc>png.write.time.git.diff</desc>
            <filename>png.write.time.git.diff</filename>
            <type>text/plain</type>
            <size>3675</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggYjBjMmFkYy4uNWM1NGE1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJwbmcu
aCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiAjaWYgVVNFKFFDTVNMSUIpCiAj
aW5jbHVkZSAicWNtcy5oIgpAQCAtMzUyLDYgKzM1Myw5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
OjpoZWFkZXJBdmFpbGFibGUoKQogCiAgICAgaWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQ
RV9HUkFZIHx8IGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBKQogICAgICAg
ICBwbmdfc2V0X2dyYXlfdG9fcmdiKHBuZyk7CisgICAgICAgIAorICAgIC8vIEhBQ0sobm9lbCkg
aWdub3JlIGNvbG9yIHByb2ZpbGVzIGZvciByb3cgdGltZSB0ZXN0aW5nLgorICAgIG1faWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUgPSB0cnVlOwogCiAgICAgaWYgKChjb2xvclR5cGUgJiBQTkdf
Q09MT1JfTUFTS19DT0xPUikgJiYgIW1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpIHsKICAg
ICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGNvbG9yIHByb2ZpbGVzIGZvciBjb2xvciBQQUxFVFRF
IGFuZCBSR0JbQV0gUE5HLiBTdXBwb3J0aW5nCkBAIC0zNjAsNiArMzY0LDcgQEAgdm9pZCBQTkdJ
bWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgICAgIC8vIGRvIG5vdCBzaW1pbGFy
bHkgdHJhbnNmb3JtIHRoZSBjb2xvciBwcm9maWxlLiBXZSdkIGVpdGhlciBuZWVkIHRvIHRyYW5z
Zm9ybQogICAgICAgICAvLyB0aGUgY29sb3IgcHJvZmlsZSBvciB3ZSdkIG5lZWQgdG8gZGVjb2Rl
IGludG8gYSBncmF5LXNjYWxlIGltYWdlIGJ1ZmZlciBhbmQKICAgICAgICAgLy8gaGFuZCB0aGF0
IHRvIENvcmVHcmFwaGljcy4KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgKiogZXJyb3I6IHJl
YWRpbmcgY29sb3IgcHJvZmlsZSAoV1RGKVxuIik7CiAgICAgICAgIHJlYWRDb2xvclByb2ZpbGUo
cG5nLCBpbmZvLCBtX2NvbG9yUHJvZmlsZSk7CiAjaWYgVVNFKFFDTVNMSUIpCiAgICAgICAgIGJv
b2wgZGVjb2RlZEltYWdlSGFzQWxwaGEgPSAoY29sb3JUeXBlICYgUE5HX0NPTE9SX01BU0tfQUxQ
SEEpIHx8IHRybnNDb3VudDsKQEAgLTQ5MywxMSArNDk4LDEzIEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJ
bmRleCwKIAogI2lmIFVTRShRQ01TTElCKQogICAgIGlmIChxY21zX3RyYW5zZm9ybSogdHJhbnNm
b3JtID0gbV9yZWFkZXItPmNvbG9yVHJhbnNmb3JtKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICIgKiogZXJyb3I6IGFwcGx5aW5nIGNvbG9yIHByb2ZpbGUgKFdURilcbiIpOwogICAgICAg
ICBxY21zX3RyYW5zZm9ybV9kYXRhKHRyYW5zZm9ybSwgcm93LCBtX3JlYWRlci0+cm93QnVmZmVy
KCksIHNpemUoKS53aWR0aCgpKTsKICAgICAgICAgcm93ID0gbV9yZWFkZXItPnJvd0J1ZmZlcigp
OwogICAgIH0KICNlbmRpZgogCisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7
CiAgICAgLy8gV3JpdGUgdGhlIGRlY29kZWQgcm93IHBpeGVscyB0byB0aGUgZnJhbWUgYnVmZmVy
LgogICAgIGludCB3aWR0aCA9IHNjYWxlZFNpemUoKS53aWR0aCgpOwogICAgIGJvb2wgbm9uVHJp
dmlhbEFscGhhID0gZmFsc2U7CkBAIC01MTksNiArNTI2LDggQEAgdm9pZCBQTkdJbWFnZURlY29k
ZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0lu
ZGV4LAogICAgIH0KICNlbmRpZgogCisgICAgbV9yb3dXcml0ZVRpbWUgKz0gKGN1cnJlbnRUaW1l
KCkgLSBzdGFydFRpbWUpOworCiAgICAgaWYgKG5vblRyaXZpYWxBbHBoYSAmJiAhYnVmZmVyLmhh
c0FscGhhKCkpCiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShub25Ucml2aWFsQWxwaGEpOwog
fQpAQCAtNTM3LDE0ICs1NDYsMjIgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmRlY29kZShib29s
IG9ubHlTaXplKQogICAgIGlmICghbV9yZWFkZXIpCiAgICAgICAgIG1fcmVhZGVyID0gYWRvcHRQ
dHIobmV3IFBOR0ltYWdlUmVhZGVyKHRoaXMpKTsKIAorICAgIGlmIChtX3JlYWRlciAmJiAhb25s
eVNpemUpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUE5HIGRlY29kZSBzdGFydFxuIik7Cisg
ICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9yb3dXcml0ZVRpbWUg
PSAwLjA7CisKICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2
ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCiAgICAgLy8gaGFzIGZhaWxlZC4KICAg
ICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgb25seVNpemUpICYmIGlzQWxsRGF0YVJl
Y2VpdmVkKCkpCiAgICAgICAgIHNldEZhaWxlZCgpOwogICAgIC8vIElmIHdlJ3JlIGRvbmUgZGVj
b2RpbmcgdGhlIGltYWdlLCB3ZSBkb24ndCBuZWVkIHRoZSBQTkdJbWFnZVJlYWRlcgogICAgIC8v
IGFueW1vcmUuICAoSWYgd2UgZmFpbGVkLCB8bV9yZWFkZXJ8IGhhcyBhbHJlYWR5IGJlZW4gY2xl
YXJlZC4pCi0gICAgZWxzZSBpZiAoaXNDb21wbGV0ZSgpKQorICAgIGVsc2UgaWYgKGlzQ29tcGxl
dGUoKSkgeworICAgICAgICBpZiAobV9yZWFkZXIgJiYgIW9ubHlTaXplKQorICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJQTkcgZGVjb2RlIGVuZHMgJWYgKHJvdyB3cml0ZSB0aW1lICVmKVxu
IiwgY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZSwgbV9yb3dXcml0ZVRpbWUpOwogICAgICAgICBt
X3JlYWRlci5jbGVhcigpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5oCmluZGV4IGVjMmU4NTcuLmU4NDZjNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmgKQEAgLTY3LDYgKzY3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIE93blB0cjxQTkdJbWFnZVJlYWRlcj4gbV9yZWFkZXI7CiAgICAgICAgIGJvb2wgbV9kb05v
dGhpbmdPbkZhaWx1cmU7CisKKyAgICAgICAgZG91YmxlIG1fcm93V3JpdGVUaW1lOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>176143</attachid>
            <date>2012-11-26 18:44:02 -0800</date>
            <delta_ts>2012-11-26 18:44:02 -0800</delta_ts>
            <desc>png.decoder.time.git.diff</desc>
            <filename>png.decoder.time.git.diff</filename>
            <type>text/plain</type>
            <size>4436</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggYjBjMmFkYy4uZjMwMWY3YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJwbmcu
aCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiAjaWYgVVNFKFFDTVNMSUIpCiAj
aW5jbHVkZSAicWNtcy5oIgpAQCAtMzUyLDcgKzM1Myw5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
OjpoZWFkZXJBdmFpbGFibGUoKQogCiAgICAgaWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQ
RV9HUkFZIHx8IGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBKQogICAgICAg
ICBwbmdfc2V0X2dyYXlfdG9fcmdiKHBuZyk7Ci0KKyAgICAgICAgCisgICAgLy8gSEFDSzogaWdu
b3JlIGNvbG9yIHByb2ZpbGVzIHdoZW4gZG9pbmcgaW1hZ2UgZGVjb2RlciB0aW1lIHRlc3Rpbmcu
CisjaWYgMAogICAgIGlmICgoY29sb3JUeXBlICYgUE5HX0NPTE9SX01BU0tfQ09MT1IpICYmICFt
X2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgc3VwcG9y
dCBjb2xvciBwcm9maWxlcyBmb3IgY29sb3IgUEFMRVRURSBhbmQgUkdCW0FdIFBORy4gU3VwcG9y
dGluZwogICAgICAgICAvLyBjb2xvciBwcm9maWxlcyBmb3IgZ3JheS1zY2FsZSBpbWFnZXMgaXMg
c2xpZ2h0bHkgdHJpY2t5LCBhdCBsZWFzdCB1c2luZyB0aGUKQEAgLTM2MCw2ICszNjMsNyBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAgICAgLy8gZG8gbm90
IHNpbWlsYXJseSB0cmFuc2Zvcm0gdGhlIGNvbG9yIHByb2ZpbGUuIFdlJ2QgZWl0aGVyIG5lZWQg
dG8gdHJhbnNmb3JtCiAgICAgICAgIC8vIHRoZSBjb2xvciBwcm9maWxlIG9yIHdlJ2QgbmVlZCB0
byBkZWNvZGUgaW50byBhIGdyYXktc2NhbGUgaW1hZ2UgYnVmZmVyIGFuZAogICAgICAgICAvLyBo
YW5kIHRoYXQgdG8gQ29yZUdyYXBoaWNzLgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAqKiBl
cnJvcjogcmVhZGluZyBjb2xvciBwcm9maWxlIChXVEYpXG4iKTsKICAgICAgICAgcmVhZENvbG9y
UHJvZmlsZShwbmcsIGluZm8sIG1fY29sb3JQcm9maWxlKTsKICNpZiBVU0UoUUNNU0xJQikKICAg
ICAgICAgYm9vbCBkZWNvZGVkSW1hZ2VIYXNBbHBoYSA9IChjb2xvclR5cGUgJiBQTkdfQ09MT1Jf
TUFTS19BTFBIQSkgfHwgdHJuc0NvdW50OwpAQCAtMzY3LDYgKzM3MSw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgICAgICBtX2NvbG9yUHJvZmlsZS5jbGVh
cigpOwogI2VuZGlmCiAgICAgfQorI2VuZGlmIC8vIEhBQ0sgZW5kcwogCiAgICAgLy8gRGVhbCB3
aXRoIGdhbW1hIGFuZCBrZWVwIGl0IHVuZGVyIG91ciBjb250cm9sLgogICAgIGRvdWJsZSBnYW1t
YTsKQEAgLTQyNyw2ICs0MzIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxl
KHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAKICNpZiBVU0Uo
UUNNU0xJQikKICAgICAgICAgaWYgKG1fcmVhZGVyLT5jb2xvclRyYW5zZm9ybSgpKSB7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAqKiBlcnJvcjogcHJlcGFyaW5nIGNvbG9yIHByb2Zp
bGUgKFdURilcbiIpOwogICAgICAgICAgICAgbV9yZWFkZXItPmNyZWF0ZVJvd0J1ZmZlcihjb2xv
ckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpOwogICAgICAgICAgICAgaWYgKCFtX3JlYWRlci0+
cm93QnVmZmVyKCkpIHsKICAgICAgICAgICAgICAgICBsb25nam1wKEpNUEJVRihwbmcpLCAxKTsK
QEAgLTQ5MywxMSArNDk5LDE0IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKIAogI2lmIFVTRShR
Q01TTElCKQogICAgIGlmIChxY21zX3RyYW5zZm9ybSogdHJhbnNmb3JtID0gbV9yZWFkZXItPmNv
bG9yVHJhbnNmb3JtKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgKiogZXJyb3I6IGFw
cGx5aW5nIGNvbG9yIHByb2ZpbGUgKFdURilcbiIpOwogICAgICAgICBxY21zX3RyYW5zZm9ybV9k
YXRhKHRyYW5zZm9ybSwgcm93LCBtX3JlYWRlci0+cm93QnVmZmVyKCksIHNpemUoKS53aWR0aCgp
KTsKICAgICAgICAgcm93ID0gbV9yZWFkZXItPnJvd0J1ZmZlcigpOwogICAgIH0KICNlbmRpZgog
CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisKICAgICAvLyBXcml0ZSB0
aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCiAgICAgaW50IHdpZHRo
ID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxz
ZTsKQEAgLTUxOSw2ICs1MjgsOCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxl
KHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgfQogI2Vu
ZGlmCiAKKyAgICBtX3Jvd1dyaXRlVGltZSArPSAoY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZSk7
CisKICAgICBpZiAobm9uVHJpdmlhbEFscGhhICYmICFidWZmZXIuaGFzQWxwaGEoKSkKICAgICAg
ICAgYnVmZmVyLnNldEhhc0FscGhhKG5vblRyaXZpYWxBbHBoYSk7CiB9CkBAIC01MzcsMTQgKzU0
OCwyNSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAgICAg
aWYgKCFtX3JlYWRlcikKICAgICAgICAgbV9yZWFkZXIgPSBhZG9wdFB0cihuZXcgUE5HSW1hZ2VS
ZWFkZXIodGhpcykpOwogCisgICAgaWYgKG1fcmVhZGVyICYmICFvbmx5U2l6ZSkKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJQTkcgZGVjb2RlIHN0YXJ0c1xuIik7CisgICAgZG91YmxlIHN0YXJ0
VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9yb3dXcml0ZVRpbWUgPSAwLjA7CisKICAgICAv
LyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwg
dGhlIGRhdGEsIGRlY29kaW5nCiAgICAgLy8gaGFzIGZhaWxlZC4KICAgICBpZiAoIW1fcmVhZGVy
LT5kZWNvZGUoKm1fZGF0YSwgb25seVNpemUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCiAgICAg
ICAgIHNldEZhaWxlZCgpOwogICAgIC8vIElmIHdlJ3JlIGRvbmUgZGVjb2RpbmcgdGhlIGltYWdl
LCB3ZSBkb24ndCBuZWVkIHRoZSBQTkdJbWFnZVJlYWRlcgogICAgIC8vIGFueW1vcmUuICAoSWYg
d2UgZmFpbGVkLCB8bV9yZWFkZXJ8IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZC4pCi0gICAgZWxz
ZSBpZiAoaXNDb21wbGV0ZSgpKQorICAgIGVsc2UgaWYgKGlzQ29tcGxldGUoKSkgeworICAgICAg
ICBpZiAobV9yZWFkZXIgJiYgIW9ubHlTaXplKSB7CisgICAgICAgICAgICBkb3VibGUgZGVjb2Rl
VGltZSA9IGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWU7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiByb3cgd3JpdGUgdGltZSAlZlxuIiwgbV9yb3dXcml0ZVRpbWUpOworICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJQTkcgZGVjb2RlIGVuZHMgJWZcbiIsIGRlY29kZVRpbWUpOwor
ICAgICAgICB9CiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CisgICAgfQogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKaW5kZXggZWMyZTg1Ny4uZTg0
NmM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaApAQCAtNjcsNiArNjcsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgT3duUHRyPFBOR0ltYWdlUmVhZGVyPiBtX3JlYWRlcjsK
ICAgICAgICAgYm9vbCBtX2RvTm90aGluZ09uRmFpbHVyZTsKKworICAgICAgICBkb3VibGUgbV9y
b3dXcml0ZVRpbWU7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>