<?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>143127</bug_id>
          
          <creation_ts>2015-03-26 23:20:19 -0700</creation_ts>
          <short_desc>Web Inspector: Convert TextEditor classes to ES6</short_desc>
          <delta_ts>2015-04-21 20:31:19 -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</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>142891</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Timothy Hatcher">timothy</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1080550</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-03-26 23:20:19 -0700</bug_when>
    <thetext>Some more meaty classes that work fine as ES6 classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080551</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-03-26 23:20:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/20322413&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080552</commentid>
    <comment_count>2</comment_count>
      <attachid>249553</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-03-26 23:23:35 -0700</bug_when>
    <thetext>Created attachment 249553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080553</commentid>
    <comment_count>3</comment_count>
      <attachid>249554</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-03-26 23:23:59 -0700</bug_when>
    <thetext>Created attachment 249554
Patch (Ignore Space)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080559</commentid>
    <comment_count>4</comment_count>
      <attachid>249553</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-26 23:42:52 -0700</bug_when>
    <thetext>Comment on attachment 249553
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080564</commentid>
    <comment_count>5</comment_count>
      <attachid>249553</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-03-27 00:27:40 -0700</bug_when>
    <thetext>Comment on attachment 249553
Patch

https://trac.webkit.org/r182054</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249553</attachid>
            <date>2015-03-26 23:23:35 -0700</date>
            <delta_ts>2015-03-27 00:27:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143127-20150326232302.patch</filename>
            <type>text/plain</type>
            <size>82387</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA0
Njc2NTUxMmM1OThlZDdlNTE0NDgxNmJkNTkwMzQwNWM0Nzc2NGZiLi5lZGY4YTg5ZmZkZTRmMWU0
YjlmNjcwMTI5YjVkZWY3NjI0ZTlkOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxOSBAQAogMjAxNS0wMy0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5j
b20+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQ29udmVydCBUZXh0RWRpdG9yIGNsYXNzZXMg
dG8gRVM2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDMxMjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanM6Cisg
ICAgICAgIFJlbW92ZWQgYSBjb21tZW50IGFib3V0IGNvbnN0LCB3ZSBjYW4ndCB1c2UgaXQgaW4g
c3RyaWN0IG1vZGUgLyBjbGFzc2VzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9T
b3VyY2VDb2RlVGV4dEVkaXRvci5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Rl
eHRFZGl0b3IuanM6CisgICAgICAgIENvbnZlcnRlZCB0byBFUzYgY2xhc3Nlcy4KKworMjAxNS0w
My0yNiAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CisKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogQ29udmVydCBUcmVlRWxlbWVudCBjbGFzc2VzIHRvIEVTNgogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMTExCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVj
bGFyYXRpb25UZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMKaW5kZXggYTRiMjNkZmU5
YmIxMDJjMzA2ZGNhMWE5MTlmY2JhNWRlZTNkMzJjZS4uMDNlNDc1YTNkNTk4NzEzMTAwMDE0ODI4
NTM5YzczYzcyNGM0ODRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlv
blRleHRFZGl0b3IuanMKQEAgLTI5Niw3ICsyOTYsNiBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVE
ZWNsYXJhdGlvblRleHRFZGl0b3IgPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRv
cgogICAgICAgICAvLyBVc2UgYSBzaG9ydCBkZWxheSBmb3IgdXNlciBpbnB1dCB0byBjb2FsZXNj
ZSBtb3JlIGNoYW5nZXMgYmVmb3JlIGNvbW1pdHRpbmcuIE90aGVyIGFjdGlvbnMgbGlrZQogICAg
ICAgICAvLyB1bmRvLCByZWRvIGFuZCBwYXN0ZSBhcmUgYXRvbWljIGFuZCB3b3JrIGJldHRlciB3
aXRoIGEgemVybyBkZWxheS4gQ29kZU1pcnJvciBpZGVudGlmaWVzIGNoYW5nZXMgdGhhdAogICAg
ICAgICAvLyBnZXQgY29hbGVzY2VkIGluIHRoZSB1bmRvIHN0YWNrIHdpdGggYSAiKyIgcHJlZml4
IG9uIHRoZSBvcmlnaW4uIFVzZSB0aGF0IHRvIHNldCB0aGUgZGVsYXkgZm9yIG91ciBjb2FsZXNj
aW5nLgotICAgICAgICAvLyBGSVhNRTogdXNlIGNvbnN0IG9yIGxldAogICAgICAgICB2YXIgZGVs
YXkgPSBjaGFuZ2Uub3JpZ2luICYmIGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09PSAiKyIgPyBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuQ29tbWl0Q29hbGVzY2VE
ZWxheSA6IDA7CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVvdXQgc28gcmFwaWQgY2hhbmdl
cyBjb2FsZXNjZSBhZnRlciBhIHNob3J0IGRlbGF5LgpAQCAtMzM3LDcgKzMzNiw2IEBAIFdlYklu
c3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvciA9IGNsYXNzIENTU1N0eWxlRGVj
bGFyYXRpb25UZXh0RWRpdG9yCiAKICAgICAgICAgICAgIGlmICghdGhpcy5fY29kZU1pcnJvci5n
ZXRPcHRpb24oInJlYWRPbmx5IikpIHsKICAgICAgICAgICAgICAgICAvLyBNYXRjaGVzIGEgY29t
bWVudCBsaWtlOiAvKiAtd2Via2l0LWZvbzogYmFyOyAqLwotICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiB1c2UgY29uc3Qgb3IgbGV0CiAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnRlZFByb3Bl
cnR5UmVnZXggPSAvXC9cKlxzKlstXHddK1xzKjpccypbXjtdKzs/XHMqXCpcLy9nOwogCiAgICAg
ICAgICAgICAgICAgLy8gTG9vayBmb3IgY29tbWVudHMgdGhhdCBsb29rIGxpa2UgcHJvcGVydGll
cyBhbmQgYWRkIGNoZWNrYm94ZXMgaW4gZnJvbnQgb2YgdGhlbS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9y
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29k
ZVRleHRFZGl0b3IuanMKaW5kZXggNTk4NWYxNzJhMjFiMTFmNDEyZjY3MzZmZWVlOTk2MGMyNzE3
N2RlMi4uNTIxMzU2ZWU4MGI2OTViZjczZjhkYzI4NWIwY2RlY2U5NzJiOTE4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRl
eHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMKQEAgLTIzLDk0ICsyMyw3NiBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvciA9IGZ1bmN0aW9uKHNvdXJjZUNvZGUpCitXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IgPSBjbGFzcyBTb3VyY2VDb2RlVGV4dEVkaXRvciBleHRlbmRzIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yCiB7Ci0gICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZSBpbnN0YW5j
ZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlKTsKLQotICAgIHRoaXMuX3NvdXJjZUNvZGUgPSBz
b3VyY2VDb2RlOwotICAgIHRoaXMuX2JyZWFrcG9pbnRNYXAgPSB7fTsKLSAgICB0aGlzLl9pc3N1
ZXNMaW5lTnVtYmVyTWFwID0gbmV3IE1hcDsKLSAgICB0aGlzLl93aWRnZXRNYXAgPSBuZXcgTWFw
OwotICAgIHRoaXMuX2NvbnRlbnRQb3B1bGF0ZWQgPSBmYWxzZTsKLSAgICB0aGlzLl9pbnZhbGlk
TGluZU51bWJlcnMgPSB7MDogdHJ1ZX07Ci0gICAgdGhpcy5faWdub3JlQ29udGVudERpZENoYW5n
ZSA9IDA7Ci0KLSAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5jYWxsKHRoaXMsIG51bGwsIG51
bGwsIHRoaXMpOwotCi0gICAgdGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlciA9IG51bGw7Ci0g
ICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbnVsbDsKLSAgICB0aGlzLl9iYXNpY0Jsb2Nr
QW5ub3RhdG9yID0gbnVsbDsKLSAgICAKLSAgICB0aGlzLl9pc1Byb2JhYmx5TWluaWZpZWQgPSBm
YWxzZTsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBzIGJldHdlZW4g
cmVzb3VyY2VzIGFuZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBkb2Vzbid0ICJq
dW1wIHRvIHN5bWJvbCIgeWV0LgotICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9s
bGVyU3RhdGUoKTsKLQotICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5TdHlsZUNsYXNzTmFtZSk7CisgICAgY29uc3RydWN0b3Io
c291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNvdXJjZUNvZGUgaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZSk7CiAKLSAgICBpZiAodGhpcy5fc3VwcG9y
dHNEZWJ1Z2dpbmcpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5EaXNhYmxlZFN0YXRlRGlkQ2hh
bmdlLCB0aGlzLl9icmVha3BvaW50U3RhdHVzRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludC5FdmVudC5BdXRvQ29udGludWVEaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRTdGF0dXNE
aWRDaGFuZ2UsIHRoaXMpOwotICAgICAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LlJlc29sdmVkU3RhdGVEaWRD
aGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRTdGF0dXNEaWRDaGFuZ2UsIHRoaXMpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LkV2ZW50LkxvY2F0aW9uRGlkQ2hhbmdlLCB0aGlzLl91cGRhdGVCcmVha3BvaW50TG9j
YXRpb24sIHRoaXMpOworICAgICAgICBzdXBlcigpOwogCi0gICAgICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5h
Z2VyLkV2ZW50LkJyZWFrcG9pbnRzRW5hYmxlZERpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludHNF
bmFibGVkRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFu
YWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQu
QnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50UmVtb3ZlZCwgdGhpcy5fYnJlYWtwb2lu
dFJlbW92ZWQsIHRoaXMpOwotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5BY3RpdmVD
YWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX2FjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSwgdGhpcyk7
CisgICAgICAgIHRoaXMuZGVsZWdhdGUgPSB0aGlzOwogCi0gICAgICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5h
Z2VyLkV2ZW50LlBhdXNlZCwgdGhpcy5fZGVidWdnZXJEaWRQYXVzZSwgdGhpcyk7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlJlc3VtZWQsIHRoaXMuX2RlYnVnZ2VyRGlkUmVzdW1l
LCB0aGlzKTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWN0aXZl
Q2FsbEZyYW1lKQotICAgICAgICAgICAgdGhpcy5fZGVidWdnZXJEaWRQYXVzZSgpOworICAgICAg
ICB0aGlzLl9zb3VyY2VDb2RlID0gc291cmNlQ29kZTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dE1hcCA9IHt9OworICAgICAgICB0aGlzLl9pc3N1ZXNMaW5lTnVtYmVyTWFwID0gbmV3IE1hcDsK
KyAgICAgICAgdGhpcy5fd2lkZ2V0TWFwID0gbmV3IE1hcDsKKyAgICAgICAgdGhpcy5fY29udGVu
dFBvcHVsYXRlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9pbnZhbGlkTGluZU51bWJlcnMgPSB7
MDogdHJ1ZX07CisgICAgICAgIHRoaXMuX2lnbm9yZUNvbnRlbnREaWRDaGFuZ2UgPSAwOwogCi0g
ICAgICAgIHRoaXMuX2FjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSgpOwotICAgIH0KKyAgICAgICAg
dGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlciA9IG51bGw7CisgICAgICAgIHRoaXMuX3R5cGVU
b2tlbkFubm90YXRvciA9IG51bGw7CisgICAgICAgIHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0b3Ig
PSBudWxsOwogCi0gICAgV2ViSW5zcGVjdG9yLmlzc3VlTWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIuRXZlbnQuSXNzdWVXYXNBZGRlZCwgdGhpcy5faXNz
dWVXYXNBZGRlZCwgdGhpcyk7CisgICAgICAgIHRoaXMuX2lzUHJvYmFibHlNaW5pZmllZCA9IGZh
bHNlOwogCi0gICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
U291cmNlTWFwUmVzb3VyY2UgfHwgdGhpcy5fc291cmNlQ29kZS5zb3VyY2VNYXBzLmxlbmd0aCA+
IDApCi0gICAgICAgIFdlYkluc3BlY3Rvci5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLk5vdGlmaWNhdGlvbi5HbG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UsIHRo
aXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUsIHRoaXMpOwotICAgIGVsc2UK
LSAgICAgICAgdGhpcy5fc291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1hcEFkZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNlTWFw
QWRkZWQsIHRoaXMpOworICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHRoaXMganVzdCBqdW1w
cyBiZXR3ZWVuIHJlc291cmNlcyBhbmQgcmVsYXRlZCBzb3VyY2UgbWFwIHJlc291cmNlcy4gSXQg
ZG9lc24ndCAianVtcCB0byBzeW1ib2wiIHlldC4KKyAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwogCi0gICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVu
dCgpLnRoZW4odGhpcy5fY29udGVudEF2YWlsYWJsZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhp
cy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoInNvdXJjZS1jb2RlIik7CiAKLSAgICAvLyBGSVhNRTog
Q21kK0wgc2hvcmN1dCBkb2Vzbid0IGFjdHVhbGx5IHdvcmsuCi0gICAgbmV3IFdlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVy
LkNvbW1hbmQsICJMIiwgdGhpcy5zaG93R29Ub0xpbmVEaWFsb2cuYmluZCh0aGlzKSwgdGhpcy5l
bGVtZW50KTsKLSAgICBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29udHJvbCwgIkciLCB0aGlzLnNob3dHb1Rv
TGluZURpYWxvZy5iaW5kKHRoaXMpLCB0aGlzLmVsZW1lbnQpOwotfTsKKyAgICAgICAgaWYgKHRo
aXMuX3N1cHBvcnRzRGVidWdnaW5nKSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkRpc2Fi
bGVkU3RhdGVEaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRTdGF0dXNEaWRDaGFuZ2UsIHRoaXMp
OworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BdXRvQ29udGludWVEaWRDaGFuZ2UsIHRoaXMu
X2JyZWFrcG9pbnRTdGF0dXNEaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5F
dmVudC5SZXNvbHZlZFN0YXRlRGlkQ2hhbmdlLCB0aGlzLl9icmVha3BvaW50U3RhdHVzRGlkQ2hh
bmdlLCB0aGlzKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuTG9jYXRpb25EaWRDaGFuZ2Us
IHRoaXMuX3VwZGF0ZUJyZWFrcG9pbnRMb2NhdGlvbiwgdGhpcyk7CisKKyAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRzRW5hYmxlZERpZENoYW5nZSwgdGhpcy5f
YnJlYWtwb2ludHNFbmFibGVkRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0
aGlzKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRSZW1v
dmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTWFuYWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX2FjdGl2ZUNh
bGxGcmFtZURpZENoYW5nZSwgdGhpcyk7CisKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2Vy
LkV2ZW50LlBhdXNlZCwgdGhpcy5fZGVidWdnZXJEaWRQYXVzZSwgdGhpcyk7CisgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5SZXN1bWVkLCB0aGlzLl9kZWJ1Z2dlckRpZFJlc3Vt
ZSwgdGhpcyk7CisgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5h
Y3RpdmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgdGhpcy5fZGVidWdnZXJEaWRQYXVzZSgp
OworCisgICAgICAgICAgICB0aGlzLl9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UoKTsKKyAgICAg
ICAgfQogCi0vLyBGSVhNRTogTW92ZSB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3Mg
YW5kIHdlIGNhbiByZW1vdmUgdGhpcy4KLVdlYkluc3BlY3Rvci5PYmplY3QuZGVwcmVjYXRlZEFk
ZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvcik7
CisgICAgICAgIFdlYkluc3BlY3Rvci5pc3N1ZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuSXNzdWVNYW5hZ2VyLkV2ZW50Lklzc3VlV2FzQWRkZWQsIHRoaXMuX2lzc3VlV2Fz
QWRkZWQsIHRoaXMpOwogCi1XZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuU3R5bGVD
bGFzc05hbWUgPSAic291cmNlLWNvZGUiOwotV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLkxpbmVFcnJvclN0eWxlQ2xhc3NOYW1lID0gImVycm9yIjsKLVdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5MaW5lV2FybmluZ1N0eWxlQ2xhc3NOYW1lID0gIndhcm5pbmciOwot
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZXJEZWJ1Z2dlckNvbnRlbnRT
dHlsZUNsYXNzTmFtZSA9ICJkZWJ1Z2dlci1wb3BvdmVyLWNvbnRlbnQiOwotV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLkhvdmVyZWRFeHByZXNzaW9uSGlnaGxpZ2h0U3R5bGVDbGFz
c05hbWUgPSAiaG92ZXJlZC1leHByZXNzaW9uLWhpZ2hsaWdodCI7Ci1XZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01vdXNlT3ZlclRva2VuVG9NYWtlSG92ZXJlZFRv
a2VuID0gNTAwOwotV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9N
b3VzZU91dE9mSG92ZXJlZFRva2VuVG9SZWxlYXNlID0gMTAwMDsKLVdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5EdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVyU2Nyb2xsaW5n
ID0gMTAwOwotV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkF1dG9Gb3JtYXRNaW5p
bXVtTGluZUxlbmd0aCA9IDUwMDsKLVdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5X
aWRnZXRDb250YWluc011bHRpcGxlSXNzdWVzU3ltYm9sID0gU3ltYm9sKCJzb3VyY2UtY29kZS13
aWRnZXQtY29udGFpbnMtbXVsdGlwbGUtaXNzdWVzIik7CisgICAgICAgIGlmICh0aGlzLl9zb3Vy
Y2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlIHx8IHRoaXMu
X3NvdXJjZUNvZGUuc291cmNlTWFwcy5sZW5ndGggPiAwKQorICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLm5vdGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTm90aWZpY2F0
aW9uLkdsb2JhbE1vZGlmaWVyS2V5c0RpZENoYW5nZSwgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXJTdGF0ZSwgdGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMu
X3NvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5FdmVu
dC5Tb3VyY2VNYXBBZGRlZCwgdGhpcy5fc291cmNlQ29kZVNvdXJjZU1hcEFkZGVkLCB0aGlzKTsK
IAotV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkV2ZW50ID0gewotICAgIENvbnRl
bnRXaWxsUG9wdWxhdGU6ICJzb3VyY2UtY29kZS10ZXh0LWVkaXRvci1jb250ZW50LXdpbGwtcG9w
dWxhdGUiLAotICAgIENvbnRlbnREaWRQb3B1bGF0ZTogInNvdXJjZS1jb2RlLXRleHQtZWRpdG9y
LWNvbnRlbnQtZGlkLXBvcHVsYXRlIgotfTsKKyAgICAgICAgc291cmNlQ29kZS5yZXF1ZXN0Q29u
dGVudCgpLnRoZW4odGhpcy5fY29udGVudEF2YWlsYWJsZS5iaW5kKHRoaXMpKTsKIAotV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3Rv
cjogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLAorICAgICAgICAvLyBGSVhNRTog
Q21kK0wgc2hvcmN1dCBkb2Vzbid0IGFjdHVhbGx5IHdvcmsuCisgICAgICAgIG5ldyBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2Rp
Zmllci5Db21tYW5kLCAiTCIsIHRoaXMuc2hvd0dvVG9MaW5lRGlhbG9nLmJpbmQodGhpcyksIHRo
aXMuZWxlbWVudCk7CisgICAgICAgIG5ldyBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db250cm9sLCAiRyIsIHRoaXMu
c2hvd0dvVG9MaW5lRGlhbG9nLmJpbmQodGhpcyksIHRoaXMuZWxlbWVudCk7CisgICAgfQogCiAg
ICAgLy8gUHVibGljCiAKICAgICBnZXQgc291cmNlQ29kZSgpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fc291cmNlQ29kZTsKLSAgICB9LAorICAgIH0KIAotICAgIHNob3duOiBmdW5jdGlv
bigpCisgICAgc2hvd24oKQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iu
cHJvdG90eXBlLnNob3duLmNhbGwodGhpcyk7CiAKQEAgLTEyNSw5ICsxMDcsOSBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYg
KHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciB8fCB0aGlzLl9iYXNpY0Jsb2NrQW5ub3RhdG9yKQog
ICAgICAgICAgICAgICAgIHRoaXMuX3NldFR5cGVUb2tlbkFubm90YXRvckVuYWJsZWRTdGF0ZShm
YWxzZSk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIGhpZGRlbjogZnVuY3Rpb24o
KQorICAgIGhpZGRlbigpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5w
cm90b3R5cGUuaGlkZGVuLmNhbGwodGhpcyk7CiAKQEAgLTE0MSw5ICsxMjMsOSBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CiAgICAgICAgIGlmICh0aGlzLl9iYXNpY0Js
b2NrQW5ub3RhdG9yKQogICAgICAgICAgICAgdGhpcy5fYmFzaWNCbG9ja0Fubm90YXRvci5wYXVz
ZSgpOwotICAgIH0sCisgICAgfQogCi0gICAgY2xvc2U6IGZ1bmN0aW9uKCkKKyAgICBjbG9zZSgp
CiAgICAgewogICAgICAgICBpZiAodGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpIHsKICAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQuRXZlbnQuRGlzYWJsZWRTdGF0ZURpZENoYW5nZSwgdGhpcy5fYnJlYWtw
b2ludFN0YXR1c0RpZENoYW5nZSwgdGhpcyk7CkBAIC0xNjYsOSArMTQ4LDkgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBXZWJJbnNw
ZWN0b3Iubm90aWZpY2F0aW9ucy5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Ob3Rp
ZmljYXRpb24uR2xvYmFsTW9kaWZpZXJLZXlzRGlkQ2hhbmdlLCB0aGlzLl91cGRhdGVUb2tlblRy
YWNraW5nQ29udHJvbGxlclN0YXRlLCB0aGlzKTsKICAgICAgICAgdGhpcy5fc291cmNlQ29kZS5y
ZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1h
cEFkZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOwotICAgIH0sCisg
ICAgfQogCi0gICAgY2FuQmVGb3JtYXR0ZWQ6IGZ1bmN0aW9uKCkKKyAgICBjYW5CZUZvcm1hdHRl
ZCgpCiAgICAgewogICAgICAgICAvLyBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgc291cmNlIG1h
cCByZXNvdXJjZXMgYXJlIGZvcm1hdHRlZCBob3cgdGhlIGF1dGhvciB3YW50cyBpdC4KICAgICAg
ICAgLy8gV2UgY291bGQgYWxsb3cgc291cmNlIG1hcCByZXNvdXJjZXMgdG8gYmUgZm9ybWF0dGVk
LCB3ZSB3b3VsZCB0aGVuIG5lZWQgdG8gbWFrZQpAQCAtMTc4LDE0ICsxNjAsMTQgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJv
dG90eXBlLmNhbkJlRm9ybWF0dGVkLmNhbGwodGhpcyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBj
YW5TaG93VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgY2FuU2hvd1R5cGVBbm5vdGF0
aW9ucygpCiAgICAgewogICAgICAgICByZXR1cm4gISF0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3I7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjdXN0b21QZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVy
eSkKKyAgICBjdXN0b21QZXJmb3JtU2VhcmNoKHF1ZXJ5KQogICAgIHsKICAgICAgICAgZnVuY3Rp
b24gc2VhcmNoUmVzdWx0Q2FsbGJhY2soZXJyb3IsIG1hdGNoZXMpCiAgICAgICAgIHsKQEAgLTIz
Myw5ICsyMTUsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
ID0gewogICAgICAgICBlbHNlIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLlNjcmlwdCkKICAgICAgICAgICAgIERlYnVnZ2VyQWdlbnQuc2VhcmNoSW5Db250ZW50
KHRoaXMuX3NvdXJjZUNvZGUuaWQsIHF1ZXJ5LCBmYWxzZSwgZmFsc2UsIHNlYXJjaFJlc3VsdENh
bGxiYWNrLmJpbmQodGhpcykpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAorICAgIH0K
IAotICAgIHNob3dHb1RvTGluZURpYWxvZzogZnVuY3Rpb24oKQorICAgIHNob3dHb1RvTGluZURp
YWxvZygpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2dvVG9MaW5lRGlhbG9nKSB7CiAgICAg
ICAgICAgICB0aGlzLl9nb1RvTGluZURpYWxvZyA9IG5ldyBXZWJJbnNwZWN0b3IuR29Ub0xpbmVE
aWFsb2c7CkBAIC0yNDMsMjggKzIyNSwyOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fZ29Ub0xpbmVE
aWFsb2cucHJlc2VudCh0aGlzLmVsZW1lbnQpOwotICAgIH0sCisgICAgfQogCi0gICAgaXNHb1Rv
TGluZURpYWxvZ1ZhbHVlVmFsaWQ6IGZ1bmN0aW9uKGdvVG9MaW5lRGlhbG9nLCBsaW5lTnVtYmVy
KQorICAgIGlzR29Ub0xpbmVEaWFsb2dWYWx1ZVZhbGlkKGdvVG9MaW5lRGlhbG9nLCBsaW5lTnVt
YmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuICFpc05hTihsaW5lTnVtYmVyKSAmJiBsaW5lTnVt
YmVyID4gMCAmJiBsaW5lTnVtYmVyIDw9IHRoaXMubGluZUNvdW50OwotICAgIH0sCisgICAgfQog
Ci0gICAgZ29Ub0xpbmVEaWFsb2dWYWx1ZVdhc1ZhbGlkYXRlZDogZnVuY3Rpb24oZ29Ub0xpbmVE
aWFsb2csIGxpbmVOdW1iZXIpCisgICAgZ29Ub0xpbmVEaWFsb2dWYWx1ZVdhc1ZhbGlkYXRlZChn
b1RvTGluZURpYWxvZywgbGluZU51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBwb3NpdGlvbiA9
IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKGxpbmVOdW1iZXIgLSAxLCAwKTsK
ICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UobGluZU51bWJl
ciAtIDEsIDAsIGxpbmVOdW1iZXIsIDApOwogICAgICAgICB0aGlzLnJldmVhbFBvc2l0aW9uKHBv
c2l0aW9uLCByYW5nZSwgZmFsc2UsIHRydWUpOwotICAgIH0sCisgICAgfQogCi0gICAgZ29Ub0xp
bmVEaWFsb2dXYXNEaXNtaXNzZWQ6IGZ1bmN0aW9uKCkKKyAgICBnb1RvTGluZURpYWxvZ1dhc0Rp
c21pc3NlZCgpCiAgICAgewogICAgICAgICB0aGlzLmZvY3VzKCk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBjb250ZW50RGlkQ2hhbmdlOiBmdW5jdGlvbihyZXBsYWNlZFJhbmdlcywgbmV3UmFuZ2Vz
KQorICAgIGNvbnRlbnREaWRDaGFuZ2UocmVwbGFjZWRSYW5nZXMsIG5ld1JhbmdlcykKICAgICB7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5jb250ZW50RGlkQ2hh
bmdlLmNhbGwodGhpcywgcmVwbGFjZWRSYW5nZXMsIG5ld1Jhbmdlcyk7CisgICAgICAgIHN1cGVy
LmNvbnRlbnREaWRDaGFuZ2UocmVwbGFjZWRSYW5nZXMsIG5ld1Jhbmdlcyk7CiAKICAgICAgICAg
aWYgKHRoaXMuX2lnbm9yZUNvbnRlbnREaWRDaGFuZ2UgPiAwKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjc3LDkgKzI1OSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBudWxs
OwogICAgICAgICAgICAgdGhpcy5fYmFzaWNCbG9ja0Fubm90YXRvciA9IG51bGw7CiAgICAgICAg
IH0KLSAgICB9LAorICAgIH0KIAotICAgIHRvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24o
KQorICAgIHRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMu
X3R5cGVUb2tlbkFubm90YXRvcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5MCw5
ICsyNzIsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0g
ewogCiAgICAgICAgIHRoaXMuX3NldFR5cGVUb2tlbkFubm90YXRvckVuYWJsZWRTdGF0ZShuZXdB
Y3RpdmF0ZWRTdGF0ZSk7CiAgICAgICAgIHJldHVybiBuZXdBY3RpdmF0ZWRTdGF0ZTsKLSAgICB9
LAorICAgIH0KIAotICAgIHNob3dQb3BvdmVyRm9yVHlwZXM6IGZ1bmN0aW9uKHR5cGVzLCBib3Vu
ZHMsIHRpdGxlKQorICAgIHNob3dQb3BvdmVyRm9yVHlwZXModHlwZXMsIGJvdW5kcywgdGl0bGUp
CiAgICAgewogICAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwogICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICJvYmplY3QgZXhwYW5kYWJsZSI7CkBA
IC0zMDgsMTEgKzI5MCwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90eXBlID0gewogICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7
CiAKICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCwgYm91bmRzKTsKLSAgICB9LAor
ICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAogCi0gICAgcHJldHR5UHJpbnQ6IGZ1bmN0aW9uKHBy
ZXR0eSkKKyAgICBwcmV0dHlQcmludChwcmV0dHkpCiAgICAgewogICAgICAgICAvLyBUaGUgYW5u
b3RhdG9ycyBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIHByZXR0eSBwcmludGluZyB0YWtlcyBwbGFj
ZSBhbmQgcmVzdW1lZCAKICAgICAgICAgLy8gYWZ0ZXIgc28gdGhhdCB0aGV5IGNsZWFyIHRoZWly
IGFubm90YXRpb25zIGluIGEga25vd24gc3RhdGUgYW5kIGluc2VydCBuZXcgYW5ub3RhdGlvbnMg
CkBAIC0zMjIsNyArMzA0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHNob3VsZFJlc3VtZVR5cGVUb2tlbkFubm90YXRvciB8
fCBzaG91bGRSZXN1bWVCYXNpY0Jsb2NrQW5ub3RhdG9yKQogICAgICAgICAgICAgdGhpcy5fc2V0
VHlwZVRva2VuQW5ub3RhdG9yRW5hYmxlZFN0YXRlKGZhbHNlKTsKIAotICAgICAgICBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucHJldHR5UHJpbnQuY2FsbCh0aGlzLCBwcmV0dHkp
OworICAgICAgICBzdXBlci5wcmV0dHlQcmludChwcmV0dHkpOwogCiAgICAgICAgIGlmIChwcmV0
dHkgfHwgIXRoaXMuX2lzUHJvYmFibHlNaW5pZmllZCkgewogICAgICAgICAgICAgaWYgKHNob3Vs
ZFJlc3VtZVR5cGVUb2tlbkFubm90YXRvciB8fCBzaG91bGRSZXN1bWVCYXNpY0Jsb2NrQW5ub3Rh
dG9yKQpAQCAtMzMyLDQ3ICszMTQsNDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IgfHwgdGhpcy5fYmFzaWNCbG9ja0Fubm90YXRvcikKICAgICAgICAgICAgICAgICB0aGlzLl9z
ZXRUeXBlVG9rZW5Bbm5vdGF0b3JFbmFibGVkU3RhdGUoZmFsc2UpOwogICAgICAgICB9Ci0gICAg
fSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfdW5mb3JtYXR0ZWRMaW5lSW5mb0Zv
ckVkaXRvckxpbmVJbmZvOiBmdW5jdGlvbihsaW5lSW5mbykKKyAgICBfdW5mb3JtYXR0ZWRMaW5l
SW5mb0ZvckVkaXRvckxpbmVJbmZvKGxpbmVJbmZvKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMu
Zm9ybWF0dGVyU291cmNlTWFwKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyU291
cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwobGluZUluZm8ubGluZU51bWJlciwgbGluZUluZm8u
Y29sdW1uTnVtYmVyKTsKICAgICAgICAgcmV0dXJuIGxpbmVJbmZvOwotICAgIH0sCisgICAgfQog
Ci0gICAgX3NvdXJjZUNvZGVMb2NhdGlvbkZvckVkaXRvclBvc2l0aW9uOiBmdW5jdGlvbihwb3Np
dGlvbikKKyAgICBfc291cmNlQ29kZUxvY2F0aW9uRm9yRWRpdG9yUG9zaXRpb24ocG9zaXRpb24p
CiAgICAgewogICAgICAgICB2YXIgbGluZUluZm8gPSB7bGluZU51bWJlcjogcG9zaXRpb24ubGlu
ZSwgY29sdW1uTnVtYmVyOiBwb3NpdGlvbi5jaH07CiAgICAgICAgIHZhciB1bmZvcm1hdHRlZExp
bmVJbmZvID0gdGhpcy5fdW5mb3JtYXR0ZWRMaW5lSW5mb0ZvckVkaXRvckxpbmVJbmZvKGxpbmVJ
bmZvKTsKICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlQ29kZS5jcmVhdGVTb3VyY2VDb2RlTG9j
YXRpb24odW5mb3JtYXR0ZWRMaW5lSW5mby5saW5lTnVtYmVyLCB1bmZvcm1hdHRlZExpbmVJbmZv
LmNvbHVtbk51bWJlcik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZWRpdG9yTGluZUluZm9Gb3JT
b3VyY2VDb2RlTG9jYXRpb246IGZ1bmN0aW9uKHNvdXJjZUNvZGVMb2NhdGlvbikKKyAgICBfZWRp
dG9yTGluZUluZm9Gb3JTb3VyY2VDb2RlTG9jYXRpb24oc291cmNlQ29kZUxvY2F0aW9uKQogICAg
IHsKICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
U291cmNlTWFwUmVzb3VyY2UpCiAgICAgICAgICAgICByZXR1cm4ge2xpbmVOdW1iZXI6IHNvdXJj
ZUNvZGVMb2NhdGlvbi5kaXNwbGF5TGluZU51bWJlciwgY29sdW1uTnVtYmVyOiBzb3VyY2VDb2Rl
TG9jYXRpb24uZGlzcGxheUNvbHVtbk51bWJlcn07CiAgICAgICAgIHJldHVybiB7bGluZU51bWJl
cjogc291cmNlQ29kZUxvY2F0aW9uLmZvcm1hdHRlZExpbmVOdW1iZXIsIGNvbHVtbk51bWJlcjog
c291cmNlQ29kZUxvY2F0aW9uLmZvcm1hdHRlZENvbHVtbk51bWJlcn07Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfYnJlYWtwb2ludEZvckVkaXRvckxpbmVJbmZvOiBmdW5jdGlvbihsaW5lSW5mbykK
KyAgICBfYnJlYWtwb2ludEZvckVkaXRvckxpbmVJbmZvKGxpbmVJbmZvKQogICAgIHsKICAgICAg
ICAgaWYgKCF0aGlzLl9icmVha3BvaW50TWFwW2xpbmVJbmZvLmxpbmVOdW1iZXJdKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50TWFwW2xp
bmVJbmZvLmxpbmVOdW1iZXJdW2xpbmVJbmZvLmNvbHVtbk51bWJlcl07Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfYWRkQnJlYWtwb2ludFdpdGhFZGl0b3JMaW5lSW5mbzogZnVuY3Rpb24oYnJlYWtw
b2ludCwgbGluZUluZm8pCisgICAgX2FkZEJyZWFrcG9pbnRXaXRoRWRpdG9yTGluZUluZm8oYnJl
YWtwb2ludCwgbGluZUluZm8pCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRN
YXBbbGluZUluZm8ubGluZU51bWJlcl0pCiAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50TWFw
W2xpbmVJbmZvLmxpbmVOdW1iZXJdID0ge307CiAKICAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1h
cFtsaW5lSW5mby5saW5lTnVtYmVyXVtsaW5lSW5mby5jb2x1bW5OdW1iZXJdID0gYnJlYWtwb2lu
dDsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZW1vdmVCcmVha3BvaW50V2l0aEVkaXRvckxpbmVJ
bmZvOiBmdW5jdGlvbihicmVha3BvaW50LCBsaW5lSW5mbykKKyAgICBfcmVtb3ZlQnJlYWtwb2lu
dFdpdGhFZGl0b3JMaW5lSW5mbyhicmVha3BvaW50LCBsaW5lSW5mbykKICAgICB7CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgPT09IHRoaXMuX2JyZWFrcG9pbnRNYXBbbGluZUlu
Zm8ubGluZU51bWJlcl1bbGluZUluZm8uY29sdW1uTnVtYmVyXSk7CiAKQEAgLTM4MCw5ICszNjIs
OSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAg
ICAgICAgIGlmIChpc0VtcHR5T2JqZWN0KHRoaXMuX2JyZWFrcG9pbnRNYXBbbGluZUluZm8ubGlu
ZU51bWJlcl0pKQogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRNYXBbbGluZUlu
Zm8ubGluZU51bWJlcl07Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY29udGVudFdpbGxQb3B1bGF0
ZTogZnVuY3Rpb24oY29udGVudCkKKyAgICBfY29udGVudFdpbGxQb3B1bGF0ZShjb250ZW50KQog
ICAgIHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLkV2ZW50LkNvbnRlbnRXaWxsUG9wdWxhdGUpOwogCkBAIC00
MzEsOSArNDEzLDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgICAgICBsYXN0TmV3bGluZUluZGV4ID0gbmV4dE5ld2xpbmVJbmRl
eCArIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIF9j
b250ZW50RGlkUG9wdWxhdGU6IGZ1bmN0aW9uKCkKKyAgICBfY29udGVudERpZFBvcHVsYXRlKCkK
ICAgICB7CiAgICAgICAgIHRoaXMuX2NvbnRlbnRQb3B1bGF0ZWQgPSB0cnVlOwogCkBAIC00NDYs
OSArNDI4LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5fcmVpbnNlcnRBbGxJc3N1ZXMoKTsKIAogICAgICAgICB0aGlzLl91
cGRhdGVFZGl0YWJsZU1hcmtlcnMoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9wb3B1bGF0ZVdp
dGhDb250ZW50OiBmdW5jdGlvbihjb250ZW50KQorICAgIF9wb3B1bGF0ZVdpdGhDb250ZW50KGNv
bnRlbnQpCiAgICAgewogICAgICAgICBjb250ZW50ID0gY29udGVudCB8fCAiIjsKIApAQCAtNDY0
LDkgKzQ0Niw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9jb250ZW50RGlkUG9wdWxhdGUoKTsKLSAg
ICB9LAorICAgIH0KIAotICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJz
KQorICAgIF9jb250ZW50QXZhaWxhYmxlKHBhcmFtZXRlcnMpCiAgICAgewogICAgICAgICAvLyBS
ZXR1cm4gaWYgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZS4KICAgICAgICAgaWYgKHBhcmFtZXRl
cnMuZXJyb3IpCkBAIC00ODcsMjMgKzQ2OSwyMyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRl
eHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9pbnZhbGlkTGluZU51bWJlcnMg
PSB7fTsKIAogICAgICAgICB0aGlzLl9wb3B1bGF0ZVdpdGhDb250ZW50KGNvbnRlbnQpOwotICAg
IH0sCisgICAgfQogCi0gICAgX2JyZWFrcG9pbnRTdGF0dXNEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIF9icmVha3BvaW50U3RhdHVzRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAg
ICAgdGhpcy5fdXBkYXRlQnJlYWtwb2ludFN0YXR1cyhldmVudC50YXJnZXQpOwotICAgIH0sCisg
ICAgfQogCi0gICAgX2JyZWFrcG9pbnRzRW5hYmxlZERpZENoYW5nZTogZnVuY3Rpb24oKQorICAg
IF9icmVha3BvaW50c0VuYWJsZWREaWRDaGFuZ2UoKQogICAgIHsKICAgICAgICAgY29uc29sZS5h
c3NlcnQodGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpOwogCiAgICAgICAgIHZhciBicmVha3BvaW50
cyA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHNGb3JTb3VyY2VDb2Rl
KHRoaXMuX3NvdXJjZUNvZGUpOwogICAgICAgICBmb3IgKHZhciBicmVha3BvaW50IG9mIGJyZWFr
cG9pbnRzKQogICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnJlYWtwb2ludFN0YXR1cyhicmVha3Bv
aW50KTsKLSAgICB9LAorICAgIH0KIAotICAgIF91cGRhdGVCcmVha3BvaW50U3RhdHVzOiBmdW5j
dGlvbihicmVha3BvaW50KQorICAgIF91cGRhdGVCcmVha3BvaW50U3RhdHVzKGJyZWFrcG9pbnQp
CiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zdXBwb3J0c0RlYnVnZ2luZyk7
CiAKQEAgLTUxNSw5ICs0OTcsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBsaW5lSW5mbyA9IHRoaXMuX2VkaXRvckxpbmVJ
bmZvRm9yU291cmNlQ29kZUxvY2F0aW9uKGJyZWFrcG9pbnQuc291cmNlQ29kZUxvY2F0aW9uKTsK
ICAgICAgICAgdGhpcy5zZXRCcmVha3BvaW50SW5mb0ZvckxpbmVBbmRDb2x1bW4obGluZUluZm8u
bGluZU51bWJlciwgbGluZUluZm8uY29sdW1uTnVtYmVyLCB0aGlzLl9icmVha3BvaW50SW5mb0Zv
ckJyZWFrcG9pbnQoYnJlYWtwb2ludCkpOwotICAgIH0sCisgICAgfQogCi0gICAgX3VwZGF0ZUJy
ZWFrcG9pbnRMb2NhdGlvbjogZnVuY3Rpb24oZXZlbnQpCisgICAgX3VwZGF0ZUJyZWFrcG9pbnRM
b2NhdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3N1cHBv
cnRzRGVidWdnaW5nKTsKIApAQCAtNTYxLDkgKzU0Myw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtw
b2ludFdpdGhFZGl0b3JMaW5lSW5mbyhicmVha3BvaW50LCBvbGRMaW5lSW5mbyk7CiAgICAgICAg
IHRoaXMuX2FkZEJyZWFrcG9pbnRXaXRoRWRpdG9yTGluZUluZm8oYnJlYWtwb2ludCwgbmV3TGlu
ZUluZm8pOwotICAgIH0sCisgICAgfQogCi0gICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24o
ZXZlbnQpCisgICAgX2JyZWFrcG9pbnRBZGRlZChldmVudCkKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuX3N1cHBvcnRzRGVidWdnaW5nKTsKIApAQCAtNTgwLDkgKzU2Miw5IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHZhciBsaW5lSW5mbyA9IHRoaXMuX2VkaXRvckxpbmVJbmZvRm9yU291cmNlQ29kZUxvY2F0aW9u
KGJyZWFrcG9pbnQuc291cmNlQ29kZUxvY2F0aW9uKTsKICAgICAgICAgdGhpcy5fYWRkQnJlYWtw
b2ludFdpdGhFZGl0b3JMaW5lSW5mbyhicmVha3BvaW50LCBsaW5lSW5mbyk7CiAgICAgICAgIHRo
aXMuc2V0QnJlYWtwb2ludEluZm9Gb3JMaW5lQW5kQ29sdW1uKGxpbmVJbmZvLmxpbmVOdW1iZXIs
IGxpbmVJbmZvLmNvbHVtbk51bWJlciwgdGhpcy5fYnJlYWtwb2ludEluZm9Gb3JCcmVha3BvaW50
KGJyZWFrcG9pbnQpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9icmVha3BvaW50UmVtb3ZlZDog
ZnVuY3Rpb24oZXZlbnQpCisgICAgX2JyZWFrcG9pbnRSZW1vdmVkKGV2ZW50KQogICAgIHsKICAg
ICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpOwogCkBAIC01OTks
OSArNTgxLDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdmFyIGxpbmVJbmZvID0gdGhpcy5fZWRpdG9yTGluZUluZm9Gb3JTb3VyY2VD
b2RlTG9jYXRpb24oYnJlYWtwb2ludC5zb3VyY2VDb2RlTG9jYXRpb24pOwogICAgICAgICB0aGlz
Ll9yZW1vdmVCcmVha3BvaW50V2l0aEVkaXRvckxpbmVJbmZvKGJyZWFrcG9pbnQsIGxpbmVJbmZv
KTsKICAgICAgICAgdGhpcy5zZXRCcmVha3BvaW50SW5mb0ZvckxpbmVBbmRDb2x1bW4obGluZUlu
Zm8ubGluZU51bWJlciwgbGluZUluZm8uY29sdW1uTnVtYmVyLCBudWxsKTsKLSAgICB9LAorICAg
IH0KIAotICAgIF9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2U6IGZ1bmN0aW9uKCkKKyAgICBfYWN0
aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRo
aXMuX3N1cHBvcnRzRGVidWdnaW5nKTsKIApAQCAtNjQyLDkgKzYyNCw5IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9w
b3B1bGF0ZVdpdGhJbmxpbmVTY3JpcHRDb250ZW50KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHRoaXMuX3BvcHVsYXRlV2l0aFNjcmlwdENvbnRlbnQoKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIF9hY3RpdmVDYWxsRnJhbWVTb3VyY2VDb2RlTG9jYXRpb25DaGFuZ2VkOiBmdW5jdGlvbihl
dmVudCkKKyAgICBfYWN0aXZlQ2FsbEZyYW1lU291cmNlQ29kZUxvY2F0aW9uQ2hhbmdlZChldmVu
dCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFpc05hTih0aGlzLmV4ZWN1dGlvbkxp
bmVOdW1iZXIpKTsKICAgICAgICAgaWYgKGlzTmFOKHRoaXMuZXhlY3V0aW9uTGluZU51bWJlcikp
CkBAIC02NTYsOSArNjM4LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGxpbmVJbmZvID0gdGhpcy5fZWRpdG9yTGluZUluZm9G
b3JTb3VyY2VDb2RlTG9jYXRpb24odGhpcy5fYWN0aXZlQ2FsbEZyYW1lU291cmNlQ29kZUxvY2F0
aW9uKTsKICAgICAgICAgdGhpcy5leGVjdXRpb25MaW5lTnVtYmVyID0gbGluZUluZm8ubGluZU51
bWJlcjsKICAgICAgICAgdGhpcy5leGVjdXRpb25Db2x1bW5OdW1iZXIgPSBsaW5lSW5mby5jb2x1
bW5OdW1iZXI7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcG9wdWxhdGVXaXRoSW5saW5lU2NyaXB0
Q29udGVudDogZnVuY3Rpb24oKQorICAgIF9wb3B1bGF0ZVdpdGhJbmxpbmVTY3JpcHRDb250ZW50
KCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOwogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhp
cy5fZnVsbENvbnRlbnRQb3B1bGF0ZWQpOwpAQCAtNjg5LDggKzY3MSw4IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAodGhp
cy5fZnVsbENvbnRlbnRQb3B1bGF0ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgICAgICBjb25zdCBzY3JpcHRPcGVuVGFnID0gIjxzY3JpcHQ+IjsKLSAgICAgICAgICAgIGNv
bnN0IHNjcmlwdENsb3NlVGFnID0gIjwvc2NyaXB0PiI7CisgICAgICAgICAgICB2YXIgc2NyaXB0
T3BlblRhZyA9ICI8c2NyaXB0PiI7CisgICAgICAgICAgICB2YXIgc2NyaXB0Q2xvc2VUYWcgPSAi
PC9zY3JpcHQ+IjsKIAogICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSAiIjsKICAgICAgICAgICAg
IHZhciBsaW5lTnVtYmVyID0gMDsKQEAgLTcyOCw5ICs3MTAsOSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB2YXIgYm91bmRTY3JpcHRD
b250ZW50QXZhaWxhYmxlID0gc2NyaXB0Q29udGVudEF2YWlsYWJsZS5iaW5kKHRoaXMpOwogICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpCiAgICAgICAgICAg
ICBzY3JpcHRzW2ldLnJlcXVlc3RDb250ZW50KCkudGhlbihib3VuZFNjcmlwdENvbnRlbnRBdmFp
bGFibGUpOwotICAgIH0sCisgICAgfQogCi0gICAgX3BvcHVsYXRlV2l0aFNjcmlwdENvbnRlbnQ6
IGZ1bmN0aW9uKCkKKyAgICBfcG9wdWxhdGVXaXRoU2NyaXB0Q29udGVudCgpCiAgICAgewogICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVj
dG9yLlJlc291cmNlKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX2Z1bGxDb250ZW50
UG9wdWxhdGVkKTsKQEAgLTc2Myw5ICs3NDUsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRl
eHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZXF1ZXN0aW5nU2NyaXB0Q29u
dGVudCA9IHRydWU7CiAKICAgICAgICAgc2NyaXB0c1swXS5yZXF1ZXN0Q29udGVudCgpLnRoZW4o
c2NyaXB0Q29udGVudEF2YWlsYWJsZS5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9tYXRjaGVzU291cmNlQ29kZUxvY2F0aW9uOiBmdW5jdGlvbihzb3VyY2VDb2RlTG9jYXRpb24p
CisgICAgX21hdGNoZXNTb3VyY2VDb2RlTG9jYXRpb24oc291cmNlQ29kZUxvY2F0aW9uKQogICAg
IHsKICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
U291cmNlTWFwUmVzb3VyY2UpCiAgICAgICAgICAgICByZXR1cm4gc291cmNlQ29kZUxvY2F0aW9u
LmRpc3BsYXlTb3VyY2VDb2RlID09PSB0aGlzLl9zb3VyY2VDb2RlOwpAQCAtNzc0LDkgKzc1Niw5
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkK
ICAgICAgICAgICAgIHJldHVybiBzb3VyY2VDb2RlTG9jYXRpb24uc291cmNlQ29kZSA9PT0gdGhp
cy5fc291cmNlQ29kZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCisgICAgfQogCi0g
ICAgX21hdGNoZXNCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9tYXRjaGVz
QnJlYWtwb2ludChicmVha3BvaW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhp
cy5fc3VwcG9ydHNEZWJ1Z2dpbmcpOwogICAgICAgICBpZiAodGhpcy5fc291cmNlQ29kZSBpbnN0
YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSkKQEAgLTc4Niw5ICs3NjgsOSBA
QCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICBpZiAodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5TY3JpcHQpCiAg
ICAgICAgICAgICByZXR1cm4gYnJlYWtwb2ludC51cmwgPT09IHRoaXMuX3NvdXJjZUNvZGUudXJs
IHx8IGJyZWFrcG9pbnQuc2NyaXB0SWRlbnRpZmllciA9PT0gdGhpcy5fc291cmNlQ29kZS5pZDsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCisgICAgfQogCi0gICAgX21hdGNoZXNJc3N1
ZTogZnVuY3Rpb24oaXNzdWUpCisgICAgX21hdGNoZXNJc3N1ZShpc3N1ZSkKICAgICB7CiAgICAg
ICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlc291cmNl
KQogICAgICAgICAgICAgcmV0dXJuIGlzc3VlLnVybCA9PT0gdGhpcy5fc291cmNlQ29kZS51cmw7
CkBAIC03OTYsMTggKzc3OCwxOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5TY3JpcHQpCiAgICAgICAgICAgICByZXR1cm4gaXNzdWUudXJsID09PSB0aGlz
Ll9zb3VyY2VDb2RlLnVybDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCisgICAgfQog
Ci0gICAgX2lzc3VlV2FzQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9pc3N1ZVdhc0FkZGVk
KGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGlzc3VlID0gZXZlbnQuZGF0YS5pc3N1ZTsKICAg
ICAgICAgaWYgKCF0aGlzLl9tYXRjaGVzSXNzdWUoaXNzdWUpKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIHRoaXMuX2FkZElzc3VlKGlzc3VlKTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9hZGRJc3N1ZTogZnVuY3Rpb24oaXNzdWUpCisgICAgX2FkZElzc3VlKGlzc3VlKQogICAgIHsK
ICAgICAgICAgLy8gRklYTUU6IElzc3VlIHNob3VsZCBoYXZlIGEgU291cmNlQ29kZUxvY2F0aW9u
LgogICAgICAgICB2YXIgc291cmNlQ29kZUxvY2F0aW9uID0gdGhpcy5fc291cmNlQ29kZS5jcmVh
dGVTb3VyY2VDb2RlTG9jYXRpb24oaXNzdWUubGluZU51bWJlciwgaXNzdWUuY29sdW1uTnVtYmVy
KTsKQEAgLTg0Myw5ICs4MjUsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogCiAgICAgICAgICAgICB0aGlzLl91cGRhdGVJc3N1ZVdpZGdldEZvcklz
c3Vlcyh3aWRnZXQsIGxpbmVOdW1iZXJJc3N1ZXMpOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfaXNzdWVXaWRnZXRGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIF9p
c3N1ZVdpZGdldEZvckxpbmUobGluZU51bWJlcikKICAgICB7CiAgICAgICAgIHZhciB3aWRnZXQg
PSB0aGlzLl93aWRnZXRNYXAuZ2V0KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAod2lkZ2V0KQpA
QCAtODYzLDE4ICs4NDUsMTggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fd2lkZ2V0TWFwLnNldChsaW5lTnVtYmVyLCB3aWRn
ZXQpOwogCiAgICAgICAgIHJldHVybiB3aWRnZXQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaWNv
bkNsYXNzTmFtZUZvcklzc3VlTGV2ZWw6IGZ1bmN0aW9uKGxldmVsKQorICAgIF9pY29uQ2xhc3NO
YW1lRm9ySXNzdWVMZXZlbChsZXZlbCkKICAgICB7CiAgICAgICAgIGlmIChsZXZlbCA9PT0gV2Vi
SW5zcGVjdG9yLklzc3VlTWVzc2FnZS5MZXZlbC5XYXJuaW5nKQogICAgICAgICAgICAgcmV0dXJu
ICJpY29uLXdhcm5pbmciOwogCiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGxldmVsID09PSBXZWJJ
bnNwZWN0b3IuSXNzdWVNZXNzYWdlLkxldmVsLkVycm9yKTsKICAgICAgICAgcmV0dXJuICJpY29u
LWVycm9yIjsKLSAgICB9LAorICAgIH0KIAotICAgIF91cGRhdGVJc3N1ZVdpZGdldEZvcklzc3Vl
czogZnVuY3Rpb24od2lkZ2V0LCBpc3N1ZXMpCisgICAgX3VwZGF0ZUlzc3VlV2lkZ2V0Rm9ySXNz
dWVzKHdpZGdldCwgaXNzdWVzKQogICAgIHsKICAgICAgICAgdmFyIHdpZGdldEVsZW1lbnQgPSB3
aWRnZXQud2lkZ2V0RWxlbWVudDsKICAgICAgICAgd2lkZ2V0RWxlbWVudC5yZW1vdmVDaGlsZHJl
bigpOwpAQCAtOTMwLDkgKzkxMiw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB3aWRnZXQudXBkYXRlKCk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfaXNXaWRnZXRUb2dnbGVhYmxlOiBmdW5jdGlvbih3aWRnZXQp
CisgICAgX2lzV2lkZ2V0VG9nZ2xlYWJsZSh3aWRnZXQpCiAgICAgewogICAgICAgICBpZiAod2lk
Z2V0W1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5XaWRnZXRDb250YWluc011bHRp
cGxlSXNzdWVzU3ltYm9sXSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTQ1LDkgKzky
Nyw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVXaWRnZXRDbGljazogZnVuY3Rpb24od2lkZ2V0
LCBsaW5lTnVtYmVyLCBldmVudCkKKyAgICBfaGFuZGxlV2lkZ2V0Q2xpY2sod2lkZ2V0LCBsaW5l
TnVtYmVyLCBldmVudCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faXNXaWRnZXRUb2dnbGVh
YmxlKHdpZGdldCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC05NTYsMTIgKzkzOCwxMiBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgICAg
IHZhciBsaW5lTnVtYmVySXNzdWVzID0gdGhpcy5faXNzdWVzTGluZU51bWJlck1hcC5nZXQobGlu
ZU51bWJlcik7CiAgICAgICAgIHRoaXMuX3VwZGF0ZUlzc3VlV2lkZ2V0Rm9ySXNzdWVzKHdpZGdl
dCwgbGluZU51bWJlcklzc3Vlcyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYnJlYWtwb2ludElu
Zm9Gb3JCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9icmVha3BvaW50SW5m
b0ZvckJyZWFrcG9pbnQoYnJlYWtwb2ludCkKICAgICB7CiAgICAgICAgIHJldHVybiB7cmVzb2x2
ZWQ6IGJyZWFrcG9pbnQucmVzb2x2ZWQsIGRpc2FibGVkOiBicmVha3BvaW50LmRpc2FibGVkLCBh
dXRvQ29udGludWU6IGJyZWFrcG9pbnQuYXV0b0NvbnRpbnVlfTsKLSAgICB9LAorICAgIH0KIAog
ICAgIGdldCBfc3VwcG9ydHNEZWJ1Z2dpbmcoKQogICAgIHsKQEAgLTk3MCwyNyArOTUyLDQ2IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKKyAg
ICB9CiAKICAgICAvLyBUZXh0RWRpdG9yIERlbGVnYXRlCiAKLSAgICB0ZXh0RWRpdG9yQmFzZVVS
TDogZnVuY3Rpb24odGV4dEVkaXRvcikKKyAgICB0ZXh0RWRpdG9yQmFzZVVSTCh0ZXh0RWRpdG9y
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGUudXJsOwotICAgIH0sCisg
ICAgfQogCi0gICAgdGV4dEVkaXRvclNob3VsZEhpZGVMaW5lTnVtYmVyOiBmdW5jdGlvbih0ZXh0
RWRpdG9yLCBsaW5lTnVtYmVyKQorICAgIHRleHRFZGl0b3JTaG91bGRIaWRlTGluZU51bWJlcih0
ZXh0RWRpdG9yLCBsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXIg
aW4gdGhpcy5faW52YWxpZExpbmVOdW1iZXJzOwotICAgIH0sCisgICAgfQogCi0gICAgdGV4dEVk
aXRvckd1dHRlckNvbnRleHRNZW51OiBmdW5jdGlvbih0ZXh0RWRpdG9yLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIsIGVkaXRvckJyZWFrcG9pbnRzLCBldmVudCkKKyAgICB0ZXh0RWRpdG9yR3V0
dGVyQ29udGV4dE1lbnUodGV4dEVkaXRvciwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBlZGl0
b3JCcmVha3BvaW50cywgZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3N1cHBvcnRz
RGVidWdnaW5nKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CiAKKyAgICAgICAgZnVuY3Rpb24gY29udGludWVUb0xvY2F0aW9uKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5jb250aW51ZVRv
TG9jYXRpb24oc2NyaXB0LmlkLCBzb3VyY2VDb2RlTG9jYXRpb24ubGluZU51bWJlciwgc291cmNl
Q29kZUxvY2F0aW9uLmNvbHVtbk51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBhZGRCcmVha3BvaW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlz
LnRleHRFZGl0b3JCcmVha3BvaW50QWRkZWQodGhpcywgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
KTsKKyAgICAgICAgICAgIHRoaXMuc2V0QnJlYWtwb2ludEluZm9Gb3JMaW5lQW5kQ29sdW1uKGRh
dGEubGluZU51bWJlciwgZGF0YS5jb2x1bW5OdW1iZXIsIGRhdGEuYnJlYWtwb2ludEluZm8pOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcmV2ZWFsSW5TaWRlYmFyKCkKKyAgICAgICAg
eworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyU2lkZWJhclBhbmVsLnNob3coKTsK
KyAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlclNpZGVi
YXJQYW5lbC50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KGJyZWFrcG9pbnQpOworICAg
ICAgICAgICAgaWYgKHRyZWVFbGVtZW50KQorICAgICAgICAgICAgICAgIHRyZWVFbGVtZW50LnJl
dmVhbEFuZFNlbGVjdCgpOworICAgICAgICB9CisKICAgICAgICAgdmFyIGNvbnRleHRNZW51ID0g
bmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudShldmVudCk7CiAKICAgICAgICAgLy8gUGF1c2Vk
LiBBZGQgQ29udGludWUgdG8gSGVyZSBvcHRpb24gb25seSBpZiB3ZSBoYXZlIGEgc2NyaXB0IGlk
ZW50aWZpZXIgZm9yIHRoZSBsb2NhdGlvbi4KQEAgLTEwMDUsMTAgKzEwMDYsNiBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAg
IHZhciBzY3JpcHQgPSBzb3VyY2VDb2RlTG9jYXRpb24uc291cmNlQ29kZS5zY3JpcHRGb3JMb2Nh
dGlvbihzb3VyY2VDb2RlTG9jYXRpb24pOwogCiAgICAgICAgICAgICBpZiAoc2NyaXB0KSB7Ci0g
ICAgICAgICAgICAgICAgZnVuY3Rpb24gY29udGludWVUb0xvY2F0aW9uKCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIu
Y29udGludWVUb0xvY2F0aW9uKHNjcmlwdC5pZCwgc291cmNlQ29kZUxvY2F0aW9uLmxpbmVOdW1i
ZXIsIHNvdXJjZUNvZGVMb2NhdGlvbi5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJDb250aW51ZSB0byBIZXJlIiksIGNvbnRpbnVlVG9Mb2NhdGlvbik7CiAgICAgICAg
ICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7CkBAIC0xMDI2LDExICsxMDIz
LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICAvLyBObyBicmVha3BvaW50cy4KICAgICAgICAgaWYgKCFicmVha3BvaW50cy5sZW5n
dGgpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uIGFkZEJyZWFrcG9pbnQoKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy50ZXh0RWRpdG9yQnJlYWtwb2ludEFk
ZGVkKHRoaXMsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAgdGhp
cy5zZXRCcmVha3BvaW50SW5mb0ZvckxpbmVBbmRDb2x1bW4oZGF0YS5saW5lTnVtYmVyLCBkYXRh
LmNvbHVtbk51bWJlciwgZGF0YS5icmVha3BvaW50SW5mbyk7Ci0gICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJB
ZGQgQnJlYWtwb2ludCIpLCBhZGRCcmVha3BvaW50LmJpbmQodGhpcykpOwogICAgICAgICAgICAg
Y29udGV4dE1lbnUuc2hvdygpOwpAQCAtMTA0MCwxMyArMTAzMiw2IEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFNpbmdsZSBicmVh
a3BvaW50LgogICAgICAgICBpZiAoYnJlYWtwb2ludHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzWzBdOwotICAgICAgICAgICAgZnVuY3Rp
b24gcmV2ZWFsSW5TaWRlYmFyKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJTaWRlYmFyUGFuZWwuc2hvdygpOwotICAgICAgICAgICAgICAgIHZh
ciB0cmVlRWxlbWVudCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlclNpZGViYXJQYW5lbC50cmVlRWxl
bWVudEZvclJlcHJlc2VudGVkT2JqZWN0KGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgIGlm
ICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQucmV2ZWFsQW5k
U2VsZWN0KCk7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJyZWFrcG9pbnQuYXBwZW5k
Q29udGV4dE1lbnVJdGVtcyhjb250ZXh0TWVudSwgZXZlbnQudGFyZ2V0KTsKICAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwpAQCAtMTA4NSw5ICsxMDcwLDkgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFbmFibGUgQnJl
YWtwb2ludHMiKSwgdG9nZ2xlQnJlYWtwb2ludHMuYmluZCh0aGlzKSk7CiAgICAgICAgIGNvbnRl
eHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWxldGUgQnJlYWtwb2lu
dHMiKSwgcmVtb3ZlQnJlYWtwb2ludHMuYmluZCh0aGlzKSk7CiAgICAgICAgIGNvbnRleHRNZW51
LnNob3coKTsKLSAgICB9LAorICAgIH0KIAotICAgIHRleHRFZGl0b3JCcmVha3BvaW50QWRkZWQ6
IGZ1bmN0aW9uKHRleHRFZGl0b3IsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB0ZXh0
RWRpdG9yQnJlYWtwb2ludEFkZGVkKHRleHRFZGl0b3IsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
cikKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKQEAgLTExMTMsOSArMTA5OCw5IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBsaW5lTnVtYmVyOiBs
aW5lSW5mby5saW5lTnVtYmVyLAogICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsaW5lSW5mby5j
b2x1bW5OdW1iZXIKICAgICAgICAgfTsKLSAgICB9LAorICAgIH0KIAotICAgIHRleHRFZGl0b3JC
cmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24odGV4dEVkaXRvciwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyKQorICAgIHRleHRFZGl0b3JCcmVha3BvaW50UmVtb3ZlZCh0ZXh0RWRpdG9yLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlz
Ll9zdXBwb3J0c0RlYnVnZ2luZyk7CiAgICAgICAgIGlmICghdGhpcy5fc3VwcG9ydHNEZWJ1Z2dp
bmcpCkBAIC0xMTMyLDkgKzExMTcsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9pZ25vcmVCcmVha3BvaW50UmVtb3ZlZEJy
ZWFrcG9pbnQgPSBicmVha3BvaW50OwogICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5h
Z2VyLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9p
Z25vcmVCcmVha3BvaW50QWRkZWRCcmVha3BvaW50OwotICAgIH0sCisgICAgfQogCi0gICAgdGV4
dEVkaXRvckJyZWFrcG9pbnRNb3ZlZDogZnVuY3Rpb24odGV4dEVkaXRvciwgb2xkTGluZU51bWJl
ciwgb2xkQ29sdW1uTnVtYmVyLCBuZXdMaW5lTnVtYmVyLCBuZXdDb2x1bW5OdW1iZXIpCisgICAg
dGV4dEVkaXRvckJyZWFrcG9pbnRNb3ZlZCh0ZXh0RWRpdG9yLCBvbGRMaW5lTnVtYmVyLCBvbGRD
b2x1bW5OdW1iZXIsIG5ld0xpbmVOdW1iZXIsIG5ld0NvbHVtbk51bWJlcikKICAgICB7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3N1cHBvcnRzRGVidWdnaW5nKTsKICAgICAgICAgaWYg
KCF0aGlzLl9zdXBwb3J0c0RlYnVnZ2luZykKQEAgLTExNTksOSArMTE0NCw5IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKGFj
Y3VyYXRlTmV3TGluZUluZm8ubGluZU51bWJlciAhPT0gbmV3TGluZUluZm8ubGluZU51bWJlciB8
fCBhY2N1cmF0ZU5ld0xpbmVJbmZvLmNvbHVtbk51bWJlciAhPT0gbmV3TGluZUluZm8uY29sdW1u
TnVtYmVyKQogICAgICAgICAgICAgdGhpcy51cGRhdGVCcmVha3BvaW50TGluZUFuZENvbHVtbihu
ZXdMaW5lSW5mby5saW5lTnVtYmVyLCBuZXdMaW5lSW5mby5jb2x1bW5OdW1iZXIsIGFjY3VyYXRl
TmV3TGluZUluZm8ubGluZU51bWJlciwgYWNjdXJhdGVOZXdMaW5lSW5mby5jb2x1bW5OdW1iZXIp
OwotICAgIH0sCisgICAgfQogCi0gICAgdGV4dEVkaXRvckJyZWFrcG9pbnRDbGlja2VkOiBmdW5j
dGlvbih0ZXh0RWRpdG9yLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgdGV4dEVkaXRv
ckJyZWFrcG9pbnRDbGlja2VkKHRleHRFZGl0b3IsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikK
ICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3N1cHBvcnRzRGVidWdnaW5nKTsK
ICAgICAgICAgaWYgKCF0aGlzLl9zdXBwb3J0c0RlYnVnZ2luZykKQEAgLTExNzMsOSArMTE1OCw5
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgYnJlYWtwb2ludC5jeWNsZVRvTmV4dE1vZGUoKTsK
LSAgICB9LAorICAgIH0KIAotICAgIHRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZzogZnVuY3Rp
b24odGV4dEVkaXRvcikKKyAgICB0ZXh0RWRpdG9yVXBkYXRlZEZvcm1hdHRpbmcodGV4dEVkaXRv
cikKICAgICB7CiAgICAgICAgIHRoaXMuX2lnbm9yZUFsbEJyZWFrcG9pbnRMb2NhdGlvblVwZGF0
ZXMgPSB0cnVlOwogICAgICAgICB0aGlzLl9zb3VyY2VDb2RlLmZvcm1hdHRlclNvdXJjZU1hcCA9
IHRoaXMuZm9ybWF0dGVyU291cmNlTWFwOwpAQCAtMTIxMSwxNyArMTE5NiwxNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAg
ICAgICAgdGhpcy5fcmVpbnNlcnRBbGxJc3N1ZXMoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9j
bGVhcldpZGdldHM6IGZ1bmN0aW9uKCkKKyAgICBfY2xlYXJXaWRnZXRzKCkKICAgICB7CiAgICAg
ICAgIGZvciAodmFyIHdpZGdldCBvZiB0aGlzLl93aWRnZXRNYXAudmFsdWVzKCkpCiAgICAgICAg
ICAgICB3aWRnZXQuY2xlYXIoKTsKIAogICAgICAgICB0aGlzLl93aWRnZXRNYXAuY2xlYXIoKTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9yZWluc2VydEFsbElzc3VlczogZnVuY3Rpb24oKQorICAg
IF9yZWluc2VydEFsbElzc3VlcygpCiAgICAgewogICAgICAgICB0aGlzLl9pc3N1ZXNMaW5lTnVt
YmVyTWFwLmNsZWFyKCk7CiAgICAgICAgIHRoaXMuX2NsZWFyV2lkZ2V0cygpOwpAQCAtMTIzMSwx
OCArMTIxNiwxOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fbWF0Y2hlc0lzc3VlKGlzc3Vl
KSk7CiAgICAgICAgICAgICB0aGlzLl9hZGRJc3N1ZShpc3N1ZSk7CiAgICAgICAgIH0KLSAgICB9
LAorICAgIH0KIAotICAgIF9kZWJ1Z2dlckRpZFBhdXNlOiBmdW5jdGlvbihldmVudCkKKyAgICBf
ZGVidWdnZXJEaWRQYXVzZShldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVRva2Vu
VHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKICAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFu
bm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUoKSkKICAgICAgICAg
ICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZWZyZXNoKCk7CiAgICAgICAgIGlmICh0aGlz
Ll9iYXNpY0Jsb2NrQW5ub3RhdG9yICYmIHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0b3IuaXNBY3Rp
dmUoKSkKICAgICAgICAgICAgIHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0b3IucmVmcmVzaCgpOwot
ICAgIH0sCisgICAgfQogCi0gICAgX2RlYnVnZ2VyRGlkUmVzdW1lOiBmdW5jdGlvbihldmVudCkK
KyAgICBfZGVidWdnZXJEaWRSZXN1bWUoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl91cGRh
dGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAgICAgICAgIHRoaXMuX2Rpc21pc3NQ
b3BvdmVyKCk7CkBAIC0xMjUwLDE3ICsxMjM1LDE3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5v
dGF0b3IucmVmcmVzaCgpOwogICAgICAgICBpZiAodGhpcy5fYmFzaWNCbG9ja0Fubm90YXRvciAm
JiB0aGlzLl9iYXNpY0Jsb2NrQW5ub3RhdG9yLmlzQWN0aXZlKCkpCiAgICAgICAgICAgICB0aGlz
Ll9iYXNpY0Jsb2NrQW5ub3RhdG9yLnJlZnJlc2goKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9z
b3VyY2VDb2RlU291cmNlTWFwQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9zb3VyY2VDb2Rl
U291cmNlTWFwQWRkZWQoZXZlbnQpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZp
Y2F0aW9ucy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Ob3RpZmljYXRpb24uR2xvYmFs
TW9kaWZpZXJLZXlzRGlkQ2hhbmdlLCB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxl
clN0YXRlLCB0aGlzKTsKICAgICAgICAgdGhpcy5fc291cmNlQ29kZS5yZW1vdmVFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1hcEFkZGVkLCB0aGlzLl9z
b3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOwogCiAgICAgICAgIHRoaXMuX3VwZGF0ZVRv
a2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF91cGRh
dGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlOiBmdW5jdGlvbigpCisgICAgX3VwZGF0ZVRv
a2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKQogICAgIHsKICAgICAgICAgdmFyIG1vZGUgPSBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uZTsK
ICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKQpAQCAtMTI5
NywyMCArMTI4MiwyMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxl
ci5tb2RlID0gbW9kZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYXNDb2xvck1hcmtlcnM6IGZ1
bmN0aW9uKCkKKyAgICBfaGFzQ29sb3JNYXJrZXJzKCkKICAgICB7CiAgICAgICAgIGZvciAodmFy
IG1hcmtlciBvZiB0aGlzLm1hcmtlcnMpIHsKICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9
PT0gV2ViSW5zcGVjdG9yLlRleHRNYXJrZXIuVHlwZS5Db2xvcikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKKyAg
ICB9CiAKICAgICAvLyBDb2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIgRGVsZWdhdGUK
IAotICAgIHRva2VuVHJhY2tpbmdDb250cm9sbGVyQ2FuUmVsZWFzZUhpZ2hsaWdodGVkUmFuZ2U6
IGZ1bmN0aW9uKHRva2VuVHJhY2tpbmdDb250cm9sbGVyLCBlbGVtZW50KQorICAgIHRva2VuVHJh
Y2tpbmdDb250cm9sbGVyQ2FuUmVsZWFzZUhpZ2hsaWdodGVkUmFuZ2UodG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIsIGVsZW1lbnQpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXIpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzMTksMTUgKzEzMDQsMTUgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAorICAgIH0KIAotICAgIHRv
a2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRSYW5nZVJlbGVhc2VkOiBmdW5jdGlvbih0
b2tlblRyYWNraW5nQ29udHJvbGxlcikKKyAgICB0b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hs
aWdodGVkUmFuZ2VSZWxlYXNlZCh0b2tlblRyYWNraW5nQ29udHJvbGxlcikKICAgICB7CiAgICAg
ICAgIGlmICghdGhpcy5fbW91c2VJc092ZXJQb3BvdmVyKQogICAgICAgICAgICAgdGhpcy5fZGlz
bWlzc1BvcG92ZXIoKTsKLSAgICB9LAorICAgIH0KIAotICAgIHRva2VuVHJhY2tpbmdDb250cm9s
bGVySGlnaGxpZ2h0ZWRSYW5nZVdhc0NsaWNrZWQ6IGZ1bmN0aW9uKHRva2VuVHJhY2tpbmdDb250
cm9sbGVyKQorICAgIHRva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRSYW5nZVdhc0Ns
aWNrZWQodG9rZW5UcmFja2luZ0NvbnRyb2xsZXIpCiAgICAgewogICAgICAgICBpZiAodGhpcy50
b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlICE9PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uU3ltYm9sVG9rZW5zKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTM0MSw5ICsxMzI2LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVNp
ZGViYXJQYW5lbC5zaG93T3JpZ2luYWxPckZvcm1hdHRlZFNvdXJjZUNvZGVMb2NhdGlvbihzb3Vy
Y2VDb2RlTG9jYXRpb24pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
cmVzb3VyY2VTaWRlYmFyUGFuZWwuc2hvd1NvdXJjZUNvZGVMb2NhdGlvbihzb3VyY2VDb2RlTG9j
YXRpb24pOwotICAgIH0sCisgICAgfQogCi0gICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJOZXdI
aWdobGlnaHRDYW5kaWRhdGU6IGZ1bmN0aW9uKHRva2VuVHJhY2tpbmdDb250cm9sbGVyLCBjYW5k
aWRhdGUpCisgICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJOZXdIaWdobGlnaHRDYW5kaWRhdGUo
dG9rZW5UcmFja2luZ0NvbnRyb2xsZXIsIGNhbmRpZGF0ZSkKICAgICB7CiAgICAgICAgIGlmICh0
aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWly
cm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25TeW1ib2xUb2tlbnMpIHsKICAgICAg
ICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlk
YXRlLmhvdmVyZWRUb2tlblJhbmdlKTsKQEAgLTEzNjcsMTQgKzEzNTIsMTQgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICB0aGlzLl9kaXNtaXNzRWRpdGluZ0NvbnRyb2xsZXIoKTsKICAgICAg
ICAgfQotICAgIH0sCisgICAgfQogCi0gICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJNb3VzZU91
dE9mSG92ZXJlZE1hcmtlcjogZnVuY3Rpb24odG9rZW5UcmFja2luZ0NvbnRyb2xsZXIsIGhvdmVy
ZWRNYXJrZXIpCisgICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJNb3VzZU91dE9mSG92ZXJlZE1h
cmtlcih0b2tlblRyYWNraW5nQ29udHJvbGxlciwgaG92ZXJlZE1hcmtlcikKICAgICB7CiAgICAg
ICAgIHRoaXMuX2Rpc21pc3NFZGl0aW5nQ29udHJvbGxlcigpOwotICAgIH0sCisgICAgfQogCi0g
ICAgX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0RXhwcmVzc2lv
bjogZnVuY3Rpb24oY2FuZGlkYXRlKQorICAgIF90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hs
aWdodGVkSmF2YVNjcmlwdEV4cHJlc3Npb24oY2FuZGlkYXRlKQogICAgIHsKICAgICAgICAgY29u
c29sZS5hc3NlcnQoY2FuZGlkYXRlLmV4cHJlc3Npb24pOwogCkBAIC0xNDE0LDkgKzEzOTksOSBA
QCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAg
ICAgIC8vIE5vIGNhbGwgZnJhbWUgYXZhaWxhYmxlLiBVc2UgdGhlIG1haW4gcGFnZSdzIGNvbnRl
eHQuCiAgICAgICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZS5pbnZva2Uoe2V4cHJlc3Npb246IGNh
bmRpZGF0ZS5leHByZXNzaW9uLCBvYmplY3RHcm91cDogInBvcG92ZXIiLCBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGU6IHRydWV9LCBwb3B1bGF0ZS5iaW5kKHRoaXMpKTsKLSAg
ICB9LAorICAgIH0KIAotICAgIF90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2
YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjogZnVuY3Rpb24oY2FuZGlkYXRlKQorICAgIF90b2tlblRy
YWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbihjYW5k
aWRhdGUpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChjYW5kaWRhdGUuZXhwcmVzc2lv
bik7CiAKQEAgLTE0NDksOSArMTQzNCw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICBSdW50aW1lQWdlbnQuZ2V0
UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKGFsbFJlcXVlc3RzLCBoYW5kbGVyLmJp
bmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgX3Nob3dQb3BvdmVyOiBmdW5jdGlvbihj
b250ZW50LCBib3VuZHMpCisgICAgX3Nob3dQb3BvdmVyKGNvbnRlbnQsIGJvdW5kcykKICAgICB7
CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2Fu
ZGlkYXRlIHx8IGJvdW5kcyk7CiAKQEAgLTE0NzcsOSArMTQ2Miw5IEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLnRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLmhpZ2hsaWdodFJhbmdlKGNhbmRpZGF0ZS5leHByZXNzaW9uUmFu
Z2UpOwogCiAgICAgICAgIHRoaXMuX3RyYWNrUG9wb3ZlckV2ZW50cygpOwotICAgIH0sCisgICAg
fQogCi0gICAgX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb246IGZ1bmN0aW9uKGRhdGEpCisgICAgX3No
b3dQb3BvdmVyRm9yRnVuY3Rpb24oZGF0YSkKICAgICB7CiAgICAgICAgIHZhciBjYW5kaWRhdGUg
PSB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZTsKIApAQCAtMTUxMiw5ICsx
NDk3LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyKGNvbnRlbnQpOwogICAgICAgICB9CiAgICAg
ICAgIERlYnVnZ2VyQWdlbnQuZ2V0RnVuY3Rpb25EZXRhaWxzKGRhdGEub2JqZWN0SWQsIGRpZEdl
dERldGFpbHMuYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2hvd1BvcG92ZXJG
b3JPYmplY3Q6IGZ1bmN0aW9uKGRhdGEpCisgICAgX3Nob3dQb3BvdmVyRm9yT2JqZWN0KGRhdGEp
CiAgICAgewogICAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwogICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICJvYmplY3QgZXhwYW5kYWJsZSI7CkBA
IC0xNTM0LDIyICsxNTE5LDIyIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGJvZHlFbGVtZW50LmFwcGVuZENoaWxkKG9iamVjdFRyZWUu
ZWxlbWVudCk7CiAKICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfc2hvd1BvcG92ZXJXaXRoRm9ybWF0dGVkVmFsdWU6IGZ1bmN0aW9uKHJl
bW90ZU9iamVjdCkKKyAgICBfc2hvd1BvcG92ZXJXaXRoRm9ybWF0dGVkVmFsdWUocmVtb3RlT2Jq
ZWN0KQogICAgIHsKICAgICAgICAgdmFyIGNvbnRlbnQgPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVk
VmFsdWUuY3JlYXRlRWxlbWVudEZvclJlbW90ZU9iamVjdChyZW1vdGVPYmplY3QpOwogICAgICAg
ICB0aGlzLl9zaG93UG9wb3Zlcihjb250ZW50KTsKLSAgICB9LAorICAgIH0KIAotICAgIHdpbGxE
aXNtaXNzUG9wb3ZlcjogZnVuY3Rpb24ocG9wb3ZlcikKKyAgICB3aWxsRGlzbWlzc1BvcG92ZXIo
cG9wb3ZlcikKICAgICB7CiAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucmVt
b3ZlSGlnaGxpZ2h0ZWRSYW5nZSgpOwogCiAgICAgICAgIFJ1bnRpbWVBZ2VudC5yZWxlYXNlT2Jq
ZWN0R3JvdXAoInBvcG92ZXIiKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9kaXNtaXNzUG9wb3Zl
cjogZnVuY3Rpb24oKQorICAgIF9kaXNtaXNzUG9wb3ZlcigpCiAgICAgewogICAgICAgICBpZiAo
IXRoaXMuX3BvcG92ZXIpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTYwLDkgKzE1NDUsOSBA
QCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgdGhpcy5fcG9wb3ZlckV2ZW50TGlzdGVuZXJzQXJlUmVnaXN0ZXJlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckV2ZW50TGlzdGVuZXJzLnVucmVnaXN0ZXIoKTsKICAg
ICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX3RyYWNrUG9wb3ZlckV2ZW50czogZnVuY3Rp
b24oKQorICAgIF90cmFja1BvcG92ZXJFdmVudHMoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlz
Ll9wb3BvdmVyRXZlbnRMaXN0ZW5lcnMpIAogICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckV2ZW50
TGlzdGVuZXJzID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2V0KHRoaXMsICJQb3Bv
dmVyIGxpc3RlbmVycyIpOwpAQCAtMTU3MiwyNyArMTU1NywyNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fcG9wb3Zl
ckV2ZW50TGlzdGVuZXJzLnJlZ2lzdGVyKHRoaXMuX3BvcG92ZXIuZWxlbWVudCwgIm1vdXNlb3V0
IiwgdGhpcy5fcG9wb3Zlck1vdXNlb3V0KTsKICAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJFdmVu
dExpc3RlbmVycy5pbnN0YWxsKCk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIF9w
b3BvdmVyTW91c2VvdmVyOiBmdW5jdGlvbihldmVudCkKKyAgICBfcG9wb3Zlck1vdXNlb3Zlcihl
dmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX21vdXNlSXNPdmVyUG9wb3ZlciA9IHRydWU7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfcG9wb3Zlck1vdXNlb3V0OiBmdW5jdGlvbihldmVudCkKKyAg
ICBfcG9wb3Zlck1vdXNlb3V0KGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fbW91c2VJc092
ZXJQb3BvdmVyID0gdGhpcy5fcG9wb3Zlci5lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRU
YXJnZXQpOwotICAgIH0sCisgICAgfQogCi0gICAgX3VwZGF0ZUVkaXRhYmxlTWFya2VyczogZnVu
Y3Rpb24ocmFuZ2UpCisgICAgX3VwZGF0ZUVkaXRhYmxlTWFya2VycyhyYW5nZSkKICAgICB7CiAg
ICAgICAgIHRoaXMuY3JlYXRlQ29sb3JNYXJrZXJzKHJhbmdlKTsKICAgICAgICAgdGhpcy5jcmVh
dGVHcmFkaWVudE1hcmtlcnMocmFuZ2UpOwogCiAgICAgICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJh
Y2tpbmdDb250cm9sbGVyU3RhdGUoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF90b2tlblRyYWNr
aW5nQ29udHJvbGxlckhpZ2hsaWdodGVkTWFya2VkRXhwcmVzc2lvbjogZnVuY3Rpb24oY2FuZGlk
YXRlLCBtYXJrZXJzKQorICAgIF90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkTWFy
a2VkRXhwcmVzc2lvbihjYW5kaWRhdGUsIG1hcmtlcnMpCiAgICAgewogICAgICAgICAvLyBMb29r
IGZvciB0aGUgb3V0ZXJtb3N0IGVkaXRhYmxlIG1hcmtlci4KICAgICAgICAgdmFyIGVkaXRhYmxl
TWFya2VyOwpAQCAtMTYyOSwyMCArMTYxNCwyMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRl
eHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2VkaXRpbmdDb250cm9sbGVy
LmRlbGVnYXRlID0gdGhpczsKICAgICAgICAgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXIucHJlc2Vu
dEhvdmVyTWVudSgpOwotICAgIH0sCisgICAgfQogCi0gICAgX2Rpc21pc3NFZGl0aW5nQ29udHJv
bGxlcjogZnVuY3Rpb24oZGlzY3JldGUpCisgICAgX2Rpc21pc3NFZGl0aW5nQ29udHJvbGxlcihk
aXNjcmV0ZSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9lZGl0aW5nQ29udHJvbGxlcikKICAg
ICAgICAgICAgIHRoaXMuX2VkaXRpbmdDb250cm9sbGVyLmRpc21pc3NIb3Zlck1lbnUoZGlzY3Jl
dGUpOwogICAgICAgICAKICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5ob3Zl
cmVkTWFya2VyID0gbnVsbDsKICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmdDb250cm9sbGVy
OwotICAgIH0sCisgICAgfQogCiAgICAgLy8gQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyIERl
bGVnYXRlCiAgICAgCi0gICAgZWRpdGluZ0NvbnRyb2xsZXJEaWRTdGFydEVkaXRpbmc6IGZ1bmN0
aW9uKGVkaXRpbmdDb250cm9sbGVyKQorICAgIGVkaXRpbmdDb250cm9sbGVyRGlkU3RhcnRFZGl0
aW5nKGVkaXRpbmdDb250cm9sbGVyKQogICAgIHsKICAgICAgICAgLy8gV2UgY2FuIHBhdXNlIHRo
ZSB0b2tlbiB0cmFja2luZyBjb250cm9sbGVyIGR1cmluZyBlZGl0aW5nLCBpdCB3aWxsIGJlIHJl
c2V0CiAgICAgICAgIC8vIHRvIHRoZSBleHBlY3RlZCBzdGF0ZSBieSBjYWxsaW5nIF91cGRhdGVF
ZGl0YWJsZU1hcmtlcnMoKSBpbiB0aGUKQEAgLTE2NTQsMTggKzE2MzksMTggQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgCiAgICAgICAg
IC8vIFdlIGlnbm9yZSBjb250ZW50IGNoYW5nZXMgbWFkZSBhcyBhIHJlc3VsdCBvZiBjb2xvciBl
ZGl0aW5nLgogICAgICAgICB0aGlzLl9pZ25vcmVDb250ZW50RGlkQ2hhbmdlKys7Ci0gICAgfSwK
KyAgICB9CiAgICAgCi0gICAgZWRpdGluZ0NvbnRyb2xsZXJEaWRGaW5pc2hFZGl0aW5nOiBmdW5j
dGlvbihlZGl0aW5nQ29udHJvbGxlcikKKyAgICBlZGl0aW5nQ29udHJvbGxlckRpZEZpbmlzaEVk
aXRpbmcoZWRpdGluZ0NvbnRyb2xsZXIpCiAgICAgewogICAgICAgICB0aGlzLl91cGRhdGVFZGl0
YWJsZU1hcmtlcnMoZWRpdGluZ0NvbnRyb2xsZXIucmFuZ2UpOwogCiAgICAgICAgIHRoaXMuX2ln
bm9yZUNvbnRlbnREaWRDaGFuZ2UtLTsKIAogICAgICAgICBkZWxldGUgdGhpcy5fZWRpdGluZ0Nv
bnRyb2xsZXI7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2V0VHlwZVRva2VuQW5ub3RhdG9yRW5h
YmxlZFN0YXRlOiBmdW5jdGlvbihzaG91bGRBY3RpdmF0ZSkKKyAgICBfc2V0VHlwZVRva2VuQW5u
b3RhdG9yRW5hYmxlZFN0YXRlKHNob3VsZEFjdGl2YXRlKQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKTsKICAgICAgICAgaWYgKCF0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3IpCkBAIC0xNzAwLDkgKzE2ODUsOSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBXZWJJbnNwZWN0b3Iuc2hv
d0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlID0gc2hvdWxkQWN0aXZhdGU7
CiAKICAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwot
ICAgIH0sCisgICAgfQogCi0gICAgX2dldEFzc29jaWF0ZWRTY3JpcHQ6IGZ1bmN0aW9uKCkKKyAg
ICBfZ2V0QXNzb2NpYXRlZFNjcmlwdCgpCiAgICAgewogICAgICAgICB2YXIgc2NyaXB0ID0gbnVs
bDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gbWUgbW9kaWZpZWQgdG8gd29yayB3
aXRoIEhUTUwgZmlsZXMgd2l0aCBpbmxpbmUgc2NyaXB0IHRhZ3MuCkBAIC0xNzExLDkgKzE2OTYs
OSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAg
ICAgICBlbHNlIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJl
c291cmNlICYmIHRoaXMuX3NvdXJjZUNvZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlJlc291cmNl
LlR5cGUuU2NyaXB0ICYmIHRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0cy5sZW5ndGgpCiAgICAgICAg
ICAgICBzY3JpcHQgPSB0aGlzLl9zb3VyY2VDb2RlLnNjcmlwdHNbMF07CiAgICAgICAgIHJldHVy
biBzY3JpcHQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbWFrZVR5cGVUb2tlbkFubm90YXRvcjog
ZnVuY3Rpb24oKQorICAgIF9tYWtlVHlwZVRva2VuQW5ub3RhdG9yKCkKICAgICB7CiAgICAgICAg
IGlmICghUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cykK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3MjMsOSArMTcwOCw5IEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5Bbm5vdGF0b3IodGhpcywgc2NyaXB0KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYWtl
QmFzaWNCbG9ja0Fubm90YXRvcjogZnVuY3Rpb24oKQorICAgIF9tYWtlQmFzaWNCbG9ja0Fubm90
YXRvcigpCiAgICAgewogICAgICAgICBpZiAoIVJ1bnRpbWVBZ2VudC5nZXRCYXNpY0Jsb2NrcykK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3MzUsMjQgKzE3MjAsMjQgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICB0aGlzLl9iYXNpY0Jsb2NrQW5ub3RhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5C
YXNpY0Jsb2NrQW5ub3RhdG9yKHRoaXMsIHNjcmlwdCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
ZW5hYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAg
X2VuYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpCiAgICAgewogICAgICAg
ICAvLyBQYXVzZSB1cGRhdGluZyB0eXBlIHRva2VucyB3aGlsZSBzY3JvbGxpbmcgdG8gcHJldmVu
dCBmcmFtZSBsb3NzLgogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fdHlwZVRva2VuU2Ny
b2xsSGFuZGxlcik7CiAgICAgICAgIHRoaXMuX3R5cGVUb2tlblNjcm9sbEhhbmRsZXIgPSB0aGlz
Ll9tYWtlVHlwZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgIHRoaXMuYWRkU2Ny
b2xsSGFuZGxlcih0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVyKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9kaXNhYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlv
bigpCisgICAgX2Rpc2FibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKQogICAg
IHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlcik7
CiAgICAgICAgIHRoaXMucmVtb3ZlU2Nyb2xsSGFuZGxlcih0aGlzLl90eXBlVG9rZW5TY3JvbGxI
YW5kbGVyKTsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlciA9IG51bGw7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50SGFuZGxlcjogZnVu
Y3Rpb24oKQorICAgIF9tYWtlVHlwZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyKCkKICAgICB7CiAg
ICAgICAgIHZhciB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CiAgICAgICAgIGZ1bmN0aW9uIHNj
cm9sbEhhbmRsZXIoKQpAQCAtMTc3OSw0ICsxNzY0LDE3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAotV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuTGlu
ZUVycm9yU3R5bGVDbGFzc05hbWUgPSAiZXJyb3IiOworV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVU
ZXh0RWRpdG9yLkxpbmVXYXJuaW5nU3R5bGVDbGFzc05hbWUgPSAid2FybmluZyI7CitXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuUG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0eWxlQ2xh
c3NOYW1lID0gImRlYnVnZ2VyLXBvcG92ZXItY29udGVudCI7CitXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IuSG92ZXJlZEV4cHJlc3Npb25IaWdobGlnaHRTdHlsZUNsYXNzTmFtZSA9
ICJob3ZlcmVkLWV4cHJlc3Npb24taGlnaGxpZ2h0IjsKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5EdXJhdGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3ZlcmVkVG9rZW4gPSA1
MDA7CitXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01vdXNlT3V0
T2ZIb3ZlcmVkVG9rZW5Ub1JlbGVhc2UgPSAxMDAwOworV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVU
ZXh0RWRpdG9yLkR1cmF0aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcgPSAxMDA7
CitXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuQXV0b0Zvcm1hdE1pbmltdW1MaW5l
TGVuZ3RoID0gNTAwOworV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLldpZGdldENv
bnRhaW5zTXVsdGlwbGVJc3N1ZXNTeW1ib2wgPSBTeW1ib2woInNvdXJjZS1jb2RlLXdpZGdldC1j
b250YWlucy1tdWx0aXBsZS1pc3N1ZXMiKTsKKworV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLkV2ZW50ID0geworICAgIENvbnRlbnRXaWxsUG9wdWxhdGU6ICJzb3VyY2UtY29kZS10
ZXh0LWVkaXRvci1jb250ZW50LXdpbGwtcG9wdWxhdGUiLAorICAgIENvbnRlbnREaWRQb3B1bGF0
ZTogInNvdXJjZS1jb2RlLXRleHQtZWRpdG9yLWNvbnRlbnQtZGlkLXBvcHVsYXRlIgorfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRF
ZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0
RWRpdG9yLmpzCmluZGV4IDNlZjM4YjlhMTJiYzM0Y2ZlMzE5ODBmZjI0MTVhZjczYzFhMjRlMmUu
LjE2ODQ5NDhiY2NlYTVmMWJlNzA2M2M0MGE4MTE1OWQyMTM4ZGE0NTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRFZGl0b3IuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5q
cwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjMsOTAgKzIzLDY1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IgPSBmdW5jdGlvbihlbGVtZW50LCBtaW1lVHlw
ZSwgZGVsZWdhdGUpCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9IGNsYXNzIFRleHRFZGl0b3Ig
ZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhp
cyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0g
ICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgdmFyIHRleHQgPSAo
ZWxlbWVudCA/IGVsZW1lbnQudGV4dENvbnRlbnQgOiAiIik7Ci0gICAgdGhpcy5fZWxlbWVudCA9
IGVsZW1lbnQgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5fZWxl
bWVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLlN0eWxlQ2xhc3NOYW1l
KTsKLSAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLlN5bnRheEhp
Z2hsaWdodGVkU3R5bGVDbGFzc05hbWUpOwotCi0gICAgdGhpcy5fY29kZU1pcnJvciA9IENvZGVN
aXJyb3IodGhpcy5lbGVtZW50LCB7Ci0gICAgICAgIHJlYWRPbmx5OiB0cnVlLAotICAgICAgICBp
bmRlbnRXaXRoVGFiczogdHJ1ZSwKLSAgICAgICAgaW5kZW50VW5pdDogNCwKLSAgICAgICAgbGlu
ZU51bWJlcnM6IHRydWUsCi0gICAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZSwKLSAgICAgICAgbWF0
Y2hCcmFja2V0czogdHJ1ZSwKLSAgICAgICAgYXV0b0Nsb3NlQnJhY2tldHM6IHRydWUKLSAgICB9
KTsKLQotICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImNoYW5nZSIsIHRoaXMuX2NvbnRlbnRDaGFu
Z2VkLmJpbmQodGhpcykpOwotICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImd1dHRlckNsaWNrIiwg
dGhpcy5fZ3V0dGVyTW91c2VEb3duLmJpbmQodGhpcykpOwotICAgIHRoaXMuX2NvZGVNaXJyb3Iu
b24oImd1dHRlckNvbnRleHRNZW51IiwgdGhpcy5fZ3V0dGVyQ29udGV4dE1lbnUuYmluZCh0aGlz
KSk7Ci0gICAgdGhpcy5fY29kZU1pcnJvci5nZXRTY3JvbGxlckVsZW1lbnQoKS5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIHRoaXMuX29wZW5DbGlja2VkTGlua3MuYmluZCh0aGlzKSwgdHJ1ZSk7
Ci0KLSAgICB0aGlzLl9jb21wbGV0aW9uQ29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyKHRoaXMuX2NvZGVNaXJyb3IsIHRoaXMpOwotICAg
IHRoaXMuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5Db2RlTWly
cm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIodGhpcy5fY29kZU1pcnJvciwgdGhpcyk7Ci0KLSAg
ICB0aGlzLl9pbml0aWFsU3RyaW5nTm90U2V0ID0gdHJ1ZTsKLQotICAgIHRoaXMubWltZVR5cGUg
PSBtaW1lVHlwZTsKKyAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBtaW1lVHlwZSwgZGVsZWdhdGUp
CisgICAgeworICAgICAgICBzdXBlcigpOworCisgICAgICAgIHZhciB0ZXh0ID0gKGVsZW1lbnQg
PyBlbGVtZW50LnRleHRDb250ZW50IDogIiIpOworICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxl
bWVudCB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGhpcy5fZWxl
bWVudC5jbGFzc0xpc3QuYWRkKCJ0ZXh0LWVkaXRvciIpOworICAgICAgICB0aGlzLl9lbGVtZW50
LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVkU3R5bGVDbGFzc05h
bWUpOworCisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBDb2RlTWlycm9yKHRoaXMuZWxlbWVu
dCwgeworICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsCisgICAgICAgICAgICBpbmRlbnRXaXRo
VGFiczogdHJ1ZSwKKyAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsCisgICAgICAgICAgICBsaW5l
TnVtYmVyczogdHJ1ZSwKKyAgICAgICAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZSwKKyAgICAgICAg
ICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCisgICAgICAgICAgICBhdXRvQ2xvc2VCcmFja2V0czog
dHJ1ZQorICAgICAgICB9KTsKIAotICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307Ci0gICAgdGhp
cy5fZXhlY3V0aW9uTGluZU51bWJlciA9IE5hTjsKLSAgICB0aGlzLl9leGVjdXRpb25Db2x1bW5O
dW1iZXIgPSBOYU47CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImNoYW5nZSIsIHRoaXMu
X2NvbnRlbnRDaGFuZ2VkLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9u
KCJndXR0ZXJDbGljayIsIHRoaXMuX2d1dHRlck1vdXNlRG93bi5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgdGhpcy5fY29kZU1pcnJvci5vbigiZ3V0dGVyQ29udGV4dE1lbnUiLCB0aGlzLl9ndXR0ZXJD
b250ZXh0TWVudS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fY29kZU1pcnJvci5nZXRTY3Jv
bGxlckVsZW1lbnQoKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX29wZW5DbGlja2Vk
TGlua3MuYmluZCh0aGlzKSwgdHJ1ZSk7CiAKLSAgICB0aGlzLl9zZWFyY2hRdWVyeSA9IG51bGw7
Ci0gICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOwotICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hS
ZXN1bHRJbmRleCA9IC0xOwotICAgIHRoaXMuX2lnbm9yZUNvZGVNaXJyb3JDb250ZW50RGlkQ2hh
bmdlRXZlbnQgPSAwOworICAgICAgICB0aGlzLl9jb21wbGV0aW9uQ29udHJvbGxlciA9IG5ldyBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyKHRoaXMuX2NvZGVNaXJy
b3IsIHRoaXMpOworICAgICAgICB0aGlzLl90b2tlblRyYWNraW5nQ29udHJvbGxlciA9IG5ldyBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyKHRoaXMuX2NvZGVN
aXJyb3IsIHRoaXMpOwogCi0gICAgdGhpcy5fZm9ybWF0dGVkID0gZmFsc2U7Ci0gICAgdGhpcy5f
Zm9ybWF0dGVyU291cmNlTWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5faW5pdGlhbFN0cmluZ05v
dFNldCA9IHRydWU7CiAKLSAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlIHx8IG51bGw7Ci19
OworICAgICAgICB0aGlzLm1pbWVUeXBlID0gbWltZVR5cGU7CiAKLS8vIEZJWE1FOiBNb3ZlIHRv
IGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcyBhbmQgd2UgY2FuIHJlbW92ZSB0aGlzLgot
V2ViSW5zcGVjdG9yLk9iamVjdC5kZXByZWNhdGVkQWRkQ29uc3RydWN0b3JGdW5jdGlvbnMoV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IpOworICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9Owor
ICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyID0gTmFOOworICAgICAgICB0aGlzLl9l
eGVjdXRpb25Db2x1bW5OdW1iZXIgPSBOYU47CiAKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLlN0
eWxlQ2xhc3NOYW1lID0gInRleHQtZWRpdG9yIjsKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkhp
Z2hsaWdodGVkU3R5bGVDbGFzc05hbWUgPSAiaGlnaGxpZ2h0ZWQiOwotV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3IuU2VhcmNoUmVzdWx0U3R5bGVDbGFzc05hbWUgPSAic2VhcmNoLXJlc3VsdCI7Ci1X
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5IYXNCcmVha3BvaW50U3R5bGVDbGFzc05hbWUgPSAiaGFz
LWJyZWFrcG9pbnQiOwotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuQnJlYWtwb2ludFJlc29sdmVk
U3R5bGVDbGFzc05hbWUgPSAiYnJlYWtwb2ludC1yZXNvbHZlZCI7Ci1XZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5CcmVha3BvaW50QXV0b0NvbnRpbnVlU3R5bGVDbGFzc05hbWUgPSAiYnJlYWtwb2lu
dC1hdXRvLWNvbnRpbnVlIjsKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkJyZWFrcG9pbnREaXNh
YmxlZFN0eWxlQ2xhc3NOYW1lID0gImJyZWFrcG9pbnQtZGlzYWJsZWQiOwotV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IuTXVsdGlwbGVCcmVha3BvaW50c1N0eWxlQ2xhc3NOYW1lID0gIm11bHRpcGxl
LWJyZWFrcG9pbnRzIjsKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkV4ZWN1dGlvbkxpbmVTdHls
ZUNsYXNzTmFtZSA9ICJleGVjdXRpb24tbGluZSI7Ci1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5C
b3VuY3lIaWdobGlnaHRTdHlsZUNsYXNzTmFtZSA9ICJib3VuY3ktaGlnaGxpZ2h0IjsKLVdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yLk51bWJlck9mRmluZHNQZXJTZWFyY2hCYXRjaCA9IDEwOwotV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IuSGlnaGxpZ2h0QW5pbWF0aW9uRHVyYXRpb24gPSAyMDAwOwor
ICAgICAgICB0aGlzLl9zZWFyY2hRdWVyeSA9IG51bGw7CisgICAgICAgIHRoaXMuX3NlYXJjaFJl
c3VsdHMgPSBbXTsKKyAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7
CisgICAgICAgIHRoaXMuX2lnbm9yZUNvZGVNaXJyb3JDb250ZW50RGlkQ2hhbmdlRXZlbnQgPSAw
OwogCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5FdmVudCA9IHsKLSAgICBFeGVjdXRpb25MaW5l
TnVtYmVyRGlkQ2hhbmdlOiAidGV4dC1lZGl0b3ItZXhlY3V0aW9uLWxpbmUtbnVtYmVyLWRpZC1j
aGFuZ2UiLAotICAgIE51bWJlck9mU2VhcmNoUmVzdWx0c0RpZENoYW5nZTogInRleHQtZWRpdG9y
LW51bWJlci1vZi1zZWFyY2gtcmVzdWx0cy1kaWQtY2hhbmdlIiwKLSAgICBDb250ZW50RGlkQ2hh
bmdlOiAidGV4dC1lZGl0b3ItY29udGVudC1kaWQtY2hhbmdlIiwKLSAgICBGb3JtYXR0aW5nRGlk
Q2hhbmdlOiAidGV4dC1lZGl0b3ItZm9ybWF0dGluZy1kaWQtY2hhbmdlIgotfTsKKyAgICAgICAg
dGhpcy5fZm9ybWF0dGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1h
cCA9IG51bGw7CiAKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKLSAgICBj
b25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IsCisgICAgICAgIHRoaXMuX2RlbGVn
YXRlID0gZGVsZWdhdGUgfHwgbnVsbDsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdl
dCBlbGVtZW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OwotICAgIH0s
CisgICAgfQogCiAgICAgZ2V0IHN0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5f
Y29kZU1pcnJvci5nZXRWYWx1ZSgpOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IHN0cmluZyhu
ZXdTdHJpbmcpCiAgICAgewpAQCAtMTQ2LDIyICsxMjEsMjIgQEAgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9wZXJhdGlvbih1
cGRhdGUuYmluZCh0aGlzKSk7CiAgICAgICAgIHRoaXMuX2lnbm9yZUNvZGVNaXJyb3JDb250ZW50
RGlkQ2hhbmdlRXZlbnQtLTsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faWdub3JlQ29k
ZU1pcnJvckNvbnRlbnREaWRDaGFuZ2VFdmVudCA+PSAwKTsKLSAgICB9LAorICAgIH0KIAogICAg
IGdldCByZWFkT25seSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5n
ZXRPcHRpb24oInJlYWRPbmx5IikgfHwgZmFsc2U7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQg
cmVhZE9ubHkocmVhZE9ubHkpCiAgICAgewogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldE9w
dGlvbigicmVhZE9ubHkiLCByZWFkT25seSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgZm9y
bWF0dGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWQ7Ci0gICAgfSwK
KyAgICB9CiAKICAgICBzZXQgZm9ybWF0dGVkKGZvcm1hdHRlZCkKICAgICB7CkBAIC0xODAsNTIg
KzE1NSw1MiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHRoaXMuX2Zvcm1hdHRlZCA9IGZvcm1hdHRlZDsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5FdmVudC5Gb3JtYXR0aW5nRGlk
Q2hhbmdlKTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBhdXRvRm9ybWF0KGF1dG8pCiAgICAg
ewogICAgICAgICB0aGlzLl9hdXRvRm9ybWF0ID0gYXV0bzsKLSAgICB9LAorICAgIH0KIAotICAg
IGhhc0Zvcm1hdHRlcjogZnVuY3Rpb24oKQorICAgIGhhc0Zvcm1hdHRlcigpCiAgICAgewotICAg
ICAgICBjb25zdCBzdXBwb3J0ZWRNb2RlcyA9IHsKKyAgICAgICAgdmFyIHN1cHBvcnRlZE1vZGVz
ID0gewogICAgICAgICAgICAgImphdmFzY3JpcHQiOiB0cnVlLAogICAgICAgICAgICAgImNzcyI6
IHRydWUsCiAgICAgICAgIH07CiAKICAgICAgICAgdmFyIG1vZGUgPSB0aGlzLl9jb2RlTWlycm9y
LmdldE1vZGUoKTsKICAgICAgICAgcmV0dXJuIG1vZGUubmFtZSBpbiBzdXBwb3J0ZWRNb2RlczsK
LSAgICB9LAorICAgIH0KIAotICAgIGNhbkJlRm9ybWF0dGVkOiBmdW5jdGlvbigpCisgICAgY2Fu
QmVGb3JtYXR0ZWQoKQogICAgIHsKICAgICAgICAgLy8gQ2FuIGJlIG92ZXJyaWRlbiBieSBzdWJj
bGFzc2VzLgogICAgICAgICByZXR1cm4gdGhpcy5oYXNGb3JtYXR0ZXIoKTsKLSAgICB9LAorICAg
IH0KIAotICAgIGNhblNob3dUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBjYW5TaG93
VHlwZUFubm90YXRpb25zKCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAor
ICAgIH0KIAogICAgIGdldCBzZWxlY3RlZFRleHRSYW5nZSgpCiAgICAgewogICAgICAgICB2YXIg
c3RhcnQgPSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcih0cnVlKTsKICAgICAgICAgdmFyIGVu
ZCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHRo
aXMuX3RleHRSYW5nZUZyb21Db2RlTWlycm9yUG9zaXRpb24oc3RhcnQsIGVuZCk7Ci0gICAgfSwK
KyAgICB9CiAKICAgICBzZXQgc2VsZWN0ZWRUZXh0UmFuZ2UodGV4dFJhbmdlKQogICAgIHsKICAg
ICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fY29kZU1pcnJvclBvc2l0aW9uRnJvbVRleHRSYW5n
ZSh0ZXh0UmFuZ2UpOwogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldFNlbGVjdGlvbihwb3Np
dGlvbi5zdGFydCwgcG9zaXRpb24uZW5kKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBtaW1l
VHlwZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbWltZVR5cGU7Ci0gICAgfSwKKyAg
ICB9CiAKICAgICBzZXQgbWltZVR5cGUobmV3TUlNRVR5cGUpCiAgICAgewpAQCAtMjMzLDEyICsy
MDgsMTIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgICAg
IHRoaXMuX21pbWVUeXBlID0gbmV3TUlNRVR5cGU7CiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iu
c2V0T3B0aW9uKCJtb2RlIiwgbmV3TUlNRVR5cGUpOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0
IGV4ZWN1dGlvbkxpbmVOdW1iZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1
dGlvbkxpbmVOdW1iZXI7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgZXhlY3V0aW9uTGluZU51
bWJlcihsaW5lTnVtYmVyKQogICAgIHsKQEAgLTI1Miw0NyArMjI3LDQ3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gU3RpbGwgZGlzcGF0Y2ggdGhl
IGV2ZW50IGV2ZW4gaWYgdGhlIG51bWJlciBkaWRuJ3QgY2hhbmdlLiBUaGUgZXhlY3V0aW9uIHN0
YXRlIHN0aWxsCiAgICAgICAgIC8vIGNvdWxkIGhhdmUgY2hhbmdlZCAoZS5nLiBjb250aW51aW5n
IGluIGEgbG9vcCB3aXRoIGEgYnJlYWtwb2ludCBpbnNpZGUpLgogICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5FdmVudC5FeGVjdXRp
b25MaW5lTnVtYmVyRGlkQ2hhbmdlKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBleGVjdXRp
b25Db2x1bW5OdW1iZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGlvbkNv
bHVtbk51bWJlcjsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBleGVjdXRpb25Db2x1bW5OdW1i
ZXIoY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29sdW1uTnVt
YmVyID0gY29sdW1uTnVtYmVyOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGZvcm1hdHRlclNv
dXJjZU1hcCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFw
OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHRva2VuVHJhY2tpbmdDb250cm9sbGVyKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLl90b2tlblRyYWNraW5nQ29udHJvbGxlcjsKLSAgICB9
LAorICAgIH0KIAogICAgIGdldCBkZWxlZ2F0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhp
cy5fZGVsZWdhdGU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgZGVsZWdhdGUobmV3RGVsZWdh
dGUpCiAgICAgewogICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IG5ld0RlbGVnYXRlIHx8IG51bGw7
Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgbnVtYmVyT2ZTZWFyY2hSZXN1bHRzKCkKICAgICB7
CiAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aDsKLSAgICB9LAorICAg
IH0KIAogICAgIGdldCBjdXJyZW50U2VhcmNoUXVlcnkoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX3NlYXJjaFF1ZXJ5OwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IGF1dG9tYXRpY2Fs
bHlSZXZlYWxGaXJzdFNlYXJjaFJlc3VsdChyZXZlYWwpCiAgICAgewpAQCAtMzAzLDkgKzI3OCw5
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlm
ICh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPT09IC0xKQogICAgICAgICAgICAgICAg
IHRoaXMuX3JldmVhbEZpcnN0U2VhcmNoUmVzdWx0QWZ0ZXJDdXJzb3IoKTsKICAgICAgICAgfQot
ICAgIH0sCisgICAgfQogCi0gICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnkpCisgICAg
cGVyZm9ybVNlYXJjaChxdWVyeSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9zZWFyY2hRdWVy
eSA9PT0gcXVlcnkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNjcsOSArMzQyLDkgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgIC8vIFN0YXJ0IHRo
ZSBzZWFyY2guCiAgICAgICAgIGJvdW5kQmF0Y2hTZWFyY2goKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIGFkZFNlYXJjaFJlc3VsdHM6IGZ1bmN0aW9uKHRleHRSYW5nZXMpCisgICAgYWRkU2VhcmNo
UmVzdWx0cyh0ZXh0UmFuZ2VzKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGV4dFJh
bmdlcyk7CiAgICAgICAgIGlmICghdGV4dFJhbmdlcyB8fCAhdGV4dFJhbmdlcy5sZW5ndGgpCkBA
IC0zOTEsOSArMzY2LDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vcGVyYXRpb24obWFya1Jhbmdl
cy5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIHNlYXJjaENsZWFyZWQ6IGZ1bmN0
aW9uKCkKKyAgICBzZWFyY2hDbGVhcmVkKCkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGNsZWFy
UmVzdWx0cygpIHsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VhcmNo
UmVzdWx0cy5sZW5ndGg7ICsraSkKQEAgLTQwNSwxNyArMzgwLDE3IEBAIFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc2VhcmNoUXVlcnkgPSBudWxs
OwogICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107CiAgICAgICAgIHRoaXMuX2N1cnJl
bnRTZWFyY2hSZXN1bHRJbmRleCA9IC0xOwotICAgIH0sCisgICAgfQogCi0gICAgc2VhcmNoUXVl
cnlXaXRoU2VsZWN0aW9uOiBmdW5jdGlvbigpCisgICAgc2VhcmNoUXVlcnlXaXRoU2VsZWN0aW9u
KCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fY29kZU1pcnJvci5zb21ldGhpbmdTZWxlY3Rl
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAgcmV0dXJuIHRoaXMuX2Nv
ZGVNaXJyb3IuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXZlYWxQcmV2
aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oY2hhbmdlRm9jdXMpCisgICAgcmV2ZWFsUHJldmlv
dXNTZWFyY2hSZXN1bHQoY2hhbmdlRm9jdXMpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3Nl
YXJjaFJlc3VsdHMubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDMxLDkgKzQwNiw5
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRo
aXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3Ro
IC0gMTsKIAogICAgICAgICB0aGlzLl9yZXZlYWxTZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNoUmVz
dWx0c1t0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXhdLCBjaGFuZ2VGb2N1cywgLTEpOwot
ICAgIH0sCisgICAgfQogCi0gICAgcmV2ZWFsTmV4dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oY2hh
bmdlRm9jdXMpCisgICAgcmV2ZWFsTmV4dFNlYXJjaFJlc3VsdChjaGFuZ2VGb2N1cykKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC00NDksMjUgKzQyNCwyNSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAw
OwogCiAgICAgICAgIHRoaXMuX3JldmVhbFNlYXJjaFJlc3VsdCh0aGlzLl9zZWFyY2hSZXN1bHRz
W3RoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleF0sIGNoYW5nZUZvY3VzLCAxKTsKLSAgICB9
LAorICAgIH0KIAotICAgIGxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgbGluZShsaW5l
TnVtYmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuZ2V0TGluZShs
aW5lTnVtYmVyKTsKLSAgICB9LAorICAgIH0KIAotICAgIGdldFRleHRJblJhbmdlOiBmdW5jdGlv
bihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikKKyAgICBnZXRUZXh0SW5SYW5nZShzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWly
cm9yLmdldFJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKLSAgICB9LAorICAgIH0K
IAotICAgIGFkZFN0eWxlVG9UZXh0UmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uLCBzdHlsZUNsYXNzTmFtZSkKKyAgICBhZGRTdHlsZVRvVGV4dFJhbmdlKHN0YXJ0UG9z
aXRpb24sIGVuZFBvc2l0aW9uLCBzdHlsZUNsYXNzTmFtZSkKICAgICB7CiAgICAgICAgIGVuZFBv
c2l0aW9uLmNoICs9IDE7CiAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLmdldERvYygp
Lm1hcmtUZXh0KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB7Y2xhc3NOYW1lOiBzdHlsZUNs
YXNzTmFtZSwgaW5jbHVzaXZlTGVmdDogdHJ1ZSwgaW5jbHVzaXZlUmlnaHQ6IHRydWV9KTsKLSAg
ICB9LAorICAgIH0KIAotICAgIHJldmVhbFBvc2l0aW9uOiBmdW5jdGlvbihwb3NpdGlvbiwgdGV4
dFJhbmdlVG9TZWxlY3QsIGZvcmNlVW5mb3JtYXR0ZWQsIG5vSGlnaGxpZ2h0KQorICAgIHJldmVh
bFBvc2l0aW9uKHBvc2l0aW9uLCB0ZXh0UmFuZ2VUb1NlbGVjdCwgZm9yY2VVbmZvcm1hdHRlZCwg
bm9IaWdobGlnaHQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChwb3NpdGlvbiA9PT0g
dW5kZWZpbmVkIHx8IHBvc2l0aW9uIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVQ
b3NpdGlvbiwgInJldmVhbFBvc2l0aW9uIGNhbGxlZCB3aXRob3V0IGEgU291cmNlQ29kZVBvc2l0
aW9uIik7CiAgICAgICAgIGlmICghKHBvc2l0aW9uIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVQb3NpdGlvbikpCkBAIC01MjQsMTQgKzQ5OSwxNCBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9jb2RlTWly
cm9yLm9wZXJhdGlvbihyZXZlYWxBbmRIaWdobGlnaHRMaW5lLmJpbmQodGhpcykpOwotICAgIH0s
CisgICAgfQogCi0gICAgdXBkYXRlTGF5b3V0OiBmdW5jdGlvbihmb3JjZSkKKyAgICB1cGRhdGVM
YXlvdXQoZm9yY2UpCiAgICAgewogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnJlZnJlc2goKTsK
LSAgICB9LAorICAgIH0KIAotICAgIHNob3duOiBmdW5jdGlvbigpCisgICAgc2hvd24oKQogICAg
IHsKICAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHRydWU7CiAKQEAgLTU0MiwxNCArNTE3LDE0IEBA
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gVGhpcyBu
ZWVkcyB0byBiZSBkb25lIGFzIGEgc2VwYXJhdGUgb3BlcmF0aW9uIGZyb20gdGhlIHJlZnJlc2gK
ICAgICAgICAgLy8gc28gdGhhdCB0aGUgc2Nyb2xsSW5mbyBjb29yZGluYXRlcyBhcmUgY29ycmVj
dC4KICAgICAgICAgdGhpcy5fcmV2ZWFsUGVuZGluZ1Bvc2l0aW9uSWZQb3NzaWJsZSgpOwotICAg
IH0sCisgICAgfQogCi0gICAgaGlkZGVuOiBmdW5jdGlvbigpCisgICAgaGlkZGVuKCkKICAgICB7
CiAgICAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTsKLSAgICB9LAorICAgIH0KIAotICAgIHNl
dEJyZWFrcG9pbnRJbmZvRm9yTGluZUFuZENvbHVtbjogZnVuY3Rpb24obGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBicmVha3BvaW50SW5mbykKKyAgICBzZXRCcmVha3BvaW50SW5mb0ZvckxpbmVB
bmRDb2x1bW4obGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBicmVha3BvaW50SW5mbykKICAgICB7
CiAgICAgICAgIGlmICh0aGlzLl9pZ25vcmVTZXRCcmVha3BvaW50SW5mb0NhbGxzKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtNTU4LDkgKzUzMyw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb0xpbmVBbmRD
b2x1bW5XaXRoSW5mbyhsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGJyZWFrcG9pbnRJbmZvKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludEZyb21MaW5l
QW5kQ29sdW1uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICB1cGRhdGVCcmVha3BvaW50TGluZUFuZENvbHVtbjogZnVuY3Rpb24ob2xkTGluZU51bWJlciwg
b2xkQ29sdW1uTnVtYmVyLCBuZXdMaW5lTnVtYmVyLCBuZXdDb2x1bW5OdW1iZXIpCisgICAgdXBk
YXRlQnJlYWtwb2ludExpbmVBbmRDb2x1bW4ob2xkTGluZU51bWJlciwgb2xkQ29sdW1uTnVtYmVy
LCBuZXdMaW5lTnVtYmVyLCBuZXdDb2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLl9icmVha3BvaW50c1tvbGRMaW5lTnVtYmVyXSk7CiAgICAgICAgIGlmICgh
dGhpcy5fYnJlYWtwb2ludHNbb2xkTGluZU51bWJlcl0pCkBAIC01NzMsMTggKzU0OCwxOCBAQCBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBicmVha3Bv
aW50SW5mbyA9IHRoaXMuX2JyZWFrcG9pbnRzW29sZExpbmVOdW1iZXJdW29sZENvbHVtbk51bWJl
cl07CiAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tTGluZUFuZENvbHVtbihvbGRM
aW5lTnVtYmVyLCBvbGRDb2x1bW5OdW1iZXIpOwogICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50
VG9MaW5lQW5kQ29sdW1uV2l0aEluZm8obmV3TGluZU51bWJlciwgbmV3Q29sdW1uTnVtYmVyLCBi
cmVha3BvaW50SW5mbyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBhZGRTdHlsZUNsYXNzVG9MaW5l
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBzdHlsZUNsYXNzTmFtZSkKKyAgICBhZGRTdHlsZUNsYXNz
VG9MaW5lKGxpbmVOdW1iZXIsIHN0eWxlQ2xhc3NOYW1lKQogICAgIHsKICAgICAgICAgdmFyIGxp
bmVIYW5kbGUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmVIYW5kbGUobGluZU51bWJlcik7CiAg
ICAgICAgIGlmICghbGluZUhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiBudWxsOwogCiAgICAg
ICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLmFkZExpbmVDbGFzcyhsaW5lSGFuZGxlLCAid3Jh
cCIsIHN0eWxlQ2xhc3NOYW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlbW92ZVN0eWxlQ2xh
c3NGcm9tTGluZTogZnVuY3Rpb24obGluZU51bWJlciwgc3R5bGVDbGFzc05hbWUpCisgICAgcmVt
b3ZlU3R5bGVDbGFzc0Zyb21MaW5lKGxpbmVOdW1iZXIsIHN0eWxlQ2xhc3NOYW1lKQogICAgIHsK
ICAgICAgICAgdmFyIGxpbmVIYW5kbGUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmVIYW5kbGUo
bGluZU51bWJlcik7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGxpbmVIYW5kbGUpOwpAQCAtNTky
LDkgKzU2Nyw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHJldHVybiBudWxsOwogCiAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLnJl
bW92ZUxpbmVDbGFzcyhsaW5lSGFuZGxlLCAid3JhcCIsIHN0eWxlQ2xhc3NOYW1lKTsKLSAgICB9
LAorICAgIH0KIAotICAgIHRvZ2dsZVN0eWxlQ2xhc3NGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVt
YmVyLCBzdHlsZUNsYXNzTmFtZSkKKyAgICB0b2dnbGVTdHlsZUNsYXNzRm9yTGluZShsaW5lTnVt
YmVyLCBzdHlsZUNsYXNzTmFtZSkKICAgICB7CiAgICAgICAgIHZhciBsaW5lSGFuZGxlID0gdGhp
cy5fY29kZU1pcnJvci5nZXRMaW5lSGFuZGxlKGxpbmVOdW1iZXIpOwogICAgICAgICBjb25zb2xl
LmFzc2VydChsaW5lSGFuZGxlKTsKQEAgLTYwMiw5ICs1NzcsOSBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IudG9nZ2xlTGluZUNsYXNzKGxpbmVIYW5kbGUsICJ3
cmFwIiwgc3R5bGVDbGFzc05hbWUpOwotICAgIH0sCisgICAgfQogCi0gICAgY3JlYXRlV2lkZ2V0
Rm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICBjcmVhdGVXaWRnZXRGb3JMaW5lKGxp
bmVOdW1iZXIpCiAgICAgewogICAgICAgICB2YXIgbGluZUhhbmRsZSA9IHRoaXMuX2NvZGVNaXJy
b3IuZ2V0TGluZUhhbmRsZShsaW5lTnVtYmVyKTsKICAgICAgICAgaWYgKCFsaW5lSGFuZGxlKQpA
QCAtNjEzLDUzICs1ODgsNTMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0g
ewogICAgICAgICB2YXIgd2lkZ2V0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwogICAgICAgICB2YXIgbGluZVdpZGdldCA9IHRoaXMuX2NvZGVNaXJyb3IuYWRkTGluZVdp
ZGdldChsaW5lSGFuZGxlLCB3aWRnZXRFbGVtZW50LCB7Y292ZXJHdXR0ZXI6IGZhbHNlLCBub0hT
Y3JvbGw6IHRydWUsIGhhbmRsZU1vdXNlRXZlbnRzOiB0cnVlfSk7CiAgICAgICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLkxpbmVXaWRnZXQobGluZVdpZGdldCwgd2lkZ2V0RWxlbWVudCk7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICBnZXQgbGluZUNvdW50KCkKICAgICB7CiAgICAgICAgIHJldHVy
biB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3VudCgpOwotICAgIH0sCisgICAgfQogCi0gICAgZm9j
dXM6IGZ1bmN0aW9uKCkKKyAgICBmb2N1cygpCiAgICAgewogICAgICAgICB0aGlzLl9jb2RlTWly
cm9yLmZvY3VzKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjb250ZW50RGlkQ2hhbmdlOiBmdW5j
dGlvbihyZXBsYWNlZFJhbmdlcywgbmV3UmFuZ2VzKQorICAgIGNvbnRlbnREaWRDaGFuZ2UocmVw
bGFjZWRSYW5nZXMsIG5ld1JhbmdlcykKICAgICB7CiAgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5
IHN1YmNsYXNzZXMuCi0gICAgfSwKKyAgICB9CiAKLSAgICByZWN0c0ZvclJhbmdlOiBmdW5jdGlv
bihyYW5nZSkKKyAgICByZWN0c0ZvclJhbmdlKHJhbmdlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX2NvZGVNaXJyb3IucmVjdHNGb3JSYW5nZShyYW5nZSk7Ci0gICAgfSwKKyAgICB9CiAK
ICAgICBnZXQgbWFya2VycygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJv
ci5nZXRBbGxNYXJrcygpLm1hcChmdW5jdGlvbihjb2RlTWlycm9yVGV4dE1hcmtlcikgewogICAg
ICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5UZXh0TWFya2VyLnRleHRNYXJrZXJGb3JDb2Rl
TWlycm9yVGV4dE1hcmtlcihjb2RlTWlycm9yVGV4dE1hcmtlcik7CiAgICAgICAgIH0pOwotICAg
IH0sCisgICAgfQogCi0gICAgbWFya2Vyc0F0UG9zaXRpb246IGZ1bmN0aW9uKHBvc2l0aW9uKQor
ICAgIG1hcmtlcnNBdFBvc2l0aW9uKHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRo
aXMuX2NvZGVNaXJyb3IuZmluZE1hcmtzQXQocG9zaXRpb24pLm1hcChmdW5jdGlvbihjb2RlTWly
cm9yVGV4dE1hcmtlcikgewogICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5UZXh0TWFy
a2VyLnRleHRNYXJrZXJGb3JDb2RlTWlycm9yVGV4dE1hcmtlcihjb2RlTWlycm9yVGV4dE1hcmtl
cik7CiAgICAgICAgIH0pOwotICAgIH0sCisgICAgfQogCi0gICAgY3JlYXRlQ29sb3JNYXJrZXJz
OiBmdW5jdGlvbihyYW5nZSkKKyAgICBjcmVhdGVDb2xvck1hcmtlcnMocmFuZ2UpCiAgICAgewog
ICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5jcmVhdGVDb2xvck1hcmtlcnMocmFuZ2Up
OwotICAgIH0sCisgICAgfQogCi0gICAgY3JlYXRlR3JhZGllbnRNYXJrZXJzOiBmdW5jdGlvbihy
YW5nZSkKKyAgICBjcmVhdGVHcmFkaWVudE1hcmtlcnMocmFuZ2UpCiAgICAgewogICAgICAgICBy
ZXR1cm4gdGhpcy5fY29kZU1pcnJvci5jcmVhdGVHcmFkaWVudE1hcmtlcnMocmFuZ2UpOwotICAg
IH0sCisgICAgfQogCi0gICAgZWRpdGluZ0NvbnRyb2xsZXJGb3JNYXJrZXI6IGZ1bmN0aW9uKGVk
aXRhYmxlTWFya2VyKQorICAgIGVkaXRpbmdDb250cm9sbGVyRm9yTWFya2VyKGVkaXRhYmxlTWFy
a2VyKQogICAgIHsKICAgICAgICAgc3dpdGNoIChlZGl0YWJsZU1hcmtlci50eXBlKSB7CiAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlRleHRNYXJrZXIuVHlwZS5Db2xvcjoKQEAgLTY2OSw5ICs2
NDQsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRp
dGluZ0NvbnRyb2xsZXIodGhpcy5fY29kZU1pcnJvciwgZWRpdGFibGVNYXJrZXIpOwogICAgICAg
ICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICB2aXNpYmxlUmFuZ2VPZmZzZXRzOiBmdW5jdGlvbigp
CisgICAgdmlzaWJsZVJhbmdlT2Zmc2V0cygpCiAgICAgewogICAgICAgICB2YXIgc3RhcnRPZmZz
ZXQgPSBudWxsOwogICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gbnVsbDsKQEAgLTY4Niw5ICs2NjEs
OSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4ge3N0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9OwotICAgIH0sCisgICAgfQog
Ci0gICAgb3JpZ2luYWxPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbjogZnVuY3Rpb24ob2Zmc2V0KQor
ICAgIG9yaWdpbmFsT2Zmc2V0VG9DdXJyZW50UG9zaXRpb24ob2Zmc2V0KQogICAgIHsKICAgICAg
ICAgdmFyIHBvc2l0aW9uID0gbnVsbDsKICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlclNvdXJj
ZU1hcCkgewpAQCAtNjk4LDE0ICs2NzMsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJv
dG90eXBlID0gewogICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLl9jb2RlTWlycm9yLmdldERv
YygpLnBvc0Zyb21JbmRleChvZmZzZXQpOwogCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAg
ICB9LAorICAgIH0KIAotICAgIGN1cnJlbnRPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbjogZnVuY3Rp
b24ob2Zmc2V0KQorICAgIGN1cnJlbnRPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbihvZmZzZXQpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5nZXREb2MoKS5wb3NGcm9tSW5k
ZXgob2Zmc2V0KTsKLSAgICB9LAorICAgIH0KIAotICAgIGN1cnJlbnRQb3NpdGlvblRvT3JpZ2lu
YWxPZmZzZXQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIGN1cnJlbnRQb3NpdGlvblRvT3JpZ2lu
YWxPZmZzZXQocG9zaXRpb24pCiAgICAgewogICAgICAgICB2YXIgb2Zmc2V0ID0gbnVsbDsKICAg
ICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkKQEAgLTcxNCwzNiArNjg5LDM2IEBA
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIG9mZnNl
dCA9IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5k
ZXhGcm9tUG9zKHBvc2l0aW9uKTsKIAogICAgICAgICByZXR1cm4gb2Zmc2V0OwotICAgIH0sCisg
ICAgfQogCi0gICAgY3VycmVudFBvc2l0aW9uVG9DdXJyZW50T2Zmc2V0OiBmdW5jdGlvbihwb3Np
dGlvbikKKyAgICBjdXJyZW50UG9zaXRpb25Ub0N1cnJlbnRPZmZzZXQocG9zaXRpb24pCiAgICAg
ewogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5nZXREb2MoKS5pbmRleEZyb21Qb3Mo
cG9zaXRpb24pOwotICAgIH0sCisgICAgfQogCi0gICAgc2V0SW5saW5lV2lkZ2V0OiBmdW5jdGlv
bihwb3NpdGlvbiwgaW5saW5lRWxlbWVudCkKKyAgICBzZXRJbmxpbmVXaWRnZXQocG9zaXRpb24s
IGlubGluZUVsZW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5z
ZXRVbmlxdWVCb29rbWFyayhwb3NpdGlvbiwge3dpZGdldDogaW5saW5lRWxlbWVudH0pOwotICAg
IH0sCisgICAgfQogCi0gICAgYWRkU2Nyb2xsSGFuZGxlcjogZnVuY3Rpb24oaGFuZGxlcikKKyAg
ICBhZGRTY3JvbGxIYW5kbGVyKGhhbmRsZXIpCiAgICAgewogICAgICAgICB0aGlzLl9jb2RlTWly
cm9yLm9uKCJzY3JvbGwiLCBoYW5kbGVyKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlbW92ZVNj
cm9sbEhhbmRsZXI6IGZ1bmN0aW9uKGhhbmRsZXIpCisgICAgcmVtb3ZlU2Nyb2xsSGFuZGxlciho
YW5kbGVyKQogICAgIHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vZmYoInNjcm9sbCIsIGhh
bmRsZXIpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBwcmV0dHlQ
cmludDogZnVuY3Rpb24ocHJldHR5KQorICAgIHByZXR0eVByaW50KHByZXR0eSkKICAgICB7CiAg
ICAgICAgIGZ1bmN0aW9uIHByZXR0eVByaW50QW5kVXBkYXRlRWRpdG9yKCkKICAgICAgICAgewot
ICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB7bGluZTogMCwgY2g6IDB9OwotICAgICAgICAgICAg
Y29uc3QgZW5kID0ge2xpbmU6IHRoaXMuX2NvZGVNaXJyb3IubGluZUNvdW50KCkgLSAxfTsKKyAg
ICAgICAgICAgIHZhciBzdGFydCA9IHtsaW5lOiAwLCBjaDogMH07CisgICAgICAgICAgICB2YXIg
ZW5kID0ge2xpbmU6IHRoaXMuX2NvZGVNaXJyb3IubGluZUNvdW50KCkgLSAxfTsKIAogICAgICAg
ICAgICAgdmFyIG9sZFNlbGVjdGlvbkFuY2hvciA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29y
KCJhbmNob3IiKTsKICAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25IZWFkID0gdGhpcy5fY29k
ZU1pcnJvci5nZXRDdXJzb3IoImhlYWQiKTsKQEAgLTc1Miw3ICs3MjcsNyBAQCBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIGlmIChwcmV0dHkpIHsK
ICAgICAgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTA1OTM5NDg+IFByb3ZpZGUgYSB3
YXkgdG8gY2hhbmdlIHRoZSB0YWIgd2lkdGggaW4gdGhlIFdlYiBJbnNwZWN0b3IKLSAgICAgICAg
ICAgICAgICBjb25zdCBpbmRlbnRTdHJpbmcgPSAiICAgICI7CisgICAgICAgICAgICAgICAgdmFy
IGluZGVudFN0cmluZyA9ICIgICAgIjsKICAgICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxMaW5l
RW5kaW5ncyA9IFtdOwogICAgICAgICAgICAgICAgIHZhciBmb3JtYXR0ZWRMaW5lRW5kaW5ncyA9
IFtdOwogICAgICAgICAgICAgICAgIHZhciBtYXBwaW5nID0ge29yaWdpbmFsOiBbMF0sIGZvcm1h
dHRlZDogWzBdfTsKQEAgLTgzNiwxNiArODExLDE2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3Bl
cmF0aW9uKHByZXR0eVByaW50QW5kVXBkYXRlRWRpdG9yLmJpbmQodGhpcykpOwotICAgIH0sCisg
ICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgaGFzRWRpdHM6IGZ1bmN0aW9uKCkKKyAgICBo
YXNFZGl0cygpCiAgICAgewogICAgICAgICByZXR1cm4gIXRoaXMuX2NvZGVNaXJyb3IuaXNDbGVh
bigpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NvbnRlbnRDaGFuZ2VkOiBmdW5jdGlvbihjb2Rl
TWlycm9yLCBjaGFuZ2UpCisgICAgX2NvbnRlbnRDaGFuZ2VkKGNvZGVNaXJyb3IsIGNoYW5nZSkK
ICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29udGVudERpZENoYW5n
ZUV2ZW50ID4gMCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTg4MCwyNiArODU1LDI2IEBAIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkV2
ZW50LkNvbnRlbnREaWRDaGFuZ2UpOwotICAgIH0sCisgICAgfQogCi0gICAgX3RleHRSYW5nZUZy
b21Db2RlTWlycm9yUG9zaXRpb246IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpCisgICAgX3RleHRSYW5n
ZUZyb21Db2RlTWlycm9yUG9zaXRpb24oc3RhcnQsIGVuZCkKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHN0YXJ0KTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZW5kKTsKIAogICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY2gs
IGVuZC5saW5lLCBlbmQuY2gpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NvZGVNaXJyb3JQb3Np
dGlvbkZyb21UZXh0UmFuZ2U6IGZ1bmN0aW9uKHRleHRSYW5nZSkKKyAgICBfY29kZU1pcnJvclBv
c2l0aW9uRnJvbVRleHRSYW5nZSh0ZXh0UmFuZ2UpCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydCh0ZXh0UmFuZ2UpOwogCiAgICAgICAgIHZhciBzdGFydCA9IHtsaW5lOiB0ZXh0UmFuZ2Uu
c3RhcnRMaW5lLCBjaDogdGV4dFJhbmdlLnN0YXJ0Q29sdW1ufTsKICAgICAgICAgdmFyIGVuZCA9
IHtsaW5lOiB0ZXh0UmFuZ2UuZW5kTGluZSwgY2g6IHRleHRSYW5nZS5lbmRDb2x1bW59OwogICAg
ICAgICByZXR1cm4ge3N0YXJ0LCBlbmR9OwotICAgIH0sCisgICAgfQogCi0gICAgX3JldmVhbFBl
bmRpbmdQb3NpdGlvbklmUG9zc2libGU6IGZ1bmN0aW9uKCkKKyAgICBfcmV2ZWFsUGVuZGluZ1Bv
c2l0aW9uSWZQb3NzaWJsZSgpCiAgICAgewogICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdl
IGRvbid0IGhhdmUgYSBwZW5kaW5nIHBvc2l0aW9uLgogICAgICAgICBpZiAoIXRoaXMuX3Bvc2l0
aW9uVG9SZXZlYWwpCkBAIC05MTAsOSArODg1LDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMucmV2ZWFs
UG9zaXRpb24odGhpcy5fcG9zaXRpb25Ub1JldmVhbCwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Qs
IHRoaXMuX2ZvcmNlVW5mb3JtYXR0ZWQpOwotICAgIH0sCisgICAgfQogCi0gICAgX3JldmVhbFNl
YXJjaFJlc3VsdDogZnVuY3Rpb24ocmVzdWx0LCBjaGFuZ2VGb2N1cywgZGlyZWN0aW9uSW5DYXNl
T2ZSZXZhbGlkYXRpb24pCisgICAgX3JldmVhbFNlYXJjaFJlc3VsdChyZXN1bHQsIGNoYW5nZUZv
Y3VzLCBkaXJlY3Rpb25JbkNhc2VPZlJldmFsaWRhdGlvbikKICAgICB7CiAgICAgICAgIHZhciBw
b3NpdGlvbiA9IHJlc3VsdC5maW5kKCk7CiAKQEAgLTk3Miw5ICs5NDcsOSBAQCBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gTGlzdGVuIGZvciB0aGUg
ZW5kIG9mIHRoZSBhbmltYXRpb24gc28gd2UgY2FuIHJlbW92ZSB0aGUgZWxlbWVudC4KICAgICAg
ICAgdGhpcy5fYm91bmN5SGlnaGxpZ2h0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRB
bmltYXRpb25FbmQiLCBhbmltYXRpb25FbmRlZC5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9iaW5hcnlTZWFyY2hJbnNlcnRpb25JbmRleEluU2VhcmNoUmVzdWx0czogZnVuY3Rp
b24ob2JqZWN0LCBjb21wYXJhdG9yKQorICAgIF9iaW5hcnlTZWFyY2hJbnNlcnRpb25JbmRleElu
U2VhcmNoUmVzdWx0cyhvYmplY3QsIGNvbXBhcmF0b3IpCiAgICAgewogICAgICAgICAvLyBJdCBp
cyBwb3NzaWJsZSB0aGF0IG1hcmtlcnMgaW4gdGhlIHNlYXJjaCByZXN1bHRzIGFycmF5IG1heSBo
YXZlIGJlZW4gZGVsZXRlZC4KICAgICAgICAgLy8gSW4gdGhvc2UgY2FzZXMgdGhlIGNvbXBhcmF0
b3Igd2lsbCByZXR1cm4gIm51bGwiIGFuZCB3ZSBpbW1lZGlhdGVseSBzdG9wCkBAIC05OTgsOSAr
OTczLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIGZpcnN0IC0gMTsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZXZl
YWxGaXJzdFNlYXJjaFJlc3VsdEJlZm9yZUN1cnNvcjogZnVuY3Rpb24oY2hhbmdlRm9jdXMpCisg
ICAgX3JldmVhbEZpcnN0U2VhcmNoUmVzdWx0QmVmb3JlQ3Vyc29yKGNoYW5nZUZvY3VzKQogICAg
IHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpOwog
CkBAIC0xMDI1LDkgKzEwMDAsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gaW5kZXg7CiAg
ICAgICAgIHRoaXMuX3JldmVhbFNlYXJjaFJlc3VsdCh0aGlzLl9zZWFyY2hSZXN1bHRzW3RoaXMu
X2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleF0sIGNoYW5nZUZvY3VzKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9yZXZlYWxGaXJzdFNlYXJjaFJlc3VsdEFmdGVyQ3Vyc29yOiBmdW5jdGlvbihjaGFu
Z2VGb2N1cykKKyAgICBfcmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHRBZnRlckN1cnNvcihjaGFuZ2VG
b2N1cykKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3NlYXJjaFJlc3VsdHMu
bGVuZ3RoKTsKIApAQCAtMTA1Nyw5ICsxMDMyLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9
IGluZGV4OwogICAgICAgICB0aGlzLl9yZXZlYWxTZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNoUmVz
dWx0c1t0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXhdLCBjaGFuZ2VGb2N1cyk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfY3Vyc29yRG9lc05vdE1hdGNoTGFzdFJldmVhbGVkU2VhcmNoUmVz
dWx0OiBmdW5jdGlvbigpCisgICAgX2N1cnNvckRvZXNOb3RNYXRjaExhc3RSZXZlYWxlZFNlYXJj
aFJlc3VsdCgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9jdXJyZW50U2Vh
cmNoUmVzdWx0SW5kZXggIT09IC0xKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2Vh
cmNoUmVzdWx0cy5sZW5ndGgpOwpAQCAtMTA3Miw5ICsxMDQ3LDkgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB2YXIgbGFzdFJldmVhbGVkU2VhcmNoUmVz
dWx0UG9zaXRpb24gPSBsYXN0UmV2ZWFsZWRTZWFyY2hSZXN1bHRNYXJrZXIuZnJvbTsKIAogICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmNvbXBhcmVDb2RlTWlycm9yUG9zaXRpb25zKGN1cnJl
bnRDdXJzb3JQb3NpdGlvbiwgbGFzdFJldmVhbGVkU2VhcmNoUmVzdWx0UG9zaXRpb24pICE9PSAw
OwotICAgIH0sCisgICAgfQogCi0gICAgX3JldmFsaWRhdGVTZWFyY2hSZXN1bHRzOiBmdW5jdGlv
bihkaXJlY3Rpb24pCisgICAgX3JldmFsaWRhdGVTZWFyY2hSZXN1bHRzKGRpcmVjdGlvbikKICAg
ICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKTsKIApA
QCAtMTA5Nyw5ICsxMDcyLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRoaXMuX3JldmVhbEZpcnN0U2Vh
cmNoUmVzdWx0QmVmb3JlQ3Vyc29yKCk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAg
IF91cGRhdGVFeGVjdXRpb25MaW5lOiBmdW5jdGlvbigpCisgICAgX3VwZGF0ZUV4ZWN1dGlvbkxp
bmUoKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCkKICAgICAgICAgewpAQCAtMTEx
Myw5ICsxMDg4LDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vcGVyYXRpb24odXBkYXRlLmJpbmQo
dGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgX3NldEJyZWFrcG9pbnRTdHlsZXNPbkxpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgX3NldEJyZWFrcG9pbnRTdHlsZXNPbkxpbmUobGlu
ZU51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBjb2x1bW5CcmVha3BvaW50cyA9IHRoaXMuX2Jy
ZWFrcG9pbnRzW2xpbmVOdW1iZXJdOwogICAgICAgICBjb25zb2xlLmFzc2VydChjb2x1bW5CcmVh
a3BvaW50cyk7CkBAIC0xMTcwLDE4ICsxMTQ1LDE4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3Bl
cmF0aW9uKHVwZGF0ZVN0eWxlcy5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9h
ZGRCcmVha3BvaW50VG9MaW5lQW5kQ29sdW1uV2l0aEluZm86IGZ1bmN0aW9uKGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgYnJlYWtwb2ludEluZm8pCisgICAgX2FkZEJyZWFrcG9pbnRUb0xpbmVB
bmRDb2x1bW5XaXRoSW5mbyhsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGJyZWFrcG9pbnRJbmZv
KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXSkKICAg
ICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdID0ge307CiAgICAgICAgIHRo
aXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdW2NvbHVtbk51bWJlcl0gPSBicmVha3BvaW50SW5m
bzsKIAogICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50U3R5bGVzT25MaW5lKGxpbmVOdW1iZXIp
OwotICAgIH0sCisgICAgfQogCi0gICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tTGluZUFuZENvbHVt
bjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIF9yZW1vdmVCcmVha3Bv
aW50RnJvbUxpbmVBbmRDb2x1bW4obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAg
ICAgICAgY29uc29sZS5hc3NlcnQoY29sdW1uTnVtYmVyIGluIHRoaXMuX2JyZWFrcG9pbnRzW2xp
bmVOdW1iZXJdKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJd
W2NvbHVtbk51bWJlcl07CkBAIC0xMjA4LDIxICsxMTgzLDIxIEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2NvZGVNaXJy
b3Iub3BlcmF0aW9uKHVwZGF0ZVN0eWxlcy5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIF9hbGxDb2x1bW5CcmVha3BvaW50SW5mb0ZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIp
CisgICAgX2FsbENvbHVtbkJyZWFrcG9pbnRJbmZvRm9yTGluZShsaW5lTnVtYmVyKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOwotICAgIH0sCisg
ICAgfQogCi0gICAgX3NldENvbHVtbkJyZWFrcG9pbnRJbmZvRm9yTGluZTogZnVuY3Rpb24obGlu
ZU51bWJlciwgY29sdW1uQnJlYWtwb2ludEluZm8pCisgICAgX3NldENvbHVtbkJyZWFrcG9pbnRJ
bmZvRm9yTGluZShsaW5lTnVtYmVyLCBjb2x1bW5CcmVha3BvaW50SW5mbykKICAgICB7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KGNvbHVtbkJyZWFrcG9pbnRJbmZvKTsKICAgICAgICAgdGhpcy5f
YnJlYWtwb2ludHNbbGluZU51bWJlcl0gPSBjb2x1bW5CcmVha3BvaW50SW5mbzsKICAgICAgICAg
dGhpcy5fc2V0QnJlYWtwb2ludFN0eWxlc09uTGluZShsaW5lTnVtYmVyKTsKLSAgICB9LAorICAg
IH0KIAotICAgIF9ndXR0ZXJNb3VzZURvd246IGZ1bmN0aW9uKGNvZGVNaXJyb3IsIGxpbmVOdW1i
ZXIsIGd1dHRlckVsZW1lbnQsIGV2ZW50KQorICAgIF9ndXR0ZXJNb3VzZURvd24oY29kZU1pcnJv
ciwgbGluZU51bWJlciwgZ3V0dGVyRWxlbWVudCwgZXZlbnQpCiAgICAgewogICAgICAgICBpZiAo
ZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2ZW50LmN0cmxLZXkpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xMjY1LDkgKzEyNDAsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZXNlIGxpc3RlbmVycyBvbiB0aGUgZG9jdW1lbnQg
c28gd2UgY2FuIHRyYWNrIHRoZSBtb3VzZSBpZiBpdCBsZWF2ZXMgdGhlIGd1dHRlci4KICAgICAg
ICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5fZG9jdW1lbnRN
b3VzZU1vdmVkRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CiAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLl9kb2N1bWVudE1vdXNlVXBFdmVudExpc3RlbmVyLCB0
cnVlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9ndXR0ZXJDb250ZXh0TWVudTogZnVuY3Rpb24o
Y29kZU1pcnJvciwgbGluZU51bWJlciwgZ3V0dGVyRWxlbWVudCwgZXZlbnQpCisgICAgX2d1dHRl
ckNvbnRleHRNZW51KGNvZGVNaXJyb3IsIGxpbmVOdW1iZXIsIGd1dHRlckVsZW1lbnQsIGV2ZW50
KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9kZWxl
Z2F0ZS50ZXh0RWRpdG9yR3V0dGVyQ29udGV4dE1lbnUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAg
ICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwpAQCAtMTI3Niw5ICsxMjUxLDkgQEAgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICB0aGlzLl9kZWxl
Z2F0ZS50ZXh0RWRpdG9yR3V0dGVyQ29udGV4dE1lbnUodGhpcywgbGluZU51bWJlciwgMCwgYnJl
YWtwb2ludHMsIGV2ZW50KTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX2RvY3Vt
ZW50TW91c2VNb3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2RvY3VtZW50TW91c2VNb3ZlZChl
dmVudCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCJfbGluZU51bWJlcldpdGhNb3Vz
ZWREb3duQnJlYWtwb2ludCIgaW4gdGhpcyk7CiAgICAgICAgIGlmICghKCJfbGluZU51bWJlcldp
dGhNb3VzZWREb3duQnJlYWtwb2ludCIgaW4gdGhpcykpCkBAIC0xMzMyLDkgKzEzMDcsOSBAQCBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9s
aW5lTnVtYmVyV2l0aERyYWdnZWRCcmVha3BvaW50ID0gbGluZU51bWJlcjsKICAgICAgICAgICAg
IHRoaXMuX2NvbHVtbk51bWJlcldpdGhEcmFnZ2VkQnJlYWtwb2ludCA9IGNvbHVtbk51bWJlcjsK
ICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX2RvY3VtZW50TW91c2VVcDogZnVuY3Rp
b24oZXZlbnQpCisgICAgX2RvY3VtZW50TW91c2VVcChldmVudCkKICAgICB7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCJfbGluZU51bWJlcldpdGhNb3VzZWREb3duQnJlYWtwb2ludCIgaW4gdGhp
cyk7CiAgICAgICAgIGlmICghKCJfbGluZU51bWJlcldpdGhNb3VzZWREb3duQnJlYWtwb2ludCIg
aW4gdGhpcykpCkBAIC0xMzQ1LDkgKzEzMjAsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
bW92ZSIsIHRoaXMuX2RvY3VtZW50TW91c2VNb3ZlZEV2ZW50TGlzdGVuZXIsIHRydWUpOwogICAg
ICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5fZG9jdW1l
bnRNb3VzZVVwRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CiAKLSAgICAgICAgY29uc3QgZGVsZWdhdGVJ
bXBsZW1lbnRzQnJlYWtwb2ludENsaWNrZWQgPSB0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhp
cy5fZGVsZWdhdGUudGV4dEVkaXRvckJyZWFrcG9pbnRDbGlja2VkID09PSAiZnVuY3Rpb24iOwot
ICAgICAgICBjb25zdCBkZWxlZ2F0ZUltcGxlbWVudHNCcmVha3BvaW50UmVtb3ZlZCA9IHRoaXMu
X2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS50ZXh0RWRpdG9yQnJlYWtwb2ludFJl
bW92ZWQgPT09ICJmdW5jdGlvbiI7Ci0gICAgICAgIGNvbnN0IGRlbGVnYXRlSW1wbGVtZW50c0Jy
ZWFrcG9pbnRNb3ZlZCA9IHRoaXMuX2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS50
ZXh0RWRpdG9yQnJlYWtwb2ludE1vdmVkID09PSAiZnVuY3Rpb24iOworICAgICAgICB2YXIgZGVs
ZWdhdGVJbXBsZW1lbnRzQnJlYWtwb2ludENsaWNrZWQgPSB0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBl
b2YgdGhpcy5fZGVsZWdhdGUudGV4dEVkaXRvckJyZWFrcG9pbnRDbGlja2VkID09PSAiZnVuY3Rp
b24iOworICAgICAgICB2YXIgZGVsZWdhdGVJbXBsZW1lbnRzQnJlYWtwb2ludFJlbW92ZWQgPSB0
aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVsZWdhdGUudGV4dEVkaXRvckJyZWFrcG9p
bnRSZW1vdmVkID09PSAiZnVuY3Rpb24iOworICAgICAgICB2YXIgZGVsZWdhdGVJbXBsZW1lbnRz
QnJlYWtwb2ludE1vdmVkID0gdGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRl
LnRleHRFZGl0b3JCcmVha3BvaW50TW92ZWQgPT09ICJmdW5jdGlvbiI7CiAKICAgICAgICAgaWYg
KHRoaXMuX21vdXNlRHJhZ2dlZCkgewogICAgICAgICAgICAgaWYgKCEoIl9saW5lTnVtYmVyV2l0
aERyYWdnZWRCcmVha3BvaW50IiBpbiB0aGlzKSkgewpAQCAtMTM5Myw5ICsxMzY4LDkgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5f
Y29sdW1uTnVtYmVyV2l0aERyYWdnZWRCcmVha3BvaW50OwogICAgICAgICBkZWxldGUgdGhpcy5f
cHJldmlvdXNDb2x1bW5CcmVha3BvaW50SW5mbzsKICAgICAgICAgZGVsZXRlIHRoaXMuX21vdXNl
RHJhZ2dlZDsKLSAgICB9LAorICAgIH0KIAotICAgIF9vcGVuQ2xpY2tlZExpbmtzOiBmdW5jdGlv
bihldmVudCkKKyAgICBfb3BlbkNsaWNrZWRMaW5rcyhldmVudCkKICAgICB7CiAgICAgICAgIC8v
IEdldCB0aGUgcG9zaXRpb24gaW4gdGhlIHRleHQgYW5kIHRoZSB0b2tlbiBhdCB0aGF0IHBvc2l0
aW9uLgogICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0NoYXIo
e2xlZnQ6IGV2ZW50LnBhZ2VYLCB0b3A6IGV2ZW50LnBhZ2VZfSk7CkBAIC0xNDIxLDkgKzEzOTYs
OSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFN0
b3AgcHJvY2Vzc2luZyB0aGUgZXZlbnQuCiAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
CiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIH0sCisgICAgfQogCi0gICAg
X2lzUG9zaXRpb25WaXNpYmxlOiBmdW5jdGlvbihwb3NpdGlvbikKKyAgICBfaXNQb3NpdGlvblZp
c2libGUocG9zaXRpb24pCiAgICAgewogICAgICAgICB2YXIgc2Nyb2xsSW5mbyA9IHRoaXMuX2Nv
ZGVNaXJyb3IuZ2V0U2Nyb2xsSW5mbygpOwogICAgICAgICB2YXIgdmlzaWJsZVJhbmdlU3RhcnQg
PSBzY3JvbGxJbmZvLnRvcDsKQEAgLTE0MzEsOSArMTQwNiw5IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGNvb3JkcyA9IHRoaXMuX2NvZGVNaXJy
b3IuY2hhckNvb3Jkcyhwb3NpdGlvbiwgImxvY2FsIik7CiAKICAgICAgICAgcmV0dXJuIGNvb3Jk
cy50b3AgPj0gdmlzaWJsZVJhbmdlU3RhcnQgJiYgY29vcmRzLmJvdHRvbSA8PSB2aXNpYmxlUmFu
Z2VFbmQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2Nyb2xsSW50b1ZpZXdDZW50ZXJlZDogZnVu
Y3Rpb24ocG9zaXRpb24pCisgICAgX3Njcm9sbEludG9WaWV3Q2VudGVyZWQocG9zaXRpb24pCiAg
ICAgewogICAgICAgICB2YXIgc2Nyb2xsSW5mbyA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0U2Nyb2xs
SW5mbygpOwogICAgICAgICB2YXIgbGluZUhlaWdodCA9IE1hdGguY2VpbCh0aGlzLl9jb2RlTWly
cm9yLmRlZmF1bHRUZXh0SGVpZ2h0KCkpOwpAQCAtMTQ0Miw0ICsxNDE3LDIxIEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90
b3R5cGU7CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5IaWdobGlnaHRlZFN0eWxlQ2xhc3NOYW1l
ID0gImhpZ2hsaWdodGVkIjsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yLlNlYXJjaFJlc3VsdFN0
eWxlQ2xhc3NOYW1lID0gInNlYXJjaC1yZXN1bHQiOworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iu
SGFzQnJlYWtwb2ludFN0eWxlQ2xhc3NOYW1lID0gImhhcy1icmVha3BvaW50IjsKK1dlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yLkJyZWFrcG9pbnRSZXNvbHZlZFN0eWxlQ2xhc3NOYW1lID0gImJyZWFr
cG9pbnQtcmVzb2x2ZWQiOworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuQnJlYWtwb2ludEF1dG9D
b250aW51ZVN0eWxlQ2xhc3NOYW1lID0gImJyZWFrcG9pbnQtYXV0by1jb250aW51ZSI7CitXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvci5CcmVha3BvaW50RGlzYWJsZWRTdHlsZUNsYXNzTmFtZSA9ICJi
cmVha3BvaW50LWRpc2FibGVkIjsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yLk11bHRpcGxlQnJl
YWtwb2ludHNTdHlsZUNsYXNzTmFtZSA9ICJtdWx0aXBsZS1icmVha3BvaW50cyI7CitXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvci5FeGVjdXRpb25MaW5lU3R5bGVDbGFzc05hbWUgPSAiZXhlY3V0aW9u
LWxpbmUiOworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuQm91bmN5SGlnaGxpZ2h0U3R5bGVDbGFz
c05hbWUgPSAiYm91bmN5LWhpZ2hsaWdodCI7CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5OdW1i
ZXJPZkZpbmRzUGVyU2VhcmNoQmF0Y2ggPSAxMDsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkhp
Z2hsaWdodEFuaW1hdGlvbkR1cmF0aW9uID0gMjAwMDsKKworV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3IuRXZlbnQgPSB7CisgICAgRXhlY3V0aW9uTGluZU51bWJlckRpZENoYW5nZTogInRleHQtZWRp
dG9yLWV4ZWN1dGlvbi1saW5lLW51bWJlci1kaWQtY2hhbmdlIiwKKyAgICBOdW1iZXJPZlNlYXJj
aFJlc3VsdHNEaWRDaGFuZ2U6ICJ0ZXh0LWVkaXRvci1udW1iZXItb2Ytc2VhcmNoLXJlc3VsdHMt
ZGlkLWNoYW5nZSIsCisgICAgQ29udGVudERpZENoYW5nZTogInRleHQtZWRpdG9yLWNvbnRlbnQt
ZGlkLWNoYW5nZSIsCisgICAgRm9ybWF0dGluZ0RpZENoYW5nZTogInRleHQtZWRpdG9yLWZvcm1h
dHRpbmctZGlkLWNoYW5nZSIKK307Cg==
</data>
<flag name="review"
          id="274375"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249554</attachid>
            <date>2015-03-26 23:23:59 -0700</date>
            <delta_ts>2015-03-26 23:23:59 -0700</delta_ts>
            <desc>Patch (Ignore Space)</desc>
            <filename>143127-ignore-space.patch</filename>
            <type>text/plain</type>
            <size>74243</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDQ2NzY1NTEuLmVkZjhhODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDE1LTAzLTI2ICBUaW1vdGh5IEhhdGNo
ZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAorICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb252ZXJ0
IFRleHRFZGl0b3IgY2xhc3NlcyB0byBFUzYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MzEyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0
aW9uVGV4dEVkaXRvci5qczoKKyAgICAgICAgUmVtb3ZlZCBhIGNvbW1lbnQgYWJvdXQgY29uc3Qs
IHdlIGNhbid0IHVzZSBpdCBpbiBzdHJpY3QgbW9kZSAvIGNsYXNzZXMuCisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qczoKKyAgICAgICAgQ29udmVydGVkIHRvIEVT
NiBjbGFzc2VzLgorCisyMDE1LTAzLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxl
LmNvbT4KKwogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb252ZXJ0IFRyZWVFbGVtZW50IGNsYXNz
ZXMgdG8gRVM2CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDMxMTEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRv
ci5qcwppbmRleCBhNGIyM2RmLi4wM2U0NzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHls
ZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qcwpAQCAtMjk2LDcgKzI5Niw2IEBAIFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvciA9IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b25UZXh0RWRpdG9yCiAgICAgICAgIC8vIFVzZSBhIHNob3J0IGRlbGF5IGZvciB1c2VyIGlucHV0
IHRvIGNvYWxlc2NlIG1vcmUgY2hhbmdlcyBiZWZvcmUgY29tbWl0dGluZy4gT3RoZXIgYWN0aW9u
cyBsaWtlCiAgICAgICAgIC8vIHVuZG8sIHJlZG8gYW5kIHBhc3RlIGFyZSBhdG9taWMgYW5kIHdv
cmsgYmV0dGVyIHdpdGggYSB6ZXJvIGRlbGF5LiBDb2RlTWlycm9yIGlkZW50aWZpZXMgY2hhbmdl
cyB0aGF0CiAgICAgICAgIC8vIGdldCBjb2FsZXNjZWQgaW4gdGhlIHVuZG8gc3RhY2sgd2l0aCBh
ICIrIiBwcmVmaXggb24gdGhlIG9yaWdpbi4gVXNlIHRoYXQgdG8gc2V0IHRoZSBkZWxheSBmb3Ig
b3VyIGNvYWxlc2NpbmcuCi0gICAgICAgIC8vIEZJWE1FOiB1c2UgY29uc3Qgb3IgbGV0CiAgICAg
ICAgIHZhciBkZWxheSA9IGNoYW5nZS5vcmlnaW4gJiYgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkg
PT09ICIrIiA/IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5Db21t
aXRDb2FsZXNjZURlbGF5IDogMDsKIAogICAgICAgICAvLyBSZXNldCB0aGUgdGltZW91dCBzbyBy
YXBpZCBjaGFuZ2VzIGNvYWxlc2NlIGFmdGVyIGEgc2hvcnQgZGVsYXkuCkBAIC0zMzcsNyArMzM2
LDYgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yID0gY2xhc3Mg
Q1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IKIAogICAgICAgICAgICAgaWYgKCF0aGlzLl9j
b2RlTWlycm9yLmdldE9wdGlvbigicmVhZE9ubHkiKSkgewogICAgICAgICAgICAgICAgIC8vIE1h
dGNoZXMgYSBjb21tZW50IGxpa2U6IC8qIC13ZWJraXQtZm9vOiBiYXI7ICovCi0gICAgICAgICAg
ICAgICAgLy8gRklYTUU6IHVzZSBjb25zdCBvciBsZXQKICAgICAgICAgICAgICAgICB2YXIgY29t
bWVudGVkUHJvcGVydHlSZWdleCA9IC9cL1wqXHMqWy1cd10rXHMqOlxzKlteO10rOz9ccypcKlwv
L2c7CiAKICAgICAgICAgICAgICAgICAvLyBMb29rIGZvciBjb21tZW50cyB0aGF0IGxvb2sgbGlr
ZSBwcm9wZXJ0aWVzIGFuZCBhZGQgY2hlY2tib3hlcyBpbiBmcm9udCBvZiB0aGVtLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29k
ZVRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwppbmRleCA1OTg1ZjE3Li41MjEzNTZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwpAQCAtMjMsMTAgKzIzLDE2IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yID0gZnVuY3Rpb24oc291cmNlQ29kZSkKK1dlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvciA9IGNsYXNzIFNvdXJjZUNvZGVUZXh0RWRpdG9yIGV4dGVuZHMgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3IKK3sKKyAgICBjb25zdHJ1Y3Rvcihzb3VyY2VDb2RlKQogICAgIHsK
ICAgICAgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlKTsKIAorICAgICAgICBzdXBlcigpOworCisgICAgICAgIHRoaXMuZGVsZWdh
dGUgPSB0aGlzOworCiAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGUgPSBzb3VyY2VDb2RlOwogICAg
ICAgICB0aGlzLl9icmVha3BvaW50TWFwID0ge307CiAgICAgICAgIHRoaXMuX2lzc3Vlc0xpbmVO
dW1iZXJNYXAgPSBuZXcgTWFwOwpAQCAtMzUsOCArNDEsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlKQogICAgICAgICB0aGlzLl9pbnZh
bGlkTGluZU51bWJlcnMgPSB7MDogdHJ1ZX07CiAgICAgICAgIHRoaXMuX2lnbm9yZUNvbnRlbnRE
aWRDaGFuZ2UgPSAwOwogCi0gICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuY2FsbCh0aGlzLCBu
dWxsLCBudWxsLCB0aGlzKTsKLQogICAgICAgICB0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVy
ID0gbnVsbDsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbnVsbDsKICAgICAg
ICAgdGhpcy5fYmFzaWNCbG9ja0Fubm90YXRvciA9IG51bGw7CkBAIC00Niw3ICs1MCw3IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHNvdXJjZUNvZGUpCiAg
ICAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBzIGJldHdlZW4gcmVzb3Vy
Y2VzIGFuZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBkb2Vzbid0ICJqdW1wIHRv
IHN5bWJvbCIgeWV0LgogICAgICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxl
clN0YXRlKCk7CiAKLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IuU3R5bGVDbGFzc05hbWUpOworICAgICAgICB0aGlzLmVsZW1l
bnQuY2xhc3NMaXN0LmFkZCgic291cmNlLWNvZGUiKTsKIAogICAgICAgICBpZiAodGhpcy5fc3Vw
cG9ydHNEZWJ1Z2dpbmcpIHsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuRGlzYWJsZWRTdGF0
ZURpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludFN0YXR1c0RpZENoYW5nZSwgdGhpcyk7CkBAIC03
OSwzOCArODMsMTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gZnVuY3Rp
b24oc291cmNlQ29kZSkKICAgICAgICAgLy8gRklYTUU6IENtZCtMIHNob3JjdXQgZG9lc24ndCBh
Y3R1YWxseSB3b3JrLgogICAgICAgICBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQo
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZCwgIkwiLCB0aGlz
LnNob3dHb1RvTGluZURpYWxvZy5iaW5kKHRoaXMpLCB0aGlzLmVsZW1lbnQpOwogICAgICAgICBu
ZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hv
cnRjdXQuTW9kaWZpZXIuQ29udHJvbCwgIkciLCB0aGlzLnNob3dHb1RvTGluZURpYWxvZy5iaW5k
KHRoaXMpLCB0aGlzLmVsZW1lbnQpOwotfTsKLQotLy8gRklYTUU6IE1vdmUgdG8gYSBXZWJJbnNw
ZWN0b3IuT2JqZWN0IHN1YmNsYXNzIGFuZCB3ZSBjYW4gcmVtb3ZlIHRoaXMuCi1XZWJJbnNwZWN0
b3IuT2JqZWN0LmRlcHJlY2F0ZWRBZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IpOwotCi1XZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IuU3R5bGVDbGFzc05hbWUgPSAic291cmNlLWNvZGUiOwotV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLkxpbmVFcnJvclN0eWxlQ2xhc3NOYW1lID0gImVycm9yIjsKLVdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5MaW5lV2FybmluZ1N0eWxlQ2xhc3NOYW1lID0gIndh
cm5pbmciOwotV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZXJEZWJ1Z2dl
ckNvbnRlbnRTdHlsZUNsYXNzTmFtZSA9ICJkZWJ1Z2dlci1wb3BvdmVyLWNvbnRlbnQiOwotV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkhvdmVyZWRFeHByZXNzaW9uSGlnaGxpZ2h0
U3R5bGVDbGFzc05hbWUgPSAiaG92ZXJlZC1leHByZXNzaW9uLWhpZ2hsaWdodCI7Ci1XZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01vdXNlT3ZlclRva2VuVG9NYWtl
SG92ZXJlZFRva2VuID0gNTAwOwotV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1
cmF0aW9uVG9Nb3VzZU91dE9mSG92ZXJlZFRva2VuVG9SZWxlYXNlID0gMTAwMDsKLVdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5EdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVy
U2Nyb2xsaW5nID0gMTAwOwotV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkF1dG9G
b3JtYXRNaW5pbXVtTGluZUxlbmd0aCA9IDUwMDsKLVdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5XaWRnZXRDb250YWluc011bHRpcGxlSXNzdWVzU3ltYm9sID0gU3ltYm9sKCJzb3Vy
Y2UtY29kZS13aWRnZXQtY29udGFpbnMtbXVsdGlwbGUtaXNzdWVzIik7Ci0KLVdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5FdmVudCA9IHsKLSAgICBDb250ZW50V2lsbFBvcHVsYXRl
OiAic291cmNlLWNvZGUtdGV4dC1lZGl0b3ItY29udGVudC13aWxsLXBvcHVsYXRlIiwKLSAgICBD
b250ZW50RGlkUG9wdWxhdGU6ICJzb3VyY2UtY29kZS10ZXh0LWVkaXRvci1jb250ZW50LWRpZC1w
b3B1bGF0ZSIKLX07Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5
cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ciwKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBzb3VyY2VDb2RlKCkKICAgICB7
CiAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlOwotICAgIH0sCisgICAgfQogCi0gICAg
c2hvd246IGZ1bmN0aW9uKCkKKyAgICBzaG93bigpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2hvd24uY2FsbCh0aGlzKTsKIApAQCAtMTI1LDkgKzEw
Nyw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yIHx8IHRoaXMuX2Jhc2ljQmxv
Y2tBbm5vdGF0b3IpCiAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VHlwZVRva2VuQW5ub3RhdG9y
RW5hYmxlZFN0YXRlKGZhbHNlKTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgaGlk
ZGVuOiBmdW5jdGlvbigpCisgICAgaGlkZGVuKCkKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLnByb3RvdHlwZS5oaWRkZW4uY2FsbCh0aGlzKTsKIApAQCAtMTQxLDkgKzEy
Myw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucGF1c2UoKTsKICAgICAgICAgaWYg
KHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0b3IpCiAgICAgICAgICAgICB0aGlzLl9iYXNpY0Jsb2Nr
QW5ub3RhdG9yLnBhdXNlKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjbG9zZTogZnVuY3Rpb24o
KQorICAgIGNsb3NlKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9zdXBwb3J0c0RlYnVnZ2lu
ZykgewogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5EaXNhYmxlZFN0YXRlRGlkQ2hhbmdl
LCB0aGlzLl9icmVha3BvaW50U3RhdHVzRGlkQ2hhbmdlLCB0aGlzKTsKQEAgLTE2Niw5ICsxNDgs
OSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAg
ICAgICAgIFdlYkluc3BlY3Rvci5ub3RpZmljYXRpb25zLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLk5vdGlmaWNhdGlvbi5HbG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UsIHRoaXMu
X3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUsIHRoaXMpOwogICAgICAgICB0aGlz
Ll9zb3VyY2VDb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUu
RXZlbnQuU291cmNlTWFwQWRkZWQsIHRoaXMuX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZCwgdGhp
cyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjYW5CZUZvcm1hdHRlZDogZnVuY3Rpb24oKQorICAg
IGNhbkJlRm9ybWF0dGVkKCkKICAgICB7CiAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBhc3N1bWUg
dGhhdCBzb3VyY2UgbWFwIHJlc291cmNlcyBhcmUgZm9ybWF0dGVkIGhvdyB0aGUgYXV0aG9yIHdh
bnRzIGl0LgogICAgICAgICAvLyBXZSBjb3VsZCBhbGxvdyBzb3VyY2UgbWFwIHJlc291cmNlcyB0
byBiZSBmb3JtYXR0ZWQsIHdlIHdvdWxkIHRoZW4gbmVlZCB0byBtYWtlCkBAIC0xNzgsMTQgKzE2
MCwxNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvci5wcm90b3R5cGUuY2FuQmVGb3JtYXR0ZWQuY2FsbCh0aGlzKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIGNhblNob3dUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBjYW5T
aG93VHlwZUFubm90YXRpb25zKCkKICAgICB7CiAgICAgICAgIHJldHVybiAhIXRoaXMuX3R5cGVU
b2tlbkFubm90YXRvcjsKLSAgICB9LAorICAgIH0KIAotICAgIGN1c3RvbVBlcmZvcm1TZWFyY2g6
IGZ1bmN0aW9uKHF1ZXJ5KQorICAgIGN1c3RvbVBlcmZvcm1TZWFyY2gocXVlcnkpCiAgICAgewog
ICAgICAgICBmdW5jdGlvbiBzZWFyY2hSZXN1bHRDYWxsYmFjayhlcnJvciwgbWF0Y2hlcykKICAg
ICAgICAgewpAQCAtMjMzLDkgKzIxNSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0KQogICAgICAgICAgICAgRGVidWdnZXJBZ2VudC5z
ZWFyY2hJbkNvbnRlbnQodGhpcy5fc291cmNlQ29kZS5pZCwgcXVlcnksIGZhbHNlLCBmYWxzZSwg
c2VhcmNoUmVzdWx0Q2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0sCisgICAgfQogCi0gICAgc2hvd0dvVG9MaW5lRGlhbG9nOiBmdW5jdGlvbigpCisgICAg
c2hvd0dvVG9MaW5lRGlhbG9nKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fZ29Ub0xpbmVE
aWFsb2cpIHsKICAgICAgICAgICAgIHRoaXMuX2dvVG9MaW5lRGlhbG9nID0gbmV3IFdlYkluc3Bl
Y3Rvci5Hb1RvTGluZURpYWxvZzsKQEAgLTI0MywyOCArMjI1LDI4IEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0
aGlzLl9nb1RvTGluZURpYWxvZy5wcmVzZW50KHRoaXMuZWxlbWVudCk7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBpc0dvVG9MaW5lRGlhbG9nVmFsdWVWYWxpZDogZnVuY3Rpb24oZ29Ub0xpbmVEaWFs
b2csIGxpbmVOdW1iZXIpCisgICAgaXNHb1RvTGluZURpYWxvZ1ZhbHVlVmFsaWQoZ29Ub0xpbmVE
aWFsb2csIGxpbmVOdW1iZXIpCiAgICAgewogICAgICAgICByZXR1cm4gIWlzTmFOKGxpbmVOdW1i
ZXIpICYmIGxpbmVOdW1iZXIgPiAwICYmIGxpbmVOdW1iZXIgPD0gdGhpcy5saW5lQ291bnQ7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBnb1RvTGluZURpYWxvZ1ZhbHVlV2FzVmFsaWRhdGVkOiBmdW5j
dGlvbihnb1RvTGluZURpYWxvZywgbGluZU51bWJlcikKKyAgICBnb1RvTGluZURpYWxvZ1ZhbHVl
V2FzVmFsaWRhdGVkKGdvVG9MaW5lRGlhbG9nLCBsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAg
dmFyIHBvc2l0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUG9zaXRpb24obGluZU51
bWJlciAtIDEsIDApOwogICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRS
YW5nZShsaW5lTnVtYmVyIC0gMSwgMCwgbGluZU51bWJlciwgMCk7CiAgICAgICAgIHRoaXMucmV2
ZWFsUG9zaXRpb24ocG9zaXRpb24sIHJhbmdlLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBnb1RvTGluZURpYWxvZ1dhc0Rpc21pc3NlZDogZnVuY3Rpb24oKQorICAgIGdvVG9M
aW5lRGlhbG9nV2FzRGlzbWlzc2VkKCkKICAgICB7CiAgICAgICAgIHRoaXMuZm9jdXMoKTsKLSAg
ICB9LAorICAgIH0KIAotICAgIGNvbnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9uKHJlcGxhY2VkUmFu
Z2VzLCBuZXdSYW5nZXMpCisgICAgY29udGVudERpZENoYW5nZShyZXBsYWNlZFJhbmdlcywgbmV3
UmFuZ2VzKQogICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBl
LmNvbnRlbnREaWRDaGFuZ2UuY2FsbCh0aGlzLCByZXBsYWNlZFJhbmdlcywgbmV3UmFuZ2VzKTsK
KyAgICAgICAgc3VwZXIuY29udGVudERpZENoYW5nZShyZXBsYWNlZFJhbmdlcywgbmV3UmFuZ2Vz
KTsKIAogICAgICAgICBpZiAodGhpcy5faWdub3JlQ29udGVudERpZENoYW5nZSA+IDApCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0yNzcsOSArMjU5LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFu
bm90YXRvciA9IG51bGw7CiAgICAgICAgICAgICB0aGlzLl9iYXNpY0Jsb2NrQW5ub3RhdG9yID0g
bnVsbDsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgdG9nZ2xlVHlwZUFubm90YXRp
b25zOiBmdW5jdGlvbigpCisgICAgdG9nZ2xlVHlwZUFubm90YXRpb25zKCkKICAgICB7CiAgICAg
ICAgIGlmICghdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjkwLDkgKzI3Miw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fc2V0VHlwZVRva2VuQW5ub3RhdG9yRW5h
YmxlZFN0YXRlKG5ld0FjdGl2YXRlZFN0YXRlKTsKICAgICAgICAgcmV0dXJuIG5ld0FjdGl2YXRl
ZFN0YXRlOwotICAgIH0sCisgICAgfQogCi0gICAgc2hvd1BvcG92ZXJGb3JUeXBlczogZnVuY3Rp
b24odHlwZXMsIGJvdW5kcywgdGl0bGUpCisgICAgc2hvd1BvcG92ZXJGb3JUeXBlcyh0eXBlcywg
Ym91bmRzLCB0aXRsZSkKICAgICB7CiAgICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gIm9iamVjdCBl
eHBhbmRhYmxlIjsKQEAgLTMwOCwxMSArMjkwLDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoc2Vj
dGlvbi5lbGVtZW50KTsKIAogICAgICAgICB0aGlzLl9zaG93UG9wb3Zlcihjb250ZW50LCBib3Vu
ZHMpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBwcmV0dHlQcmlu
dDogZnVuY3Rpb24ocHJldHR5KQorICAgIHByZXR0eVByaW50KHByZXR0eSkKICAgICB7CiAgICAg
ICAgIC8vIFRoZSBhbm5vdGF0b3JzIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgcHJldHR5IHByaW50
aW5nIHRha2VzIHBsYWNlIGFuZCByZXN1bWVkIAogICAgICAgICAvLyBhZnRlciBzbyB0aGF0IHRo
ZXkgY2xlYXIgdGhlaXIgYW5ub3RhdGlvbnMgaW4gYSBrbm93biBzdGF0ZSBhbmQgaW5zZXJ0IG5l
dyBhbm5vdGF0aW9ucyAKQEAgLTMyMiw3ICszMDQsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBpZiAoc2hvdWxkUmVzdW1lVHlwZVRv
a2VuQW5ub3RhdG9yIHx8IHNob3VsZFJlc3VtZUJhc2ljQmxvY2tBbm5vdGF0b3IpCiAgICAgICAg
ICAgICB0aGlzLl9zZXRUeXBlVG9rZW5Bbm5vdGF0b3JFbmFibGVkU3RhdGUoZmFsc2UpOwogCi0g
ICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wcmV0dHlQcmludC5jYWxs
KHRoaXMsIHByZXR0eSk7CisgICAgICAgIHN1cGVyLnByZXR0eVByaW50KHByZXR0eSk7CiAKICAg
ICAgICAgaWYgKHByZXR0eSB8fCAhdGhpcy5faXNQcm9iYWJseU1pbmlmaWVkKSB7CiAgICAgICAg
ICAgICBpZiAoc2hvdWxkUmVzdW1lVHlwZVRva2VuQW5ub3RhdG9yIHx8IHNob3VsZFJlc3VtZUJh
c2ljQmxvY2tBbm5vdGF0b3IpCkBAIC0zMzIsNDcgKzMxNCw0NyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKHRoaXMuX3R5
cGVUb2tlbkFubm90YXRvciB8fCB0aGlzLl9iYXNpY0Jsb2NrQW5ub3RhdG9yKQogICAgICAgICAg
ICAgICAgIHRoaXMuX3NldFR5cGVUb2tlbkFubm90YXRvckVuYWJsZWRTdGF0ZShmYWxzZSk7CiAg
ICAgICAgIH0KLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF91bmZvcm1h
dHRlZExpbmVJbmZvRm9yRWRpdG9yTGluZUluZm86IGZ1bmN0aW9uKGxpbmVJbmZvKQorICAgIF91
bmZvcm1hdHRlZExpbmVJbmZvRm9yRWRpdG9yTGluZUluZm8obGluZUluZm8pCiAgICAgewogICAg
ICAgICBpZiAodGhpcy5mb3JtYXR0ZXJTb3VyY2VNYXApCiAgICAgICAgICAgICByZXR1cm4gdGhp
cy5mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbChsaW5lSW5mby5saW5lTnVt
YmVyLCBsaW5lSW5mby5jb2x1bW5OdW1iZXIpOwogICAgICAgICByZXR1cm4gbGluZUluZm87Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfc291cmNlQ29kZUxvY2F0aW9uRm9yRWRpdG9yUG9zaXRpb246
IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIF9zb3VyY2VDb2RlTG9jYXRpb25Gb3JFZGl0b3JQb3Np
dGlvbihwb3NpdGlvbikKICAgICB7CiAgICAgICAgIHZhciBsaW5lSW5mbyA9IHtsaW5lTnVtYmVy
OiBwb3NpdGlvbi5saW5lLCBjb2x1bW5OdW1iZXI6IHBvc2l0aW9uLmNofTsKICAgICAgICAgdmFy
IHVuZm9ybWF0dGVkTGluZUluZm8gPSB0aGlzLl91bmZvcm1hdHRlZExpbmVJbmZvRm9yRWRpdG9y
TGluZUluZm8obGluZUluZm8pOwogICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VDb2RlLmNyZWF0
ZVNvdXJjZUNvZGVMb2NhdGlvbih1bmZvcm1hdHRlZExpbmVJbmZvLmxpbmVOdW1iZXIsIHVuZm9y
bWF0dGVkTGluZUluZm8uY29sdW1uTnVtYmVyKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9lZGl0
b3JMaW5lSW5mb0ZvclNvdXJjZUNvZGVMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0
aW9uKQorICAgIF9lZGl0b3JMaW5lSW5mb0ZvclNvdXJjZUNvZGVMb2NhdGlvbihzb3VyY2VDb2Rl
TG9jYXRpb24pCiAgICAgewogICAgICAgICBpZiAodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9m
IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSkKICAgICAgICAgICAgIHJldHVybiB7bGlu
ZU51bWJlcjogc291cmNlQ29kZUxvY2F0aW9uLmRpc3BsYXlMaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXI6IHNvdXJjZUNvZGVMb2NhdGlvbi5kaXNwbGF5Q29sdW1uTnVtYmVyfTsKICAgICAgICAgcmV0
dXJuIHtsaW5lTnVtYmVyOiBzb3VyY2VDb2RlTG9jYXRpb24uZm9ybWF0dGVkTGluZU51bWJlciwg
Y29sdW1uTnVtYmVyOiBzb3VyY2VDb2RlTG9jYXRpb24uZm9ybWF0dGVkQ29sdW1uTnVtYmVyfTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9icmVha3BvaW50Rm9yRWRpdG9yTGluZUluZm86IGZ1bmN0
aW9uKGxpbmVJbmZvKQorICAgIF9icmVha3BvaW50Rm9yRWRpdG9yTGluZUluZm8obGluZUluZm8p
CiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRNYXBbbGluZUluZm8ubGluZU51
bWJlcl0pCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgcmV0dXJuIHRoaXMuX2Jy
ZWFrcG9pbnRNYXBbbGluZUluZm8ubGluZU51bWJlcl1bbGluZUluZm8uY29sdW1uTnVtYmVyXTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9hZGRCcmVha3BvaW50V2l0aEVkaXRvckxpbmVJbmZvOiBm
dW5jdGlvbihicmVha3BvaW50LCBsaW5lSW5mbykKKyAgICBfYWRkQnJlYWtwb2ludFdpdGhFZGl0
b3JMaW5lSW5mbyhicmVha3BvaW50LCBsaW5lSW5mbykKICAgICB7CiAgICAgICAgIGlmICghdGhp
cy5fYnJlYWtwb2ludE1hcFtsaW5lSW5mby5saW5lTnVtYmVyXSkKICAgICAgICAgICAgIHRoaXMu
X2JyZWFrcG9pbnRNYXBbbGluZUluZm8ubGluZU51bWJlcl0gPSB7fTsKIAogICAgICAgICB0aGlz
Ll9icmVha3BvaW50TWFwW2xpbmVJbmZvLmxpbmVOdW1iZXJdW2xpbmVJbmZvLmNvbHVtbk51bWJl
cl0gPSBicmVha3BvaW50OwotICAgIH0sCisgICAgfQogCi0gICAgX3JlbW92ZUJyZWFrcG9pbnRX
aXRoRWRpdG9yTGluZUluZm86IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGxpbmVJbmZvKQorICAgIF9y
ZW1vdmVCcmVha3BvaW50V2l0aEVkaXRvckxpbmVJbmZvKGJyZWFrcG9pbnQsIGxpbmVJbmZvKQog
ICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoYnJlYWtwb2ludCA9PT0gdGhpcy5fYnJlYWtw
b2ludE1hcFtsaW5lSW5mby5saW5lTnVtYmVyXVtsaW5lSW5mby5jb2x1bW5OdW1iZXJdKTsKIApA
QCAtMzgwLDkgKzM2Miw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKGlzRW1wdHlPYmplY3QodGhpcy5fYnJlYWtwb2ludE1h
cFtsaW5lSW5mby5saW5lTnVtYmVyXSkpCiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtw
b2ludE1hcFtsaW5lSW5mby5saW5lTnVtYmVyXTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jb250
ZW50V2lsbFBvcHVsYXRlOiBmdW5jdGlvbihjb250ZW50KQorICAgIF9jb250ZW50V2lsbFBvcHVs
YXRlKGNvbnRlbnQpCiAgICAgewogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRXZlbnQuQ29udGVudFdpbGxQb3B1
bGF0ZSk7CiAKQEAgLTQzMSw5ICs0MTMsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGxhc3ROZXdsaW5lSW5kZXggPSBu
ZXh0TmV3bGluZUluZGV4ICsgMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0sCisg
ICAgfQogCi0gICAgX2NvbnRlbnREaWRQb3B1bGF0ZTogZnVuY3Rpb24oKQorICAgIF9jb250ZW50
RGlkUG9wdWxhdGUoKQogICAgIHsKICAgICAgICAgdGhpcy5fY29udGVudFBvcHVsYXRlZCA9IHRy
dWU7CiAKQEAgLTQ0Niw5ICs0MjgsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZWluc2VydEFsbElzc3VlcygpOwogCiAg
ICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlTWFya2VycygpOwotICAgIH0sCisgICAgfQogCi0g
ICAgX3BvcHVsYXRlV2l0aENvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRlbnQpCisgICAgX3BvcHVsYXRl
V2l0aENvbnRlbnQoY29udGVudCkKICAgICB7CiAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50IHx8
ICIiOwogCkBAIC00NjQsOSArNDQ2LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2NvbnRlbnREaWRQ
b3B1bGF0ZSgpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NvbnRlbnRBdmFpbGFibGU6IGZ1bmN0
aW9uKHBhcmFtZXRlcnMpCisgICAgX2NvbnRlbnRBdmFpbGFibGUocGFyYW1ldGVycykKICAgICB7
CiAgICAgICAgIC8vIFJldHVybiBpZiByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlLgogICAgICAg
ICBpZiAocGFyYW1ldGVycy5lcnJvcikKQEAgLTQ4NywyMyArNDY5LDIzIEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2ludmFs
aWRMaW5lTnVtYmVycyA9IHt9OwogCiAgICAgICAgIHRoaXMuX3BvcHVsYXRlV2l0aENvbnRlbnQo
Y29udGVudCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYnJlYWtwb2ludFN0YXR1c0RpZENoYW5n
ZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX2JyZWFrcG9pbnRTdGF0dXNEaWRDaGFuZ2UoZXZlbnQp
CiAgICAgewogICAgICAgICB0aGlzLl91cGRhdGVCcmVha3BvaW50U3RhdHVzKGV2ZW50LnRhcmdl
dCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYnJlYWtwb2ludHNFbmFibGVkRGlkQ2hhbmdlOiBm
dW5jdGlvbigpCisgICAgX2JyZWFrcG9pbnRzRW5hYmxlZERpZENoYW5nZSgpCiAgICAgewogICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zdXBwb3J0c0RlYnVnZ2luZyk7CiAKICAgICAgICAg
dmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5icmVha3BvaW50
c0ZvclNvdXJjZUNvZGUodGhpcy5fc291cmNlQ29kZSk7CiAgICAgICAgIGZvciAodmFyIGJyZWFr
cG9pbnQgb2YgYnJlYWtwb2ludHMpCiAgICAgICAgICAgICB0aGlzLl91cGRhdGVCcmVha3BvaW50
U3RhdHVzKGJyZWFrcG9pbnQpOwotICAgIH0sCisgICAgfQogCi0gICAgX3VwZGF0ZUJyZWFrcG9p
bnRTdGF0dXM6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX3VwZGF0ZUJyZWFrcG9pbnRTdGF0
dXMoYnJlYWtwb2ludCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3N1cHBv
cnRzRGVidWdnaW5nKTsKIApAQCAtNTE1LDkgKzQ5Nyw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGxpbmVJbmZvID0gdGhp
cy5fZWRpdG9yTGluZUluZm9Gb3JTb3VyY2VDb2RlTG9jYXRpb24oYnJlYWtwb2ludC5zb3VyY2VD
b2RlTG9jYXRpb24pOwogICAgICAgICB0aGlzLnNldEJyZWFrcG9pbnRJbmZvRm9yTGluZUFuZENv
bHVtbihsaW5lSW5mby5saW5lTnVtYmVyLCBsaW5lSW5mby5jb2x1bW5OdW1iZXIsIHRoaXMuX2Jy
ZWFrcG9pbnRJbmZvRm9yQnJlYWtwb2ludChicmVha3BvaW50KSk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfdXBkYXRlQnJlYWtwb2ludExvY2F0aW9uOiBmdW5jdGlvbihldmVudCkKKyAgICBfdXBk
YXRlQnJlYWtwb2ludExvY2F0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3Nl
cnQodGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpOwogCkBAIC01NjEsOSArNTQzLDkgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlz
Ll9yZW1vdmVCcmVha3BvaW50V2l0aEVkaXRvckxpbmVJbmZvKGJyZWFrcG9pbnQsIG9sZExpbmVJ
bmZvKTsKICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFdpdGhFZGl0b3JMaW5lSW5mbyhicmVh
a3BvaW50LCBuZXdMaW5lSW5mbyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYnJlYWtwb2ludEFk
ZGVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfYnJlYWtwb2ludEFkZGVkKGV2ZW50KQogICAgIHsK
ICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpOwogCkBAIC01
ODAsOSArNTYyLDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdmFyIGxpbmVJbmZvID0gdGhpcy5fZWRpdG9yTGluZUluZm9Gb3JTb3Vy
Y2VDb2RlTG9jYXRpb24oYnJlYWtwb2ludC5zb3VyY2VDb2RlTG9jYXRpb24pOwogICAgICAgICB0
aGlzLl9hZGRCcmVha3BvaW50V2l0aEVkaXRvckxpbmVJbmZvKGJyZWFrcG9pbnQsIGxpbmVJbmZv
KTsKICAgICAgICAgdGhpcy5zZXRCcmVha3BvaW50SW5mb0ZvckxpbmVBbmRDb2x1bW4obGluZUlu
Zm8ubGluZU51bWJlciwgbGluZUluZm8uY29sdW1uTnVtYmVyLCB0aGlzLl9icmVha3BvaW50SW5m
b0ZvckJyZWFrcG9pbnQoYnJlYWtwb2ludCkpOwotICAgIH0sCisgICAgfQogCi0gICAgX2JyZWFr
cG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfYnJlYWtwb2ludFJlbW92ZWQoZXZl
bnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zdXBwb3J0c0RlYnVnZ2lu
Zyk7CiAKQEAgLTU5OSw5ICs1ODEsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IucHJvdG90eXBlID0gewogICAgICAgICB2YXIgbGluZUluZm8gPSB0aGlzLl9lZGl0b3JMaW5l
SW5mb0ZvclNvdXJjZUNvZGVMb2NhdGlvbihicmVha3BvaW50LnNvdXJjZUNvZGVMb2NhdGlvbik7
CiAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRXaXRoRWRpdG9yTGluZUluZm8oYnJlYWtw
b2ludCwgbGluZUluZm8pOwogICAgICAgICB0aGlzLnNldEJyZWFrcG9pbnRJbmZvRm9yTGluZUFu
ZENvbHVtbihsaW5lSW5mby5saW5lTnVtYmVyLCBsaW5lSW5mby5jb2x1bW5OdW1iZXIsIG51bGwp
OwotICAgIH0sCisgICAgfQogCi0gICAgX2FjdGl2ZUNhbGxGcmFtZURpZENoYW5nZTogZnVuY3Rp
b24oKQorICAgIF9hY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UoKQogICAgIHsKICAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpOwogCkBAIC02NDIsOSArNjI0LDkg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHRoaXMuX3BvcHVsYXRlV2l0aElubGluZVNjcmlwdENvbnRlbnQoKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVXaXRoU2NyaXB0Q29udGVudCgpOwotICAg
IH0sCisgICAgfQogCi0gICAgX2FjdGl2ZUNhbGxGcmFtZVNvdXJjZUNvZGVMb2NhdGlvbkNoYW5n
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9hY3RpdmVDYWxsRnJhbWVTb3VyY2VDb2RlTG9jYXRp
b25DaGFuZ2VkKGV2ZW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRo
aXMuZXhlY3V0aW9uTGluZU51bWJlcikpOwogICAgICAgICBpZiAoaXNOYU4odGhpcy5leGVjdXRp
b25MaW5lTnVtYmVyKSkKQEAgLTY1Niw5ICs2MzgsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB2YXIgbGluZUluZm8gPSB0aGlzLl9l
ZGl0b3JMaW5lSW5mb0ZvclNvdXJjZUNvZGVMb2NhdGlvbih0aGlzLl9hY3RpdmVDYWxsRnJhbWVT
b3VyY2VDb2RlTG9jYXRpb24pOwogICAgICAgICB0aGlzLmV4ZWN1dGlvbkxpbmVOdW1iZXIgPSBs
aW5lSW5mby5saW5lTnVtYmVyOwogICAgICAgICB0aGlzLmV4ZWN1dGlvbkNvbHVtbk51bWJlciA9
IGxpbmVJbmZvLmNvbHVtbk51bWJlcjsKLSAgICB9LAorICAgIH0KIAotICAgIF9wb3B1bGF0ZVdp
dGhJbmxpbmVTY3JpcHRDb250ZW50OiBmdW5jdGlvbigpCisgICAgX3BvcHVsYXRlV2l0aElubGlu
ZVNjcmlwdENvbnRlbnQoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc291
cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZXNvdXJjZSk7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KCF0aGlzLl9mdWxsQ29udGVudFBvcHVsYXRlZCk7CkBAIC02ODksOCArNjcxLDgg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIGlmICh0aGlzLl9mdWxsQ29udGVudFBvcHVsYXRlZCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgICAgIGNvbnN0IHNjcmlwdE9wZW5UYWcgPSAiPHNjcmlwdD4iOwot
ICAgICAgICAgICAgY29uc3Qgc2NyaXB0Q2xvc2VUYWcgPSAiPC9zY3JpcHQ+IjsKKyAgICAgICAg
ICAgIHZhciBzY3JpcHRPcGVuVGFnID0gIjxzY3JpcHQ+IjsKKyAgICAgICAgICAgIHZhciBzY3Jp
cHRDbG9zZVRhZyA9ICI8L3NjcmlwdD4iOwogCiAgICAgICAgICAgICB2YXIgY29udGVudCA9ICIi
OwogICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSAwOwpAQCAtNzI4LDkgKzcxMCw5IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZh
ciBib3VuZFNjcmlwdENvbnRlbnRBdmFpbGFibGUgPSBzY3JpcHRDb250ZW50QXZhaWxhYmxlLmJp
bmQodGhpcyk7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsr
aSkKICAgICAgICAgICAgIHNjcmlwdHNbaV0ucmVxdWVzdENvbnRlbnQoKS50aGVuKGJvdW5kU2Ny
aXB0Q29udGVudEF2YWlsYWJsZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcG9wdWxhdGVXaXRo
U2NyaXB0Q29udGVudDogZnVuY3Rpb24oKQorICAgIF9wb3B1bGF0ZVdpdGhTY3JpcHRDb250ZW50
KCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOwogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhp
cy5fZnVsbENvbnRlbnRQb3B1bGF0ZWQpOwpAQCAtNzYzLDkgKzc0NSw5IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3JlcXVl
c3RpbmdTY3JpcHRDb250ZW50ID0gdHJ1ZTsKIAogICAgICAgICBzY3JpcHRzWzBdLnJlcXVlc3RD
b250ZW50KCkudGhlbihzY3JpcHRDb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwotICAgIH0s
CisgICAgfQogCi0gICAgX21hdGNoZXNTb3VyY2VDb2RlTG9jYXRpb246IGZ1bmN0aW9uKHNvdXJj
ZUNvZGVMb2NhdGlvbikKKyAgICBfbWF0Y2hlc1NvdXJjZUNvZGVMb2NhdGlvbihzb3VyY2VDb2Rl
TG9jYXRpb24pCiAgICAgewogICAgICAgICBpZiAodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9m
IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSkKICAgICAgICAgICAgIHJldHVybiBzb3Vy
Y2VDb2RlTG9jYXRpb24uZGlzcGxheVNvdXJjZUNvZGUgPT09IHRoaXMuX3NvdXJjZUNvZGU7CkBA
IC03NzQsOSArNzU2LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuU2NyaXB0KQogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUNvZGVMb2NhdGlvbi5zb3Vy
Y2VDb2RlID09PSB0aGlzLl9zb3VyY2VDb2RlOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfbWF0Y2hlc0JyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
CisgICAgX21hdGNoZXNCcmVha3BvaW50KGJyZWFrcG9pbnQpCiAgICAgewogICAgICAgICBjb25z
b2xlLmFzc2VydCh0aGlzLl9zdXBwb3J0c0RlYnVnZ2luZyk7CiAgICAgICAgIGlmICh0aGlzLl9z
b3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlKQpAQCAt
Nzg2LDkgKzc2OCw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVj
dG9yLlNjcmlwdCkKICAgICAgICAgICAgIHJldHVybiBicmVha3BvaW50LnVybCA9PT0gdGhpcy5f
c291cmNlQ29kZS51cmwgfHwgYnJlYWtwb2ludC5zY3JpcHRJZGVudGlmaWVyID09PSB0aGlzLl9z
b3VyY2VDb2RlLmlkOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfbWF0Y2hlc0lzc3VlOiBmdW5jdGlvbihpc3N1ZSkKKyAgICBfbWF0Y2hlc0lzc3VlKGlzc3Vl
KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UpCiAgICAgICAgICAgICByZXR1cm4gaXNzdWUudXJsID09PSB0aGlzLl9z
b3VyY2VDb2RlLnVybDsKQEAgLTc5NiwxOCArNzc4LDE4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2Rl
IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkKICAgICAgICAgICAgIHJldHVybiBpc3N1
ZS51cmwgPT09IHRoaXMuX3NvdXJjZUNvZGUudXJsOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfaXNzdWVXYXNBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAg
X2lzc3VlV2FzQWRkZWQoZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgaXNzdWUgPSBldmVudC5k
YXRhLmlzc3VlOwogICAgICAgICBpZiAoIXRoaXMuX21hdGNoZXNJc3N1ZShpc3N1ZSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fYWRkSXNzdWUoaXNzdWUpOwotICAgIH0s
CisgICAgfQogCi0gICAgX2FkZElzc3VlOiBmdW5jdGlvbihpc3N1ZSkKKyAgICBfYWRkSXNzdWUo
aXNzdWUpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogSXNzdWUgc2hvdWxkIGhhdmUgYSBTb3Vy
Y2VDb2RlTG9jYXRpb24uCiAgICAgICAgIHZhciBzb3VyY2VDb2RlTG9jYXRpb24gPSB0aGlzLl9z
b3VyY2VDb2RlLmNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbihpc3N1ZS5saW5lTnVtYmVyLCBpc3N1
ZS5jb2x1bW5OdW1iZXIpOwpAQCAtODQzLDkgKzgyNSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUlz
c3VlV2lkZ2V0Rm9ySXNzdWVzKHdpZGdldCwgbGluZU51bWJlcklzc3Vlcyk7CiAgICAgICAgIH0K
LSAgICB9LAorICAgIH0KIAotICAgIF9pc3N1ZVdpZGdldEZvckxpbmU6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIpCisgICAgX2lzc3VlV2lkZ2V0Rm9yTGluZShsaW5lTnVtYmVyKQogICAgIHsKICAgICAg
ICAgdmFyIHdpZGdldCA9IHRoaXMuX3dpZGdldE1hcC5nZXQobGluZU51bWJlcik7CiAgICAgICAg
IGlmICh3aWRnZXQpCkBAIC04NjMsMTggKzg0NSwxOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl93aWRnZXRNYXAuc2V0KGxp
bmVOdW1iZXIsIHdpZGdldCk7CiAKICAgICAgICAgcmV0dXJuIHdpZGdldDsKLSAgICB9LAorICAg
IH0KIAotICAgIF9pY29uQ2xhc3NOYW1lRm9ySXNzdWVMZXZlbDogZnVuY3Rpb24obGV2ZWwpCisg
ICAgX2ljb25DbGFzc05hbWVGb3JJc3N1ZUxldmVsKGxldmVsKQogICAgIHsKICAgICAgICAgaWYg
KGxldmVsID09PSBXZWJJbnNwZWN0b3IuSXNzdWVNZXNzYWdlLkxldmVsLldhcm5pbmcpCiAgICAg
ICAgICAgICByZXR1cm4gImljb24td2FybmluZyI7CiAKICAgICAgICAgY29uc29sZS5hc3NlcnQo
bGV2ZWwgPT09IFdlYkluc3BlY3Rvci5Jc3N1ZU1lc3NhZ2UuTGV2ZWwuRXJyb3IpOwogICAgICAg
ICByZXR1cm4gImljb24tZXJyb3IiOwotICAgIH0sCisgICAgfQogCi0gICAgX3VwZGF0ZUlzc3Vl
V2lkZ2V0Rm9ySXNzdWVzOiBmdW5jdGlvbih3aWRnZXQsIGlzc3VlcykKKyAgICBfdXBkYXRlSXNz
dWVXaWRnZXRGb3JJc3N1ZXMod2lkZ2V0LCBpc3N1ZXMpCiAgICAgewogICAgICAgICB2YXIgd2lk
Z2V0RWxlbWVudCA9IHdpZGdldC53aWRnZXRFbGVtZW50OwogICAgICAgICB3aWRnZXRFbGVtZW50
LnJlbW92ZUNoaWxkcmVuKCk7CkBAIC05MzAsOSArOTEyLDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHdpZGdl
dC51cGRhdGUoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9pc1dpZGdldFRvZ2dsZWFibGU6IGZ1
bmN0aW9uKHdpZGdldCkKKyAgICBfaXNXaWRnZXRUb2dnbGVhYmxlKHdpZGdldCkKICAgICB7CiAg
ICAgICAgIGlmICh3aWRnZXRbV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLldpZGdl
dENvbnRhaW5zTXVsdGlwbGVJc3N1ZXNTeW1ib2xdKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC05NDUsOSArOTI3LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0sCisgICAgfQogCi0gICAgX2hhbmRsZVdpZGdldENsaWNrOiBm
dW5jdGlvbih3aWRnZXQsIGxpbmVOdW1iZXIsIGV2ZW50KQorICAgIF9oYW5kbGVXaWRnZXRDbGlj
ayh3aWRnZXQsIGxpbmVOdW1iZXIsIGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9p
c1dpZGdldFRvZ2dsZWFibGUod2lkZ2V0KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1Niwx
MiArOTM4LDEyIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgdmFyIGxpbmVOdW1iZXJJc3N1ZXMgPSB0aGlzLl9pc3N1ZXNMaW5lTnVt
YmVyTWFwLmdldChsaW5lTnVtYmVyKTsKICAgICAgICAgdGhpcy5fdXBkYXRlSXNzdWVXaWRnZXRG
b3JJc3N1ZXMod2lkZ2V0LCBsaW5lTnVtYmVySXNzdWVzKTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9icmVha3BvaW50SW5mb0ZvckJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAg
X2JyZWFrcG9pbnRJbmZvRm9yQnJlYWtwb2ludChicmVha3BvaW50KQogICAgIHsKICAgICAgICAg
cmV0dXJuIHtyZXNvbHZlZDogYnJlYWtwb2ludC5yZXNvbHZlZCwgZGlzYWJsZWQ6IGJyZWFrcG9p
bnQuZGlzYWJsZWQsIGF1dG9Db250aW51ZTogYnJlYWtwb2ludC5hdXRvQ29udGludWV9OwotICAg
IH0sCisgICAgfQogCiAgICAgZ2V0IF9zdXBwb3J0c0RlYnVnZ2luZygpCiAgICAgewpAQCAtOTcw
LDI3ICs5NTIsNDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuU2NyaXB0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFRleHRFZGl0b3IgRGVsZWdhdGUKIAotICAgIHRl
eHRFZGl0b3JCYXNlVVJMOiBmdW5jdGlvbih0ZXh0RWRpdG9yKQorICAgIHRleHRFZGl0b3JCYXNl
VVJMKHRleHRFZGl0b3IpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZS51
cmw7Ci0gICAgfSwKKyAgICB9CiAKLSAgICB0ZXh0RWRpdG9yU2hvdWxkSGlkZUxpbmVOdW1iZXI6
IGZ1bmN0aW9uKHRleHRFZGl0b3IsIGxpbmVOdW1iZXIpCisgICAgdGV4dEVkaXRvclNob3VsZEhp
ZGVMaW5lTnVtYmVyKHRleHRFZGl0b3IsIGxpbmVOdW1iZXIpCiAgICAgewogICAgICAgICByZXR1
cm4gbGluZU51bWJlciBpbiB0aGlzLl9pbnZhbGlkTGluZU51bWJlcnM7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICB0ZXh0RWRpdG9yR3V0dGVyQ29udGV4dE1lbnU6IGZ1bmN0aW9uKHRleHRFZGl0b3Is
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZWRpdG9yQnJlYWtwb2ludHMsIGV2ZW50KQorICAg
IHRleHRFZGl0b3JHdXR0ZXJDb250ZXh0TWVudSh0ZXh0RWRpdG9yLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIGVkaXRvckJyZWFrcG9pbnRzLCBldmVudCkKICAgICB7CiAgICAgICAgIGlmICgh
dGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKIAorICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRvTG9j
YXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5h
Z2VyLmNvbnRpbnVlVG9Mb2NhdGlvbihzY3JpcHQuaWQsIHNvdXJjZUNvZGVMb2NhdGlvbi5saW5l
TnVtYmVyLCBzb3VyY2VDb2RlTG9jYXRpb24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGFkZEJyZWFrcG9pbnQoKQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgZGF0YSA9IHRoaXMudGV4dEVkaXRvckJyZWFrcG9pbnRBZGRlZCh0aGlzLCBsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIpOworICAgICAgICAgICAgdGhpcy5zZXRCcmVha3BvaW50SW5mb0Zvckxp
bmVBbmRDb2x1bW4oZGF0YS5saW5lTnVtYmVyLCBkYXRhLmNvbHVtbk51bWJlciwgZGF0YS5icmVh
a3BvaW50SW5mbyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZXZlYWxJblNpZGVi
YXIoKQorICAgICAgICB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJTaWRlYmFy
UGFuZWwuc2hvdygpOworICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyU2lkZWJhclBhbmVsLnRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QoYnJl
YWtwb2ludCk7CisgICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQpCisgICAgICAgICAgICAgICAg
dHJlZUVsZW1lbnQucmV2ZWFsQW5kU2VsZWN0KCk7CisgICAgICAgIH0KKwogICAgICAgICB2YXIg
Y29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKIAogICAg
ICAgICAvLyBQYXVzZWQuIEFkZCBDb250aW51ZSB0byBIZXJlIG9wdGlvbiBvbmx5IGlmIHdlIGhh
dmUgYSBzY3JpcHQgaWRlbnRpZmllciBmb3IgdGhlIGxvY2F0aW9uLgpAQCAtMTAwNSwxMCArMTAw
Niw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICAgICAgdmFyIHNjcmlwdCA9IHNvdXJjZUNvZGVMb2NhdGlvbi5zb3VyY2VDb2Rl
LnNjcmlwdEZvckxvY2F0aW9uKHNvdXJjZUNvZGVMb2NhdGlvbik7CiAKICAgICAgICAgICAgIGlm
IChzY3JpcHQpIHsKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRvTG9jYXRpb24o
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5jb250aW51ZVRvTG9jYXRpb24oc2NyaXB0LmlkLCBzb3VyY2VDb2RlTG9j
YXRpb24ubGluZU51bWJlciwgc291cmNlQ29kZUxvY2F0aW9uLmNvbHVtbk51bWJlcik7Ci0gICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVlIHRvIEhlcmUiKSwgY29udGludWVUb0xvY2F0
aW9uKTsKICAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKQEAg
LTEwMjYsMTEgKzEwMjMsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90eXBlID0gewogCiAgICAgICAgIC8vIE5vIGJyZWFrcG9pbnRzLgogICAgICAgICBpZiAoIWJy
ZWFrcG9pbnRzLmxlbmd0aCkgewotICAgICAgICAgICAgZnVuY3Rpb24gYWRkQnJlYWtwb2ludCgp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRleHRFZGl0
b3JCcmVha3BvaW50QWRkZWQodGhpcywgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLnNldEJyZWFrcG9pbnRJbmZvRm9yTGluZUFuZENvbHVtbihkYXRhLmxp
bmVOdW1iZXIsIGRhdGEuY29sdW1uTnVtYmVyLCBkYXRhLmJyZWFrcG9pbnRJbmZvKTsKLSAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkFkZCBCcmVha3BvaW50IiksIGFkZEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7
CiAgICAgICAgICAgICBjb250ZXh0TWVudS5zaG93KCk7CkBAIC0xMDQwLDEzICsxMDMyLDYgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAg
Ly8gU2luZ2xlIGJyZWFrcG9pbnQuCiAgICAgICAgIGlmIChicmVha3BvaW50cy5sZW5ndGggPT09
IDEpIHsKICAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbMF07Ci0gICAg
ICAgICAgICBmdW5jdGlvbiByZXZlYWxJblNpZGViYXIoKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlclNpZGViYXJQYW5lbC5zaG93KCk7Ci0gICAg
ICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyU2lkZWJh
clBhbmVsLnRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QoYnJlYWtwb2ludCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRyZWVFbGVtZW50KQotICAgICAgICAgICAgICAgICAgICB0cmVlRWxl
bWVudC5yZXZlYWxBbmRTZWxlY3QoKTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJl
YWtwb2ludC5hcHBlbmRDb250ZXh0TWVudUl0ZW1zKGNvbnRleHRNZW51LCBldmVudC50YXJnZXQp
OwogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7CkBAIC0xMDg1LDkg
KzEwNzAsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkVuYWJsZSBCcmVha3BvaW50cyIpLCB0b2dnbGVCcmVha3BvaW50cy5iaW5kKHRoaXMpKTsK
ICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRl
bGV0ZSBCcmVha3BvaW50cyIpLCByZW1vdmVCcmVha3BvaW50cy5iaW5kKHRoaXMpKTsKICAgICAg
ICAgY29udGV4dE1lbnUuc2hvdygpOwotICAgIH0sCisgICAgfQogCi0gICAgdGV4dEVkaXRvckJy
ZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24odGV4dEVkaXRvciwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyKQorICAgIHRleHRFZGl0b3JCcmVha3BvaW50QWRkZWQodGV4dEVkaXRvciwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9zdXBwb3J0c0RlYnVn
Z2luZykKICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMTExMyw5ICsxMDk4LDkgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGxpbmVOdW1iZXI6IGxpbmVJbmZvLmxpbmVOdW1iZXIsCiAgICAgICAgICAgICBjb2x1bW5OdW1i
ZXI6IGxpbmVJbmZvLmNvbHVtbk51bWJlcgogICAgICAgICB9OwotICAgIH0sCisgICAgfQogCi0g
ICAgdGV4dEVkaXRvckJyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbih0ZXh0RWRpdG9yLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgdGV4dEVkaXRvckJyZWFrcG9pbnRSZW1vdmVkKHRl
eHRFZGl0b3IsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuX3N1cHBvcnRzRGVidWdnaW5nKTsKICAgICAgICAgaWYgKCF0aGlzLl9z
dXBwb3J0c0RlYnVnZ2luZykKQEAgLTExMzIsOSArMTExNyw5IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2lnbm9yZUJyZWFr
cG9pbnRSZW1vdmVkQnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7CiAgICAgICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1hbmFnZXIucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICAgICAg
ZGVsZXRlIHRoaXMuX2lnbm9yZUJyZWFrcG9pbnRBZGRlZEJyZWFrcG9pbnQ7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICB0ZXh0RWRpdG9yQnJlYWtwb2ludE1vdmVkOiBmdW5jdGlvbih0ZXh0RWRpdG9y
LCBvbGRMaW5lTnVtYmVyLCBvbGRDb2x1bW5OdW1iZXIsIG5ld0xpbmVOdW1iZXIsIG5ld0NvbHVt
bk51bWJlcikKKyAgICB0ZXh0RWRpdG9yQnJlYWtwb2ludE1vdmVkKHRleHRFZGl0b3IsIG9sZExp
bmVOdW1iZXIsIG9sZENvbHVtbk51bWJlciwgbmV3TGluZU51bWJlciwgbmV3Q29sdW1uTnVtYmVy
KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcp
OwogICAgICAgICBpZiAoIXRoaXMuX3N1cHBvcnRzRGVidWdnaW5nKQpAQCAtMTE1OSw5ICsxMTQ0
LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICBpZiAoYWNjdXJhdGVOZXdMaW5lSW5mby5saW5lTnVtYmVyICE9PSBuZXdMaW5lSW5m
by5saW5lTnVtYmVyIHx8IGFjY3VyYXRlTmV3TGluZUluZm8uY29sdW1uTnVtYmVyICE9PSBuZXdM
aW5lSW5mby5jb2x1bW5OdW1iZXIpCiAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJyZWFrcG9pbnRM
aW5lQW5kQ29sdW1uKG5ld0xpbmVJbmZvLmxpbmVOdW1iZXIsIG5ld0xpbmVJbmZvLmNvbHVtbk51
bWJlciwgYWNjdXJhdGVOZXdMaW5lSW5mby5saW5lTnVtYmVyLCBhY2N1cmF0ZU5ld0xpbmVJbmZv
LmNvbHVtbk51bWJlcik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICB0ZXh0RWRpdG9yQnJlYWtwb2lu
dENsaWNrZWQ6IGZ1bmN0aW9uKHRleHRFZGl0b3IsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikK
KyAgICB0ZXh0RWRpdG9yQnJlYWtwb2ludENsaWNrZWQodGV4dEVkaXRvciwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc3VwcG9y
dHNEZWJ1Z2dpbmcpOwogICAgICAgICBpZiAoIXRoaXMuX3N1cHBvcnRzRGVidWdnaW5nKQpAQCAt
MTE3Myw5ICsxMTU4LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBicmVha3BvaW50LmN5Y2xl
VG9OZXh0TW9kZSgpOwotICAgIH0sCisgICAgfQogCi0gICAgdGV4dEVkaXRvclVwZGF0ZWRGb3Jt
YXR0aW5nOiBmdW5jdGlvbih0ZXh0RWRpdG9yKQorICAgIHRleHRFZGl0b3JVcGRhdGVkRm9ybWF0
dGluZyh0ZXh0RWRpdG9yKQogICAgIHsKICAgICAgICAgdGhpcy5faWdub3JlQWxsQnJlYWtwb2lu
dExvY2F0aW9uVXBkYXRlcyA9IHRydWU7CiAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGUuZm9ybWF0
dGVyU291cmNlTWFwID0gdGhpcy5mb3JtYXR0ZXJTb3VyY2VNYXA7CkBAIC0xMjExLDE3ICsxMTk2
LDE3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KIAogICAgICAgICB0aGlzLl9yZWluc2VydEFsbElzc3VlcygpOwotICAgIH0sCisg
ICAgfQogCi0gICAgX2NsZWFyV2lkZ2V0czogZnVuY3Rpb24oKQorICAgIF9jbGVhcldpZGdldHMo
KQogICAgIHsKICAgICAgICAgZm9yICh2YXIgd2lkZ2V0IG9mIHRoaXMuX3dpZGdldE1hcC52YWx1
ZXMoKSkKICAgICAgICAgICAgIHdpZGdldC5jbGVhcigpOwogCiAgICAgICAgIHRoaXMuX3dpZGdl
dE1hcC5jbGVhcigpOwotICAgIH0sCisgICAgfQogCi0gICAgX3JlaW5zZXJ0QWxsSXNzdWVzOiBm
dW5jdGlvbigpCisgICAgX3JlaW5zZXJ0QWxsSXNzdWVzKCkKICAgICB7CiAgICAgICAgIHRoaXMu
X2lzc3Vlc0xpbmVOdW1iZXJNYXAuY2xlYXIoKTsKICAgICAgICAgdGhpcy5fY2xlYXJXaWRnZXRz
KCk7CkBAIC0xMjMxLDE4ICsxMjE2LDE4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9tYXRj
aGVzSXNzdWUoaXNzdWUpKTsKICAgICAgICAgICAgIHRoaXMuX2FkZElzc3VlKGlzc3VlKTsKICAg
ICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX2RlYnVnZ2VyRGlkUGF1c2U6IGZ1bmN0aW9u
KGV2ZW50KQorICAgIF9kZWJ1Z2dlckRpZFBhdXNlKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhp
cy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwogICAgICAgICBpZiAodGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2
ZSgpKQogICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlZnJlc2goKTsKICAg
ICAgICAgaWYgKHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0b3IgJiYgdGhpcy5fYmFzaWNCbG9ja0Fu
bm90YXRvci5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgdGhpcy5fYmFzaWNCbG9ja0Fubm90YXRv
ci5yZWZyZXNoKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZGVidWdnZXJEaWRSZXN1bWU6IGZ1
bmN0aW9uKGV2ZW50KQorICAgIF9kZWJ1Z2dlckRpZFJlc3VtZShldmVudCkKICAgICB7CiAgICAg
ICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKICAgICAgICAg
dGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKQEAgLTEyNTAsMTcgKzEyMzUsMTcgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvci5yZWZyZXNoKCk7CiAgICAgICAgIGlmICh0aGlzLl9iYXNpY0Js
b2NrQW5ub3RhdG9yICYmIHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0b3IuaXNBY3RpdmUoKSkKICAg
ICAgICAgICAgIHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0b3IucmVmcmVzaCgpOwotICAgIH0sCisg
ICAgfQogCi0gICAgX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisg
ICAgX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZChldmVudCkKICAgICB7CiAgICAgICAgIFdlYklu
c3BlY3Rvci5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5vdGlm
aWNhdGlvbi5HbG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UsIHRoaXMuX3VwZGF0ZVRva2VuVHJh
Y2tpbmdDb250cm9sbGVyU3RhdGUsIHRoaXMpOwogICAgICAgICB0aGlzLl9zb3VyY2VDb2RlLnJl
bW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuU291cmNlTWFw
QWRkZWQsIHRoaXMuX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZCwgdGhpcyk7CiAKICAgICAgICAg
dGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwotICAgIH0sCisgICAg
fQogCi0gICAgX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGU6IGZ1bmN0aW9uKCkK
KyAgICBfdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpCiAgICAgewogICAgICAg
ICB2YXIgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIuTW9kZS5Ob25lOwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5w
YXVzZWQpCkBAIC0xMjk3LDIwICsxMjgyLDIwIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLnRva2VuVHJh
Y2tpbmdDb250cm9sbGVyLm1vZGUgPSBtb2RlOwotICAgIH0sCisgICAgfQogCi0gICAgX2hhc0Nv
bG9yTWFya2VyczogZnVuY3Rpb24oKQorICAgIF9oYXNDb2xvck1hcmtlcnMoKQogICAgIHsKICAg
ICAgICAgZm9yICh2YXIgbWFya2VyIG9mIHRoaXMubWFya2VycykgewogICAgICAgICAgICAgaWYg
KG1hcmtlci50eXBlID09PSBXZWJJbnNwZWN0b3IuVGV4dE1hcmtlci5UeXBlLkNvbG9yKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIENvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlciBEZWxlZ2F0ZQogCi0gICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJDYW5SZWxlYXNlSGln
aGxpZ2h0ZWRSYW5nZTogZnVuY3Rpb24odG9rZW5UcmFja2luZ0NvbnRyb2xsZXIsIGVsZW1lbnQp
CisgICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJDYW5SZWxlYXNlSGlnaGxpZ2h0ZWRSYW5nZSh0
b2tlblRyYWNraW5nQ29udHJvbGxlciwgZWxlbWVudCkKICAgICB7CiAgICAgICAgIGlmICghdGhp
cy5fcG9wb3ZlcikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTMxOSwxNSArMTMwNCwx
NSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCisg
ICAgfQogCi0gICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZFJhbmdlUmVsZWFz
ZWQ6IGZ1bmN0aW9uKHRva2VuVHJhY2tpbmdDb250cm9sbGVyKQorICAgIHRva2VuVHJhY2tpbmdD
b250cm9sbGVySGlnaGxpZ2h0ZWRSYW5nZVJlbGVhc2VkKHRva2VuVHJhY2tpbmdDb250cm9sbGVy
KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9tb3VzZUlzT3ZlclBvcG92ZXIpCiAgICAgICAg
ICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwotICAgIH0sCisgICAgfQogCi0gICAgdG9rZW5U
cmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZFJhbmdlV2FzQ2xpY2tlZDogZnVuY3Rpb24odG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIpCisgICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGln
aHRlZFJhbmdlV2FzQ2xpY2tlZCh0b2tlblRyYWNraW5nQ29udHJvbGxlcikKICAgICB7CiAgICAg
ICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgIT09IFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25TeW1ib2xUb2tlbnMp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMzQxLDkgKzEzMjYsOSBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLnJlc291cmNlU2lkZWJhclBhbmVsLnNob3dPcmlnaW5hbE9yRm9ybWF0dGVkU291cmNlQ29k
ZUxvY2F0aW9uKHNvdXJjZUNvZGVMb2NhdGlvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5yZXNvdXJjZVNpZGViYXJQYW5lbC5zaG93U291cmNlQ29kZUxvY2F0aW9u
KHNvdXJjZUNvZGVMb2NhdGlvbik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICB0b2tlblRyYWNraW5n
Q29udHJvbGxlck5ld0hpZ2hsaWdodENhbmRpZGF0ZTogZnVuY3Rpb24odG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIsIGNhbmRpZGF0ZSkKKyAgICB0b2tlblRyYWNraW5nQ29udHJvbGxlck5ld0hpZ2hs
aWdodENhbmRpZGF0ZSh0b2tlblRyYWNraW5nQ29udHJvbGxlciwgY2FuZGlkYXRlKQogICAgIHsK
ICAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9kZSA9PT0gV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5vblN5bWJvbFRv
a2VucykgewogICAgICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdobGln
aHRSYW5nZShjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2UpOwpAQCAtMTM2NywxNCArMTM1Miwx
NCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRoaXMuX2Rpc21pc3NFZGl0aW5nQ29udHJv
bGxlcigpOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICB0b2tlblRyYWNraW5nQ29u
dHJvbGxlck1vdXNlT3V0T2ZIb3ZlcmVkTWFya2VyOiBmdW5jdGlvbih0b2tlblRyYWNraW5nQ29u
dHJvbGxlciwgaG92ZXJlZE1hcmtlcikKKyAgICB0b2tlblRyYWNraW5nQ29udHJvbGxlck1vdXNl
T3V0T2ZIb3ZlcmVkTWFya2VyKHRva2VuVHJhY2tpbmdDb250cm9sbGVyLCBob3ZlcmVkTWFya2Vy
KQogICAgIHsKICAgICAgICAgdGhpcy5fZGlzbWlzc0VkaXRpbmdDb250cm9sbGVyKCk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEphdmFT
Y3JpcHRFeHByZXNzaW9uOiBmdW5jdGlvbihjYW5kaWRhdGUpCisgICAgX3Rva2VuVHJhY2tpbmdD
b250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0RXhwcmVzc2lvbihjYW5kaWRhdGUpCiAgICAg
ewogICAgICAgICBjb25zb2xlLmFzc2VydChjYW5kaWRhdGUuZXhwcmVzc2lvbik7CiAKQEAgLTE0
MTQsOSArMTM5OSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5
cGUgPSB7CiAKICAgICAgICAgLy8gTm8gY2FsbCBmcmFtZSBhdmFpbGFibGUuIFVzZSB0aGUgbWFp
biBwYWdlJ3MgY29udGV4dC4KICAgICAgICAgUnVudGltZUFnZW50LmV2YWx1YXRlLmludm9rZSh7
ZXhwcmVzc2lvbjogY2FuZGlkYXRlLmV4cHJlc3Npb24sIG9iamVjdEdyb3VwOiAicG9wb3ZlciIs
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZTogdHJ1ZX0sIHBvcHVsYXRlLmJp
bmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgX3Rva2VuVHJhY2tpbmdDb250cm9sbGVy
SGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiBmdW5jdGlvbihjYW5kaWRhdGUp
CisgICAgX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUlu
Zm9ybWF0aW9uKGNhbmRpZGF0ZSkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNhbmRp
ZGF0ZS5leHByZXNzaW9uKTsKIApAQCAtMTQ0OSw5ICsxNDM0LDkgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIFJ1
bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoYWxsUmVxdWVz
dHMsIGhhbmRsZXIuYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2hvd1BvcG92
ZXI6IGZ1bmN0aW9uKGNvbnRlbnQsIGJvdW5kcykKKyAgICBfc2hvd1BvcG92ZXIoY29udGVudCwg
Ym91bmRzKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy50b2tlblRyYWNraW5n
Q29udHJvbGxlci5jYW5kaWRhdGUgfHwgYm91bmRzKTsKIApAQCAtMTQ3Nyw5ICsxNDYyLDkgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRl
LmV4cHJlc3Npb25SYW5nZSk7CiAKICAgICAgICAgdGhpcy5fdHJhY2tQb3BvdmVyRXZlbnRzKCk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2hvd1BvcG92ZXJGb3JGdW5jdGlvbjogZnVuY3Rpb24o
ZGF0YSkKKyAgICBfc2hvd1BvcG92ZXJGb3JGdW5jdGlvbihkYXRhKQogICAgIHsKICAgICAgICAg
dmFyIGNhbmRpZGF0ZSA9IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlOwog
CkBAIC0xNTEyLDkgKzE0OTcsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCk7CiAg
ICAgICAgIH0KICAgICAgICAgRGVidWdnZXJBZ2VudC5nZXRGdW5jdGlvbkRldGFpbHMoZGF0YS5v
YmplY3RJZCwgZGlkR2V0RGV0YWlscy5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9zaG93UG9wb3ZlckZvck9iamVjdDogZnVuY3Rpb24oZGF0YSkKKyAgICBfc2hvd1BvcG92ZXJG
b3JPYmplY3QoZGF0YSkKICAgICB7CiAgICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gIm9iamVjdCBl
eHBhbmRhYmxlIjsKQEAgLTE1MzQsMjIgKzE1MTksMjIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgYm9keUVsZW1lbnQuYXBwZW5kQ2hp
bGQob2JqZWN0VHJlZS5lbGVtZW50KTsKIAogICAgICAgICB0aGlzLl9zaG93UG9wb3Zlcihjb250
ZW50KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9zaG93UG9wb3ZlcldpdGhGb3JtYXR0ZWRWYWx1
ZTogZnVuY3Rpb24ocmVtb3RlT2JqZWN0KQorICAgIF9zaG93UG9wb3ZlcldpdGhGb3JtYXR0ZWRW
YWx1ZShyZW1vdGVPYmplY3QpCiAgICAgewogICAgICAgICB2YXIgY29udGVudCA9IFdlYkluc3Bl
Y3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9yUmVtb3RlT2JqZWN0KHJlbW90ZU9i
amVjdCk7CiAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyKGNvbnRlbnQpOwotICAgIH0sCisgICAg
fQogCi0gICAgd2lsbERpc21pc3NQb3BvdmVyOiBmdW5jdGlvbihwb3BvdmVyKQorICAgIHdpbGxE
aXNtaXNzUG9wb3Zlcihwb3BvdmVyKQogICAgIHsKICAgICAgICAgdGhpcy50b2tlblRyYWNraW5n
Q29udHJvbGxlci5yZW1vdmVIaWdobGlnaHRlZFJhbmdlKCk7CiAKICAgICAgICAgUnVudGltZUFn
ZW50LnJlbGVhc2VPYmplY3RHcm91cCgicG9wb3ZlciIpOwotICAgIH0sCisgICAgfQogCi0gICAg
X2Rpc21pc3NQb3BvdmVyOiBmdW5jdGlvbigpCisgICAgX2Rpc21pc3NQb3BvdmVyKCkKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5fcG9wb3ZlcikKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1
NjAsOSArMTU0NSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9wb3BvdmVyRXZlbnRMaXN0ZW5lcnNBcmVSZWdpc3Rl
cmVkID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLl9wb3BvdmVyRXZlbnRMaXN0ZW5lcnMudW5y
ZWdpc3RlcigpOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfdHJhY2tQb3BvdmVy
RXZlbnRzOiBmdW5jdGlvbigpCisgICAgX3RyYWNrUG9wb3ZlckV2ZW50cygpCiAgICAgewogICAg
ICAgICBpZiAoIXRoaXMuX3BvcG92ZXJFdmVudExpc3RlbmVycykgCiAgICAgICAgICAgICB0aGlz
Ll9wb3BvdmVyRXZlbnRMaXN0ZW5lcnMgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJT
ZXQodGhpcywgIlBvcG92ZXIgbGlzdGVuZXJzIik7CkBAIC0xNTcyLDI3ICsxNTU3LDI3IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICB0aGlzLl9wb3BvdmVyRXZlbnRMaXN0ZW5lcnMucmVnaXN0ZXIodGhpcy5fcG9wb3Zlci5lbGVt
ZW50LCAibW91c2VvdXQiLCB0aGlzLl9wb3BvdmVyTW91c2VvdXQpOwogICAgICAgICAgICAgdGhp
cy5fcG9wb3ZlckV2ZW50TGlzdGVuZXJzLmluc3RhbGwoKTsKICAgICAgICAgfQotICAgIH0sCisg
ICAgfQogCi0gICAgX3BvcG92ZXJNb3VzZW92ZXI6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9wb3Bv
dmVyTW91c2VvdmVyKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fbW91c2VJc092ZXJQb3Bv
dmVyID0gdHJ1ZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9wb3BvdmVyTW91c2VvdXQ6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIF9wb3BvdmVyTW91c2VvdXQoZXZlbnQpCiAgICAgewogICAgICAgICB0
aGlzLl9tb3VzZUlzT3ZlclBvcG92ZXIgPSB0aGlzLl9wb3BvdmVyLmVsZW1lbnQuY29udGFpbnMo
ZXZlbnQucmVsYXRlZFRhcmdldCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfdXBkYXRlRWRpdGFi
bGVNYXJrZXJzOiBmdW5jdGlvbihyYW5nZSkKKyAgICBfdXBkYXRlRWRpdGFibGVNYXJrZXJzKHJh
bmdlKQogICAgIHsKICAgICAgICAgdGhpcy5jcmVhdGVDb2xvck1hcmtlcnMocmFuZ2UpOwogICAg
ICAgICB0aGlzLmNyZWF0ZUdyYWRpZW50TWFya2VycyhyYW5nZSk7CiAKICAgICAgICAgdGhpcy5f
dXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwotICAgIH0sCisgICAgfQogCi0g
ICAgX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRNYXJrZWRFeHByZXNzaW9uOiBm
dW5jdGlvbihjYW5kaWRhdGUsIG1hcmtlcnMpCisgICAgX3Rva2VuVHJhY2tpbmdDb250cm9sbGVy
SGlnaGxpZ2h0ZWRNYXJrZWRFeHByZXNzaW9uKGNhbmRpZGF0ZSwgbWFya2VycykKICAgICB7CiAg
ICAgICAgIC8vIExvb2sgZm9yIHRoZSBvdXRlcm1vc3QgZWRpdGFibGUgbWFya2VyLgogICAgICAg
ICB2YXIgZWRpdGFibGVNYXJrZXI7CkBAIC0xNjI5LDIwICsxNjE0LDIwIEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fZWRp
dGluZ0NvbnRyb2xsZXIuZGVsZWdhdGUgPSB0aGlzOwogICAgICAgICB0aGlzLl9lZGl0aW5nQ29u
dHJvbGxlci5wcmVzZW50SG92ZXJNZW51KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZGlzbWlz
c0VkaXRpbmdDb250cm9sbGVyOiBmdW5jdGlvbihkaXNjcmV0ZSkKKyAgICBfZGlzbWlzc0VkaXRp
bmdDb250cm9sbGVyKGRpc2NyZXRlKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2VkaXRpbmdD
b250cm9sbGVyKQogICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXIuZGlzbWlzc0hv
dmVyTWVudShkaXNjcmV0ZSk7CiAgICAgICAgIAogICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyLmhvdmVyZWRNYXJrZXIgPSBudWxsOwogICAgICAgICBkZWxldGUgdGhpcy5fZWRp
dGluZ0NvbnRyb2xsZXI7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBDb2RlTWlycm9yRWRpdGlu
Z0NvbnRyb2xsZXIgRGVsZWdhdGUKICAgICAKLSAgICBlZGl0aW5nQ29udHJvbGxlckRpZFN0YXJ0
RWRpdGluZzogZnVuY3Rpb24oZWRpdGluZ0NvbnRyb2xsZXIpCisgICAgZWRpdGluZ0NvbnRyb2xs
ZXJEaWRTdGFydEVkaXRpbmcoZWRpdGluZ0NvbnRyb2xsZXIpCiAgICAgewogICAgICAgICAvLyBX
ZSBjYW4gcGF1c2UgdGhlIHRva2VuIHRyYWNraW5nIGNvbnRyb2xsZXIgZHVyaW5nIGVkaXRpbmcs
IGl0IHdpbGwgYmUgcmVzZXQKICAgICAgICAgLy8gdG8gdGhlIGV4cGVjdGVkIHN0YXRlIGJ5IGNh
bGxpbmcgX3VwZGF0ZUVkaXRhYmxlTWFya2VycygpIGluIHRoZQpAQCAtMTY1NCwxOCArMTYzOSwx
OCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAg
ICAgICAKICAgICAgICAgLy8gV2UgaWdub3JlIGNvbnRlbnQgY2hhbmdlcyBtYWRlIGFzIGEgcmVz
dWx0IG9mIGNvbG9yIGVkaXRpbmcuCiAgICAgICAgIHRoaXMuX2lnbm9yZUNvbnRlbnREaWRDaGFu
Z2UrKzsKLSAgICB9LAorICAgIH0KICAgICAKLSAgICBlZGl0aW5nQ29udHJvbGxlckRpZEZpbmlz
aEVkaXRpbmc6IGZ1bmN0aW9uKGVkaXRpbmdDb250cm9sbGVyKQorICAgIGVkaXRpbmdDb250cm9s
bGVyRGlkRmluaXNoRWRpdGluZyhlZGl0aW5nQ29udHJvbGxlcikKICAgICB7CiAgICAgICAgIHRo
aXMuX3VwZGF0ZUVkaXRhYmxlTWFya2VycyhlZGl0aW5nQ29udHJvbGxlci5yYW5nZSk7CiAKICAg
ICAgICAgdGhpcy5faWdub3JlQ29udGVudERpZENoYW5nZS0tOwogCiAgICAgICAgIGRlbGV0ZSB0
aGlzLl9lZGl0aW5nQ29udHJvbGxlcjsKLSAgICB9LAorICAgIH0KIAotICAgIF9zZXRUeXBlVG9r
ZW5Bbm5vdGF0b3JFbmFibGVkU3RhdGU6IGZ1bmN0aW9uKHNob3VsZEFjdGl2YXRlKQorICAgIF9z
ZXRUeXBlVG9rZW5Bbm5vdGF0b3JFbmFibGVkU3RhdGUoc2hvdWxkQWN0aXZhdGUpCiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IpOwogICAgICAg
ICBpZiAoIXRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKQEAgLTE3MDAsOSArMTY4NSw5IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIFdl
Ykluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWUgPSBz
aG91bGRBY3RpdmF0ZTsKIAogICAgICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJv
bGxlclN0YXRlKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZ2V0QXNzb2NpYXRlZFNjcmlwdDog
ZnVuY3Rpb24oKQorICAgIF9nZXRBc3NvY2lhdGVkU2NyaXB0KCkKICAgICB7CiAgICAgICAgIHZh
ciBzY3JpcHQgPSBudWxsOwogICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBtZSBtb2Rp
ZmllZCB0byB3b3JrIHdpdGggSFRNTCBmaWxlcyB3aXRoIGlubGluZSBzY3JpcHQgdGFncy4KQEAg
LTE3MTEsOSArMTY5Niw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuUmVzb3VyY2UgJiYgdGhpcy5fc291cmNlQ29kZS50eXBlID09PSBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQgJiYgdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzLmxl
bmd0aCkKICAgICAgICAgICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0c1swXTsK
ICAgICAgICAgcmV0dXJuIHNjcmlwdDsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYWtlVHlwZVRv
a2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3IoKQog
ICAgIHsKICAgICAgICAgaWYgKCFSdW50aW1lQWdlbnQuZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFi
bGVzQXRPZmZzZXRzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTcyMyw5ICsxNzA4LDkgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2Vi
SW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCBzY3JpcHQpOwotICAgIH0sCisgICAg
fQogCi0gICAgX21ha2VCYXNpY0Jsb2NrQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgX21ha2VC
YXNpY0Jsb2NrQW5ub3RhdG9yKCkKICAgICB7CiAgICAgICAgIGlmICghUnVudGltZUFnZW50Lmdl
dEJhc2ljQmxvY2tzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTczNSwyNCArMTcyMCwyNCBA
QCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0b3IgPSBuZXcg
V2ViSW5zcGVjdG9yLkJhc2ljQmxvY2tBbm5vdGF0b3IodGhpcywgc2NyaXB0KTsKLSAgICB9LAor
ICAgIH0KIAotICAgIF9lbmFibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1
bmN0aW9uKCkKKyAgICBfZW5hYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yKCkK
ICAgICB7CiAgICAgICAgIC8vIFBhdXNlIHVwZGF0aW5nIHR5cGUgdG9rZW5zIHdoaWxlIHNjcm9s
bGluZyB0byBwcmV2ZW50IGZyYW1lIGxvc3MuCiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlz
Ll90eXBlVG9rZW5TY3JvbGxIYW5kbGVyKTsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuU2Nyb2xs
SGFuZGxlciA9IHRoaXMuX21ha2VUeXBlVG9rZW5TY3JvbGxFdmVudEhhbmRsZXIoKTsKICAgICAg
ICAgdGhpcy5hZGRTY3JvbGxIYW5kbGVyKHRoaXMuX3R5cGVUb2tlblNjcm9sbEhhbmRsZXIpOwot
ICAgIH0sCisgICAgfQogCi0gICAgX2Rpc2FibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5v
dGF0b3I6IGZ1bmN0aW9uKCkKKyAgICBfZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFu
bm90YXRvcigpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90eXBlVG9rZW5T
Y3JvbGxIYW5kbGVyKTsKICAgICAgICAgdGhpcy5yZW1vdmVTY3JvbGxIYW5kbGVyKHRoaXMuX3R5
cGVUb2tlblNjcm9sbEhhbmRsZXIpOwogICAgICAgICB0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5k
bGVyID0gbnVsbDsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYWtlVHlwZVRva2VuU2Nyb2xsRXZl
bnRIYW5kbGVyOiBmdW5jdGlvbigpCisgICAgX21ha2VUeXBlVG9rZW5TY3JvbGxFdmVudEhhbmRs
ZXIoKQogICAgIHsKICAgICAgICAgdmFyIHRpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKICAgICAg
ICAgZnVuY3Rpb24gc2Nyb2xsSGFuZGxlcigpCkBAIC0xNzc5LDQgKzE3NjQsMTcgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1X
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5MaW5lRXJyb3JTdHlsZUNsYXNzTmFtZSA9ICJlcnJvciI7CitXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IuTGluZVdhcm5pbmdTdHlsZUNsYXNzTmFtZSA9ICJ3YXJu
aW5nIjsKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Qb3BvdmVyRGVidWdnZXJD
b250ZW50U3R5bGVDbGFzc05hbWUgPSAiZGVidWdnZXItcG9wb3Zlci1jb250ZW50IjsKK1dlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Ib3ZlcmVkRXhwcmVzc2lvbkhpZ2hsaWdodFN0
eWxlQ2xhc3NOYW1lID0gImhvdmVyZWQtZXhwcmVzc2lvbi1oaWdobGlnaHQiOworV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9Nb3VzZU92ZXJUb2tlblRvTWFrZUhv
dmVyZWRUb2tlbiA9IDUwMDsKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5EdXJh
dGlvblRvTW91c2VPdXRPZkhvdmVyZWRUb2tlblRvUmVsZWFzZSA9IDEwMDA7CitXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub1VwZGF0ZVR5cGVUb2tlbnNBZnRlclNj
cm9sbGluZyA9IDEwMDsKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5BdXRvRm9y
bWF0TWluaW11bUxpbmVMZW5ndGggPSA1MDA7CitXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IuV2lkZ2V0Q29udGFpbnNNdWx0aXBsZUlzc3Vlc1N5bWJvbCA9IFN5bWJvbCgic291cmNl
LWNvZGUtd2lkZ2V0LWNvbnRhaW5zLW11bHRpcGxlLWlzc3VlcyIpOworCitXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IuRXZlbnQgPSB7CisgICAgQ29udGVudFdpbGxQb3B1bGF0ZTog
InNvdXJjZS1jb2RlLXRleHQtZWRpdG9yLWNvbnRlbnQtd2lsbC1wb3B1bGF0ZSIsCisgICAgQ29u
dGVudERpZFBvcHVsYXRlOiAic291cmNlLWNvZGUtdGV4dC1lZGl0b3ItY29udGVudC1kaWQtcG9w
dWxhdGUiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1RleHRFZGl0b3IuanMKaW5kZXggM2VmMzhiOS4uMTY4NDk0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRp
dG9yLmpzCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMywxNCArMjMsMTUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG1p
bWVUeXBlLCBkZWxlZ2F0ZSkKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yID0gY2xhc3MgVGV4dEVk
aXRvciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVy
dCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIo
KS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisgICAgY29uc3RydWN0
b3IoZWxlbWVudCwgbWltZVR5cGUsIGRlbGVnYXRlKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsK
IAogICAgICAgICB2YXIgdGV4dCA9IChlbGVtZW50ID8gZWxlbWVudC50ZXh0Q29udGVudCA6ICIi
KTsKICAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQgfHwgZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLlN0eWxlQ2xhc3NOYW1lKTsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFz
c0xpc3QuYWRkKCJ0ZXh0LWVkaXRvciIpOwogICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlz
dC5hZGQoV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVkU3R5bGVDbGFzc05hbWUpOwogCiAg
ICAgICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBDb2RlTWlycm9yKHRoaXMuZWxlbWVudCwgewpAQCAt
NjgsNDUgKzY5LDE5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yID0gZnVuY3Rpb24oZWxlbWVu
dCwgbWltZVR5cGUsIGRlbGVnYXRlKQogICAgICAgICB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAg
PSBudWxsOwogCiAgICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGUgfHwgbnVsbDsKLX07
Ci0KLS8vIEZJWE1FOiBNb3ZlIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcyBhbmQg
d2UgY2FuIHJlbW92ZSB0aGlzLgotV2ViSW5zcGVjdG9yLk9iamVjdC5kZXByZWNhdGVkQWRkQ29u
c3RydWN0b3JGdW5jdGlvbnMoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOwotCi1XZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5TdHlsZUNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvciI7Ci1XZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5IaWdobGlnaHRlZFN0eWxlQ2xhc3NOYW1lID0gImhpZ2hsaWdodGVkIjsK
LVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLlNlYXJjaFJlc3VsdFN0eWxlQ2xhc3NOYW1lID0gInNl
YXJjaC1yZXN1bHQiOwotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuSGFzQnJlYWtwb2ludFN0eWxl
Q2xhc3NOYW1lID0gImhhcy1icmVha3BvaW50IjsKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkJy
ZWFrcG9pbnRSZXNvbHZlZFN0eWxlQ2xhc3NOYW1lID0gImJyZWFrcG9pbnQtcmVzb2x2ZWQiOwot
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuQnJlYWtwb2ludEF1dG9Db250aW51ZVN0eWxlQ2xhc3NO
YW1lID0gImJyZWFrcG9pbnQtYXV0by1jb250aW51ZSI7Ci1XZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ci5CcmVha3BvaW50RGlzYWJsZWRTdHlsZUNsYXNzTmFtZSA9ICJicmVha3BvaW50LWRpc2FibGVk
IjsKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLk11bHRpcGxlQnJlYWtwb2ludHNTdHlsZUNsYXNz
TmFtZSA9ICJtdWx0aXBsZS1icmVha3BvaW50cyI7Ci1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5F
eGVjdXRpb25MaW5lU3R5bGVDbGFzc05hbWUgPSAiZXhlY3V0aW9uLWxpbmUiOwotV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3IuQm91bmN5SGlnaGxpZ2h0U3R5bGVDbGFzc05hbWUgPSAiYm91bmN5LWhp
Z2hsaWdodCI7Ci1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5OdW1iZXJPZkZpbmRzUGVyU2VhcmNo
QmF0Y2ggPSAxMDsKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkhpZ2hsaWdodEFuaW1hdGlvbkR1
cmF0aW9uID0gMjAwMDsKLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnQgPSB7Ci0gICAg
RXhlY3V0aW9uTGluZU51bWJlckRpZENoYW5nZTogInRleHQtZWRpdG9yLWV4ZWN1dGlvbi1saW5l
LW51bWJlci1kaWQtY2hhbmdlIiwKLSAgICBOdW1iZXJPZlNlYXJjaFJlc3VsdHNEaWRDaGFuZ2U6
ICJ0ZXh0LWVkaXRvci1udW1iZXItb2Ytc2VhcmNoLXJlc3VsdHMtZGlkLWNoYW5nZSIsCi0gICAg
Q29udGVudERpZENoYW5nZTogInRleHQtZWRpdG9yLWNvbnRlbnQtZGlkLWNoYW5nZSIsCi0gICAg
Rm9ybWF0dGluZ0RpZENoYW5nZTogInRleHQtZWRpdG9yLWZvcm1hdHRpbmctZGlkLWNoYW5nZSIK
LX07Ci0KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1
Y3RvcjogV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IsCisgICAgfQogCiAgICAgLy8gUHVibGljCiAK
ICAgICBnZXQgZWxlbWVudCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsK
LSAgICB9LAorICAgIH0KIAogICAgIGdldCBzdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX2NvZGVNaXJyb3IuZ2V0VmFsdWUoKTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBz
dHJpbmcobmV3U3RyaW5nKQogICAgIHsKQEAgLTE0NiwyMiArMTIxLDIyIEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vcGVy
YXRpb24odXBkYXRlLmJpbmQodGhpcykpOwogICAgICAgICB0aGlzLl9pZ25vcmVDb2RlTWlycm9y
Q29udGVudERpZENoYW5nZUV2ZW50LS07CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2ln
bm9yZUNvZGVNaXJyb3JDb250ZW50RGlkQ2hhbmdlRXZlbnQgPj0gMCk7Ci0gICAgfSwKKyAgICB9
CiAKICAgICBnZXQgcmVhZE9ubHkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVN
aXJyb3IuZ2V0T3B0aW9uKCJyZWFkT25seSIpIHx8IGZhbHNlOwotICAgIH0sCisgICAgfQogCiAg
ICAgc2V0IHJlYWRPbmx5KHJlYWRPbmx5KQogICAgIHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJv
ci5zZXRPcHRpb24oInJlYWRPbmx5IiwgcmVhZE9ubHkpOwotICAgIH0sCisgICAgfQogCiAgICAg
Z2V0IGZvcm1hdHRlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkOwot
ICAgIH0sCisgICAgfQogCiAgICAgc2V0IGZvcm1hdHRlZChmb3JtYXR0ZWQpCiAgICAgewpAQCAt
MTgwLDUyICsxNTUsNTIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewog
ICAgICAgICB0aGlzLl9mb3JtYXR0ZWQgPSBmb3JtYXR0ZWQ7CiAKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnQuRm9ybWF0
dGluZ0RpZENoYW5nZSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgYXV0b0Zvcm1hdChhdXRv
KQogICAgIHsKICAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdCA9IGF1dG87Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBoYXNGb3JtYXR0ZXI6IGZ1bmN0aW9uKCkKKyAgICBoYXNGb3JtYXR0ZXIoKQogICAg
IHsKLSAgICAgICAgY29uc3Qgc3VwcG9ydGVkTW9kZXMgPSB7CisgICAgICAgIHZhciBzdXBwb3J0
ZWRNb2RlcyA9IHsKICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogdHJ1ZSwKICAgICAgICAgICAg
ICJjc3MiOiB0cnVlLAogICAgICAgICB9OwogCiAgICAgICAgIHZhciBtb2RlID0gdGhpcy5fY29k
ZU1pcnJvci5nZXRNb2RlKCk7CiAgICAgICAgIHJldHVybiBtb2RlLm5hbWUgaW4gc3VwcG9ydGVk
TW9kZXM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjYW5CZUZvcm1hdHRlZDogZnVuY3Rpb24oKQor
ICAgIGNhbkJlRm9ybWF0dGVkKCkKICAgICB7CiAgICAgICAgIC8vIENhbiBiZSBvdmVycmlkZW4g
Ynkgc3ViY2xhc3Nlcy4KICAgICAgICAgcmV0dXJuIHRoaXMuaGFzRm9ybWF0dGVyKCk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBjYW5TaG93VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAg
Y2FuU2hvd1R5cGVBbm5vdGF0aW9ucygpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICBnZXQgc2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIHsKICAgICAg
ICAgdmFyIHN0YXJ0ID0gdGhpcy5fY29kZU1pcnJvci5nZXRDdXJzb3IodHJ1ZSk7CiAgICAgICAg
IHZhciBlbmQgPSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcihmYWxzZSk7CiAgICAgICAgIHJl
dHVybiB0aGlzLl90ZXh0UmFuZ2VGcm9tQ29kZU1pcnJvclBvc2l0aW9uKHN0YXJ0LCBlbmQpOwot
ICAgIH0sCisgICAgfQogCiAgICAgc2V0IHNlbGVjdGVkVGV4dFJhbmdlKHRleHRSYW5nZSkKICAg
ICB7CiAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2NvZGVNaXJyb3JQb3NpdGlvbkZyb21U
ZXh0UmFuZ2UodGV4dFJhbmdlKTsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRTZWxlY3Rp
b24ocG9zaXRpb24uc3RhcnQsIHBvc2l0aW9uLmVuZCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBn
ZXQgbWltZVR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX21pbWVUeXBlOwotICAg
IH0sCisgICAgfQogCiAgICAgc2V0IG1pbWVUeXBlKG5ld01JTUVUeXBlKQogICAgIHsKQEAgLTIz
MywxMiArMjA4LDEyIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICB0aGlzLl9taW1lVHlwZSA9IG5ld01JTUVUeXBlOwogICAgICAgICB0aGlzLl9jb2Rl
TWlycm9yLnNldE9wdGlvbigibW9kZSIsIG5ld01JTUVUeXBlKTsKLSAgICB9LAorICAgIH0KIAog
ICAgIGdldCBleGVjdXRpb25MaW5lTnVtYmVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9leGVjdXRpb25MaW5lTnVtYmVyOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IGV4ZWN1dGlv
bkxpbmVOdW1iZXIobGluZU51bWJlcikKICAgICB7CkBAIC0yNTIsNDcgKzIyNyw0NyBAQCBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFN0aWxsIGRpc3Bh
dGNoIHRoZSBldmVudCBldmVuIGlmIHRoZSBudW1iZXIgZGlkbid0IGNoYW5nZS4gVGhlIGV4ZWN1
dGlvbiBzdGF0ZSBzdGlsbAogICAgICAgICAvLyBjb3VsZCBoYXZlIGNoYW5nZWQgKGUuZy4gY29u
dGludWluZyBpbiBhIGxvb3Agd2l0aCBhIGJyZWFrcG9pbnQgaW5zaWRlKS4KICAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXZlbnQu
RXhlY3V0aW9uTGluZU51bWJlckRpZENoYW5nZSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQg
ZXhlY3V0aW9uQ29sdW1uTnVtYmVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9leGVj
dXRpb25Db2x1bW5OdW1iZXI7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgZXhlY3V0aW9uQ29s
dW1uTnVtYmVyKGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIHRoaXMuX2V4ZWN1dGlvbkNv
bHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBmb3Jt
YXR0ZXJTb3VyY2VNYXAoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlclNv
dXJjZU1hcDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCB0b2tlblRyYWNraW5nQ29udHJvbGxl
cigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXI7
Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgZGVsZWdhdGUoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHRoaXMuX2RlbGVnYXRlOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IGRlbGVnYXRlKG5l
d0RlbGVnYXRlKQogICAgIHsKICAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBuZXdEZWxlZ2F0ZSB8
fCBudWxsOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IG51bWJlck9mU2VhcmNoUmVzdWx0cygp
CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGg7Ci0gICAg
fSwKKyAgICB9CiAKICAgICBnZXQgY3VycmVudFNlYXJjaFF1ZXJ5KCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLl9zZWFyY2hRdWVyeTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBhdXRv
bWF0aWNhbGx5UmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHQocmV2ZWFsKQogICAgIHsKQEAgLTMwMyw5
ICsyNzgsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICBpZiAodGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID09PSAtMSkKICAgICAgICAg
ICAgICAgICB0aGlzLl9yZXZlYWxGaXJzdFNlYXJjaFJlc3VsdEFmdGVyQ3Vyc29yKCk7CiAgICAg
ICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5
KQorICAgIHBlcmZvcm1TZWFyY2gocXVlcnkpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fc2Vh
cmNoUXVlcnkgPT09IHF1ZXJ5KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzY3LDkgKzM0Miw5
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBT
dGFydCB0aGUgc2VhcmNoLgogICAgICAgICBib3VuZEJhdGNoU2VhcmNoKCk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBhZGRTZWFyY2hSZXN1bHRzOiBmdW5jdGlvbih0ZXh0UmFuZ2VzKQorICAgIGFk
ZFNlYXJjaFJlc3VsdHModGV4dFJhbmdlcykKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHRleHRSYW5nZXMpOwogICAgICAgICBpZiAoIXRleHRSYW5nZXMgfHwgIXRleHRSYW5nZXMubGVu
Z3RoKQpAQCAtMzkxLDkgKzM2Niw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3BlcmF0aW9uKG1h
cmtSYW5nZXMuYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzZWFyY2hDbGVhcmVk
OiBmdW5jdGlvbigpCisgICAgc2VhcmNoQ2xlYXJlZCgpCiAgICAgewogICAgICAgICBmdW5jdGlv
biBjbGVhclJlc3VsdHMoKSB7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpCkBAIC00MDUsMTcgKzM4MCwxNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3NlYXJjaFF1ZXJ5
ID0gbnVsbDsKICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOwogICAgICAgICB0aGlz
Ll9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKLSAgICB9LAorICAgIH0KIAotICAgIHNl
YXJjaFF1ZXJ5V2l0aFNlbGVjdGlvbjogZnVuY3Rpb24oKQorICAgIHNlYXJjaFF1ZXJ5V2l0aFNl
bGVjdGlvbigpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2NvZGVNaXJyb3Iuc29tZXRoaW5n
U2VsZWN0ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxsOwogCiAgICAgICAgIHJldHVybiB0
aGlzLl9jb2RlTWlycm9yLmdldFNlbGVjdGlvbigpOwotICAgIH0sCisgICAgfQogCi0gICAgcmV2
ZWFsUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKGNoYW5nZUZvY3VzKQorICAgIHJldmVh
bFByZXZpb3VzU2VhcmNoUmVzdWx0KGNoYW5nZUZvY3VzKQogICAgIHsKICAgICAgICAgaWYgKCF0
aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzMSw5
ICs0MDYsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSB0aGlzLl9zZWFyY2hSZXN1bHRz
Lmxlbmd0aCAtIDE7CiAKICAgICAgICAgdGhpcy5fcmV2ZWFsU2VhcmNoUmVzdWx0KHRoaXMuX3Nl
YXJjaFJlc3VsdHNbdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4XSwgY2hhbmdlRm9jdXMs
IC0xKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJldmVhbE5leHRTZWFyY2hSZXN1bHQ6IGZ1bmN0
aW9uKGNoYW5nZUZvY3VzKQorICAgIHJldmVhbE5leHRTZWFyY2hSZXN1bHQoY2hhbmdlRm9jdXMp
CiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtNDQ5LDI1ICs0MjQsMjUgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdElu
ZGV4ID0gMDsKIAogICAgICAgICB0aGlzLl9yZXZlYWxTZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNo
UmVzdWx0c1t0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXhdLCBjaGFuZ2VGb2N1cywgMSk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBsaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIGxp
bmUobGluZU51bWJlcikKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLmdl
dExpbmUobGluZU51bWJlcik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBnZXRUZXh0SW5SYW5nZTog
ZnVuY3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pCisgICAgZ2V0VGV4dEluUmFuZ2Uo
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5f
Y29kZU1pcnJvci5nZXRSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBhZGRTdHlsZVRvVGV4dFJhbmdlOiBmdW5jdGlvbihzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbiwgc3R5bGVDbGFzc05hbWUpCisgICAgYWRkU3R5bGVUb1RleHRSYW5nZShz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc3R5bGVDbGFzc05hbWUpCiAgICAgewogICAgICAg
ICBlbmRQb3NpdGlvbi5jaCArPSAxOwogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5n
ZXREb2MoKS5tYXJrVGV4dChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwge2NsYXNzTmFtZTog
c3R5bGVDbGFzc05hbWUsIGluY2x1c2l2ZUxlZnQ6IHRydWUsIGluY2x1c2l2ZVJpZ2h0OiB0cnVl
fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXZlYWxQb3NpdGlvbjogZnVuY3Rpb24ocG9zaXRp
b24sIHRleHRSYW5nZVRvU2VsZWN0LCBmb3JjZVVuZm9ybWF0dGVkLCBub0hpZ2hsaWdodCkKKyAg
ICByZXZlYWxQb3NpdGlvbihwb3NpdGlvbiwgdGV4dFJhbmdlVG9TZWxlY3QsIGZvcmNlVW5mb3Jt
YXR0ZWQsIG5vSGlnaGxpZ2h0KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQocG9zaXRp
b24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlUG9zaXRpb24sICJyZXZlYWxQb3NpdGlvbiBjYWxsZWQgd2l0aG91dCBhIFNvdXJjZUNv
ZGVQb3NpdGlvbiIpOwogICAgICAgICBpZiAoIShwb3NpdGlvbiBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlUG9zaXRpb24pKQpAQCAtNTI0LDE0ICs0OTksMTQgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5f
Y29kZU1pcnJvci5vcGVyYXRpb24ocmV2ZWFsQW5kSGlnaGxpZ2h0TGluZS5iaW5kKHRoaXMpKTsK
LSAgICB9LAorICAgIH0KIAotICAgIHVwZGF0ZUxheW91dDogZnVuY3Rpb24oZm9yY2UpCisgICAg
dXBkYXRlTGF5b3V0KGZvcmNlKQogICAgIHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5yZWZy
ZXNoKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzaG93bjogZnVuY3Rpb24oKQorICAgIHNob3du
KCkKICAgICB7CiAgICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlOwogCkBAIC01NDIsMTQgKzUx
NywxNCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8v
IFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhcyBhIHNlcGFyYXRlIG9wZXJhdGlvbiBmcm9tIHRoZSBy
ZWZyZXNoCiAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHNjcm9sbEluZm8gY29vcmRpbmF0ZXMgYXJl
IGNvcnJlY3QuCiAgICAgICAgIHRoaXMuX3JldmVhbFBlbmRpbmdQb3NpdGlvbklmUG9zc2libGUo
KTsKLSAgICB9LAorICAgIH0KIAotICAgIGhpZGRlbjogZnVuY3Rpb24oKQorICAgIGhpZGRlbigp
CiAgICAgewogICAgICAgICB0aGlzLl92aXNpYmxlID0gZmFsc2U7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBzZXRCcmVha3BvaW50SW5mb0ZvckxpbmVBbmRDb2x1bW46IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlciwgYnJlYWtwb2ludEluZm8pCisgICAgc2V0QnJlYWtwb2ludEluZm9G
b3JMaW5lQW5kQ29sdW1uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgYnJlYWtwb2ludEluZm8p
CiAgICAgewogICAgICAgICBpZiAodGhpcy5faWdub3JlU2V0QnJlYWtwb2ludEluZm9DYWxscykK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTU1OCw5ICs1MzMsOSBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50VG9M
aW5lQW5kQ29sdW1uV2l0aEluZm8obGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBicmVha3BvaW50
SW5mbyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRG
cm9tTGluZUFuZENvbHVtbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgIH0sCisgICAg
fQogCi0gICAgdXBkYXRlQnJlYWtwb2ludExpbmVBbmRDb2x1bW46IGZ1bmN0aW9uKG9sZExpbmVO
dW1iZXIsIG9sZENvbHVtbk51bWJlciwgbmV3TGluZU51bWJlciwgbmV3Q29sdW1uTnVtYmVyKQor
ICAgIHVwZGF0ZUJyZWFrcG9pbnRMaW5lQW5kQ29sdW1uKG9sZExpbmVOdW1iZXIsIG9sZENvbHVt
bk51bWJlciwgbmV3TGluZU51bWJlciwgbmV3Q29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAg
Y29uc29sZS5hc3NlcnQodGhpcy5fYnJlYWtwb2ludHNbb2xkTGluZU51bWJlcl0pOwogICAgICAg
ICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRzW29sZExpbmVOdW1iZXJdKQpAQCAtNTczLDE4ICs1NDgs
MTggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB2YXIg
YnJlYWtwb2ludEluZm8gPSB0aGlzLl9icmVha3BvaW50c1tvbGRMaW5lTnVtYmVyXVtvbGRDb2x1
bW5OdW1iZXJdOwogICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbUxpbmVBbmRDb2x1
bW4ob2xkTGluZU51bWJlciwgb2xkQ29sdW1uTnVtYmVyKTsKICAgICAgICAgdGhpcy5fYWRkQnJl
YWtwb2ludFRvTGluZUFuZENvbHVtbldpdGhJbmZvKG5ld0xpbmVOdW1iZXIsIG5ld0NvbHVtbk51
bWJlciwgYnJlYWtwb2ludEluZm8pOwotICAgIH0sCisgICAgfQogCi0gICAgYWRkU3R5bGVDbGFz
c1RvTGluZTogZnVuY3Rpb24obGluZU51bWJlciwgc3R5bGVDbGFzc05hbWUpCisgICAgYWRkU3R5
bGVDbGFzc1RvTGluZShsaW5lTnVtYmVyLCBzdHlsZUNsYXNzTmFtZSkKICAgICB7CiAgICAgICAg
IHZhciBsaW5lSGFuZGxlID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5lSGFuZGxlKGxpbmVOdW1i
ZXIpOwogICAgICAgICBpZiAoIWxpbmVIYW5kbGUpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
IAogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5hZGRMaW5lQ2xhc3MobGluZUhhbmRs
ZSwgIndyYXAiLCBzdHlsZUNsYXNzTmFtZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZW1vdmVT
dHlsZUNsYXNzRnJvbUxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHN0eWxlQ2xhc3NOYW1lKQor
ICAgIHJlbW92ZVN0eWxlQ2xhc3NGcm9tTGluZShsaW5lTnVtYmVyLCBzdHlsZUNsYXNzTmFtZSkK
ICAgICB7CiAgICAgICAgIHZhciBsaW5lSGFuZGxlID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5l
SGFuZGxlKGxpbmVOdW1iZXIpOwogICAgICAgICBjb25zb2xlLmFzc2VydChsaW5lSGFuZGxlKTsK
QEAgLTU5Miw5ICs1NjcsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1p
cnJvci5yZW1vdmVMaW5lQ2xhc3MobGluZUhhbmRsZSwgIndyYXAiLCBzdHlsZUNsYXNzTmFtZSk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICB0b2dnbGVTdHlsZUNsYXNzRm9yTGluZTogZnVuY3Rpb24o
bGluZU51bWJlciwgc3R5bGVDbGFzc05hbWUpCisgICAgdG9nZ2xlU3R5bGVDbGFzc0ZvckxpbmUo
bGluZU51bWJlciwgc3R5bGVDbGFzc05hbWUpCiAgICAgewogICAgICAgICB2YXIgbGluZUhhbmRs
ZSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0TGluZUhhbmRsZShsaW5lTnVtYmVyKTsKICAgICAgICAg
Y29uc29sZS5hc3NlcnQobGluZUhhbmRsZSk7CkBAIC02MDIsOSArNTc3LDkgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLnRvZ2dsZUxpbmVDbGFzcyhsaW5lSGFu
ZGxlLCAid3JhcCIsIHN0eWxlQ2xhc3NOYW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIGNyZWF0
ZVdpZGdldEZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgY3JlYXRlV2lkZ2V0Rm9y
TGluZShsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgdmFyIGxpbmVIYW5kbGUgPSB0aGlzLl9j
b2RlTWlycm9yLmdldExpbmVIYW5kbGUobGluZU51bWJlcik7CiAgICAgICAgIGlmICghbGluZUhh
bmRsZSkKQEAgLTYxMyw1MyArNTg4LDUzIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdmFyIHdpZGdldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKICAgICAgICAgdmFyIGxpbmVXaWRnZXQgPSB0aGlzLl9jb2RlTWlycm9yLmFk
ZExpbmVXaWRnZXQobGluZUhhbmRsZSwgd2lkZ2V0RWxlbWVudCwge2NvdmVyR3V0dGVyOiBmYWxz
ZSwgbm9IU2Nyb2xsOiB0cnVlLCBoYW5kbGVNb3VzZUV2ZW50czogdHJ1ZX0pOwogICAgICAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5MaW5lV2lkZ2V0KGxpbmVXaWRnZXQsIHdpZGdldEVsZW1l
bnQpOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGxpbmVDb3VudCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5saW5lQ291bnQoKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIGZvY3VzOiBmdW5jdGlvbigpCisgICAgZm9jdXMoKQogICAgIHsKICAgICAgICAgdGhpcy5f
Y29kZU1pcnJvci5mb2N1cygpOwotICAgIH0sCisgICAgfQogCi0gICAgY29udGVudERpZENoYW5n
ZTogZnVuY3Rpb24ocmVwbGFjZWRSYW5nZXMsIG5ld1JhbmdlcykKKyAgICBjb250ZW50RGlkQ2hh
bmdlKHJlcGxhY2VkUmFuZ2VzLCBuZXdSYW5nZXMpCiAgICAgewogICAgICAgICAvLyBJbXBsZW1l
bnRlZCBieSBzdWJjbGFzc2VzLgotICAgIH0sCisgICAgfQogCi0gICAgcmVjdHNGb3JSYW5nZTog
ZnVuY3Rpb24ocmFuZ2UpCisgICAgcmVjdHNGb3JSYW5nZShyYW5nZSkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLl9jb2RlTWlycm9yLnJlY3RzRm9yUmFuZ2UocmFuZ2UpOwotICAgIH0sCisg
ICAgfQogCiAgICAgZ2V0IG1hcmtlcnMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2Nv
ZGVNaXJyb3IuZ2V0QWxsTWFya3MoKS5tYXAoZnVuY3Rpb24oY29kZU1pcnJvclRleHRNYXJrZXIp
IHsKICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVGV4dE1hcmtlci50ZXh0TWFya2Vy
Rm9yQ29kZU1pcnJvclRleHRNYXJrZXIoY29kZU1pcnJvclRleHRNYXJrZXIpOwogICAgICAgICB9
KTsKLSAgICB9LAorICAgIH0KIAotICAgIG1hcmtlcnNBdFBvc2l0aW9uOiBmdW5jdGlvbihwb3Np
dGlvbikKKyAgICBtYXJrZXJzQXRQb3NpdGlvbihwb3NpdGlvbikKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9jb2RlTWlycm9yLmZpbmRNYXJrc0F0KHBvc2l0aW9uKS5tYXAoZnVuY3Rpb24o
Y29kZU1pcnJvclRleHRNYXJrZXIpIHsKICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
VGV4dE1hcmtlci50ZXh0TWFya2VyRm9yQ29kZU1pcnJvclRleHRNYXJrZXIoY29kZU1pcnJvclRl
eHRNYXJrZXIpOwogICAgICAgICB9KTsKLSAgICB9LAorICAgIH0KIAotICAgIGNyZWF0ZUNvbG9y
TWFya2VyczogZnVuY3Rpb24ocmFuZ2UpCisgICAgY3JlYXRlQ29sb3JNYXJrZXJzKHJhbmdlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuY3JlYXRlQ29sb3JNYXJrZXJz
KHJhbmdlKTsKLSAgICB9LAorICAgIH0KIAotICAgIGNyZWF0ZUdyYWRpZW50TWFya2VyczogZnVu
Y3Rpb24ocmFuZ2UpCisgICAgY3JlYXRlR3JhZGllbnRNYXJrZXJzKHJhbmdlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuY3JlYXRlR3JhZGllbnRNYXJrZXJzKHJhbmdl
KTsKLSAgICB9LAorICAgIH0KIAotICAgIGVkaXRpbmdDb250cm9sbGVyRm9yTWFya2VyOiBmdW5j
dGlvbihlZGl0YWJsZU1hcmtlcikKKyAgICBlZGl0aW5nQ29udHJvbGxlckZvck1hcmtlcihlZGl0
YWJsZU1hcmtlcikKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZWRpdGFibGVNYXJrZXIudHlwZSkg
ewogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5UZXh0TWFya2VyLlR5cGUuQ29sb3I6CkBAIC02
NjksOSArNjQ0LDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ29kZU1p
cnJvckVkaXRpbmdDb250cm9sbGVyKHRoaXMuX2NvZGVNaXJyb3IsIGVkaXRhYmxlTWFya2VyKTsK
ICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgdmlzaWJsZVJhbmdlT2Zmc2V0czogZnVu
Y3Rpb24oKQorICAgIHZpc2libGVSYW5nZU9mZnNldHMoKQogICAgIHsKICAgICAgICAgdmFyIHN0
YXJ0T2Zmc2V0ID0gbnVsbDsKICAgICAgICAgdmFyIGVuZE9mZnNldCA9IG51bGw7CkBAIC02ODYs
OSArNjYxLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICB9CiAKICAgICAgICAgcmV0dXJuIHtzdGFydE9mZnNldCwgZW5kT2Zmc2V0fTsKLSAgICB9LAor
ICAgIH0KIAotICAgIG9yaWdpbmFsT2Zmc2V0VG9DdXJyZW50UG9zaXRpb246IGZ1bmN0aW9uKG9m
ZnNldCkKKyAgICBvcmlnaW5hbE9mZnNldFRvQ3VycmVudFBvc2l0aW9uKG9mZnNldCkKICAgICB7
CiAgICAgICAgIHZhciBwb3NpdGlvbiA9IG51bGw7CiAgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0
ZXJTb3VyY2VNYXApIHsKQEAgLTY5OCwxNCArNjczLDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5fY29kZU1pcnJv
ci5nZXREb2MoKS5wb3NGcm9tSW5kZXgob2Zmc2V0KTsKIAogICAgICAgICByZXR1cm4gcG9zaXRp
b247Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjdXJyZW50T2Zmc2V0VG9DdXJyZW50UG9zaXRpb246
IGZ1bmN0aW9uKG9mZnNldCkKKyAgICBjdXJyZW50T2Zmc2V0VG9DdXJyZW50UG9zaXRpb24ob2Zm
c2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuZ2V0RG9jKCkucG9z
RnJvbUluZGV4KG9mZnNldCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjdXJyZW50UG9zaXRpb25U
b09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlvbihwb3NpdGlvbikKKyAgICBjdXJyZW50UG9zaXRpb25U
b09yaWdpbmFsT2Zmc2V0KHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgdmFyIG9mZnNldCA9IG51
bGw7CiAgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXApCkBAIC03MTQsMzYgKzY4
OSwzNiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICBvZmZzZXQgPSB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLl9jb2RlTWlycm9yLmdldERv
YygpLmluZGV4RnJvbVBvcyhwb3NpdGlvbik7CiAKICAgICAgICAgcmV0dXJuIG9mZnNldDsKLSAg
ICB9LAorICAgIH0KIAotICAgIGN1cnJlbnRQb3NpdGlvblRvQ3VycmVudE9mZnNldDogZnVuY3Rp
b24ocG9zaXRpb24pCisgICAgY3VycmVudFBvc2l0aW9uVG9DdXJyZW50T2Zmc2V0KHBvc2l0aW9u
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhG
cm9tUG9zKHBvc2l0aW9uKTsKLSAgICB9LAorICAgIH0KIAotICAgIHNldElubGluZVdpZGdldDog
ZnVuY3Rpb24ocG9zaXRpb24sIGlubGluZUVsZW1lbnQpCisgICAgc2V0SW5saW5lV2lkZ2V0KHBv
c2l0aW9uLCBpbmxpbmVFbGVtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVN
aXJyb3Iuc2V0VW5pcXVlQm9va21hcmsocG9zaXRpb24sIHt3aWRnZXQ6IGlubGluZUVsZW1lbnR9
KTsKLSAgICB9LAorICAgIH0KIAotICAgIGFkZFNjcm9sbEhhbmRsZXI6IGZ1bmN0aW9uKGhhbmRs
ZXIpCisgICAgYWRkU2Nyb2xsSGFuZGxlcihoYW5kbGVyKQogICAgIHsKICAgICAgICAgdGhpcy5f
Y29kZU1pcnJvci5vbigic2Nyb2xsIiwgaGFuZGxlcik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBy
ZW1vdmVTY3JvbGxIYW5kbGVyOiBmdW5jdGlvbihoYW5kbGVyKQorICAgIHJlbW92ZVNjcm9sbEhh
bmRsZXIoaGFuZGxlcikKICAgICB7CiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub2ZmKCJzY3Jv
bGwiLCBoYW5kbGVyKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAogCi0gICAg
cHJldHR5UHJpbnQ6IGZ1bmN0aW9uKHByZXR0eSkKKyAgICBwcmV0dHlQcmludChwcmV0dHkpCiAg
ICAgewogICAgICAgICBmdW5jdGlvbiBwcmV0dHlQcmludEFuZFVwZGF0ZUVkaXRvcigpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0ge2xpbmU6IDAsIGNoOiAwfTsKLSAgICAg
ICAgICAgIGNvbnN0IGVuZCA9IHtsaW5lOiB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3VudCgpIC0g
MX07CisgICAgICAgICAgICB2YXIgc3RhcnQgPSB7bGluZTogMCwgY2g6IDB9OworICAgICAgICAg
ICAgdmFyIGVuZCA9IHtsaW5lOiB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3VudCgpIC0gMX07CiAK
ICAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25BbmNob3IgPSB0aGlzLl9jb2RlTWlycm9yLmdl
dEN1cnNvcigiYW5jaG9yIik7CiAgICAgICAgICAgICB2YXIgb2xkU2VsZWN0aW9uSGVhZCA9IHRo
aXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJoZWFkIik7CkBAIC03NTIsNyArNzI3LDcgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICBpZiAocHJl
dHR5KSB7CiAgICAgICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzEwNTkzOTQ4PiBQcm92
aWRlIGEgd2F5IHRvIGNoYW5nZSB0aGUgdGFiIHdpZHRoIGluIHRoZSBXZWIgSW5zcGVjdG9yCi0g
ICAgICAgICAgICAgICAgY29uc3QgaW5kZW50U3RyaW5nID0gIiAgICAiOworICAgICAgICAgICAg
ICAgIHZhciBpbmRlbnRTdHJpbmcgPSAiICAgICI7CiAgICAgICAgICAgICAgICAgdmFyIG9yaWdp
bmFsTGluZUVuZGluZ3MgPSBbXTsKICAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVkTGluZUVu
ZGluZ3MgPSBbXTsKICAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IHtvcmlnaW5hbDogWzBd
LCBmb3JtYXR0ZWQ6IFswXX07CkBAIC04MzYsMTYgKzgxMSwxNiBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9jb2RlTWly
cm9yLm9wZXJhdGlvbihwcmV0dHlQcmludEFuZFVwZGF0ZUVkaXRvci5iaW5kKHRoaXMpKTsKLSAg
ICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIGhhc0VkaXRzOiBmdW5jdGlvbigp
CisgICAgaGFzRWRpdHMoKQogICAgIHsKICAgICAgICAgcmV0dXJuICF0aGlzLl9jb2RlTWlycm9y
LmlzQ2xlYW4oKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jb250ZW50Q2hhbmdlZDogZnVuY3Rp
b24oY29kZU1pcnJvciwgY2hhbmdlKQorICAgIF9jb250ZW50Q2hhbmdlZChjb2RlTWlycm9yLCBj
aGFuZ2UpCiAgICAgewogICAgICAgICBpZiAodGhpcy5faWdub3JlQ29kZU1pcnJvckNvbnRlbnRE
aWRDaGFuZ2VFdmVudCA+IDApCiAgICAgICAgICAgICByZXR1cm47CkBAIC04ODAsMjYgKzg1NSwy
NiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAog
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvci5FdmVudC5Db250ZW50RGlkQ2hhbmdlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF90ZXh0
UmFuZ2VGcm9tQ29kZU1pcnJvclBvc2l0aW9uOiBmdW5jdGlvbihzdGFydCwgZW5kKQorICAgIF90
ZXh0UmFuZ2VGcm9tQ29kZU1pcnJvclBvc2l0aW9uKHN0YXJ0LCBlbmQpCiAgICAgewogICAgICAg
ICBjb25zb2xlLmFzc2VydChzdGFydCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGVuZCk7CiAK
ICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0LmxpbmUsIHN0
YXJ0LmNoLCBlbmQubGluZSwgZW5kLmNoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jb2RlTWly
cm9yUG9zaXRpb25Gcm9tVGV4dFJhbmdlOiBmdW5jdGlvbih0ZXh0UmFuZ2UpCisgICAgX2NvZGVN
aXJyb3JQb3NpdGlvbkZyb21UZXh0UmFuZ2UodGV4dFJhbmdlKQogICAgIHsKICAgICAgICAgY29u
c29sZS5hc3NlcnQodGV4dFJhbmdlKTsKIAogICAgICAgICB2YXIgc3RhcnQgPSB7bGluZTogdGV4
dFJhbmdlLnN0YXJ0TGluZSwgY2g6IHRleHRSYW5nZS5zdGFydENvbHVtbn07CiAgICAgICAgIHZh
ciBlbmQgPSB7bGluZTogdGV4dFJhbmdlLmVuZExpbmUsIGNoOiB0ZXh0UmFuZ2UuZW5kQ29sdW1u
fTsKICAgICAgICAgcmV0dXJuIHtzdGFydCwgZW5kfTsKLSAgICB9LAorICAgIH0KIAotICAgIF9y
ZXZlYWxQZW5kaW5nUG9zaXRpb25JZlBvc3NpYmxlOiBmdW5jdGlvbigpCisgICAgX3JldmVhbFBl
bmRpbmdQb3NpdGlvbklmUG9zc2libGUoKQogICAgIHsKICAgICAgICAgLy8gTm90aGluZyB0byBk
byBpZiB3ZSBkb24ndCBoYXZlIGEgcGVuZGluZyBwb3NpdGlvbi4KICAgICAgICAgaWYgKCF0aGlz
Ll9wb3NpdGlvblRvUmV2ZWFsKQpAQCAtOTEwLDkgKzg4NSw5IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlz
LnJldmVhbFBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwsIHRoaXMuX3RleHRSYW5nZVRv
U2VsZWN0LCB0aGlzLl9mb3JjZVVuZm9ybWF0dGVkKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9y
ZXZlYWxTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKHJlc3VsdCwgY2hhbmdlRm9jdXMsIGRpcmVjdGlv
bkluQ2FzZU9mUmV2YWxpZGF0aW9uKQorICAgIF9yZXZlYWxTZWFyY2hSZXN1bHQocmVzdWx0LCBj
aGFuZ2VGb2N1cywgZGlyZWN0aW9uSW5DYXNlT2ZSZXZhbGlkYXRpb24pCiAgICAgewogICAgICAg
ICB2YXIgcG9zaXRpb24gPSByZXN1bHQuZmluZCgpOwogCkBAIC05NzIsOSArOTQ3LDkgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgIC8vIExpc3RlbiBm
b3IgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uIHNvIHdlIGNhbiByZW1vdmUgdGhlIGVsZW1lbnQu
CiAgICAgICAgIHRoaXMuX2JvdW5jeUhpZ2hsaWdodEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
d2Via2l0QW5pbWF0aW9uRW5kIiwgYW5pbWF0aW9uRW5kZWQuYmluZCh0aGlzKSk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfYmluYXJ5U2VhcmNoSW5zZXJ0aW9uSW5kZXhJblNlYXJjaFJlc3VsdHM6
IGZ1bmN0aW9uKG9iamVjdCwgY29tcGFyYXRvcikKKyAgICBfYmluYXJ5U2VhcmNoSW5zZXJ0aW9u
SW5kZXhJblNlYXJjaFJlc3VsdHMob2JqZWN0LCBjb21wYXJhdG9yKQogICAgIHsKICAgICAgICAg
Ly8gSXQgaXMgcG9zc2libGUgdGhhdCBtYXJrZXJzIGluIHRoZSBzZWFyY2ggcmVzdWx0cyBhcnJh
eSBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQuCiAgICAgICAgIC8vIEluIHRob3NlIGNhc2VzIHRoZSBj
b21wYXJhdG9yIHdpbGwgcmV0dXJuICJudWxsIiBhbmQgd2UgaW1tZWRpYXRlbHkgc3RvcApAQCAt
OTk4LDkgKzk3Myw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgfQogCiAgICAgICAgIHJldHVybiBmaXJzdCAtIDE7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfcmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHRCZWZvcmVDdXJzb3I6IGZ1bmN0aW9uKGNoYW5nZUZv
Y3VzKQorICAgIF9yZXZlYWxGaXJzdFNlYXJjaFJlc3VsdEJlZm9yZUN1cnNvcihjaGFuZ2VGb2N1
cykKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3NlYXJjaFJlc3VsdHMubGVu
Z3RoKTsKIApAQCAtMTAyNSw5ICsxMDAwLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJv
dG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IGlu
ZGV4OwogICAgICAgICB0aGlzLl9yZXZlYWxTZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNoUmVzdWx0
c1t0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXhdLCBjaGFuZ2VGb2N1cyk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfcmV2ZWFsRmlyc3RTZWFyY2hSZXN1bHRBZnRlckN1cnNvcjogZnVuY3Rp
b24oY2hhbmdlRm9jdXMpCisgICAgX3JldmVhbEZpcnN0U2VhcmNoUmVzdWx0QWZ0ZXJDdXJzb3Io
Y2hhbmdlRm9jdXMpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zZWFyY2hS
ZXN1bHRzLmxlbmd0aCk7CiAKQEAgLTEwNTcsOSArMTAzMiw5IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0
SW5kZXggPSBpbmRleDsKICAgICAgICAgdGhpcy5fcmV2ZWFsU2VhcmNoUmVzdWx0KHRoaXMuX3Nl
YXJjaFJlc3VsdHNbdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4XSwgY2hhbmdlRm9jdXMp
OwotICAgIH0sCisgICAgfQogCi0gICAgX2N1cnNvckRvZXNOb3RNYXRjaExhc3RSZXZlYWxlZFNl
YXJjaFJlc3VsdDogZnVuY3Rpb24oKQorICAgIF9jdXJzb3JEb2VzTm90TWF0Y2hMYXN0UmV2ZWFs
ZWRTZWFyY2hSZXN1bHQoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fY3Vy
cmVudFNlYXJjaFJlc3VsdEluZGV4ICE9PSAtMSk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRo
aXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKQEAgLTEwNzIsOSArMTA0Nyw5IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGxhc3RSZXZlYWxlZFNl
YXJjaFJlc3VsdFBvc2l0aW9uID0gbGFzdFJldmVhbGVkU2VhcmNoUmVzdWx0TWFya2VyLmZyb207
CiAKICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jb21wYXJlQ29kZU1pcnJvclBvc2l0aW9u
cyhjdXJyZW50Q3Vyc29yUG9zaXRpb24sIGxhc3RSZXZlYWxlZFNlYXJjaFJlc3VsdFBvc2l0aW9u
KSAhPT0gMDsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZXZhbGlkYXRlU2VhcmNoUmVzdWx0czog
ZnVuY3Rpb24oZGlyZWN0aW9uKQorICAgIF9yZXZhbGlkYXRlU2VhcmNoUmVzdWx0cyhkaXJlY3Rp
b24pCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChkaXJlY3Rpb24gIT09IHVuZGVmaW5l
ZCk7CiAKQEAgLTEwOTcsOSArMTA3Miw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB0aGlzLl9yZXZlYWxG
aXJzdFNlYXJjaFJlc3VsdEJlZm9yZUN1cnNvcigpOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfdXBkYXRlRXhlY3V0aW9uTGluZTogZnVuY3Rpb24oKQorICAgIF91cGRhdGVFeGVj
dXRpb25MaW5lKCkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpCiAgICAgICAgIHsK
QEAgLTExMTMsOSArMTA4OCw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9
IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3BlcmF0aW9uKHVwZGF0
ZS5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9zZXRCcmVha3BvaW50U3R5bGVz
T25MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIF9zZXRCcmVha3BvaW50U3R5bGVzT25M
aW5lKGxpbmVOdW1iZXIpCiAgICAgewogICAgICAgICB2YXIgY29sdW1uQnJlYWtwb2ludHMgPSB0
aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoY29s
dW1uQnJlYWtwb2ludHMpOwpAQCAtMTE3MCwxOCArMTE0NSwxOCBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9jb2RlTWly
cm9yLm9wZXJhdGlvbih1cGRhdGVTdHlsZXMuYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfYWRkQnJlYWtwb2ludFRvTGluZUFuZENvbHVtbldpdGhJbmZvOiBmdW5jdGlvbihsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIsIGJyZWFrcG9pbnRJbmZvKQorICAgIF9hZGRCcmVha3BvaW50
VG9MaW5lQW5kQ29sdW1uV2l0aEluZm8obGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBicmVha3Bv
aW50SW5mbykKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fYnJlYWtwb2ludHNbbGluZU51bWJl
cl0pCiAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXSA9IHt9OwogICAg
ICAgICB0aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXVtjb2x1bW5OdW1iZXJdID0gYnJlYWtw
b2ludEluZm87CiAKICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludFN0eWxlc09uTGluZShsaW5l
TnVtYmVyKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZW1vdmVCcmVha3BvaW50RnJvbUxpbmVB
bmRDb2x1bW46IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICBfcmVtb3Zl
QnJlYWtwb2ludEZyb21MaW5lQW5kQ29sdW1uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAg
ICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbHVtbk51bWJlciBpbiB0aGlzLl9icmVha3Bv
aW50c1tsaW5lTnVtYmVyXSk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1tsaW5l
TnVtYmVyXVtjb2x1bW5OdW1iZXJdOwpAQCAtMTIwOCwyMSArMTE4MywyMSBAQCBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9j
b2RlTWlycm9yLm9wZXJhdGlvbih1cGRhdGVTdHlsZXMuYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfYWxsQ29sdW1uQnJlYWtwb2ludEluZm9Gb3JMaW5lOiBmdW5jdGlvbihsaW5l
TnVtYmVyKQorICAgIF9hbGxDb2x1bW5CcmVha3BvaW50SW5mb0ZvckxpbmUobGluZU51bWJlcikK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXTsKLSAg
ICB9LAorICAgIH0KIAotICAgIF9zZXRDb2x1bW5CcmVha3BvaW50SW5mb0ZvckxpbmU6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbkJyZWFrcG9pbnRJbmZvKQorICAgIF9zZXRDb2x1bW5CcmVh
a3BvaW50SW5mb0ZvckxpbmUobGluZU51bWJlciwgY29sdW1uQnJlYWtwb2ludEluZm8pCiAgICAg
ewogICAgICAgICBjb25zb2xlLmFzc2VydChjb2x1bW5CcmVha3BvaW50SW5mbyk7CiAgICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdID0gY29sdW1uQnJlYWtwb2ludEluZm87CiAg
ICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnRTdHlsZXNPbkxpbmUobGluZU51bWJlcik7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfZ3V0dGVyTW91c2VEb3duOiBmdW5jdGlvbihjb2RlTWlycm9yLCBs
aW5lTnVtYmVyLCBndXR0ZXJFbGVtZW50LCBldmVudCkKKyAgICBfZ3V0dGVyTW91c2VEb3duKGNv
ZGVNaXJyb3IsIGxpbmVOdW1iZXIsIGd1dHRlckVsZW1lbnQsIGV2ZW50KQogICAgIHsKICAgICAg
ICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCB8fCBldmVudC5jdHJsS2V5KQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTI2NSw5ICsxMjQwLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJv
dG90eXBlID0gewogICAgICAgICAvLyBSZWdpc3RlciB0aGVzZSBsaXN0ZW5lcnMgb24gdGhlIGRv
Y3VtZW50IHNvIHdlIGNhbiB0cmFjayB0aGUgbW91c2UgaWYgaXQgbGVhdmVzIHRoZSBndXR0ZXIu
CiAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuX2Rv
Y3VtZW50TW91c2VNb3ZlZEV2ZW50TGlzdGVuZXIsIHRydWUpOwogICAgICAgICBkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5fZG9jdW1lbnRNb3VzZVVwRXZlbnRMaXN0
ZW5lciwgdHJ1ZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZ3V0dGVyQ29udGV4dE1lbnU6IGZ1
bmN0aW9uKGNvZGVNaXJyb3IsIGxpbmVOdW1iZXIsIGd1dHRlckVsZW1lbnQsIGV2ZW50KQorICAg
IF9ndXR0ZXJDb250ZXh0TWVudShjb2RlTWlycm9yLCBsaW5lTnVtYmVyLCBndXR0ZXJFbGVtZW50
LCBldmVudCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhp
cy5fZGVsZWdhdGUudGV4dEVkaXRvckd1dHRlckNvbnRleHRNZW51ID09PSAiZnVuY3Rpb24iKSB7
CiAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKQEAgLTEyNzYsOSArMTI1MSw5IEBA
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgdGhp
cy5fZGVsZWdhdGUudGV4dEVkaXRvckd1dHRlckNvbnRleHRNZW51KHRoaXMsIGxpbmVOdW1iZXIs
IDAsIGJyZWFrcG9pbnRzLCBldmVudCk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAg
IF9kb2N1bWVudE1vdXNlTW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9kb2N1bWVudE1vdXNl
TW92ZWQoZXZlbnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCgiX2xpbmVOdW1iZXJX
aXRoTW91c2VkRG93bkJyZWFrcG9pbnQiIGluIHRoaXMpOwogICAgICAgICBpZiAoISgiX2xpbmVO
dW1iZXJXaXRoTW91c2VkRG93bkJyZWFrcG9pbnQiIGluIHRoaXMpKQpAQCAtMTMzMiw5ICsxMzA3
LDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAg
dGhpcy5fbGluZU51bWJlcldpdGhEcmFnZ2VkQnJlYWtwb2ludCA9IGxpbmVOdW1iZXI7CiAgICAg
ICAgICAgICB0aGlzLl9jb2x1bW5OdW1iZXJXaXRoRHJhZ2dlZEJyZWFrcG9pbnQgPSBjb2x1bW5O
dW1iZXI7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIF9kb2N1bWVudE1vdXNlVXA6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9kb2N1bWVudE1vdXNlVXAoZXZlbnQpCiAgICAgewogICAg
ICAgICBjb25zb2xlLmFzc2VydCgiX2xpbmVOdW1iZXJXaXRoTW91c2VkRG93bkJyZWFrcG9pbnQi
IGluIHRoaXMpOwogICAgICAgICBpZiAoISgiX2xpbmVOdW1iZXJXaXRoTW91c2VkRG93bkJyZWFr
cG9pbnQiIGluIHRoaXMpKQpAQCAtMTM0NSw5ICsxMzIwLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVy
KCJtb3VzZW1vdmUiLCB0aGlzLl9kb2N1bWVudE1vdXNlTW92ZWRFdmVudExpc3RlbmVyLCB0cnVl
KTsKICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMu
X2RvY3VtZW50TW91c2VVcEV2ZW50TGlzdGVuZXIsIHRydWUpOwogCi0gICAgICAgIGNvbnN0IGRl
bGVnYXRlSW1wbGVtZW50c0JyZWFrcG9pbnRDbGlja2VkID0gdGhpcy5fZGVsZWdhdGUgJiYgdHlw
ZW9mIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JCcmVha3BvaW50Q2xpY2tlZCA9PT0gImZ1bmN0
aW9uIjsKLSAgICAgICAgY29uc3QgZGVsZWdhdGVJbXBsZW1lbnRzQnJlYWtwb2ludFJlbW92ZWQg
PSB0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVsZWdhdGUudGV4dEVkaXRvckJyZWFr
cG9pbnRSZW1vdmVkID09PSAiZnVuY3Rpb24iOwotICAgICAgICBjb25zdCBkZWxlZ2F0ZUltcGxl
bWVudHNCcmVha3BvaW50TW92ZWQgPSB0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVs
ZWdhdGUudGV4dEVkaXRvckJyZWFrcG9pbnRNb3ZlZCA9PT0gImZ1bmN0aW9uIjsKKyAgICAgICAg
dmFyIGRlbGVnYXRlSW1wbGVtZW50c0JyZWFrcG9pbnRDbGlja2VkID0gdGhpcy5fZGVsZWdhdGUg
JiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JCcmVha3BvaW50Q2xpY2tlZCA9PT0g
ImZ1bmN0aW9uIjsKKyAgICAgICAgdmFyIGRlbGVnYXRlSW1wbGVtZW50c0JyZWFrcG9pbnRSZW1v
dmVkID0gdGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JC
cmVha3BvaW50UmVtb3ZlZCA9PT0gImZ1bmN0aW9uIjsKKyAgICAgICAgdmFyIGRlbGVnYXRlSW1w
bGVtZW50c0JyZWFrcG9pbnRNb3ZlZCA9IHRoaXMuX2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9k
ZWxlZ2F0ZS50ZXh0RWRpdG9yQnJlYWtwb2ludE1vdmVkID09PSAiZnVuY3Rpb24iOwogCiAgICAg
ICAgIGlmICh0aGlzLl9tb3VzZURyYWdnZWQpIHsKICAgICAgICAgICAgIGlmICghKCJfbGluZU51
bWJlcldpdGhEcmFnZ2VkQnJlYWtwb2ludCIgaW4gdGhpcykpIHsKQEAgLTEzOTMsOSArMTM2OCw5
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRl
IHRoaXMuX2NvbHVtbk51bWJlcldpdGhEcmFnZ2VkQnJlYWtwb2ludDsKICAgICAgICAgZGVsZXRl
IHRoaXMuX3ByZXZpb3VzQ29sdW1uQnJlYWtwb2ludEluZm87CiAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9tb3VzZURyYWdnZWQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfb3BlbkNsaWNrZWRMaW5rczog
ZnVuY3Rpb24oZXZlbnQpCisgICAgX29wZW5DbGlja2VkTGlua3MoZXZlbnQpCiAgICAgewogICAg
ICAgICAvLyBHZXQgdGhlIHBvc2l0aW9uIGluIHRoZSB0ZXh0IGFuZCB0aGUgdG9rZW4gYXQgdGhh
dCBwb3NpdGlvbi4KICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fY29kZU1pcnJvci5jb29y
ZHNDaGFyKHtsZWZ0OiBldmVudC5wYWdlWCwgdG9wOiBldmVudC5wYWdlWX0pOwpAQCAtMTQyMSw5
ICsxMzk2LDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICAvLyBTdG9wIHByb2Nlc3NpbmcgdGhlIGV2ZW50LgogICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwogICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9pc1Bvc2l0aW9uVmlzaWJsZTogZnVuY3Rpb24ocG9zaXRpb24pCisgICAgX2lzUG9z
aXRpb25WaXNpYmxlKHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgdmFyIHNjcm9sbEluZm8gPSB0
aGlzLl9jb2RlTWlycm9yLmdldFNjcm9sbEluZm8oKTsKICAgICAgICAgdmFyIHZpc2libGVSYW5n
ZVN0YXJ0ID0gc2Nyb2xsSW5mby50b3A7CkBAIC0xNDMxLDkgKzE0MDYsOSBAQCBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBjb29yZHMgPSB0aGlzLl9j
b2RlTWlycm9yLmNoYXJDb29yZHMocG9zaXRpb24sICJsb2NhbCIpOwogCiAgICAgICAgIHJldHVy
biBjb29yZHMudG9wID49IHZpc2libGVSYW5nZVN0YXJ0ICYmIGNvb3Jkcy5ib3R0b20gPD0gdmlz
aWJsZVJhbmdlRW5kOwotICAgIH0sCisgICAgfQogCi0gICAgX3Njcm9sbEludG9WaWV3Q2VudGVy
ZWQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIF9zY3JvbGxJbnRvVmlld0NlbnRlcmVkKHBvc2l0
aW9uKQogICAgIHsKICAgICAgICAgdmFyIHNjcm9sbEluZm8gPSB0aGlzLl9jb2RlTWlycm9yLmdl
dFNjcm9sbEluZm8oKTsKICAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSBNYXRoLmNlaWwodGhpcy5f
Y29kZU1pcnJvci5kZWZhdWx0VGV4dEhlaWdodCgpKTsKQEAgLTE0NDIsNCArMTQxNywyMSBAQCBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAotV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmpl
Y3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuSGlnaGxpZ2h0ZWRTdHlsZUNs
YXNzTmFtZSA9ICJoaWdobGlnaHRlZCI7CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5TZWFyY2hS
ZXN1bHRTdHlsZUNsYXNzTmFtZSA9ICJzZWFyY2gtcmVzdWx0IjsKK1dlYkluc3BlY3Rvci5UZXh0
RWRpdG9yLkhhc0JyZWFrcG9pbnRTdHlsZUNsYXNzTmFtZSA9ICJoYXMtYnJlYWtwb2ludCI7CitX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5CcmVha3BvaW50UmVzb2x2ZWRTdHlsZUNsYXNzTmFtZSA9
ICJicmVha3BvaW50LXJlc29sdmVkIjsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkJyZWFrcG9p
bnRBdXRvQ29udGludWVTdHlsZUNsYXNzTmFtZSA9ICJicmVha3BvaW50LWF1dG8tY29udGludWUi
OworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuQnJlYWtwb2ludERpc2FibGVkU3R5bGVDbGFzc05h
bWUgPSAiYnJlYWtwb2ludC1kaXNhYmxlZCI7CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5NdWx0
aXBsZUJyZWFrcG9pbnRzU3R5bGVDbGFzc05hbWUgPSAibXVsdGlwbGUtYnJlYWtwb2ludHMiOwor
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuRXhlY3V0aW9uTGluZVN0eWxlQ2xhc3NOYW1lID0gImV4
ZWN1dGlvbi1saW5lIjsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yLkJvdW5jeUhpZ2hsaWdodFN0
eWxlQ2xhc3NOYW1lID0gImJvdW5jeS1oaWdobGlnaHQiOworV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3IuTnVtYmVyT2ZGaW5kc1BlclNlYXJjaEJhdGNoID0gMTA7CitXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvci5IaWdobGlnaHRBbmltYXRpb25EdXJhdGlvbiA9IDIwMDA7CisKK1dlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yLkV2ZW50ID0geworICAgIEV4ZWN1dGlvbkxpbmVOdW1iZXJEaWRDaGFuZ2U6ICJ0
ZXh0LWVkaXRvci1leGVjdXRpb24tbGluZS1udW1iZXItZGlkLWNoYW5nZSIsCisgICAgTnVtYmVy
T2ZTZWFyY2hSZXN1bHRzRGlkQ2hhbmdlOiAidGV4dC1lZGl0b3ItbnVtYmVyLW9mLXNlYXJjaC1y
ZXN1bHRzLWRpZC1jaGFuZ2UiLAorICAgIENvbnRlbnREaWRDaGFuZ2U6ICJ0ZXh0LWVkaXRvci1j
b250ZW50LWRpZC1jaGFuZ2UiLAorICAgIEZvcm1hdHRpbmdEaWRDaGFuZ2U6ICJ0ZXh0LWVkaXRv
ci1mb3JtYXR0aW5nLWRpZC1jaGFuZ2UiCit9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>