<?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>54388</bug_id>
          
          <creation_ts>2011-02-14 04:55:53 -0800</creation_ts>
          <short_desc>Web Inspector: [Text editor] First implementation of the editable TextViewer without optimization</short_desc>
          <delta_ts>2011-02-14 09:17:38 -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>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>
          
          <blocked>53588</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrey Adaikin">aandrey</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>podivilov</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>350595</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-14 04:55:53 -0800</bug_when>
    <thetext>This is to track the progress of implementing the editable TextViewer, as described here: https://bugs.webkit.org/show_bug.cgi?id=53588

By this changeset, the editor is supposed to work, i.e. the changes should be saved in the text model, but there are no optimization yet. The optimization part is quite a big amount of work by itself, thus this separation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350597</commentid>
    <comment_count>1</comment_count>
      <attachid>82305</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-14 05:04:10 -0800</bug_when>
    <thetext>Created attachment 82305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350670</commentid>
    <comment_count>2</comment_count>
      <attachid>82305</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-14 08:31:07 -0800</bug_when>
    <thetext>Comment on attachment 82305
Patch

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

Few nits and it is good to land.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:578
&gt; +        this.element.addEventListener(&quot;keydown&quot;, this._handleKeyDown.bind(this), false);

What about drag&apos;n&apos;drop events?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:584
&gt; +    // For some reasons, in a few corner cases the events above are not able to catch the editings.

When does this happen?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:704
&gt; +        for (var i = 0; i &lt; this._textModel.linesCount; ++i) {

No {} for single line body. Why does this happen here? Should it be encapsulated in the highlighter?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:761
&gt; +        this.beginDomUpdates();

Nit: you could do try { } finally { endDomUpdates; } to enable multiple return points.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:990
&gt; +                setTimeout(function() {

Workarounds like this should be encapsulated in separate methods and provided with FIXME. You might also want to introduce coalescing for events like this.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1098
&gt; +            ++startLine

;

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1106
&gt; +            --endLine

;

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1143
&gt; +        for (var i = 0; i &lt; textContents.length; ++i) {

No {}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350694</commentid>
    <comment_count>3</comment_count>
      <attachid>82305</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-14 09:07:02 -0800</bug_when>
    <thetext>Comment on attachment 82305
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:578
&gt;&gt; +        this.element.addEventListener(&quot;keydown&quot;, this._handleKeyDown.bind(this), false);
&gt; 
&gt; What about drag&apos;n&apos;drop events?

Emmm... what about them? :) this particular code is just to disable overriding the &quot;keydown&quot; event when the editor is enabled (obviously, it is not needed in this case). Drag&apos;n&apos;drop events work perfectly in both read-only and editable cases.

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:584
&gt;&gt; +    // For some reasons, in a few corner cases the events above are not able to catch the editings.
&gt; 
&gt; When does this happen?

For example:

10 // Line of code
11
12 // Another line of code
13
14
15 // Yet another line of code

If the caret is on the line 11 (empty line), and you hit backspace, it would remove the line and put the caret at the end of line 10, but no DOM event will fire, except for the DOMSubtreeModified on this.element target. However, if you do the same on line 14, some of these 3 events are fired. I think, there may be a bug in the WebKit with firing the DOMNodeRemoved event - IMO it is very rarely fired.

I also checked this case against the same 3 events that are used in the Elements panel (AFAIU they listen for custom WebInspector.* events from the backend) - and, unlike this &quot;native&quot; case, it worked as expected, and the DOMNodeRemoved is fired way more frequently.

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:704
&gt;&gt; +        for (var i = 0; i &lt; this._textModel.linesCount; ++i) {
&gt; 
&gt; No {} for single line body. Why does this happen here? Should it be encapsulated in the highlighter?

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:761
&gt;&gt; +        this.beginDomUpdates();
&gt; 
&gt; Nit: you could do try { } finally { endDomUpdates; } to enable multiple return points.

That was my first thought, but I have not even tried it, so that I should not create a chance to lower the performance :) I checked the performance now, and it seems OK. Done.

BTW, should I use try-finally in all such cases, not only with multiple return points?

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:990
&gt;&gt; +                setTimeout(function() {
&gt; 
&gt; Workarounds like this should be encapsulated in separate methods and provided with FIXME. You might also want to introduce coalescing for events like this.

1) This code is from a previous CL and has not been changed (only spaces for alignment - maybe that&apos;s why the review tool didn&apos;t notice it).

2) I don&apos;t see why we should introduce another coalescing guardians just for this, because if there should be a loop after calling the _syncDecorationsForLine() - it will be guarded with the same this._domUpdateCoalescingLevel value (if the DOM is modified), and will not reach here again.

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:1098
&gt;&gt; +            ++startLine
&gt; 
&gt; ;

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:1106
&gt;&gt; +            --endLine
&gt; 
&gt; ;

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:1143
&gt;&gt; +        for (var i = 0; i &lt; textContents.length; ++i) {
&gt; 
&gt; No {}

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350695</commentid>
    <comment_count>4</comment_count>
      <attachid>82323</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-14 09:09:23 -0800</bug_when>
    <thetext>Created attachment 82323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350697</commentid>
    <comment_count>5</comment_count>
      <attachid>82323</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-14 09:17:27 -0800</bug_when>
    <thetext>Comment on attachment 82323
Patch

Clearing flags on attachment: 82323

Committed r78483: &lt;http://trac.webkit.org/changeset/78483&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350698</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-14 09:17:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82305</attachid>
            <date>2011-02-14 05:04:10 -0800</date>
            <delta_ts>2011-02-14 09:09:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54388-20110214160407.patch</filename>
            <type>text/plain</type>
            <size>18519</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDBjYmUzZGRkM2M4OTk2OTk0MjRiZGYzN2I1MDkwNzQ1MWZmMzFlLi5i
NmNlNjBhNWM5Y2U0Njk5MWNmZDIyMGNiODRjZmQzYjE3M2I0YzA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzQgQEAKKzIwMTEtMDItMTQgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFtUZXh0IGVkaXRvcl0gRmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIGVk
aXRhYmxlIFRleHRWaWV3ZXIgd2l0aG91dCBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Mzg4CisKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZp
ZXdlci5wcm90b3R5cGUuc2V0IHJlYWRPbmx5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yQ2h1bmtlZFBhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1
bmtlZFBhbmVsLnByb3RvdHlwZS5fYnVpbGRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLm1ha2VMaW5lQUNodW5rKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5iZWdpbkRv
bVVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwu
cHJvdG90eXBlLmVuZERvbVVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9yZXBhaW50QWxsKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlLnNldCBleHBhbmRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuc2V0IHJlYWRPbmx5KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fYnVpbGRDaHVu
a3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
Ll9oaWdobGlnaHREYXRhUmVhZHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlLl9wYWludExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5faGFuZGxlRE9NVXBkYXRlcy5y
ZXR1cm4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlLl9oYW5kbGVET01VcGRhdGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5faGFuZGxlRE9NU3VidHJlZU1vZGlmaWVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21VcGRh
dGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZS5fY29sbGVjdExpbmVzRnJvbURpdik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5DaHVuay5wcm90b3R5cGUuYWRkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuc2V0IGV4cGFu
ZGVkKToKKwogMjAxMS0wMi0xMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcwppbmRleCBjZTY1MDJkNDRjZWVkMWVl
YjAxZWUwY2RiYWUyZTk0NjUxOGFhNGQxLi5iNTNjOTM1MTg3MDY5NmNjMGI1MTIzMzAxNjU0ZDAw
MDllY2QzY2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1RleHRWaWV3ZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9U
ZXh0Vmlld2VyLmpzCkBAIC01MSw2ICs1MSwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21haW5QYW5lbC5taW1lVHlwZSA9IG1pbWVUeXBl
OwogICAgIH0sCiAKKyAgICBzZXQgcmVhZE9ubHkocmVhZE9ubHkpCisgICAgeworICAgICAgICB0
aGlzLl9tYWluUGFuZWwucmVhZE9ubHkgPSByZWFkT25seTsKKyAgICB9LAorCiAgICAgZ2V0IHRl
eHRNb2RlbCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fdGV4dE1vZGVsOwpAQCAtMTkz
LDYgKzE5OCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsID0gZnVuY3Rp
b24odGV4dE1vZGVsKQogCiAgICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOwogICAgIHRo
aXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKKyAgICB0aGlzLl9kb21VcGRhdGVDb2FsZXNj
aW5nTGV2ZWwgPSAwOwogfQogCiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5w
cm90b3R5cGUgPSB7CkBAIC0yMjksNiArMjM1LDggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JD
aHVua2VkUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigp
CiAgICAgeworICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOworCiAgICAgICAgIHRoaXMu
ZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCiAgICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBb
XTsKQEAgLTIzOSw2ICsyNDcsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7
CisKKyAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7CiAgICAgfSwKIAogICAgIG1ha2VMaW5l
QUNodW5rOiBmdW5jdGlvbihsaW5lTnVtYmVyKQpAQCAtMjUxLDYgKzI2MSw4IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKG9s
ZENodW5rLmxpbmVzQ291bnQgPT09IDEpCiAgICAgICAgICAgICByZXR1cm4gb2xkQ2h1bms7CiAK
KyAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKKwogICAgICAgICB2YXIgd2FzRXhwYW5k
ZWQgPSBvbGRDaHVuay5leHBhbmRlZDsKICAgICAgICAgb2xkQ2h1bmsuZXhwYW5kZWQgPSBmYWxz
ZTsKIApAQCAtMjg3LDYgKzI5OSw4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBzdWZmaXhDaHVuay5leHBhbmRlZCA9
IHRydWU7CiAgICAgICAgIH0KIAorICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKKwogICAg
ICAgICByZXR1cm4gbGluZUNodW5rOwogICAgIH0sCiAKQEAgLTMxNiw2ICszMzAsMTYgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAgIH0sCiAKKyAgICBiZWdpbkRvbVVwZGF0ZXM6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbCsr
OworICAgIH0sCisKKyAgICBlbmREb21VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwtLTsKKyAgICB9LAorCiAgICAgX2NodW5r
TnVtYmVyRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7CiAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkgewpAQCAtMzM1LDcg
KzM1OSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9
IHsKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXBhaW50QWxsVGltZXI7CiAKLSAgICAg
ICAgaWYgKHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQorICAgICAgICBpZiAodGhpcy5fcGFp
bnRDb2FsZXNjaW5nTGV2ZWwgfHwgdGhpcy5fZGlydHlMaW5lcykKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBpZiAoIXRoaXMuX3RleHRDaHVua3MpCkBAIC00ODQsNiArNTA4LDggQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAg
IGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpbkRvbVVwZGF0ZXMoKTsKKwogICAgICAgICBpZiAoZXhw
YW5kZWQpIHsKICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MgPSBbXTsKICAgICAg
ICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQ7CkBA
IC01MDMsMTIgKzUyOSwxNCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0
aGlzLmVsZW1lbnQsIGxpbmVSb3cpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX2NhY2hlZFJvd3MucHVzaChsaW5lUm93KTsKICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fY2FjaGVk
Um93cy5wdXNoKGxpbmVSb3cpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2V4cGFuZGVkTGluZVJvd3M7CiAgICAgICAgIH0KKworICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLmVuZERvbVVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgZ2V0IGhlaWdodCgpCkBAIC01Mzcs
MTggKzU2NSwyNSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCA9IGZ1bmN0aW9u
KHRleHRNb2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsCiAKICAgICB0aGlzLl91cmwgPSB1
cmw7CiAgICAgdGhpcy5faGlnaGxpZ2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JI
aWdobGlnaHRlcih0ZXh0TW9kZWwsIHRoaXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMp
KTsKKyAgICB0aGlzLl9yZWFkT25seSA9IHRydWU7CiAKICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0g
InRleHQtZWRpdG9yLWNvbnRlbnRzIjsKICAgICB0aGlzLmVsZW1lbnQudGFiSW5kZXggPSAwOwog
CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9s
bC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQodGhpcyksIGZhbHNlKTsKKworICAg
IC8vIEZJWE1FOiBSZW1vdmUgb2xkIGxpdmUgZWRpdGluZyBmdW5jdGlvbmFsaXR5IGFuZCBQcmVm
ZXJlbmNlcy5zb3VyY2VFZGl0b3JFbmFibGVkIGZsYWcuCisgICAgaWYgKCFQcmVmZXJlbmNlcy5z
b3VyY2VFZGl0b3JFbmFibGVkKQorICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigia2V5ZG93biIsIHRoaXMuX2hhbmRsZUtleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwogCiAg
ICAgdmFyIGhhbmRsZURPTVVwZGF0ZXMgPSB0aGlzLl9oYW5kbGVET01VcGRhdGVzLmJpbmQodGhp
cyk7CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFN
b2RpZmllZCIsIGhhbmRsZURPTVVwZGF0ZXMsIGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgaGFuZGxlRE9NVXBkYXRlcywgZmFsc2Up
OwogICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Ob2RlUmVtb3ZlZCIsIGhh
bmRsZURPTVVwZGF0ZXMsIGZhbHNlKTsKKyAgICAvLyBGb3Igc29tZSByZWFzb25zLCBpbiBhIGZl
dyBjb3JuZXIgY2FzZXMgdGhlIGV2ZW50cyBhYm92ZSBhcmUgbm90IGFibGUgdG8gY2F0Y2ggdGhl
IGVkaXRpbmdzLgorICAgIC8vIFRvIHdvcmthcm91bmQgdGhhdCB3ZSBhbHNvIGxpc3RlbiB0byBh
IG1vcmUgZ2VuZXJhbCBldmVudCBhcyBhIGJhY2t1cC4KKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgdGhpcy5faGFuZGxlRE9NU3VidHJlZU1v
ZGlmaWVkLmJpbmQodGhpcyksIGZhbHNlKTsKIAogICAgIHRoaXMuZnJlZUNhY2hlZEVsZW1lbnRz
KCk7CiAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKQEAgLTU2MCw2ICs1OTUsMTkgQEAgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9o
aWdobGlnaHRlci5taW1lVHlwZSA9IG1pbWVUeXBlOwogICAgIH0sCiAKKyAgICBzZXQgcmVhZE9u
bHkocmVhZE9ubHkpCisgICAgeworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBQcmVmZXJl
bmNlcy5zb3VyY2VFZGl0b3JFbmFibGVkIGZsYWcuCisgICAgICAgIGlmICghUHJlZmVyZW5jZXMu
c291cmNlRWRpdG9yRW5hYmxlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll9yZWFkT25seSA9IHJlYWRPbmx5OworICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpCisgICAg
ICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidGV4dC1lZGl0b3ItZWRpdGFi
bGUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xh
c3MoInRleHQtZWRpdG9yLWVkaXRhYmxlIik7CisgICAgfSwKKwogICAgIG1hcmtBbmRSZXZlYWxS
YW5nZTogZnVuY3Rpb24ocmFuZ2UpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01h
cmspIHsKQEAgLTY1Myw2ICs3MDEsMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlID0gewogICAgIF9idWlsZENodW5rczogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIucmVzZXQoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgKytpKSB7CisgICAgICAgICAgICB0aGlz
Ll90ZXh0TW9kZWwucmVtb3ZlQXR0cmlidXRlKGksICJoaWdobGlnaHQiKTsKKyAgICAgICAgfQor
CiAgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5f
YnVpbGRDaHVua3MuY2FsbCh0aGlzKTsKICAgICB9LAogCkBAIC02ODEsNyArNzMzLDcgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgX2hpZ2hs
aWdodERhdGFSZWFkeTogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSkKICAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVuZXIpCisgICAgICAgIGlmICh0aGlzLl9tdXRl
SGlnaGxpZ2h0TGlzdGVuZXIgfHwgdGhpcy5fZGlydHlMaW5lcykKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhmcm9tTGluZSwgdG9MaW5lLCB0cnVlIC8qcmVz
dG9yZVNlbGVjdGlvbiovKTsKICAgICB9LApAQCAtNzA2LDEwICs3NTgsMTMgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgX3BhaW50TGluZTog
ZnVuY3Rpb24obGluZVJvdywgbGluZU51bWJlcikKICAgICB7CisgICAgICAgIHRoaXMuYmVnaW5E
b21VcGRhdGVzKCk7CisKICAgICAgICAgdmFyIGhpZ2hsaWdodCA9IHRoaXMuX3RleHRNb2RlbC5n
ZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImhpZ2hsaWdodCIpOwogICAgICAgICBpZiAoIWhpZ2hs
aWdodCkgewogICAgICAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrICYmIHRoaXMuX3Jhbmdl
VG9NYXJrLnN0YXJ0TGluZSA9PT0gbGluZU51bWJlcikKICAgICAgICAgICAgICAgICB0aGlzLl9t
YXJrZWRSYW5nZUVsZW1lbnQgPSBoaWdobGlnaHRTZWFyY2hSZXN1bHQobGluZVJvdywgdGhpcy5f
cmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbiAtIHRo
aXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAgIHRoaXMuZW5kRG9tVXBk
YXRlcygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTc0Niw2ICs4MDEs
OCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQgPSBoaWdobGlnaHRTZWFyY2hSZXN1bHQo
bGluZVJvdywgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJr
LmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKICAgICAgICAgaWYg
KGxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50KQogICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRD
aGlsZChsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5lbmREb21V
cGRhdGVzKCk7CiAgICAgfSwKIAogICAgIF9yZWxlYXNlTGluZXNIaWdobGlnaHQ6IGZ1bmN0aW9u
KGxpbmVSb3cpCkBAIC05MDcsMTggKzk2NCwxODQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmNvbXBs
ZXRlVVJMKHRoaXMuX3VybCwgaHJlZlZhbHVlKTsKICAgICB9LAogCisgICAgdGV4dENoYW5nZWQ6
IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4dCwgbmV3VGV4dCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBVcGRhdGUgb25seSB0aGF0IHBhcnQgb2YgdGhlIGVkaXRvciB0aGF0
IGhhcyBqdXN0IGJlZW4gY2hhbmdlZC4KKyAgICAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKKyAg
ICB9LAorCiAgICAgX2hhbmRsZURPTVVwZGF0ZXM6IGZ1bmN0aW9uKGUpCiAgICAgeworICAgICAg
ICBpZiAodGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsKQorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDsKKyAgICAgICAgaWYgKHRhcmdldCA9
PT0gdGhpcy5lbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHZhciBsaW5l
Um93ID0gdGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLWNv
bnRlbnQiKTsKLSAgICAgICAgaWYgKGxpbmVSb3cgPT09IHRhcmdldCB8fCAhbGluZVJvdyB8fCAh
bGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQgfHwgIWxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50
LmlzQW5jZXN0b3IodGFyZ2V0KSkKKyAgICAgICAgaWYgKCFsaW5lUm93KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCAmJiBsaW5l
Um93LmRlY29yYXRpb25zRWxlbWVudC5pc0FuY2VzdG9yKHRhcmdldCkpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXYWl0IHVudGlsIHRoaXMgZXZlbnQgaXMgcHJvY2Vzc2VkIGFuZCBvbmx5IHRoZW4g
c3luYyB0aGUgc2l6ZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGluCisgICAgICAgICAgICAgICAgLy8g
Y2FzZSBvZiB0aGUgRE9NTm9kZVJlbW92ZWQgZXZlbnQsIGJlY2F1c2UgaXQgaXMgZGlzcGF0Y2hl
ZCBiZWZvcmUgdGhlIHJlbW92YWwgdGFrZXMgcGxhY2UuCisgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY0RlY29yYXRp
b25zRm9yTGluZUxpc3RlbmVyKGxpbmVSb3cubGluZU51bWJlcik7CisgICAgICAgICAgICAgICAg
fS5iaW5kKHRoaXMpLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAodGFyZ2V0ID09PSBsaW5lUm93ICYmIChlLnR5cGUgPT09ICJET01O
b2RlSW5zZXJ0ZWQiIHx8IGUudHlwZSA9PT0gIkRPTU5vZGVSZW1vdmVkIikpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSAibGluZU51bWJlciIgKGlmIGFueSkgaXMgbm8gbG9uZ2VyIHZhbGlkIGZvciBh
IGxpbmUgYmVpbmcgcmVtb3ZlZCBvciBpbnNlcnRlZC4KKyAgICAgICAgICAgIGRlbGV0ZSBsaW5l
Um93LmxpbmVOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3RhcnRMaW5lID0gMDsK
KyAgICAgICAgZm9yICh2YXIgcm93ID0gbGluZVJvdzsgcm93OyByb3cgPSByb3cucHJldmlvdXNT
aWJsaW5nKSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAibnVt
YmVyIikgeworICAgICAgICAgICAgICAgIHN0YXJ0TGluZSA9IHJvdy5saW5lTnVtYmVyOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
dmFyIGVuZExpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsKKyAgICAgICAgZm9yICh2
YXIgcm93ID0gbGluZVJvdy5uZXh0U2libGluZzsgcm93OyByb3cgPSByb3cubmV4dFNpYmxpbmcp
IHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygcm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIiKSB7
CisgICAgICAgICAgICAgICAgZW5kTGluZSA9IHJvdy5saW5lTnVtYmVyOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMu
X2RpcnR5TGluZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX2RpcnR5TGluZXMuc3RhcnQgPSBNYXRo
Lm1pbih0aGlzLl9kaXJ0eUxpbmVzLnN0YXJ0LCBzdGFydExpbmUpOworICAgICAgICAgICAgdGhp
cy5fZGlydHlMaW5lcy5lbmQgPSBNYXRoLm1heCh0aGlzLl9kaXJ0eUxpbmVzLmVuZCwgZW5kTGlu
ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9kaXJ0eUxpbmVzID0geyBz
dGFydDogc3RhcnRMaW5lLCBlbmQ6IGVuZExpbmUgfTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQo
dGhpcy5fYXBwbHlEb21VcGRhdGVzLmJpbmQodGhpcyksIDApOworICAgICAgICB9CisgICAgfSwK
KworICAgIF9oYW5kbGVET01TdWJ0cmVlTW9kaWZpZWQ6IGZ1bmN0aW9uKGUpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsIHx8IHRoaXMuX3JlYWRPbmx5
IHx8IGUudGFyZ2V0ICE9PSB0aGlzLmVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgLy8gUHJvY2VlZCBvbmx5IHdoZW4gb3RoZXIgZXZlbnRzIGZhaWxlZCB0byBjYXRjaCB0
aGUgRE9NIHVwZGF0ZXMsIG90aGVyd2lzZSBpdCBpcyBub3QgbmVjZXNzYXJ5LgorICAgICAgICBp
ZiAodGhpcy5fZGlydHlMaW5lcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIg
c2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGlmICghc2VsZWN0aW9u
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzdGFydExpbmUgPSBNYXRoLm1p
bihzZWxlY3Rpb24uc3RhcnRMaW5lLCBzZWxlY3Rpb24uZW5kTGluZSk7CisgICAgICAgIHZhciBl
bmRMaW5lID0gTWF0aC5tYXgoc2VsZWN0aW9uLnN0YXJ0TGluZSwgc2VsZWN0aW9uLmVuZExpbmUp
ICsgMTsKKyAgICAgICAgZW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0Nv
dW50LCBlbmRMaW5lKTsKKworICAgICAgICB0aGlzLl9kaXJ0eUxpbmVzID0geyBzdGFydDogc3Rh
cnRMaW5lLCBlbmQ6IGVuZExpbmUgfTsKKyAgICAgICAgc2V0VGltZW91dCh0aGlzLl9hcHBseURv
bVVwZGF0ZXMuYmluZCh0aGlzKSwgMCk7CisgICAgfSwKKworICAgIF9hcHBseURvbVVwZGF0ZXM6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fZGlydHlMaW5lcykKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVM
aXN0ZW5lcikgewotICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCB0aGlzIGV2ZW50IGlzIHByb2Nl
c3NlZCBhbmQgb25seSB0aGVuIHN5bmMgdGhlIHNpemVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBpbgot
ICAgICAgICAgICAgLy8gY2FzZSBvZiB0aGUgRE9NTm9kZVJlbW92ZWQgZXZlbnQsIGJlY2F1c2Ug
aXQgaXMgZGlzcGF0Y2hlZCBiZWZvcmUgdGhlIHJlbW92YWwgdGFrZXMgcGxhY2UuCi0gICAgICAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNE
ZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcihsaW5lUm93LmxpbmVOdW1iZXIpOwotICAgICAgICAg
ICAgfS5iaW5kKHRoaXMpLCAwKTsKKworICAgICAgICB2YXIgZGlydHlMaW5lcyA9IHRoaXMuX2Rp
cnR5TGluZXM7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9kaXJ0eUxpbmVzOworCisgICAgICAgIC8v
IENoZWNrIGlmIHRoZSBlZGl0b3IgaGFkIGJlZW4gc2V0IHJlYWRPbmx5IGJ5IHRoZSBtb21lbnQg
d2hlbiB0aGlzIGFzeW5jIGNhbGxiYWNrIGdvdCBleGVjdXRlZC4KKyAgICAgICAgaWYgKHRoaXMu
X3JlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIEZJWE1FOiBERUxF
VEUgREVDT1JBVElPTlMgSU4gVEhFIElOVk9MVkVEIENIVU5LUyBJRiBBTlkhIFNZTkMgVEhFIEdV
VFRFUiBBTFNPLgorCisgICAgICAgIC8vIEZJWE1FOiBERUxFVEUgTUFSS0VEIEFORCBISUdITElH
SFRFRCBMSU5FUyAoSU5WQUxJREFURSBTRUFSQ0ggUkVTVUxUUykhIHRoaXMuX21hcmtlZFJhbmdl
RWxlbWVudAorICAgICAgICAKKyAgICAgICAgdmFyIGZpcnN0Q2h1bmtOdW1iZXIgPSB0aGlzLl9j
aHVua051bWJlckZvckxpbmUoZGlydHlMaW5lcy5zdGFydCk7CisgICAgICAgIHZhciBzdGFydExp
bmUgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXJdLnN0YXJ0TGluZTsKKyAgICAg
ICAgdmFyIGVuZExpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsKKworICAgICAgICAv
LyBDb2xsZWN0IGxpbmVzLgorICAgICAgICB2YXIgZmlyc3RMaW5lUm93OworICAgICAgICBpZiAo
Zmlyc3RDaHVua051bWJlcikgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENo
dW5rc1tmaXJzdENodW5rTnVtYmVyIC0gMV07CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBj
aHVuay5leHBhbmRlZCA/IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExpbmUg
KyBjaHVuay5saW5lc0NvdW50IC0gMSkgOiBjaHVuay5lbGVtZW50OworICAgICAgICAgICAgZmly
c3RMaW5lUm93ID0gZmlyc3RMaW5lUm93Lm5leHRTaWJsaW5nOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgbGluZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbGluZVJv
dyA9IGZpcnN0TGluZVJvdzsgbGluZVJvdzsgbGluZVJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmcp
IHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGluZVJvdy5saW5lTnVtYmVyID09PSAibnVtYmVy
IiAmJiBsaW5lUm93LmxpbmVOdW1iZXIgPj0gZGlydHlMaW5lcy5lbmQpIHsKKyAgICAgICAgICAg
ICAgICBlbmRMaW5lID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVXBkYXRlIHdpdGggdGhlIG5ld2VzdCBs
aW5lTnVtYmVyLCBzbyB0aGF0IHRoZSBjYWxsIHRvIHRoZSBfZ2V0U2VsZWN0aW9uIG1ldGhvZCBi
ZWxvdyBzaG91bGQgd29yay4KKyAgICAgICAgICAgIGxpbmVSb3cubGluZU51bWJlciA9IHN0YXJ0
TGluZSArIGxpbmVzLmxlbmd0aDsKKyAgICAgICAgICAgIHRoaXMuX2NvbGxlY3RMaW5lc0Zyb21E
aXYobGluZXMsIGxpbmVSb3cpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHJ5IHRvIGRlY3Jl
YXNlIHRoZSByYW5nZSBiZWluZyByZXBsYWNlZCBpZiBwb3NzaWJsZS4KKyAgICAgICAgdmFyIHN0
YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgd2hpbGUgKHN0YXJ0TGluZSA8IGRpcnR5TGluZXMuc3Rh
cnQgJiYgc3RhcnRPZmZzZXQgPCBsaW5lcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll90ZXh0TW9kZWwubGluZShzdGFydExpbmUpICE9PSBsaW5lc1tzdGFydE9mZnNldF0pCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICArK3N0YXJ0T2Zmc2V0OworICAgICAgICAg
ICAgKytzdGFydExpbmUKKyAgICAgICAgfQorCisgICAgICAgIHZhciBlbmRPZmZzZXQgPSBsaW5l
cy5sZW5ndGg7CisgICAgICAgIHdoaWxlIChlbmRMaW5lID4gZGlydHlMaW5lcy5lbmQgJiYgZW5k
T2Zmc2V0ID4gc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0TW9kZWwu
bGluZShlbmRMaW5lIC0gMSkgIT09IGxpbmVzW2VuZE9mZnNldCAtIDFdKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgLS1lbmRPZmZzZXQ7CisgICAgICAgICAgICAtLWVuZExp
bmUKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2Uoc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCk7CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlv
bigpOworICAgICAgICB0aGlzLmJlZ2luVXBkYXRlcygpOworCisgICAgICAgIGlmIChsaW5lcy5s
ZW5ndGggPT09IDAgJiYgZW5kTGluZSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KSB7Cisg
ICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydExp
bmUsIDAsIGVuZExpbmUsIDApOworICAgICAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5fdGV4
dE1vZGVsLnNldFRleHQocmFuZ2UsICcnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHZhciByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5k
TGluZSAtIDEsIHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKGVuZExpbmUgLSAxKSk7CisgICAg
ICAgICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChyYW5nZSwgbGlu
ZXMuam9pbigiXG4iKSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmVuZFVwZGF0ZXMoKTsK
KyAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIH0sCisKKyAg
ICBfY29sbGVjdExpbmVzRnJvbURpdjogZnVuY3Rpb24obGluZXMsIGVsZW1lbnQpCisgICAgewor
ICAgICAgICB2YXIgdGV4dENvbnRlbnRzID0gW107CisgICAgICAgIHZhciBub2RlID0gZWxlbWVu
dC50cmF2ZXJzZU5leHROb2RlKGVsZW1lbnQpOworICAgICAgICB3aGlsZSAobm9kZSkgeworICAg
ICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImJyIikKKyAgICAg
ICAgICAgICAgICB0ZXh0Q29udGVudHMucHVzaCgiXG4iKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAgICAgICAgIHRleHRD
b250ZW50cy5wdXNoKG5vZGUudGV4dENvbnRlbnQpOworICAgICAgICAgICAgbm9kZSA9IG5vZGUu
dHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0ZXh0
Q29udGVudCA9IHRleHRDb250ZW50cy5qb2luKCcnKTsKKyAgICAgICAgLy8gVGhlIGxhc3QgXG4g
KGlmIGFueSkgZG9lcyBub3QgImNvdW50IiBpbiBhIERJVi4KKyAgICAgICAgdGV4dENvbnRlbnQg
PSB0ZXh0Q29udGVudC5yZXBsYWNlKC9cbiQvLCAnJyk7CisKKyAgICAgICAgdGV4dENvbnRlbnRz
ID0gdGV4dENvbnRlbnQuc3BsaXQoIlxuIik7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGV4dENvbnRlbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsaW5lcy5wdXNoKHRleHRD
b250ZW50c1tpXSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC05NTksMTIgKzExODIsMTQgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoZGVjb3JhdGlvbik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpbkRvbVVwZGF0
ZXMoKTsKICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KSB7CiAg
ICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNF
bGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1kZWNvcmF0aW9ucyI7CiAgICAgICAgICAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVu
dCk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5h
cHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmREb21V
cGRhdGVzKCk7CiAgICAgfSwKIAogICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGRlY29y
YXRpb24pCkBAIC05NzUsNyArMTIwMCw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNo
dW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5k
ZWNvcmF0aW9uc0VsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIuYmVnaW5Eb21VcGRhdGVzKCk7CiAgICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0
aW9uc0VsZW1lbnQucmVtb3ZlQ2hpbGQoZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIuZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBnZXQgZXhwYW5kZWQoKQpAQCAt
OTk2LDYgKzEyMjMsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmJlZ2luRG9tVXBkYXRlcygpOworCiAgICAgICAgIGlmIChleHBhbmRlZCkgewog
ICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cyA9IFtdOwogICAgICAgICAgICAgdmFy
IHBhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudDsKQEAgLTEwMTYsMTIg
KzEyNDUsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluc2VydGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVu
dCwgbGluZVJvdyk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5fcmVsZWFzZUxpbmVzSGlnaGxpZ2h0KGxpbmVSb3cpOwogICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmVSb3cpOwogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9yZWxlYXNlTGlu
ZXNIaWdobGlnaHQobGluZVJvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWxldGUg
dGhpcy5fZXhwYW5kZWRMaW5lUm93czsKICAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIuZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBnZXQgaGVpZ2h0KCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82323</attachid>
            <date>2011-02-14 09:09:23 -0800</date>
            <delta_ts>2011-02-14 09:17:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54388-20110214200917.patch</filename>
            <type>text/plain</type>
            <size>21783</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDBjYmUzZGRkM2M4OTk2OTk0MjRiZGYzN2I1MDkwNzQ1MWZmMzFlLi5i
NmNlNjBhNWM5Y2U0Njk5MWNmZDIyMGNiODRjZmQzYjE3M2I0YzA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzQgQEAKKzIwMTEtMDItMTQgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFtUZXh0IGVkaXRvcl0gRmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIGVk
aXRhYmxlIFRleHRWaWV3ZXIgd2l0aG91dCBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Mzg4CisKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZp
ZXdlci5wcm90b3R5cGUuc2V0IHJlYWRPbmx5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yQ2h1bmtlZFBhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1
bmtlZFBhbmVsLnByb3RvdHlwZS5fYnVpbGRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLm1ha2VMaW5lQUNodW5rKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5iZWdpbkRv
bVVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwu
cHJvdG90eXBlLmVuZERvbVVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9yZXBhaW50QWxsKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlLnNldCBleHBhbmRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuc2V0IHJlYWRPbmx5KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fYnVpbGRDaHVu
a3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
Ll9oaWdobGlnaHREYXRhUmVhZHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlLl9wYWludExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5faGFuZGxlRE9NVXBkYXRlcy5y
ZXR1cm4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlLl9oYW5kbGVET01VcGRhdGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5faGFuZGxlRE9NU3VidHJlZU1vZGlmaWVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21VcGRh
dGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZS5fY29sbGVjdExpbmVzRnJvbURpdik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5DaHVuay5wcm90b3R5cGUuYWRkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuc2V0IGV4cGFu
ZGVkKToKKwogMjAxMS0wMi0xMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcwppbmRleCBjZTY1MDJkNDRjZWVkMWVl
YjAxZWUwY2RiYWUyZTk0NjUxOGFhNGQxLi4xYmRkYmZjYjg3ZTQyYWI4ZTY0OGE0YjgyZjQ2N2Vm
MjllOTc0MmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1RleHRWaWV3ZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9U
ZXh0Vmlld2VyLmpzCkBAIC01MSw2ICs1MSwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21haW5QYW5lbC5taW1lVHlwZSA9IG1pbWVUeXBl
OwogICAgIH0sCiAKKyAgICBzZXQgcmVhZE9ubHkocmVhZE9ubHkpCisgICAgeworICAgICAgICB0
aGlzLl9tYWluUGFuZWwucmVhZE9ubHkgPSByZWFkT25seTsKKyAgICB9LAorCiAgICAgZ2V0IHRl
eHRNb2RlbCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fdGV4dE1vZGVsOwpAQCAtMTkz
LDYgKzE5OCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsID0gZnVuY3Rp
b24odGV4dE1vZGVsKQogCiAgICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOwogICAgIHRo
aXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKKyAgICB0aGlzLl9kb21VcGRhdGVDb2FsZXNj
aW5nTGV2ZWwgPSAwOwogfQogCiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5w
cm90b3R5cGUgPSB7CkBAIC0yMjksNiArMjM1LDggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JD
aHVua2VkUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigp
CiAgICAgeworICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOworCiAgICAgICAgIHRoaXMu
ZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCiAgICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBb
XTsKQEAgLTIzOSw2ICsyNDcsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7
CisKKyAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7CiAgICAgfSwKIAogICAgIG1ha2VMaW5l
QUNodW5rOiBmdW5jdGlvbihsaW5lTnVtYmVyKQpAQCAtMjUxLDYgKzI2MSw4IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKG9s
ZENodW5rLmxpbmVzQ291bnQgPT09IDEpCiAgICAgICAgICAgICByZXR1cm4gb2xkQ2h1bms7CiAK
KyAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKKwogICAgICAgICB2YXIgd2FzRXhwYW5k
ZWQgPSBvbGRDaHVuay5leHBhbmRlZDsKICAgICAgICAgb2xkQ2h1bmsuZXhwYW5kZWQgPSBmYWxz
ZTsKIApAQCAtMjg3LDYgKzI5OSw4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBzdWZmaXhDaHVuay5leHBhbmRlZCA9
IHRydWU7CiAgICAgICAgIH0KIAorICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKKwogICAg
ICAgICByZXR1cm4gbGluZUNodW5rOwogICAgIH0sCiAKQEAgLTMxNiw2ICszMzAsMTYgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAgIH0sCiAKKyAgICBiZWdpbkRvbVVwZGF0ZXM6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbCsr
OworICAgIH0sCisKKyAgICBlbmREb21VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwtLTsKKyAgICB9LAorCiAgICAgX2NodW5r
TnVtYmVyRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7CiAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkgewpAQCAtMzM1LDcg
KzM1OSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9
IHsKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXBhaW50QWxsVGltZXI7CiAKLSAgICAg
ICAgaWYgKHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQorICAgICAgICBpZiAodGhpcy5fcGFp
bnRDb2FsZXNjaW5nTGV2ZWwgfHwgdGhpcy5fZGlydHlMaW5lcykKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBpZiAoIXRoaXMuX3RleHRDaHVua3MpCkBAIC00ODQsNiArNTA4LDggQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAg
IGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpbkRvbVVwZGF0ZXMoKTsKKwogICAgICAgICBpZiAoZXhw
YW5kZWQpIHsKICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MgPSBbXTsKICAgICAg
ICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQ7CkBA
IC01MDMsMTIgKzUyOSwxNCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0
aGlzLmVsZW1lbnQsIGxpbmVSb3cpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX2NhY2hlZFJvd3MucHVzaChsaW5lUm93KTsKICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fY2FjaGVk
Um93cy5wdXNoKGxpbmVSb3cpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2V4cGFuZGVkTGluZVJvd3M7CiAgICAgICAgIH0KKworICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLmVuZERvbVVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgZ2V0IGhlaWdodCgpCkBAIC01Mzcs
MTggKzU2NSwyNSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCA9IGZ1bmN0aW9u
KHRleHRNb2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsCiAKICAgICB0aGlzLl91cmwgPSB1
cmw7CiAgICAgdGhpcy5faGlnaGxpZ2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JI
aWdobGlnaHRlcih0ZXh0TW9kZWwsIHRoaXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMp
KTsKKyAgICB0aGlzLl9yZWFkT25seSA9IHRydWU7CiAKICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0g
InRleHQtZWRpdG9yLWNvbnRlbnRzIjsKICAgICB0aGlzLmVsZW1lbnQudGFiSW5kZXggPSAwOwog
CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9s
bC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQodGhpcyksIGZhbHNlKTsKKworICAg
IC8vIEZJWE1FOiBSZW1vdmUgb2xkIGxpdmUgZWRpdGluZyBmdW5jdGlvbmFsaXR5IGFuZCBQcmVm
ZXJlbmNlcy5zb3VyY2VFZGl0b3JFbmFibGVkIGZsYWcuCisgICAgaWYgKCFQcmVmZXJlbmNlcy5z
b3VyY2VFZGl0b3JFbmFibGVkKQorICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigia2V5ZG93biIsIHRoaXMuX2hhbmRsZUtleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwogCiAg
ICAgdmFyIGhhbmRsZURPTVVwZGF0ZXMgPSB0aGlzLl9oYW5kbGVET01VcGRhdGVzLmJpbmQodGhp
cyk7CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFN
b2RpZmllZCIsIGhhbmRsZURPTVVwZGF0ZXMsIGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgaGFuZGxlRE9NVXBkYXRlcywgZmFsc2Up
OwogICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Ob2RlUmVtb3ZlZCIsIGhh
bmRsZURPTVVwZGF0ZXMsIGZhbHNlKTsKKyAgICAvLyBGb3Igc29tZSByZWFzb25zLCBpbiBhIGZl
dyBjb3JuZXIgY2FzZXMgdGhlIGV2ZW50cyBhYm92ZSBhcmUgbm90IGFibGUgdG8gY2F0Y2ggdGhl
IGVkaXRpbmdzLgorICAgIC8vIFRvIHdvcmthcm91bmQgdGhhdCB3ZSBhbHNvIGxpc3RlbiB0byBh
IG1vcmUgZ2VuZXJhbCBldmVudCBhcyBhIGJhY2t1cC4KKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgdGhpcy5faGFuZGxlRE9NU3VidHJlZU1v
ZGlmaWVkLmJpbmQodGhpcyksIGZhbHNlKTsKIAogICAgIHRoaXMuZnJlZUNhY2hlZEVsZW1lbnRz
KCk7CiAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKQEAgLTU2MCw2ICs1OTUsMTkgQEAgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9o
aWdobGlnaHRlci5taW1lVHlwZSA9IG1pbWVUeXBlOwogICAgIH0sCiAKKyAgICBzZXQgcmVhZE9u
bHkocmVhZE9ubHkpCisgICAgeworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBQcmVmZXJl
bmNlcy5zb3VyY2VFZGl0b3JFbmFibGVkIGZsYWcuCisgICAgICAgIGlmICghUHJlZmVyZW5jZXMu
c291cmNlRWRpdG9yRW5hYmxlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll9yZWFkT25seSA9IHJlYWRPbmx5OworICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpCisgICAg
ICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidGV4dC1lZGl0b3ItZWRpdGFi
bGUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xh
c3MoInRleHQtZWRpdG9yLWVkaXRhYmxlIik7CisgICAgfSwKKwogICAgIG1hcmtBbmRSZXZlYWxS
YW5nZTogZnVuY3Rpb24ocmFuZ2UpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01h
cmspIHsKQEAgLTY1Myw2ICs3MDEsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCiAgICAgewogICAg
ICAgICB0aGlzLl9oaWdobGlnaHRlci5yZXNldCgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyArK2kpCisgICAgICAgICAgICB0aGlzLl90
ZXh0TW9kZWwucmVtb3ZlQXR0cmlidXRlKGksICJoaWdobGlnaHQiKTsKKwogICAgICAgICBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzLmNh
bGwodGhpcyk7CiAgICAgfSwKIApAQCAtNjgxLDcgKzczMiw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIF9oaWdobGlnaHREYXRhUmVhZHk6
IGZ1bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fbXV0
ZUhpZ2hsaWdodExpc3RlbmVyKQorICAgICAgICBpZiAodGhpcy5fbXV0ZUhpZ2hsaWdodExpc3Rl
bmVyIHx8IHRoaXMuX2RpcnR5TGluZXMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRo
aXMuX3BhaW50TGluZXMoZnJvbUxpbmUsIHRvTGluZSwgdHJ1ZSAvKnJlc3RvcmVTZWxlY3Rpb24q
Lyk7CiAgICAgfSwKQEAgLTcwNiw0NiArNzU3LDUxIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIF9wYWludExpbmU6IGZ1bmN0aW9uKGxpbmVS
b3csIGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5fdGV4
dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxpZ2h0Iik7Ci0gICAgICAgIGlm
ICghaGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmsgJiYgdGhp
cy5fcmFuZ2VUb01hcmsuc3RhcnRMaW5lID09PSBsaW5lTnVtYmVyKQotICAgICAgICAgICAgICAg
IHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudCA9IGhpZ2hsaWdodFNlYXJjaFJlc3VsdChsaW5lUm93
LCB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29s
dW1uIC0gdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgbGluZVJvdy5yZW1vdmVDaGlsZHJlbigpOwotICAgICAg
ICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwotICAgICAgICBp
ZiAoIWxpbmUpCi0gICAgICAgICAgICBsaW5lUm93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImJyIikpOwotCi0gICAgICAgIHZhciBwbGFpblRleHRTdGFydCA9IC0xOwotICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOykgewotICAgICAgICAgICAgaWYg
KGogPiAxMDAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGlzIHRvbyBsb25nIC0g
ZG8gbm90IHdhc3RlIGN5Y2xlcyBvbiBtaW5pZmllZCBqcyBoaWdobGlnaHRpbmcuCi0gICAgICAg
ICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ID09PSAtMSkKLSAgICAgICAgICAgICAgICAgICAg
cGxhaW5UZXh0U3RhcnQgPSBqOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB0aGlz
LmJlZ2luRG9tVXBkYXRlcygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIGhpZ2hs
aWdodCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImhpZ2hsaWdo
dCIpOworICAgICAgICAgICAgaWYgKCFoaWdobGlnaHQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fcmFuZ2VUb01hcmsgJiYgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRMaW5lID09PSBsaW5l
TnVtYmVyKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQgPSBo
aWdobGlnaHRTZWFyY2hSZXN1bHQobGluZVJvdywgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1
bW4sIHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0
Q29sdW1uKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB2YXIgYXR0cmlidXRlID0gaGlnaGxpZ2h0W2pdOwotICAgICAgICAgICAgaWYgKCFhdHRy
aWJ1dGUgfHwgIWF0dHJpYnV0ZS50b2tlblR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocGxh
aW5UZXh0U3RhcnQgPT09IC0xKQotICAgICAgICAgICAgICAgICAgICBwbGFpblRleHRTdGFydCA9
IGo7Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX2FwcGVuZFRleHROb2RlKGxpbmVSb3csIGxpbmUuc3Vic3RyaW5nKHBsYWluVGV4dFN0
YXJ0LCBqKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gLTE7CisKKyAg
ICAgICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHZhciBsaW5l
ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7CisgICAgICAgICAgICBpZiAoIWxp
bmUpCisgICAgICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJiciIpKTsKKworICAgICAgICAgICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0gLTE7Cisg
ICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOykgeworICAgICAgICAg
ICAgICAgIGlmIChqID4gMTAwMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGxpbmUg
aXMgdG9vIGxvbmcgLSBkbyBub3Qgd2FzdGUgY3ljbGVzIG9uIG1pbmlmaWVkIGpzIGhpZ2hsaWdo
dGluZy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ID09PSAtMSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gajsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBhdHRy
aWJ1dGUgPSBoaWdobGlnaHRbal07CisgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUgfHwg
IWF0dHJpYnV0ZS50b2tlblR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4
dFN0YXJ0ID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0g
ajsKKyAgICAgICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHROb2RlKGxpbmVSb3csIGxpbmUuc3Vic3Ry
aW5nKHBsYWluVGV4dFN0YXJ0LCBqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwbGFpblRl
eHRTdGFydCA9IC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX2FwcGVuZFNwYW4obGluZVJvdywgbGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0
ZS5sZW5ndGgpLCBhdHRyaWJ1dGUudG9rZW5UeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgaiAr
PSBhdHRyaWJ1dGUubGVuZ3RoOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0
aGlzLl9hcHBlbmRTcGFuKGxpbmVSb3csIGxpbmUuc3Vic3RyaW5nKGosIGogKyBhdHRyaWJ1dGUu
bGVuZ3RoKSwgYXR0cmlidXRlLnRva2VuVHlwZSk7Ci0gICAgICAgICAgICAgICAgaiArPSBhdHRy
aWJ1dGUubGVuZ3RoOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0
YXJ0ICE9PSAtMSkKKyAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRUZXh0Tm9kZShsaW5lUm93
LCBsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgbGluZS5sZW5ndGgpKTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUg
PT09IGxpbmVOdW1iZXIpCisgICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50
ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxpbmVSb3csIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0
Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydENvbHVtbik7CisgICAgICAgICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQp
CisgICAgICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChsaW5lUm93LmRlY29yYXRpb25z
RWxlbWVudCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB0aGlzLmVuZERvbVVw
ZGF0ZXMoKTsKICAgICAgICAgfQotICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0xKQot
ICAgICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5zdWJzdHJpbmco
cGxhaW5UZXh0U3RhcnQsIGxpbmUubGVuZ3RoKSk7Ci0gICAgICAgIGlmICh0aGlzLl9yYW5nZVRv
TWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUgPT09IGxpbmVOdW1iZXIpCi0gICAg
ICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQgPSBoaWdobGlnaHRTZWFyY2hSZXN1bHQo
bGluZVJvdywgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJr
LmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKLSAgICAgICAgaWYg
KGxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50KQotICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRD
aGlsZChsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCk7CiAgICAgfSwKIAogICAgIF9yZWxlYXNl
TGluZXNIaWdobGlnaHQ6IGZ1bmN0aW9uKGxpbmVSb3cpCkBAIC05MDcsMTkgKzk2MywxODQgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLmNvbXBsZXRlVVJMKHRoaXMuX3VybCwgaHJlZlZhbHVlKTsKICAg
ICB9LAogCisgICAgdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xk
VGV4dCwgbmV3VGV4dCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBVcGRhdGUgb25seSB0aGF0
IHBhcnQgb2YgdGhlIGVkaXRvciB0aGF0IGhhcyBqdXN0IGJlZW4gY2hhbmdlZC4KKyAgICAgICAg
dGhpcy5fYnVpbGRDaHVua3MoKTsKKyAgICB9LAorCiAgICAgX2hhbmRsZURPTVVwZGF0ZXM6IGZ1
bmN0aW9uKGUpCiAgICAgeworICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xl
dmVsKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdl
dDsKKyAgICAgICAgaWYgKHRhcmdldCA9PT0gdGhpcy5lbGVtZW50KQorICAgICAgICAgICAgcmV0
dXJuOworCiAgICAgICAgIHZhciBsaW5lUm93ID0gdGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoQ2xhc3MoIndlYmtpdC1saW5lLWNvbnRlbnQiKTsKLSAgICAgICAgaWYgKGxpbmVSb3cgPT09
IHRhcmdldCB8fCAhbGluZVJvdyB8fCAhbGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQgfHwgIWxp
bmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50LmlzQW5jZXN0b3IodGFyZ2V0KSkKKyAgICAgICAgaWYg
KCFsaW5lUm93KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChsaW5lUm93LmRl
Y29yYXRpb25zRWxlbWVudCAmJiBsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudC5pc0FuY2VzdG9y
KHRhcmdldCkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5l
TGlzdGVuZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHRoaXMgZXZlbnQgaXMg
cHJvY2Vzc2VkIGFuZCBvbmx5IHRoZW4gc3luYyB0aGUgc2l6ZXMuIFRoaXMgaXMgbmVjZXNzYXJ5
IGluCisgICAgICAgICAgICAgICAgLy8gY2FzZSBvZiB0aGUgRE9NTm9kZVJlbW92ZWQgZXZlbnQs
IGJlY2F1c2UgaXQgaXMgZGlzcGF0Y2hlZCBiZWZvcmUgdGhlIHJlbW92YWwgdGFrZXMgcGxhY2Uu
CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKGxpbmVSb3cubGluZU51
bWJlcik7CisgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAwKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMuX3N5bmNEZWNvcmF0aW9uc0Zv
ckxpbmVMaXN0ZW5lcikgewotICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCB0aGlzIGV2ZW50IGlz
IHByb2Nlc3NlZCBhbmQgb25seSB0aGVuIHN5bmMgdGhlIHNpemVzLiBUaGlzIGlzIG5lY2Vzc2Fy
eSBpbgotICAgICAgICAgICAgLy8gY2FzZSBvZiB0aGUgRE9NTm9kZVJlbW92ZWQgZXZlbnQsIGJl
Y2F1c2UgaXQgaXMgZGlzcGF0Y2hlZCBiZWZvcmUgdGhlIHJlbW92YWwgdGFrZXMgcGxhY2UuCi0g
ICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMu
X3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcihsaW5lUm93LmxpbmVOdW1iZXIpOwotICAg
ICAgICAgICAgfS5iaW5kKHRoaXMpLCAwKTsKICAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlz
Ll9yZWFkT25seSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGFyZ2V0ID09
PSBsaW5lUm93ICYmIChlLnR5cGUgPT09ICJET01Ob2RlSW5zZXJ0ZWQiIHx8IGUudHlwZSA9PT0g
IkRPTU5vZGVSZW1vdmVkIikpIHsKKyAgICAgICAgICAgIC8vIFRoZSAibGluZU51bWJlciIgKGlm
IGFueSkgaXMgbm8gbG9uZ2VyIHZhbGlkIGZvciBhIGxpbmUgYmVpbmcgcmVtb3ZlZCBvciBpbnNl
cnRlZC4KKyAgICAgICAgICAgIGRlbGV0ZSBsaW5lUm93LmxpbmVOdW1iZXI7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgc3RhcnRMaW5lID0gMDsKKyAgICAgICAgZm9yICh2YXIgcm93ID0gbGlu
ZVJvdzsgcm93OyByb3cgPSByb3cucHJldmlvdXNTaWJsaW5nKSB7CisgICAgICAgICAgICBpZiAo
dHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgICAgIHN0
YXJ0TGluZSA9IHJvdy5saW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIGVuZExpbmUgPSB0aGlzLl90ZXh0TW9k
ZWwubGluZXNDb3VudDsKKyAgICAgICAgZm9yICh2YXIgcm93ID0gbGluZVJvdy5uZXh0U2libGlu
Zzsgcm93OyByb3cgPSByb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Yg
cm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgZW5kTGluZSA9
IHJvdy5saW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX2RpcnR5TGluZXMpIHsKKyAgICAgICAgICAg
IHRoaXMuX2RpcnR5TGluZXMuc3RhcnQgPSBNYXRoLm1pbih0aGlzLl9kaXJ0eUxpbmVzLnN0YXJ0
LCBzdGFydExpbmUpOworICAgICAgICAgICAgdGhpcy5fZGlydHlMaW5lcy5lbmQgPSBNYXRoLm1h
eCh0aGlzLl9kaXJ0eUxpbmVzLmVuZCwgZW5kTGluZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLl9kaXJ0eUxpbmVzID0geyBzdGFydDogc3RhcnRMaW5lLCBlbmQ6IGVuZExp
bmUgfTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5fYXBwbHlEb21VcGRhdGVzLmJpbmQo
dGhpcyksIDApOworICAgICAgICB9CisgICAgfSwKKworICAgIF9oYW5kbGVET01TdWJ0cmVlTW9k
aWZpZWQ6IGZ1bmN0aW9uKGUpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlQ29h
bGVzY2luZ0xldmVsIHx8IHRoaXMuX3JlYWRPbmx5IHx8IGUudGFyZ2V0ICE9PSB0aGlzLmVsZW1l
bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gUHJvY2VlZCBvbmx5IHdoZW4g
b3RoZXIgZXZlbnRzIGZhaWxlZCB0byBjYXRjaCB0aGUgRE9NIHVwZGF0ZXMsIG90aGVyd2lzZSBp
dCBpcyBub3QgbmVjZXNzYXJ5LgorICAgICAgICBpZiAodGhpcy5fZGlydHlMaW5lcykKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0
aW9uKCk7CisgICAgICAgIGlmICghc2VsZWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciBzdGFydExpbmUgPSBNYXRoLm1pbihzZWxlY3Rpb24uc3RhcnRMaW5lLCBzZWxl
Y3Rpb24uZW5kTGluZSk7CisgICAgICAgIHZhciBlbmRMaW5lID0gTWF0aC5tYXgoc2VsZWN0aW9u
LnN0YXJ0TGluZSwgc2VsZWN0aW9uLmVuZExpbmUpICsgMTsKKyAgICAgICAgZW5kTGluZSA9IE1h
dGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCBlbmRMaW5lKTsKKworICAgICAgICB0
aGlzLl9kaXJ0eUxpbmVzID0geyBzdGFydDogc3RhcnRMaW5lLCBlbmQ6IGVuZExpbmUgfTsKKyAg
ICAgICAgc2V0VGltZW91dCh0aGlzLl9hcHBseURvbVVwZGF0ZXMuYmluZCh0aGlzKSwgMCk7Cisg
ICAgfSwKKworICAgIF9hcHBseURvbVVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy5fZGlydHlMaW5lcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2
YXIgZGlydHlMaW5lcyA9IHRoaXMuX2RpcnR5TGluZXM7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9k
aXJ0eUxpbmVzOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBlZGl0b3IgaGFkIGJlZW4gc2V0
IHJlYWRPbmx5IGJ5IHRoZSBtb21lbnQgd2hlbiB0aGlzIGFzeW5jIGNhbGxiYWNrIGdvdCBleGVj
dXRlZC4KKyAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIC8vIEZJWE1FOiBERUxFVEUgREVDT1JBVElPTlMgSU4gVEhFIElOVk9MVkVEIENI
VU5LUyBJRiBBTlkhIFNZTkMgVEhFIEdVVFRFUiBBTFNPLgorCisgICAgICAgIC8vIEZJWE1FOiBE
RUxFVEUgTUFSS0VEIEFORCBISUdITElHSFRFRCBMSU5FUyAoSU5WQUxJREFURSBTRUFSQ0ggUkVT
VUxUUykhIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudAorICAgICAgICAKKyAgICAgICAgdmFyIGZp
cnN0Q2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUoZGlydHlMaW5lcy5zdGFy
dCk7CisgICAgICAgIHZhciBzdGFydExpbmUgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtO
dW1iZXJdLnN0YXJ0TGluZTsKKyAgICAgICAgdmFyIGVuZExpbmUgPSB0aGlzLl90ZXh0TW9kZWwu
bGluZXNDb3VudDsKKworICAgICAgICAvLyBDb2xsZWN0IGxpbmVzLgorICAgICAgICB2YXIgZmly
c3RMaW5lUm93OworICAgICAgICBpZiAoZmlyc3RDaHVua051bWJlcikgeworICAgICAgICAgICAg
dmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tmaXJzdENodW5rTnVtYmVyIC0gMV07CisgICAg
ICAgICAgICBmaXJzdExpbmVSb3cgPSBjaHVuay5leHBhbmRlZCA/IGNodW5rLmdldEV4cGFuZGVk
TGluZVJvdyhjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50IC0gMSkgOiBjaHVuay5l
bGVtZW50OworICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gZmlyc3RMaW5lUm93Lm5leHRTaWJs
aW5nOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gdGhpcy5l
bGVtZW50LmZpcnN0Q2hpbGQ7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbGluZXMgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsgbGluZVJvdzsgbGluZVJv
dyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGluZVJv
dy5saW5lTnVtYmVyID09PSAibnVtYmVyIiAmJiBsaW5lUm93LmxpbmVOdW1iZXIgPj0gZGlydHlM
aW5lcy5lbmQpIHsKKyAgICAgICAgICAgICAgICBlbmRMaW5lID0gbGluZVJvdy5saW5lTnVtYmVy
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
VXBkYXRlIHdpdGggdGhlIG5ld2VzdCBsaW5lTnVtYmVyLCBzbyB0aGF0IHRoZSBjYWxsIHRvIHRo
ZSBfZ2V0U2VsZWN0aW9uIG1ldGhvZCBiZWxvdyBzaG91bGQgd29yay4KKyAgICAgICAgICAgIGxp
bmVSb3cubGluZU51bWJlciA9IHN0YXJ0TGluZSArIGxpbmVzLmxlbmd0aDsKKyAgICAgICAgICAg
IHRoaXMuX2NvbGxlY3RMaW5lc0Zyb21EaXYobGluZXMsIGxpbmVSb3cpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVHJ5IHRvIGRlY3JlYXNlIHRoZSByYW5nZSBiZWluZyByZXBsYWNlZCBpZiBw
b3NzaWJsZS4KKyAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgd2hpbGUgKHN0
YXJ0TGluZSA8IGRpcnR5TGluZXMuc3RhcnQgJiYgc3RhcnRPZmZzZXQgPCBsaW5lcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0TW9kZWwubGluZShzdGFydExpbmUpICE9PSBs
aW5lc1tzdGFydE9mZnNldF0pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAr
K3N0YXJ0T2Zmc2V0OworICAgICAgICAgICAgKytzdGFydExpbmU7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgZW5kT2Zmc2V0ID0gbGluZXMubGVuZ3RoOworICAgICAgICB3aGlsZSAoZW5kTGlu
ZSA+IGRpcnR5TGluZXMuZW5kICYmIGVuZE9mZnNldCA+IHN0YXJ0T2Zmc2V0KSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fdGV4dE1vZGVsLmxpbmUoZW5kTGluZSAtIDEpICE9PSBsaW5lc1tlbmRP
ZmZzZXQgLSAxXSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC0tZW5kT2Zm
c2V0OworICAgICAgICAgICAgLS1lbmRMaW5lOworICAgICAgICB9CisKKyAgICAgICAgbGluZXMg
PSBsaW5lcy5zbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgICAgICB2YXIgc2Vs
ZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIHRoaXMuYmVnaW5VcGRhdGVz
KCk7CisKKyAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCAmJiBlbmRMaW5lIDwgdGhpcy5f
dGV4dE1vZGVsLmxpbmVzQ291bnQpIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5kTGluZSwgMCk7CisgICAgICAgICAg
ICB2YXIgbmV3UmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChyYW5nZSwgJycpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5U
ZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBlbmRMaW5lIC0gMSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVM
ZW5ndGgoZW5kTGluZSAtIDEpKTsKKyAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuX3Rl
eHRNb2RlbC5zZXRUZXh0KHJhbmdlLCBsaW5lcy5qb2luKCJcbiIpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHRoaXMuZW5kVXBkYXRlcygpOworICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9u
KHNlbGVjdGlvbik7CisgICAgfSwKKworICAgIF9jb2xsZWN0TGluZXNGcm9tRGl2OiBmdW5jdGlv
bihsaW5lcywgZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciB0ZXh0Q29udGVudHMgPSBbXTsK
KyAgICAgICAgdmFyIG5vZGUgPSBlbGVtZW50LnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVudCk7Cisg
ICAgICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09PSAiYnIiKQorICAgICAgICAgICAgICAgIHRleHRDb250ZW50cy5wdXNoKCJc
biIpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05P
REUpCisgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRzLnB1c2gobm9kZS50ZXh0Q29udGVudCk7
CisgICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKGVsZW1lbnQpOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnRzLmpvaW4oJycp
OworICAgICAgICAvLyBUaGUgbGFzdCBcbiAoaWYgYW55KSBkb2VzIG5vdCAiY291bnQiIGluIGEg
RElWLgorICAgICAgICB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50LnJlcGxhY2UoL1xuJC8sICcn
KTsKKworICAgICAgICB0ZXh0Q29udGVudHMgPSB0ZXh0Q29udGVudC5zcGxpdCgiXG4iKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Q29udGVudHMubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBsaW5lcy5wdXNoKHRleHRDb250ZW50c1tpXSk7CiAgICAgfQogfQogCkBAIC05NTks
MTIgKzExODAsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoZGVjb3JhdGlvbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdGV4dFZpZXdl
ci5iZWdpbkRvbVVwZGF0ZXMoKTsKICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlv
bnNFbGVtZW50KSB7CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgICB0aGlzLmVsZW1l
bnQuZGVjb3JhdGlvbnNFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1kZWNvcmF0aW9u
cyI7CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50LmRl
Y29yYXRpb25zRWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29y
YXRpb25zRWxlbWVudC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKKyAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5lbmREb21VcGRhdGVzKCk7CiAgICAgfSwKIAogICAgIHJlbW92ZURlY29yYXRpb246
IGZ1bmN0aW9uKGRlY29yYXRpb24pCkBAIC05NzUsNyArMTE5OCw5IEBAIFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgICAgICBpZiAo
IXRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5Eb21VcGRhdGVzKCk7CiAgICAgICAgIHRoaXMu
ZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQucmVtb3ZlQ2hpbGQoZGVjb3JhdGlvbik7CisgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBnZXQg
ZXhwYW5kZWQoKQpAQCAtOTk2LDYgKzEyMjEsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1h
aW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAor
ICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2luRG9tVXBkYXRlcygpOworCiAgICAgICAgIGlm
IChleHBhbmRlZCkgewogICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cyA9IFtdOwog
ICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVu
dDsKQEAgLTEwMTYsMTIgKzEyNDMsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluc2VydGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVm
b3JlKHRoaXMuZWxlbWVudCwgbGluZVJvdyk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fcmVsZWFzZUxpbmVzSGlnaGxpZ2h0KGxp
bmVSb3cpOwogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxp
bmVSb3cpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLl9yZWxlYXNlTGluZXNIaWdobGlnaHQobGluZVJvdyk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBkZWxldGUgdGhpcy5fZXhwYW5kZWRMaW5lUm93czsKICAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBnZXQg
aGVpZ2h0KCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>