<?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>31400</bug_id>
          
          <creation_ts>2009-11-12 03:17:44 -0800</creation_ts>
          <short_desc>Web Inspector: Support Ctrl+P, Ctrl+N, and other Readline keyboard shortcuts in the Console</short_desc>
          <delta_ts>2009-11-21 19:40:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.6</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="Sam Aaron">samaaron.public</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>162859</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Aaron">samaaron.public</who>
    <bug_when>2009-11-12 03:17:44 -0800</bug_when>
    <thetext>My muscle memory keeps trying ctrl-p to access history which totally fails to do anything at all.  Would it be possible to map ctrl-p and ctrl-n to up and down in the console to mimic the behaviour of Terminal.app?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165574</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-20 23:00:04 -0800</bug_when>
    <thetext>These are well known Readline keyboard shortcuts. Terminal.app Supports a number of them. Here is a general list:
http://www.bigsmoke.us/readline/shortcuts

keishi mentioned on IRC:
&gt; I think it&apos;s good for os x but I&apos;m wasn&apos;t sure about Windows.
&gt; I&apos;m not sure. I was wondering if it had any conflicts when i read it.
&gt; all the readline key bindings don&apos;t work in Windows.
&gt; http://en.wikipedia.org/wiki/Control_key seems like Ctrl+P Ctrl+N
&gt; wouldn&apos;t have conflicts in the console. I like the readline key bindings
&gt; and I want this, but I just wonder if it&apos;s natural for Windows users.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165575</commentid>
    <comment_count>2</comment_count>
      <attachid>43644</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-20 23:01:22 -0800</bug_when>
    <thetext>Created attachment 43644
[PATCH] Ctrl+P, Ctrl+N, Ctrl+U for Macs Only

Also fixes modifier keys (Shift/Alt/Meta/Control) from re-triggering the type ahead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165577</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-11-20 23:06:56 -0800</bug_when>
    <thetext>I&apos;m not sure the best way to handle this on Windows, maybe the meta key would work (Windows key).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165579</commentid>
    <comment_count>4</comment_count>
      <attachid>43644</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-20 23:29:22 -0800</bug_when>
    <thetext>Comment on attachment 43644
[PATCH] Ctrl+P, Ctrl+N, Ctrl+U for Macs Only


&gt; +                // fall through to default
&gt; +            case &quot;U+004E&quot;: // Ctrl+N = Next

Are you sure this falls through to the default? I thought it fell through to the next case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165583</commentid>
    <comment_count>5</comment_count>
      <attachid>43644</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-21 00:21:45 -0800</bug_when>
    <thetext>Comment on attachment 43644
[PATCH] Ctrl+P, Ctrl+N, Ctrl+U for Macs Only

The switch needs fixed.

Example:

switch(true) {
  case false:
    alert(&apos;false&apos;);
  case true:
    alert(&apos;true&apos;);
  case false:
    alert(&apos;false&apos;);
  case false:
    alert(&apos;false&apos;);
  default:
    alert(&apos;default&apos;);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165603</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 07:11:52 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; +                // fall through to default
&gt; &gt; +            case &quot;U+004E&quot;: // Ctrl+N = Next
&gt; 
&gt; Are you sure this falls through to the default? I thought it fell through to
&gt; the next case.

Correct, it falls through to the next case, which then falls through to the next case, and eventually will end up at default. This cases a few extra conditions to be checked, so maybe I should just refactor this anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165608</commentid>
    <comment_count>7</comment_count>
      <attachid>43648</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 07:26:13 -0800</bug_when>
    <thetext>Created attachment 43648
[PATCH] Ctrl+P, Ctrl+N, Ctrl+U for Macs Only

More explicit behavior in the switch. No fall throughs.

The only thing I am worried about is the O(n) behavior of deleting nodes in clearBeforeCaret. Even though my tests showed it was immediate for a rather large paste, I still think there should be a better way to delete a range of nodes in 1 operation, rather then n. Any pointers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165623</commentid>
    <comment_count>8</comment_count>
      <attachid>43651</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 09:01:27 -0800</bug_when>
    <thetext>Created attachment 43651
[PATCH] Ctrl+P, Ctrl+N, Ctrl+U, Arrow Keys

Included arrow keys for multiline here because bug 30553 seems to have diverted its attention to Snippets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165625</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 09:08:30 -0800</bug_when>
    <thetext>Video Showing Arrow Traversals so you can get a feel:
http://screencast.com/t/MTBlMGZiNjA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165626</commentid>
    <comment_count>10</comment_count>
      <attachid>43652</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 09:16:34 -0800</bug_when>
    <thetext>Created attachment 43652
[PATCH] Ctrl+P, Ctrl+N, Ctrl+U, Arrow Keys

Removed a &quot;+1&quot; I had added that shouldn&apos;t have been there and caused bad behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165684</commentid>
    <comment_count>11</comment_count>
      <attachid>43652</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-21 19:10:18 -0800</bug_when>
    <thetext>Comment on attachment 43652
[PATCH] Ctrl+P, Ctrl+N, Ctrl+U, Arrow Keys

&gt; +        this.clearAutoComplete(true);
&gt; +        if (this.isCaretAtEndOfPrompt()) {
&gt; +            this.element.removeChildren();
&gt; +            this.element.appendChild(document.createElement(&quot;br&quot;));
&gt; +            this.moveCaretToEndOfPrompt();
&gt; +            return;
&gt; +        }
&gt; +
&gt; +        while (focusNode.previousSibling)
&gt; +            this.element.removeChild(focusNode.previousSibling);
&gt; +        focusNode.textContent = focusNode.textContent.substring(selection.focusOffset);
&gt; +        if (this.element.textContent.length === 0)
&gt; +            this.element.appendChild(document.createElement(&quot;br&quot;));
&gt; +
&gt; +        var newRange = document.createRange();
&gt; +        newRange.setStart(focusNode, 0);
&gt; +        newRange.setEnd(focusNode, 0);
&gt; +
&gt; +        selection.removeAllRanges();
&gt; +        selection.addRange(newRange);

This can be simplified. Just make a DOM range that starts at the beginning and ends at the focusNode and focusOffset. Then call removeContents. This should leave you with a good caret selection too. You might need the &lt;br&gt; still if totally empty.

Even better:

    this.element.execCommand(&quot;DeleteToBeginningOfLine&quot;)

But looking at it, I don&apos;t think DeleteToBeginningOfLine is allowed from execCommand! Maybe we can change it to be &quot;supported&quot; not just &quot;supportedFromMenuOrKeyBinding&quot;?

http://trac.webkit.org/browser/trunk/WebCore/editing/EditorCommand.cpp#L1313

&gt; +            selectionRange.setStart(this.element.firstChild, firstNewlineIndex);
&gt; +            selectionRange.setEnd(this.element.firstChild, firstNewlineIndex);

Is it true the first child is always a text node that contains this index?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165685</commentid>
    <comment_count>12</comment_count>
      <attachid>43669</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 19:33:13 -0800</bug_when>
    <thetext>Created attachment 43669
[PATCH] Ctrl+P, Ctrl+N, and Arrow Keys

Removed Ctrl+U based on chat in IRC, because It should act like Ctrl+K and put the content into the Kill Ring (usable with Ctrl+Y), but we cannot do that and it may be confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165686</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 19:40:26 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/51291
r51291 = 5e12adf30e89cc9f952fb8cd7b39a16731aadb2b

I will look into this.element.execCommand(&quot;DeleteToBeginningOfLine&quot;) when I find time. I&apos;ll close this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43644</attachid>
            <date>2009-11-20 23:01:22 -0800</date>
            <delta_ts>2009-11-21 07:26:13 -0800</delta_ts>
            <desc>[PATCH] Ctrl+P, Ctrl+N, Ctrl+U for Macs Only</desc>
            <filename>readline.patch</filename>
            <type>text/plain</type>
            <size>5314</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTE4YzVlOS4uMzQ3ZDAyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0xMS0yMCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN1cHBvcnQgQ3RybCtQLCBDdHJsK04s
IGFuZCBvdGhlciBSZWFkbGluZSBrZXlib2FyZCBzaG9ydGN1dHMgaW4gdGhlIENvbnNvbGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDAwCisKKyAg
ICAgICAgSGFuZGxlIHRoZSBmb2xsb3dpbmcgd2hlbiBvbiBhIE1hYzoKKworICAgICAgICAgIEN0
cmwrUCA9IFByZXZpb3VzIChsaWtlIFVwIGFycm93KQorICAgICAgICAgIEN0cmwrTiA9IE5leHQg
KGxpa2UgRG93biBhcnJvdykKKyAgICAgICAgICBDdHJsK1UgPSBEZWxldGUgVGV4dCBCZWZvcmUg
Q2FyZXQKKworICAgICAgICBBbHNvLCBubyBsb25nZXIgcmVydW4gYXV0b2NvbXBsZXRpb24gd2hl
biBqdXN0IHB1c2hpbmcgYSBtb2RpZmllciBrZXkKKyAgICAgICAgbGlrZSBDb250cm9sLCBBbHQs
IFNoaWZ0LCBvciBNZXRhLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJv
bXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmhhbmRs
ZUtleUV2ZW50KTogaGFuZGxlIG5ldyBrZXlib2FyZCBzaG9ydGN1dHMKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5jbGVhckJlZm9yZUNhcmV0KTogcmVtb3ZlIHRl
eHQgYmVmb3JlIHRoZSBjYXJldCBwb3NpdGlvbgorCiAyMDA5LTExLTIwICBDaHJpcyBGbGVpemFj
aCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtp
bi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0Lmpz
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKaW5kZXggZjczYWIw
ZC4uYTRmNzAzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQ
cm9tcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMK
QEAgLTcwLDYgKzcwLDMxIEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWNjZXB0QXV0b0NvbXBsZXRlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU29vbigpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAiQWx0IjoKKyAgICAgICAgICAgIGNhc2UgIk1ldGEiOgor
ICAgICAgICAgICAgY2FzZSAiU2hpZnQiOgorICAgICAgICAgICAgY2FzZSAiQ29udHJvbCI6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJVKzAwNTAiOiAvLyBDdHJs
K1AgPSBQcmV2aW91cworICAgICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSAm
JiBldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2
ZW50LnNoaWZ0S2V5KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwS2V5UHJlc3NlZChl
dmVudCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdAorICAgICAgICAgICAgY2Fz
ZSAiVSswMDRFIjogLy8gQ3RybCtOID0gTmV4dAorICAgICAgICAgICAgICAgIGlmIChXZWJJbnNw
ZWN0b3IuaXNNYWMoKSAmJiBldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVu
dC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2Rvd25LZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0
CisgICAgICAgICAgICBjYXNlICJVKzAwNTUiOiAvLyBDdHJsK1UgPSBDbGVhciBCZWZvcmUgQ2Fy
ZXQKKyAgICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFjKCkgJiYgZXZlbnQuY3Ry
bEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtl
eSkgeworICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAg
ICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jbGVhckJlZm9yZUNhcmV0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gZGVm
YXVsdAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQXV0
b0NvbXBsZXRlKCk7CiAgICAgICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVTb29uKCk7CkBA
IC0xMTgsNyArMTQzLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewog
ICAgICAgICB0aGlzLl91c2VyRW50ZXJlZFJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7CiAKICAgICAg
ICAgdmFyIHVzZXJUZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX3VzZXJF
bnRlcmVkVGV4dCk7Ci0gICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1
c2VyVGV4dE5vZGUpOyAgICAgICAgICAgCisgICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2Uu
aW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOwogCiAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9
IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgIHNlbGVjdGlvblJhbmdlLnNldFN0YXJ0
KHVzZXJUZXh0Tm9kZSwgdGhpcy5fdXNlckVudGVyZWRUZXh0Lmxlbmd0aCk7CkBAIC0xMzIsNiAr
MTU3LDM1IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
ZGVsZXRlIHRoaXMuX3VzZXJFbnRlcmVkVGV4dDsKICAgICB9LAogCisgICAgY2xlYXJCZWZvcmVD
YXJldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05v
ZGU7CisgICAgICAgIGlmICghZm9jdXNOb2RlIHx8IGZvY3VzTm9kZS5wYXJlbnROb2RlICE9PSB0
aGlzLmVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5jbGVhckF1
dG9Db21wbGV0ZSh0cnVlKTsKKyAgICAgICAgaWYgKHRoaXMuaXNDYXJldEF0RW5kT2ZQcm9tcHQo
KSkgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIi
KSk7CisgICAgICAgICAgICB0aGlzLm1vdmVDYXJldFRvRW5kT2ZQcm9tcHQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChmb2N1c05vZGUucHJldmlv
dXNTaWJsaW5nKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKGZvY3VzTm9k
ZS5wcmV2aW91c1NpYmxpbmcpOworICAgICAgICBmb2N1c05vZGUudGV4dENvbnRlbnQgPSBmb2N1
c05vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKHNlbGVjdGlvbi5mb2N1c09mZnNldCk7CisgICAg
ICAgIGlmICh0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKQorICAgICAgICAg
ICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikp
OworCisgICAgICAgIHZhciBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAg
ICAgIG5ld1JhbmdlLnNldFN0YXJ0KGZvY3VzTm9kZSwgMCk7CisgICAgICAgIG5ld1JhbmdlLnNl
dEVuZChmb2N1c05vZGUsIDApOworCisgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMo
KTsKKyAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTsKKyAgICB9LAorCiAgICAg
YXV0b0NvbXBsZXRlU29vbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKCEoIl9jb21w
bGV0ZVRpbWVvdXQiIGluIHRoaXMpKQpAQCAtMTk5LDcgKzI1Myw3IEBAIFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciBzdWZmaXhUZXh0ID0gY29t
cGxldGlvblRleHQuc3Vic3RyaW5nKHdvcmRQcmVmaXhMZW5ndGgpOwogCiAgICAgICAgICAgICB2
YXIgcHJlZml4VGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwcmVmaXhUZXh0KTsK
LSAgICAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0Tm9kZShwcmVmaXhUZXh0Tm9kZSk7ICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0Tm9kZShwcmVmaXhUZXh0
Tm9kZSk7CiAKICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlRWxl
bWVudC5jbGFzc05hbWUgPSAiYXV0by1jb21wbGV0ZS10ZXh0IjsKQEAgLTIxMSw3ICsyNjUsNyBA
QCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBmaW5h
bFNlbGVjdGlvblJhbmdlLnNldEVuZChwcmVmaXhUZXh0Tm9kZSwgd29yZFByZWZpeExlbmd0aCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB2YXIgY29tcGxldGlvblRleHROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29tcGxldGlvblRleHQpOwotICAgICAgICAgICAgZnVs
bFdvcmRSYW5nZS5pbnNlcnROb2RlKGNvbXBsZXRpb25UZXh0Tm9kZSk7ICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0Tm9kZShjb21wbGV0aW9uVGV4dE5vZGUpOwog
CiAgICAgICAgICAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID4gMSkKICAgICAgICAgICAgICAg
ICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KGNvbXBsZXRpb25UZXh0Tm9kZSwgd29yZFBy
ZWZpeExlbmd0aCk7Cg==
</data>
<flag name="review"
          id="25389"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43648</attachid>
            <date>2009-11-21 07:26:13 -0800</date>
            <delta_ts>2009-11-21 09:01:27 -0800</delta_ts>
            <desc>[PATCH] Ctrl+P, Ctrl+N, Ctrl+U for Macs Only</desc>
            <filename>readline.patch</filename>
            <type>text/plain</type>
            <size>5815</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTE4YzVlOS4uMzQ3ZDAyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0xMS0yMCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN1cHBvcnQgQ3RybCtQLCBDdHJsK04s
IGFuZCBvdGhlciBSZWFkbGluZSBrZXlib2FyZCBzaG9ydGN1dHMgaW4gdGhlIENvbnNvbGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDAwCisKKyAg
ICAgICAgSGFuZGxlIHRoZSBmb2xsb3dpbmcgd2hlbiBvbiBhIE1hYzoKKworICAgICAgICAgIEN0
cmwrUCA9IFByZXZpb3VzIChsaWtlIFVwIGFycm93KQorICAgICAgICAgIEN0cmwrTiA9IE5leHQg
KGxpa2UgRG93biBhcnJvdykKKyAgICAgICAgICBDdHJsK1UgPSBEZWxldGUgVGV4dCBCZWZvcmUg
Q2FyZXQKKworICAgICAgICBBbHNvLCBubyBsb25nZXIgcmVydW4gYXV0b2NvbXBsZXRpb24gd2hl
biBqdXN0IHB1c2hpbmcgYSBtb2RpZmllciBrZXkKKyAgICAgICAgbGlrZSBDb250cm9sLCBBbHQs
IFNoaWZ0LCBvciBNZXRhLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJv
bXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmhhbmRs
ZUtleUV2ZW50KTogaGFuZGxlIG5ldyBrZXlib2FyZCBzaG9ydGN1dHMKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5jbGVhckJlZm9yZUNhcmV0KTogcmVtb3ZlIHRl
eHQgYmVmb3JlIHRoZSBjYXJldCBwb3NpdGlvbgorCiAyMDA5LTExLTIwICBDaHJpcyBGbGVpemFj
aCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtp
bi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0Lmpz
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKaW5kZXggZjczYWIw
ZC4uOTRmMmZlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQ
cm9tcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMK
QEAgLTU1LDYgKzU1LDEyIEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsK
IAogICAgIGhhbmRsZUtleUV2ZW50OiBmdW5jdGlvbihldmVudCkKICAgICB7CisgICAgICAgIGZ1
bmN0aW9uIGRlZmF1bHRBY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmNsZWFy
QXV0b0NvbXBsZXRlKCk7CisgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVNvb24oKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2V5SWRlbnRpZmllcikgewogICAgICAg
ICAgICAgY2FzZSAiVXAiOgogICAgICAgICAgICAgICAgIHRoaXMuX3VwS2V5UHJlc3NlZChldmVu
dCk7CkBAIC03MCw5ICs3NiwzNiBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFjY2VwdEF1dG9Db21wbGV0ZSgpKQogICAg
ICAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVNvb24oKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIkFsdCI6CisgICAgICAgICAgICBjYXNlICJNZXRh
IjoKKyAgICAgICAgICAgIGNhc2UgIlNoaWZ0IjoKKyAgICAgICAgICAgIGNhc2UgIkNvbnRyb2wi
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiVSswMDUwIjogLy8g
Q3RybCtQID0gUHJldmlvdXMKKyAgICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFj
KCkgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYm
ICFldmVudC5zaGlmdEtleSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl91cEtleVByZXNz
ZWQoZXZlbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbi5jYWxsKHRoaXMpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiVSswMDRFIjogLy8gQ3RybCtOID0gTmV4dAor
ICAgICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSAmJiBldmVudC5jdHJsS2V5
ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rvd25LZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgIlUrMDA1NSI6IC8vIEN0cmwrVSA9IENsZWFyIEJlZm9yZSBDYXJldAorICAg
ICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSAmJiBldmVudC5jdHJsS2V5ICYm
ICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgICAgICAgICB0aGlz
LmNsZWFyQmVmb3JlQ2FyZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuYXV0b0Nv
bXBsZXRlU29vbigpOworICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0sCkBAIC0xMTgsNyArMTUx
LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
Ll91c2VyRW50ZXJlZFJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7CiAKICAgICAgICAgdmFyIHVzZXJU
ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX3VzZXJFbnRlcmVkVGV4dCk7
Ci0gICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUp
OyAgICAgICAgICAgCisgICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1
c2VyVGV4dE5vZGUpOwogCiAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNy
ZWF0ZVJhbmdlKCk7CiAgICAgICAgIHNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHVzZXJUZXh0Tm9k
ZSwgdGhpcy5fdXNlckVudGVyZWRUZXh0Lmxlbmd0aCk7CkBAIC0xMzIsNiArMTY1LDM1IEBAIFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRlIHRoaXMu
X3VzZXJFbnRlcmVkVGV4dDsKICAgICB9LAogCisgICAgY2xlYXJCZWZvcmVDYXJldDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24o
KTsKKyAgICAgICAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7CisgICAgICAg
IGlmICghZm9jdXNOb2RlIHx8IGZvY3VzTm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0
cnVlKTsKKyAgICAgICAgaWYgKHRoaXMuaXNDYXJldEF0RW5kT2ZQcm9tcHQoKSkgeworICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICB0aGlzLmVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CisgICAgICAg
ICAgICB0aGlzLm1vdmVDYXJldFRvRW5kT2ZQcm9tcHQoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChmb2N1c05vZGUucHJldmlvdXNTaWJsaW5nKQor
ICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKGZvY3VzTm9kZS5wcmV2aW91c1Np
YmxpbmcpOworICAgICAgICBmb2N1c05vZGUudGV4dENvbnRlbnQgPSBmb2N1c05vZGUudGV4dENv
bnRlbnQuc3Vic3RyaW5nKHNlbGVjdGlvbi5mb2N1c09mZnNldCk7CisgICAgICAgIGlmICh0aGlz
LmVsZW1lbnQudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgdGhpcy5lbGVt
ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworCisgICAgICAg
IHZhciBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICAgIG5ld1Jhbmdl
LnNldFN0YXJ0KGZvY3VzTm9kZSwgMCk7CisgICAgICAgIG5ld1JhbmdlLnNldEVuZChmb2N1c05v
ZGUsIDApOworCisgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAg
c2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTsKKyAgICB9LAorCiAgICAgYXV0b0NvbXBsZXRl
U29vbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKCEoIl9jb21wbGV0ZVRpbWVvdXQi
IGluIHRoaXMpKQpAQCAtMTk5LDcgKzI2MSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciBzdWZmaXhUZXh0ID0gY29tcGxldGlvblRleHQu
c3Vic3RyaW5nKHdvcmRQcmVmaXhMZW5ndGgpOwogCiAgICAgICAgICAgICB2YXIgcHJlZml4VGV4
dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwcmVmaXhUZXh0KTsKLSAgICAgICAgICAg
IGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0Tm9kZShwcmVmaXhUZXh0Tm9kZSk7ICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0Tm9kZShwcmVmaXhUZXh0Tm9kZSk7CiAKICAg
ICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudC5jbGFzc05h
bWUgPSAiYXV0by1jb21wbGV0ZS10ZXh0IjsKQEAgLTIxMSw3ICsyNzMsNyBAQCBXZWJJbnNwZWN0
b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBmaW5hbFNlbGVjdGlvblJh
bmdlLnNldEVuZChwcmVmaXhUZXh0Tm9kZSwgd29yZFByZWZpeExlbmd0aCk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICB2YXIgY29tcGxldGlvblRleHROb2RlID0gZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoY29tcGxldGlvblRleHQpOwotICAgICAgICAgICAgZnVsbFdvcmRSYW5nZS5p
bnNlcnROb2RlKGNvbXBsZXRpb25UZXh0Tm9kZSk7ICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1
bGxXb3JkUmFuZ2UuaW5zZXJ0Tm9kZShjb21wbGV0aW9uVGV4dE5vZGUpOwogCiAgICAgICAgICAg
ICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID4gMSkKICAgICAgICAgICAgICAgICBmaW5hbFNlbGVj
dGlvblJhbmdlLnNldFN0YXJ0KGNvbXBsZXRpb25UZXh0Tm9kZSwgd29yZFByZWZpeExlbmd0aCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43651</attachid>
            <date>2009-11-21 09:01:27 -0800</date>
            <delta_ts>2009-11-21 09:16:34 -0800</delta_ts>
            <desc>[PATCH] Ctrl+P, Ctrl+N, Ctrl+U, Arrow Keys</desc>
            <filename>readline.patch</filename>
            <type>text/plain</type>
            <size>11229</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTE4YzVlOS4uODI4YTlhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0xMS0yMCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN1cHBvcnQgQ3RybCtQLCBDdHJsK04s
IGFuZCBvdGhlciBSZWFkbGluZSBrZXlib2FyZCBzaG9ydGN1dHMgaW4gdGhlIENvbnNvbGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDAwCisKKyAg
ICAgICAgSGFuZGxlIHRoZSBmb2xsb3dpbmcgd2hlbiBvbiBhIE1hYzoKKworICAgICAgICAgIEN0
cmwrUCA9IFByZXZpb3VzIChsaWtlIFVwIGFycm93KQorICAgICAgICAgIEN0cmwrTiA9IE5leHQg
KGxpa2UgRG93biBhcnJvdykKKyAgICAgICAgICBDdHJsK1UgPSBEZWxldGUgVGV4dCBCZWZvcmUg
Q2FyZXQKKworICAgICAgICBObyBsb25nZXIgcmVydW4gYXV0b2NvbXBsZXRpb24gd2hlbiBqdXN0
IHB1c2hpbmcgYSBtb2RpZmllciBrZXkKKyAgICAgICAgbGlrZSBDb250cm9sLCBBbHQsIFNoaWZ0
LCBvciBNZXRhLgorCisgICAgICAgIEltcHJvdmVkIGFycm93IGtleSBiZWhhdmlvciB3aXRoIE11
bHRpbGluZSBjb2RlIGluIHRoZSBDb25zb2xlLCB3aXRoIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3I6
CisKKyAgICAgICAgICBVcCAgID0gUHJldmlvdXMgQ29tbWFuZCBpZiBvbiBGaXJzdCBMaW5lIChj
YXJldCBtb3ZlcyB0byB0aGUgZW5kIG9mIHRoZSBmaXJzdCBsaW5lKQorICAgICAgICAgICAgICAg
ICBvdGhlcndpc2UgZGVmYXVsdCBjYXJldCBtb3ZlbWVudCBpbiB0ZXh0LgorICAgICAgICAgIERv
d24gPSBOZXh0IENvbW1hbmQgaWYgb24gTGFzdCBMaW5lIChjYXJldCBuYXR1cmFsbHkgbW92ZXMg
dG8gdGhlIGVuZCkKKyAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGRlZmF1bHQgY2FyZXQgbW92
ZW1lbnQgaW4gdGV4dC4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21w
dC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5oYW5kbGVL
ZXlFdmVudCk6IGhhbmRsZSBuZXcga2V5Ym9hcmQgc2hvcnRjdXRzCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuY2xlYXJCZWZvcmVDYXJldCk6IHJlbW92ZSB0ZXh0
IGJlZm9yZSB0aGUgY2FyZXQgcG9zaXRpb24KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LnByb3RvdHlwZS5pc0NhcmV0T25GaXJzdExpbmUpOiBjaGVjayBpZiB0aGUgY2FyZXQgaXMg
b24gdGhlIHRvcCBsaW5lCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5
cGUuaXNDYXJldE9uTGFzdExpbmUpOiBjaGVjayBpZiB0aGUgY2FyZXQgaXMgb24gdGhlIGJvdHRv
bSBsaW5lCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX3VwS2V5
UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2Rv
d25LZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlw
ZS5fbW92ZUJhY2tJbkhpc3RvcnkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQu
cHJvdG90eXBlLl9tb3ZlRm9yd2FyZEluSGlzdG9yeSk6CisKIDIwMDktMTEtMjAgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRo
IERha2luLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9t
cHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcwppbmRleCBm
NzNhYjBkLi5jMzYxYjRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VGV4dFByb21wdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21w
dC5qcwpAQCAtNTUsNiArNTUsMTMgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBl
ID0gewogCiAgICAgaGFuZGxlS2V5RXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKKyAgICAg
ICAgZnVuY3Rpb24gZGVmYXVsdEFjdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMu
Y2xlYXJBdXRvQ29tcGxldGUoKTsKKyAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU29vbigp
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTsKICAgICAgICAgc3dp
dGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBjYXNlICJVcCI6CiAgICAg
ICAgICAgICAgICAgdGhpcy5fdXBLZXlQcmVzc2VkKGV2ZW50KTsKQEAgLTcwLDExICs3Nyw0NCBA
QCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmFjY2VwdEF1dG9Db21wbGV0ZSgpKQogICAgICAgICAgICAgICAgICAgICB0aGlz
LmF1dG9Db21wbGV0ZVNvb24oKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgIkFsdCI6CisgICAgICAgICAgICBjYXNlICJNZXRhIjoKKyAgICAgICAgICAgIGNhc2Ug
IlNoaWZ0IjoKKyAgICAgICAgICAgIGNhc2UgIkNvbnRyb2wiOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAiVSswMDUwIjogLy8gQ3RybCtQID0gUHJldmlvdXMKKyAg
ICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFjKCkgJiYgZXZlbnQuY3RybEtleSAm
JiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtleSkgewor
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fbW92ZUJhY2tJbkhpc3RvcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlz
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIlUrMDA0RSI6IC8v
IEN0cmwrTiA9IE5leHQKKyAgICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFjKCkg
JiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFl
dmVudC5zaGlmdEtleSkgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmRJbkhpc3RvcnkoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRl
ZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgIlUrMDA1NSI6IC8vIEN0cmwrVSA9IENsZWFyIEJlZm9yZSBDYXJldAorICAgICAg
ICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSAmJiBldmVudC5jdHJsS2V5ICYmICFl
dmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7CisgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlz
LmNsZWFyQmVmb3JlQ2FyZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuYXV0b0Nv
bXBsZXRlU29vbigpOworICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGlmIChoYW5kbGVk
KSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZXZl
bnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KICAgICB9LAogCiAgICAgYWNjZXB0QXV0
b0NvbXBsZXRlOiBmdW5jdGlvbigpCkBAIC0xMTgsNyArMTU4LDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl91c2VyRW50ZXJlZFJhbmdlLmRl
bGV0ZUNvbnRlbnRzKCk7CiAKICAgICAgICAgdmFyIHVzZXJUZXh0Tm9kZSA9IGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHRoaXMuX3VzZXJFbnRlcmVkVGV4dCk7Ci0gICAgICAgIHRoaXMuX3VzZXJF
bnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOyAgICAgICAgICAgCisgICAgICAg
IHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOwogCiAgICAg
ICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAg
IHNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHVzZXJUZXh0Tm9kZSwgdGhpcy5fdXNlckVudGVyZWRU
ZXh0Lmxlbmd0aCk7CkBAIC0xMzIsNiArMTcyLDM1IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRlIHRoaXMuX3VzZXJFbnRlcmVkVGV4dDsKICAg
ICB9LAogCisgICAgY2xlYXJCZWZvcmVDYXJldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIGZvY3Vz
Tm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7CisgICAgICAgIGlmICghZm9jdXNOb2RlIHx8IGZv
Y3VzTm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKKyAgICAgICAgaWYgKHRo
aXMuaXNDYXJldEF0RW5kT2ZQcm9tcHQoKSkgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJl
bW92ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CisgICAgICAgICAgICB0aGlzLm1vdmVDYXJldFRv
RW5kT2ZQcm9tcHQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHdoaWxlIChmb2N1c05vZGUucHJldmlvdXNTaWJsaW5nKQorICAgICAgICAgICAgdGhpcy5lbGVt
ZW50LnJlbW92ZUNoaWxkKGZvY3VzTm9kZS5wcmV2aW91c1NpYmxpbmcpOworICAgICAgICBmb2N1
c05vZGUudGV4dENvbnRlbnQgPSBmb2N1c05vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKHNlbGVj
dGlvbi5mb2N1c09mZnNldCk7CisgICAgICAgIGlmICh0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQu
bGVuZ3RoID09PSAwKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworCisgICAgICAgIHZhciBuZXdSYW5nZSA9IGRvY3Vt
ZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KGZvY3VzTm9kZSwg
MCk7CisgICAgICAgIG5ld1JhbmdlLnNldEVuZChmb2N1c05vZGUsIDApOworCisgICAgICAgIHNl
bGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5l
d1JhbmdlKTsKKyAgICB9LAorCiAgICAgYXV0b0NvbXBsZXRlU29vbjogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgaWYgKCEoIl9jb21wbGV0ZVRpbWVvdXQiIGluIHRoaXMpKQpAQCAtMTc0LDEw
ICsyNDMsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICB2YXIgY3VycmVudFRleHQgPSBmdWxsV29yZFJhbmdlLnRvU3RyaW5nKCk7CiAKICAgICAg
ICAgICAgIHZhciBmb3VuZEluZGV4ID0gbnVsbDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgaWYgKGNv
bXBsZXRpb25zW2ldID09PSBjdXJyZW50VGV4dCkKICAgICAgICAgICAgICAgICAgICAgZm91bmRJ
bmRleCA9IGk7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ID09
PSBudWxsIHx8IChmb3VuZEluZGV4ICsgMSkgPj0gY29tcGxldGlvbnMubGVuZ3RoKQogICAgICAg
ICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zWzBdOwpAQCAtMTk5LDcg
KzI2Nyw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHZhciBzdWZmaXhUZXh0ID0gY29tcGxldGlvblRleHQuc3Vic3RyaW5nKHdvcmRQcmVmaXhM
ZW5ndGgpOwogCiAgICAgICAgICAgICB2YXIgcHJlZml4VGV4dE5vZGUgPSBkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShwcmVmaXhUZXh0KTsKLSAgICAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0
Tm9kZShwcmVmaXhUZXh0Tm9kZSk7ICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bGxXb3JkUmFu
Z2UuaW5zZXJ0Tm9kZShwcmVmaXhUZXh0Tm9kZSk7CiAKICAgICAgICAgICAgIHRoaXMuYXV0b0Nv
bXBsZXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAg
ICAgIHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudC5jbGFzc05hbWUgPSAiYXV0by1jb21wbGV0ZS10
ZXh0IjsKQEAgLTIxMSw3ICsyNzksNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldEVuZChwcmVmaXhUZXh0
Tm9kZSwgd29yZFByZWZpeExlbmd0aCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB2
YXIgY29tcGxldGlvblRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29tcGxldGlv
blRleHQpOwotICAgICAgICAgICAgZnVsbFdvcmRSYW5nZS5pbnNlcnROb2RlKGNvbXBsZXRpb25U
ZXh0Tm9kZSk7ICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0Tm9k
ZShjb21wbGV0aW9uVGV4dE5vZGUpOwogCiAgICAgICAgICAgICBpZiAoY29tcGxldGlvbnMubGVu
Z3RoID4gMSkKICAgICAgICAgICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KGNv
bXBsZXRpb25UZXh0Tm9kZSwgd29yZFByZWZpeExlbmd0aCk7CkBAIC0yNTgsNiArMzI2LDUwIEBA
IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSwKIAorICAgIGlzQ2FyZXRPbkZpcnN0TGluZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAg
dmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7CisgICAgICAgIGlmICghZm9jdXNO
b2RlIHx8IGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgfHwgZm9jdXNOb2Rl
LnBhcmVudE5vZGUgIT09IHRoaXMuZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGlmIChmb2N1c05vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlv
bi5mb2N1c09mZnNldCkuaW5kZXhPZigiXG4iKSAhPT0gLTEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5wcmV2aW91c1NpYmxpbmc7CisK
KyAgICAgICAgd2hpbGUgKGZvY3VzTm9kZSkgeworICAgICAgICAgICAgaWYgKGZvY3VzTm9kZS5u
b2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBpZiAoZm9jdXNOb2RlLnRleHRDb250ZW50LmluZGV4T2YoIlxuIikgIT09
IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvY3VzTm9k
ZSA9IGZvY3VzTm9kZS5wcmV2aW91c1NpYmxpbmc7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgaXNDYXJldE9uTGFzdExpbmU6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAg
ICAgIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlOworICAgICAgICBpZiAoIWZv
Y3VzTm9kZSB8fCBmb2N1c05vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFIHx8IGZvY3Vz
Tm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICBpZiAoZm9jdXNOb2RlLnRleHRDb250ZW50LnN1YnN0cmluZyhzZWxlY3Rp
b24uZm9jdXNPZmZzZXQrMSkuaW5kZXhPZigiXG4iKSAhPT0gLTEpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5uZXh0U2libGluZzsKKwor
ICAgICAgICB3aGlsZSAoZm9jdXNOb2RlKSB7CisgICAgICAgICAgICBpZiAoZm9jdXNOb2RlLm5v
ZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIGlmIChmb2N1c05vZGUudGV4dENvbnRlbnQuaW5kZXhPZigiXG4iKSAhPT0g
LTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm9jdXNOb2Rl
ID0gZm9jdXNOb2RlLm5leHRTaWJsaW5nOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSwKKwogICAgIG1vdmVDYXJldFRvRW5kT2ZQcm9tcHQ6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CkBAIC0y
ODEsMzkgKzM5Myw3MSBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAK
ICAgICBfdXBLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7CisgICAgICAgIGlmICgh
dGhpcy5pc0NhcmV0T25GaXJzdExpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24o
KTsKKworICAgICAgICB0aGlzLl9tb3ZlQmFja0luSGlzdG9yeSgpOworICAgIH0sCisKKyAgICBf
ZG93bktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
LmlzQ2FyZXRPbkxhc3RMaW5lKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAK
KyAgICAgICAgdGhpcy5fbW92ZUZvcndhcmRJbkhpc3RvcnkoKTsKKyAgICB9LAorCisgICAgX21v
dmVCYWNrSW5IaXN0b3J5OiBmdW5jdGlvbigpCisgICAgewogICAgICAgICBpZiAodGhpcy5oaXN0
b3J5T2Zmc2V0ID09IHRoaXMuaGlzdG9yeS5sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKIAotICAgICAgICBpZiAodGhp
cy5oaXN0b3J5T2Zmc2V0ID09IDApCisgICAgICAgIGlmICh0aGlzLmhpc3RvcnlPZmZzZXQgPT09
IDApCiAgICAgICAgICAgICB0aGlzLnRlbXBTYXZlZENvbW1hbmQgPSB0aGlzLnRleHQ7CiAKICAg
ICAgICAgKyt0aGlzLmhpc3RvcnlPZmZzZXQ7CiAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMuaGlz
dG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gdGhpcy5oaXN0b3J5T2Zmc2V0XTsKKworICAgICAg
ICB0aGlzLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOworICAgICAgICB2YXIgZmly
c3ROZXdsaW5lSW5kZXggPSB0aGlzLnRleHQuaW5kZXhPZigiXG4iKTsKKyAgICAgICAgaWYgKGZp
cnN0TmV3bGluZUluZGV4ID09PSAtMSkKKyAgICAgICAgICAgIHRoaXMubW92ZUNhcmV0VG9FbmRP
ZlByb21wdCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBk
b2N1bWVudC5jcmVhdGVSYW5nZSgpOworCisgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRT
dGFydCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCwgZmlyc3ROZXdsaW5lSW5kZXgpOworICAgICAg
ICAgICAgc2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKHRoaXMuZWxlbWVudC5maXJzdENoaWxkLCBmaXJz
dE5ld2xpbmVJbmRleCk7CisKKyAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMo
KTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShzZWxlY3Rpb25SYW5nZSk7CisgICAg
ICAgIH0KICAgICB9LAogCi0gICAgX2Rvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKKyAg
ICBfbW92ZUZvcndhcmRJbkhpc3Rvcnk6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotCi0g
ICAgICAgIGlmICh0aGlzLmhpc3RvcnlPZmZzZXQgPT0gMCkKKyAgICAgICAgaWYgKHRoaXMuaGlz
dG9yeU9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLmNs
ZWFyQXV0b0NvbXBsZXRlKHRydWUpOwogCiAgICAgICAgIC0tdGhpcy5oaXN0b3J5T2Zmc2V0Owog
Ci0gICAgICAgIGlmICh0aGlzLmhpc3RvcnlPZmZzZXQgPT0gMCkgeworICAgICAgICBpZiAodGhp
cy5oaXN0b3J5T2Zmc2V0ID09PSAwKSB7CiAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnRl
bXBTYXZlZENvbW1hbmQ7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy50ZW1wU2F2ZWRDb21tYW5k
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy50ZXh0ID0g
dGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGggLSB0aGlzLmhpc3RvcnlPZmZzZXRdOwor
ICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43652</attachid>
            <date>2009-11-21 09:16:34 -0800</date>
            <delta_ts>2009-11-21 19:33:13 -0800</delta_ts>
            <desc>[PATCH] Ctrl+P, Ctrl+N, Ctrl+U, Arrow Keys</desc>
            <filename>readline.patch</filename>
            <type>text/plain</type>
            <size>11227</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTE4YzVlOS4uODI4YTlhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0xMS0yMCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN1cHBvcnQgQ3RybCtQLCBDdHJsK04s
IGFuZCBvdGhlciBSZWFkbGluZSBrZXlib2FyZCBzaG9ydGN1dHMgaW4gdGhlIENvbnNvbGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDAwCisKKyAg
ICAgICAgSGFuZGxlIHRoZSBmb2xsb3dpbmcgd2hlbiBvbiBhIE1hYzoKKworICAgICAgICAgIEN0
cmwrUCA9IFByZXZpb3VzIChsaWtlIFVwIGFycm93KQorICAgICAgICAgIEN0cmwrTiA9IE5leHQg
KGxpa2UgRG93biBhcnJvdykKKyAgICAgICAgICBDdHJsK1UgPSBEZWxldGUgVGV4dCBCZWZvcmUg
Q2FyZXQKKworICAgICAgICBObyBsb25nZXIgcmVydW4gYXV0b2NvbXBsZXRpb24gd2hlbiBqdXN0
IHB1c2hpbmcgYSBtb2RpZmllciBrZXkKKyAgICAgICAgbGlrZSBDb250cm9sLCBBbHQsIFNoaWZ0
LCBvciBNZXRhLgorCisgICAgICAgIEltcHJvdmVkIGFycm93IGtleSBiZWhhdmlvciB3aXRoIE11
bHRpbGluZSBjb2RlIGluIHRoZSBDb25zb2xlLCB3aXRoIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3I6
CisKKyAgICAgICAgICBVcCAgID0gUHJldmlvdXMgQ29tbWFuZCBpZiBvbiBGaXJzdCBMaW5lIChj
YXJldCBtb3ZlcyB0byB0aGUgZW5kIG9mIHRoZSBmaXJzdCBsaW5lKQorICAgICAgICAgICAgICAg
ICBvdGhlcndpc2UgZGVmYXVsdCBjYXJldCBtb3ZlbWVudCBpbiB0ZXh0LgorICAgICAgICAgIERv
d24gPSBOZXh0IENvbW1hbmQgaWYgb24gTGFzdCBMaW5lIChjYXJldCBuYXR1cmFsbHkgbW92ZXMg
dG8gdGhlIGVuZCkKKyAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGRlZmF1bHQgY2FyZXQgbW92
ZW1lbnQgaW4gdGV4dC4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21w
dC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5oYW5kbGVL
ZXlFdmVudCk6IGhhbmRsZSBuZXcga2V5Ym9hcmQgc2hvcnRjdXRzCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuY2xlYXJCZWZvcmVDYXJldCk6IHJlbW92ZSB0ZXh0
IGJlZm9yZSB0aGUgY2FyZXQgcG9zaXRpb24KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LnByb3RvdHlwZS5pc0NhcmV0T25GaXJzdExpbmUpOiBjaGVjayBpZiB0aGUgY2FyZXQgaXMg
b24gdGhlIHRvcCBsaW5lCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5
cGUuaXNDYXJldE9uTGFzdExpbmUpOiBjaGVjayBpZiB0aGUgY2FyZXQgaXMgb24gdGhlIGJvdHRv
bSBsaW5lCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX3VwS2V5
UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2Rv
d25LZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlw
ZS5fbW92ZUJhY2tJbkhpc3RvcnkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQu
cHJvdG90eXBlLl9tb3ZlRm9yd2FyZEluSGlzdG9yeSk6CisKIDIwMDktMTEtMjAgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRo
IERha2luLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9t
cHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcwppbmRleCBm
NzNhYjBkLi44YTQ5MWU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VGV4dFByb21wdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21w
dC5qcwpAQCAtNTUsNiArNTUsMTMgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBl
ID0gewogCiAgICAgaGFuZGxlS2V5RXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKKyAgICAg
ICAgZnVuY3Rpb24gZGVmYXVsdEFjdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMu
Y2xlYXJBdXRvQ29tcGxldGUoKTsKKyAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU29vbigp
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTsKICAgICAgICAgc3dp
dGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBjYXNlICJVcCI6CiAgICAg
ICAgICAgICAgICAgdGhpcy5fdXBLZXlQcmVzc2VkKGV2ZW50KTsKQEAgLTcwLDExICs3Nyw0NCBA
QCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmFjY2VwdEF1dG9Db21wbGV0ZSgpKQogICAgICAgICAgICAgICAgICAgICB0aGlz
LmF1dG9Db21wbGV0ZVNvb24oKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgIkFsdCI6CisgICAgICAgICAgICBjYXNlICJNZXRhIjoKKyAgICAgICAgICAgIGNhc2Ug
IlNoaWZ0IjoKKyAgICAgICAgICAgIGNhc2UgIkNvbnRyb2wiOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAiVSswMDUwIjogLy8gQ3RybCtQID0gUHJldmlvdXMKKyAg
ICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFjKCkgJiYgZXZlbnQuY3RybEtleSAm
JiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtleSkgewor
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fbW92ZUJhY2tJbkhpc3RvcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlz
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIlUrMDA0RSI6IC8v
IEN0cmwrTiA9IE5leHQKKyAgICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFjKCkg
JiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFl
dmVudC5zaGlmdEtleSkgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmRJbkhpc3RvcnkoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRl
ZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgIlUrMDA1NSI6IC8vIEN0cmwrVSA9IENsZWFyIEJlZm9yZSBDYXJldAorICAgICAg
ICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSAmJiBldmVudC5jdHJsS2V5ICYmICFl
dmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7CisgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlz
LmNsZWFyQmVmb3JlQ2FyZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuYXV0b0Nv
bXBsZXRlU29vbigpOworICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGlmIChoYW5kbGVk
KSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZXZl
bnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KICAgICB9LAogCiAgICAgYWNjZXB0QXV0
b0NvbXBsZXRlOiBmdW5jdGlvbigpCkBAIC0xMTgsNyArMTU4LDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl91c2VyRW50ZXJlZFJhbmdlLmRl
bGV0ZUNvbnRlbnRzKCk7CiAKICAgICAgICAgdmFyIHVzZXJUZXh0Tm9kZSA9IGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHRoaXMuX3VzZXJFbnRlcmVkVGV4dCk7Ci0gICAgICAgIHRoaXMuX3VzZXJF
bnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOyAgICAgICAgICAgCisgICAgICAg
IHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOwogCiAgICAg
ICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAg
IHNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHVzZXJUZXh0Tm9kZSwgdGhpcy5fdXNlckVudGVyZWRU
ZXh0Lmxlbmd0aCk7CkBAIC0xMzIsNiArMTcyLDM1IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRlIHRoaXMuX3VzZXJFbnRlcmVkVGV4dDsKICAg
ICB9LAogCisgICAgY2xlYXJCZWZvcmVDYXJldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIGZvY3Vz
Tm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7CisgICAgICAgIGlmICghZm9jdXNOb2RlIHx8IGZv
Y3VzTm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKKyAgICAgICAgaWYgKHRo
aXMuaXNDYXJldEF0RW5kT2ZQcm9tcHQoKSkgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJl
bW92ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CisgICAgICAgICAgICB0aGlzLm1vdmVDYXJldFRv
RW5kT2ZQcm9tcHQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHdoaWxlIChmb2N1c05vZGUucHJldmlvdXNTaWJsaW5nKQorICAgICAgICAgICAgdGhpcy5lbGVt
ZW50LnJlbW92ZUNoaWxkKGZvY3VzTm9kZS5wcmV2aW91c1NpYmxpbmcpOworICAgICAgICBmb2N1
c05vZGUudGV4dENvbnRlbnQgPSBmb2N1c05vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKHNlbGVj
dGlvbi5mb2N1c09mZnNldCk7CisgICAgICAgIGlmICh0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQu
bGVuZ3RoID09PSAwKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworCisgICAgICAgIHZhciBuZXdSYW5nZSA9IGRvY3Vt
ZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KGZvY3VzTm9kZSwg
MCk7CisgICAgICAgIG5ld1JhbmdlLnNldEVuZChmb2N1c05vZGUsIDApOworCisgICAgICAgIHNl
bGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5l
d1JhbmdlKTsKKyAgICB9LAorCiAgICAgYXV0b0NvbXBsZXRlU29vbjogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgaWYgKCEoIl9jb21wbGV0ZVRpbWVvdXQiIGluIHRoaXMpKQpAQCAtMTc0LDEw
ICsyNDMsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICB2YXIgY3VycmVudFRleHQgPSBmdWxsV29yZFJhbmdlLnRvU3RyaW5nKCk7CiAKICAgICAg
ICAgICAgIHZhciBmb3VuZEluZGV4ID0gbnVsbDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgaWYgKGNv
bXBsZXRpb25zW2ldID09PSBjdXJyZW50VGV4dCkKICAgICAgICAgICAgICAgICAgICAgZm91bmRJ
bmRleCA9IGk7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ID09
PSBudWxsIHx8IChmb3VuZEluZGV4ICsgMSkgPj0gY29tcGxldGlvbnMubGVuZ3RoKQogICAgICAg
ICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zWzBdOwpAQCAtMTk5LDcg
KzI2Nyw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHZhciBzdWZmaXhUZXh0ID0gY29tcGxldGlvblRleHQuc3Vic3RyaW5nKHdvcmRQcmVmaXhM
ZW5ndGgpOwogCiAgICAgICAgICAgICB2YXIgcHJlZml4VGV4dE5vZGUgPSBkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShwcmVmaXhUZXh0KTsKLSAgICAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0
Tm9kZShwcmVmaXhUZXh0Tm9kZSk7ICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bGxXb3JkUmFu
Z2UuaW5zZXJ0Tm9kZShwcmVmaXhUZXh0Tm9kZSk7CiAKICAgICAgICAgICAgIHRoaXMuYXV0b0Nv
bXBsZXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAg
ICAgIHRoaXMuYXV0b0NvbXBsZXRlRWxlbWVudC5jbGFzc05hbWUgPSAiYXV0by1jb21wbGV0ZS10
ZXh0IjsKQEAgLTIxMSw3ICsyNzksNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldEVuZChwcmVmaXhUZXh0
Tm9kZSwgd29yZFByZWZpeExlbmd0aCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB2
YXIgY29tcGxldGlvblRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29tcGxldGlv
blRleHQpOwotICAgICAgICAgICAgZnVsbFdvcmRSYW5nZS5pbnNlcnROb2RlKGNvbXBsZXRpb25U
ZXh0Tm9kZSk7ICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuaW5zZXJ0Tm9k
ZShjb21wbGV0aW9uVGV4dE5vZGUpOwogCiAgICAgICAgICAgICBpZiAoY29tcGxldGlvbnMubGVu
Z3RoID4gMSkKICAgICAgICAgICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KGNv
bXBsZXRpb25UZXh0Tm9kZSwgd29yZFByZWZpeExlbmd0aCk7CkBAIC0yNTgsNiArMzI2LDUwIEBA
IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSwKIAorICAgIGlzQ2FyZXRPbkZpcnN0TGluZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAg
dmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7CisgICAgICAgIGlmICghZm9jdXNO
b2RlIHx8IGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgfHwgZm9jdXNOb2Rl
LnBhcmVudE5vZGUgIT09IHRoaXMuZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGlmIChmb2N1c05vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlv
bi5mb2N1c09mZnNldCkuaW5kZXhPZigiXG4iKSAhPT0gLTEpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5wcmV2aW91c1NpYmxpbmc7CisK
KyAgICAgICAgd2hpbGUgKGZvY3VzTm9kZSkgeworICAgICAgICAgICAgaWYgKGZvY3VzTm9kZS5u
b2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBpZiAoZm9jdXNOb2RlLnRleHRDb250ZW50LmluZGV4T2YoIlxuIikgIT09
IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvY3VzTm9k
ZSA9IGZvY3VzTm9kZS5wcmV2aW91c1NpYmxpbmc7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgaXNDYXJldE9uTGFzdExpbmU6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAg
ICAgIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlOworICAgICAgICBpZiAoIWZv
Y3VzTm9kZSB8fCBmb2N1c05vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFIHx8IGZvY3Vz
Tm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICBpZiAoZm9jdXNOb2RlLnRleHRDb250ZW50LnN1YnN0cmluZyhzZWxlY3Rp
b24uZm9jdXNPZmZzZXQpLmluZGV4T2YoIlxuIikgIT09IC0xKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBmb2N1c05vZGUgPSBmb2N1c05vZGUubmV4dFNpYmxpbmc7CisKKyAg
ICAgICAgd2hpbGUgKGZvY3VzTm9kZSkgeworICAgICAgICAgICAgaWYgKGZvY3VzTm9kZS5ub2Rl
VHlwZSAhPT0gTm9kZS5URVhUX05PREUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBpZiAoZm9jdXNOb2RlLnRleHRDb250ZW50LmluZGV4T2YoIlxuIikgIT09IC0x
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvY3VzTm9kZSA9
IGZvY3VzTm9kZS5uZXh0U2libGluZzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0sCisKICAgICBtb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0OiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwpAQCAtMjgx
LDM5ICszOTMsNzEgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogCiAg
ICAgX3VwS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgeworICAgICAgICBpZiAoIXRo
aXMuaXNDYXJldE9uRmlyc3RMaW5lKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7
CisKKyAgICAgICAgdGhpcy5fbW92ZUJhY2tJbkhpc3RvcnkoKTsKKyAgICB9LAorCisgICAgX2Rv
d25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5p
c0NhcmV0T25MYXN0TGluZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogCisg
ICAgICAgIHRoaXMuX21vdmVGb3J3YXJkSW5IaXN0b3J5KCk7CisgICAgfSwKKworICAgIF9tb3Zl
QmFja0luSGlzdG9yeTogZnVuY3Rpb24oKQorICAgIHsKICAgICAgICAgaWYgKHRoaXMuaGlzdG9y
eU9mZnNldCA9PSB0aGlzLmhpc3RvcnkubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUodHJ1ZSk7CiAKLSAgICAgICAgaWYgKHRoaXMu
aGlzdG9yeU9mZnNldCA9PSAwKQorICAgICAgICBpZiAodGhpcy5oaXN0b3J5T2Zmc2V0ID09PSAw
KQogICAgICAgICAgICAgdGhpcy50ZW1wU2F2ZWRDb21tYW5kID0gdGhpcy50ZXh0OwogCiAgICAg
ICAgICsrdGhpcy5oaXN0b3J5T2Zmc2V0OwogICAgICAgICB0aGlzLnRleHQgPSB0aGlzLmhpc3Rv
cnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIHRoaXMuaGlzdG9yeU9mZnNldF07CisKKyAgICAgICAg
dGhpcy5lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKKyAgICAgICAgdmFyIGZpcnN0
TmV3bGluZUluZGV4ID0gdGhpcy50ZXh0LmluZGV4T2YoIlxuIik7CisgICAgICAgIGlmIChmaXJz
dE5ld2xpbmVJbmRleCA9PT0gLTEpCisgICAgICAgICAgICB0aGlzLm1vdmVDYXJldFRvRW5kT2ZQ
cm9tcHQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2lu
ZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZG9j
dW1lbnQuY3JlYXRlUmFuZ2UoKTsKKworICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uuc2V0U3Rh
cnQodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQsIGZpcnN0TmV3bGluZUluZGV4KTsKKyAgICAgICAg
ICAgIHNlbGVjdGlvblJhbmdlLnNldEVuZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCwgZmlyc3RO
ZXdsaW5lSW5kZXgpOworCisgICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7
CisgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpOworICAgICAg
ICB9CiAgICAgfSwKIAotICAgIF9kb3duS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCisgICAg
X21vdmVGb3J3YXJkSW5IaXN0b3J5OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwotICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLQotICAg
ICAgICBpZiAodGhpcy5oaXN0b3J5T2Zmc2V0ID09IDApCisgICAgICAgIGlmICh0aGlzLmhpc3Rv
cnlPZmZzZXQgPT09IDApCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5jbGVh
ckF1dG9Db21wbGV0ZSh0cnVlKTsKIAogICAgICAgICAtLXRoaXMuaGlzdG9yeU9mZnNldDsKIAot
ICAgICAgICBpZiAodGhpcy5oaXN0b3J5T2Zmc2V0ID09IDApIHsKKyAgICAgICAgaWYgKHRoaXMu
aGlzdG9yeU9mZnNldCA9PT0gMCkgewogICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZW1w
U2F2ZWRDb21tYW5kOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMudGVtcFNhdmVkQ29tbWFuZDsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMudGV4dCA9IHRo
aXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gdGhpcy5oaXN0b3J5T2Zmc2V0XTsKKyAg
ICAgICAgdGhpcy5lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKICAgICB9CiB9Cg==
</data>
<flag name="review"
          id="25396"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43669</attachid>
            <date>2009-11-21 19:33:13 -0800</date>
            <delta_ts>2009-11-21 19:35:10 -0800</delta_ts>
            <desc>[PATCH] Ctrl+P, Ctrl+N, and Arrow Keys</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>9471</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTE4YzVlOS4uYmI4ZjdiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAwOS0xMS0yMCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN1cHBvcnQgQ3RybCtQIGFuZCBDdHJs
K04sIFJlYWRsaW5lIGtleWJvYXJkIHNob3J0Y3V0cyBpbiB0aGUgQ29uc29sZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE0MDAKKworICAgICAgICBI
YW5kbGUgdGhlIGZvbGxvd2luZyB3aGVuIG9uIGEgTWFjOgorCisgICAgICAgICAgQ3RybCtQID0g
UHJldmlvdXMgKGxpa2UgVXAgYXJyb3cpCisgICAgICAgICAgQ3RybCtOID0gTmV4dCAobGlrZSBE
b3duIGFycm93KQorCisgICAgICAgIE5vIGxvbmdlciByZXJ1biBhdXRvY29tcGxldGlvbiB3aGVu
IGp1c3QgcHVzaGluZyBhIG1vZGlmaWVyIGtleQorICAgICAgICBsaWtlIENvbnRyb2wsIEFsdCwg
U2hpZnQsIG9yIE1ldGEuCisKKyAgICAgICAgSW1wcm92ZWQgYXJyb3cga2V5IGJlaGF2aW9yIHdp
dGggTXVsdGlsaW5lIGNvZGUgaW4gdGhlIENvbnNvbGUsIHdpdGggdGhlIGZvbGxvd2luZyBiZWhh
dmlvcjoKKworICAgICAgICAgIFVwICAgPSBQcmV2aW91cyBDb21tYW5kIGlmIG9uIEZpcnN0IExp
bmUgKGNhcmV0IG1vdmVzIHRvIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGxpbmUpCisgICAgICAgICAg
ICAgICAgIG90aGVyd2lzZSBkZWZhdWx0IGNhcmV0IG1vdmVtZW50IGluIHRleHQuCisgICAgICAg
ICAgRG93biA9IE5leHQgQ29tbWFuZCBpZiBvbiBMYXN0IExpbmUgKGNhcmV0IG5hdHVyYWxseSBt
b3ZlcyB0byB0aGUgZW5kKQorICAgICAgICAgICAgICAgICBvdGhlcndpc2UgZGVmYXVsdCBjYXJl
dCBtb3ZlbWVudCBpbiB0ZXh0LgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0
UHJvbXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmhh
bmRsZUtleUV2ZW50KTogaGFuZGxlIG5ldyBrZXlib2FyZCBzaG9ydGN1dHMKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5pc0NhcmV0T25GaXJzdExpbmUpOiBjaGVj
ayBpZiB0aGUgY2FyZXQgaXMgb24gdGhlIHRvcCBsaW5lCisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFByb21wdC5wcm90b3R5cGUuaXNDYXJldE9uTGFzdExpbmUpOiBjaGVjayBpZiB0aGUgY2Fy
ZXQgaXMgb24gdGhlIGJvdHRvbSBsaW5lCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21w
dC5wcm90b3R5cGUuX3VwS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFBy
b21wdC5wcm90b3R5cGUuX2Rvd25LZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LnByb3RvdHlwZS5fbW92ZUJhY2tJbkhpc3RvcnkpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9tb3ZlRm9yd2FyZEluSGlzdG9yeSk6CisKIDIw
MDktMTEtMjAgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRQcm9tcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4
dFByb21wdC5qcwppbmRleCBmNzNhYjBkLi4yMjMwZWFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVGV4dFByb21wdC5qcwpAQCAtNTUsNiArNTUsMTMgQEAgV2ViSW5zcGVjdG9yLlRl
eHRQcm9tcHQucHJvdG90eXBlID0gewogCiAgICAgaGFuZGxlS2V5RXZlbnQ6IGZ1bmN0aW9uKGV2
ZW50KQogICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEFjdGlvbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUoKTsKKyAgICAgICAgICAgIHRoaXMu
YXV0b0NvbXBsZXRlU29vbigpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGhhbmRsZWQgPSBm
YWxzZTsKICAgICAgICAgc3dpdGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7CiAgICAgICAgICAg
ICBjYXNlICJVcCI6CiAgICAgICAgICAgICAgICAgdGhpcy5fdXBLZXlQcmVzc2VkKGV2ZW50KTsK
QEAgLTcwLDExICs3NywzNiBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFjY2VwdEF1dG9Db21wbGV0ZSgpKQogICAgICAg
ICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVNvb24oKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgIkFsdCI6CisgICAgICAgICAgICBjYXNlICJNZXRhIjoK
KyAgICAgICAgICAgIGNhc2UgIlNoaWZ0IjoKKyAgICAgICAgICAgIGNhc2UgIkNvbnRyb2wiOgor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiVSswMDUwIjogLy8gQ3Ry
bCtQID0gUHJldmlvdXMKKyAgICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFjKCkg
JiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFl
dmVudC5zaGlmdEtleSkgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2tJbkhpc3RvcnkoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1
bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgIlUrMDA0RSI6IC8vIEN0cmwrTiA9IE5leHQKKyAgICAgICAgICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLmlzTWFjKCkgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAh
ZXZlbnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtleSkgeworICAgICAgICAgICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmRJbkhp
c3RvcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdGhpcy5jbGVh
ckF1dG9Db21wbGV0ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU29vbigp
OworICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGlmIChoYW5kbGVkKSB7CisgICAgICAg
ICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgICAgIH0KICAgICB9LAogCiAgICAgYWNjZXB0QXV0b0NvbXBsZXRlOiBm
dW5jdGlvbigpCkBAIC0xMTgsNyArMTUwLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl91c2VyRW50ZXJlZFJhbmdlLmRlbGV0ZUNvbnRlbnRz
KCk7CiAKICAgICAgICAgdmFyIHVzZXJUZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHRoaXMuX3VzZXJFbnRlcmVkVGV4dCk7Ci0gICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2Uu
aW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOyAgICAgICAgICAgCisgICAgICAgIHRoaXMuX3VzZXJF
bnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOwogCiAgICAgICAgIHZhciBzZWxl
Y3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgIHNlbGVjdGlvblJh
bmdlLnNldFN0YXJ0KHVzZXJUZXh0Tm9kZSwgdGhpcy5fdXNlckVudGVyZWRUZXh0Lmxlbmd0aCk7
CkBAIC0xNzQsMTAgKzIwNiw5IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGZ1bGxXb3JkUmFuZ2UudG9TdHJpbmco
KTsKIAogICAgICAgICAgICAgdmFyIGZvdW5kSW5kZXggPSBudWxsOwotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjb21wbGV0aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjb21wbGV0aW9ucy5sZW5ndGg7ICsraSkKICAgICAgICAgICAg
ICAgICBpZiAoY29tcGxldGlvbnNbaV0gPT09IGN1cnJlbnRUZXh0KQogICAgICAgICAgICAgICAg
ICAgICBmb3VuZEluZGV4ID0gaTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZv
dW5kSW5kZXggPT09IG51bGwgfHwgKGZvdW5kSW5kZXggKyAxKSA+PSBjb21wbGV0aW9ucy5sZW5n
dGgpCiAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25UZXh0ID0gY29tcGxldGlvbnNbMF07
CkBAIC0xOTksNyArMjMwLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdmFyIHN1ZmZpeFRleHQgPSBjb21wbGV0aW9uVGV4dC5zdWJzdHJpbmco
d29yZFByZWZpeExlbmd0aCk7CiAKICAgICAgICAgICAgIHZhciBwcmVmaXhUZXh0Tm9kZSA9IGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHByZWZpeFRleHQpOwotICAgICAgICAgICAgZnVsbFdvcmRS
YW5nZS5pbnNlcnROb2RlKHByZWZpeFRleHROb2RlKTsgICAgICAgICAgIAorICAgICAgICAgICAg
ZnVsbFdvcmRSYW5nZS5pbnNlcnROb2RlKHByZWZpeFRleHROb2RlKTsKIAogICAgICAgICAgICAg
dGhpcy5hdXRvQ29tcGxldGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OwogICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVFbGVtZW50LmNsYXNzTmFtZSA9ICJhdXRv
LWNvbXBsZXRlLXRleHQiOwpAQCAtMjExLDcgKzI0Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGZpbmFsU2VsZWN0aW9uUmFuZ2Uuc2V0RW5k
KHByZWZpeFRleHROb2RlLCB3b3JkUHJlZml4TGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZShjb21wbGV0aW9uVGV4dCk7Ci0gICAgICAgICAgICBmdWxsV29yZFJhbmdlLmluc2VydE5vZGUo
Y29tcGxldGlvblRleHROb2RlKTsgICAgICAgICAgIAorICAgICAgICAgICAgZnVsbFdvcmRSYW5n
ZS5pbnNlcnROb2RlKGNvbXBsZXRpb25UZXh0Tm9kZSk7CiAKICAgICAgICAgICAgIGlmIChjb21w
bGV0aW9ucy5sZW5ndGggPiAxKQogICAgICAgICAgICAgICAgIGZpbmFsU2VsZWN0aW9uUmFuZ2Uu
c2V0U3RhcnQoY29tcGxldGlvblRleHROb2RlLCB3b3JkUHJlZml4TGVuZ3RoKTsKQEAgLTI1OCw2
ICsyODksNTAgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9LAogCisgICAgaXNDYXJldE9uRmlyc3RMaW5lOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigp
OworICAgICAgICB2YXIgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZTsKKyAgICAgICAg
aWYgKCFmb2N1c05vZGUgfHwgZm9jdXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSB8
fCBmb2N1c05vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lbGVtZW50KQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgaWYgKGZvY3VzTm9kZS50ZXh0Q29udGVudC5zdWJzdHJpbmco
MCwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0KS5pbmRleE9mKCJcbiIpICE9PSAtMSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9jdXNOb2RlID0gZm9jdXNOb2RlLnByZXZpb3Vz
U2libGluZzsKKworICAgICAgICB3aGlsZSAoZm9jdXNOb2RlKSB7CisgICAgICAgICAgICBpZiAo
Zm9jdXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChmb2N1c05vZGUudGV4dENvbnRlbnQuaW5kZXhP
ZigiXG4iKSAhPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgZm9jdXNOb2RlID0gZm9jdXNOb2RlLnByZXZpb3VzU2libGluZzsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICBpc0NhcmV0T25MYXN0TGluZTogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rp
b24oKTsKKyAgICAgICAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7CisgICAg
ICAgIGlmICghZm9jdXNOb2RlIHx8IGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05P
REUgfHwgZm9jdXNOb2RlLnBhcmVudE5vZGUgIT09IHRoaXMuZWxlbWVudCkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIGlmIChmb2N1c05vZGUudGV4dENvbnRlbnQuc3Vic3Ry
aW5nKHNlbGVjdGlvbi5mb2N1c09mZnNldCkuaW5kZXhPZigiXG4iKSAhPT0gLTEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5uZXh0U2li
bGluZzsKKworICAgICAgICB3aGlsZSAoZm9jdXNOb2RlKSB7CisgICAgICAgICAgICBpZiAoZm9j
dXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChmb2N1c05vZGUudGV4dENvbnRlbnQuaW5kZXhPZigi
XG4iKSAhPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Zm9jdXNOb2RlID0gZm9jdXNOb2RlLm5leHRTaWJsaW5nOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSwKKwogICAgIG1vdmVDYXJldFRvRW5kT2ZQcm9tcHQ6IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCk7CkBAIC0yODEsMzkgKzM1Niw3MSBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5
cGUgPSB7CiAKICAgICBfdXBLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7CisgICAg
ICAgIGlmICghdGhpcy5pc0NhcmV0T25GaXJzdExpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKworICAgICAgICB0aGlzLl9tb3ZlQmFja0luSGlzdG9yeSgpOworICAgIH0s
CisKKyAgICBfZG93bktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLmlzQ2FyZXRPbkxhc3RMaW5lKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAg
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7CiAKKyAgICAgICAgdGhpcy5fbW92ZUZvcndhcmRJbkhpc3RvcnkoKTsKKyAgICB9LAor
CisgICAgX21vdmVCYWNrSW5IaXN0b3J5OiBmdW5jdGlvbigpCisgICAgewogICAgICAgICBpZiAo
dGhpcy5oaXN0b3J5T2Zmc2V0ID09IHRoaXMuaGlzdG9yeS5sZW5ndGgpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKIAotICAgICAg
ICBpZiAodGhpcy5oaXN0b3J5T2Zmc2V0ID09IDApCisgICAgICAgIGlmICh0aGlzLmhpc3RvcnlP
ZmZzZXQgPT09IDApCiAgICAgICAgICAgICB0aGlzLnRlbXBTYXZlZENvbW1hbmQgPSB0aGlzLnRl
eHQ7CiAKICAgICAgICAgKyt0aGlzLmhpc3RvcnlPZmZzZXQ7CiAgICAgICAgIHRoaXMudGV4dCA9
IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gdGhpcy5oaXN0b3J5T2Zmc2V0XTsK
KworICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOworICAgICAg
ICB2YXIgZmlyc3ROZXdsaW5lSW5kZXggPSB0aGlzLnRleHQuaW5kZXhPZigiXG4iKTsKKyAgICAg
ICAgaWYgKGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSkKKyAgICAgICAgICAgIHRoaXMubW92ZUNh
cmV0VG9FbmRPZlByb21wdCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBzZWxl
Y3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9u
UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworCisgICAgICAgICAgICBzZWxlY3Rpb25S
YW5nZS5zZXRTdGFydCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCwgZmlyc3ROZXdsaW5lSW5kZXgp
OworICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKHRoaXMuZWxlbWVudC5maXJzdENo
aWxkLCBmaXJzdE5ld2xpbmVJbmRleCk7CisKKyAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVB
bGxSYW5nZXMoKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShzZWxlY3Rpb25SYW5n
ZSk7CisgICAgICAgIH0KICAgICB9LAogCi0gICAgX2Rvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihl
dmVudCkKKyAgICBfbW92ZUZvcndhcmRJbkhpc3Rvcnk6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpOwotCi0gICAgICAgIGlmICh0aGlzLmhpc3RvcnlPZmZzZXQgPT0gMCkKKyAgICAgICAgaWYg
KHRoaXMuaGlzdG9yeU9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICB0aGlzLmNsZWFyQXV0b0NvbXBsZXRlKHRydWUpOwogCiAgICAgICAgIC0tdGhpcy5oaXN0b3J5
T2Zmc2V0OwogCi0gICAgICAgIGlmICh0aGlzLmhpc3RvcnlPZmZzZXQgPT0gMCkgeworICAgICAg
ICBpZiAodGhpcy5oaXN0b3J5T2Zmc2V0ID09PSAwKSB7CiAgICAgICAgICAgICB0aGlzLnRleHQg
PSB0aGlzLnRlbXBTYXZlZENvbW1hbmQ7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy50ZW1wU2F2
ZWRDb21tYW5kOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgdGhp
cy50ZXh0ID0gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGggLSB0aGlzLmhpc3RvcnlP
ZmZzZXRdOworICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwog
ICAgIH0KIH0K
</data>
<flag name="review"
          id="25407"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>