<?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>55104</bug_id>
          
          <creation_ts>2011-02-23 16:51:00 -0800</creation_ts>
          <short_desc>Timer-based events should inherit the user gesture state of their originating event in certain cases.</short_desc>
          <delta_ts>2011-03-14 14:22:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47593</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>jnd</cc>
    
    <cc>me</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>356551</commentid>
    <comment_count>0</comment_count>
      <attachid>83578</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-02-23 16:51:00 -0800</bug_when>
    <thetext>Created attachment 83578
testcase

See the attached test case. Firefox 4 allows a programatic click to open a file chooser dialog even when the the event originating from the user clicking the anchor element and the event that emitted a programatic click are not the same (the latter event is triggered by a 1sec setTimeout()). We should also allow a file chooser dialog to open in these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366482</commentid>
    <comment_count>1</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-03-11 19:20:01 -0800</bug_when>
    <thetext>From my testing of Firefox 4, they implement the following restrictions when forwarding gesture state to timer events:

1) Events fired from setTimeout() only inherit the gesture state if they fire within 1000 ms of the user gesture.
2) Only the first firing of a setInterval() event gets the gesture state (and only if it was within 1000 ms of the user gesture).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366840</commentid>
    <comment_count>2</comment_count>
      <attachid>85646</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-03-13 22:34:58 -0700</bug_when>
    <thetext>Created attachment 85646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366845</commentid>
    <comment_count>3</comment_count>
      <attachid>85646</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-13 22:49:29 -0700</bug_when>
    <thetext>Comment on attachment 85646
Patch

I can keep chaining these together?  setTimeout from setTimeout to keep the user gesture?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366846</commentid>
    <comment_count>4</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-03-13 22:54:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 85646 [details])
&gt; I can keep chaining these together?  setTimeout from setTimeout to keep the user gesture?

Good catch. My patch allows for that but shouldn&apos;t. I should be able to fix that by checking the timer nesting level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366853</commentid>
    <comment_count>5</comment_count>
      <attachid>85647</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-03-13 23:16:37 -0700</bug_when>
    <thetext>Created attachment 85647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367023</commentid>
    <comment_count>6</comment_count>
      <attachid>85647</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-14 09:46:04 -0700</bug_when>
    <thetext>Comment on attachment 85647
Patch

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

&gt; Source/WebCore/page/DOMTimer.cpp:42
&gt; +static const int maxTimeoutForUserGestureForwarding = 1000; // One second matches Gecko.

The word “timeout” is used multiple ways in this file that are confusing. For example, the number of milliseconds is called a timeout in the name of the argument to the constructor and the data member m_originalTimeout. But the timers themselves are also referred to as timeouts, as in the data member m_timeoutId.

Because of that ambiguity, and because we also have two other constants here that are floating point numbers with time in milliseconds, I think this constant is slightly confusing.

&gt; Source/WebCore/page/DOMTimer.cpp:64
&gt; +    m_indicateUserGestureWhenFired = UserGestureIndicator::processingUserGesture()
&gt; +        &amp;&amp; timeout &lt;= maxTimeoutForUserGestureForwarding
&gt; +        &amp;&amp; m_nestingLevel == 1;

I’d like to see all the initialization of data members be done with data member initialization instead of assignment. That could easily be done by making a separate function to return the ID and putting this logic in a function too. They can be inline functions if desired. I wouldn’t insist on that change for this patch, but it would be nice.

I think this expression needs a why comment for the nesting level check. The other two parts of this expression explain themselves, given the names of what’s involved, but the reason the nesting level should have an effect is more subtle.

&gt; Source/WebCore/page/DOMTimer.cpp:111
&gt; +    UserGestureIndicator gestureIndicator(m_indicateUserGestureWhenFired ? DefinitelyProcessingUserGesture : PossiblyProcessingUserGesture);

Is it helpful to set the gesture indication to “possibly” when the boolean is false? Does the test somehow cover that?

&gt; Source/WebCore/page/DOMTimer.h:73
&gt; +        bool m_indicateUserGestureWhenFired;

For a boolean data member, we normally do not want to use something that can be read as a verb phrase. Perhaps add the word “should”.

Another possible name is m_representsForwardedUserGesture, which is consistent with the name of the maxTimeoutForUserGestureForwarding constant.

&gt; LayoutTests/fast/events/popup-blocking-timers.html:5
&gt; +        var win;

I’m as big a fan of winning as the next guy, but I don’t think this is a great variable name.

&gt; LayoutTests/fast/events/popup-blocking-timers.html:12
&gt; +            layoutTestController.waitUntilDone();

Can we make this test run fast by using the leapForward feature or something else like that? It’s unfortunate that the test takes a second to run.

&gt; LayoutTests/fast/events/popup-blocking-timers.html:54
&gt; +                }
&gt; +                else {

Brace style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367129</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-03-14 12:29:05 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 85647 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85647&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/DOMTimer.cpp:42
&gt; &gt; +static const int maxTimeoutForUserGestureForwarding = 1000; // One second matches Gecko.
&gt; 
&gt; The word “timeout” is used multiple ways in this file that are confusing. For example, the number of milliseconds is called a timeout in the name of the argument to the constructor and the data member m_originalTimeout. But the timers themselves are also referred to as timeouts, as in the data member m_timeoutId.
&gt; 
&gt; Because of that ambiguity, and because we also have two other constants here that are floating point numbers with time in milliseconds, I think this constant is slightly confusing.

Perhaps interval is a better term both for the ctor argument and for my static constant, since that is the term used by TimerBase. I&apos;m not sure how to rectify the float vs. int issue; perhaps including units in the variable names would help (e.g. intervalInMs and maxIntervalForUserGestureForwardingInMs)?

&gt; 
&gt; &gt; Source/WebCore/page/DOMTimer.cpp:64
&gt; &gt; +    m_indicateUserGestureWhenFired = UserGestureIndicator::processingUserGesture()
&gt; &gt; +        &amp;&amp; timeout &lt;= maxTimeoutForUserGestureForwarding
&gt; &gt; +        &amp;&amp; m_nestingLevel == 1;
&gt; 
&gt; I’d like to see all the initialization of data members be done with data member initialization instead of assignment. That could easily be done by making a separate function to return the ID and putting this logic in a function too. They can be inline functions if desired. I wouldn’t insist on that change for this patch, but it would be nice.

Will do.

&gt; 
&gt; I think this expression needs a why comment for the nesting level check. The other two parts of this expression explain themselves, given the names of what’s involved, but the reason the nesting level should have an effect is more subtle.

Ok.

&gt; 
&gt; &gt; Source/WebCore/page/DOMTimer.cpp:111
&gt; &gt; +    UserGestureIndicator gestureIndicator(m_indicateUserGestureWhenFired ? DefinitelyProcessingUserGesture : PossiblyProcessingUserGesture);
&gt; 
&gt; Is it helpful to set the gesture indication to “possibly” when the boolean is false? Does the test somehow cover that?

I was confused by the creation of the &apos;possibly&apos; state, as the difference between PossiblyProcessingUserGesture and DefinitelyNotProcessingUserGesture is unclear to me. It seems like we should always know one way or the other.

PossiblyProcessingUserGesture is the default state for UserGestureIndicator so it&apos;s the state you&apos;d get during a timer event prior to this patch when no gesture was present. That&apos;s why I chose it, and I don&apos;t see any behavior difference between it and DefinitelyNotProcessingUserGesture.

&gt; 
&gt; &gt; Source/WebCore/page/DOMTimer.h:73
&gt; &gt; +        bool m_indicateUserGestureWhenFired;
&gt; 
&gt; For a boolean data member, we normally do not want to use something that can be read as a verb phrase. Perhaps add the word “should”.
&gt; 
&gt; Another possible name is m_representsForwardedUserGesture, which is consistent with the name of the maxTimeoutForUserGestureForwarding constant.

Ok, I&apos;ll stick with the &quot;forwarded&quot; terminology.

&gt; 
&gt; &gt; LayoutTests/fast/events/popup-blocking-timers.html:5
&gt; &gt; +        var win;
&gt; 
&gt; I’m as big a fan of winning as the next guy, but I don’t think this is a great variable name.

Are you saying I should rename all instances of &quot;PASS&quot; to &quot;WINNING&quot;?

&gt; 
&gt; &gt; LayoutTests/fast/events/popup-blocking-timers.html:12
&gt; &gt; +            layoutTestController.waitUntilDone();
&gt; 
&gt; Can we make this test run fast by using the leapForward feature or something else like that? It’s unfortunate that the test takes a second to run.

I was unaware of leapForward(). I should be able to use that.

&gt; 
&gt; &gt; LayoutTests/fast/events/popup-blocking-timers.html:54
&gt; &gt; +                }
&gt; &gt; +                else {
&gt; 
&gt; Brace style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367229</commentid>
    <comment_count>8</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-03-14 14:22:52 -0700</bug_when>
    <thetext>Committed r81057: &lt;http://trac.webkit.org/changeset/81057&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>83578</attachid>
            <date>2011-02-23 16:51:00 -0800</date>
            <delta_ts>2011-02-23 16:51:00 -0800</delta_ts>
            <desc>testcase</desc>
            <filename>timeout-click.html</filename>
            <type>text/html</type>
            <size>415</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7
CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZS1saW5rJykuYWRkRXZlbnRMaXN0
ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZS1maWxl
LWlucHV0JykuY2xpY2soKTsKICAgICAgICAgICAgIH0sMTAwMCk7CiAgICAgICAgfSwgZmFsc2Up
OwogICAgfSwgZmFsc2UpOwo8L3NjcmlwdD4KPGlucHV0IGlkPSJ0aGUtZmlsZS1pbnB1dCIgdHlw
ZT0iZmlsZSI+CjxhIGlkPSd0aGUtbGluaycgaHJlZj0iIyI+UHJvZ3JhbWF0aWNhbGx5IGNsaWNr
IHRoZSBpbnB1dC48L2E+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85646</attachid>
            <date>2011-03-13 22:34:58 -0700</date>
            <delta_ts>2011-03-13 23:16:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55104-20110313223457.patch</filename>
            <type>text/plain</type>
            <size>8533</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwOTk2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDMtMTMgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRpbWVyLWJhc2VkIGV2ZW50cyBzaG91bGQgaW5oZXJpdCB0aGUgdXNl
ciBnZXN0dXJlIHN0YXRlIG9mIHRoZWlyCisgICAgICAgIG9yaWdpbmF0aW5nIGV2ZW50IGluIGNl
cnRhaW4gY2FzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NTEwNAorICAgICAgICAKKyAgICAgICAgSWYgYSB0aW1lciBpcyBpbnN0YWxsZWQgYnkg
YSBnZXN0dXJlLW9yaWdpbmF0ZWQgZXZlbnQgYW5kIHdpbGwgZmlyZQorICAgICAgICB3aXRoaW4g
b25lIHNlY29uZCwgdGhlIHRpbWVyLWluaXRpYXRlZCBldmVudCBzaG91bGQgYmVoYXZlIGFzIGlm
IGl0CisgICAgICAgIHdlcmUgYWxzbyBpbml0aWF0ZWQgYnkgYSB1c2VyIGdlc3R1cmUuIE11bHRp
LXNob3QgdGltZXJzIHNob3VsZCBvbmx5CisgICAgICAgIGdldCB0aGlzIGJlaGF2aW9yIG9uIHRo
ZWlyIGZpcnN0IGV4ZWN1dGlvbi4gVGhpcyBtYWtlcyB1cyBjb21wYXRpYmxlCisgICAgICAgIHdp
dGggR2Vja28gd2hlbiBoYW5kbGluZyBwb3B1cHMgYW5kIGZpbGUgY2hvb3NlciBkaWFsb2dzIGNy
ZWF0ZWQgZnJvbQorICAgICAgICB0aW1lciBldmVudHMuCisKKyAgICAgICAgVGVzdDogZmFzdC9l
dmVudHMvcG9wdXAtYmxvY2tpbmctdGltZXJzLmh0bWwKKworICAgICAgICAqIHBhZ2UvRE9NVGlt
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OkRPTVRpbWVyKTogU2V0IG1faW5k
aWNhdGVVc2VyR2VzdHVyZVdoZW5GaXJlZCBpZiB3ZQorICAgICAgICBhcmUgcHJvY2Vzc2luZyBh
IHVzZXIgZ2VzdHVyZSBhbmQgdGltZW91dCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBt
cy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJlZCk6IENyZWF0ZSBhIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGFuZCBzZXQgaXRzCisgICAgICAgIHN0YXRlIGJhc2VkIG9uIHRoZSB2YWx1
ZSBvZiBtX2luZGljYXRlVXNlckdlc3R1cmVXaGVuRmlyZWQuCisgICAgICAgICogcGFnZS9ET01U
aW1lci5oOgorCiAyMDExLTAzLTEzICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGlt
ZXIuY3BwCShyZXZpc2lvbiA4MDk1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNh
dG9yLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKQEAgLTM4LDYgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCBtYXhUaW1lck5lc3RpbmdMZXZlbCA9IDU7
CitzdGF0aWMgY29uc3QgaW50IG1heFRpbWVvdXRGb3JVc2VyR2VzdHVyZUZvcndhcmRpbmcgPSAx
MDAwOyAvLyBPbmUgc2Vjb25kIG1hdGNoZXMgR2Vja28uCiBzdGF0aWMgY29uc3QgZG91YmxlIG9u
ZU1pbGxpc2Vjb25kID0gMC4wMDE7CiBkb3VibGUgRE9NVGltZXI6OnNfbWluRGVmYXVsdFRpbWVy
SW50ZXJ2YWwgPSAwLjAxMDsgLy8gMTAgbWlsbGlzZWNvbmRzCiAKQEAgLTU2LDYgKzU4LDggQEAg
RE9NVGltZXI6OkRPTVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleAogICAgIG1fdGltZW91dElk
ID0gbGFzdFVzZWRUaW1lb3V0SWQ7CiAKICAgICBtX25lc3RpbmdMZXZlbCA9IHRpbWVyTmVzdGlu
Z0xldmVsICsgMTsKKyAgICAKKyAgICBtX2luZGljYXRlVXNlckdlc3R1cmVXaGVuRmlyZWQgPSBV
c2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgJiYgdGltZW91dCA8
PSBtYXhUaW1lb3V0Rm9yVXNlckdlc3R1cmVGb3J3YXJkaW5nOwogCiAgICAgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRUaW1lb3V0KG1fdGltZW91dElkLCB0aGlzKTsKIApAQCAtMTAxLDYg
KzEwNSwxMSBAQCB2b2lkIERPTVRpbWVyOjpmaXJlZCgpCiB7CiAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICB0aW1lck5l
c3RpbmdMZXZlbCA9IG1fbmVzdGluZ0xldmVsOworICAgIAorICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGdlc3R1cmVJbmRpY2F0b3IobV9pbmRpY2F0ZVVzZXJHZXN0dXJlV2hlbkZpcmVkID8gRGVm
aW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKKyAgICAKKyAgICAvLyBPbmx5IHRoZSBmaXJzdCBleGVjdXRpb24gb2YgYSBtdWx0aS1z
aG90IHRpbWVyIHNob3VsZCBnZXQgYW4gYWZmaXJtYXRpdmUgdXNlciBnZXN0dXJlIGluZGljYXRv
ci4KKyAgICBtX2luZGljYXRlVXNlckdlc3R1cmVXaGVuRmlyZWQgPSBmYWxzZTsKIAogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxGaXJlVGltZXIoY29udGV4dCwgbV90aW1lb3V0SWQpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9ET01UaW1lci5oCShyZXZpc2lvbiA4MDk1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIE93blB0cjxTY2hlZHVsZWRBY3Rpb24+IG1fYWN0aW9uOwogICAgICAg
ICBpbnQgbV9vcmlnaW5hbFRpbWVvdXQ7CiAgICAgICAgIHN0YXRpYyBkb3VibGUgc19taW5EZWZh
dWx0VGltZXJJbnRlcnZhbDsKKyAgICAgICAgYm9vbCBtX2luZGljYXRlVXNlckdlc3R1cmVXaGVu
RmlyZWQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gODA5OTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxMS0wMy0xMyAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGltZXItYmFz
ZWQgZXZlbnRzIHNob3VsZCBpbmhlcml0IHRoZSB1c2VyIGdlc3R1cmUgc3RhdGUgb2YgdGhlaXIK
KyAgICAgICAgb3JpZ2luYXRpbmcgZXZlbnQgaW4gY2VydGFpbiBjYXNlcy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MTA0CisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9wb3B1cC1ibG9ja2luZy10aW1lcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2luZy10aW1lcnMuaHRtbDogQWRkZWQuCisK
IDIwMTEtMDMtMTMgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9w
dXAtYmxvY2tpbmctdGltZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2luZy10aW1lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tpbmctdGltZXJzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorQ2xpY2sgSGVyZQorVGVz
dCBjYWxsaW5nIHdpbmRvdy5vcGVuKCkgZGlyZWN0bHkuIEEgcG9wdXAgc2hvdWxkIGJlIGFsbG93
ZWQuCitQQVNTIHdpbiBpcyBub24tbnVsbC4KK1Rlc3QgY2FsbGluZyB3aW5kb3cub3BlbigpIHdp
dGggYSAwIG1zIGRlbGF5LiBBIHBvcHVwIHNob3VsZCBiZSBhbGxvd2VkLgorUEFTUyB3aW4gaXMg
bm9uLW51bGwuCitUZXN0IGNhbGxpbmcgd2luZG93Lm9wZW4oKSBpbiBhIDEwMCBtcyBpbnRlcnZh
bC4gQSBwb3B1cCBzaG91bGQgb25seSBiZSBhbGxvd2VkIG9uIHRoZSBmaXJzdCBleGVjdXRpb24g
b2YgdGhlIGludGVydmFsLgorUEFTUyB3aW4gaXMgbm9uLW51bGwuCitUZXN0IGNhbGxpbmcgd2lu
ZG93Lm9wZW4oKSBpbiBhIDEwMCBtcyBpbnRlcnZhbC4gQSBwb3B1cCBzaG91bGQgb25seSBiZSBh
bGxvd2VkIG9uIHRoZSBmaXJzdCBleGVjdXRpb24gb2YgdGhlIGludGVydmFsLgorUEFTUyB3aW4g
aXMgdW5kZWZpbmVkLgorVGVzdCBjYWxsaW5nIHdpbmRvdy5vcGVuKCkgd2l0aCBhIDEwMDAgbXMg
ZGVsYXkuIEEgcG9wdXAgc2hvdWxkIGJlIGFsbG93ZWQuCitQQVNTIHdpbiBpcyBub24tbnVsbC4K
K1Rlc3QgY2FsbGluZyB3aW5kb3cub3BlbigpIHdpdGggYSAxMDAxIG1zIGRlbGF5LiBBIHBvcHVw
IHNob3VsZCBub3QgYmUgYWxsb3dlZC4KK1BBU1Mgd2luIGlzIHVuZGVmaW5lZC4KKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tpbmctdGltZXJzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tpbmctdGltZXJzLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2lu
Zy10aW1lcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorPGhlYWQ+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIHZhciB3aW47CisgICAgICAgIHZhciBp
bnRlcnZhbElkOworICAgICAgICB2YXIgZmlyc3RJbnRlcnZhbEV4ZWN1dGlvbiA9IHRydWU7Cisg
ICAgICAgIAorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5zZXRDYW5PcGVuV2luZG93cygpOworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgZnVuY3Rpb24gY2xpY2tIYW5kbGVyKCkgeworICAgICAgICAgICAgd2luID0g
d2luZG93Lm9wZW4oImFib3V0OmJsYW5rIik7CisgICAgICAgICAgICBzZWxmLmZvY3VzKCk7Cisg
ICAgICAgICAgICBkZWJ1ZygiVGVzdCBjYWxsaW5nIHdpbmRvdy5vcGVuKCkgZGlyZWN0bHkuIEEg
cG9wdXAgc2hvdWxkIGJlIGFsbG93ZWQuIik7CisgICAgICAgICAgICBzaG91bGRCZU5vbk51bGwo
IndpbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHdpbiA9IHdpbmRvdy5vcGVuKCJhYm91dDpi
bGFuayIpOworICAgICAgICAgICAgICAgIHNlbGYuZm9jdXMoKTsKKyAgICAgICAgICAgICAgICBk
ZWJ1ZygiVGVzdCBjYWxsaW5nIHdpbmRvdy5vcGVuKCkgd2l0aCBhIDAgbXMgZGVsYXkuIEEgcG9w
dXAgc2hvdWxkIGJlIGFsbG93ZWQuIikKKyAgICAgICAgICAgICAgICBzaG91bGRCZU5vbk51bGwo
IndpbiIpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgd2luID0gd2luZG93Lm9wZW4o
ImFib3V0OmJsYW5rIik7CisgICAgICAgICAgICAgICAgc2VsZi5mb2N1cygpOworICAgICAgICAg
ICAgICAgIGRlYnVnKCJUZXN0IGNhbGxpbmcgd2luZG93Lm9wZW4oKSB3aXRoIGEgMTAwMCBtcyBk
ZWxheS4gQSBwb3B1cCBzaG91bGQgYmUgYWxsb3dlZC4iKQorICAgICAgICAgICAgICAgIHNob3Vs
ZEJlTm9uTnVsbCgid2luIik7CisgICAgICAgICAgICB9LCAxMDAwKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB3aW4g
PSB3aW5kb3cub3BlbigiYWJvdXQ6YmxhbmsiKTsKKyAgICAgICAgICAgICAgICBzZWxmLmZvY3Vz
KCk7CisgICAgICAgICAgICAgICAgZGVidWcoIlRlc3QgY2FsbGluZyB3aW5kb3cub3BlbigpIHdp
dGggYSAxMDAxIG1zIGRlbGF5LiBBIHBvcHVwIHNob3VsZCBub3QgYmUgYWxsb3dlZC4iKQorICAg
ICAgICAgICAgICAgIHNob3VsZEJlVW5kZWZpbmVkKCJ3aW4iKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
ICAgICB9LCAxMDAxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50ZXJ2YWxJZCA9IHNl
dEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGRlYnVnKCJUZXN0IGNhbGxp
bmcgd2luZG93Lm9wZW4oKSBpbiBhIDEwMCBtcyBpbnRlcnZhbC4gQSBwb3B1cCBzaG91bGQgb25s
eSBiZSBhbGxvd2VkIG9uIHRoZSBmaXJzdCBleGVjdXRpb24gb2YgdGhlIGludGVydmFsLiIpOwor
ICAgICAgICAgICAgICAgIHdpbiA9IHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIpOworICAgICAg
ICAgICAgICAgIHNlbGYuZm9jdXMoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RJbnRlcnZh
bEV4ZWN1dGlvbikgeworICAgICAgICAgICAgICAgICAgICBzaG91bGRCZU5vbk51bGwoIndpbiIp
OworICAgICAgICAgICAgICAgICAgICBmaXJzdEludGVydmFsRXhlY3V0aW9uID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBzaG91bGRCZVVuZGVmaW5lZCgid2luIik7CisgICAgICAgICAgICAgICAgICAgIGNsZWFy
SW50ZXJ2YWwoaW50ZXJ2YWxJZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwg
MTAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gY2xpY2tCdXR0b24o
KSB7CisgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRl
c3QiKTsKKyAgICAgICAgICAgIHZhciBidXR0b25YID0gYnV0dG9uLm9mZnNldExlZnQgKyBidXR0
b24ub2Zmc2V0V2lkdGggLyAyOworICAgICAgICAgICAgdmFyIGJ1dHRvblkgPSBidXR0b24ub2Zm
c2V0VG9wICsgYnV0dG9uLm9mZnNldEhlaWdodCAvIDI7CisgICAgICAgICAgICBpZiAod2luZG93
LmV2ZW50U2VuZGVyKSB7CisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8o
YnV0dG9uWCwgYnV0dG9uWSk7CisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3du
KCk7CisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9ICAgICAgICAKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0iY2xpY2tCdXR0b24oKSI+CisgICAgPGJ1dHRvbiBpZD0idGVzdCIgb25jbGljaz0iY2xpY2tI
YW5kbGVyKCkiPkNsaWNrIEhlcmU8L2J1dHRvbj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzwvYm9keT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85647</attachid>
            <date>2011-03-13 23:16:37 -0700</date>
            <delta_ts>2011-03-14 09:46:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55104-20110313231636.patch</filename>
            <type>text/plain</type>
            <size>9163</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwOTk2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDMtMTMgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRpbWVyLWJhc2VkIGV2ZW50cyBzaG91bGQgaW5oZXJpdCB0aGUgdXNl
ciBnZXN0dXJlIHN0YXRlIG9mIHRoZWlyCisgICAgICAgIG9yaWdpbmF0aW5nIGV2ZW50IGluIGNl
cnRhaW4gY2FzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NTEwNAorICAgICAgICAKKyAgICAgICAgSWYgYSB0aW1lciBpcyBpbnN0YWxsZWQgYnkg
YSBnZXN0dXJlLW9yaWdpbmF0ZWQgZXZlbnQgYW5kIHdpbGwgZmlyZQorICAgICAgICB3aXRoaW4g
b25lIHNlY29uZCwgdGhlIHRpbWVyLWluaXRpYXRlZCBldmVudCBzaG91bGQgYmVoYXZlIGFzIGlm
IGl0CisgICAgICAgIHdlcmUgYWxzbyBpbml0aWF0ZWQgYnkgYSB1c2VyIGdlc3R1cmUuIE11bHRp
LXNob3QgdGltZXJzIHNob3VsZCBvbmx5CisgICAgICAgIGdldCB0aGlzIGJlaGF2aW9yIG9uIHRo
ZWlyIGZpcnN0IGV4ZWN1dGlvbi4gTmVzdGVkIHRpbWVycyBzaG91bGQgbm90CisgICAgICAgIGdl
dCB0aGlzIGJlaGF2aW9yLiBUaGlzIG1ha2VzIHVzIGNvbXBhdGlibGUgd2l0aCBHZWNrbyB3aGVu
IGhhbmRsaW5nCisgICAgICAgIHBvcHVwcyBhbmQgZmlsZSBjaG9vc2VyIGRpYWxvZ3MgY3JlYXRl
ZCBmcm9tIHRpbWVyIGV2ZW50cy4KKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy9wb3B1cC1i
bG9ja2luZy10aW1lcnMuaHRtbAorCisgICAgICAgICogcGFnZS9ET01UaW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01UaW1lcjo6RE9NVGltZXIpOiBTZXQgbV9pbmRpY2F0ZVVzZXJHZXN0
dXJlV2hlbkZpcmVkIGlmIHdlCisgICAgICAgIGFyZSBwcm9jZXNzaW5nIGEgdXNlciBnZXN0dXJl
LCB0aW1lb3V0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAwIG1zCisgICAgICAgIGFuZCBt
X25lc3RpbmdMZXZlbCBpcyAxLgorICAgICAgICAoV2ViQ29yZTo6RE9NVGltZXI6OmZpcmVkKTog
Q3JlYXRlIGEgVXNlckdlc3R1cmVJbmRpY2F0b3IgYW5kIHNldCBpdHMKKyAgICAgICAgc3RhdGUg
YmFzZWQgb24gdGhlIHZhbHVlIG9mIG1faW5kaWNhdGVVc2VyR2VzdHVyZVdoZW5GaXJlZC4KKyAg
ICAgICAgKiBwYWdlL0RPTVRpbWVyLmg6CisKIDIwMTEtMDMtMTMgIERhbiBCZXJuc3RlaW4gIDxt
aXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9ET01UaW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9ET01UaW1lci5jcHAJKHJldmlzaW9uIDgwOTU2KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9ET01UaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJTY2hlZHVsZWRB
Y3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAi
VXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMzgsNiArMzksNyBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgaW50IG1heFRpbWVy
TmVzdGluZ0xldmVsID0gNTsKK3N0YXRpYyBjb25zdCBpbnQgbWF4VGltZW91dEZvclVzZXJHZXN0
dXJlRm9yd2FyZGluZyA9IDEwMDA7IC8vIE9uZSBzZWNvbmQgbWF0Y2hlcyBHZWNrby4KIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lTWlsbGlzZWNvbmQgPSAwLjAwMTsKIGRvdWJsZSBET01UaW1lcjo6
c19taW5EZWZhdWx0VGltZXJJbnRlcnZhbCA9IDAuMDEwOyAvLyAxMCBtaWxsaXNlY29uZHMKIApA
QCAtNTYsNiArNTgsMTAgQEAgRE9NVGltZXI6OkRPTVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eAogICAgIG1fdGltZW91dElkID0gbGFzdFVzZWRUaW1lb3V0SWQ7CiAKICAgICBtX25lc3RpbmdM
ZXZlbCA9IHRpbWVyTmVzdGluZ0xldmVsICsgMTsKKyAgICAKKyAgICBtX2luZGljYXRlVXNlckdl
c3R1cmVXaGVuRmlyZWQgPSBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkKKyAgICAgICAgJiYgdGltZW91dCA8PSBtYXhUaW1lb3V0Rm9yVXNlckdlc3R1cmVGb3J3
YXJkaW5nCisgICAgICAgICYmIG1fbmVzdGluZ0xldmVsID09IDE7CiAKICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmFkZFRpbWVvdXQobV90aW1lb3V0SWQsIHRoaXMpOwogCkBAIC0xMDEs
NiArMTA3LDExIEBAIHZvaWQgRE9NVGltZXI6OmZpcmVkKCkKIHsKICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIHRpbWVy
TmVzdGluZ0xldmVsID0gbV9uZXN0aW5nTGV2ZWw7CisgICAgCisgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgZ2VzdHVyZUluZGljYXRvcihtX2luZGljYXRlVXNlckdlc3R1cmVXaGVuRmlyZWQgPyBE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOworICAgIAorICAgIC8vIE9ubHkgdGhlIGZpcnN0IGV4ZWN1dGlvbiBvZiBhIG11bHRp
LXNob3QgdGltZXIgc2hvdWxkIGdldCBhbiBhZmZpcm1hdGl2ZSB1c2VyIGdlc3R1cmUgaW5kaWNh
dG9yLgorICAgIG1faW5kaWNhdGVVc2VyR2VzdHVyZVdoZW5GaXJlZCA9IGZhbHNlOwogCiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbEZpcmVUaW1lcihjb250ZXh0LCBtX3RpbWVvdXRJZCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVRpbWVyLmgJKHJldmlzaW9uIDgwOTU2KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01UaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgT3duUHRyPFNjaGVkdWxlZEFjdGlvbj4gbV9hY3Rpb247CiAgICAg
ICAgIGludCBtX29yaWdpbmFsVGltZW91dDsKICAgICAgICAgc3RhdGljIGRvdWJsZSBzX21pbkRl
ZmF1bHRUaW1lckludGVydmFsOworICAgICAgICBib29sIG1faW5kaWNhdGVVc2VyR2VzdHVyZVdo
ZW5GaXJlZDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA4MDk5NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDExLTAzLTEzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaW1lci1i
YXNlZCBldmVudHMgc2hvdWxkIGluaGVyaXQgdGhlIHVzZXIgZ2VzdHVyZSBzdGF0ZSBvZiB0aGVp
cgorICAgICAgICBvcmlnaW5hdGluZyBldmVudCBpbiBjZXJ0YWluIGNhc2VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUxMDQKKworICAgICAgICAq
IGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NraW5nLXRpbWVycy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZXZlbnRzL3BvcHVwLWJsb2NraW5nLXRpbWVycy5odG1sOiBBZGRlZC4K
KwogMjAxMS0wMy0xMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9w
b3B1cC1ibG9ja2luZy10aW1lcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJsb2NraW5nLXRpbWVycy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2luZy10aW1lcnMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACitDbGljayBIZXJlCitU
ZXN0IGNhbGxpbmcgd2luZG93Lm9wZW4oKSBkaXJlY3RseS4gQSBwb3B1cCBzaG91bGQgYmUgYWxs
b3dlZC4KK1BBU1Mgd2luIGlzIG5vbi1udWxsLgorVGVzdCBjYWxsaW5nIHdpbmRvdy5vcGVuKCkg
d2l0aCBhIDAgbXMgZGVsYXkuIEEgcG9wdXAgc2hvdWxkIGJlIGFsbG93ZWQuCitQQVNTIHdpbiBp
cyBub24tbnVsbC4KK1Rlc3QgY2FsbGluZyB3aW5kb3cub3BlbigpIGluIGEgMTAwIG1zIGludGVy
dmFsLiBBIHBvcHVwIHNob3VsZCBvbmx5IGJlIGFsbG93ZWQgb24gdGhlIGZpcnN0IGV4ZWN1dGlv
biBvZiB0aGUgaW50ZXJ2YWwuCitQQVNTIHdpbiBpcyBub24tbnVsbC4KK1Rlc3QgY2FsbGluZyB3
aW5kb3cub3BlbigpIGluIGEgMTAwIG1zIGludGVydmFsLiBBIHBvcHVwIHNob3VsZCBvbmx5IGJl
IGFsbG93ZWQgb24gdGhlIGZpcnN0IGV4ZWN1dGlvbiBvZiB0aGUgaW50ZXJ2YWwuCitQQVNTIHdp
biBpcyB1bmRlZmluZWQuCitUZXN0IGNhbGxpbmcgd2luZG93Lm9wZW4oKSBpbiBhIG5lc3RlZCBj
YWxsIHRvIHNldFRpbWVvdXQoKS4gQSBwb3B1cCBzaG91bGQgbm90IGJlIGFsbG93ZWQuCitQQVNT
IHdpbiBpcyB1bmRlZmluZWQuCitUZXN0IGNhbGxpbmcgd2luZG93Lm9wZW4oKSB3aXRoIGEgMTAw
MCBtcyBkZWxheS4gQSBwb3B1cCBzaG91bGQgYmUgYWxsb3dlZC4KK1BBU1Mgd2luIGlzIG5vbi1u
dWxsLgorVGVzdCBjYWxsaW5nIHdpbmRvdy5vcGVuKCkgd2l0aCBhIDEwMDEgbXMgZGVsYXkuIEEg
cG9wdXAgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLgorUEFTUyB3aW4gaXMgdW5kZWZpbmVkLgorCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2luZy10aW1lcnMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2luZy10aW1l
cnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BvcHVwLWJs
b2NraW5nLXRpbWVycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACis8aGVhZD4K
KyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgdmFyIHdpbjsKKyAgICAgICAg
dmFyIGludGVydmFsSWQ7CisgICAgICAgIHZhciBmaXJzdEludGVydmFsRXhlY3V0aW9uID0gdHJ1
ZTsKKyAgICAgICAgCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5XaW5kb3dzKCk7CisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5zZXRQb3B1cEJsb2NraW5nRW5hYmxlZCh0cnVlKTsKKyAgICAgICAg
fQorICAgIAorICAgICAgICBmdW5jdGlvbiBjbGlja0hhbmRsZXIoKSB7CisgICAgICAgICAgICB3
aW4gPSB3aW5kb3cub3BlbigiYWJvdXQ6YmxhbmsiKTsKKyAgICAgICAgICAgIHNlbGYuZm9jdXMo
KTsKKyAgICAgICAgICAgIGRlYnVnKCJUZXN0IGNhbGxpbmcgd2luZG93Lm9wZW4oKSBkaXJlY3Rs
eS4gQSBwb3B1cCBzaG91bGQgYmUgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgIHNob3VsZEJlTm9u
TnVsbCgid2luIik7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgd2luID0gd2luZG93Lm9wZW4oImFi
b3V0OmJsYW5rIik7CisgICAgICAgICAgICAgICAgc2VsZi5mb2N1cygpOworICAgICAgICAgICAg
ICAgIGRlYnVnKCJUZXN0IGNhbGxpbmcgd2luZG93Lm9wZW4oKSB3aXRoIGEgMCBtcyBkZWxheS4g
QSBwb3B1cCBzaG91bGQgYmUgYWxsb3dlZC4iKQorICAgICAgICAgICAgICAgIHNob3VsZEJlTm9u
TnVsbCgid2luIik7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB3aW4gPSB3aW5kb3cu
b3BlbigiYWJvdXQ6YmxhbmsiKTsKKyAgICAgICAgICAgICAgICBzZWxmLmZvY3VzKCk7CisgICAg
ICAgICAgICAgICAgZGVidWcoIlRlc3QgY2FsbGluZyB3aW5kb3cub3BlbigpIHdpdGggYSAxMDAw
IG1zIGRlbGF5LiBBIHBvcHVwIHNob3VsZCBiZSBhbGxvd2VkLiIpCisgICAgICAgICAgICAgICAg
c2hvdWxkQmVOb25OdWxsKCJ3aW4iKTsKKyAgICAgICAgICAgIH0sIDEwMDApOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHdpbiA9IHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIpOworICAgICAgICAgICAgICAgIHNlbGYu
Zm9jdXMoKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiVGVzdCBjYWxsaW5nIHdpbmRvdy5vcGVu
KCkgd2l0aCBhIDEwMDEgbXMgZGVsYXkuIEEgcG9wdXAgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLiIp
CisgICAgICAgICAgICAgICAgc2hvdWxkQmVVbmRlZmluZWQoIndpbiIpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICAgICAgICAgIH0sIDEwMDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnRlcnZhbElk
ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGVidWcoIlRlc3Qg
Y2FsbGluZyB3aW5kb3cub3BlbigpIGluIGEgMTAwIG1zIGludGVydmFsLiBBIHBvcHVwIHNob3Vs
ZCBvbmx5IGJlIGFsbG93ZWQgb24gdGhlIGZpcnN0IGV4ZWN1dGlvbiBvZiB0aGUgaW50ZXJ2YWwu
Iik7CisgICAgICAgICAgICAgICAgd2luID0gd2luZG93Lm9wZW4oImFib3V0OmJsYW5rIik7Cisg
ICAgICAgICAgICAgICAgc2VsZi5mb2N1cygpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdElu
dGVydmFsRXhlY3V0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlTm9uTnVsbCgi
d2luIik7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0SW50ZXJ2YWxFeGVjdXRpb24gPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHNob3VsZEJlVW5kZWZpbmVkKCJ3aW4iKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9LCAxMDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgIHdpbiA9IHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIpOworICAgICAgICAgICAg
ICAgICAgICBzZWxmLmZvY3VzKCk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJUZXN0IGNh
bGxpbmcgd2luZG93Lm9wZW4oKSBpbiBhIG5lc3RlZCBjYWxsIHRvIHNldFRpbWVvdXQoKS4gQSBw
b3B1cCBzaG91bGQgbm90IGJlIGFsbG93ZWQuIikKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxk
QmVVbmRlZmluZWQoIndpbiIpOworICAgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAg
fSwgMzAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gY2xpY2tCdXR0
b24oKSB7CisgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InRlc3QiKTsKKyAgICAgICAgICAgIHZhciBidXR0b25YID0gYnV0dG9uLm9mZnNldExlZnQgKyBi
dXR0b24ub2Zmc2V0V2lkdGggLyAyOworICAgICAgICAgICAgdmFyIGJ1dHRvblkgPSBidXR0b24u
b2Zmc2V0VG9wICsgYnV0dG9uLm9mZnNldEhlaWdodCAvIDI7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3Zl
VG8oYnV0dG9uWCwgYnV0dG9uWSk7CisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VE
b3duKCk7CisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9ICAgICAgICAKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0iY2xpY2tCdXR0b24oKSI+CisgICAgPGJ1dHRvbiBpZD0idGVzdCIgb25jbGljaz0iY2xp
Y2tIYW5kbGVyKCkiPkNsaWNrIEhlcmU8L2J1dHRvbj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzwvYm9keT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="77800"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>