<?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>89158</bug_id>
          
          <creation_ts>2012-06-14 19:38:55 -0700</creation_ts>
          <short_desc>test-webkitpy: add a -p flag to pass through captured output to enable debugging</short_desc>
          <delta_ts>2012-06-19 21:01:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>649784</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-14 19:38:55 -0700</bug_when>
    <thetext>test-webkitpy: add a -p flag to pass through captured output to enable debugging</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649788</commentid>
    <comment_count>1</comment_count>
      <attachid>147715</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-14 19:46:35 -0700</bug_when>
    <thetext>Created attachment 147715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649791</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-14 19:48:57 -0700</bug_when>
    <thetext>I&apos;ve tested this manually, but I&apos;m not sure how to test this in an automated way, since it would require test-webkitpy to test itself in a particularly insidious manner (I&apos;m not actually sure it&apos;s even possible).

I&apos;m not sure it&apos;s worth adding tests, but if anyone has any bright ideas I&apos;m open to them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652505</commentid>
    <comment_count>3</comment_count>
      <attachid>147715</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-19 09:04:23 -0700</bug_when>
    <thetext>Comment on attachment 147715
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/outputcapture.py:41
&gt; +# By default we capture the output to a stream. Other modules may override
&gt; +# this function in order to do things like pass through the output. See
&gt; +# webkitpy.test.main for an example.
&gt; +def stream_wrapper(stream):
&gt; +    return StringIO()

Why not have this as a class method/object on outputcaputure.OutputCapture?  Couldn&apos;t you then just do outputcapture.OutputCapture.stream_wrapper = Tee to override it?

&gt; Tools/Scripts/webkitpy/test/main.py:198
&gt; +class Tee(object):

We have a Tee object in deprecatedlogging.py  Maybe we should split out a tee.py file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652515</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-19 09:16:59 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 147715 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147715&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/outputcapture.py:41
&gt; &gt; +# By default we capture the output to a stream. Other modules may override
&gt; &gt; +# this function in order to do things like pass through the output. See
&gt; &gt; +# webkitpy.test.main for an example.
&gt; &gt; +def stream_wrapper(stream):
&gt; &gt; +    return StringIO()
&gt; 
&gt; Why not have this as a class method/object on outputcaputure.OutputCapture?  Couldn&apos;t you then just do outputcapture.OutputCapture.stream_wrapper = Tee to override it?
&gt; 

Sure, I can do that. Seems like the same either way to me, but I know you don&apos;t seem to like free variables and functions.

&gt; &gt; Tools/Scripts/webkitpy/test/main.py:198
&gt; &gt; +class Tee(object):
&gt; 
&gt; We have a Tee object in deprecatedlogging.py  Maybe we should split out a tee.py file?

I didn&apos;t know about that class. However, having now looked at it, it seems hardly worth it for a class that is fewer lines of code than the license text. Can we leave things like this and then just focus on getting rid of deprecatedlogging?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652668</commentid>
    <comment_count>5</comment_count>
      <attachid>148386</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-19 12:03:51 -0700</bug_when>
    <thetext>Created attachment 148386
update w/ review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652669</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-19 12:06:30 -0700</bug_when>
    <thetext>Okay, having gone through this again, there&apos;s three changes.

1) I moved the wrapper to a static method as per your suggestion

2) I realized that your Tee class was more like a proper tee, and mine wasn&apos;t, so I renamed mine to avoid confusion. We should still get rid of deprecated_logging :)

3) I added in some code to make sure that output from the debugger itself is not included in the captured stream. I had originally had this in my patch, but for some reason when I was testing the version I initially uploaded, I didn&apos;t seem to need it. Testing again now, I can&apos;t reproduce that and it seems clear that I do need to filter out the debugger output (which makes more sense).

WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652949</commentid>
    <comment_count>7</comment_count>
      <attachid>148386</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-19 16:29:59 -0700</bug_when>
    <thetext>Comment on attachment 148386
update w/ review feedback

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

Looks OK.  the --pass-through doesn&apos;t seem like quite the right name... since this seems to be very specific to the python debugger.

&gt; Tools/Scripts/webkitpy/common/system/outputcapture.py:43
&gt; +    # By default we capture the output to a stream. Other modules may override
&gt; +    # this function in order to do things like pass through the output. See
&gt; +    # webkitpy.test.main for an example.
&gt; +    @staticmethod
&gt; +    def stream_wrapper(stream):
&gt; +        return StringIO()

Thank you.  This is much more appealing to my eyes. :)

&gt; Tools/Scripts/webkitpy/test/main.py:65
&gt; +        parser.add_option(&apos;-p&apos;, &apos;--pass-through&apos;, action=&apos;store_true&apos;, default=False,
&gt; +                          help=&apos;enable debugging by passing captured output through to the system&apos;)

You should probably correct this to indicate that this is specific to the python debugger, sicne it seems to do some sort fo stack check.

&gt; Tools/Scripts/webkitpy/test/main.py:210
&gt; +        if not stack[1][1].endswith(&apos;cmd.py&apos;):

Why cmd.py?  Where does that come from?  Maybe this should be a self._in_debugger() check instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652965</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-19 16:41:23 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 148386 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148386&amp;action=review
&gt; 
&gt; Looks OK.  the --pass-through doesn&apos;t seem like quite the right name... since this seems to be very specific to the python debugger.

Technically it&apos;s useful even if you aren&apos;t running under the debugger, if you actually want to see the output of stdout/stderr when running the tests (e.g., if you were just adding printfs).

That said, I&apos;m certainly open to other names.

&gt; 
&gt; You should probably correct this to indicate that this is specific to the python debugger, sicne it seems to do some sort fo stack check.
&gt;

Note above, but I will try to clarify.
 
&gt; &gt; Tools/Scripts/webkitpy/test/main.py:210
&gt; &gt; +        if not stack[1][1].endswith(&apos;cmd.py&apos;):
&gt; 
&gt; Why cmd.py?  Where does that come from?
&gt;  Maybe this should be a self._in_debugger() check instead?

That&apos;s just the basename of the first stack frame above in the debugger. I will try to clarify the comment. I&apos;m not sure that adding a separate method would help beyond the comment that&apos;s already there ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653015</commentid>
    <comment_count>9</comment_count>
      <attachid>148465</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-19 17:11:05 -0700</bug_when>
    <thetext>Created attachment 148465
update w/ more review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653016</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-19 17:12:42 -0700</bug_when>
    <thetext>trying again, I made the stack inspection clearer and more bulletproof, hopefully that helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653117</commentid>
    <comment_count>11</comment_count>
      <attachid>148465</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-19 20:04:31 -0700</bug_when>
    <thetext>Comment on attachment 148465
update w/ more review feedback

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

Looks great.  I don&apos;t need to see this again, but you might find my nits below helpful (or not). :)  Thanks again.

&gt; Tools/Scripts/webkitpy/test/main.py:65
&gt; +        parser.add_option(&apos;-p&apos;, &apos;--pass-through&apos;, action=&apos;store_true&apos;, default=False,
&gt; +                          help=&apos;enable the python debugger by passing captured output through to the system&apos;)

&quot;enable the python debugger&quot; sounds like it&apos;s turning on the debugger.  Maybe you want it do do that too?

&gt; Tools/Scripts/webkitpy/test/main.py:199
&gt; +class _CaptureAndPassThroughStream(object):

This name is no longer probably specific enough, now that I understand what this code does. :)  It probably should mention the debugger or pdb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653154</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-19 20:58:17 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 148465 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=148465&amp;action=review
&gt; 
&gt; Looks great.  I don&apos;t need to see this again, but you might find my nits below helpful (or not). :)  Thanks again.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/test/main.py:65
&gt; &gt; +        parser.add_option(&apos;-p&apos;, &apos;--pass-through&apos;, action=&apos;store_true&apos;, default=False,
&gt; &gt; +                          help=&apos;enable the python debugger by passing captured output through to the system&apos;)
&gt; 
&gt; &quot;enable the python debugger&quot; sounds like it&apos;s turning on the debugger.  Maybe you want it do do that too?
&gt; 

No, I don&apos;t want to actually start things in the debugger with this flag; usually I put specific breakpoints in the routines I&apos;m testing, and starting in the debugger would just be annoying. If others end up using this I&apos;d be happy to add a --start-in-debugger flag, though.

&gt; &gt; Tools/Scripts/webkitpy/test/main.py:199
&gt; &gt; +class _CaptureAndPassThroughStream(object):
&gt; 
&gt; This name is no longer probably specific enough, now that I understand what this code does. :)  It probably should mention the debugger or pdb.

I&apos;ll see what I can come up with. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653157</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-19 21:01:48 -0700</bug_when>
    <thetext>Committed r120794: &lt;http://trac.webkit.org/changeset/120794&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147715</attachid>
            <date>2012-06-14 19:46:35 -0700</date>
            <delta_ts>2012-06-19 12:03:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89158-20120614194635.patch</filename>
            <type>text/plain</type>
            <size>5640</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzcwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGVhMmI0YTFlNWIxMmIwYTZkMjkwNjIyYTQ2OTZkY2Zh
NGRlNGRlMi4uNmE3N2VmZmY5M2EyMzgwNzk1MjVmYTlkNmM5YzhjZDgxODExMWE5MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMz
IEBACiAyMDEyLTA2LTE0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIHRlc3Qtd2Via2l0cHk6IGFkZCBhIC1wIGZsYWcgdG8gcGFzcyB0aHJvdWdoIGNhcHR1
cmVkIG91dHB1dCB0byBlbmFibGUgZGVidWdnaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vcm1hbGx5IHdoZW4gb3V0cHV0Y2FwdHVyZSBydW5zIGl0
IGludGVyY2VwdHMgc3Rkb3V0L3N0ZGVyciwKKyAgICAgICAgd2hpY2ggbWFrZXMgcnVubmluZyB1
bmRlciB0aGUgZGVidWdnZXIgZGlmZmljdWx0IGFuZCBtb3N0bHkKKyAgICAgICAgcG9pbnRsZXNz
IChzaW5jZSB5b3UgY2FuJ3Qgc2VlIGFueSBvdXRwdXQpLiBUaGlzIGNoYW5nZSBhZGRzIGEKKyAg
ICAgICAgZmxhZyB0byB0ZXN0LXdlYmtpdHB5ICgtcCkgdGhhdCB3aWxsIGNhdXNlIG91dHB1dGNh
cHR1cmUgdG8gcGFzcworICAgICAgICB0aHJvdWdoIHRoZSBvdXRwdXQgYXMgd2VsbCBhcyBjYXB0
dXJlIGl0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1
dGNhcHR1cmUucHk6CisgICAgICAgIChzdHJlYW1fd3JhcHBlcik6CisgICAgICAgIChPdXRwdXRD
YXB0dXJlLl9jYXB0dXJlX291dHB1dF93aXRoX25hbWUpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXRjYXB0dXJlX3VuaXR0ZXN0LnB5OgorICAgICAgICAo
T3V0cHV0Q2FwdHVyZVRlc3Quc2V0VXApOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVz
dC9tYWluLnB5OgorICAgICAgICAoVGVzdGVyLl9wYXJzZV9hcmdzKToKKyAgICAgICAgKFRlc3Rl
ci5fcnVuX3Rlc3RzKToKKyAgICAgICAgKFRlc3Rlci5fbG9nX2V4Y2VwdGlvbik6CisgICAgICAg
IChUZWUpOgorICAgICAgICAoVGVlLl9faW5pdF9fKToKKyAgICAgICAgKFRlZS53cml0ZSk6Cisg
ICAgICAgIChUZWUuZmx1c2gpOgorICAgICAgICAoVGVlLmdldHZhbHVlKToKKworMjAxMi0wNi0x
NCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwogICAgICAgICB3ZWJraXRw
eTogcmVtb3ZlIER1bW15T3B0aW9ucyBhbmQgY2xlYW4gdXAgdGhlIGNvZGUgaW4gUG9ydC5nZXRf
b3B0aW9uKCkgYW5kIFBvcnQuc2V0X29wdGlvbl9kZWZhdWx0KCkKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTM1CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXRjYXB0dXJlLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUucHkKaW5kZXggNjYx
ODhjMGNiZTc3ZTAwM2JiNTRhNDU2NzNiZWViMzQ5OWFjMDcyMi4uNmVjMjkxNmMyNWQ5OWIxOWZl
NGQ0MjFhOGVhZTVlYWY3NDcxMTA3NiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUucHkKQEAgLTMsNyArMyw3IEBACiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoKLSMgCisjCiAjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAogIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0j
IAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtMzQsNiAr
MzQsMTMgQEAgaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwog
CiAKKyMgQnkgZGVmYXVsdCB3ZSBjYXB0dXJlIHRoZSBvdXRwdXQgdG8gYSBzdHJlYW0uIE90aGVy
IG1vZHVsZXMgbWF5IG92ZXJyaWRlCisjIHRoaXMgZnVuY3Rpb24gaW4gb3JkZXIgdG8gZG8gdGhp
bmdzIGxpa2UgcGFzcyB0aHJvdWdoIHRoZSBvdXRwdXQuIFNlZQorIyB3ZWJraXRweS50ZXN0Lm1h
aW4gZm9yIGFuIGV4YW1wbGUuCitkZWYgc3RyZWFtX3dyYXBwZXIoc3RyZWFtKToKKyAgICByZXR1
cm4gU3RyaW5nSU8oKQorCisKIGNsYXNzIE91dHB1dENhcHR1cmUob2JqZWN0KToKICAgICBkZWYg
X19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuc2F2ZWRfb3V0cHV0cyA9IGRpY3QoKQpAQCAt
NDUsOCArNTIsOSBAQCBjbGFzcyBPdXRwdXRDYXB0dXJlKG9iamVjdCk6CiAgICAgICAgICAgICBz
ZWxmLl9sb2dzX2hhbmRsZXIuc2V0TGV2ZWwoc2VsZi5fbG9nX2xldmVsKQogCiAgICAgZGVmIF9j
YXB0dXJlX291dHB1dF93aXRoX25hbWUoc2VsZiwgb3V0cHV0X25hbWUpOgotICAgICAgICBzZWxm
LnNhdmVkX291dHB1dHNbb3V0cHV0X25hbWVdID0gZ2V0YXR0cihzeXMsIG91dHB1dF9uYW1lKQot
ICAgICAgICBjYXB0dXJlZF9vdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHN0cmVhbSA9IGdl
dGF0dHIoc3lzLCBvdXRwdXRfbmFtZSkKKyAgICAgICAgY2FwdHVyZWRfb3V0cHV0ID0gc3RyZWFt
X3dyYXBwZXIoc3RyZWFtKQorICAgICAgICBzZWxmLnNhdmVkX291dHB1dHNbb3V0cHV0X25hbWVd
ID0gc3RyZWFtCiAgICAgICAgIHNldGF0dHIoc3lzLCBvdXRwdXRfbmFtZSwgY2FwdHVyZWRfb3V0
cHV0KQogICAgICAgICByZXR1cm4gY2FwdHVyZWRfb3V0cHV0CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
ZXN0L21haW4ucHkKaW5kZXggMDIxMWIxMjYxYjY3NDdmNDFiYmEwNWM5OTJiN2MxZTcxNDZjMTg0
NC4uMjUwZDgyODlmMzYwMWY3MTRmMmQxMDg2NmJhYzlkNTIwZjVhMDVkOCAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L21haW4ucHkKQEAgLTMxLDYgKzMxLDcgQEAgaW1wb3J0IHRyYWNlYmFjawog
aW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVt
IGltcG9ydCBGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91
dHB1dGNhcHR1cmUKIGZyb20gd2Via2l0cHkudGVzdC50ZXN0X2ZpbmRlciBpbXBvcnQgVGVzdEZp
bmRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnJ1bm5lciBpbXBvcnQgVGVzdFJ1bm5lcgogCkBAIC01
OSw2ICs2MCw4IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSd2ZXJib3NlIG91dHB1dCAoc3BlY2lmeSBvbmNlIGZvciBpbmRpdmlkdWFsIHRl
c3QgcmVzdWx0cywgdHdpY2UgZm9yIGRlYnVnIG1lc3NhZ2VzKScpCiAgICAgICAgIHBhcnNlci5h
ZGRfb3B0aW9uKCctLXNraXAtaW50ZWdyYXRpb250ZXN0cycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScs
IGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RvIG5vdCBy
dW4gdGhlIGludGVncmF0aW9uIHRlc3RzJykKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1w
JywgJy0tcGFzcy10aHJvdWdoJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZW5hYmxlIGRlYnVnZ2luZyBieSBwYXNz
aW5nIGNhcHR1cmVkIG91dHB1dCB0aHJvdWdoIHRvIHRoZSBzeXN0ZW0nKQogCiAgICAgICAgIHBh
cnNlci5lcGlsb2cgPSAoJ1thcmdzLi4uXSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIG1vZHVsZXMs
IHRlc3RfY2xhc3Nlcywgb3IgaW5kaXZpZHVhbCB0ZXN0cy4gJwogICAgICAgICAgICAgICAgICAg
ICAgICAgICdJZiBubyBhcmdzIGFyZSBnaXZlbiwgYWxsIHRoZSB0ZXN0cyB3aWxsIGJlIHJ1bi4n
KQpAQCAtMTc2LDYgKzE3OSw4IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0
X3J1bm5lciA9IFRlc3RSdW5uZXIoc2VsZi5zdHJlYW0sIHNlbGYuX29wdGlvbnMsIGxvYWRlcikK
IAogICAgICAgICBfbG9nLmRlYnVnKCJSdW5uaW5nIHRoZSB0ZXN0cy4iKQorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLnBhc3NfdGhyb3VnaDoKKyAgICAgICAgICAgIG91dHB1dGNhcHR1cmUuc3Ry
ZWFtX3dyYXBwZXIgPSBUZWUKICAgICAgICAgcmVzdWx0ID0gdGVzdF9ydW5uZXIucnVuKHRlc3Rf
c3VpdGUpCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAgICAgICAgICBj
b3Yuc3RvcCgpCkBAIC0xODgsMyArMTkzLDE5IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAg
ICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9cykKICAgICAgICAgZm9yIGwgaW4gcy5idWZs
aXN0OgogICAgICAgICAgICAgX2xvZy5lcnJvcignICAnICsgbC5yc3RyaXAoKSkKKworCitjbGFz
cyBUZWUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtKToKKyAgICAgICAg
c2VsZi5fYnVmZmVyID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzZWxmLl9zdHJlYW0g
PSBzdHJlYW0KKworICAgIGRlZiB3cml0ZShzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9zdHJl
YW0ud3JpdGUobXNnKQorICAgICAgICBzZWxmLl9idWZmZXIud3JpdGUobXNnKQorCisgICAgZGVm
IGZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLl9zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIGdl
dHZhbHVlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLmdldHZhbHVlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148386</attachid>
            <date>2012-06-19 12:03:51 -0700</date>
            <delta_ts>2012-06-19 17:11:00 -0700</delta_ts>
            <desc>update w/ review feedback</desc>
            <filename>bug-89158-20120619120350.patch</filename>
            <type>text/plain</type>
            <size>6218</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNzQwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2JlNTY1OGEzZWE4Yjc3MDdhOWMzNjI1ZTc5YjQ3N2Fm
NGRlMjZiYS4uMDE1M2RjODYzZjU1MDhmZGE1YTg0NjU3N2NmNWEyZmY2MTQyYzJjMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDEyLTA2LTE0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIHRlc3Qtd2Via2l0cHk6IGFkZCBhIC1wIGZsYWcgdG8gcGFzcyB0aHJvdWdoIGNhcHR1
cmVkIG91dHB1dCB0byBlbmFibGUgZGVidWdnaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vcm1hbGx5IHdoZW4gb3V0cHV0Y2FwdHVyZSBydW5zIGl0
IGludGVyY2VwdHMgc3Rkb3V0L3N0ZGVyciwKKyAgICAgICAgd2hpY2ggbWFrZXMgcnVubmluZyB1
bmRlciB0aGUgZGVidWdnZXIgZGlmZmljdWx0IGFuZCBtb3N0bHkKKyAgICAgICAgcG9pbnRsZXNz
IChzaW5jZSB5b3UgY2FuJ3Qgc2VlIGFueSBvdXRwdXQpLiBUaGlzIGNoYW5nZSBhZGRzIGEKKyAg
ICAgICAgZmxhZyB0byB0ZXN0LXdlYmtpdHB5ICgtcCkgdGhhdCB3aWxsIGNhdXNlIG91dHB1dGNh
cHR1cmUgdG8gcGFzcworICAgICAgICB0aHJvdWdoIHRoZSBvdXRwdXQgYXMgd2VsbCBhcyBjYXB0
dXJlIGl0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1
dGNhcHR1cmUucHk6CisgICAgICAgIChPdXRwdXRDYXB0dXJlLnN0cmVhbV93cmFwcGVyKToKKyAg
ICAgICAgKE91dHB1dENhcHR1cmUuX2NhcHR1cmVfb3V0cHV0X3dpdGhfbmFtZSk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1cmVfdW5pdHRlc3Qu
cHk6CisgICAgICAgIChPdXRwdXRDYXB0dXJlVGVzdC5zZXRVcCk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHk6CisgICAgICAgIChUZXN0ZXIuX3BhcnNlX2FyZ3MpOgor
ICAgICAgICAoVGVzdGVyLl9ydW5fdGVzdHMpOgorICAgICAgICAoVGVzdGVyLl9sb2dfZXhjZXB0
aW9uKToKKyAgICAgICAgKF9DYXB0dXJlQW5kUGFzc1Rocm91Z2hTdHJlYW0pOgorICAgICAgICAo
X0NhcHR1cmVBbmRQYXNzVGhyb3VnaFN0cmVhbS5fX2luaXRfXyk6CisgICAgICAgIChfQ2FwdHVy
ZUFuZFBhc3NUaHJvdWdoU3RyZWFtLndyaXRlKToKKyAgICAgICAgKF9DYXB0dXJlQW5kUGFzc1Ro
cm91Z2hTdHJlYW0uZmx1c2gpOgorICAgICAgICAoX0NhcHR1cmVBbmRQYXNzVGhyb3VnaFN0cmVh
bS5nZXR2YWx1ZSk6CisKIDIwMTItMDYtMTkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAoTlJXVCk6IFJlc3VsdHMgZm9yIG5ldyBub24t
dGV4dC1vbmx5IHRlc3RzIGFyZSBhbHdheXMgcHV0IGluIHRoZSBtb3N0LXNwZWNpZmljIHBsYXRm
b3JtIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL291dHB1dGNhcHR1cmUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vb3V0cHV0Y2FwdHVyZS5weQppbmRleCA2NjE4OGMwY2JlNzdlMDAzYmI1NGE0NTY3M2Jl
ZWIzNDk5YWMwNzIyLi40ZjkzMWI3ZDE2YTg4Yjc1ZGQ0OTM2OGFhMGZkNDBlZjIyYjczODE4IDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2Fw
dHVyZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0
Y2FwdHVyZS5weQpAQCAtMyw3ICszLDcgQEAKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
ICMgbWV0OgotIyAKKyMKICMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xMyw3ICsx
Myw3IEBACiAjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKICMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCisjCiAjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKICMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zNSw2ICszNSwxMyBAQCBmcm9tIFN0cmluZ0lPIGlt
cG9ydCBTdHJpbmdJTwogCiAKIGNsYXNzIE91dHB1dENhcHR1cmUob2JqZWN0KToKKyAgICAjIEJ5
IGRlZmF1bHQgd2UgY2FwdHVyZSB0aGUgb3V0cHV0IHRvIGEgc3RyZWFtLiBPdGhlciBtb2R1bGVz
IG1heSBvdmVycmlkZQorICAgICMgdGhpcyBmdW5jdGlvbiBpbiBvcmRlciB0byBkbyB0aGluZ3Mg
bGlrZSBwYXNzIHRocm91Z2ggdGhlIG91dHB1dC4gU2VlCisgICAgIyB3ZWJraXRweS50ZXN0Lm1h
aW4gZm9yIGFuIGV4YW1wbGUuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzdHJlYW1fd3Jh
cHBlcihzdHJlYW0pOgorICAgICAgICByZXR1cm4gU3RyaW5nSU8oKQorCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVkX291dHB1dHMgPSBkaWN0KCkKICAgICAgICAg
c2VsZi5fbG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCkBAIC00NSw4ICs1Miw5IEBAIGNsYXNzIE91
dHB1dENhcHR1cmUob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2xvZ3NfaGFuZGxlci5zZXRM
ZXZlbChzZWxmLl9sb2dfbGV2ZWwpCiAKICAgICBkZWYgX2NhcHR1cmVfb3V0cHV0X3dpdGhfbmFt
ZShzZWxmLCBvdXRwdXRfbmFtZSk6Ci0gICAgICAgIHNlbGYuc2F2ZWRfb3V0cHV0c1tvdXRwdXRf
bmFtZV0gPSBnZXRhdHRyKHN5cywgb3V0cHV0X25hbWUpCi0gICAgICAgIGNhcHR1cmVkX291dHB1
dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgc3RyZWFtID0gZ2V0YXR0cihzeXMsIG91dHB1dF9uYW1l
KQorICAgICAgICBjYXB0dXJlZF9vdXRwdXQgPSBzZWxmLnN0cmVhbV93cmFwcGVyKHN0cmVhbSkK
KyAgICAgICAgc2VsZi5zYXZlZF9vdXRwdXRzW291dHB1dF9uYW1lXSA9IHN0cmVhbQogICAgICAg
ICBzZXRhdHRyKHN5cywgb3V0cHV0X25hbWUsIGNhcHR1cmVkX291dHB1dCkKICAgICAgICAgcmV0
dXJuIGNhcHR1cmVkX291dHB1dAogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rlc3QvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CmluZGV4
IDAyMTFiMTI2MWI2NzQ3ZjQxYmJhMDVjOTkyYjdjMWU3MTQ2YzE4NDQuLmJkZjk3YjAyZmU5NDIz
MThiZWVkZTRmMTFlNjcxODVjODZkZWVjN2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGVzdC9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWlu
LnB5CkBAIC0yMyw2ICsyMyw3IEBACiAKICIiInVuaXQgdGVzdGluZyBjb2RlIGZvciB3ZWJraXRw
eS4iIiIKIAoraW1wb3J0IGluc3BlY3QKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3B0cGFyc2UK
IGltcG9ydCBTdHJpbmdJTwpAQCAtMzEsNiArMzIsNyBAQCBpbXBvcnQgdHJhY2ViYWNrCiBpbXBv
cnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1w
b3J0IEZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0
Y2FwdHVyZQogZnJvbSB3ZWJraXRweS50ZXN0LnRlc3RfZmluZGVyIGltcG9ydCBUZXN0RmluZGVy
CiBmcm9tIHdlYmtpdHB5LnRlc3QucnVubmVyIGltcG9ydCBUZXN0UnVubmVyCiAKQEAgLTU5LDYg
KzYxLDggQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9J3ZlcmJvc2Ugb3V0cHV0IChzcGVjaWZ5IG9uY2UgZm9yIGluZGl2aWR1YWwgdGVzdCBy
ZXN1bHRzLCB0d2ljZSBmb3IgZGVidWcgbWVzc2FnZXMpJykKICAgICAgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy0tc2tpcC1pbnRlZ3JhdGlvbnRlc3RzJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVm
YXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZG8gbm90IHJ1biB0
aGUgaW50ZWdyYXRpb24gdGVzdHMnKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAn
LS1wYXNzLXRocm91Z2gnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdlbmFibGUgZGVidWdnaW5nIGJ5IHBhc3Npbmcg
Y2FwdHVyZWQgb3V0cHV0IHRocm91Z2ggdG8gdGhlIHN5c3RlbScpCiAKICAgICAgICAgcGFyc2Vy
LmVwaWxvZyA9ICgnW2FyZ3MuLi5dIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgbW9kdWxlcywgdGVz
dF9jbGFzc2VzLCBvciBpbmRpdmlkdWFsIHRlc3RzLiAnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ0lmIG5vIGFyZ3MgYXJlIGdpdmVuLCBhbGwgdGhlIHRlc3RzIHdpbGwgYmUgcnVuLicpCkBA
IC0xNzYsNiArMTgwLDggQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHRlc3RfcnVu
bmVyID0gVGVzdFJ1bm5lcihzZWxmLnN0cmVhbSwgc2VsZi5fb3B0aW9ucywgbG9hZGVyKQogCiAg
ICAgICAgIF9sb2cuZGVidWcoIlJ1bm5pbmcgdGhlIHRlc3RzLiIpCisgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMucGFzc190aHJvdWdoOgorICAgICAgICAgICAgb3V0cHV0Y2FwdHVyZS5PdXRwdXRD
YXB0dXJlLnN0cmVhbV93cmFwcGVyID0gX0NhcHR1cmVBbmRQYXNzVGhyb3VnaFN0cmVhbQogICAg
ICAgICByZXN1bHQgPSB0ZXN0X3J1bm5lci5ydW4odGVzdF9zdWl0ZSkKICAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5zdG9wKCkKQEAgLTE4OCwzICsx
OTQsMjQgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHRyYWNlYmFjay5wcmludF9l
eGMoZmlsZT1zKQogICAgICAgICBmb3IgbCBpbiBzLmJ1Zmxpc3Q6CiAgICAgICAgICAgICBfbG9n
LmVycm9yKCcgICcgKyBsLnJzdHJpcCgpKQorCisKK2NsYXNzIF9DYXB0dXJlQW5kUGFzc1Rocm91
Z2hTdHJlYW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtKToKKyAgICAg
ICAgc2VsZi5fYnVmZmVyID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzZWxmLl9zdHJl
YW0gPSBzdHJlYW0KKworICAgIGRlZiB3cml0ZShzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9z
dHJlYW0ud3JpdGUobXNnKQorCisgICAgICAgICMgSGVyZSB3ZSBhdHRlbXB0IHRvIG1ha2Ugc3Vy
ZSB3ZSBkb24ndCBzYXZlIGRlYnVnZ2VyIG91dHB1dCwgYmVjYXVzZQorICAgICAgICAjIHRoYXQg
d2lsbCBjYXVzZSBPdXRwdXRDYXB0dXJlJ3Mgb3V0cHV0IHRvIGJlIGNvcnJ1cHRlZC4KKyAgICAg
ICAgc3RhY2sgPSBpbnNwZWN0LnN0YWNrKCkKKyAgICAgICAgaWYgbm90IHN0YWNrWzFdWzFdLmVu
ZHN3aXRoKCdjbWQucHknKToKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci53cml0ZShtc2cpCisK
KyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYuX3N0cmVhbS5mbHVzaCgpCisKKyAg
ICBkZWYgZ2V0dmFsdWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIuZ2V0dmFs
dWUoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148465</attachid>
            <date>2012-06-19 17:11:05 -0700</date>
            <delta_ts>2012-06-19 20:04:31 -0700</delta_ts>
            <desc>update w/ more review feedback</desc>
            <filename>bug-89158-20120619171104.patch</filename>
            <type>text/plain</type>
            <size>6632</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNzQwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2JlNTY1OGEzZWE4Yjc3MDdhOWMzNjI1ZTc5YjQ3N2Fm
NGRlMjZiYS4uYjc1Y2RjYzdhMDlhYWYyZDI4MjAzNDNiZmU5MTVmNzg1NzNjOTdkMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMy
IEBACisyMDEyLTA2LTE0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIHRlc3Qtd2Via2l0cHk6IGFkZCBhIC1wIGZsYWcgdG8gcGFzcyB0aHJvdWdoIGNhcHR1
cmVkIG91dHB1dCB0byBlbmFibGUgZGVidWdnaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vcm1hbGx5IHdoZW4gb3V0cHV0Y2FwdHVyZSBydW5zIGl0
IGludGVyY2VwdHMgc3Rkb3V0L3N0ZGVyciwKKyAgICAgICAgd2hpY2ggbWFrZXMgcnVubmluZyB1
bmRlciB0aGUgZGVidWdnZXIgZGlmZmljdWx0IGFuZCBtb3N0bHkKKyAgICAgICAgcG9pbnRsZXNz
IChzaW5jZSB5b3UgY2FuJ3Qgc2VlIGFueSBvdXRwdXQpLiBUaGlzIGNoYW5nZSBhZGRzIGEKKyAg
ICAgICAgZmxhZyB0byB0ZXN0LXdlYmtpdHB5ICgtcCkgdGhhdCB3aWxsIGNhdXNlIG91dHB1dGNh
cHR1cmUgdG8gcGFzcworICAgICAgICB0aHJvdWdoIHRoZSBvdXRwdXQgYXMgd2VsbCBhcyBjYXB0
dXJlIGl0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1
dGNhcHR1cmUucHk6CisgICAgICAgIChPdXRwdXRDYXB0dXJlLnN0cmVhbV93cmFwcGVyKToKKyAg
ICAgICAgKE91dHB1dENhcHR1cmUuX2NhcHR1cmVfb3V0cHV0X3dpdGhfbmFtZSk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1cmVfdW5pdHRlc3Qu
cHk6CisgICAgICAgIChPdXRwdXRDYXB0dXJlVGVzdC5zZXRVcCk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHk6CisgICAgICAgIChUZXN0ZXIuX3BhcnNlX2FyZ3MpOgor
ICAgICAgICAoVGVzdGVyLl9ydW5fdGVzdHMpOgorICAgICAgICAoVGVzdGVyLl9sb2dfZXhjZXB0
aW9uKToKKyAgICAgICAgKF9DYXB0dXJlQW5kUGFzc1Rocm91Z2hTdHJlYW0pOgorICAgICAgICAo
X0NhcHR1cmVBbmRQYXNzVGhyb3VnaFN0cmVhbS5fX2luaXRfXyk6CisgICAgICAgIChfQ2FwdHVy
ZUFuZFBhc3NUaHJvdWdoU3RyZWFtLndyaXRlKToKKyAgICAgICAgKF9DYXB0dXJlQW5kUGFzc1Ro
cm91Z2hTdHJlYW0uX21lc3NhZ2VfaXNfZnJvbV9wZGIpOgorICAgICAgICAoX0NhcHR1cmVBbmRQ
YXNzVGhyb3VnaFN0cmVhbS5mbHVzaCk6CisgICAgICAgIChfQ2FwdHVyZUFuZFBhc3NUaHJvdWdo
U3RyZWFtLmdldHZhbHVlKToKKwogMjAxMi0wNi0xOSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChOUldUKTogUmVzdWx0cyBmb3IgbmV3
IG5vbi10ZXh0LW9ubHkgdGVzdHMgYXJlIGFsd2F5cyBwdXQgaW4gdGhlIG1vc3Qtc3BlY2lmaWMg
cGxhdGZvcm0gZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9vdXRwdXRjYXB0dXJlLnB5CmluZGV4IDY2MTg4YzBjYmU3N2UwMDNiYjU0YTQ1
NjczYmVlYjM0OTlhYzA3MjIuLjRmOTMxYjdkMTZhODhiNzVkZDQ5MzY4YWEwZmQ0MGVmMjJiNzM4
MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRw
dXRjYXB0dXJlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9v
dXRwdXRjYXB0dXJlLnB5CkBAIC0zLDcgKzMsNyBAQAogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQogIyBtZXQ6Ci0jIAorIwogIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTEz
LDcgKzEzLDcgQEAKICMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwogIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKKyMKICMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwog
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAogIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTM1LDYgKzM1LDEzIEBAIGZyb20gU3RyaW5n
SU8gaW1wb3J0IFN0cmluZ0lPCiAKIAogY2xhc3MgT3V0cHV0Q2FwdHVyZShvYmplY3QpOgorICAg
ICMgQnkgZGVmYXVsdCB3ZSBjYXB0dXJlIHRoZSBvdXRwdXQgdG8gYSBzdHJlYW0uIE90aGVyIG1v
ZHVsZXMgbWF5IG92ZXJyaWRlCisgICAgIyB0aGlzIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGRvIHRo
aW5ncyBsaWtlIHBhc3MgdGhyb3VnaCB0aGUgb3V0cHV0LiBTZWUKKyAgICAjIHdlYmtpdHB5LnRl
c3QubWFpbiBmb3IgYW4gZXhhbXBsZS4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHN0cmVh
bV93cmFwcGVyKHN0cmVhbSk6CisgICAgICAgIHJldHVybiBTdHJpbmdJTygpCisKICAgICBkZWYg
X19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuc2F2ZWRfb3V0cHV0cyA9IGRpY3QoKQogICAg
ICAgICBzZWxmLl9sb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KQEAgLTQ1LDggKzUyLDkgQEAgY2xh
c3MgT3V0cHV0Q2FwdHVyZShvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fbG9nc19oYW5kbGVy
LnNldExldmVsKHNlbGYuX2xvZ19sZXZlbCkKIAogICAgIGRlZiBfY2FwdHVyZV9vdXRwdXRfd2l0
aF9uYW1lKHNlbGYsIG91dHB1dF9uYW1lKToKLSAgICAgICAgc2VsZi5zYXZlZF9vdXRwdXRzW291
dHB1dF9uYW1lXSA9IGdldGF0dHIoc3lzLCBvdXRwdXRfbmFtZSkKLSAgICAgICAgY2FwdHVyZWRf
b3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBzdHJlYW0gPSBnZXRhdHRyKHN5cywgb3V0cHV0
X25hbWUpCisgICAgICAgIGNhcHR1cmVkX291dHB1dCA9IHNlbGYuc3RyZWFtX3dyYXBwZXIoc3Ry
ZWFtKQorICAgICAgICBzZWxmLnNhdmVkX291dHB1dHNbb3V0cHV0X25hbWVdID0gc3RyZWFtCiAg
ICAgICAgIHNldGF0dHIoc3lzLCBvdXRwdXRfbmFtZSwgY2FwdHVyZWRfb3V0cHV0KQogICAgICAg
ICByZXR1cm4gY2FwdHVyZWRfb3V0cHV0CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGVzdC9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkK
aW5kZXggMDIxMWIxMjYxYjY3NDdmNDFiYmEwNWM5OTJiN2MxZTcxNDZjMTg0NC4uMGYwMGNkNDRj
YjVkZTcxNzIzMGU3MDMxOTk0YmU3OThiOTUzMmI4YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0
L21haW4ucHkKQEAgLTI1LDEyICsyNSwxNCBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9w
dHBhcnNlCitpbXBvcnQgb3MKIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHN5cwogaW1wb3J0IHRy
YWNlYmFjawogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5m
aWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IG91dHB1dGNhcHR1cmUKIGZyb20gd2Via2l0cHkudGVzdC50ZXN0X2ZpbmRlciBpbXBv
cnQgVGVzdEZpbmRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnJ1bm5lciBpbXBvcnQgVGVzdFJ1bm5l
cgogCkBAIC01OSw2ICs2MSw4IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSd2ZXJib3NlIG91dHB1dCAoc3BlY2lmeSBvbmNlIGZvciBpbmRp
dmlkdWFsIHRlc3QgcmVzdWx0cywgdHdpY2UgZm9yIGRlYnVnIG1lc3NhZ2VzKScpCiAgICAgICAg
IHBhcnNlci5hZGRfb3B0aW9uKCctLXNraXAtaW50ZWdyYXRpb250ZXN0cycsIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9
J2RvIG5vdCBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzJykKKyAgICAgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1wJywgJy0tcGFzcy10aHJvdWdoJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVs
dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZW5hYmxlIHRoZSBweXRo
b24gZGVidWdnZXIgYnkgcGFzc2luZyBjYXB0dXJlZCBvdXRwdXQgdGhyb3VnaCB0byB0aGUgc3lz
dGVtJykKIAogICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdbYXJncy4uLl0gaXMgYW4gb3B0aW9u
YWwgbGlzdCBvZiBtb2R1bGVzLCB0ZXN0X2NsYXNzZXMsIG9yIGluZGl2aWR1YWwgdGVzdHMuICcK
ICAgICAgICAgICAgICAgICAgICAgICAgICAnSWYgbm8gYXJncyBhcmUgZ2l2ZW4sIGFsbCB0aGUg
dGVzdHMgd2lsbCBiZSBydW4uJykKQEAgLTE3Niw2ICsxODAsOCBAQCBjbGFzcyBUZXN0ZXIob2Jq
ZWN0KToKICAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHNlbGYuc3RyZWFtLCBzZWxm
Ll9vcHRpb25zLCBsb2FkZXIpCiAKICAgICAgICAgX2xvZy5kZWJ1ZygiUnVubmluZyB0aGUgdGVz
dHMuIikKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5wYXNzX3Rocm91Z2g6CisgICAgICAgICAg
ICBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUuc3RyZWFtX3dyYXBwZXIgPSBfQ2FwdHVyZUFu
ZFBhc3NUaHJvdWdoU3RyZWFtCiAgICAgICAgIHJlc3VsdCA9IHRlc3RfcnVubmVyLnJ1bih0ZXN0
X3N1aXRlKQogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAg
Y292LnN0b3AoKQpAQCAtMTg4LDMgKzE5NCwzMiBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAg
ICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXMpCiAgICAgICAgIGZvciBsIGluIHMuYnVm
bGlzdDoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJyArIGwucnN0cmlwKCkpCisKKworY2xh
c3MgX0NhcHR1cmVBbmRQYXNzVGhyb3VnaFN0cmVhbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBzZWxmLl9idWZmZXIgPSBTdHJpbmdJTy5TdHJpbmdJ
TygpCisgICAgICAgIHNlbGYuX3N0cmVhbSA9IHN0cmVhbQorCisgICAgZGVmIHdyaXRlKHNlbGYs
IG1zZyk6CisgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZShtc2cpCisKKyAgICAgICAgIyBOb3Rl
IHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBjYXB0dXJlIGFueSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRo
ZSBkZWJ1Z2dlcgorICAgICAgICAjIGJlY2F1c2UgdGhhdCBjb3VsZCBjYXVzZSB0aGUgcmVzdWx0
cyBvZiBjYXB0dXJlX291dHB1dCgpIHRvIGJlIGludmFsaWQuCisgICAgICAgIGlmIG5vdCBzZWxm
Ll9tZXNzYWdlX2lzX2Zyb21fcGRiKCk6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIud3JpdGUo
bXNnKQorCisgICAgZGVmIF9tZXNzYWdlX2lzX2Zyb21fcGRiKHNlbGYpOgorICAgICAgICAjIFdl
IHdpbGwgYXNzdW1lIHRoYXQgaWYgdGhlIHBkYiBtb2R1bGUgaXMgaW4gdGhlIHN0YWNrIHRoZW4g
dGhlIG91dHB1dAorICAgICAgICAjIGlzIGJlaW5nIGdlbmVyYXRlZCBieSB0aGUgcHl0aG9uIGRl
YnVnZ2VyIChvciB0aGUgdXNlciBjYWxsaW5nIHNvbWV0aGluZworICAgICAgICAjIGZyb20gaW5z
aWRlIHRoZSBkZWJ1Z2dlcikuCisgICAgICAgIGltcG9ydCBpbnNwZWN0CisgICAgICAgIGltcG9y
dCBwZGIKKyAgICAgICAgc3RhY2sgPSBpbnNwZWN0LnN0YWNrKCkKKyAgICAgICAgcmV0dXJuIGFu
eShmcmFtZVsxXSA9PSBwZGIuX19maWxlX18ucmVwbGFjZSgnLnB5YycsICcucHknKSBmb3IgZnJh
bWUgaW4gc3RhY2spCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYuX3N0cmVh
bS5mbHVzaCgpCisKKyAgICBkZWYgZ2V0dmFsdWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9idWZmZXIuZ2V0dmFsdWUoKQo=
</data>
<flag name="review"
          id="156198"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>