<?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>21305</bug_id>
          
          <creation_ts>2008-10-02 06:10:05 -0700</creation_ts>
          <short_desc>queryCommandValue &quot;formatBlock&quot; always returns false</short_desc>
          <delta_ts>2010-09-29 11:53:42 -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>HTML Editing</component>
          <version>525.x (Safari 3.1)</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="Anthony Johnston">aj</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93719</commentid>
    <comment_count>0</comment_count>
    <who name="Anthony Johnston">aj</who>
    <bug_when>2008-10-02 06:10:05 -0700</bug_when>
    <thetext>On Google Chrome

Official Build 2200
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.30 Safari/525.13 

Calling the following always gets a false returned, it should return a value such as &quot;p&quot;, &quot;h1&quot; etc..

document.queryCommandValue(&quot;formatBlock&quot;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279852</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-15 17:45:57 -0700</bug_when>
    <thetext>I know Internet Explorer returns &quot;normal&quot; for anything but h1-h6, address, &amp; p.  But that sounds rather unreasonable to me.  We should probably return other block element as well.  Here are HTML5 elements that have display:block in the default style:

p, div, layer, article, aside, footer, header, hgroup, nav, section, address, blockquote, hr, h1, h2, h3, h4, h5, h6, ul, menu, dir, ol, dd, dl, dt, pre, xmp, plaintext, listing

The following elements are also block elements but Firefox doesn&apos;t return:
form, legend, fieldset, rt (inside ruby, of course, Firefox doesn&apos;t support this anyway), frameset, frame, iframe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279868</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-15 18:06:29 -0700</bug_when>
    <thetext>The further investigation seems to indicate that Firefox doesn&apos;t return div, layer, article, etc... either. So Firefox and MSIE almost agree on everything except that:
1. When there are no matching block ancestors (none of them are h1-h6, p, address), Firefox returns empty string while MSIE returns &quot;normal&quot;.
2. For pre, Firefox returns &quot;pre&quot; and MSIE returns &quot;formatted&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279883</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-15 18:31:05 -0700</bug_when>
    <thetext>Opera on the other hand also returns blockquote, div, and possibly other block elements.  It does return pre so it&apos;s pretty clear to me at this point that we should implement what Firefox implements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279919</commentid>
    <comment_count>4</comment_count>
      <attachid>67765</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-15 19:49:21 -0700</bug_when>
    <thetext>Created attachment 67765
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280219</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-16 11:15:15 -0700</bug_when>
    <thetext>Thanks for the review, Justin!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280388</commentid>
    <comment_count>6</comment_count>
      <attachid>67765</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-16 15:20:34 -0700</bug_when>
    <thetext>Comment on attachment 67765
Patch

Oops, I shouldn&apos;t be adding these functions to EditorCommand.cpp.  I&apos;ll move the functions and resubmit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280464</commentid>
    <comment_count>7</comment_count>
      <attachid>67864</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-16 17:13:30 -0700</bug_when>
    <thetext>Created attachment 67864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280465</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-16 17:14:22 -0700</bug_when>
    <thetext>Sorry about my forgetting about the move.  It&apos;s identical patch so it should be easy to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282769</commentid>
    <comment_count>9</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-09-21 22:34:49 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; The following elements are also block elements but Firefox doesn&apos;t return:
&gt; form, legend, fieldset, rt (inside ruby, of course, Firefox doesn&apos;t support this anyway), frameset, frame, iframe

Just a quick note: &lt;rt&gt; is implemented as block, but mostly out of convenience. From a user&apos;s point of view I don&apos;t think it should be reported/treated as block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283102</commentid>
    <comment_count>10</comment_count>
      <attachid>67864</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 11:43:27 -0700</bug_when>
    <thetext>Comment on attachment 67864
Patch

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

I’m reluctantly saying review+ here. I am not that happy with this extremely specific function being added to the Editor class with an unclear name. I’m not sure the function belongs in the Editor class at all.

&gt; WebCore/editing/Editor.cpp:986
&gt; +static bool isFormatBlock(const Node* node)

The term “block” is normally a rendering term, so an “is block” function should be answering a question about rendering, not DOM.

This function answers a much more specific question, and it would be better to give it a specific name.

Generally speaking, putting this specific “FormatBlock” concept into Editor is OK, but we need to give it a name that makes it clear this is “for the FormatBlock” command, and not some more fundamental concept that is useful elsewhere.

&gt; WebCore/editing/Editor.cpp:1002
&gt; +    if (!m_frame-&gt;selection())
&gt; +        return String(&quot;&quot;);

This can never be 0, so this check is not needed.

&gt; WebCore/editing/Editor.cpp:1006
&gt; +        return String(&quot;&quot;);

I would prefer either

    return &quot;&quot;;

Or:

    return emptyAtom;

Explicitly saying String(&quot;&quot;) doesn’t seem to add anything. I think that returning emptyAtom might be slightly more efficient, which is why I mention that option.

&gt; WebCore/editing/Editor.cpp:1008
&gt; +    ExceptionCode ec = 0;

There’s no need to set up and check the exception code here. The commonAncestorContainer function is guaranteed to return 0 any time an exception would be raised. The exception code is only there for the bindings’ benefit. We could even create an overloaded version without the exception code for use inside the engine. It’s really only JavaScript and other such bindings that need the exception code.

&gt; WebCore/editing/Editor.cpp:1016
&gt; +    return static_cast&lt;Element*&gt;(commonAncestor)-&gt;localName();

This cast is only safe if we have a guarantee that the common ancestor is not a document. It would be best to have a comment explaining why that is so, or we could add an “is element” check above and be a little safer. At the very least I’d like to see an assertion.

&gt; WebCore/editing/Editor.h:128
&gt; +    String selectionFormatBlock();

I think this function name is very confusing. The FormatBlock thing is a strange, quirky, execCommand name that is not based on normal web browser terminology. Further, a block is not a string, and a function named “block” should return a block, not a string. Editor should supply an operation with a name that could be clear to someone who’s never heard of “FormatBlock”. Or it could just have a name that explicitly refers to the FormatBlock command in its name. Can you think of a better name? I can think and see if I can come up with one, but I don’t have an immediate suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283169</commentid>
    <comment_count>11</comment_count>
      <attachid>67864</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-22 12:42:59 -0700</bug_when>
    <thetext>Comment on attachment 67864
Patch

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

&gt;&gt; WebCore/editing/Editor.cpp:986
&gt;&gt; +static bool isFormatBlock(const Node* node)
&gt; 
&gt; The term “block” is normally a rendering term, so an “is block” function should be answering a question about rendering, not DOM.
&gt; 
&gt; This function answers a much more specific question, and it would be better to give it a specific name.
&gt; 
&gt; Generally speaking, putting this specific “FormatBlock” concept into Editor is OK, but we need to give it a name that makes it clear this is “for the FormatBlock” command, and not some more fundamental concept that is useful elsewhere.

How about isElementForFormatBlockCommand ?

&gt;&gt; WebCore/editing/Editor.cpp:1002
&gt;&gt; +        return String(&quot;&quot;);
&gt; 
&gt; This can never be 0, so this check is not needed.

Huh, I want to say that I saw the same check somewhere and that&apos;s why I added it.  But I can&apos;t find it now.  Will remove.

&gt;&gt; WebCore/editing/Editor.cpp:1006
&gt;&gt; +        return String(&quot;&quot;);
&gt; 
&gt; I would prefer either
&gt; 
&gt;     return &quot;&quot;;
&gt; 
&gt; Or:
&gt; 
&gt;     return emptyAtom;
&gt; 
&gt; Explicitly saying String(&quot;&quot;) doesn’t seem to add anything. I think that returning emptyAtom might be slightly more efficient, which is why I mention that option.

Will do.

&gt;&gt; WebCore/editing/Editor.cpp:1008
&gt;&gt; +    ExceptionCode ec = 0;
&gt; 
&gt; There’s no need to set up and check the exception code here. The commonAncestorContainer function is guaranteed to return 0 any time an exception would be raised. The exception code is only there for the bindings’ benefit. We could even create an overloaded version without the exception code for use inside the engine. It’s really only JavaScript and other such bindings that need the exception code.

Will do.

&gt;&gt; WebCore/editing/Editor.cpp:1016
&gt;&gt; +    return static_cast&lt;Element*&gt;(commonAncestor)-&gt;localName();
&gt; 
&gt; This cast is only safe if we have a guarantee that the common ancestor is not a document. It would be best to have a comment explaining why that is so, or we could add an “is element” check above and be a little safer. At the very least I’d like to see an assertion.

It is guaranteed because we skip any element that&apos;s not isFormatBlock.  But adding an assertion here might be a good idea.

&gt;&gt; WebCore/editing/Editor.h:128
&gt;&gt; +    String selectionFormatBlock();
&gt; 
&gt; I think this function name is very confusing. The FormatBlock thing is a strange, quirky, execCommand name that is not based on normal web browser terminology. Further, a block is not a string, and a function named “block” should return a block, not a string. Editor should supply an operation with a name that could be clear to someone who’s never heard of “FormatBlock”. Or it could just have a name that explicitly refers to the FormatBlock command in its name. Can you think of a better name? I can think and see if I can come up with one, but I don’t have an immediate suggestion.

Maybe currentFormatBlockCommandValue or selectionFormatBlockCommandValue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283407</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 17:52:22 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; How about isElementForFormatBlockCommand ?

Yes, better name.

&gt; It is guaranteed because we skip any element that&apos;s not isFormatBlock.  But adding an assertion here might be a good idea.

Yes, that is a guarantee! Not sure why I didn’t spot that.

&gt; Maybe currentFormatBlockCommandValue or selectionFormatBlockCommandValue?

Either would be OK. My idea based on your function name above would valueForFormatBlockCommand.

Another possibility that I like slightly better would be to have an elementForFormatBlockCommand function and call localName at the call site in EditorCommand.cpp.

I’m still not sure these functions belong in Editor. I could see them going somewhere else. We are getting dangerously close to having a &quot;god class&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283761</commentid>
    <comment_count>13</comment_count>
      <attachid>68545</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-23 10:38:56 -0700</bug_when>
    <thetext>Created attachment 68545
fixed per darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283767</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-23 10:42:32 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; Maybe currentFormatBlockCommandValue or selectionFormatBlockCommandValue?
&gt; 
&gt; Either would be OK. My idea based on your function name above would valueForFormatBlockCommand.
&gt; 
&gt; Another possibility that I like slightly better would be to have an elementForFormatBlockCommand function and call localName at the call site in EditorCommand.cpp.

I like that!

&gt; I’m still not sure these functions belong in Editor. I could see them going somewhere else. We are getting dangerously close to having a &quot;god class&quot;.

I was thinking that maybe we could move all functions related to SelectionController or VisibleSelection since they only need to have access to the selection.  But then SelectionController seems to be included in 1000+ files and I&apos;m hesitant to add a new function there.  On the other hand, moving them to VisibleSelection seems odd because VisibleSelection is a more primitive object and these functions are very high level stuff in editing almost directly called by the DOM and users.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285937</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-27 17:21:17 -0700</bug_when>
    <thetext>Hi Darin,

Could you review this patch at your earliest convenience?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287031</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-29 11:44:15 -0700</bug_when>
    <thetext>Committed r68670: &lt;http://trac.webkit.org/changeset/68670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287035</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-29 11:53:42 -0700</bug_when>
    <thetext>Reviewer name is fixed in http://trac.webkit.org/changeset/68671.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67765</attachid>
            <date>2010-09-15 19:49:21 -0700</date>
            <delta_ts>2010-09-16 17:13:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-21305-20100915194920.patch</filename>
            <type>text/plain</type>
            <size>9948</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzU5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDktMTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcXVl
cnlDb21tYW5kVmFsdWUgImZvcm1hdEJsb2NrIiBhbHdheXMgcmV0dXJucyBmYWxzZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMDUKKworICAgICAg
ICBJbXBsZW1lbnRlZCBxdWVyeUNvbW1hbmRWYWx1ZSgnZm9ybWF0QmxvY2snKS4gV2UgbWF0Y2gg
dGhlIEZpcmVmb3gncyBiZWhhdmlvciBleGFjdGx5CisgICAgICAgIGJlY2F1c2UgRmlyZWZveCBh
bmQgSW50ZXJuZXQgRXhwbG9yZXIgc3VwcG9ydCB0aGUgc2FtZSBzZXQgb2YgZWxlbWVudHMKKyAg
ICAgICAgKGFkZHJlc3MsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGFuZCBwKSBhbmQgRmlyZWZv
eCdzIGJlaGF2aW9yIGlzIG1vcmUgY29tcGF0aWJsZSB3aXRoIE9wZXJhLgorICAgICAgICBTZWUg
dGhlIGJ1ZyBmb3IgdGhlIGRldGFpbGVkIGRpc2N1c3Npb24uCisKKyAgICAgICAgV2ViS2l0J3Mg
aW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgbG9jYWwgbmFtZSBvZiB0aGUgbG93ZXN0IGNvbW1v
biBhbmNlc3RvcgorICAgICAgICBvZiB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIHRhZyBuYW1lIGFk
ZHJlc3MsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIG9yIHAuCisgICAgICAgIEl0IHJldHVybnMg
IiIgd2hlbiB0aGVyZSBpcyBubyBzdWNoIGFuIGFuY2VzdG9yIG9yIHRoZXJlIGlzIG5vIHNlbGVj
dGlvbi4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1hdC1i
bG9jay5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNGb3JtYXRCbG9jayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dmFs
dWVGb3JtYXRCbG9jayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29tbWFuZE1h
cCk6IEFkZGVkIGEgcG9pbnRlciB0byB2YWx1ZUZvcm1hdEJsb2NrLgorCiAyMDEwLTA5LTE1ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBjaHJv
bWl1bSBidWlsZC4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY3
NTE4KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzI4LDYgKzEzMjgsMzkgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZvcmVDb2xvcihGcmFt
ZSogZnJhbQogICAgIHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCBDU1NQcm9wZXJ0eUNvbG9yKTsK
IH0KIAorc3RhdGljIGJvb2wgaXNGb3JtYXRCbG9jayhjb25zdCBOb2RlKiBub2RlKQoreworICAg
IHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGFkZHJlc3NUYWcpCisgICAgICAgIHx8IG5vZGUtPmhh
c1RhZ05hbWUoaDFUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDJUYWcpCisgICAg
ICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDNUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05h
bWUoaDRUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDVUYWcpCisgICAgICAgIHx8
IG5vZGUtPmhhc1RhZ05hbWUoaDZUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUocFRh
ZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShwcmVUYWcpOworfQorCitzdGF0aWMgU3Ry
aW5nIHZhbHVlRm9ybWF0QmxvY2soRnJhbWUqIGZyYW1lLCBFdmVudCopCit7CisgICAgaWYgKCFm
cmFtZS0+c2VsZWN0aW9uKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOworCisgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbi5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkg
fHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCIiKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIE5vZGUqIGNvbW1vbkFuY2Vz
dG9yID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMp
OworICAgIHdoaWxlIChjb21tb25BbmNlc3RvciAmJiAhaXNGb3JtYXRCbG9jayhjb21tb25BbmNl
c3RvcikpCisgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3ItPnBhcmVudE5v
ZGUoKTsKKworICAgIGlmIChlYyB8fCAhY29tbW9uQW5jZXN0b3IpCisgICAgICAgIHJldHVybiBT
dHJpbmcoIiIpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb21tb25BbmNl
c3RvciktPmxvY2FsTmFtZSgpOworfQorCiAvLyBNYXAgb2YgZnVuY3Rpb25zCiAKIHN0cnVjdCBD
b21tYW5kRW50cnkgewpAQCAtMTM2NCw3ICsxMzk3LDcgQEAgc3RhdGljIGNvbnN0IENvbW1hbmRN
YXAmIGNyZWF0ZUNvbW1hbmRNYQogICAgICAgICB7ICJGb250U2l6ZSIsIHsgZXhlY3V0ZUZvbnRT
aXplLCBzdXBwb3J0ZWQsIGVuYWJsZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZUZv
bnRTaXplLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVk
IH0gfSwKICAgICAgICAgeyAiRm9udFNpemVEZWx0YSIsIHsgZXhlY3V0ZUZvbnRTaXplRGVsdGEs
IHN1cHBvcnRlZCwgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlRm9udFNp
emVEZWx0YSwgbm90VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxl
ZCB9IH0sCiAgICAgICAgIHsgIkZvcmVDb2xvciIsIHsgZXhlY3V0ZUZvcmVDb2xvciwgc3VwcG9y
dGVkLCBlbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVGb3JlQ29s
b3IsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9
LAotICAgICAgICB7ICJGb3JtYXRCbG9jayIsIHsgZXhlY3V0ZUZvcm1hdEJsb2NrLCBzdXBwb3J0
ZWQsIGVuYWJsZWRJblJpY2hseUVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5v
dFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAorICAg
ICAgICB7ICJGb3JtYXRCbG9jayIsIHsgZXhlY3V0ZUZvcm1hdEJsb2NrLCBzdXBwb3J0ZWQsIGVu
YWJsZWRJblJpY2hseUVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZUZvcm1hdEJsb2NrLCBu
b3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKICAg
ICAgICAgeyAiRm9yd2FyZERlbGV0ZSIsIHsgZXhlY3V0ZUZvcndhcmREZWxldGUsIHN1cHBvcnRl
ZCwgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dElu
c2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCiAgICAgICAgIHsg
IkhpbGl0ZUNvbG9yIiwgeyBleGVjdXRlQmFja0NvbG9yLCBzdXBwb3J0ZWQsIGVuYWJsZWRJblJp
Y2hseUVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24s
IGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJJZ25vcmVT
cGVsbGluZyIsIHsgZXhlY3V0ZUlnbm9yZVNwZWxsaW5nLCBzdXBwb3J0ZWRGcm9tTWVudU9yS2V5
QmluZGluZywgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90
VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2NzU5NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA5LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIHF1ZXJ5Q29tbWFuZFZhbHVlICJmb3JtYXRCbG9jayIgYWx3YXlzIHJldHVybnMgZmFsc2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzA1CisK
KyAgICAgICAgQWRkZWQgYSB0ZXN0IGZvciBxdWVyeUNvbW1hbmRWYWx1ZSgnZm9ybWF0QmxvY2sn
KS4KKworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvcXVlcnktZm9ybWF0LWJsb2NrLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9xdWVyeS1m
b3JtYXQtYmxvY2suaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9z
Y3JpcHQtdGVzdHMvcXVlcnktZm9ybWF0LWJsb2NrLmpzOiBBZGRlZC4KKyAgICAgICAgKHF1ZXJ5
Rm9ybWF0QmxvY2spOgorICAgICAgICAoc2VsZWN0Rmlyc3RQb3NpdGlvbik6CisgICAgICAgIChz
ZWxlY3RNaWRkbGVPZkhlbGxvV29ybGQpOgorCiAyMDEwLTA5LTE1ICBKb2huIEdyZWdnICA8am9o
bm55Z0Bnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeCBhZnRlciBp
bmNvbXBsZXRlIHJldmVydC4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
cXVlcnktZm9ybWF0LWJsb2NrLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1hdC1ibG9jay1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1h
dC1ibG9jay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK1Rlc3Rz
IHF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JtYXRCbG9jaycpCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitCYXNpYyBjYXNlcworUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVy
bmVkICIiCitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgIiIKK1BBU1MgcXVl
cnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAiYWRkcmVzcyIKK1BBU1MgcXVlcnlDb21tYW5k
KCdmb3JtYXQnKSByZXR1cm5lZCAiaDEiCitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0
dXJuZWQgImgyIgorUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkICJoMyIKK1BB
U1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAiaDQiCitQQVNTIHF1ZXJ5Q29tbWFu
ZCgnZm9ybWF0JykgcmV0dXJuZWQgImg1IgorUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJl
dHVybmVkICJoNiIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAicCIKK1BB
U1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAicHJlIgorCitOZXN0ZWQgY2FzZXMK
K1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAiaDIiCitQQVNTIHF1ZXJ5Q29t
bWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgImFkZHJlc3MiCitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9y
bWF0JykgcmV0dXJuZWQgInByZSIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5l
ZCAicHJlIgorUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkICJhZGRyZXNzIgor
UEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkICIiCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC9xdWVyeS1mb3JtYXQtYmxvY2suaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1hdC1ibG9jay5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9xdWVyeS1mb3Jt
YXQtYmxvY2suaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
cXVlcnktZm9ybWF0LWJsb2NrLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvcXVl
cnktZm9ybWF0LWJsb2NrLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvc2NyaXB0LXRlc3RzL3F1ZXJ5LWZvcm1hdC1ibG9jay5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL3F1ZXJ5LWZv
cm1hdC1ibG9jay5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorZGVzY3JpcHRpb24o
IlRlc3RzIHF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JtYXRCbG9jaycpIikKKwordmFyIHRlc3RDb250
YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK3Rlc3RDb250YWluZXIuY29u
dGVudEVkaXRhYmxlID0gdHJ1ZTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdENvbnRh
aW5lcik7CisKK2Z1bmN0aW9uIHF1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0b3IsIGNvbnRlbnQsIGV4
cGVjdGVkKQoreworICAgIHRlc3RDb250YWluZXIuaW5uZXJIVE1MID0gY29udGVudDsKKyAgICBz
ZWxlY3Rvcih0ZXN0Q29udGFpbmVyKTsKKyAgICB2YXIgYWN0dWFsID0gZG9jdW1lbnQucXVlcnlD
b21tYW5kVmFsdWUoJ2Zvcm1hdEJsb2NrJyk7CisgICAgdmFyIGFjdGlvbiA9ICJxdWVyeUNvbW1h
bmQoJ2Zvcm1hdCcpIHJldHVybmVkIFwiIiArIGFjdHVhbCArICciJzsKKyAgICBpZiAoYWN0dWFs
ID09IGV4cGVjdGVkKQorICAgICAgICB0ZXN0UGFzc2VkKGFjdGlvbik7CisgICAgZWxzZQorICAg
ICAgICB0ZXN0RmFpbGVkKGFjdGlvbiArICcgYnV0IGV4cGVjdGVkICInICsgZXhwZWN0ZWQgKyAn
IicpOworfQorCitmdW5jdGlvbiBzZWxlY3RGaXJzdFBvc2l0aW9uKGNvbnRhaW5lcikgeworICAg
IHdoaWxlIChjb250YWluZXIuZmlyc3RDaGlsZCkKKyAgICAgICAgY29udGFpbmVyID0gY29udGFp
bmVyLmZpcnN0Q2hpbGQ7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKGNv
bnRhaW5lciwgMCk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdE1pZGRsZU9mSGVsbG9Xb3JsZChjb250
YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24oY29udGFpbmVy
LCAwKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdtb3ZlJywgJ2ZvcndhcmQn
LCAnY2hhcmFjdGVyJyk7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScs
ICdmb3J3YXJkJywgJ2NoYXJhY3RlcicpOworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2Rp
ZnkoJ2V4dGVuZCcsICdmb3J3YXJkJywgJ3dvcmQnKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdjaGFyYWN0ZXInKTsKKyAgICB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdjaGFyYWN0ZXInKTsK
KyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdj
aGFyYWN0ZXInKTsKK30KKworZGVidWcoJ0Jhc2ljIGNhc2VzJyk7CitxdWVyeUZvcm1hdEJsb2Nr
KGZ1bmN0aW9uICgpIHt9LCAnaGVsbG8nLCAnJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdEZp
cnN0UG9zaXRpb24sICdoZWxsbycsICcnKTsKK3F1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0Rmlyc3RQ
b3NpdGlvbiwgJzxhZGRyZXNzPmhlbGxvPC9hZGRyZXNzPicsICdhZGRyZXNzJyk7CitxdWVyeUZv
cm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICc8aDE+aGVsbG88L2gxPicsICdoMScpOwor
cXVlcnlGb3JtYXRCbG9jayhzZWxlY3RGaXJzdFBvc2l0aW9uLCAnPGgyPmhlbGxvPC9oMj4nLCAn
aDInKTsKK3F1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0Rmlyc3RQb3NpdGlvbiwgJzxoMz5oZWxsbzwv
aDM+JywgJ2gzJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICc8aDQ+
aGVsbG88L2g0PicsICdoNCcpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RGaXJzdFBvc2l0aW9u
LCAnPGg1PmhlbGxvPC9oNT4nLCAnaDUnKTsKK3F1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0Rmlyc3RQ
b3NpdGlvbiwgJzxoNj5oZWxsbzwvaDY+JywgJ2g2Jyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVj
dEZpcnN0UG9zaXRpb24sICc8cD5oZWxsbzwvcD4nLCAncCcpOworcXVlcnlGb3JtYXRCbG9jayhz
ZWxlY3RGaXJzdFBvc2l0aW9uLCAnPHByZT5oZWxsbzwvcHJlPicsICdwcmUnKTsKKworZGVidWco
JycpOworZGVidWcoJ05lc3RlZCBjYXNlcycpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RGaXJz
dFBvc2l0aW9uLCAnPGgxPjxoMj5oZWxsbzwvaDI+PC9oMT4nLCAnaDInKTsKK3F1ZXJ5Rm9ybWF0
QmxvY2soc2VsZWN0Rmlyc3RQb3NpdGlvbiwgJzxoMT48YWRkcmVzcz5oZWxsbzwvYWRkcmVzcz48
L2gxPicsICdhZGRyZXNzJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24s
ICc8cHJlPmhlbGxvPHA+d29ybGQ8L3A+PC9wcmU+JywgJ3ByZScpOworcXVlcnlGb3JtYXRCbG9j
ayhzZWxlY3RNaWRkbGVPZkhlbGxvV29ybGQsICc8cHJlPmhlbGxvPHA+d29ybGQ8L3A+PC9wcmU+
JywgJ3ByZScpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RNaWRkbGVPZkhlbGxvV29ybGQsICc8
YWRkcmVzcz48aDE+aGVsbG88L2gxPndvcmxkPC9hZGRyZXNzPicsICdhZGRyZXNzJyk7CitxdWVy
eUZvcm1hdEJsb2NrKHNlbGVjdE1pZGRsZU9mSGVsbG9Xb3JsZCwgJzxoMT5oZWxsbzwvaDE+d29y
bGQnLCAnJyk7CisKK2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7Cit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67864</attachid>
            <date>2010-09-16 17:13:30 -0700</date>
            <delta_ts>2010-09-23 10:38:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-21305-20100916171329.patch</filename>
            <type>text/plain</type>
            <size>11007</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzY3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDktMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcXVl
cnlDb21tYW5kVmFsdWUgImZvcm1hdEJsb2NrIiBhbHdheXMgcmV0dXJucyBmYWxzZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMDUKKworICAgICAg
ICBJbXBsZW1lbnRlZCBxdWVyeUNvbW1hbmRWYWx1ZSgnZm9ybWF0QmxvY2snKS4gV2UgbWF0Y2gg
dGhlIEZpcmVmb3gncyBiZWhhdmlvciBleGFjdGx5CisgICAgICAgIGJlY2F1c2UgRmlyZWZveCBh
bmQgSW50ZXJuZXQgRXhwbG9yZXIgc3VwcG9ydCB0aGUgc2FtZSBzZXQgb2YgZWxlbWVudHMKKyAg
ICAgICAgKGFkZHJlc3MsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGFuZCBwKSBhbmQgRmlyZWZv
eCdzIGJlaGF2aW9yIGlzIG1vcmUgY29tcGF0aWJsZSB3aXRoIE9wZXJhLgorICAgICAgICBTZWUg
dGhlIGJ1ZyBmb3IgdGhlIGRldGFpbGVkIGRpc2N1c3Npb24uCisKKyAgICAgICAgV2ViS2l0J3Mg
aW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgbG9jYWwgbmFtZSBvZiB0aGUgbG93ZXN0IGNvbW1v
biBhbmNlc3RvcgorICAgICAgICBvZiB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIHRhZyBuYW1lIGFk
ZHJlc3MsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIG9yIHAuCisgICAgICAgIEl0IHJldHVybnMg
IiIgd2hlbiB0aGVyZSBpcyBubyBzdWNoIGFuIGFuY2VzdG9yIG9yIHRoZXJlIGlzIG5vIHNlbGVj
dGlvbi4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1hdC1i
bG9jay5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppc0Zvcm1hdEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9u
Rm9ybWF0QmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlRm9ybWF0Qmxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29tbWFuZE1hcCk6CisKIDIwMTAtMDktMTYg
IEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDY3NjQx
KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4Myw2
ICs5ODMsMzkgQEAgU3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRDU1NQcm9wZXJ0eQogICAg
IHJldHVybiB2YWx1ZTsKIH0KIAorc3RhdGljIGJvb2wgaXNGb3JtYXRCbG9jayhjb25zdCBOb2Rl
KiBub2RlKQoreworICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGFkZHJlc3NUYWcpCisgICAg
ICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDFUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05h
bWUoaDJUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDNUYWcpCisgICAgICAgIHx8
IG5vZGUtPmhhc1RhZ05hbWUoaDRUYWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDVU
YWcpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoaDZUYWcpCisgICAgICAgIHx8IG5vZGUt
Pmhhc1RhZ05hbWUocFRhZykKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShwcmVUYWcpOwor
fQorCitTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25Gb3JtYXRCbG9jaygpCit7CisgICAgaWYgKCFt
X2ZyYW1lLT5zZWxlY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygiIik7CisKKyAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25PcnBoYW5lZENhcmV0T3JSYW5n
ZSgpIHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygiIik7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBOb2RlKiBjb21tb25B
bmNlc3RvciA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCktPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KGVjKTsKKyAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IgJiYgIWlzRm9ybWF0QmxvY2soY29tbW9u
QW5jZXN0b3IpKQorICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLT5wYXJl
bnROb2RlKCk7CisKKyAgICBpZiAoZWMgfHwgIWNvbW1vbkFuY2VzdG9yKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCIiKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY29tbW9u
QW5jZXN0b3IpLT5sb2NhbE5hbWUoKTsKK30KKwogdm9pZCBFZGl0b3I6OmluZGVudCgpCiB7CiAg
ICAgYXBwbHlDb21tYW5kKEluZGVudE91dGRlbnRDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9j
dW1lbnQoKSwgSW5kZW50T3V0ZGVudENvbW1hbmQ6OkluZGVudCkpOwpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAko
cmV2aXNpb24gNjc2NDEpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNSw2ICsxMjUsNyBAQCBwdWJsaWM6CiAKICAgICBUcmlTdGF0ZSBzZWxlY3Rpb25I
YXNTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAgICAgU3RyaW5nIHNlbGVjdGlv
blN0YXJ0Q1NTUHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCk7CisgICAgU3RyaW5nIHNlbGVj
dGlvbkZvcm1hdEJsb2NrKCk7CiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRGb3JTZWxl
Y3Rpb24oYm9vbCYpIGNvbnN0OwogICAgIFdyaXRpbmdEaXJlY3Rpb24gdGV4dERpcmVjdGlvbkZv
clNlbGVjdGlvbihib29sJikgY29uc3Q7CiAgICAgCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCShyZXZpc2lvbiA2NzY0MSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzNSw2ICsxMzM1LDExIEBAIHN0YXRpYyBTdHJpbmcg
dmFsdWVGb3JlQ29sb3IoRnJhbWUqIGZyYW0KICAgICByZXR1cm4gdmFsdWVTdHlsZShmcmFtZSwg
Q1NTUHJvcGVydHlDb2xvcik7CiB9CiAKK3N0YXRpYyBTdHJpbmcgdmFsdWVGb3JtYXRCbG9jayhG
cmFtZSogZnJhbWUsIEV2ZW50KikKK3sKKyAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3Rpb25Gb3JtYXRCbG9jaygpOworfQorCiAvLyBNYXAgb2YgZnVuY3Rpb25zCiAKIHN0cnVjdCBD
b21tYW5kRW50cnkgewpAQCAtMTM3MSw3ICsxMzc2LDcgQEAgc3RhdGljIGNvbnN0IENvbW1hbmRN
YXAmIGNyZWF0ZUNvbW1hbmRNYQogICAgICAgICB7ICJGb250U2l6ZSIsIHsgZXhlY3V0ZUZvbnRT
aXplLCBzdXBwb3J0ZWQsIGVuYWJsZWRJbkVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZUZv
bnRTaXplLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVk
IH0gfSwKICAgICAgICAgeyAiRm9udFNpemVEZWx0YSIsIHsgZXhlY3V0ZUZvbnRTaXplRGVsdGEs
IHN1cHBvcnRlZCwgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlRm9udFNp
emVEZWx0YSwgbm90VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxl
ZCB9IH0sCiAgICAgICAgIHsgIkZvcmVDb2xvciIsIHsgZXhlY3V0ZUZvcmVDb2xvciwgc3VwcG9y
dGVkLCBlbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVGb3JlQ29s
b3IsIG5vdFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9
LAotICAgICAgICB7ICJGb3JtYXRCbG9jayIsIHsgZXhlY3V0ZUZvcm1hdEJsb2NrLCBzdXBwb3J0
ZWQsIGVuYWJsZWRJblJpY2hseUVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5v
dFRleHRJbnNlcnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAorICAg
ICAgICB7ICJGb3JtYXRCbG9jayIsIHsgZXhlY3V0ZUZvcm1hdEJsb2NrLCBzdXBwb3J0ZWQsIGVu
YWJsZWRJblJpY2hseUVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZUZvcm1hdEJsb2NrLCBu
b3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKICAg
ICAgICAgeyAiRm9yd2FyZERlbGV0ZSIsIHsgZXhlY3V0ZUZvcndhcmREZWxldGUsIHN1cHBvcnRl
ZCwgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dElu
c2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCiAgICAgICAgIHsg
IkhpbGl0ZUNvbG9yIiwgeyBleGVjdXRlQmFja0NvbG9yLCBzdXBwb3J0ZWQsIGVuYWJsZWRJblJp
Y2hseUVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZU51bGwsIG5vdFRleHRJbnNlcnRpb24s
IGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJJZ25vcmVT
cGVsbGluZyIsIHsgZXhlY3V0ZUlnbm9yZVNwZWxsaW5nLCBzdXBwb3J0ZWRGcm9tTWVudU9yS2V5
QmluZGluZywgZW5hYmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90
VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2NzY3OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA5LTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIHF1ZXJ5Q29tbWFuZFZhbHVlICJmb3JtYXRCbG9jayIgYWx3YXlzIHJldHVybnMgZmFsc2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzA1CisK
KyAgICAgICAgQWRkZWQgYSB0ZXN0IGZvciBxdWVyeUNvbW1hbmRWYWx1ZSgnZm9ybWF0QmxvY2sn
KS4KKworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvcXVlcnktZm9ybWF0LWJsb2NrLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9xdWVyeS1m
b3JtYXQtYmxvY2suaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9z
Y3JpcHQtdGVzdHMvcXVlcnktZm9ybWF0LWJsb2NrLmpzOiBBZGRlZC4KKyAgICAgICAgKHF1ZXJ5
Rm9ybWF0QmxvY2spOgorICAgICAgICAoc2VsZWN0Rmlyc3RQb3NpdGlvbik6CisgICAgICAgIChz
ZWxlY3RNaWRkbGVPZkhlbGxvV29ybGQpOgorCiAyMDEwLTA5LTE2ICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvcXVlcnktZm9ybWF0LWJsb2NrLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1
ZXJ5LWZvcm1hdC1ibG9jay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1hdC1ibG9jay1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK1Rlc3RzIHF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3Jt
YXRCbG9jaycpCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCYXNpYyBjYXNlcwor
UEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkICIiCitQQVNTIHF1ZXJ5Q29tbWFu
ZCgnZm9ybWF0JykgcmV0dXJuZWQgIiIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1
cm5lZCAiYWRkcmVzcyIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAiaDEi
CitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgImgyIgorUEFTUyBxdWVyeUNv
bW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkICJoMyIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQn
KSByZXR1cm5lZCAiaDQiCitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgImg1
IgorUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkICJoNiIKK1BBU1MgcXVlcnlD
b21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAicCIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQn
KSByZXR1cm5lZCAicHJlIgorCitOZXN0ZWQgY2FzZXMKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3Jt
YXQnKSByZXR1cm5lZCAiaDIiCitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0dXJuZWQg
ImFkZHJlc3MiCitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgInByZSIKK1BB
U1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAicHJlIgorUEFTUyBxdWVyeUNvbW1h
bmQoJ2Zvcm1hdCcpIHJldHVybmVkICJhZGRyZXNzIgorUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1h
dCcpIHJldHVybmVkICIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9xdWVyeS1m
b3JtYXQtYmxvY2suaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWND
b21tYW5kL3F1ZXJ5LWZvcm1hdC1ibG9jay5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9leGVjQ29tbWFuZC9xdWVyeS1mb3JtYXQtYmxvY2suaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcXVlcnktZm9ybWF0LWJsb2NrLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvcXVlcnktZm9ybWF0LWJsb2NrLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL3F1
ZXJ5LWZvcm1hdC1ibG9jay5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL3F1ZXJ5LWZvcm1hdC1ibG9jay5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1OCBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHF1ZXJ5Q29tbWFuZFZhbHVl
KCdmb3JtYXRCbG9jaycpIikKKwordmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKK3Rlc3RDb250YWluZXIuY29udGVudEVkaXRhYmxlID0gdHJ1ZTsKK2Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK2Z1bmN0aW9uIHF1ZXJ5
Rm9ybWF0QmxvY2soc2VsZWN0b3IsIGNvbnRlbnQsIGV4cGVjdGVkKQoreworICAgIHRlc3RDb250
YWluZXIuaW5uZXJIVE1MID0gY29udGVudDsKKyAgICBzZWxlY3Rvcih0ZXN0Q29udGFpbmVyKTsK
KyAgICB2YXIgYWN0dWFsID0gZG9jdW1lbnQucXVlcnlDb21tYW5kVmFsdWUoJ2Zvcm1hdEJsb2Nr
Jyk7CisgICAgdmFyIGFjdGlvbiA9ICJxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkIFwi
IiArIGFjdHVhbCArICciJzsKKyAgICBpZiAoYWN0dWFsID09IGV4cGVjdGVkKQorICAgICAgICB0
ZXN0UGFzc2VkKGFjdGlvbik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKGFjdGlvbiAr
ICcgYnV0IGV4cGVjdGVkICInICsgZXhwZWN0ZWQgKyAnIicpOworfQorCitmdW5jdGlvbiBzZWxl
Y3RGaXJzdFBvc2l0aW9uKGNvbnRhaW5lcikgeworICAgIHdoaWxlIChjb250YWluZXIuZmlyc3RD
aGlsZCkKKyAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgd2lu
ZG93LmdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7Cit9CisKK2Z1bmN0
aW9uIHNlbGVjdE1pZGRsZU9mSGVsbG9Xb3JsZChjb250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAgICB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkubW9kaWZ5KCdtb3ZlJywgJ2ZvcndhcmQnLCAnY2hhcmFjdGVyJyk7CisgICAgd2lu
ZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScsICdmb3J3YXJkJywgJ2NoYXJhY3Rlcicp
OworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdmb3J3YXJkJywg
J3dvcmQnKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9y
d2FyZCcsICdjaGFyYWN0ZXInKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdl
eHRlbmQnLCAnZm9yd2FyZCcsICdjaGFyYWN0ZXInKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdjaGFyYWN0ZXInKTsKK30KKworZGVidWco
J0Jhc2ljIGNhc2VzJyk7CitxdWVyeUZvcm1hdEJsb2NrKGZ1bmN0aW9uICgpIHt9LCAnaGVsbG8n
LCAnJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICdoZWxsbycsICcn
KTsKK3F1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0Rmlyc3RQb3NpdGlvbiwgJzxhZGRyZXNzPmhlbGxv
PC9hZGRyZXNzPicsICdhZGRyZXNzJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9z
aXRpb24sICc8aDE+aGVsbG88L2gxPicsICdoMScpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RG
aXJzdFBvc2l0aW9uLCAnPGgyPmhlbGxvPC9oMj4nLCAnaDInKTsKK3F1ZXJ5Rm9ybWF0QmxvY2so
c2VsZWN0Rmlyc3RQb3NpdGlvbiwgJzxoMz5oZWxsbzwvaDM+JywgJ2gzJyk7CitxdWVyeUZvcm1h
dEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICc8aDQ+aGVsbG88L2g0PicsICdoNCcpOworcXVl
cnlGb3JtYXRCbG9jayhzZWxlY3RGaXJzdFBvc2l0aW9uLCAnPGg1PmhlbGxvPC9oNT4nLCAnaDUn
KTsKK3F1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0Rmlyc3RQb3NpdGlvbiwgJzxoNj5oZWxsbzwvaDY+
JywgJ2g2Jyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICc8cD5oZWxs
bzwvcD4nLCAncCcpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RGaXJzdFBvc2l0aW9uLCAnPHBy
ZT5oZWxsbzwvcHJlPicsICdwcmUnKTsKKworZGVidWcoJycpOworZGVidWcoJ05lc3RlZCBjYXNl
cycpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RGaXJzdFBvc2l0aW9uLCAnPGgxPjxoMj5oZWxs
bzwvaDI+PC9oMT4nLCAnaDInKTsKK3F1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0Rmlyc3RQb3NpdGlv
biwgJzxoMT48YWRkcmVzcz5oZWxsbzwvYWRkcmVzcz48L2gxPicsICdhZGRyZXNzJyk7CitxdWVy
eUZvcm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICc8cHJlPmhlbGxvPHA+d29ybGQ8L3A+
PC9wcmU+JywgJ3ByZScpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RNaWRkbGVPZkhlbGxvV29y
bGQsICc8cHJlPmhlbGxvPHA+d29ybGQ8L3A+PC9wcmU+JywgJ3ByZScpOworcXVlcnlGb3JtYXRC
bG9jayhzZWxlY3RNaWRkbGVPZkhlbGxvV29ybGQsICc8YWRkcmVzcz48aDE+aGVsbG88L2gxPndv
cmxkPC9hZGRyZXNzPicsICdhZGRyZXNzJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdE1pZGRs
ZU9mSGVsbG9Xb3JsZCwgJzxoMT5oZWxsbzwvaDE+d29ybGQnLCAnJyk7CisKK2RvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68545</attachid>
            <date>2010-09-23 10:38:56 -0700</date>
            <delta_ts>2010-09-27 18:56:13 -0700</delta_ts>
            <desc>fixed per darin&apos;s comments</desc>
            <filename>bug-21305-20100923103855.patch</filename>
            <type>text/plain</type>
            <size>11163</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODE0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDktMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgcXVlcnlD
b21tYW5kVmFsdWUgImZvcm1hdEJsb2NrIiBhbHdheXMgcmV0dXJucyBmYWxzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMDUKKworICAgICAgICBJ
bXBsZW1lbnRlZCBxdWVyeUNvbW1hbmRWYWx1ZSgnZm9ybWF0QmxvY2snKS4gV2UgbWF0Y2ggdGhl
IEZpcmVmb3gncyBiZWhhdmlvciBleGFjdGx5CisgICAgICAgIGJlY2F1c2UgRmlyZWZveCBhbmQg
SW50ZXJuZXQgRXhwbG9yZXIgc3VwcG9ydCB0aGUgc2FtZSBzZXQgb2YgZWxlbWVudHMKKyAgICAg
ICAgKGFkZHJlc3MsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGFuZCBwKSBhbmQgRmlyZWZveCdz
IGJlaGF2aW9yIGlzIG1vcmUgY29tcGF0aWJsZSB3aXRoIE9wZXJhLgorICAgICAgICBTZWUgdGhl
IGJ1ZyBmb3IgdGhlIGRldGFpbGVkIGRpc2N1c3Npb24uCisKKyAgICAgICAgV2ViS2l0J3MgaW1w
bGVtZW50YXRpb24gcmV0dXJucyB0aGUgbG9jYWwgbmFtZSBvZiB0aGUgbG93ZXN0IGNvbW1vbiBh
bmNlc3RvcgorICAgICAgICBvZiB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIHRhZyBuYW1lIGFkZHJl
c3MsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIG9yIHAuCisgICAgICAgIEl0IHJldHVybnMgIiIg
d2hlbiB0aGVyZSBpcyBubyBzdWNoIGFuIGFuY2VzdG9yIG9yIHRoZXJlIGlzIG5vIHNlbGVjdGlv
bi4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1hdC1ibG9j
ay5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojppc0VsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2YWx1ZUZvcm1hdEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbW1h
bmRNYXApOgorCiAyMDEwLTA5LTIzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkocmV2aXNpb24gNjgxNDcpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTY2LDYgKzk2NiwzNyBAQCBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFy
dENTU1Byb3BlcnR5CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCitzdGF0aWMgYm9vbCBpc0VsZW1l
bnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4g
bm9kZS0+aGFzVGFnTmFtZShhZGRyZXNzVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1l
KGgxVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGgyVGFnKQorICAgICAgICB8fCBu
b2RlLT5oYXNUYWdOYW1lKGgzVGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGg0VGFn
KQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGg1VGFnKQorICAgICAgICB8fCBub2RlLT5o
YXNUYWdOYW1lKGg2VGFnKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKHBUYWcpCisgICAg
ICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUocHJlVGFnKTsKK30KKworRWxlbWVudCogRWRpdG9yOjpl
bGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKCkgY29uc3QKK3sKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7
CisgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpIHx8ICFzZWxl
Y3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gc2VsZWN0aW9uLmZpcnN0
UmFuZ2UoKS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZWMpOworICAgIHdoaWxlIChjb21tb25B
bmNlc3RvciAmJiAhaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNvbW1vbkFuY2VzdG9y
KSkKKyAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25BbmNlc3Rvci0+cGFyZW50Tm9kZSgp
OworCisgICAgaWYgKCFjb21tb25BbmNlc3RvcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBB
U1NFUlQoY29tbW9uQW5jZXN0b3ItPmlzRWxlbWVudE5vZGUoKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihjb21tb25BbmNlc3Rvcik7Cit9CisKIHZvaWQgRWRpdG9yOjppbmRl
bnQoKQogewogICAgIGFwcGx5Q29tbWFuZChJbmRlbnRPdXRkZW50Q29tbWFuZDo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpJbmRlbnQpKTsKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgJKHJldmlzaW9uIDY4MTQ3KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAgcHVibGljOgogCiAgICAgVHJpU3RhdGUg
c2VsZWN0aW9uSGFzU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwogICAgIFN0cmlu
ZyBzZWxlY3Rpb25TdGFydENTU1Byb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpOworICAgIEVs
ZW1lbnQqIGVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoKSBjb25zdDsKICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udEZvclNlbGVjdGlvbihib29sJikgY29uc3Q7CiAgICAgV3JpdGlu
Z0RpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGJvb2wmKSBjb25zdDsKICAgICAK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY4MTQ3KQorKysgV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI5LDYg
KzEzMjksMTQgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZvcmVDb2xvcihGcmFtZSogZnJhbQogICAg
IHJldHVybiB2YWx1ZVN0eWxlKGZyYW1lLCBDU1NQcm9wZXJ0eUNvbG9yKTsKIH0KIAorc3RhdGlj
IFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1lKiBmcmFtZSwgRXZlbnQqKQoreworICAgIEVs
ZW1lbnQqIGZvcm1hdEJsb2NrRWxlbWVudCA9IGZyYW1lLT5lZGl0b3IoKS0+ZWxlbWVudEZvckZv
cm1hdEJsb2NrQ29tbWFuZCgpOworICAgIGlmICghZm9ybWF0QmxvY2tFbGVtZW50KQorICAgICAg
ICByZXR1cm4gIiI7CisgICAgcmV0dXJuIGZvcm1hdEJsb2NrRWxlbWVudC0+bG9jYWxOYW1lKCk7
Cit9CisKIC8vIE1hcCBvZiBmdW5jdGlvbnMKIAogc3RydWN0IENvbW1hbmRFbnRyeSB7CkBAIC0x
MzY1LDcgKzEzNzMsNyBAQCBzdGF0aWMgY29uc3QgQ29tbWFuZE1hcCYgY3JlYXRlQ29tbWFuZE1h
CiAgICAgICAgIHsgIkZvbnRTaXplIiwgeyBleGVjdXRlRm9udFNpemUsIHN1cHBvcnRlZCwgZW5h
YmxlZEluRWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlRm9udFNpemUsIG5vdFRleHRJbnNl
cnRpb24sIGRvTm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJG
b250U2l6ZURlbHRhIiwgeyBleGVjdXRlRm9udFNpemVEZWx0YSwgc3VwcG9ydGVkLCBlbmFibGVk
SW5FZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVGb250U2l6ZURlbHRhLCBub3RUZXh0SW5z
ZXJ0aW9uLCBkb05vdEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKICAgICAgICAgeyAi
Rm9yZUNvbG9yIiwgeyBleGVjdXRlRm9yZUNvbG9yLCBzdXBwb3J0ZWQsIGVuYWJsZWRJblJpY2hs
eUVkaXRhYmxlVGV4dCwgc3RhdGVOb25lLCB2YWx1ZUZvcmVDb2xvciwgbm90VGV4dEluc2VydGlv
biwgZG9Ob3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCi0gICAgICAgIHsgIkZvcm1h
dEJsb2NrIiwgeyBleGVjdXRlRm9ybWF0QmxvY2ssIHN1cHBvcnRlZCwgZW5hYmxlZEluUmljaGx5
RWRpdGFibGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9O
b3RBbGxvd0V4ZWN1dGlvbldoZW5EaXNhYmxlZCB9IH0sCisgICAgICAgIHsgIkZvcm1hdEJsb2Nr
IiwgeyBleGVjdXRlRm9ybWF0QmxvY2ssIHN1cHBvcnRlZCwgZW5hYmxlZEluUmljaGx5RWRpdGFi
bGVUZXh0LCBzdGF0ZU5vbmUsIHZhbHVlRm9ybWF0QmxvY2ssIG5vdFRleHRJbnNlcnRpb24sIGRv
Tm90QWxsb3dFeGVjdXRpb25XaGVuRGlzYWJsZWQgfSB9LAogICAgICAgICB7ICJGb3J3YXJkRGVs
ZXRlIiwgeyBleGVjdXRlRm9yd2FyZERlbGV0ZSwgc3VwcG9ydGVkLCBlbmFibGVkSW5FZGl0YWJs
ZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05vdEFsbG93
RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKICAgICAgICAgeyAiSGlsaXRlQ29sb3IiLCB7IGV4
ZWN1dGVCYWNrQ29sb3IsIHN1cHBvcnRlZCwgZW5hYmxlZEluUmljaGx5RWRpdGFibGVUZXh0LCBz
dGF0ZU5vbmUsIHZhbHVlTnVsbCwgbm90VGV4dEluc2VydGlvbiwgZG9Ob3RBbGxvd0V4ZWN1dGlv
bldoZW5EaXNhYmxlZCB9IH0sCiAgICAgICAgIHsgIklnbm9yZVNwZWxsaW5nIiwgeyBleGVjdXRl
SWdub3JlU3BlbGxpbmcsIHN1cHBvcnRlZEZyb21NZW51T3JLZXlCaW5kaW5nLCBlbmFibGVkSW5F
ZGl0YWJsZVRleHQsIHN0YXRlTm9uZSwgdmFsdWVOdWxsLCBub3RUZXh0SW5zZXJ0aW9uLCBkb05v
dEFsbG93RXhlY3V0aW9uV2hlbkRpc2FibGVkIH0gfSwKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY4MTQ3
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTAtMDktMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgcXVlcnlDb21tYW5kVmFsdWUg
ImZvcm1hdEJsb2NrIiBhbHdheXMgcmV0dXJucyBmYWxzZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMDUKKworICAgICAgICBBZGRlZCBhIHRlc3Qg
Zm9yIHF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JtYXRCbG9jaycpLgorCisgICAgICAgICogZWRpdGlu
Zy9leGVjQ29tbWFuZC9xdWVyeS1mb3JtYXQtYmxvY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1hdC1ibG9jay5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy9xdWVyeS1mb3Jt
YXQtYmxvY2suanM6IEFkZGVkLgorICAgICAgICAocXVlcnlGb3JtYXRCbG9jayk6CisgICAgICAg
IChzZWxlY3RGaXJzdFBvc2l0aW9uKToKKyAgICAgICAgKHNlbGVjdE1pZGRsZU9mSGVsbG9Xb3Js
ZCk6CisKIDIwMTAtMDktMjMgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvZXhlY0NvbW1hbmQvcXVlcnktZm9ybWF0LWJsb2NrLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZvcm1hdC1ibG9j
ay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWND
b21tYW5kL3F1ZXJ5LWZvcm1hdC1ibG9jay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjkgQEAKK1Rlc3RzIHF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JtYXRCbG9jaycpCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitCYXNpYyBjYXNlcworUEFTUyBxdWVyeUNvbW1h
bmQoJ2Zvcm1hdCcpIHJldHVybmVkICIiCitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0
dXJuZWQgIiIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAiYWRkcmVzcyIK
K1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAiaDEiCitQQVNTIHF1ZXJ5Q29t
bWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgImgyIgorUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcp
IHJldHVybmVkICJoMyIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAiaDQi
CitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgImg1IgorUEFTUyBxdWVyeUNv
bW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkICJoNiIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQn
KSByZXR1cm5lZCAicCIKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAicHJl
IgorCitOZXN0ZWQgY2FzZXMKK1BBU1MgcXVlcnlDb21tYW5kKCdmb3JtYXQnKSByZXR1cm5lZCAi
aDIiCitQQVNTIHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgImFkZHJlc3MiCitQQVNT
IHF1ZXJ5Q29tbWFuZCgnZm9ybWF0JykgcmV0dXJuZWQgInByZSIKK1BBU1MgcXVlcnlDb21tYW5k
KCdmb3JtYXQnKSByZXR1cm5lZCAicHJlIgorUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJl
dHVybmVkICJhZGRyZXNzIgorUEFTUyBxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkICIi
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9xdWVyeS1mb3JtYXQtYmxvY2suaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3F1ZXJ5LWZv
cm1hdC1ibG9jay5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9xdWVyeS1mb3JtYXQtYmxvY2suaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvcXVlcnktZm9ybWF0LWJsb2NrLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC9zY3JpcHQtdGVzdHMvcXVlcnktZm9ybWF0LWJsb2NrLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL3F1ZXJ5LWZvcm1hdC1ibG9j
ay5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2Ny
aXB0LXRlc3RzL3F1ZXJ5LWZvcm1hdC1ibG9jay5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
OCBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JtYXRCbG9jaycp
IikKKwordmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
K3Rlc3RDb250YWluZXIuY29udGVudEVkaXRhYmxlID0gdHJ1ZTsKK2RvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK2Z1bmN0aW9uIHF1ZXJ5Rm9ybWF0QmxvY2soc2Vs
ZWN0b3IsIGNvbnRlbnQsIGV4cGVjdGVkKQoreworICAgIHRlc3RDb250YWluZXIuaW5uZXJIVE1M
ID0gY29udGVudDsKKyAgICBzZWxlY3Rvcih0ZXN0Q29udGFpbmVyKTsKKyAgICB2YXIgYWN0dWFs
ID0gZG9jdW1lbnQucXVlcnlDb21tYW5kVmFsdWUoJ2Zvcm1hdEJsb2NrJyk7CisgICAgdmFyIGFj
dGlvbiA9ICJxdWVyeUNvbW1hbmQoJ2Zvcm1hdCcpIHJldHVybmVkIFwiIiArIGFjdHVhbCArICci
JzsKKyAgICBpZiAoYWN0dWFsID09IGV4cGVjdGVkKQorICAgICAgICB0ZXN0UGFzc2VkKGFjdGlv
bik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKGFjdGlvbiArICcgYnV0IGV4cGVjdGVk
ICInICsgZXhwZWN0ZWQgKyAnIicpOworfQorCitmdW5jdGlvbiBzZWxlY3RGaXJzdFBvc2l0aW9u
KGNvbnRhaW5lcikgeworICAgIHdoaWxlIChjb250YWluZXIuZmlyc3RDaGlsZCkKKyAgICAgICAg
Y29udGFpbmVyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdE1pZGRs
ZU9mSGVsbG9Xb3JsZChjb250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0
UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5
KCdtb3ZlJywgJ2ZvcndhcmQnLCAnY2hhcmFjdGVyJyk7CisgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLm1vZGlmeSgnbW92ZScsICdmb3J3YXJkJywgJ2NoYXJhY3RlcicpOworICAgIHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdmb3J3YXJkJywgJ3dvcmQnKTsKKyAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdjaGFyYWN0
ZXInKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2Fy
ZCcsICdjaGFyYWN0ZXInKTsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRl
bmQnLCAnZm9yd2FyZCcsICdjaGFyYWN0ZXInKTsKK30KKworZGVidWcoJ0Jhc2ljIGNhc2VzJyk7
CitxdWVyeUZvcm1hdEJsb2NrKGZ1bmN0aW9uICgpIHt9LCAnaGVsbG8nLCAnJyk7CitxdWVyeUZv
cm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICdoZWxsbycsICcnKTsKK3F1ZXJ5Rm9ybWF0
QmxvY2soc2VsZWN0Rmlyc3RQb3NpdGlvbiwgJzxhZGRyZXNzPmhlbGxvPC9hZGRyZXNzPicsICdh
ZGRyZXNzJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICc8aDE+aGVs
bG88L2gxPicsICdoMScpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RGaXJzdFBvc2l0aW9uLCAn
PGgyPmhlbGxvPC9oMj4nLCAnaDInKTsKK3F1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0Rmlyc3RQb3Np
dGlvbiwgJzxoMz5oZWxsbzwvaDM+JywgJ2gzJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdEZp
cnN0UG9zaXRpb24sICc8aDQ+aGVsbG88L2g0PicsICdoNCcpOworcXVlcnlGb3JtYXRCbG9jayhz
ZWxlY3RGaXJzdFBvc2l0aW9uLCAnPGg1PmhlbGxvPC9oNT4nLCAnaDUnKTsKK3F1ZXJ5Rm9ybWF0
QmxvY2soc2VsZWN0Rmlyc3RQb3NpdGlvbiwgJzxoNj5oZWxsbzwvaDY+JywgJ2g2Jyk7CitxdWVy
eUZvcm1hdEJsb2NrKHNlbGVjdEZpcnN0UG9zaXRpb24sICc8cD5oZWxsbzwvcD4nLCAncCcpOwor
cXVlcnlGb3JtYXRCbG9jayhzZWxlY3RGaXJzdFBvc2l0aW9uLCAnPHByZT5oZWxsbzwvcHJlPics
ICdwcmUnKTsKKworZGVidWcoJycpOworZGVidWcoJ05lc3RlZCBjYXNlcycpOworcXVlcnlGb3Jt
YXRCbG9jayhzZWxlY3RGaXJzdFBvc2l0aW9uLCAnPGgxPjxoMj5oZWxsbzwvaDI+PC9oMT4nLCAn
aDInKTsKK3F1ZXJ5Rm9ybWF0QmxvY2soc2VsZWN0Rmlyc3RQb3NpdGlvbiwgJzxoMT48YWRkcmVz
cz5oZWxsbzwvYWRkcmVzcz48L2gxPicsICdhZGRyZXNzJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNl
bGVjdEZpcnN0UG9zaXRpb24sICc8cHJlPmhlbGxvPHA+d29ybGQ8L3A+PC9wcmU+JywgJ3ByZScp
OworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RNaWRkbGVPZkhlbGxvV29ybGQsICc8cHJlPmhlbGxv
PHA+d29ybGQ8L3A+PC9wcmU+JywgJ3ByZScpOworcXVlcnlGb3JtYXRCbG9jayhzZWxlY3RNaWRk
bGVPZkhlbGxvV29ybGQsICc8YWRkcmVzcz48aDE+aGVsbG88L2gxPndvcmxkPC9hZGRyZXNzPics
ICdhZGRyZXNzJyk7CitxdWVyeUZvcm1hdEJsb2NrKHNlbGVjdE1pZGRsZU9mSGVsbG9Xb3JsZCwg
JzxoMT5oZWxsbzwvaDE+d29ybGQnLCAnJyk7CisKK2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQo
dGVzdENvbnRhaW5lcik7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="58087"
          type_id="1"
          status="+"
          setter="tonikitoo"
    />
          </attachment>
      

    </bug>

</bugzilla>