<?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>70645</bug_id>
          
          <creation_ts>2011-10-21 13:55:53 -0700</creation_ts>
          <short_desc>[chromium] Recycle tile-sized textures during commit to prevent reallocations</short_desc>
          <delta_ts>2013-04-08 11:16:14 -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>WONTFIX</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="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>klobag</cc>
    
    <cc>reveman</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>488634</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-21 13:55:53 -0700</bug_when>
    <thetext>[chromium] Recycle tile-sized textures during commit to prevent reallocations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488637</commentid>
    <comment_count>1</comment_count>
      <attachid>112016</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-21 13:59:22 -0700</bug_when>
    <thetext>Created attachment 112016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488640</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-21 14:01:48 -0700</bug_when>
    <thetext>I know I said maybe I&apos;d wait on doing this, but Alex and Vangelis finally convinced me that maybe this wouldn&apos;t be too hard and I should just do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490155</commentid>
    <comment_count>3</comment_count>
      <attachid>112360</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-25 11:07:21 -0700</bug_when>
    <thetext>Created attachment 112360
rebaselined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490225</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-25 12:20:33 -0700</bug_when>
    <thetext>So now that you&apos;ve implemented it, is there any measurable impact?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490249</commentid>
    <comment_count>5</comment_count>
      <attachid>112360</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-25 12:42:22 -0700</bug_when>
    <thetext>Comment on attachment 112360
rebaselined

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

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:254
&gt; +            if (m_evictedTextures[i].textureId) {

Do you ever expect the textureId to be 0 ?  Should this be an assert() instead?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:113
&gt; +void CCLayerTreeHost::beginCommitOnImplThread(CCLayerTreeHostImpl*)

Why not remove the parameter completely from the method signature?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490300</commentid>
    <comment_count>6</comment_count>
      <attachid>112360</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-25 13:28:44 -0700</bug_when>
    <thetext>Comment on attachment 112360
rebaselined

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:254
&gt;&gt; +            if (m_evictedTextures[i].textureId) {
&gt; 
&gt; Do you ever expect the textureId to be 0 ?  Should this be an assert() instead?

I&apos;m a little bit leery of putting an assert here for textures that are reserved but not ever bound, because it&apos;s so far from any offending code.  However, that seems like bad behavior that we&apos;d want to catch, so I&apos;ll investigate if adding an assert here looks plausible.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:113
&gt;&gt; +void CCLayerTreeHost::beginCommitOnImplThread(CCLayerTreeHostImpl*)
&gt; 
&gt; Why not remove the parameter completely from the method signature?

I&apos;ll just make this function beginCommit() on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490573</commentid>
    <comment_count>7</comment_count>
      <attachid>112360</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-25 22:57:27 -0700</bug_when>
    <thetext>Comment on attachment 112360
rebaselined

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:254
&gt;&gt;&gt; +            if (m_evictedTextures[i].textureId) {
&gt;&gt; 
&gt;&gt; Do you ever expect the textureId to be 0 ?  Should this be an assert() instead?
&gt; 
&gt; I&apos;m a little bit leery of putting an assert here for textures that are reserved but not ever bound, because it&apos;s so far from any offending code.  However, that seems like bad behavior that we&apos;d want to catch, so I&apos;ll investigate if adding an assert here looks plausible.

It seems to me that textures will only be added to m_evictedTextures via TextureManager::removeTexture().  Is it possible that we&apos;ll ever get an info struct there with a zero for a texture id?  If that&apos;s so, then we would be incorrectly subtracting its size from m_memoryUseBytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507159</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-21 13:04:22 -0800</bug_when>
    <thetext>*** Bug 72896 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507203</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-21 14:16:35 -0800</bug_when>
    <thetext>klobag: Are you seeing a performance impact from the texture manager churn? That&apos;s really the reason I held off on landing this patch.  I wasn&apos;t convinced that the extra complexity was worth it.

(Also, it&apos;s not as if the code that used to locally recycle tiles ever worked after we added the TextureManager, because the textures would have just been evicted without the TiledLayerChromium&apos;s knowledge.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507246</commentid>
    <comment_count>10</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-21 14:59:21 -0800</bug_when>
    <thetext>It is hard to tell exactly. When we tried not clear zero after creating a tile, we noticed the time jump in the trace view where the following glTexSubImage2D is called. This implies that there may be a cost in creating the texture and allocating memory in the driver.

I have a patch to the TextureManager. I will update so that you can take a look.

(In reply to comment #9)
&gt; klobag: Are you seeing a performance impact from the texture manager churn? That&apos;s really the reason I held off on landing this patch.  I wasn&apos;t convinced that the extra complexity was worth it.
&gt; 
&gt; (Also, it&apos;s not as if the code that used to locally recycle tiles ever worked after we added the TextureManager, because the textures would have just been evicted without the TiledLayerChromium&apos;s knowledge.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507315</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-21 16:41:06 -0800</bug_when>
    <thetext>What we need here is an automated performance test sensitive enough to detect a change like this. Run it with the patch, run it without, compare the #s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507941</commentid>
    <comment_count>12</comment_count>
      <attachid>116318</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-22 22:27:25 -0800</bug_when>
    <thetext>Created attachment 116318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508044</commentid>
    <comment_count>13</comment_count>
      <attachid>116318</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 03:31:53 -0800</bug_when>
    <thetext>Comment on attachment 116318
Patch

Attachment 116318 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10606259</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508248</commentid>
    <comment_count>14</comment_count>
      <attachid>116318</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-11-23 11:10:38 -0800</bug_when>
    <thetext>Comment on attachment 116318
Patch

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

Trying to recycle textures is a good thing but I think the way it&apos;s implemented it will offer a limited benefit as it will only work between commits.  Every time we do a commit we aggressively delete textures that are over the reclaim limit.  Maybe we should simply add the ones that are tile-sized and have a high probability of being re-usable to a list that we look into first when we need to allocate a new texture.

&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:53
&gt; +    return m_token &amp;&amp; size == m_size &amp;&amp; format == m_format &amp;&amp; m_textureManager-&gt;hasTexture(m_token) &amp;&amp; m_ready;

What problem is the use of m_ready trying to solve?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508290</commentid>
    <comment_count>15</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-23 12:18:53 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 116318 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116318&amp;action=review
&gt; 
&gt; Trying to recycle textures is a good thing but I think the way it&apos;s implemented it will offer a limited benefit as it will only work between commits.  Every time we do a commit we aggressively delete textures that are over the reclaim limit.  Maybe we should simply add the ones that are tile-sized and have a high probability of being re-usable to a list that we look into first when we need to allocate a new texture.
&gt; 

This patch is to avoid deleting textures during each commit. When request texture is called, we check whether it will make the total memory over the reclaim limit. If yes, we reuse the existing texture. Currently we just allocate a new one and delete an old one in commit. In this patch, we reuse the old one in request. So in scrolling, after we reach reclaim limit, we should not allocate tile textures any more.

&gt; &gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:53
&gt; &gt; +    return m_token &amp;&amp; size == m_size &amp;&amp; format == m_format &amp;&amp; m_textureManager-&gt;hasTexture(m_token) &amp;&amp; m_ready;
&gt; 
&gt; What problem is the use of m_ready trying to solve?

In TiledLayerChromium::pushPropertiesTo(), we sync the textureId if it is valid. Currently we may have a valid ManagedTexture while its textureId is 0 as allocate hasn&apos;t been called. In draw, we treat 0 textureId as no content. With this change, if the textureId is reused and before it is ready, we don&apos;t want to sync to the impl tree. Hope this makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508462</commentid>
    <comment_count>16</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-11-23 15:24:36 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 116318 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116318&amp;action=review
&gt; &gt; 
&gt; &gt; Trying to recycle textures is a good thing but I think the way it&apos;s implemented it will offer a limited benefit as it will only work between commits.  Every time we do a commit we aggressively delete textures that are over the reclaim limit.  Maybe we should simply add the ones that are tile-sized and have a high probability of being re-usable to a list that we look into first when we need to allocate a new texture.
&gt; &gt; 
&gt; 
&gt; This patch is to avoid deleting textures during each commit. When request texture is called, we check whether it will make the total memory over the reclaim limit. If yes, we reuse the existing texture. Currently we just allocate a new one and delete an old one in commit. In this patch, we reuse the old one in request. So in scrolling, after we reach reclaim limit, we should not allocate tile textures any more.

Oh, I see. Thanks for the explanation. 


&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:53
&gt; &gt; &gt; +    return m_token &amp;&amp; size == m_size &amp;&amp; format == m_format &amp;&amp; m_textureManager-&gt;hasTexture(m_token) &amp;&amp; m_ready;
&gt; &gt; 
&gt; &gt; What problem is the use of m_ready trying to solve?
&gt; 
&gt; In TiledLayerChromium::pushPropertiesTo(), we sync the textureId if it is valid. Currently we may have a valid ManagedTexture while its textureId is 0 as allocate hasn&apos;t been called. In draw, we treat 0 textureId as no content. With this change, if the textureId is reused and before it is ready, we don&apos;t want to sync to the impl tree. Hope this makes sense.

Hmm, don&apos;t you still want to pass the textureId to the impl side so that the new contents get uploaded?  If the textureId is zero then a new texture will be created for it.  If it&apos;s not, then we&apos;ll upload the new contents to it.  

I&apos;m confused because it looks like if you have a new ManagedTexture then in TiledLayerChromium::pushPropertiesTo() isValid() will return false and you will early-out.  That means that the textureId for the corresponding DrawableTile will be zero. This is fine if the ManagedTexture doesn&apos;t use a recycled GL texture as when on the thread we call bindTexture() a new GL texture will be allocated for it as expected.  However if a recycled GL texture should be used then bindTexture() will still try to create a new GL texture instead of using the existing one.

Or maybe I&apos;m misunderstanding something.  


 that ends up getting a recycled GL texture then you won&apos;t call syncTextureId with that recycled textureId which means that on the impl side the textureId will be zero and we&apos;ll try to allocate a new texture for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508498</commentid>
    <comment_count>17</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-23 16:42:55 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (From update of attachment 116318 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116318&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Trying to recycle textures is a good thing but I think the way it&apos;s implemented it will offer a limited benefit as it will only work between commits.  Every time we do a commit we aggressively delete textures that are over the reclaim limit.  Maybe we should simply add the ones that are tile-sized and have a high probability of being re-usable to a list that we look into first when we need to allocate a new texture.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; This patch is to avoid deleting textures during each commit. When request texture is called, we check whether it will make the total memory over the reclaim limit. If yes, we reuse the existing texture. Currently we just allocate a new one and delete an old one in commit. In this patch, we reuse the old one in request. So in scrolling, after we reach reclaim limit, we should not allocate tile textures any more.
&gt; 
&gt; Oh, I see. Thanks for the explanation. 
&gt; 
&gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:53
&gt; &gt; &gt; &gt; +    return m_token &amp;&amp; size == m_size &amp;&amp; format == m_format &amp;&amp; m_textureManager-&gt;hasTexture(m_token) &amp;&amp; m_ready;
&gt; &gt; &gt; 
&gt; &gt; &gt; What problem is the use of m_ready trying to solve?
&gt; &gt; 
&gt; &gt; In TiledLayerChromium::pushPropertiesTo(), we sync the textureId if it is valid. Currently we may have a valid ManagedTexture while its textureId is 0 as allocate hasn&apos;t been called. In draw, we treat 0 textureId as no content. With this change, if the textureId is reused and before it is ready, we don&apos;t want to sync to the impl tree. Hope this makes sense.
&gt; 
&gt; Hmm, don&apos;t you still want to pass the textureId to the impl side so that the new contents get uploaded?  If the textureId is zero then a new texture will be created for it.  If it&apos;s not, then we&apos;ll upload the new contents to it.  
&gt; 

We want to upload the textureId when the new contents is drawn through LayerTextureUpdaterBitmap::updateTextureRect(). We set m_ready to be true inside bindTexture(). In the case where the textureId is not recycled, this is where textureId is allocated. In the case where the textureId is recycled, we set m_ready to be true so that the next pushPropertiesTo() will push it to the impl side. Hope this explains.

&gt; I&apos;m confused because it looks like if you have a new ManagedTexture then in TiledLayerChromium::pushPropertiesTo() isValid() will return false and you will early-out.  That means that the textureId for the corresponding DrawableTile will be zero. This is fine if the ManagedTexture doesn&apos;t use a recycled GL texture as when on the thread we call bindTexture() a new GL texture will be allocated for it as expected.  However if a recycled GL texture should be used then bindTexture() will still try to create a new GL texture instead of using the existing one.
&gt; 
&gt; Or maybe I&apos;m misunderstanding something.  
&gt; 
&gt; 
&gt;  that ends up getting a recycled GL texture then you won&apos;t call syncTextureId with that recycled textureId which means that on the impl side the textureId will be zero and we&apos;ll try to allocate a new texture for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509486</commentid>
    <comment_count>18</comment_count>
      <attachid>116318</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-27 13:26:15 -0800</bug_when>
    <thetext>Comment on attachment 116318
Patch

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

I think we really need to see some performance data before landing this, or any other potential optimization that adds complexity to the system. It&apos;s possible that this will make things faster.  It&apos;s also possible that this could make things slower by adding additional data dependencies that didn&apos;t exist before. Without some actual data it&apos;s impossible to guess.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:307
&gt; +    if (TextureManager::reclaimLimitBytes() &gt; contentsMemoryUseBytes)
&gt; +        m_renderSurfaceTextureManager-&gt;setReclaimLimitBytes(TextureManager::reclaimLimitBytes() - contentsMemoryUseBytes);
&gt; +    else
&gt; +        m_renderSurfaceTextureManager-&gt;setReclaimLimitBytes(0);

this looks like an unrelated change - this patch is about tile textures, not render surface textures correct? in order to change behavior for tiles you need to modify the contents texture manager

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:240
&gt; +int TextureManager::requestTexture(TextureToken token, IntSize size, unsigned format)

texture IDs are of type unsigned, not of type int. it looks like you are trying to pass two pieces of data via this return value - the texture ID and a boolean indicating whether the request succeeded. To do that, use two different parameters - a return value and a reference parameter, perhaps

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:272
&gt; +        info.textureId = replaceTexture(token, info);
&gt; +        if (info.textureId &gt; 0)
&gt; +            return info.textureId;

if the replaceTexture() call fails then this will replace info.textureId with 0. That doesn&apos;t seem right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509951</commentid>
    <comment_count>19</comment_count>
      <attachid>116318</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-28 10:51:16 -0800</bug_when>
    <thetext>Comment on attachment 116318
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:307
&gt;&gt; +        m_renderSurfaceTextureManager-&gt;setReclaimLimitBytes(0);
&gt; 
&gt; this looks like an unrelated change - this patch is about tile textures, not render surface textures correct? in order to change behavior for tiles you need to modify the contents texture manager

The key change made in this patch is in TextureManager, which is shared by render surface textures, right? In the TextureManager, we decide whether we want to replace instead of adding a texture based on the reclaim limit. As five lines below we will call reduceMemoryToLimit based on this new limit, we try to set it to the TextureManager before calling drawLayersInternal() where request texture calling from.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:240
&gt;&gt; +int TextureManager::requestTexture(TextureToken token, IntSize size, unsigned format)
&gt; 
&gt; texture IDs are of type unsigned, not of type int. it looks like you are trying to pass two pieces of data via this return value - the texture ID and a boolean indicating whether the request succeeded. To do that, use two different parameters - a return value and a reference parameter, perhaps

Indeed, it was using one return value to do two things. I can change it if the other way is preferred.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:272
&gt;&gt; +            return info.textureId;
&gt; 
&gt; if the replaceTexture() call fails then this will replace info.textureId with 0. That doesn&apos;t seem right.

info.textureId is init to 0. If replaceTexture() failed, it keeps 0 value and continues to call addTexture. This is as designed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510108</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 13:19:33 -0800</bug_when>
    <thetext>There are different texture managers for render surfaces and content texture.  Tiles are in the latter, so any changes to the render surface texture manager will not impact tile textures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510136</commentid>
    <comment_count>21</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-28 13:47:29 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; There are different texture managers for render surfaces and content texture.  Tiles are in the latter, so any changes to the render surface texture manager will not impact tile textures.

Agree that there are different texture manager instance. But I think reuse texture Id can be applied to both texture manager. If you think render surface should be applied in the separate CL, we can remove from here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510261</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 15:20:39 -0800</bug_when>
    <thetext>Let&apos;s do one thing at a time. Right now we don&apos;t have evidence that recycling either type of ID will be a win and the allocation patterns for the two are pretty different, so I&apos;d prefer not to change both allocators until we know if it&apos;s a win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510870</commentid>
    <comment_count>23</comment_count>
      <attachid>116989</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-29 09:51:49 -0800</bug_when>
    <thetext>Created attachment 116989
new patch

Addressed James&apos; comment and fixed the test file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510875</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-29 09:56:21 -0800</bug_when>
    <thetext>Attachment 116989 did not pass style-queue:

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

Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511020</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-29 12:44:27 -0800</bug_when>
    <thetext>Where&apos;s the performance data?  We cannot land this without that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511034</commentid>
    <comment_count>26</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-11-29 13:06:38 -0800</bug_when>
    <thetext>&gt; &gt; &gt; &gt; What problem is the use of m_ready trying to solve?
&gt; &gt; &gt; 
&gt; &gt; &gt; In TiledLayerChromium::pushPropertiesTo(), we sync the textureId if it is valid. Currently we may have a valid ManagedTexture while its textureId is 0 as allocate hasn&apos;t been called. In draw, we treat 0 textureId as no content. With this change, if the textureId is reused and before it is ready, we don&apos;t want to sync to the impl tree. Hope this makes sense.
&gt; &gt; 
&gt; &gt; Hmm, don&apos;t you still want to pass the textureId to the impl side so that the new contents get uploaded?  If the textureId is zero then a new texture will be created for it.  If it&apos;s not, then we&apos;ll upload the new contents to it.  
&gt; &gt; 
&gt; 
&gt; We want to upload the textureId when the new contents is drawn through LayerTextureUpdaterBitmap::updateTextureRect(). We set m_ready to be true inside bindTexture(). In the case where the textureId is not recycled, this is where textureId is allocated. In the case where the textureId is recycled, we set m_ready to be true so that the next pushPropertiesTo() will push it to the impl side. Hope this explains.
&gt; 
&gt; &gt; I&apos;m confused because it looks like if you have a new ManagedTexture then in TiledLayerChromium::pushPropertiesTo() isValid() will return false and you will early-out.  That means that the textureId for the corresponding DrawableTile will be zero. This is fine if the ManagedTexture doesn&apos;t use a recycled GL texture as when on the thread we call bindTexture() a new GL texture will be allocated for it as expected.  However if a recycled GL texture should be used then bindTexture() will still try to create a new GL texture instead of using the existing one.
&gt; &gt; 
&gt; &gt; Or maybe I&apos;m misunderstanding something.  
&gt; &gt; 
&gt; &gt; 
&gt; &gt;  that ends up getting a recycled GL texture then you won&apos;t call syncTextureId with that recycled textureId which means that on the impl side the textureId will be zero and we&apos;ll try to allocate a new texture for it.

That doesn&apos;t seem completely consistent though with how things work now.  isValid() will return true even if the textureId is zero.  syncTextureId() will be called in pushPropertiesTo(), it just so happens that  since the textureId is zero, the tile will be skipped at draw time.  It seems to me that the logic to skip recycled tiles should be done at draw time where instead of checking whether the textureID is zero, we call a method that tell us whether the tile has valid contents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512194</commentid>
    <comment_count>27</comment_count>
      <attachid>117287</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-30 15:45:37 -0800</bug_when>
    <thetext>Created attachment 117287
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512218</commentid>
    <comment_count>28</comment_count>
      <attachid>117287</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 16:25:51 -0800</bug_when>
    <thetext>Comment on attachment 117287
Patch

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

This looks very close but there&apos;s still some unnecessary complexity here it looks like.

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:52
&gt; +    static PassOwnPtr&lt;TextureManager&gt; create(size_t memoryLimitBytes, size_t reclaimLimitBytes, int maxTextureSize)

i&apos;m not sure i understand why we need an additional parameter here - we seem to always set it to the default

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:67
&gt; +    void setReclaimLimitBytes(size_t);

I don&apos;t understand why this API is being added - in this patch we always initialize the limit to TextureManager::reclaimLimitBytes() and never set it to anything else, so why does this need to be configurable at runtime?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:263
&gt; +        tiledLayer-&gt;syncTextureId(i, j, tile-&gt;texture()-&gt;textureId(), tile-&gt;texture()-&gt;contentsValid());

what&apos;s the advantage of pushing a texture ID over that&apos;s not valid? should we just not sync textures that do not have valid contents to the impl side?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512264</commentid>
    <comment_count>29</comment_count>
      <attachid>117287</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-30 17:08:34 -0800</bug_when>
    <thetext>Comment on attachment 117287
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:92
&gt; +    m_contentsValid = m_textureId &gt; 0;

Why would this ever be non-zero? It doesn&apos;t look like any recycling is occurring during allocateTexture, only during reserve.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:263

&gt; 
&gt; what&apos;s the advantage of pushing a texture ID over that&apos;s not valid? should we just not sync textures that do not have valid contents to the impl side?

I don&apos;t follow the need for contentsValid() at all.  When would this texture id be zero? If we reserve a texture and it succeeds, we always bind and upload it, which means that it should have a non-zero texture id during commit.  Even if tile-&gt;texture()-&gt;textureId() were somehow zero, then maybe we shouldn&apos;t sync the tile at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512293</commentid>
    <comment_count>30</comment_count>
      <attachid>117287</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-30 17:52:17 -0800</bug_when>
    <thetext>Comment on attachment 117287
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:92
&gt;&gt; +    m_contentsValid = m_textureId &gt; 0;
&gt; 
&gt; Why would this ever be non-zero? It doesn&apos;t look like any recycling is occurring during allocateTexture, only during reserve.

I want to catch the case where allocateTexture fails. Now in draw, we check contentsValid instead of checking textureId is 0.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:52
&gt;&gt; +    static PassOwnPtr&lt;TextureManager&gt; create(size_t memoryLimitBytes, size_t reclaimLimitBytes, int maxTextureSize)
&gt; 
&gt; i&apos;m not sure i understand why we need an additional parameter here - we seem to always set it to the default

It is similar to memoryLimitBytes, here is the default and setReclaimLimitBytes() can override it to the latest value.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:67
&gt;&gt; +    void setReclaimLimitBytes(size_t);
&gt; 
&gt; I don&apos;t understand why this API is being added - in this patch we always initialize the limit to TextureManager::reclaimLimitBytes() and never set it to anything else, so why does this need to be configurable at runtime?

In CCLayerTreeHost::beginCommitOnImplThread(), this is called to set the latest reclaim limit. If reclaimLimitBytes() is not constant, e.g. if it depends on the viewport size, we need to adjust it on the fly.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:263
&gt;&gt;&gt; +        tiledLayer-&gt;syncTextureId(i, j, tile-&gt;texture()-&gt;textureId(), tile-&gt;texture()-&gt;contentsValid());
&gt;&gt; 
&gt;&gt; what&apos;s the advantage of pushing a texture ID over that&apos;s not valid? should we just not sync textures that do not have valid contents to the impl side?
&gt; 
&gt; 

I was taking Vangelis&apos;s previous comment literally. I tried to make drawTiles not depending on checking textureId against 0. But I think your question is valid, if contents is not valid, we should just continue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512310</commentid>
    <comment_count>31</comment_count>
      <attachid>117287</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-30 18:27:40 -0800</bug_when>
    <thetext>Comment on attachment 117287
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:92
&gt;&gt;&gt; +    m_contentsValid = m_textureId &gt; 0;
&gt;&gt; 
&gt;&gt; Why would this ever be non-zero? It doesn&apos;t look like any recycling is occurring during allocateTexture, only during reserve.
&gt; 
&gt; I want to catch the case where allocateTexture fails. Now in draw, we check contentsValid instead of checking textureId is 0.

Maybe I&apos;m just confused, but when does allocateTexture fail?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512313</commentid>
    <comment_count>32</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 18:30:31 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:67
&gt; &gt;&gt; +    void setReclaimLimitBytes(size_t);
&gt; &gt; 
&gt; &gt; I don&apos;t understand why this API is being added - in this patch we always initialize the limit to TextureManager::reclaimLimitBytes() and never set it to anything else, so why does this need to be configurable at runtime?
&gt; 
&gt; In CCLayerTreeHost::beginCommitOnImplThread(), this is called to set the latest reclaim limit. If reclaimLimitBytes() is not constant, e.g. if it depends on the viewport size, we need to adjust it on the fly.
&gt; 

The reclaim limit is constant.  At the point where we start adjusting on the fly we can change this code to match but not before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512318</commentid>
    <comment_count>33</comment_count>
      <attachid>117287</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-11-30 18:38:09 -0800</bug_when>
    <thetext>Comment on attachment 117287
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:92
&gt;&gt;&gt;&gt; +    m_contentsValid = m_textureId &gt; 0;
&gt;&gt;&gt; 
&gt;&gt;&gt; Why would this ever be non-zero? It doesn&apos;t look like any recycling is occurring during allocateTexture, only during reserve.
&gt;&gt; 
&gt;&gt; I want to catch the case where allocateTexture fails. Now in draw, we check contentsValid instead of checking textureId is 0.
&gt; 
&gt; Maybe I&apos;m just confused, but when does allocateTexture fail?

You are right, it seems it can never fail. So no need for checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513243</commentid>
    <comment_count>34</comment_count>
      <attachid>117287</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-01 16:22:00 -0800</bug_when>
    <thetext>Comment on attachment 117287
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:263
&gt;&gt;&gt;&gt; +        tiledLayer-&gt;syncTextureId(i, j, tile-&gt;texture()-&gt;textureId(), tile-&gt;texture()-&gt;contentsValid());
&gt;&gt;&gt; 
&gt;&gt;&gt; what&apos;s the advantage of pushing a texture ID over that&apos;s not valid? should we just not sync textures that do not have valid contents to the impl side?
&gt;&gt; 
&gt;&gt; 
&gt; 
&gt; I was taking Vangelis&apos;s previous comment literally. I tried to make drawTiles not depending on checking textureId against 0. But I think your question is valid, if contents is not valid, we should just continue.

James, Enne and myself chatted about this. The conclusion was that if you simply remove the contentsValid boolean and all associated tests, and keep the rest of the code as you have it, it should all work as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513342</commentid>
    <comment_count>35</comment_count>
      <attachid>117533</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-12-01 17:46:31 -0800</bug_when>
    <thetext>Created attachment 117533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513346</commentid>
    <comment_count>36</comment_count>
      <attachid>117533</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 17:50:02 -0800</bug_when>
    <thetext>Comment on attachment 117533
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.h:74
&gt; +    bool m_contentsValid;

I believe you can remove this

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:272
&gt; +        if (textureId &gt; 0)

textureId is of type unsigned so it can never be &lt; 0 and WebKit style prefers that checks for == 0 be written this way:

if (textureId)

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:52
&gt; +    static PassOwnPtr&lt;TextureManager&gt; create(size_t memoryLimitBytes, size_t reclaimLimitBytes, int maxTextureSize)

this change should not be part of this patch - it&apos;s not about texture recycling. please remove it

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:67
&gt; +    void setReclaimLimitBytes(size_t);

same here - this patch should only have changes related to texture recycling. we can do this later if/when it becomes useful</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513365</commentid>
    <comment_count>37</comment_count>
      <attachid>117533</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-12-01 18:11:33 -0800</bug_when>
    <thetext>Comment on attachment 117533
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.h:74
&gt;&gt; +    bool m_contentsValid;
&gt; 
&gt; I believe you can remove this

Hmm, can we assume when TiledLayerChromium::pushPropertiesTo() is called, ManagedTexture::bindTexture() is already called? Then why we used to check whether textureId is 0 in drawTiles()?

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:272
&gt;&gt; +        if (textureId &gt; 0)
&gt; 
&gt; textureId is of type unsigned so it can never be &lt; 0 and WebKit style prefers that checks for == 0 be written this way:
&gt; 
&gt; if (textureId)

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:52
&gt;&gt; +    static PassOwnPtr&lt;TextureManager&gt; create(size_t memoryLimitBytes, size_t reclaimLimitBytes, int maxTextureSize)
&gt; 
&gt; this change should not be part of this patch - it&apos;s not about texture recycling. please remove it

This is needed to decide when recycling texture is triggered. See line 270.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513370</commentid>
    <comment_count>38</comment_count>
      <attachid>117533</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 18:23:16 -0800</bug_when>
    <thetext>Comment on attachment 117533
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:52
&gt;&gt;&gt; +    static PassOwnPtr&lt;TextureManager&gt; create(size_t memoryLimitBytes, size_t reclaimLimitBytes, int maxTextureSize)
&gt;&gt; 
&gt;&gt; this change should not be part of this patch - it&apos;s not about texture recycling. please remove it
&gt; 
&gt; This is needed to decide when recycling texture is triggered. See line 270.

Line 270 of TextureManager could (should?) be comparing against reclaimLimitBytes().  Let&apos;s not make things look configurable that aren&apos;t actually configurable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513383</commentid>
    <comment_count>39</comment_count>
      <attachid>117533</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-12-01 18:48:15 -0800</bug_when>
    <thetext>Comment on attachment 117533
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:52
&gt;&gt;&gt;&gt; +    static PassOwnPtr&lt;TextureManager&gt; create(size_t memoryLimitBytes, size_t reclaimLimitBytes, int maxTextureSize)
&gt;&gt;&gt; 
&gt;&gt;&gt; this change should not be part of this patch - it&apos;s not about texture recycling. please remove it
&gt;&gt; 
&gt;&gt; This is needed to decide when recycling texture is triggered. See line 270.
&gt; 
&gt; Line 270 of TextureManager could (should?) be comparing against reclaimLimitBytes().  Let&apos;s not make things look configurable that aren&apos;t actually configurable.

If we hard code reclaimLimitBytes(), it assumes CCLayerTreeHost::beginCommitOnImplThread() will use it to reduce the memory. Anyway, I do whatever you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513392</commentid>
    <comment_count>40</comment_count>
      <attachid>117541</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-12-01 19:03:04 -0800</bug_when>
    <thetext>Created attachment 117541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513819</commentid>
    <comment_count>41</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-02 09:07:18 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 117533 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117533&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.h:74
&gt; &gt;&gt; +    bool m_contentsValid;
&gt; &gt; 
&gt; &gt; I believe you can remove this
&gt; 
&gt; Hmm, can we assume when TiledLayerChromium::pushPropertiesTo() is called, ManagedTexture::bindTexture() is already called? Then why we used to check whether textureId is 0 in drawTiles()?

Yes, we can assume that.  I think that textureId check is vestigial and made more sense at some point in the psat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513859</commentid>
    <comment_count>42</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-12-02 09:44:49 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (In reply to comment #37)
&gt; &gt; (From update of attachment 117533 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117533&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.h:74
&gt; &gt; &gt;&gt; +    bool m_contentsValid;
&gt; &gt; &gt; 
&gt; &gt; &gt; I believe you can remove this
&gt; &gt; 
&gt; &gt; Hmm, can we assume when TiledLayerChromium::pushPropertiesTo() is called, ManagedTexture::bindTexture() is already called? Then why we used to check whether textureId is 0 in drawTiles()?
&gt; 
&gt; Yes, we can assume that.  I think that textureId check is vestigial and made more sense at some point in the psat.

Ok, then I will also remove texureId 0 checking. So it does mean it is valid if tile is not null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513872</commentid>
    <comment_count>43</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-02 09:57:28 -0800</bug_when>
    <thetext>(In reply to comment #42)

&gt; Ok, then I will also remove texureId 0 checking. So it does mean it is valid if tile is not null.

Even if it&apos;s not applicable, I don&apos;t think you should remove the check, because I&apos;d prefer that code to remain robust to future errors.  Texture id 0 is never valid, so I&apos;d like that to checkerboard if it somehow happens at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513883</commentid>
    <comment_count>44</comment_count>
      <attachid>117644</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2011-12-02 10:07:17 -0800</bug_when>
    <thetext>Created attachment 117644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513890</commentid>
    <comment_count>45</comment_count>
      <attachid>117644</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-02 10:13:53 -0800</bug_when>
    <thetext>Comment on attachment 117644
Patch

Thanks for taking the time to simplify this patch down to just the essentials.  This looks great to me.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514027</commentid>
    <comment_count>46</comment_count>
      <attachid>117644</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 12:52:08 -0800</bug_when>
    <thetext>Comment on attachment 117644
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514158</commentid>
    <comment_count>47</comment_count>
      <attachid>117644</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 14:30:23 -0800</bug_when>
    <thetext>Comment on attachment 117644
Patch

Clearing flags on attachment: 117644

Committed r101854: &lt;http://trac.webkit.org/changeset/101854&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514159</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 14:30:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551580</commentid>
    <comment_count>49</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-02-07 17:12:10 -0800</bug_when>
    <thetext>I reverted this change as it was causing a serious performance regression:
https://bugs.webkit.org/show_bug.cgi?id=78020

A possible alternative discussed is to land https://bugs.webkit.org/show_bug.cgi?id=76295 and implement this kind of texture reuse on the impl side.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112016</attachid>
            <date>2011-10-21 13:59:22 -0700</date>
            <delta_ts>2011-10-25 11:07:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70645-20111021135921.patch</filename>
            <type>text/plain</type>
            <size>11525</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxMTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYjUwYTVkNzZkMjJiOTQ4
MTZmOTFhZjBlMWI0NTBlMmFjOTliNzVmLi5lNWJiYzNiNDE4MDhmYTIxY2Y5YTg3ZjRmM2UwN2Zm
NjdmOTQyZDczIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMjEgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFJlY3lj
bGUgdGlsZS1zaXplZCB0ZXh0dXJlcyBkdXJpbmcgY29tbWl0IHRvIHByZXZlbnQgcmVhbGxvY2F0
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2
NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB0
ZXh0dXJlIG1lbW9yeSBpcyBhdCB0aGUgcmVjbGFtYXRpb24gbGltaXQsIHdoZW4gc2Nyb2xsaW5n
IGNhdXNlcworICAgICAgICBuZXcgdGlsZXMgdG8gYmUgcmVxdWVzdGVkLCBpdCB3aWxsIHB1c2gg
b3V0IG9sZGVyIHRpbGVzLiBUbyBwcmV2ZW50CisgICAgICAgIHRoaXMgcHJvY2VzcyBmcm9tIGNv
bnN0YW50bHkgcmVhbGxvY2F0aW5nIHRleHR1cmVzLCByZXVzZSB0ZXh0dXJlIGlkcworICAgICAg
ICBmcm9tIHRoZXNlIG9sZGVyIHRpbGVzIGJlZm9yZSBldmljdGluZyB0aGVtLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OmluaXRpYWxpemVUaWxlUG9vbCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6ZGVsZXRlRXZpY3RlZFRleHR1cmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZW1vdmVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hbmFnZXI6OkV2aWN0aW9uTGlzdDo6fkV2aWN0aW9uTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6RXZpY3Rpb25MaXN0OjphZGQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OkV2aWN0aW9uTGlzdDo6ZGVsZXRlQWxsVGV4dHVyZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVQb29sOjpUZXh0dXJl
UG9vbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6VGV4dHVyZVBvb2w6Omlu
aXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVQb29s
OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlUG9v
bDo6cmVjeWNsZUludG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6RXZpY3Rp
b25MaXN0Ojppc0VtcHR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9t
aXVtOjp0aWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNl
dExheWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21t
aXRUb09uSW1wbFRocmVhZCk6CisKIDIwMTEtMTAtMjEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IFdpbmRvd3MgYnVpbGQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJl
TWFuYWdlci5jcHAKaW5kZXggYzYwMGQ5ZTY0OTFkN2QxZTc1NzIyMjE0ZTMxOWRhN2YwYzE4ODRj
ZS4uNzUyZDgwNjUzZDMzNDUzYmMwMzE5MmRlYTVjOGU2N2RjNmE2ODEzOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcApAQCAtNjgsNiArNjgsMTEgQEAgVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVN
YW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiB9
CiAKK3ZvaWQgVGV4dHVyZU1hbmFnZXI6OmluaXRpYWxpemVUaWxlUG9vbChjb25zdCBJbnRTaXpl
JiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgbV9ldmljdGVkVGlsZXMuaW5pdGlhbGl6
ZShzaXplLCBmb3JtYXQpOworfQorCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpzZXRNZW1vcnlMaW1p
dEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQogewogICAgIHJlZHVjZU1lbW9yeVRvTGlt
aXQobWVtb3J5TGltaXRCeXRlcyk7CkBAIC0xNTUsMTcgKzE2MCw4IEBAIHZvaWQgVGV4dHVyZU1h
bmFnZXI6OmFkZFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZvKQog
CiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpkZWxldGVFdmljdGVkVGV4dHVyZXMoVGV4dHVyZUFsbG9j
YXRvciogYWxsb2NhdG9yKQogewotICAgIGlmIChhbGxvY2F0b3IpIHsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2V2aWN0ZWRUZXh0dXJlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgaWYgKG1fZXZpY3RlZFRleHR1cmVzW2ldLnRleHR1cmVJZCkgewotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9ldmljdGVkVGV4dHVyZXNbaV0uYWxsb2NhdG9y
ID09IGFsbG9jYXRvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3ItPmRlbGV0
ZVRleHR1cmUobV9ldmljdGVkVGV4dHVyZXNbaV0udGV4dHVyZUlkLCBtX2V2aWN0ZWRUZXh0dXJl
c1tpXS5zaXplLCBtX2V2aWN0ZWRUZXh0dXJlc1tpXS5mb3JtYXQpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIG1fZXZpY3RlZFRleHR1cmVzLmNsZWFyKCk7CisgICAgbV9l
dmljdGVkVGlsZXMuZGVsZXRlQWxsVGV4dHVyZXMoYWxsb2NhdG9yKTsKKyAgICBtX2V2aWN0ZWRU
ZXh0dXJlcy5kZWxldGVBbGxUZXh0dXJlcyhhbGxvY2F0b3IpOwogfQogCiB2b2lkIFRleHR1cmVN
YW5hZ2VyOjpldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvcikKQEAgLTE4MywxNCArMTc5LDExIEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlbW92ZVRl
eHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZvKQogICAgIG1fdGV4dHVy
ZXMucmVtb3ZlKHRva2VuKTsKICAgICBBU1NFUlQobV90ZXh0dXJlTFJVU2V0LmNvbnRhaW5zKHRv
a2VuKSk7CiAgICAgbV90ZXh0dXJlTFJVU2V0LnJlbW92ZSh0b2tlbik7Ci0gICAgRXZpY3Rpb25F
bnRyeSBlbnRyeTsKLSAgICBlbnRyeS50ZXh0dXJlSWQgPSBpbmZvLnRleHR1cmVJZDsKLSAgICBl
bnRyeS5zaXplID0gaW5mby5zaXplOwotICAgIGVudHJ5LmZvcm1hdCA9IGluZm8uZm9ybWF0Owot
I2lmbmRlZiBOREVCVUcKLSAgICBlbnRyeS5hbGxvY2F0b3IgPSBpbmZvLmFsbG9jYXRvcjsKLSNl
bmRpZgotICAgIG1fZXZpY3RlZFRleHR1cmVzLmFwcGVuZChlbnRyeSk7CisKKyAgICBpZiAoaW5m
by50ZXh0dXJlSWQgJiYgbV9ldmljdGVkVGlsZXMubWF0Y2hlcyhpbmZvLnNpemUsIGluZm8uZm9y
bWF0KSkKKyAgICAgICAgbV9ldmljdGVkVGlsZXMuYWRkKGluZm8pOworICAgIGVsc2UKKyAgICAg
ICAgbV9ldmljdGVkVGV4dHVyZXMuYWRkKGluZm8pOwogfQogCiB1bnNpZ25lZCBUZXh0dXJlTWFu
YWdlcjo6YWxsb2NhdGVUZXh0dXJlKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVy
ZVRva2VuIHRva2VuKQpAQCAtMjAwLDYgKzE5MywxMSBAQCB1bnNpZ25lZCBUZXh0dXJlTWFuYWdl
cjo6YWxsb2NhdGVUZXh0dXJlKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZVRv
awogICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0LmdldCgpLT5zZWNvbmQ7CiAgICAgQVNTRVJU
KGluZm8tPmlzUHJvdGVjdGVkKTsKIAorICAgIGlmIChtX2V2aWN0ZWRUaWxlcy5tYXRjaGVzKGlu
Zm8tPnNpemUsIGluZm8tPmZvcm1hdCkgJiYgIW1fZXZpY3RlZFRpbGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBtX2V2aWN0ZWRUaWxlcy5yZWN5Y2xlSW50bygqaW5mbyk7CisgICAgICAgIHJldHVy
biBpbmZvLT50ZXh0dXJlSWQ7CisgICAgfQorCiAgICAgdW5zaWduZWQgdGV4dHVyZUlkID0gYWxs
b2NhdG9yLT5jcmVhdGVUZXh0dXJlKGluZm8tPnNpemUsIGluZm8tPmZvcm1hdCk7CiAgICAgaW5m
by0+dGV4dHVyZUlkID0gdGV4dHVyZUlkOwogI2lmbmRlZiBOREVCVUcKQEAgLTIzOSw2ICsyMzcs
NjUgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuIHRv
a2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorVGV4
dHVyZU1hbmFnZXI6OkV2aWN0aW9uTGlzdDo6fkV2aWN0aW9uTGlzdCgpCit7CisgICAgQVNTRVJU
KGlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hbmFnZXI6OkV2aWN0aW9uTGlzdDo6YWRk
KGNvbnN0IFRleHR1cmVJbmZvJiBpbmZvKQoreworICAgIG1fZXZpY3RlZFRleHR1cmVzLmFwcGVu
ZChpbmZvKTsKK30KKwordm9pZCBUZXh0dXJlTWFuYWdlcjo6RXZpY3Rpb25MaXN0OjpkZWxldGVB
bGxUZXh0dXJlcyhUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit7CisgICAgaWYgKGFsbG9j
YXRvcikgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZXZpY3RlZFRleHR1cmVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9ldmljdGVkVGV4dHVyZXNbaV0udGV4
dHVyZUlkKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgIEFTU0VSVChtX2V2aWN0
ZWRUZXh0dXJlc1tpXS5hbGxvY2F0b3IgPT0gYWxsb2NhdG9yKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIGFsbG9jYXRvci0+ZGVsZXRlVGV4dHVyZShtX2V2aWN0ZWRUZXh0dXJlc1tpXS50ZXh0
dXJlSWQsIG1fZXZpY3RlZFRleHR1cmVzW2ldLnNpemUsIG1fZXZpY3RlZFRleHR1cmVzW2ldLmZv
cm1hdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbV9ldmljdGVkVGV4
dHVyZXMuY2xlYXIoKTsKK30KKworVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVQb29sOjpUZXh0dXJl
UG9vbCgpCisgICAgOiBtX2Zvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQor
eworfQorCit2b2lkIFRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlUG9vbDo6aW5pdGlhbGl6ZShjb25z
dCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgQVNTRVJUKGlzRW1wdHko
KSk7CisgICAgbV90ZXh0dXJlU2l6ZSA9IHNpemU7CisgICAgbV9mb3JtYXQgPSBmb3JtYXQ7Cit9
CisKK2Jvb2wgVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVQb29sOjptYXRjaGVzKGNvbnN0IEludFNp
emUmIHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICByZXR1cm4gbV90ZXh0dXJlU2l6ZSA9
PSBzaXplICYmIG1fZm9ybWF0ID09IGZvcm1hdDsKK30KKwordm9pZCBUZXh0dXJlTWFuYWdlcjo6
VGV4dHVyZVBvb2w6OnJlY3ljbGVJbnRvKFRleHR1cmVJbmZvJiBpbmZvKQoreworICAgIEFTU0VS
VCghaXNFbXB0eSgpKTsKKyAgICBUZXh0dXJlSW5mbyYgcmVjeWNsZWRJbmZvID0gbV9ldmljdGVk
VGV4dHVyZXMubGFzdCgpOworCisgICAgQVNTRVJUKCFpbmZvLnRleHR1cmVJZCk7CisgICAgQVNT
RVJUKHJlY3ljbGVkSW5mby50ZXh0dXJlSWQpOworICAgIEFTU0VSVChpbmZvLnNpemUgPT0gcmVj
eWNsZWRJbmZvLnNpemUpOworICAgIEFTU0VSVChpbmZvLmZvcm1hdCA9PSByZWN5Y2xlZEluZm8u
Zm9ybWF0KTsKKworICAgIGluZm8udGV4dHVyZUlkID0gcmVjeWNsZWRJbmZvLnRleHR1cmVJZDsK
KyNpZm5kZWYgTkRFQlVHCisgICAgaW5mby5hbGxvY2F0b3IgPSByZWN5Y2xlZEluZm8uYWxsb2Nh
dG9yOworI2VuZGlmCisgICAgbV9ldmljdGVkVGV4dHVyZXMucmVtb3ZlTGFzdCgpOworfQorCiB9
CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuaAppbmRleCBmMzI3YjRjZmNkMWIxMGRhZTdkYWQ2MzQ2MDRmNjczOWI1MjBmMjA4Li4xODZl
ZTM5YmFlMDkzZWRhODc3ZjUxYWVjMzMyZGI0ZTJiMGRjYTA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2Vy
LmgKQEAgLTU0LDYgKzU0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFRleHR1cmVNYW5hZ2VyKG1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CiAgICAg
fQogCisgICAgdm9pZCBpbml0aWFsaXplVGlsZVBvb2woY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVt
IGZvcm1hdCk7CisKICAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFs
bG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgogICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0
Qnl0ZXMoKTsKICAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhj
ZWVkZWQgaWYgbmVlZGVkLgpAQCAtMTA5LDE2ICsxMTEsMzQgQEAgcHJpdmF0ZToKICAgICBpbnQg
bV9tYXhUZXh0dXJlU2l6ZTsKICAgICBUZXh0dXJlVG9rZW4gbV9uZXh0VG9rZW47CiAKLSAgICBz
dHJ1Y3QgRXZpY3Rpb25FbnRyeSB7Ci0gICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsKLSAgICAg
ICAgSW50U2l6ZSBzaXplOwotICAgICAgICBHQzNEZW51bSBmb3JtYXQ7Ci0jaWZuZGVmIE5ERUJV
RwotICAgICAgICBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3I7Ci0jZW5kaWYKKyAgICBjbGFz
cyBFdmljdGlvbkxpc3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgfkV2aWN0aW9uTGlzdCgpOwor
CisgICAgICAgIHZvaWQgYWRkKGNvbnN0IFRleHR1cmVJbmZvJik7CisgICAgICAgIHZvaWQgZGVs
ZXRlQWxsVGV4dHVyZXMoVGV4dHVyZUFsbG9jYXRvciopOworCisgICAgICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFtX2V2aWN0ZWRUZXh0dXJlcy5zaXplKCk7IH0KKyAgICBwcm90
ZWN0ZWQ6CisKKyAgICAgICAgVmVjdG9yPFRleHR1cmVJbmZvPiBtX2V2aWN0ZWRUZXh0dXJlczsK
KyAgICB9OworCisgICAgY2xhc3MgVGV4dHVyZVBvb2wgOiBwdWJsaWMgRXZpY3Rpb25MaXN0IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFRleHR1cmVQb29sKCk7CisgICAgICAgIHZvaWQgaW5pdGlh
bGl6ZShjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKKworICAgICAgICBib29sIG1h
dGNoZXMoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICAgICAgdm9pZCBy
ZWN5Y2xlSW50byhUZXh0dXJlSW5mbyYpOworICAgIHByaXZhdGU6CisgICAgICAgIEludFNpemUg
bV90ZXh0dXJlU2l6ZTsKKyAgICAgICAgR0MzRGVudW0gbV9mb3JtYXQ7CiAgICAgfTsKIAotICAg
IFZlY3RvcjxFdmljdGlvbkVudHJ5PiBtX2V2aWN0ZWRUZXh0dXJlczsKKyAgICBUZXh0dXJlUG9v
bCBtX2V2aWN0ZWRUaWxlczsKKyAgICBFdmljdGlvbkxpc3QgbV9ldmljdGVkVGV4dHVyZXM7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAzMjcwMjI4Njg1ODg4
Nzk5OTc1MDNlMTRmMDlkMDk0YWZhNDdiMTdjLi5jNTU3NWMyYzIxMDVjN2IwN2MxY2Y3ZTlkM2U2
ZTYyMGExY2IxNGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTc3LDYg
Kzc3LDExIEBAIFRpbGVkTGF5ZXJDaHJvbWl1bTo6flRpbGVkTGF5ZXJDaHJvbWl1bSgpCiB7CiB9
CiAKK0ludFNpemUgVGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSgpCit7CisgICAgcmV0dXJu
IEludFNpemUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGlsZVNpemUpOworfQorCiBQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkK
IHsKICAgICByZXR1cm4gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKGlkKCkpOwpAQCAtMTQ2LDcg
KzE1MSw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5
ZXJUcmVlSG9zdCogaG9zdCkKICAgICBtX3RleHR1cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRh
dGVyKCktPm9yaWVudGF0aW9uKCk7CiAgICAgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJl
VXBkYXRlcigpLT5zYW1wbGVkVGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9ybWF0KTsKICAgICBtX3Rp
bGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZSgKLSAgICAgICAgSW50U2l6ZShkZWZhdWx0
VGlsZVNpemUsIGRlZmF1bHRUaWxlU2l6ZSksCisgICAgICAgIHRpbGVTaXplKCksCiAgICAgICAg
IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSA/IENDTGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRl
eGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDIzNjNiODA5ZjkxODQ3M2YwOWE1YjkwMDZiMmQxYzc5
MjFjMTllZGQuLjJhMTZjZTUxNzdlODcyNDIyZjc2ODExMmYyMzVmZmM4YjIzMjBhZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICAv
LyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgogICAgIHZvaWQgcHJvdGVjdFRpbGVU
ZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKKyAgICBzdGF0aWMgSW50U2l6
ZSB0aWxlU2l6ZSgpOworCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgVGlsZWRMYXllckNocm9t
aXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApp
bmRleCA3Yzc2MGI5ZDY5YjA0NjMyODAzZDk2NzVhYmY3MmFkMmE2NTI0ZmIxLi43M2QyMDhjNjRh
ZDdiODczYmYzZDEzODI3YzQ5YzU3NzBhNmE0YWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTg1LDYgKzg1LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxp
emUoKQogICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gbV9wcm94eS0+bGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZzsKIAogICAgIG1f
Y29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1h
bmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5pbml0
aWFsaXplVGlsZVBvb2woVGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSgpLCBtX3Byb3h5LT5s
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkuYmVzdFRleHR1cmVGb3JtYXQpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0xMjMsMTAgKzEyNCwxMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
Y29tbWl0VG9PbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAg
aG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOwogCiAgICAgY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2Vy
OjpyZWNsYWltTGltaXRCeXRlcygpKTsKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkp
OwogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhtX3VwZGF0ZUxpc3QsIGhvc3RJbXBs
LT5jb250ZXh0KCksIGhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CiAKKyAg
ICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1w
bC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpOworCiAgICAgaG9zdEltcGwtPnNldFZpc2li
bGUobV92aXNpYmxlKTsKICAgICBob3N0SW1wbC0+c2V0Wm9vbUFuaW1hdG9yVHJhbnNmb3JtKG1f
em9vbUFuaW1hdG9yVHJhbnNmb3JtKTsKICAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3Bv
cnRTaXplKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112360</attachid>
            <date>2011-10-25 11:07:21 -0700</date>
            <delta_ts>2011-11-22 22:27:22 -0800</delta_ts>
            <desc>rebaselined</desc>
            <filename>bug-70645-20111025110719.patch</filename>
            <type>text/plain</type>
            <size>12192</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgzNjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZDdlMTZkNWYwOTVhYjZl
MDZlYjA4OWE5ODRmNzA3NjEwNmVjZjA0Li43NWJhNzg5YjRjM2ZlODIwYWEzYmYxZWZjODQwMjNl
MGY3M2JhZmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMjUgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFJlY3lj
bGUgdGlsZS1zaXplZCB0ZXh0dXJlcyBkdXJpbmcgY29tbWl0IHRvIHByZXZlbnQgcmVhbGxvY2F0
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2
NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB0
ZXh0dXJlIG1lbW9yeSBpcyBhdCB0aGUgcmVjbGFtYXRpb24gbGltaXQsIHdoZW4gc2Nyb2xsaW5n
IGNhdXNlcworICAgICAgICBuZXcgdGlsZXMgdG8gYmUgcmVxdWVzdGVkLCBpdCB3aWxsIHB1c2gg
b3V0IG9sZGVyIHRpbGVzLiBUbyBwcmV2ZW50CisgICAgICAgIHRoaXMgcHJvY2VzcyBmcm9tIGNv
bnN0YW50bHkgcmVhbGxvY2F0aW5nIHRleHR1cmVzLCByZXVzZSB0ZXh0dXJlIGlkcworICAgICAg
ICBmcm9tIHRoZXNlIG9sZGVyIHRpbGVzIGJlZm9yZSBldmljdGluZyB0aGVtLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OmluaXRpYWxpemVUaWxlUG9vbCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6ZGVsZXRlRXZpY3RlZFRleHR1cmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZW1vdmVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hbmFnZXI6OkV2aWN0aW9uTGlzdDo6fkV2aWN0aW9uTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6RXZpY3Rpb25MaXN0OjphZGQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OkV2aWN0aW9uTGlzdDo6ZGVsZXRlQWxsVGV4dHVyZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVQb29sOjpUZXh0dXJl
UG9vbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6VGV4dHVyZVBvb2w6Omlu
aXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVQb29s
OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlUG9v
bDo6cmVjeWNsZUludG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6RXZpY3Rp
b25MaXN0Ojppc0VtcHR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9t
aXVtOjp0aWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNl
dExheWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21t
aXRUb09uSW1wbFRocmVhZCk6CisKIDIwMTEtMTAtMjUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjg4NTgwKTogQ3Vyc29yIGZh
aWxzIHRvIGNoYW5nZSB0byBwb2ludGVyIG9uIGVtYmVkZGVkIEdvb2dsZSBtYXBzIHBvcHVwcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4
dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IGM2MDBkOWU2NDkxZDdkMWU3NTcyMjIxNGUzMTlk
YTdmMGMxODg0Y2UuLjc1MmQ4MDY1M2QzMzQ1M2JjMDMxOTJkZWE1YzhlNjdkYzZhNjgxMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTY4LDYgKzY4LDExIEBAIFRleHR1cmVNYW5hZ2Vy
OjpUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVT
aXplKQogewogfQogCit2b2lkIFRleHR1cmVNYW5hZ2VyOjppbml0aWFsaXplVGlsZVBvb2woY29u
c3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIG1fZXZpY3RlZFRpbGVz
LmluaXRpYWxpemUoc2l6ZSwgZm9ybWF0KTsKK30KKwogdm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0
TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykKIHsKICAgICByZWR1Y2VN
ZW1vcnlUb0xpbWl0KG1lbW9yeUxpbWl0Qnl0ZXMpOwpAQCAtMTU1LDE3ICsxNjAsOCBAQCB2b2lk
IFRleHR1cmVNYW5hZ2VyOjphZGRUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgVGV4dHVyZUlu
Zm8gaW5mbykKIAogdm9pZCBUZXh0dXJlTWFuYWdlcjo6ZGVsZXRlRXZpY3RlZFRleHR1cmVzKFRl
eHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKLSAgICBpZiAoYWxsb2NhdG9yKSB7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ldmljdGVkVGV4dHVyZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChtX2V2aWN0ZWRUZXh0dXJlc1tpXS50ZXh0dXJlSWQpIHsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZXZpY3RlZFRleHR1cmVzW2ld
LmFsbG9jYXRvciA9PSBhbGxvY2F0b3IpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYWxsb2Nh
dG9yLT5kZWxldGVUZXh0dXJlKG1fZXZpY3RlZFRleHR1cmVzW2ldLnRleHR1cmVJZCwgbV9ldmlj
dGVkVGV4dHVyZXNbaV0uc2l6ZSwgbV9ldmljdGVkVGV4dHVyZXNbaV0uZm9ybWF0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBtX2V2aWN0ZWRUZXh0dXJlcy5jbGVhcigp
OworICAgIG1fZXZpY3RlZFRpbGVzLmRlbGV0ZUFsbFRleHR1cmVzKGFsbG9jYXRvcik7CisgICAg
bV9ldmljdGVkVGV4dHVyZXMuZGVsZXRlQWxsVGV4dHVyZXMoYWxsb2NhdG9yKTsKIH0KIAogdm9p
ZCBUZXh0dXJlTWFuYWdlcjo6ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhUZXh0dXJlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IpCkBAIC0xODMsMTQgKzE3OSwxMSBAQCB2b2lkIFRleHR1cmVNYW5hZ2Vy
OjpyZW1vdmVUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgVGV4dHVyZUluZm8gaW5mbykKICAg
ICBtX3RleHR1cmVzLnJlbW92ZSh0b2tlbik7CiAgICAgQVNTRVJUKG1fdGV4dHVyZUxSVVNldC5j
b250YWlucyh0b2tlbikpOwogICAgIG1fdGV4dHVyZUxSVVNldC5yZW1vdmUodG9rZW4pOwotICAg
IEV2aWN0aW9uRW50cnkgZW50cnk7Ci0gICAgZW50cnkudGV4dHVyZUlkID0gaW5mby50ZXh0dXJl
SWQ7Ci0gICAgZW50cnkuc2l6ZSA9IGluZm8uc2l6ZTsKLSAgICBlbnRyeS5mb3JtYXQgPSBpbmZv
LmZvcm1hdDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgZW50cnkuYWxsb2NhdG9yID0gaW5mby5hbGxv
Y2F0b3I7Ci0jZW5kaWYKLSAgICBtX2V2aWN0ZWRUZXh0dXJlcy5hcHBlbmQoZW50cnkpOworCisg
ICAgaWYgKGluZm8udGV4dHVyZUlkICYmIG1fZXZpY3RlZFRpbGVzLm1hdGNoZXMoaW5mby5zaXpl
LCBpbmZvLmZvcm1hdCkpCisgICAgICAgIG1fZXZpY3RlZFRpbGVzLmFkZChpbmZvKTsKKyAgICBl
bHNlCisgICAgICAgIG1fZXZpY3RlZFRleHR1cmVzLmFkZChpbmZvKTsKIH0KIAogdW5zaWduZWQg
VGV4dHVyZU1hbmFnZXI6OmFsbG9jYXRlVGV4dHVyZShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIFRleHR1cmVUb2tlbiB0b2tlbikKQEAgLTIwMCw2ICsxOTMsMTEgQEAgdW5zaWduZWQgVGV4
dHVyZU1hbmFnZXI6OmFsbG9jYXRlVGV4dHVyZShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IFRleHR1cmVUb2sKICAgICBUZXh0dXJlSW5mbyogaW5mbyA9ICZpdC5nZXQoKS0+c2Vjb25kOwog
ICAgIEFTU0VSVChpbmZvLT5pc1Byb3RlY3RlZCk7CiAKKyAgICBpZiAobV9ldmljdGVkVGlsZXMu
bWF0Y2hlcyhpbmZvLT5zaXplLCBpbmZvLT5mb3JtYXQpICYmICFtX2V2aWN0ZWRUaWxlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9ldmljdGVkVGlsZXMucmVjeWNsZUludG8oKmluZm8pOworICAg
ICAgICByZXR1cm4gaW5mby0+dGV4dHVyZUlkOworICAgIH0KKwogICAgIHVuc2lnbmVkIHRleHR1
cmVJZCA9IGFsbG9jYXRvci0+Y3JlYXRlVGV4dHVyZShpbmZvLT5zaXplLCBpbmZvLT5mb3JtYXQp
OwogICAgIGluZm8tPnRleHR1cmVJZCA9IHRleHR1cmVJZDsKICNpZm5kZWYgTkRFQlVHCkBAIC0y
MzksNiArMjM3LDY1IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1
cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK1RleHR1cmVNYW5hZ2VyOjpFdmljdGlvbkxpc3Q6On5FdmljdGlvbkxpc3QoKQorewor
ICAgIEFTU0VSVChpc0VtcHR5KCkpOworfQorCit2b2lkIFRleHR1cmVNYW5hZ2VyOjpFdmljdGlv
bkxpc3Q6OmFkZChjb25zdCBUZXh0dXJlSW5mbyYgaW5mbykKK3sKKyAgICBtX2V2aWN0ZWRUZXh0
dXJlcy5hcHBlbmQoaW5mbyk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hbmFnZXI6OkV2aWN0aW9uTGlz
dDo6ZGVsZXRlQWxsVGV4dHVyZXMoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQoreworICAg
IGlmIChhbGxvY2F0b3IpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2V2aWN0
ZWRUZXh0dXJlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fZXZpY3RlZFRleHR1
cmVzW2ldLnRleHR1cmVJZCkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAgICBBU1NF
UlQobV9ldmljdGVkVGV4dHVyZXNbaV0uYWxsb2NhdG9yID09IGFsbG9jYXRvcik7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICBhbGxvY2F0b3ItPmRlbGV0ZVRleHR1cmUobV9ldmljdGVkVGV4dHVy
ZXNbaV0udGV4dHVyZUlkLCBtX2V2aWN0ZWRUZXh0dXJlc1tpXS5zaXplLCBtX2V2aWN0ZWRUZXh0
dXJlc1tpXS5mb3JtYXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIG1f
ZXZpY3RlZFRleHR1cmVzLmNsZWFyKCk7Cit9CisKK1RleHR1cmVNYW5hZ2VyOjpUZXh0dXJlUG9v
bDo6VGV4dHVyZVBvb2woKQorICAgIDogbV9mb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSkKK3sKK30KKwordm9pZCBUZXh0dXJlTWFuYWdlcjo6VGV4dHVyZVBvb2w6OmluaXRp
YWxpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIEFTU0VS
VChpc0VtcHR5KCkpOworICAgIG1fdGV4dHVyZVNpemUgPSBzaXplOworICAgIG1fZm9ybWF0ID0g
Zm9ybWF0OworfQorCitib29sIFRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlUG9vbDo6bWF0Y2hlcyhj
b25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgcmV0dXJuIG1fdGV4
dHVyZVNpemUgPT0gc2l6ZSAmJiBtX2Zvcm1hdCA9PSBmb3JtYXQ7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hbmFnZXI6OlRleHR1cmVQb29sOjpyZWN5Y2xlSW50byhUZXh0dXJlSW5mbyYgaW5mbykKK3sK
KyAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgVGV4dHVyZUluZm8mIHJlY3ljbGVkSW5mbyA9
IG1fZXZpY3RlZFRleHR1cmVzLmxhc3QoKTsKKworICAgIEFTU0VSVCghaW5mby50ZXh0dXJlSWQp
OworICAgIEFTU0VSVChyZWN5Y2xlZEluZm8udGV4dHVyZUlkKTsKKyAgICBBU1NFUlQoaW5mby5z
aXplID09IHJlY3ljbGVkSW5mby5zaXplKTsKKyAgICBBU1NFUlQoaW5mby5mb3JtYXQgPT0gcmVj
eWNsZWRJbmZvLmZvcm1hdCk7CisKKyAgICBpbmZvLnRleHR1cmVJZCA9IHJlY3ljbGVkSW5mby50
ZXh0dXJlSWQ7CisjaWZuZGVmIE5ERUJVRworICAgIGluZm8uYWxsb2NhdG9yID0gcmVjeWNsZWRJ
bmZvLmFsbG9jYXRvcjsKKyNlbmRpZgorICAgIG1fZXZpY3RlZFRleHR1cmVzLnJlbW92ZUxhc3Qo
KTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVy
ZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmgKaW5kZXggZjMyN2I0Y2ZjZDFiMTBkYWU3ZGFkNjM0NjA0ZjY3MzliNTIw
ZjIwOC4uMTg2ZWUzOWJhZTA5M2VkYTg3N2Y1MWFlYzMzMmRiNGUyYjBkY2EwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTWFuYWdlci5oCkBAIC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6
ZSkpOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZVRpbGVQb29sKGNvbnN0IEludFNpemUm
LCBHQzNEZW51bSBmb3JtYXQpOworCiAgICAgLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1pdCBmb3Ig
dGV4dHVyZSBhbGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KICAgICBzdGF0aWMgc2l6ZV90
IGhpZ2hMaW1pdEJ5dGVzKCk7CiAgICAgLy8gUHJlZmVycmVkIHRleHR1cmUgc2l6ZSBsaW1pdC4g
Q2FuIGJlIGV4Y2VlZGVkIGlmIG5lZWRlZC4KQEAgLTEwOSwxNiArMTExLDM0IEBAIHByaXZhdGU6
CiAgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CiAgICAgVGV4dHVyZVRva2VuIG1fbmV4dFRva2Vu
OwogCi0gICAgc3RydWN0IEV2aWN0aW9uRW50cnkgewotICAgICAgICB1bnNpZ25lZCB0ZXh0dXJl
SWQ7Ci0gICAgICAgIEludFNpemUgc2l6ZTsKLSAgICAgICAgR0MzRGVudW0gZm9ybWF0OwotI2lm
bmRlZiBOREVCVUcKLSAgICAgICAgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yOwotI2VuZGlm
CisgICAgY2xhc3MgRXZpY3Rpb25MaXN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5FdmljdGlv
bkxpc3QoKTsKKworICAgICAgICB2b2lkIGFkZChjb25zdCBUZXh0dXJlSW5mbyYpOworICAgICAg
ICB2b2lkIGRlbGV0ZUFsbFRleHR1cmVzKFRleHR1cmVBbGxvY2F0b3IqKTsKKworICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9ldmljdGVkVGV4dHVyZXMuc2l6ZSgpOyB9
CisgICAgcHJvdGVjdGVkOgorCisgICAgICAgIFZlY3RvcjxUZXh0dXJlSW5mbz4gbV9ldmljdGVk
VGV4dHVyZXM7CisgICAgfTsKKworICAgIGNsYXNzIFRleHR1cmVQb29sIDogcHVibGljIEV2aWN0
aW9uTGlzdCB7CisgICAgcHVibGljOgorICAgICAgICBUZXh0dXJlUG9vbCgpOworICAgICAgICB2
b2lkIGluaXRpYWxpemUoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICAg
ICAgYm9vbCBtYXRjaGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOworCisgICAg
ICAgIHZvaWQgcmVjeWNsZUludG8oVGV4dHVyZUluZm8mKTsKKyAgICBwcml2YXRlOgorICAgICAg
ICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CisgICAgICAgIEdDM0RlbnVtIG1fZm9ybWF0OwogICAg
IH07CiAKLSAgICBWZWN0b3I8RXZpY3Rpb25FbnRyeT4gbV9ldmljdGVkVGV4dHVyZXM7CisgICAg
VGV4dHVyZVBvb2wgbV9ldmljdGVkVGlsZXM7CisgICAgRXZpY3Rpb25MaXN0IG1fZXZpY3RlZFRl
eHR1cmVzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZmNj
NDZkOTkzZDU0MGE0MjE5ZDdmMjcwMTAwMTg3MzhlZjdiOGZmZS4uYTc2ODM4ZDE3ODdjN2E0MTUw
ZTM5OWQzMTI1MTI0Nzg1YzU2ZDA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3Bw
CkBAIC03OCw2ICs3OCwxMSBAQCBUaWxlZExheWVyQ2hyb21pdW06On5UaWxlZExheWVyQ2hyb21p
dW0oKQogewogfQogCitJbnRTaXplIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUoKQorewor
ICAgIHJldHVybiBJbnRTaXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKTsKK30K
KwogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVDQ0xh
eWVySW1wbCgpCiB7CiAgICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZShpZCgpKTsK
QEAgLTE0Nyw3ICsxNTIsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVl
SG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiAgICAgbV90ZXh0dXJlT3JpZW50YXRpb24gPSB0
ZXh0dXJlVXBkYXRlcigpLT5vcmllbnRhdGlvbigpOwogICAgIG1fc2FtcGxlZFRleGVsRm9ybWF0
ID0gdGV4dHVyZVVwZGF0ZXIoKS0+c2FtcGxlZFRleGVsRm9ybWF0KG1fdGV4dHVyZUZvcm1hdCk7
CiAgICAgbV90aWxlciA9IENDTGF5ZXJUaWxpbmdEYXRhOjpjcmVhdGUoCi0gICAgICAgIEludFNp
emUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGlsZVNpemUpLAorICAgICAgICB0aWxlU2l6ZSgp
LAogICAgICAgICBpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6
Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCA1ZGFmMGYwMTk0N2E5OTQ3Y2QyMzVm
NTVmYjczOTU5ZTQ0N2IxZjU2Li5mNmZlYTdjNGUxYmUwNDg0MzcyZWEwZmNhZmRlNGE1OGMyNzQy
MjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtNTQsNiArNTQsOCBAQCBwdWJs
aWM6CiAgICAgLy8gcmVjeWNsZWQgYnkgdGhlIHRleHR1cmUgbWFuYWdlci4KICAgICB2b2lkIHBy
b3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCisgICAgc3Rh
dGljIEludFNpemUgdGlsZVNpemUoKTsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFRpbGVk
TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKaW5kZXggZTE4NDM3MTRmNWUyYTlhNTk1ZTg1MDBmNGE1MWJiMWQzMzVkMWQyMi4u
ODlkYTk3NDY0MDhjY2Q5YzVjMzYzZTI4NjFiNWJiMTI1YTA4MmQ2MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCkBAIC04Myw2ICs4Myw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0
Ojppbml0aWFsaXplKCkKICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IG1fcHJv
eHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7
CiAKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFu
YWdlci0+aW5pdGlhbGl6ZVRpbGVQb29sKFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUoKSwg
bV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJlc3RUZXh0dXJlRm9ybWF0KTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA5LDEzICsxMTAsMTIgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogICAgIG1f
YW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1p
dE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikK
IHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvIiwgdGhpcywgMCk7CisgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXRPbkltcGxUaHJlYWQiLCB0aGlzLCAwKTsKIAog
ICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJl
TWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7Ci0gICAgY29udGVudHNUZXh0dXJlTWFuYWdl
cigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9j
YXRvcigpKTsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBjb21taXRzIHRoZSBDQ0xheWVyVHJlZUhv
c3QgdG8gYW4gaW1wbCB0cmVlLiBXaGVuIG1vZGlmeWluZwpAQCAtMTI2LDcgKzEyNiwxMSBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVI
b3N0SW1wbCogaG9zdEltcGwpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25J
bXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogewogICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dDo6ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgaG9zdEltcGwtPnNl
dFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOworCisgICAgY29udGVudHNUZXh0dXJl
TWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4dHVy
ZUFsbG9jYXRvcigpKTsKKwogICAgIGhvc3RJbXBsLT5zZXRWaXNpYmxlKG1fdmlzaWJsZSk7CiAg
ICAgaG9zdEltcGwtPnNldFpvb21BbmltYXRvclRyYW5zZm9ybShtX3pvb21BbmltYXRvclRyYW5z
Zm9ybSk7CiAgICAgaG9zdEltcGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116318</attachid>
            <date>2011-11-22 22:27:25 -0800</date>
            <delta_ts>2011-11-29 09:51:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70645-20111122222724.patch</filename>
            <type>text/plain</type>
            <size>12869</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTA0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDExLTExLTIyICBHcmFjZSBL
bG9iYSAgPGtsb2JhZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWN5Y2xl
IHRpbGUtc2l6ZWQgdGV4dHVyZXMgZHVyaW5nIGNvbW1pdCB0byBwcmV2ZW50IHJlYWxsb2NhdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjQ1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVu
dGx5IHRleHR1cmUgcmVxdWVzdCBpcyBjYXBwZWQgYnkgdGhlIGhpZ2ggbGltaXQgd2hpbGUgd2Ug
cmVjbGFpbSB0aGUgdGV4dHVyZXMKKyAgICAgICAgaW4gZWFjaCBjb21taXQuIFRoaXMgdHJpZ2dl
cnMgbmV3IHRpbGVzIGFsd2F5cyBhbGxvY2F0ZWQgd2hlbiBzY3JvbGxpbmcuIFRoZQorICAgICAg
ICBwcm9wb3NhbCBpcyB0byByZXVzZSB0aGUgdGV4dHVyZSBkdXJpbmcgcmVxdWVzdCBpZiB0aGUg
dG90YWwgdXNlZCBtZW1vcnkgaXMgYWJvdXQgdG8KKyAgICAgICAgZXhjZWVkIHRoZSByZWNsYWlt
IGxpbWl0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4
dHVyZTo6TWFuYWdlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6
OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6OnJlc2VydmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6OmJpbmRUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hbmFnZXI6OnNldFJlY2xhaW1MaW1pdEJ5dGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZXBsYWNlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Ojppbml0aWFsaXplKToKKwogMjAxMS0xMS0yMiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdv
b2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBTdXBwb3J0IENvcmUgQW5pbWF0aW9uIHBs
dWdpbnMgaW4gY29tcG9zaXRvcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiAxMDEwNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDEsNiArMzAxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
KCkKIAogICAgIHNpemVfdCBjb250ZW50c01lbW9yeVVzZUJ5dGVzID0gbV9jb250ZW50c1RleHR1
cmVBbGxvY2F0b3ItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpOwogICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpoaWdo
TGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CisgICAgaWYgKFRleHR1cmVN
YW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpID4gY29udGVudHNNZW1vcnlVc2VCeXRlcykKKyAg
ICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldFJlY2xhaW1MaW1pdEJ5dGVz
KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VC
eXRlcyk7CisgICAgZWxzZQorICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
c2V0UmVjbGFpbUxpbWl0Qnl0ZXMoMCk7CiAgICAgZHJhd0xheWVyc0ludGVybmFsKCk7CiAKICAg
ICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgPiBjb250ZW50c01lbW9y
eVVzZUJ5dGVzKQpAQCAtNjY0LDcgKzY2OCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojppbml0aWFsaXplU2gKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Zmx1
c2goKSk7CiAKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fY2FwYWJpbGl0
aWVzLm1heFRleHR1cmVTaXplKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9
IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCks
IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpLCBtX2NhcGFiaWxpdGllcy5tYXhU
ZXh0dXJlU2l6ZSk7CiAgICAgbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZSht
X2NvbnRleHQuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0
dXJlLmNwcAkocmV2aXNpb24gMTAxMDQyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw3IEBAIE1hbmFnZWRUZXh0dXJlOjpNYW5hZ2VkVGV4dHVyZShUZXh0dXJlTWEKICAgICAs
IG1fdG9rZW4oMCkKICAgICAsIG1fZm9ybWF0KDApCiAgICAgLCBtX3RleHR1cmVJZCgwKQorICAg
ICwgbV9yZWFkeShmYWxzZSkKIHsKIH0KIApAQCAtNDksNyArNTAsNyBAQCBNYW5hZ2VkVGV4dHVy
ZTo6fk1hbmFnZWRUZXh0dXJlKCkKIAogYm9vbCBNYW5hZ2VkVGV4dHVyZTo6aXNWYWxpZChjb25z
dCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmb3JtYXQpCiB7Ci0gICAgcmV0dXJuIG1fdG9rZW4g
JiYgc2l6ZSA9PSBtX3NpemUgJiYgZm9ybWF0ID09IG1fZm9ybWF0ICYmIG1fdGV4dHVyZU1hbmFn
ZXItPmhhc1RleHR1cmUobV90b2tlbik7CisgICAgcmV0dXJuIG1fdG9rZW4gJiYgc2l6ZSA9PSBt
X3NpemUgJiYgZm9ybWF0ID09IG1fZm9ybWF0ICYmIG1fdGV4dHVyZU1hbmFnZXItPmhhc1RleHR1
cmUobV90b2tlbikgJiYgbV9yZWFkeTsKIH0KIAogYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2
ZShjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmb3JtYXQpCkBAIC02MSwxMSArNjIsMTYg
QEAgYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZShjb25zdCBJbnRTaQogICAgIGlmIChzaXpl
ID09IG1fc2l6ZSAmJiBmb3JtYXQgPT0gbV9mb3JtYXQgJiYgbV90ZXh0dXJlTWFuYWdlci0+aGFz
VGV4dHVyZShtX3Rva2VuKSkKICAgICAgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJvdGVjdFRleHR1
cmUobV90b2tlbik7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1fdGV4dHVyZUlkID0gMDsKLSAgICAg
ICAgcmVzZXJ2ZWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0VGV4dHVyZShtX3Rva2VuLCBz
aXplLCBmb3JtYXQpOwotICAgICAgICBpZiAocmVzZXJ2ZWQpIHsKKyAgICAgICAgbV90ZXh0dXJl
SWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0VGV4dHVyZShtX3Rva2VuLCBzaXplLCBmb3Jt
YXQpOworICAgICAgICBpZiAobV90ZXh0dXJlSWQgPj0gMCkgewogICAgICAgICAgICAgbV9zaXpl
ID0gc2l6ZTsKICAgICAgICAgICAgIG1fZm9ybWF0ID0gZm9ybWF0OworICAgICAgICAgICAgcmVz
ZXJ2ZWQgPSB0cnVlOworICAgICAgICAgICAgLy8gcmVxdWVzdFRleHR1cmUoKSBtYXkgcmV0dXJu
IGEgdGV4dHVyZUlkID4gMCBpZiBpdCB1c2VzIGFuIG9sZCB0ZXh0dXJlLiBCdXQKKyAgICAgICAg
ICAgIC8vIHdlIGRvbid0IHNldCBtX3JlYWR5IHRvIHRydWUgdW50aWwgYmluZFRleHR1cmUvZnJh
bWVidWZmZXJUZXh0dXJlMkQgaXMgY2FsbGVkLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbV90ZXh0dXJlSWQgPSAwOworICAgICAgICAgICAgcmVzZXJ2ZWQgPSBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtODUsNiArOTEsNyBAQCB2b2lkIE1hbmFnZWRUZXh0dXJlOjpiaW5k
VGV4dHVyZShHcmFwaGljCiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXItPmhhc1RleHR1cmUo
bV90b2tlbikpOwogICAgIGlmICghbV90ZXh0dXJlSWQpCiAgICAgICAgIG1fdGV4dHVyZUlkID0g
bV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0dXJlKGFsbG9jYXRvciwgbV90b2tlbik7Cisg
ICAgbV9yZWFkeSA9IHRydWU7CiAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKIH0KIApAQCAtOTMsNiArMTAwLDcgQEAg
dm9pZCBNYW5hZ2VkVGV4dHVyZTo6ZnJhbWVidWZmZXJUZXh0dXJlMgogICAgIEFTU0VSVChtX3Rl
eHR1cmVNYW5hZ2VyLT5oYXNUZXh0dXJlKG1fdG9rZW4pKTsKICAgICBpZiAoIW1fdGV4dHVyZUlk
KQogICAgICAgICBtX3RleHR1cmVJZCA9IG1fdGV4dHVyZU1hbmFnZXItPmFsbG9jYXRlVGV4dHVy
ZShhbGxvY2F0b3IsIG1fdG9rZW4pOworICAgIG1fcmVhZHkgPSB0cnVlOwogICAgIGNvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90ZXh0dXJlSWQsIDApOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgJ
KHJldmlzaW9uIDEwMTA0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL01hbmFnZWRUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAg
cHJpdmF0ZToKICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2Zvcm1hdDsKICAg
ICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICBib29sIG1fcmVhZHk7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMDEwNDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDggKzYwLDkgQEAgc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlV
c2VCeXRlcyhjbwogfQogCiAKLVRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFuYWdlcihzaXplX3Qg
bWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQorVGV4dHVyZU1hbmFnZXI6OlRl
eHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcmVjbGFpbUxpbWl0
Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fbWVtb3J5TGltaXRCeXRlcyhtZW1v
cnlMaW1pdEJ5dGVzKQorICAgICwgbV9yZWNsYWltTGltaXRCeXRlcyhyZWNsYWltTGltaXRCeXRl
cykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWF4VGV4dHVyZVNpemUobWF4
VGV4dHVyZVNpemUpCiAgICAgLCBtX25leHRUb2tlbigxKQpAQCAtNzUsNiArNzYsMTIgQEAgdm9p
ZCBUZXh0dXJlTWFuYWdlcjo6c2V0TWVtb3J5TGltaXRCeXRlcwogICAgIG1fbWVtb3J5TGltaXRC
eXRlcyA9IG1lbW9yeUxpbWl0Qnl0ZXM7CiB9CiAKK3ZvaWQgVGV4dHVyZU1hbmFnZXI6OnNldFJl
Y2xhaW1MaW1pdEJ5dGVzKHNpemVfdCByZWNsYWltTGltaXRCeXRlcykKK3sKKyAgICByZWR1Y2VN
ZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdEJ5dGVzKTsKKyAgICBtX3JlY2xhaW1MaW1pdEJ5dGVz
ID0gcmVjbGFpbUxpbWl0Qnl0ZXM7Cit9CisKIFRleHR1cmVUb2tlbiBUZXh0dXJlTWFuYWdlcjo6
Z2V0VG9rZW4oKQogewogICAgIHJldHVybiBtX25leHRUb2tlbisrOwpAQCAtMTQ0LDYgKzE1MSwy
OCBAQCB2b2lkIFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnlUb0xpbWl0CiAgICAgfQogfQog
Cit1bnNpZ25lZCBUZXh0dXJlTWFuYWdlcjo6cmVwbGFjZVRleHR1cmUoVGV4dHVyZVRva2VuIG5l
d1Rva2VuLCBUZXh0dXJlSW5mbyBuZXdJbmZvKQoreworICAgIGZvciAoTGlzdEhhc2hTZXQ8VGV4
dHVyZVRva2VuPjo6aXRlcmF0b3IgbHJ1SXQgPSBtX3RleHR1cmVMUlVTZXQuYmVnaW4oKTsgbHJ1
SXQgIT0gbV90ZXh0dXJlTFJVU2V0LmVuZCgpOyArK2xydUl0KSB7CisgICAgICAgIFRleHR1cmVU
b2tlbiB0b2tlbiA9ICpscnVJdDsKKyAgICAgICAgVGV4dHVyZUluZm8gaW5mbyA9IG1fdGV4dHVy
ZXMuZ2V0KHRva2VuKTsKKyAgICAgICAgaWYgKGluZm8uaXNQcm90ZWN0ZWQpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKG5ld0luZm8uc2l6ZSAhPSBpbmZvLnNpemUgfHwgbmV3
SW5mby5mb3JtYXQgIT0gaW5mby5mb3JtYXQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgbmV3SW5mby50ZXh0dXJlSWQgPSBpbmZvLnRleHR1cmVJZDsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIG5ld0luZm8uYWxsb2NhdG9yID0gaW5mby5hbGxvY2F0b3I7CisjZW5kaWYKKyAgICAg
ICAgbV90ZXh0dXJlcy5yZW1vdmUodG9rZW4pOworICAgICAgICBtX3RleHR1cmVMUlVTZXQucmVt
b3ZlKHRva2VuKTsKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQobmV3VG9rZW4sIG5ld0luZm8pOwor
ICAgICAgICBtX3RleHR1cmVMUlVTZXQuYWRkKG5ld1Rva2VuKTsKKyAgICAgICAgcmV0dXJuIGlu
Zm8udGV4dHVyZUlkOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBUZXh0dXJlTWFu
YWdlcjo6YWRkVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIFRleHR1cmVJbmZvIGluZm8pCiB7
CiAgICAgQVNTRVJUKCFtX3RleHR1cmVMUlVTZXQuY29udGFpbnModG9rZW4pKTsKQEAgLTIwOCwx
MCArMjM3LDEwIEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUKICAg
ICByZXR1cm4gdGV4dHVyZUlkOwogfQogCi1ib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4
dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZm9ybWF0KQor
aW50IFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIElu
dFNpemUgc2l6ZSwgdW5zaWduZWQgZm9ybWF0KQogewogICAgIGlmIChzaXplLndpZHRoKCkgPiBt
X21heFRleHR1cmVTaXplIHx8IHNpemUuaGVpZ2h0KCkgPiBtX21heFRleHR1cmVTaXplKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKIAogICAgIFRleHR1cmVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRva2VuKTsKICAgICBpZiAoaXQgIT0gbV90
ZXh0dXJlcy5lbmQoKSkgewpAQCAtMjIxLDExICsyNTAsMTEgQEAgYm9vbCBUZXh0dXJlTWFuYWdl
cjo6cmVxdWVzdFRleHR1cmUoVGV4dAogCiAgICAgc2l6ZV90IG1lbW9yeVJlcXVpcmVkQnl0ZXMg
PSBtZW1vcnlVc2VCeXRlcyhzaXplLCBmb3JtYXQpOwogICAgIGlmIChtZW1vcnlSZXF1aXJlZEJ5
dGVzID4gbV9tZW1vcnlMaW1pdEJ5dGVzKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiAtMTsKIAogICAgIHJlZHVjZU1lbW9yeVRvTGltaXQobV9tZW1vcnlMaW1pdEJ5dGVz
IC0gbWVtb3J5UmVxdWlyZWRCeXRlcyk7CiAgICAgaWYgKG1fbWVtb3J5VXNlQnl0ZXMgKyBtZW1v
cnlSZXF1aXJlZEJ5dGVzID4gbV9tZW1vcnlMaW1pdEJ5dGVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiAtMTsKIAogICAgIFRleHR1cmVJbmZvIGluZm87CiAgICAgaW5m
by5zaXplID0gc2l6ZTsKQEAgLTIzNSw4ICsyNjQsMTUgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6
cmVxdWVzdFRleHR1cmUoVGV4dAogI2lmbmRlZiBOREVCVUcKICAgICBpbmZvLmFsbG9jYXRvciA9
IDA7CiAjZW5kaWYKKyAgICAvLyBBdm9pZCBjaHVybmluZyBieSByZXVzaW5nIHRoZSB0ZXh0dXJl
IGlmIGl0IGlzIGFib3V0IHRvIGJlIHJlY2xhaW1lZCBhbmQKKyAgICAvLyBpdCBoYXMgdGhlIHNh
bWUgc2l6ZSBhbmQgZm9ybWF0IGFzIHRoZSByZXF1ZXN0aW5nIHRleHR1cmUuCisgICAgaWYgKG1f
bWVtb3J5VXNlQnl0ZXMgKyBtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9yZWNsYWltTGltaXRCeXRl
cykgeworICAgICAgICBpbmZvLnRleHR1cmVJZCA9IHJlcGxhY2VUZXh0dXJlKHRva2VuLCBpbmZv
KTsKKyAgICAgICAgaWYgKGluZm8udGV4dHVyZUlkID4gMCkKKyAgICAgICAgICAgIHJldHVybiBp
bmZvLnRleHR1cmVJZDsKKyAgICB9CiAgICAgYWRkVGV4dHVyZSh0b2tlbiwgaW5mbyk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIDA7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuaAkocmV2aXNpb24gMTAxMDQyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDks
OSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBUZXh0dXJlTWFuYWdlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoVGV4dHVyZU1hbmFnZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PFRleHR1cmVNYW5hZ2VyPiBjcmVhdGUoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhU
ZXh0dXJlU2l6ZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRl
KHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMsIGludCBt
YXhUZXh0dXJlU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVy
ZU1hbmFnZXIobWVtb3J5TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtZW1vcnlMaW1pdEJ5dGVzLCByZWNsYWlt
TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKICAgICB9CiAKICAgICAvLyBBYnNvbHV0ZSBt
YXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgpA
QCAtNjQsMTIgKzY0LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IG1lbW9yeVVzZUJ5
dGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOwogCiAgICAgdm9pZCBzZXRNZW1v
cnlMaW1pdEJ5dGVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRSZWNsYWltTGltaXRCeXRlcyhzaXpl
X3QpOwogCiAgICAgVGV4dHVyZVRva2VuIGdldFRva2VuKCk7CiAgICAgdm9pZCByZWxlYXNlVG9r
ZW4oVGV4dHVyZVRva2VuKTsKICAgICBib29sIGhhc1RleHR1cmUoVGV4dHVyZVRva2VuKTsKIAot
ICAgIGJvb2wgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuLCBJbnRTaXplLCBHQzNEZW51bSB0
ZXh0dXJlRm9ybWF0KTsKKyAgICBpbnQgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuLCBJbnRT
aXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKIAogICAgIHZvaWQgcHJvdGVjdFRleHR1cmUo
VGV4dHVyZVRva2VuKTsKICAgICB2b2lkIHVucHJvdGVjdFRleHR1cmUoVGV4dHVyZVRva2VuKTsK
QEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogICAgIHNpemVfdCBjdXJyZW50TWVtb3J5VXNlQnl0
ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeVVzZUJ5dGVzOyB9CiAKIHByaXZhdGU6Ci0gICAg
VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6
ZSk7CisgICAgVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBy
ZWNsYWltTGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKTsKIAogICAgIHN0cnVjdCBUZXh0
dXJlSW5mbyB7CiAgICAgICAgIEludFNpemUgc2l6ZTsKQEAgLTk5LDEyICsxMDAsMTQgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgYWRkVGV4dHVyZShUZXh0dXJlVG9rZW4sIFRleHR1cmVJbmZvKTsK
ICAgICB2b2lkIHJlbW92ZVRleHR1cmUoVGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbyk7CisgICAg
dW5zaWduZWQgcmVwbGFjZVRleHR1cmUoVGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbyk7CiAKICAg
ICB0eXBlZGVmIEhhc2hNYXA8VGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbz4gVGV4dHVyZU1hcDsK
ICAgICBUZXh0dXJlTWFwIG1fdGV4dHVyZXM7CiAgICAgTGlzdEhhc2hTZXQ8VGV4dHVyZVRva2Vu
PiBtX3RleHR1cmVMUlVTZXQ7CiAKICAgICBzaXplX3QgbV9tZW1vcnlMaW1pdEJ5dGVzOworICAg
IHNpemVfdCBtX3JlY2xhaW1MaW1pdEJ5dGVzOwogICAgIHNpemVfdCBtX21lbW9yeVVzZUJ5dGVz
OwogICAgIGludCBtX21heFRleHR1cmVTaXplOwogICAgIFRleHR1cmVUb2tlbiBtX25leHRUb2tl
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAkocmV2aXNpb24gMTAxMDQy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBib29sIENDTGF5
ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiAgICAgLy8gVXBkYXRlIG1fc2V0dGluZ3MgYmFzZWQg
b24gY2FwYWJpbGl0aWVzIHRoYXQgd2UgZ290IGJhY2sgZnJvbSB0aGUgcmVuZGVyZXIuCiAgICAg
bV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkudXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nOwogCi0gICAgbV9jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGln
aExpbWl0Qnl0ZXMoKSwgbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRl
eHR1cmVTaXplKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBUZXh0dXJlTWFuYWdl
cjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSwgbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cygpLm1heFRleHR1cmVTaXplKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>
<flag name="review"
          id="115456"
          type_id="1"
          status="-"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="115480"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116989</attachid>
            <date>2011-11-29 09:51:49 -0800</date>
            <delta_ts>2011-11-30 15:45:30 -0800</delta_ts>
            <desc>new patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12923</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTM5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDExLTExLTI5ICBHcmFjZSBL
bG9iYSAgPGtsb2JhZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2Ny
aXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGV4dHVyZSByZXF1ZXN0IGlzIGNhcHBlZCBi
eSB0aGUgaGlnaCBsaW1pdCB3aGlsZSB3ZSByZWNsYWltIHRoZSB0ZXh0dXJlcworICAgICAgICBp
biBlYWNoIGNvbW1pdC4gVGhpcyB0cmlnZ2VycyBuZXcgdGlsZXMgYWx3YXlzIGFsbG9jYXRlZCB3
aGVuIHNjcm9sbGluZy4gVGhlCisgICAgICAgIHByb3Bvc2FsIGlzIHRvIHJldXNlIHRoZSB0ZXh0
dXJlIGR1cmluZyByZXF1ZXN0IGlmIHRoZSB0b3RhbCB1c2VkIG1lbW9yeSBpcyBhYm91dCB0bwor
ICAgICAgICBleGNlZWQgdGhlIHJlY2xhaW0gbGltaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6Ok1hbmFnZWRUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0
dXJlOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6ZnJh
bWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L01hbmFnZWRUZXh0dXJlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRl
eHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRSZWNs
YWltTGltaXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVwbGFj
ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0
dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSk6CisKIDIwMTEtMTEt
MjggIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogVGV4dFByb21wdCBzaG91bGQgc2hvdyBzdWdnZXN0IGFib3ZlIG9yIHVuZGVy
IHNvIHRoYXQgaXQgaGFzIG1heGltYWwgaGVpZ2h0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDEzOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjksNyArNjY5LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmluaXRpYWxpemVTaAogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5mbHVz
aCgpKTsKIAotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRp
ZXMubWF4VGV4dHVyZVNpemUpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0g
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwg
VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCksIG1fY2FwYWJpbGl0aWVzLm1heFRl
eHR1cmVTaXplKTsKICAgICBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4
dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9yZW5kZXJTdXJm
YWNlVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1f
Y29udGV4dC5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1
cmUuY3BwCShyZXZpc2lvbiAxMDEzOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAgTWFuYWdlZFRleHR1cmU6Ok1hbmFnZWRUZXh0dXJlKFRleHR1cmVNYQogICAgICwg
bV90b2tlbigwKQogICAgICwgbV9mb3JtYXQoMCkKICAgICAsIG1fdGV4dHVyZUlkKDApCisgICAg
LCBtX3JlYWR5KGZhbHNlKQogewogfQogCkBAIC00OSw3ICs1MCw3IEBAIE1hbmFnZWRUZXh0dXJl
Ojp+TWFuYWdlZFRleHR1cmUoKQogCiBib29sIE1hbmFnZWRUZXh0dXJlOjppc1ZhbGlkKGNvbnN0
IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKIHsKLSAgICByZXR1cm4gbV90b2tlbiAm
JiBzaXplID09IG1fc2l6ZSAmJiBmb3JtYXQgPT0gbV9mb3JtYXQgJiYgbV90ZXh0dXJlTWFuYWdl
ci0+aGFzVGV4dHVyZShtX3Rva2VuKTsKKyAgICByZXR1cm4gbV90b2tlbiAmJiBzaXplID09IG1f
c2l6ZSAmJiBmb3JtYXQgPT0gbV9mb3JtYXQgJiYgbV90ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVy
ZShtX3Rva2VuKSAmJiBtX3JlYWR5OwogfQogCiBib29sIE1hbmFnZWRUZXh0dXJlOjpyZXNlcnZl
KGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKQEAgLTYyLDEwICs2MywxMyBA
QCBib29sIE1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlKGNvbnN0IEludFNpCiAgICAgICAgIG1fdGV4
dHVyZU1hbmFnZXItPnByb3RlY3RUZXh0dXJlKG1fdG9rZW4pOwogICAgIGVsc2UgewogICAgICAg
ICBtX3RleHR1cmVJZCA9IDA7Ci0gICAgICAgIHJlc2VydmVkID0gbV90ZXh0dXJlTWFuYWdlci0+
cmVxdWVzdFRleHR1cmUobV90b2tlbiwgc2l6ZSwgZm9ybWF0KTsKKyAgICAgICAgcmVzZXJ2ZWQg
PSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0VGV4dHVyZShtX3Rva2VuLCBzaXplLCBmb3JtYXQs
IG1fdGV4dHVyZUlkKTsKICAgICAgICAgaWYgKHJlc2VydmVkKSB7CiAgICAgICAgICAgICBtX3Np
emUgPSBzaXplOwogICAgICAgICAgICAgbV9mb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgICAgICAv
LyByZXF1ZXN0VGV4dHVyZSgpIG1heSByZWN5Y2xlIGEgdGV4dHVyZUlkLiBCdXQgbV9yZWFkeSBp
cyBub3Qgc2V0IHRvIHRydWUgdW50aWwKKyAgICAgICAgICAgIC8vIGJpbmRUZXh0dXJlIG9yIGZy
YW1lYnVmZmVyVGV4dHVyZTJEIGlzIGNhbGxlZC4gSWYgbm8gdGV4dHVyZUlkIGlzIHJlY3ljbGVk
LCBhIG5ldworICAgICAgICAgICAgLy8gb25lIGlzIG5vdCBhbGxvY2F0ZWQgdW50aWwgYmluZFRl
eHR1cmUgb3IgZnJhbWVidWZmZXJUZXh0dXJlMkQgaXMgY2FsbGVkLgogICAgICAgICB9CiAgICAg
fQogCkBAIC04NSw2ICs4OSw3IEBAIHZvaWQgTWFuYWdlZFRleHR1cmU6OmJpbmRUZXh0dXJlKEdy
YXBoaWMKICAgICBBU1NFUlQobV90ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVyZShtX3Rva2VuKSk7
CiAgICAgaWYgKCFtX3RleHR1cmVJZCkKICAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVN
YW5hZ2VyLT5hbGxvY2F0ZVRleHR1cmUoYWxsb2NhdG9yLCBtX3Rva2VuKTsKKyAgICBtX3JlYWR5
ID0gdHJ1ZTsKICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90ZXh0dXJlSWQpOwogfQogCkBAIC05Myw2ICs5OCw3IEBAIHZvaWQgTWFuYWdl
ZFRleHR1cmU6OmZyYW1lYnVmZmVyVGV4dHVyZTIKICAgICBBU1NFUlQobV90ZXh0dXJlTWFuYWdl
ci0+aGFzVGV4dHVyZShtX3Rva2VuKSk7CiAgICAgaWYgKCFtX3RleHR1cmVJZCkKICAgICAgICAg
bV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0ZVRleHR1cmUoYWxsb2NhdG9y
LCBtX3Rva2VuKTsKKyAgICBtX3JlYWR5ID0gdHJ1ZTsKICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZl
clRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
dGV4dHVyZUlkLCAwKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCShyZXZpc2lvbiAx
MDEzOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5h
Z2VkVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBAIHByaXZhdGU6CiAg
ICAgSW50U2l6ZSBtX3NpemU7CiAgICAgdW5zaWduZWQgbV9mb3JtYXQ7CiAgICAgdW5zaWduZWQg
bV90ZXh0dXJlSWQ7CisgICAgYm9vbCBtX3JlYWR5OwogfTsKIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTAxMzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw4ICs2MCw5IEBAIHNpemVfdCBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMoY28K
IH0KIAogCi1UZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0
Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKK1RleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFuYWdl
cihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX21lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRl
cykKKyAgICAsIG1fcmVjbGFpbUxpbWl0Qnl0ZXMocmVjbGFpbUxpbWl0Qnl0ZXMpCiAgICAgLCBt
X21lbW9yeVVzZUJ5dGVzKDApCiAgICAgLCBtX21heFRleHR1cmVTaXplKG1heFRleHR1cmVTaXpl
KQogICAgICwgbV9uZXh0VG9rZW4oMSkKQEAgLTc1LDYgKzc2LDEyIEBAIHZvaWQgVGV4dHVyZU1h
bmFnZXI6OnNldE1lbW9yeUxpbWl0Qnl0ZXMKICAgICBtX21lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1v
cnlMaW1pdEJ5dGVzOwogfQogCit2b2lkIFRleHR1cmVNYW5hZ2VyOjpzZXRSZWNsYWltTGltaXRC
eXRlcyhzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMpCit7CisgICAgcmVkdWNlTWVtb3J5VG9MaW1p
dChyZWNsYWltTGltaXRCeXRlcyk7CisgICAgbV9yZWNsYWltTGltaXRCeXRlcyA9IHJlY2xhaW1M
aW1pdEJ5dGVzOworfQorCiBUZXh0dXJlVG9rZW4gVGV4dHVyZU1hbmFnZXI6OmdldFRva2VuKCkK
IHsKICAgICByZXR1cm4gbV9uZXh0VG9rZW4rKzsKQEAgLTE0NCw2ICsxNTEsMjggQEAgdm9pZCBU
ZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5VG9MaW1pdAogICAgIH0KIH0KIAordW5zaWduZWQg
VGV4dHVyZU1hbmFnZXI6OnJlcGxhY2VUZXh0dXJlKFRleHR1cmVUb2tlbiBuZXdUb2tlbiwgVGV4
dHVyZUluZm8gbmV3SW5mbykKK3sKKyAgICBmb3IgKExpc3RIYXNoU2V0PFRleHR1cmVUb2tlbj46
Oml0ZXJhdG9yIGxydUl0ID0gbV90ZXh0dXJlTFJVU2V0LmJlZ2luKCk7IGxydUl0ICE9IG1fdGV4
dHVyZUxSVVNldC5lbmQoKTsgKytscnVJdCkgeworICAgICAgICBUZXh0dXJlVG9rZW4gdG9rZW4g
PSAqbHJ1SXQ7CisgICAgICAgIFRleHR1cmVJbmZvIGluZm8gPSBtX3RleHR1cmVzLmdldCh0b2tl
bik7CisgICAgICAgIGlmIChpbmZvLmlzUHJvdGVjdGVkKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChuZXdJbmZvLnNpemUgIT0gaW5mby5zaXplIHx8IG5ld0luZm8uZm9ybWF0
ICE9IGluZm8uZm9ybWF0KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG5ld0luZm8u
dGV4dHVyZUlkID0gaW5mby50ZXh0dXJlSWQ7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBuZXdJ
bmZvLmFsbG9jYXRvciA9IGluZm8uYWxsb2NhdG9yOworI2VuZGlmCisgICAgICAgIG1fdGV4dHVy
ZXMucmVtb3ZlKHRva2VuKTsKKyAgICAgICAgbV90ZXh0dXJlTFJVU2V0LnJlbW92ZSh0b2tlbik7
CisgICAgICAgIG1fdGV4dHVyZXMuc2V0KG5ld1Rva2VuLCBuZXdJbmZvKTsKKyAgICAgICAgbV90
ZXh0dXJlTFJVU2V0LmFkZChuZXdUb2tlbik7CisgICAgICAgIHJldHVybiBpbmZvLnRleHR1cmVJ
ZDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OmFkZFRl
eHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZvKQogewogICAgIEFTU0VS
VCghbV90ZXh0dXJlTFJVU2V0LmNvbnRhaW5zKHRva2VuKSk7CkBAIC0yMDgsOCArMjM3LDEwIEBA
IHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUKICAgICByZXR1cm4gdGV4
dHVyZUlkOwogfQogCi1ib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0dXJl
VG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZm9ybWF0KQorYm9vbCBUZXh0dXJl
TWFuYWdlcjo6cmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUs
IHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQmIHRleHR1cmVJZCkKIHsKKyAgICB0ZXh0dXJlSWQg
PSAwOworCiAgICAgaWYgKHNpemUud2lkdGgoKSA+IG1fbWF4VGV4dHVyZVNpemUgfHwgc2l6ZS5o
ZWlnaHQoKSA+IG1fbWF4VGV4dHVyZVNpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MjM1LDYgKzI2NiwxMyBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0
CiAjaWZuZGVmIE5ERUJVRwogICAgIGluZm8uYWxsb2NhdG9yID0gMDsKICNlbmRpZgorICAgIC8v
IEF2b2lkIGNodXJuaW5nIGJ5IHJldXNpbmcgdGhlIHRleHR1cmUgaWYgaXQgaXMgYWJvdXQgdG8g
YmUgcmVjbGFpbWVkIGFuZAorICAgIC8vIGl0IGhhcyB0aGUgc2FtZSBzaXplIGFuZCBmb3JtYXQg
YXMgdGhlIHJlcXVlc3RpbmcgdGV4dHVyZS4KKyAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1l
bW9yeVJlcXVpcmVkQnl0ZXMgPiBtX3JlY2xhaW1MaW1pdEJ5dGVzKSB7CisgICAgICAgIHRleHR1
cmVJZCA9IHJlcGxhY2VUZXh0dXJlKHRva2VuLCBpbmZvKTsKKyAgICAgICAgaWYgKHRleHR1cmVJ
ZCA+IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgYWRkVGV4dHVyZSh0
b2tlbiwgaW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2Vy
LmgJKHJldmlzaW9uIDEwMTM5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDkg
QEAgcHJvdGVjdGVkOgogY2xhc3MgVGV4dHVyZU1hbmFnZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFRleHR1cmVNYW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxU
ZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4
dHVyZVNpemUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+IGNyZWF0ZShz
aXplX3QgbWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzLCBpbnQgbWF4
VGV4dHVyZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVN
YW5hZ2VyKG1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgVGV4dHVyZU1hbmFnZXIobWVtb3J5TGltaXRCeXRlcywgcmVjbGFpbUxp
bWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CiAgICAgfQogCiAgICAgLy8gQWJzb2x1dGUgbWF4
aW11bSBsaW1pdCBmb3IgdGV4dHVyZSBhbGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KQEAg
LTY0LDEyICs2NCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHNpemVfdCBtZW1vcnlVc2VCeXRl
cyhjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKIAogICAgIHZvaWQgc2V0TWVtb3J5
TGltaXRCeXRlcyhzaXplX3QpOworICAgIHZvaWQgc2V0UmVjbGFpbUxpbWl0Qnl0ZXMoc2l6ZV90
KTsKIAogICAgIFRleHR1cmVUb2tlbiBnZXRUb2tlbigpOwogICAgIHZvaWQgcmVsZWFzZVRva2Vu
KFRleHR1cmVUb2tlbik7CiAgICAgYm9vbCBoYXNUZXh0dXJlKFRleHR1cmVUb2tlbik7CiAKLSAg
ICBib29sIHJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiwgSW50U2l6ZSwgR0MzRGVudW0gdGV4
dHVyZUZvcm1hdCk7CisgICAgYm9vbCByZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4sIEludFNp
emUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQsIHVuc2lnbmVkJiB0ZXh0dXJlSWQpOwogCiAgICAg
dm9pZCBwcm90ZWN0VGV4dHVyZShUZXh0dXJlVG9rZW4pOwogICAgIHZvaWQgdW5wcm90ZWN0VGV4
dHVyZShUZXh0dXJlVG9rZW4pOwpAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90
IGN1cnJlbnRNZW1vcnlVc2VCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5VXNlQnl0ZXM7
IH0KIAogcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRl
cywgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5
TGltaXRCeXRlcywgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUp
OwogCiAgICAgc3RydWN0IFRleHR1cmVJbmZvIHsKICAgICAgICAgSW50U2l6ZSBzaXplOwpAQCAt
OTksMTIgKzEwMCwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRUZXh0dXJlKFRleHR1cmVU
b2tlbiwgVGV4dHVyZUluZm8pOwogICAgIHZvaWQgcmVtb3ZlVGV4dHVyZShUZXh0dXJlVG9rZW4s
IFRleHR1cmVJbmZvKTsKKyAgICB1bnNpZ25lZCByZXBsYWNlVGV4dHVyZShUZXh0dXJlVG9rZW4s
IFRleHR1cmVJbmZvKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxUZXh0dXJlVG9rZW4sIFRleHR1
cmVJbmZvPiBUZXh0dXJlTWFwOwogICAgIFRleHR1cmVNYXAgbV90ZXh0dXJlczsKICAgICBMaXN0
SGFzaFNldDxUZXh0dXJlVG9rZW4+IG1fdGV4dHVyZUxSVVNldDsKIAogICAgIHNpemVfdCBtX21l
bW9yeUxpbWl0Qnl0ZXM7CisgICAgc2l6ZV90IG1fcmVjbGFpbUxpbWl0Qnl0ZXM7CiAgICAgc2l6
ZV90IG1fbWVtb3J5VXNlQnl0ZXM7CiAgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CiAgICAgVGV4
dHVyZVRva2VuIG1fbmV4dFRva2VuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCShyZXZpc2lvbiAxMDEzOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICBtX3NldHRp
bmdzLmFjY2VsZXJhdGVQYWludGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAgICAgbV9zZXR0aW5ncy5kaXNjYXJkQWxs
VGV4dHVyZXMgPSBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdGcm9u
dEJ1ZmZlckNhY2hlZDsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fcHJveHkt
PmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250
ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdl
cjo6aGlnaExpbWl0Qnl0ZXMoKSwgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCks
IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMDEzOTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTExLTI5ICBHcmFjZSBLbG9iYSAgPGtsb2Jh
Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWN5Y2xlIHRpbGUtc2l6ZWQg
dGV4dHVyZXMgZHVyaW5nIGNvbW1pdCB0byBwcmV2ZW50IHJlYWxsb2NhdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjQ1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVy
Q2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKFdURjo6VEVTVCk6CisKIDIwMTEtMTEtMjkgIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNwbGl0IFByZWZlcmVuY2VzIGludG8gUHJlZmVyZW5jZXMgYW5kIENhcGFiaWxpdGllcy4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcAkocmV2aXNpb24gMTAxMzkzKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAKIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcHVzaERpcnR5VGlsZXMpCiB7Ci0gICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOworICAg
IE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CiAgICAgUmVmUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwg
PSBhZG9wdFJlZihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117287</attachid>
            <date>2011-11-30 15:45:37 -0800</date>
            <delta_ts>2011-12-01 17:46:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70645-20111130154536.patch</filename>
            <type>text/plain</type>
            <size>18859</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjAzZTI1ZDUxMzFjYTc4
YjBhNjA4NThlYmMyY2U3ZTNmYWE2NDEwYS4uNTk4Y2Y1Yjc3YmE3ZjBiZTQyYjM4NzZiNjQ2YjZm
Y2JiZTQzYjgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDExLTExLTMwICBHcmFj
ZSBLbG9iYSAgPGtsb2JhZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWN5
Y2xlIHRpbGUtc2l6ZWQgdGV4dHVyZXMgZHVyaW5nIGNvbW1pdCB0byBwcmV2ZW50IHJlYWxsb2Nh
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcw
NjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Vy
cmVudGx5IHRleHR1cmUgcmVxdWVzdCBpcyBjYXBwZWQgYnkgdGhlIGhpZ2ggbGltaXQgd2hpbGUg
d2UgcmVjbGFpbSB0aGUKKyAgICAgICAgdGV4dHVyZXMgaW4gZWFjaCBjb21taXQuIFRoaXMgdHJp
Z2dlcnMgbmV3IHRpbGVzIGFsd2F5cyBhbGxvY2F0ZWQgd2hlbiBzY3JvbGxpbmcuCisgICAgICAg
IFRoZSBwcm9wb3NhbCBpcyB0byByZWN5Y2xlIHRoZSB0ZXh0dXJlIGR1cmluZyByZXF1ZXN0IGlm
IHRoZSB0b3RhbCB1c2VkIG1lbW9yeQorICAgICAgICBpcyBhYm91dCB0byBleGNlZWQgdGhlIHJl
Y2xhaW0gbGltaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFu
YWdlZFRleHR1cmU6Ok1hbmFnZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRU
ZXh0dXJlOjpyZXNlcnZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpiaW5k
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6ZnJhbWVidWZmZXJU
ZXh0dXJlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRU
ZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6Y29udGVudHNWYWxp
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRSZWNsYWltTGltaXRCeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVwbGFjZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdhYmxlVGlsZTo6RHJhd2FibGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdhYmxlVGlsZTo6Y29udGVudHNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3YWJs
ZVRpbGU6OnNldENvbnRlbnRzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVy
SW1wbDo6c3luY1RleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBs
OjpkcmF3VGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuaDoKKwogMjAxMS0xMS0zMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBmZUltYWdlIHJlZmVyZW5jaW5nIGEgcHJpbWl0aXZl
IGRyYXdzIGluY29ycmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA0MDU5ZmI1
N2U4ZmZmZWI1Nzc5NjQxYzkxOGNjMmUyMzBlZmIyOTYuLjU5MmNjZjkwY2Q5OWQ4NWE2YjQxOWU1
N2U5ZjBlMmJkYzc0YzRmMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTEtMTEtMzAgIEdyYWNlIEtsb2JhICA8a2xvYmFnQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIFJlY3ljbGUgdGlsZS1zaXplZCB0ZXh0dXJlcyBkdXJpbmcgY29t
bWl0IHRvIHByZXZlbnQgcmVhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgor
ICAgICAgICAoV1RGOjpURVNUKToKKwogMjAxMS0xMS0zMCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZ2V0IHJpZCBvZiBkZWZl
cnJlZCBiYWNrZW5kLT5mcm9udC1lbmQgY29tbWFuZHMgcHJvY2Vzc2luZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDA3NzhlNWRmZmYxOTg4MDExZWYyZjZjMGZj
NjJlYmJiZTc4MjY1ZWQuLmE1ZjA1Y2YwZWVmN2Q2ZWZlODVmYTIxNTU2Njk5NDE0OWVkMDEyZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNjY5LDcgKzY2OSw3
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
CiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAg
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRl
eHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJl
U2l6ZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBUZXh0dXJlTWFuYWdl
cjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwog
ICAgIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9y
OjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxs
b2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgp
KTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcAppbmRleCA1YmJmZjZh
NDNlNWIwMzhiM2JmMzMyN2ZiZDNkMWU1MTQzYjdmMWRlLi4yNDE1Y2JlMjhjZmNiNjcyMzk1NzU2
OGY1NTQzYTA0YmZjYTExNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCkBAIC0zOCw2ICsz
OCw3IEBAIE1hbmFnZWRUZXh0dXJlOjpNYW5hZ2VkVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFu
YWdlcikKICAgICAsIG1fdG9rZW4oMCkKICAgICAsIG1fZm9ybWF0KDApCiAgICAgLCBtX3RleHR1
cmVJZCgwKQorICAgICwgbV9jb250ZW50c1ZhbGlkKGZhbHNlKQogewogfQogCkBAIC02MiwxMCAr
NjMsMTMgQEAgYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZShjb25zdCBJbnRTaXplJiBzaXpl
LCB1bnNpZ25lZCBmb3JtYXQpCiAgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnByb3RlY3RUZXh0
dXJlKG1fdG9rZW4pOwogICAgIGVsc2UgewogICAgICAgICBtX3RleHR1cmVJZCA9IDA7Ci0gICAg
ICAgIHJlc2VydmVkID0gbV90ZXh0dXJlTWFuYWdlci0+cmVxdWVzdFRleHR1cmUobV90b2tlbiwg
c2l6ZSwgZm9ybWF0KTsKKyAgICAgICAgcmVzZXJ2ZWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1
ZXN0VGV4dHVyZShtX3Rva2VuLCBzaXplLCBmb3JtYXQsIG1fdGV4dHVyZUlkKTsKICAgICAgICAg
aWYgKHJlc2VydmVkKSB7CiAgICAgICAgICAgICBtX3NpemUgPSBzaXplOwogICAgICAgICAgICAg
bV9mb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgICAgICAvLyByZXF1ZXN0VGV4dHVyZSgpIG1heSBy
ZWN5Y2xlIGEgdGV4dHVyZUlkLiBCdXQgbV9jb250ZW50c1ZhbGlkIGlzIG5vdCBzZXQgdG8gdHJ1
ZQorICAgICAgICAgICAgLy8gdW50aWwgYmluZFRleHR1cmUgb3IgZnJhbWVidWZmZXJUZXh0dXJl
MkQgaXMgY2FsbGVkLiBJZiBubyB0ZXh0dXJlSWQgaXMgcmVjeWNsZWQsCisgICAgICAgICAgICAv
LyBhIG5ldyBvbmUgd2lsbCBiZSBhbGxvY2F0ZWQgd2hlbiBiaW5kVGV4dHVyZSBvciBmcmFtZWJ1
ZmZlclRleHR1cmUyRCBpcyBjYWxsZWQuCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg1LDYgKzg5
LDcgQEAgdm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGEKICAgICBBU1NFUlQobV90ZXh0dXJlTWFuYWdl
ci0+aGFzVGV4dHVyZShtX3Rva2VuKSk7CiAgICAgaWYgKCFtX3RleHR1cmVJZCkKICAgICAgICAg
bV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0ZVRleHR1cmUoYWxsb2NhdG9y
LCBtX3Rva2VuKTsKKyAgICBtX2NvbnRlbnRzVmFsaWQgPSBtX3RleHR1cmVJZCA+IDA7CiAgICAg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4
dHVyZUlkKTsKIH0KIApAQCAtOTMsNiArOTgsNyBAQCB2b2lkIE1hbmFnZWRUZXh0dXJlOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbAog
ICAgIEFTU0VSVChtX3RleHR1cmVNYW5hZ2VyLT5oYXNUZXh0dXJlKG1fdG9rZW4pKTsKICAgICBp
ZiAoIW1fdGV4dHVyZUlkKQogICAgICAgICBtX3RleHR1cmVJZCA9IG1fdGV4dHVyZU1hbmFnZXIt
PmFsbG9jYXRlVGV4dHVyZShhbGxvY2F0b3IsIG1fdG9rZW4pOworICAgIG1fY29udGVudHNWYWxp
ZCA9IG1fdGV4dHVyZUlkID4gMDsKICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkLCAw
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTWFuYWdlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKaW5kZXggNGQ0MzgwOTU5NTM0MGY1ZDczM2Q1Njc5
MjkxYTkyMDY0YzdiMWFlNS4uMGI3Y2QxMGNiMjU3MmVkNDQzZTcwOWU0OTNjYjY5YjI0NWFhMDBh
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TWFuYWdlZFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXIpOwogICAgICAgICByZXR1cm4gbV90ZXh0dXJlTWFu
YWdlci0+aXNQcm90ZWN0ZWQobV90b2tlbik7CiAgICAgfQorICAgIGJvb2wgY29udGVudHNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNWYWxpZDsgfQogCiAgICAgdm9pZCBiaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB2b2lkIGZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciop
OwpAQCAtNzAsNiArNzEsNyBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9zaXplOwogICAgIHVu
c2lnbmVkIG1fZm9ybWF0OwogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgIGJvb2wgbV9j
b250ZW50c1ZhbGlkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IGM2MDBk
OWU2NDkxZDdkMWU3NTcyMjIxNGUzMTlkYTdmMGMxODg0Y2UuLjY3NjVjYWJiZWQ4M2Y5ZTg0ZmRm
ZGEzOGFjZjlhNjVmZjk4NGY4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTYwLDgg
KzYwLDkgQEAgc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhjb25zdCBJbnRT
aXplJiBzaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWEKIH0KIAogCi1UZXh0dXJlTWFuYWdlcjo6
VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6
ZSkKK1RleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRl
cywgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAgOiBt
X21lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRlcykKKyAgICAsIG1fcmVjbGFpbUxpbWl0
Qnl0ZXMocmVjbGFpbUxpbWl0Qnl0ZXMpCiAgICAgLCBtX21lbW9yeVVzZUJ5dGVzKDApCiAgICAg
LCBtX21heFRleHR1cmVTaXplKG1heFRleHR1cmVTaXplKQogICAgICwgbV9uZXh0VG9rZW4oMSkK
QEAgLTc1LDYgKzc2LDEyIEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnNldE1lbW9yeUxpbWl0Qnl0
ZXMoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMpCiAgICAgbV9tZW1vcnlMaW1pdEJ5dGVzID0gbWVt
b3J5TGltaXRCeXRlczsKIH0KIAordm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0UmVjbGFpbUxpbWl0
Qnl0ZXMoc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzKQoreworICAgIHJlZHVjZU1lbW9yeVRvTGlt
aXQocmVjbGFpbUxpbWl0Qnl0ZXMpOworICAgIG1fcmVjbGFpbUxpbWl0Qnl0ZXMgPSByZWNsYWlt
TGltaXRCeXRlczsKK30KKwogVGV4dHVyZVRva2VuIFRleHR1cmVNYW5hZ2VyOjpnZXRUb2tlbigp
CiB7CiAgICAgcmV0dXJuIG1fbmV4dFRva2VuKys7CkBAIC0xNDQsNiArMTUxLDI4IEBAIHZvaWQg
VGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeVRvTGltaXQoc2l6ZV90IGxpbWl0KQogICAgIH0K
IH0KIAordW5zaWduZWQgVGV4dHVyZU1hbmFnZXI6OnJlcGxhY2VUZXh0dXJlKFRleHR1cmVUb2tl
biBuZXdUb2tlbiwgVGV4dHVyZUluZm8gbmV3SW5mbykKK3sKKyAgICBmb3IgKExpc3RIYXNoU2V0
PFRleHR1cmVUb2tlbj46Oml0ZXJhdG9yIGxydUl0ID0gbV90ZXh0dXJlTFJVU2V0LmJlZ2luKCk7
IGxydUl0ICE9IG1fdGV4dHVyZUxSVVNldC5lbmQoKTsgKytscnVJdCkgeworICAgICAgICBUZXh0
dXJlVG9rZW4gdG9rZW4gPSAqbHJ1SXQ7CisgICAgICAgIFRleHR1cmVJbmZvIGluZm8gPSBtX3Rl
eHR1cmVzLmdldCh0b2tlbik7CisgICAgICAgIGlmIChpbmZvLmlzUHJvdGVjdGVkKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChuZXdJbmZvLnNpemUgIT0gaW5mby5zaXplIHx8
IG5ld0luZm8uZm9ybWF0ICE9IGluZm8uZm9ybWF0KQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIG5ld0luZm8udGV4dHVyZUlkID0gaW5mby50ZXh0dXJlSWQ7CisjaWZuZGVmIE5ERUJV
RworICAgICAgICBuZXdJbmZvLmFsbG9jYXRvciA9IGluZm8uYWxsb2NhdG9yOworI2VuZGlmCisg
ICAgICAgIG1fdGV4dHVyZXMucmVtb3ZlKHRva2VuKTsKKyAgICAgICAgbV90ZXh0dXJlTFJVU2V0
LnJlbW92ZSh0b2tlbik7CisgICAgICAgIG1fdGV4dHVyZXMuc2V0KG5ld1Rva2VuLCBuZXdJbmZv
KTsKKyAgICAgICAgbV90ZXh0dXJlTFJVU2V0LmFkZChuZXdUb2tlbik7CisgICAgICAgIHJldHVy
biBpbmZvLnRleHR1cmVJZDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgVGV4dHVy
ZU1hbmFnZXI6OmFkZFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZv
KQogewogICAgIEFTU0VSVCghbV90ZXh0dXJlTFJVU2V0LmNvbnRhaW5zKHRva2VuKSk7CkBAIC0y
MDgsOCArMjM3LDEwIEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUo
VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlVG9rCiAgICAgcmV0dXJuIHRleHR1
cmVJZDsKIH0KIAotYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUoVGV4dHVyZVRv
a2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKK2Jvb2wgVGV4dHVyZU1h
bmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkJiB0ZXh0dXJlSWQpCiB7CisgICAgdGV4dHVyZUlkID0g
MDsKKwogICAgIGlmIChzaXplLndpZHRoKCkgPiBtX21heFRleHR1cmVTaXplIHx8IHNpemUuaGVp
Z2h0KCkgPiBtX21heFRleHR1cmVTaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIz
NSw2ICsyNjYsMTMgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUoVGV4dHVy
ZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKICNpZm5kZWYgTkRFQlVHCiAg
ICAgaW5mby5hbGxvY2F0b3IgPSAwOwogI2VuZGlmCisgICAgLy8gQXZvaWQgY2h1cm5pbmcgYnkg
cmV1c2luZyB0aGUgdGV4dHVyZSBpZiBpdCBpcyBhYm91dCB0byBiZSByZWNsYWltZWQgYW5kCisg
ICAgLy8gaXQgaGFzIHRoZSBzYW1lIHNpemUgYW5kIGZvcm1hdCBhcyB0aGUgcmVxdWVzdGluZyB0
ZXh0dXJlLgorICAgIGlmIChtX21lbW9yeVVzZUJ5dGVzICsgbWVtb3J5UmVxdWlyZWRCeXRlcyA+
IG1fcmVjbGFpbUxpbWl0Qnl0ZXMpIHsKKyAgICAgICAgdGV4dHVyZUlkID0gcmVwbGFjZVRleHR1
cmUodG9rZW4sIGluZm8pOworICAgICAgICBpZiAodGV4dHVyZUlkID4gMCkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KICAgICBhZGRUZXh0dXJlKHRva2VuLCBpbmZvKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCmluZGV4IGYzMjdiNGNmY2QxYjEwZGFl
N2RhZDYzNDYwNGY2NzM5YjUyMGYyMDguLmEwYTQ0YTU4YTk3NDA0M2UyYTA3ZDc1MDFjODg4NWNm
NjFjM2M3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaApAQCAtNDksOSArNDksOSBAQCBwcm90ZWN0
ZWQ6CiBjbGFzcyBUZXh0dXJlTWFuYWdlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4
dHVyZU1hbmFnZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYW5h
Z2VyPiBjcmVhdGUoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkK
KyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBtZW1v
cnlMaW1pdEJ5dGVzLCBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hbmFnZXIobWVt
b3J5TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBUZXh0dXJlTWFuYWdlcihtZW1vcnlMaW1pdEJ5dGVzLCByZWNsYWltTGltaXRCeXRlcywg
bWF4VGV4dHVyZVNpemUpKTsKICAgICB9CiAKICAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0
IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgpAQCAtNjQsMTIgKzY0
LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IG1lbW9yeVVzZUJ5dGVzKGNvbnN0IElu
dFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOwogCiAgICAgdm9pZCBzZXRNZW1vcnlMaW1pdEJ5dGVz
KHNpemVfdCk7CisgICAgdm9pZCBzZXRSZWNsYWltTGltaXRCeXRlcyhzaXplX3QpOwogCiAgICAg
VGV4dHVyZVRva2VuIGdldFRva2VuKCk7CiAgICAgdm9pZCByZWxlYXNlVG9rZW4oVGV4dHVyZVRv
a2VuKTsKICAgICBib29sIGhhc1RleHR1cmUoVGV4dHVyZVRva2VuKTsKIAotICAgIGJvb2wgcmVx
dWVzdFRleHR1cmUoVGV4dHVyZVRva2VuLCBJbnRTaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0
KTsKKyAgICBib29sIHJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiwgSW50U2l6ZSwgR0MzRGVu
dW0gdGV4dHVyZUZvcm1hdCwgdW5zaWduZWQmIHRleHR1cmVJZCk7CiAKICAgICB2b2lkIHByb3Rl
Y3RUZXh0dXJlKFRleHR1cmVUb2tlbik7CiAgICAgdm9pZCB1bnByb3RlY3RUZXh0dXJlKFRleHR1
cmVUb2tlbik7CkBAIC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgY3VycmVudE1l
bW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2VCeXRlczsgfQogCiBwcml2
YXRlOgotICAgIFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4
VGV4dHVyZVNpemUpOworICAgIFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVz
LCBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBz
dHJ1Y3QgVGV4dHVyZUluZm8gewogICAgICAgICBJbnRTaXplIHNpemU7CkBAIC05OSwxMiArMTAw
LDE0IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkZFRleHR1cmUoVGV4dHVyZVRva2VuLCBUZXh0
dXJlSW5mbyk7CiAgICAgdm9pZCByZW1vdmVUZXh0dXJlKFRleHR1cmVUb2tlbiwgVGV4dHVyZUlu
Zm8pOworICAgIHVuc2lnbmVkIHJlcGxhY2VUZXh0dXJlKFRleHR1cmVUb2tlbiwgVGV4dHVyZUlu
Zm8pOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFRleHR1cmVUb2tlbiwgVGV4dHVyZUluZm8+IFRl
eHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtX3RleHR1cmVzOwogICAgIExpc3RIYXNoU2V0PFRl
eHR1cmVUb2tlbj4gbV90ZXh0dXJlTFJVU2V0OwogCiAgICAgc2l6ZV90IG1fbWVtb3J5TGltaXRC
eXRlczsKKyAgICBzaXplX3QgbV9yZWNsYWltTGltaXRCeXRlczsKICAgICBzaXplX3QgbV9tZW1v
cnlVc2VCeXRlczsKICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBUZXh0dXJlVG9rZW4g
bV9uZXh0VG9rZW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBmZmFkMmY1
YjE3NWM5NjY1ZDY2NTc1YmFmY2MzOWJmY2VlMGUxZTZhLi5jMGUxYjc2ZTIwMDg5NGEwZjNlYjhl
YWZiNDkyMDUyMDczYjIzMDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTI2MCw3ICsyNjAsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNU
byhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIGlmICh0aWxlLT5pc0RpcnR5KCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICB0aWxlZExheWVyLT5zeW5jVGV4dHVyZUlkKGks
IGosIHRpbGUtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgICAgICB0aWxlZExheWVyLT5z
eW5jVGV4dHVyZUlkKGksIGosIHRpbGUtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCksIHRpbGUtPnRl
eHR1cmUoKS0+Y29udGVudHNWYWxpZCgpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCmluZGV4IGFiZGYxNjJkMDNhMDlmYjJkMjA5MmFlOTQ5YWVlOTA1Y2E3ZWFl
ZDQuLjEwZGYwY2E4Zjg1NWI3YzExZmM2OTAxMTRhOWM4MmNkMjEzYTc1MDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtODQsNyArODQsNyBAQCBib29sIENDTGF5ZXJUcmVl
SG9zdDo6aW5pdGlhbGl6ZSgpCiAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBt
X3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdBY2NlbGVyYXRlZFBhaW50
aW5nOwogICAgIG1fc2V0dGluZ3MuZGlzY2FyZEFsbFRleHR1cmVzID0gbV9wcm94eS0+bGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nRnJvbnRCdWZmZXJDYWNoZWQ7CiAKLSAgICBtX2Nv
bnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5h
Z2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
KCkubWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIFRleHR1
cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
MTYsNyArMTE2LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0
VG8iLCB0aGlzLCAwKTsKIAotICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVt
b3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CisgICAgY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLT5zZXRSZWNsYWltTGltaXRCeXRlcyhUZXh0dXJlTWFuYWdl
cjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CiAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5k
ZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCA1MTFkODVmN2Fl
NDE4YTA3M2VjZThlOTJmZTIwZjRhNTgxZGM4ZjgyLi41ZTRjNDQwYzBjN2VhN2IxNDdmZTQ2NDcw
NDJjZTE0ZjdlMTY2MjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAt
NDIsMTIgKzQyLDE1IEBAIGNsYXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgRHJhd2FibGVUaWxl
IDogcHVibGljIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEcmF3YWJsZVRpbGUpOwogcHVibGljOgotICAgIERyYXdhYmxlVGlsZSgpIDogbV90ZXh0
dXJlSWQoMCkgeyB9CisgICAgRHJhd2FibGVUaWxlKCkgOiBtX3RleHR1cmVJZCgwKSwgbV9jb250
ZW50c1ZhbGlkKGZhbHNlKSB7IH0KIAogICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KICAgICB2b2lkIHNldFRleHR1cmVJZChQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkgeyBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsgfQorICAg
IGJvb2wgY29udGVudHNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNWYWxpZDsgfQor
ICAgIHZvaWQgc2V0Q29udGVudHNWYWxpZChib29sIHZhbGlkKSB7IG1fY29udGVudHNWYWxpZCA9
IHZhbGlkOyB9CiBwcml2YXRlOgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV90ZXh0dXJlSWQ7Cisg
ICAgYm9vbCBtX2NvbnRlbnRzVmFsaWQ7CiB9OwogCiBDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1RpbGVk
TGF5ZXJJbXBsKGludCBpZCkKQEAgLTE4OCwxMiArMTkxLDEzIEBAIHZvaWQgQ0NUaWxlZExheWVy
SW1wbDo6c2V0VGlsaW5nRGF0YShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgdGlsZXIpCiAgICAg
Km1fdGlsZXIgPSB0aWxlcjsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5jVGV4dHVy
ZUlkKGludCBpLCBpbnQgaiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpCit2b2lkIENDVGls
ZWRMYXllckltcGw6OnN5bmNUZXh0dXJlSWQoaW50IGksIGludCBqLCBQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmVJZCwgYm9vbCBjb250ZW50c1ZhbGlkKQogewogICAgIERyYXdhYmxlVGlsZSogdGls
ZSA9IHRpbGVBdChpLCBqKTsKICAgICBpZiAoIXRpbGUpCiAgICAgICAgIHRpbGUgPSBjcmVhdGVU
aWxlKGksIGopOwogICAgIHRpbGUtPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQpOworICAgIHRpbGUt
PnNldENvbnRlbnRzVmFsaWQoY29udGVudHNWYWxpZCk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBU
PgpAQCAtMzQyLDcgKzM0Niw3IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50CiAKICAgICAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVy
dGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKIAot
ICAgICAgICAgICAgaWYgKHRpbGUgJiYgdGlsZS0+dGV4dHVyZUlkKCkpIHsKKyAgICAgICAgICAg
IGlmICh0aWxlICYmIHRpbGUtPmNvbnRlbnRzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgIGNv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0aWxlLT50
ZXh0dXJlSWQoKSk7CiAgICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikpOwogICAgICAgICAgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCAxMDAzZGJjYjU2NjY4OGM1MmNkNDIxYWIwMWZk
MWI2MmYxM2E3NzBhLi44ZjYxN2MyMWViYjllNWU4Y2VmNmMzYjQxOTVkZGIzZGIwZTRmOWE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFRleHR1cmVPcmllbnRhdGlvbihMYXllclRleHR1cmVVcGRhdGVyOjpPcmll
bnRhdGlvbiB0ZXh0dXJlT3JpZW50YXRpb24pIHsgbV90ZXh0dXJlT3JpZW50YXRpb24gPSB0ZXh0
dXJlT3JpZW50YXRpb247IH0KICAgICB2b2lkIHNldFNhbXBsZWRUZXhlbEZvcm1hdChMYXllclRl
eHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KSB7IG1f
c2FtcGxlZFRleGVsRm9ybWF0ID0gc2FtcGxlZFRleGVsRm9ybWF0OyB9CiAgICAgdm9pZCBzZXRU
aWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcik7Ci0gICAgdm9pZCBzeW5j
VGV4dHVyZUlkKGludCwgaW50LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCk7CisgICAgdm9p
ZCBzeW5jVGV4dHVyZUlkKGludCwgaW50LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgYm9v
bCBjb250ZW50c1ZhbGlkKTsKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGE+IFByb2dyYW07CiAgICAgLy8gU2hh
ZGVyIHByb2dyYW0gdGhhdCBzd2FwcyByZWQgYW5kIGJsdWUgY29tcG9uZW50cyBvZiB0ZXh0dXJl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hy
b21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNo
cm9taXVtVGVzdC5jcHAKaW5kZXggMjgzZWFjZTVhZGI3ZGJlZmEwYWU2NTAzNTNmMGUwY2Y0OGJm
MGQ2Ny4uYTg0MDAwYWNiMDY0YzM0NWE5MmZhNDgwMjE2NjZkNTYxZTFkZWNiZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKIAogVEVTVChUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKIHsKLSAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAy
NCk7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBSZWZQdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbCA9IGFkb3B0UmVmKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117533</attachid>
            <date>2011-12-01 17:46:31 -0800</date>
            <delta_ts>2011-12-01 19:03:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70645-20111201174630.patch</filename>
            <type>text/plain</type>
            <size>15594</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk4ZmFlNDQ4M2I4NjUx
YmI1ZTlhMTc4ZWU0MmMxNjc0ODZkNWRhMS4uZTUzYjQ4NTAzMzJlYjk2NzYzYjViY2FlZDZlYzM4
OGJmMzBlMmVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTAxICBHcmFj
ZSBLbG9iYSAgPGtsb2JhZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWN5
Y2xlIHRpbGUtc2l6ZWQgdGV4dHVyZXMgZHVyaW5nIGNvbW1pdCB0byBwcmV2ZW50IHJlYWxsb2Nh
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcw
NjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Vy
cmVudGx5IHRleHR1cmUgcmVxdWVzdCBpcyBjYXBwZWQgYnkgdGhlIGhpZ2ggbGltaXQgd2hpbGUg
d2UgcmVjbGFpbSB0aGUKKyAgICAgICAgdGV4dHVyZXMgaW4gZWFjaCBjb21taXQuIFRoaXMgdHJp
Z2dlcnMgbmV3IHRpbGVzIGFsd2F5cyBhbGxvY2F0ZWQgd2hlbiBzY3JvbGxpbmcuCisgICAgICAg
IFRoZSBwcm9wb3NhbCBpcyB0byByZWN5Y2xlIHRoZSB0ZXh0dXJlIGR1cmluZyByZXF1ZXN0IGlm
IHRoZSB0b3RhbCB1c2VkIG1lbW9yeQorICAgICAgICBpcyBhYm91dCB0byBleGNlZWQgdGhlIHJl
Y2xhaW0gbGltaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFu
YWdlZFRleHR1cmU6Ok1hbmFnZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRU
ZXh0dXJlOjpyZXNlcnZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpiaW5k
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6ZnJhbWVidWZmZXJU
ZXh0dXJlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRU
ZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6Y29udGVudHNWYWxp
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRNZW1vcnlMaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRSZWNsYWltTGltaXRCeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVwbGFjZVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKToKKwogMjAxMS0xMi0wMSAg
S2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVwbGFjZSBh
IGN1c3RvbSBjb25zdHJ1Y3RvciBvZiB3aW5kb3cuT3B0aW9uIHdpdGggdGhlIFtOYW1lZENvbnN0
cnVjdG9yXSBJREwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZmZhZjBhMjZiZWE4MGRh
Nzk4NGQ0M2I5NjBkODlmYmIxMjE5YWYwMy4uYjg2N2I5NmI5ZjZkMjM5YTUxNWViMjNhYjBhYjhk
MzUzNzMwNGVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMS0xMi0wMSAgR3JhY2UgS2xvYmEgIDxrbG9iYWdAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gUmVjeWNsZSB0aWxlLXNpemVkIHRleHR1cmVzIGR1cmluZyBjb21taXQgdG8g
cHJldmVudCByZWFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MDY0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAg
IChXVEY6OlRFU1QpOgorCiAyMDExLTEyLTAxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gYWRkIHJlZmVycmVyIHBvbGljeSB0byBX
ZWJDb250ZXh0TWVudURhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDZmNzMzZmQ4MmRhOTRmZmNmMDI4MTUyMTNlZGY2OTcwYmQxMTczZTUuLmM1ZDcxNjZkMGM4
YjczMmFiYTE0YjM5NmE0NDk1OWQyMTU0NmM1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcApAQCAtNjY5LDcgKzY2OSw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFn
ZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRl
cygpLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9yZW5kZXJTdXJmYWNl
VGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpo
aWdoTGltaXRCeXRlcygpLCBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSwgbV9j
YXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwogICAgIG1fY29udGVudHNUZXh0dXJlQWxsb2Nh
dG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsK
ICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRU
ZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01h
bmFnZWRUZXh0dXJlLmNwcAppbmRleCA1YmJmZjZhNDNlNWIwMzhiM2JmMzMyN2ZiZDNkMWU1MTQz
YjdmMWRlLi4wNTNjYmFhYTAyODRhYmZhMzcxNDNlYTc0YTY0OGIzNDAwZDBkNDA0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4
dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TWFuYWdlZFRleHR1cmUuY3BwCkBAIC0zOCw2ICszOCw3IEBAIE1hbmFnZWRUZXh0dXJlOjpNYW5h
Z2VkVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKICAgICAsIG1fdG9rZW4oMCkKICAg
ICAsIG1fZm9ybWF0KDApCiAgICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV9jb250ZW50c1Zh
bGlkKGZhbHNlKQogewogfQogCkBAIC02MiwxMCArNjMsMTMgQEAgYm9vbCBNYW5hZ2VkVGV4dHVy
ZTo6cmVzZXJ2ZShjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmb3JtYXQpCiAgICAgICAg
IG1fdGV4dHVyZU1hbmFnZXItPnByb3RlY3RUZXh0dXJlKG1fdG9rZW4pOwogICAgIGVsc2Ugewog
ICAgICAgICBtX3RleHR1cmVJZCA9IDA7Ci0gICAgICAgIHJlc2VydmVkID0gbV90ZXh0dXJlTWFu
YWdlci0+cmVxdWVzdFRleHR1cmUobV90b2tlbiwgc2l6ZSwgZm9ybWF0KTsKKyAgICAgICAgcmVz
ZXJ2ZWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0VGV4dHVyZShtX3Rva2VuLCBzaXplLCBm
b3JtYXQsIG1fdGV4dHVyZUlkKTsKICAgICAgICAgaWYgKHJlc2VydmVkKSB7CiAgICAgICAgICAg
ICBtX3NpemUgPSBzaXplOwogICAgICAgICAgICAgbV9mb3JtYXQgPSBmb3JtYXQ7CisgICAgICAg
ICAgICAvLyByZXF1ZXN0VGV4dHVyZSgpIG1heSByZWN5Y2xlIGEgdGV4dHVyZUlkLiBCdXQgbV9j
b250ZW50c1ZhbGlkIGlzIG5vdCBzZXQgdG8gdHJ1ZQorICAgICAgICAgICAgLy8gdW50aWwgYmlu
ZFRleHR1cmUgb3IgZnJhbWVidWZmZXJUZXh0dXJlMkQgaXMgY2FsbGVkLiBJZiBubyB0ZXh0dXJl
SWQgaXMgcmVjeWNsZWQsCisgICAgICAgICAgICAvLyBhIG5ldyBvbmUgd2lsbCBiZSBhbGxvY2F0
ZWQgd2hlbiBiaW5kVGV4dHVyZSBvciBmcmFtZWJ1ZmZlclRleHR1cmUyRCBpcyBjYWxsZWQuCiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTg1LDYgKzg5LDcgQEAgdm9pZCBNYW5hZ2VkVGV4dHVyZTo6
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3Iq
IGEKICAgICBBU1NFUlQobV90ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVyZShtX3Rva2VuKSk7CiAg
ICAgaWYgKCFtX3RleHR1cmVJZCkKICAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5h
Z2VyLT5hbGxvY2F0ZVRleHR1cmUoYWxsb2NhdG9yLCBtX3Rva2VuKTsKKyAgICBtX2NvbnRlbnRz
VmFsaWQgPSB0cnVlOwogICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CiB9CiAKQEAgLTkzLDYgKzk4LDcgQEAgdm9pZCBN
YW5hZ2VkVGV4dHVyZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVBbGwKICAgICBBU1NFUlQobV90ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVy
ZShtX3Rva2VuKSk7CiAgICAgaWYgKCFtX3RleHR1cmVJZCkKICAgICAgICAgbV90ZXh0dXJlSWQg
PSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0ZVRleHR1cmUoYWxsb2NhdG9yLCBtX3Rva2VuKTsK
KyAgICBtX2NvbnRlbnRzVmFsaWQgPSB0cnVlOwogICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0
dXJlSWQsIDApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAppbmRleCA0ZDQzODA5NTk1MzQwZjVk
NzMzZDU2NzkyOTFhOTIwNjRjN2IxYWU1Li4wYjdjZDEwY2IyNTcyZWQ0NDNlNzA5ZTQ5M2NiNjli
MjQ1YWEwMGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQobV90ZXh0dXJlTWFuYWdlcik7CiAgICAgICAgIHJldHVybiBtX3Rl
eHR1cmVNYW5hZ2VyLT5pc1Byb3RlY3RlZChtX3Rva2VuKTsKICAgICB9CisgICAgYm9vbCBjb250
ZW50c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1ZhbGlkOyB9CiAKICAgICB2b2lk
IGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOwogICAg
IHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxs
b2NhdG9yKik7CkBAIC03MCw2ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX3NpemU7
CiAgICAgdW5zaWduZWQgbV9mb3JtYXQ7CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CisgICAg
Ym9vbCBtX2NvbnRlbnRzVmFsaWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5k
ZXggYWViNjg2Njk2MWI5YmE0NGQ3NzUyYzVkNGIzOWNjMTYwN2E3YjgyMS4uOTcxMGZmODA3MGM2
NWIxYWQwNzE1YmM2MDRiOTIwY2JlZmQ5YzdmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApA
QCAtNjAsOCArNjAsOSBAQCBzaXplX3QgVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKGNv
bnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYQogfQogCiAKLVRleHR1cmVN
YW5hZ2VyOjpUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRl
eHR1cmVTaXplKQorVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlM
aW1pdEJ5dGVzLCBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkK
ICAgICA6IG1fbWVtb3J5TGltaXRCeXRlcyhtZW1vcnlMaW1pdEJ5dGVzKQorICAgICwgbV9yZWNs
YWltTGltaXRCeXRlcyhyZWNsYWltTGltaXRCeXRlcykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMo
MCkKICAgICAsIG1fbWF4VGV4dHVyZVNpemUobWF4VGV4dHVyZVNpemUpCiAgICAgLCBtX25leHRU
b2tlbigxKQpAQCAtNzEsMTAgKzcyLDE2IEBAIFRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFuYWdl
cihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQogdm9pZCBUZXh0
dXJlTWFuYWdlcjo6c2V0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykK
IHsKICAgICByZWR1Y2VNZW1vcnlUb0xpbWl0KG1lbW9yeUxpbWl0Qnl0ZXMpOwotICAgIEFTU0VS
VChjdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSA8IG1lbW9yeUxpbWl0Qnl0ZXMpOworICAgIEFTU0VS
VChjdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSA8PSBtZW1vcnlMaW1pdEJ5dGVzKTsKICAgICBtX21l
bW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOwogfQogCit2b2lkIFRleHR1cmVNYW5h
Z2VyOjpzZXRSZWNsYWltTGltaXRCeXRlcyhzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMpCit7Cisg
ICAgcmVkdWNlTWVtb3J5VG9MaW1pdChyZWNsYWltTGltaXRCeXRlcyk7CisgICAgbV9yZWNsYWlt
TGltaXRCeXRlcyA9IHJlY2xhaW1MaW1pdEJ5dGVzOworfQorCiBUZXh0dXJlVG9rZW4gVGV4dHVy
ZU1hbmFnZXI6OmdldFRva2VuKCkKIHsKICAgICByZXR1cm4gbV9uZXh0VG9rZW4rKzsKQEAgLTE0
MSw2ICsxNDgsMzAgQEAgdm9pZCBUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5VG9MaW1pdChz
aXplX3QgbGltaXQpCiAgICAgfQogfQogCit1bnNpZ25lZCBUZXh0dXJlTWFuYWdlcjo6cmVwbGFj
ZVRleHR1cmUoVGV4dHVyZVRva2VuIG5ld1Rva2VuLCBUZXh0dXJlSW5mbyBuZXdJbmZvKQorewor
ICAgIGZvciAoTGlzdEhhc2hTZXQ8VGV4dHVyZVRva2VuPjo6aXRlcmF0b3IgbHJ1SXQgPSBtX3Rl
eHR1cmVMUlVTZXQuYmVnaW4oKTsgbHJ1SXQgIT0gbV90ZXh0dXJlTFJVU2V0LmVuZCgpOyArK2xy
dUl0KSB7CisgICAgICAgIFRleHR1cmVUb2tlbiB0b2tlbiA9ICpscnVJdDsKKyAgICAgICAgVGV4
dHVyZUluZm8gaW5mbyA9IG1fdGV4dHVyZXMuZ2V0KHRva2VuKTsKKyAgICAgICAgaWYgKGluZm8u
aXNQcm90ZWN0ZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFpbmZvLnRl
eHR1cmVJZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobmV3SW5mby5zaXpl
ICE9IGluZm8uc2l6ZSB8fCBuZXdJbmZvLmZvcm1hdCAhPSBpbmZvLmZvcm1hdCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBuZXdJbmZvLnRleHR1cmVJZCA9IGluZm8udGV4dHVyZUlk
OworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbmV3SW5mby5hbGxvY2F0b3IgPSBpbmZvLmFsbG9j
YXRvcjsKKyNlbmRpZgorICAgICAgICBtX3RleHR1cmVzLnJlbW92ZSh0b2tlbik7CisgICAgICAg
IG1fdGV4dHVyZUxSVVNldC5yZW1vdmUodG9rZW4pOworICAgICAgICBtX3RleHR1cmVzLnNldChu
ZXdUb2tlbiwgbmV3SW5mbyk7CisgICAgICAgIG1fdGV4dHVyZUxSVVNldC5hZGQobmV3VG9rZW4p
OworICAgICAgICByZXR1cm4gaW5mby50ZXh0dXJlSWQ7CisgICAgfQorICAgIHJldHVybiAwOwor
fQorCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjphZGRUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwg
VGV4dHVyZUluZm8gaW5mbykKIHsKICAgICBBU1NFUlQoIW1fdGV4dHVyZUxSVVNldC5jb250YWlu
cyh0b2tlbikpOwpAQCAtMjA1LDggKzIzNiwxMCBAQCB1bnNpZ25lZCBUZXh0dXJlTWFuYWdlcjo6
YWxsb2NhdGVUZXh0dXJlKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZVRvawog
ICAgIHJldHVybiB0ZXh0dXJlSWQ7CiB9CiAKLWJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RU
ZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmb3JtYXQp
Citib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4s
IEludFNpemUgc2l6ZSwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCYgdGV4dHVyZUlkKQogewor
ICAgIHRleHR1cmVJZCA9IDA7CisKICAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV9tYXhUZXh0dXJl
U2l6ZSB8fCBzaXplLmhlaWdodCgpID4gbV9tYXhUZXh0dXJlU2l6ZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0yMzIsNiArMjY1LDEzIEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVl
c3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAj
aWZuZGVmIE5ERUJVRwogICAgIGluZm8uYWxsb2NhdG9yID0gMDsKICNlbmRpZgorICAgIC8vIEF2
b2lkIGNodXJuaW5nIGJ5IHJldXNpbmcgdGhlIHRleHR1cmUgaWYgaXQgaXMgYWJvdXQgdG8gYmUg
cmVjbGFpbWVkIGFuZAorICAgIC8vIGl0IGhhcyB0aGUgc2FtZSBzaXplIGFuZCBmb3JtYXQgYXMg
dGhlIHJlcXVlc3RpbmcgdGV4dHVyZS4KKyAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9y
eVJlcXVpcmVkQnl0ZXMgPiBtX3JlY2xhaW1MaW1pdEJ5dGVzKSB7CisgICAgICAgIHRleHR1cmVJ
ZCA9IHJlcGxhY2VUZXh0dXJlKHRva2VuLCBpbmZvKTsKKyAgICAgICAgaWYgKHRleHR1cmVJZCA+
IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgYWRkVGV4dHVyZSh0b2tl
biwgaW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAppbmRleCBm
MzI3YjRjZmNkMWIxMGRhZTdkYWQ2MzQ2MDRmNjczOWI1MjBmMjA4Li5hMGE0NGE1OGE5NzQwNDNl
MmEwN2Q3NTAxYzg4ODVjZjYxYzNjN2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKQEAgLTQ5LDkg
KzQ5LDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgVGV4dHVyZU1hbmFnZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFRleHR1cmVNYW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+IGNy
ZWF0ZShzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzLCBp
bnQgbWF4VGV4dHVyZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRl
eHR1cmVNYW5hZ2VyKG1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hbmFnZXIobWVtb3J5TGltaXRCeXRlcywgcmVj
bGFpbUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CiAgICAgfQogCiAgICAgLy8gQWJzb2x1
dGUgbWF4aW11bSBsaW1pdCBmb3IgdGV4dHVyZSBhbGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5j
ZS4KQEAgLTY0LDEyICs2NCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHNpemVfdCBtZW1vcnlV
c2VCeXRlcyhjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKIAogICAgIHZvaWQgc2V0
TWVtb3J5TGltaXRCeXRlcyhzaXplX3QpOworICAgIHZvaWQgc2V0UmVjbGFpbUxpbWl0Qnl0ZXMo
c2l6ZV90KTsKIAogICAgIFRleHR1cmVUb2tlbiBnZXRUb2tlbigpOwogICAgIHZvaWQgcmVsZWFz
ZVRva2VuKFRleHR1cmVUb2tlbik7CiAgICAgYm9vbCBoYXNUZXh0dXJlKFRleHR1cmVUb2tlbik7
CiAKLSAgICBib29sIHJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiwgSW50U2l6ZSwgR0MzRGVu
dW0gdGV4dHVyZUZvcm1hdCk7CisgICAgYm9vbCByZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4s
IEludFNpemUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQsIHVuc2lnbmVkJiB0ZXh0dXJlSWQpOwog
CiAgICAgdm9pZCBwcm90ZWN0VGV4dHVyZShUZXh0dXJlVG9rZW4pOwogICAgIHZvaWQgdW5wcm90
ZWN0VGV4dHVyZShUZXh0dXJlVG9rZW4pOwpAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6CiAgICAg
c2l6ZV90IGN1cnJlbnRNZW1vcnlVc2VCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5VXNl
Qnl0ZXM7IH0KIAogcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGlt
aXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBUZXh0dXJlTWFuYWdlcihzaXplX3Qg
bWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVy
ZVNpemUpOwogCiAgICAgc3RydWN0IFRleHR1cmVJbmZvIHsKICAgICAgICAgSW50U2l6ZSBzaXpl
OwpAQCAtOTksMTIgKzEwMCwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRUZXh0dXJlKFRl
eHR1cmVUb2tlbiwgVGV4dHVyZUluZm8pOwogICAgIHZvaWQgcmVtb3ZlVGV4dHVyZShUZXh0dXJl
VG9rZW4sIFRleHR1cmVJbmZvKTsKKyAgICB1bnNpZ25lZCByZXBsYWNlVGV4dHVyZShUZXh0dXJl
VG9rZW4sIFRleHR1cmVJbmZvKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxUZXh0dXJlVG9rZW4s
IFRleHR1cmVJbmZvPiBUZXh0dXJlTWFwOwogICAgIFRleHR1cmVNYXAgbV90ZXh0dXJlczsKICAg
ICBMaXN0SGFzaFNldDxUZXh0dXJlVG9rZW4+IG1fdGV4dHVyZUxSVVNldDsKIAogICAgIHNpemVf
dCBtX21lbW9yeUxpbWl0Qnl0ZXM7CisgICAgc2l6ZV90IG1fcmVjbGFpbUxpbWl0Qnl0ZXM7CiAg
ICAgc2l6ZV90IG1fbWVtb3J5VXNlQnl0ZXM7CiAgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CiAg
ICAgVGV4dHVyZVRva2VuIG1fbmV4dFRva2VuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggOTY4ZDllM2U0YWNlNjUwMTBjODNkZGM5ZDg4NGNjYmE5MWIwMjVlMS4uZTIzZThl
NzYwYzBlYjNiYTI5NWFlYWQ4NTFiZTYyM2MzNjYwMWNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCkBAIC0yNTYsNiArMjU2LDggQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgICAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQo
KSk7CiAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVy
LT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQogICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+Y29udGVudHNWYWxpZCgpKQorICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICh0aWxlLT5pc0RpcnR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMTQ1
YTc5OTgwMjdkMDVmZWQyODU4ZTU4ODdmNGI0OWU2OTdiODQyZS4uZjRlZDhkMDIyM2E5ODdkZjgz
OTA5OWQzYjc2YmQxNDM5ZGUyYmY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICAg
ICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAgICAgbV9zZXR0aW5ncy5k
aXNjYXJkQWxsVGV4dHVyZXMgPSBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
dXNpbmdGcm9udEJ1ZmZlckNhY2hlZDsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9
IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCks
IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7Cisg
ICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0
dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1p
dEJ5dGVzKCksIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJl
U2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCogaG9zdEltcGwpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOwogCi0gICAg
Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5h
Z2VyOjpyZWNsYWltTGltaXRCeXRlcygpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkt
PnNldFJlY2xhaW1MaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
KTsKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyho
b3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApp
bmRleCBhOTE4ZjdkNTdmNGI4ODU1NGZlNmM5NzdhMjgyMmRiZDI1YWRhYmM4Li5jNGRkNTQzNWE1
MzlkY2E5MWY1ZTU1ZjNiZjZjNWZjOTcwOTAyNjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTExNCw3
ICsxMTQsNyBAQCBwcml2YXRlOgogCiBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hE
aXJ0eVRpbGVzKQogewotICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKKyAgICBPd25QdHI8
VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0
KjEwMjQqMTAyNCwgMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwogICAgIFJlZlB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsID0gYWRvcHRS
ZWYobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117541</attachid>
            <date>2011-12-01 19:03:04 -0800</date>
            <delta_ts>2011-12-02 10:07:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70645-20111201190303.patch</filename>
            <type>text/plain</type>
            <size>9147</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk4ZmFlNDQ4M2I4NjUx
YmI1ZTlhMTc4ZWU0MmMxNjc0ODZkNWRhMS4uNDAzMzljMTYzN2ZiZjJiZjQyMjQ4MGM3M2QzZmVi
YjJkMzM5MmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTAxICBHcmFj
ZSBLbG9iYSAgPGtsb2JhZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWN5
Y2xlIHRpbGUtc2l6ZWQgdGV4dHVyZXMgZHVyaW5nIGNvbW1pdCB0byBwcmV2ZW50IHJlYWxsb2Nh
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcw
NjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Vy
cmVudGx5IHRleHR1cmUgcmVxdWVzdCBpcyBjYXBwZWQgYnkgdGhlIGhpZ2ggbGltaXQgd2hpbGUg
d2UgcmVjbGFpbSB0aGUKKyAgICAgICAgdGV4dHVyZXMgaW4gZWFjaCBjb21taXQuIFRoaXMgdHJp
Z2dlcnMgbmV3IHRpbGVzIGFsd2F5cyBhbGxvY2F0ZWQgd2hlbiBzY3JvbGxpbmcuCisgICAgICAg
IFRoZSBwcm9wb3NhbCBpcyB0byByZWN5Y2xlIHRoZSB0ZXh0dXJlIGR1cmluZyByZXF1ZXN0IGlm
IHRoZSB0b3RhbCB1c2VkIG1lbW9yeQorICAgICAgICBpcyBhYm91dCB0byBleGNlZWQgdGhlIHJl
Y2xhaW0gbGltaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5h
Z2VkVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6TWFuYWdl
ZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6OnJlc2VydmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6OmJpbmRUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpjb250ZW50c1ZhbGlkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFuYWdlcjo6c2V0TWVtb3J5TGltaXRCeXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVwbGFjZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorCiAyMDExLTEyLTAxICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXBsYWNlIGEgY3Vz
dG9tIGNvbnN0cnVjdG9yIG9mIHdpbmRvdy5PcHRpb24gd2l0aCB0aGUgW05hbWVkQ29uc3RydWN0
b3JdIElETApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTWFuYWdlZFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCmluZGV4IDViYmZmNmE0M2U1YjAzOGIzYmYz
MzI3ZmJkM2QxZTUxNDNiN2YxZGUuLjA1M2NiYWFhMDI4NGFiZmEzNzE0M2VhNzRhNjQ4YjM0MDBk
MGQ0MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL01hbmFnZWRUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAgTWFuYWdl
ZFRleHR1cmU6Ok1hbmFnZWRUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQogICAgICwg
bV90b2tlbigwKQogICAgICwgbV9mb3JtYXQoMCkKICAgICAsIG1fdGV4dHVyZUlkKDApCisgICAg
LCBtX2NvbnRlbnRzVmFsaWQoZmFsc2UpCiB7CiB9CiAKQEAgLTYyLDEwICs2MywxMyBAQCBib29s
IE1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlKGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZv
cm1hdCkKICAgICAgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJvdGVjdFRleHR1cmUobV90b2tlbik7
CiAgICAgZWxzZSB7CiAgICAgICAgIG1fdGV4dHVyZUlkID0gMDsKLSAgICAgICAgcmVzZXJ2ZWQg
PSBtX3RleHR1cmVNYW5hZ2VyLT5yZXF1ZXN0VGV4dHVyZShtX3Rva2VuLCBzaXplLCBmb3JtYXQp
OworICAgICAgICByZXNlcnZlZCA9IG1fdGV4dHVyZU1hbmFnZXItPnJlcXVlc3RUZXh0dXJlKG1f
dG9rZW4sIHNpemUsIGZvcm1hdCwgbV90ZXh0dXJlSWQpOwogICAgICAgICBpZiAocmVzZXJ2ZWQp
IHsKICAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX2Zvcm1hdCA9IGZv
cm1hdDsKKyAgICAgICAgICAgIC8vIHJlcXVlc3RUZXh0dXJlKCkgbWF5IHJlY3ljbGUgYSB0ZXh0
dXJlSWQuIEJ1dCBtX2NvbnRlbnRzVmFsaWQgaXMgbm90IHNldCB0byB0cnVlCisgICAgICAgICAg
ICAvLyB1bnRpbCBiaW5kVGV4dHVyZSBvciBmcmFtZWJ1ZmZlclRleHR1cmUyRCBpcyBjYWxsZWQu
IElmIG5vIHRleHR1cmVJZCBpcyByZWN5Y2xlZCwKKyAgICAgICAgICAgIC8vIGEgbmV3IG9uZSB3
aWxsIGJlIGFsbG9jYXRlZCB3aGVuIGJpbmRUZXh0dXJlIG9yIGZyYW1lYnVmZmVyVGV4dHVyZTJE
IGlzIGNhbGxlZC4KICAgICAgICAgfQogICAgIH0KIApAQCAtODUsNiArODksNyBAQCB2b2lkIE1h
bmFnZWRUZXh0dXJlOjpiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4
dHVyZUFsbG9jYXRvciogYQogICAgIEFTU0VSVChtX3RleHR1cmVNYW5hZ2VyLT5oYXNUZXh0dXJl
KG1fdG9rZW4pKTsKICAgICBpZiAoIW1fdGV4dHVyZUlkKQogICAgICAgICBtX3RleHR1cmVJZCA9
IG1fdGV4dHVyZU1hbmFnZXItPmFsbG9jYXRlVGV4dHVyZShhbGxvY2F0b3IsIG1fdG9rZW4pOwor
ICAgIG1fY29udGVudHNWYWxpZCA9IHRydWU7CiAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKIH0KIApAQCAtOTMsNiAr
OTgsNyBAQCB2b2lkIE1hbmFnZWRUZXh0dXJlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbAogICAgIEFTU0VSVChtX3RleHR1cmVNYW5h
Z2VyLT5oYXNUZXh0dXJlKG1fdG9rZW4pKTsKICAgICBpZiAoIW1fdGV4dHVyZUlkKQogICAgICAg
ICBtX3RleHR1cmVJZCA9IG1fdGV4dHVyZU1hbmFnZXItPmFsbG9jYXRlVGV4dHVyZShhbGxvY2F0
b3IsIG1fdG9rZW4pOworICAgIG1fY29udGVudHNWYWxpZCA9IHRydWU7CiAgICAgY29udGV4dC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX3RleHR1cmVJZCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCmluZGV4IDRk
NDM4MDk1OTUzNDBmNWQ3MzNkNTY3OTI5MWE5MjA2NGM3YjFhZTUuLjBiN2NkMTBjYjI1NzJlZDQ0
M2U3MDllNDkzY2I2OWIyNDVhYTAwYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaApAQCAtNTQsNiAr
NTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX3RleHR1cmVNYW5hZ2VyKTsKICAgICAg
ICAgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXItPmlzUHJvdGVjdGVkKG1fdG9rZW4pOwogICAgIH0K
KyAgICBib29sIGNvbnRlbnRzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzVmFsaWQ7
IH0KIAogICAgIHZvaWQgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxs
b2NhdG9yKik7CiAgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQz
RCosIFRleHR1cmVBbGxvY2F0b3IqKTsKQEAgLTcwLDYgKzcxLDcgQEAgcHJpdmF0ZToKICAgICBJ
bnRTaXplIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2Zvcm1hdDsKICAgICB1bnNpZ25lZCBtX3Rl
eHR1cmVJZDsKKyAgICBib29sIG1fY29udGVudHNWYWxpZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVN
YW5hZ2VyLmNwcAppbmRleCBhZWI2ODY2OTYxYjliYTQ0ZDc3NTJjNWQ0YjM5Y2MxNjA3YTdiODIx
Li4zNzk1YmU0M2M1ZDZkZDUxZGQzM2I1MWMxNWZmOWE2NTE4MjlkN2E3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVy
ZU1hbmFnZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIFRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFu
YWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQogdm9pZCBU
ZXh0dXJlTWFuYWdlcjo6c2V0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRl
cykKIHsKICAgICByZWR1Y2VNZW1vcnlUb0xpbWl0KG1lbW9yeUxpbWl0Qnl0ZXMpOwotICAgIEFT
U0VSVChjdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSA8IG1lbW9yeUxpbWl0Qnl0ZXMpOworICAgIEFT
U0VSVChjdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSA8PSBtZW1vcnlMaW1pdEJ5dGVzKTsKICAgICBt
X21lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOwogfQogCkBAIC0xNDEsNiArMTQx
LDMwIEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeVRvTGltaXQoc2l6ZV90IGxp
bWl0KQogICAgIH0KIH0KIAordW5zaWduZWQgVGV4dHVyZU1hbmFnZXI6OnJlcGxhY2VUZXh0dXJl
KFRleHR1cmVUb2tlbiBuZXdUb2tlbiwgVGV4dHVyZUluZm8gbmV3SW5mbykKK3sKKyAgICBmb3Ig
KExpc3RIYXNoU2V0PFRleHR1cmVUb2tlbj46Oml0ZXJhdG9yIGxydUl0ID0gbV90ZXh0dXJlTFJV
U2V0LmJlZ2luKCk7IGxydUl0ICE9IG1fdGV4dHVyZUxSVVNldC5lbmQoKTsgKytscnVJdCkgewor
ICAgICAgICBUZXh0dXJlVG9rZW4gdG9rZW4gPSAqbHJ1SXQ7CisgICAgICAgIFRleHR1cmVJbmZv
IGluZm8gPSBtX3RleHR1cmVzLmdldCh0b2tlbik7CisgICAgICAgIGlmIChpbmZvLmlzUHJvdGVj
dGVkKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghaW5mby50ZXh0dXJlSWQp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG5ld0luZm8uc2l6ZSAhPSBpbmZv
LnNpemUgfHwgbmV3SW5mby5mb3JtYXQgIT0gaW5mby5mb3JtYXQpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgbmV3SW5mby50ZXh0dXJlSWQgPSBpbmZvLnRleHR1cmVJZDsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgIG5ld0luZm8uYWxsb2NhdG9yID0gaW5mby5hbGxvY2F0b3I7Cisj
ZW5kaWYKKyAgICAgICAgbV90ZXh0dXJlcy5yZW1vdmUodG9rZW4pOworICAgICAgICBtX3RleHR1
cmVMUlVTZXQucmVtb3ZlKHRva2VuKTsKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQobmV3VG9rZW4s
IG5ld0luZm8pOworICAgICAgICBtX3RleHR1cmVMUlVTZXQuYWRkKG5ld1Rva2VuKTsKKyAgICAg
ICAgcmV0dXJuIGluZm8udGV4dHVyZUlkOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9p
ZCBUZXh0dXJlTWFuYWdlcjo6YWRkVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIFRleHR1cmVJ
bmZvIGluZm8pCiB7CiAgICAgQVNTRVJUKCFtX3RleHR1cmVMUlVTZXQuY29udGFpbnModG9rZW4p
KTsKQEAgLTIwNSw4ICsyMjksMTAgQEAgdW5zaWduZWQgVGV4dHVyZU1hbmFnZXI6OmFsbG9jYXRl
VGV4dHVyZShUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFRleHR1cmVUb2sKICAgICByZXR1
cm4gdGV4dHVyZUlkOwogfQogCi1ib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShU
ZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZm9ybWF0KQorYm9vbCBU
ZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXpl
IHNpemUsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQmIHRleHR1cmVJZCkKIHsKKyAgICB0ZXh0
dXJlSWQgPSAwOworCiAgICAgaWYgKHNpemUud2lkdGgoKSA+IG1fbWF4VGV4dHVyZVNpemUgfHwg
c2l6ZS5oZWlnaHQoKSA+IG1fbWF4VGV4dHVyZVNpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMjMyLDYgKzI1OCwxMyBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVy
ZShUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogI2lmbmRlZiBO
REVCVUcKICAgICBpbmZvLmFsbG9jYXRvciA9IDA7CiAjZW5kaWYKKyAgICAvLyBBdm9pZCBjaHVy
bmluZyBieSByZXVzaW5nIHRoZSB0ZXh0dXJlIGlmIGl0IGlzIGFib3V0IHRvIGJlIHJlY2xhaW1l
ZCBhbmQKKyAgICAvLyBpdCBoYXMgdGhlIHNhbWUgc2l6ZSBhbmQgZm9ybWF0IGFzIHRoZSByZXF1
ZXN0aW5nIHRleHR1cmUuCisgICAgaWYgKG1fbWVtb3J5VXNlQnl0ZXMgKyBtZW1vcnlSZXF1aXJl
ZEJ5dGVzID4gcmVjbGFpbUxpbWl0Qnl0ZXMoKSkgeworICAgICAgICB0ZXh0dXJlSWQgPSByZXBs
YWNlVGV4dHVyZSh0b2tlbiwgaW5mbyk7CisgICAgICAgIGlmICh0ZXh0dXJlSWQpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgYWRkVGV4dHVyZSh0b2tlbiwgaW5mbyk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAppbmRleCBmMzI3YjRjZmNkMWIx
MGRhZTdkYWQ2MzQ2MDRmNjczOWI1MjBmMjA4Li5iMTkxZjdiNjhiYWIyMWJkOWM0MDEyN2QyYTBm
ZDNmYzE4NGE3YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKQEAgLTY5LDcgKzY5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVsZWFzZVRva2VuKFRleHR1cmVUb2tlbik7CiAgICAgYm9vbCBoYXNU
ZXh0dXJlKFRleHR1cmVUb2tlbik7CiAKLSAgICBib29sIHJlcXVlc3RUZXh0dXJlKFRleHR1cmVU
b2tlbiwgSW50U2l6ZSwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CisgICAgYm9vbCByZXF1ZXN0
VGV4dHVyZShUZXh0dXJlVG9rZW4sIEludFNpemUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQsIHVu
c2lnbmVkJiB0ZXh0dXJlSWQpOwogCiAgICAgdm9pZCBwcm90ZWN0VGV4dHVyZShUZXh0dXJlVG9r
ZW4pOwogICAgIHZvaWQgdW5wcm90ZWN0VGV4dHVyZShUZXh0dXJlVG9rZW4pOwpAQCAtOTksNiAr
OTksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRUZXh0dXJlKFRleHR1cmVUb2tlbiwgVGV4
dHVyZUluZm8pOwogICAgIHZvaWQgcmVtb3ZlVGV4dHVyZShUZXh0dXJlVG9rZW4sIFRleHR1cmVJ
bmZvKTsKKyAgICB1bnNpZ25lZCByZXBsYWNlVGV4dHVyZShUZXh0dXJlVG9rZW4sIFRleHR1cmVJ
bmZvKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxUZXh0dXJlVG9rZW4sIFRleHR1cmVJbmZvPiBU
ZXh0dXJlTWFwOwogICAgIFRleHR1cmVNYXAgbV90ZXh0dXJlczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCmluZGV4IDk2OGQ5ZTNlNGFjZTY1MDEwYzgzZGRjOWQ4ODRjY2JhOTFiMDI1
ZTEuLmUyM2U4ZTc2MGMwZWIzYmEyOTVhZWFkODUxYmU2MjNjMzY2MDFjZGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMjU2LDYgKzI1Niw4IEBAIHZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5z
ZWNvbmQuZ2V0KCkpOwogICAgICAgICBpZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmlzVmFs
aWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoIXRpbGUtPm1hbmFnZWRUZXh0dXJlKCktPmNvbnRlbnRzVmFs
aWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAodGlsZS0+aXNEaXJ0eSgp
KQogICAgICAgICAgICAgY29udGludWU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117644</attachid>
            <date>2011-12-02 10:07:17 -0800</date>
            <delta_ts>2011-12-02 14:30:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70645-20111202100716.patch</filename>
            <type>text/plain</type>
            <size>5843</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxODE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjMTI4OTE4MjFhM2Y2
ZjQ2MzViYjViZWUyNzU3NmUxODNmYTJjYy4uZGNlYmJjYWZlM2I1OWUzNGJmODMzM2JjOTAwOWQ2
ZjI4ODAyMDQwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDExLTEyLTAyICBHcmFj
ZSBLbG9iYSAgPGtsb2JhZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWN5
Y2xlIHRpbGUtc2l6ZWQgdGV4dHVyZXMgZHVyaW5nIGNvbW1pdCB0byBwcmV2ZW50IHJlYWxsb2Nh
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcw
NjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Vy
cmVudGx5IHRleHR1cmUgcmVxdWVzdCBpcyBjYXBwZWQgYnkgdGhlIGhpZ2ggbGltaXQgd2hpbGUg
d2UgcmVjbGFpbSB0aGUKKyAgICAgICAgdGV4dHVyZXMgaW4gZWFjaCBjb21taXQuIFRoaXMgdHJp
Z2dlcnMgbmV3IHRpbGVzIGFsd2F5cyBhbGxvY2F0ZWQgd2hlbiBzY3JvbGxpbmcuCisgICAgICAg
IFRoZSBwcm9wb3NhbCBpcyB0byByZWN5Y2xlIHRoZSB0ZXh0dXJlIGR1cmluZyByZXF1ZXN0IGlm
IHRoZSB0b3RhbCB1c2VkIG1lbW9yeQorICAgICAgICBpcyBhYm91dCB0byBleGNlZWQgdGhlIHJl
Y2xhaW0gbGltaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5h
Z2VkVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnNldE1lbW9yeUxpbWl0Qnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlcGxhY2VUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaDoKKwogMjAx
MS0xMi0wMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwMTgwNS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJl
LmNwcAppbmRleCA1YmJmZjZhNDNlNWIwMzhiM2JmMzMyN2ZiZDNkMWU1MTQzYjdmMWRlLi5jYmRm
ZTAzYzJjNTQ0M2JjZWFmNDNjYTZhZjAyYTczYzU3MWQwMzMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1
cmUuY3BwCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgTWFuYWdlZFRleHR1cmU6OnJlc2VydmUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZm9ybWF0KQogICAgICAgICBtX3RleHR1cmVNYW5h
Z2VyLT5wcm90ZWN0VGV4dHVyZShtX3Rva2VuKTsKICAgICBlbHNlIHsKICAgICAgICAgbV90ZXh0
dXJlSWQgPSAwOwotICAgICAgICByZXNlcnZlZCA9IG1fdGV4dHVyZU1hbmFnZXItPnJlcXVlc3RU
ZXh0dXJlKG1fdG9rZW4sIHNpemUsIGZvcm1hdCk7CisgICAgICAgIHJlc2VydmVkID0gbV90ZXh0
dXJlTWFuYWdlci0+cmVxdWVzdFRleHR1cmUobV90b2tlbiwgc2l6ZSwgZm9ybWF0LCBtX3RleHR1
cmVJZCk7CiAgICAgICAgIGlmIChyZXNlcnZlZCkgewogICAgICAgICAgICAgbV9zaXplID0gc2l6
ZTsKICAgICAgICAgICAgIG1fZm9ybWF0ID0gZm9ybWF0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3Bw
CmluZGV4IGFlYjY4NjY5NjFiOWJhNDRkNzc1MmM1ZDRiMzljYzE2MDdhN2I4MjEuLjM3OTViZTQz
YzVkNmRkNTFkZDMzYjUxYzE1ZmY5YTY1MTgyOWQ3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5j
cHAKQEAgLTcxLDcgKzcxLDcgQEAgVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVf
dCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB2b2lkIFRleHR1cmVNYW5h
Z2VyOjpzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQogewogICAg
IHJlZHVjZU1lbW9yeVRvTGltaXQobWVtb3J5TGltaXRCeXRlcyk7Ci0gICAgQVNTRVJUKGN1cnJl
bnRNZW1vcnlVc2VCeXRlcygpIDwgbWVtb3J5TGltaXRCeXRlcyk7CisgICAgQVNTRVJUKGN1cnJl
bnRNZW1vcnlVc2VCeXRlcygpIDw9IG1lbW9yeUxpbWl0Qnl0ZXMpOwogICAgIG1fbWVtb3J5TGlt
aXRCeXRlcyA9IG1lbW9yeUxpbWl0Qnl0ZXM7CiB9CiAKQEAgLTE0MSw2ICsxNDEsMzAgQEAgdm9p
ZCBUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5VG9MaW1pdChzaXplX3QgbGltaXQpCiAgICAg
fQogfQogCit1bnNpZ25lZCBUZXh0dXJlTWFuYWdlcjo6cmVwbGFjZVRleHR1cmUoVGV4dHVyZVRv
a2VuIG5ld1Rva2VuLCBUZXh0dXJlSW5mbyBuZXdJbmZvKQoreworICAgIGZvciAoTGlzdEhhc2hT
ZXQ8VGV4dHVyZVRva2VuPjo6aXRlcmF0b3IgbHJ1SXQgPSBtX3RleHR1cmVMUlVTZXQuYmVnaW4o
KTsgbHJ1SXQgIT0gbV90ZXh0dXJlTFJVU2V0LmVuZCgpOyArK2xydUl0KSB7CisgICAgICAgIFRl
eHR1cmVUb2tlbiB0b2tlbiA9ICpscnVJdDsKKyAgICAgICAgVGV4dHVyZUluZm8gaW5mbyA9IG1f
dGV4dHVyZXMuZ2V0KHRva2VuKTsKKyAgICAgICAgaWYgKGluZm8uaXNQcm90ZWN0ZWQpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFpbmZvLnRleHR1cmVJZCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobmV3SW5mby5zaXplICE9IGluZm8uc2l6ZSB8fCBu
ZXdJbmZvLmZvcm1hdCAhPSBpbmZvLmZvcm1hdCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBuZXdJbmZvLnRleHR1cmVJZCA9IGluZm8udGV4dHVyZUlkOworI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgbmV3SW5mby5hbGxvY2F0b3IgPSBpbmZvLmFsbG9jYXRvcjsKKyNlbmRpZgorICAg
ICAgICBtX3RleHR1cmVzLnJlbW92ZSh0b2tlbik7CisgICAgICAgIG1fdGV4dHVyZUxSVVNldC5y
ZW1vdmUodG9rZW4pOworICAgICAgICBtX3RleHR1cmVzLnNldChuZXdUb2tlbiwgbmV3SW5mbyk7
CisgICAgICAgIG1fdGV4dHVyZUxSVVNldC5hZGQobmV3VG9rZW4pOworICAgICAgICByZXR1cm4g
aW5mby50ZXh0dXJlSWQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB2b2lkIFRleHR1cmVN
YW5hZ2VyOjphZGRUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgVGV4dHVyZUluZm8gaW5mbykK
IHsKICAgICBBU1NFUlQoIW1fdGV4dHVyZUxSVVNldC5jb250YWlucyh0b2tlbikpOwpAQCAtMjA1
LDggKzIyOSwxMCBAQCB1bnNpZ25lZCBUZXh0dXJlTWFuYWdlcjo6YWxsb2NhdGVUZXh0dXJlKFRl
eHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZVRvawogICAgIHJldHVybiB0ZXh0dXJl
SWQ7CiB9CiAKLWJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tl
biB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmb3JtYXQpCitib29sIFRleHR1cmVNYW5h
Z2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCYgdGV4dHVyZUlkKQogeworICAgIHRleHR1cmVJZCA9IDA7
CisKICAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV9tYXhUZXh0dXJlU2l6ZSB8fCBzaXplLmhlaWdo
dCgpID4gbV9tYXhUZXh0dXJlU2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMzIs
NiArMjU4LDEzIEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVU
b2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAjaWZuZGVmIE5ERUJVRwogICAg
IGluZm8uYWxsb2NhdG9yID0gMDsKICNlbmRpZgorICAgIC8vIEF2b2lkIGNodXJuaW5nIGJ5IHJl
dXNpbmcgdGhlIHRleHR1cmUgaWYgaXQgaXMgYWJvdXQgdG8gYmUgcmVjbGFpbWVkIGFuZAorICAg
IC8vIGl0IGhhcyB0aGUgc2FtZSBzaXplIGFuZCBmb3JtYXQgYXMgdGhlIHJlcXVlc3RpbmcgdGV4
dHVyZS4KKyAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiBy
ZWNsYWltTGltaXRCeXRlcygpKSB7CisgICAgICAgIHRleHR1cmVJZCA9IHJlcGxhY2VUZXh0dXJl
KHRva2VuLCBpbmZvKTsKKyAgICAgICAgaWYgKHRleHR1cmVJZCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KICAgICBhZGRUZXh0dXJlKHRva2VuLCBpbmZvKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCmluZGV4IGYzMjdiNGNmY2QxYjEwZGFlN2RhZDYz
NDYwNGY2NzM5YjUyMGYyMDguLmIxOTFmN2I2OGJhYjIxYmQ5YzQwMTI3ZDJhMGZkM2ZjMTg0YTdh
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaApAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZWxlYXNlVG9rZW4oVGV4dHVyZVRva2VuKTsKICAgICBib29sIGhhc1RleHR1cmUoVGV4
dHVyZVRva2VuKTsKIAotICAgIGJvb2wgcmVxdWVzdFRleHR1cmUoVGV4dHVyZVRva2VuLCBJbnRT
aXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKKyAgICBib29sIHJlcXVlc3RUZXh0dXJlKFRl
eHR1cmVUb2tlbiwgSW50U2l6ZSwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCwgdW5zaWduZWQmIHRl
eHR1cmVJZCk7CiAKICAgICB2b2lkIHByb3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbik7CiAgICAg
dm9pZCB1bnByb3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbik7CkBAIC05OSw2ICs5OSw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGFkZFRleHR1cmUoVGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbyk7
CiAgICAgdm9pZCByZW1vdmVUZXh0dXJlKFRleHR1cmVUb2tlbiwgVGV4dHVyZUluZm8pOworICAg
IHVuc2lnbmVkIHJlcGxhY2VUZXh0dXJlKFRleHR1cmVUb2tlbiwgVGV4dHVyZUluZm8pOwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFRleHR1cmVUb2tlbiwgVGV4dHVyZUluZm8+IFRleHR1cmVNYXA7
CiAgICAgVGV4dHVyZU1hcCBtX3RleHR1cmVzOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>