<?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>52819</bug_id>
          
          <creation_ts>2011-01-20 09:37:56 -0800</creation_ts>
          <short_desc>Crash in WebCore::HistoryController::itemsAreClones</short_desc>
          <delta_ts>2011-02-04 18:32:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53402</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Gentilcore">tonyg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>creis</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>priyajeet.hora</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>337399</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-01-20 09:37:56 -0800</bug_when>
    <thetext>This is the most popular crasher on the Chromium dev channel. http://trac.webkit.org/changeset/76205 seems to be in the right area and timeframe.

0x021d5555	 [chrome.dll	 - historycontroller.cpp:669]	WebCore::HistoryController::itemsAreClones(WebCore::HistoryItem *,WebCore::HistoryItem *)
0x021d537b	 [chrome.dll	 - historycontroller.cpp:614]	WebCore::HistoryController::recursiveSetProvisionalItem(WebCore::HistoryItem *,WebCore::HistoryItem *,WebCore::FrameLoadType)
0x021d540d	 [chrome.dll	 - historycontroller.cpp:627]	WebCore::HistoryController::recursiveSetProvisionalItem(WebCore::HistoryItem *,WebCore::HistoryItem *,WebCore::FrameLoadType)
0x021d4a1a	 [chrome.dll	 - historycontroller.cpp:248]	WebCore::HistoryController::goToItem(WebCore::HistoryItem *,WebCore::FrameLoadType)
0x024b1b36	 [chrome.dll	 - webframeimpl.cpp:898]	WebKit::WebFrameImpl::loadHistoryItem(WebKit::WebHistoryItem const &amp;)
0x01d373fd	 [chrome.dll	 - render_view.cc:1450]	RenderView::OnNavigate(ViewMsg_Navigate_Params const &amp;)
0x00000005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337400</commentid>
    <comment_count>1</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-01-20 09:40:49 -0800</bug_when>
    <thetext>I think you meant http://trac.webkit.org/changeset/75336.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337416</commentid>
    <comment_count>2</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-01-20 10:15:23 -0800</bug_when>
    <thetext>Interesting.  There&apos;s an ASSERT on both arguments in recursiveSetProvisionalItem, but it turns out ASSERTs are compiled out of release builds:
http://webkit.org/coding/assertion-guidelines.html

It&apos;s possible the crash happens if both item1 and item2 are null.  We should still see the ASSERT failing even in debug builds if that&apos;s the case-- we just have to find out the repro steps.

Here&apos;s the crashing code, for reference:

bool HistoryController::itemsAreClones(HistoryItem* item1, HistoryItem* item2) const
{
    // If the item we&apos;re going to is a clone of the item we&apos;re at, then we do
    // not need to load it again.  The current frame tree and the frame tree
    // snapshot in the item have to match.
    // Note: Some clients treat a navigation to the current history item as
    // a reload.  Thus, if item1 and item2 are the same, we need to create a
    // new document and should not consider them clones.
    // (See http://webkit.org/b/35532 for details.)
    return item1 != item2
        &amp;&amp; item1-&gt;itemSequenceNumber() == item2-&gt;itemSequenceNumber()
        &amp;&amp; currentFramesMatchItem(item1)
        &amp;&amp; item2-&gt;hasSameFrames(item1);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337582</commentid>
    <comment_count>3</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-01-20 13:56:33 -0800</bug_when>
    <thetext>BTW, from looking at about a dozen crash reports, these were all long-lived renderer processes, so this isn&apos;t happening during session restore (the comment at http://trac.webkit.org/browser/trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp#L887 suggests that this is one case where currentItem can be null).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338231</commentid>
    <comment_count>4</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-01-21 11:57:41 -0800</bug_when>
    <thetext>Here&apos;s what we know so far.

The crash happens when recursiveSetProvisionalItem passes null for either &quot;item&quot; or &quot;fromItem&quot; (but not both) to itemsAreClones.  (If both were null, itemsAreClones would just return false before crashing.)

The crash only happens on recursive calls of depth 2 or more, meaning there has to be at least one subframe involved.  For example, we&apos;ll see this stack trace if we go back or forward to a page with frames (or on a subframe navigation).

If &quot;item&quot; is null, that means the original destination item had a null value in its HistoryItemVector of children.  Maybe that&apos;s possible?

If &quot;fromItem&quot; is null, that means fromItem-&gt;childItemWithTarget(frameName) returned null in the previous call.  That seems unlikely, because we know from the previous call to itemsAreClones that the frame trees of the current and destination item match.

Either way, I&apos;m surprised we&apos;re not seeing crashes from debug builds due to recursiveSetProvisionalItem&apos;s ASSERTs.  I haven&apos;t figured out how to reproduce the crash yet, but I could put in some defensive code to help us find it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338282</commentid>
    <comment_count>5</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-01-21 13:01:24 -0800</bug_when>
    <thetext>Just discovered another crash report from the same logic in recursiveGoToItem before I split it out into itemsAreClones in http://trac.webkit.org/changeset/75336.  Still trying to nail down the repro case, but this suggests that the underlying cause could be outside this patch.

My current theory is that we&apos;re passing in a corrupt history item with null as one of the child items.  That would lead to the stack trace in this crash, both before and after the 75336 patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338325</commentid>
    <comment_count>6</comment_count>
      <attachid>79788</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-01-21 14:02:39 -0800</bug_when>
    <thetext>Created attachment 79788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338401</commentid>
    <comment_count>7</comment_count>
      <attachid>79788</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-21 15:47:08 -0800</bug_when>
    <thetext>Comment on attachment 79788
Patch

Clearing flags on attachment: 79788

Committed r76406: &lt;http://trac.webkit.org/changeset/76406&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338402</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-21 15:47:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338412</commentid>
    <comment_count>9</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-01-21 15:59:06 -0800</bug_when>
    <thetext>Reopening since this bug isn&apos;t actually fixed.

Charlie, you can ping someone (adele?) in #webkit to get Bugzilla editing privileges even before you get committer. Also, for cases like this you can also open another bug with your small change and mark it as blocking this bug (IIRC, there&apos;s a historical preference for having one commit per bug).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341675</commentid>
    <comment_count>10</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-01-28 13:08:15 -0800</bug_when>
    <thetext>I found a plausible way this bug could be happening, but I haven&apos;t found exact repro steps yet.

From the crash dumps, it turns out that item2 (i.e., fromItem) is actually null, not item1.  In comment #4, I noted this was unlikely because the previous call to itemsAreClones told us the frame tree match, but it turns out that logic is buggy.

HistoryItem::hasSameFrames(otherItem) checks that the target name of every child in the current HistoryItem shows up in one of the children of otherItem.  It does not check the reverse, meaning that the current HistoryItem could have two children with target &quot;foo&quot; and otherItem could have one child with &quot;foo&quot; and another with &quot;bar&quot;.

If we get into that state, we&apos;ll see this crash when we go back in frame &quot;foo&quot;.  In that case, we&apos;ll try to call recursiveSetProvisionalItem on frame &quot;bar&quot;, end up with NULL for fromItem, and crash in itemsAreClones.

Now we just need to figure out how the target of the current HistoryItem&apos;s children could get corrupted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342746</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-01-31 12:31:22 -0800</bug_when>
    <thetext>In radar as &lt;rdar://problem/8938557&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343777</commentid>
    <comment_count>12</comment_count>
      <attachid>80874</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-01 19:02:20 -0800</bug_when>
    <thetext>Created attachment 80874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343779</commentid>
    <comment_count>13</comment_count>
      <attachid>80874</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-01 19:06:28 -0800</bug_when>
    <thetext>Comment on attachment 80874
Patch

I&apos;m having trouble getting the layout test to reproduce the crash.  Going back twice with the back button reliably crashes in recursiveSetProvisionalItem, but neither queueBackNavigation nor history.back hit that code.  Is there another way I can tell the browser to go back in a layout test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343829</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-01 21:27:09 -0800</bug_when>
    <thetext>queueBackNavigation is the layout test specific method for requesting a back navigation.  that will wait until the page is fully loaded before processing the back navigation.  maybe that is related to why this isn&apos;t reproducible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344201</commentid>
    <comment_count>15</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-02 13:43:48 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; queueBackNavigation is the layout test specific method for requesting a back navigation.  that will wait until the page is fully loaded before processing the back navigation.  maybe that is related to why this isn&apos;t reproducible?

Actually, it&apos;s much more subtle!  It turns out history.back() does get to recursiveSetProvisionalItem, just like the back button.  It even has a memory error, but it happens not to crash.

We already figured out that we crash when we hit the back button because we delete fromItem after calling itemsAreClones (on the m_provisionalItem = item line, since fromItem and m_provisionalItem are the same in this case).  On the recursive call, fromItem is 0-- boom.

If we call history.back() instead, we delete that item *before* we get to itemsAreClones, back in HistoryController::goToItem() (when we call setGlobalHistoryItem).  Even though we&apos;re still using a deleted pointer in that case, we don&apos;t happen to crash.  Instead, itemsAreClones returns false when it notices fromItem doesn&apos;t have any children.  This is still bad, because it doesn&apos;t update the provisional item.

Either way, I noticed a flaw in my expectations file-- after going back twice, we should be at the original HistoryItem, not the second one.

All this boils down to the fact that we&apos;re not clearing the provisional item after getting to an error page (like the confirm form resubmission page in this test).

Question: what&apos;s the intended behavior for an error page?  Should we commit the provisional item and make it the last committed item?  Or should we cancel the provisional item and act like we didn&apos;t go anywhere?  (More specifically in this case, if I get an error page when I click back, what&apos;s supposed to happen if I click back again?)  I&apos;m guessing we want to commit it, but that isn&apos;t currently happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344207</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-02 13:46:44 -0800</bug_when>
    <thetext>In Chromium (in render_view.cc), it takes care to load the error page with the &quot;replace&quot; parameter set to true when the error page should be shown in place of a back/forward entry.  It only sets replace to false when we need to show an error page for a new navigation that failed to complete.

In other words, I believe that in the back/forward case, the error page should take the place of the page you were trying to navigate back to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344464</commentid>
    <comment_count>17</comment_count>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-02 18:01:41 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; In Chromium (in render_view.cc), it takes care to load the error page with the &quot;replace&quot; parameter set to true when the error page should be shown in place of a back/forward entry.  It only sets replace to false when we need to show an error page for a new navigation that failed to complete.
&gt; 
&gt; In other words, I believe that in the back/forward case, the error page should take the place of the page you were trying to navigate back to.

Thanks-- that helps.  I was able to get the error page to commit by changing HistoryController::updateForCommit.  (It needed to commit for FrameLoadTypeReplace in addition to the back/forward load types.)

After that, Chrome seems to work properly.  I needed another change to test_shell, so that it doesn&apos;t forget the page ID when we do the load (of the error page).  test_shell is now working.

Unfortunately, DumpRenderTree is also still behaving incorrectly-- it doesn&apos;t commit when we go back or forward to an error page.  I&apos;ll probably need to update that as well.  I&apos;ll upload the patch of what I have so far for feedback, and I&apos;ll work on DumpRenderTree in the mean time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344469</commentid>
    <comment_count>18</comment_count>
      <attachid>81018</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-02 18:08:19 -0800</bug_when>
    <thetext>Created attachment 81018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344531</commentid>
    <comment_count>19</comment_count>
      <attachid>81018</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-02 22:02:53 -0800</bug_when>
    <thetext>Comment on attachment 81018
Patch

This change makes sense to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344744</commentid>
    <comment_count>20</comment_count>
      <attachid>81018</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-02-03 08:52:25 -0800</bug_when>
    <thetext>Comment on attachment 81018
Patch

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

I understand the goal is to keep certain items Ref&apos;ed, as previously they were being destroyed before last-use.  However this is mis-using (Pass)RefPtrs.

PassRefPtr is for transferring ownership, which you&apos;re not actually doing (except for the one case I pointed out).

If that one case is the only one necessary to change, then that&apos;s all you should change.

If the other changes are necessary, you need to leave them as raw pointers and simply RefPtr&lt;&gt; them within the function body where you think they might unintentionally be destroyed.

&gt; Source/WebCore/loader/HistoryController.cpp:613
&gt;  {

With item, you are potentially passing ownership, and it makes sense to use a PassRefPtr.  For fromItem, I only see a .get() comparison, so the PassRefPtr isn&apos;t needed.

&gt; Source/WebCore/loader/HistoryController.cpp:621
&gt;  

m_provisionalItem is already a RefPtr - Why do you need the extra targetItem RefPtr here?  You&apos;re adding ref-count churn which is surprisingly bad for performance.

&gt; Source/WebCore/loader/HistoryController.cpp:640
&gt;  {

Same thing here - PassRefPtrs are for actually passing ownership, and I don&apos;t see that you are passing ownership in this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344745</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-02-03 08:53:27 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 81018 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81018&amp;action=review
&gt; 
&gt; I understand the goal is to keep certain items Ref&apos;ed, as previously they were being destroyed before last-use.  However this is mis-using (Pass)RefPtrs.
&gt; 
&gt; PassRefPtr is for transferring ownership, which you&apos;re not actually doing (except for the one case I pointed out).
&gt; 
&gt; If that one case is the only one necessary to change, then that&apos;s all you should change.
&gt; 
&gt; If the other changes are necessary, you need to leave them as raw pointers and simply RefPtr&lt;&gt; them within the function body where you think they might unintentionally be destroyed.
&gt; 
&gt; &gt; Source/WebCore/loader/HistoryController.cpp:613
&gt; &gt;  {
&gt; 
&gt; With item, you are potentially passing ownership, and it makes sense to use a PassRefPtr.  For fromItem, I only see a .get() comparison, so the PassRefPtr isn&apos;t needed.
&gt; 
&gt; &gt; Source/WebCore/loader/HistoryController.cpp:621
&gt; &gt;  
&gt; 
&gt; m_provisionalItem is already a RefPtr - Why do you need the extra targetItem RefPtr here?  You&apos;re adding ref-count churn which is surprisingly bad for performance.
&gt; 
&gt; &gt; Source/WebCore/loader/HistoryController.cpp:640
&gt; &gt;  {
&gt; 
&gt; Same thing here - PassRefPtrs are for actually passing ownership, and I don&apos;t see that you are passing ownership in this method.

Sorry for the commenting fail here - the inline review comments feature never does what I intend.  sigh.  Hopefully lining up the line numbers manually will make it obvious what I meant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344909</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-03 12:18:41 -0800</bug_when>
    <thetext>Maybe Adam or Ojan can fix the review tool to do what you intend?  Can you be more specific?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344919</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-03 12:29:46 -0800</bug_when>
    <thetext>&gt; Hopefully lining up the line numbers manually will make it obvious what I meant.

You can also use the &quot;view in context&quot; link to have the review tool line up the comments with the lines for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345031</commentid>
    <comment_count>24</comment_count>
      <attachid>81018</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-03 15:02:52 -0800</bug_when>
    <thetext>Comment on attachment 81018
Patch

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

Thanks.  I&apos;ve got an improved fix but my approach on the layout test isn&apos;t going to work.  (DumpRenderTree doesn&apos;t show error pages in either Chromium or WebKit.)  Thankfully, there&apos;s another set of repro steps in bug 53708.  I think I&apos;ll try to fix that issue here, since the layout test for that works here as well.

&gt;&gt;&gt; Source/WebCore/loader/HistoryController.cpp:613
&gt;&gt;&gt;  {
&gt;&gt; 
&gt;&gt; With item, you are potentially passing ownership, and it makes sense to use a PassRefPtr.  For fromItem, I only see a .get() comparison, so the PassRefPtr isn&apos;t needed.
&gt; 
&gt; Sorry for the commenting fail here - the inline review comments feature never does what I intend.  sigh.  Hopefully lining up the line numbers manually will make it obvious what I meant.

The bug was that m_provisionalItem and fromItem were the same, so that assigning item to m_provisionalItem deleted the old value (i.e., fromItem) while we still needed it.  I was using PassRefPtr for fromItem to prevent this, but you&apos;re right that it&apos;s incorrect.  All we need is to change currentItem to a RefPtr in goToItem (above) to ensure it doesn&apos;t get deleted here.

As you mentioned, we&apos;re potentially passing ownership of item, but we received it as a raw pointer anyway (in goToItem).  In retrospect, I don&apos;t think we need PassRefPtr even there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345077</commentid>
    <comment_count>25</comment_count>
      <attachid>81128</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-03 15:49:15 -0800</bug_when>
    <thetext>Created attachment 81128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345079</commentid>
    <comment_count>26</comment_count>
      <attachid>81128</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-03 15:50:32 -0800</bug_when>
    <thetext>Comment on attachment 81128
Patch

This patch fixes the memory error (with a RefPtr in goToItem), the issue that going back to an error page needs to be committed (in updateForCommit), and the issue that going back to a hash in a frame needs to be committed (in updateForSameDocumentNavigation).

As I mentioned, DumpRenderTree doesn&apos;t show error pages, so the layout test covers the memory error and the commit of subframe hash navigations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345708</commentid>
    <comment_count>27</comment_count>
      <attachid>81128</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-04 12:47:00 -0800</bug_when>
    <thetext>Comment on attachment 81128
Patch

Anyone have a chance to look at this today?  If it looks good, it&apos;d be great to get the crash fix in before the weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345759</commentid>
    <comment_count>28</comment_count>
      <attachid>81128</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-02-04 13:45:30 -0800</bug_when>
    <thetext>Comment on attachment 81128
Patch

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

&gt; LayoutTests/fast/history/history-back-forward-within-subframe-hash.html:3
&gt; +onload = function() {

Nit: There isn&apos;t a formal style guide for JavaScript used in layout tests, but generally the convention is to follow the WebKit C++ style (four space indents, function braces on their own line).

&gt; LayoutTests/fast/history/resources/history-back-forward-within-subframe-hash-2.html:15
&gt; +      parent.document.getElementById(&quot;result&quot;).innerText = &quot;First visit&quot;;

If you use the js-test framework (see same-document-iframes-changing-fragment.html, history-traversal-is-asynchronous.html, and a few other tests in the directory), then you can turn these into log statements instead of replacing the result text. That makes failures easier to debug, since you can more clearly see at what stage the actual output started to deviate from the expected one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345799</commentid>
    <comment_count>29</comment_count>
      <attachid>81286</attachid>
    <who name="Charles Reis">creis</who>
    <bug_when>2011-02-04 14:32:36 -0800</bug_when>
    <thetext>Created attachment 81286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345919</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-04 16:46:38 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 81286:

http/tests/websocket/tests/multiple-connections.html bug 53825 (author: abarth@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345920</commentid>
    <comment_count>31</comment_count>
      <attachid>81286</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-04 16:48:42 -0800</bug_when>
    <thetext>Comment on attachment 81286
Patch

Clearing flags on attachment: 81286

Committed r77705: &lt;http://trac.webkit.org/changeset/77705&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345921</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-04 16:48:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345986</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-04 18:32:39 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77705 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79788</attachid>
            <date>2011-01-21 14:02:39 -0800</date>
            <delta_ts>2011-02-01 19:02:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52819-20110121140238.patch</filename>
            <type>text/plain</type>
            <size>3256</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2Mzc0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDEtMjEgIENoYXJsaWUg
UmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6
aXRlbXNBcmVDbG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyODE5CisKKyAgICAgICAgQWRkcyBzYW5pdHkgY2hlY2tzIHRvIGhlbHAgZGlhZ25v
c2UgdGhlIGNyYXNoLgorCisgICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcDoK
KwogMjAxMS0wMS0yMSAgQW50b24gTXVoaW4gIDxhbnRvbm1AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0hpc3RvcnlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NjM3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1OCw2
ICs2NTgsMTQgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZQogCiBi
b29sIEhpc3RvcnlDb250cm9sbGVyOjppdGVtc0FyZUNsb25lcyhIaXN0b3J5SXRlbSogaXRlbTEs
IEhpc3RvcnlJdGVtKiBpdGVtMikgY29uc3QKIHsKKyAgICAvLyBJdCBhcHBlYXJzIHRoYXQgb25l
IG9mIHRoZSBpdGVtcyBjYW4gYmUgbnVsbCBpbiByZWxlYXNlIGJ1aWxkcywgbGVhZGluZworICAg
IC8vIHRvIHRoZSBjcmFzaGVzIHNlZW4gaW4gaHR0cDovL3dlYmtpdC5vcmcvYi81MjgxOS4gIEZv
ciBub3csIHRyeSB0bworICAgIC8vIG5hcnJvdyBpdCBkb3duIHdpdGggYSBtb3JlIHNwZWNpZmlj
IGNyYXNoLgorICAgIGlmICghaXRlbTEpCisgICAgICAgIENSQVNIKCk7CisgICAgaWYgKCFpdGVt
MikKKyAgICAgICAgQ1JBU0goKTsKKwogICAgIC8vIElmIHRoZSBpdGVtIHdlJ3JlIGdvaW5nIHRv
IGlzIGEgY2xvbmUgb2YgdGhlIGl0ZW0gd2UncmUgYXQsIHRoZW4gd2UgZG8KICAgICAvLyBub3Qg
bmVlZCB0byBsb2FkIGl0IGFnYWluLiAgVGhlIGN1cnJlbnQgZnJhbWUgdHJlZSBhbmQgdGhlIGZy
YW1lIHRyZWUKICAgICAvLyBzbmFwc2hvdCBpbiB0aGUgaXRlbSBoYXZlIHRvIG1hdGNoLgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2Mzc0KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxMS0wMS0yMSAgQ2hhcmxpZSBSZWlzICA8Y3JlaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyYXNoIGluIFdlYkNvcmU6
Okhpc3RvcnlDb250cm9sbGVyOjppdGVtc0FyZUNsb25lcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4MTkKKworICAgICAgICBBZGRzIHNhbml0eSBj
aGVja3MgdG8gaGVscCBkaWFnbm9zZSB0aGUgY3Jhc2guCisKKyAgICAgICAgKiBzcmMvV2ViRnJh
bWVJbXBsLmNwcDoKKwogMjAxMS0wMS0yMSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVwZGF0aW5nIGNocm9taXVtIERFUFMgc28gd2UgY2Fu
IHB1bGwgaW4gbGludXggdGhlbWUgY2hhbmdlcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNzYzNzQpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODQs
NiArODg0LDE3IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpsb2FkSGlzdG9yeUl0ZW0oY29uc3QKICAg
ICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGhpc3RvcnlJdGVtID0gUGFzc1JlZlB0cjxIaXN0b3J5SXRl
bT4oaXRlbSk7CiAgICAgQVNTRVJUKGhpc3RvcnlJdGVtLmdldCgpKTsKIAorICAgIC8vIFNhbml0
eSBjaGVjayBmb3IgaHR0cDovL3dlYmtpdC5vcmcvYi81MjgxOS4gIEl0IGFwcGVhcnMgdGhhdCBz
b21lIGNoaWxkCisgICAgLy8gaXRlbXMgb2YgdGhpcyBpdGVtIG1pZ2h0IGJlIG51bGwuICBUcnkg
dmFsaWRhdGluZyBqdXN0IHRoZSBmaXJzdCBzZXQgb2YKKyAgICAvLyBjaGlsZHJlbiBpbiBhbiBh
dHRlbXB0IHRvIGNhdGNoIGl0IGVhcmx5LgorICAgIGNvbnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBj
aGlsZEl0ZW1zID0gaGlzdG9yeUl0ZW0tPmNoaWxkcmVuKCk7CisgICAgaW50IHNpemUgPSBjaGls
ZEl0ZW1zLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjaGlsZEl0ZW0gPSBjaGlsZEl0ZW1zW2ldLmdldCgpOwor
ICAgICAgaWYgKCFjaGlsZEl0ZW0uZ2V0KCkpCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCiAg
ICAgLy8gSWYgdGhlcmUgaXMgbm8gY3VycmVudEl0ZW0sIHdoaWNoIGhhcHBlbnMgd2hlbiB3ZSBh
cmUgbmF2aWdhdGluZyBpbgogICAgIC8vIHNlc3Npb24gaGlzdG9yeSBhZnRlciBhIGNyYXNoLCB3
ZSBuZWVkIHRvIG1hbnVmYWN0dXJlIG9uZSBvdGhlcndpc2UgV2ViS2l0CiAgICAgLy8gaG9hcmtz
LiBUaGlzIGlzIHByb2JhYmx5IHRoZSB3cm9uZyB0aGluZyB0byBkbywgYnV0IGl0IHNlZW1zIHRv
IHdvcmsuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80874</attachid>
            <date>2011-02-01 19:02:20 -0800</date>
            <delta_ts>2011-02-02 18:08:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52819-20110201190219.patch</filename>
            <type>text/plain</type>
            <size>11083</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzU1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDItMDEgIENoYXJsaWUg
UmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6
aXRlbXNBcmVDbG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyODE5CisKKyAgICAgICAgQXZvaWRzIGRlbGV0aW5nIGEgSGlzdG9yeUl0ZW0gdGhh
dCBpcyBzdGlsbCBpbiB1c2UuCisgICAgICAgIEFsc28gcmVtb3ZlcyB1bm5lZWRlZCBzYW5pdHkg
Y2hlY2tzIHVzZWQgZm9yIGRpYWdub3NpbmcgdGhlIHByb2JsZW0uCisKKyAgICAgICAgKiBsb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5oOgorCiAyMDExLTAyLTAxICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzM0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRl
bShIaXN0b3J5CiAgICAgLy8gU2V0IHRoZSBCRiBjdXJzb3IgYmVmb3JlIGNvbW1pdCwgd2hpY2gg
bGV0cyB0aGUgdXNlciBxdWlja2x5IGNsaWNrIGJhY2svZm9yd2FyZCBhZ2Fpbi4KICAgICAvLyAt
IHBsdXMsIGl0IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wZXJh
dGlvbiB0aHJvdWdoIHRoZSBmcmFtZXRyZWUsCiAgICAgLy8gYXMgb3Bwb3NlZCB0byBoYXBwZW5p
bmcgZm9yIHNvbWUvb25lIG9mIHRoZSBwYWdlIGNvbW1pdHMgdGhhdCBtaWdodCBoYXBwZW4gc29v
bgotICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSA9IHBhZ2UtPmJhY2tGb3J3YXJkKCktPmN1
cnJlbnRJdGVtKCk7ICAgIAorICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gY3VycmVudEl0ZW0gPSBw
YWdlLT5iYWNrRm9yd2FyZCgpLT5jdXJyZW50SXRlbSgpOwogICAgIHBhZ2UtPmJhY2tGb3J3YXJk
KCktPnNldEN1cnJlbnRJdGVtKHRhcmdldEl0ZW0pOwogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgcGFnZS0+c2V0R2xvYmFsSGlzdG9yeUl0ZW0oKCFz
ZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSA/IDAgOiB0YXJn
ZXRJdGVtKTsKQEAgLTYwOCwzMCArNjA4LDIwIEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhp
c3RvcnlDb250cm9sbGUKIC8vIHRyYWNraW5nIHdoZXRoZXIgZWFjaCBmcmFtZSBhbHJlYWR5IGhh
cyB0aGUgY29udGVudCB0aGUgaXRlbSByZXF1ZXN0cy4gIElmIHRoZXJlIGlzCiAvLyBhIG1hdGNo
LCB3ZSBzZXQgdGhlIHByb3Zpc2lvbmFsIGl0ZW0gYW5kIHJlY3Vyc2UuICBPdGhlcndpc2Ugd2Ug
d2lsbCByZWxvYWQgdGhhdAogLy8gZnJhbWUgYW5kIGFsbCBpdHMga2lkcyBpbiByZWN1cnNpdmVH
b1RvSXRlbS4KLXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFs
SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRU
eXBlIHR5cGUpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVTZXRQcm92aXNpb25h
bEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSwgUGFzc1JlZlB0cjxIaXN0b3J5SXRl
bT4gZnJvbUl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoaXRlbSk7CiAg
ICAgQVNTRVJUKGZyb21JdGVtKTsKIAotICAgIGlmIChpdGVtc0FyZUNsb25lcyhpdGVtLCBmcm9t
SXRlbSkpIHsKKyAgICBpZiAoaXRlbXNBcmVDbG9uZXMoaXRlbS5nZXQoKSwgZnJvbUl0ZW0uZ2V0
KCkpKSB7CiAgICAgICAgIC8vIFNldCBwcm92aXNpb25hbCBpdGVtLCB3aGljaCB3aWxsIGJlIGNv
bW1pdHRlZCBpbiByZWN1cnNpdmVVcGRhdGVGb3JDb21taXQuCi0gICAgICAgIG1fcHJvdmlzaW9u
YWxJdGVtID0gaXRlbTsKKyAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiB0YXJnZXRJdGVtID0g
aXRlbTsKKyAgICAgICAgbV9wcm92aXNpb25hbEl0ZW0gPSB0YXJnZXRJdGVtOwogCi0gICAgICAg
IGNvbnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZEl0ZW1zID0gaXRlbS0+Y2hpbGRyZW4oKTsK
KyAgICAgICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkSXRlbXMgPSB0YXJnZXRJdGVt
LT5jaGlsZHJlbigpOwogCiAgICAgICAgIGludCBzaXplID0gY2hpbGRJdGVtcy5zaXplKCk7CiAK
LSAgICAgICAgLy8gU2FuaXR5IGNoZWNrcyBmb3IgaHR0cDovL3dlYmtpdC5vcmcvYi81MjgxOS4K
LSAgICAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgICAgICAvLyBmcm9tSXRlbSBzaG91bGQg
aGF2ZSBzYW1lIG51bWJlciBvZiBjaGlsZHJlbiBhY2NvcmRpbmcgdG8gaGFzU2FtZUZyYW1lcywK
LSAgICAgICAgICAgIC8vIGJ1dCBjcmFzaCBkdW1wcyBzdWdnZXN0IGl0IG1pZ2h0IGhhdmUgMC4K
LSAgICAgICAgICAgIGlmICghZnJvbUl0ZW0tPmNoaWxkcmVuKCkuc2l6ZSgpKQotICAgICAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAvLyBpdGVtc0FyZUNsb25lcyBjaGVja2VkIGZy
b21JdGVtLT5oYXNTYW1lRnJhbWVzKGl0ZW0pLiBDaGVjayB2aWNlIHZlcnNhLgotICAgICAgICAg
ICAgaWYgKCFpdGVtLT5oYXNTYW1lRnJhbWVzKGZyb21JdGVtKSkKLSAgICAgICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICB9Ci0KICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKICAgICAgICAgICAgIFN0cmluZyBjaGlsZEZyYW1lTmFtZSA9IGNoaWxkSXRlbXNbaV0t
PnRhcmdldCgpOwogICAgICAgICAgICAgSGlzdG9yeUl0ZW0qIGZyb21DaGlsZEl0ZW0gPSBmcm9t
SXRlbS0+Y2hpbGRJdGVtV2l0aFRhcmdldChjaGlsZEZyYW1lTmFtZSk7CkBAIC02NDUsMTIgKzYz
NSwxMiBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVTZXRQcm92CiAKIC8vIFdl
IG5vdyB0cmF2ZXJzZSB0aGUgZnJhbWUgdHJlZSBhbmQgaXRlbSB0cmVlIGEgc2Vjb25kIHRpbWUs
IGxvYWRpbmcgZnJhbWVzIHRoYXQKIC8vIGRvIGhhdmUgdGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVx
dWVzdHMuCi12b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5
SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCit2
b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbShQYXNzUmVmUHRyPEhpc3Rv
cnlJdGVtPiBpdGVtLCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBmcm9tSXRlbSwgRnJhbWVMb2Fk
VHlwZSB0eXBlKQogewogICAgIEFTU0VSVChpdGVtKTsKICAgICBBU1NFUlQoZnJvbUl0ZW0pOwog
Ci0gICAgaWYgKGl0ZW1zQXJlQ2xvbmVzKGl0ZW0sIGZyb21JdGVtKSkgeworICAgIGlmIChpdGVt
c0FyZUNsb25lcyhpdGVtLmdldCgpLCBmcm9tSXRlbS5nZXQoKSkpIHsKICAgICAgICAgLy8gSnVz
dCBpdGVyYXRlIG92ZXIgdGhlIHJlc3QsIGxvb2tpbmcgZm9yIGZyYW1lcyB0byBuYXZpZ2F0ZS4K
ICAgICAgICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkSXRlbXMgPSBpdGVtLT5jaGls
ZHJlbigpOwogCkBAIC02NjQsMjAgKzY1NCwxMiBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpy
ZWN1cnNpdmVHb1RvSXRlCiAgICAgICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS0+aGlzdG9y
eSgpLT5yZWN1cnNpdmVHb1RvSXRlbShjaGlsZEl0ZW1zW2ldLmdldCgpLCBmcm9tQ2hpbGRJdGVt
LCB0eXBlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRl
cigpLT5sb2FkSXRlbShpdGVtLCB0eXBlKTsKKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmxv
YWRJdGVtKGl0ZW0uZ2V0KCksIHR5cGUpOwogICAgIH0KIH0KIAogYm9vbCBIaXN0b3J5Q29udHJv
bGxlcjo6aXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0qIGl0ZW0xLCBIaXN0b3J5SXRlbSogaXRl
bTIpIGNvbnN0CiB7Ci0gICAgLy8gSXQgYXBwZWFycyB0aGF0IG9uZSBvZiB0aGUgaXRlbXMgY2Fu
IGJlIG51bGwgaW4gcmVsZWFzZSBidWlsZHMsIGxlYWRpbmcKLSAgICAvLyB0byB0aGUgY3Jhc2hl
cyBzZWVuIGluIGh0dHA6Ly93ZWJraXQub3JnL2IvNTI4MTkuICBGb3Igbm93LCB0cnkgdG8KLSAg
ICAvLyBuYXJyb3cgaXQgZG93biB3aXRoIGEgbW9yZSBzcGVjaWZpYyBjcmFzaC4KLSAgICBpZiAo
IWl0ZW0xKQotICAgICAgICBDUkFTSCgpOwotICAgIGlmICghaXRlbTIpCi0gICAgICAgIENSQVNI
KCk7Ci0KICAgICAvLyBJZiB0aGUgaXRlbSB3ZSdyZSBnb2luZyB0byBpcyBhIGNsb25lIG9mIHRo
ZSBpdGVtIHdlJ3JlIGF0LCB0aGVuIHdlIGRvCiAgICAgLy8gbm90IG5lZWQgdG8gbG9hZCBpdCBh
Z2Fpbi4gIFRoZSBjdXJyZW50IGZyYW1lIHRyZWUgYW5kIHRoZSBmcmFtZSB0cmVlCiAgICAgLy8g
c25hcHNob3QgaW4gdGhlIGl0ZW0gaGF2ZSB0byBtYXRjaC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oCShyZXZpc2lvbiA3NzM0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw4
ICs4OSw4IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSXRl
bSgpOwogICAgIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUl0ZW1UcmVlKEZyYW1lKiB0
YXJnZXRGcmFtZSwgYm9vbCBjbGlwQXRUYXJnZXQpOwogCi0gICAgdm9pZCByZWN1cnNpdmVTZXRQ
cm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0qLCBIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUp
OwotICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBIaXN0b3J5SXRlbSos
IEZyYW1lTG9hZFR5cGUpOworICAgIHZvaWQgcmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKFBh
c3NSZWZQdHI8SGlzdG9yeUl0ZW0+LCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiwgRnJhbWVMb2Fk
VHlwZSk7CisgICAgdm9pZCByZWN1cnNpdmVHb1RvSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVt
PiwgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4sIEZyYW1lTG9hZFR5cGUpOwogICAgIHZvaWQgcmVj
dXJzaXZlVXBkYXRlRm9yQ29tbWl0KCk7CiAgICAgYm9vbCBpdGVtc0FyZUNsb25lcyhIaXN0b3J5
SXRlbSosIEhpc3RvcnlJdGVtKikgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50RnJhbWVzTWF0Y2hJ
dGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gNzczNTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTAyLTAxICBDaGFybGllIFJlaXMgIDxj
cmVpc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ3Jhc2ggaW4gV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6Oml0ZW1zQXJl
Q2xvbmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MjgxOQorCisgICAgICAgIFJlbW92ZXMgdW5uZWVkZWQgc2FuaXR5IGNoZWNrcyB1c2VkIGZvciBk
aWFnbm9zaW5nIGEgbWVtb3J5IGVycm9yLgorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5j
cHA6CisKIDIwMTEtMDItMDEgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDc3MzQ0KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg2
LDE3ICs4ODYsNiBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEhpc3RvcnlJdGVtKGNvbnN0CiAg
ICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBoaXN0b3J5SXRlbSA9IFBhc3NSZWZQdHI8SGlzdG9yeUl0
ZW0+KGl0ZW0pOwogICAgIEFTU0VSVChoaXN0b3J5SXRlbS5nZXQoKSk7CiAKLSAgICAvLyBTYW5p
dHkgY2hlY2sgZm9yIGh0dHA6Ly93ZWJraXQub3JnL2IvNTI4MTkuICBJdCBhcHBlYXJzIHRoYXQg
c29tZSBjaGlsZAotICAgIC8vIGl0ZW1zIG9mIHRoaXMgaXRlbSBtaWdodCBiZSBudWxsLiAgVHJ5
IHZhbGlkYXRpbmcganVzdCB0aGUgZmlyc3Qgc2V0IG9mCi0gICAgLy8gY2hpbGRyZW4gaW4gYW4g
YXR0ZW1wdCB0byBjYXRjaCBpdCBlYXJseS4KLSAgICBjb25zdCBIaXN0b3J5SXRlbVZlY3RvciYg
Y2hpbGRJdGVtcyA9IGhpc3RvcnlJdGVtLT5jaGlsZHJlbigpOwotICAgIGludCBzaXplID0gY2hp
bGRJdGVtcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gY2hpbGRJdGVtID0gY2hpbGRJdGVtc1tpXS5nZXQoKTsK
LSAgICAgIGlmICghY2hpbGRJdGVtLmdldCgpKQotICAgICAgICBDUkFTSCgpOwotICAgIH0KLQog
ICAgIC8vIElmIHRoZXJlIGlzIG5vIGN1cnJlbnRJdGVtLCB3aGljaCBoYXBwZW5zIHdoZW4gd2Ug
YXJlIG5hdmlnYXRpbmcgaW4KICAgICAvLyBzZXNzaW9uIGhpc3RvcnkgYWZ0ZXIgYSBjcmFzaCwg
d2UgbmVlZCB0byBtYW51ZmFjdHVyZSBvbmUgb3RoZXJ3aXNlIFdlYktpdAogICAgIC8vIGhvYXJr
cy4gVGhpcyBpcyBwcm9iYWJseSB0aGUgd3JvbmcgdGhpbmcgdG8gZG8sIGJ1dCBpdCBzZWVtcyB0
byB3b3JrLgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzczNTUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMi0wMSAgQ2hhcmxpZSBS
ZWlzICA8Y3JlaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENyYXNoIGluIFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpp
dGVtc0FyZUNsb25lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTI4MTkKKworICAgICAgICBUZXN0cyB0aGF0IHdlIGRvIG5vdCBjcmFzaCB3aGVuIG5h
dmlnYXRpbmcgYXdheSBmcm9tIGFuIGVycm9yIHBhZ2UuCisKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L25hdmlnYXRpb24vcG9zdC1mcmFtZXMtZ29iYWNrYW5kZm9yd2FyZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9wb3N0LWZyYW1lcy1nb2JhY2th
bmRmb3J3YXJkLmh0bWw6IEFkZGVkLgorCiAyMDExLTAyLTAxICBNaWhhaSBQYXJwYXJpdGEgIDxt
aWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29u
LgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Bvc3QtZnJhbWVzLWdv
YmFja2FuZGZvcndhcmQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9wb3N0LWZyYW1lcy1nb2JhY2thbmRmb3J3YXJkLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9w
b3N0LWZyYW1lcy1nb2JhY2thbmRmb3J3YXJkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxOCBAQAorVGVzdHMgdGhhdCBnb2luZyBiYWNrL2ZvcndhcmQgb24gYW4gZXJyb3Ig
cGFnZSBkb2VzIG5vdCBjcmFzaC4gV2UgZ28gYmFjayB0byBhIG5vbi1jYWNoZWQgZm9ybSBzdWJt
aXNzaW9uIHRvIHRyaWdnZXIgdGhlIGVycm9yIHBhZ2UuCisKKyAgCisKKworLS0tLS0tLS0KK0Zy
YW1lOiAndGFyZ2V0LWZyYW1lJworLS0tLS0tLS0KKworCis9PT09PT09PT09PT09PSBCYWNrIEZv
cndhcmQgTGlzdCA9PT09PT09PT09PT09PQorICAgICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAv
bmF2aWdhdGlvbi9wb3N0LWZyYW1lcy1nb2JhY2thbmRmb3J3YXJkLmh0bWwgICoqbmF2IHRhcmdl
dCoqCisgICAgICAgICAgICBhYm91dDpibGFuayAoaW4gZnJhbWUgInRhcmdldC1mcmFtZSIpCitj
dXJyLT4gIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Bvc3QtZnJhbWVzLWdvYmFj
a2FuZGZvcndhcmQuaHRtbAorICAgICAgICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3Bvc3RyZXN1bHQucGwgKGluIGZyYW1lICJ0YXJnZXQtZnJhbWUiKSAg
KipuYXYgdGFyZ2V0KioKKyAgICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24v
cG9zdC1mcmFtZXMtZ29iYWNrYW5kZm9yd2FyZC5odG1sCisgICAgICAgICAgICBodHRwOi8vMTI3
LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvcG9zdHJlc3VsdC5wbCAoaW4gZnJhbWUg
InRhcmdldC1mcmFtZSIpICAqKm5hdiB0YXJnZXQqKgorPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9wb3N0LWZyYW1lcy1nb2JhY2thbmRmb3J3YXJkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Bvc3QtZnJhbWVzLWdvYmFja2FuZGZv
cndhcmQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9wb3N0LWZyYW1lcy1nb2JhY2thbmRmb3J3YXJkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQ+Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBDaGlsZEZyYW1l
c0FzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQmFja0ZvcndhcmRMaXN0
KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEJhY2tGb3J3YXJkTGlzdCgpOworCisg
ICAgLy8gU3VibWl0IHRoZSBmb3JtIHR3aWNlLgorICAgIGxheW91dFRlc3RDb250cm9sbGVyLnF1
ZXVlTG9hZGluZ1NjcmlwdCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1Ym1pdC1pbnB1dCcp
LmNsaWNrKCk7Iik7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIucXVldWVMb2FkaW5nU2NyaXB0
KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VibWl0LWlucHV0JykuY2xpY2soKTsiKTsKKwor
ICAgIC8vIEdvIGJhY2ssIHNob3dpbmcgYW4gZXJyb3IgYmVjYXVzZSB0aGUgUE9TVCByZXN1bHQg
aXMgbm90IGNhY2hlZC4KKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5xdWV1ZUJhY2tOYXZpZ2F0
aW9uKDEpOworCisgICAgLy8gR28gYmFjayBhZ2FpbiwgZW5zdXJpbmcgd2UgZG9uJ3QgY3Jhc2gu
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIucXVldWVCYWNrTmF2aWdhdGlvbigxKTsKK30KKwor
PC9zY3JpcHQ+CisKKzxwPlRlc3RzIHRoYXQgZ29pbmcgYmFjay9mb3J3YXJkIG9uIGFuIGVycm9y
IHBhZ2UgZG9lcyBub3QgY3Jhc2guICBXZSBnbyBiYWNrIHRvIGEgbm9uLWNhY2hlZCBmb3JtIHN1
Ym1pc3Npb24gdG8gdHJpZ2dlciB0aGUgZXJyb3IgcGFnZS48L3A+CisKKzxmb3JtIGlkPSJ0aGUt
Zm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249InJlc291cmNlcy9wb3N0cmVzdWx0LnBsIiB0YXJn
ZXQ9InRhcmdldC1mcmFtZSI+CisgIDxpbnB1dCBuYW1lPSJ0aGUtaW5wdXQiIHZhbHVlPSJpbnB1
dCB2YWx1ZSBnb2VzIGhlcmUiPgorICA8aW5wdXQgaWQ9InN1Ym1pdC1pbnB1dCIgdHlwZT0ic3Vi
bWl0IiBuYW1lPSJzdWJtaXR3aXRocG9zdCIgdmFsdWU9IlN1Ym1pdCBXaXRoIFBPU1QiPgorPC9m
b3JtPgorCis8aWZyYW1lIG5hbWU9InRhcmdldC1mcmFtZSIgc3JjPSJhYm91dDpibGFuayI+PC9p
ZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81018</attachid>
            <date>2011-02-02 18:08:19 -0800</date>
            <delta_ts>2011-02-03 15:49:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52819-20110202180818.patch</filename>
            <type>text/plain</type>
            <size>11830</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzU1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDItMDEgIENoYXJsaWUg
UmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6
aXRlbXNBcmVDbG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyODE5CisKKyAgICAgICAgQXZvaWRzIGRlbGV0aW5nIGEgSGlzdG9yeUl0ZW0gdGhh
dCBpcyBzdGlsbCBpbiB1c2UgYW5kIGVuc3VyZXMgdGhhdAorICAgICAgICBlcnJvciBwYWdlcyBh
cmUgY29tbWl0ZWQgb24gYmFjay9mb3J3YXJkIG5hdmlnYXRpb25zLgorICAgICAgICBBbHNvIHJl
bW92ZXMgdW5uZWVkZWQgc2FuaXR5IGNoZWNrcyB1c2VkIGZvciBkaWFnbm9zaW5nIHRoZSBwcm9i
bGVtLgorCisgICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaDoKKwogMjAxMS0wMi0wMSAgTWloYWkgUGFycGFy
aXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBS
b2JpbnNvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gNzczNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlzdG9yeQogICAgIC8vIFNldCB0aGUgQkYgY3Vyc29y
IGJlZm9yZSBjb21taXQsIHdoaWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNrL2Zv
cndhcmQgYWdhaW4uCiAgICAgLy8gLSBwbHVzLCBpdCBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUg
dG9wIGxldmVsIG9mIHRoZSBvcGVyYXRpb24gdGhyb3VnaCB0aGUgZnJhbWV0cmVlLAogICAgIC8v
IGFzIG9wcG9zZWQgdG8gaGFwcGVuaW5nIGZvciBzb21lL29uZSBvZiB0aGUgcGFnZSBjb21taXRz
IHRoYXQgbWlnaHQgaGFwcGVuIHNvb24KLSAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBw
YWdlLT5iYWNrRm9yd2FyZCgpLT5jdXJyZW50SXRlbSgpOyAgICAKKyAgICBSZWZQdHI8SGlzdG9y
eUl0ZW0+IGN1cnJlbnRJdGVtID0gcGFnZS0+YmFja0ZvcndhcmQoKS0+Y3VycmVudEl0ZW0oKTsK
ICAgICBwYWdlLT5iYWNrRm9yd2FyZCgpLT5zZXRDdXJyZW50SXRlbSh0YXJnZXRJdGVtKTsKICAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwogICAgIHBhZ2UtPnNl
dEdsb2JhbEhpc3RvcnlJdGVtKCghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoKSkgPyAwIDogdGFyZ2V0SXRlbSk7CkBAIC00MDIsOCArNDAyLDkgQEAgdm9pZCBI
aXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQ29tbWl0KAogICAgICAgICBMT0coSGlzdG9yeSwg
IldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBjb21taXQgaW4gZnJhbWUgJXMi
LCBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsK
ICNlbmRpZgogICAgIEZyYW1lTG9hZFR5cGUgdHlwZSA9IGZyYW1lTG9hZGVyLT5sb2FkVHlwZSgp
OwotICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUodHlwZSkgfHwKLSAgICAgICAgKCh0eXBl
ID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwgdHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJv
bU9yaWdpbikgJiYgIWZyYW1lTG9hZGVyLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnVu
cmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKSkgeworICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5
cGUodHlwZSkKKyAgICAgICAgfHwgdHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVwbGFjZQorICAgICAg
ICB8fCAoKHR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCB8fCB0eXBlID09IEZyYW1lTG9hZFR5
cGVSZWxvYWRGcm9tT3JpZ2luKSAmJiAhZnJhbWVMb2FkZXItPnByb3Zpc2lvbmFsRG9jdW1lbnRM
b2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpKSB7CiAgICAgICAgIC8vIE9uY2Ug
Y29tbWl0dGVkLCB3ZSB3YW50IHRvIHVzZSBjdXJyZW50IGl0ZW0gZm9yIHNhdmluZyBEb2NTdGF0
ZSwgYW5kCiAgICAgICAgIC8vIHRoZSBwcm92aXNpb25hbCBpdGVtIGZvciByZXN0b3Jpbmcgc3Rh
dGUuCiAgICAgICAgIC8vIE5vdGUgcHJldmlvdXNJdGVtIG11c3QgYmUgc2V0IGJlZm9yZSB3ZSBj
bG9zZSB0aGUgVVJMLCB3aGljaCB3aWxsCkBAIC02MDgsMzAgKzYwOSwyMCBAQCBQYXNzUmVmUHRy
PEhpc3RvcnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlCiAvLyB0cmFja2luZyB3aGV0aGVyIGVhY2gg
ZnJhbWUgYWxyZWFkeSBoYXMgdGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVxdWVzdHMuICBJZiB0aGVy
ZSBpcwogLy8gYSBtYXRjaCwgd2Ugc2V0IHRoZSBwcm92aXNpb25hbCBpdGVtIGFuZCByZWN1cnNl
LiAgT3RoZXJ3aXNlIHdlIHdpbGwgcmVsb2FkIHRoYXQKIC8vIGZyYW1lIGFuZCBhbGwgaXRzIGtp
ZHMgaW4gcmVjdXJzaXZlR29Ub0l0ZW0uCi12b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNp
dmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9t
SXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJz
aXZlU2V0UHJvdmlzaW9uYWxJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0sIFBhc3NS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiB7CiAgICAg
QVNTRVJUKGl0ZW0pOwogICAgIEFTU0VSVChmcm9tSXRlbSk7CiAKLSAgICBpZiAoaXRlbXNBcmVD
bG9uZXMoaXRlbSwgZnJvbUl0ZW0pKSB7CisgICAgaWYgKGl0ZW1zQXJlQ2xvbmVzKGl0ZW0uZ2V0
KCksIGZyb21JdGVtLmdldCgpKSkgewogICAgICAgICAvLyBTZXQgcHJvdmlzaW9uYWwgaXRlbSwg
d2hpY2ggd2lsbCBiZSBjb21taXR0ZWQgaW4gcmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0LgotICAg
ICAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9IGl0ZW07CisgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRl
bT4gdGFyZ2V0SXRlbSA9IGl0ZW07CisgICAgICAgIG1fcHJvdmlzaW9uYWxJdGVtID0gdGFyZ2V0
SXRlbTsKIAotICAgICAgICBjb25zdCBIaXN0b3J5SXRlbVZlY3RvciYgY2hpbGRJdGVtcyA9IGl0
ZW0tPmNoaWxkcmVuKCk7CisgICAgICAgIGNvbnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZEl0
ZW1zID0gdGFyZ2V0SXRlbS0+Y2hpbGRyZW4oKTsKIAogICAgICAgICBpbnQgc2l6ZSA9IGNoaWxk
SXRlbXMuc2l6ZSgpOwogCi0gICAgICAgIC8vIFNhbml0eSBjaGVja3MgZm9yIGh0dHA6Ly93ZWJr
aXQub3JnL2IvNTI4MTkuCi0gICAgICAgIGlmIChzaXplID4gMCkgewotICAgICAgICAgICAgLy8g
ZnJvbUl0ZW0gc2hvdWxkIGhhdmUgc2FtZSBudW1iZXIgb2YgY2hpbGRyZW4gYWNjb3JkaW5nIHRv
IGhhc1NhbWVGcmFtZXMsCi0gICAgICAgICAgICAvLyBidXQgY3Jhc2ggZHVtcHMgc3VnZ2VzdCBp
dCBtaWdodCBoYXZlIDAuCi0gICAgICAgICAgICBpZiAoIWZyb21JdGVtLT5jaGlsZHJlbigpLnNp
emUoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgLy8gaXRlbXNBcmVD
bG9uZXMgY2hlY2tlZCBmcm9tSXRlbS0+aGFzU2FtZUZyYW1lcyhpdGVtKS4gQ2hlY2sgdmljZSB2
ZXJzYS4KLSAgICAgICAgICAgIGlmICghaXRlbS0+aGFzU2FtZUZyYW1lcyhmcm9tSXRlbSkpCi0g
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCiAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgY2hpbGRGcmFtZU5hbWUg
PSBjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKTsKICAgICAgICAgICAgIEhpc3RvcnlJdGVtKiBmcm9t
Q2hpbGRJdGVtID0gZnJvbUl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGRGcmFtZU5hbWUp
OwpAQCAtNjQ1LDEyICs2MzYsMTIgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZl
U2V0UHJvdgogCiAvLyBXZSBub3cgdHJhdmVyc2UgdGhlIGZyYW1lIHRyZWUgYW5kIGl0ZW0gdHJl
ZSBhIHNlY29uZCB0aW1lLCBsb2FkaW5nIGZyYW1lcyB0aGF0CiAvLyBkbyBoYXZlIHRoZSBjb250
ZW50IHRoZSBpdGVtIHJlcXVlc3RzLgotdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZl
R29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRlbSwgRnJhbWVM
b2FkVHlwZSB0eXBlKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0o
UGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSwgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gZnJv
bUl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoaXRlbSk7CiAgICAgQVNT
RVJUKGZyb21JdGVtKTsKIAotICAgIGlmIChpdGVtc0FyZUNsb25lcyhpdGVtLCBmcm9tSXRlbSkp
IHsKKyAgICBpZiAoaXRlbXNBcmVDbG9uZXMoaXRlbS5nZXQoKSwgZnJvbUl0ZW0uZ2V0KCkpKSB7
CiAgICAgICAgIC8vIEp1c3QgaXRlcmF0ZSBvdmVyIHRoZSByZXN0LCBsb29raW5nIGZvciBmcmFt
ZXMgdG8gbmF2aWdhdGUuCiAgICAgICAgIGNvbnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZEl0
ZW1zID0gaXRlbS0+Y2hpbGRyZW4oKTsKIApAQCAtNjY0LDIwICs2NTUsMTIgQEAgdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZQogICAgICAgICAgICAgY2hpbGRGcmFtZS0+
bG9hZGVyKCktPmhpc3RvcnkoKS0+cmVjdXJzaXZlR29Ub0l0ZW0oY2hpbGRJdGVtc1tpXS5nZXQo
KSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZEl0ZW0oaXRlbSwgdHlwZSk7CisgICAgICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5sb2FkSXRlbShpdGVtLmdldCgpLCB0eXBlKTsKICAgICB9CiB9CiAKIGJv
b2wgSGlzdG9yeUNvbnRyb2xsZXI6Oml0ZW1zQXJlQ2xvbmVzKEhpc3RvcnlJdGVtKiBpdGVtMSwg
SGlzdG9yeUl0ZW0qIGl0ZW0yKSBjb25zdAogewotICAgIC8vIEl0IGFwcGVhcnMgdGhhdCBvbmUg
b2YgdGhlIGl0ZW1zIGNhbiBiZSBudWxsIGluIHJlbGVhc2UgYnVpbGRzLCBsZWFkaW5nCi0gICAg
Ly8gdG8gdGhlIGNyYXNoZXMgc2VlbiBpbiBodHRwOi8vd2Via2l0Lm9yZy9iLzUyODE5LiAgRm9y
IG5vdywgdHJ5IHRvCi0gICAgLy8gbmFycm93IGl0IGRvd24gd2l0aCBhIG1vcmUgc3BlY2lmaWMg
Y3Jhc2guCi0gICAgaWYgKCFpdGVtMSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBpZiAoIWl0ZW0y
KQotICAgICAgICBDUkFTSCgpOwotCiAgICAgLy8gSWYgdGhlIGl0ZW0gd2UncmUgZ29pbmcgdG8g
aXMgYSBjbG9uZSBvZiB0aGUgaXRlbSB3ZSdyZSBhdCwgdGhlbiB3ZSBkbwogICAgIC8vIG5vdCBu
ZWVkIHRvIGxvYWQgaXQgYWdhaW4uICBUaGUgY3VycmVudCBmcmFtZSB0cmVlIGFuZCB0aGUgZnJh
bWUgdHJlZQogICAgIC8vIHNuYXBzaG90IGluIHRoZSBpdGVtIGhhdmUgdG8gbWF0Y2guCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAkocmV2aXNpb24gNzcz
NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODksOCArODksOCBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8SGlzdG9y
eUl0ZW0+IGNyZWF0ZUl0ZW0oKTsKICAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVhdGVJ
dGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KTsKIAotICAgIHZv
aWQgcmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKEhpc3RvcnlJdGVtKiwgSGlzdG9yeUl0ZW0q
LCBGcmFtZUxvYWRUeXBlKTsKLSAgICB2b2lkIHJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVt
KiwgSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICB2b2lkIHJlY3Vyc2l2ZVNldFBy
b3Zpc2lvbmFsSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiwgUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4sIEZyYW1lTG9hZFR5cGUpOworICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oUGFzc1Jl
ZlB0cjxIaXN0b3J5SXRlbT4sIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+LCBGcmFtZUxvYWRUeXBl
KTsKICAgICB2b2lkIHJlY3Vyc2l2ZVVwZGF0ZUZvckNvbW1pdCgpOwogICAgIGJvb2wgaXRlbXNB
cmVDbG9uZXMoSGlzdG9yeUl0ZW0qLCBIaXN0b3J5SXRlbSopIGNvbnN0OwogICAgIGJvb2wgY3Vy
cmVudEZyYW1lc01hdGNoSXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzU2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wMi0wMSAg
Q2hhcmxpZSBSZWlzICA8Y3JlaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyYXNoIGluIFdlYkNvcmU6Okhpc3RvcnlDb250
cm9sbGVyOjppdGVtc0FyZUNsb25lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTI4MTkKKworICAgICAgICBSZW1vdmVzIHVubmVlZGVkIHNhbml0eSBj
aGVja3MgdXNlZCBmb3IgZGlhZ25vc2luZyBhIG1lbW9yeSBlcnJvci4KKworICAgICAgICAqIHNy
Yy9XZWJGcmFtZUltcGwuY3BwOgorCiAyMDExLTAyLTAxICBLZW50IFRhbXVyYSAgPHRrZW50QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA3NzM0
NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg4NiwxNyArODg2LDYgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmxvYWRIaXN0
b3J5SXRlbShjb25zdAogICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaGlzdG9yeUl0ZW0gPSBQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPihpdGVtKTsKICAgICBBU1NFUlQoaGlzdG9yeUl0ZW0uZ2V0KCkp
OwogCi0gICAgLy8gU2FuaXR5IGNoZWNrIGZvciBodHRwOi8vd2Via2l0Lm9yZy9iLzUyODE5LiAg
SXQgYXBwZWFycyB0aGF0IHNvbWUgY2hpbGQKLSAgICAvLyBpdGVtcyBvZiB0aGlzIGl0ZW0gbWln
aHQgYmUgbnVsbC4gIFRyeSB2YWxpZGF0aW5nIGp1c3QgdGhlIGZpcnN0IHNldCBvZgotICAgIC8v
IGNoaWxkcmVuIGluIGFuIGF0dGVtcHQgdG8gY2F0Y2ggaXQgZWFybHkuCi0gICAgY29uc3QgSGlz
dG9yeUl0ZW1WZWN0b3ImIGNoaWxkSXRlbXMgPSBoaXN0b3J5SXRlbS0+Y2hpbGRyZW4oKTsKLSAg
ICBpbnQgc2l6ZSA9IGNoaWxkSXRlbXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGNoaWxkSXRlbSA9IGNoaWxk
SXRlbXNbaV0uZ2V0KCk7Ci0gICAgICBpZiAoIWNoaWxkSXRlbS5nZXQoKSkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICB9Ci0KICAgICAvLyBJZiB0aGVyZSBpcyBubyBjdXJyZW50SXRlbSwgd2hpY2gg
aGFwcGVucyB3aGVuIHdlIGFyZSBuYXZpZ2F0aW5nIGluCiAgICAgLy8gc2Vzc2lvbiBoaXN0b3J5
IGFmdGVyIGEgY3Jhc2gsIHdlIG5lZWQgdG8gbWFudWZhY3R1cmUgb25lIG90aGVyd2lzZSBXZWJL
aXQKICAgICAvLyBob2Fya3MuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHdyb25nIHRoaW5nIHRvIGRv
LCBidXQgaXQgc2VlbXMgdG8gd29yay4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzU1KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEt
MDItMDEgIENoYXJsaWUgUmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpIaXN0
b3J5Q29udHJvbGxlcjo6aXRlbXNBcmVDbG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUyODE5CisKKyAgICAgICAgVGVzdHMgdGhhdCBuYXZpZ2F0
aW5nIGF3YXkgZnJvbSBhbiBlcnJvciBwYWdlIHdvcmtzLgorCisgICAgICAgICogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL3Bvc3QtZnJhbWVzLWdvYmFja2FuZGZvcndhcmQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcG9zdC1mcmFtZXMtZ29iYWNr
YW5kZm9yd2FyZC5odG1sOiBBZGRlZC4KKwogMjAxMS0wMi0wMSAgTWloYWkgUGFycGFyaXRhICA8
bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNv
bi4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wb3N0LWZyYW1lcy1n
b2JhY2thbmRmb3J3YXJkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vcG9zdC1mcmFtZXMtZ29iYWNrYW5kZm9yd2FyZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
cG9zdC1mcmFtZXMtZ29iYWNrYW5kZm9yd2FyZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTYgQEAKK1Rlc3RzIHRoYXQgZ29pbmcgYmFjay9mb3J3YXJkIG9uIGFuIGVycm9y
IHBhZ2UgZG9lcyBub3QgY3Jhc2guIFdlIGdvIGJhY2sgdG8gYSBub24tY2FjaGVkIGZvcm0gc3Vi
bWlzc2lvbiB0byB0cmlnZ2VyIHRoZSBlcnJvciBwYWdlLgorCisgIAorCisKKy0tLS0tLS0tCitG
cmFtZTogJ3RhcmdldC1mcmFtZScKKy0tLS0tLS0tCisKKworPT09PT09PT09PT09PT0gQmFjayBG
b3J3YXJkIExpc3QgPT09PT09PT09PT09PT0KK2N1cnItPiAgaHR0cDovLzEyNy4wLjAuMTo4MDAw
L25hdmlnYXRpb24vcG9zdC1mcmFtZXMtZ29iYWNrYW5kZm9yd2FyZC5odG1sICAqKm5hdiB0YXJn
ZXQqKgorICAgICAgICAgICAgYWJvdXQ6YmxhbmsgKGluIGZyYW1lICJ0YXJnZXQtZnJhbWUiKQor
ICAgICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9wb3N0LWZyYW1lcy1nb2Jh
Y2thbmRmb3J3YXJkLmh0bWwKKyAgICAgICAgICAgIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL3Jlc291cmNlcy9wb3N0cmVzdWx0LnBsIChpbiBmcmFtZSAidGFyZ2V0LWZyYW1lIikg
ICoqbmF2IHRhcmdldCoqCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Bvc3QtZnJh
bWVzLWdvYmFja2FuZGZvcndhcmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vcG9zdC1mcmFtZXMtZ29iYWNrYW5kZm9yd2FyZC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Bvc3QtZnJhbWVz
LWdvYmFja2FuZGZvcndhcmQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQmFja0ZvcndhcmRMaXN0KCk7CisKKyAgICAvLyBTdWJtaXQgdGhl
IGZvcm0gdHdpY2UuCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIucXVldWVMb2FkaW5nU2NyaXB0
KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VibWl0LWlucHV0JykuY2xpY2soKTsiKTsKKwor
ICAgIC8vIEdvIGJhY2sgYW5kIHRoZW4gZm9yd2FyZCwgc2hvd2luZyBhbiBlcnJvciBiZWNhdXNl
IHRoZSBQT1NUIHJlc3VsdCBpcyBub3QgY2FjaGVkLgorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LnF1ZXVlQmFja05hdmlnYXRpb24oMSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIucXVldWVG
b3J3YXJkTmF2aWdhdGlvbigxKTsKKworICAgIC8vIEdvIGJhY2sgYWdhaW4sIGVuc3VyaW5nIHdl
IGdldCB0byB0aGUgZmlyc3QgcGFnZS4KKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5xdWV1ZUJh
Y2tOYXZpZ2F0aW9uKDEpOworfQorCis8L3NjcmlwdD4KKworPHA+VGVzdHMgdGhhdCBnb2luZyBi
YWNrIG9uIGFuIGVycm9yIHBhZ2Ugd29ya3MuICBXZSBnbyBiYWNrIHRvIGEgbm9uLWNhY2hlZCBm
b3JtIHN1Ym1pc3Npb24gdG8gdHJpZ2dlciB0aGUgZXJyb3IgcGFnZS48L3A+CisKKzxmb3JtIGlk
PSJ0aGUtZm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249InJlc291cmNlcy9wb3N0cmVzdWx0LnBs
IiB0YXJnZXQ9InRhcmdldC1mcmFtZSI+CisgIDxpbnB1dCBuYW1lPSJ0aGUtaW5wdXQiIHZhbHVl
PSJpbnB1dCB2YWx1ZSBnb2VzIGhlcmUiPgorICA8aW5wdXQgaWQ9InN1Ym1pdC1pbnB1dCIgdHlw
ZT0ic3VibWl0IiBuYW1lPSJzdWJtaXR3aXRocG9zdCIgdmFsdWU9IlN1Ym1pdCBXaXRoIFBPU1Qi
PgorPC9mb3JtPgorCis8aWZyYW1lIG5hbWU9InRhcmdldC1mcmFtZSIgc3JjPSJhYm91dDpibGFu
ayI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81128</attachid>
            <date>2011-02-03 15:49:15 -0800</date>
            <delta_ts>2011-02-04 14:32:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52819-20110203154913.patch</filename>
            <type>text/plain</type>
            <size>11929</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzU1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDItMDMgIENoYXJsaWUg
UmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6
aXRlbXNBcmVDbG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyODE5CisKKyAgICAgICAgQXZvaWRzIGRlbGV0aW5nIHRoZSBjdXJyZW50IEhpc3Rv
cnlJdGVtIHdoaWxlIGl0IGlzIHN0aWxsIGluIHVzZS4KKyAgICAgICAgRW5zdXJlcyB0aGF0IHBy
b3Zpc2lvbmFsIGl0ZW1zIGFyZSBjb21taXR0ZWQgZm9yIHNhbWUgZG9jdW1lbnQgbmF2aWdhdGlv
bnMuCisgICAgICAgIEVuc3VyZXMgdGhhdCBlcnJvciBwYWdlcyBhcmUgY29tbWl0dGVkIG9uIGJh
Y2svZm9yd2FyZCBuYXZpZ2F0aW9ucy4KKyAgICAgICAgQWxzbyByZW1vdmVzIHVubmVlZGVkIHNh
bml0eSBjaGVja3MgdXNlZCBmb3IgZGlhZ25vc2luZyB0aGUgcHJvYmxlbS4KKworICAgICAgICAq
IGxvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHA6CisgICAgICAgICogbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmg6CisKIDIwMTEtMDItMDEgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc3
MzQ0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6Omdv
VG9JdGVtKEhpc3RvcnkKICAgICAvLyBTZXQgdGhlIEJGIGN1cnNvciBiZWZvcmUgY29tbWl0LCB3
aGljaCBsZXRzIHRoZSB1c2VyIHF1aWNrbHkgY2xpY2sgYmFjay9mb3J3YXJkIGFnYWluLgogICAg
IC8vIC0gcGx1cywgaXQgb25seSBtYWtlcyBzZW5zZSBmb3IgdGhlIHRvcCBsZXZlbCBvZiB0aGUg
b3BlcmF0aW9uIHRocm91Z2ggdGhlIGZyYW1ldHJlZSwKICAgICAvLyBhcyBvcHBvc2VkIHRvIGhh
cHBlbmluZyBmb3Igc29tZS9vbmUgb2YgdGhlIHBhZ2UgY29tbWl0cyB0aGF0IG1pZ2h0IGhhcHBl
biBzb29uCi0gICAgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtID0gcGFnZS0+YmFja0ZvcndhcmQo
KS0+Y3VycmVudEl0ZW0oKTsgICAgCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50SXRl
bSA9IHBhZ2UtPmJhY2tGb3J3YXJkKCktPmN1cnJlbnRJdGVtKCk7CiAgICAgcGFnZS0+YmFja0Zv
cndhcmQoKS0+c2V0Q3VycmVudEl0ZW0odGFyZ2V0SXRlbSk7CiAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKICAgICBwYWdlLT5zZXRHbG9iYWxIaXN0b3J5SXRl
bSgoIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpID8gMCA6
IHRhcmdldEl0ZW0pOwpAQCAtMjQ1LDkgKzI0NSw5IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OmdvVG9JdGVtKEhpc3RvcnkKICAgICAvLyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdHJ5aW5n
IHRvIG5hdmlnYXRlIHRoZSBkZXNpcmVkIGZyYW1lLCBiZWNhdXNlIHNvbWUKICAgICAvLyBuYXZp
Z2F0aW9ucyBjYW4gY29tbWl0IGltbWVkaWF0ZWx5IChzdWNoIGFzIGFib3V0OmJsYW5rKS4gIFdl
IG11c3QgYmUgc3VyZSB0aGF0CiAgICAgLy8gYWxsIGZyYW1lcyBoYXZlIHByb3Zpc2lvbmFsIGl0
ZW1zIHNldCBiZWZvcmUgdGhlIGNvbW1pdC4KLSAgICByZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0
ZW0odGFyZ2V0SXRlbSwgY3VycmVudEl0ZW0sIHR5cGUpOworICAgIHJlY3Vyc2l2ZVNldFByb3Zp
c2lvbmFsSXRlbSh0YXJnZXRJdGVtLCBjdXJyZW50SXRlbS5nZXQoKSwgdHlwZSk7CiAgICAgLy8g
Tm93IHRoYXQgYWxsIG90aGVyIGZyYW1lcyBoYXZlIHByb3Zpc2lvbmFsIGl0ZW1zLCBkbyB0aGUg
YWN0dWFsIG5hdmlnYXRpb24uCi0gICAgcmVjdXJzaXZlR29Ub0l0ZW0odGFyZ2V0SXRlbSwgY3Vy
cmVudEl0ZW0sIHR5cGUpOworICAgIHJlY3Vyc2l2ZUdvVG9JdGVtKHRhcmdldEl0ZW0sIGN1cnJl
bnRJdGVtLmdldCgpLCB0eXBlKTsKIH0KIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRl
Rm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCkKQEAgLTQwMiw4ICs0MDIsOSBAQCB2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjp1cGRhdGVGb3JDb21taXQoCiAgICAgICAgIExPRyhIaXN0b3J5LCAiV2Vi
Q29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGNvbW1pdCBpbiBmcmFtZSAlcyIsIGZy
YW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwogI2Vu
ZGlmCiAgICAgRnJhbWVMb2FkVHlwZSB0eXBlID0gZnJhbWVMb2FkZXItPmxvYWRUeXBlKCk7Ci0g
ICAgaWYgKGlzQmFja0ZvcndhcmRMb2FkVHlwZSh0eXBlKSB8fAotICAgICAgICAoKHR5cGUgPT0g
RnJhbWVMb2FkVHlwZVJlbG9hZCB8fCB0eXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3Jp
Z2luKSAmJiAhZnJhbWVMb2FkZXItPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFj
aGFibGVVUkwoKS5pc0VtcHR5KCkpKSB7CisgICAgaWYgKGlzQmFja0ZvcndhcmRMb2FkVHlwZSh0
eXBlKQorICAgICAgICB8fCBpc1JlcGxhY2VMb2FkVHlwZVdpdGhQcm92aXNpb25hbEl0ZW0odHlw
ZSkKKyAgICAgICAgfHwgKCh0eXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwgdHlwZSA9PSBG
cmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgJiYgIWZyYW1lTG9hZGVyLT5wcm92aXNpb25h
bERvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKSkgewogICAgICAg
ICAvLyBPbmNlIGNvbW1pdHRlZCwgd2Ugd2FudCB0byB1c2UgY3VycmVudCBpdGVtIGZvciBzYXZp
bmcgRG9jU3RhdGUsIGFuZAogICAgICAgICAvLyB0aGUgcHJvdmlzaW9uYWwgaXRlbSBmb3IgcmVz
dG9yaW5nIHN0YXRlLgogICAgICAgICAvLyBOb3RlIHByZXZpb3VzSXRlbSBtdXN0IGJlIHNldCBi
ZWZvcmUgd2UgY2xvc2UgdGhlIFVSTCwgd2hpY2ggd2lsbApAQCAtNDIzLDYgKzQyNCwxMyBAQCB2
b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JDb21taXQoCiAgICAgfQogfQogCitib29s
IEhpc3RvcnlDb250cm9sbGVyOjppc1JlcGxhY2VMb2FkVHlwZVdpdGhQcm92aXNpb25hbEl0ZW0o
RnJhbWVMb2FkVHlwZSB0eXBlKQoreworICAgIC8vIEdvaW5nIGJhY2sgdG8gYW4gZXJyb3IgcGFn
ZSBpbiBhIHN1YmZyYW1lIGNhbiB0cmlnZ2VyIGEgRnJhbWVMb2FkVHlwZVJlcGxhY2UKKyAgICAv
LyB3aGlsZSBtX3Byb3Zpc2lvbmFsSXRlbSBpcyBzZXQsIHNvIHdlIG5lZWQgdG8gY29tbWl0IGl0
LgorICAgIHJldHVybiB0eXBlID09IEZyYW1lTG9hZFR5cGVSZXBsYWNlICYmIG1fcHJvdmlzaW9u
YWxJdGVtOworfQorCiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JD
b21taXQoKQogewogICAgIC8vIFRoZSBmcmFtZSB0aGF0IG5hdmlnYXRlZCB3aWxsIG5vdyBoYXZl
IGEgbnVsbCBwcm92aXNpb25hbCBpdGVtLgpAQCAtNDcxLDYgKzQ3OSwyNSBAQCB2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjp1cGRhdGVGb3JTYW1lRG9jCiAgICAgICAgIHJldHVybjsKIAogICAgIGFk
ZFZpc2l0ZWRMaW5rKHBhZ2UsIG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsKKyAgICBwYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+cmVjdXJzaXZlVXBkYXRlRm9yU2Ft
ZURvY3VtZW50TmF2aWdhdGlvbigpOworfQorCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1
cnNpdmVVcGRhdGVGb3JTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCkKK3sKKyAgICAvLyBUaGUgZnJh
bWUgdGhhdCBuYXZpZ2F0ZWQgd2lsbCBub3cgaGF2ZSBhIG51bGwgcHJvdmlzaW9uYWwgaXRlbS4K
KyAgICAvLyBJZ25vcmUgaXQgYW5kIGl0cyBjaGlsZHJlbi4KKyAgICBpZiAoIW1fcHJvdmlzaW9u
YWxJdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb21taXQgdGhlIHByb3Zpc2lvbmFs
IGl0ZW0uCisgICAgbV9mcmFtZUxvYWRDb21wbGV0ZSA9IGZhbHNlOworICAgIG1fcHJldmlvdXNJ
dGVtID0gbV9jdXJyZW50SXRlbTsKKyAgICBtX2N1cnJlbnRJdGVtID0gbV9wcm92aXNpb25hbEl0
ZW07CisgICAgbV9wcm92aXNpb25hbEl0ZW0gPSAwOworCisgICAgLy8gSXRlcmF0ZSBvdmVyIHRo
ZSByZXN0IG9mIHRoZSB0cmVlLgorICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJl
ZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJs
aW5nKCkpCisgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5yZWN1cnNpdmVVcGRh
dGVGb3JTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCk7CiB9CiAKIHZvaWQgSGlzdG9yeUNvbnRyb2xs
ZXI6OnVwZGF0ZUZvckZyYW1lTG9hZENvbXBsZXRlZCgpCkBAIC02MjEsMTcgKzY0OCw2IEBAIHZv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVNldFByb3YKIAogICAgICAgICBpbnQgc2l6
ZSA9IGNoaWxkSXRlbXMuc2l6ZSgpOwogCi0gICAgICAgIC8vIFNhbml0eSBjaGVja3MgZm9yIGh0
dHA6Ly93ZWJraXQub3JnL2IvNTI4MTkuCi0gICAgICAgIGlmIChzaXplID4gMCkgewotICAgICAg
ICAgICAgLy8gZnJvbUl0ZW0gc2hvdWxkIGhhdmUgc2FtZSBudW1iZXIgb2YgY2hpbGRyZW4gYWNj
b3JkaW5nIHRvIGhhc1NhbWVGcmFtZXMsCi0gICAgICAgICAgICAvLyBidXQgY3Jhc2ggZHVtcHMg
c3VnZ2VzdCBpdCBtaWdodCBoYXZlIDAuCi0gICAgICAgICAgICBpZiAoIWZyb21JdGVtLT5jaGls
ZHJlbigpLnNpemUoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgLy8g
aXRlbXNBcmVDbG9uZXMgY2hlY2tlZCBmcm9tSXRlbS0+aGFzU2FtZUZyYW1lcyhpdGVtKS4gQ2hl
Y2sgdmljZSB2ZXJzYS4KLSAgICAgICAgICAgIGlmICghaXRlbS0+aGFzU2FtZUZyYW1lcyhmcm9t
SXRlbSkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCiAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgY2hpbGRG
cmFtZU5hbWUgPSBjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKTsKICAgICAgICAgICAgIEhpc3RvcnlJ
dGVtKiBmcm9tQ2hpbGRJdGVtID0gZnJvbUl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGRG
cmFtZU5hbWUpOwpAQCAtNjcwLDE0ICs2ODYsNiBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpy
ZWN1cnNpdmVHb1RvSXRlCiAKIGJvb2wgSGlzdG9yeUNvbnRyb2xsZXI6Oml0ZW1zQXJlQ2xvbmVz
KEhpc3RvcnlJdGVtKiBpdGVtMSwgSGlzdG9yeUl0ZW0qIGl0ZW0yKSBjb25zdAogewotICAgIC8v
IEl0IGFwcGVhcnMgdGhhdCBvbmUgb2YgdGhlIGl0ZW1zIGNhbiBiZSBudWxsIGluIHJlbGVhc2Ug
YnVpbGRzLCBsZWFkaW5nCi0gICAgLy8gdG8gdGhlIGNyYXNoZXMgc2VlbiBpbiBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzUyODE5LiAgRm9yIG5vdywgdHJ5IHRvCi0gICAgLy8gbmFycm93IGl0IGRvd24g
d2l0aCBhIG1vcmUgc3BlY2lmaWMgY3Jhc2guCi0gICAgaWYgKCFpdGVtMSkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICBpZiAoIWl0ZW0yKQotICAgICAgICBDUkFTSCgpOwotCiAgICAgLy8gSWYgdGhl
IGl0ZW0gd2UncmUgZ29pbmcgdG8gaXMgYSBjbG9uZSBvZiB0aGUgaXRlbSB3ZSdyZSBhdCwgdGhl
biB3ZSBkbwogICAgIC8vIG5vdCBuZWVkIHRvIGxvYWQgaXQgYWdhaW4uICBUaGUgY3VycmVudCBm
cmFtZSB0cmVlIGFuZCB0aGUgZnJhbWUgdHJlZQogICAgIC8vIHNuYXBzaG90IGluIHRoZSBpdGVt
IGhhdmUgdG8gbWF0Y2guCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuaAkocmV2aXNpb24gNzczNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9y
eUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsOSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCByZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0qLCBIaXN0
b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOwogICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oSGlz
dG9yeUl0ZW0qLCBIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOworICAgIGJvb2wgaXNSZXBs
YWNlTG9hZFR5cGVXaXRoUHJvdmlzaW9uYWxJdGVtKEZyYW1lTG9hZFR5cGUpOwogICAgIHZvaWQg
cmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0KCk7CisgICAgdm9pZCByZWN1cnNpdmVVcGRhdGVGb3JT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uKCk7CiAgICAgYm9vbCBpdGVtc0FyZUNsb25lcyhIaXN0b3J5
SXRlbSosIEhpc3RvcnlJdGVtKikgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50RnJhbWVzTWF0Y2hJ
dGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVCYWNrRm9yd2FyZExpc3RD
bGlwcGVkQXRUYXJnZXQoYm9vbCBkb0NsaXApOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDc3MzU2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wMi0wMyAgQ2hhcmxpZSBSZWlz
ICA8Y3JlaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENyYXNoIGluIFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjppdGVt
c0FyZUNsb25lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTI4MTkKKworICAgICAgICBSZW1vdmVzIHVubmVlZGVkIHNhbml0eSBjaGVja3MgdXNlZCBm
b3IgZGlhZ25vc2luZyBhIG1lbW9yeSBlcnJvci4KKworICAgICAgICAqIHNyYy9XZWJGcmFtZUlt
cGwuY3BwOgorCiAyMDExLTAyLTAxICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA3NzM0NCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4NiwxNyArODg2LDYgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmxvYWRIaXN0b3J5SXRlbShjb25z
dAogICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaGlzdG9yeUl0ZW0gPSBQYXNzUmVmUHRyPEhpc3Rv
cnlJdGVtPihpdGVtKTsKICAgICBBU1NFUlQoaGlzdG9yeUl0ZW0uZ2V0KCkpOwogCi0gICAgLy8g
U2FuaXR5IGNoZWNrIGZvciBodHRwOi8vd2Via2l0Lm9yZy9iLzUyODE5LiAgSXQgYXBwZWFycyB0
aGF0IHNvbWUgY2hpbGQKLSAgICAvLyBpdGVtcyBvZiB0aGlzIGl0ZW0gbWlnaHQgYmUgbnVsbC4g
IFRyeSB2YWxpZGF0aW5nIGp1c3QgdGhlIGZpcnN0IHNldCBvZgotICAgIC8vIGNoaWxkcmVuIGlu
IGFuIGF0dGVtcHQgdG8gY2F0Y2ggaXQgZWFybHkuCi0gICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0
b3ImIGNoaWxkSXRlbXMgPSBoaXN0b3J5SXRlbS0+Y2hpbGRyZW4oKTsKLSAgICBpbnQgc2l6ZSA9
IGNoaWxkSXRlbXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGNoaWxkSXRlbSA9IGNoaWxkSXRlbXNbaV0uZ2V0
KCk7Ci0gICAgICBpZiAoIWNoaWxkSXRlbS5nZXQoKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9
Ci0KICAgICAvLyBJZiB0aGVyZSBpcyBubyBjdXJyZW50SXRlbSwgd2hpY2ggaGFwcGVucyB3aGVu
IHdlIGFyZSBuYXZpZ2F0aW5nIGluCiAgICAgLy8gc2Vzc2lvbiBoaXN0b3J5IGFmdGVyIGEgY3Jh
c2gsIHdlIG5lZWQgdG8gbWFudWZhY3R1cmUgb25lIG90aGVyd2lzZSBXZWJLaXQKICAgICAvLyBo
b2Fya3MuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHdyb25nIHRoaW5nIHRvIGRvLCBidXQgaXQgc2Vl
bXMgdG8gd29yay4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzU1KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDItMDMgIENoYXJs
aWUgUmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxl
cjo6aXRlbXNBcmVDbG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUyODE5CisKKyAgICAgICAgVGVzdHMgdGhhdCBuYXZpZ2F0aW5nIGJhY2sgYW5k
IGZvcndhcmQgYmV0d2VlbiBoYXNoIGl0ZW1zIHdvcmtzLgorCisgICAgICAgICogZmFzdC9oaXN0
b3J5L2hpc3RvcnktYmFjay1mb3J3YXJkLXdpdGhpbi1zdWJmcmFtZS1oYXNoLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9oaXN0b3J5LWJhY2stZm9yd2FyZC13aXRoaW4tc3Vi
ZnJhbWUtaGFzaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9y
ZXNvdXJjZXMvaGlzdG9yeS1iYWNrLWZvcndhcmQtd2l0aGluLXN1YmZyYW1lLWhhc2gtMi5odG1s
OiBBZGRlZC4KKwogMjAxMS0wMi0wMSAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvaGlzdG9yeS9oaXN0b3J5LWJhY2stZm9yd2FyZC13aXRoaW4tc3ViZnJhbWUt
aGFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5
L2hpc3RvcnktYmFjay1mb3J3YXJkLXdpdGhpbi1zdWJmcmFtZS1oYXNoLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9oaXN0b3J5LWJhY2stZm9y
d2FyZC13aXRoaW4tc3ViZnJhbWUtaGFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMiBAQAorCitQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvaGlzdG9y
eS1iYWNrLWZvcndhcmQtd2l0aGluLXN1YmZyYW1lLWhhc2guaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvaGlzdG9yeS1iYWNrLWZvcndhcmQtd2l0aGluLXN1YmZy
YW1lLWhhc2guaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9o
aXN0b3J5LWJhY2stZm9yd2FyZC13aXRoaW4tc3ViZnJhbWUtaGFzaC5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyIEBACis8Ym9keT4KKzxzY3JpcHQ+CitvbmxvYWQgPSBmdW5jdGlvbigp
IHsKKyAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgIH0KK30KKzwvc2NyaXB0PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9oaXN0
b3J5LWJhY2stZm9yd2FyZC13aXRoaW4tc3ViZnJhbWUtaGFzaC0yLmh0bWwiPjwvaWZyYW1lPgor
PGRpdiBpZD0icmVzdWx0Ij5GQUlMPC9kaXY+Cis8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2hpc3RvcnkvcmVzb3VyY2VzL2hpc3RvcnktYmFjay1mb3J3YXJkLXdpdGhpbi1zdWJmcmFt
ZS1oYXNoLTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcmVz
b3VyY2VzL2hpc3RvcnktYmFjay1mb3J3YXJkLXdpdGhpbi1zdWJmcmFtZS1oYXNoLTIuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9yZXNvdXJjZXMvaGlzdG9y
eS1iYWNrLWZvcndhcmQtd2l0aGluLXN1YmZyYW1lLWhhc2gtMi5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI5IEBACis8c2NyaXB0PgorLy8gRW5zdXJlcyB0aGF0IHJlcGVhdGVkIGJhY2sg
YW5kIGZvcndhcmQgd29yayBmb3IgZnJhbWUgaGFzaCBuYXZpZ2F0aW9ucy4KKy8vIDEuIE5hdmln
YXRlIHRvIGhhc2ggIiNmb28iLgorLy8gMi4gR28gYmFjayB0byBoYXNoICIiLgorLy8gMy4gR28g
Zm9yd2FyZCB0byBoYXNoICIjZm9vIi4KK29ubG9hZCA9IGZ1bmN0aW9uKCkgeworICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgIGxvY2F0aW9uLmhhc2ggPSAiI2ZvbyI7CisgIH0sIDApOwor
fQorb25oYXNoY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgIGlmIChsb2NhdGlvbi5oYXNoID09ICIj
Zm9vIikgeworICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZS5iZWVuSGVyZSkgeworICAgICAg
d2luZG93LmxvY2FsU3RvcmFnZS5iZWVuSGVyZSA9IHRydWU7CisgICAgICBwYXJlbnQuZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCA9ICJGaXJzdCB2aXNpdCI7Cisg
ICAgICBoaXN0b3J5LmJhY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgZGVsZXRlIHdpbmRvdy5s
b2NhbFN0b3JhZ2UuYmVlbkhlcmU7CisgICAgICBwYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInJlc3VsdCIpLmlubmVyVGV4dCA9ICJQQVNTIjsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKKyAgICB9CisgIH0KKyAgaWYgKGxvY2F0aW9uLmhhc2ggPT0gIiIpIHsKKyAgICBwYXJlbnQu
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCA9ICJHb25lIGJhY2si
OworICAgIGhpc3RvcnkuZm9yd2FyZCgpOworICB9Cit9Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81286</attachid>
            <date>2011-02-04 14:32:36 -0800</date>
            <delta_ts>2011-02-04 16:48:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52819-20110204143234.patch</filename>
            <type>text/plain</type>
            <size>11912</size>
            <attacher name="Charles Reis">creis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NjUzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDItMDQgIENoYXJsaWUg
UmVpcyAgPGNyZWlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6
aXRlbXNBcmVDbG9uZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyODE5CisKKyAgICAgICAgQXZvaWRzIGRlbGV0aW5nIHRoZSBjdXJyZW50IEhpc3Rv
cnlJdGVtIHdoaWxlIGl0IGlzIHN0aWxsIGluIHVzZS4KKyAgICAgICAgRW5zdXJlcyB0aGF0IHBy
b3Zpc2lvbmFsIGl0ZW1zIGFyZSBjb21taXR0ZWQgZm9yIHNhbWUgZG9jdW1lbnQgbmF2aWdhdGlv
bnMuCisgICAgICAgIEVuc3VyZXMgdGhhdCBlcnJvciBwYWdlcyBhcmUgY29tbWl0dGVkIG9uIGJh
Y2svZm9yd2FyZCBuYXZpZ2F0aW9ucy4KKyAgICAgICAgQWxzbyByZW1vdmVzIHVubmVlZGVkIHNh
bml0eSBjaGVja3MgdXNlZCBmb3IgZGlhZ25vc2luZyB0aGUgcHJvYmxlbS4KKworICAgICAgICAq
IGxvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHA6CisgICAgICAgICogbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmg6CisKIDIwMTEtMDItMDQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGZyb20gbWVyZ2UgbWlzdGFrZS4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzc2
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29U
b0l0ZW0oSGlzdG9yeQogICAgIC8vIFNldCB0aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21taXQsIHdo
aWNoIGxldHMgdGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNrL2ZvcndhcmQgYWdhaW4uCiAgICAg
Ly8gLSBwbHVzLCBpdCBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgdG9wIGxldmVsIG9mIHRoZSBv
cGVyYXRpb24gdGhyb3VnaCB0aGUgZnJhbWV0cmVlLAogICAgIC8vIGFzIG9wcG9zZWQgdG8gaGFw
cGVuaW5nIGZvciBzb21lL29uZSBvZiB0aGUgcGFnZSBjb21taXRzIHRoYXQgbWlnaHQgaGFwcGVu
IHNvb24KLSAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBwYWdlLT5iYWNrRm9yd2FyZCgp
LT5jdXJyZW50SXRlbSgpOyAgICAKKyAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGN1cnJlbnRJdGVt
ID0gcGFnZS0+YmFja0ZvcndhcmQoKS0+Y3VycmVudEl0ZW0oKTsKICAgICBwYWdlLT5iYWNrRm9y
d2FyZCgpLT5zZXRDdXJyZW50SXRlbSh0YXJnZXRJdGVtKTsKICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwogICAgIHBhZ2UtPnNldEdsb2JhbEhpc3RvcnlJdGVt
KCghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgPyAwIDog
dGFyZ2V0SXRlbSk7CkBAIC0yNDUsOSArMjQ1LDkgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
Z29Ub0l0ZW0oSGlzdG9yeQogICAgIC8vIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0cnlpbmcg
dG8gbmF2aWdhdGUgdGhlIGRlc2lyZWQgZnJhbWUsIGJlY2F1c2Ugc29tZQogICAgIC8vIG5hdmln
YXRpb25zIGNhbiBjb21taXQgaW1tZWRpYXRlbHkgKHN1Y2ggYXMgYWJvdXQ6YmxhbmspLiAgV2Ug
bXVzdCBiZSBzdXJlIHRoYXQKICAgICAvLyBhbGwgZnJhbWVzIGhhdmUgcHJvdmlzaW9uYWwgaXRl
bXMgc2V0IGJlZm9yZSB0aGUgY29tbWl0LgotICAgIHJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRl
bSh0YXJnZXRJdGVtLCBjdXJyZW50SXRlbSwgdHlwZSk7CisgICAgcmVjdXJzaXZlU2V0UHJvdmlz
aW9uYWxJdGVtKHRhcmdldEl0ZW0sIGN1cnJlbnRJdGVtLmdldCgpLCB0eXBlKTsKICAgICAvLyBO
b3cgdGhhdCBhbGwgb3RoZXIgZnJhbWVzIGhhdmUgcHJvdmlzaW9uYWwgaXRlbXMsIGRvIHRoZSBh
Y3R1YWwgbmF2aWdhdGlvbi4KLSAgICByZWN1cnNpdmVHb1RvSXRlbSh0YXJnZXRJdGVtLCBjdXJy
ZW50SXRlbSwgdHlwZSk7CisgICAgcmVjdXJzaXZlR29Ub0l0ZW0odGFyZ2V0SXRlbSwgY3VycmVu
dEl0ZW0uZ2V0KCksIHR5cGUpOwogfQogCiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVG
b3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKQpAQCAtNDAyLDggKzQwMiw5IEBAIHZvaWQgSGlzdG9y
eUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNvbW1pdCgKICAgICAgICAgTE9HKEhpc3RvcnksICJXZWJD
b3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgY29tbWl0IGluIGZyYW1lICVzIiwgZnJh
bWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5k
aWYKICAgICBGcmFtZUxvYWRUeXBlIHR5cGUgPSBmcmFtZUxvYWRlci0+bG9hZFR5cGUoKTsKLSAg
ICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKHR5cGUpIHx8Ci0gICAgICAgICgodHlwZSA9PSBG
cmFtZUxvYWRUeXBlUmVsb2FkIHx8IHR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21Pcmln
aW4pICYmICFmcmFtZUxvYWRlci0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpLT51bnJlYWNo
YWJsZVVSTCgpLmlzRW1wdHkoKSkpIHsKKyAgICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKHR5
cGUpCisgICAgICAgIHx8IGlzUmVwbGFjZUxvYWRUeXBlV2l0aFByb3Zpc2lvbmFsSXRlbSh0eXBl
KQorICAgICAgICB8fCAoKHR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCB8fCB0eXBlID09IEZy
YW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luKSAmJiAhZnJhbWVMb2FkZXItPnByb3Zpc2lvbmFs
RG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpKSB7CiAgICAgICAg
IC8vIE9uY2UgY29tbWl0dGVkLCB3ZSB3YW50IHRvIHVzZSBjdXJyZW50IGl0ZW0gZm9yIHNhdmlu
ZyBEb2NTdGF0ZSwgYW5kCiAgICAgICAgIC8vIHRoZSBwcm92aXNpb25hbCBpdGVtIGZvciByZXN0
b3Jpbmcgc3RhdGUuCiAgICAgICAgIC8vIE5vdGUgcHJldmlvdXNJdGVtIG11c3QgYmUgc2V0IGJl
Zm9yZSB3ZSBjbG9zZSB0aGUgVVJMLCB3aGljaCB3aWxsCkBAIC00MjMsNiArNDI0LDEzIEBAIHZv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNvbW1pdCgKICAgICB9CiB9CiAKK2Jvb2wg
SGlzdG9yeUNvbnRyb2xsZXI6OmlzUmVwbGFjZUxvYWRUeXBlV2l0aFByb3Zpc2lvbmFsSXRlbShG
cmFtZUxvYWRUeXBlIHR5cGUpCit7CisgICAgLy8gR29pbmcgYmFjayB0byBhbiBlcnJvciBwYWdl
IGluIGEgc3ViZnJhbWUgY2FuIHRyaWdnZXIgYSBGcmFtZUxvYWRUeXBlUmVwbGFjZQorICAgIC8v
IHdoaWxlIG1fcHJvdmlzaW9uYWxJdGVtIGlzIHNldCwgc28gd2UgbmVlZCB0byBjb21taXQgaXQu
CisgICAgcmV0dXJuIHR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlcGxhY2UgJiYgbV9wcm92aXNpb25h
bEl0ZW07Cit9CisKIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVVwZGF0ZUZvckNv
bW1pdCgpCiB7CiAgICAgLy8gVGhlIGZyYW1lIHRoYXQgbmF2aWdhdGVkIHdpbGwgbm93IGhhdmUg
YSBudWxsIHByb3Zpc2lvbmFsIGl0ZW0uCkBAIC00NzEsNiArNDc5LDI1IEBAIHZvaWQgSGlzdG9y
eUNvbnRyb2xsZXI6OnVwZGF0ZUZvclNhbWVEb2MKICAgICAgICAgcmV0dXJuOwogCiAgICAgYWRk
VmlzaXRlZExpbmsocGFnZSwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOworICAgIHBhZ2Ut
Pm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5yZWN1cnNpdmVVcGRhdGVGb3JTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uKCk7Cit9CisKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vy
c2l2ZVVwZGF0ZUZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24oKQoreworICAgIC8vIFRoZSBmcmFt
ZSB0aGF0IG5hdmlnYXRlZCB3aWxsIG5vdyBoYXZlIGEgbnVsbCBwcm92aXNpb25hbCBpdGVtLgor
ICAgIC8vIElnbm9yZSBpdCBhbmQgaXRzIGNoaWxkcmVuLgorICAgIGlmICghbV9wcm92aXNpb25h
bEl0ZW0pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENvbW1pdCB0aGUgcHJvdmlzaW9uYWwg
aXRlbS4KKyAgICBtX2ZyYW1lTG9hZENvbXBsZXRlID0gZmFsc2U7CisgICAgbV9wcmV2aW91c0l0
ZW0gPSBtX2N1cnJlbnRJdGVtOworICAgIG1fY3VycmVudEl0ZW0gPSBtX3Byb3Zpc2lvbmFsSXRl
bTsKKyAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9IDA7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgdGhl
IHJlc3Qgb2YgdGhlIHRyZWUuCisgICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVl
KCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxp
bmcoKSkKKyAgICAgICAgY2hpbGQtPmxvYWRlcigpLT5oaXN0b3J5KCktPnJlY3Vyc2l2ZVVwZGF0
ZUZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24oKTsKIH0KIAogdm9pZCBIaXN0b3J5Q29udHJvbGxl
cjo6dXBkYXRlRm9yRnJhbWVMb2FkQ29tcGxldGVkKCkKQEAgLTYyMSwxNyArNjQ4LDYgQEAgdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlU2V0UHJvdgogCiAgICAgICAgIGludCBzaXpl
ID0gY2hpbGRJdGVtcy5zaXplKCk7CiAKLSAgICAgICAgLy8gU2FuaXR5IGNoZWNrcyBmb3IgaHR0
cDovL3dlYmtpdC5vcmcvYi81MjgxOS4KLSAgICAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAg
ICAgICAvLyBmcm9tSXRlbSBzaG91bGQgaGF2ZSBzYW1lIG51bWJlciBvZiBjaGlsZHJlbiBhY2Nv
cmRpbmcgdG8gaGFzU2FtZUZyYW1lcywKLSAgICAgICAgICAgIC8vIGJ1dCBjcmFzaCBkdW1wcyBz
dWdnZXN0IGl0IG1pZ2h0IGhhdmUgMC4KLSAgICAgICAgICAgIGlmICghZnJvbUl0ZW0tPmNoaWxk
cmVuKCkuc2l6ZSgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAvLyBp
dGVtc0FyZUNsb25lcyBjaGVja2VkIGZyb21JdGVtLT5oYXNTYW1lRnJhbWVzKGl0ZW0pLiBDaGVj
ayB2aWNlIHZlcnNhLgotICAgICAgICAgICAgaWYgKCFpdGVtLT5oYXNTYW1lRnJhbWVzKGZyb21J
dGVtKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0KICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIFN0cmluZyBjaGlsZEZy
YW1lTmFtZSA9IGNoaWxkSXRlbXNbaV0tPnRhcmdldCgpOwogICAgICAgICAgICAgSGlzdG9yeUl0
ZW0qIGZyb21DaGlsZEl0ZW0gPSBmcm9tSXRlbS0+Y2hpbGRJdGVtV2l0aFRhcmdldChjaGlsZEZy
YW1lTmFtZSk7CkBAIC02NzAsMTQgKzY4Niw2IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJl
Y3Vyc2l2ZUdvVG9JdGUKIAogYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6aXRlbXNBcmVDbG9uZXMo
SGlzdG9yeUl0ZW0qIGl0ZW0xLCBIaXN0b3J5SXRlbSogaXRlbTIpIGNvbnN0CiB7Ci0gICAgLy8g
SXQgYXBwZWFycyB0aGF0IG9uZSBvZiB0aGUgaXRlbXMgY2FuIGJlIG51bGwgaW4gcmVsZWFzZSBi
dWlsZHMsIGxlYWRpbmcKLSAgICAvLyB0byB0aGUgY3Jhc2hlcyBzZWVuIGluIGh0dHA6Ly93ZWJr
aXQub3JnL2IvNTI4MTkuICBGb3Igbm93LCB0cnkgdG8KLSAgICAvLyBuYXJyb3cgaXQgZG93biB3
aXRoIGEgbW9yZSBzcGVjaWZpYyBjcmFzaC4KLSAgICBpZiAoIWl0ZW0xKQotICAgICAgICBDUkFT
SCgpOwotICAgIGlmICghaXRlbTIpCi0gICAgICAgIENSQVNIKCk7Ci0KICAgICAvLyBJZiB0aGUg
aXRlbSB3ZSdyZSBnb2luZyB0byBpcyBhIGNsb25lIG9mIHRoZSBpdGVtIHdlJ3JlIGF0LCB0aGVu
IHdlIGRvCiAgICAgLy8gbm90IG5lZWQgdG8gbG9hZCBpdCBhZ2Fpbi4gIFRoZSBjdXJyZW50IGZy
YW1lIHRyZWUgYW5kIHRoZSBmcmFtZSB0cmVlCiAgICAgLy8gc25hcHNob3QgaW4gdGhlIGl0ZW0g
aGF2ZSB0byBtYXRjaC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5oCShyZXZpc2lvbiA3NzY1MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw5IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSosIEhpc3Rv
cnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CiAgICAgdm9pZCByZWN1cnNpdmVHb1RvSXRlbShIaXN0
b3J5SXRlbSosIEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CisgICAgYm9vbCBpc1JlcGxh
Y2VMb2FkVHlwZVdpdGhQcm92aXNpb25hbEl0ZW0oRnJhbWVMb2FkVHlwZSk7CiAgICAgdm9pZCBy
ZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKTsKKyAgICB2b2lkIHJlY3Vyc2l2ZVVwZGF0ZUZvclNh
bWVEb2N1bWVudE5hdmlnYXRpb24oKTsKICAgICBib29sIGl0ZW1zQXJlQ2xvbmVzKEhpc3RvcnlJ
dGVtKiwgSGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICBib29sIGN1cnJlbnRGcmFtZXNNYXRjaEl0
ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZUJhY2tGb3J3YXJkTGlzdENs
aXBwZWRBdFRhcmdldChib29sIGRvQ2xpcCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gNzc2NTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTAyLTAzICBDaGFybGllIFJlaXMg
IDxjcmVpc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3Jhc2ggaW4gV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6Oml0ZW1z
QXJlQ2xvbmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MjgxOQorCisgICAgICAgIFJlbW92ZXMgdW5uZWVkZWQgc2FuaXR5IGNoZWNrcyB1c2VkIGZv
ciBkaWFnbm9zaW5nIGEgbWVtb3J5IGVycm9yLgorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1w
bC5jcHA6CisKIDIwMTEtMDItMDEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmF0ZSBDaGFwaW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDc3NjUzKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODgxLDE3ICs4ODEsNiBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6bG9hZEhpc3RvcnlJdGVtKGNv
bnN0CiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBoaXN0b3J5SXRlbSA9IFBhc3NSZWZQdHI8SGlz
dG9yeUl0ZW0+KGl0ZW0pOwogICAgIEFTU0VSVChoaXN0b3J5SXRlbS5nZXQoKSk7CiAKLSAgICAv
LyBTYW5pdHkgY2hlY2sgZm9yIGh0dHA6Ly93ZWJraXQub3JnL2IvNTI4MTkuICBJdCBhcHBlYXJz
IHRoYXQgc29tZSBjaGlsZAotICAgIC8vIGl0ZW1zIG9mIHRoaXMgaXRlbSBtaWdodCBiZSBudWxs
LiAgVHJ5IHZhbGlkYXRpbmcganVzdCB0aGUgZmlyc3Qgc2V0IG9mCi0gICAgLy8gY2hpbGRyZW4g
aW4gYW4gYXR0ZW1wdCB0byBjYXRjaCBpdCBlYXJseS4KLSAgICBjb25zdCBIaXN0b3J5SXRlbVZl
Y3RvciYgY2hpbGRJdGVtcyA9IGhpc3RvcnlJdGVtLT5jaGlsZHJlbigpOwotICAgIGludCBzaXpl
ID0gY2hpbGRJdGVtcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gY2hpbGRJdGVtID0gY2hpbGRJdGVtc1tpXS5n
ZXQoKTsKLSAgICAgIGlmICghY2hpbGRJdGVtLmdldCgpKQotICAgICAgICBDUkFTSCgpOwotICAg
IH0KLQogICAgIC8vIElmIHRoZXJlIGlzIG5vIGN1cnJlbnRJdGVtLCB3aGljaCBoYXBwZW5zIHdo
ZW4gd2UgYXJlIG5hdmlnYXRpbmcgaW4KICAgICAvLyBzZXNzaW9uIGhpc3RvcnkgYWZ0ZXIgYSBj
cmFzaCwgd2UgbmVlZCB0byBtYW51ZmFjdHVyZSBvbmUgb3RoZXJ3aXNlIFdlYktpdAogICAgIC8v
IGhvYXJrcy4gVGhpcyBpcyBwcm9iYWJseSB0aGUgd3JvbmcgdGhpbmcgdG8gZG8sIGJ1dCBpdCBz
ZWVtcyB0byB3b3JrLgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzc2NzQpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMi0wNCAgQ2hh
cmxpZSBSZWlzICA8Y3JlaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENyYXNoIGluIFdlYkNvcmU6Okhpc3RvcnlDb250cm9s
bGVyOjppdGVtc0FyZUNsb25lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTI4MTkKKworICAgICAgICBUZXN0cyB0aGF0IG5hdmlnYXRpbmcgYmFjayBh
bmQgZm9yd2FyZCBiZXR3ZWVuIGhhc2ggaXRlbXMgd29ya3MuCisKKyAgICAgICAgKiBmYXN0L2hp
c3RvcnkvaGlzdG9yeS1iYWNrLWZvcndhcmQtd2l0aGluLXN1YmZyYW1lLWhhc2guaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9oaXN0b3J5L2hpc3RvcnktYmFjay1mb3J3YXJkLXdpdGhpbi1z
dWJmcmFtZS1oYXNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTEtMDItMDQgIERpbWl0cmkg
R2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgTGVvcGFyZC1z
cGVjaWZpYyBwaXhlbCByZXN1bHRzIGZvciBmYXN0L2Jsb2NrZmxvdy4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9oaXN0b3J5LWJhY2stZm9yd2FyZC13aXRoaW4tc3ViZnJhbWUtaGFz
aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L2hp
c3RvcnktYmFjay1mb3J3YXJkLXdpdGhpbi1zdWJmcmFtZS1oYXNoLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9oaXN0b3J5LWJhY2stZm9yd2Fy
ZC13aXRoaW4tc3ViZnJhbWUtaGFzaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKK0Vuc3VyZXMgdGhhdCByZXBlYXRlZCBiYWNrIGFuZCBmb3J3YXJkIHdvcmsgZm9y
IGZyYW1lIGhhc2ggbmF2aWdhdGlvbnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitGaXJzdCB2aXNpdCB0byBmb28uCitHb25lIGJhY2suCitHb25lIGZvcndhcmQuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9oaXN0b3J5L2hpc3RvcnktYmFjay1mb3J3YXJkLXdpdGhpbi1zdWJmcmFtZS1o
YXNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L2hpc3Rvcnkt
YmFjay1mb3J3YXJkLXdpdGhpbi1zdWJmcmFtZS1oYXNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvaGlzdG9yeS1iYWNrLWZvcndhcmQtd2l0aGluLXN1YmZy
YW1lLWhhc2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CisgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorCis8aWZyYW1lIHNy
Yz0icmVzb3VyY2VzL3N1YmZyYW1lLmh0bWwiIGlkPSJpZnJhbWUxIj48L2lmcmFtZT4KKworPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCdFbnN1cmVzIHRoYXQgcmVwZWF0ZWQgYmFjayBhbmQgZm9yd2Fy
ZCB3b3JrIGZvciBmcmFtZSBoYXNoIG5hdmlnYXRpb25zLicpOworCit2YXIgZnJhbWUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lMSIpLmNvbnRlbnRXaW5kb3c7CitvbmxvYWQgPSBm
dW5jdGlvbigpCit7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY2FuIGdlbmVyYXRlIGhpc3Rv
cnkgZW50cmllcworICAgIHNldFRpbWVvdXQocnVuVGVzdCwgMCk7Cit9CisKKy8vIDEuIE5hdmln
YXRlIHRvIGhhc2ggIiNmb28iLgorLy8gMi4gR28gYmFjayB0byBoYXNoICIiLgorLy8gMy4gR28g
Zm9yd2FyZCB0byBoYXNoICIjZm9vIi4KK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGZyYW1l
LmxvY2F0aW9uLmhhc2ggPSAiI2ZvbyI7Cit9CisKK2ZyYW1lLm9uaGFzaGNoYW5nZSA9IGZ1bmN0
aW9uKCkKK3sKKyAgICBpZiAoZnJhbWUubG9jYXRpb24uaGFzaCA9PSAiI2ZvbyIpIHsKKyAgICAg
ICAgaWYgKCF3aW5kb3cubG9jYWxTdG9yYWdlLmJlZW5IZXJlKSB7CisgICAgICAgICAgICB3aW5k
b3cubG9jYWxTdG9yYWdlLmJlZW5IZXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIGRlYnVnKCJGaXJz
dCB2aXNpdCB0byBmb28uIik7CisgICAgICAgICAgICBoaXN0b3J5LmJhY2soKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3cubG9jYWxTdG9yYWdlLmJlZW5IZXJl
OworICAgICAgICAgICAgZGVidWcoIkdvbmUgZm9yd2FyZC4iKTsKKyAgICAgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChmcmFtZS5sb2NhdGlvbi5oYXNo
ID09ICIiKSB7CisgICAgICAgIGRlYnVnKCJHb25lIGJhY2suIik7CisgICAgICAgIGhpc3Rvcnku
Zm9yd2FyZCgpOworICAgIH0KK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cit2
YXIganNUZXN0SXNBc3luYyA9IHRydWU7Cis8L3NjcmlwdD4gIAorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>