<?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>110830</bug_id>
          
          <creation_ts>2013-02-25 18:06:43 -0800</creation_ts>
          <short_desc>Add month popup for new calendar picker</short_desc>
          <delta_ts>2013-02-27 18:26:14 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>109439</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keishi Hattori">keishi</reporter>
          <assigned_to name="Keishi Hattori">keishi</assigned_to>
          <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841475</commentid>
    <comment_count>0</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2013-02-25 18:06:43 -0800</bug_when>
    <thetext>Add month popup for new calendar picker (Bug 109439)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841600</commentid>
    <comment_count>1</comment_count>
      <attachid>190197</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2013-02-25 21:21:05 -0800</bug_when>
    <thetext>Created attachment 190197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841887</commentid>
    <comment_count>2</comment_count>
      <attachid>190197</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-02-26 04:50:53 -0800</bug_when>
    <thetext>Comment on attachment 190197
Patch

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

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2153
&gt; +        this.dispatchEvent(&quot;didSelectMonth&quot;, this, new Month(year, month));

&quot;didSelectMonth&quot; -&gt; YearListView.EventTypeYearListViewDidSelectMonth ?

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2179
&gt; +        var row = parseInt(rowsWithIrregularHeight[i], 10);

Is this parseInt necessary?

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2407
&gt; +        eventHandled = this._moveHighlightTo(Month.createFromToday());
&gt; +        eventHandled = true;

Setting eventHandled twice looks bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842905</commentid>
    <comment_count>3</comment_count>
      <attachid>190486</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2013-02-27 03:42:13 -0800</bug_when>
    <thetext>Created attachment 190486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842989</commentid>
    <comment_count>4</comment_count>
      <attachid>190486</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-02-27 06:12:59 -0800</bug_when>
    <thetext>Comment on attachment 190486
Patch

looks ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843638</commentid>
    <comment_count>5</comment_count>
      <attachid>190486</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-27 18:26:11 -0800</bug_when>
    <thetext>Comment on attachment 190486
Patch

Clearing flags on attachment: 190486

Committed r144254: &lt;http://trac.webkit.org/changeset/144254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843639</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-27 18:26:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190197</attachid>
            <date>2013-02-25 21:21:05 -0800</date>
            <delta_ts>2013-02-27 03:42:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110830-20130226141719.patch</filename>
            <type>text/plain</type>
            <size>24807</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGYzYTE2MzBmY2E2MzBm
NGFhYjE3MzFhY2U3MmJiNGIyODY4MTA3MS4uOThjYTdlNTQ5ODgyNmU3MWEzNGQ2NDhiNTk1MGM2
MTAwOTMzNjY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEzLTAyLTI1ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBtb250aCBwb3B1
cCBmb3IgbmV3IGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEwODMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkaW5nIG1vbnRoIHBvcHVwIHZpZXcgZm9yIHVzZSBpbiB0aGUg
bmV3IGNhbGVuZGFyIHBpY2tlciAoQnVnIDEwOTQzOSkuCisgICAgICAgIFllYXJMaXN0Q2VsbCB3
aWxsIGdyb3cgaW4gaGVpZ2h0IHdoZW4gc2VsZWN0ZWQgdG8gcmV2ZWFsIHRoZSBidXR0b25zIGZv
cgorICAgICAgICBzZWxlY3RpbmcgdGhlIG1vbnRoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
Q29kZSBpcyBub3QgdXNlZCB5ZXQuCisKKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBvcHVwcy9j
YWxlbmRhclBpY2tlci5qczoKKyAgICAgICAgKFllYXJMaXN0Q2VsbCk6IEEgcm93IGluc2lkZSB0
aGUgbW9udGggcG9wdXAuIENvbnRhaW5zIGJ1dHRvbnMgZm9yIGNob29zaW5nIGEgbW9udGguCisg
ICAgICAgIChZZWFyTGlzdENlbGwucHJvdG90eXBlLl9yZWN5Y2xlQmluKToKKyAgICAgICAgKFll
YXJMaXN0Q2VsbC5wcm90b3R5cGUucmVzZXQpOiBSZXNldHMgYSB0aHJvd24gYXdheSBjZWxsIGZv
ciByZXVzZSBhdCB0aGUgZ2l2ZW4gcm93LgorICAgICAgICAoWWVhckxpc3RDZWxsLnByb3RvdHlw
ZS5oZWlnaHQpOgorICAgICAgICAoWWVhckxpc3RDZWxsLnByb3RvdHlwZS5zZXRIZWlnaHQpOgor
ICAgICAgICAoWWVhckxpc3RWaWV3KTogTGlzdCB2aWV3IHNob3dpbmcgWWVhckxpc3RDZWxscy4K
KyAgICAgICAgKFllYXJMaXN0Vmlldy5wcm90b3R5cGUub25Nb3VzZU92ZXIpOiBJZiB0aGUgbW91
c2UgaXMgb3ZlciBhIG1vbnRoIGJ1dHRvbiwgaGlnaGxpZ2h0cyBpdC4KKyAgICAgICAgKFllYXJM
aXN0Vmlldy5wcm90b3R5cGUub25Nb3VzZU91dCk6IERlLWhpZ2hsaWdodHMgdGhlIG1vbnRoIGJ1
dHRvbi4KKyAgICAgICAgKFllYXJMaXN0Vmlldy5wcm90b3R5cGUuc2V0V2lkdGgpOiBTZXQgc2Ny
b2xsIHZpZXcgd2lkdGggdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBzY3JvbGwgYmFyLgorICAgICAg
ICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS5zZXRIZWlnaHQpOiBTZXRzIHRoZSBzY3JvbGwgYmFy
IGhlaWdodCBhcyB3ZWxsLgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS5fYW5pbWF0
ZVJvdyk6IEFuaW1hdGVzIHRoZSByb3cgaGVpZ2h0IHRvIG9wZW4vY2xvc2UgdGhlIFllYXJMaXN0
Q2VsbC4KKyAgICAgICAgKFllYXJMaXN0Vmlldy5wcm90b3R5cGUub25DZWxsSGVpZ2h0QW5pbWF0
b3JEaWRTdG9wKTogS2VlcCB0aGlzLl9ydW5uaW5nQW5pbWF0b3JzIGFuZCB0aGlzLl9hbmltYXRp
bmdSb3dzIHVwIHRvIGRhdGUuCisgICAgICAgIChZZWFyTGlzdFZpZXcucHJvdG90eXBlLm9uQ2Vs
bEhlaWdodEFuaW1hdG9yU3RlcCk6IFVwZGF0ZSB0aGUgY2VsbCBoZWlnaHQgYW5kIHBvc2l0aW9u
LgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS5vbkNsaWNrKTogSWYgdGhpcyBpcyBh
IGNsaWNrIG9uIGEgbW9udGggYnV0dG9uLCBzZWxlY3QgdGhlIG1vbnRoLgorICAgICAgICAoWWVh
ckxpc3RWaWV3LnByb3RvdHlwZS5yb3dBdFNjcm9sbE9mZnNldCk6IENhbGN1bGF0ZXMgdGhlIHJv
dyBjdXJyZW50bHkgYXQgdGhlIGdpdmVuIG9mZnNldC4KKyAgICAgICAgKFllYXJMaXN0Vmlldy5w
cm90b3R5cGUuc2Nyb2xsT2Zmc2V0Rm9yUm93KTogQ2FsY3VsYXRlcyB0aGUgY3VycmVudCBzY3Jv
bGwgb2Zmc2V0IG9mIHRoZSBnaXZlbiByb3cuCisgICAgICAgIChZZWFyTGlzdFZpZXcucHJvdG90
eXBlLnByZXBhcmVOZXdDZWxsKTogUHJlcGFyZXMgYSBuZXcgb3IgcmVjeWNsZWQgWWVhckxpc3RD
ZWxsLgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS51cGRhdGVDZWxscyk6IFVwZGF0
ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB2aXNpYmxlIGNlbGxzLgorICAgICAgICAoWWVhckxpc3RW
aWV3LnByb3RvdHlwZS5kZXNlbGVjdCk6IERlc2VsZWN0cyBhIHJvdy4KKyAgICAgICAgKFllYXJM
aXN0Vmlldy5wcm90b3R5cGUuZGVzZWxlY3RXaXRob3V0QW5pbWF0aW5nKTogRGVzZWxlY3RzIGEg
cm93IHdpdGhvdXQgdGhlIGNsb3NpbmcgYW5pbWF0aW9uLgorICAgICAgICAoWWVhckxpc3RWaWV3
LnByb3RvdHlwZS5zZWxlY3QpOiBTZWxlY3RzIGEgcm93LgorICAgICAgICAoWWVhckxpc3RWaWV3
LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0QW5pbWF0aW5nKTogRGVzZWxlY3RzIGEgcm93IHdpdGhv
dXQgdGhlIG9wZW5pbmcgYW5pbWF0aW9uLgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlw
ZS5idXR0b25Gb3JNb250aCk6IFJldHVybnMgdGhlIG1vbnRoIGJ1dHRvbiBmb3IgYSBnaXZlbiBt
b250aC4gUmV0dXJucyBudWxsIGlmIHRoZSBjZWxsIGlzIG5vdCB2aXNpYmxlLgorICAgICAgICAo
WWVhckxpc3RWaWV3LnByb3RvdHlwZS5kZWhpZ2hsaWdodE1vbnRoKTogRGVoaWdobGlnaHRzIHRo
ZSBtb250aCBidXR0b24uCisgICAgICAgIChZZWFyTGlzdFZpZXcucHJvdG90eXBlLmhpZ2hsaWdo
dE1vbnRoKTogSGlnaGxpZ2h0cyB0aGUgbW9udGggYnV0dG9uLgorICAgICAgICAoWWVhckxpc3RW
aWV3LnByb3RvdHlwZS5zaG93KTogQ2FsbCB3aGVuIHNob3dpbmcgdGhlIHllYXIgbGlzdCB2aWV3
LiBTaG93cyB0aGUgZ2l2ZW4gbW9udGggYXMgaGlnaGxpZ2h0ZWQuCisgICAgICAgIChZZWFyTGlz
dFZpZXcucHJvdG90eXBlLmhpZGUpOiBEaXNwYXRjaGVzIGEgZGlkIGhpZGUgZXZlbnQgd2hpY2gg
d2lsbCBiZSBwaWNrZWQgdXAgYnkgdGhlIENhbGVuZGFyUGlja2VyIGFuZCB0aGUgTW9udGhQb3B1
cFZpZXcgd2lsbCBjbG9zZS4KKyAgICAgICAgKFllYXJMaXN0Vmlldy5wcm90b3R5cGUuX21vdmVI
aWdobGlnaHRUbyk6IFVzZWQgdG8gbW92ZSB0aGUgbW9udGggaGlnaGxpZ2h0IGluIHJlc3BvbnNl
IHRvIGEga2V5IGV2ZW50LgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS5vbktleURv
d24pOiBBcnJvdyBrZXlzIGFuZCBQYWdlVXAvUGFnZURvd24ga2V5cyB3b3JrLgorICAgICAgICAo
TW9udGhQb3B1cFZpZXcpOiBUaGUgcG9wdXAgdmlldyB0byBiZSBvdmVybGF5ZWQgb3ZlciB0aGUg
Y2FsZW5kYXIgcGlja2VyLgorICAgICAgICAoTW9udGhQb3B1cFZpZXcucHJvdG90eXBlLnNob3cp
OiBUYWtlcyB0aGUgaW5pdGlhbE1vbnRoIHRvIHNob3cgYW5kIHRoZSBjYWxlbmRhclRhYmxlUmVj
dCBzbyB3ZSBjYW4gb3ZlcmxheSB0aGUgeWVhciBsaXN0IHZpZXcgcmlnaHQgb24gdG9wIG9mIGl0
LgorICAgICAgICAoTW9udGhQb3B1cFZpZXcucHJvdG90eXBlLmhpZGUpOgorICAgICAgICAoTW9u
dGhQb3B1cFZpZXcucHJvdG90eXBlLm9uQ2xpY2spOiBIaWRlcyBpdHNlbGYgaWYgdGhlIHVzZSBj
bGlja3Mgb3V0c2lkZSB0aGUgeWVhciBsaXN0IHZpZXcuCisKIDIwMTMtMDItMjUgIFh1ZXFpbmcg
SHVhbmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgogCiAgICAgICAgIEZsZXhib3ggc2hvdWxk
IGlnbm9yZSBmaXJzdExldHRlciBwc2V1ZG8gZWxlbWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzIGIvU291cmNlL1dl
YkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKaW5kZXggMzkzMTNi
ZjlkYzc1ZDdjY2MyOWI3Y2NmZWI5N2NhMTU1NzQ5NWY5YS4uZTQ4MDM2ODlhNTQ1NDk3Zjk4NmU0
YWY1NjMxNGJmOGM1MmRlZjcwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2Vz
L3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKQEAgLTE4ODEsNiArMTg4MSw2MjkgQEAg
U2NydWJieVNjcm9sbEJhci5wcm90b3R5cGUub25TY3JvbGxUaW1lciA9IGZ1bmN0aW9uKCkgewog
CiAvKioKICAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMgTGlzdENlbGwKKyAqIEBwYXJhbSB7
IUFycmF5fSBzaG9ydE1vbnRoTGFiZWxzCisgKi8KK2Z1bmN0aW9uIFllYXJMaXN0Q2VsbChzaG9y
dE1vbnRoTGFiZWxzKSB7CisgICAgTGlzdENlbGwuY2FsbCh0aGlzKTsKKyAgICB0aGlzLmVsZW1l
bnQuY2xhc3NMaXN0LmFkZChZZWFyTGlzdENlbGwuQ2xhc3NOYW1lWWVhckxpc3RDZWxsKTsKKyAg
ICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gWWVhckxpc3RDZWxsLkhlaWdodCArICJweCI7
CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IUVsZW1lbnR9CisgICAgICogQGNvbnN0CisgICAg
ICovCisgICAgdGhpcy5sYWJlbCA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIFllYXJMaXN0Q2VsbC5D
bGFzc05hbWVMYWJlbCwgIi0tLS0iKTsKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5sYWJlbCk7CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IUFycmF5fSBBcnJheSBvZiB0aGUg
MTIgbW9udGggYnV0dG9uIGVsZW1lbnRzLgorICAgICAqIEBjb25zdAorICAgICAqLworICAgIHRo
aXMubW9udGhCdXR0b25zID0gW107CisgICAgdmFyIG1vbnRoQ2hvb3NlckVsZW1lbnQgPSBjcmVh
dGVFbGVtZW50KCJkaXYiLCBZZWFyTGlzdENlbGwuQ2xhc3NOYW1lTW9udGhDaG9vc2VyKTsKKyAg
ICBmb3IgKHZhciByID0gMDsgciA8IFllYXJMaXN0Q2VsbC5CdXR0b25Sb3dzOyArK3IpIHsKKyAg
ICAgICAgdmFyIGJ1dHRvbnNSb3cgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBZZWFyTGlzdENlbGwu
Q2xhc3NOYW1lTW9udGhCdXR0b25zUm93KTsKKyAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBZ
ZWFyTGlzdENlbGwuQnV0dG9uQ29sdW1uczsgKytjKSB7CisgICAgICAgICAgICB2YXIgbW9udGgg
PSBjICsgciAqIFllYXJMaXN0Q2VsbC5CdXR0b25Db2x1bW5zOworICAgICAgICAgICAgdmFyIGJ1
dHRvbiA9IGNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIsIFllYXJMaXN0Q2VsbC5DbGFzc05hbWVNb250
aEJ1dHRvbiwgc2hvcnRNb250aExhYmVsc1ttb250aF0pOworICAgICAgICAgICAgYnV0dG9uLmRh
dGFzZXQubW9udGggPSBtb250aDsKKyAgICAgICAgICAgIGJ1dHRvbnNSb3cuYXBwZW5kQ2hpbGQo
YnV0dG9uKTsKKyAgICAgICAgICAgIHRoaXMubW9udGhCdXR0b25zLnB1c2goYnV0dG9uKTsKKyAg
ICAgICAgfQorICAgICAgICBtb250aENob29zZXJFbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbnNS
b3cpOworICAgIH0KKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobW9udGhDaG9vc2VyRWxl
bWVudCk7CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IWJvb2xlYW59CisgICAgICogQHByaXZh
dGUKKyAgICAgKi8KKyAgICB0aGlzLl9zZWxlY3RlZCA9IGZhbHNlOworICAgIC8qKgorICAgICAq
IEB0eXBlIHshbnVtYmVyfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgdGhpcy5faGVp
Z2h0ID0gMDsKK30KKworWWVhckxpc3RDZWxsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGlz
dENlbGwucHJvdG90eXBlKTsKKworWWVhckxpc3RDZWxsLkhlaWdodCA9IDI1OworWWVhckxpc3RD
ZWxsLkJ1dHRvblJvd3MgPSAzOworWWVhckxpc3RDZWxsLkJ1dHRvbkNvbHVtbnMgPSA0OworWWVh
ckxpc3RDZWxsLlNlbGVjdGVkSGVpZ2h0ID0gMTIxOworWWVhckxpc3RDZWxsLkNsYXNzTmFtZVll
YXJMaXN0Q2VsbCA9ICJ5ZWFyLWxpc3QtY2VsbCI7CitZZWFyTGlzdENlbGwuQ2xhc3NOYW1lTGFi
ZWwgPSAibGFiZWwiOworWWVhckxpc3RDZWxsLkNsYXNzTmFtZU1vbnRoQ2hvb3NlciA9ICJtb250
aC1jaG9vc2VyIjsKK1llYXJMaXN0Q2VsbC5DbGFzc05hbWVNb250aEJ1dHRvbnNSb3cgPSAibW9u
dGgtYnV0dG9ucy1yb3ciOworWWVhckxpc3RDZWxsLkNsYXNzTmFtZU1vbnRoQnV0dG9uID0gIm1v
bnRoLWJ1dHRvbiI7CitZZWFyTGlzdENlbGwuQ2xhc3NOYW1lSGlnaGxpZ2h0ZWQgPSAiaGlnaGxp
Z2h0ZWQiOworCitZZWFyTGlzdENlbGwuX3JlY3ljbGVCaW4gPSBbXTsKKworLyoqCisgKiBAcmV0
dXJuIHshQXJyYXl9CisgKiBAb3ZlcnJpZGUKKyAqLworWWVhckxpc3RDZWxsLnByb3RvdHlwZS5f
cmVjeWNsZUJpbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBZZWFyTGlzdENlbGwuX3JlY3lj
bGVCaW47Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gcm93CisgKi8KK1llYXJMaXN0
Q2VsbC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyb3cpIHsKKyAgICB0aGlzLnJvdyA9IHJv
dzsKKyAgICB0aGlzLmxhYmVsLnRleHRDb250ZW50ID0gcm93ICsgMTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMubW9udGhCdXR0b25zLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHRoaXMu
bW9udGhCdXR0b25zW2ldLmNsYXNzTGlzdC5yZW1vdmUoWWVhckxpc3RDZWxsLkNsYXNzTmFtZUhp
Z2hsaWdodGVkKTsKKyAgICB9CisgICAgdGhpcy5zaG93KCk7Cit9OworCisvKioKKyAqIEByZXR1
cm4geyFudW1iZXJ9IFRoZSBoZWlnaHQgaW4gcGl4ZWxzLgorICovCitZZWFyTGlzdENlbGwucHJv
dG90eXBlLmhlaWdodCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7Cit9
OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gaGVpZ2h0IEhlaWdodCBpbiBwaXhlbHMuCisg
Ki8KK1llYXJMaXN0Q2VsbC5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0KSB7
CisgICAgaWYgKHRoaXMuX2hlaWdodCA9PT0gaGVpZ2h0KQorICAgICAgICByZXR1cm47CisgICAg
dGhpcy5faGVpZ2h0ID0gaGVpZ2h0OworICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0
aGlzLl9oZWlnaHQgKyAicHgiOworfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRl
bmRzIExpc3RWaWV3CisgKiBAcGFyYW0geyFNb250aH0gbWluaW11bU1vbnRoCisgKiBAcGFyYW0g
eyFNb250aH0gbWF4aW11bU1vbnRoCisgKi8KK2Z1bmN0aW9uIFllYXJMaXN0VmlldyhtaW5pbXVt
TW9udGgsIG1heGltdW1Nb250aCkgeworICAgIExpc3RWaWV3LmNhbGwodGhpcyk7CisgICAgdGhp
cy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoInllYXItbGlzdC12aWV3Iik7CisKKyAgICAvKioKKyAg
ICAgKiBAdHlwZSB7P01vbnRofQorICAgICAqLworICAgIHRoaXMuaGlnaGxpZ2h0ZWRNb250aCA9
IG51bGw7CisgICAgLyoqCisgICAgICogQHR5cGUgeyFNb250aH0KKyAgICAgKiBAY29uc3QKKyAg
ICAgKiBAcHJvdGVjdGVkCisgICAgICovCisgICAgdGhpcy5fbWluaW11bU1vbnRoID0gbWluaW11
bU1vbnRoOworICAgIC8qKgorICAgICAqIEB0eXBlIHshTW9udGh9CisgICAgICogQGNvbnN0Cisg
ICAgICogQHByb3RlY3RlZAorICAgICAqLworICAgIHRoaXMuX21heGltdW1Nb250aCA9IG1heGlt
dW1Nb250aDsKKworICAgIHRoaXMuc2Nyb2xsVmlldy5taW5pbXVtQ29udGVudE9mZnNldCA9ICh0
aGlzLl9taW5pbXVtTW9udGgueWVhciAtIDEpICogWWVhckxpc3RDZWxsLkhlaWdodDsKKyAgICB0
aGlzLnNjcm9sbFZpZXcubWF4aW11bUNvbnRlbnRPZmZzZXQgPSAodGhpcy5fbWF4aW11bU1vbnRo
LnllYXIgLSAxKSAqIFllYXJMaXN0Q2VsbC5IZWlnaHQgKyBZZWFyTGlzdENlbGwuU2VsZWN0ZWRI
ZWlnaHQ7CisgICAgCisgICAgLyoqCisgICAgICogQHR5cGUgeyFPYmplY3R9CisgICAgICogQGNv
bnN0CisgICAgICogQHByb3RlY3RlZAorICAgICAqLworICAgIHRoaXMuX3J1bm5pbmdBbmltYXRv
cnMgPSB7fTsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IUFycmF5fQorICAgICAqIEBjb25zdAor
ICAgICAqIEBwcm90ZWN0ZWQKKyAgICAgKi8KKyAgICB0aGlzLl9hbmltYXRpbmdSb3dzID0gW107
CisgICAgLyoqCisgICAgICogQHR5cGUgeyFib29sZWFufQorICAgICAqIEBwcm90ZWN0ZWQKKyAg
ICAgKi8KKyAgICB0aGlzLl9pZ25vcmVNb3VzZU91dFVudGlsbE5leHRNb3VzZU92ZXIgPSBmYWxz
ZTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IVNjcnViYnlTY3JvbGxCYXJ9CisgICAg
ICogQGNvbnN0CisgICAgICovCisgICAgdGhpcy5zY3J1YmJ5U2Nyb2xsQmFyID0gbmV3IFNjcnVi
YnlTY3JvbGxCYXIodGhpcy5zY3JvbGxWaWV3KTsKKyAgICB0aGlzLnNjcnViYnlTY3JvbGxCYXIu
YXR0YWNoVG8odGhpcyk7CisgICAgCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
Im1vdXNlb3ZlciIsIHRoaXMub25Nb3VzZU92ZXIsIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCB0aGlzLm9uTW91c2VPdXQsIGZhbHNlKTsKKyAg
ICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMub25LZXlEb3du
LCBmYWxzZSk7Cit9CisKK1llYXJMaXN0Vmlldy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExp
c3RWaWV3LnByb3RvdHlwZSk7CisKK1llYXJMaXN0Vmlldy5IZWlnaHQgPSBZZWFyTGlzdENlbGwu
U2VsZWN0ZWRIZWlnaHQgLSAxOworWWVhckxpc3RWaWV3LkV2ZW50VHlwZVllYXJMaXN0Vmlld0Rp
ZEhpZGUgPSAieWVhckxpc3RWaWV3RGlkSGlkZSI7CitZZWFyTGlzdFZpZXcuRXZlbnRUeXBlWWVh
ckxpc3RWaWV3RGlkU2VsZWN0TW9udGggPSAieWVhckxpc3RWaWV3RGlkU2VsZWN0TW9udGgiOwor
CisvKioKKyAqIEBwYXJhbSB7P0V2ZW50fSBldmVudAorICovCitZZWFyTGlzdFZpZXcucHJvdG90
eXBlLm9uTW91c2VPdmVyID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB2YXIgbW9udGhCdXR0b25F
bGVtZW50ID0gZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcyhldmVudC50YXJnZXQsIFllYXJM
aXN0Q2VsbC5DbGFzc05hbWVNb250aEJ1dHRvbik7CisgICAgaWYgKCFtb250aEJ1dHRvbkVsZW1l
bnQpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgY2VsbEVsZW1lbnQgPSBlbmNsb3NpbmdOb2Rl
T3JTZWxmV2l0aENsYXNzKG1vbnRoQnV0dG9uRWxlbWVudCwgWWVhckxpc3RDZWxsLkNsYXNzTmFt
ZVllYXJMaXN0Q2VsbCk7CisgICAgdmFyIGNlbGwgPSBjZWxsRWxlbWVudC4kdmlldzsKKyAgICB0
aGlzLmhpZ2hsaWdodE1vbnRoKG5ldyBNb250aChjZWxsLnJvdyArIDEsIHBhcnNlSW50KG1vbnRo
QnV0dG9uRWxlbWVudC5kYXRhc2V0Lm1vbnRoLCAxMCkpKTsKKyAgICB0aGlzLl9pZ25vcmVNb3Vz
ZU91dFVudGlsbE5leHRNb3VzZU92ZXIgPSBmYWxzZTsKK307CisKKy8qKgorICogQHBhcmFtIHs/
RXZlbnR9IGV2ZW50CisgKi8KK1llYXJMaXN0Vmlldy5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKHRoaXMuX2lnbm9yZU1vdXNlT3V0VW50aWxsTmV4dE1v
dXNlT3ZlcikKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBtb250aEJ1dHRvbkVsZW1lbnQgPSBl
bmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKGV2ZW50LnRhcmdldCwgWWVhckxpc3RDZWxsLkNs
YXNzTmFtZU1vbnRoQnV0dG9uKTsKKyAgICBpZiAoIW1vbnRoQnV0dG9uRWxlbWVudCkgeworICAg
ICAgICB0aGlzLmRlaGlnaGxpZ2h0TW9udGgoKTsKKyAgICB9Cit9OworCisvKioKKyAqIEBwYXJh
bSB7IW51bWJlcn0gd2lkdGggV2lkdGggaW4gcGl4ZWxzLgorICogQG92ZXJyaWRlCisgKi8KK1ll
YXJMaXN0Vmlldy5wcm90b3R5cGUuc2V0V2lkdGggPSBmdW5jdGlvbih3aWR0aCkgeworICAgIExp
c3RWaWV3LnByb3RvdHlwZS5zZXRXaWR0aC5jYWxsKHRoaXMsIHdpZHRoIC0gdGhpcy5zY3J1YmJ5
U2Nyb2xsQmFyLmVsZW1lbnQub2Zmc2V0V2lkdGgpOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS53
aWR0aCA9IHdpZHRoICsgInB4IjsKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSBoZWln
aHQgSGVpZ2h0IGluIHBpeGVscy4KKyAqIEBvdmVycmlkZQorICovCitZZWFyTGlzdFZpZXcucHJv
dG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCkgeworICAgIExpc3RWaWV3LnByb3Rv
dHlwZS5zZXRIZWlnaHQuY2FsbCh0aGlzLCBoZWlnaHQpOworICAgIHRoaXMuc2NydWJieVNjcm9s
bEJhci5zZXRIZWlnaHQoaGVpZ2h0KTsKK307CisKKy8qKgorICogQGVudW0ge251bWJlcn0KKyAq
LworWWVhckxpc3RWaWV3LlJvd0FuaW1hdGlvbkRpcmVjdGlvbiA9IHsKKyAgICBPcGVuaW5nOiAw
LAorICAgIENsb3Npbmc6IDEKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSByb3cKKyAq
IEBwYXJhbSB7IVllYXJMaXN0Vmlldy5Sb3dBbmltYXRpb25EaXJlY3Rpb259IGRpcmVjdGlvbgor
ICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLl9hbmltYXRlUm93ID0gZnVuY3Rpb24ocm93LCBk
aXJlY3Rpb24pIHsKKyAgICB2YXIgZnJvbVZhbHVlID0gZGlyZWN0aW9uID09PSBZZWFyTGlzdFZp
ZXcuUm93QW5pbWF0aW9uRGlyZWN0aW9uLkNsb3NpbmcgPyBZZWFyTGlzdENlbGwuU2VsZWN0ZWRI
ZWlnaHQgOiBZZWFyTGlzdENlbGwuSGVpZ2h0OworICAgIHZhciBvbGRBbmltYXRvciA9IHRoaXMu
X3J1bm5pbmdBbmltYXRvcnNbcm93XTsKKyAgICBpZiAob2xkQW5pbWF0b3IpIHsKKyAgICAgICAg
b2xkQW5pbWF0b3Iuc3RvcCgpOworICAgICAgICBmcm9tVmFsdWUgPSBvbGRBbmltYXRvci5jdXJy
ZW50VmFsdWU7CisgICAgfQorICAgIHZhciBjZWxsID0gdGhpcy5jZWxsQXRSb3cocm93KTsKKyAg
ICB2YXIgYW5pbWF0b3IgPSBuZXcgQW5pbWF0b3IoKTsKKyAgICBhbmltYXRvci5zdGVwID0gdGhp
cy5vbkNlbGxIZWlnaHRBbmltYXRvclN0ZXA7CisgICAgYW5pbWF0b3Iuc2V0RnJvbShmcm9tVmFs
dWUpOworICAgIGFuaW1hdG9yLnNldFRvKGRpcmVjdGlvbiA9PT0gWWVhckxpc3RWaWV3LlJvd0Fu
aW1hdGlvbkRpcmVjdGlvbi5PcGVuaW5nID8gWWVhckxpc3RDZWxsLlNlbGVjdGVkSGVpZ2h0IDog
WWVhckxpc3RDZWxsLkhlaWdodCk7CisgICAgYW5pbWF0b3IudGltaW5nRnVuY3Rpb24gPSBBbmlt
YXRpb25UaW1pbmdGdW5jdGlvbi5FYXNlSW5PdXQ7CisgICAgYW5pbWF0b3IuZHVyYXRpb24gPSAz
MDA7CisgICAgYW5pbWF0b3Iucm93ID0gcm93OworICAgIGFuaW1hdG9yLm9uKEFuaW1hdG9yLkV2
ZW50VHlwZURpZEFuaW1hdGlvblN0b3AsIHRoaXMub25DZWxsSGVpZ2h0QW5pbWF0b3JEaWRTdG9w
KTsKKyAgICB0aGlzLl9ydW5uaW5nQW5pbWF0b3JzW3Jvd10gPSBhbmltYXRvcjsKKyAgICB0aGlz
Ll9hbmltYXRpbmdSb3dzLnB1c2gocm93KTsKKyAgICB0aGlzLl9hbmltYXRpbmdSb3dzLnNvcnQo
KTsKKyAgICBhbmltYXRvci5zdGFydCgpOworfTsKKworLyoqCisgKiBAcGFyYW0gez9BbmltYXRv
cn0gYW5pbWF0b3IKKyAqLworWWVhckxpc3RWaWV3LnByb3RvdHlwZS5vbkNlbGxIZWlnaHRBbmlt
YXRvckRpZFN0b3AgPSBmdW5jdGlvbihhbmltYXRvcikgeworICAgIGRlbGV0ZSB0aGlzLl9ydW5u
aW5nQW5pbWF0b3JzW2FuaW1hdG9yLnJvd107CisgICAgdmFyIGluZGV4ID0gdGhpcy5fYW5pbWF0
aW5nUm93cy5pbmRleE9mKGFuaW1hdG9yLnJvdyk7CisgICAgdGhpcy5fYW5pbWF0aW5nUm93cy5z
cGxpY2UoaW5kZXgsIDEpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFBbmltYXRvcn0gYW5pbWF0
b3IKKyAqLworWWVhckxpc3RWaWV3LnByb3RvdHlwZS5vbkNlbGxIZWlnaHRBbmltYXRvclN0ZXAg
PSBmdW5jdGlvbihhbmltYXRvcikgeworICAgIHZhciBjZWxsID0gdGhpcy5jZWxsQXRSb3coYW5p
bWF0b3Iucm93KTsKKyAgICBpZiAoY2VsbCkKKyAgICAgICAgY2VsbC5zZXRIZWlnaHQoYW5pbWF0
b3IuY3VycmVudFZhbHVlKTsKKyAgICB0aGlzLnVwZGF0ZUNlbGxzKCk7Cit9OworCisvKioKKyAq
IEBwYXJhbSB7P0V2ZW50fSBldmVudAorICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLm9uQ2xp
Y2sgPSBmdW5jdGlvbihldmVudCkgeworICAgIHZhciBvbGRTZWxlY3RlZFJvdyA9IHRoaXMuc2Vs
ZWN0ZWRSb3c7CisgICAgTGlzdFZpZXcucHJvdG90eXBlLm9uQ2xpY2suY2FsbCh0aGlzLCBldmVu
dCk7CisgICAgdmFyIHllYXIgPSB0aGlzLnNlbGVjdGVkUm93ICsgMTsKKyAgICBpZiAodGhpcy5z
ZWxlY3RlZFJvdyAhPT0gb2xkU2VsZWN0ZWRSb3cpIHsKKyAgICAgICAgdmFyIG1vbnRoID0gdGhp
cy5oaWdobGlnaHRlZE1vbnRoID8gdGhpcy5oaWdobGlnaHRlZE1vbnRoLm1vbnRoIDogMDsKKyAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCJkaWRTZWxlY3RNb250aCIsIHRoaXMsIG5ldyBNb250
aCh5ZWFyLCBtb250aCkpOworICAgICAgICB0aGlzLnNjcm9sbFZpZXcuc2Nyb2xsVG8odGhpcy5z
ZWxlY3RlZFJvdyAqIFllYXJMaXN0Q2VsbC5IZWlnaHQsIHRydWUpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciBtb250aEJ1dHRvbiA9IGVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoZXZl
bnQudGFyZ2V0LCBZZWFyTGlzdENlbGwuQ2xhc3NOYW1lTW9udGhCdXR0b24pOworICAgICAgICBp
ZiAoIW1vbnRoQnV0dG9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgbW9udGgg
PSBwYXJzZUludChtb250aEJ1dHRvbi5kYXRhc2V0Lm1vbnRoLCAxMCk7CisgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudChZZWFyTGlzdFZpZXcuRXZlbnRUeXBlWWVhckxpc3RWaWV3RGlkU2VsZWN0
TW9udGgsIHRoaXMsIG5ldyBNb250aCh5ZWFyLCBtb250aCkpOworICAgICAgICB0aGlzLmhpZGUo
KTsKKyAgICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gc2Nyb2xsT2Zmc2V0Cisg
KiBAcmV0dXJuIHshbnVtYmVyfQorICogQG92ZXJyaWRlCisgKi8KK1llYXJMaXN0Vmlldy5wcm90
b3R5cGUucm93QXRTY3JvbGxPZmZzZXQgPSBmdW5jdGlvbihzY3JvbGxPZmZzZXQpIHsKKyAgICB2
YXIgcmVtYWluaW5nT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0OworICAgIHZhciBsYXN0QW5pbWF0aW5n
Um93ID0gMDsKKyAgICB2YXIgcm93c1dpdGhJcnJlZ3VsYXJIZWlnaHQgPSB0aGlzLl9hbmltYXRp
bmdSb3dzLnNsaWNlKCk7CisgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3cgPiAtMSAmJiAhdGhpcy5f
cnVubmluZ0FuaW1hdG9yc1t0aGlzLnNlbGVjdGVkUm93XSkgeworICAgICAgICByb3dzV2l0aEly
cmVndWxhckhlaWdodC5wdXNoKHRoaXMuc2VsZWN0ZWRSb3cpOworICAgICAgICByb3dzV2l0aEly
cmVndWxhckhlaWdodC5zb3J0KCk7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93
c1dpdGhJcnJlZ3VsYXJIZWlnaHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHJvdyA9IHBh
cnNlSW50KHJvd3NXaXRoSXJyZWd1bGFySGVpZ2h0W2ldLCAxMCk7CisgICAgICAgIHZhciBhbmlt
YXRvciA9IHRoaXMuX3J1bm5pbmdBbmltYXRvcnNbcm93XTsKKyAgICAgICAgdmFyIHJvd0hlaWdo
dCA9IGFuaW1hdG9yID8gYW5pbWF0b3IuY3VycmVudFZhbHVlIDogWWVhckxpc3RDZWxsLlNlbGVj
dGVkSGVpZ2h0OworICAgICAgICBpZiAocmVtYWluaW5nT2Zmc2V0IDw9IChyb3cgLSBsYXN0QW5p
bWF0aW5nUm93KSAqIFllYXJMaXN0Q2VsbC5IZWlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiBs
YXN0QW5pbWF0aW5nUm93ICsgTWF0aC5mbG9vcihyZW1haW5pbmdPZmZzZXQgLyBZZWFyTGlzdENl
bGwuSGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gKHJvdyAt
IGxhc3RBbmltYXRpbmdSb3cpICogWWVhckxpc3RDZWxsLkhlaWdodDsKKyAgICAgICAgaWYgKHJl
bWFpbmluZ09mZnNldCA8PSAocm93SGVpZ2h0IC0gWWVhckxpc3RDZWxsLkhlaWdodCkpCisgICAg
ICAgICAgICByZXR1cm4gcm93OworICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gcm93SGVpZ2h0
IC0gWWVhckxpc3RDZWxsLkhlaWdodDsKKyAgICAgICAgbGFzdEFuaW1hdGluZ1JvdyA9IHJvdzsK
KyAgICB9CisgICAgcmV0dXJuIGxhc3RBbmltYXRpbmdSb3cgKyBNYXRoLmZsb29yKHJlbWFpbmlu
Z09mZnNldCAvIFllYXJMaXN0Q2VsbC5IZWlnaHQpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFu
dW1iZXJ9IHJvdworICogQHJldHVybiB7IW51bWJlcn0KKyAqIEBvdmVycmlkZQorICovCitZZWFy
TGlzdFZpZXcucHJvdG90eXBlLnNjcm9sbE9mZnNldEZvclJvdyA9IGZ1bmN0aW9uKHJvdykgewor
ICAgIHZhciBzY3JvbGxPZmZzZXQgPSByb3cgKiBZZWFyTGlzdENlbGwuSGVpZ2h0OworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYW5pbWF0aW5nUm93cy5sZW5ndGg7ICsraSkgeworICAg
ICAgICB2YXIgYW5pbWF0aW5nUm93ID0gdGhpcy5fYW5pbWF0aW5nUm93c1tpXTsKKyAgICAgICAg
aWYgKGFuaW1hdGluZ1JvdyA+PSByb3cpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdmFy
IGFuaW1hdG9yID0gdGhpcy5fcnVubmluZ0FuaW1hdG9yc1thbmltYXRpbmdSb3ddOworICAgICAg
ICBzY3JvbGxPZmZzZXQgKz0gYW5pbWF0b3IuY3VycmVudFZhbHVlIC0gWWVhckxpc3RDZWxsLkhl
aWdodDsKKyAgICB9CisgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3cgPiAtMSAmJiB0aGlzLnNlbGVj
dGVkUm93IDwgcm93ICYmICF0aGlzLl9ydW5uaW5nQW5pbWF0b3JzW3RoaXMuc2VsZWN0ZWRSb3dd
KSB7CisgICAgICAgIHNjcm9sbE9mZnNldCArPSBZZWFyTGlzdENlbGwuU2VsZWN0ZWRIZWlnaHQg
LSBZZWFyTGlzdENlbGwuSGVpZ2h0OworICAgIH0KKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0Owor
fTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHJvdworICogQHJldHVybiB7IVllYXJMaXN0
Q2VsbH0KKyAqIEBvdmVycmlkZQorICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLnByZXBhcmVO
ZXdDZWxsID0gZnVuY3Rpb24ocm93KSB7CisgICAgdmFyIGNlbGwgPSBZZWFyTGlzdENlbGwuX3Jl
Y3ljbGVCaW4ucG9wKCkgfHwgbmV3IFllYXJMaXN0Q2VsbChnbG9iYWwucGFyYW1zLnNob3J0TW9u
dGhMYWJlbHMpOworICAgIGNlbGwucmVzZXQocm93KTsKKyAgICBjZWxsLnNldFNlbGVjdGVkKHRo
aXMuc2VsZWN0ZWRSb3cgPT09IHJvdyk7CisgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRNb250aCAm
JiByb3cgPT09IHRoaXMuaGlnaGxpZ2h0ZWRNb250aC55ZWFyIC0gMSkgeworICAgICAgICBjZWxs
Lm1vbnRoQnV0dG9uc1t0aGlzLmhpZ2hsaWdodGVkTW9udGgubW9udGhdLmNsYXNzTGlzdC5hZGQo
WWVhckxpc3RDZWxsLkNsYXNzTmFtZUhpZ2hsaWdodGVkKTsKKyAgICB9CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjZWxsLm1vbnRoQnV0dG9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIg
bW9udGggPSBuZXcgTW9udGgocm93ICsgMSwgaSk7CisgICAgICAgIGNlbGwubW9udGhCdXR0b25z
W2ldLmRpc2FibGVkID0gdGhpcy5fbWluaW11bU1vbnRoID4gbW9udGggfHwgdGhpcy5fbWF4aW11
bU1vbnRoIDwgbW9udGg7CisgICAgfQorICAgIHZhciBhbmltYXRvciA9IHRoaXMuX3J1bm5pbmdB
bmltYXRvcnNbcm93XTsKKyAgICBpZiAoYW5pbWF0b3IpCisgICAgICAgIGNlbGwuc2V0SGVpZ2h0
KGFuaW1hdG9yLmN1cnJlbnRWYWx1ZSk7CisgICAgZWxzZSBpZiAocm93ID09PSB0aGlzLnNlbGVj
dGVkUm93KQorICAgICAgICBjZWxsLnNldEhlaWdodChZZWFyTGlzdENlbGwuU2VsZWN0ZWRIZWln
aHQpOworICAgIGVsc2UKKyAgICAgICAgY2VsbC5zZXRIZWlnaHQoWWVhckxpc3RDZWxsLkhlaWdo
dCk7CisgICAgcmV0dXJuIGNlbGw7Cit9OworCisvKioKKyAqIEBvdmVycmlkZQorICovCitZZWFy
TGlzdFZpZXcucHJvdG90eXBlLnVwZGF0ZUNlbGxzID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGZp
cnN0VmlzaWJsZVJvdyA9IHRoaXMuZmlyc3RWaXNpYmxlUm93KCk7CisgICAgdmFyIGxhc3RWaXNp
YmxlUm93ID0gdGhpcy5sYXN0VmlzaWJsZVJvdygpOworICAgIGNvbnNvbGUuYXNzZXJ0KGZpcnN0
VmlzaWJsZVJvdyA8PSBsYXN0VmlzaWJsZVJvdyk7CisgICAgZm9yICh2YXIgYyBpbiB0aGlzLl9j
ZWxscykgeworICAgICAgICB2YXIgY2VsbCA9IHRoaXMuX2NlbGxzW2NdOworICAgICAgICBpZiAo
Y2VsbC5yb3cgPCBmaXJzdFZpc2libGVSb3cgfHwgY2VsbC5yb3cgPiBsYXN0VmlzaWJsZVJvdykK
KyAgICAgICAgICAgIHRoaXMudGhyb3dBd2F5Q2VsbChjZWxsKTsKKyAgICB9CisgICAgZm9yICh2
YXIgaSA9IGZpcnN0VmlzaWJsZVJvdzsgaSA8PSBsYXN0VmlzaWJsZVJvdzsgKytpKSB7CisgICAg
ICAgIHZhciBjZWxsID0gdGhpcy5fY2VsbHNbaV07CisgICAgICAgIGlmIChjZWxsKQorICAgICAg
ICAgICAgY2VsbC5zZXRQb3NpdGlvbih0aGlzLnNjcm9sbFZpZXcuY29udGVudFBvc2l0aW9uRm9y
Q29udGVudE9mZnNldCh0aGlzLnNjcm9sbE9mZnNldEZvclJvdyhjZWxsLnJvdykpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdGhpcy5hZGRDZWxsSWZOZWNlc3NhcnkoaSk7CisgICAgfQor
ICAgIHRoaXMuc2V0TmVlZHNVcGRhdGVDZWxscyhmYWxzZSk7Cit9OworCisvKioKKyAqIEBvdmVy
cmlkZQorICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLmRlc2VsZWN0ID0gZnVuY3Rpb24oKSB7
CisgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3cgPT09IExpc3RWaWV3Lk5vU2VsZWN0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgdmFyIHNlbGVjdGVkQ2VsbCA9IHRoaXMuX2NlbGxzW3RoaXMuc2Vs
ZWN0ZWRSb3ddOworICAgIGlmIChzZWxlY3RlZENlbGwpCisgICAgICAgIHNlbGVjdGVkQ2VsbC5z
ZXRTZWxlY3RlZChmYWxzZSk7CisgICAgdGhpcy5fYW5pbWF0ZVJvdyh0aGlzLnNlbGVjdGVkUm93
LCBZZWFyTGlzdFZpZXcuUm93QW5pbWF0aW9uRGlyZWN0aW9uLkNsb3NpbmcpOworICAgIHRoaXMu
c2VsZWN0ZWRSb3cgPSBMaXN0Vmlldy5Ob1NlbGVjdGlvbjsKKyAgICB0aGlzLnNldE5lZWRzVXBk
YXRlQ2VsbHModHJ1ZSk7Cit9OworCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLmRlc2VsZWN0V2l0
aG91dEFuaW1hdGluZyA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ID09
PSBMaXN0Vmlldy5Ob1NlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBzZWxlY3Rl
ZENlbGwgPSB0aGlzLl9jZWxsc1t0aGlzLnNlbGVjdGVkUm93XTsKKyAgICBpZiAoc2VsZWN0ZWRD
ZWxsKSB7CisgICAgICAgIHNlbGVjdGVkQ2VsbC5zZXRTZWxlY3RlZChmYWxzZSk7CisgICAgICAg
IHNlbGVjdGVkQ2VsbC5zZXRIZWlnaHQoWWVhckxpc3RDZWxsLkhlaWdodCk7CisgICAgfQorICAg
IHRoaXMuc2VsZWN0ZWRSb3cgPSBMaXN0Vmlldy5Ob1NlbGVjdGlvbjsKKyAgICB0aGlzLnNldE5l
ZWRzVXBkYXRlQ2VsbHModHJ1ZSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gcm93
CisgKiBAb3ZlcnJpZGUKKyAqLworWWVhckxpc3RWaWV3LnByb3RvdHlwZS5zZWxlY3QgPSBmdW5j
dGlvbihyb3cpIHsKKyAgICBpZiAodGhpcy5zZWxlY3RlZFJvdyA9PT0gcm93KQorICAgICAgICBy
ZXR1cm47CisgICAgdGhpcy5kZXNlbGVjdCgpOworICAgIGlmIChyb3cgPT09IExpc3RWaWV3Lk5v
U2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgdGhpcy5zZWxlY3RlZFJvdyA9IHJvdzsK
KyAgICBpZiAodGhpcy5zZWxlY3RlZFJvdyAhPT0gTGlzdFZpZXcuTm9TZWxlY3Rpb24pIHsKKyAg
ICAgICAgdmFyIHNlbGVjdGVkQ2VsbCA9IHRoaXMuX2NlbGxzW3RoaXMuc2VsZWN0ZWRSb3ddOwor
ICAgICAgICB0aGlzLl9hbmltYXRlUm93KHRoaXMuc2VsZWN0ZWRSb3csIFllYXJMaXN0Vmlldy5S
b3dBbmltYXRpb25EaXJlY3Rpb24uT3BlbmluZyk7CisgICAgICAgIGlmIChzZWxlY3RlZENlbGwp
CisgICAgICAgICAgICBzZWxlY3RlZENlbGwuc2V0U2VsZWN0ZWQodHJ1ZSk7CisgICAgICAgIHZh
ciBtb250aCA9IHRoaXMuaGlnaGxpZ2h0ZWRNb250aCA/IHRoaXMuaGlnaGxpZ2h0ZWRNb250aC5t
b250aCA6IDA7CisgICAgICAgIHRoaXMuaGlnaGxpZ2h0TW9udGgobmV3IE1vbnRoKHRoaXMuc2Vs
ZWN0ZWRSb3cgKyAxLCBtb250aCkpOworICAgIH0KKyAgICB0aGlzLnNldE5lZWRzVXBkYXRlQ2Vs
bHModHJ1ZSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gcm93CisgKi8KK1llYXJM
aXN0Vmlldy5wcm90b3R5cGUuc2VsZWN0V2l0aG91dEFuaW1hdGluZyA9IGZ1bmN0aW9uKHJvdykg
eworICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ID09PSByb3cpCisgICAgICAgIHJldHVybjsKKyAg
ICB0aGlzLmRlc2VsZWN0V2l0aG91dEFuaW1hdGluZygpOworICAgIGlmIChyb3cgPT09IExpc3RW
aWV3Lk5vU2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgdGhpcy5zZWxlY3RlZFJvdyA9
IHJvdzsKKyAgICBpZiAodGhpcy5zZWxlY3RlZFJvdyAhPT0gTGlzdFZpZXcuTm9TZWxlY3Rpb24p
IHsKKyAgICAgICAgdmFyIHNlbGVjdGVkQ2VsbCA9IHRoaXMuX2NlbGxzW3RoaXMuc2VsZWN0ZWRS
b3ddOworICAgICAgICBpZiAoc2VsZWN0ZWRDZWxsKSB7CisgICAgICAgICAgICBzZWxlY3RlZENl
bGwuc2V0U2VsZWN0ZWQodHJ1ZSk7CisgICAgICAgICAgICBzZWxlY3RlZENlbGwuc2V0SGVpZ2h0
KFllYXJMaXN0Q2VsbC5TZWxlY3RlZEhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1v
bnRoID0gdGhpcy5oaWdobGlnaHRlZE1vbnRoID8gdGhpcy5oaWdobGlnaHRlZE1vbnRoLm1vbnRo
IDogMDsKKyAgICAgICAgdGhpcy5oaWdobGlnaHRNb250aChuZXcgTW9udGgodGhpcy5zZWxlY3Rl
ZFJvdyArIDEsIG1vbnRoKSk7CisgICAgfQorICAgIHRoaXMuc2V0TmVlZHNVcGRhdGVDZWxscyh0
cnVlKTsKK307CisKKy8qKgorICogQHBhcmFtIHshTW9udGh9IG1vbnRoCisgKiBAcmV0dXJuIHs/
SFRNTEJ1dHRvbkVsZW1lbnR9CisgKi8KK1llYXJMaXN0Vmlldy5wcm90b3R5cGUuYnV0dG9uRm9y
TW9udGggPSBmdW5jdGlvbihtb250aCkgeworICAgIGlmICghbW9udGgpCisgICAgICAgIHJldHVy
biBudWxsOworICAgIHZhciByb3cgPSBtb250aC55ZWFyIC0gMTsKKyAgICB2YXIgY2VsbCA9IHRo
aXMuY2VsbEF0Um93KHJvdyk7CisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICByZXR1cm4gY2VsbC5tb250aEJ1dHRvbnNbbW9udGgubW9udGhdOworfTsKKworWWVhckxp
c3RWaWV3LnByb3RvdHlwZS5kZWhpZ2hsaWdodE1vbnRoID0gZnVuY3Rpb24oKSB7CisgICAgaWYg
KCF0aGlzLmhpZ2hsaWdodGVkTW9udGgpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgbW9udGhC
dXR0b24gPSB0aGlzLmJ1dHRvbkZvck1vbnRoKHRoaXMuaGlnaGxpZ2h0ZWRNb250aCk7CisgICAg
aWYgKG1vbnRoQnV0dG9uKSB7CisgICAgICAgIG1vbnRoQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUo
WWVhckxpc3RDZWxsLkNsYXNzTmFtZUhpZ2hsaWdodGVkKTsKKyAgICB9CisgICAgdGhpcy5oaWdo
bGlnaHRlZE1vbnRoID0gbnVsbDsKK307CisKKy8qKgorICogQHBhcmFtIHshTW9udGh9IG1vbnRo
CisgKi8KK1llYXJMaXN0Vmlldy5wcm90b3R5cGUuaGlnaGxpZ2h0TW9udGggPSBmdW5jdGlvbiht
b250aCkgeworICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkTW9udGggJiYgdGhpcy5oaWdobGlnaHRl
ZE1vbnRoLmVxdWFscyhtb250aCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLmRlaGlnaGxp
Z2h0TW9udGgoKTsKKyAgICB0aGlzLmhpZ2hsaWdodGVkTW9udGggPSBtb250aDsKKyAgICBpZiAo
IXRoaXMuaGlnaGxpZ2h0ZWRNb250aCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBtb250aEJ1
dHRvbiA9IHRoaXMuYnV0dG9uRm9yTW9udGgodGhpcy5oaWdobGlnaHRlZE1vbnRoKTsKKyAgICBp
ZiAobW9udGhCdXR0b24pIHsKKyAgICAgICAgbW9udGhCdXR0b24uY2xhc3NMaXN0LmFkZChZZWFy
TGlzdENlbGwuQ2xhc3NOYW1lSGlnaGxpZ2h0ZWQpOworICAgIH0KK307CisKKy8qKgorICogQHBh
cmFtIHshTW9udGh9IG1vbnRoCisgKi8KK1llYXJMaXN0Vmlldy5wcm90b3R5cGUuc2hvdyA9IGZ1
bmN0aW9uKG1vbnRoKSB7CisgICAgdGhpcy5faWdub3JlTW91c2VPdXRVbnRpbGxOZXh0TW91c2VP
dmVyID0gdHJ1ZTsKKyAgICAKKyAgICB0aGlzLnNjcm9sbFRvUm93KG1vbnRoLnllYXIgLSAxLCBm
YWxzZSk7CisgICAgdGhpcy5zZWxlY3RXaXRob3V0QW5pbWF0aW5nKG1vbnRoLnllYXIgLSAxKTsK
KyAgICB0aGlzLmhpZ2hsaWdodE1vbnRoKG1vbnRoKTsKK307CisKK1llYXJMaXN0Vmlldy5wcm90
b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGlzcGF0Y2hFdmVudChZZWFyTGlz
dFZpZXcuRXZlbnRUeXBlWWVhckxpc3RWaWV3RGlkSGlkZSwgdGhpcyk7Cit9OworCisvKioKKyAq
IEBwYXJhbSB7IU1vbnRofSBtb250aAorICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLl9tb3Zl
SGlnaGxpZ2h0VG8gPSBmdW5jdGlvbihtb250aCkgeworICAgIHRoaXMuaGlnaGxpZ2h0TW9udGgo
bW9udGgpOworICAgIHRoaXMuc2VsZWN0KHRoaXMuaGlnaGxpZ2h0ZWRNb250aC55ZWFyIC0gMSk7
CisKKyAgICB0aGlzLmRpc3BhdGNoRXZlbnQoWWVhckxpc3RWaWV3LkV2ZW50VHlwZVllYXJMaXN0
Vmlld0RpZFNlbGVjdE1vbnRoLCB0aGlzLCBtb250aCk7CisgICAgdGhpcy5zY3JvbGxWaWV3LnNj
cm9sbFRvKHRoaXMuc2VsZWN0ZWRSb3cgKiBZZWFyTGlzdENlbGwuSGVpZ2h0LCB0cnVlKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK307CisKKy8qKgorICogQHBhcmFtIHs/RXZlbnR9IGV2ZW50CisgKi8K
K1llYXJMaXN0Vmlldy5wcm90b3R5cGUub25LZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICB2YXIga2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcjsKKyAgICB2YXIgZXZlbnRIYW5kbGVkID0g
ZmFsc2U7CisgICAgaWYgKGtleSA9PSAiVSswMDU0IikgeyAvLyAndCcga2V5LgorICAgICAgICBl
dmVudEhhbmRsZWQgPSB0aGlzLl9tb3ZlSGlnaGxpZ2h0VG8oTW9udGguY3JlYXRlRnJvbVRvZGF5
KCkpOworICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAodGhpcy5o
aWdobGlnaHRlZE1vbnRoKSB7CisgICAgICAgIGlmIChnbG9iYWwucGFyYW1zLmlzTG9jYWxlUlRM
ID8ga2V5ID09ICJSaWdodCIgOiBrZXkgPT0gIkxlZnQiKSB7CisgICAgICAgICAgICBldmVudEhh
bmRsZWQgPSB0aGlzLl9tb3ZlSGlnaGxpZ2h0VG8odGhpcy5oaWdobGlnaHRlZE1vbnRoLnByZXZp
b3VzKCkpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiVXAiKSB7CisgICAgICAgICAgICBl
dmVudEhhbmRsZWQgPSB0aGlzLl9tb3ZlSGlnaGxpZ2h0VG8odGhpcy5oaWdobGlnaHRlZE1vbnRo
LnByZXZpb3VzKFllYXJMaXN0Q2VsbC5CdXR0b25Db2x1bW5zKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoZ2xvYmFsLnBhcmFtcy5pc0xvY2FsZVJUTCA/IGtleSA9PSAiTGVmdCIgOiBrZXkgPT0gIlJp
Z2h0IikgeworICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gdGhpcy5fbW92ZUhpZ2hsaWdodFRv
KHRoaXMuaGlnaGxpZ2h0ZWRNb250aC5uZXh0KCkpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9
PSAiRG93biIpIHsKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRoaXMuX21vdmVIaWdobGln
aHRUbyh0aGlzLmhpZ2hsaWdodGVkTW9udGgubmV4dChZZWFyTGlzdENlbGwuQnV0dG9uQ29sdW1u
cykpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZVVwIikgeworICAgICAgICAgICAg
ZXZlbnRIYW5kbGVkID0gdGhpcy5fbW92ZUhpZ2hsaWdodFRvKHRoaXMuaGlnaGxpZ2h0ZWRNb250
aC5wcmV2aW91cyhNb250aHNQZXJZZWFyKSk7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJQ
YWdlRG93biIpIHsKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRoaXMuX21vdmVIaWdobGln
aHRUbyh0aGlzLmhpZ2hsaWdodGVkTW9udGgubmV4dChNb250aHNQZXJZZWFyKSk7CisgICAgICAg
IH0gZWxzZSBpZiAoa2V5ID09ICJFbnRlciIpIHsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudChZZWFyTGlzdFZpZXcuRXZlbnRUeXBlWWVhckxpc3RWaWV3RGlkU2VsZWN0TW9udGgsIHRo
aXMsIHRoaXMuaGlnaGxpZ2h0ZWRNb250aCk7CisgICAgICAgICAgICB0aGlzLmhpZGUoKTsKKyAg
ICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KGtleSA9PSAiVXAiKSB7CisgICAgICAgIHRoaXMuc2Nyb2xsVmlldy5zY3JvbGxCeSgtWWVhckxp
c3RDZWxsLkhlaWdodCwgdHJ1ZSk7CisgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAg
fSBlbHNlIGlmIChrZXkgPT0gIkRvd24iKSB7CisgICAgICAgIHRoaXMuc2Nyb2xsVmlldy5zY3Jv
bGxCeShZZWFyTGlzdENlbGwuSGVpZ2h0LCB0cnVlKTsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0g
dHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZVVwIikgeworICAgICAgICB0aGlzLnNj
cm9sbFZpZXcuc2Nyb2xsQnkoLXRoaXMuc2Nyb2xsVmlldy5oZWlnaHQoKSwgdHJ1ZSk7CisgICAg
ICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlBhZ2VEb3du
IikgeworICAgICAgICB0aGlzLnNjcm9sbFZpZXcuc2Nyb2xsQnkodGhpcy5zY3JvbGxWaWV3Lmhl
aWdodCgpLCB0cnVlKTsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoZXZlbnRIYW5kbGVkKSB7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwor
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KK307CisKKy8qKgorICogQGNv
bnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBWaWV3CisgKiBAcGFyYW0geyFNb250aH0gbWluaW11bU1v
bnRoCisgKiBAcGFyYW0geyFNb250aH0gbWF4aW11bU1vbnRoCisgKi8KK2Z1bmN0aW9uIE1vbnRo
UG9wdXBWaWV3KG1pbmltdW1Nb250aCwgbWF4aW11bU1vbnRoKSB7CisgICAgVmlldy5jYWxsKHRo
aXMsIGNyZWF0ZUVsZW1lbnQoImRpdiIsIE1vbnRoUG9wdXBWaWV3LkNsYXNzTmFtZU1vbnRoUG9w
dXBWaWV3KSk7CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IVllYXJMaXN0Vmlld30KKyAgICAg
KiBAY29uc3QKKyAgICAgKi8KKyAgICB0aGlzLnllYXJMaXN0VmlldyA9IG5ldyBZZWFyTGlzdFZp
ZXcobWluaW11bU1vbnRoLCBtYXhpbXVtTW9udGgpOworICAgIHRoaXMueWVhckxpc3RWaWV3LmF0
dGFjaFRvKHRoaXMpOworCisgICAgLyoqCisgICAgICogQHR5cGUgeyFib29sZWFufQorICAgICAq
LworICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7CisKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLm9uQ2xpY2ssIGZhbHNlKTsKK30KKworTW9udGhQb3B1
cFZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShWaWV3LnByb3RvdHlwZSk7CisKK01vbnRo
UG9wdXBWaWV3LkNsYXNzTmFtZU1vbnRoUG9wdXBWaWV3ID0gIm1vbnRoLXBvcHVwLXZpZXciOwor
CitNb250aFBvcHVwVmlldy5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKGluaXRpYWxNb250aCwg
Y2FsZW5kYXJUYWJsZVJlY3QpIHsKKyAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7CisgICAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOworICAgIHRoaXMueWVhckxpc3RW
aWV3LnNldFdpZHRoKGNhbGVuZGFyVGFibGVSZWN0LndpZHRoIC0gMik7CisgICAgdGhpcy55ZWFy
TGlzdFZpZXcuc2V0SGVpZ2h0KFllYXJMaXN0Vmlldy5IZWlnaHQpOworICAgIGlmIChnbG9iYWwu
cGFyYW1zLmlzTG9jYWxlUlRMKQorICAgICAgICB0aGlzLnllYXJMaXN0Vmlldy5lbGVtZW50LnN0
eWxlLnJpZ2h0ID0gY2FsZW5kYXJUYWJsZVJlY3QueCArICJweCI7CisgICAgZWxzZQorICAgICAg
ICB0aGlzLnllYXJMaXN0Vmlldy5lbGVtZW50LnN0eWxlLmxlZnQgPSBjYWxlbmRhclRhYmxlUmVj
dC54ICsgInB4IjsKKyAgICB0aGlzLnllYXJMaXN0Vmlldy5lbGVtZW50LnN0eWxlLnRvcCA9IGNh
bGVuZGFyVGFibGVSZWN0LnkgKyAicHgiOworICAgIHRoaXMueWVhckxpc3RWaWV3LnNob3coaW5p
dGlhbE1vbnRoKTsKKyAgICB0aGlzLnllYXJMaXN0Vmlldy5lbGVtZW50LmZvY3VzKCk7Cit9Owor
CitNb250aFBvcHVwVmlldy5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICgh
dGhpcy5pc1Zpc2libGUpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLmlzVmlzaWJsZSA9IGZh
bHNlOworICAgIHRoaXMuZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVu
dCk7CisgICAgdGhpcy55ZWFyTGlzdFZpZXcuaGlkZSgpOworfTsKKworLyoqCisgKiBAcGFyYW0g
ez9FdmVudH0gZXZlbnQKKyAqLworTW9udGhQb3B1cFZpZXcucHJvdG90eXBlLm9uQ2xpY2sgPSBm
dW5jdGlvbihldmVudCkgeworICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuZWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuaGlkZSgpOworfTsKKworLyoqCisgKiBAY29uc3Ry
dWN0b3IKICAqIEBwYXJhbSB7IUVsZW1lbnR9IGVsZW1lbnQKICAqIEBwYXJhbSB7IU9iamVjdH0g
Y29uZmlnCiAgKi8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190486</attachid>
            <date>2013-02-27 03:42:13 -0800</date>
            <delta_ts>2013-02-27 18:26:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110830-20130227203826.patch</filename>
            <type>text/plain</type>
            <size>24774</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjAxZGVlODcyYjc0NDFk
NmRhYjY0MjU5YTM5NzZlMjRhYjdhMjFlNC4uYjg3MDMxYzRkMjJlM2Y1MjhkYThjNjVkODFlMjQ2
NzY4ZDkxZmMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEzLTAyLTI1ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBtb250aCBwb3B1
cCBmb3IgbmV3IGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEwODMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkaW5nIG1vbnRoIHBvcHVwIHZpZXcgZm9yIHVzZSBpbiB0aGUg
bmV3IGNhbGVuZGFyIHBpY2tlciAoQnVnIDEwOTQzOSkuCisgICAgICAgIFllYXJMaXN0Q2VsbCB3
aWxsIGdyb3cgaW4gaGVpZ2h0IHdoZW4gc2VsZWN0ZWQgdG8gcmV2ZWFsIHRoZSBidXR0b25zIGZv
cgorICAgICAgICBzZWxlY3RpbmcgdGhlIG1vbnRoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
Q29kZSBpcyBub3QgdXNlZCB5ZXQuCisKKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBvcHVwcy9j
YWxlbmRhclBpY2tlci5qczoKKyAgICAgICAgKFllYXJMaXN0Q2VsbCk6IEEgcm93IGluc2lkZSB0
aGUgbW9udGggcG9wdXAuIENvbnRhaW5zIGJ1dHRvbnMgZm9yIGNob29zaW5nIGEgbW9udGguCisg
ICAgICAgIChZZWFyTGlzdENlbGwucHJvdG90eXBlLl9yZWN5Y2xlQmluKToKKyAgICAgICAgKFll
YXJMaXN0Q2VsbC5wcm90b3R5cGUucmVzZXQpOiBSZXNldHMgYSB0aHJvd24gYXdheSBjZWxsIGZv
ciByZXVzZSBhdCB0aGUgZ2l2ZW4gcm93LgorICAgICAgICAoWWVhckxpc3RDZWxsLnByb3RvdHlw
ZS5oZWlnaHQpOgorICAgICAgICAoWWVhckxpc3RDZWxsLnByb3RvdHlwZS5zZXRIZWlnaHQpOgor
ICAgICAgICAoWWVhckxpc3RWaWV3KTogTGlzdCB2aWV3IHNob3dpbmcgWWVhckxpc3RDZWxscy4K
KyAgICAgICAgKFllYXJMaXN0Vmlldy5wcm90b3R5cGUub25Nb3VzZU92ZXIpOiBJZiB0aGUgbW91
c2UgaXMgb3ZlciBhIG1vbnRoIGJ1dHRvbiwgaGlnaGxpZ2h0cyBpdC4KKyAgICAgICAgKFllYXJM
aXN0Vmlldy5wcm90b3R5cGUub25Nb3VzZU91dCk6IERlLWhpZ2hsaWdodHMgdGhlIG1vbnRoIGJ1
dHRvbi4KKyAgICAgICAgKFllYXJMaXN0Vmlldy5wcm90b3R5cGUuc2V0V2lkdGgpOiBTZXQgc2Ny
b2xsIHZpZXcgd2lkdGggdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBzY3JvbGwgYmFyLgorICAgICAg
ICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS5zZXRIZWlnaHQpOiBTZXRzIHRoZSBzY3JvbGwgYmFy
IGhlaWdodCBhcyB3ZWxsLgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS5fYW5pbWF0
ZVJvdyk6IEFuaW1hdGVzIHRoZSByb3cgaGVpZ2h0IHRvIG9wZW4vY2xvc2UgdGhlIFllYXJMaXN0
Q2VsbC4KKyAgICAgICAgKFllYXJMaXN0Vmlldy5wcm90b3R5cGUub25DZWxsSGVpZ2h0QW5pbWF0
b3JEaWRTdG9wKTogS2VlcCB0aGlzLl9ydW5uaW5nQW5pbWF0b3JzIGFuZCB0aGlzLl9hbmltYXRp
bmdSb3dzIHVwIHRvIGRhdGUuCisgICAgICAgIChZZWFyTGlzdFZpZXcucHJvdG90eXBlLm9uQ2Vs
bEhlaWdodEFuaW1hdG9yU3RlcCk6IFVwZGF0ZSB0aGUgY2VsbCBoZWlnaHQgYW5kIHBvc2l0aW9u
LgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS5vbkNsaWNrKTogSWYgdGhpcyBpcyBh
IGNsaWNrIG9uIGEgbW9udGggYnV0dG9uLCBzZWxlY3QgdGhlIG1vbnRoLgorICAgICAgICAoWWVh
ckxpc3RWaWV3LnByb3RvdHlwZS5yb3dBdFNjcm9sbE9mZnNldCk6IENhbGN1bGF0ZXMgdGhlIHJv
dyBjdXJyZW50bHkgYXQgdGhlIGdpdmVuIG9mZnNldC4KKyAgICAgICAgKFllYXJMaXN0Vmlldy5w
cm90b3R5cGUuc2Nyb2xsT2Zmc2V0Rm9yUm93KTogQ2FsY3VsYXRlcyB0aGUgY3VycmVudCBzY3Jv
bGwgb2Zmc2V0IG9mIHRoZSBnaXZlbiByb3cuCisgICAgICAgIChZZWFyTGlzdFZpZXcucHJvdG90
eXBlLnByZXBhcmVOZXdDZWxsKTogUHJlcGFyZXMgYSBuZXcgb3IgcmVjeWNsZWQgWWVhckxpc3RD
ZWxsLgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS51cGRhdGVDZWxscyk6IFVwZGF0
ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB2aXNpYmxlIGNlbGxzLgorICAgICAgICAoWWVhckxpc3RW
aWV3LnByb3RvdHlwZS5kZXNlbGVjdCk6IERlc2VsZWN0cyBhIHJvdy4KKyAgICAgICAgKFllYXJM
aXN0Vmlldy5wcm90b3R5cGUuZGVzZWxlY3RXaXRob3V0QW5pbWF0aW5nKTogRGVzZWxlY3RzIGEg
cm93IHdpdGhvdXQgdGhlIGNsb3NpbmcgYW5pbWF0aW9uLgorICAgICAgICAoWWVhckxpc3RWaWV3
LnByb3RvdHlwZS5zZWxlY3QpOiBTZWxlY3RzIGEgcm93LgorICAgICAgICAoWWVhckxpc3RWaWV3
LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0QW5pbWF0aW5nKTogRGVzZWxlY3RzIGEgcm93IHdpdGhv
dXQgdGhlIG9wZW5pbmcgYW5pbWF0aW9uLgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlw
ZS5idXR0b25Gb3JNb250aCk6IFJldHVybnMgdGhlIG1vbnRoIGJ1dHRvbiBmb3IgYSBnaXZlbiBt
b250aC4gUmV0dXJucyBudWxsIGlmIHRoZSBjZWxsIGlzIG5vdCB2aXNpYmxlLgorICAgICAgICAo
WWVhckxpc3RWaWV3LnByb3RvdHlwZS5kZWhpZ2hsaWdodE1vbnRoKTogRGVoaWdobGlnaHRzIHRo
ZSBtb250aCBidXR0b24uCisgICAgICAgIChZZWFyTGlzdFZpZXcucHJvdG90eXBlLmhpZ2hsaWdo
dE1vbnRoKTogSGlnaGxpZ2h0cyB0aGUgbW9udGggYnV0dG9uLgorICAgICAgICAoWWVhckxpc3RW
aWV3LnByb3RvdHlwZS5zaG93KTogQ2FsbCB3aGVuIHNob3dpbmcgdGhlIHllYXIgbGlzdCB2aWV3
LiBTaG93cyB0aGUgZ2l2ZW4gbW9udGggYXMgaGlnaGxpZ2h0ZWQuCisgICAgICAgIChZZWFyTGlz
dFZpZXcucHJvdG90eXBlLmhpZGUpOiBEaXNwYXRjaGVzIGEgZGlkIGhpZGUgZXZlbnQgd2hpY2gg
d2lsbCBiZSBwaWNrZWQgdXAgYnkgdGhlIENhbGVuZGFyUGlja2VyIGFuZCB0aGUgTW9udGhQb3B1
cFZpZXcgd2lsbCBjbG9zZS4KKyAgICAgICAgKFllYXJMaXN0Vmlldy5wcm90b3R5cGUuX21vdmVI
aWdobGlnaHRUbyk6IFVzZWQgdG8gbW92ZSB0aGUgbW9udGggaGlnaGxpZ2h0IGluIHJlc3BvbnNl
IHRvIGEga2V5IGV2ZW50LgorICAgICAgICAoWWVhckxpc3RWaWV3LnByb3RvdHlwZS5vbktleURv
d24pOiBBcnJvdyBrZXlzIGFuZCBQYWdlVXAvUGFnZURvd24ga2V5cyB3b3JrLgorICAgICAgICAo
TW9udGhQb3B1cFZpZXcpOiBUaGUgcG9wdXAgdmlldyB0byBiZSBvdmVybGF5ZWQgb3ZlciB0aGUg
Y2FsZW5kYXIgcGlja2VyLgorICAgICAgICAoTW9udGhQb3B1cFZpZXcucHJvdG90eXBlLnNob3cp
OiBUYWtlcyB0aGUgaW5pdGlhbE1vbnRoIHRvIHNob3cgYW5kIHRoZSBjYWxlbmRhclRhYmxlUmVj
dCBzbyB3ZSBjYW4gb3ZlcmxheSB0aGUgeWVhciBsaXN0IHZpZXcgcmlnaHQgb24gdG9wIG9mIGl0
LgorICAgICAgICAoTW9udGhQb3B1cFZpZXcucHJvdG90eXBlLmhpZGUpOgorICAgICAgICAoTW9u
dGhQb3B1cFZpZXcucHJvdG90eXBlLm9uQ2xpY2spOiBIaWRlcyBpdHNlbGYgaWYgdGhlIHVzZSBj
bGlja3Mgb3V0c2lkZSB0aGUgeWVhciBsaXN0IHZpZXcuCisKIDIwMTMtMDItMjcgIEV1Z2VuZSBL
bHl1Y2huaWtvdiAgPGV1c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogdGltZWxpbmUgc3RvcHMgd29ya2luZyBvbiBjZXJ0YWluIHNpdGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5qcyBiL1Nv
dXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzCmluZGV4
IDM5MzEzYmY5ZGM3NWQ3Y2NjMjliN2NjZmViOTdjYTE1NTc0OTVmOWEuLmVkM2Y0NjkyNjNhMmI4
NDNiYTg5MzNjNzBlZjYyZmVjYTEzODBjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jl
c291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzCkBAIC0xODgxLDYgKzE4ODEs
NjI4IEBAIFNjcnViYnlTY3JvbGxCYXIucHJvdG90eXBlLm9uU2Nyb2xsVGltZXIgPSBmdW5jdGlv
bigpIHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIExpc3RDZWxsCisgKiBA
cGFyYW0geyFBcnJheX0gc2hvcnRNb250aExhYmVscworICovCitmdW5jdGlvbiBZZWFyTGlzdENl
bGwoc2hvcnRNb250aExhYmVscykgeworICAgIExpc3RDZWxsLmNhbGwodGhpcyk7CisgICAgdGhp
cy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoWWVhckxpc3RDZWxsLkNsYXNzTmFtZVllYXJMaXN0Q2Vs
bCk7CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IFllYXJMaXN0Q2VsbC5IZWlnaHQg
KyAicHgiOworCisgICAgLyoqCisgICAgICogQHR5cGUgeyFFbGVtZW50fQorICAgICAqIEBjb25z
dAorICAgICAqLworICAgIHRoaXMubGFiZWwgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBZZWFyTGlz
dENlbGwuQ2xhc3NOYW1lTGFiZWwsICItLS0tIik7CisgICAgdGhpcy5lbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMubGFiZWwpOworCisgICAgLyoqCisgICAgICogQHR5cGUgeyFBcnJheX0gQXJyYXkg
b2YgdGhlIDEyIG1vbnRoIGJ1dHRvbiBlbGVtZW50cy4KKyAgICAgKiBAY29uc3QKKyAgICAgKi8K
KyAgICB0aGlzLm1vbnRoQnV0dG9ucyA9IFtdOworICAgIHZhciBtb250aENob29zZXJFbGVtZW50
ID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgWWVhckxpc3RDZWxsLkNsYXNzTmFtZU1vbnRoQ2hvb3Nl
cik7CisgICAgZm9yICh2YXIgciA9IDA7IHIgPCBZZWFyTGlzdENlbGwuQnV0dG9uUm93czsgKyty
KSB7CisgICAgICAgIHZhciBidXR0b25zUm93ID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgWWVhckxp
c3RDZWxsLkNsYXNzTmFtZU1vbnRoQnV0dG9uc1Jvdyk7CisgICAgICAgIGZvciAodmFyIGMgPSAw
OyBjIDwgWWVhckxpc3RDZWxsLkJ1dHRvbkNvbHVtbnM7ICsrYykgeworICAgICAgICAgICAgdmFy
IG1vbnRoID0gYyArIHIgKiBZZWFyTGlzdENlbGwuQnV0dG9uQ29sdW1uczsKKyAgICAgICAgICAg
IHZhciBidXR0b24gPSBjcmVhdGVFbGVtZW50KCJidXR0b24iLCBZZWFyTGlzdENlbGwuQ2xhc3NO
YW1lTW9udGhCdXR0b24sIHNob3J0TW9udGhMYWJlbHNbbW9udGhdKTsKKyAgICAgICAgICAgIGJ1
dHRvbi5kYXRhc2V0Lm1vbnRoID0gbW9udGg7CisgICAgICAgICAgICBidXR0b25zUm93LmFwcGVu
ZENoaWxkKGJ1dHRvbik7CisgICAgICAgICAgICB0aGlzLm1vbnRoQnV0dG9ucy5wdXNoKGJ1dHRv
bik7CisgICAgICAgIH0KKyAgICAgICAgbW9udGhDaG9vc2VyRWxlbWVudC5hcHBlbmRDaGlsZChi
dXR0b25zUm93KTsKKyAgICB9CisgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1vbnRoQ2hv
b3NlckVsZW1lbnQpOworCisgICAgLyoqCisgICAgICogQHR5cGUgeyFib29sZWFufQorICAgICAq
IEBwcml2YXRlCisgICAgICovCisgICAgdGhpcy5fc2VsZWN0ZWQgPSBmYWxzZTsKKyAgICAvKioK
KyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIHRo
aXMuX2hlaWdodCA9IDA7Cit9CisKK1llYXJMaXN0Q2VsbC5wcm90b3R5cGUgPSBPYmplY3QuY3Jl
YXRlKExpc3RDZWxsLnByb3RvdHlwZSk7CisKK1llYXJMaXN0Q2VsbC5IZWlnaHQgPSAyNTsKK1ll
YXJMaXN0Q2VsbC5CdXR0b25Sb3dzID0gMzsKK1llYXJMaXN0Q2VsbC5CdXR0b25Db2x1bW5zID0g
NDsKK1llYXJMaXN0Q2VsbC5TZWxlY3RlZEhlaWdodCA9IDEyMTsKK1llYXJMaXN0Q2VsbC5DbGFz
c05hbWVZZWFyTGlzdENlbGwgPSAieWVhci1saXN0LWNlbGwiOworWWVhckxpc3RDZWxsLkNsYXNz
TmFtZUxhYmVsID0gImxhYmVsIjsKK1llYXJMaXN0Q2VsbC5DbGFzc05hbWVNb250aENob29zZXIg
PSAibW9udGgtY2hvb3NlciI7CitZZWFyTGlzdENlbGwuQ2xhc3NOYW1lTW9udGhCdXR0b25zUm93
ID0gIm1vbnRoLWJ1dHRvbnMtcm93IjsKK1llYXJMaXN0Q2VsbC5DbGFzc05hbWVNb250aEJ1dHRv
biA9ICJtb250aC1idXR0b24iOworWWVhckxpc3RDZWxsLkNsYXNzTmFtZUhpZ2hsaWdodGVkID0g
ImhpZ2hsaWdodGVkIjsKKworWWVhckxpc3RDZWxsLl9yZWN5Y2xlQmluID0gW107CisKKy8qKgor
ICogQHJldHVybiB7IUFycmF5fQorICogQG92ZXJyaWRlCisgKi8KK1llYXJMaXN0Q2VsbC5wcm90
b3R5cGUuX3JlY3ljbGVCaW4gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gWWVhckxpc3RDZWxs
Ll9yZWN5Y2xlQmluOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHJvdworICovCitZ
ZWFyTGlzdENlbGwucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24ocm93KSB7CisgICAgdGhpcy5y
b3cgPSByb3c7CisgICAgdGhpcy5sYWJlbC50ZXh0Q29udGVudCA9IHJvdyArIDE7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1vbnRoQnV0dG9ucy5sZW5ndGg7ICsraSkgeworICAgICAg
ICB0aGlzLm1vbnRoQnV0dG9uc1tpXS5jbGFzc0xpc3QucmVtb3ZlKFllYXJMaXN0Q2VsbC5DbGFz
c05hbWVIaWdobGlnaHRlZCk7CisgICAgfQorICAgIHRoaXMuc2hvdygpOworfTsKKworLyoqCisg
KiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgaGVpZ2h0IGluIHBpeGVscy4KKyAqLworWWVhckxpc3RD
ZWxsLnByb3RvdHlwZS5oZWlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5faGVp
Z2h0OworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IGhlaWdodCBIZWlnaHQgaW4gcGl4
ZWxzLgorICovCitZZWFyTGlzdENlbGwucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uKGhl
aWdodCkgeworICAgIGlmICh0aGlzLl9oZWlnaHQgPT09IGhlaWdodCkKKyAgICAgICAgcmV0dXJu
OworICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDsKKyAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVp
Z2h0ID0gdGhpcy5faGVpZ2h0ICsgInB4IjsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisg
KiBAZXh0ZW5kcyBMaXN0VmlldworICogQHBhcmFtIHshTW9udGh9IG1pbmltdW1Nb250aAorICog
QHBhcmFtIHshTW9udGh9IG1heGltdW1Nb250aAorICovCitmdW5jdGlvbiBZZWFyTGlzdFZpZXco
bWluaW11bU1vbnRoLCBtYXhpbXVtTW9udGgpIHsKKyAgICBMaXN0Vmlldy5jYWxsKHRoaXMpOwor
ICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJ5ZWFyLWxpc3QtdmlldyIpOworCisgICAg
LyoqCisgICAgICogQHR5cGUgez9Nb250aH0KKyAgICAgKi8KKyAgICB0aGlzLmhpZ2hsaWdodGVk
TW9udGggPSBudWxsOworICAgIC8qKgorICAgICAqIEB0eXBlIHshTW9udGh9CisgICAgICogQGNv
bnN0CisgICAgICogQHByb3RlY3RlZAorICAgICAqLworICAgIHRoaXMuX21pbmltdW1Nb250aCA9
IG1pbmltdW1Nb250aDsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IU1vbnRofQorICAgICAqIEBj
b25zdAorICAgICAqIEBwcm90ZWN0ZWQKKyAgICAgKi8KKyAgICB0aGlzLl9tYXhpbXVtTW9udGgg
PSBtYXhpbXVtTW9udGg7CisKKyAgICB0aGlzLnNjcm9sbFZpZXcubWluaW11bUNvbnRlbnRPZmZz
ZXQgPSAodGhpcy5fbWluaW11bU1vbnRoLnllYXIgLSAxKSAqIFllYXJMaXN0Q2VsbC5IZWlnaHQ7
CisgICAgdGhpcy5zY3JvbGxWaWV3Lm1heGltdW1Db250ZW50T2Zmc2V0ID0gKHRoaXMuX21heGlt
dW1Nb250aC55ZWFyIC0gMSkgKiBZZWFyTGlzdENlbGwuSGVpZ2h0ICsgWWVhckxpc3RDZWxsLlNl
bGVjdGVkSGVpZ2h0OworICAgIAorICAgIC8qKgorICAgICAqIEB0eXBlIHshT2JqZWN0fQorICAg
ICAqIEBjb25zdAorICAgICAqIEBwcm90ZWN0ZWQKKyAgICAgKi8KKyAgICB0aGlzLl9ydW5uaW5n
QW5pbWF0b3JzID0ge307CisgICAgLyoqCisgICAgICogQHR5cGUgeyFBcnJheX0KKyAgICAgKiBA
Y29uc3QKKyAgICAgKiBAcHJvdGVjdGVkCisgICAgICovCisgICAgdGhpcy5fYW5pbWF0aW5nUm93
cyA9IFtdOworICAgIC8qKgorICAgICAqIEB0eXBlIHshYm9vbGVhbn0KKyAgICAgKiBAcHJvdGVj
dGVkCisgICAgICovCisgICAgdGhpcy5faWdub3JlTW91c2VPdXRVbnRpbGxOZXh0TW91c2VPdmVy
ID0gZmFsc2U7CisgICAgCisgICAgLyoqCisgICAgICogQHR5cGUgeyFTY3J1YmJ5U2Nyb2xsQmFy
fQorICAgICAqIEBjb25zdAorICAgICAqLworICAgIHRoaXMuc2NydWJieVNjcm9sbEJhciA9IG5l
dyBTY3J1YmJ5U2Nyb2xsQmFyKHRoaXMuc2Nyb2xsVmlldyk7CisgICAgdGhpcy5zY3J1YmJ5U2Ny
b2xsQmFyLmF0dGFjaFRvKHRoaXMpOworICAgIAorICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZW92ZXIiLCB0aGlzLm9uTW91c2VPdmVyLCBmYWxzZSk7CisgICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5vbk1vdXNlT3V0LCBmYWxz
ZSk7CisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLm9u
S2V5RG93biwgZmFsc2UpOworfQorCitZZWFyTGlzdFZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZShMaXN0Vmlldy5wcm90b3R5cGUpOworCitZZWFyTGlzdFZpZXcuSGVpZ2h0ID0gWWVhckxp
c3RDZWxsLlNlbGVjdGVkSGVpZ2h0IC0gMTsKK1llYXJMaXN0Vmlldy5FdmVudFR5cGVZZWFyTGlz
dFZpZXdEaWRIaWRlID0gInllYXJMaXN0Vmlld0RpZEhpZGUiOworWWVhckxpc3RWaWV3LkV2ZW50
VHlwZVllYXJMaXN0Vmlld0RpZFNlbGVjdE1vbnRoID0gInllYXJMaXN0Vmlld0RpZFNlbGVjdE1v
bnRoIjsKKworLyoqCisgKiBAcGFyYW0gez9FdmVudH0gZXZlbnQKKyAqLworWWVhckxpc3RWaWV3
LnByb3RvdHlwZS5vbk1vdXNlT3ZlciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIG1vbnRo
QnV0dG9uRWxlbWVudCA9IGVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoZXZlbnQudGFyZ2V0
LCBZZWFyTGlzdENlbGwuQ2xhc3NOYW1lTW9udGhCdXR0b24pOworICAgIGlmICghbW9udGhCdXR0
b25FbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgdmFyIGNlbGxFbGVtZW50ID0gZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhDbGFzcyhtb250aEJ1dHRvbkVsZW1lbnQsIFllYXJMaXN0Q2VsbC5D
bGFzc05hbWVZZWFyTGlzdENlbGwpOworICAgIHZhciBjZWxsID0gY2VsbEVsZW1lbnQuJHZpZXc7
CisgICAgdGhpcy5oaWdobGlnaHRNb250aChuZXcgTW9udGgoY2VsbC5yb3cgKyAxLCBwYXJzZUlu
dChtb250aEJ1dHRvbkVsZW1lbnQuZGF0YXNldC5tb250aCwgMTApKSk7CisgICAgdGhpcy5faWdu
b3JlTW91c2VPdXRVbnRpbGxOZXh0TW91c2VPdmVyID0gZmFsc2U7Cit9OworCisvKioKKyAqIEBw
YXJhbSB7P0V2ZW50fSBldmVudAorICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLm9uTW91c2VP
dXQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmICh0aGlzLl9pZ25vcmVNb3VzZU91dFVudGls
bE5leHRNb3VzZU92ZXIpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgbW9udGhCdXR0b25FbGVt
ZW50ID0gZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcyhldmVudC50YXJnZXQsIFllYXJMaXN0
Q2VsbC5DbGFzc05hbWVNb250aEJ1dHRvbik7CisgICAgaWYgKCFtb250aEJ1dHRvbkVsZW1lbnQp
IHsKKyAgICAgICAgdGhpcy5kZWhpZ2hsaWdodE1vbnRoKCk7CisgICAgfQorfTsKKworLyoqCisg
KiBAcGFyYW0geyFudW1iZXJ9IHdpZHRoIFdpZHRoIGluIHBpeGVscy4KKyAqIEBvdmVycmlkZQor
ICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24od2lkdGgpIHsK
KyAgICBMaXN0Vmlldy5wcm90b3R5cGUuc2V0V2lkdGguY2FsbCh0aGlzLCB3aWR0aCAtIHRoaXMu
c2NydWJieVNjcm9sbEJhci5lbGVtZW50Lm9mZnNldFdpZHRoKTsKKyAgICB0aGlzLmVsZW1lbnQu
c3R5bGUud2lkdGggPSB3aWR0aCArICJweCI7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJl
cn0gaGVpZ2h0IEhlaWdodCBpbiBwaXhlbHMuCisgKiBAb3ZlcnJpZGUKKyAqLworWWVhckxpc3RW
aWV3LnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQpIHsKKyAgICBMaXN0Vmll
dy5wcm90b3R5cGUuc2V0SGVpZ2h0LmNhbGwodGhpcywgaGVpZ2h0KTsKKyAgICB0aGlzLnNjcnVi
YnlTY3JvbGxCYXIuc2V0SGVpZ2h0KGhlaWdodCk7Cit9OworCisvKioKKyAqIEBlbnVtIHtudW1i
ZXJ9CisgKi8KK1llYXJMaXN0Vmlldy5Sb3dBbmltYXRpb25EaXJlY3Rpb24gPSB7CisgICAgT3Bl
bmluZzogMCwKKyAgICBDbG9zaW5nOiAxCit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0g
cm93CisgKiBAcGFyYW0geyFZZWFyTGlzdFZpZXcuUm93QW5pbWF0aW9uRGlyZWN0aW9ufSBkaXJl
Y3Rpb24KKyAqLworWWVhckxpc3RWaWV3LnByb3RvdHlwZS5fYW5pbWF0ZVJvdyA9IGZ1bmN0aW9u
KHJvdywgZGlyZWN0aW9uKSB7CisgICAgdmFyIGZyb21WYWx1ZSA9IGRpcmVjdGlvbiA9PT0gWWVh
ckxpc3RWaWV3LlJvd0FuaW1hdGlvbkRpcmVjdGlvbi5DbG9zaW5nID8gWWVhckxpc3RDZWxsLlNl
bGVjdGVkSGVpZ2h0IDogWWVhckxpc3RDZWxsLkhlaWdodDsKKyAgICB2YXIgb2xkQW5pbWF0b3Ig
PSB0aGlzLl9ydW5uaW5nQW5pbWF0b3JzW3Jvd107CisgICAgaWYgKG9sZEFuaW1hdG9yKSB7Cisg
ICAgICAgIG9sZEFuaW1hdG9yLnN0b3AoKTsKKyAgICAgICAgZnJvbVZhbHVlID0gb2xkQW5pbWF0
b3IuY3VycmVudFZhbHVlOworICAgIH0KKyAgICB2YXIgY2VsbCA9IHRoaXMuY2VsbEF0Um93KHJv
dyk7CisgICAgdmFyIGFuaW1hdG9yID0gbmV3IEFuaW1hdG9yKCk7CisgICAgYW5pbWF0b3Iuc3Rl
cCA9IHRoaXMub25DZWxsSGVpZ2h0QW5pbWF0b3JTdGVwOworICAgIGFuaW1hdG9yLnNldEZyb20o
ZnJvbVZhbHVlKTsKKyAgICBhbmltYXRvci5zZXRUbyhkaXJlY3Rpb24gPT09IFllYXJMaXN0Vmll
dy5Sb3dBbmltYXRpb25EaXJlY3Rpb24uT3BlbmluZyA/IFllYXJMaXN0Q2VsbC5TZWxlY3RlZEhl
aWdodCA6IFllYXJMaXN0Q2VsbC5IZWlnaHQpOworICAgIGFuaW1hdG9yLnRpbWluZ0Z1bmN0aW9u
ID0gQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24uRWFzZUluT3V0OworICAgIGFuaW1hdG9yLmR1cmF0
aW9uID0gMzAwOworICAgIGFuaW1hdG9yLnJvdyA9IHJvdzsKKyAgICBhbmltYXRvci5vbihBbmlt
YXRvci5FdmVudFR5cGVEaWRBbmltYXRpb25TdG9wLCB0aGlzLm9uQ2VsbEhlaWdodEFuaW1hdG9y
RGlkU3RvcCk7CisgICAgdGhpcy5fcnVubmluZ0FuaW1hdG9yc1tyb3ddID0gYW5pbWF0b3I7Cisg
ICAgdGhpcy5fYW5pbWF0aW5nUm93cy5wdXNoKHJvdyk7CisgICAgdGhpcy5fYW5pbWF0aW5nUm93
cy5zb3J0KCk7CisgICAgYW5pbWF0b3Iuc3RhcnQoKTsKK307CisKKy8qKgorICogQHBhcmFtIHs/
QW5pbWF0b3J9IGFuaW1hdG9yCisgKi8KK1llYXJMaXN0Vmlldy5wcm90b3R5cGUub25DZWxsSGVp
Z2h0QW5pbWF0b3JEaWRTdG9wID0gZnVuY3Rpb24oYW5pbWF0b3IpIHsKKyAgICBkZWxldGUgdGhp
cy5fcnVubmluZ0FuaW1hdG9yc1thbmltYXRvci5yb3ddOworICAgIHZhciBpbmRleCA9IHRoaXMu
X2FuaW1hdGluZ1Jvd3MuaW5kZXhPZihhbmltYXRvci5yb3cpOworICAgIHRoaXMuX2FuaW1hdGlu
Z1Jvd3Muc3BsaWNlKGluZGV4LCAxKTsKK307CisKKy8qKgorICogQHBhcmFtIHshQW5pbWF0b3J9
IGFuaW1hdG9yCisgKi8KK1llYXJMaXN0Vmlldy5wcm90b3R5cGUub25DZWxsSGVpZ2h0QW5pbWF0
b3JTdGVwID0gZnVuY3Rpb24oYW5pbWF0b3IpIHsKKyAgICB2YXIgY2VsbCA9IHRoaXMuY2VsbEF0
Um93KGFuaW1hdG9yLnJvdyk7CisgICAgaWYgKGNlbGwpCisgICAgICAgIGNlbGwuc2V0SGVpZ2h0
KGFuaW1hdG9yLmN1cnJlbnRWYWx1ZSk7CisgICAgdGhpcy51cGRhdGVDZWxscygpOworfTsKKwor
LyoqCisgKiBAcGFyYW0gez9FdmVudH0gZXZlbnQKKyAqLworWWVhckxpc3RWaWV3LnByb3RvdHlw
ZS5vbkNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB2YXIgb2xkU2VsZWN0ZWRSb3cgPSB0
aGlzLnNlbGVjdGVkUm93OworICAgIExpc3RWaWV3LnByb3RvdHlwZS5vbkNsaWNrLmNhbGwodGhp
cywgZXZlbnQpOworICAgIHZhciB5ZWFyID0gdGhpcy5zZWxlY3RlZFJvdyArIDE7CisgICAgaWYg
KHRoaXMuc2VsZWN0ZWRSb3cgIT09IG9sZFNlbGVjdGVkUm93KSB7CisgICAgICAgIHZhciBtb250
aCA9IHRoaXMuaGlnaGxpZ2h0ZWRNb250aCA/IHRoaXMuaGlnaGxpZ2h0ZWRNb250aC5tb250aCA6
IDA7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChZZWFyTGlzdFZpZXcuRXZlbnRUeXBlWWVh
ckxpc3RWaWV3RGlkU2VsZWN0TW9udGgsIHRoaXMsIG5ldyBNb250aCh5ZWFyLCBtb250aCkpOwor
ICAgICAgICB0aGlzLnNjcm9sbFZpZXcuc2Nyb2xsVG8odGhpcy5zZWxlY3RlZFJvdyAqIFllYXJM
aXN0Q2VsbC5IZWlnaHQsIHRydWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBtb250aEJ1
dHRvbiA9IGVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoZXZlbnQudGFyZ2V0LCBZZWFyTGlz
dENlbGwuQ2xhc3NOYW1lTW9udGhCdXR0b24pOworICAgICAgICBpZiAoIW1vbnRoQnV0dG9uKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgbW9udGggPSBwYXJzZUludChtb250aEJ1
dHRvbi5kYXRhc2V0Lm1vbnRoLCAxMCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChZZWFy
TGlzdFZpZXcuRXZlbnRUeXBlWWVhckxpc3RWaWV3RGlkU2VsZWN0TW9udGgsIHRoaXMsIG5ldyBN
b250aCh5ZWFyLCBtb250aCkpOworICAgICAgICB0aGlzLmhpZGUoKTsKKyAgICB9Cit9OworCisv
KioKKyAqIEBwYXJhbSB7IW51bWJlcn0gc2Nyb2xsT2Zmc2V0CisgKiBAcmV0dXJuIHshbnVtYmVy
fQorICogQG92ZXJyaWRlCisgKi8KK1llYXJMaXN0Vmlldy5wcm90b3R5cGUucm93QXRTY3JvbGxP
ZmZzZXQgPSBmdW5jdGlvbihzY3JvbGxPZmZzZXQpIHsKKyAgICB2YXIgcmVtYWluaW5nT2Zmc2V0
ID0gc2Nyb2xsT2Zmc2V0OworICAgIHZhciBsYXN0QW5pbWF0aW5nUm93ID0gMDsKKyAgICB2YXIg
cm93c1dpdGhJcnJlZ3VsYXJIZWlnaHQgPSB0aGlzLl9hbmltYXRpbmdSb3dzLnNsaWNlKCk7Cisg
ICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3cgPiAtMSAmJiAhdGhpcy5fcnVubmluZ0FuaW1hdG9yc1t0
aGlzLnNlbGVjdGVkUm93XSkgeworICAgICAgICByb3dzV2l0aElycmVndWxhckhlaWdodC5wdXNo
KHRoaXMuc2VsZWN0ZWRSb3cpOworICAgICAgICByb3dzV2l0aElycmVndWxhckhlaWdodC5zb3J0
KCk7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93c1dpdGhJcnJlZ3VsYXJIZWln
aHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHJvdyA9IHJvd3NXaXRoSXJyZWd1bGFySGVp
Z2h0W2ldOworICAgICAgICB2YXIgYW5pbWF0b3IgPSB0aGlzLl9ydW5uaW5nQW5pbWF0b3JzW3Jv
d107CisgICAgICAgIHZhciByb3dIZWlnaHQgPSBhbmltYXRvciA/IGFuaW1hdG9yLmN1cnJlbnRW
YWx1ZSA6IFllYXJMaXN0Q2VsbC5TZWxlY3RlZEhlaWdodDsKKyAgICAgICAgaWYgKHJlbWFpbmlu
Z09mZnNldCA8PSAocm93IC0gbGFzdEFuaW1hdGluZ1JvdykgKiBZZWFyTGlzdENlbGwuSGVpZ2h0
KSB7CisgICAgICAgICAgICByZXR1cm4gbGFzdEFuaW1hdGluZ1JvdyArIE1hdGguZmxvb3IocmVt
YWluaW5nT2Zmc2V0IC8gWWVhckxpc3RDZWxsLkhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAg
cmVtYWluaW5nT2Zmc2V0IC09IChyb3cgLSBsYXN0QW5pbWF0aW5nUm93KSAqIFllYXJMaXN0Q2Vs
bC5IZWlnaHQ7CisgICAgICAgIGlmIChyZW1haW5pbmdPZmZzZXQgPD0gKHJvd0hlaWdodCAtIFll
YXJMaXN0Q2VsbC5IZWlnaHQpKQorICAgICAgICAgICAgcmV0dXJuIHJvdzsKKyAgICAgICAgcmVt
YWluaW5nT2Zmc2V0IC09IHJvd0hlaWdodCAtIFllYXJMaXN0Q2VsbC5IZWlnaHQ7CisgICAgICAg
IGxhc3RBbmltYXRpbmdSb3cgPSByb3c7CisgICAgfQorICAgIHJldHVybiBsYXN0QW5pbWF0aW5n
Um93ICsgTWF0aC5mbG9vcihyZW1haW5pbmdPZmZzZXQgLyBZZWFyTGlzdENlbGwuSGVpZ2h0KTsK
K307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSByb3cKKyAqIEByZXR1cm4geyFudW1iZXJ9
CisgKiBAb3ZlcnJpZGUKKyAqLworWWVhckxpc3RWaWV3LnByb3RvdHlwZS5zY3JvbGxPZmZzZXRG
b3JSb3cgPSBmdW5jdGlvbihyb3cpIHsKKyAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gcm93ICogWWVh
ckxpc3RDZWxsLkhlaWdodDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FuaW1hdGlu
Z1Jvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGFuaW1hdGluZ1JvdyA9IHRoaXMuX2Fu
aW1hdGluZ1Jvd3NbaV07CisgICAgICAgIGlmIChhbmltYXRpbmdSb3cgPj0gcm93KQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHZhciBhbmltYXRvciA9IHRoaXMuX3J1bm5pbmdBbmltYXRv
cnNbYW5pbWF0aW5nUm93XTsKKyAgICAgICAgc2Nyb2xsT2Zmc2V0ICs9IGFuaW1hdG9yLmN1cnJl
bnRWYWx1ZSAtIFllYXJMaXN0Q2VsbC5IZWlnaHQ7CisgICAgfQorICAgIGlmICh0aGlzLnNlbGVj
dGVkUm93ID4gLTEgJiYgdGhpcy5zZWxlY3RlZFJvdyA8IHJvdyAmJiAhdGhpcy5fcnVubmluZ0Fu
aW1hdG9yc1t0aGlzLnNlbGVjdGVkUm93XSkgeworICAgICAgICBzY3JvbGxPZmZzZXQgKz0gWWVh
ckxpc3RDZWxsLlNlbGVjdGVkSGVpZ2h0IC0gWWVhckxpc3RDZWxsLkhlaWdodDsKKyAgICB9Cisg
ICAgcmV0dXJuIHNjcm9sbE9mZnNldDsKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSBy
b3cKKyAqIEByZXR1cm4geyFZZWFyTGlzdENlbGx9CisgKiBAb3ZlcnJpZGUKKyAqLworWWVhckxp
c3RWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3Q2VsbCA9IGZ1bmN0aW9uKHJvdykgeworICAgIHZh
ciBjZWxsID0gWWVhckxpc3RDZWxsLl9yZWN5Y2xlQmluLnBvcCgpIHx8IG5ldyBZZWFyTGlzdENl
bGwoZ2xvYmFsLnBhcmFtcy5zaG9ydE1vbnRoTGFiZWxzKTsKKyAgICBjZWxsLnJlc2V0KHJvdyk7
CisgICAgY2VsbC5zZXRTZWxlY3RlZCh0aGlzLnNlbGVjdGVkUm93ID09PSByb3cpOworICAgIGlm
ICh0aGlzLmhpZ2hsaWdodGVkTW9udGggJiYgcm93ID09PSB0aGlzLmhpZ2hsaWdodGVkTW9udGgu
eWVhciAtIDEpIHsKKyAgICAgICAgY2VsbC5tb250aEJ1dHRvbnNbdGhpcy5oaWdobGlnaHRlZE1v
bnRoLm1vbnRoXS5jbGFzc0xpc3QuYWRkKFllYXJMaXN0Q2VsbC5DbGFzc05hbWVIaWdobGlnaHRl
ZCk7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbC5tb250aEJ1dHRvbnMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgdmFyIG1vbnRoID0gbmV3IE1vbnRoKHJvdyArIDEsIGkpOwor
ICAgICAgICBjZWxsLm1vbnRoQnV0dG9uc1tpXS5kaXNhYmxlZCA9IHRoaXMuX21pbmltdW1Nb250
aCA+IG1vbnRoIHx8IHRoaXMuX21heGltdW1Nb250aCA8IG1vbnRoOworICAgIH0KKyAgICB2YXIg
YW5pbWF0b3IgPSB0aGlzLl9ydW5uaW5nQW5pbWF0b3JzW3Jvd107CisgICAgaWYgKGFuaW1hdG9y
KQorICAgICAgICBjZWxsLnNldEhlaWdodChhbmltYXRvci5jdXJyZW50VmFsdWUpOworICAgIGVs
c2UgaWYgKHJvdyA9PT0gdGhpcy5zZWxlY3RlZFJvdykKKyAgICAgICAgY2VsbC5zZXRIZWlnaHQo
WWVhckxpc3RDZWxsLlNlbGVjdGVkSGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGNlbGwuc2V0
SGVpZ2h0KFllYXJMaXN0Q2VsbC5IZWlnaHQpOworICAgIHJldHVybiBjZWxsOworfTsKKworLyoq
CisgKiBAb3ZlcnJpZGUKKyAqLworWWVhckxpc3RWaWV3LnByb3RvdHlwZS51cGRhdGVDZWxscyA9
IGZ1bmN0aW9uKCkgeworICAgIHZhciBmaXJzdFZpc2libGVSb3cgPSB0aGlzLmZpcnN0VmlzaWJs
ZVJvdygpOworICAgIHZhciBsYXN0VmlzaWJsZVJvdyA9IHRoaXMubGFzdFZpc2libGVSb3coKTsK
KyAgICBjb25zb2xlLmFzc2VydChmaXJzdFZpc2libGVSb3cgPD0gbGFzdFZpc2libGVSb3cpOwor
ICAgIGZvciAodmFyIGMgaW4gdGhpcy5fY2VsbHMpIHsKKyAgICAgICAgdmFyIGNlbGwgPSB0aGlz
Ll9jZWxsc1tjXTsKKyAgICAgICAgaWYgKGNlbGwucm93IDwgZmlyc3RWaXNpYmxlUm93IHx8IGNl
bGwucm93ID4gbGFzdFZpc2libGVSb3cpCisgICAgICAgICAgICB0aGlzLnRocm93QXdheUNlbGwo
Y2VsbCk7CisgICAgfQorICAgIGZvciAodmFyIGkgPSBmaXJzdFZpc2libGVSb3c7IGkgPD0gbGFz
dFZpc2libGVSb3c7ICsraSkgeworICAgICAgICB2YXIgY2VsbCA9IHRoaXMuX2NlbGxzW2ldOwor
ICAgICAgICBpZiAoY2VsbCkKKyAgICAgICAgICAgIGNlbGwuc2V0UG9zaXRpb24odGhpcy5zY3Jv
bGxWaWV3LmNvbnRlbnRQb3NpdGlvbkZvckNvbnRlbnRPZmZzZXQodGhpcy5zY3JvbGxPZmZzZXRG
b3JSb3coY2VsbC5yb3cpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuYWRkQ2Vs
bElmTmVjZXNzYXJ5KGkpOworICAgIH0KKyAgICB0aGlzLnNldE5lZWRzVXBkYXRlQ2VsbHMoZmFs
c2UpOworfTsKKworLyoqCisgKiBAb3ZlcnJpZGUKKyAqLworWWVhckxpc3RWaWV3LnByb3RvdHlw
ZS5kZXNlbGVjdCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ID09PSBM
aXN0Vmlldy5Ob1NlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBzZWxlY3RlZENl
bGwgPSB0aGlzLl9jZWxsc1t0aGlzLnNlbGVjdGVkUm93XTsKKyAgICBpZiAoc2VsZWN0ZWRDZWxs
KQorICAgICAgICBzZWxlY3RlZENlbGwuc2V0U2VsZWN0ZWQoZmFsc2UpOworICAgIHRoaXMuX2Fu
aW1hdGVSb3codGhpcy5zZWxlY3RlZFJvdywgWWVhckxpc3RWaWV3LlJvd0FuaW1hdGlvbkRpcmVj
dGlvbi5DbG9zaW5nKTsKKyAgICB0aGlzLnNlbGVjdGVkUm93ID0gTGlzdFZpZXcuTm9TZWxlY3Rp
b247CisgICAgdGhpcy5zZXROZWVkc1VwZGF0ZUNlbGxzKHRydWUpOworfTsKKworWWVhckxpc3RW
aWV3LnByb3RvdHlwZS5kZXNlbGVjdFdpdGhvdXRBbmltYXRpbmcgPSBmdW5jdGlvbigpIHsKKyAg
ICBpZiAodGhpcy5zZWxlY3RlZFJvdyA9PT0gTGlzdFZpZXcuTm9TZWxlY3Rpb24pCisgICAgICAg
IHJldHVybjsKKyAgICB2YXIgc2VsZWN0ZWRDZWxsID0gdGhpcy5fY2VsbHNbdGhpcy5zZWxlY3Rl
ZFJvd107CisgICAgaWYgKHNlbGVjdGVkQ2VsbCkgeworICAgICAgICBzZWxlY3RlZENlbGwuc2V0
U2VsZWN0ZWQoZmFsc2UpOworICAgICAgICBzZWxlY3RlZENlbGwuc2V0SGVpZ2h0KFllYXJMaXN0
Q2VsbC5IZWlnaHQpOworICAgIH0KKyAgICB0aGlzLnNlbGVjdGVkUm93ID0gTGlzdFZpZXcuTm9T
ZWxlY3Rpb247CisgICAgdGhpcy5zZXROZWVkc1VwZGF0ZUNlbGxzKHRydWUpOworfTsKKworLyoq
CisgKiBAcGFyYW0geyFudW1iZXJ9IHJvdworICogQG92ZXJyaWRlCisgKi8KK1llYXJMaXN0Vmll
dy5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24ocm93KSB7CisgICAgaWYgKHRoaXMuc2VsZWN0
ZWRSb3cgPT09IHJvdykKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuZGVzZWxlY3QoKTsKKyAg
ICBpZiAocm93ID09PSBMaXN0Vmlldy5Ob1NlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IHRoaXMuc2VsZWN0ZWRSb3cgPSByb3c7CisgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3cgIT09IExp
c3RWaWV3Lk5vU2VsZWN0aW9uKSB7CisgICAgICAgIHZhciBzZWxlY3RlZENlbGwgPSB0aGlzLl9j
ZWxsc1t0aGlzLnNlbGVjdGVkUm93XTsKKyAgICAgICAgdGhpcy5fYW5pbWF0ZVJvdyh0aGlzLnNl
bGVjdGVkUm93LCBZZWFyTGlzdFZpZXcuUm93QW5pbWF0aW9uRGlyZWN0aW9uLk9wZW5pbmcpOwor
ICAgICAgICBpZiAoc2VsZWN0ZWRDZWxsKQorICAgICAgICAgICAgc2VsZWN0ZWRDZWxsLnNldFNl
bGVjdGVkKHRydWUpOworICAgICAgICB2YXIgbW9udGggPSB0aGlzLmhpZ2hsaWdodGVkTW9udGgg
PyB0aGlzLmhpZ2hsaWdodGVkTW9udGgubW9udGggOiAwOworICAgICAgICB0aGlzLmhpZ2hsaWdo
dE1vbnRoKG5ldyBNb250aCh0aGlzLnNlbGVjdGVkUm93ICsgMSwgbW9udGgpKTsKKyAgICB9Cisg
ICAgdGhpcy5zZXROZWVkc1VwZGF0ZUNlbGxzKHRydWUpOworfTsKKworLyoqCisgKiBAcGFyYW0g
eyFudW1iZXJ9IHJvdworICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLnNlbGVjdFdpdGhvdXRB
bmltYXRpbmcgPSBmdW5jdGlvbihyb3cpIHsKKyAgICBpZiAodGhpcy5zZWxlY3RlZFJvdyA9PT0g
cm93KQorICAgICAgICByZXR1cm47CisgICAgdGhpcy5kZXNlbGVjdFdpdGhvdXRBbmltYXRpbmco
KTsKKyAgICBpZiAocm93ID09PSBMaXN0Vmlldy5Ob1NlbGVjdGlvbikKKyAgICAgICAgcmV0dXJu
OworICAgIHRoaXMuc2VsZWN0ZWRSb3cgPSByb3c7CisgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3cg
IT09IExpc3RWaWV3Lk5vU2VsZWN0aW9uKSB7CisgICAgICAgIHZhciBzZWxlY3RlZENlbGwgPSB0
aGlzLl9jZWxsc1t0aGlzLnNlbGVjdGVkUm93XTsKKyAgICAgICAgaWYgKHNlbGVjdGVkQ2VsbCkg
eworICAgICAgICAgICAgc2VsZWN0ZWRDZWxsLnNldFNlbGVjdGVkKHRydWUpOworICAgICAgICAg
ICAgc2VsZWN0ZWRDZWxsLnNldEhlaWdodChZZWFyTGlzdENlbGwuU2VsZWN0ZWRIZWlnaHQpOwor
ICAgICAgICB9CisgICAgICAgIHZhciBtb250aCA9IHRoaXMuaGlnaGxpZ2h0ZWRNb250aCA/IHRo
aXMuaGlnaGxpZ2h0ZWRNb250aC5tb250aCA6IDA7CisgICAgICAgIHRoaXMuaGlnaGxpZ2h0TW9u
dGgobmV3IE1vbnRoKHRoaXMuc2VsZWN0ZWRSb3cgKyAxLCBtb250aCkpOworICAgIH0KKyAgICB0
aGlzLnNldE5lZWRzVXBkYXRlQ2VsbHModHJ1ZSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IU1v
bnRofSBtb250aAorICogQHJldHVybiB7P0hUTUxCdXR0b25FbGVtZW50fQorICovCitZZWFyTGlz
dFZpZXcucHJvdG90eXBlLmJ1dHRvbkZvck1vbnRoID0gZnVuY3Rpb24obW9udGgpIHsKKyAgICBp
ZiAoIW1vbnRoKQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB2YXIgcm93ID0gbW9udGgueWVh
ciAtIDE7CisgICAgdmFyIGNlbGwgPSB0aGlzLmNlbGxBdFJvdyhyb3cpOworICAgIGlmICghY2Vs
bCkKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIGNlbGwubW9udGhCdXR0b25zW21v
bnRoLm1vbnRoXTsKK307CisKK1llYXJMaXN0Vmlldy5wcm90b3R5cGUuZGVoaWdobGlnaHRNb250
aCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5oaWdobGlnaHRlZE1vbnRoKQorICAgICAg
ICByZXR1cm47CisgICAgdmFyIG1vbnRoQnV0dG9uID0gdGhpcy5idXR0b25Gb3JNb250aCh0aGlz
LmhpZ2hsaWdodGVkTW9udGgpOworICAgIGlmIChtb250aEJ1dHRvbikgeworICAgICAgICBtb250
aEJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFllYXJMaXN0Q2VsbC5DbGFzc05hbWVIaWdobGlnaHRl
ZCk7CisgICAgfQorICAgIHRoaXMuaGlnaGxpZ2h0ZWRNb250aCA9IG51bGw7Cit9OworCisvKioK
KyAqIEBwYXJhbSB7IU1vbnRofSBtb250aAorICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLmhp
Z2hsaWdodE1vbnRoID0gZnVuY3Rpb24obW9udGgpIHsKKyAgICBpZiAodGhpcy5oaWdobGlnaHRl
ZE1vbnRoICYmIHRoaXMuaGlnaGxpZ2h0ZWRNb250aC5lcXVhbHMobW9udGgpKQorICAgICAgICBy
ZXR1cm47CisgICAgdGhpcy5kZWhpZ2hsaWdodE1vbnRoKCk7CisgICAgdGhpcy5oaWdobGlnaHRl
ZE1vbnRoID0gbW9udGg7CisgICAgaWYgKCF0aGlzLmhpZ2hsaWdodGVkTW9udGgpCisgICAgICAg
IHJldHVybjsKKyAgICB2YXIgbW9udGhCdXR0b24gPSB0aGlzLmJ1dHRvbkZvck1vbnRoKHRoaXMu
aGlnaGxpZ2h0ZWRNb250aCk7CisgICAgaWYgKG1vbnRoQnV0dG9uKSB7CisgICAgICAgIG1vbnRo
QnV0dG9uLmNsYXNzTGlzdC5hZGQoWWVhckxpc3RDZWxsLkNsYXNzTmFtZUhpZ2hsaWdodGVkKTsK
KyAgICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7IU1vbnRofSBtb250aAorICovCitZZWFyTGlz
dFZpZXcucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbihtb250aCkgeworICAgIHRoaXMuX2lnbm9y
ZU1vdXNlT3V0VW50aWxsTmV4dE1vdXNlT3ZlciA9IHRydWU7CisgICAgCisgICAgdGhpcy5zY3Jv
bGxUb1Jvdyhtb250aC55ZWFyIC0gMSwgZmFsc2UpOworICAgIHRoaXMuc2VsZWN0V2l0aG91dEFu
aW1hdGluZyhtb250aC55ZWFyIC0gMSk7CisgICAgdGhpcy5oaWdobGlnaHRNb250aChtb250aCk7
Cit9OworCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLmRpc3BhdGNoRXZlbnQoWWVhckxpc3RWaWV3LkV2ZW50VHlwZVllYXJMaXN0Vmlld0RpZEhp
ZGUsIHRoaXMpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFNb250aH0gbW9udGgKKyAqLworWWVh
ckxpc3RWaWV3LnByb3RvdHlwZS5fbW92ZUhpZ2hsaWdodFRvID0gZnVuY3Rpb24obW9udGgpIHsK
KyAgICB0aGlzLmhpZ2hsaWdodE1vbnRoKG1vbnRoKTsKKyAgICB0aGlzLnNlbGVjdCh0aGlzLmhp
Z2hsaWdodGVkTW9udGgueWVhciAtIDEpOworCisgICAgdGhpcy5kaXNwYXRjaEV2ZW50KFllYXJM
aXN0Vmlldy5FdmVudFR5cGVZZWFyTGlzdFZpZXdEaWRTZWxlY3RNb250aCwgdGhpcywgbW9udGgp
OworICAgIHRoaXMuc2Nyb2xsVmlldy5zY3JvbGxUbyh0aGlzLnNlbGVjdGVkUm93ICogWWVhckxp
c3RDZWxsLkhlaWdodCwgdHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9OworCisvKioKKyAqIEBw
YXJhbSB7P0V2ZW50fSBldmVudAorICovCitZZWFyTGlzdFZpZXcucHJvdG90eXBlLm9uS2V5RG93
biA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXI7
CisgICAgdmFyIGV2ZW50SGFuZGxlZCA9IGZhbHNlOworICAgIGlmIChrZXkgPT0gIlUrMDA1NCIp
IC8vICd0JyBrZXkuCisgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRoaXMuX21vdmVIaWdobGlnaHRU
byhNb250aC5jcmVhdGVGcm9tVG9kYXkoKSk7CisgICAgZWxzZSBpZiAodGhpcy5oaWdobGlnaHRl
ZE1vbnRoKSB7CisgICAgICAgIGlmIChnbG9iYWwucGFyYW1zLmlzTG9jYWxlUlRMID8ga2V5ID09
ICJSaWdodCIgOiBrZXkgPT0gIkxlZnQiKQorICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gdGhp
cy5fbW92ZUhpZ2hsaWdodFRvKHRoaXMuaGlnaGxpZ2h0ZWRNb250aC5wcmV2aW91cygpKTsKKyAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJVcCIpCisgICAgICAgICAgICBldmVudEhhbmRsZWQgPSB0
aGlzLl9tb3ZlSGlnaGxpZ2h0VG8odGhpcy5oaWdobGlnaHRlZE1vbnRoLnByZXZpb3VzKFllYXJM
aXN0Q2VsbC5CdXR0b25Db2x1bW5zKSk7CisgICAgICAgIGVsc2UgaWYgKGdsb2JhbC5wYXJhbXMu
aXNMb2NhbGVSVEwgPyBrZXkgPT0gIkxlZnQiIDoga2V5ID09ICJSaWdodCIpCisgICAgICAgICAg
ICBldmVudEhhbmRsZWQgPSB0aGlzLl9tb3ZlSGlnaGxpZ2h0VG8odGhpcy5oaWdobGlnaHRlZE1v
bnRoLm5leHQoKSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiRG93biIpCisgICAgICAgICAg
ICBldmVudEhhbmRsZWQgPSB0aGlzLl9tb3ZlSGlnaGxpZ2h0VG8odGhpcy5oaWdobGlnaHRlZE1v
bnRoLm5leHQoWWVhckxpc3RDZWxsLkJ1dHRvbkNvbHVtbnMpKTsKKyAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJQYWdlVXAiKQorICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gdGhpcy5fbW92ZUhp
Z2hsaWdodFRvKHRoaXMuaGlnaGxpZ2h0ZWRNb250aC5wcmV2aW91cyhNb250aHNQZXJZZWFyKSk7
CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiUGFnZURvd24iKQorICAgICAgICAgICAgZXZlbnRI
YW5kbGVkID0gdGhpcy5fbW92ZUhpZ2hsaWdodFRvKHRoaXMuaGlnaGxpZ2h0ZWRNb250aC5uZXh0
KE1vbnRoc1BlclllYXIpKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJFbnRlciIpIHsKKyAg
ICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChZZWFyTGlzdFZpZXcuRXZlbnRUeXBlWWVhckxp
c3RWaWV3RGlkU2VsZWN0TW9udGgsIHRoaXMsIHRoaXMuaGlnaGxpZ2h0ZWRNb250aCk7CisgICAg
ICAgICAgICB0aGlzLmhpZGUoKTsKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiVXAiKSB7CisgICAgICAgIHRoaXMuc2Ny
b2xsVmlldy5zY3JvbGxCeSgtWWVhckxpc3RDZWxsLkhlaWdodCwgdHJ1ZSk7CisgICAgICAgIGV2
ZW50SGFuZGxlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIkRvd24iKSB7CisgICAg
ICAgIHRoaXMuc2Nyb2xsVmlldy5zY3JvbGxCeShZZWFyTGlzdENlbGwuSGVpZ2h0LCB0cnVlKTsK
KyAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFn
ZVVwIikgeworICAgICAgICB0aGlzLnNjcm9sbFZpZXcuc2Nyb2xsQnkoLXRoaXMuc2Nyb2xsVmll
dy5oZWlnaHQoKSwgdHJ1ZSk7CisgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAgfSBl
bHNlIGlmIChrZXkgPT0gIlBhZ2VEb3duIikgeworICAgICAgICB0aGlzLnNjcm9sbFZpZXcuc2Ny
b2xsQnkodGhpcy5zY3JvbGxWaWV3LmhlaWdodCgpLCB0cnVlKTsKKyAgICAgICAgZXZlbnRIYW5k
bGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoZXZlbnRIYW5kbGVkKSB7CisgICAgICAgIGV2
ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgIH0KK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBWaWV3CisgKiBA
cGFyYW0geyFNb250aH0gbWluaW11bU1vbnRoCisgKiBAcGFyYW0geyFNb250aH0gbWF4aW11bU1v
bnRoCisgKi8KK2Z1bmN0aW9uIE1vbnRoUG9wdXBWaWV3KG1pbmltdW1Nb250aCwgbWF4aW11bU1v
bnRoKSB7CisgICAgVmlldy5jYWxsKHRoaXMsIGNyZWF0ZUVsZW1lbnQoImRpdiIsIE1vbnRoUG9w
dXBWaWV3LkNsYXNzTmFtZU1vbnRoUG9wdXBWaWV3KSk7CisKKyAgICAvKioKKyAgICAgKiBAdHlw
ZSB7IVllYXJMaXN0Vmlld30KKyAgICAgKiBAY29uc3QKKyAgICAgKi8KKyAgICB0aGlzLnllYXJM
aXN0VmlldyA9IG5ldyBZZWFyTGlzdFZpZXcobWluaW11bU1vbnRoLCBtYXhpbXVtTW9udGgpOwor
ICAgIHRoaXMueWVhckxpc3RWaWV3LmF0dGFjaFRvKHRoaXMpOworCisgICAgLyoqCisgICAgICog
QHR5cGUgeyFib29sZWFufQorICAgICAqLworICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7CisK
KyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLm9uQ2xpY2ss
IGZhbHNlKTsKK30KKworTW9udGhQb3B1cFZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShW
aWV3LnByb3RvdHlwZSk7CisKK01vbnRoUG9wdXBWaWV3LkNsYXNzTmFtZU1vbnRoUG9wdXBWaWV3
ID0gIm1vbnRoLXBvcHVwLXZpZXciOworCitNb250aFBvcHVwVmlldy5wcm90b3R5cGUuc2hvdyA9
IGZ1bmN0aW9uKGluaXRpYWxNb250aCwgY2FsZW5kYXJUYWJsZVJlY3QpIHsKKyAgICB0aGlzLmlz
VmlzaWJsZSA9IHRydWU7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1l
bnQpOworICAgIHRoaXMueWVhckxpc3RWaWV3LnNldFdpZHRoKGNhbGVuZGFyVGFibGVSZWN0Lndp
ZHRoIC0gMik7CisgICAgdGhpcy55ZWFyTGlzdFZpZXcuc2V0SGVpZ2h0KFllYXJMaXN0Vmlldy5I
ZWlnaHQpOworICAgIGlmIChnbG9iYWwucGFyYW1zLmlzTG9jYWxlUlRMKQorICAgICAgICB0aGlz
LnllYXJMaXN0Vmlldy5lbGVtZW50LnN0eWxlLnJpZ2h0ID0gY2FsZW5kYXJUYWJsZVJlY3QueCAr
ICJweCI7CisgICAgZWxzZQorICAgICAgICB0aGlzLnllYXJMaXN0Vmlldy5lbGVtZW50LnN0eWxl
LmxlZnQgPSBjYWxlbmRhclRhYmxlUmVjdC54ICsgInB4IjsKKyAgICB0aGlzLnllYXJMaXN0Vmll
dy5lbGVtZW50LnN0eWxlLnRvcCA9IGNhbGVuZGFyVGFibGVSZWN0LnkgKyAicHgiOworICAgIHRo
aXMueWVhckxpc3RWaWV3LnNob3coaW5pdGlhbE1vbnRoKTsKKyAgICB0aGlzLnllYXJMaXN0Vmll
dy5lbGVtZW50LmZvY3VzKCk7Cit9OworCitNb250aFBvcHVwVmlldy5wcm90b3R5cGUuaGlkZSA9
IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc1Zpc2libGUpCisgICAgICAgIHJldHVybjsK
KyAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOworICAgIHRoaXMuZWxlbWVudC5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7CisgICAgdGhpcy55ZWFyTGlzdFZpZXcuaGlkZSgp
OworfTsKKworLyoqCisgKiBAcGFyYW0gez9FdmVudH0gZXZlbnQKKyAqLworTW9udGhQb3B1cFZp
ZXcucHJvdG90eXBlLm9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChldmVudC50
YXJnZXQgIT09IHRoaXMuZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuaGlkZSgp
OworfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKICAqIEBwYXJhbSB7IUVsZW1lbnR9IGVsZW1l
bnQKICAqIEBwYXJhbSB7IU9iamVjdH0gY29uZmlnCiAgKi8K
</data>

          </attachment>
      

    </bug>

</bugzilla>