<?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>57038</bug_id>
          
          <creation_ts>2011-03-24 11:04:05 -0700</creation_ts>
          <short_desc>Web Inspector: re-implement dom breakpoints.</short_desc>
          <delta_ts>2011-04-14 09:21:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>372946</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-03-24 11:04:05 -0700</bug_when>
    <thetext>Web Inspector: re-implement dom breakpoints.

Move all logic related to dom breakpoints to DOMBreakpointsSidebarPane.js file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372947</commentid>
    <comment_count>1</comment_count>
      <attachid>86800</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-03-24 11:04:39 -0700</bug_when>
    <thetext>Created attachment 86800
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372949</commentid>
    <comment_count>2</comment_count>
      <attachid>86800</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-03-24 11:06:57 -0700</bug_when>
    <thetext>Comment on attachment 86800
Patch.

Why is this necessary? Could you split it into a number of changes or send more compact move diffs? Otherwise it is hard to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373417</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-03-25 02:45:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 86800 [details])
&gt; Why is this necessary? Could you split it into a number of changes or send more compact move diffs? Otherwise it is hard to follow.

It&apos;s the final part of browser breakpoints refactoring, half of this patch is large blocks or removed dead code. DOMBreakpointsSidebarPane is implemented from scratch (the code is mostly new). Splitting this into a number of changes which don&apos;t introduce regressions will be a real pain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385706</commentid>
    <comment_count>4</comment_count>
      <attachid>86800</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-04-14 06:21:02 -0700</bug_when>
    <thetext>Comment on attachment 86800
Patch.

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

&gt; Source/WebCore/inspector/front-end/DOMBreakpointsSidebarPane.js:54
&gt; +WebInspector.DOMBreakpointsSidebarPane.instance = function()

We don&apos;t use singletons elsewhere. Why is this necessary?

&gt; Source/WebCore/inspector/front-end/DOMBreakpointsSidebarPane.js:66
&gt; +        var fragmentIndex = url.indexOf(&quot;#&quot;);

I think we have this somewhere else as well. Should we move this to the utilities.js?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385797</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-04-14 09:19:15 -0700</bug_when>
    <thetext>Committed r83864: &lt;http://trac.webkit.org/changeset/83864&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385800</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-04-14 09:21:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 86800 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86800&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/DOMBreakpointsSidebarPane.js:54
&gt; &gt; +WebInspector.DOMBreakpointsSidebarPane.instance = function()
&gt; 
&gt; We don&apos;t use singletons elsewhere. Why is this necessary?
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/DOMBreakpointsSidebarPane.js:66
&gt; &gt; +        var fragmentIndex = url.indexOf(&quot;#&quot;);
&gt; 
&gt; I think we have this somewhere else as well. Should we move this to the utilities.js?

Done.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86800</attachid>
            <date>2011-03-24 11:04:39 -0700</date>
            <delta_ts>2011-04-14 06:21:02 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>59954</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MWQxZTc5Li4xMTgxMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcg
QEAKKzIwMTEtMDMtMjQgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogcmUtaW1wbGVtZW50IGRvbSBicmVha3BvaW50cy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MDM4CisKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qczogUmVtb3ZlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludHNTaWRlYmFyUGFuZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUu
X3Jlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50c1NpZGViYXJQYW5l
LnByb3RvdHlwZS5fcmVzdG9yZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNh
bGxTdGFja1NpZGViYXJQYW5lLnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNhbGxTdGFja1NpZGViYXJQYW5lLnByb3RvdHlwZS5zZXRTdGF0dXMpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RE9NTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLl9jaGls
ZE5vZGVSZW1vdmVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUJyZWFrcG9p
bnRzU2lkZWJhclBhbmUuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFr
cG9pbnRzU2lkZWJhclBhbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRz
U2lkZWJhclBhbmUuaW5zdGFuY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9p
bnRzU2lkZWJhclBhbmUucHJvdG90eXBlLnNldEluc3BlY3RlZFVSTCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUucG9wdWxhdGVOb2Rl
Q29udGV4dE1lbnUudG9nZ2xlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9N
QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUucG9wdWxhdGVOb2RlQ29udGV4dE1lbnUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90
eXBlLmNyZWF0ZUJyZWFrcG9pbnRIaXRTdGF0dXNNZXNzYWdlLmRpZFB1c2hOb2RlVG9Gcm9udGVu
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90
b3R5cGUuY3JlYXRlQnJlYWtwb2ludEhpdFN0YXR1c01lc3NhZ2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9kb0NyZWF0ZUJyZWFr
cG9pbnRIaXRTdGF0dXNNZXNzYWdlLmZvcm1hdHRlcnMucyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2RvQ3JlYXRlQnJlYWtwb2lu
dEhpdFN0YXR1c01lc3NhZ2UuYXBwZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01CcmVh
a3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5fZG9DcmVhdGVCcmVha3BvaW50SGl0U3RhdHVz
TWVzc2FnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFu
ZS5wcm90b3R5cGUubm9kZVJlbW92ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFr
cG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50c0Zvck5vZGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBl
Ll9zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50c1Np
ZGViYXJQYW5lLnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2NvbnRleHRNZW51LnJl
bW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lk
ZWJhclBhbmUucHJvdG90eXBlLl9jb250ZXh0TWVudSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2NoZWNrYm94Q2xpY2tlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUu
aGlnaGxpZ2h0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuY2xlYXJCcmVha3BvaW50SGlnaGxpZ2h0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5fY3Jl
YXRlQnJlYWtwb2ludElkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50c1Np
ZGViYXJQYW5lLnByb3RvdHlwZS5fc2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5yZXN0b3JlQnJlYWtwb2lu
dHMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5zaG93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5F
bGVtZW50c1BhbmVsLnByb3RvdHlwZS51cGRhdGVNb2RpZmllZE5vZGVzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS51cGRhdGVCcmVhZGNydW1iU2l6ZXMu
Y29hbGVzY2VDb2xsYXBzZWRDcnVtYnMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
RWxlbWVudHNUcmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZS5fcG9wdWxhdGVUYWdDb250ZXh0TWVudSk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJv
dG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5
cGUuX2RlYnVnZ2VyUGF1c2VkLmRpZENyZWF0ZUJyZWFrcG9pbnRIaXRTdGF0dXNNZXNzYWdlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9kZWJ1Z2dlclBh
dXNlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fY2xl
YXJJbnRlcmZhY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZ3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNldHRpbmdzLnByb3RvdHlwZS5fc2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRt
bDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKwogMjAxMS0wMy0yMyAgS2VudCBU
YW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRy
aSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDliZjU3YjEuLjZkMmNjYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTYwOTgsNyArNjA5OCw2IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9BdWRpdHNQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0NoZWNrYm94LmpzJywKQEAgLTYxMjEsNiArNjEyMCw3IEBACiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RWaWV3Lmpz
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzJywKKyAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZS5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlSXRlbXNWaWV3LmpzJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN5bnRheEhpZ2hsaWdodGVyLmpzJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNWU5
N2JiMi4uZjM0NzIxNyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKQEAgLTY2NDYxLDEwICs2NjQ2MSw2IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJ
CQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEJyZWFr
cG9pbnRNYW5hZ2VyLmpzIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCcmVha3BvaW50c1NpZGViYXJQYW5l
LmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtNjY1NTcsNiArNjY1NTMsMTAgQEAKIAkJCQkJ
PgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1l
bmRcRE9NU3RvcmFnZS5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjM0OGZmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKKysrIC9kZXYv
bnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlciA9IGZ1
bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9zdGlja3lCcmVha3BvaW50cyA9IHt9OwotICAgIHZhciBi
cmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5maW5kU2V0dGluZ0ZvckFsbFByb2pl
Y3RzKCJuYXRpdmVCcmVha3BvaW50cyIpOwotICAgIGZvciAodmFyIHByb2plY3RJZCBpbiBicmVh
a3BvaW50cykKLSAgICAgICAgdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbcHJvamVjdElkXSA9IHRo
aXMuX3ZhbGlkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHNbcHJvamVjdElkXSk7Ci0KLSAgICB0
aGlzLl9icmVha3BvaW50cyA9IHt9OwotICAgIHRoaXMuX2RvbUJyZWFrcG9pbnRzUmVzdG9yZWQg
PSBmYWxzZTsKLQotICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5TZXR0aW5ncy5FdmVudHMuUHJvamVjdENoYW5nZWQsIHRoaXMuX3Byb2plY3RD
aGFuZ2VkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBhdXNlZCwg
dGhpcy5fZGVidWdnZXJQYXVzZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1v
ZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRl
YnVnZ2VyUmVzdW1lZCwgdGhpcy5fZGVidWdnZXJSZXN1bWVkLCB0aGlzKTsKLX0KLQotV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcyA9IHsKLSAgICBET006ICJE
T00iLAotICAgIEV2ZW50TGlzdGVuZXI6ICJFdmVudExpc3RlbmVyIiwKLSAgICBYSFI6ICJYSFIi
Ci19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5FdmVudHMgPSB7Ci0gICAgRE9N
QnJlYWtwb2ludEFkZGVkOiAiZG9tLWJyZWFrcG9pbnQtYWRkZWQiLAotICAgIFByb2plY3RDaGFu
Z2VkOiAicHJvamVjdC1jaGFuZ2VkIgotfQotCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIucHJvdG90eXBlID0gewotICAgIGNyZWF0ZURPTUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKG5vZGVJ
ZCwgdHlwZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NyZWF0ZURPTUJyZWFrcG9pbnQobm9kZUlk
LCB0eXBlLCB0cnVlLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVET01CcmVha3BvaW50
OiBmdW5jdGlvbihub2RlSWQsIHR5cGUsIGVuYWJsZWQsIHJlc3RvcmVkKQotICAgIHsKLSAgICAg
ICAgdmFyIG5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7Ci0g
ICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgYnJl
YWtwb2ludElkID0gdGhpcy5fY3JlYXRlRE9NQnJlYWtwb2ludElkKG5vZGVJZCwgdHlwZSk7Ci0g
ICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkRP
TUJyZWFrcG9pbnQobm9kZSwgdHlwZSk7Ci0gICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJl
YWtwb2ludElkLCBicmVha3BvaW50LCBlbmFibGVkLCByZXN0b3JlZCk7Ci0gICAgICAgIGlmIChl
bmFibGVkICYmIHJlc3RvcmVkKQotICAgICAgICAgICAgYnJlYWtwb2ludC5fZW5hYmxlKCk7Ci0K
LSAgICAgICAgYnJlYWtwb2ludC52aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50
Vmlldyh0aGlzLCBicmVha3BvaW50SWQsIGVuYWJsZWQsIG5vZGUsIHR5cGUpOwotICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIuRXZlbnRzLkRPTUJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludC52aWV3KTsKLSAgICB9LAot
Ci0gICAgX3NldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgYnJlYWtwb2ludCwg
ZW5hYmxlZCwgcmVzdG9yZWQpCi0gICAgewotICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVh
a3BvaW50SWRdID0gYnJlYWtwb2ludDsKLSAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gZW5h
YmxlZDsKLSAgICAgICAgaWYgKHJlc3RvcmVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoZW5hYmxlZCkKLSAgICAgICAgICAgIGJyZWFrcG9pbnQuX2VuYWJsZSgpOwotICAgICAg
ICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKLSAgICB9LAotCi0gICAgX3NldEJyZWFrcG9pbnRF
bmFibGVkOiBmdW5jdGlvbihicmVha3BvaW50SWQsIGVuYWJsZWQpCi0gICAgewotICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07Ci0gICAgICAg
IGlmIChicmVha3BvaW50LmVuYWJsZWQgPT09IGVuYWJsZWQpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGlmIChlbmFibGVkKQotICAgICAgICAgICAgYnJlYWtwb2ludC5fZW5hYmxlKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrcG9pbnQuX2Rpc2FibGUoKTsKLSAgICAg
ICAgYnJlYWtwb2ludC5lbmFibGVkID0gZW5hYmxlZDsKLSAgICAgICAgdGhpcy5fc2F2ZUJyZWFr
cG9pbnRzKCk7Ci0gICAgfSwKLQotICAgIF9yZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVh
a3BvaW50SWQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9p
bnRzW2JyZWFrcG9pbnRJZF07Ci0gICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCi0gICAg
ICAgICAgICBicmVha3BvaW50Ll9kaXNhYmxlKCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9icmVh
a3BvaW50c1ticmVha3BvaW50SWRdOwotICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsK
LSAgICB9LAotCi0gICAgYnJlYWtwb2ludFZpZXdGb3JFdmVudERhdGE6IGZ1bmN0aW9uKGV2ZW50
RGF0YSkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50SWQ7Ci0gICAgICAgIGlmIChldmVu
dERhdGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5C
cmVha3BvaW50VHlwZXMuRE9NKQotICAgICAgICAgICAgYnJlYWtwb2ludElkID0gdGhpcy5fY3Jl
YXRlRE9NQnJlYWtwb2ludElkKGV2ZW50RGF0YS5ub2RlSWQsIGV2ZW50RGF0YS50eXBlKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBicmVha3BvaW50
ID0gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKLSAgICAgICAgaWYgKGJyZWFrcG9p
bnQpCi0gICAgICAgICAgICByZXR1cm4gYnJlYWtwb2ludC52aWV3OwotICAgIH0sCi0KLSAgICBf
ZGVidWdnZXJQYXVzZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGV2ZW50
VHlwZSA9IGV2ZW50LmRhdGEuZXZlbnRUeXBlOwotICAgICAgICB2YXIgZXZlbnREYXRhID0gZXZl
bnQuZGF0YS5ldmVudERhdGE7Ci0KLSAgICAgICAgaWYgKGV2ZW50VHlwZSAhPT0gV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyRXZlbnRUeXBlcy5OYXRpdmVCcmVha3BvaW50KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciBicmVha3BvaW50VmlldyA9IHRoaXMuYnJlYWtwb2ludFZpZXdG
b3JFdmVudERhdGEoZXZlbnREYXRhKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50VmlldykKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBicmVha3BvaW50Vmlldy5oaXQgPSB0cnVlOwot
ICAgICAgICB0aGlzLl9sYXN0SGl0QnJlYWtwb2ludFZpZXcgPSBicmVha3BvaW50VmlldzsKLSAg
ICB9LAotCi0gICAgX2RlYnVnZ2VyUmVzdW1lZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMuX2xhc3RIaXRCcmVha3BvaW50VmlldykKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdGhpcy5fbGFzdEhpdEJyZWFrcG9pbnRWaWV3LmhpdCA9IGZhbHNlOwotICAg
ICAgICBkZWxldGUgdGhpcy5fbGFzdEhpdEJyZWFrcG9pbnRWaWV3OwotICAgIH0sCi0KLSAgICBf
cHJvamVjdENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fYnJl
YWtwb2ludHMgPSB7fTsKLSAgICAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHNSZXN0b3JlZCA9IGZh
bHNlOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkKTsKLSAgICB9LAotCi0gICAg
cmVzdG9yZURPTUJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmdW5jdGlv
biBkaWRQdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQocGF0aCwgbm9kZUlkKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIW5vZGVJZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIHBhdGhUb05vZGVJZFtwYXRoXSA9IG5vZGVJZDsKLSAgICAgICAgICAgIHBlbmRpbmdD
YWxscyAtPSAxOwotICAgICAgICAgICAgaWYgKHBlbmRpbmdDYWxscykKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50
c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC50eXBlICE9PSBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLkRPTSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGVJZCA9IHBhdGhUb05vZGVJ
ZFticmVha3BvaW50LmNvbmRpdGlvbi5wYXRoXTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZUlk
KQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVET01CcmVha3BvaW50KG5vZGVJZCwg
YnJlYWtwb2ludC5jb25kaXRpb24udHlwZSwgYnJlYWtwb2ludC5lbmFibGVkLCB0cnVlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX2RvbUJyZWFrcG9pbnRzUmVzdG9yZWQgPSB0
cnVlOwotICAgICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNw
ZWN0b3Iuc2V0dGluZ3MucHJvamVjdElkXSB8fCBbXTsKLSAgICAgICAgdmFyIHBhdGhUb05vZGVJ
ZCA9IHt9OwotICAgICAgICB2YXIgcGVuZGluZ0NhbGxzID0gMDsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGJy
ZWFrcG9pbnRzW2ldLnR5cGUgIT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVh
a3BvaW50VHlwZXMuRE9NKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
dmFyIHBhdGggPSBicmVha3BvaW50c1tpXS5jb25kaXRpb24ucGF0aDsKLSAgICAgICAgICAgIGlm
IChwYXRoIGluIHBhdGhUb05vZGVJZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIHBhdGhUb05vZGVJZFtwYXRoXSA9IDA7Ci0gICAgICAgICAgICBwZW5kaW5nQ2FsbHMg
Kz0gMTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5wdXNoTm9kZUJ5UGF0aFRv
RnJvbnRlbmQocGF0aCwgZGlkUHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kLmJpbmQodGhpcywgcGF0
aCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcGVuZGluZ0NhbGxzKQotICAgICAgICAgICAg
dGhpcy5fZG9tQnJlYWtwb2ludHNSZXN0b3JlZCA9IHRydWU7Ci0gICAgfSwKLQotICAgIF9zYXZl
QnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9
IFtdOwotICAgICAgICBmb3IgKHZhciBicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2ludHMp
IHsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtw
b2ludElkXTsKLSAgICAgICAgICAgIHZhciBwZXJzaXN0ZW50QnJlYWtwb2ludCA9IGJyZWFrcG9p
bnQuX3NlcmlhbGl6ZVRvSlNPTigpOwotICAgICAgICAgICAgcGVyc2lzdGVudEJyZWFrcG9pbnQu
ZW5hYmxlZCA9IGJyZWFrcG9pbnQuZW5hYmxlZDsKLSAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1
c2gocGVyc2lzdGVudEJyZWFrcG9pbnQpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdGhpcy5f
ZG9tQnJlYWtwb2ludHNSZXN0b3JlZCkgewotICAgICAgICAgICAgdmFyIHN0aWNreUJyZWFrcG9p
bnRzID0gdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbV2ViSW5zcGVjdG9yLnNldHRpbmdzLnByb2pl
Y3RJZF0gfHwgW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0aWNreUJyZWFr
cG9pbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0aWNreUJyZWFrcG9p
bnRzW2ldLnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50
VHlwZXMuRE9NKQotICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHN0aWNreUJy
ZWFrcG9pbnRzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBXZWJJbnNw
ZWN0b3Iuc2V0dGluZ3MubmF0aXZlQnJlYWtwb2ludHMgPSBicmVha3BvaW50czsKLQotICAgICAg
ICB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElk
XSA9IGJyZWFrcG9pbnRzOwotICAgIH0sCi0KLSAgICBfdmFsaWRhdGVCcmVha3BvaW50czogZnVu
Y3Rpb24ocGVyc2lzdGVudEJyZWFrcG9pbnRzKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9p
bnRzID0gW107Ci0gICAgICAgIHZhciBicmVha3BvaW50c1NldCA9IHt9OwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHBlcnNpc3RlbnRCcmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBwZXJzaXN0ZW50QnJlYWtwb2ludHNbaV07Ci0gICAg
ICAgICAgICBpZiAoISgidHlwZSIgaW4gYnJlYWtwb2ludCAmJiAiZW5hYmxlZCIgaW4gYnJlYWtw
b2ludCAmJiAiY29uZGl0aW9uIiBpbiBicmVha3BvaW50KSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIHZhciBpZCA9IGJyZWFrcG9pbnQudHlwZSArICI6IjsKLSAgICAg
ICAgICAgIHZhciBjb25kaXRpb24gPSBicmVha3BvaW50LmNvbmRpdGlvbjsKLSAgICAgICAgICAg
IGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5C
cmVha3BvaW50VHlwZXMuRE9NKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25kaXRp
b24ucGF0aCAhPT0gInN0cmluZyIgfHwgdHlwZW9mIGNvbmRpdGlvbi50eXBlICE9PSAibnVtYmVy
IikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWQgKz0g
Y29uZGl0aW9uLnBhdGggKyAiOiIgKyBjb25kaXRpb24udHlwZTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoaWQgaW4gYnJl
YWtwb2ludHNTZXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBicmVh
a3BvaW50c1NldFtpZF0gPSB0cnVlOwotICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaChicmVh
a3BvaW50KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7Ci0gICAgfSwK
LQotICAgIF9jcmVhdGVET01CcmVha3BvaW50SWQ6IGZ1bmN0aW9uKG5vZGVJZCwgdHlwZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAiZG9tOiIgKyBub2RlSWQgKyAiOiIgKyB0eXBlOwotICAgIH0K
LX0KLQotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18g
PSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkRPTUJyZWFr
cG9pbnQgPSBmdW5jdGlvbihub2RlLCB0eXBlKQotewotICAgIHRoaXMuX25vZGVJZCA9IG5vZGUu
aWQ7Ci0gICAgdGhpcy5fcGF0aCA9IG5vZGUucGF0aCgpOwotICAgIHRoaXMuX3R5cGUgPSB0eXBl
OwotfQotCi1XZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7Ci0gICAgX2Vu
YWJsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQnJvd3NlckRlYnVnZ2VyQWdlbnQuc2V0
RE9NQnJlYWtwb2ludCh0aGlzLl9ub2RlSWQsIHRoaXMuX3R5cGUpOwotICAgIH0sCi0KLSAgICBf
ZGlzYWJsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQnJvd3NlckRlYnVnZ2VyQWdlbnQu
cmVtb3ZlRE9NQnJlYWtwb2ludCh0aGlzLl9ub2RlSWQsIHRoaXMuX3R5cGUpOwotICAgIH0sCi0K
LSAgICBfc2VyaWFsaXplVG9KU09OOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgdHlw
ZSA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuRE9NOwot
ICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBjb25kaXRpb246IHsgcGF0aDogdGhpcy5fcGF0
aCwgdHlwZTogdGhpcy5fdHlwZSB9IH07Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuTmF0aXZl
QnJlYWtwb2ludFZpZXcgPSBmdW5jdGlvbihtYW5hZ2VyLCBpZCwgZW5hYmxlZCkKLXsKLSAgICB0
aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjsKLSAgICB0aGlzLl9pZCA9IGlkOwotICAgIHRoaXMuX2Vu
YWJsZWQgPSBlbmFibGVkOwotICAgIHRoaXMuX2hpdCA9IGZhbHNlOwotfQotCi1XZWJJbnNwZWN0
b3IuTmF0aXZlQnJlYWtwb2ludFZpZXcucHJvdG90eXBlID0gewotICAgIGdldCBlbmFibGVkKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkOwotICAgIH0sCi0KLSAgICBzZXQg
ZW5hYmxlZChlbmFibGVkKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFuYWdlci5fc2V0QnJlYWtw
b2ludEVuYWJsZWQodGhpcy5faWQsIGVuYWJsZWQpOwotICAgICAgICB0aGlzLl9lbmFibGVkID0g
ZW5hYmxlZDsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZS1j
aGFuZ2VkIik7Ci0gICAgfSwKLQotICAgIGdldCBoaXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX2hpdDsKLSAgICB9LAotCi0gICAgc2V0IGhpdChoaXQpCi0gICAgewotICAgICAgICB0
aGlzLl9oaXQgPSBoaXQ7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJo
aXQtc3RhdGUtY2hhbmdlZCIpOwotICAgIH0sCi0KLSAgICByZW1vdmU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX21hbmFnZXIuX3JlbW92ZUJyZWFrcG9pbnQodGhpcy5faWQpOwot
ICAgICAgICB0aGlzLl9vblJlbW92ZSgpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycygicmVtb3ZlZCIpOwotICAgIH0sCi0KLSAgICBfY29tcGFyZTogZnVuY3Rpb24oeCwg
eSkKLSAgICB7Ci0gICAgICAgIGlmICh4ICE9PSB5KQotICAgICAgICAgICAgcmV0dXJuIHggPCB5
ID8gLTEgOiAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9LAotCi0gICAgX29uUmVtb3ZlOiBm
dW5jdGlvbigpCi0gICAgewotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9p
bnRWaWV3LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZTsKLQotV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRWaWV3ID0gZnVuY3Rpb24obWFuYWdlciwg
aWQsIGVuYWJsZWQsIG5vZGUsIHR5cGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFr
cG9pbnRWaWV3LmNhbGwodGhpcywgbWFuYWdlciwgaWQsIGVuYWJsZWQpOwotICAgIHRoaXMuX25v
ZGUgPSBub2RlOwotICAgIHRoaXMuX25vZGVJZCA9IG5vZGUuaWQ7Ci0gICAgdGhpcy5fdHlwZSA9
IHR5cGU7Ci0gICAgbm9kZS5icmVha3BvaW50c1t0aGlzLl90eXBlXSA9IHRoaXM7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5ET01CcmVha3BvaW50Vmlldy5wcm90b3R5cGUgPSB7Ci0gICAgY29tcGFyZVRv
OiBmdW5jdGlvbihvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb21wYXJlKHRo
aXMuX3R5cGUsIG90aGVyLl90eXBlKTsKLSAgICB9LAotCi0gICAgcG9wdWxhdGVMYWJlbEVsZW1l
bnQ6IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91
bGQgYmVsb25nIHRvIHRoZSB2aWV3LCBub3QgdGhlIG1hbmFnZXIuCi0gICAgICAgIHZhciBsaW5r
aWZpZWROb2RlID0gV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5saW5raWZ5Tm9kZUJ5SWQo
dGhpcy5fbm9kZUlkKTsKLSAgICAgICAgbGlua2lmaWVkTm9kZS5hZGRTdHlsZUNsYXNzKCJtb25v
c3BhY2UiKTsKLSAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChsaW5raWZpZWROb2RlKTsKLSAg
ICAgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0g
ICAgICAgIGRlc2NyaXB0aW9uLmNsYXNzTmFtZSA9ICJzb3VyY2UtdGV4dCI7Ci0gICAgICAgIGRl
c2NyaXB0aW9uLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRUeXBlTGFi
ZWwodGhpcy5fdHlwZSk7Ci0gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZGVzY3JpcHRpb24p
OwotICAgIH0sCi0KLSAgICBwb3B1bGF0ZVN0YXR1c01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbihl
bGVtZW50LCBldmVudERhdGEpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRUeXBlcy5TdWJ0cmVlTW9kaWZpZWQpIHsKLSAgICAgICAg
ICAgIHZhciB0YXJnZXROb2RlT2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9t
UGF5bG9hZChldmVudERhdGEudGFyZ2V0Tm9kZSk7Ci0gICAgICAgICAgICB0YXJnZXROb2RlT2Jq
ZWN0LnB1c2hOb2RlVG9Gcm9udGVuZChkZWNvcmF0ZU5vZGUuYmluZCh0aGlzKSk7Ci0gICAgICAg
ICAgICBmdW5jdGlvbiBkZWNvcmF0ZU5vZGUodGFyZ2V0Tm9kZUlkKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0Tm9kZUlkKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgICAgICB0YXJnZXROb2RlT2JqZWN0LnJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICB2YXIgdGFyZ2V0Tm9kZSA9IFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVu
dHMubGlua2lmeU5vZGVCeUlkKHRhcmdldE5vZGVJZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGV2
ZW50RGF0YS5pbnNlcnRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldE5vZGVJ
ZCAhPT0gdGhpcy5fbm9kZUlkKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0
KGVsZW1lbnQsICJQYXVzZWQgb24gYSBcIiVzXCIgYnJlYWtwb2ludCBzZXQgb24gJXMsIGJlY2F1
c2UgYSBuZXcgY2hpbGQgd2FzIGFkZGVkIHRvIGl0cyBkZXNjZW5kYW50ICVzLiIsIHRhcmdldE5v
ZGUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9mb3JtYXQoZWxlbWVudCwgIlBhdXNlZCBvbiBhIFwiJXNcIiBicmVha3BvaW50IHNldCBv
biAlcywgYmVjYXVzZSBhIG5ldyBjaGlsZCB3YXMgYWRkZWQgdG8gdGhhdCBub2RlLiIpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXQoZWxl
bWVudCwgIlBhdXNlZCBvbiBhIFwiJXNcIiBicmVha3BvaW50IHNldCBvbiAlcywgYmVjYXVzZSBp
dHMgZGVzY2VuZGFudCAlcyB3YXMgcmVtb3ZlZC4iLCB0YXJnZXROb2RlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9mb3JtYXQoZWxlbWVudCwgIlBh
dXNlZCBvbiBhIFwiJXNcIiBicmVha3BvaW50IHNldCBvbiAlcy4iKTsKLSAgICB9LAotCi0gICAg
X2Zvcm1hdDogZnVuY3Rpb24oZWxlbWVudCwgbWVzc2FnZSwgZXh0cmFTdWJzdGl0dXRpb24pCi0g
ICAgewotICAgICAgICB2YXIgc3Vic3RpdHV0aW9ucyA9IFtXZWJJbnNwZWN0b3IuZG9tQnJlYWtw
b2ludFR5cGVMYWJlbCh0aGlzLl90eXBlKSwgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5s
aW5raWZ5Tm9kZUJ5SWQodGhpcy5fbm9kZUlkKV07Ci0gICAgICAgIGlmIChleHRyYVN1YnN0aXR1
dGlvbikKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMucHVzaChleHRyYVN1YnN0aXR1dGlvbik7
Ci0KLSAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7Ci0gICAgICAgICAgICBzOiBmdW5jdGlvbihz
dWJzdGl0dXRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1YnN0
aXR1dGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgZnVuY3Rpb24gYXBw
ZW5kKGEsIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PT0gInN0cmlu
ZyIpCi0gICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIpOwotICAg
ICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChiKTsKLSAgICAgICAgfQotICAgICAgICBXZWJJ
bnNwZWN0b3IuZm9ybWF0TG9jYWxpemVkKG1lc3NhZ2UsIHN1YnN0aXR1dGlvbnMsIGZvcm1hdHRl
cnMsICIiLCBhcHBlbmQpOwotICAgIH0sCi0KLSAgICBfb25SZW1vdmU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlLmJyZWFrcG9pbnRzW3RoaXMuX3R5cGVdOwot
ICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRWaWV3LnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludFZpZXcucHJvdG90eXBlOwotCi1X
ZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludFR5cGVzID0gewotICAgIFN1YnRyZWVNb2RpZmllZDog
MCwKLSAgICBBdHRyaWJ1dGVNb2RpZmllZDogMSwKLSAgICBOb2RlUmVtb3ZlZDogMgotfTsKLQot
V2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRUeXBlTGFiZWwgPSBmdW5jdGlvbih0eXBlKQotewot
ICAgIGlmICghV2ViSW5zcGVjdG9yLl9ET01CcmVha3BvaW50VHlwZUxhYmVscykgewotICAgICAg
ICBXZWJJbnNwZWN0b3IuX0RPTUJyZWFrcG9pbnRUeXBlTGFiZWxzID0ge307Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5fRE9NQnJlYWtwb2ludFR5cGVMYWJlbHNbV2ViSW5zcGVjdG9yLkRPTUJyZWFr
cG9pbnRUeXBlcy5TdWJ0cmVlTW9kaWZpZWRdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTdWJ0
cmVlIE1vZGlmaWVkIik7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5fRE9NQnJlYWtwb2ludFR5cGVM
YWJlbHNbV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRUeXBlcy5BdHRyaWJ1dGVNb2RpZmllZF0g
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkF0dHJpYnV0ZSBNb2RpZmllZCIpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuX0RPTUJyZWFrcG9pbnRUeXBlTGFiZWxzW1dlYkluc3BlY3Rvci5ET01CcmVh
a3BvaW50VHlwZXMuTm9kZVJlbW92ZWRdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJOb2RlIFJl
bW92ZWQiKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5fRE9NQnJlYWtwb2ludFR5
cGVMYWJlbHNbdHlwZV07Ci19Ci0KLVdlYkluc3BlY3Rvci5kb21CcmVha3BvaW50VHlwZUNvbnRl
eHRNZW51TGFiZWwgPSBmdW5jdGlvbih0eXBlKQotewotICAgIGlmICghV2ViSW5zcGVjdG9yLl9E
T01CcmVha3BvaW50VHlwZUNvbnRleHRNZW51TGFiZWxzKSB7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5fRE9NQnJlYWtwb2ludFR5cGVDb250ZXh0TWVudUxhYmVscyA9IHt9OwotICAgICAgICBXZWJJ
bnNwZWN0b3IuX0RPTUJyZWFrcG9pbnRUeXBlQ29udGV4dE1lbnVMYWJlbHNbV2ViSW5zcGVjdG9y
LkRPTUJyZWFrcG9pbnRUeXBlcy5TdWJ0cmVlTW9kaWZpZWRdID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJCcmVhayBvbiBTdWJ0cmVlIE1vZGlmaWNhdGlvbnMiKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLl9ET01CcmVha3BvaW50VHlwZUNvbnRleHRNZW51TGFiZWxzW1dlYkluc3BlY3Rvci5ET01C
cmVha3BvaW50VHlwZXMuQXR0cmlidXRlTW9kaWZpZWRdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJCcmVhayBvbiBBdHRyaWJ1dGVzIE1vZGlmaWNhdGlvbnMiKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLl9ET01CcmVha3BvaW50VHlwZUNvbnRleHRNZW51TGFiZWxzW1dlYkluc3BlY3Rvci5ET01C
cmVha3BvaW50VHlwZXMuTm9kZVJlbW92ZWRdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJCcmVh
ayBvbiBOb2RlIFJlbW92YWwiKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYkluc3BlY3Rvci5fRE9N
QnJlYWtwb2ludFR5cGVDb250ZXh0TWVudUxhYmVsc1t0eXBlXTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFy
UGFuZS5qcwppbmRleCA2M2E2ZTJhLi5jMzViMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpz
CkBAIC0yMDMsNDEgKzIwMyw5IEBAIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50c1NpZGVi
YXJQYW5lID0gZnVuY3Rpb24odGl0bGUpCiAgICAgdGhpcy5lbXB0eUVsZW1lbnQudGV4dENvbnRl
bnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5vIEJyZWFrcG9pbnRzIik7CiAKICAgICB0aGlz
LmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZW1wdHlFbGVtZW50KTsKLQotICAgIFdlYklu
c3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5FdmVudHMuUHJvamVjdENoYW5nZWQsIHRoaXMuX3Byb2plY3RDaGFu
Z2VkLCB0aGlzKTsKIH0KIAogV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnRzU2lkZWJhclBh
bmUucHJvdG90eXBlID0gewotICAgIGFkZEJyZWFrcG9pbnRJdGVtOiBmdW5jdGlvbihicmVha3Bv
aW50SXRlbSkKLSAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gYnJlYWtwb2ludEl0ZW0uZWxl
bWVudDsKLSAgICAgICAgZWxlbWVudC5fYnJlYWtwb2ludEl0ZW0gPSBicmVha3BvaW50SXRlbTsK
LQotICAgICAgICBicmVha3BvaW50SXRlbS5hZGRFdmVudExpc3RlbmVyKCJicmVha3BvaW50LWhp
dCIsIHRoaXMuZXhwYW5kLCB0aGlzKTsKLSAgICAgICAgYnJlYWtwb2ludEl0ZW0uYWRkRXZlbnRM
aXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX3JlbW92ZUxpc3RFbGVtZW50LmJpbmQodGhpcywgZWxl
bWVudCksIHRoaXMpOwotCi0gICAgICAgIHZhciBjdXJyZW50RWxlbWVudCA9IHRoaXMubGlzdEVs
ZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7Ci0gICAg
ICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuX2JyZWFrcG9pbnRJdGVtICYmIGN1cnJlbnRFbGVt
ZW50Ll9icmVha3BvaW50SXRlbS5jb21wYXJlVG8oZWxlbWVudC5fYnJlYWtwb2ludEl0ZW0pID4g
MCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0g
Y3VycmVudEVsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fYWRk
TGlzdEVsZW1lbnQoZWxlbWVudCwgY3VycmVudEVsZW1lbnQpOwotCi0gICAgICAgIGlmIChicmVh
a3BvaW50SXRlbS5jbGljaykgewotICAgICAgICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJj
dXJzb3ItcG9pbnRlciIpOwotICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJj
bGljayIsIGJyZWFrcG9pbnRJdGVtLmNsaWNrLmJpbmQoYnJlYWtwb2ludEl0ZW0pLCBmYWxzZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVu
dSIsIHRoaXMuX2NvbnRleHRNZW51RXZlbnRGaXJlZC5iaW5kKHRoaXMsIGJyZWFrcG9pbnRJdGVt
KSwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9jb250ZXh0TWVudUV2ZW50RmlyZWQ6IGZ1bmN0aW9u
KGJyZWFrcG9pbnRJdGVtLCBldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjb250ZXh0TWVudSA9
IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKLSAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlbW92ZSBCcmVha3BvaW50IiksIGJyZWFr
cG9pbnRJdGVtLnJlbW92ZS5iaW5kKGJyZWFrcG9pbnRJdGVtKSk7Ci0gICAgICAgIGNvbnRleHRN
ZW51LnNob3coZXZlbnQpOwotICAgIH0sCi0KICAgICBfYWRkTGlzdEVsZW1lbnQ6IGZ1bmN0aW9u
KGVsZW1lbnQsIGJlZm9yZUVsZW1lbnQpCiAgICAgewogICAgICAgICBpZiAoYmVmb3JlRWxlbWVu
dCkKQEAgLTI2MCw3ICsyMjgsNyBAQCBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludHNTaWRl
YmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgX3Byb2plY3RD
aGFuZ2VkOiBmdW5jdGlvbigpCisgICAgX3Jlc2V0OiBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICB0aGlzLmxpc3RFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIGlmICh0aGlzLmxp
c3RFbGVtZW50LnBhcmVudEVsZW1lbnQpIHsKQEAgLTQ0Myw5OCArNDExLDExIEBAIFdlYkluc3Bl
Y3Rvci5YSFJCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGlmIChicmVha3BvaW50ICYmIHR5cGVvZiBicmVha3BvaW50LnVybCA9PT0gInN0cmluZyIpCiAg
ICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChicmVha3BvaW50LnVybCwgYnJlYWtw
b2ludC5lbmFibGVkKTsKICAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcHJvamVjdENoYW5nZWQ6
IGZ1bmN0aW9uKCkKLSAgICB7CiAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2ZUJy
ZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dEl0ZW0gPSBmdW5jdGlvbihicmVha3BvaW50KQotewotICAgIHRoaXMuX2JyZWFrcG9pbnQgPSBi
cmVha3BvaW50OwotCi0gICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImxpIik7Ci0KLSAgICB2YXIgY2hlY2tib3hFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiaW5wdXQiKTsKLSAgICBjaGVja2JveEVsZW1lbnQuY2xhc3NOYW1lID0gImNoZWNrYm94LWVs
ZW0iOwotICAgIGNoZWNrYm94RWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKLSAgICBjaGVja2Jv
eEVsZW1lbnQuY2hlY2tlZCA9IHRoaXMuX2JyZWFrcG9pbnQuZW5hYmxlZDsKLSAgICBjaGVja2Jv
eEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9jaGVja2JveENsaWNrZWQu
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hlY2ti
b3hFbGVtZW50KTsKLQotICAgIHRoaXMuX2NyZWF0ZUxhYmVsRWxlbWVudCgpOwotCi0gICAgdGhp
cy5fYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2Vu
YWJsZUNoYW5nZWQsIHRoaXMpOwotICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5l
cigiaGl0LXN0YXRlLWNoYW5nZWQiLCB0aGlzLl9oaXRTdGF0ZUNoYW5nZWQsIHRoaXMpOwotICAg
IHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigibGFiZWwtY2hhbmdlZCIsIHRoaXMu
X2xhYmVsQ2hhbmdlZCwgdGhpcyk7Ci0gICAgdGhpcy5fYnJlYWtwb2ludC5hZGRFdmVudExpc3Rl
bmVyKCJyZW1vdmVkIiwgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMuYmluZCh0aGlzLCAi
cmVtb3ZlZCIpKTsKLSAgICBpZiAoYnJlYWtwb2ludC5jbGljaykKLSAgICAgICAgdGhpcy5jbGlj
ayA9IGJyZWFrcG9pbnQuY2xpY2suYmluZChicmVha3BvaW50KTsKLX0KLQotV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRJdGVtLnByb3RvdHlwZSA9IHsKLSAgICBnZXQgZWxlbWVudCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsKLSAgICB9LAotCi0gICAgY29tcGFyZVRvOiBm
dW5jdGlvbihvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50LmNv
bXBhcmVUbyhvdGhlci5fYnJlYWtwb2ludCk7Ci0gICAgfSwKLQotICAgIHBvcHVsYXRlRWRpdEVs
ZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewotICAgICAgICB0aGlzLl9icmVha3BvaW50
LnBvcHVsYXRlRWRpdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIHJlbW92ZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludC5yZW1vdmUoKTsKLSAgICB9
LAotCi0gICAgX2NoZWNrYm94Q2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB0aGlzLl9icmVha3BvaW50LmVuYWJsZWQgPSAhdGhpcy5fYnJlYWtwb2ludC5lbmFibGVkOwot
Ci0gICAgICAgIC8vIEJyZWFrcG9pbnQgZWxlbWVudCBtYXkgaGF2ZSBpdCdzIG93biBjbGljayBo
YW5kbGVyLgotICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICB9LAotCi0gICAg
X2VuYWJsZUNoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNoZWNr
Ym94ID0gdGhpcy5fZWxlbWVudC5maXJzdENoaWxkOwotICAgICAgICBjaGVja2JveC5jaGVja2Vk
ID0gdGhpcy5fYnJlYWtwb2ludC5lbmFibGVkOwotICAgIH0sCi0KLSAgICBfaGl0U3RhdGVDaGFu
Z2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVudC50YXJnZXQuaGl0
KSB7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImJyZWFrcG9pbnQt
aGl0Iik7Ci0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtw
b2ludC1oaXQiKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJl
bW92ZVN0eWxlQ2xhc3MoImJyZWFrcG9pbnQtaGl0Iik7Ci0gICAgfSwKLQotICAgIF9sYWJlbENo
YW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1v
dmVDaGlsZCh0aGlzLl9sYWJlbEVsZW1lbnQpOwotICAgICAgICB0aGlzLl9jcmVhdGVMYWJlbEVs
ZW1lbnQoKTsKLSAgICB9LAotCi0gICAgX2NyZWF0ZUxhYmVsRWxlbWVudDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOwotICAgICAgICB0aGlzLl9icmVha3BvaW50LnBvcHVsYXRlTGFiZWxFbGVtZW50
KHRoaXMuX2xhYmVsRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQo
dGhpcy5fbGFiZWxFbGVtZW50KTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50
SXRlbS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7
Ci0KIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludHNTaWRlYmFyUGFuZSA9IGZ1
bmN0aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkV2ZW50IExpc3RlbmVyIEJyZWFrcG9pbnRzIikpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFy
UGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lk
ZWJhclBhbmUuanMKaW5kZXggNzQwYmIxYy4uMzBiM2FkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpz
CkBAIC04NCwxMSArODQsNiBAQCBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUucHJv
dG90eXBlID0gewogCiAgICAgICAgICAgICB0aGlzLl90ZXh0ICs9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiJXMoKSBhdCAlcyIsIGkgKyAxLCB0aXRsZSwgc3VidGl0bGUpICsgIlxuIjsKICAgICAg
ICAgfQotCi0gICAgICAgIGlmIChkZXRhaWxzLmV2ZW50VHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyRXZlbnRUeXBlcy5OYXRpdmVCcmVha3BvaW50KSB7Ci0gICAgICAgICAgICBpZiAoZGV0
YWlscy5ldmVudERhdGEuYnJlYWtwb2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5CcmVha3BvaW50VHlwZXMuRE9NKQotICAgICAgICAgICAgICAgIHRoaXMuX2RvbUJy
ZWFrcG9pbnRIaXQoZGV0YWlscy5ldmVudERhdGEpOwotICAgICAgICB9CiAgICAgfSwKIAogICAg
IHNldCBzZWxlY3RlZENhbGxGcmFtZSh4KQpAQCAtMTgyLDE5ICsxNzcsMTAgQEAgV2ViSW5zcGVj
dG9yLkNhbGxTdGFja1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZh
ciBzdGF0dXNNZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwog
ICAgICAgICBzdGF0dXNNZXNzYWdlRWxlbWVudC5jbGFzc05hbWUgPSAiaW5mbyI7Ci0gICAgICAg
IHN0YXR1c01lc3NhZ2VFbGVtZW50LnRleHRDb250ZW50ID0gc3RhdHVzOwotICAgICAgICB0aGlz
LmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHN0YXR1c01lc3NhZ2VFbGVtZW50KTsKLSAgICB9LAot
Ci0gICAgX2RvbUJyZWFrcG9pbnRIaXQ6IGZ1bmN0aW9uKGV2ZW50RGF0YSkKLSAgICB7Ci0gICAg
ICAgIHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmJyZWFr
cG9pbnRWaWV3Rm9yRXZlbnREYXRhKGV2ZW50RGF0YSk7Ci0gICAgICAgIGlmICghYnJlYWtwb2lu
dCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgc3RhdHVzTWVzc2FnZUVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgc3RhdHVzTWVzc2Fn
ZUVsZW1lbnQuY2xhc3NOYW1lID0gImluZm8iOwotICAgICAgICBicmVha3BvaW50LnBvcHVsYXRl
U3RhdHVzTWVzc2FnZUVsZW1lbnQoc3RhdHVzTWVzc2FnZUVsZW1lbnQsIGV2ZW50RGF0YSk7Cisg
ICAgICAgIGlmICh0eXBlb2Ygc3RhdHVzID09PSAic3RyaW5nIikKKyAgICAgICAgICAgIHN0YXR1
c01lc3NhZ2VFbGVtZW50LnRleHRDb250ZW50ID0gc3RhdHVzOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzdGF0dXNNZXNzYWdlRWxlbWVudC5hcHBlbmRDaGlsZChzdGF0dXMpOwogICAgICAg
ICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHN0YXR1c01lc3NhZ2VFbGVtZW50KTsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TUFnZW50LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5q
cwppbmRleCBhMmE5YzJkLi42YmZiZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTU5LDggKzU5LDYgQEAgV2ViSW5zcGVjdG9yLkRP
TU5vZGUgPSBmdW5jdGlvbihkb2MsIHBheWxvYWQpIHsKICAgICB0aGlzLnN0eWxlID0gbnVsbDsK
ICAgICB0aGlzLl9tYXRjaGVkQ1NTUnVsZXMgPSBbXTsKIAotICAgIHRoaXMuYnJlYWtwb2ludHMg
PSB7fTsKLQogICAgIGlmICh0aGlzLl9ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsK
ICAgICAgICAgLy8gSFRNTCBhbmQgQk9EWSBmcm9tIGludGVybmFsIGlmcmFtZXMgc2hvdWxkIG5v
dCBvdmVyd3JpdGUgdG9wLWxldmVsIG9uZXMuCiAgICAgICAgIGlmICghdGhpcy5vd25lckRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCAmJiB0aGlzLl9ub2RlTmFtZSA9PT0gIkhUTUwiKQpAQCAtNDY1
LDE3ICs0NjMsNyBAQCBXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlID0gewogICAgICAg
ICBwYXJlbnQucmVtb3ZlQ2hpbGRfKG5vZGUpOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLk5vZGVSZW1vdmVkLCB7bm9k
ZTpub2RlLCBwYXJlbnQ6cGFyZW50fSk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9pZFRvRE9NTm9k
ZVtub2RlSWRdOwotICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50cyhub2RlKTsKLSAgICB9
LAotCi0gICAgX3JlbW92ZUJyZWFrcG9pbnRzOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAg
ICAgZm9yICh2YXIgdHlwZSBpbiBub2RlLmJyZWFrcG9pbnRzKQotICAgICAgICAgICAgbm9kZS5i
cmVha3BvaW50c1t0eXBlXS5yZW1vdmUoKTsKLSAgICAgICAgaWYgKCFub2RlLmNoaWxkcmVuKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hp
bGRyZW4ubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50cyhu
b2RlLmNoaWxkcmVuW2ldKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5z
aWRlYmFyUGFuZXMuZG9tQnJlYWtwb2ludHMubm9kZVJlbW92ZWQobm9kZSk7CiAgICAgfSwKIAog
ICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBzZWFyY2hSZXN1bHRDb2xsZWN0b3Is
IHNlYXJjaFN5bmNocm9ub3VzbHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxOTEyMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQnJlYWtwb2ludHNTaWRlYmFy
UGFuZS5qcwpAQCAtMCwwICsxLDMxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5ET01CcmVha3BvaW50c1NpZGVi
YXJQYW5lID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50
c1NpZGViYXJQYW5lLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJET00gQnJlYWtw
b2ludHMiKSk7CisKKyAgICB0aGlzLl9icmVha3BvaW50RWxlbWVudHMgPSB7fTsKKworICAgIHRo
aXMuX2JyZWFrcG9pbnRUeXBlcyA9IHsKKyAgICAgICAgU3VidHJlZU1vZGlmaWVkOiAwLAorICAg
ICAgICBBdHRyaWJ1dGVNb2RpZmllZDogMSwKKyAgICAgICAgTm9kZVJlbW92ZWQ6IDIKKyAgICB9
OworICAgIHRoaXMuX2JyZWFrcG9pbnRUeXBlTGFiZWxzID0gWworICAgICAgICBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlN1YnRyZWUgTW9kaWZpZWQiKSwKKyAgICAgICAgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJBdHRyaWJ1dGUgTW9kaWZpZWQiKSwKKyAgICAgICAgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJOb2RlIFJlbW92ZWQiKQorICAgIF07CisgICAgdGhpcy5fY29udGV4dE1lbnVMYWJlbHMg
PSBbCisgICAgICAgIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQnJlYWsgb24gU3VidHJlZSBNb2Rp
ZmljYXRpb25zIiksCisgICAgICAgIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQnJlYWsgb24gQXR0
cmlidXRlcyBNb2RpZmljYXRpb25zIiksCisgICAgICAgIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
QnJlYWsgb24gTm9kZSBSZW1vdmFsIikKKyAgICBdOworfQorCitXZWJJbnNwZWN0b3IuRE9NQnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBpZiAoIVdl
Ykluc3BlY3Rvci5ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLl9pbnN0YW5jZSkKKyAgICAgICAg
V2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuX2luc3RhbmNlID0gbmV3IFdl
Ykluc3BlY3Rvci5ET01CcmVha3BvaW50c1NpZGViYXJQYW5lKCk7CisgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLl9pbnN0YW5jZTsKK30KKworV2ViSW5z
cGVjdG9yLkRPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlID0geworICAgIHNldElu
c3BlY3RlZFVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVzZXQoKTsK
KworICAgICAgICB2YXIgZnJhZ21lbnRJbmRleCA9IHVybC5pbmRleE9mKCIjIik7CisgICAgICAg
IGlmIChmcmFnbWVudEluZGV4ICE9PSAtMSkKKyAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJp
bmcoMCwgZnJhZ21lbnRJbmRleCk7CisgICAgICAgIHRoaXMuX2luc3BlY3RlZFVSTCA9IHVybDsK
KyAgICB9LAorCisgICAgcG9wdWxhdGVOb2RlQ29udGV4dE1lbnU6IGZ1bmN0aW9uKG5vZGUsIGNv
bnRleHRNZW51KQorICAgIHsKKyAgICAgICAgdmFyIG5vZGVCcmVha3BvaW50cyA9IHt9OworICAg
ICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50RWxlbWVudHMpIHsKKyAgICAgICAg
ICAgIHZhciBlbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludEVsZW1lbnRzW2lkXTsKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50Ll9ub2RlID09PSBub2RlKQorICAgICAgICAgICAgICAgIG5vZGVCcmVh
a3BvaW50c1tlbGVtZW50Ll90eXBlXSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiB0b2dnbGVCcmVha3BvaW50KHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
bm9kZUJyZWFrcG9pbnRzW3R5cGVdKQorICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9p
bnQobm9kZSwgdHlwZSwgdHJ1ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
dGhpcy5fcmVtb3ZlQnJlYWtwb2ludChub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIHRoaXMuX3Nh
dmVCcmVha3BvaW50cygpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgdHlwZSA9IDA7
IHR5cGUgPCAzOyArK3R5cGUpIHsKKyAgICAgICAgICAgIHZhciBsYWJlbCA9IHRoaXMuX2NvbnRl
eHRNZW51TGFiZWxzW3R5cGVdOworICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kQ2hlY2ti
b3hJdGVtKGxhYmVsLCB0b2dnbGVCcmVha3BvaW50LmJpbmQodGhpcywgdHlwZSksIG5vZGVCcmVh
a3BvaW50c1t0eXBlXSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgY3JlYXRlQnJlYWtwb2lu
dEhpdFN0YXR1c01lc3NhZ2U6IGZ1bmN0aW9uKGV2ZW50RGF0YSwgY2FsbGJhY2spCisgICAgewor
ICAgICAgICBpZiAoZXZlbnREYXRhLnR5cGUgPT09IHRoaXMuX2JyZWFrcG9pbnRUeXBlcy5TdWJ0
cmVlTW9kaWZpZWQpIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXROb2RlT2JqZWN0ID0gV2ViSW5z
cGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChldmVudERhdGEudGFyZ2V0Tm9kZSk7Cisg
ICAgICAgICAgICBmdW5jdGlvbiBkaWRQdXNoTm9kZVRvRnJvbnRlbmQodGFyZ2V0Tm9kZUlkKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0YXJnZXROb2RlSWQpCisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldE5vZGVPYmplY3QucmVsZWFzZSgpOworICAgICAgICAgICAgICAg
IHRoaXMuX2RvQ3JlYXRlQnJlYWtwb2ludEhpdFN0YXR1c01lc3NhZ2UoZXZlbnREYXRhLCB0YXJn
ZXROb2RlSWQsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhcmdldE5v
ZGVPYmplY3QucHVzaE5vZGVUb0Zyb250ZW5kKGRpZFB1c2hOb2RlVG9Gcm9udGVuZC5iaW5kKHRo
aXMpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLl9kb0NyZWF0ZUJyZWFrcG9p
bnRIaXRTdGF0dXNNZXNzYWdlKGV2ZW50RGF0YSwgbnVsbCwgY2FsbGJhY2spOworICAgIH0sCisK
KyAgICBfZG9DcmVhdGVCcmVha3BvaW50SGl0U3RhdHVzTWVzc2FnZTogZnVuY3Rpb24gKGV2ZW50
RGF0YSwgdGFyZ2V0Tm9kZUlkLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBtZXNzYWdl
OworICAgICAgICB2YXIgdHlwZUxhYmVsID0gdGhpcy5fYnJlYWtwb2ludFR5cGVMYWJlbHNbZXZl
bnREYXRhLnR5cGVdOworICAgICAgICB2YXIgbGlua2lmaWVkTm9kZSA9IFdlYkluc3BlY3Rvci5w
YW5lbHMuZWxlbWVudHMubGlua2lmeU5vZGVCeUlkKGV2ZW50RGF0YS5ub2RlSWQpOworICAgICAg
ICB2YXIgc3Vic3RpdHV0aW9ucyA9IFt0eXBlTGFiZWwsIGxpbmtpZmllZE5vZGVdOworICAgICAg
ICB2YXIgdGFyZ2V0Tm9kZSA9ICIiOworICAgICAgICBpZiAodGFyZ2V0Tm9kZUlkKQorICAgICAg
ICAgICAgdGFyZ2V0Tm9kZSA9IFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMubGlua2lmeU5v
ZGVCeUlkKHRhcmdldE5vZGVJZCk7CisKKyAgICAgICAgaWYgKGV2ZW50RGF0YS50eXBlID09PSB0
aGlzLl9icmVha3BvaW50VHlwZXMuU3VidHJlZU1vZGlmaWVkKSB7CisgICAgICAgICAgICBpZiAo
ZXZlbnREYXRhLmluc2VydGlvbikgeworICAgICAgICAgICAgICAgIGlmICh0YXJnZXROb2RlSWQg
IT09IGV2ZW50RGF0YS5ub2RlSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJQ
YXVzZWQgb24gYSBcIiVzXCIgYnJlYWtwb2ludCBzZXQgb24gJXMsIGJlY2F1c2UgYSBuZXcgY2hp
bGQgd2FzIGFkZGVkIHRvIGl0cyBkZXNjZW5kYW50ICVzLiI7CisgICAgICAgICAgICAgICAgICAg
IHN1YnN0aXR1dGlvbnMucHVzaCh0YXJnZXROb2RlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJQYXVzZWQgb24gYSBcIiVzXCIgYnJlYWtw
b2ludCBzZXQgb24gJXMsIGJlY2F1c2UgYSBuZXcgY2hpbGQgd2FzIGFkZGVkIHRvIHRoYXQgbm9k
ZS4iOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIlBh
dXNlZCBvbiBhIFwiJXNcIiBicmVha3BvaW50IHNldCBvbiAlcywgYmVjYXVzZSBpdHMgZGVzY2Vu
ZGFudCAlcyB3YXMgcmVtb3ZlZC4iOworICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMucHVz
aCh0YXJnZXROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtZXNzYWdlID0gIlBhdXNlZCBvbiBhIFwiJXNcIiBicmVha3BvaW50IHNldCBvbiAlcy4iOwor
CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwor
ICAgICAgICB2YXIgZm9ybWF0dGVycyA9IHsKKyAgICAgICAgICAgIHM6IGZ1bmN0aW9uKHN1YnN0
aXR1dGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0
aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBmdW5jdGlvbiBhcHBlbmQo
YSwgYikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09PSAic3RyaW5nIikK
KyAgICAgICAgICAgICAgICBiID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYik7CisgICAgICAg
ICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGIpOworICAgICAgICB9CisgICAgICAgIFdlYkluc3Bl
Y3Rvci5mb3JtYXRMb2NhbGl6ZWQobWVzc2FnZSwgc3Vic3RpdHV0aW9ucywgZm9ybWF0dGVycywg
IiIsIGFwcGVuZCk7CisKKyAgICAgICAgY2FsbGJhY2soZWxlbWVudCk7CisgICAgfSwKKworICAg
IG5vZGVSZW1vdmVkOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVtb3Zl
QnJlYWtwb2ludHNGb3JOb2RlKG5vZGUpOworICAgICAgICBpZiAoIW5vZGUuY2hpbGRyZW4pCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGls
ZHJlbi5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRzRm9y
Tm9kZShub2RlLmNoaWxkcmVuW2ldKTsKKyAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7
CisgICAgfSwKKworICAgIF9yZW1vdmVCcmVha3BvaW50c0Zvck5vZGU6IGZ1bmN0aW9uKG5vZGUp
CisgICAgeworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50RWxlbWVudHMp
IHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fYnJlYWtwb2ludEVsZW1lbnRzW2lk
XTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Ll9ub2RlID09PSBub2RlKQorICAgICAgICAgICAg
ICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoZWxlbWVudC5fbm9kZSwgZWxlbWVudC5fdHlwZSk7
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3NldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKG5vZGUs
IHR5cGUsIGVuYWJsZWQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5f
Y3JlYXRlQnJlYWtwb2ludElkKG5vZGUuaWQsIHR5cGUpOworICAgICAgICBpZiAoYnJlYWtwb2lu
dElkIGluIHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50cykKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAg
ICAgIGVsZW1lbnQuX25vZGUgPSBub2RlOworICAgICAgICBlbGVtZW50Ll90eXBlID0gdHlwZTsK
KyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2Nv
bnRleHRNZW51LmJpbmQodGhpcywgbm9kZSwgdHlwZSksIHRydWUpOworCisgICAgICAgIHZhciBj
aGVja2JveEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAg
ICBjaGVja2JveEVsZW1lbnQuY2xhc3NOYW1lID0gImNoZWNrYm94LWVsZW0iOworICAgICAgICBj
aGVja2JveEVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CisgICAgICAgIGNoZWNrYm94RWxlbWVu
dC5jaGVja2VkID0gZW5hYmxlZDsKKyAgICAgICAgY2hlY2tib3hFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgdGhpcy5fY2hlY2tib3hDbGlja2VkLmJpbmQodGhpcywgbm9kZSwgdHlw
ZSksIGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5fY2hlY2tib3hFbGVtZW50ID0gY2hlY2tib3hF
bGVtZW50OworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNoZWNrYm94RWxlbWVudCk7CisK
KyAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpOworCisgICAgICAg
IHZhciBsaW5raWZpZWROb2RlID0gV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5saW5raWZ5
Tm9kZUJ5SWQobm9kZS5pZCk7CisgICAgICAgIGxpbmtpZmllZE5vZGUuYWRkU3R5bGVDbGFzcygi
bW9ub3NwYWNlIik7CisgICAgICAgIGxhYmVsRWxlbWVudC5hcHBlbmRDaGlsZChsaW5raWZpZWRO
b2RlKTsKKworICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICAgICAgZGVzY3JpcHRpb24uY2xhc3NOYW1lID0gInNvdXJjZS10ZXh0IjsK
KyAgICAgICAgZGVzY3JpcHRpb24udGV4dENvbnRlbnQgPSB0aGlzLl9icmVha3BvaW50VHlwZUxh
YmVsc1t0eXBlXTsKKyAgICAgICAgbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGRlc2NyaXB0aW9u
KTsKKworICAgICAgICB2YXIgY3VycmVudEVsZW1lbnQgPSB0aGlzLmxpc3RFbGVtZW50LmZpcnN0
Q2hpbGQ7CisgICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCkgeworICAgICAgICAgICAgaWYg
KGN1cnJlbnRFbGVtZW50Ll90eXBlICYmIGN1cnJlbnRFbGVtZW50Ll90eXBlIDwgZWxlbWVudC5f
dHlwZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50
ID0gY3VycmVudEVsZW1lbnQubmV4dFNpYmxpbmc7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
YWRkTGlzdEVsZW1lbnQoZWxlbWVudCwgY3VycmVudEVsZW1lbnQpOworICAgICAgICB0aGlzLl9i
cmVha3BvaW50RWxlbWVudHNbYnJlYWtwb2ludElkXSA9IGVsZW1lbnQ7CisgICAgICAgIGlmIChl
bmFibGVkKQorICAgICAgICAgICAgQnJvd3NlckRlYnVnZ2VyQWdlbnQuc2V0RE9NQnJlYWtwb2lu
dChub2RlLmlkLCB0eXBlKTsKKyAgICB9LAorCisgICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0
aW9uKG5vZGUsIHR5cGUpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5f
Y3JlYXRlQnJlYWtwb2ludElkKG5vZGUuaWQsIHR5cGUpOworICAgICAgICB2YXIgZWxlbWVudCA9
IHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50c1ticmVha3BvaW50SWRdOworICAgICAgICBpZiAoIWVs
ZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fcmVtb3ZlTGlzdEVs
ZW1lbnQoZWxlbWVudCk7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50RWxlbWVudHNb
YnJlYWtwb2ludElkXTsKKyAgICAgICAgaWYgKGVsZW1lbnQuX2NoZWNrYm94RWxlbWVudC5jaGVj
a2VkKQorICAgICAgICAgICAgQnJvd3NlckRlYnVnZ2VyQWdlbnQucmVtb3ZlRE9NQnJlYWtwb2lu
dChub2RlLmlkLCB0eXBlKTsKKyAgICB9LAorCisgICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihu
b2RlLCB0eXBlLCBldmVudCkKKyAgICB7CisgICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBX
ZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKKyAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQnJlYWtw
b2ludCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQobm9k
ZSwgdHlwZSk7CisgICAgICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKKyAgICAgICAg
fQorICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
UmVtb3ZlIEJyZWFrcG9pbnQiKSwgcmVtb3ZlQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgY29udGV4dE1lbnUuc2hvdyhldmVudCk7CisgICAgfSwKKworICAgIF9jaGVja2JveENsaWNr
ZWQ6IGZ1bmN0aW9uKG5vZGUsIHR5cGUsIGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50
LnRhcmdldC5jaGVja2VkKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5h
Z2VyLnNldERPTUJyZWFrcG9pbnQobm9kZS5pZCwgdHlwZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5yZW1vdmVET01CcmVha3BvaW50
KG5vZGUuaWQsIHR5cGUpOworICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKKyAgICB9
LAorCisgICAgaGlnaGxpZ2h0QnJlYWtwb2ludDogZnVuY3Rpb24oZXZlbnREYXRhKQorICAgIHsK
KyAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IHRoaXMuX2NyZWF0ZUJyZWFrcG9pbnRJZChldmVu
dERhdGEubm9kZUlkLCBldmVudERhdGEudHlwZSk7CisgICAgICAgIHZhciBlbGVtZW50ID0gdGhp
cy5fYnJlYWtwb2ludEVsZW1lbnRzW2JyZWFrcG9pbnRJZF07CisgICAgICAgIGlmICghZWxlbWVu
dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5leHBhbmRlZCA9IHRydWU7Cisg
ICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiYnJlYWtwb2ludC1oaXQiKTsKKyAgICAgICAg
dGhpcy5faGlnaGxpZ2h0ZWRFbGVtZW50ID0gZWxlbWVudDsKKyAgICB9LAorCisgICAgY2xlYXJC
cmVha3BvaW50SGlnaGxpZ2h0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
aGlnaGxpZ2h0ZWRFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRlZEVsZW1l
bnQucmVtb3ZlU3R5bGVDbGFzcygiYnJlYWtwb2ludC1oaXQiKTsKKyAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLl9oaWdobGlnaHRlZEVsZW1lbnQ7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2Ny
ZWF0ZUJyZWFrcG9pbnRJZDogZnVuY3Rpb24obm9kZUlkLCB0eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5vZGVJZCArICI6IiArIHR5cGU7CisgICAgfSwKKworICAgIF9zYXZlQnJlYWtwb2lu
dHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOworICAg
ICAgICB2YXIgc3RvcmVkQnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuZG9tQnJl
YWtwb2ludHM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RvcmVkQnJlYWtwb2ludHMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gc3RvcmVkQnJlYWtw
b2ludHNbaV07CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC51cmwgIT09IHRoaXMuX2luc3Bl
Y3RlZFVSTCkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRFbGVtZW50
cykgeworICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9icmVha3BvaW50RWxlbWVudHNb
aWRdOworICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaCh7IHVybDogdGhpcy5faW5zcGVjdGVk
VVJMLCBwYXRoOiBlbGVtZW50Ll9ub2RlLnBhdGgoKSwgdHlwZTogZWxlbWVudC5fdHlwZSwgZW5h
YmxlZDogZWxlbWVudC5fY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmRvbUJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHM7
CisgICAgfSwKKworICAgIHJlc3RvcmVCcmVha3BvaW50czogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIHBhdGhUb0JyZWFrcG9pbnRzID0ge307CisKKyAgICAgICAgZnVuY3Rpb24gZGlk
UHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKHBhdGgsIG5vZGVJZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFyIG5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7
CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBwYXRoVG9CcmVha3BvaW50c1twYXRoXTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChub2RlLCBicmVha3BvaW50c1tpXS50eXBl
LCBicmVha3BvaW50c1tpXS5lbmFibGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBicmVh
a3BvaW50cyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kb21CcmVha3BvaW50czsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKKyAgICAgICAgICAgIGlmIChicmVh
a3BvaW50LnVybCAhPT0gdGhpcy5faW5zcGVjdGVkVVJMKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgdmFyIHBhdGggPSBicmVha3BvaW50LnBhdGg7CisgICAgICAgICAg
ICBpZiAoIXBhdGhUb0JyZWFrcG9pbnRzW3BhdGhdKSB7CisgICAgICAgICAgICAgICAgcGF0aFRv
QnJlYWtwb2ludHNbcGF0aF0gPSBbXTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9t
QWdlbnQucHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKHBhdGgsIGRpZFB1c2hOb2RlQnlQYXRoVG9G
cm9udGVuZC5iaW5kKHRoaXMsIHBhdGgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBh
dGhUb0JyZWFrcG9pbnRzW3BhdGhdLnB1c2goYnJlYWtwb2ludCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK1dlYkluc3BlY3Rvci5ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90
b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Vs
ZW1lbnRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanMKaW5kZXggNzI0ZTBlMi4uNTU0ZjdkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwpAQCAtNzksNyArNzks
NyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLnNp
ZGViYXJQYW5lcy5tZXRyaWNzID0gbmV3IFdlYkluc3BlY3Rvci5NZXRyaWNzU2lkZWJhclBhbmUo
KTsKICAgICB0aGlzLnNpZGViYXJQYW5lcy5wcm9wZXJ0aWVzID0gbmV3IFdlYkluc3BlY3Rvci5Q
cm9wZXJ0aWVzU2lkZWJhclBhbmUoKTsKICAgICBpZiAoUHJlZmVyZW5jZXMubmF0aXZlSW5zdHJ1
bWVudGF0aW9uRW5hYmxlZCkKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuZG9tQnJlYWtwb2lu
dHMgPSBXZWJJbnNwZWN0b3IuY3JlYXRlRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZSgpOworICAg
ICAgICB0aGlzLnNpZGViYXJQYW5lcy5kb21CcmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5ET01C
cmVha3BvaW50c1NpZGViYXJQYW5lLmluc3RhbmNlKCk7CiAgICAgdGhpcy5zaWRlYmFyUGFuZXMu
ZXZlbnRMaXN0ZW5lcnMgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBh
bmUoKTsKIAogICAgIHRoaXMuc2lkZWJhclBhbmVzLnN0eWxlcy5vbmV4cGFuZCA9IHRoaXMudXBk
YXRlU3R5bGVzLmJpbmQodGhpcyk7CkBAIC0xNTMsNiArMTUzLDkgQEAgV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5yZWNlbnRseU1vZGlm
aWVkTm9kZXMubGVuZ3RoKQogICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RpZmllZE5vZGVzKCk7
CiAKKyAgICAgICAgaWYgKFByZWZlcmVuY2VzLm5hdGl2ZUluc3RydW1lbnRhdGlvbkVuYWJsZWQp
CisgICAgICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnNpZGVi
YXJQYW5lcy5kb21CcmVha3BvaW50cy5lbGVtZW50LCB0aGlzLnNpZGViYXJQYW5lcy5ldmVudExp
c3RlbmVycy5lbGVtZW50KTsKKwogICAgICAgICBpZiAoIXRoaXMucm9vdERPTU5vZGUpCiAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQucmVxdWVzdERvY3VtZW50KCk7CiAgICAgfSwK
QEAgLTE5OSw4ICsyMDIsOCBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGlmICghaW5zcGVjdGVkUm9vdERvY3VtZW50KQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5yZXN0b3JlRE9N
QnJlYWtwb2ludHMoKTsKLQorICAgICAgICBpZiAoUHJlZmVyZW5jZXMubmF0aXZlSW5zdHJ1bWVu
dGF0aW9uRW5hYmxlZCkKKyAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmRvbUJyZWFrcG9p
bnRzLnJlc3RvcmVCcmVha3BvaW50cygpOwogCiAgICAgICAgIHRoaXMucm9vdERPTU5vZGUgPSBp
bnNwZWN0ZWRSb290RG9jdW1lbnQ7CiAKQEAgLTQ4Myw3ICs0ODYsNyBAQCBXZWJJbnNwZWN0b3Iu
RWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgICAgIG5vZGVJdGVt
LnVwZGF0ZVRpdGxlKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKQEAgLTc2OCwxMyArNzcxLDEzIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50
c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICB2YXIgY3J1
bWIgPSBjcnVtYnMuZmlyc3RDaGlsZDsKICAgICAgICAgd2hpbGUgKGNydW1iKSB7Ci0gICAgICAg
ICAgICAvLyBGaW5kIHRoZSBzZWxlY3RlZCBjcnVtYiBhbmQgaW5kZXguIAorICAgICAgICAgICAg
Ly8gRmluZCB0aGUgc2VsZWN0ZWQgY3J1bWIgYW5kIGluZGV4LgogICAgICAgICAgICAgaWYgKCFz
ZWxlY3RlZENydW1iICYmIGNydW1iLmhhc1N0eWxlQ2xhc3MoInNlbGVjdGVkIikpIHsKICAgICAg
ICAgICAgICAgICBzZWxlY3RlZENydW1iID0gY3J1bWI7CiAgICAgICAgICAgICAgICAgc2VsZWN0
ZWRJbmRleCA9IGk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZpbmQgdGhlIGZv
Y3VzZWQgY3J1bWIgaW5kZXguIAorICAgICAgICAgICAgLy8gRmluZCB0aGUgZm9jdXNlZCBjcnVt
YiBpbmRleC4KICAgICAgICAgICAgIGlmIChjcnVtYiA9PT0gZm9jdXNlZENydW1iKQogICAgICAg
ICAgICAgICAgIGZvY3VzZWRJbmRleCA9IGk7CiAKQEAgLTg4Myw3ICs4ODYsNyBAQCBXZWJJbnNw
ZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB3aGlsZSAoY3J1
bWIpIHsKICAgICAgICAgICAgICAgICB2YXIgaGlkZGVuID0gY3J1bWIuaGFzU3R5bGVDbGFzcygi
aGlkZGVuIik7CiAgICAgICAgICAgICAgICAgaWYgKCFoaWRkZW4pIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGNvbGxhcHNlZCA9IGNydW1iLmhhc1N0eWxlQ2xhc3MoImNvbGxhcHNlZCIpOyAK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbGxhcHNlZCA9IGNydW1iLmhhc1N0eWxlQ2xhc3Mo
ImNvbGxhcHNlZCIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGFwc2VkUnVuICYmIGNv
bGxhcHNlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY3J1bWIuYWRkU3R5bGVDbGFzcygi
aGlkZGVuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBjcnVtYi5yZW1vdmVTdHlsZUNsYXNz
KCJjb21wYWN0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKaW5kZXggZGQ5OWRiMS4uMmVjYzNmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVP
dXRsaW5lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVu
dHNUcmVlT3V0bGluZS5qcwpAQCAtNzkxLDIzICs3OTEsOCBAQCBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChQcmVmZXJlbmNlcy5uYXRp
dmVJbnN0cnVtZW50YXRpb25FbmFibGVkKSB7CiAgICAgICAgICAgICAvLyBBZGQgZGViYnVnaW5n
LXJlbGF0ZWQgYWN0aW9ucwogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9y
KCk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXJGdW5jdGlvbihub2RlSWQsIGJyZWFr
VHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtw
b2ludE1hbmFnZXIuY3JlYXRlRE9NQnJlYWtwb2ludChub2RlSWQsIGJyZWFrVHlwZSk7Ci0gICAg
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5zaWRlYmFyUGFuZXMuZG9t
QnJlYWtwb2ludHMuZXhwYW5kKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMucmVwcmVzZW50ZWRPYmplY3Q7Ci0gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4g
V2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRUeXBlcykgewotICAgICAgICAgICAgICAgIHZhciB0
eXBlID0gV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRUeXBlc1trZXldOwotICAgICAgICAgICAg
ICAgIHZhciBsYWJlbCA9IFdlYkluc3BlY3Rvci5kb21CcmVha3BvaW50VHlwZUNvbnRleHRNZW51
TGFiZWwodHlwZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBub2RlLmJyZWFr
cG9pbnRzW3R5cGVdOwotICAgICAgICAgICAgICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyRnVuY3Rpb24uYmluZCh0aGlzLCBub2Rl
LmlkLCB0eXBlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZh
ciBoYW5kbGVyID0gYnJlYWtwb2ludC5yZW1vdmUuYmluZChicmVha3BvaW50KTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRDaGVja2JveEl0ZW0obGFiZWwsIGhhbmRsZXIsICEh
YnJlYWtwb2ludCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcGFuZSA9IFdlYklu
c3BlY3Rvci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVzLmRvbUJyZWFrcG9pbnRzOworICAg
ICAgICAgICAgcGFuZS5wb3B1bGF0ZU5vZGVDb250ZXh0TWVudSh0aGlzLnJlcHJlc2VudGVkT2Jq
ZWN0LCBjb250ZXh0TWVudSk7CiAgICAgICAgIH0KICAgICB9LAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IGZiNGExZmQ4
Li44YWM4N2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qcwpAQCAtMTQ0LDcgKzE0NCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5zaWRlYmFyUGFuZXMuc2NvcGVjaGFpbiA9IG5l
dyBXZWJJbnNwZWN0b3IuU2NvcGVDaGFpblNpZGViYXJQYW5lKCk7CiAgICAgdGhpcy5zaWRlYmFy
UGFuZXMuanNCcmVha3BvaW50cyA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9p
bnRzU2lkZWJhclBhbmUodGhpcy5fcHJlc2VudGF0aW9uTW9kZWwpOwogICAgIGlmIChQcmVmZXJl
bmNlcy5uYXRpdmVJbnN0cnVtZW50YXRpb25FbmFibGVkKSB7Ci0gICAgICAgIHRoaXMuc2lkZWJh
clBhbmVzLmRvbUJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmNyZWF0ZURPTUJyZWFrcG9pbnRz
U2lkZWJhclBhbmUoKTsKKyAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuZG9tQnJlYWtwb2ludHMg
PSBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5pbnN0YW5jZSgpOwogICAg
ICAgICB0aGlzLnNpZGViYXJQYW5lcy54aHJCcmVha3BvaW50cyA9IG5ldyBXZWJJbnNwZWN0b3Iu
WEhSQnJlYWtwb2ludHNTaWRlYmFyUGFuZSgpOwogICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5l
dmVudExpc3RlbmVyQnJlYWtwb2ludHMgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJC
cmVha3BvaW50c1NpZGViYXJQYW5lKCk7CiAgICAgfQpAQCAtMjA4LDYgKzIwOCwxMiBAQCBXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsLlBhdXNlT25FeGNlcHRpb25zU3RhdGUgPSB7CiAgICAgUGF1
c2VPblVuY2F1Z2h0RXhjZXB0aW9uczogMgogfTsKIAorV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bC5Ccm93c2VyQnJlYWtwb2ludFR5cGVzID0geworICAgIERPTTogIkRPTSIsCisgICAgRXZlbnRM
aXN0ZW5lcjogIkV2ZW50TGlzdGVuZXIiLAorICAgIFhIUjogIlhIUiIKK30KKwogV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IHRvb2xiYXJJdGVtTGFiZWwo
KQogICAgIHsKQEAgLTIzMyw2ICsyMzksOCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnBy
b3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUu
c2hvdy5jYWxsKHRoaXMpOwogICAgICAgICB0aGlzLnNpZGViYXJSZXNpemVFbGVtZW50LnN0eWxl
LnJpZ2h0ID0gKHRoaXMuc2lkZWJhckVsZW1lbnQub2Zmc2V0V2lkdGggLSAzKSArICJweCI7Cisg
ICAgICAgIGlmIChQcmVmZXJlbmNlcy5uYXRpdmVJbnN0cnVtZW50YXRpb25FbmFibGVkKQorICAg
ICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5zaWRlYmFyUGFu
ZXMuZG9tQnJlYWtwb2ludHMuZWxlbWVudCwgdGhpcy5zaWRlYmFyUGFuZXMueGhyQnJlYWtwb2lu
dHMuZWxlbWVudCk7CiAKICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcpCiAgICAgICAgICAg
ICB0aGlzLnZpc2libGVWaWV3LnNob3codGhpcy52aWV3c0NvbnRhaW5lckVsZW1lbnQpOwpAQCAt
Mzc1LDI2ICszODMsMzAgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay51cGRhdGUoZXZlbnQuZGF0YSk7
CiAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay5zZWxlY3RlZENhbGxGcmFtZSA9
IGNhbGxGcmFtZXNbMF07CiAKLSAgICAgICAgdmFyIHN0YXR1czsKICAgICAgICAgaWYgKGRldGFp
bHMuZXZlbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLk5hdGl2ZUJy
ZWFrcG9pbnQpIHsKLSAgICAgICAgICAgIGlmIChkZXRhaWxzLmV2ZW50RGF0YS5icmVha3BvaW50
VHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcy5F
dmVudExpc3RlbmVyKSB7CisgICAgICAgICAgICBpZiAoZGV0YWlscy5ldmVudERhdGEuYnJlYWtw
b2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwuQnJvd3NlckJyZWFrcG9pbnRU
eXBlcy5ET00pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5kb21CcmVha3Bv
aW50cy5oaWdobGlnaHRCcmVha3BvaW50KGRldGFpbHMuZXZlbnREYXRhKTsKKyAgICAgICAgICAg
ICAgICBmdW5jdGlvbiBkaWRDcmVhdGVCcmVha3BvaW50SGl0U3RhdHVzTWVzc2FnZShlbGVtZW50
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFu
ZXMuY2FsbHN0YWNrLnNldFN0YXR1cyhlbGVtZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuZG9tQnJlYWtwb2ludHMuY3JlYXRlQnJlYWtw
b2ludEhpdFN0YXR1c01lc3NhZ2UoZGV0YWlscy5ldmVudERhdGEsIGRpZENyZWF0ZUJyZWFrcG9p
bnRIaXRTdGF0dXNNZXNzYWdlLmJpbmQodGhpcykpOworICAgICAgICAgICAgfSBlbHNlIGlmIChk
ZXRhaWxzLmV2ZW50RGF0YS5icmVha3BvaW50VHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5Ccm93c2VyQnJlYWtwb2ludFR5cGVzLkV2ZW50TGlzdGVuZXIpIHsKICAgICAgICAgICAg
ICAgICB2YXIgZXZlbnROYW1lID0gZGV0YWlscy5ldmVudERhdGEuZXZlbnROYW1lOwogICAgICAg
ICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmV2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5oaWdo
bGlnaHRCcmVha3BvaW50KGRldGFpbHMuZXZlbnREYXRhLmV2ZW50TmFtZSk7CiAgICAgICAgICAg
ICAgICAgdmFyIGV2ZW50TmFtZUZvclVJID0gV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVh
a3BvaW50c1NpZGViYXJQYW5lLmV2ZW50TmFtZUZvclVJKGV2ZW50TmFtZSk7Ci0gICAgICAgICAg
ICAgICAgc3RhdHVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXVzZWQgb24gYSBcIiVzXCIg
RXZlbnQgTGlzdGVuZXIuIiwgZXZlbnROYW1lRm9yVUkpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChkZXRhaWxzLmV2ZW50RGF0YS5icmVha3BvaW50VHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcy5YSFIpIHsKKyAgICAgICAgICAgICAgICB0aGlz
LnNpZGViYXJQYW5lcy5jYWxsc3RhY2suc2V0U3RhdHVzKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
UGF1c2VkIG9uIGEgXCIlc1wiIEV2ZW50IExpc3RlbmVyLiIsIGV2ZW50TmFtZUZvclVJKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGRldGFpbHMuZXZlbnREYXRhLmJyZWFrcG9pbnRUeXBlID09
PSBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLkJyb3dzZXJCcmVha3BvaW50VHlwZXMuWEhSKSB7
CiAgICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMueGhyQnJlYWtwb2ludHMuaGlnaGxp
Z2h0QnJlYWtwb2ludChkZXRhaWxzLmV2ZW50RGF0YS5icmVha3BvaW50VVJMKTsKLSAgICAgICAg
ICAgICAgICBzdGF0dXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBhdXNlZCBvbiBhIFhNTEh0
dHBSZXF1ZXN0LiIpOworICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFj
ay5zZXRTdGF0dXMoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXVzZWQgb24gYSBYTUxIdHRwUmVx
dWVzdC4iKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB2
YXIgc291cmNlTG9jYXRpb24gPSB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5zZWxlY3RlZENhbGxG
cmFtZS5zb3VyY2VMb2NhdGlvbjsKICAgICAgICAgICAgIGlmIChzb3VyY2VMb2NhdGlvbikKICAg
ICAgICAgICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5qc0JyZWFrcG9pbnRzLmhpZ2hsaWdodEJy
ZWFrcG9pbnQoc291cmNlTG9jYXRpb24uc291cmNlRmlsZUlkLCBzb3VyY2VMb2NhdGlvbi5saW5l
TnVtYmVyKTsKICAgICAgICAgICAgIGlmIChkZXRhaWxzLmJyZWFrcG9pbnQpCi0gICAgICAgICAg
ICAgICAgc3RhdHVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXVzZWQgb24gYSBKYXZhU2Ny
aXB0IGJyZWFrcG9pbnQuIik7CisgICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuY2Fs
bHN0YWNrLnNldFN0YXR1cyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBhdXNlZCBvbiBhIEphdmFT
Y3JpcHQgYnJlYWtwb2ludC4iKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXR1cykKLSAg
ICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay5zZXRTdGF0dXMoc3RhdHVzKTsK
IAogICAgICAgICB3aW5kb3cuZm9jdXMoKTsKICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmJyaW5nVG9Gcm9udCgpOwpAQCAtNzUzLDYgKzc2NSw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5zY29wZWNoYWlu
LnVwZGF0ZShudWxsKTsKICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuanNCcmVha3BvaW50cy5j
bGVhckJyZWFrcG9pbnRIaWdobGlnaHQoKTsKICAgICAgICAgaWYgKFByZWZlcmVuY2VzLm5hdGl2
ZUluc3RydW1lbnRhdGlvbkVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVz
LmRvbUJyZWFrcG9pbnRzLmNsZWFyQnJlYWtwb2ludEhpZ2hsaWdodCgpOwogICAgICAgICAgICAg
dGhpcy5zaWRlYmFyUGFuZXMuZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyQnJlYWtwb2lu
dEhpZ2hsaWdodCgpOwogICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMueGhyQnJlYWtwb2lu
dHMuY2xlYXJCcmVha3BvaW50SGlnaGxpZ2h0KCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCmluZGV4IDUxYmQyYWEuLjVlMmE5
NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGlu
Z3MuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5q
cwpAQCAtNzIsMTMgKzcyLDggQEAgV2ViSW5zcGVjdG9yLlNldHRpbmdzID0gZnVuY3Rpb24oKQog
ICAgIHRoaXMuaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGluZygid2F0Y2hFeHByZXNzaW9ucyIsIFtd
KTsKICAgICB0aGlzLmluc3RhbGxBcHBsaWNhdGlvblNldHRpbmcoImJyZWFrcG9pbnRzIiwgW10p
OwogICAgIHRoaXMuaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGluZygiZXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnRzIiwgW10pOworICAgIHRoaXMuaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGluZygiZG9tQnJl
YWtwb2ludHMiLCBbXSk7CiAgICAgdGhpcy5pbnN0YWxsQXBwbGljYXRpb25TZXR0aW5nKCJ4aHJC
cmVha3BvaW50cyIsIFtdKTsKLQotICAgIHRoaXMuaW5zdGFsbFByb2plY3RTZXR0aW5nKCJuYXRp
dmVCcmVha3BvaW50cyIsIFtdKTsKLX0KLQotV2ViSW5zcGVjdG9yLlNldHRpbmdzLkV2ZW50cyA9
IHsKLSAgICBQcm9qZWN0Q2hhbmdlZDogInByb2plY3QtY2hhbmdlZCIKIH0KIAogV2ViSW5zcGVj
dG9yLlNldHRpbmdzLnByb3RvdHlwZSA9IHsKQEAgLTkxLDQ0ICs4Niw2IEBAIFdlYkluc3BlY3Rv
ci5TZXR0aW5ncy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX19kZWZpbmVTZXR0ZXJfXyhr
ZXksIHRoaXMuX3NldC5iaW5kKHRoaXMsIGtleSkpOwogICAgIH0sCiAKLSAgICBpbnN0YWxsUHJv
amVjdFNldHRpbmc6IGZ1bmN0aW9uKGtleSwgZGVmYXVsdFZhbHVlKQotICAgIHsKLSAgICAgICAg
dGhpcy5fX2RlZmluZUdldHRlcl9fKGtleSwgdGhpcy5fZ2V0UHJvamVjdFNldHRpbmcuYmluZCh0
aGlzLCBrZXksIGRlZmF1bHRWYWx1ZSkpOwotICAgICAgICB0aGlzLl9fZGVmaW5lU2V0dGVyX18o
a2V5LCB0aGlzLl9zZXRQcm9qZWN0U2V0dGluZy5iaW5kKHRoaXMsIGtleSkpOwotICAgIH0sCi0K
LSAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICB2
YXIgZnJhZ21lbnRJbmRleCA9IHVybC5pbmRleE9mKCIjIik7Ci0gICAgICAgIGlmIChmcmFnbWVu
dEluZGV4ICE9PSAtMSkKLSAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgZnJhZ21l
bnRJbmRleCk7Ci0gICAgICAgIHRoaXMuX3Byb2plY3RJZCA9IHVybDsKLSAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNldHRpbmdzLkV2ZW50cy5Qcm9q
ZWN0Q2hhbmdlZCk7Ci0gICAgfSwKLQotICAgIGdldCBwcm9qZWN0SWQoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3Byb2plY3RJZDsKLSAgICB9LAotCi0gICAgZmluZFNldHRpbmdGb3JB
bGxQcm9qZWN0czogZnVuY3Rpb24oa2V5KQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IHt9
OwotICAgICAgICB2YXIgcmVnZXhwID0gIl4iICsga2V5ICsgIjooLiopIjsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB3aW5kb3cubG9jYWxTdG9yYWdlLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgZnVsbEtleSA9ICB3aW5kb3cubG9jYWxTdG9yYWdlLmtleShpKTsKLSAgICAg
ICAgICAgIHZhciBtYXRjaCA9IGZ1bGxLZXkubWF0Y2gocmVnZXhwKTsKLSAgICAgICAgICAgIGlm
ICghbWF0Y2gpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgICAgIHJlc3VsdFttYXRjaFsxXV0gPSBKU09OLnBhcnNlKHdpbmRvdy5sb2Nh
bFN0b3JhZ2VbZnVsbEtleV0pOwotICAgICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAg
ICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGZ1bGxLZXkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQogICAgIF9n
ZXQ6IGZ1bmN0aW9uKGtleSwgZGVmYXVsdFZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGtleSBp
biB3aW5kb3cubG9jYWxTdG9yYWdlKSB7CkBAIC0xNDQsMjEgKzEwMSw2IEBAIFdlYkluc3BlY3Rv
ci5TZXR0aW5ncy5wcm90b3R5cGUgPSB7CiAgICAgX3NldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Vba2V5XSA9IEpTT04uc3RyaW5naWZ5
KHZhbHVlKTsKLSAgICB9LAotCi0gICAgX2dldFByb2plY3RTZXR0aW5nOiBmdW5jdGlvbihrZXks
IGRlZmF1bHRWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9nZXQodGhpcy5fZm9y
bWF0UHJvamVjdEtleShrZXkpLCBkZWZhdWx0VmFsdWUpOwotICAgIH0sCi0KLSAgICBfc2V0UHJv
amVjdFNldHRpbmc6IGZ1bmN0aW9uKGtleSwgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fc2V0KHRoaXMuX2Zvcm1hdFByb2plY3RLZXkoa2V5KSwgdmFsdWUpOwotICAgIH0sCi0K
LSAgICBfZm9ybWF0UHJvamVjdEtleTogZnVuY3Rpb24oa2V5KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGtleSArICI6IiArIHRoaXMuX3Byb2plY3RJZDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCBiZGRjM2QzLi5hMWY4
MjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktp
dC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJj
CkBAIC0xMCw3ICsxMCw2IEBACiAgICAgPGZpbGU+QXVkaXRzUGFuZWwuanM8L2ZpbGU+CiAgICAg
PGZpbGU+Qm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzPC9maWxlPgogICAgIDxmaWxlPkJy
ZWFrcG9pbnQuanM8L2ZpbGU+Ci0gICAgPGZpbGU+QnJlYWtwb2ludE1hbmFnZXIuanM8L2ZpbGU+
CiAgICAgPGZpbGU+QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5D
YWxsU3RhY2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5DaGVja2JveC5qczwvZmls
ZT4KQEAgLTM0LDYgKzMzLDcgQEAKICAgICA8ZmlsZT5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVs
LmpzPC9maWxlPgogICAgIDxmaWxlPlNvdXJjZUZpbGUuanM8L2ZpbGU+CiAgICAgPGZpbGU+RE9N
QWdlbnQuanM8L2ZpbGU+CisgICAgPGZpbGU+RE9NQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczwv
ZmlsZT4KICAgICA8ZmlsZT5ET01TdG9yYWdlLmpzPC9maWxlPgogICAgIDxmaWxlPkRPTVN0b3Jh
Z2VJdGVtc1ZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+RE9NU3ludGF4SGlnaGxpZ2h0ZXIuanM8
L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5odG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbAppbmRleCA2MDdmN2U4Li5lZDAwNDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTc0LDcgKzc0LDYgQEAgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJBcHBsaWNhdGlv
bkNhY2hlSXRlbXNWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJTY3JpcHQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IkJyZWFrcG9pbnQuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkJyZWFrcG9pbnRNYW5hZ2VyLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTaWRlYmFyUGFuZS5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRWxl
bWVudHNUcmVlT3V0bGluZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iU2lkZWJhclRyZWVFbGVtZW50LmpzIj48L3NjcmlwdD4KQEAgLTgzLDYg
KzgyLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSJSZW1vdGVPYmplY3QuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9Ik9iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJCcmVha3BvaW50c1NpZGViYXJQYW5l
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJE
T01CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJDYWxsU3RhY2tTaWRlYmFyUGFuZS5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NvcGVDaGFpblNpZGVi
YXJQYW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJXYXRjaEV4cHJlc3Npb25zU2lkZWJhclBhbmUuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBlZWRiOGVh
Li5lZTAzNTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5qcwpAQCAtMTcxLDE3ICsxNzEsNiBAQCB2YXIgV2ViSW5zcGVjdG9yID0gewogICAg
ICAgICB9CiAgICAgfSwKIAotICAgIGNyZWF0ZURPTUJyZWFrcG9pbnRzU2lkZWJhclBhbmU6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBwYW5lID0gbmV3IFdlYkluc3BlY3Rvci5OYXRp
dmVCcmVha3BvaW50c1NpZGViYXJQYW5lKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRE9NIEJyZWFr
cG9pbnRzIikpOwotICAgICAgICBmdW5jdGlvbiBicmVha3BvaW50QWRkZWQoZXZlbnQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBhbmUuYWRkQnJlYWtwb2ludEl0ZW0obmV3IFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50SXRlbShldmVudC5kYXRhKSk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViSW5z
cGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5ET01CcmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnRBZGRl
ZCk7Ci0gICAgICAgIHJldHVybiBwYW5lOwotICAgIH0sCi0KICAgICBfY3JlYXRlUGFuZWxzOiBm
dW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgaGlkZGVuUGFuZWxzID0gKEluc3BlY3RvckZy
b250ZW5kSG9zdC5oaWRkZW5QYW5lbHMoKSB8fCAiIikuc3BsaXQoJywnKTsKQEAgLTQ1OSw3ICs0
NDgsNiBAQCBXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lID0gZnVuY3Rpb24oKQogICAgIHRoaXMu
Y3NzTW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwoKTsKICAgICB0aGlzLmRl
YnVnZ2VyTW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwoKTsKIAotICAgIHRo
aXMuYnJlYWtwb2ludE1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
KCk7CiAgICAgdGhpcy5zZWFyY2hDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5TZWFyY2hD
b250cm9sbGVyKCk7CiAKICAgICB0aGlzLnBhbmVscyA9IHt9OwpAQCAtMTA0NCw4ICsxMDMyLDgg
QEAgV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCA9IGZ1bmN0aW9uKCkKIFdlYkluc3BlY3Rvci5p
bnNwZWN0ZWRVUkxDaGFuZ2VkID0gZnVuY3Rpb24odXJsKQogewogICAgIEluc3BlY3RvckZyb250
ZW5kSG9zdC5pbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybCk7Ci0gICAgdGhpcy5zZXR0aW5ncy5pbnNw
ZWN0ZWRVUkxDaGFuZ2VkKHVybCk7CiAgICAgdGhpcy5leHRlbnNpb25TZXJ2ZXIubm90aWZ5SW5z
cGVjdGVkVVJMQ2hhbmdlZCgpOworICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMuc2lk
ZWJhclBhbmVzLmRvbUJyZWFrcG9pbnRzLnNldEluc3BlY3RlZFVSTCh1cmwpOwogfQogCiBXZWJJ
bnNwZWN0b3IubG9nID0gZnVuY3Rpb24obWVzc2FnZSwgbWVzc2FnZUxldmVsKQo=
</data>
<flag name="review"
          id="79146"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>