<?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>36591</bug_id>
          
          <creation_ts>2010-03-25 04:02:24 -0700</creation_ts>
          <short_desc>test-webkitpy: should automatically detect all unit test files in webkitpy</short_desc>
          <delta_ts>2010-03-27 16:02:59 -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>Tools / Tests</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>203980</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-25 04:02:24 -0700</bug_when>
    <thetext>This should make it unnecessary to have and maintain all of the unittests.py files.

test-webkitpy should be able to traverse webkitpy/, look for all files of the form *_unittest.py, and then import * from those files and call unittest.main().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204071</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-25 08:09:33 -0700</bug_when>
    <thetext>See this page:

http://technogeek.org/python-module.html

Since we need to execute statements of the form &quot;from ..._unittest import *&quot;, we may want to use the pattern below as suggested in the link above:

import_string = &quot;from string import ascii_letters&quot;
exec import_string</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204204</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-25 13:36:02 -0700</bug_when>
    <thetext>No need for &quot;exec&quot;.  We can just import the module and then use defs() to grab all the classes and import those, no?

Or maybe there is some piece of http://docs.python.org/library/imp.html to use?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204206</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-25 13:44:12 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; No need for &quot;exec&quot;.  We can just import the module and then use defs() to grab
&gt; all the classes and import those, no?

Yeah, there should also be ways without exec().

&gt; Or maybe there is some piece of http://docs.python.org/library/imp.html to use?

Here is something else to look at:

http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromModule</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204944</commentid>
    <comment_count>4</comment_count>
      <attachid>51815</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 00:02:28 -0700</bug_when>
    <thetext>Created attachment 51815
Proposed patch

I can delete all of the *_unittest files in a subsequent patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204947</commentid>
    <comment_count>5</comment_count>
      <attachid>51816</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 00:15:52 -0700</bug_when>
    <thetext>Created attachment 51816
Proposed patch 2

Documented the call to unittest.main().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205004</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-27 09:59:18 -0700</bug_when>
    <thetext>abarth: cjerdonek: so this is good
abarth: but i think you used to be able to specify a single test
abarth: on the command line
abarth: and run just that one
abarth: this will always run them all</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205005</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 10:03:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; abarth: cjerdonek: so this is good
&gt; abarth: but i think you used to be able to specify a single test
&gt; abarth: on the command line
&gt; abarth: and run just that one
&gt; abarth: this will always run them all

cjerdonek: i preserved that but then removed it
[09:58am] abarth: oh, if its easy
[09:58am] abarth: we should support that
[09:59am] cjerdonek: abarth: i&apos;ll put it back it then, i didn&apos;t think anyone was actually using that</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205007</commentid>
    <comment_count>8</comment_count>
      <attachid>51832</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 10:35:52 -0700</bug_when>
    <thetext>Created attachment 51832
Proposed patch 3

Reinstated the ability to run a subset of the tests using command-line arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205057</commentid>
    <comment_count>9</comment_count>
      <attachid>51832</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-27 15:14:29 -0700</bug_when>
    <thetext>Comment on attachment 51832
Proposed patch 3

Looks good.  I don&apos;t quite understand how we still have the ability to filter tests, but I believe you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205058</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 15:29:07 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 51832 [details])
&gt; Looks good.  I don&apos;t quite understand how we still have the ability to filter
&gt; tests, but I believe you.

Thanks, Adam!

It&apos;s pretty simple.  If sys.argv contains a non-flag argument at the end, then it bypasses auto-detection and does what it normally does:

+        if len(sys_argv) &gt; 1 and not sys_argv[-1].startswith(&quot;-&quot;):
+            # Then explicit modules or test names were provided, which
+            # the unittest module is equipped to handle.
+            unittest.main(module=None)
+            # No need to return since unitttest.main() exits.
+
+        # Otherwise, auto-detect all unit tests.
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205059</commentid>
    <comment_count>11</comment_count>
      <attachid>51832</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 15:38:15 -0700</bug_when>
    <thetext>Comment on attachment 51832
Proposed patch 3

Going to land this manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205062</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-03-27 16:02:59 -0700</bug_when>
    <thetext>Committed via webkit-patch (somewhat): http://trac.webkit.org/changeset/56671

(Didn&apos;t quite work out.  Key-chain issues again.  Frustrating because I just tried updating my keychain info using the KeyChain Access app...)


Logging in as chris.jerdonek@gmail.com...
Bugzilla login failed: Invalid Username Or Password
Reading Keychain for bugs.webkit.org account and password.  Click &quot;Allow&quot; to continue...
Logging in as chris.jerdonek@gmail.com...
Traceback (most recent call last):
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkit-patch&quot;, line 70, in &lt;module&gt;
    main()
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkit-patch&quot;, line 65, in main
    WebKitPatch(__file__).main()
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 302, in main
    result = command.check_arguments_and_execute(options, args, self)
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 113, in check_arguments_and_execute
    return self.execute(options, args, tool) or 0
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkitpy/tool/commands/abstractsequencedcommand.py&quot;, line 43, in execute
    self._sequence.run_and_handle_errors(tool, options, self._prepare_state(options, args, tool))
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 66, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 60, in _run
    step(tool, options).run(state)
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkitpy/tool/steps/closebugforlanddiff.py&quot;, line 51, in run
    self._tool.bugs.close_bug_as_fixed(bug_id, comment_text)
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkitpy/common/net/bugzilla.py&quot;, line 750, in close_bug_as_fixed
    self.authenticate()
  File &quot;/Users/chris_g4/dev/WebKit/trunk-git/WebKitTools/Scripts/webkitpy/common/net/bugzilla.py&quot;, line 516, in authenticate
    raise Exception(errorMessage)
Exception: Bugzilla login failed: Invalid Username Or Password</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51815</attachid>
            <date>2010-03-27 00:02:28 -0700</date>
            <delta_ts>2010-03-27 00:15:52 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-36591-1.diff</filename>
            <type>text/plain</type>
            <size>7575</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3NWIwN2Q2Li4xYTE4NWNlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDMt
MjYgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHRlc3Qtd2Via2l0cHkgc2Ny
aXB0IG5vdyBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYWxsIHVuaXQtdGVzdAorICAgICAgICBmaWxl
cyBpbiB3ZWJraXRweS8uICBUaGlzIGxldHMgdXMgZWxpbWluYXRlIHRoZSBuZWVkIHRvIGhhdmUg
YW5kCisgICAgICAgIG1haW50YWluIGFsbCBvZiB0aGUgdW5pdHRlc3RzLnB5IGZpbGVzLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjU5MQorCisg
ICAgICAgICogU2NyaXB0cy90ZXN0LXdlYmtpdHB5OgorICAgICAgICAgIC0gUmVwbGFjZWQgdGhl
ICJmcm9tIHdlYmtpdHB5LnVuaXR0ZXN0cyBpbXBvcnQgKiIgd2l0aCBhIGNhbGwKKyAgICAgICAg
ICAgIHRvIHdlYmtpdHB5LnRlc3QubWFpbi5UZXN0ZXIoKS5ydW5fdGVzdHMoKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weTogQ29waWVkIGZyb20gV2ViS2l0
VG9vbHMvUXVldWVTdGF0dXNTZXJ2ZXIvZmlsdGVycy9fX2luaXRfXy5weS4KKyAgICAgICAgICAt
IFJlcXVpcmVkIGZpbGUgZm9yIHRoZSBuZXcgd2Via2l0cHkvdGVzdC8gZGlyZWN0b3J5LgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHk6IEFkZGVkLgorICAgICAgICAg
IC0gQWRkZWQgYSBUZXN0ZXIgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgZm9sbG93aW5nIG1ldGhv
ZHM6CisgICAgICAgICAgICAtIF9maW5kX3VuaXR0ZXN0X2ZpbGVzKCkgdG8gZGV0ZWN0IGFsbCB0
aGUgdW5pdC10ZXN0IGZpbGVzLgorICAgICAgICAgICAgLSBfbW9kdWxlc19mcm9tX3BhdGhzKCkg
dG8gY29udmVydCB0aGUgcGF0aHMgdG8gdGhlIHVuaXQtdGVzdAorICAgICAgICAgICAgICBmaWxl
cyB0byBmdWxseS1xdWFsaWZpZWQgbW9kdWxlIG5hbWVzLgorICAgICAgICAgICAgLSBydW5fdGVz
dHMoKSB3aGljaCBjYWxscyB0aGUgYWJvdmUgdHdvIG1ldGhvZHMgYW5kIHRoZW4gcGFzc2VzCisg
ICAgICAgICAgICAgIHRoZSBtb2R1bGUgbmFtZXMgdG8gUHl0aG9uJ3MgdW5pdHRlc3QgbW9kdWxl
LgorCiAyMDEwLTAzLTI1ICBDaGFybGllIFJlaXMgIDxjcmVpc0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvdGVzdC13ZWJraXRweSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpp
bmRleCBhNjI3NTIzLi43NjNhYzhhIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5CkBAIC0z
MCw3ICszMCw2IEBACiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRl
c3QKIAogaW1wb3J0IHdlYmtpdHB5LnB5dGhvbjI0LnZlcnNpb25pbmcgYXMgdmVyc2lvbmluZwog
CkBAIC02Miw2ICs2MSw4IEBAIGRlZiBjb25maWd1cmVfbG9nZ2luZygpOgogICAgICAgICAjICAg
ICAgICBhdXRvaW5zdGFsbCBpcyBhZGp1c3RlZC4gIEN1cnJlbnRseSwgYXV0b2luc3RhbGwgbG9n
cwogICAgICAgICAjICAgICAgICBJTkZPIG1lc3NhZ2VzIHdoZW4gaW1wb3J0aW5nIGFscmVhZHkt
ZG93bmxvYWRlZCBwYWNrYWdlcywKICAgICAgICAgIyAgICAgICAgd2hpY2ggaXMgdG9vIHZlcmJv
c2UuCisgICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dpdGgoIndlYmtpdHB5LnRlc3QiKToK
KyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dp
dGgoIndlYmtpdHB5Iik6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJu
IFRydWUKQEAgLTEwMiw3ICsxMDMsNiBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAg
ICMgbG9nZ2luZyB0byBiZSBjb25maWd1cmVkIHByaW9yIHRvIGltcG9ydGluZyAtLSBmb3IgZXhh
bXBsZSB0bwogICAgICMgZW5hYmxlIHRoZSBkaXNwbGF5IG9mIGF1dG9pbnN0YWxsIGxvZ2dpbmcu
bG9nIG1lc3NhZ2VzIHdoaWxlCiAgICAgIyBydW5uaW5nIHRoZSB1bml0IHRlc3RzLgotICAgIGZy
b20gd2Via2l0cHkudW5pdHRlc3RzIGltcG9ydCAqCisgICAgZnJvbSB3ZWJraXRweS50ZXN0Lm1h
aW4gaW1wb3J0IFRlc3RlcgogCi0gICAgIyBSdW5zIHRoZSB1bml0IHRlc3RzLgotICAgIHVuaXR0
ZXN0Lm1haW4oKQorICAgIFRlc3RlcigpLnJ1bl90ZXN0cyhzeXMuYXJndikKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lZjY1YmVlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWly
ZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yNDFkMWJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKQEAgLTAsMCArMSwxMTUgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ29udGFpbnMgdGhl
IGVudHJ5IG1ldGhvZCBmb3IgdGVzdC13ZWJraXRweS4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCB3ZWJraXRweQor
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBUZXN0ZXIo
b2JqZWN0KToKKworICAgICIiIkRpc2NvdmVycyBhbmQgcnVucyB3ZWJraXRweSB1bml0IHRlc3Rz
LiIiIgorCisgICAgZGVmIF9maW5kX3VuaXR0ZXN0X2ZpbGVzKHNlbGYsIHdlYmtpdHB5X2Rpcik6
CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgcGF0aHMgdG8gYWxsIHVuaXQtdGVzdCBmaWxl
cy4iIiIKKyAgICAgICAgdW5pdHRlc3RfcGF0aHMgPSBbXSAgIyBSZXR1cm4gdmFsdWUuCisKKyAg
ICAgICAgZm9yIGRpcl9wYXRoLCBkaXJfbmFtZXMsIGZpbGVfbmFtZXMgaW4gb3Mud2Fsayh3ZWJr
aXRweV9kaXIpOgorICAgICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX25hbWVzOgorICAg
ICAgICAgICAgICAgIGlmIG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoIl91bml0dGVzdC5weSIpOgor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3Bh
dGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICB1
bml0dGVzdF9wYXRocy5hcHBlbmQodW5pdHRlc3RfcGF0aCkKKworICAgICAgICByZXR1cm4gdW5p
dHRlc3RfcGF0aHMKKworICAgIGRlZiBfbW9kdWxlc19mcm9tX3BhdGhzKHNlbGYsIHdlYmtpdHB5
X2RpciwgcGF0aHMpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGZ1bGx5LXF1YWxpZmll
ZCBtb2R1bGUgbmFtZXMgZ2l2ZW4gcGF0aHMuIiIiCisgICAgICAgIHdlYmtpdHB5X2RpciA9IG9z
LnBhdGguYWJzcGF0aCh3ZWJraXRweV9kaXIpCisgICAgICAgIHdlYmtpdHB5X25hbWUgPSBvcy5w
YXRoLnNwbGl0KHdlYmtpdHB5X2RpcilbMV0gICMgRXF1YWxzICJ3ZWJraXRweSIuCisKKyAgICAg
ICAgcHJlZml4X2xlbmd0aCA9IGxlbih3ZWJraXRweV9kaXIpCisKKyAgICAgICAgbW9kdWxlcyA9
IFtdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBh
dGguYWJzcGF0aChwYXRoKQorICAgICAgICAgICAgIyBUaGlzIGdpdmVzIHVzLCBmb3IgZXhhbXBs
ZTogL2NvbW1vbi9jb25maWcvcG9ydHNfdW5pdHRlc3QucHkKKyAgICAgICAgICAgIHJlbF9wYXRo
ID0gcGF0aFtwcmVmaXhfbGVuZ3RoOl0KKyAgICAgICAgICAgICMgVGhpcyBnaXZlcyB1cywgZm9y
IGV4YW1wbGU6IC9jb21tb24vY29uZmlnL3BvcnRzX3VuaXR0ZXN0CisgICAgICAgICAgICByZWxf
cGF0aCA9IG9zLnBhdGguc3BsaXRleHQocmVsX3BhdGgpWzBdCisKKyAgICAgICAgICAgIHBhcnRz
ID0gW3dlYmtpdHB5X25hbWVdCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
ICAgIChyZWxfcGF0aCwgdGFpbCkgPSBvcy5wYXRoLnNwbGl0KHJlbF9wYXRoKQorICAgICAgICAg
ICAgICAgIGlmIG5vdCB0YWlsOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgICAgIHBhcnRzLmluc2VydCgxLCB0YWlsKSAgIyBJbnNlcnQgYWZ0ZXIgIndlYmtpdHB5Ii4K
KyAgICAgICAgICAgICMgVGhpcyBnaXZlcyB1cywgZm9yIGV4YW1wbGU6IHdlYmtpdHB5LmNvbW1v
bi5jb25maWcucG9ydHNfdW5pdHRlc3QKKyAgICAgICAgICAgIG1vZHVsZSA9ICIuIi5qb2luKHBh
cnRzKQorICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQobW9kdWxlKQorCisgICAgICAgIHJldHVy
biBtb2R1bGVzCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIHN5c19hcmd2KToKKyAgICAgICAg
IiIiUnVuIHRoZSB1bml0IHRlc3RzIGluIGFsbCAqX3VuaXR0ZXN0LnB5IG1vZHVsZXMgaW4gd2Vi
a2l0cHkuCisKKyAgICAgICAgVGhpcyBtZXRob2QgZXhjbHVkZXMgIndlYmtpdHB5LmNvbW1vbi5j
aGVja291dC5zY21fdW5pdHRlc3QiIHVubGVzcworICAgICAgICB0aGUgLS1hbGwgb3B0aW9uIGlz
IHRoZSBzZWNvbmQgZWxlbWVudCBvZiBzeXNfYXJndi4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgIHN5c19hcmd2OiBBIHJlZmVyZW5jZSB0byBzeXMuYXJndi4KKworICAgICAgICAiIiIKKyAg
ICAgICAgd2Via2l0cHlfZGlyID0gb3MucGF0aC5kaXJuYW1lKHdlYmtpdHB5Ll9fZmlsZV9fKQor
ICAgICAgICB1bml0dGVzdF9wYXRocyA9IHNlbGYuX2ZpbmRfdW5pdHRlc3RfZmlsZXMod2Via2l0
cHlfZGlyKQorCisgICAgICAgIG1vZHVsZXMgPSBzZWxmLl9tb2R1bGVzX2Zyb21fcGF0aHMod2Vi
a2l0cHlfZGlyLCB1bml0dGVzdF9wYXRocykKKyAgICAgICAgbW9kdWxlcy5zb3J0KCkKKworICAg
ICAgICAjIFRoaXMgaXMgYSBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHVuaXQtdGVz
dCBkaXNjb3ZlcnkKKyAgICAgICAgIyBtZXRob2RzIGFyZSB3b3JraW5nLgorICAgICAgICBpZiBs
ZW4obW9kdWxlcykgPCAxOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyB1bml0LXRl
c3QgbW9kdWxlcyBmb3VuZC4iKQorCisgICAgICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKKyAg
ICAgICAgICAgIF9sb2cuZGVidWcoIkZvdW5kOiAlcyIgJSBtb2R1bGUpCisKKyAgICAgICAgIyBG
SVhNRTogVGhpcyBpcyBhIGhhY2ssIGJ1dCBJJ20gdGlyZWQgb2YgY29tbWVudGluZyBvdXQgdGhl
IHRlc3QuCisgICAgICAgICMgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzE4MTgKKyAgICAgICAgaWYgbGVuKHN5c19hcmd2KSA+IDEgYW5kIHN5cy5h
cmd2WzFdID09ICItLWFsbCI6CisgICAgICAgICAgICBzeXMuYXJndi5yZW1vdmUoIi0tYWxsIikK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4Y2x1ZGVkX21vZHVsZSA9ICJ3ZWJraXRweS5j
b21tb24uY2hlY2tvdXQuc2NtX3VuaXR0ZXN0IgorICAgICAgICAgICAgX2xvZy5pbmZvKCJFeGNs
dWRpbmc6ICVzICh1c2UgLS1hbGwgdG8gaW5jbHVkZSkiICUgZXhjbHVkZWRfbW9kdWxlKQorICAg
ICAgICAgICAgbW9kdWxlcy5yZW1vdmUoZXhjbHVkZWRfbW9kdWxlKQorCisgICAgICAgIHN5c19h
cmd2LmV4dGVuZChtb2R1bGVzKQorCisgICAgICAgIHVuaXR0ZXN0Lm1haW4oTm9uZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51816</attachid>
            <date>2010-03-27 00:15:52 -0700</date>
            <delta_ts>2010-03-27 10:35:52 -0700</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-36591-2.diff</filename>
            <type>text/plain</type>
            <size>7985</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3NWIwN2Q2Li4xYTE4NWNlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDMt
MjYgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHRlc3Qtd2Via2l0cHkgc2Ny
aXB0IG5vdyBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYWxsIHVuaXQtdGVzdAorICAgICAgICBmaWxl
cyBpbiB3ZWJraXRweS8uICBUaGlzIGxldHMgdXMgZWxpbWluYXRlIHRoZSBuZWVkIHRvIGhhdmUg
YW5kCisgICAgICAgIG1haW50YWluIGFsbCBvZiB0aGUgdW5pdHRlc3RzLnB5IGZpbGVzLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjU5MQorCisg
ICAgICAgICogU2NyaXB0cy90ZXN0LXdlYmtpdHB5OgorICAgICAgICAgIC0gUmVwbGFjZWQgdGhl
ICJmcm9tIHdlYmtpdHB5LnVuaXR0ZXN0cyBpbXBvcnQgKiIgd2l0aCBhIGNhbGwKKyAgICAgICAg
ICAgIHRvIHdlYmtpdHB5LnRlc3QubWFpbi5UZXN0ZXIoKS5ydW5fdGVzdHMoKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weTogQ29waWVkIGZyb20gV2ViS2l0
VG9vbHMvUXVldWVTdGF0dXNTZXJ2ZXIvZmlsdGVycy9fX2luaXRfXy5weS4KKyAgICAgICAgICAt
IFJlcXVpcmVkIGZpbGUgZm9yIHRoZSBuZXcgd2Via2l0cHkvdGVzdC8gZGlyZWN0b3J5LgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHk6IEFkZGVkLgorICAgICAgICAg
IC0gQWRkZWQgYSBUZXN0ZXIgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgZm9sbG93aW5nIG1ldGhv
ZHM6CisgICAgICAgICAgICAtIF9maW5kX3VuaXR0ZXN0X2ZpbGVzKCkgdG8gZGV0ZWN0IGFsbCB0
aGUgdW5pdC10ZXN0IGZpbGVzLgorICAgICAgICAgICAgLSBfbW9kdWxlc19mcm9tX3BhdGhzKCkg
dG8gY29udmVydCB0aGUgcGF0aHMgdG8gdGhlIHVuaXQtdGVzdAorICAgICAgICAgICAgICBmaWxl
cyB0byBmdWxseS1xdWFsaWZpZWQgbW9kdWxlIG5hbWVzLgorICAgICAgICAgICAgLSBydW5fdGVz
dHMoKSB3aGljaCBjYWxscyB0aGUgYWJvdmUgdHdvIG1ldGhvZHMgYW5kIHRoZW4gcGFzc2VzCisg
ICAgICAgICAgICAgIHRoZSBtb2R1bGUgbmFtZXMgdG8gUHl0aG9uJ3MgdW5pdHRlc3QgbW9kdWxl
LgorCiAyMDEwLTAzLTI1ICBDaGFybGllIFJlaXMgIDxjcmVpc0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvdGVzdC13ZWJraXRweSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpp
bmRleCBhNjI3NTIzLi43NjNhYzhhIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5CkBAIC0z
MCw3ICszMCw2IEBACiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRl
c3QKIAogaW1wb3J0IHdlYmtpdHB5LnB5dGhvbjI0LnZlcnNpb25pbmcgYXMgdmVyc2lvbmluZwog
CkBAIC02Miw2ICs2MSw4IEBAIGRlZiBjb25maWd1cmVfbG9nZ2luZygpOgogICAgICAgICAjICAg
ICAgICBhdXRvaW5zdGFsbCBpcyBhZGp1c3RlZC4gIEN1cnJlbnRseSwgYXV0b2luc3RhbGwgbG9n
cwogICAgICAgICAjICAgICAgICBJTkZPIG1lc3NhZ2VzIHdoZW4gaW1wb3J0aW5nIGFscmVhZHkt
ZG93bmxvYWRlZCBwYWNrYWdlcywKICAgICAgICAgIyAgICAgICAgd2hpY2ggaXMgdG9vIHZlcmJv
c2UuCisgICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dpdGgoIndlYmtpdHB5LnRlc3QiKToK
KyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dp
dGgoIndlYmtpdHB5Iik6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJu
IFRydWUKQEAgLTEwMiw3ICsxMDMsNiBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAg
ICMgbG9nZ2luZyB0byBiZSBjb25maWd1cmVkIHByaW9yIHRvIGltcG9ydGluZyAtLSBmb3IgZXhh
bXBsZSB0bwogICAgICMgZW5hYmxlIHRoZSBkaXNwbGF5IG9mIGF1dG9pbnN0YWxsIGxvZ2dpbmcu
bG9nIG1lc3NhZ2VzIHdoaWxlCiAgICAgIyBydW5uaW5nIHRoZSB1bml0IHRlc3RzLgotICAgIGZy
b20gd2Via2l0cHkudW5pdHRlc3RzIGltcG9ydCAqCisgICAgZnJvbSB3ZWJraXRweS50ZXN0Lm1h
aW4gaW1wb3J0IFRlc3RlcgogCi0gICAgIyBSdW5zIHRoZSB1bml0IHRlc3RzLgotICAgIHVuaXR0
ZXN0Lm1haW4oKQorICAgIFRlc3RlcigpLnJ1bl90ZXN0cyhzeXMuYXJndikKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lZjY1YmVlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWly
ZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44MmViODUwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKQEAgLTAsMCArMSwxMjEgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ29udGFpbnMgdGhl
IGVudHJ5IG1ldGhvZCBmb3IgdGVzdC13ZWJraXRweS4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCB3ZWJraXRweQor
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBUZXN0ZXIo
b2JqZWN0KToKKworICAgICIiIkRpc2NvdmVycyBhbmQgcnVucyB3ZWJraXRweSB1bml0IHRlc3Rz
LiIiIgorCisgICAgZGVmIF9maW5kX3VuaXR0ZXN0X2ZpbGVzKHNlbGYsIHdlYmtpdHB5X2Rpcik6
CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgcGF0aHMgdG8gYWxsIHVuaXQtdGVzdCBmaWxl
cy4iIiIKKyAgICAgICAgdW5pdHRlc3RfcGF0aHMgPSBbXSAgIyBSZXR1cm4gdmFsdWUuCisKKyAg
ICAgICAgZm9yIGRpcl9wYXRoLCBkaXJfbmFtZXMsIGZpbGVfbmFtZXMgaW4gb3Mud2Fsayh3ZWJr
aXRweV9kaXIpOgorICAgICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX25hbWVzOgorICAg
ICAgICAgICAgICAgIGlmIG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoIl91bml0dGVzdC5weSIpOgor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3Bh
dGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICB1
bml0dGVzdF9wYXRocy5hcHBlbmQodW5pdHRlc3RfcGF0aCkKKworICAgICAgICByZXR1cm4gdW5p
dHRlc3RfcGF0aHMKKworICAgIGRlZiBfbW9kdWxlc19mcm9tX3BhdGhzKHNlbGYsIHdlYmtpdHB5
X2RpciwgcGF0aHMpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGZ1bGx5LXF1YWxpZmll
ZCBtb2R1bGUgbmFtZXMgZ2l2ZW4gcGF0aHMuIiIiCisgICAgICAgIHdlYmtpdHB5X2RpciA9IG9z
LnBhdGguYWJzcGF0aCh3ZWJraXRweV9kaXIpCisgICAgICAgIHdlYmtpdHB5X25hbWUgPSBvcy5w
YXRoLnNwbGl0KHdlYmtpdHB5X2RpcilbMV0gICMgRXF1YWxzICJ3ZWJraXRweSIuCisKKyAgICAg
ICAgcHJlZml4X2xlbmd0aCA9IGxlbih3ZWJraXRweV9kaXIpCisKKyAgICAgICAgbW9kdWxlcyA9
IFtdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBh
dGguYWJzcGF0aChwYXRoKQorICAgICAgICAgICAgIyBUaGlzIGdpdmVzIHVzLCBmb3IgZXhhbXBs
ZTogL2NvbW1vbi9jb25maWcvcG9ydHNfdW5pdHRlc3QucHkKKyAgICAgICAgICAgIHJlbF9wYXRo
ID0gcGF0aFtwcmVmaXhfbGVuZ3RoOl0KKyAgICAgICAgICAgICMgVGhpcyBnaXZlcyB1cywgZm9y
IGV4YW1wbGU6IC9jb21tb24vY29uZmlnL3BvcnRzX3VuaXR0ZXN0CisgICAgICAgICAgICByZWxf
cGF0aCA9IG9zLnBhdGguc3BsaXRleHQocmVsX3BhdGgpWzBdCisKKyAgICAgICAgICAgIHBhcnRz
ID0gW10KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgKHJlbF9wYXRo
LCB0YWlsKSA9IG9zLnBhdGguc3BsaXQocmVsX3BhdGgpCisgICAgICAgICAgICAgICAgaWYgbm90
IHRhaWw6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcGFydHMu
aW5zZXJ0KDAsIHRhaWwpCisgICAgICAgICAgICAjIFdlIG5vdyBoYXZlLCBmb3IgZXhhbXBsZTog
Y29tbW9uLmNvbmZpZy5wb3J0c191bml0dGVzdAorICAgICAgICAgICAgcGFydHMuaW5zZXJ0KDAs
IHdlYmtpdHB5X25hbWUpICAjIFB1dCAid2Via2l0cHkiIGF0IHRoZSBiZWdpbm5pbmcuCisgICAg
ICAgICAgICBtb2R1bGUgPSAiLiIuam9pbihwYXJ0cykKKyAgICAgICAgICAgIG1vZHVsZXMuYXBw
ZW5kKG1vZHVsZSkKKworICAgICAgICByZXR1cm4gbW9kdWxlcworCisgICAgZGVmIHJ1bl90ZXN0
cyhzZWxmLCBzeXNfYXJndik6CisgICAgICAgICIiIlJ1biB0aGUgdW5pdCB0ZXN0cyBpbiBhbGwg
Kl91bml0dGVzdC5weSBtb2R1bGVzIGluIHdlYmtpdHB5LgorCisgICAgICAgIFRoaXMgbWV0aG9k
IGV4Y2x1ZGVzICJ3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtX3VuaXR0ZXN0IiB1bmxlc3MK
KyAgICAgICAgdGhlIC0tYWxsIG9wdGlvbiBpcyB0aGUgc2Vjb25kIGVsZW1lbnQgb2Ygc3lzX2Fy
Z3YuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBzeXNfYXJndjogQSByZWZlcmVuY2UgdG8g
c3lzLmFyZ3YuCisKKyAgICAgICAgIiIiCisgICAgICAgIHdlYmtpdHB5X2RpciA9IG9zLnBhdGgu
ZGlybmFtZSh3ZWJraXRweS5fX2ZpbGVfXykKKyAgICAgICAgdW5pdHRlc3RfcGF0aHMgPSBzZWxm
Ll9maW5kX3VuaXR0ZXN0X2ZpbGVzKHdlYmtpdHB5X2RpcikKKworICAgICAgICBtb2R1bGVzID0g
c2VsZi5fbW9kdWxlc19mcm9tX3BhdGhzKHdlYmtpdHB5X2RpciwgdW5pdHRlc3RfcGF0aHMpCisg
ICAgICAgIG1vZHVsZXMuc29ydCgpCisKKyAgICAgICAgIyBUaGlzIGlzIGEgc2FuaXR5IGNoZWNr
IHRvIGVuc3VyZSB0aGF0IHRoZSB1bml0LXRlc3QgZGlzY292ZXJ5CisgICAgICAgICMgbWV0aG9k
cyBhcmUgd29ya2luZy4KKyAgICAgICAgaWYgbGVuKG1vZHVsZXMpIDwgMToKKyAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigiTm8gdW5pdC10ZXN0IG1vZHVsZXMgZm91bmQuIikKKworICAgICAg
ICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCJGb3VuZDog
JXMiICUgbW9kdWxlKQorCisgICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSBoYWNrLCBidXQgSSdt
IHRpcmVkIG9mIGNvbW1lbnRpbmcgb3V0IHRoZSB0ZXN0LgorICAgICAgICAjICAgICAgICBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxODE4CisgICAgICAgIGlm
IGxlbihzeXNfYXJndikgPiAxIGFuZCBzeXMuYXJndlsxXSA9PSAiLS1hbGwiOgorICAgICAgICAg
ICAgc3lzLmFyZ3YucmVtb3ZlKCItLWFsbCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBl
eGNsdWRlZF9tb2R1bGUgPSAid2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbV91bml0dGVzdCIK
KyAgICAgICAgICAgIF9sb2cuaW5mbygiRXhjbHVkaW5nOiAlcyAodXNlIC0tYWxsIHRvIGluY2x1
ZGUpIiAlIGV4Y2x1ZGVkX21vZHVsZSkKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKGV4Y2x1
ZGVkX21vZHVsZSkKKworICAgICAgICBzeXNfYXJndi5leHRlbmQobW9kdWxlcykKKworICAgICAg
ICAjIFdlIHBhc3MgTm9uZSBmb3IgdGhlIG1vZHVsZSBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRo
ZSB1bml0dGVzdAorICAgICAgICAjIG1vZHVsZSB0byByZXNvbHZlIG1vZHVsZSBuYW1lcyByZWxh
dGl2ZSB0byBhIGdpdmVuIG1vZHVsZS4KKyAgICAgICAgIyAoVGhpcyB3b3VsZCByZXF1aXJlIGlt
cG9ydGluZyBhbGwgb2YgdGhlIHVuaXR0ZXN0IG1vZHVsZXMgZnJvbQorICAgICAgICAjIHRoaXMg
bW9kdWxlLikgIFNlZSB0aGUgbG9hZFRlc3RzRnJvbU5hbWUoKSBtZXRob2Qgb2YgdGhlCisgICAg
ICAgICMgdW5pdHRlc3QuVGVzdExvYWRlciBjbGFzcyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMg
cGFyYW1ldGVyLgorICAgICAgICB1bml0dGVzdC5tYWluKGFyZ3Y9c3lzX2FyZ3YsIG1vZHVsZT1O
b25lKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51832</attachid>
            <date>2010-03-27 10:35:52 -0700</date>
            <delta_ts>2010-03-27 15:38:15 -0700</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>_patch-36591-3.diff</filename>
            <type>text/plain</type>
            <size>8340</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3NWIwN2Q2Li4xYTE4NWNlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDMt
MjYgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHRlc3Qtd2Via2l0cHkgc2Ny
aXB0IG5vdyBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYWxsIHVuaXQtdGVzdAorICAgICAgICBmaWxl
cyBpbiB3ZWJraXRweS8uICBUaGlzIGxldHMgdXMgZWxpbWluYXRlIHRoZSBuZWVkIHRvIGhhdmUg
YW5kCisgICAgICAgIG1haW50YWluIGFsbCBvZiB0aGUgdW5pdHRlc3RzLnB5IGZpbGVzLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjU5MQorCisg
ICAgICAgICogU2NyaXB0cy90ZXN0LXdlYmtpdHB5OgorICAgICAgICAgIC0gUmVwbGFjZWQgdGhl
ICJmcm9tIHdlYmtpdHB5LnVuaXR0ZXN0cyBpbXBvcnQgKiIgd2l0aCBhIGNhbGwKKyAgICAgICAg
ICAgIHRvIHdlYmtpdHB5LnRlc3QubWFpbi5UZXN0ZXIoKS5ydW5fdGVzdHMoKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weTogQ29waWVkIGZyb20gV2ViS2l0
VG9vbHMvUXVldWVTdGF0dXNTZXJ2ZXIvZmlsdGVycy9fX2luaXRfXy5weS4KKyAgICAgICAgICAt
IFJlcXVpcmVkIGZpbGUgZm9yIHRoZSBuZXcgd2Via2l0cHkvdGVzdC8gZGlyZWN0b3J5LgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHk6IEFkZGVkLgorICAgICAgICAg
IC0gQWRkZWQgYSBUZXN0ZXIgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgZm9sbG93aW5nIG1ldGhv
ZHM6CisgICAgICAgICAgICAtIF9maW5kX3VuaXR0ZXN0X2ZpbGVzKCkgdG8gZGV0ZWN0IGFsbCB0
aGUgdW5pdC10ZXN0IGZpbGVzLgorICAgICAgICAgICAgLSBfbW9kdWxlc19mcm9tX3BhdGhzKCkg
dG8gY29udmVydCB0aGUgcGF0aHMgdG8gdGhlIHVuaXQtdGVzdAorICAgICAgICAgICAgICBmaWxl
cyB0byBmdWxseS1xdWFsaWZpZWQgbW9kdWxlIG5hbWVzLgorICAgICAgICAgICAgLSBydW5fdGVz
dHMoKSB3aGljaCBjYWxscyB0aGUgYWJvdmUgdHdvIG1ldGhvZHMgYW5kIHRoZW4gcGFzc2VzCisg
ICAgICAgICAgICAgIHRoZSBtb2R1bGUgbmFtZXMgdG8gUHl0aG9uJ3MgdW5pdHRlc3QgbW9kdWxl
LgorCiAyMDEwLTAzLTI1ICBDaGFybGllIFJlaXMgIDxjcmVpc0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvdGVzdC13ZWJraXRweSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpp
bmRleCBhNjI3NTIzLi43NjNhYzhhIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5CkBAIC0z
MCw3ICszMCw2IEBACiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRl
c3QKIAogaW1wb3J0IHdlYmtpdHB5LnB5dGhvbjI0LnZlcnNpb25pbmcgYXMgdmVyc2lvbmluZwog
CkBAIC02Miw2ICs2MSw4IEBAIGRlZiBjb25maWd1cmVfbG9nZ2luZygpOgogICAgICAgICAjICAg
ICAgICBhdXRvaW5zdGFsbCBpcyBhZGp1c3RlZC4gIEN1cnJlbnRseSwgYXV0b2luc3RhbGwgbG9n
cwogICAgICAgICAjICAgICAgICBJTkZPIG1lc3NhZ2VzIHdoZW4gaW1wb3J0aW5nIGFscmVhZHkt
ZG93bmxvYWRlZCBwYWNrYWdlcywKICAgICAgICAgIyAgICAgICAgd2hpY2ggaXMgdG9vIHZlcmJv
c2UuCisgICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dpdGgoIndlYmtpdHB5LnRlc3QiKToK
KyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIHJlY29yZC5uYW1lLnN0YXJ0c3dp
dGgoIndlYmtpdHB5Iik6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJu
IFRydWUKQEAgLTEwMiw3ICsxMDMsNiBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAg
ICMgbG9nZ2luZyB0byBiZSBjb25maWd1cmVkIHByaW9yIHRvIGltcG9ydGluZyAtLSBmb3IgZXhh
bXBsZSB0bwogICAgICMgZW5hYmxlIHRoZSBkaXNwbGF5IG9mIGF1dG9pbnN0YWxsIGxvZ2dpbmcu
bG9nIG1lc3NhZ2VzIHdoaWxlCiAgICAgIyBydW5uaW5nIHRoZSB1bml0IHRlc3RzLgotICAgIGZy
b20gd2Via2l0cHkudW5pdHRlc3RzIGltcG9ydCAqCisgICAgZnJvbSB3ZWJraXRweS50ZXN0Lm1h
aW4gaW1wb3J0IFRlc3RlcgogCi0gICAgIyBSdW5zIHRoZSB1bml0IHRlc3RzLgotICAgIHVuaXR0
ZXN0Lm1haW4oKQorICAgIFRlc3RlcigpLnJ1bl90ZXN0cyhzeXMuYXJndikKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lZjY1YmVlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWly
ZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43MmVkZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKQEAgLTAsMCArMSwxMjkgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiQ29udGFpbnMgdGhl
IGVudHJ5IG1ldGhvZCBmb3IgdGVzdC13ZWJraXRweS4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCB3ZWJraXRweQor
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBUZXN0ZXIo
b2JqZWN0KToKKworICAgICIiIkRpc2NvdmVycyBhbmQgcnVucyB3ZWJraXRweSB1bml0IHRlc3Rz
LiIiIgorCisgICAgZGVmIF9maW5kX3VuaXR0ZXN0X2ZpbGVzKHNlbGYsIHdlYmtpdHB5X2Rpcik6
CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgcGF0aHMgdG8gYWxsIHVuaXQtdGVzdCBmaWxl
cy4iIiIKKyAgICAgICAgdW5pdHRlc3RfcGF0aHMgPSBbXSAgIyBSZXR1cm4gdmFsdWUuCisKKyAg
ICAgICAgZm9yIGRpcl9wYXRoLCBkaXJfbmFtZXMsIGZpbGVfbmFtZXMgaW4gb3Mud2Fsayh3ZWJr
aXRweV9kaXIpOgorICAgICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX25hbWVzOgorICAg
ICAgICAgICAgICAgIGlmIG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoIl91bml0dGVzdC5weSIpOgor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3Bh
dGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICB1
bml0dGVzdF9wYXRocy5hcHBlbmQodW5pdHRlc3RfcGF0aCkKKworICAgICAgICByZXR1cm4gdW5p
dHRlc3RfcGF0aHMKKworICAgIGRlZiBfbW9kdWxlc19mcm9tX3BhdGhzKHNlbGYsIHdlYmtpdHB5
X2RpciwgcGF0aHMpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGZ1bGx5LXF1YWxpZmll
ZCBtb2R1bGUgbmFtZXMgZ2l2ZW4gcGF0aHMuIiIiCisgICAgICAgIHdlYmtpdHB5X2RpciA9IG9z
LnBhdGguYWJzcGF0aCh3ZWJraXRweV9kaXIpCisgICAgICAgIHdlYmtpdHB5X25hbWUgPSBvcy5w
YXRoLnNwbGl0KHdlYmtpdHB5X2RpcilbMV0gICMgRXF1YWxzICJ3ZWJraXRweSIuCisKKyAgICAg
ICAgcHJlZml4X2xlbmd0aCA9IGxlbih3ZWJraXRweV9kaXIpCisKKyAgICAgICAgbW9kdWxlcyA9
IFtdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBh
dGguYWJzcGF0aChwYXRoKQorICAgICAgICAgICAgIyBUaGlzIGdpdmVzIHVzLCBmb3IgZXhhbXBs
ZTogL2NvbW1vbi9jb25maWcvcG9ydHNfdW5pdHRlc3QucHkKKyAgICAgICAgICAgIHJlbF9wYXRo
ID0gcGF0aFtwcmVmaXhfbGVuZ3RoOl0KKyAgICAgICAgICAgICMgVGhpcyBnaXZlcyB1cywgZm9y
IGV4YW1wbGU6IC9jb21tb24vY29uZmlnL3BvcnRzX3VuaXR0ZXN0CisgICAgICAgICAgICByZWxf
cGF0aCA9IG9zLnBhdGguc3BsaXRleHQocmVsX3BhdGgpWzBdCisKKyAgICAgICAgICAgIHBhcnRz
ID0gW10KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgKHJlbF9wYXRo
LCB0YWlsKSA9IG9zLnBhdGguc3BsaXQocmVsX3BhdGgpCisgICAgICAgICAgICAgICAgaWYgbm90
IHRhaWw6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcGFydHMu
aW5zZXJ0KDAsIHRhaWwpCisgICAgICAgICAgICAjIFdlIG5vdyBoYXZlLCBmb3IgZXhhbXBsZTog
Y29tbW9uLmNvbmZpZy5wb3J0c191bml0dGVzdAorICAgICAgICAgICAgcGFydHMuaW5zZXJ0KDAs
IHdlYmtpdHB5X25hbWUpICAjIFB1dCAid2Via2l0cHkiIGF0IHRoZSBiZWdpbm5pbmcuCisgICAg
ICAgICAgICBtb2R1bGUgPSAiLiIuam9pbihwYXJ0cykKKyAgICAgICAgICAgIG1vZHVsZXMuYXBw
ZW5kKG1vZHVsZSkKKworICAgICAgICByZXR1cm4gbW9kdWxlcworCisgICAgZGVmIHJ1bl90ZXN0
cyhzZWxmLCBzeXNfYXJndik6CisgICAgICAgICIiIlJ1biB0aGUgdW5pdCB0ZXN0cyBpbiBhbGwg
Kl91bml0dGVzdC5weSBtb2R1bGVzIGluIHdlYmtpdHB5LgorCisgICAgICAgIFRoaXMgbWV0aG9k
IGV4Y2x1ZGVzICJ3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtX3VuaXR0ZXN0IiB1bmxlc3MK
KyAgICAgICAgdGhlIC0tYWxsIG9wdGlvbiBpcyB0aGUgc2Vjb25kIGVsZW1lbnQgb2Ygc3lzX2Fy
Z3YuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICBzeXNfYXJndjogQSByZWZlcmVuY2UgdG8g
c3lzLmFyZ3YuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxlbihzeXNfYXJndikgPiAxIGFu
ZCBub3Qgc3lzX2FyZ3ZbLTFdLnN0YXJ0c3dpdGgoIi0iKToKKyAgICAgICAgICAgICMgVGhlbiBl
eHBsaWNpdCBtb2R1bGVzIG9yIHRlc3QgbmFtZXMgd2VyZSBwcm92aWRlZCwgd2hpY2gKKyAgICAg
ICAgICAgICMgdGhlIHVuaXR0ZXN0IG1vZHVsZSBpcyBlcXVpcHBlZCB0byBoYW5kbGUuCisgICAg
ICAgICAgICB1bml0dGVzdC5tYWluKG1vZHVsZT1Ob25lKQorICAgICAgICAgICAgIyBObyBuZWVk
IHRvIHJldHVybiBzaW5jZSB1bml0dHRlc3QubWFpbigpIGV4aXRzLgorCisgICAgICAgICMgT3Ro
ZXJ3aXNlLCBhdXRvLWRldGVjdCBhbGwgdW5pdCB0ZXN0cy4KKworICAgICAgICB3ZWJraXRweV9k
aXIgPSBvcy5wYXRoLmRpcm5hbWUod2Via2l0cHkuX19maWxlX18pCisgICAgICAgIHVuaXR0ZXN0
X3BhdGhzID0gc2VsZi5fZmluZF91bml0dGVzdF9maWxlcyh3ZWJraXRweV9kaXIpCisKKyAgICAg
ICAgbW9kdWxlcyA9IHNlbGYuX21vZHVsZXNfZnJvbV9wYXRocyh3ZWJraXRweV9kaXIsIHVuaXR0
ZXN0X3BhdGhzKQorICAgICAgICBtb2R1bGVzLnNvcnQoKQorCisgICAgICAgICMgVGhpcyBpcyBh
IHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgdW5pdC10ZXN0IGRpc2NvdmVyeQorICAg
ICAgICAjIG1ldGhvZHMgYXJlIHdvcmtpbmcuCisgICAgICAgIGlmIGxlbihtb2R1bGVzKSA8IDE6
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIHVuaXQtdGVzdCBtb2R1bGVzIGZvdW5k
LiIpCisKKyAgICAgICAgZm9yIG1vZHVsZSBpbiBtb2R1bGVzOgorICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiRm91bmQ6ICVzIiAlIG1vZHVsZSkKKworICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEg
aGFjaywgYnV0IEknbSB0aXJlZCBvZiBjb21tZW50aW5nIG91dCB0aGUgdGVzdC4KKyAgICAgICAg
IyAgICAgICAgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTgx
OAorICAgICAgICBpZiBsZW4oc3lzX2FyZ3YpID4gMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gIi0tYWxs
IjoKKyAgICAgICAgICAgIHN5cy5hcmd2LnJlbW92ZSgiLS1hbGwiKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgZXhjbHVkZWRfbW9kdWxlID0gIndlYmtpdHB5LmNvbW1vbi5jaGVja291dC5z
Y21fdW5pdHRlc3QiCisgICAgICAgICAgICBfbG9nLmluZm8oIkV4Y2x1ZGluZzogJXMgKHVzZSAt
LWFsbCB0byBpbmNsdWRlKSIgJSBleGNsdWRlZF9tb2R1bGUpCisgICAgICAgICAgICBtb2R1bGVz
LnJlbW92ZShleGNsdWRlZF9tb2R1bGUpCisKKyAgICAgICAgc3lzX2FyZ3YuZXh0ZW5kKG1vZHVs
ZXMpCisKKyAgICAgICAgIyBXZSBwYXNzIE5vbmUgZm9yIHRoZSBtb2R1bGUgYmVjYXVzZSB3ZSBk
byBub3Qgd2FudCB0aGUgdW5pdHRlc3QKKyAgICAgICAgIyBtb2R1bGUgdG8gcmVzb2x2ZSBtb2R1
bGUgbmFtZXMgcmVsYXRpdmUgdG8gYSBnaXZlbiBtb2R1bGUuCisgICAgICAgICMgKFRoaXMgd291
bGQgcmVxdWlyZSBpbXBvcnRpbmcgYWxsIG9mIHRoZSB1bml0dGVzdCBtb2R1bGVzIGZyb20KKyAg
ICAgICAgIyB0aGlzIG1vZHVsZS4pICBTZWUgdGhlIGxvYWRUZXN0c0Zyb21OYW1lKCkgbWV0aG9k
IG9mIHRoZQorICAgICAgICAjIHVuaXR0ZXN0LlRlc3RMb2FkZXIgY2xhc3MgZm9yIG1vcmUgZGV0
YWlscyBvbiB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgdW5pdHRlc3QubWFpbihhcmd2PXN5c19h
cmd2LCBtb2R1bGU9Tm9uZSkK
</data>
<flag name="review"
          id="35188"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="35189"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>