<?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>63468</bug_id>
          
          <creation_ts>2011-06-27 10:43:26 -0700</creation_ts>
          <short_desc>webkitpy should understand crash logs</short_desc>
          <delta_ts>2011-06-29 04:10:30 -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>
          <dependson>63619</dependson>
          <blocked>55907</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>aroben</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>428085</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 10:43:26 -0700</bug_when>
    <thetext>webkitpy should understand crash logs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428089</commentid>
    <comment_count>1</comment_count>
      <attachid>98748</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 10:45:48 -0700</bug_when>
    <thetext>Created attachment 98748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428095</commentid>
    <comment_count>2</comment_count>
      <attachid>98748</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-27 10:56:13 -0700</bug_when>
    <thetext>Comment on attachment 98748
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/crashlog.py:44
&gt; +        if sys.platform == &quot;darwin&quot;:
&gt; +            self._capture_log_darwin(process_name)

Its funny how initing one of these does the search.  I think I would have called this thing CrashLogs and had a most_recent_log(process_name=) function instead.

&gt; Tools/Scripts/webkitpy/common/system/crashlog.py:58
&gt; +        log_directory = self._filesystem.expanduser(&quot;~&quot;)
&gt; +        log_directory = os.path.join(log_directory, &quot;Library&quot;, &quot;Logs&quot;)
&gt; +        if self._filesystem.exists(os.path.join(log_directory, &quot;DiagnosticReports&quot;)):
&gt; +            log_directory = os.path.join(log_directory, &quot;DiagnosticReports&quot;)
&gt; +        else:
&gt; +            log_directory = os.path.join(log_directory, &quot;CrashReporter&quot;)

I would have made this a separate function.

&gt; Tools/Scripts/webkitpy/common/system/executive.py:301
&gt; +        ps_process = self.popen([&apos;ps&apos;, &apos;-eo&apos;, &apos;pid,comm&apos;], stdout=self.PIPE, stderr=self.PIPE)

Really? Python doesn&apos;t offer us a better way than running ps?  I guess not: http://ubuntuforums.org/showthread.php?t=463850

&gt; Tools/Scripts/webkitpy/common/system/executive.py:311
&gt; +        return running_pids

Do we need to sort these?  Might add a comment which explains why we don&apos;t.  Does this handle pid-wrapping? do we care?

&gt; Tools/Scripts/webkitpy/common/system/executive.py:323
&gt; +        while self.check_running_pid(pid):
&gt; +            time.sleep(0.25)

Can&apos;t we just waitpid?  I guess on unix it has to be a child process?  I wonder if the same restriction applies to windows?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428111</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 11:15:51 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 98748 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98748&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/crashlog.py:44
&gt; &gt; +        if sys.platform == &quot;darwin&quot;:
&gt; &gt; +            self._capture_log_darwin(process_name)
&gt; 
&gt; Its funny how initing one of these does the search.  I think I would have called this thing CrashLogs and had a most_recent_log(process_name=) function instead.

I&apos;m not sure I fully understand.  You&apos;re saying we should use a free function instead of a constructor?  What would the CrashLog class have in it?

&gt; &gt; Tools/Scripts/webkitpy/common/system/crashlog.py:58
&gt; &gt; +        log_directory = self._filesystem.expanduser(&quot;~&quot;)
&gt; &gt; +        log_directory = os.path.join(log_directory, &quot;Library&quot;, &quot;Logs&quot;)
&gt; &gt; +        if self._filesystem.exists(os.path.join(log_directory, &quot;DiagnosticReports&quot;)):
&gt; &gt; +            log_directory = os.path.join(log_directory, &quot;DiagnosticReports&quot;)
&gt; &gt; +        else:
&gt; &gt; +            log_directory = os.path.join(log_directory, &quot;CrashReporter&quot;)
&gt; 
&gt; I would have made this a separate function.

Done.

&gt; &gt; Tools/Scripts/webkitpy/common/system/executive.py:301
&gt; &gt; +        ps_process = self.popen([&apos;ps&apos;, &apos;-eo&apos;, &apos;pid,comm&apos;], stdout=self.PIPE, stderr=self.PIPE)
&gt; 
&gt; Really? Python doesn&apos;t offer us a better way than running ps?  I guess not: http://ubuntuforums.org/showthread.php?t=463850

This is what the internets recommended.

&gt; &gt; Tools/Scripts/webkitpy/common/system/executive.py:311
&gt; &gt; +        return running_pids
&gt; 
&gt; Do we need to sort these?  Might add a comment which explains why we don&apos;t.  Does this handle pid-wrapping? do we care?

I&apos;ve sorted it.  I&apos;m sure it matters that much.  I suspect that we&apos;ll have some race conditions because of parallelism, but we&apos;ll have to deal with them when they occur.

&gt; &gt; Tools/Scripts/webkitpy/common/system/executive.py:323
&gt; &gt; +        while self.check_running_pid(pid):
&gt; &gt; +            time.sleep(0.25)
&gt; 
&gt; Can&apos;t we just waitpid?  I guess on unix it has to be a child process?  I wonder if the same restriction applies to windows?

Under the covers, check_running_pid does what the perl code used to do and what the Internet recommends.  The perl code specifically has a comment about not using waitpid for this purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428112</commentid>
    <comment_count>4</comment_count>
      <attachid>98751</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 11:16:39 -0700</bug_when>
    <thetext>Created attachment 98751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428132</commentid>
    <comment_count>5</comment_count>
      <attachid>98757</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 11:29:48 -0700</bug_when>
    <thetext>Created attachment 98757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428140</commentid>
    <comment_count>6</comment_count>
      <attachid>98757</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-27 11:35:27 -0700</bug_when>
    <thetext>Comment on attachment 98757
Patch

Missing your new file. ;(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428143</commentid>
    <comment_count>7</comment_count>
      <attachid>98759</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 11:36:47 -0700</bug_when>
    <thetext>Created attachment 98759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428148</commentid>
    <comment_count>8</comment_count>
      <attachid>98759</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-27 11:41:19 -0700</bug_when>
    <thetext>Comment on attachment 98759
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428154</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 11:47:49 -0700</bug_when>
    <thetext>Committed r89843: &lt;http://trac.webkit.org/changeset/89843&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98748</attachid>
            <date>2011-06-27 10:45:48 -0700</date>
            <delta_ts>2011-06-27 11:16:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63468-20110627104547.patch</filename>
            <type>text/plain</type>
            <size>11942</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg5ODMzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTEtMDYtMjcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXRweSBz
aG91bGQgdW5kZXJzdGFuZCBjcmFzaCBsb2dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MzQ2OAorCisgICAgICAgIFdlJ3JlIHBsYW5uaW5nIHRvIHVz
ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gdXBsb2FkIGNyYXNoIGxvZ3MgYWxvbmcKKyAgICAgICAg
d2l0aCB0ZXN0IHJlc3VsdHMgZm9yIG5ldy1ydW4td2Via2l0LXRlc3RzLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dfdW5pdHRlc3QucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRp
dmUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9xdWVyaWVzLnB5OgorCiAyMDExLTA2LTI3ICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2cucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nLnB5CShyZXZpc2lvbiAw
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nLnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisjIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBv
cworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKKworZGVmIF9pc19jcmFzaF9yZXBvcnRlcihwcm9j
ZXNzX25hbWUpOgorICAgIHJldHVybiByZS5tYXRjaChyIlJlcG9ydENyYXNoIiwgcHJvY2Vzc19u
YW1lKQorCisKK2NsYXNzIENyYXNoTG9nKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGV4ZWN1dGl2ZSwgZmlsZXN5c3RlbSwgcHJvY2Vzc19uYW1lKToKKyAgICAgICAgc2VsZi5fZXhl
Y3V0aXZlID0gZXhlY3V0aXZlCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVt
CisgICAgICAgIHNlbGYuX2xvZyA9IE5vbmUKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJk
YXJ3aW4iOgorICAgICAgICAgICAgc2VsZi5fY2FwdHVyZV9sb2dfZGFyd2luKHByb2Nlc3NfbmFt
ZSkKKworICAgIGRlZiBsb2coc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9sb2cKKworICAg
IGRlZiBfY2FwdHVyZV9sb2dfZGFyd2luKHNlbGYsIHByb2Nlc3NfbmFtZSk6CisgICAgICAgIGRl
ZiBpc19jcmFzaF9sb2coZnMsIGRpcnBhdGgsIGJhc2VuYW1lKToKKyAgICAgICAgICAgIHJldHVy
biBiYXNlbmFtZS5zdGFydHN3aXRoKHByb2Nlc3NfbmFtZSArICJfIikgYW5kIGJhc2VuYW1lLmVu
ZHN3aXRoKCIuY3Jhc2giKQorCisgICAgICAgIGxvZ19kaXJlY3RvcnkgPSBzZWxmLl9maWxlc3lz
dGVtLmV4cGFuZHVzZXIoIn4iKQorICAgICAgICBsb2dfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2lu
KGxvZ19kaXJlY3RvcnksICJMaWJyYXJ5IiwgIkxvZ3MiKQorICAgICAgICBpZiBzZWxmLl9maWxl
c3lzdGVtLmV4aXN0cyhvcy5wYXRoLmpvaW4obG9nX2RpcmVjdG9yeSwgIkRpYWdub3N0aWNSZXBv
cnRzIikpOgorICAgICAgICAgICAgbG9nX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihsb2dfZGly
ZWN0b3J5LCAiRGlhZ25vc3RpY1JlcG9ydHMiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
bG9nX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihsb2dfZGlyZWN0b3J5LCAiQ3Jhc2hSZXBvcnRl
ciIpCisKKyAgICAgICAgbG9ncyA9IHNlbGYuX2ZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIobG9nX2Rp
cmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQorICAgICAgICBpZiBub3QgbG9nczoK
KyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS53YWl0X25ld2Vz
dChfaXNfY3Jhc2hfcmVwb3J0ZXIpCisgICAgICAgIHNlbGYuX2xvZyA9IHNlbGYuX2ZpbGVzeXN0
ZW0ucmVhZF9iaW5hcnlfZmlsZShzb3J0ZWQobG9ncylbLTFdKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ191bml0dGVz
dC5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9jcmFzaGxvZ191bml0dGVzdC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lz
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZyBpbXBvcnQgKgorZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0
ZW0KK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCisKKworY2xhc3Mg
Q3Jhc2hMb2dUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maW5kX2xvZ19k
YXJ3aW4oc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIjoKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9ICJNb2NrIENyYXNoIFJl
cG9ydCIKKyAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICBmaWxlc1snL1VzZXJzL21vY2svTGli
cmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzL1RleHRNYXRlXzIwMTEtMDYtMTMtMTUwNzE5X3F1
YWR6ZW4uY3Jhc2gnXSA9IG1vY2tfY3Jhc2hfcmVwb3J0CisgICAgICAgIGZpbGVzeXN0ZW0gPSBN
b2NrRmlsZVN5c3RlbShmaWxlcykKKyAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2coTW9jaygp
LCBmaWxlc3lzdGVtLCAiVGV4dE1hdGUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3Jhc2hf
bG9nLmxvZygpLCBtb2NrX2NyYXNoX3JlcG9ydCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQkocmV2aXNpb24gODk4MjQpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDM5IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgog
CiAgICAgICAgIGFzc2VydChGYWxzZSkKIAorICAgIGRlZiBydW5uaW5nX3BpZHMoc2VsZiwgcHJv
Y2Vzc19uYW1lX2ZpbHRlcj1Ob25lKToKKyAgICAgICAgaWYgbm90IHByb2Nlc3NfbmFtZV9maWx0
ZXI6CisgICAgICAgICAgICBwcm9jZXNzX25hbWVfZmlsdGVyID0gbGFtYmRhIHByb2Nlc3NfbmFt
ZTogVHJ1ZQorCisgICAgICAgIHJ1bm5pbmdfcGlkcyA9IFtdCisKKyAgICAgICAgaWYgc3lzLnBs
YXRmb3JtIGluICgid2luMzIiLCAiY3lnd2luIik6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZCgpCisKKyAgICAgICAgcHNfcHJvY2VzcyA9IHNlbGYucG9wZW4oWydwcycsICctZW8n
LCAncGlkLGNvbW0nXSwgc3Rkb3V0PXNlbGYuUElQRSwgc3RkZXJyPXNlbGYuUElQRSkKKyAgICAg
ICAgc3Rkb3V0LCBfID0gcHNfcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgIGZvciBsaW5l
IGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgcGlkLCBwcm9jZXNzX25hbWUgPSBsaW5lLnNwbGl0KCcgJywgMSkKKyAgICAgICAgICAgICAg
ICBpZiBwcm9jZXNzX25hbWVfZmlsdGVyKHByb2Nlc3NfbmFtZSk6CisgICAgICAgICAgICAgICAg
ICAgIHJ1bm5pbmdfcGlkcy5hcHBlbmQoaW50KHBpZCkpCisgICAgICAgICAgICBleGNlcHQgVmFs
dWVFcnJvciwgZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIHJ1bm5p
bmdfcGlkcworCisgICAgZGVmIHdhaXRfbmV3ZXN0KHNlbGYsIHByb2Nlc3NfbmFtZV9maWx0ZXI9
Tm9uZSk6CisgICAgICAgIGlmIG5vdCBwcm9jZXNzX25hbWVfZmlsdGVyOgorICAgICAgICAgICAg
cHJvY2Vzc19uYW1lX2ZpbHRlciA9IGxhbWJkYSBwcm9jZXNzX25hbWU6IFRydWUKKworICAgICAg
ICBydW5uaW5nX3BpZHMgPSBzZWxmLnJ1bm5pbmdfcGlkcyhwcm9jZXNzX25hbWVfZmlsdGVyKQor
ICAgICAgICBpZiBub3QgcnVubmluZ19waWRzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IHBpZCA9IHJ1bm5pbmdfcGlkc1stMV0KKworICAgICAgICB3aGlsZSBzZWxmLmNoZWNrX3J1bm5p
bmdfcGlkKHBpZCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMjUpCisKICAgICBkZWYgX3dp
bmRvd3NfaW1hZ2VfbmFtZShzZWxmLCBwcm9jZXNzX25hbWUpOgogICAgICAgICBuYW1lLCBleHRl
bnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHByb2Nlc3NfbmFtZSkKICAgICAgICAgaWYgbm90IGV4
dGVuc2lvbjoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVj
dXRpdmVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQkocmV2aXNpb24gODk4MjQpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMyArMTk5LDExIEBAIGNsYXNzIEV4ZWN1dGl2ZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhlY3V0aXZlLmNo
ZWNrX3J1bm5pbmdfcGlkKG9zLmdldHBpZCgpKSkKICAgICAgICAgIyBNYXhpbXVtIHBpZCBudW1i
ZXIgb24gTGludXggaXMgMzI3NjggYnkgZGVmYXVsdAogICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGV4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZCgxMDAwMDApKQorCisgICAgZGVmIHRlc3RfcnVu
bmluZ19waWRzKHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsICJj
eWd3aW4iKToKKyAgICAgICAgICAgIHJldHVybiAgIyBUaGlzIGZ1bmN0aW9uIGlzbid0IGltcGxl
bWVudGVkIG9uIFdpbmRvd3MgeWV0LgorCisgICAgICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgp
CisgICAgICAgIHBpZHMgPSBleGVjdXRpdmUucnVubmluZ19waWRzKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG9zLmdldHBpZCgpIGluIHBpZHMpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQkocmV2aXNpb24gODk4MjQp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQko
d29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDEzIEBAIGNsYXNzIEZpbGVTeXN0ZW0ob2JqZWN0
KToKICAgICBkZWYgYWJzcGF0aChzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGgu
YWJzcGF0aChwYXRoKQogCisgICAgZGVmIGV4cGFuZHVzZXIoc2VsZiwgcGF0aCk6CisgICAgICAg
IHJldHVybiBvcy5wYXRoLmV4cGFuZHVzZXIocGF0aCkKKwogICAgIGRlZiBiYXNlbmFtZShzZWxm
LCBwYXRoKToKLSAgICAgICAgIiIiV3JhcHMgb3MucGF0aC5iYXNlbmFtZSgpLiIiIgogICAgICAg
ICByZXR1cm4gb3MucGF0aC5iYXNlbmFtZShwYXRoKQogCiAgICAgZGVmIGNoZGlyKHNlbGYsIHBh
dGgpOgotICAgICAgICAiIiJXcmFwcyBvcy5jaGRpcigpLiIiIgogICAgICAgICByZXR1cm4gb3Mu
Y2hkaXIocGF0aCkKIAogICAgIGRlZiBjb3B5ZmlsZShzZWxmLCBzb3VyY2UsIGRlc3RpbmF0aW9u
KToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVt
X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW1fbW9jay5weQkocmV2aXNpb24gODk4MjQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC03MCw2ICs3MCwxNSBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgIGRl
ZiBiYXNlbmFtZShzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3NwbGl0KHBhdGgp
WzFdCiAKKyAgICBkZWYgZXhwYW5kdXNlcihzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aFsw
XSAhPSAifiI6CisgICAgICAgICAgICByZXR1cm4gcGF0aAorICAgICAgICBwYXJ0cyA9IHBhdGgu
c3BsaXQoc2VsZi5zZXAsIDEpCisgICAgICAgIGhvbWVfZGlyZWN0b3J5ID0gc2VsZi5zZXAgKyAi
VXNlcnMiICsgc2VsZi5zZXAgKyAibW9jayIKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAxOgor
ICAgICAgICAgICAgcmV0dXJuIGhvbWVfZGlyZWN0b3J5CisgICAgICAgIHJldHVybiBob21lX2Rp
cmVjdG9yeSArIHNlbGYuc2VwICsgcGFydHNbMV0KKwogICAgIGRlZiBjaGRpcihzZWxmLCBwYXRo
KToKICAgICAgICAgcGF0aCA9IHNlbGYubm9ybXBhdGgocGF0aCkKICAgICAgICAgaWYgbm90IHNl
bGYuaXNkaXIocGF0aCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvcXVlcmllcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcXVlcmllcy5weQkocmV2aXNpb24gODk4MjQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMg
KzM2LDEzIEBAIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNvbW1pdGluZm8KIGZyb20g
d2Via2l0cHkuY29tbW9uLmNvbmZpZy5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0CiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90CiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5uZXQucmVncmVzc2lvbndpbmRvdyBpbXBvcnQgUmVncmVzc2lvbldpbmRv
dworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9nIGltcG9ydCBDcmFzaExvZwog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnVzZXIgaW1wb3J0IFVzZXIKIGZyb20gd2Via2l0
cHkudG9vbC5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKIGZyb20gd2Via2l0cHkudG9vbC5tdWx0
aWNvbW1hbmR0b29sIGltcG9ydCBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZAogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9nCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAogCi0KIGNsYXNzIFN1Z2dlc3RSZXZpZXdl
cnMoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgogICAgIG5hbWUgPSAic3VnZ2VzdC1yZXZp
ZXdlcnMiCiAgICAgaGVscF90ZXh0ID0gIlN1Z2dlc3QgcmV2aWV3ZXJzIGZvciBhIHBhdGNoIGJh
c2VkIG9uIHJlY2VudCBjaGFuZ2VzIHRvIHRoZSBtb2RpZmllZCBmaWxlcy4iCkBAIC0zNjgsNiAr
MzY4LDE1IEBAIGFuZCBkaXNwbGF5ZXMgdGhlIHN0YXR1cyBvZiBlYWNoIGJ1aWxkZXIKICAgICAg
ICAgICAgIHByaW50ICIlcyA6ICVzIiAlIChzdGF0dXNfc3RyaW5nLmxqdXN0KDQpLCBidWlsZGVy
WyJuYW1lIl0pCiAKIAorY2xhc3MgQ3Jhc2hMb2coQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQp
OgorICAgIG5hbWUgPSAiY3Jhc2gtbG9nIgorICAgIGFyZ3VtZW50X25hbWVzID0gIlBST0NFU1Nf
TkFNRSIKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAg
ICAgICBjcmFzaF9sb2cgPSBDcmFzaExvZyh0b29sLmV4ZWN1dGl2ZSwgdG9vbC5maWxlc3lzdGVt
LCBhcmdzWzBdKQorICAgICAgICBwcmludCBjcmFzaF9sb2cubG9nKCkKKworCiBjbGFzcyBTa2lw
cGVkUG9ydHMoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgogICAgIG5hbWUgPSAic2tpcHBl
ZC1wb3J0cyIKICAgICBoZWxwX3RleHQgPSAiUHJpbnQgdGhlIGxpc3Qgb2YgcG9ydHMgc2tpcHBp
bmcgdGhlIGdpdmVuIGxheW91dCB0ZXN0KHMpIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98751</attachid>
            <date>2011-06-27 11:16:39 -0700</date>
            <delta_ts>2011-06-27 11:29:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63468-20110627111637.patch</filename>
            <type>text/plain</type>
            <size>12072</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg5ODMzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTEtMDYtMjcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXRweSBz
aG91bGQgdW5kZXJzdGFuZCBjcmFzaCBsb2dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MzQ2OAorCisgICAgICAgIFdlJ3JlIHBsYW5uaW5nIHRvIHVz
ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gdXBsb2FkIGNyYXNoIGxvZ3MgYWxvbmcKKyAgICAgICAg
d2l0aCB0ZXN0IHJlc3VsdHMgZm9yIG5ldy1ydW4td2Via2l0LXRlc3RzLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dfdW5pdHRlc3QucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRp
dmUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9xdWVyaWVzLnB5OgorCiAyMDExLTA2LTI3ICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2cucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nLnB5CShyZXZpc2lvbiAw
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nLnB5CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisjIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBv
cworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKKworZGVmIF9pc19jcmFzaF9yZXBvcnRlcihwcm9j
ZXNzX25hbWUpOgorICAgIHJldHVybiByZS5tYXRjaChyIlJlcG9ydENyYXNoIiwgcHJvY2Vzc19u
YW1lKQorCisKK2NsYXNzIENyYXNoTG9nKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGV4ZWN1dGl2ZSwgZmlsZXN5c3RlbSwgcHJvY2Vzc19uYW1lKToKKyAgICAgICAgc2VsZi5fZXhl
Y3V0aXZlID0gZXhlY3V0aXZlCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVt
CisgICAgICAgIHNlbGYuX2xvZyA9IE5vbmUKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJk
YXJ3aW4iOgorICAgICAgICAgICAgc2VsZi5fY2FwdHVyZV9sb2dfZGFyd2luKHByb2Nlc3NfbmFt
ZSkKKworICAgIGRlZiBsb2coc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9sb2cKKworICAg
IGRlZiBfbG9nX2RpcmVjdG9yeV9kYXJ3aW4oc2VsZik6CisgICAgICAgIGxvZ19kaXJlY3Rvcnkg
PSBzZWxmLl9maWxlc3lzdGVtLmV4cGFuZHVzZXIoIn4iKQorICAgICAgICBsb2dfZGlyZWN0b3J5
ID0gb3MucGF0aC5qb2luKGxvZ19kaXJlY3RvcnksICJMaWJyYXJ5IiwgIkxvZ3MiKQorICAgICAg
ICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhvcy5wYXRoLmpvaW4obG9nX2RpcmVjdG9yeSwg
IkRpYWdub3N0aWNSZXBvcnRzIikpOgorICAgICAgICAgICAgbG9nX2RpcmVjdG9yeSA9IG9zLnBh
dGguam9pbihsb2dfZGlyZWN0b3J5LCAiRGlhZ25vc3RpY1JlcG9ydHMiKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgbG9nX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihsb2dfZGlyZWN0b3J5
LCAiQ3Jhc2hSZXBvcnRlciIpCisgICAgICAgIHJldHVybiBsb2dfZGlyZWN0b3J5CisKKyAgICBk
ZWYgX2NhcHR1cmVfbG9nX2RhcndpbihzZWxmLCBwcm9jZXNzX25hbWUpOgorICAgICAgICBkZWYg
aXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBiYXNlbmFtZSk6CisgICAgICAgICAgICByZXR1cm4g
YmFzZW5hbWUuc3RhcnRzd2l0aChwcm9jZXNzX25hbWUgKyAiXyIpIGFuZCBiYXNlbmFtZS5lbmRz
d2l0aCgiLmNyYXNoIikKKworICAgICAgICBsb2dfZGlyZWN0b3J5ID0gc2VsZi5fbG9nX2RpcmVj
dG9yeV9kYXJ3aW4oKQorICAgICAgICBsb2dzID0gc2VsZi5fZmlsZXN5c3RlbS5maWxlc191bmRl
cihsb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cpCisgICAgICAgIGlmIG5v
dCBsb2dzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLndh
aXRfbmV3ZXN0KF9pc19jcmFzaF9yZXBvcnRlcikKKyAgICAgICAgc2VsZi5fbG9nID0gc2VsZi5f
ZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKHNvcnRlZChsb2dzKVstMV0pCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dfdW5pdHRlc3QucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9n
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2NyYXNobG9nX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQx
IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKK2lt
cG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9nIGltcG9ydCAq
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2Nr
RmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKKwor
CitjbGFzcyBDcmFzaExvZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Zp
bmRfbG9nX2RhcndpbihzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4i
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1vY2tfY3Jhc2hfcmVwb3J0ID0gIk1vY2sg
Q3Jhc2ggUmVwb3J0IgorICAgICAgICBmaWxlcyA9IHt9CisgICAgICAgIGZpbGVzWycvVXNlcnMv
bW9jay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvVGV4dE1hdGVfMjAxMS0wNi0xMy0x
NTA3MTlfcXVhZHplbi5jcmFzaCddID0gbW9ja19jcmFzaF9yZXBvcnQKKyAgICAgICAgZmlsZXN5
c3RlbSA9IE1vY2tGaWxlU3lzdGVtKGZpbGVzKQorICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExv
ZyhNb2NrKCksIGZpbGVzeXN0ZW0sICJUZXh0TWF0ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShjcmFzaF9sb2cubG9nKCksIG1vY2tfY3Jhc2hfcmVwb3J0KQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CShyZXZpc2lvbiA4
OTgyNCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksMzkgQEAgY2xhc3MgRXhlY3V0aXZlKG9i
amVjdCk6CiAKICAgICAgICAgYXNzZXJ0KEZhbHNlKQogCisgICAgZGVmIHJ1bm5pbmdfcGlkcyhz
ZWxmLCBwcm9jZXNzX25hbWVfZmlsdGVyPU5vbmUpOgorICAgICAgICBpZiBub3QgcHJvY2Vzc19u
YW1lX2ZpbHRlcjoKKyAgICAgICAgICAgIHByb2Nlc3NfbmFtZV9maWx0ZXIgPSBsYW1iZGEgcHJv
Y2Vzc19uYW1lOiBUcnVlCisKKyAgICAgICAgcnVubmluZ19waWRzID0gW10KKworICAgICAgICBp
ZiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKToKKyAgICAgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkKCkKKworICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5wb3BlbihbJ3Bz
JywgJy1lbycsICdwaWQsY29tbSddLCBzdGRvdXQ9c2VsZi5QSVBFLCBzdGRlcnI9c2VsZi5QSVBF
KQorICAgICAgICBzdGRvdXQsIF8gPSBwc19wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAg
Zm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBwaWQsIHByb2Nlc3NfbmFtZSA9IGxpbmUuc3BsaXQoJyAnLCAxKQorICAgICAg
ICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZV9maWx0ZXIocHJvY2Vzc19uYW1lKToKKyAgICAgICAg
ICAgICAgICAgICAgcnVubmluZ19waWRzLmFwcGVuZChpbnQocGlkKSkKKyAgICAgICAgICAgIGV4
Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1
cm4gc29ydGVkKHJ1bm5pbmdfcGlkcykKKworICAgIGRlZiB3YWl0X25ld2VzdChzZWxmLCBwcm9j
ZXNzX25hbWVfZmlsdGVyPU5vbmUpOgorICAgICAgICBpZiBub3QgcHJvY2Vzc19uYW1lX2ZpbHRl
cjoKKyAgICAgICAgICAgIHByb2Nlc3NfbmFtZV9maWx0ZXIgPSBsYW1iZGEgcHJvY2Vzc19uYW1l
OiBUcnVlCisKKyAgICAgICAgcnVubmluZ19waWRzID0gc2VsZi5ydW5uaW5nX3BpZHMocHJvY2Vz
c19uYW1lX2ZpbHRlcikKKyAgICAgICAgaWYgbm90IHJ1bm5pbmdfcGlkczoKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICBwaWQgPSBydW5uaW5nX3BpZHNbLTFdCisKKyAgICAgICAgd2hpbGUg
c2VsZi5jaGVja19ydW5uaW5nX3BpZChwaWQpOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjI1
KQorCiAgICAgZGVmIF93aW5kb3dzX2ltYWdlX25hbWUoc2VsZiwgcHJvY2Vzc19uYW1lKToKICAg
ICAgICAgbmFtZSwgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChwcm9jZXNzX25hbWUpCiAg
ICAgICAgIGlmIG5vdCBleHRlbnNpb246CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDg5ODI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1
dGl2ZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTk5LDMgKzE5OSwxMSBAQCBjbGFz
cyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGV4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZChvcy5nZXRwaWQoKSkpCiAgICAgICAgICMg
TWF4aW11bSBwaWQgbnVtYmVyIG9uIExpbnV4IGlzIDMyNzY4IGJ5IGRlZmF1bHQKICAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShleGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoMTAwMDAwKSkKKwor
ICAgIGRlZiB0ZXN0X3J1bm5pbmdfcGlkcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3Jt
IGluICgid2luMzIiLCAiY3lnd2luIik6CisgICAgICAgICAgICByZXR1cm4gICMgVGhpcyBmdW5j
dGlvbiBpc24ndCBpbXBsZW1lbnRlZCBvbiBXaW5kb3dzIHlldC4KKworICAgICAgICBleGVjdXRp
dmUgPSBFeGVjdXRpdmUoKQorICAgICAgICBwaWRzID0gZXhlY3V0aXZlLnJ1bm5pbmdfcGlkcygp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5nZXRwaWQoKSBpbiBwaWRzKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkJ
KHJldmlzaW9uIDg5ODI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2ZpbGVzeXN0ZW0ucHkJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1NywxMyBAQCBjbGFzcyBG
aWxlU3lzdGVtKG9iamVjdCk6CiAgICAgZGVmIGFic3BhdGgoc2VsZiwgcGF0aCk6CiAgICAgICAg
IHJldHVybiBvcy5wYXRoLmFic3BhdGgocGF0aCkKIAorICAgIGRlZiBleHBhbmR1c2VyKHNlbGYs
IHBhdGgpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5leHBhbmR1c2VyKHBhdGgpCisKICAgICBk
ZWYgYmFzZW5hbWUoc2VsZiwgcGF0aCk6Ci0gICAgICAgICIiIldyYXBzIG9zLnBhdGguYmFzZW5h
bWUoKS4iIiIKICAgICAgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUocGF0aCkKIAogICAgIGRl
ZiBjaGRpcihzZWxmLCBwYXRoKToKLSAgICAgICAgIiIiV3JhcHMgb3MuY2hkaXIoKS4iIiIKICAg
ICAgICAgcmV0dXJuIG9zLmNoZGlyKHBhdGgpCiAKICAgICBkZWYgY29weWZpbGUoc2VsZiwgc291
cmNlLCBkZXN0aW5hdGlvbik6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkJKHJldmlzaW9uIDg5ODI0KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5w
eQkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsMTUgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0o
b2JqZWN0KToKICAgICBkZWYgYmFzZW5hbWUoc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBz
ZWxmLl9zcGxpdChwYXRoKVsxXQogCisgICAgZGVmIGV4cGFuZHVzZXIoc2VsZiwgcGF0aCk6Cisg
ICAgICAgIGlmIHBhdGhbMF0gIT0gIn4iOgorICAgICAgICAgICAgcmV0dXJuIHBhdGgKKyAgICAg
ICAgcGFydHMgPSBwYXRoLnNwbGl0KHNlbGYuc2VwLCAxKQorICAgICAgICBob21lX2RpcmVjdG9y
eSA9IHNlbGYuc2VwICsgIlVzZXJzIiArIHNlbGYuc2VwICsgIm1vY2siCisgICAgICAgIGlmIGxl
bihwYXJ0cykgPT0gMToKKyAgICAgICAgICAgIHJldHVybiBob21lX2RpcmVjdG9yeQorICAgICAg
ICByZXR1cm4gaG9tZV9kaXJlY3RvcnkgKyBzZWxmLnNlcCArIHBhcnRzWzFdCisKICAgICBkZWYg
Y2hkaXIoc2VsZiwgcGF0aCk6CiAgICAgICAgIHBhdGggPSBzZWxmLm5vcm1wYXRoKHBhdGgpCiAg
ICAgICAgIGlmIG5vdCBzZWxmLmlzZGlyKHBhdGgpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkJKHJldmlzaW9uIDg5ODI0KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDEzICszNiwxMyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5j
b21taXRpbmZvCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcuY29tbWl0dGVycyBpbXBvcnQg
Q29tbWl0dGVyTGlzdAogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1aWxkYm90IGltcG9ydCBC
dWlsZEJvdAogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LnJlZ3Jlc3Npb253aW5kb3cgaW1wb3J0
IFJlZ3Jlc3Npb25XaW5kb3cKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZyBp
bXBvcnQgQ3Jhc2hMb2cKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS51c2VyIGltcG9ydCBV
c2VyCiBmcm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCiBmcm9tIHdl
YmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNv
bW1hbmQKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcgaW1w
b3J0IGxvZwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIAotCiBjbGFz
cyBTdWdnZXN0UmV2aWV3ZXJzKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAgICBuYW1l
ID0gInN1Z2dlc3QtcmV2aWV3ZXJzIgogICAgIGhlbHBfdGV4dCA9ICJTdWdnZXN0IHJldmlld2Vy
cyBmb3IgYSBwYXRjaCBiYXNlZCBvbiByZWNlbnQgY2hhbmdlcyB0byB0aGUgbW9kaWZpZWQgZmls
ZXMuIgpAQCAtMzY4LDYgKzM2OCwxNSBAQCBhbmQgZGlzcGxheWVzIHRoZSBzdGF0dXMgb2YgZWFj
aCBidWlsZGVyCiAgICAgICAgICAgICBwcmludCAiJXMgOiAlcyIgJSAoc3RhdHVzX3N0cmluZy5s
anVzdCg0KSwgYnVpbGRlclsibmFtZSJdKQogCiAKK2NsYXNzIENyYXNoTG9nKEFic3RyYWN0RGVj
bGFyYXRpdmVDb21tYW5kKToKKyAgICBuYW1lID0gImNyYXNoLWxvZyIKKyAgICBhcmd1bWVudF9u
YW1lcyA9ICJQUk9DRVNTX05BTUUiCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBh
cmdzLCB0b29sKToKKyAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2codG9vbC5leGVjdXRpdmUs
IHRvb2wuZmlsZXN5c3RlbSwgYXJnc1swXSkKKyAgICAgICAgcHJpbnQgY3Jhc2hfbG9nLmxvZygp
CisKKwogY2xhc3MgU2tpcHBlZFBvcnRzKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAg
ICBuYW1lID0gInNraXBwZWQtcG9ydHMiCiAgICAgaGVscF90ZXh0ID0gIlByaW50IHRoZSBsaXN0
IG9mIHBvcnRzIHNraXBwaW5nIHRoZSBnaXZlbiBsYXlvdXQgdGVzdChzKSIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98757</attachid>
            <date>2011-06-27 11:29:48 -0700</date>
            <delta_ts>2011-06-27 11:36:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63468-20110627112947.patch</filename>
            <type>text/plain</type>
            <size>6503</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg5ODMzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTEtMDYtMjcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXRweSBz
aG91bGQgdW5kZXJzdGFuZCBjcmFzaCBsb2dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MzQ2OAorCisgICAgICAgIFdlJ3JlIHBsYW5uaW5nIHRvIHVz
ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gdXBsb2FkIGNyYXNoIGxvZ3MgYWxvbmcKKyAgICAgICAg
d2l0aCB0ZXN0IHJlc3VsdHMgZm9yIG5ldy1ydW4td2Via2l0LXRlc3RzLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dfdW5pdHRlc3QucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRp
dmUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9xdWVyaWVzLnB5OgorCiAyMDExLTA2LTI3ICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkJKHJldmlzaW9u
IDg5ODI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSwzOSBAQCBjbGFzcyBFeGVjdXRpdmUo
b2JqZWN0KToKIAogICAgICAgICBhc3NlcnQoRmFsc2UpCiAKKyAgICBkZWYgcnVubmluZ19waWRz
KHNlbGYsIHByb2Nlc3NfbmFtZV9maWx0ZXI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBwcm9jZXNz
X25hbWVfZmlsdGVyOgorICAgICAgICAgICAgcHJvY2Vzc19uYW1lX2ZpbHRlciA9IGxhbWJkYSBw
cm9jZXNzX25hbWU6IFRydWUKKworICAgICAgICBydW5uaW5nX3BpZHMgPSBbXQorCisgICAgICAg
IGlmIHN5cy5wbGF0Zm9ybSBpbiAoIndpbjMyIiwgImN5Z3dpbiIpOgorICAgICAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWQoKQorCisgICAgICAgIHBzX3Byb2Nlc3MgPSBzZWxmLnBvcGVuKFsn
cHMnLCAnLWVvJywgJ3BpZCxjb21tJ10sIHN0ZG91dD1zZWxmLlBJUEUsIHN0ZGVycj1zZWxmLlBJ
UEUpCisgICAgICAgIHN0ZG91dCwgXyA9IHBzX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAg
ICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHBpZCwgcHJvY2Vzc19uYW1lID0gbGluZS5zcGxpdCgnICcsIDEpCisgICAg
ICAgICAgICAgICAgaWYgcHJvY2Vzc19uYW1lX2ZpbHRlcihwcm9jZXNzX25hbWUpOgorICAgICAg
ICAgICAgICAgICAgICBydW5uaW5nX3BpZHMuYXBwZW5kKGludChwaWQpKQorICAgICAgICAgICAg
ZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJl
dHVybiBzb3J0ZWQocnVubmluZ19waWRzKQorCisgICAgZGVmIHdhaXRfbmV3ZXN0KHNlbGYsIHBy
b2Nlc3NfbmFtZV9maWx0ZXI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBwcm9jZXNzX25hbWVfZmls
dGVyOgorICAgICAgICAgICAgcHJvY2Vzc19uYW1lX2ZpbHRlciA9IGxhbWJkYSBwcm9jZXNzX25h
bWU6IFRydWUKKworICAgICAgICBydW5uaW5nX3BpZHMgPSBzZWxmLnJ1bm5pbmdfcGlkcyhwcm9j
ZXNzX25hbWVfZmlsdGVyKQorICAgICAgICBpZiBub3QgcnVubmluZ19waWRzOgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIHBpZCA9IHJ1bm5pbmdfcGlkc1stMV0KKworICAgICAgICB3aGls
ZSBzZWxmLmNoZWNrX3J1bm5pbmdfcGlkKHBpZCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAu
MjUpCisKICAgICBkZWYgX3dpbmRvd3NfaW1hZ2VfbmFtZShzZWxmLCBwcm9jZXNzX25hbWUpOgog
ICAgICAgICBuYW1lLCBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHByb2Nlc3NfbmFtZSkK
ICAgICAgICAgaWYgbm90IGV4dGVuc2lvbjoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQkocmV2
aXNpb24gODk4MjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhl
Y3V0aXZlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMyArMTk5LDExIEBAIGNs
YXNzIEV4ZWN1dGl2ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdfcGlkKG9zLmdldHBpZCgpKSkKICAgICAgICAg
IyBNYXhpbXVtIHBpZCBudW1iZXIgb24gTGludXggaXMgMzI3NjggYnkgZGVmYXVsdAogICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGV4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZCgxMDAwMDApKQor
CisgICAgZGVmIHRlc3RfcnVubmluZ19waWRzKHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZv
cm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKToKKyAgICAgICAgICAgIHJldHVybiAgIyBUaGlzIGZ1
bmN0aW9uIGlzbid0IGltcGxlbWVudGVkIG9uIFdpbmRvd3MgeWV0LgorCisgICAgICAgIGV4ZWN1
dGl2ZSA9IEV4ZWN1dGl2ZSgpCisgICAgICAgIHBpZHMgPSBleGVjdXRpdmUucnVubmluZ19waWRz
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLmdldHBpZCgpIGluIHBpZHMpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5w
eQkocmV2aXNpb24gODk4MjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vZmlsZXN5c3RlbS5weQkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDEzIEBAIGNsYXNz
IEZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICBkZWYgYWJzcGF0aChzZWxmLCBwYXRoKToKICAgICAg
ICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChwYXRoKQogCisgICAgZGVmIGV4cGFuZHVzZXIoc2Vs
ZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmV4cGFuZHVzZXIocGF0aCkKKwogICAg
IGRlZiBiYXNlbmFtZShzZWxmLCBwYXRoKToKLSAgICAgICAgIiIiV3JhcHMgb3MucGF0aC5iYXNl
bmFtZSgpLiIiIgogICAgICAgICByZXR1cm4gb3MucGF0aC5iYXNlbmFtZShwYXRoKQogCiAgICAg
ZGVmIGNoZGlyKHNlbGYsIHBhdGgpOgotICAgICAgICAiIiJXcmFwcyBvcy5jaGRpcigpLiIiIgog
ICAgICAgICByZXR1cm4gb3MuY2hkaXIocGF0aCkKIAogICAgIGRlZiBjb3B5ZmlsZShzZWxmLCBz
b3VyY2UsIGRlc3RpbmF0aW9uKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQkocmV2aXNpb24gODk4MjQp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2Nr
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxNSBAQCBjbGFzcyBNb2NrRmlsZVN5c3Rl
bShvYmplY3QpOgogICAgIGRlZiBiYXNlbmFtZShzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJu
IHNlbGYuX3NwbGl0KHBhdGgpWzFdCiAKKyAgICBkZWYgZXhwYW5kdXNlcihzZWxmLCBwYXRoKToK
KyAgICAgICAgaWYgcGF0aFswXSAhPSAifiI6CisgICAgICAgICAgICByZXR1cm4gcGF0aAorICAg
ICAgICBwYXJ0cyA9IHBhdGguc3BsaXQoc2VsZi5zZXAsIDEpCisgICAgICAgIGhvbWVfZGlyZWN0
b3J5ID0gc2VsZi5zZXAgKyAiVXNlcnMiICsgc2VsZi5zZXAgKyAibW9jayIKKyAgICAgICAgaWYg
bGVuKHBhcnRzKSA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIGhvbWVfZGlyZWN0b3J5CisgICAg
ICAgIHJldHVybiBob21lX2RpcmVjdG9yeSArIHNlbGYuc2VwICsgcGFydHNbMV0KKwogICAgIGRl
ZiBjaGRpcihzZWxmLCBwYXRoKToKICAgICAgICAgcGF0aCA9IHNlbGYubm9ybXBhdGgocGF0aCkK
ICAgICAgICAgaWYgbm90IHNlbGYuaXNkaXIocGF0aCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQkocmV2aXNpb24gODk4MjQpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDEzIEBAIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0
LmNvbW1pdGluZm8KIGZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZy5jb21taXR0ZXJzIGltcG9y
dCBDb21taXR0ZXJMaXN0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVpbGRib3QgaW1wb3J0
IEJ1aWxkQm90CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQucmVncmVzc2lvbndpbmRvdyBpbXBv
cnQgUmVncmVzc2lvbldpbmRvdworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9n
cyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBv
cnQgVXNlcgogZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQogZnJv
bSB3ZWJraXRweS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRp
dmVDb21tYW5kCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZGVwcmVjYXRlZF9sb2dnaW5n
IGltcG9ydCBsb2cKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0CiAKLQog
Y2xhc3MgU3VnZ2VzdFJldmlld2VycyhBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6CiAgICAg
bmFtZSA9ICJzdWdnZXN0LXJldmlld2VycyIKICAgICBoZWxwX3RleHQgPSAiU3VnZ2VzdCByZXZp
ZXdlcnMgZm9yIGEgcGF0Y2ggYmFzZWQgb24gcmVjZW50IGNoYW5nZXMgdG8gdGhlIG1vZGlmaWVk
IGZpbGVzLiIKQEAgLTM2OCw2ICszNjgsMTUgQEAgYW5kIGRpc3BsYXllcyB0aGUgc3RhdHVzIG9m
IGVhY2ggYnVpbGRlcgogICAgICAgICAgICAgcHJpbnQgIiVzIDogJXMiICUgKHN0YXR1c19zdHJp
bmcubGp1c3QoNCksIGJ1aWxkZXJbIm5hbWUiXSkKIAogCitjbGFzcyBDcmFzaExvZyhBYnN0cmFj
dERlY2xhcmF0aXZlQ29tbWFuZCk6CisgICAgbmFtZSA9ICJjcmFzaC1sb2ciCisgICAgYXJndW1l
bnRfbmFtZXMgPSAiUFJPQ0VTU19OQU1FIgorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9u
cywgYXJncywgdG9vbCk6CisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3ModG9vbC5leGVj
dXRpdmUsIHRvb2wuZmlsZXN5c3RlbSkKKyAgICAgICAgcHJpbnQgY3Jhc2hfbG9ncy5maW5kX25l
d2VzdF9sb2coYXJnc1swXSkKKworCiBjbGFzcyBTa2lwcGVkUG9ydHMoQWJzdHJhY3REZWNsYXJh
dGl2ZUNvbW1hbmQpOgogICAgIG5hbWUgPSAic2tpcHBlZC1wb3J0cyIKICAgICBoZWxwX3RleHQg
PSAiUHJpbnQgdGhlIGxpc3Qgb2YgcG9ydHMgc2tpcHBpbmcgdGhlIGdpdmVuIGxheW91dCB0ZXN0
KHMpIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98759</attachid>
            <date>2011-06-27 11:36:47 -0700</date>
            <delta_ts>2011-06-27 11:41:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63468-20110627113645.patch</filename>
            <type>text/plain</type>
            <size>12096</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg5ODMzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTEtMDYtMjcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXRweSBz
aG91bGQgdW5kZXJzdGFuZCBjcmFzaCBsb2dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MzQ2OAorCisgICAgICAgIFdlJ3JlIHBsYW5uaW5nIHRvIHVz
ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gdXBsb2FkIGNyYXNoIGxvZ3MgYWxvbmcKKyAgICAgICAg
d2l0aCB0ZXN0IHJlc3VsdHMgZm9yIG5ldy1ydW4td2Via2l0LXRlc3RzLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dfdW5pdHRlc3QucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRp
dmUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZV91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9xdWVyaWVzLnB5OgorCiAyMDExLTA2LTI3ICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkJKHJldmlzaW9u
IDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisjIENvcHlyaWdodCAoYykgMjAxMSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKKworZGVmIF9pc19jcmFzaF9yZXBvcnRlcihw
cm9jZXNzX25hbWUpOgorICAgIHJldHVybiByZS5tYXRjaChyIlJlcG9ydENyYXNoIiwgcHJvY2Vz
c19uYW1lKQorCisKK2NsYXNzIENyYXNoTG9ncyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBleGVjdXRpdmUsIGZpbGVzeXN0ZW0pOgorICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBl
eGVjdXRpdmUKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KKworICAgIGRl
ZiBmaW5kX25ld2VzdF9sb2coc2VsZiwgcHJvY2Vzc19uYW1lKToKKyAgICAgICAgaWYgc3lzLnBs
YXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbmV3ZXN0
X2xvZ19kYXJ3aW4ocHJvY2Vzc19uYW1lKQorCisgICAgZGVmIF9sb2dfZGlyZWN0b3J5X2Rhcndp
bihzZWxmKToKKyAgICAgICAgbG9nX2RpcmVjdG9yeSA9IHNlbGYuX2ZpbGVzeXN0ZW0uZXhwYW5k
dXNlcigifiIpCisgICAgICAgIGxvZ19kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4obG9nX2RpcmVj
dG9yeSwgIkxpYnJhcnkiLCAiTG9ncyIpCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhp
c3RzKG9zLnBhdGguam9pbihsb2dfZGlyZWN0b3J5LCAiRGlhZ25vc3RpY1JlcG9ydHMiKSk6Cisg
ICAgICAgICAgICBsb2dfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKGxvZ19kaXJlY3RvcnksICJE
aWFnbm9zdGljUmVwb3J0cyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dfZGlyZWN0
b3J5ID0gb3MucGF0aC5qb2luKGxvZ19kaXJlY3RvcnksICJDcmFzaFJlcG9ydGVyIikKKyAgICAg
ICAgcmV0dXJuIGxvZ19kaXJlY3RvcnkKKworICAgIGRlZiBfZmluZF9uZXdlc3RfbG9nX2Rhcndp
bihzZWxmLCBwcm9jZXNzX25hbWUpOgorICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJw
YXRoLCBiYXNlbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuc3RhcnRzd2l0aChw
cm9jZXNzX25hbWUgKyAiXyIpIGFuZCBiYXNlbmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKKworICAg
ICAgICBsb2dfZGlyZWN0b3J5ID0gc2VsZi5fbG9nX2RpcmVjdG9yeV9kYXJ3aW4oKQorICAgICAg
ICBsb2dzID0gc2VsZi5fZmlsZXN5c3RlbS5maWxlc191bmRlcihsb2dfZGlyZWN0b3J5LCBmaWxl
X2ZpbHRlcj1pc19jcmFzaF9sb2cpCisgICAgICAgIGlmIG5vdCBsb2dzOgorICAgICAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLndhaXRfbmV3ZXN0KF9pc19jcmFzaF9y
ZXBvcnRlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUo
c29ydGVkKGxvZ3MpWy0xXSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9jcmFzaGxvZ3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkocmV2aXNpb24gMCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisj
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRw
eS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKKworCitjbGFzcyBDcmFzaExvZ3NUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maW5kX2xvZ19kYXJ3aW4oc2VsZik6Cisg
ICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIjoKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9ICJNb2NrIENyYXNoIFJlcG9ydCIKKyAgICAgICAg
ZmlsZXMgPSB7fQorICAgICAgICBmaWxlc1snL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdu
b3N0aWNSZXBvcnRzL1RleHRNYXRlXzIwMTEtMDYtMTMtMTUwNzE5X3F1YWR6ZW4uY3Jhc2gnXSA9
IG1vY2tfY3Jhc2hfcmVwb3J0CisgICAgICAgIGZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbShm
aWxlcykKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhNb2NrKCksIGZpbGVzeXN0ZW0p
CisgICAgICAgIGxvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKCJUZXh0TWF0ZSIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2csIG1vY2tfY3Jhc2hfcmVwb3J0KQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CShy
ZXZpc2lvbiA4OTgyNCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9l
eGVjdXRpdmUucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksMzkgQEAgY2xhc3MgRXhl
Y3V0aXZlKG9iamVjdCk6CiAKICAgICAgICAgYXNzZXJ0KEZhbHNlKQogCisgICAgZGVmIHJ1bm5p
bmdfcGlkcyhzZWxmLCBwcm9jZXNzX25hbWVfZmlsdGVyPU5vbmUpOgorICAgICAgICBpZiBub3Qg
cHJvY2Vzc19uYW1lX2ZpbHRlcjoKKyAgICAgICAgICAgIHByb2Nlc3NfbmFtZV9maWx0ZXIgPSBs
YW1iZGEgcHJvY2Vzc19uYW1lOiBUcnVlCisKKyAgICAgICAgcnVubmluZ19waWRzID0gW10KKwor
ICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsICJjeWd3aW4iKToKKyAgICAgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkKCkKKworICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5w
b3BlbihbJ3BzJywgJy1lbycsICdwaWQsY29tbSddLCBzdGRvdXQ9c2VsZi5QSVBFLCBzdGRlcnI9
c2VsZi5QSVBFKQorICAgICAgICBzdGRvdXQsIF8gPSBwc19wcm9jZXNzLmNvbW11bmljYXRlKCkK
KyAgICAgICAgZm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBwaWQsIHByb2Nlc3NfbmFtZSA9IGxpbmUuc3BsaXQoJyAnLCAx
KQorICAgICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZV9maWx0ZXIocHJvY2Vzc19uYW1lKToK
KyAgICAgICAgICAgICAgICAgICAgcnVubmluZ19waWRzLmFwcGVuZChpbnQocGlkKSkKKyAgICAg
ICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAg
ICAgICByZXR1cm4gc29ydGVkKHJ1bm5pbmdfcGlkcykKKworICAgIGRlZiB3YWl0X25ld2VzdChz
ZWxmLCBwcm9jZXNzX25hbWVfZmlsdGVyPU5vbmUpOgorICAgICAgICBpZiBub3QgcHJvY2Vzc19u
YW1lX2ZpbHRlcjoKKyAgICAgICAgICAgIHByb2Nlc3NfbmFtZV9maWx0ZXIgPSBsYW1iZGEgcHJv
Y2Vzc19uYW1lOiBUcnVlCisKKyAgICAgICAgcnVubmluZ19waWRzID0gc2VsZi5ydW5uaW5nX3Bp
ZHMocHJvY2Vzc19uYW1lX2ZpbHRlcikKKyAgICAgICAgaWYgbm90IHJ1bm5pbmdfcGlkczoKKyAg
ICAgICAgICAgIHJldHVybgorICAgICAgICBwaWQgPSBydW5uaW5nX3BpZHNbLTFdCisKKyAgICAg
ICAgd2hpbGUgc2VsZi5jaGVja19ydW5uaW5nX3BpZChwaWQpOgorICAgICAgICAgICAgdGltZS5z
bGVlcCgwLjI1KQorCiAgICAgZGVmIF93aW5kb3dzX2ltYWdlX25hbWUoc2VsZiwgcHJvY2Vzc19u
YW1lKToKICAgICAgICAgbmFtZSwgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChwcm9jZXNz
X25hbWUpCiAgICAgICAgIGlmIG5vdCBleHRlbnNpb246CkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDg5ODI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTk5LDMgKzE5OSwx
MSBAQCBjbGFzcyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGV4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZChvcy5nZXRwaWQoKSkpCiAg
ICAgICAgICMgTWF4aW11bSBwaWQgbnVtYmVyIG9uIExpbnV4IGlzIDMyNzY4IGJ5IGRlZmF1bHQK
ICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoMTAw
MDAwKSkKKworICAgIGRlZiB0ZXN0X3J1bm5pbmdfcGlkcyhzZWxmKToKKyAgICAgICAgaWYgc3lz
LnBsYXRmb3JtIGluICgid2luMzIiLCAiY3lnd2luIik6CisgICAgICAgICAgICByZXR1cm4gICMg
VGhpcyBmdW5jdGlvbiBpc24ndCBpbXBsZW1lbnRlZCBvbiBXaW5kb3dzIHlldC4KKworICAgICAg
ICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQorICAgICAgICBwaWRzID0gZXhlY3V0aXZlLnJ1bm5p
bmdfcGlkcygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5nZXRwaWQoKSBpbiBwaWRzKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVz
eXN0ZW0ucHkJKHJldmlzaW9uIDg5ODI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1NywxMyBA
QCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgZGVmIGFic3BhdGgoc2VsZiwgcGF0aCk6
CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgocGF0aCkKIAorICAgIGRlZiBleHBhbmR1
c2VyKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5leHBhbmR1c2VyKHBhdGgp
CisKICAgICBkZWYgYmFzZW5hbWUoc2VsZiwgcGF0aCk6Ci0gICAgICAgICIiIldyYXBzIG9zLnBh
dGguYmFzZW5hbWUoKS4iIiIKICAgICAgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUocGF0aCkK
IAogICAgIGRlZiBjaGRpcihzZWxmLCBwYXRoKToKLSAgICAgICAgIiIiV3JhcHMgb3MuY2hkaXIo
KS4iIiIKICAgICAgICAgcmV0dXJuIG9zLmNoZGlyKHBhdGgpCiAKICAgICBkZWYgY29weWZpbGUo
c2VsZiwgc291cmNlLCBkZXN0aW5hdGlvbik6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkJKHJldmlzaW9u
IDg5ODI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0
ZW1fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsMTUgQEAgY2xhc3MgTW9ja0Zp
bGVTeXN0ZW0ob2JqZWN0KToKICAgICBkZWYgYmFzZW5hbWUoc2VsZiwgcGF0aCk6CiAgICAgICAg
IHJldHVybiBzZWxmLl9zcGxpdChwYXRoKVsxXQogCisgICAgZGVmIGV4cGFuZHVzZXIoc2VsZiwg
cGF0aCk6CisgICAgICAgIGlmIHBhdGhbMF0gIT0gIn4iOgorICAgICAgICAgICAgcmV0dXJuIHBh
dGgKKyAgICAgICAgcGFydHMgPSBwYXRoLnNwbGl0KHNlbGYuc2VwLCAxKQorICAgICAgICBob21l
X2RpcmVjdG9yeSA9IHNlbGYuc2VwICsgIlVzZXJzIiArIHNlbGYuc2VwICsgIm1vY2siCisgICAg
ICAgIGlmIGxlbihwYXJ0cykgPT0gMToKKyAgICAgICAgICAgIHJldHVybiBob21lX2RpcmVjdG9y
eQorICAgICAgICByZXR1cm4gaG9tZV9kaXJlY3RvcnkgKyBzZWxmLnNlcCArIHBhcnRzWzFdCisK
ICAgICBkZWYgY2hkaXIoc2VsZiwgcGF0aCk6CiAgICAgICAgIHBhdGggPSBzZWxmLm5vcm1wYXRo
KHBhdGgpCiAgICAgICAgIGlmIG5vdCBzZWxmLmlzZGlyKHBhdGgpOgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkJKHJldmlzaW9uIDg5
ODI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5j
aGVja291dC5jb21taXRpbmZvCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcuY29tbWl0dGVy
cyBpbXBvcnQgQ29tbWl0dGVyTGlzdAogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1aWxkYm90
IGltcG9ydCBCdWlsZEJvdAogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LnJlZ3Jlc3Npb253aW5k
b3cgaW1wb3J0IFJlZ3Jlc3Npb25XaW5kb3cKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5j
cmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnVz
ZXIgaW1wb3J0IFVzZXIKIGZyb20gd2Via2l0cHkudG9vbC5ncmFtbWFyIGltcG9ydCBwbHVyYWxp
emUKIGZyb20gd2Via2l0cHkudG9vbC5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBBYnN0cmFjdERl
Y2xhcmF0aXZlQ29tbWFuZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRf
bG9nZ2luZyBpbXBvcnQgbG9nCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9y
dAogCi0KIGNsYXNzIFN1Z2dlc3RSZXZpZXdlcnMoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQp
OgogICAgIG5hbWUgPSAic3VnZ2VzdC1yZXZpZXdlcnMiCiAgICAgaGVscF90ZXh0ID0gIlN1Z2dl
c3QgcmV2aWV3ZXJzIGZvciBhIHBhdGNoIGJhc2VkIG9uIHJlY2VudCBjaGFuZ2VzIHRvIHRoZSBt
b2RpZmllZCBmaWxlcy4iCkBAIC0zNjgsNiArMzY4LDE1IEBAIGFuZCBkaXNwbGF5ZXMgdGhlIHN0
YXR1cyBvZiBlYWNoIGJ1aWxkZXIKICAgICAgICAgICAgIHByaW50ICIlcyA6ICVzIiAlIChzdGF0
dXNfc3RyaW5nLmxqdXN0KDQpLCBidWlsZGVyWyJuYW1lIl0pCiAKIAorY2xhc3MgQ3Jhc2hMb2co
QWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgorICAgIG5hbWUgPSAiY3Jhc2gtbG9nIgorICAg
IGFyZ3VtZW50X25hbWVzID0gIlBST0NFU1NfTkFNRSIKKworICAgIGRlZiBleGVjdXRlKHNlbGYs
IG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHRv
b2wuZXhlY3V0aXZlLCB0b29sLmZpbGVzeXN0ZW0pCisgICAgICAgIHByaW50IGNyYXNoX2xvZ3Mu
ZmluZF9uZXdlc3RfbG9nKGFyZ3NbMF0pCisKKwogY2xhc3MgU2tpcHBlZFBvcnRzKEFic3RyYWN0
RGVjbGFyYXRpdmVDb21tYW5kKToKICAgICBuYW1lID0gInNraXBwZWQtcG9ydHMiCiAgICAgaGVs
cF90ZXh0ID0gIlByaW50IHRoZSBsaXN0IG9mIHBvcnRzIHNraXBwaW5nIHRoZSBnaXZlbiBsYXlv
dXQgdGVzdChzKSIK
</data>
<flag name="review"
          id="93057"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>