<?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>111576</bug_id>
          
          <creation_ts>2013-03-06 06:42:44 -0800</creation_ts>
          <short_desc>Web Inspector: [ACE] gutter size should be fixed.</short_desc>
          <delta_ts>2013-03-07 04:58:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Lushnikov">lushnikov</reporter>
          <assigned_to name="Andrey Lushnikov">lushnikov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>848811</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-06 06:42:44 -0800</bug_when>
    <thetext>The gutter&apos;s width has size of its last visible line number. So when you scroll a file with lots of lines, gutter gets expanded more and more (as the amount of digits in line number increases).
It a perfect word, it should be of the same size all the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848815</commentid>
    <comment_count>1</comment_count>
      <attachid>191744</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-06 06:46:25 -0800</bug_when>
    <thetext>Created attachment 191744
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848839</commentid>
    <comment_count>2</comment_count>
      <attachid>191744</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-03-06 07:12:45 -0800</bug_when>
    <thetext>Comment on attachment 191744
Patch

You should not change third party files in place. This diverges things and results in merging conflicts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849901</commentid>
    <comment_count>3</comment_count>
      <attachid>191956</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-03-07 02:22:39 -0800</bug_when>
    <thetext>Created attachment 191956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849972</commentid>
    <comment_count>4</comment_count>
      <attachid>191956</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 04:58:00 -0800</bug_when>
    <thetext>Comment on attachment 191956
Patch

Clearing flags on attachment: 191956

Committed r145064: &lt;http://trac.webkit.org/changeset/145064&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849973</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 04:58:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191744</attachid>
            <date>2013-03-06 06:46:25 -0800</date>
            <delta_ts>2013-03-07 02:22:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111576-20130306184229.patch</filename>
            <type>text/plain</type>
            <size>201510</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRhYmRmMDMwOWVkYTcy
MjExNzhjYTc4YTMyMTI0MzJiYjMxMGYyNC4uNzMwZjNmOTc2YmVmMDJhMGNiYWZlZDU5YWZmMjdk
MjcyM2UxYWQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAzLTA2ICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbQUNFXSBndXR0ZXIgc2l6ZSBzaG91bGQgYmUgZml4ZWQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1NzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjdXN0b20gYWNlIGVkaXRv
ciBidWlsZCB0aGF0IHN1cHBvcnRzIHNldEZpeGVkR3V0dGVyV2lkdGggY29uZmlndXJhdGlvbgor
ICAgICAgICBwYXJhbWV0ZXIgYW5kIHN3aXRjaCB0aGlzIHNldHRpbmcgb24uCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9BY2VUZXh0RWRp
dG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IpOiBTd2l0Y2ggZml4
ZWRHdXR0ZXJXaWR0aCBzZXR0aW5nIG9uLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
YWNlL2FjZS5qczoKKyAgICAgICAgKC4pOgorCiAyMDEzLTAzLTA0ICBBbmRyZXkgS29zeWFrb3Yg
IDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdXNlIHRpbWVz
dGFtcHMgY29uc2lzdGVudCB3aXRoIHJlc3Qgb2YgVGltZWxpbmUgaW4gV2ViU29ja2V0IGV2ZW50
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4
dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVk
aXRvci5qcwppbmRleCA2MGNiZWRjZmM5NjZiMDBiZDY2YzAxOTZlN2Q3NzlkNzE4ZGYwNmU1Li45
YzNmMjk3NzI5ZjY0NTU3MGY3ODk0NTRhMWY0YmE4YzgwMzJiYWRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzCkBAIC01Niw2
ICs1Niw3IEBAIFdlYkluc3BlY3Rvci5BY2VUZXh0RWRpdG9yID0gZnVuY3Rpb24odXJsLCBkZWxl
Z2F0ZSkKIAogICAgIHRoaXMuX2FjZUVkaXRvci5zZXRTaG93Rm9sZFdpZGdldHMoZmFsc2UpOwog
ICAgIHRoaXMuX2FjZUVkaXRvci5zZXNzaW9uLnNldFVzZVdyYXBNb2RlKHRydWUpOworICAgIHRo
aXMuX2FjZUVkaXRvci5zZXNzaW9uLnNldEZpeGVkR3V0dGVyV2lkdGgodHJ1ZSk7CiAgICAgdGhp
cy5fYWNlRWRpdG9yLm9uKCJndXR0ZXJjbGljayIsIHRoaXMuX2d1dHRlckNsaWNrLmJpbmQodGhp
cykpOwogICAgIHRoaXMuX2FjZUVkaXRvci5vbigiY2hhbmdlIiwgdGhpcy5fb25UZXh0Q2hhbmdl
LmJpbmQodGhpcykpOwogICAgIHRoaXMuX2FjZUVkaXRvci5zZXRIaWdobGlnaHRBY3RpdmVMaW5l
KGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
YWNlL2FjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5q
cwppbmRleCAxOWQxYjAwMzlmMzIxM2RmNWViMTYwNjQ0YzBlNjRiOGE4NzBmMTc1Li5lY2RlYzBl
MGVhYWMxZDY0ZWJlOTMzY2IxY2U1ZmFkZDQ5NGJjNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2FjZS9hY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9hY2UvYWNlLmpzCkBAIC0xNjcsNyArMTY3LDcgQEAgZXhwb3J0
QWNlKEFDRV9OQU1FU1BBQ0UpOwogCiB9KSgpOwogCi1hY2UuZGVmaW5lKCdhY2UvYWNlJywgWydy
ZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2ZpeG9sZGJyb3dzZXJzJywg
J2FjZS9saWIvZG9tJywgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2VkaXRvcicsICdhY2UvZWRpdF9z
ZXNzaW9uJywgJ2FjZS91bmRvbWFuYWdlcicsICdhY2UvdmlydHVhbF9yZW5kZXJlcicsICdhY2Uv
bXVsdGlfc2VsZWN0JywgJ2FjZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2Uva2V5Ym9hcmQv
aGFzaF9oYW5kbGVyJywgJ2FjZS9wbGFjZWhvbGRlcicsICdhY2UvbW9kZS9mb2xkaW5nL2ZvbGRf
bW9kZScsICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkg
eworYWNlLmRlZmluZSgnYWNlL2FjZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9maXhvbGRicm93c2VycycsICdhY2UvbGliL2RvbScsICdhY2UvbGliL2V2ZW50
JywgJ2FjZS9lZGl0b3InLCAnYWNlL2VkaXRfc2Vzc2lvbicsICdhY2UvdW5kb21hbmFnZXInLCAn
YWNlL3ZpcnR1YWxfcmVuZGVyZXInLCAnYWNlL211bHRpX3NlbGVjdCcsICdhY2Uvd29ya2VyL3dv
cmtlcl9jbGllbnQnLCAnYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlcicsICdhY2UvcGxhY2Vob2xk
ZXInLCAnYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUnLCAnYWNlL3RoZW1lL3RleHRtYXRlJywg
J2FjZS9jb25maWcnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAKIAog
cmVxdWlyZSgiLi9saWIvZml4b2xkYnJvd3NlcnMiKTsKQEAgLTE4NCw2ICsxODQsOCBAQCByZXF1
aXJlKCIuL3dvcmtlci93b3JrZXJfY2xpZW50Iik7CiByZXF1aXJlKCIuL2tleWJvYXJkL2hhc2hf
aGFuZGxlciIpOwogcmVxdWlyZSgiLi9wbGFjZWhvbGRlciIpOwogcmVxdWlyZSgiLi9tb2RlL2Zv
bGRpbmcvZm9sZF9tb2RlIik7CityZXF1aXJlKCIuL3RoZW1lL3RleHRtYXRlIik7CisKIGV4cG9y
dHMuY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWciKTsKIGV4cG9ydHMucmVxdWlyZSA9IHJlcXVp
cmU7CiBleHBvcnRzLmVkaXQgPSBmdW5jdGlvbihlbCkgewpAQCAtMjA3LDkgKzIwOSwxMiBAQCBl
eHBvcnRzLmVkaXQgPSBmdW5jdGlvbihlbCkgewogICAgIHZhciBlbnYgPSB7CiAgICAgICAgIGRv
Y3VtZW50OiBkb2MsCiAgICAgICAgIGVkaXRvcjogZWRpdG9yLAotICAgICAgICBvblJlc2l6ZTog
ZWRpdG9yLnJlc2l6ZS5iaW5kKGVkaXRvcikKKyAgICAgICAgb25SZXNpemU6IGVkaXRvci5yZXNp
emUuYmluZChlZGl0b3IsIG51bGwpCiAgICAgfTsKICAgICBldmVudC5hZGRMaXN0ZW5lcih3aW5k
b3csICJyZXNpemUiLCBlbnYub25SZXNpemUpOworICAgIGVkaXRvci5vbigiZGVzdHJveSIsIGZ1
bmN0aW9uKCkgeworICAgICAgICBldmVudC5yZW1vdmVMaXN0ZW5lcih3aW5kb3csICJyZXNpemUi
LCBlbnYub25SZXNpemUpOworICAgIH0pOwogICAgIGVsLmVudiA9IGVkaXRvci5lbnYgPSBlbnY7
CiAgICAgcmV0dXJuIGVkaXRvcjsKIH07CkBAIC05MzYsMjMgKzk0MSw2IEBAIGlmICghRGF0ZS5u
b3cpIHsKICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgIH07CiB9Ci1p
ZigiMCIuc3BsaXQodm9pZCAwLCAwKS5sZW5ndGgpIHsKLSAgICB2YXIgc3RyaW5nX3NwbGl0ID0g
U3RyaW5nLnByb3RvdHlwZS5zcGxpdDsKLSAgICBTdHJpbmcucHJvdG90eXBlLnNwbGl0ID0gZnVu
Y3Rpb24oc2VwYXJhdG9yLCBsaW1pdCkgewotICAgICAgICBpZihzZXBhcmF0b3IgPT09IHZvaWQg
MCAmJiBsaW1pdCA9PT0gMClyZXR1cm4gW107Ci0gICAgICAgIHJldHVybiBzdHJpbmdfc3BsaXQu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICB9Ci19Ci1pZigiIi5zdWJzdHIgJiYgIjBiIi5z
dWJzdHIoLTEpICE9PSAiYiIpIHsKLSAgICB2YXIgc3RyaW5nX3N1YnN0ciA9IFN0cmluZy5wcm90
b3R5cGUuc3Vic3RyOwotICAgIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyID0gZnVuY3Rpb24oc3Rh
cnQsIGxlbmd0aCkgewotICAgICAgICByZXR1cm4gc3RyaW5nX3N1YnN0ci5jYWxsKAotICAgICAg
ICAgICAgdGhpcywKLSAgICAgICAgICAgIHN0YXJ0IDwgMCA/IChzdGFydCA9IHRoaXMubGVuZ3Ro
ICsgc3RhcnQpIDwgMCA/IDAgOiBzdGFydCA6IHN0YXJ0LAotICAgICAgICAgICAgbGVuZ3RoCi0g
ICAgICAgICk7Ci0gICAgfQotfQogdmFyIHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4
QTBcdTE2ODBcdTE4MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKICAgICAiXHUyMDA0XHUy
MDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHUyMDI4
IiArCiAgICAgIlx1MjAyOVx1RkVGRiI7CkBAIC05NjEsMTIgKzk0OSw3IEBAIGlmICghU3RyaW5n
LnByb3RvdHlwZS50cmltIHx8IHdzLnRyaW0oKSkgewogICAgIHZhciB0cmltQmVnaW5SZWdleHAg
PSBuZXcgUmVnRXhwKCJeIiArIHdzICsgd3MgKyAiKiIpLAogICAgICAgICB0cmltRW5kUmVnZXhw
ID0gbmV3IFJlZ0V4cCh3cyArIHdzICsgIiokIik7CiAgICAgU3RyaW5nLnByb3RvdHlwZS50cmlt
ID0gZnVuY3Rpb24gdHJpbSgpIHsKLSAgICAgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCB8fCB0
aGlzID09PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBj
b252ZXJ0ICIrdGhpcysiIHRvIG9iamVjdCIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBT
dHJpbmcodGhpcykKLSAgICAgICAgICAgIC5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgIiIpCi0g
ICAgICAgICAgICAucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CisgICAgICAgIHJldHVybiBT
dHJpbmcodGhpcykucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRS
ZWdleHAsICIiKTsKICAgICB9OwogfQogCkBAIC0xMDI0LDIzICsxMDA3LDIzIEBAIHZhciB0b09i
amVjdCA9IGZ1bmN0aW9uIChvKSB7CiBhY2UuZGVmaW5lKCdhY2UvbGliL2RvbScsIFsncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9k
dWxlKSB7CiAKIAoraWYgKHR5cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIikKKyAgICByZXR1
cm47CisKIHZhciBYSFRNTF9OUyA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjsKIAor
ZXhwb3J0cy5nZXREb2N1bWVudEhlYWQgPSBmdW5jdGlvbihkb2MpIHsKKyAgICBpZiAoIWRvYykK
KyAgICAgICAgZG9jID0gZG9jdW1lbnQ7CisgICAgcmV0dXJuIGRvYy5oZWFkIHx8IGRvYy5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7Cit9CisK
IGV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKHRhZywgbnMpIHsKICAgICByZXR1cm4g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TID8KICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxl
bWVudE5TKG5zIHx8IFhIVE1MX05TLCB0YWcpIDoKICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCh0YWcpOwogfTsKIAotZXhwb3J0cy5zZXRUZXh0ID0gZnVuY3Rpb24oZWxlbSwgdGV4
dCkgewotICAgIGlmIChlbGVtLmlubmVyVGV4dCAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGVs
ZW0uaW5uZXJUZXh0ID0gdGV4dDsKLSAgICB9Ci0gICAgaWYgKGVsZW0udGV4dENvbnRlbnQgIT09
IHVuZGVmaW5lZCkgewotICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gdGV4dDsKLSAgICB9Ci19
OwotCiBleHBvcnRzLmhhc0Nzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHsKICAgICB2YXIg
Y2xhc3NlcyA9IGVsLmNsYXNzTmFtZS5zcGxpdCgvXHMrL2cpOwogICAgIHJldHVybiBjbGFzc2Vz
LmluZGV4T2YobmFtZSkgIT09IC0xOwpAQCAtMTEyMiw4ICsxMTA1LDcgQEAgZXhwb3J0cy5pbXBv
cnRDc3NTdHJpbmcgPSBmdW5jdGlvbiBpbXBvcnRDc3NTdHJpbmcoY3NzVGV4dCwgaWQsIGRvYykg
ewogICAgICAgICBpZiAoaWQpCiAgICAgICAgICAgICBzdHlsZS5pZCA9IGlkOwogCi0gICAgICAg
IHZhciBoZWFkID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jLmRv
Y3VtZW50RWxlbWVudDsKLSAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7CisgICAgICAg
IGV4cG9ydHMuZ2V0RG9jdW1lbnRIZWFkKGRvYykuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgIH0K
IH07CiAKQEAgLTExMzUsOCArMTExNyw3IEBAIGV4cG9ydHMuaW1wb3J0Q3NzU3R5bHNoZWV0ID0g
ZnVuY3Rpb24odXJpLCBkb2MpIHsKICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7CiAg
ICAgICAgIGxpbmsuaHJlZiA9IHVyaTsKIAotICAgICAgICB2YXIgaGVhZCA9IGRvYy5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgICAg
IGhlYWQuYXBwZW5kQ2hpbGQobGluayk7CisgICAgICAgIGV4cG9ydHMuZ2V0RG9jdW1lbnRIZWFk
KGRvYykuYXBwZW5kQ2hpbGQobGluayk7CiAgICAgfQogfTsKIApAQCAtMTIzMSwyMiArMTIxMiwy
NCBAQCBleHBvcnRzLnNldElubmVySHRtbCA9IGZ1bmN0aW9uKGVsLCBpbm5lckh0bWwpIHsKICAg
ICByZXR1cm4gZWxlbWVudDsKIH07CiAKLWV4cG9ydHMuc2V0SW5uZXJUZXh0ID0gZnVuY3Rpb24o
ZWwsIGlubmVyVGV4dCkgewotICAgIHZhciBkb2N1bWVudCA9IGVsLm93bmVyRG9jdW1lbnQ7Ci0g
ICAgaWYgKGRvY3VtZW50LmJvZHkgJiYgInRleHRDb250ZW50IiBpbiBkb2N1bWVudC5ib2R5KQor
aWYgKCJ0ZXh0Q29udGVudCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7CisgICAgZXhw
b3J0cy5zZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7CiAgICAgICAgIGVs
LnRleHRDb250ZW50ID0gaW5uZXJUZXh0OwotICAgIGVsc2UKLSAgICAgICAgZWwuaW5uZXJUZXh0
ID0gaW5uZXJUZXh0OwotCi19OworICAgIH07CiAKLWV4cG9ydHMuZ2V0SW5uZXJUZXh0ID0gZnVu
Y3Rpb24oZWwpIHsKLSAgICB2YXIgZG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50OwotICAgIGlm
IChkb2N1bWVudC5ib2R5ICYmICJ0ZXh0Q29udGVudCIgaW4gZG9jdW1lbnQuYm9keSkKKyAgICBl
eHBvcnRzLmdldElubmVyVGV4dCA9IGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgIHJldHVybiBlbC50
ZXh0Q29udGVudDsKLSAgICBlbHNlCi0gICAgICAgICByZXR1cm4gZWwuaW5uZXJUZXh0IHx8IGVs
LnRleHRDb250ZW50IHx8ICIiOwotfTsKKyAgICB9OworfQorZWxzZSB7CisgICAgZXhwb3J0cy5z
ZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7CisgICAgICAgIGVsLmlubmVy
VGV4dCA9IGlubmVyVGV4dDsKKyAgICB9OworCisgICAgZXhwb3J0cy5nZXRJbm5lclRleHQgPSBm
dW5jdGlvbihlbCkgeworICAgICAgICByZXR1cm4gZWwuaW5uZXJUZXh0OworICAgIH07Cit9CiAK
IGV4cG9ydHMuZ2V0UGFyZW50V2luZG93ID0gZnVuY3Rpb24oZG9jdW1lbnQpIHsKICAgICByZXR1
cm4gZG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgZG9jdW1lbnQucGFyZW50V2luZG93OwpAQCAtMTUw
NiwxMCArMTQ4OSwxMCBAQCBpZiAod2luZG93LnBvc3RNZXNzYWdlICYmICF1c2VyYWdlbnQuaXNP
bGRJRSkgewogCiAKIGV4cG9ydHMubmV4dEZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25G
cmFtZSB8fAotICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8Ci0gICAgd2luZG93
Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CiAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRp
b25GcmFtZSB8fAotICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CisgICAg
d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAorICAgIHdpbmRvdy5tc1JlcXVl
c3RBbmltYXRpb25GcmFtZSB8fAorICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lOwog
CiBpZiAoZXhwb3J0cy5uZXh0RnJhbWUpCiAgICAgZXhwb3J0cy5uZXh0RnJhbWUgPSBleHBvcnRz
Lm5leHRGcmFtZS5iaW5kKHdpbmRvdyk7CkBAIC0xNzE2LDYgKzE2OTksOCBAQCB2YXIgRWRpdG9y
ID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Npb24pIHsKICAgICB9KTsKIAogICAgIHRoaXMuc2V0
U2Vzc2lvbihzZXNzaW9uIHx8IG5ldyBFZGl0U2Vzc2lvbigiIikpOworICAgIGNvbmZpZy5yZXNl
dE9wdGlvbnModGhpcyk7CisgICAgY29uZmlnLl9lbWl0KCJlZGl0b3IiLCB0aGlzKTsKIH07CiAK
IChmdW5jdGlvbigpewpAQCAtMTk4NSwxMCArMTk3MCwxMyBAQCB2YXIgRWRpdG9yID0gZnVuY3Rp
b24ocmVuZGVyZXIsIHNlc3Npb24pIHsKICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2Vy
KHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIuaWQpOwogICAgICAgICAgICAgc2Vzc2lvbi4k
aGlnaGxpZ2h0TGluZU1hcmtlciA9IG51bGw7CiAgICAgICAgIH0gZWxzZSBpZiAoIXNlc3Npb24u
JGhpZ2hsaWdodExpbmVNYXJrZXIgJiYgaGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICBzZXNzaW9u
LiRoaWdobGlnaHRMaW5lTWFya2VyID0gc2Vzc2lvbi5oaWdobGlnaHRMaW5lcyhoaWdobGlnaHQu
cm93LCBoaWdobGlnaHQucm93LCAiYWNlX2FjdGl2ZS1saW5lIik7CisgICAgICAgICAgICB2YXIg
cmFuZ2UgPSBuZXcgUmFuZ2UoaGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0LmNvbHVtbiwgaGlnaGxp
Z2h0LnJvdywgSW5maW5pdHkpOworICAgICAgICAgICAgcmFuZ2UuaWQgPSBzZXNzaW9uLmFkZE1h
cmtlcihyYW5nZSwgImFjZV9hY3RpdmUtbGluZSIsICJzY3JlZW5MaW5lIik7ICAgICAgICAgICAg
CisgICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyID0gcmFuZ2U7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaGlnaGxpZ2h0KSB7CiAgICAgICAgICAgICBzZXNzaW9uLiRoaWdobGln
aHRMaW5lTWFya2VyLnN0YXJ0LnJvdyA9IGhpZ2hsaWdodC5yb3c7CiAgICAgICAgICAgICBzZXNz
aW9uLiRoaWdobGlnaHRMaW5lTWFya2VyLmVuZC5yb3cgPSBoaWdobGlnaHQucm93OworICAgICAg
ICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5zdGFydC5jb2x1bW4gPSBoaWdobGln
aHQuY29sdW1uOwogICAgICAgICAgICAgc2Vzc2lvbi5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIp
OwogICAgICAgICB9CiAgICAgfTsKQEAgLTIwNjQsOCArMjA1Miw5IEBAIHZhciBFZGl0b3IgPSBm
dW5jdGlvbihyZW5kZXJlciwgc2Vzc2lvbikgewogICAgIH07CiAKIAotICAgIHRoaXMub25DaGFu
Z2VNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5vbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihl
KSB7CiAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlVGV4dCgpOworICAgICAgICB0aGlzLl9l
bWl0KCJjaGFuZ2VNb2RlIiwgZSk7CiAgICAgfTsKIAogCkBAIC0yMjA4LDYyICsyMTk3LDM4IEBA
IHZhciBFZGl0b3IgPSBmdW5jdGlvbihyZW5kZXJlciwgc2Vzc2lvbikgewogICAgICAgICB0aGlz
LnNlc3Npb24udG9nZ2xlT3ZlcndyaXRlKCk7CiAgICAgfTsKICAgICB0aGlzLnNldFNjcm9sbFNw
ZWVkID0gZnVuY3Rpb24oc3BlZWQpIHsKLSAgICAgICAgdGhpcy4kbW91c2VIYW5kbGVyLnNldFNj
cm9sbFNwZWVkKHNwZWVkKTsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oInNjcm9sbFNwZWVkIiwg
c3BlZWQpOwogICAgIH07CiAgICAgdGhpcy5nZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICByZXR1cm4gdGhpcy4kbW91c2VIYW5kbGVyLmdldFNjcm9sbFNwZWVkKCk7CisgICAg
ICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigic2Nyb2xsU3BlZWQiKTsKICAgICB9OwogICAgIHRo
aXMuc2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oZHJhZ0RlbGF5KSB7Ci0gICAgICAgIHRoaXMuJG1v
dXNlSGFuZGxlci5zZXREcmFnRGVsYXkoZHJhZ0RlbGF5KTsKKyAgICAgICAgdGhpcy5zZXRPcHRp
b24oImRyYWdEZWxheSIsIGRyYWdEZWxheSk7CiAgICAgfTsKICAgICB0aGlzLmdldERyYWdEZWxh
eSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kbW91c2VIYW5kbGVyLmdldERy
YWdEZWxheSgpOworICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oImRyYWdEZWxheSIpOwog
ICAgIH07Ci0KLSAgICB0aGlzLiRzZWxlY3Rpb25TdHlsZSA9ICJsaW5lIjsKLSAgICB0aGlzLnNl
dFNlbGVjdGlvblN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKLSAgICAgICAgaWYgKHRoaXMuJHNl
bGVjdGlvblN0eWxlID09IHN0eWxlKSByZXR1cm47Ci0KLSAgICAgICAgdGhpcy4kc2VsZWN0aW9u
U3R5bGUgPSBzdHlsZTsKLSAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpOwotICAgICAg
ICB0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb25TdHlsZSIsIHtkYXRhOiBzdHlsZX0pOworICAg
IHRoaXMuc2V0U2VsZWN0aW9uU3R5bGUgPSBmdW5jdGlvbih2YWwpIHsKKyAgICAgICAgdGhpcy5z
ZXRPcHRpb24oInNlbGVjdGlvblN0eWxlIiwgdmFsKTsKICAgICB9OwogICAgIHRoaXMuZ2V0U2Vs
ZWN0aW9uU3R5bGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJHNlbGVjdGlv
blN0eWxlOworICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInNlbGVjdGlvblN0eWxlIik7
CiAgICAgfTsKLQotICAgIHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUgPSB0cnVlOwogICAgIHRo
aXMuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgewot
ICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZSA9PSBzaG91bGRIaWdobGlnaHQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGlu
ZSA9IHNob3VsZEhpZ2hsaWdodDsKLSAgICAgICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZl
TGluZSgpOworICAgICAgICB0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0QWN0aXZlTGluZSIsIHNo
b3VsZEhpZ2hsaWdodCk7CiAgICAgfTsKICAgICB0aGlzLmdldEhpZ2hsaWdodEFjdGl2ZUxpbmUg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmU7
CisgICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0QWN0aXZlTGluZSIpOwog
ICAgIH07Ci0KLSAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lID0gdHJ1ZTsKICAgICB0aGlz
LnNldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKLSAg
ICAgICAgaWYgKHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPT0gc2hvdWxkSGlnaGxpZ2h0KQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0SGlnaGxpZ2h0
R3V0dGVyTGluZShzaG91bGRIaWdobGlnaHQpOwotICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0
ZXJMaW5lID0gc2hvdWxkSGlnaGxpZ2h0OworICAgICAgICB0aGlzLnNldE9wdGlvbigiaGlnaGxp
Z2h0R3V0dGVyTGluZSIsIHNob3VsZEhpZ2hsaWdodCk7CiAgICAgfTsKIAogICAgIHRoaXMuZ2V0
SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4k
aGlnaGxpZ2h0R3V0dGVyTGluZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJoaWdo
bGlnaHRHdXR0ZXJMaW5lIik7CiAgICAgfTsKLQotICAgIHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVk
V29yZCA9IHRydWU7CiAgICAgdGhpcy5zZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQgPSBmdW5jdGlv
bihzaG91bGRIaWdobGlnaHQpIHsKLSAgICAgICAgaWYgKHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVk
V29yZCA9PSBzaG91bGRIaWdobGlnaHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
dGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gc2hvdWxkSGlnaGxpZ2h0OwotICAgICAgICB0
aGlzLiRvblNlbGVjdGlvbkNoYW5nZSgpOworICAgICAgICB0aGlzLnNldE9wdGlvbigiaGlnaGxp
Z2h0U2VsZWN0ZWRXb3JkIiwgc2hvdWxkSGlnaGxpZ2h0KTsKICAgICB9OwogICAgIHRoaXMuZ2V0
SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiB0aGlz
LiRoaWdobGlnaHRTZWxlY3RlZFdvcmQ7CkBAIC0yMzAyLDUxICsyMjY3LDM4IEBAIHZhciBFZGl0
b3IgPSBmdW5jdGlvbihyZW5kZXJlciwgc2Vzc2lvbikgewogICAgIHRoaXMuZ2V0UHJpbnRNYXJn
aW5Db2x1bW4gPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0
UHJpbnRNYXJnaW5Db2x1bW4oKTsKICAgICB9OwotCi0gICAgdGhpcy4kcmVhZE9ubHkgPSBmYWxz
ZTsKICAgICB0aGlzLnNldFJlYWRPbmx5ID0gZnVuY3Rpb24ocmVhZE9ubHkpIHsKLSAgICAgICAg
dGhpcy4kcmVhZE9ubHkgPSByZWFkT25seTsKLSAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0UmVh
ZE9ubHkocmVhZE9ubHkpOwotICAgICAgICB0aGlzLnJlbmRlcmVyLiRjdXJzb3JMYXllci5zZXRC
bGlua2luZyghcmVhZE9ubHkpOworICAgICAgICB0aGlzLnNldE9wdGlvbigicmVhZE9ubHkiLCBy
ZWFkT25seSk7CiAgICAgfTsKICAgICB0aGlzLmdldFJlYWRPbmx5ID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLiRyZWFkT25seTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0
aW9uKCJyZWFkT25seSIpOwogICAgIH07Ci0KLSAgICB0aGlzLiRtb2RlQmVoYXZpb3VycyA9IHRy
dWU7CiAgICAgdGhpcy5zZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFibGVkKSB7
Ci0gICAgICAgIHRoaXMuJG1vZGVCZWhhdmlvdXJzID0gZW5hYmxlZDsKKyAgICAgICAgdGhpcy5z
ZXRPcHRpb24oImJlaGF2aW91cnNFbmFibGVkIiwgZW5hYmxlZCk7CiAgICAgfTsKICAgICB0aGlz
LmdldEJlaGF2aW91cnNFbmFibGVkID0gZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gdGhp
cy4kbW9kZUJlaGF2aW91cnM7CisgICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiYmVoYXZp
b3Vyc0VuYWJsZWQiKTsKICAgICB9OwotCi0gICAgdGhpcy4kbW9kZVdyYXBCZWhhdmlvdXJzID0g
dHJ1ZTsKICAgICB0aGlzLnNldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFi
bGVkKSB7Ci0gICAgICAgIHRoaXMuJG1vZGVXcmFwQmVoYXZpb3VycyA9IGVuYWJsZWQ7CisgICAg
ICAgIHRoaXMuc2V0T3B0aW9uKCJ3cmFwQmVoYXZpb3Vyc0VuYWJsZWQiLCBlbmFibGVkKTsKICAg
ICB9OwogICAgIHRoaXMuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICByZXR1cm4gdGhpcy4kbW9kZVdyYXBCZWhhdmlvdXJzOworICAgICAgICByZXR1cm4g
dGhpcy5nZXRPcHRpb24oIndyYXBCZWhhdmlvdXJzRW5hYmxlZCIpOwogICAgIH07CiAgICAgdGhp
cy5zZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7Ci0gICAgICAgIHZhciBndXR0
ZXIgPSB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllcjsKLSAgICAgICAgaWYgKGd1dHRlci5nZXRT
aG93Rm9sZFdpZGdldHMoKSA9PSBzaG93KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
aGlzLnNldE9wdGlvbigic2hvd0ZvbGRXaWRnZXRzIiwgc2hvdyk7CiAKLSAgICAgICAgdGhpcy5y
ZW5kZXJlci4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKHNob3cpOwotICAgICAgICB0
aGlzLiRzaG93Rm9sZFdpZGdldHMgPSBzaG93OwotICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0
ZUZ1bGwoKTsKICAgICB9OwogICAgIHRoaXMuZ2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRTaG93Rm9s
ZFdpZGdldHMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJzaG93Rm9sZFdpZGdl
dHMiKTsKICAgICB9OwogCi0gICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihz
aG93KSB7Ci0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RmFkZUZvbGRXaWRnZXRzKHNob3cpOwor
ICAgIHRoaXMuc2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oZmFkZSkgeworICAgICAgICB0
aGlzLnNldE9wdGlvbigiZmFkZUZvbGRXaWRnZXRzIiwgZmFkZSk7CiAgICAgfTsKIAogICAgIHRo
aXMuZ2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
LnJlbmRlcmVyLmdldEZhZGVGb2xkV2lkZ2V0cygpOworICAgICAgICByZXR1cm4gdGhpcy5nZXRP
cHRpb24oImZhZGVGb2xkV2lkZ2V0cyIpOwogICAgIH07CiAgICAgdGhpcy5yZW1vdmUgPSBmdW5j
dGlvbihkaXIpIHsKICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSl7CkBAIC0y
OTk4LDExICsyOTUwLDExMCBAQCB2YXIgRWRpdG9yID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Np
b24pIHsKICAgICB9OwogICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgICAgICB0
aGlzLnJlbmRlcmVyLmRlc3Ryb3koKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiZGVzdHJveSIsIHRo
aXMpOworICAgIH07CisgICAgdGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXcgPSBmdW5j
dGlvbihlbmFibGUpIHsKKyAgICAgICAgaWYgKGVuYWJsZSA9PT0gdHJ1ZSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgdmFyIHJlY3Q7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAg
ICAgICAgdmFyIHNob3VsZFNjcm9sbCA9IGZhbHNlOworICAgICAgICBpZiAoIXRoaXMuJHNjcm9s
bEFuY2hvcikKKyAgICAgICAgICAgIHRoaXMuJHNjcm9sbEFuY2hvciA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB2YXIgc2Nyb2xsQW5jaG9yID0gdGhpcy4kc2Nyb2xs
QW5jaG9yOworICAgICAgICBzY3JvbGxBbmNob3Iuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjph
YnNvbHV0ZSI7CisgICAgICAgIHRoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZShzY3JvbGxBbmNo
b3IsIHRoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQpOworICAgICAgICB2YXIgb25DaGFuZ2VTZWxl
Y3Rpb24gPSB0aGlzLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHNob3VsZFNjcm9sbCA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgICB2YXIgb25CZWZv
cmVSZW5kZXIgPSB0aGlzLnJlbmRlcmVyLm9uKCJiZWZvcmVSZW5kZXIiLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGlmIChzaG91bGRTY3JvbGwpCisgICAgICAgICAgICAgICAgcmVjdCA9IHNl
bGYucmVuZGVyZXIuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICB9
KTsKKyAgICAgICAgdmFyIG9uQWZ0ZXJSZW5kZXIgPSB0aGlzLnJlbmRlcmVyLm9uKCJhZnRlclJl
bmRlciIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCAmJiByZWN0
ICYmIHNlbGYuaXNGb2N1c2VkKCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVuZGVyZXIgPSBz
ZWxmLnJlbmRlcmVyOworICAgICAgICAgICAgICAgIHZhciBwb3MgPSByZW5kZXJlci4kY3Vyc29y
TGF5ZXIuJHBpeGVsUG9zOworICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSByZW5kZXJlci5s
YXllckNvbmZpZzsKKyAgICAgICAgICAgICAgICB2YXIgdG9wID0gcG9zLnRvcCAtIGNvbmZpZy5v
ZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKHBvcy50b3AgPj0gMCAmJiB0b3AgKyByZWN0LnRv
cCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHBvcy50b3AgPCBjb25maWcuaGVpZ2h0ICYmCisgICAgICAg
ICAgICAgICAgICAgIHBvcy50b3AgKyByZWN0LnRvcCArIGNvbmZpZy5saW5lSGVpZ2h0ID4gd2lu
ZG93LmlubmVySGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZFNjcm9sbCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZFNjcm9sbCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChz
aG91bGRTY3JvbGwgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmNob3Iu
c3R5bGUudG9wID0gdG9wICsgInB4IjsKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5jaG9y
LnN0eWxlLmxlZnQgPSBwb3MubGVmdCArICJweCI7CisgICAgICAgICAgICAgICAgICAgIHNjcm9s
bEFuY2hvci5zdHlsZS5oZWlnaHQgPSBjb25maWcubGluZUhlaWdodCArICJweCI7CisgICAgICAg
ICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zY3JvbGxJbnRvVmlldyhzaG91bGRTY3JvbGwpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzaG91bGRTY3JvbGwgPSByZWN0ID0g
bnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuc2V0QXV0b1Nj
cm9sbEVkaXRvckludG9WaWV3ID0gZnVuY3Rpb24oZW5hYmxlKSB7CisgICAgICAgICAgICBpZiAo
ZW5hYmxlID09PSBmYWxzZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBk
ZWxldGUgdGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXc7CisgICAgICAgICAgICB0aGlz
LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZVNlbGVjdGlvbiIsIG9uQ2hhbmdlU2VsZWN0aW9u
KTsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWZ0ZXJS
ZW5kZXIiLCBvbkFmdGVyUmVuZGVyKTsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiYmVmb3JlUmVuZGVyIiwgb25CZWZvcmVSZW5kZXIpOworICAgICAgICB9
OwogICAgIH07CiAKIH0pLmNhbGwoRWRpdG9yLnByb3RvdHlwZSk7CiAKIAorCitjb25maWcuZGVm
aW5lT3B0aW9ucyhFZGl0b3IucHJvdG90eXBlLCAiZWRpdG9yIiwgeworICAgIHNlbGVjdGlvblN0
eWxlOiB7CisgICAgICAgIHNldDogZnVuY3Rpb24oc3R5bGUpIHsKKyAgICAgICAgICAgIHRoaXMu
b25TZWxlY3Rpb25DaGFuZ2UoKTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVj
dGlvblN0eWxlIiwge2RhdGE6IHN0eWxlfSk7CisgICAgICAgIH0sCisgICAgICAgIGluaXRpYWxW
YWx1ZTogImxpbmUiLAorICAgIH0sCisgICAgaGlnaGxpZ2h0QWN0aXZlTGluZTogeworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uKCkge3RoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTt9LAor
ICAgICAgICBpbml0aWFsVmFsdWU6IHRydWUKKyAgICB9LAorICAgIGhpZ2hsaWdodFNlbGVjdGVk
V29yZDogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkge3RoaXMuJG9u
U2VsZWN0aW9uQ2hhbmdlKCk7fSwKKyAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlCisgICAgfSwK
KyAgICByZWFkT25seTogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uKHJlYWRPbmx5KSB7CisgICAg
ICAgICAgICB0aGlzLnRleHRJbnB1dC5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgICAgICAg
ICB0aGlzLnJlbmRlcmVyLiRjdXJzb3JMYXllci5zZXRCbGlua2luZyghcmVhZE9ubHkpOworICAg
ICAgICB9LAorICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlCisgICAgfSwKKyAgICBiZWhhdmlv
dXJzRW5hYmxlZDoge2luaXRpYWxWYWx1ZTogdHJ1ZX0sCisgICAgd3JhcEJlaGF2aW91cnNFbmFi
bGVkOiB7aW5pdGlhbFZhbHVlOiB0cnVlfSwKKworICAgIGhpZ2hsaWdodEd1dHRlckxpbmU6ICJy
ZW5kZXJlciIsCisgICAgYW5pbWF0ZWRTY3JvbGw6ICJyZW5kZXJlciIsCisgICAgc2hvd0ludmlz
aWJsZXM6ICJyZW5kZXJlciIsCisgICAgc2hvd1ByaW50TWFyZ2luOiAicmVuZGVyZXIiLAorICAg
IHByaW50TWFyZ2luQ29sdW1uOiAicmVuZGVyZXIiLAorICAgIGZhZGVGb2xkV2lkZ2V0czogInJl
bmRlcmVyIiwKKyAgICBzaG93Rm9sZFdpZGdldHM6ICJyZW5kZXJlciIsCisgICAgc2hvd0d1dHRl
cjogInJlbmRlcmVyIiwKKyAgICBkaXNwbGF5SW5kZW50R3VpZGVzOiAicmVuZGVyZXIiLAorCisg
ICAgc2Nyb2xsU3BlZWQ6ICIkbW91c2VIYW5kbGVyIiwKKyAgICBkcmFnRGVsYXk6ICIkbW91c2VI
YW5kbGVyIiwKKyAgICBmb2N1c1RpbW91dDogIiRtb3VzZUhhbmRsZXIiLAorCisgICAgZmlyc3RM
aW5lTnVtYmVyOiAic2Vzc2lvbiIsCisgICAgdXNlV29ya2VyOiAic2Vzc2lvbiIsCisgICAgdXNl
U29mdFRhYnM6ICJzZXNzaW9uIiwKKyAgICB0YWJTaXplOiAic2Vzc2lvbiIsCisgICAgd3JhcDog
InNlc3Npb24iCit9KTsKKwogZXhwb3J0cy5FZGl0b3IgPSBFZGl0b3I7CiB9KTsKIApAQCAtMzUw
Niw5ICszNTU3LDEyIEBAIHZhciBUZXh0SW5wdXQgPSBmdW5jdGlvbihwYXJlbnROb2RlLCBob3N0
KSB7CiAgICAgICAgIHJlc2V0U2VsZWN0aW9uKGhvc3Quc2VsZWN0aW9uLmlzRW1wdHkoKSk7CiAg
ICAgICAgIGhvc3QuX2VtaXQoIm5hdGl2ZWNvbnRleHRtZW51Iiwge3RhcmdldDogaG9zdH0pOwog
ICAgICAgICB2YXIgcmVjdCA9IGhvc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OworICAgICAgICB2YXIgc3R5bGUgPSBkb20uY29tcHV0ZWRTdHlsZShob3N0LmNvbnRhaW5lcik7
CisgICAgICAgIHZhciB0b3AgPSByZWN0LnRvcCArIChwYXJzZUludChzdHlsZS5ib3JkZXJUb3BX
aWR0aCkgfHwgMCk7CisgICAgICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgKHBhcnNlSW50KHJl
Y3QuYm9yZGVyTGVmdFdpZHRoKSB8fCAwKTsKICAgICAgICAgdmFyIG1vdmUgPSBmdW5jdGlvbihl
KSB7Ci0gICAgICAgICAgICB0ZXh0LnN0eWxlLmxlZnQgPSBlLmNsaWVudFggLSByZWN0LmxlZnQg
LSAyICsgInB4IjsKLSAgICAgICAgICAgIHRleHQuc3R5bGUudG9wID0gZS5jbGllbnRZIC0gcmVj
dC50b3AgLSAyICsgInB4IjsKKyAgICAgICAgICAgIHRleHQuc3R5bGUubGVmdCA9IGUuY2xpZW50
WCAtIGxlZnQgLSAyICsgInB4IjsKKyAgICAgICAgICAgIHRleHQuc3R5bGUudG9wID0gZS5jbGll
bnRZIC0gdG9wIC0gMiArICJweCI7CiAgICAgICAgIH07CiAgICAgICAgIG1vdmUoZSk7CiAKQEAg
LTM1NDUsNyArMzU5OSw3IEBAIHZhciBUZXh0SW5wdXQgPSBmdW5jdGlvbihwYXJlbnROb2RlLCBo
b3N0KSB7CiBleHBvcnRzLlRleHRJbnB1dCA9IFRleHRJbnB1dDsKIH0pOwogCi1hY2UuZGVmaW5l
KCdhY2UvbW91c2UvbW91c2VfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScgLCAnYWNlL2xpYi9ldmVudCcsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbW91c2UvZGVm
YXVsdF9oYW5kbGVycycsICdhY2UvbW91c2UvZGVmYXVsdF9ndXR0ZXJfaGFuZGxlcicsICdhY2Uv
bW91c2UvbW91c2VfZXZlbnQnLCAnYWNlL21vdXNlL2RyYWdkcm9wJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworYWNlLmRlZmluZSgnYWNlL21vdXNlL21vdXNlX2hhbmRs
ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnLCAn
YWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMnLCAnYWNlL21v
dXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXInLCAnYWNlL21vdXNlL21vdXNlX2V2ZW50JywgJ2Fj
ZS9tb3VzZS9kcmFnZHJvcCcsICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgewogCiAKIHZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOwpA
QCAtMzU1NCw2ICszNjA4LDcgQEAgdmFyIERlZmF1bHRIYW5kbGVycyA9IHJlcXVpcmUoIi4vZGVm
YXVsdF9oYW5kbGVycyIpLkRlZmF1bHRIYW5kbGVyczsKIHZhciBEZWZhdWx0R3V0dGVySGFuZGxl
ciA9IHJlcXVpcmUoIi4vZGVmYXVsdF9ndXR0ZXJfaGFuZGxlciIpLkd1dHRlckhhbmRsZXI7CiB2
YXIgTW91c2VFdmVudCA9IHJlcXVpcmUoIi4vbW91c2VfZXZlbnQiKS5Nb3VzZUV2ZW50OwogdmFy
IERyYWdkcm9wSGFuZGxlciA9IHJlcXVpcmUoIi4vZHJhZ2Ryb3AiKS5EcmFnZHJvcEhhbmRsZXI7
Cit2YXIgY29uZmlnID0gcmVxdWlyZSgiLi4vY29uZmlnIik7CiAKIHZhciBNb3VzZUhhbmRsZXIg
PSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKQEAgLTM1ODEs
MjkgKzM2MzYsMTAgQEAgdmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgewogfTsK
IAogKGZ1bmN0aW9uKCkgewotCi0gICAgdGhpcy4kc2Nyb2xsU3BlZWQgPSAxOwotICAgIHRoaXMu
c2V0U2Nyb2xsU3BlZWQgPSBmdW5jdGlvbihzcGVlZCkgewotICAgICAgICB0aGlzLiRzY3JvbGxT
cGVlZCA9IHNwZWVkOwotICAgIH07Ci0KLSAgICB0aGlzLmdldFNjcm9sbFNwZWVkID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGxTcGVlZDsKLSAgICB9OwotCiAgICAg
dGhpcy5vbk1vdXNlRXZlbnQgPSBmdW5jdGlvbihuYW1lLCBlKSB7CiAgICAgICAgIHRoaXMuZWRp
dG9yLl9lbWl0KG5hbWUsIG5ldyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7CiAgICAgfTsK
IAotICAgIHRoaXMuJGRyYWdEZWxheSA9IDI1MDsKLSAgICB0aGlzLnNldERyYWdEZWxheSA9IGZ1
bmN0aW9uKGRyYWdEZWxheSkgewotICAgICAgICB0aGlzLiRkcmFnRGVsYXkgPSBkcmFnRGVsYXk7
Ci0gICAgfTsKLQotICAgIHRoaXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHJldHVybiB0aGlzLiRkcmFnRGVsYXk7Ci0gICAgfTsKLQogICAgIHRoaXMub25Nb3VzZU1vdmUg
PSBmdW5jdGlvbihuYW1lLCBlKSB7CiAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmVkaXRv
ci5fZXZlbnRSZWdpc3RyeSAmJiB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1vdmU7
CiAgICAgICAgIGlmICghbGlzdGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoKQpAQCAtMzY0NSw2
ICszNjgxLDcgQEAgdmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgewogCiAgICAg
ICAgIHZhciBvbkNhcHR1cmVFbmQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICBjbGVhcklu
dGVydmFsKHRpbWVySWQpOworICAgICAgICAgICAgb25DYXB0dXJlSW50ZXJ2YWwoKTsKICAgICAg
ICAgICAgIHNlbGZbc2VsZi5zdGF0ZSArICJFbmQiXSAmJiBzZWxmW3NlbGYuc3RhdGUgKyAiRW5k
Il0oZSk7CiAgICAgICAgICAgICBzZWxmLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7CiAgICAgICAg
ICAgICBpZiAocmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID09IG51bGwpIHsKQEAgLTM2
NTYsMTQgKzM2OTMsMTAgQEAgdmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgewog
CiAgICAgICAgIHZhciBvbkNhcHR1cmVJbnRlcnZhbCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgc2VsZltzZWxmLnN0YXRlXSAmJiBzZWxmW3NlbGYuc3RhdGVdKCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSAmJiBldi5k
b21FdmVudC50eXBlID09ICJkYmxjbGljayIpIHsKLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgb25DYXB0dXJlSW50ZXJ2YWwoKTsKLSAgICAgICAg
ICAgICAgICBvbkNhcHR1cmVFbmQoZXYuZG9tRXZlbnQpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigp
IHtvbkNhcHR1cmVFbmQoZXYuZG9tRXZlbnQpO30pOwogICAgICAgICB9CiAKICAgICAgICAgZXZl
bnQuY2FwdHVyZSh0aGlzLmVkaXRvci5jb250YWluZXIsIG9uTW91c2VNb3ZlLCBvbkNhcHR1cmVF
bmQpOwpAQCAtMzY3MSw2ICszNzA0LDEzIEBAIHZhciBNb3VzZUhhbmRsZXIgPSBmdW5jdGlvbihl
ZGl0b3IpIHsKICAgICB9OwogfSkuY2FsbChNb3VzZUhhbmRsZXIucHJvdG90eXBlKTsKIAorY29u
ZmlnLmRlZmluZU9wdGlvbnMoTW91c2VIYW5kbGVyLnByb3RvdHlwZSwgIm1vdXNlSGFuZGxlciIs
IHsKKyAgICBzY3JvbGxTcGVlZDoge2luaXRpYWxWYWx1ZTogMX0sCisgICAgZHJhZ0RlbGF5OiB7
aW5pdGlhbFZhbHVlOiAxNTB9LAorICAgIGZvY3VzVGltb3V0OiB7aW5pdGlhbFZhbHVlOiAwfQor
fSk7CisKKwogZXhwb3J0cy5Nb3VzZUhhbmRsZXIgPSBNb3VzZUhhbmRsZXI7CiB9KTsKIApAQCAt
MzY4MCw3ICszNzIwLDcgQEAgYWNlLmRlZmluZSgnYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMn
LCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS8KIHZhciBkb20gPSByZXF1
aXJlKCIuLi9saWIvZG9tIik7CiB2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJh
Z2VudCIpOwogCi12YXIgRFJBR19PRkZTRVQgPSA1OyAvLyBwaXhlbHMKK3ZhciBEUkFHX09GRlNF
VCA9IDA7IC8vIHBpeGVscwogCiBmdW5jdGlvbiBEZWZhdWx0SGFuZGxlcnMobW91c2VIYW5kbGVy
KSB7CiAgICAgbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7CkBAIC0zNzAxLDgg
KzM3NDEsNiBAQCBmdW5jdGlvbiBEZWZhdWx0SGFuZGxlcnMobW91c2VIYW5kbGVyKSB7CiAKICAg
ICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlMaW5lcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmlu
ZChtb3VzZUhhbmRsZXIsICJnZXRMaW5lUmFuZ2UiKTsKICAgICBtb3VzZUhhbmRsZXIuc2VsZWN0
QnlXb3JkcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsICJnZXRX
b3JkUmFuZ2UiKTsKLQotICAgIG1vdXNlSGFuZGxlci4kZm9jdXNXYWl0VGltb3V0ID0gMjUwOwog
fQogCiAoZnVuY3Rpb24oKSB7CkBAIC0zNzI3LDcgKzM3NjUsNyBAQCBmdW5jdGlvbiBEZWZhdWx0
SGFuZGxlcnMobW91c2VIYW5kbGVyKSB7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGluU2VsZWN0
aW9uICYmICFlZGl0b3IuaXNGb2N1c2VkKCkpIHsKICAgICAgICAgICAgIGVkaXRvci5mb2N1cygp
OwotICAgICAgICAgICAgaWYgKHRoaXMuJGZvY3VzV2FpdFRpbW91dCAmJiAhdGhpcy4kY2xpY2tT
ZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLiRmb2N1c1RpbW91dCAmJiAhdGhpcy4k
Y2xpY2tTZWxlY3Rpb24pIHsKICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCJmb2N1c1dh
aXQiKTsKICAgICAgICAgICAgICAgICB0aGlzLmNhcHR1cmVNb3VzZShldik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV2LnByZXZlbnREZWZhdWx0KCk7CkBAIC0zODQ0LDggKzM4ODIsOCBAQCBm
dW5jdGlvbiBEZWZhdWx0SGFuZGxlcnMobW91c2VIYW5kbGVyKSB7CiAgICAgICAgIHZhciBkaXN0
YW5jZSA9IGNhbGNEaXN0YW5jZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3du
RXZlbnQueSwgdGhpcy54LCB0aGlzLnkpOwogICAgICAgICB2YXIgdGltZSA9IChuZXcgRGF0ZSgp
KS5nZXRUaW1lKCk7CiAKLSAgICAgICAgaWYgKGRpc3RhbmNlID4gRFJBR19PRkZTRVQgfHx0aW1l
IC0gdGhpcy5tb3VzZWRvd25FdmVudC50aW1lID4gdGhpcy4kZm9jdXNXYWl0VGltb3V0KQotICAg
ICAgICAgICAgdGhpcy5zdGFydFNlbGVjdCgpOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBEUkFH
X09GRlNFVCB8fCB0aW1lIC0gdGhpcy5tb3VzZWRvd25FdmVudC50aW1lID4gdGhpcy4kZm9jdXNU
aW1vdXQpCisgICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQu
Z2V0RG9jdW1lbnRQb3NpdGlvbigpKTsKICAgICB9OwogCiAgICAgdGhpcy5kcmFnV2FpdCA9IGZ1
bmN0aW9uKGUpIHsKQEAgLTM4NTUsNyArMzg5Myw3IEBAIGZ1bmN0aW9uIERlZmF1bHRIYW5kbGVy
cyhtb3VzZUhhbmRsZXIpIHsKIAogICAgICAgICBpZiAoZGlzdGFuY2UgPiBEUkFHX09GRlNFVCkg
ewogICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERv
Y3VtZW50UG9zaXRpb24oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGltZSAtIHRoaXMubW91c2Vk
b3duRXZlbnQudGltZSA+IGVkaXRvci5nZXREcmFnRGVsYXkoKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKHRpbWUgLSB0aGlzLm1vdXNlZG93bkV2ZW50LnRpbWUgPiBlZGl0b3IuJG1vdXNlSGFuZGxl
ci4kZHJhZ0RlbGF5KSB7CiAgICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZygpOwogICAgICAgICB9
CiAgICAgfTsKQEAgLTM5MzgsMjggKzM5NzYsMTggQEAgZnVuY3Rpb24gRGVmYXVsdEhhbmRsZXJz
KG1vdXNlSGFuZGxlcikgewogICAgIH07CiAKICAgICB0aGlzLm9uTW91c2VXaGVlbCA9IGZ1bmN0
aW9uKGV2KSB7Ci0gICAgICAgIGlmIChldi5nZXRTaGlmdEtleSgpIHx8IGV2LmdldEFjY2VsS2V5
KCkpeworICAgICAgICBpZiAoZXYuZ2V0U2hpZnRLZXkoKSB8fCBldi5nZXRBY2NlbEtleSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIHZhciB0ID0gZXYuZG9tRXZl
bnQudGltZVN0YW1wOworICAgICAgICB2YXIgZHQgPSB0IC0gKHRoaXMuJGxhc3RTY3JvbGxUaW1l
fHwwKTsKKyAgICAgICAgCiAgICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKICAgICAg
ICAgdmFyIGlzU2Nyb2xhYmxlID0gZWRpdG9yLnJlbmRlcmVyLmlzU2Nyb2xsYWJsZUJ5KGV2Lndo
ZWVsWCAqIGV2LnNwZWVkLCBldi53aGVlbFkgKiBldi5zcGVlZCk7Ci0gICAgICAgIGlmIChpc1Nj
cm9sYWJsZSkgewotICAgICAgICAgICAgdGhpcy4kcGFzc1Njcm9sbEV2ZW50ID0gZmFsc2U7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodGhpcy4kcGFzc1Njcm9sbEV2ZW50KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCF0aGlzLiRzY3JvbGxT
dG9wVGltZW91dCkgewotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAg
ICAgICAgICB0aGlzLiRzY3JvbGxTdG9wVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuJHBhc3NTY3JvbGxFdmVudCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuJHNjcm9sbFN0b3BUaW1lb3V0ID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICB9LCAyMDApOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoaXNTY3JvbGFibGUg
fHwgZHQgPCAyMDApIHsKKyAgICAgICAgICAgIHRoaXMuJGxhc3RTY3JvbGxUaW1lID0gdDsKKyAg
ICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxCeShldi53aGVlbFggKiBldi5zcGVlZCwg
ZXYud2hlZWxZICogZXYuc3BlZWQpOworICAgICAgICAgICAgcmV0dXJuIGV2LnN0b3AoKTsKICAg
ICAgICAgfQotCi0gICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxCeShldi53aGVlbFggKiBl
di5zcGVlZCwgZXYud2hlZWxZICogZXYuc3BlZWQpOwotICAgICAgICByZXR1cm4gZXYucHJldmVu
dERlZmF1bHQoKTsKICAgICB9OwogCiB9KS5jYWxsKERlZmF1bHRIYW5kbGVycy5wcm90b3R5cGUp
OwpAQCAtNDIwNSw2ICs0MjMzLDkgQEAgdmFyIERyYWdkcm9wSGFuZGxlciA9IGZ1bmN0aW9uKG1v
dXNlSGFuZGxlcikgewogICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJhZ2Vu
dGVyIiwgZnVuY3Rpb24oZSkgewogICAgICAgICBpZiAoZWRpdG9yLmdldFJlYWRPbmx5KCkpCiAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciB0eXBlcyA9IGUuZGF0YVRyYW5zZmVyLnR5
cGVzOworICAgICAgICBpZiAodHlwZXMgJiYgQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0
eXBlcywgJ0ZpbGVzJykgIT09IC0xKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjb3Vu
dGVyKys7CiAgICAgICAgIGlmICghZHJhZ1NlbGVjdGlvbk1hcmtlcikgewogICAgICAgICAgICAg
cmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKQEAgLTQyMjEsNiArNDI1Miw5IEBA
IHZhciBEcmFnZHJvcEhhbmRsZXIgPSBmdW5jdGlvbihtb3VzZUhhbmRsZXIpIHsKICAgICBldmVu
dC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWdvdmVyIiwgZnVuY3Rpb24oZSkgewogICAg
ICAgICBpZiAoZWRpdG9yLmdldFJlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHZhciB0eXBlcyA9IGUuZGF0YVRyYW5zZmVyLnR5cGVzOworICAgICAgICBpZiAodHlwZXMg
JiYgQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0eXBlcywgJ0ZpbGVzJykgIT09IC0xKQor
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB4ID0gZS5jbGllbnRYOwogICAgICAgICB5ID0g
ZS5jbGllbnRZOwogICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CkBAIC00
MjM1LDYgKzQyNjksOSBAQCB2YXIgRHJhZ2Ryb3BIYW5kbGVyID0gZnVuY3Rpb24obW91c2VIYW5k
bGVyKSB7CiAgICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJkcmFnbGVhdmUiLCBm
dW5jdGlvbihlKSB7CiAgICAgICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSkKICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdmFyIHR5cGVzID0gZS5kYXRhVHJhbnNmZXIudHlwZXM7Cisg
ICAgICAgIGlmICh0eXBlcyAmJiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHR5cGVzLCAn
RmlsZXMnKSAhPT0gLTEpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNvdW50ZXItLTsK
ICAgICAgICAgaWYgKGNvdW50ZXIgPiAwKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDI2NSwy
MDEyICs0MzAyLDIxMjEgQEAgdmFyIERyYWdkcm9wSGFuZGxlciA9IGZ1bmN0aW9uKG1vdXNlSGFu
ZGxlcikgewogZXhwb3J0cy5EcmFnZHJvcEhhbmRsZXIgPSBEcmFnZHJvcEhhbmRsZXI7CiB9KTsK
IAotYWNlLmRlZmluZSgnYWNlL21vdXNlL2ZvbGRfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cith
Y2UuZGVmaW5lKCdhY2UvY29uZmlnJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAs
ICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9uZXQnLCAnYWNlL2xpYi9l
dmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworIm5v
IHVzZSBzdHJpY3QiOwogCit2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBv
b3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKK3ZhciBuZXQgPSByZXF1aXJlKCIuL2xpYi9uZXQi
KTsKK3ZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZl
bnRFbWl0dGVyOwogCi1mdW5jdGlvbiBGb2xkSGFuZGxlcihlZGl0b3IpIHsKK3ZhciBnbG9iYWwg
PSAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXM7Cit9KSgpOwogCi0gICAgZWRpdG9yLm9u
KCJjbGljayIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIHBvc2l0aW9uID0gZS5nZXREb2N1
bWVudFBvc2l0aW9uKCk7Ci0gICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247Ci0g
ICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXRGb2xkQXQocG9zaXRpb24ucm93LCBwb3NpdGlv
bi5jb2x1bW4sIDEpOwotICAgICAgICBpZiAoZm9sZCkgewotICAgICAgICAgICAgaWYgKGUuZ2V0
QWNjZWxLZXkoKSkKLSAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQoZm9sZCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2Vzc2lvbi5leHBhbmRGb2xkKGZvbGQp
OwordmFyIG9wdGlvbnMgPSB7CisgICAgcGFja2FnZWQ6IGZhbHNlLAorICAgIHdvcmtlclBhdGg6
IG51bGwsCisgICAgbW9kZVBhdGg6IG51bGwsCisgICAgdGhlbWVQYXRoOiBudWxsLAorICAgIGJh
c2VQYXRoOiAiIiwKKyAgICBzdWZmaXg6ICIuanMiLAorICAgICRtb2R1bGVVcmxzOiB7fQorfTsK
IAotICAgICAgICAgICAgZS5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICB9KTsKK2V4cG9ydHMuZ2V0
ID0gZnVuY3Rpb24oa2V5KSB7CisgICAgaWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KGtleSkp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb25maWcga2V5OiAiICsga2V5KTsK
IAotICAgIGVkaXRvci5vbigiZ3V0dGVybW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgewotICAgICAg
ICBpZiAoIWVkaXRvci5pc0ZvY3VzZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dmFyIGd1dHRlclJlZ2lvbiA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9u
KGUpOworICAgIHJldHVybiBvcHRpb25zW2tleV07Cit9OwogCi0gICAgICAgIGlmIChndXR0ZXJS
ZWdpb24gPT0gImZvbGRXaWRnZXRzIikgewotICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9j
dW1lbnRQb3NpdGlvbigpLnJvdzsKLSAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNl
c3Npb247Ci0gICAgICAgICAgICBpZiAoc2Vzc2lvbi5mb2xkV2lkZ2V0cyAmJiBzZXNzaW9uLmZv
bGRXaWRnZXRzW3Jvd10pCi0gICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ub25Gb2xkV2lk
Z2V0Q2xpY2socm93LCBlKTsKLSAgICAgICAgICAgIGUuc3RvcCgpOwotICAgICAgICB9Ci0gICAg
fSk7CitleHBvcnRzLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICBpZiAoIW9wdGlv
bnMuaGFzT3duUHJvcGVydHkoa2V5KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3du
IGNvbmZpZyBrZXk6ICIgKyBrZXkpOwogCi0gICAgZWRpdG9yLm9uKCJndXR0ZXJkYmxjbGljayIs
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9IGVkaXRvci5yZW5kZXJl
ci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKGUpOworICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlOwor
fTsKIAotICAgICAgICBpZiAoZ3V0dGVyUmVnaW9uID09ICJmb2xkV2lkZ2V0cyIpIHsKLSAgICAg
ICAgICAgIHZhciByb3cgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7Ci0gICAgICAgICAg
ICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOwotICAgICAgICAgICAgdmFyIGZ3ID0gc2Vz
c2lvbi5mb2xkV2lkZ2V0czsKLSAgICAgICAgICAgIGlmICghZncgfHwgZndbcm93XSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47CitleHBvcnRzLmFsbCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biBsYW5nLmNvcHlPYmplY3Qob3B0aW9ucyk7Cit9Oworb29wLmltcGxlbWVudChleHBvcnRzLCBF
dmVudEVtaXR0ZXIpOwogCi0gICAgICAgICAgICB2YXIgaSA9IHJvdyAtIDEsIGZpcnN0UmFuZ2U7
Ci0gICAgICAgICAgICB3aGlsZSAoaSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSBm
d1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSBudWxsKQotICAgICAgICAgICAgICAgICAg
ICBjID0gZndbaV0gPSBzZXNzaW9uLmdldEZvbGRXaWRnZXQoKTsKK2V4cG9ydHMubW9kdWxlVXJs
ID0gZnVuY3Rpb24obmFtZSwgY29tcG9uZW50KSB7CisgICAgaWYgKG9wdGlvbnMuJG1vZHVsZVVy
bHNbbmFtZV0pCisgICAgICAgIHJldHVybiBvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdOwogCi0g
ICAgICAgICAgICAgICAgaWYgKGMgPT0gInN0YXJ0IikgewotICAgICAgICAgICAgICAgICAgICB2
YXIgcmFuZ2UgPSBzZXNzaW9uLmdldEZvbGRXaWRnZXRSYW5nZShpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFmaXJzdFJhbmdlKQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSYW5n
ZSA9IHJhbmdlOwotICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UuZW5kLnJv
dyA+PSByb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGkgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmFuZ2UgPSBmaXJzdFJhbmdlOworICAgIHZhciBw
YXJ0cyA9IG5hbWUuc3BsaXQoIi8iKTsKKyAgICBjb21wb25lbnQgPSBjb21wb25lbnQgfHwgcGFy
dHNbcGFydHMubGVuZ3RoIC0gMl0gfHwgIiI7CisgICAgdmFyIGJhc2UgPSBwYXJ0c1twYXJ0cy5s
ZW5ndGggLSAxXS5yZXBsYWNlKGNvbXBvbmVudCwgIiIpLnJlcGxhY2UoLyheW1wtX10pfChbXC1f
XSQpLywgIiIpOwogCi0gICAgICAgICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgICAgICAgICB2
YXIgcm93ID0gcmFuZ2Uuc3RhcnQucm93OwotICAgICAgICAgICAgICAgIHZhciBmb2xkID0gc2Vz
c2lvbi5nZXRGb2xkQXQocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgsIDEpOworICAg
IGlmICghYmFzZSAmJiBwYXJ0cy5sZW5ndGggPiAxKQorICAgICAgICBiYXNlID0gcGFydHNbcGFy
dHMubGVuZ3RoIC0gMl07CisgICAgdmFyIHBhdGggPSBvcHRpb25zW2NvbXBvbmVudCArICJQYXRo
Il07CisgICAgaWYgKHBhdGggPT0gbnVsbCkKKyAgICAgICAgcGF0aCA9IG9wdGlvbnMuYmFzZVBh
dGg7CisgICAgaWYgKHBhdGggJiYgcGF0aC5zbGljZSgtMSkgIT0gIi8iKQorICAgICAgICBwYXRo
ICs9ICIvIjsKKyAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVudCArICItIiArIGJhc2UgKyB0aGlz
LmdldCgic3VmZml4Iik7Cit9OwogCi0gICAgICAgICAgICAgICAgaWYgKGZvbGQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVGb2xkKGZvbGQpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uYWRkRm9sZCgiLi4uIiwgcmFu
Z2UpOwotICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50
b1ZpZXcoe3JvdzogcmFuZ2Uuc3RhcnQucm93LCBjb2x1bW46IDB9KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlLnN0b3AoKTsKLSAgICAgICAgfQotICAg
IH0pOwotfQorZXhwb3J0cy5zZXRNb2R1bGVVcmwgPSBmdW5jdGlvbihuYW1lLCBzdWJzdCkgewor
ICAgIHJldHVybiBvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdID0gc3Vic3Q7Cit9OwogCi1leHBv
cnRzLkZvbGRIYW5kbGVyID0gRm9sZEhhbmRsZXI7CitleHBvcnRzLmxvYWRNb2R1bGUgPSBmdW5j
dGlvbihtb2R1bGVOYW1lLCBvbkxvYWQpIHsKKyAgICB2YXIgbW9kdWxlLCBtb2R1bGVUeXBlOwor
ICAgIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZU5hbWUpKSB7CisgICAgICAgIG1vZHVsZVR5cGUg
PSBtb2R1bGVOYW1lWzBdOworICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZVsxXTsKKyAg
ICB9CisgICAgdHJ5IHsKKyAgICAgICAgbW9kdWxlID0gcmVxdWlyZShtb2R1bGVOYW1lKTsKKyAg
ICB9IGNhdGNoIChlKSB7fTsKKyAgICBpZiAobW9kdWxlKQorICAgICAgICByZXR1cm4gb25Mb2Fk
KG1vZHVsZSk7CiAKLX0pOworICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmVxdWlyZShbbW9kdWxlTmFtZV0sIGZ1bmN0aW9uKG1vZHVsZSkgeworICAgICAgICAgICAg
ZXhwb3J0cy5fZW1pdCgibG9hZC5tb2R1bGUiLCB7bmFtZTogbW9kdWxlTmFtZSwgbW9kdWxlOiBt
b2R1bGV9KTsKKyAgICAgICAgICAgIG9uTG9hZChtb2R1bGUpOworICAgICAgICB9KTsKKyAgICB9
OwogCi1hY2UuZGVmaW5lKCdhY2Uva2V5Ym9hcmQva2V5YmluZGluZycsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9rZXlzJywgJ2FjZS9saWIvZXZlbnQnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CisgICAgaWYgKCFleHBvcnRzLmdldCgi
cGFja2FnZWQiKSkKKyAgICAgICAgcmV0dXJuIGFmdGVyTG9hZCgpOworICAgIG5ldC5sb2FkU2Ny
aXB0KGV4cG9ydHMubW9kdWxlVXJsKG1vZHVsZU5hbWUsIG1vZHVsZVR5cGUpLCBhZnRlckxvYWQp
OworfTsKK2V4cG9ydHMuaW5pdCA9IGZ1bmN0aW9uKCkgeworICAgIG9wdGlvbnMucGFja2FnZWQg
PSByZXF1aXJlLnBhY2thZ2VkIHx8IG1vZHVsZS5wYWNrYWdlZCB8fCAoZ2xvYmFsLmRlZmluZSAm
JiBkZWZpbmUucGFja2FnZWQpOwogCisgICAgaWYgKCFnbG9iYWwuZG9jdW1lbnQpCisgICAgICAg
IHJldHVybiAiIjsKIAotdmFyIGtleVV0aWwgID0gcmVxdWlyZSgiLi4vbGliL2tleXMiKTsKLXZh
ciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOworICAgIHZhciBzY3JpcHRPcHRpb25z
ID0ge307CisgICAgdmFyIHNjcmlwdFVybCA9ICIiOwogCi12YXIgS2V5QmluZGluZyA9IGZ1bmN0
aW9uKGVkaXRvcikgewotICAgIHRoaXMuJGVkaXRvciA9IGVkaXRvcjsKLSAgICB0aGlzLiRkYXRh
ID0geyB9OwotICAgIHRoaXMuJGhhbmRsZXJzID0gW107Ci0gICAgdGhpcy5zZXREZWZhdWx0SGFu
ZGxlcihlZGl0b3IuY29tbWFuZHMpOworICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInNjcmlwdCIpOworICAgIGZvciAodmFyIGk9MDsgaTxzY3JpcHRzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBzY3JpcHQgPSBzY3JpcHRzW2ldOworCisgICAgICAg
IHZhciBzcmMgPSBzY3JpcHQuc3JjIHx8IHNjcmlwdC5nZXRBdHRyaWJ1dGUoInNyYyIpOworICAg
ICAgICBpZiAoIXNyYykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBhdHRy
aWJ1dGVzID0gc2NyaXB0LmF0dHJpYnV0ZXM7CisgICAgICAgIGZvciAodmFyIGo9MCwgbD1hdHRy
aWJ1dGVzLmxlbmd0aDsgaiA8IGw7IGorKykgeworICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRy
aWJ1dGVzW2pdOworICAgICAgICAgICAgaWYgKGF0dHIubmFtZS5pbmRleE9mKCJkYXRhLWFjZS0i
KSA9PT0gMCkgeworICAgICAgICAgICAgICAgIHNjcmlwdE9wdGlvbnNbZGVIeXBoZW5hdGUoYXR0
ci5uYW1lLnJlcGxhY2UoL15kYXRhLWFjZS0vLCAiIikpXSA9IGF0dHIudmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgbSA9IHNyYy5tYXRjaCgvXiguKilcL2Fj
ZShcLVx3Kyk/XC5qcyhcP3wkKS8pOworICAgICAgICBpZiAobSkKKyAgICAgICAgICAgIHNjcmlw
dFVybCA9IG1bMV07CisgICAgfQorCisgICAgaWYgKHNjcmlwdFVybCkgeworICAgICAgICBzY3Jp
cHRPcHRpb25zLmJhc2UgPSBzY3JpcHRPcHRpb25zLmJhc2UgfHwgc2NyaXB0VXJsOworICAgICAg
ICBzY3JpcHRPcHRpb25zLnBhY2thZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzY3JpcHRPcHRp
b25zLmJhc2VQYXRoID0gc2NyaXB0T3B0aW9ucy5iYXNlOworICAgIHNjcmlwdE9wdGlvbnMud29y
a2VyUGF0aCA9IHNjcmlwdE9wdGlvbnMud29ya2VyUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7
CisgICAgc2NyaXB0T3B0aW9ucy5tb2RlUGF0aCA9IHNjcmlwdE9wdGlvbnMubW9kZVBhdGggfHwg
c2NyaXB0T3B0aW9ucy5iYXNlOworICAgIHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoID0gc2NyaXB0
T3B0aW9ucy50aGVtZVBhdGggfHwgc2NyaXB0T3B0aW9ucy5iYXNlOworICAgIGRlbGV0ZSBzY3Jp
cHRPcHRpb25zLmJhc2U7CisKKyAgICBmb3IgKHZhciBrZXkgaW4gc2NyaXB0T3B0aW9ucykKKyAg
ICAgICAgaWYgKHR5cGVvZiBzY3JpcHRPcHRpb25zW2tleV0gIT09ICJ1bmRlZmluZWQiKQorICAg
ICAgICAgICAgZXhwb3J0cy5zZXQoa2V5LCBzY3JpcHRPcHRpb25zW2tleV0pOwogfTsKIAotKGZ1
bmN0aW9uKCkgewotICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihrYikgewot
ICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxlcik7
Ci0gICAgICAgIHRoaXMuJGRlZmF1bHRIYW5kbGVyID0ga2I7Ci0gICAgICAgIHRoaXMuYWRkS2V5
Ym9hcmRIYW5kbGVyKGtiLCAwKTsKLSAgICAgICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IHRoaXMu
JGVkaXRvcn07Ci0gICAgfTsKK2Z1bmN0aW9uIGRlSHlwaGVuYXRlKHN0cikgeworICAgIHJldHVy
biBzdHIucmVwbGFjZSgvLSguKS9nLCBmdW5jdGlvbihtLCBtMSkgeyByZXR1cm4gbTEudG9VcHBl
ckNhc2UoKTsgfSk7Cit9CiAKLSAgICB0aGlzLnNldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9u
KGtiKSB7Ci0gICAgICAgIGlmICh0aGlzLiRoYW5kbGVyc1t0aGlzLiRoYW5kbGVycy5sZW5ndGgg
LSAxXSA9PSBrYikKK3ZhciBvcHRpb25zUHJvdmlkZXIgPSB7CisgICAgc2V0T3B0aW9uczogZnVu
Y3Rpb24ob3B0TGlzdCkgeworICAgICAgICBPYmplY3Qua2V5cyhvcHRMaXN0KS5mb3JFYWNoKGZ1
bmN0aW9uKGtleSkgeworICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24oa2V5LCBvcHRMaXN0W2tl
eV0pOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9LAorICAgIGdldE9wdGlvbnM6IGZ1bmN0aW9u
KGEpIHsKKyAgICAgICAgdmFyIGIgPSB7fTsKKyAgICAgICAgT2JqZWN0LmtleXMoYSkuZm9yRWFj
aChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAgIGJba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtl
eSk7CisgICAgICAgIH0sIHRoaXMpOworICAgICAgICByZXR1cm4gYjsKKyAgICB9LAorICAgIHNl
dE9wdGlvbjogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKKyAgICAgICAgaWYgKHRoaXNbIiQiICsg
bmFtZV0gPT09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgb3B0ID0g
dGhpcy4kb3B0aW9uc1tuYW1lXTsKKyAgICAgICAgaWYgKCFvcHQpCisgICAgICAgICAgICByZXR1
cm4gdW5kZWZpbmVkOworICAgICAgICBpZiAob3B0LmZvcndhcmRUbykKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzW29wdC5mb3J3YXJkVG9dICYmIHRoaXNbb3B0LmZvcndhcmRUb10uc2V0T3B0aW9u
KG5hbWUsIHZhbHVlKTsKIAotICAgICAgICB3aGlsZSAodGhpcy4kaGFuZGxlcnNbMV0pCi0gICAg
ICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRoYW5kbGVyc1sxXSk7Cisg
ICAgICAgIGlmICghb3B0LmhhbmRsZXNTZXQpCisgICAgICAgICAgICB0aGlzWyIkIiArIG5hbWVd
ID0gdmFsdWU7CisgICAgICAgIGlmIChvcHQgJiYgb3B0LnNldCkKKyAgICAgICAgICAgIG9wdC5z
ZXQuY2FsbCh0aGlzLCB2YWx1ZSk7CisgICAgfSwKKyAgICBnZXRPcHRpb246IGZ1bmN0aW9uKG5h
bWUpIHsKKyAgICAgICAgdmFyIG9wdCA9IHRoaXMuJG9wdGlvbnNbbmFtZV07CisgICAgICAgIGlm
ICghb3B0KQorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKG9wdC5m
b3J3YXJkVG8pCisgICAgICAgICAgICByZXR1cm4gdGhpc1tvcHQuZm9yd2FyZFRvXSAmJiB0aGlz
W29wdC5mb3J3YXJkVG9dLmdldE9wdGlvbihuYW1lKTsKKyAgICAgICAgcmV0dXJuIG9wdCAmJiBv
cHQuZ2V0ID8gb3B0LmdldC5jYWxsKHRoaXMpIDogdGhpc1siJCIgKyBuYW1lXTsKKyAgICB9Cit9
OwogCi0gICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAxKTsKLSAgICB9OwordmFy
IGRlZmF1bHRPcHRpb25zID0ge307CitleHBvcnRzLmRlZmluZU9wdGlvbnMgPSBmdW5jdGlvbihv
YmosIHBhdGgsIG9wdGlvbnMpIHsKKyAgICBpZiAoIW9iai4kb3B0aW9ucykKKyAgICAgICAgZGVm
YXVsdE9wdGlvbnNbcGF0aF0gPSBvYmouJG9wdGlvbnMgPSB7fTsKIAotICAgIHRoaXMuYWRkS2V5
Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IsIHBvcykgewotICAgICAgICBpZiAoIWtiKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4T2Yo
a2IpOwotICAgICAgICBpZiAoaSAhPSAtMSkKLSAgICAgICAgICAgIHRoaXMuJGhhbmRsZXJzLnNw
bGljZShpLCAxKTsKKyAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtl
eSkgeworICAgICAgICB2YXIgb3B0ID0gb3B0aW9uc1trZXldOworICAgICAgICBpZiAodHlwZW9m
IG9wdCA9PSAic3RyaW5nIikKKyAgICAgICAgICAgIG9wdCA9IHtmb3J3YXJkVG86IG9wdH07CiAK
LSAgICAgICAgaWYgKHBvcyA9PSB1bmRlZmluZWQpCi0gICAgICAgICAgICB0aGlzLiRoYW5kbGVy
cy5wdXNoKGtiKTsKKyAgICAgICAgb3B0Lm5hbWUgfHwgKG9wdC5uYW1lID0ga2V5KTsKKyAgICAg
ICAgb2JqLiRvcHRpb25zW29wdC5uYW1lXSA9IG9wdDsKKyAgICAgICAgaWYgKCJpbml0aWFsVmFs
dWUiIGluIG9wdCkKKyAgICAgICAgICAgIG9ialsiJCIgKyBvcHQubmFtZV0gPSBvcHQuaW5pdGlh
bFZhbHVlOworICAgIH0pOworICAgIG9vcC5pbXBsZW1lbnQob2JqLCBvcHRpb25zUHJvdmlkZXIp
OworCisgICAgcmV0dXJuIHRoaXM7Cit9OworCitleHBvcnRzLnJlc2V0T3B0aW9ucyA9IGZ1bmN0
aW9uKG9iaikgeworICAgIE9iamVjdC5rZXlzKG9iai4kb3B0aW9ucykuZm9yRWFjaChmdW5jdGlv
bihrZXkpIHsKKyAgICAgICAgdmFyIG9wdCA9IG9iai4kb3B0aW9uc1trZXldOworICAgICAgICBp
ZiAoInZhbHVlIiBpbiBvcHQpCisgICAgICAgICAgICBvYmouc2V0T3B0aW9uKGtleSwgb3B0LnZh
bHVlKTsKKyAgICB9KTsKK307CisKK2V4cG9ydHMuc2V0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24o
cGF0aCwgbmFtZSwgdmFsdWUpIHsKKyAgICB2YXIgb3B0cyA9IGRlZmF1bHRPcHRpb25zW3BhdGhd
IHx8IChkZWZhdWx0T3B0aW9uc1twYXRoXSA9IHt9KTsKKyAgICBpZiAob3B0c1tuYW1lXSkgewor
ICAgICAgICBpZiAob3B0cy5mb3J3YXJkVG8pCisgICAgICAgICAgICBleHBvcnRzLnNldERlZmF1
bHRWYWx1ZShvcHRzLmZvcndhcmRUbywgbmFtZSwgdmFsdWUpCiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHRoaXMuJGhhbmRsZXJzLnNwbGljZShwb3MsIDAsIGtiKTsKKyAgICAgICAgICAgIG9w
dHNbbmFtZV0udmFsdWUgPSB2YWx1ZTsKKyAgICB9Cit9OwogCi0gICAgICAgIGlmIChpID09IC0x
ICYmIGtiLmF0dGFjaCkKLSAgICAgICAgICAgIGtiLmF0dGFjaCh0aGlzLiRlZGl0b3IpOwotICAg
IH07CitleHBvcnRzLnNldERlZmF1bHRWYWx1ZXMgPSBmdW5jdGlvbihwYXRoLCBvcHRpb25IYXNo
KSB7CisgICAgT2JqZWN0LmtleXMob3B0aW9uSGFzaCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsK
KyAgICAgICAgZXhwb3J0cy5zZXREZWZhdWx0VmFsdWUocGF0aCwga2V5LCBvcHRpb25IYXNoW2tl
eV0pOworICAgIH0pOworfTsKIAotICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyID0gZnVu
Y3Rpb24oa2IpIHsKLSAgICAgICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVycy5pbmRleE9mKGtiKTsK
LSAgICAgICAgaWYgKGkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHRoaXMuJGhhbmRsZXJzLnNwbGljZShpLCAxKTsKLSAgICAgICAga2IuZGV0YWNoICYmIGtiLmRl
dGFjaCh0aGlzLiRlZGl0b3IpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9OworfSk7Cith
Y2UuZGVmaW5lKCdhY2UvbGliL25ldCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9kb20nXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAK
LSAgICB0aGlzLmdldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1
cm4gdGhpcy4kaGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3RoIC0gMV07Cit2YXIgZG9tID0g
cmVxdWlyZSgiLi9kb20iKTsKKworZXhwb3J0cy5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFj
aykgeworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3Blbign
R0VUJywgdXJsLCB0cnVlKTsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24g
KCkgeworICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHsKKyAgICAgICAgICAgIGNh
bGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICB9CiAgICAgfTsKKyAgICB4aHIuc2Vu
ZChudWxsKTsKK307CiAKLSAgICB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycyA9IGZ1bmN0aW9u
IChoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSwgZSkgewotICAgICAgICB2YXIgdG9FeGVjdXRl
OwotICAgICAgICB2YXIgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICB2YXIgY29tbWFuZHMgPSB0
aGlzLiRlZGl0b3IuY29tbWFuZHM7CitleHBvcnRzLmxvYWRTY3JpcHQgPSBmdW5jdGlvbihwYXRo
LCBjYWxsYmFjaykgeworICAgIHZhciBoZWFkID0gZG9tLmdldERvY3VtZW50SGVhZCgpOworICAg
IHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAKLSAgICAgICAgZm9y
ICh2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmxlbmd0aDsgaS0tOykgewotICAgICAgICAgICAgdG9F
eGVjdXRlID0gdGhpcy4kaGFuZGxlcnNbaV0uaGFuZGxlS2V5Ym9hcmQoCi0gICAgICAgICAgICAg
ICAgdGhpcy4kZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUKLSAgICAgICAgICAg
ICk7Ci0gICAgICAgICAgICBpZiAoIXRvRXhlY3V0ZSB8fCAhdG9FeGVjdXRlLmNvbW1hbmQpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAodG9FeGVjdXRlLmNvbW1h
bmQgPT0gIm51bGwiKSB7Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRvRXhlY3V0ZS5wYXNz
RXZlbnQgIT0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IGNvbW1hbmRzLmV4ZWModG9FeGVjdXRlLmNvbW1hbmQsIHRoaXMuJGVkaXRvciwgdG9F
eGVjdXRlLmFyZ3MsIGUpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChzdWNjZXNzICYmIGUgJiYgaGFzaElkICE9IC0xKQotICAgICAgICAgICAgICAgIGV2
ZW50LnN0b3BFdmVudChlKTsKLSAgICAgICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgIHMuc3JjID0gcGF0aDsKKyAgICBoZWFkLmFwcGVuZENoaWxkKHMpOwor
CisgICAgcy5vbmxvYWQgPSBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKF8sIGlzQWJv
cnQpIHsKKyAgICAgICAgaWYgKGlzQWJvcnQgfHwgIXMucmVhZHlTdGF0ZSB8fCBzLnJlYWR5U3Rh
dGUgPT0gImxvYWRlZCIgfHwgcy5yZWFkeVN0YXRlID09ICJjb21wbGV0ZSIpIHsKKyAgICAgICAg
ICAgIHMgPSBzLm9ubG9hZCA9IHMub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKKyAgICAgICAg
ICAgIGlmICghaXNBYm9ydCkKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgIH07Cit9OwogCi0gICAgdGhpcy5vbkNvbW1h
bmRLZXkgPSBmdW5jdGlvbihlLCBoYXNoSWQsIGtleUNvZGUpIHsKLSAgICAgICAgdmFyIGtleVN0
cmluZyA9IGtleVV0aWwua2V5Q29kZVRvU3RyaW5nKGtleUNvZGUpOwotICAgICAgICB0aGlzLiRj
YWxsS2V5Ym9hcmRIYW5kbGVycyhoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSwgZSk7Ci0gICAg
fTsKK30pOwogCi0gICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQpIHsKLSAgICAg
ICAgdmFyIHN1Y2Nlc3MgPSB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycygtMSwgdGV4dCk7Ci0g
ICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIHRoaXMuJGVkaXRvci5jb21tYW5kcy5l
eGVjKCJpbnNlcnRzdHJpbmciLCB0aGlzLiRlZGl0b3IsIHRleHQpOwotICAgIH07CithY2UuZGVm
aW5lKCdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogCi19KS5jYWxsKEtl
eUJpbmRpbmcucHJvdG90eXBlKTsKIAotZXhwb3J0cy5LZXlCaW5kaW5nID0gS2V5QmluZGluZzsK
LX0pOwordmFyIEV2ZW50RW1pdHRlciA9IHt9OwordmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0
aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07Cit2YXIgcHJldmVudERl
ZmF1bHQgPSBmdW5jdGlvbigpIHsgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfTsKIAot
YWNlLmRlZmluZSgnYWNlL2VkaXRfc2Vzc2lvbicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21v
ZHVsZScgLCAnYWNlL2NvbmZpZycsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNl
L2xpYi9uZXQnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJywgJ2FjZS9zZWxlY3Rpb24nLCAnYWNl
L21vZGUvdGV4dCcsICdhY2UvcmFuZ2UnLCAnYWNlL2RvY3VtZW50JywgJ2FjZS9iYWNrZ3JvdW5k
X3Rva2VuaXplcicsICdhY2Uvc2VhcmNoX2hpZ2hsaWdodCcsICdhY2UvZWRpdF9zZXNzaW9uL2Zv
bGRpbmcnLCAnYWNlL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworRXZlbnRFbWl0dGVyLl9lbWl0ID0KK0V2ZW50RW1pdHRl
ci5fZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZSkgeworICAgIHRoaXMuX2V2
ZW50UmVnaXN0cnkgfHwgKHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB7fSk7CisgICAgdGhpcy5fZGVm
YXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CiAKKyAgICB2YXIg
bGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdIHx8IFtdOworICAgIHZh
ciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOworICAg
IGlmICghbGlzdGVuZXJzLmxlbmd0aCAmJiAhZGVmYXVsdEhhbmRsZXIpCisgICAgICAgIHJldHVy
bjsKIAotdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Ci12YXIgb29wID0gcmVxdWly
ZSgiLi9saWIvb29wIik7Ci12YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKLXZhciBu
ZXQgPSByZXF1aXJlKCIuL2xpYi9uZXQiKTsKLXZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIu
L2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwotdmFyIFNlbGVjdGlvbiA9IHJlcXVp
cmUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uOwotdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi9t
b2RlL3RleHQiKS5Nb2RlOwotdmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwot
dmFyIERvY3VtZW50ID0gcmVxdWlyZSgiLi9kb2N1bWVudCIpLkRvY3VtZW50OwotdmFyIEJhY2tn
cm91bmRUb2tlbml6ZXIgPSByZXF1aXJlKCIuL2JhY2tncm91bmRfdG9rZW5pemVyIikuQmFja2dy
b3VuZFRva2VuaXplcjsKLXZhciBTZWFyY2hIaWdobGlnaHQgPSByZXF1aXJlKCIuL3NlYXJjaF9o
aWdobGlnaHQiKS5TZWFyY2hIaWdobGlnaHQ7CisgICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3Qi
IHx8ICFlKQorICAgICAgICBlID0ge307CiAKLXZhciBFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRl
eHQsIG1vZGUpIHsKLSAgICB0aGlzLiRicmVha3BvaW50cyA9IFtdOwotICAgIHRoaXMuJGRlY29y
YXRpb25zID0gW107Ci0gICAgdGhpcy4kZnJvbnRNYXJrZXJzID0ge307Ci0gICAgdGhpcy4kYmFj
a01hcmtlcnMgPSB7fTsKLSAgICB0aGlzLiRtYXJrZXJJZCA9IDE7Ci0gICAgdGhpcy4kdW5kb1Nl
bGVjdCA9IHRydWU7Ci0gICAgCi0gICAgdGhpcy4kZm9sZERhdGEgPSBbXTsKLSAgICB0aGlzLiRm
b2xkRGF0YS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgc3RyID0gIiI7Ci0g
ICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbihmb2xkTGluZSkgewotICAgICAgICAgICAgc3Ry
ICs9ICJcbiIgKyBmb2xkTGluZS50b1N0cmluZygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0
dXJuIHN0cjsKKyAgICBpZiAoIWUudHlwZSkKKyAgICAgICAgZS50eXBlID0gZXZlbnROYW1lOwor
ICAgIGlmICghZS5zdG9wUHJvcGFnYXRpb24pCisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0g
c3RvcFByb3BhZ2F0aW9uOworICAgIGlmICghZS5wcmV2ZW50RGVmYXVsdCkKKyAgICAgICAgZS5w
cmV2ZW50RGVmYXVsdCA9IHByZXZlbnREZWZhdWx0OworICAgIGlmICghZS50YXJnZXQpCisgICAg
ICAgIGUudGFyZ2V0ID0gdGhpczsKKworICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgbGlzdGVuZXJzW2ldKGUpOworICAgICAgICBpZiAoZS5wcm9w
YWdhdGlvblN0b3BwZWQpCisgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgdGhpcy5vbigi
Y2hhbmdlRm9sZCIsIHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcykpOwotICAgIHRoaXMuJG9u
Q2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgIAotICAgIGlmICh0eXBlb2Yg
dGV4dCAhPSAib2JqZWN0IiB8fCAhdGV4dC5nZXRMaW5lKQotICAgICAgICB0ZXh0ID0gbmV3IERv
Y3VtZW50KHRleHQpOwotCi0gICAgdGhpcy5zZXREb2N1bWVudCh0ZXh0KTsKLQotICAgIHRoaXMu
c2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbih0aGlzKTsKLSAgICB0aGlzLnNldE1vZGUobW9kZSk7
CisgICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCisgICAgICAg
IHJldHVybiBkZWZhdWx0SGFuZGxlcihlKTsKIH07CiAKIAotKGZ1bmN0aW9uKCkgeworRXZlbnRF
bWl0dGVyLl9zaWduYWwgPSBmdW5jdGlvbihldmVudE5hbWUsIGUpIHsKKyAgICB2YXIgbGlzdGVu
ZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CisgICAgaWYgKCFs
aXN0ZW5lcnMpCisgICAgICAgIHJldHVybjsKIAotICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZl
bnRFbWl0dGVyKTsKLSAgICB0aGlzLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmRvYykKLSAgICAgICAgICAgIHRoaXMuZG9jLnJlbW92ZUxpc3RlbmVyKCJj
aGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CisgICAgZm9yICh2YXIgaT0wOyBpPGxpc3RlbmVycy5s
ZW5ndGg7IGkrKykKKyAgICAgICAgbGlzdGVuZXJzW2ldKGUpOworfTsKIAotICAgICAgICB0aGlz
LmRvYyA9IGRvYzsKLSAgICAgICAgZG9jLm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CitF
dmVudEVtaXR0ZXIub25jZSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKKyAgICB2
YXIgX3NlbGYgPSB0aGlzOworICAgIHZhciBuZXdDYWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBmdW4gJiYgZnVuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAgIF9zZWxmLnJl
bW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG5ld0NhbGxiYWNrKTsKKyAgICB9OworICAgIHRoaXMu
YWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbmV3Q2FsbGJhY2spOworfTsKIAotICAgICAgICBpZiAo
dGhpcy5iZ1Rva2VuaXplcikKLSAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1l
bnQodGhpcy5nZXREb2N1bWVudCgpKTsKIAotICAgICAgICB0aGlzLnJlc2V0Q2FjaGVzKCk7Ci0g
ICAgfTsKLSAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLmRvYzsKLSAgICB9OwotICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUgPSBmdW5jdGlvbihk
b2NSb3cpIHsKLSAgICAgICAgaWYgKCFkb2NSb3cpIHsKLSAgICAgICAgICAgIHRoaXMuJGRvY1Jv
d0NhY2hlID0gW107Ci0gICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZSA9IFtdOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CitFdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRs
ZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZGVmYXVsdEhh
bmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8IHt9OworICAgIAorICAgIGlmICh0aGlz
Ll9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJU
aGUgZGVmYXVsdCBoYW5kbGVyIGZvciAnIiArIGV2ZW50TmFtZSArICInIGlzIGFscmVhZHkgc2V0
Iik7CisgICAgICAgIAorICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gY2Fs
bGJhY2s7Cit9OwogCi0gICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCh0aGlz
LiRkb2NSb3dDYWNoZSwgZG9jUm93KSArIDE7Ci0gICAgICAgIHZhciBsID0gdGhpcy4kZG9jUm93
Q2FjaGUubGVuZ3RoOwotICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5zcGxpY2UoaSwgbCk7Ci0g
ICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlLnNwbGljZShpLCBsKTsKK0V2ZW50RW1pdHRlci5v
biA9CitFdmVudEVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwg
Y2FsbGJhY2ssIGNhcHR1cmluZykgeworICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9l
dmVudFJlZ2lzdHJ5IHx8IHt9OwogCi0gICAgfTsKKyAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5f
ZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOworICAgIGlmICghbGlzdGVuZXJzKQorICAgICAgICBs
aXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKIAotICAgIHRo
aXMuJGdldFJvd0NhY2hlSW5kZXggPSBmdW5jdGlvbihjYWNoZUFycmF5LCB2YWwpIHsKLSAgICAg
ICAgdmFyIGxvdyA9IDA7Ci0gICAgICAgIHZhciBoaSA9IGNhY2hlQXJyYXkubGVuZ3RoIC0gMTsK
KyAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQorICAgICAgICBsaXN0
ZW5lcnNbY2FwdHVyaW5nID8gInVuc2hpZnQiIDogInB1c2giXShjYWxsYmFjayk7CisgICAgcmV0
dXJuIGNhbGxiYWNrOworfTsKIAotICAgICAgICB3aGlsZSAobG93IDw9IGhpKSB7Ci0gICAgICAg
ICAgICB2YXIgbWlkID0gKGxvdyArIGhpKSA+PiAxOwotICAgICAgICAgICAgdmFyIGMgPSBjYWNo
ZUFycmF5W21pZF07CitFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQorRXZlbnRFbWl0dGVy
LnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7Cisg
ICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307CiAKLSAg
ICAgICAgICAgIGlmICh2YWwgPiBjKQotICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7Ci0g
ICAgICAgICAgICBlbHNlIGlmICh2YWwgPCBjKQotICAgICAgICAgICAgICAgIGhpID0gbWlkIC0g
MTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gbWlkOwotICAgICAg
ICB9CisgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTsK
KyAgICBpZiAoIWxpc3RlbmVycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHJldHVybiBs
b3cgLTE7Ci0gICAgfTsKKyAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFj
ayk7CisgICAgaWYgKGluZGV4ICE9PSAtMSkKKyAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRl
eCwgMSk7Cit9OwogCi0gICAgdGhpcy5yZXNldENhY2hlcyA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB0aGlzLiRtb2RpZmllZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuJHdyYXBEYXRhID0gW107Ci0g
ICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlID0gW107Ci0gICAgICAgIHRoaXMuJHJlc2V0Um93
Q2FjaGUoMCk7Ci0gICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKQotICAgICAgICAgICAgdGhp
cy5iZ1Rva2VuaXplci5zdGFydCgwKTsKLSAgICB9OworRXZlbnRFbWl0dGVyLnJlbW92ZUFsbExp
c3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkgeworICAgIGlmICh0aGlzLl9ldmVudFJlZ2lz
dHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKK307CiAKLSAgICB0aGlz
Lm9uQ2hhbmdlRm9sZCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIGZvbGQgPSBlLmRhdGE7
Ci0gICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoZm9sZC5zdGFydC5yb3cpOwotICAgIH07Citl
eHBvcnRzLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjsKIAotICAgIHRoaXMub25DaGFuZ2Ug
PSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHZhciBkZWx0YSA9IGUuZGF0YTsKLSAgICAgICAgdGhp
cy4kbW9kaWZpZWQgPSB0cnVlOworfSk7CiAKLSAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZShk
ZWx0YS5yYW5nZS5zdGFydC5yb3cpOworYWNlLmRlZmluZSgnYWNlL21vdXNlL2ZvbGRfaGFuZGxl
cicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwg
ZXhwb3J0cywgbW9kdWxlKSB7CiAKLSAgICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9IHRoaXMuJHVw
ZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdlKGUpOwotICAgICAgICBpZiAoIXRoaXMuJGZyb21VbmRv
ICYmIHRoaXMuJHVuZG9NYW5hZ2VyICYmICFkZWx0YS5pZ25vcmUpIHsKLSAgICAgICAgICAgIHRo
aXMuJGRlbHRhc0RvYy5wdXNoKGRlbHRhKTsKLSAgICAgICAgICAgIGlmIChyZW1vdmVkRm9sZHMg
JiYgcmVtb3ZlZEZvbGRzLmxlbmd0aCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy4kZGVs
dGFzRm9sZC5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlRm9sZHMi
LAotICAgICAgICAgICAgICAgICAgICBmb2xkczogIHJlbW92ZWRGb2xkcwotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFu
YWdlci5zY2hlZHVsZSgpOworZnVuY3Rpb24gRm9sZEhhbmRsZXIoZWRpdG9yKSB7CisKKyAgICBl
ZGl0b3Iub24oImNsaWNrIiwgZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgcG9zaXRpb24gPSBl
LmdldERvY3VtZW50UG9zaXRpb24oKTsKKyAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vz
c2lvbjsKKyAgICAgICAgdmFyIGZvbGQgPSBzZXNzaW9uLmdldEZvbGRBdChwb3NpdGlvbi5yb3cs
IHBvc2l0aW9uLmNvbHVtbiwgMSk7CisgICAgICAgIGlmIChmb2xkKSB7CisgICAgICAgICAgICBp
ZiAoZS5nZXRBY2NlbEtleSgpKQorICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlRm9sZChm
b2xkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmV4cGFuZEZv
bGQoZm9sZCk7CisKKyAgICAgICAgICAgIGUuc3RvcCgpOwogICAgICAgICB9CisgICAgfSk7CiAK
LSAgICAgICAgdGhpcy5iZ1Rva2VuaXplci4kdXBkYXRlT25DaGFuZ2UoZGVsdGEpOwotICAgICAg
ICB0aGlzLl9lbWl0KCJjaGFuZ2UiLCBlKTsKLSAgICB9OwotICAgIHRoaXMuc2V0VmFsdWUgPSBm
dW5jdGlvbih0ZXh0KSB7Ci0gICAgICAgIHRoaXMuZG9jLnNldFZhbHVlKHRleHQpOwotICAgICAg
ICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oMCwgMCk7Ci0gICAgICAgIHRoaXMuc2VsZWN0
aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgZWRpdG9yLm9uKCJndXR0ZXJtb3VzZWRvd24iLCBm
dW5jdGlvbihlKSB7CisgICAgICAgIGlmICghZWRpdG9yLmlzRm9jdXNlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB2YXIgZ3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRn
dXR0ZXJMYXllci5nZXRSZWdpb24oZSk7CiAKLSAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgw
KTsKLSAgICAgICAgdGhpcy4kZGVsdGFzID0gW107Ci0gICAgICAgIHRoaXMuJGRlbHRhc0RvYyA9
IFtdOwotICAgICAgICB0aGlzLiRkZWx0YXNGb2xkID0gW107Ci0gICAgICAgIHRoaXMuZ2V0VW5k
b01hbmFnZXIoKS5yZXNldCgpOwotICAgIH07Ci0gICAgdGhpcy5nZXRWYWx1ZSA9Ci0gICAgdGhp
cy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0VmFs
dWUoKTsKLSAgICB9OwotICAgIHRoaXMuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbjsKLSAgICB9OwotICAgIHRoaXMuZ2V0U3RhdGUgPSBm
dW5jdGlvbihyb3cpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0U3RhdGUo
cm93KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0VG9rZW5zID0gZnVuY3Rpb24ocm93KSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLmJnVG9rZW5pemVyLmdldFRva2Vucyhyb3cpOwotICAgIH07Ci0gICAg
dGhpcy5nZXRUb2tlbkF0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAgdmFyIHRv
a2VucyA9IHRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7Ci0gICAgICAgIHZhciB0b2tl
biwgYyA9IDA7Ci0gICAgICAgIGlmIChjb2x1bW4gPT0gbnVsbCkgewotICAgICAgICAgICAgaSA9
IHRva2Vucy5sZW5ndGggLSAxOwotICAgICAgICAgICAgYyA9IHRoaXMuZ2V0TGluZShyb3cpLmxl
bmd0aDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dG9rZW5zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYyArPSB0b2tlbnNbaV0udmFs
dWUubGVuZ3RoOwotICAgICAgICAgICAgICAgIGlmIChjID49IGNvbHVtbikKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChndXR0ZXJSZWdpb24g
PT0gImZvbGRXaWRnZXRzIikgeworICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9jdW1lbnRQ
b3NpdGlvbigpLnJvdzsKKyAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247
CisgICAgICAgICAgICBpZiAoc2Vzc2lvbi5mb2xkV2lkZ2V0cyAmJiBzZXNzaW9uLmZvbGRXaWRn
ZXRzW3Jvd10pCisgICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ub25Gb2xkV2lkZ2V0Q2xp
Y2socm93LCBlKTsKKyAgICAgICAgICAgIGUuc3RvcCgpOwogICAgICAgICB9Ci0gICAgICAgIHRv
a2VuID0gdG9rZW5zW2ldOwotICAgICAgICBpZiAoIXRva2VuKQotICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgICAgIHRva2VuLmluZGV4ID0gaTsKLSAgICAgICAgdG9rZW4uc3RhcnQgPSBj
IC0gdG9rZW4udmFsdWUubGVuZ3RoOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfTsKLSAg
ICB0aGlzLnNldFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24odW5kb01hbmFnZXIpIHsKLSAgICAgICAg
dGhpcy4kdW5kb01hbmFnZXIgPSB1bmRvTWFuYWdlcjsKLSAgICAgICAgdGhpcy4kZGVsdGFzID0g
W107Ci0gICAgICAgIHRoaXMuJGRlbHRhc0RvYyA9IFtdOwotICAgICAgICB0aGlzLiRkZWx0YXNG
b2xkID0gW107CisgICAgfSk7CiAKLSAgICAgICAgaWYgKHRoaXMuJGluZm9ybVVuZG9NYW5hZ2Vy
KQotICAgICAgICAgICAgdGhpcy4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7CisgICAgZWRp
dG9yLm9uKCJndXR0ZXJkYmxjbGljayIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGd1dHRl
clJlZ2lvbiA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKGUpOwogCi0g
ICAgICAgIGlmICh1bmRvTWFuYWdlcikgewotICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwor
ICAgICAgICBpZiAoZ3V0dGVyUmVnaW9uID09ICJmb2xkV2lkZ2V0cyIpIHsKKyAgICAgICAgICAg
IHZhciByb3cgPSBlLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7CisgICAgICAgICAgICB2YXIg
c2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOworICAgICAgICAgICAgdmFyIGZ3ID0gc2Vzc2lvbi5m
b2xkV2lkZ2V0czsKKyAgICAgICAgICAgIGlmICghZncgfHwgZndbcm93XSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlciA9
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHNlbGYuJGluZm9ybVVuZG9NYW5hZ2VyLmNh
bmNlbCgpOworICAgICAgICAgICAgdmFyIGkgPSByb3cgLSAxLCBmaXJzdFJhbmdlOworICAgICAg
ICAgICAgd2hpbGUgKGkgPj0gMCkgeworICAgICAgICAgICAgICAgIHZhciBjID0gZndbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKGMgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgYyA9IGZ3
W2ldID0gc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0KGkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNl
bGYuJGRlbHRhc0ZvbGQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRh
cy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAiZm9sZCIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWx0YXM6IHNlbGYuJGRlbHRhc0ZvbGQKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhc0ZvbGQgPSBbXTsKKyAg
ICAgICAgICAgICAgICBpZiAoYyA9PSAic3RhcnQiKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciByYW5nZSA9IHNlc3Npb24uZ2V0Rm9sZFdpZGdldFJhbmdlKGkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWZpcnN0UmFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJhbmdl
ID0gcmFuZ2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5lbmQucm93
ID49IHJvdykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aSA9PSAtMSkKKyAgICAgICAgICAgICAgICByYW5nZSA9IGZpcnN0UmFuZ2U7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoc2VsZi4kZGVsdGFzRG9jLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAg
ICBzZWxmLiRkZWx0YXMucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncm91cDogImRv
YyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXM6IHNlbGYuJGRlbHRhc0RvYwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzRG9j
ID0gW107Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJhbmdlKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICB2
YXIgZm9sZCA9IHNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVu
Z3RoLCAxKTsKIAotICAgICAgICAgICAgICAgIGlmIChzZWxmLiRkZWx0YXMubGVuZ3RoID4gMCkg
ewotICAgICAgICAgICAgICAgICAgICB1bmRvTWFuYWdlci5leGVjdXRlKHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdGlvbjogImFjZXVwZGF0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzOiBbc2VsZi4kZGVsdGFzLCBzZWxmXQotICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICBpZiAoZm9sZCkgeworICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLnJl
bW92ZUZvbGQoZm9sZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2Vzc2lvbi5hZGRGb2xkKCIuLi4iLCByYW5nZSk7CisgICAgICAgICAgICAgICAgICAg
IGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyh7cm93OiByYW5nZS5zdGFydC5y
b3csIGNvbHVtbjogMH0pOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNl
bGYuJGRlbHRhcyA9IFtdOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy4kaW5mb3Jt
VW5kb01hbmFnZXIgPQotICAgICAgICAgICAgICAgIGxhbmcuZGVmZXJyZWRDYWxsKHRoaXMuJHN5
bmNJbmZvcm1VbmRvTWFuYWdlcik7CisgICAgICAgICAgICBlLnN0b3AoKTsKICAgICAgICAgfQot
ICAgIH07CisgICAgfSk7Cit9CiAKLSAgICB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXIgPSB7Ci0g
ICAgICAgIHVuZG86IGZ1bmN0aW9uKCkge30sCi0gICAgICAgIHJlZG86IGZ1bmN0aW9uKCkge30s
Ci0gICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHt9Ci0gICAgfTsKLSAgICB0aGlzLmdldFVuZG9N
YW5hZ2VyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR1bmRvTWFuYWdlciB8
fCB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXI7Ci0gICAgfTsKLSAgICB0aGlzLmdldFRhYlN0cmlu
ZyA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5nZXRVc2VTb2Z0VGFicygpKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCB0aGlzLmdldFRhYlNpemUo
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gIlx0IjsKLSAgICAgICAg
fQotICAgIH07CitleHBvcnRzLkZvbGRIYW5kbGVyID0gRm9sZEhhbmRsZXI7CiAKLSAgICB0aGlz
LiR1c2VTb2Z0VGFicyA9IHRydWU7Ci0gICAgdGhpcy5zZXRVc2VTb2Z0VGFicyA9IGZ1bmN0aW9u
KHVzZVNvZnRUYWJzKSB7Ci0gICAgICAgIGlmICh0aGlzLiR1c2VTb2Z0VGFicyA9PT0gdXNlU29m
dFRhYnMpIHJldHVybjsKK30pOwogCi0gICAgICAgIHRoaXMuJHVzZVNvZnRUYWJzID0gdXNlU29m
dFRhYnM7Ci0gICAgfTsKLSAgICB0aGlzLmdldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLiR1c2VTb2Z0VGFiczsKLSAgICB9OworYWNlLmRlZmluZSgnYWNl
L2tleWJvYXJkL2tleWJpbmRpbmcnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwg
J2FjZS9saWIva2V5cycsICdhY2UvbGliL2V2ZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgewogCi0gICAgdGhpcy4kdGFiU2l6ZSA9IDQ7Ci0gICAgdGhpcy5zZXRUYWJT
aXplID0gZnVuY3Rpb24odGFiU2l6ZSkgewotICAgICAgICBpZiAoaXNOYU4odGFiU2l6ZSkgfHwg
dGhpcy4kdGFiU2l6ZSA9PT0gdGFiU2l6ZSkgcmV0dXJuOwogCi0gICAgICAgIHRoaXMuJG1vZGlm
aWVkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGUgPSBbXTsKLSAgICAgICAg
dGhpcy4kdGFiU2l6ZSA9IHRhYlNpemU7Ci0gICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVRhYlNp
emUiKTsKLSAgICB9OwotICAgIHRoaXMuZ2V0VGFiU2l6ZSA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICByZXR1cm4gdGhpcy4kdGFiU2l6ZTsKLSAgICB9OwotICAgIHRoaXMuaXNUYWJTdG9wID0gZnVu
Y3Rpb24ocG9zaXRpb24pIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJHVzZVNvZnRUYWJzICYmIChw
b3NpdGlvbi5jb2x1bW4gJSB0aGlzLiR0YWJTaXplID09IDApOwordmFyIGtleVV0aWwgID0gcmVx
dWlyZSgiLi4vbGliL2tleXMiKTsKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIp
OworCit2YXIgS2V5QmluZGluZyA9IGZ1bmN0aW9uKGVkaXRvcikgeworICAgIHRoaXMuJGVkaXRv
ciA9IGVkaXRvcjsKKyAgICB0aGlzLiRkYXRhID0geyB9OworICAgIHRoaXMuJGhhbmRsZXJzID0g
W107CisgICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlcihlZGl0b3IuY29tbWFuZHMpOworfTsKKwor
KGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihrYikg
eworICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxl
cik7CisgICAgICAgIHRoaXMuJGRlZmF1bHRIYW5kbGVyID0ga2I7CisgICAgICAgIHRoaXMuYWRk
S2V5Ym9hcmRIYW5kbGVyKGtiLCAwKTsKKyAgICAgICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IHRo
aXMuJGVkaXRvcn07CiAgICAgfTsKIAotICAgIHRoaXMuJG92ZXJ3cml0ZSA9IGZhbHNlOwotICAg
IHRoaXMuc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3ZlcndyaXRlKSB7Ci0gICAgICAgIGlmICh0
aGlzLiRvdmVyd3JpdGUgPT0gb3ZlcndyaXRlKSByZXR1cm47CisgICAgdGhpcy5zZXRLZXlib2Fy
ZEhhbmRsZXIgPSBmdW5jdGlvbihrYikgeworICAgICAgICBpZiAodGhpcy4kaGFuZGxlcnNbdGhp
cy4kaGFuZGxlcnMubGVuZ3RoIC0gMV0gPT0ga2IpCisgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgdGhpcy4kb3ZlcndyaXRlID0gb3ZlcndyaXRlOwotICAgICAgICB0aGlzLl9lbWl0KCJj
aGFuZ2VPdmVyd3JpdGUiKTsKKyAgICAgICAgd2hpbGUgKHRoaXMuJGhhbmRsZXJzWzFdKQorICAg
ICAgICAgICAgdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy4kaGFuZGxlcnNbMV0pOwor
CisgICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAxKTsKICAgICB9OwotICAgIHRo
aXMuZ2V0T3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRvdmVy
d3JpdGU7CisKKyAgICB0aGlzLmFkZEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtiLCBwb3Mp
IHsKKyAgICAgICAgaWYgKCFrYikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGkg
PSB0aGlzLiRoYW5kbGVycy5pbmRleE9mKGtiKTsKKyAgICAgICAgaWYgKGkgIT0gLTEpCisgICAg
ICAgICAgICB0aGlzLiRoYW5kbGVycy5zcGxpY2UoaSwgMSk7CisKKyAgICAgICAgaWYgKHBvcyA9
PSB1bmRlZmluZWQpCisgICAgICAgICAgICB0aGlzLiRoYW5kbGVycy5wdXNoKGtiKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKHBvcywgMCwga2IpOwor
CisgICAgICAgIGlmIChpID09IC0xICYmIGtiLmF0dGFjaCkKKyAgICAgICAgICAgIGtiLmF0dGFj
aCh0aGlzLiRlZGl0b3IpOwogICAgIH07Ci0gICAgdGhpcy50b2dnbGVPdmVyd3JpdGUgPSBmdW5j
dGlvbigpIHsKLSAgICAgICAgdGhpcy5zZXRPdmVyd3JpdGUoIXRoaXMuJG92ZXJ3cml0ZSk7Ci0g
ICAgfTsKLSAgICB0aGlzLmFkZEd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNz
TmFtZSkgewotICAgICAgICBpZiAoIXRoaXMuJGRlY29yYXRpb25zW3Jvd10pCi0gICAgICAgICAg
ICB0aGlzLiRkZWNvcmF0aW9uc1tyb3ddID0gIiI7Ci0gICAgICAgIHRoaXMuJGRlY29yYXRpb25z
W3Jvd10gKz0gIiAiICsgY2xhc3NOYW1lOwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVh
a3BvaW50Iiwge30pOwotICAgIH07Ci0gICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0g
ZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHsKLSAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93
XSA9ICh0aGlzLiRkZWNvcmF0aW9uc1tyb3ddIHx8ICIiKS5yZXBsYWNlKCIgIiArIGNsYXNzTmFt
ZSwgIiIpOwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOworCisg
ICAgdGhpcy5yZW1vdmVLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYikgeworICAgICAgICB2
YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4T2Yoa2IpOworICAgICAgICBpZiAoaSA9PSAtMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNl
KGksIDEpOworICAgICAgICBrYi5kZXRhY2ggJiYga2IuZGV0YWNoKHRoaXMuJGVkaXRvcik7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH07Ci0gICAgdGhpcy5nZXRCcmVha3BvaW50cyA9IGZ1
bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kYnJlYWtwb2ludHM7CisKKyAgICB0aGlz
LmdldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
aGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3RoIC0gMV07CiAgICAgfTsKLSAgICB0aGlzLnNl
dEJyZWFrcG9pbnRzID0gZnVuY3Rpb24ocm93cykgewotICAgICAgICB0aGlzLiRicmVha3BvaW50
cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpPTA7IGk8cm93cy5sZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgdGhpcy4kYnJlYWtwb2ludHNbcm93c1tpXV0gPSAiYWNlX2JyZWFrcG9pbnQiOwor
CisgICAgdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMgPSBmdW5jdGlvbiAoaGFzaElkLCBrZXlT
dHJpbmcsIGtleUNvZGUsIGUpIHsKKyAgICAgICAgdmFyIHRvRXhlY3V0ZTsKKyAgICAgICAgdmFy
IHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgdmFyIGNvbW1hbmRzID0gdGhpcy4kZWRpdG9yLmNv
bW1hbmRzOworCisgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLiRoYW5kbGVycy5sZW5ndGg7IGkt
LTspIHsKKyAgICAgICAgICAgIHRvRXhlY3V0ZSA9IHRoaXMuJGhhbmRsZXJzW2ldLmhhbmRsZUtl
eWJvYXJkKAorICAgICAgICAgICAgICAgIHRoaXMuJGRhdGEsIGhhc2hJZCwga2V5U3RyaW5nLCBr
ZXlDb2RlLCBlCisgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKCF0b0V4ZWN1dGUgfHwg
IXRvRXhlY3V0ZS5jb21tYW5kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKHRvRXhlY3V0ZS5jb21tYW5kID09ICJudWxsIikgeworICAgICAgICAgICAgICAgIHN1
Y2Nlc3MgPSB0b0V4ZWN1dGUucGFzc0V2ZW50ICE9IHRydWU7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBjb21tYW5kcy5leGVjKHRvRXhlY3V0ZS5jb21t
YW5kLCB0aGlzLiRlZGl0b3IsIHRvRXhlY3V0ZS5hcmdzLCBlKTsgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBlICYmIGhhc2hJZCAhPSAt
MSkKKyAgICAgICAgICAgICAgICBldmVudC5zdG9wRXZlbnQoZSk7CisgICAgICAgICAgICBpZiAo
c3VjY2VzcykKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOwotICAgIH07Ci0gICAgdGhpcy5jbGVhckJy
ZWFrcG9pbnRzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107
Ci0gICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7Ci0gICAgfTsKLSAg
ICB0aGlzLnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgewotICAgICAg
ICBpZiAoY2xhc3NOYW1lID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBjbGFzc05hbWUgPSAi
YWNlX2JyZWFrcG9pbnQiOwotICAgICAgICBpZiAoY2xhc3NOYW1lKQotICAgICAgICAgICAgdGhp
cy4kYnJlYWtwb2ludHNbcm93XSA9IGNsYXNzTmFtZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107Ci0gICAgICAgIHRoaXMuX2VtaXQoImNo
YW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgIH07Ci0g
ICAgdGhpcy5jbGVhckJyZWFrcG9pbnQgPSBmdW5jdGlvbihyb3cpIHsKLSAgICAgICAgZGVsZXRl
IHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107Ci0gICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFr
cG9pbnQiLCB7fSk7CisKKyAgICB0aGlzLm9uQ29tbWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJ
ZCwga2V5Q29kZSkgeworICAgICAgICB2YXIga2V5U3RyaW5nID0ga2V5VXRpbC5rZXlDb2RlVG9T
dHJpbmcoa2V5Q29kZSk7CisgICAgICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKGhhc2hJ
ZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlKTsKICAgICB9OwotICAgIHRoaXMuYWRkTWFya2VyID0g
ZnVuY3Rpb24ocmFuZ2UsIGNsYXp6LCB0eXBlLCBpbkZyb250KSB7Ci0gICAgICAgIHZhciBpZCA9
IHRoaXMuJG1hcmtlcklkKys7CiAKLSAgICAgICAgdmFyIG1hcmtlciA9IHsKLSAgICAgICAgICAg
IHJhbmdlIDogcmFuZ2UsCi0gICAgICAgICAgICB0eXBlIDogdHlwZSB8fCAibGluZSIsCi0gICAg
ICAgICAgICByZW5kZXJlcjogdHlwZW9mIHR5cGUgPT0gImZ1bmN0aW9uIiA/IHR5cGUgOiBudWxs
LAotICAgICAgICAgICAgY2xhenogOiBjbGF6eiwKLSAgICAgICAgICAgIGluRnJvbnQ6ICEhaW5G
cm9udCwKLSAgICAgICAgICAgIGlkOiBpZAotICAgICAgICB9CisgICAgdGhpcy5vblRleHRJbnB1
dCA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0aGlzLiRjYWxsS2V5
Ym9hcmRIYW5kbGVycygtMSwgdGV4dCk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAg
ICAgIHRoaXMuJGVkaXRvci5jb21tYW5kcy5leGVjKCJpbnNlcnRzdHJpbmciLCB0aGlzLiRlZGl0
b3IsIHRleHQpOworICAgIH07CiAKLSAgICAgICAgaWYgKGluRnJvbnQpIHsKLSAgICAgICAgICAg
IHRoaXMuJGZyb250TWFya2Vyc1tpZF0gPSBtYXJrZXI7Ci0gICAgICAgICAgICB0aGlzLl9lbWl0
KCJjaGFuZ2VGcm9udE1hcmtlciIpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlz
LiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7Ci0gICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFu
Z2VCYWNrTWFya2VyIikKLSAgICAgICAgfQorfSkuY2FsbChLZXlCaW5kaW5nLnByb3RvdHlwZSk7
CiAKLSAgICAgICAgcmV0dXJuIGlkOwotICAgIH07Ci0gICAgdGhpcy5hZGREeW5hbWljTWFya2Vy
ID0gZnVuY3Rpb24obWFya2VyLCBpbkZyb250KSB7Ci0gICAgICAgIGlmICghbWFya2VyLnVwZGF0
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQr
KzsKLSAgICAgICAgbWFya2VyLmlkID0gaWQ7Ci0gICAgICAgIG1hcmtlci5pbkZyb250ID0gISFp
bkZyb250OworZXhwb3J0cy5LZXlCaW5kaW5nID0gS2V5QmluZGluZzsKK30pOwogCi0gICAgICAg
IGlmIChpbkZyb250KSB7Ci0gICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNbaWRdID0gbWFy
a2VyOwotICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlRnJvbnRNYXJrZXIiKQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy4kYmFja01hcmtlcnNbaWRdID0gbWFya2VyOwot
ICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpCi0gICAgICAgIH0KK2Fj
ZS5kZWZpbmUoJ2FjZS9lZGl0X3Nlc3Npb24nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1
bGUnICwgJ2FjZS9jb25maWcnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9s
aWIvZXZlbnRfZW1pdHRlcicsICdhY2Uvc2VsZWN0aW9uJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNl
L3JhbmdlJywgJ2FjZS9kb2N1bWVudCcsICdhY2UvYmFja2dyb3VuZF90b2tlbml6ZXInLCAnYWNl
L3NlYXJjaF9oaWdobGlnaHQnLCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nJywgJ2FjZS9lZGl0
X3Nlc3Npb24vYnJhY2tldF9tYXRjaCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1
bGUpIHsKIAotICAgICAgICByZXR1cm4gbWFya2VyOwotICAgIH07Ci0gICAgdGhpcy5yZW1vdmVN
YXJrZXIgPSBmdW5jdGlvbihtYXJrZXJJZCkgewotICAgICAgICB2YXIgbWFya2VyID0gdGhpcy4k
ZnJvbnRNYXJrZXJzW21hcmtlcklkXSB8fCB0aGlzLiRiYWNrTWFya2Vyc1ttYXJrZXJJZF07Ci0g
ICAgICAgIGlmICghbWFya2VyKQotICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBt
YXJrZXJzID0gbWFya2VyLmluRnJvbnQgPyB0aGlzLiRmcm9udE1hcmtlcnMgOiB0aGlzLiRiYWNr
TWFya2VyczsKLSAgICAgICAgaWYgKG1hcmtlcikgewotICAgICAgICAgICAgZGVsZXRlIChtYXJr
ZXJzW21hcmtlcklkXSk7Ci0gICAgICAgICAgICB0aGlzLl9lbWl0KG1hcmtlci5pbkZyb250ID8g
ImNoYW5nZUZyb250TWFya2VyIiA6ICJjaGFuZ2VCYWNrTWFya2VyIik7Ci0gICAgICAgIH0KLSAg
ICB9OwotICAgIHRoaXMuZ2V0TWFya2VycyA9IGZ1bmN0aW9uKGluRnJvbnQpIHsKLSAgICAgICAg
cmV0dXJuIGluRnJvbnQgPyB0aGlzLiRmcm9udE1hcmtlcnMgOiB0aGlzLiRiYWNrTWFya2VyczsK
LSAgICB9OwordmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Cit2YXIgb29wID0gcmVx
dWlyZSgiLi9saWIvb29wIik7Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3Zh
ciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0
dGVyOwordmFyIFNlbGVjdGlvbiA9IHJlcXVpcmUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uOwor
dmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi9tb2RlL3RleHQiKS5Nb2RlOwordmFyIFJhbmdlID0g
cmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwordmFyIERvY3VtZW50ID0gcmVxdWlyZSgiLi9kb2N1
bWVudCIpLkRvY3VtZW50OwordmFyIEJhY2tncm91bmRUb2tlbml6ZXIgPSByZXF1aXJlKCIuL2Jh
Y2tncm91bmRfdG9rZW5pemVyIikuQmFja2dyb3VuZFRva2VuaXplcjsKK3ZhciBTZWFyY2hIaWdo
bGlnaHQgPSByZXF1aXJlKCIuL3NlYXJjaF9oaWdobGlnaHQiKS5TZWFyY2hIaWdobGlnaHQ7Cit2
YXIgY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWciKTsKIAotICAgIHRoaXMuaGlnaGxpZ2h0ID0g
ZnVuY3Rpb24ocmUpIHsKLSAgICAgICAgaWYgKCF0aGlzLiRzZWFyY2hIaWdobGlnaHQpIHsKLSAg
ICAgICAgICAgIHZhciBoaWdobGlnaHQgPSBuZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsICJhY2Vf
c2VsZWN0ZWQtd29yZCIsICJ0ZXh0Iik7Ci0gICAgICAgICAgICB0aGlzLiRzZWFyY2hIaWdobGln
aHQgPSB0aGlzLmFkZER5bmFtaWNNYXJrZXIoaGlnaGxpZ2h0KTsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLiRzZWFyY2hIaWdobGlnaHQuc2V0UmVnZXhwKHJlKTsKK3ZhciBFZGl0U2Vzc2lvbiA9
IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHsKKyAgICB0aGlzLiRicmVha3BvaW50cyA9IFtdOworICAg
IHRoaXMuJGRlY29yYXRpb25zID0gW107CisgICAgdGhpcy4kZnJvbnRNYXJrZXJzID0ge307Cisg
ICAgdGhpcy4kYmFja01hcmtlcnMgPSB7fTsKKyAgICB0aGlzLiRtYXJrZXJJZCA9IDE7CisgICAg
dGhpcy4kdW5kb1NlbGVjdCA9IHRydWU7CisgICAgCisgICAgdGhpcy4kZm9sZERhdGEgPSBbXTsK
KyAgICB0aGlzLiRmb2xkRGF0YS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
c3RyID0gIiI7CisgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbihmb2xkTGluZSkgeworICAg
ICAgICAgICAgc3RyICs9ICJcbiIgKyBmb2xkTGluZS50b1N0cmluZygpOworICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuIHN0cjsKICAgICB9Ci0gICAgdGhpcy5oaWdobGlnaHRMaW5lcyA9IGZ1
bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3csIGNsYXp6LCBpbkZyb250KSB7Ci0gICAgICAgIGlmICh0
eXBlb2YgZW5kUm93ICE9ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICBjbGF6eiA9IGVuZFJvdzsK
LSAgICAgICAgICAgIGVuZFJvdyA9IHN0YXJ0Um93OwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
Y2xhenopCi0gICAgICAgICAgICBjbGF6eiA9ICJhY2Vfc3RlcCI7Ci0gICAgICAgIAotICAgICAg
ICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIDAsIGVuZFJvdywgSW5maW5pdHkpOwot
ICAgICAgICAKLSAgICAgICAgdmFyIGlkID0gdGhpcy5hZGRNYXJrZXIocmFuZ2UsIGNsYXp6LCAi
ZnVsbExpbmUiLCBpbkZyb250KTsKLSAgICAgICAgcmFuZ2UuaWQgPSBpZDsKLSAgICAgICAgcmV0
dXJuIHJhbmdlOwotICAgIH07Ci0gICAgdGhpcy5zZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGFu
bm90YXRpb25zKSB7Ci0gICAgICAgIHRoaXMuJGFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7Ci0g
ICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUFubm90YXRpb24iLCB7fSk7Ci0gICAgfTsKLSAgICB0
aGlzLmdldEFubm90YXRpb25zID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRh
bm5vdGF0aW9ucyB8fCBbXTsKLSAgICB9OwotICAgIHRoaXMuY2xlYXJBbm5vdGF0aW9ucyA9IGZ1
bmN0aW9uKCkgewotICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IHt9OwotICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2VBbm5vdGF0aW9uIiwge30pOwotICAgIH07Ci0gICAgdGhpcy4kZGV0ZWN0
TmV3TGluZSA9IGZ1bmN0aW9uKHRleHQpIHsKLSAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRj
aCgvXi4qPyhccj9cbikvbSk7Ci0gICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgdGhp
cy4kYXV0b05ld0xpbmUgPSBtYXRjaFsxXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHRoaXMuJGF1dG9OZXdMaW5lID0gIlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5n
ZXRXb3JkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewotICAgICAgICB2YXIgbGluZSA9
IHRoaXMuZ2V0TGluZShyb3cpOworICAgIHRoaXMub24oImNoYW5nZUZvbGQiLCB0aGlzLm9uQ2hh
bmdlRm9sZC5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2Uu
YmluZCh0aGlzKTsKKyAgICAKKyAgICBpZiAodHlwZW9mIHRleHQgIT0gIm9iamVjdCIgfHwgIXRl
eHQuZ2V0TGluZSkKKyAgICAgICAgdGV4dCA9IG5ldyBEb2N1bWVudCh0ZXh0KTsKIAotICAgICAg
ICB2YXIgaW5Ub2tlbiA9IGZhbHNlOwotICAgICAgICBpZiAoY29sdW1uID4gMCkKLSAgICAgICAg
ICAgIGluVG9rZW4gPSAhIWxpbmUuY2hhckF0KGNvbHVtbiAtIDEpLm1hdGNoKHRoaXMudG9rZW5S
ZSk7CisgICAgdGhpcy5zZXREb2N1bWVudCh0ZXh0KTsKIAotICAgICAgICBpZiAoIWluVG9rZW4p
Ci0gICAgICAgICAgICBpblRva2VuID0gISFsaW5lLmNoYXJBdChjb2x1bW4pLm1hdGNoKHRoaXMu
dG9rZW5SZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaW5Ub2tlbikKLSAgICAgICAgICAgIHZh
ciByZSA9IHRoaXMudG9rZW5SZTsKLSAgICAgICAgZWxzZSBpZiAoL15ccyskLy50ZXN0KGxpbmUu
c2xpY2UoY29sdW1uLTEsIGNvbHVtbisxKSkpCi0gICAgICAgICAgICB2YXIgcmUgPSAvXHMvOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YXIgcmUgPSB0aGlzLm5vblRva2VuUmU7CisgICAg
dGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMpOworICAgIHRoaXMuc2V0TW9kZSht
b2RlKTsKIAotICAgICAgICB2YXIgc3RhcnQgPSBjb2x1bW47Ci0gICAgICAgIGlmIChzdGFydCA+
IDApIHsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBzdGFydC0tOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKHN0YXJ0ID49IDAgJiYgbGluZS5jaGFyQXQoc3Rh
cnQpLm1hdGNoKHJlKSk7Ci0gICAgICAgICAgICBzdGFydCsrOwotICAgICAgICB9CisgICAgY29u
ZmlnLnJlc2V0T3B0aW9ucyh0aGlzKTsKKyAgICBjb25maWcuX2VtaXQoInNlc3Npb24iLCB0aGlz
KTsKK307CiAKLSAgICAgICAgdmFyIGVuZCA9IGNvbHVtbjsKLSAgICAgICAgd2hpbGUgKGVuZCA8
IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGVuZCkubWF0Y2gocmUpKSB7Ci0gICAgICAgICAg
ICBlbmQrKzsKLSAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzdGFy
dCwgcm93LCBlbmQpOwotICAgIH07Ci0gICAgdGhpcy5nZXRBV29yZFJhbmdlID0gZnVuY3Rpb24o
cm93LCBjb2x1bW4pIHsKLSAgICAgICAgdmFyIHdvcmRSYW5nZSA9IHRoaXMuZ2V0V29yZFJhbmdl
KHJvdywgY29sdW1uKTsKLSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUod29yZFJhbmdl
LmVuZC5yb3cpOworKGZ1bmN0aW9uKCkgewogCi0gICAgICAgIHdoaWxlIChsaW5lLmNoYXJBdCh3
b3JkUmFuZ2UuZW5kLmNvbHVtbikubWF0Y2goL1sgXHRdLykpIHsKLSAgICAgICAgICAgIHdvcmRS
YW5nZS5lbmQuY29sdW1uICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHdvcmRSYW5n
ZTsKLSAgICB9OwotICAgIHRoaXMuc2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbihuZXdMaW5lTW9k
ZSkgewotICAgICAgICB0aGlzLmRvYy5zZXROZXdMaW5lTW9kZShuZXdMaW5lTW9kZSk7Ci0gICAg
fTsKLSAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLmRvYy5nZXROZXdMaW5lTW9kZSgpOwotICAgIH07CisgICAgb29wLmltcGxlbWVudCh0
aGlzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2Mp
IHsKKyAgICAgICAgaWYgKHRoaXMuZG9jKQorICAgICAgICAgICAgdGhpcy5kb2MucmVtb3ZlTGlz
dGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKIAotICAgIHRoaXMuJHVzZVdvcmtlciA9
IHRydWU7Ci0gICAgdGhpcy5zZXRVc2VXb3JrZXIgPSBmdW5jdGlvbih1c2VXb3JrZXIpIHsKLSAg
ICAgICAgaWYgKHRoaXMuJHVzZVdvcmtlciA9PSB1c2VXb3JrZXIpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHRoaXMuZG9jID0gZG9jOworICAgICAgICBkb2Mub24oImNoYW5nZSIsIHRo
aXMuJG9uQ2hhbmdlKTsKIAotICAgICAgICB0aGlzLiR1c2VXb3JrZXIgPSB1c2VXb3JrZXI7Cisg
ICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKQorICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXpl
ci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50KCkpOwogCi0gICAgICAgIHRoaXMuJHN0b3BX
b3JrZXIoKTsKLSAgICAgICAgaWYgKHVzZVdvcmtlcikKLSAgICAgICAgICAgIHRoaXMuJHN0YXJ0
V29ya2VyKCk7CisgICAgICAgIHRoaXMucmVzZXRDYWNoZXMoKTsKICAgICB9OwotICAgIHRoaXMu
Z2V0VXNlV29ya2VyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR1c2VXb3Jr
ZXI7CisgICAgdGhpcy5nZXREb2N1bWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5kb2M7CiAgICAgfTsKLSAgICB0aGlzLm9uUmVsb2FkVG9rZW5pemVyID0gZnVuY3Rpb24o
ZSkgewotICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTsKLSAgICAgICAgdGhpcy5iZ1Rva2VuaXpl
ci5zdGFydChyb3dzLmZpcnN0KTsKLSAgICAgICAgdGhpcy5fZW1pdCgidG9rZW5pemVyVXBkYXRl
IiwgZSk7Ci0gICAgfTsKLQotICAgIHRoaXMuJG1vZGVzID0ge307Ci0gICAgdGhpcy4kbW9kZSA9
IG51bGw7Ci0gICAgdGhpcy4kbW9kZUlkID0gbnVsbDsKLSAgICB0aGlzLnNldE1vZGUgPSBmdW5j
dGlvbihtb2RlKSB7Ci0gICAgICAgIGlmIChtb2RlICYmIHR5cGVvZiBtb2RlID09PSAib2JqZWN0
IikgewotICAgICAgICAgICAgaWYgKG1vZGUuZ2V0VG9rZW5pemVyKQotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLiRvbkNoYW5nZU1vZGUobW9kZSk7Ci0gICAgICAgICAgICB2YXIgb3B0aW9u
cyA9IG1vZGU7Ci0gICAgICAgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aDsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHBhdGggPSBtb2RlIHx8ICJhY2UvbW9kZS90ZXh0IjsKKyAg
ICB0aGlzLiRyZXNldFJvd0NhY2hlID0gZnVuY3Rpb24oZG9jUm93KSB7CisgICAgICAgIGlmICgh
ZG9jUm93KSB7CisgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZSA9IFtdOworICAgICAgICAg
ICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUgPSBbXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgbCA9IHRoaXMuJGRvY1Jvd0NhY2hlLmxlbmd0aDsKKyAgICAgICAg
dmFyIGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4KHRoaXMuJGRvY1Jvd0NhY2hlLCBkb2NSb3cp
ICsgMTsKKyAgICAgICAgaWYgKGwgPiBpKSB7CisgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNo
ZS5zcGxpY2UoaSwgbCk7CisgICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5zcGxpY2Uo
aSwgbCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCF0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4
dCJdKQotICAgICAgICAgICAgdGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSA9IG5ldyBUZXh0
TW9kZSgpOwotCi0gICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbcGF0aF0pOwot
ICAgICAgICB0aGlzLiRtb2RlSWQgPSBwYXRoOwotICAgICAgICBjb25maWcubG9hZE1vZHVsZShb
Im1vZGUiLCBwYXRoXSwgZnVuY3Rpb24obSkgewotICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGVJ
ZCAhPT0gcGF0aCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAodGhp
cy4kbW9kZXNbcGF0aF0gJiYgIW9wdGlvbnMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
JG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7Ci0gICAgICAgICAgICBpZiAobSAmJiBt
Lk1vZGUpIHsKLSAgICAgICAgICAgICAgICBtID0gbmV3IG0uTW9kZShvcHRpb25zKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy4kbW9k
ZXNbcGF0aF0gPSBtOwotICAgICAgICAgICAgICAgICAgICBtLiRpZCA9IHBhdGg7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlTW9kZShtKQotICAgICAg
ICAgICAgfQotICAgICAgICB9LmJpbmQodGhpcykpOwotICAgICAgICBpZiAoIXRoaXMuJG1vZGUp
Ci0gICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbImFjZS9tb2RlL3Rl
eHQiXSwgdHJ1ZSk7CiAgICAgfTsKIAotICAgIHRoaXMuJG9uQ2hhbmdlTW9kZSA9IGZ1bmN0aW9u
KG1vZGUsICRpc1BsYWNlaG9sZGVyKSB7Ci0gICAgICAgIGlmICh0aGlzLiRtb2RlID09PSBtb2Rl
KSByZXR1cm47Ci0gICAgICAgIHRoaXMuJG1vZGUgPSBtb2RlOwotCi0gICAgICAgIHRoaXMuJHN0
b3BXb3JrZXIoKTsKLQotICAgICAgICBpZiAodGhpcy4kdXNlV29ya2VyKQotICAgICAgICAgICAg
dGhpcy4kc3RhcnRXb3JrZXIoKTsKLQotICAgICAgICB2YXIgdG9rZW5pemVyID0gbW9kZS5nZXRU
b2tlbml6ZXIoKTsKKyAgICB0aGlzLiRnZXRSb3dDYWNoZUluZGV4ID0gZnVuY3Rpb24oY2FjaGVB
cnJheSwgdmFsKSB7CisgICAgICAgIHZhciBsb3cgPSAwOworICAgICAgICB2YXIgaGkgPSBjYWNo
ZUFycmF5Lmxlbmd0aCAtIDE7CiAKLSAgICAgICAgaWYodG9rZW5pemVyLmFkZEV2ZW50TGlzdGVu
ZXIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgdmFyIG9uUmVsb2FkVG9rZW5pemVyID0g
dGhpcy5vblJlbG9hZFRva2VuaXplci5iaW5kKHRoaXMpOwotICAgICAgICAgICAgdG9rZW5pemVy
LmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZSIsIG9uUmVsb2FkVG9rZW5pemVyKTsKLSAgICAgICAg
fQorICAgICAgICB3aGlsZSAobG93IDw9IGhpKSB7CisgICAgICAgICAgICB2YXIgbWlkID0gKGxv
dyArIGhpKSA+PiAxOworICAgICAgICAgICAgdmFyIGMgPSBjYWNoZUFycmF5W21pZF07CiAKLSAg
ICAgICAgaWYgKCF0aGlzLmJnVG9rZW5pemVyKSB7Ci0gICAgICAgICAgICB0aGlzLmJnVG9rZW5p
emVyID0gbmV3IEJhY2tncm91bmRUb2tlbml6ZXIodG9rZW5pemVyKTsKLSAgICAgICAgICAgIHZh
ciBfc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLmFkZEV2ZW50TGlz
dGVuZXIoInVwZGF0ZSIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICBfc2VsZi5fZW1p
dCgidG9rZW5pemVyVXBkYXRlIiwgZSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc2V0VG9rZW5pemVyKHRva2VuaXplcik7
CisgICAgICAgICAgICBpZiAodmFsID4gYykKKyAgICAgICAgICAgICAgICBsb3cgPSBtaWQgKyAx
OworICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgYykKKyAgICAgICAgICAgICAgICBoaSA9IG1p
ZCAtIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKICAg
ICAgICAgfQogCi0gICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXRE
b2N1bWVudCgpKTsKLQotICAgICAgICB0aGlzLnRva2VuUmUgPSBtb2RlLnRva2VuUmU7Ci0gICAg
ICAgIHRoaXMubm9uVG9rZW5SZSA9IG1vZGUubm9uVG9rZW5SZTsKLQorICAgICAgICByZXR1cm4g
bG93IC0xOworICAgIH07CiAKLSAgICAgICAgaWYgKCEkaXNQbGFjZWhvbGRlcikgewotICAgICAg
ICAgICAgdGhpcy4kbW9kZUlkID0gbW9kZS4kaWQ7Ci0gICAgICAgICAgICB0aGlzLiRzZXRGb2xk
aW5nKG1vZGUuZm9sZGluZ1J1bGVzKTsKLSAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZU1v
ZGUiKTsKKyAgICB0aGlzLnJlc2V0Q2FjaGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
JG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy4kd3JhcERhdGEgPSBbXTsKKyAgICAgICAg
dGhpcy4kcm93TGVuZ3RoQ2FjaGUgPSBbXTsKKyAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgw
KTsKKyAgICAgICAgaWYgKHRoaXMuYmdUb2tlbml6ZXIpCiAgICAgICAgICAgICB0aGlzLmJnVG9r
ZW5pemVyLnN0YXJ0KDApOwotICAgICAgICB9CiAgICAgfTsKIAotCi0gICAgdGhpcy4kc3RvcFdv
cmtlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy4kd29ya2VyKQotICAgICAgICAg
ICAgdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpOwotCi0gICAgICAgIHRoaXMuJHdvcmtlciA9IG51
bGw7CisgICAgdGhpcy5vbkNoYW5nZUZvbGQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBm
b2xkID0gZS5kYXRhOworICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGZvbGQuc3RhcnQucm93
KTsKICAgICB9OwogCisgICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
dmFyIGRlbHRhID0gZS5kYXRhOworICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CiAKLSAg
ICB0aGlzLiRzdGFydFdvcmtlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodHlwZW9mIFdv
cmtlciAhPT0gInVuZGVmaW5lZCIgJiYgIXJlcXVpcmUubm9Xb3JrZXIpIHsKLSAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgdGhpcy4kd29ya2VyID0gdGhpcy4kbW9kZS5jcmVhdGVX
b3JrZXIodGhpcyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc29sZS5sb2coIkNvdWxkIG5vdCBsb2FkIHdvcmtlciIpOwotICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKGUpOwotICAgICAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7CisgICAg
ICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoZGVsdGEucmFuZ2Uuc3RhcnQucm93KTsKKworICAgICAg
ICB2YXIgcmVtb3ZlZEZvbGRzID0gdGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UoZSk7
CisgICAgICAgIGlmICghdGhpcy4kZnJvbVVuZG8gJiYgdGhpcy4kdW5kb01hbmFnZXIgJiYgIWRl
bHRhLmlnbm9yZSkgeworICAgICAgICAgICAgdGhpcy4kZGVsdGFzRG9jLnB1c2goZGVsdGEpOwor
ICAgICAgICAgICAgaWYgKHJlbW92ZWRGb2xkcyAmJiByZW1vdmVkRm9sZHMubGVuZ3RoICE9IDAp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLiRkZWx0YXNGb2xkLnB1c2goeworICAgICAgICAgICAg
ICAgICAgICBhY3Rpb246ICJyZW1vdmVGb2xkcyIsCisgICAgICAgICAgICAgICAgICAgIGZvbGRz
OiAgcmVtb3ZlZEZvbGRzCisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyLnNjaGVkdWxlKCk7CiAgICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy4kd29ya2VyID0gbnVsbDsKLSAgICB9Owot
ICAgIHRoaXMuZ2V0TW9kZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kbW9k
ZTsKLSAgICB9OwogCi0gICAgdGhpcy4kc2Nyb2xsVG9wID0gMDsKLSAgICB0aGlzLnNldFNjcm9s
bFRvcCA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkgewotICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLnJv
dW5kKE1hdGgubWF4KDAsIHNjcm9sbFRvcCkpOwotICAgICAgICBpZiAodGhpcy4kc2Nyb2xsVG9w
ID09PSBzY3JvbGxUb3ApCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuYmdUb2tl
bml6ZXIuJHVwZGF0ZU9uQ2hhbmdlKGRlbHRhKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdl
IiwgZSk7CisgICAgfTsKKyAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgeworICAg
ICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh0ZXh0KTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92
ZUN1cnNvclRvKDAsIDApOworICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigp
OwogCi0gICAgICAgIHRoaXMuJHNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKLSAgICAgICAgdGhpcy5f
ZW1pdCgiY2hhbmdlU2Nyb2xsVG9wIiwgc2Nyb2xsVG9wKTsKKyAgICAgICAgdGhpcy4kcmVzZXRS
b3dDYWNoZSgwKTsKKyAgICAgICAgdGhpcy4kZGVsdGFzID0gW107CisgICAgICAgIHRoaXMuJGRl
bHRhc0RvYyA9IFtdOworICAgICAgICB0aGlzLiRkZWx0YXNGb2xkID0gW107CisgICAgICAgIHRo
aXMuZ2V0VW5kb01hbmFnZXIoKS5yZXNldCgpOwogICAgIH07Ci0gICAgdGhpcy5nZXRTY3JvbGxU
b3AgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbFRvcDsKKyAgICB0
aGlzLmdldFZhbHVlID0KKyAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmRvYy5nZXRWYWx1ZSgpOwogICAgIH07Ci0KLSAgICB0aGlzLiRzY3JvbGxM
ZWZ0ID0gMDsKLSAgICB0aGlzLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7
Ci0gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIHNjcm9sbExlZnQp
KTsKLSAgICAgICAgaWYgKHRoaXMuJHNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy4kc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7Ci0g
ICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNjcm9sbExlZnQiLCBzY3JvbGxMZWZ0KTsKKyAgICB0
aGlzLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZWxl
Y3Rpb247CiAgICAgfTsKLSAgICB0aGlzLmdldFNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbExlZnQ7CisgICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0
aW9uKHJvdykgeworICAgICAgICByZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cp
OwogICAgIH07Ci0gICAgdGhpcy5nZXRTY3JlZW5XaWR0aCA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB0aGlzLiRjb21wdXRlV2lkdGgoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg7
CisgICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7CisgICAgfTsKKyAgICB0aGlzLmdldFRva2Vu
QXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5i
Z1Rva2VuaXplci5nZXRUb2tlbnMocm93KTsKKyAgICAgICAgdmFyIHRva2VuLCBjID0gMDsKKyAg
ICAgICAgaWYgKGNvbHVtbiA9PSBudWxsKSB7CisgICAgICAgICAgICBpID0gdG9rZW5zLmxlbmd0
aCAtIDE7CisgICAgICAgICAgICBjID0gdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjICs9IHRva2Vuc1tpXS52YWx1ZS5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgaWYgKGMgPj0gY29sdW1uKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsK
KyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB0
b2tlbi5pbmRleCA9IGk7CisgICAgICAgIHRva2VuLnN0YXJ0ID0gYyAtIHRva2VuLnZhbHVlLmxl
bmd0aDsKKyAgICAgICAgcmV0dXJuIHRva2VuOwogICAgIH07CisgICAgdGhpcy5zZXRVbmRvTWFu
YWdlciA9IGZ1bmN0aW9uKHVuZG9NYW5hZ2VyKSB7CisgICAgICAgIHRoaXMuJHVuZG9NYW5hZ2Vy
ID0gdW5kb01hbmFnZXI7CisgICAgICAgIHRoaXMuJGRlbHRhcyA9IFtdOworICAgICAgICB0aGlz
LiRkZWx0YXNEb2MgPSBbXTsKKyAgICAgICAgdGhpcy4kZGVsdGFzRm9sZCA9IFtdOwogCi0gICAg
dGhpcy4kY29tcHV0ZVdpZHRoID0gZnVuY3Rpb24oZm9yY2UpIHsKLSAgICAgICAgaWYgKHRoaXMu
JG1vZGlmaWVkIHx8IGZvcmNlKSB7Ci0gICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9IGZhbHNl
OworICAgICAgICBpZiAodGhpcy4kaW5mb3JtVW5kb01hbmFnZXIpCisgICAgICAgICAgICB0aGlz
LiRpbmZvcm1VbmRvTWFuYWdlci5jYW5jZWwoKTsKIAotICAgICAgICAgICAgaWYgKHRoaXMuJHVz
ZVdyYXBNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoID0gdGhp
cy4kd3JhcExpbWl0OworICAgICAgICBpZiAodW5kb01hbmFnZXIpIHsKKyAgICAgICAgICAgIHZh
ciBzZWxmID0gdGhpczsKIAotICAgICAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5kb2MuZ2V0QWxs
TGluZXMoKTsKLSAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuJHJvd0xlbmd0aENhY2hlOwot
ICAgICAgICAgICAgdmFyIGxvbmdlc3RTY3JlZW5MaW5lID0gMDsKLSAgICAgICAgICAgIHZhciBm
b2xkSW5kZXggPSAwOwotICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy4kZm9sZERhdGFb
Zm9sZEluZGV4XTsKLSAgICAgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRM
aW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OwotICAgICAgICAgICAgdmFyIGxlbiA9IGxpbmVzLmxl
bmd0aDsKKyAgICAgICAgICAgIHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHNlbGYuJGluZm9ybVVuZG9NYW5hZ2VyLmNhbmNlbCgpOwog
Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGkgPiBmb2xkU3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaSA9IGZvbGRM
aW5lLmVuZC5yb3cgKyAxOwotICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBsZW4pCi0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUg
PSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXgrK107Ci0gICAgICAgICAgICAgICAgICAgIGZvbGRT
dGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAg
ICAgICAgICAgaWYgKHNlbGYuJGRlbHRhc0ZvbGQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlbGYuJGRlbHRhcy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAi
Zm9sZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXM6IHNlbGYuJGRlbHRhc0ZvbGQK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRh
c0ZvbGQgPSBbXTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVbaV0gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgY2FjaGVbaV0gPSB0aGlzLiRnZXRT
dHJpbmdTY3JlZW5XaWR0aChsaW5lc1tpXSlbMF07CisgICAgICAgICAgICAgICAgaWYgKHNlbGYu
JGRlbHRhc0RvYy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1
c2goeworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICJkb2MiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsdGFzOiBzZWxmLiRkZWx0YXNEb2MKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhc0RvYyA9IFtdOworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjYWNoZVtpXSA+IGxvbmdlc3RTY3JlZW5M
aW5lKQotICAgICAgICAgICAgICAgICAgICBsb25nZXN0U2NyZWVuTGluZSA9IGNhY2hlW2ldOwor
ICAgICAgICAgICAgICAgIGlmIChzZWxmLiRkZWx0YXMubGVuZ3RoID4gMCkgeworICAgICAgICAg
ICAgICAgICAgICB1bmRvTWFuYWdlci5leGVjdXRlKHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFjdGlvbjogImFjZXVwZGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbc2Vs
Zi4kZGVsdGFzLCBzZWxmXQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXMgPSBbXTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRoaXMuc2NyZWVuV2lkdGggPSBsb25nZXN0U2NyZWVuTGluZTsKKyAgICAg
ICAgICAgIHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyID0gbGFuZy5kZWxheWVkQ2FsbCh0aGlzLiRz
eW5jSW5mb3JtVW5kb01hbmFnZXIpOwogICAgICAgICB9CiAgICAgfTsKLSAgICB0aGlzLmdldExp
bmUgPSBmdW5jdGlvbihyb3cpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldExpbmUocm93
KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0TGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJv
dykgewotICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGluZXMoZmlyc3RSb3csIGxhc3RSb3cp
OworCisgICAgdGhpcy4kZGVmYXVsdFVuZG9NYW5hZ2VyID0geworICAgICAgICB1bmRvOiBmdW5j
dGlvbigpIHt9LAorICAgICAgICByZWRvOiBmdW5jdGlvbigpIHt9LAorICAgICAgICByZXNldDog
ZnVuY3Rpb24oKSB7fQogICAgIH07Ci0gICAgdGhpcy5nZXRMZW5ndGggPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldExlbmd0aCgpOworICAgIHRoaXMuZ2V0VW5kb01h
bmFnZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHVuZG9NYW5hZ2VyIHx8
IHRoaXMuJGRlZmF1bHRVbmRvTWFuYWdlcjsKICAgICB9OwotICAgIHRoaXMuZ2V0VGV4dFJhbmdl
ID0gZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldFRleHRSYW5n
ZShyYW5nZSB8fCB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpKTsKKyAgICB0aGlzLmdldFRhYlN0
cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5nZXRVc2VTb2Z0VGFicygpKSB7
CisgICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCB0aGlzLmdldFRhYlNp
emUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gIlx0IjsKKyAgICAg
ICAgfQogICAgIH07Ci0gICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkg
ewotICAgICAgICByZXR1cm4gdGhpcy5kb2MuaW5zZXJ0KHBvc2l0aW9uLCB0ZXh0KTsKKyAgICB0
aGlzLnNldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24odmFsKSB7CisgICAgICAgIHRoaXMuc2V0T3B0
aW9uKCJ1c2VTb2Z0VGFicyIsIHZhbCk7CiAgICAgfTsKLSAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0
aW9uKHJhbmdlKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmRvYy5yZW1vdmUocmFuZ2UpOworICAg
IHRoaXMuZ2V0VXNlU29mdFRhYnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgIHJldHVybiB0aGlz
LiR1c2VTb2Z0VGFiczsKICAgICB9OwotICAgIHRoaXMudW5kb0NoYW5nZXMgPSBmdW5jdGlvbihk
ZWx0YXMsIGRvbnRTZWxlY3QpIHsKLSAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTsKLSAgICAgICAg
dmFyIGxhc3RVbmRvUmFuZ2UgPSBudWxsOwotICAgICAgICBmb3IgKHZhciBpID0gZGVsdGFzLmxl
bmd0aCAtIDE7IGkgIT0gLTE7IGktLSkgewotICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFz
W2ldOwotICAgICAgICAgICAgaWYgKGRlbHRhLmdyb3VwID09ICJkb2MiKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5kb2MucmV2ZXJ0RGVsdGFzKGRlbHRhLmRlbHRhcyk7Ci0gICAgICAgICAgICAg
ICAgbGFzdFVuZG9SYW5nZSA9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuJGdldFVuZG9TZWxl
Y3Rpb24oZGVsdGEuZGVsdGFzLCB0cnVlLCBsYXN0VW5kb1JhbmdlKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVsdGEuZGVsdGFzLmZvckVhY2goZnVuY3Rpb24oZm9s
ZERlbHRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9sZHMoZm9sZERlbHRhLmZv
bGRzKTsKLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlOwotICAgICAgICBsYXN0VW5kb1Jhbmdl
ICYmCi0gICAgICAgICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmCi0gICAgICAgICAgICAhZG9udFNl
bGVjdCAmJgotICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobGFz
dFVuZG9SYW5nZSk7Ci0gICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlOworICAgIHRoaXMuc2V0
VGFiU2l6ZSA9IGZ1bmN0aW9uKHRhYlNpemUpIHsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oInRh
YlNpemUiLCB0YWJTaXplKQorICAgIH07CisgICAgdGhpcy5nZXRUYWJTaXplID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplOworICAgIH07CisgICAgdGhpcy5pc1Rh
YlN0b3AgPSBmdW5jdGlvbihwb3NpdGlvbikgeworICAgICAgICByZXR1cm4gdGhpcy4kdXNlU29m
dFRhYnMgJiYgKHBvc2l0aW9uLmNvbHVtbiAlIHRoaXMuJHRhYlNpemUgPT0gMCk7CiAgICAgfTsK
LSAgICB0aGlzLnJlZG9DaGFuZ2VzID0gZnVuY3Rpb24oZGVsdGFzLCBkb250U2VsZWN0KSB7Ci0g
ICAgICAgIGlmICghZGVsdGFzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICB0aGlzLiRmcm9tVW5kbyA9IHRydWU7Ci0gICAgICAgIHZhciBsYXN0VW5kb1JhbmdlID0gbnVs
bDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWx0YXMubGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTsKLSAgICAgICAgICAgIGlmIChkZWx0YS5n
cm91cCA9PSAiZG9jIikgewotICAgICAgICAgICAgICAgIHRoaXMuZG9jLmFwcGx5RGVsdGFzKGRl
bHRhLmRlbHRhcyk7Ci0gICAgICAgICAgICAgICAgbGFzdFVuZG9SYW5nZSA9Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rpb24oZGVsdGEuZGVsdGFzLCBmYWxzZSwgbGFz
dFVuZG9SYW5nZSk7Ci0gICAgICAgICAgICB9CisgICAgdGhpcy4kb3ZlcndyaXRlID0gZmFsc2U7
CisgICAgdGhpcy5zZXRPdmVyd3JpdGUgPSBmdW5jdGlvbihvdmVyd3JpdGUpIHsKKyAgICAgICAg
aWYgKHRoaXMuJG92ZXJ3cml0ZSA9PSBvdmVyd3JpdGUpIHJldHVybjsKKworICAgICAgICB0aGlz
LiRvdmVyd3JpdGUgPSBvdmVyd3JpdGU7CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZU92ZXJ3
cml0ZSIpOworICAgIH07CisgICAgdGhpcy5nZXRPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuJG92ZXJ3cml0ZTsKKyAgICB9OworICAgIHRoaXMudG9nZ2xlT3Zl
cndyaXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2V0T3ZlcndyaXRlKCF0aGlzLiRv
dmVyd3JpdGUpOworICAgIH07CisgICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rp
b24ocm93LCBjbGFzc05hbWUpIHsKKyAgICAgICAgaWYgKCF0aGlzLiRkZWNvcmF0aW9uc1tyb3dd
KQorICAgICAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9ICIiOworICAgICAgICB0aGlz
LiRkZWNvcmF0aW9uc1tyb3ddICs9ICIgIiArIGNsYXNzTmFtZTsKKyAgICAgICAgdGhpcy5fZW1p
dCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlR3V0dGVy
RGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKSB7CisgICAgICAgIHRoaXMuJGRl
Y29yYXRpb25zW3Jvd10gPSAodGhpcy4kZGVjb3JhdGlvbnNbcm93XSB8fCAiIikucmVwbGFjZSgi
ICIgKyBjbGFzc05hbWUsICIiKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2lu
dCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMuZ2V0QnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuJGJyZWFrcG9pbnRzOworICAgIH07CisgICAgdGhpcy5zZXRC
cmVha3BvaW50cyA9IGZ1bmN0aW9uKHJvd3MpIHsKKyAgICAgICAgdGhpcy4kYnJlYWtwb2ludHMg
PSBbXTsKKyAgICAgICAgZm9yICh2YXIgaT0wOyBpPHJvd3MubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd3NbaV1dID0gImFjZV9icmVha3BvaW50IjsKICAg
ICAgICAgfQotICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlOwotICAgICAgICBsYXN0VW5k
b1JhbmdlICYmCi0gICAgICAgICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmCi0gICAgICAgICAgICAh
ZG9udFNlbGVjdCAmJgotICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFu
Z2UobGFzdFVuZG9SYW5nZSk7Ci0gICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlOworICAgICAg
ICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOwogICAgIH07Ci0gICAgdGhpcy5z
ZXRVbmRvU2VsZWN0ID0gZnVuY3Rpb24oZW5hYmxlKSB7Ci0gICAgICAgIHRoaXMuJHVuZG9TZWxl
Y3QgPSBlbmFibGU7CisgICAgdGhpcy5jbGVhckJyZWFrcG9pbnRzID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5n
ZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLnNldEJyZWFrcG9pbnQgPSBmdW5j
dGlvbihyb3csIGNsYXNzTmFtZSkgeworICAgICAgICBpZiAoY2xhc3NOYW1lID09PSB1bmRlZmlu
ZWQpCisgICAgICAgICAgICBjbGFzc05hbWUgPSAiYWNlX2JyZWFrcG9pbnQiOworICAgICAgICBp
ZiAoY2xhc3NOYW1lKQorICAgICAgICAgICAgdGhpcy4kYnJlYWtwb2ludHNbcm93XSA9IGNsYXNz
TmFtZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRz
W3Jvd107CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAg
fTsKKyAgICB0aGlzLmNsZWFyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICBk
ZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbcm93XTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdl
QnJlYWtwb2ludCIsIHt9KTsKICAgICB9OworICAgIHRoaXMuYWRkTWFya2VyID0gZnVuY3Rpb24o
cmFuZ2UsIGNsYXp6LCB0eXBlLCBpbkZyb250KSB7CisgICAgICAgIHZhciBpZCA9IHRoaXMuJG1h
cmtlcklkKys7CiAKLSAgICB0aGlzLiRnZXRVbmRvU2VsZWN0aW9uID0gZnVuY3Rpb24oZGVsdGFz
LCBpc1VuZG8sIGxhc3RVbmRvUmFuZ2UpIHsKLSAgICAgICAgZnVuY3Rpb24gaXNJbnNlcnQoZGVs
dGEpIHsKLSAgICAgICAgICAgIHZhciBpbnNlcnQgPQotICAgICAgICAgICAgICAgIGRlbHRhLmFj
dGlvbiA9PSAiaW5zZXJ0VGV4dCIgfHwgZGVsdGEuYWN0aW9uID09ICJpbnNlcnRMaW5lcyI7Ci0g
ICAgICAgICAgICByZXR1cm4gaXNVbmRvID8gIWluc2VydCA6IGluc2VydDsKKyAgICAgICAgdmFy
IG1hcmtlciA9IHsKKyAgICAgICAgICAgIHJhbmdlIDogcmFuZ2UsCisgICAgICAgICAgICB0eXBl
IDogdHlwZSB8fCAibGluZSIsCisgICAgICAgICAgICByZW5kZXJlcjogdHlwZW9mIHR5cGUgPT0g
ImZ1bmN0aW9uIiA/IHR5cGUgOiBudWxsLAorICAgICAgICAgICAgY2xhenogOiBjbGF6eiwKKyAg
ICAgICAgICAgIGluRnJvbnQ6ICEhaW5Gcm9udCwKKyAgICAgICAgICAgIGlkOiBpZAogICAgICAg
ICB9CiAKLSAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzWzBdOwotICAgICAgICB2YXIgcmFuZ2Us
IHBvaW50OwotICAgICAgICB2YXIgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKLSAgICAgICAg
aWYgKGlzSW5zZXJ0KGRlbHRhKSkgewotICAgICAgICAgICAgcmFuZ2UgPSBkZWx0YS5yYW5nZS5j
bG9uZSgpOwotICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOworICAgICAgICBp
ZiAoaW5Gcm9udCkgeworICAgICAgICAgICAgdGhpcy4kZnJvbnRNYXJrZXJzW2lkXSA9IG1hcmtl
cjsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUZyb250TWFya2VyIikKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5yYW5n
ZS5zdGFydCwgZGVsdGEucmFuZ2Uuc3RhcnQpOwotICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNl
cnQgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZGVs
dGFzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBkZWx0YSA9IGRlbHRhc1tpXTsKLSAgICAg
ICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHsKLSAgICAgICAgICAgICAgICBwb2ludCA9IGRl
bHRhLnJhbmdlLnN0YXJ0OwotICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBvaW50
LnJvdywgcG9pbnQuY29sdW1uKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICByYW5nZS5z
ZXRTdGFydChkZWx0YS5yYW5nZS5zdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2UuZW5kOwotICAgICAgICAgICAgICAgIGlmIChyYW5n
ZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJhbmdlLnNldEVuZChkZWx0YS5yYW5nZS5lbmQpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBsYXN0RGVsdGFJc0luc2VydCA9IHRydWU7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2Uuc3RhcnQ7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmUocG9pbnQucm93LCBwb2ludC5jb2x1bW4pID09
IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdlLnN0YXJ0
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQg
PSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFzdFVuZG9S
YW5nZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB2YXIgY21wID0gbGFzdFVuZG9SYW5nZS5jb21w
YXJlUmFuZ2UocmFuZ2UpOwotICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7Ci0gICAgICAgICAg
ICAgICAgcmFuZ2Uuc2V0U3RhcnQobGFzdFVuZG9SYW5nZS5zdGFydCk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGNtcCA9PSAtMSkgewotICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChsYXN0
VW5kb1JhbmdlLmVuZCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRiYWNrTWFy
a2Vyc1tpZF0gPSBtYXJrZXI7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCYWNrTWFy
a2VyIikKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9OwotICAgIHRo
aXMucmVwbGFjZSA9IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KSB7Ci0gICAgICAgIHJldHVybiB0aGlz
LmRvYy5yZXBsYWNlKHJhbmdlLCB0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGlkOwogICAgIH07Ci0g
ICAgdGhpcy5tb3ZlVGV4dCA9IGZ1bmN0aW9uKGZyb21SYW5nZSwgdG9Qb3NpdGlvbikgewotICAg
ICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5nZSk7Ci0gICAgICAgIHRo
aXMucmVtb3ZlKGZyb21SYW5nZSk7Ci0KLSAgICAgICAgdmFyIHRvUm93ID0gdG9Qb3NpdGlvbi5y
b3c7Ci0gICAgICAgIHZhciB0b0NvbHVtbiA9IHRvUG9zaXRpb24uY29sdW1uOwotICAgICAgICBp
ZiAoIWZyb21SYW5nZS5pc011bHRpTGluZSgpICYmIGZyb21SYW5nZS5zdGFydC5yb3cgPT0gdG9S
b3cgJiYKLSAgICAgICAgICAgIGZyb21SYW5nZS5lbmQuY29sdW1uIDwgdG9Db2x1bW4pCi0gICAg
ICAgICAgICB0b0NvbHVtbiAtPSB0ZXh0Lmxlbmd0aDsKKyAgICB0aGlzLmFkZER5bmFtaWNNYXJr
ZXIgPSBmdW5jdGlvbihtYXJrZXIsIGluRnJvbnQpIHsKKyAgICAgICAgaWYgKCFtYXJrZXIudXBk
YXRlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgaWQgPSB0aGlzLiRtYXJrZXJJ
ZCsrOworICAgICAgICBtYXJrZXIuaWQgPSBpZDsKKyAgICAgICAgbWFya2VyLmluRnJvbnQgPSAh
IWluRnJvbnQ7CiAKLSAgICAgICAgaWYgKGZyb21SYW5nZS5pc011bHRpTGluZSgpICYmIGZyb21S
YW5nZS5lbmQucm93IDwgdG9Sb3cpIHsKLSAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9j
LiRzcGxpdCh0ZXh0KTsKLSAgICAgICAgICAgIHRvUm93IC09IGxpbmVzLmxlbmd0aCAtIDE7Cisg
ICAgICAgIGlmIChpbkZyb250KSB7CisgICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNbaWRd
ID0gbWFya2VyOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlRnJvbnRNYXJrZXIiKQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy4kYmFja01hcmtlcnNbaWRdID0gbWFy
a2VyOworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpCiAgICAgICAg
IH0KIAotICAgICAgICB2YXIgZW5kUm93ID0gdG9Sb3cgKyBmcm9tUmFuZ2UuZW5kLnJvdyAtIGZy
b21SYW5nZS5zdGFydC5yb3c7Ci0gICAgICAgIHZhciBlbmRDb2x1bW4gPSBmcm9tUmFuZ2UuaXNN
dWx0aUxpbmUoKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tUmFuZ2UuZW5kLmNvbHVt
biA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b0NvbHVtbiArIGZyb21SYW5nZS5lbmQuY29s
dW1uIC0gZnJvbVJhbmdlLnN0YXJ0LmNvbHVtbjsKLQotICAgICAgICB2YXIgdG9SYW5nZSA9IG5l
dyBSYW5nZSh0b1JvdywgdG9Db2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKLQotICAgICAgICB0
aGlzLmluc2VydCh0b1JhbmdlLnN0YXJ0LCB0ZXh0KTsKLQotICAgICAgICByZXR1cm4gdG9SYW5n
ZTsKLSAgICB9OwotICAgIHRoaXMuaW5kZW50Um93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRS
b3csIGluZGVudFN0cmluZykgewotICAgICAgICBpbmRlbnRTdHJpbmcgPSBpbmRlbnRTdHJpbmcu
cmVwbGFjZSgvXHQvZywgdGhpcy5nZXRUYWJTdHJpbmcoKSk7Ci0gICAgICAgIGZvciAodmFyIHJv
dz1zdGFydFJvdzsgcm93PD1lbmRSb3c7IHJvdysrKQotICAgICAgICAgICAgdGhpcy5pbnNlcnQo
e3Jvdzogcm93LCBjb2x1bW46MH0sIGluZGVudFN0cmluZyk7CisgICAgICAgIHJldHVybiBtYXJr
ZXI7CiAgICAgfTsKLSAgICB0aGlzLm91dGRlbnRSb3dzID0gZnVuY3Rpb24gKHJhbmdlKSB7Ci0g
ICAgICAgIHZhciByb3dSYW5nZSA9IHJhbmdlLmNvbGxhcHNlUm93cygpOwotICAgICAgICB2YXIg
ZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgIHZhciBzaXplID0g
dGhpcy5nZXRUYWJTaXplKCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IHJvd1JhbmdlLnN0YXJ0
LnJvdzsgaSA8PSByb3dSYW5nZS5lbmQucm93OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5l
ID0gdGhpcy5nZXRMaW5lKGkpOworICAgIHRoaXMucmVtb3ZlTWFya2VyID0gZnVuY3Rpb24obWFy
a2VySWQpIHsKKyAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMuJGZyb250TWFya2Vyc1ttYXJrZXJJ
ZF0gfHwgdGhpcy4kYmFja01hcmtlcnNbbWFya2VySWRdOworICAgICAgICBpZiAoIW1hcmtlcikK
KyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93
ID0gaTsKLSAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpOwotICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyArK2opCi0gICAgICAgICAgICAgICAgaWYgKGxpbmUu
Y2hhckF0KGopICE9ICcgJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBpZiAoaiA8IHNpemUgJiYgbGluZS5jaGFyQXQoaikgPT0gJ1x0JykgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LmNvbHVtbiA9IGo7Ci0gICAgICAgICAgICAgICAgZGVsZXRl
UmFuZ2UuZW5kLmNvbHVtbiA9IGogKyAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSAwOwotICAgICAgICAgICAgICAgIGRl
bGV0ZVJhbmdlLmVuZC5jb2x1bW4gPSBqOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhp
cy5yZW1vdmUoZGVsZXRlUmFuZ2UpOworICAgICAgICB2YXIgbWFya2VycyA9IG1hcmtlci5pbkZy
b250ID8gdGhpcy4kZnJvbnRNYXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7CisgICAgICAgIGlm
IChtYXJrZXIpIHsKKyAgICAgICAgICAgIGRlbGV0ZSAobWFya2Vyc1ttYXJrZXJJZF0pOworICAg
ICAgICAgICAgdGhpcy5fZW1pdChtYXJrZXIuaW5Gcm9udCA/ICJjaGFuZ2VGcm9udE1hcmtlciIg
OiAiY2hhbmdlQmFja01hcmtlciIpOwogICAgICAgICB9CiAgICAgfTsKLSAgICB0aGlzLm1vdmVM
aW5lc1VwID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKLSAgICAgICAgaWYgKGZpcnN0
Um93IDw9IDApIHJldHVybiAwOworICAgIHRoaXMuZ2V0TWFya2VycyA9IGZ1bmN0aW9uKGluRnJv
bnQpIHsKKyAgICAgICAgcmV0dXJuIGluRnJvbnQgPyB0aGlzLiRmcm9udE1hcmtlcnMgOiB0aGlz
LiRiYWNrTWFya2VyczsKKyAgICB9OwogCi0gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5kb2Mu
cmVtb3ZlTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwotICAgICAgICB0aGlzLmRvYy5pbnNlcnRM
aW5lcyhmaXJzdFJvdyAtIDEsIHJlbW92ZWQpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgdGhp
cy5oaWdobGlnaHQgPSBmdW5jdGlvbihyZSkgeworICAgICAgICBpZiAoIXRoaXMuJHNlYXJjaEhp
Z2hsaWdodCkgeworICAgICAgICAgICAgdmFyIGhpZ2hsaWdodCA9IG5ldyBTZWFyY2hIaWdobGln
aHQobnVsbCwgImFjZV9zZWxlY3RlZC13b3JkIiwgInRleHQiKTsKKyAgICAgICAgICAgIHRoaXMu
JHNlYXJjaEhpZ2hsaWdodCA9IHRoaXMuYWRkRHluYW1pY01hcmtlcihoaWdobGlnaHQpOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuJHNlYXJjaEhpZ2hsaWdodC5zZXRSZWdleHAocmUpOworICAg
IH0KKyAgICB0aGlzLmhpZ2hsaWdodExpbmVzID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywg
Y2xhenosIGluRnJvbnQpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBlbmRSb3cgIT0gIm51bWJlciIp
IHsKKyAgICAgICAgICAgIGNsYXp6ID0gZW5kUm93OworICAgICAgICAgICAgZW5kUm93ID0gc3Rh
cnRSb3c7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjbGF6eikKKyAgICAgICAgICAgIGNsYXp6
ID0gImFjZV9zdGVwIjsKKyAgICAgICAgCisgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShz
dGFydFJvdywgMCwgZW5kUm93LCBJbmZpbml0eSk7CisgICAgICAgIHJhbmdlLmlkID0gdGhpcy5h
ZGRNYXJrZXIocmFuZ2UsIGNsYXp6LCAiZnVsbExpbmUiLCBpbkZyb250KTsKKyAgICAgICAgcmV0
dXJuIHJhbmdlOwogICAgIH07Ci0gICAgdGhpcy5tb3ZlTGluZXNEb3duID0gZnVuY3Rpb24oZmly
c3RSb3csIGxhc3RSb3cpIHsKLSAgICAgICAgaWYgKGxhc3RSb3cgPj0gdGhpcy5kb2MuZ2V0TGVu
Z3RoKCktMSkgcmV0dXJuIDA7Ci0KLSAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLmRvYy5yZW1v
dmVMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7Ci0gICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVz
KGZpcnN0Um93KzEsIHJlbW92ZWQpOwotICAgICAgICByZXR1cm4gMTsKKyAgICB0aGlzLnNldEFu
bm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHsKKyAgICAgICAgdGhpcy4kYW5ub3Rh
dGlvbnMgPSBhbm5vdGF0aW9uczsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlv
biIsIHt9KTsKICAgICB9OwotICAgIHRoaXMuZHVwbGljYXRlTGluZXMgPSBmdW5jdGlvbihmaXJz
dFJvdywgbGFzdFJvdykgewotICAgICAgICB2YXIgZmlyc3RSb3cgPSB0aGlzLiRjbGlwUm93VG9E
b2N1bWVudChmaXJzdFJvdyk7Ci0gICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4kY2xpcFJvd1Rv
RG9jdW1lbnQobGFzdFJvdyk7Ci0KLSAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5nZXRMaW5lcyhm
aXJzdFJvdywgbGFzdFJvdyk7Ci0gICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVzKGZpcnN0Um93
LCBsaW5lcyk7Ci0KLSAgICAgICAgdmFyIGFkZGVkUm93cyA9IGxhc3RSb3cgLSBmaXJzdFJvdyAr
IDE7Ci0gICAgICAgIHJldHVybiBhZGRlZFJvd3M7CisgICAgdGhpcy5nZXRBbm5vdGF0aW9ucyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kYW5ub3RhdGlvbnMgfHwgW107CiAg
ICAgfTsKLQotCi0gICAgdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3cpIHsK
LSAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvdywgdGhpcy5kb2MuZ2V0TGVu
Z3RoKCktMSkpOworICAgIHRoaXMuY2xlYXJBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0aGlzLnNldEFubm90YXRpb25zKFtdKTsKICAgICB9OwotCi0gICAgdGhpcy4kY2xpcENv
bHVtblRvUm93ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAgaWYgKGNvbHVtbiA8
IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMu
ZG9jLmdldExpbmUocm93KS5sZW5ndGgsIGNvbHVtbik7CisgICAgdGhpcy4kZGV0ZWN0TmV3TGlu
ZSA9IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4q
Pyhccj9cbikvbSk7CisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgdGhpcy4kYXV0
b05ld0xpbmUgPSBtYXRjaFsxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMu
JGF1dG9OZXdMaW5lID0gIlxuIjsKKyAgICAgICAgfQogICAgIH07CisgICAgdGhpcy5nZXRXb3Jk
UmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICB2YXIgbGluZSA9IHRoaXMu
Z2V0TGluZShyb3cpOwogCisgICAgICAgIHZhciBpblRva2VuID0gZmFsc2U7CisgICAgICAgIGlm
IChjb2x1bW4gPiAwKQorICAgICAgICAgICAgaW5Ub2tlbiA9ICEhbGluZS5jaGFyQXQoY29sdW1u
IC0gMSkubWF0Y2godGhpcy50b2tlblJlKTsKIAotICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9j
dW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewotICAgICAgICBjb2x1bW4gPSBNYXRoLm1h
eCgwLCBjb2x1bW4pOworICAgICAgICBpZiAoIWluVG9rZW4pCisgICAgICAgICAgICBpblRva2Vu
ID0gISFsaW5lLmNoYXJBdChjb2x1bW4pLm1hdGNoKHRoaXMudG9rZW5SZSk7CisgICAgICAgIAor
ICAgICAgICBpZiAoaW5Ub2tlbikKKyAgICAgICAgICAgIHZhciByZSA9IHRoaXMudG9rZW5SZTsK
KyAgICAgICAgZWxzZSBpZiAoL15ccyskLy50ZXN0KGxpbmUuc2xpY2UoY29sdW1uLTEsIGNvbHVt
bisxKSkpCisgICAgICAgICAgICB2YXIgcmUgPSAvXHMvOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB2YXIgcmUgPSB0aGlzLm5vblRva2VuUmU7CiAKLSAgICAgICAgaWYgKHJvdyA8IDApIHsK
LSAgICAgICAgICAgIHJvdyA9IDA7Ci0gICAgICAgICAgICBjb2x1bW4gPSAwOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpOwotICAg
ICAgICAgICAgaWYgKHJvdyA+PSBsZW4pIHsKLSAgICAgICAgICAgICAgICByb3cgPSBsZW4gLSAx
OwotICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuLTEpLmxlbmd0
aDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5t
aW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1uKTsKKyAgICAgICAgdmFyIHN0
YXJ0ID0gY29sdW1uOworICAgICAgICBpZiAoc3RhcnQgPiAwKSB7CisgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgc3RhcnQtLTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdo
aWxlIChzdGFydCA+PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KS5tYXRjaChyZSkpOworICAgICAg
ICAgICAgc3RhcnQrKzsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICByb3c6IHJvdywKLSAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCi0gICAgICAgIH07Ci0gICAg
fTsKLQotICAgIHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQgPSBmdW5jdGlvbihyYW5nZSkgewot
ICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDwgMCkgewotICAgICAgICAgICAgcmFuZ2Uuc3Rh
cnQucm93ID0gMDsKLSAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IDA7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0aGlzLiRjbGlwQ29s
dW1uVG9Sb3coCi0gICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93LAotICAgICAgICAgICAg
ICAgIHJhbmdlLnN0YXJ0LmNvbHVtbgotICAgICAgICAgICAgKTsKKyAgICAgICAgdmFyIGVuZCA9
IGNvbHVtbjsKKyAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0
KGVuZCkubWF0Y2gocmUpKSB7CisgICAgICAgICAgICBlbmQrKzsKICAgICAgICAgfQogCi0gICAg
ICAgIHZhciBsZW4gPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSAtIDE7Ci0gICAgICAgIGlmIChyYW5n
ZS5lbmQucm93ID4gbGVuKSB7Ci0gICAgICAgICAgICByYW5nZS5lbmQucm93ID0gbGVuOwotICAg
ICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuKS5sZW5ndGg7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdGhpcy4k
Y2xpcENvbHVtblRvUm93KAotICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5yb3csCi0gICAgICAg
ICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbgotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gcmFuZ2U7Ci0gICAgfTsKLSAgICB0aGlzLiR3cmFwTGltaXQgPSA4MDsKLSAg
ICB0aGlzLiR1c2VXcmFwTW9kZSA9IGZhbHNlOwotICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlID0g
ewotICAgICAgICBtaW4gOiBudWxsLAotICAgICAgICBtYXggOiBudWxsCisgICAgICAgIHJldHVy
biBuZXcgUmFuZ2Uocm93LCBzdGFydCwgcm93LCBlbmQpOwogICAgIH07Ci0gICAgdGhpcy5zZXRV
c2VXcmFwTW9kZSA9IGZ1bmN0aW9uKHVzZVdyYXBNb2RlKSB7Ci0gICAgICAgIGlmICh1c2VXcmFw
TW9kZSAhPSB0aGlzLiR1c2VXcmFwTW9kZSkgewotICAgICAgICAgICAgdGhpcy4kdXNlV3JhcE1v
ZGUgPSB1c2VXcmFwTW9kZTsKLSAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7Ci0gICAgICAgICAgICBpZiAodXNlV3Jh
cE1vZGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLiR3cmFwRGF0YSA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy4kd3Jh
cERhdGEucHVzaChbXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMu
JHVwZGF0ZVdyYXBEYXRhKDAsIGxlbiAtIDEpOwotICAgICAgICAgICAgfQorICAgIHRoaXMuZ2V0
QVdvcmRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciB3b3JkUmFu
Z2UgPSB0aGlzLmdldFdvcmRSYW5nZShyb3csIGNvbHVtbik7CisgICAgICAgIHZhciBsaW5lID0g
dGhpcy5nZXRMaW5lKHdvcmRSYW5nZS5lbmQucm93KTsKIAotICAgICAgICAgICAgdGhpcy5fZW1p
dCgiY2hhbmdlV3JhcE1vZGUiKTsKKyAgICAgICAgd2hpbGUgKGxpbmUuY2hhckF0KHdvcmRSYW5n
ZS5lbmQuY29sdW1uKS5tYXRjaCgvWyBcdF0vKSkgeworICAgICAgICAgICAgd29yZFJhbmdlLmVu
ZC5jb2x1bW4gKz0gMTsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gd29yZFJhbmdlOwogICAg
IH07Ci0gICAgdGhpcy5nZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1
cm4gdGhpcy4kdXNlV3JhcE1vZGU7CisgICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9u
KG5ld0xpbmVNb2RlKSB7CisgICAgICAgIHRoaXMuZG9jLnNldE5ld0xpbmVNb2RlKG5ld0xpbmVN
b2RlKTsKICAgICB9OwotICAgIHRoaXMuc2V0V3JhcExpbWl0UmFuZ2UgPSBmdW5jdGlvbihtaW4s
IG1heCkgewotICAgICAgICBpZiAodGhpcy4kd3JhcExpbWl0UmFuZ2UubWluICE9PSBtaW4gfHwg
dGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4ICE9PSBtYXgpIHsKLSAgICAgICAgICAgIHRoaXMuJHdy
YXBMaW1pdFJhbmdlLm1pbiA9IG1pbjsKLSAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdl
Lm1heCA9IG1heDsKLSAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHRoaXMuX2VtaXQoImNoYW5nZVdyYXBNb2RlIik7Ci0gICAgICAgIH0KKyAgICB0aGlzLmdl
dE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRO
ZXdMaW5lTW9kZSgpOwogICAgIH07Ci0gICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlv
bihkZXNpcmVkTGltaXQpIHsKLSAgICAgICAgdmFyIHdyYXBMaW1pdCA9IHRoaXMuJGNvbnN0cmFp
bldyYXBMaW1pdChkZXNpcmVkTGltaXQpOwotICAgICAgICBpZiAod3JhcExpbWl0ICE9IHRoaXMu
JHdyYXBMaW1pdCAmJiB3cmFwTGltaXQgPiAwKSB7Ci0gICAgICAgICAgICB0aGlzLiR3cmFwTGlt
aXQgPSB3cmFwTGltaXQ7Ci0gICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7Ci0gICAg
ICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLiR1
cGRhdGVXcmFwRGF0YSgwLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICAgICAg
dGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFu
Z2VXcmFwTGltaXQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0aGlzLnNldFVzZVdvcmtlciA9
IGZ1bmN0aW9uKHVzZVdvcmtlcikgeyB0aGlzLnNldE9wdGlvbigidXNlV29ya2VyIiwgdXNlV29y
a2VyKTsgfTsKKyAgICB0aGlzLmdldFVzZVdvcmtlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhp
cy4kdXNlV29ya2VyOyB9OworICAgIHRoaXMub25SZWxvYWRUb2tlbml6ZXIgPSBmdW5jdGlvbihl
KSB7CisgICAgICAgIHZhciByb3dzID0gZS5kYXRhOworICAgICAgICB0aGlzLmJnVG9rZW5pemVy
LnN0YXJ0KHJvd3MuZmlyc3QpOworICAgICAgICB0aGlzLl9lbWl0KCJ0b2tlbml6ZXJVcGRhdGUi
LCBlKTsKICAgICB9OwogCi0gICAgdGhpcy4kY29uc3RyYWluV3JhcExpbWl0ID0gZnVuY3Rpb24o
d3JhcExpbWl0KSB7Ci0gICAgICAgIHZhciBtaW4gPSB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW47
Ci0gICAgICAgIGlmIChtaW4pCi0gICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1heChtaW4s
IHdyYXBMaW1pdCk7CisgICAgdGhpcy4kbW9kZXMgPSB7fTsKKyAgICB0aGlzLiRtb2RlID0gbnVs
bDsKKyAgICB0aGlzLiRtb2RlSWQgPSBudWxsOworICAgIHRoaXMuc2V0TW9kZSA9IGZ1bmN0aW9u
KG1vZGUpIHsKKyAgICAgICAgaWYgKG1vZGUgJiYgdHlwZW9mIG1vZGUgPT09ICJvYmplY3QiKSB7
CisgICAgICAgICAgICBpZiAobW9kZS5nZXRUb2tlbml6ZXIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuJG9uQ2hhbmdlTW9kZShtb2RlKTsKKyAgICAgICAgICAgIHZhciBvcHRpb25zID0g
bW9kZTsKKyAgICAgICAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5wYXRoOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcGF0aCA9IG1vZGUgfHwgImFjZS9tb2RlL3RleHQiOworICAgICAg
ICB9CisgICAgICAgIGlmICghdGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSkKKyAgICAgICAg
ICAgIHRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0gPSBuZXcgVGV4dE1vZGUoKTsKIAotICAg
ICAgICB2YXIgbWF4ID0gdGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4OwotICAgICAgICBpZiAobWF4
KQotICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5taW4obWF4LCB3cmFwTGltaXQpOwotICAg
ICAgICByZXR1cm4gTWF0aC5tYXgoMSwgd3JhcExpbWl0KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0
V3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR3cmFwTGltaXQ7
Ci0gICAgfTsKLSAgICB0aGlzLmdldFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICBtaW4gOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4s
Ci0gICAgICAgICAgICBtYXggOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXgKLSAgICAgICAgfTsK
KyAgICAgICAgaWYgKHRoaXMuJG1vZGVzW3BhdGhdICYmICFvcHRpb25zKQorICAgICAgICAgICAg
cmV0dXJuIHRoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7CisgICAgICAgIHRo
aXMuJG1vZGVJZCA9IHBhdGg7CisgICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsibW9kZSIsIHBh
dGhdLCBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZiAodGhpcy4kbW9kZUlkICE9PSBwYXRo
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICh0aGlzLiRtb2Rlc1tw
YXRoXSAmJiAhb3B0aW9ucykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb25DaGFuZ2VN
b2RlKHRoaXMuJG1vZGVzW3BhdGhdKTsKKyAgICAgICAgICAgIGlmIChtICYmIG0uTW9kZSkgewor
ICAgICAgICAgICAgICAgIG0gPSBuZXcgbS5Nb2RlKG9wdGlvbnMpOworICAgICAgICAgICAgICAg
IGlmICghb3B0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLiRtb2Rlc1twYXRoXSA9
IG07CisgICAgICAgICAgICAgICAgICAgIG0uJGlkID0gcGF0aDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VNb2RlKG0pCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0uYmluZCh0aGlzKSk7CisgICAgICAgIGlmICghdGhpcy4kbW9kZSkKKyAgICAgICAg
ICAgIHRoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdLCB0cnVl
KTsKICAgICB9OwogCi0gICAgdGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UgPSBmdW5j
dGlvbihlKSB7Ci0gICAgICAgIHZhciB1c2VXcmFwTW9kZSA9IHRoaXMuJHVzZVdyYXBNb2RlOwot
ICAgICAgICB2YXIgbGVuOwotICAgICAgICB2YXIgYWN0aW9uID0gZS5kYXRhLmFjdGlvbjsKLSAg
ICAgICAgdmFyIGZpcnN0Um93ID0gZS5kYXRhLnJhbmdlLnN0YXJ0LnJvdzsKLSAgICAgICAgdmFy
IGxhc3RSb3cgPSBlLmRhdGEucmFuZ2UuZW5kLnJvdzsKLSAgICAgICAgdmFyIHN0YXJ0ID0gZS5k
YXRhLnJhbmdlLnN0YXJ0OwotICAgICAgICB2YXIgZW5kID0gZS5kYXRhLnJhbmdlLmVuZDsKLSAg
ICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9IG51bGw7CisgICAgdGhpcy4kb25DaGFuZ2VNb2RlID0g
ZnVuY3Rpb24obW9kZSwgJGlzUGxhY2Vob2xkZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuJG1vZGUg
PT09IG1vZGUpIHJldHVybjsKKyAgICAgICAgdGhpcy4kbW9kZSA9IG1vZGU7CiAKLSAgICAgICAg
aWYgKGFjdGlvbi5pbmRleE9mKCJMaW5lcyIpICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoYWN0
aW9uID09ICJpbnNlcnRMaW5lcyIpIHsKLSAgICAgICAgICAgICAgICBsYXN0Um93ID0gZmlyc3RS
b3cgKyAoZS5kYXRhLmxpbmVzLmxlbmd0aCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGxlbiA9IGUuZGF0YS5saW5lcyA/IGUuZGF0YS5saW5lcy5sZW5ndGggOiBsYXN0Um93IC0gZmly
c3RSb3c7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsZW4gPSBsYXN0Um93IC0gZmly
c3RSb3c7Ci0gICAgICAgIH0KKyAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOwogCi0gICAgICAg
IGlmIChsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKGFjdGlvbi5pbmRleE9mKCJyZW1vdmUi
KSAhPSAtMSkgewotICAgICAgICAgICAgICAgIHRoaXNbdXNlV3JhcE1vZGUgPyAiJHdyYXBEYXRh
IiA6ICIkcm93TGVuZ3RoQ2FjaGUiXS5zcGxpY2UoZmlyc3RSb3csIGxlbik7CisgICAgICAgIGlm
ICh0aGlzLiR1c2VXb3JrZXIpCisgICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOwogCi0g
ICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOwotICAgICAgICAg
ICAgICAgIHJlbW92ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUuZGF0YS5yYW5nZSk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOwotCi0gICAg
ICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShlbmQucm93KTsKLSAg
ICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZW5kLnJvdywg
ZW5kLmNvbHVtbiwgc3RhcnQuY29sdW1uIC0gZW5kLmNvbHVtbik7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvbGRMaW5lLnNoaWZ0Um93KC1sZW4pOworICAgICAgICB2YXIgdG9rZW5pemVyID0gbW9k
ZS5nZXRUb2tlbml6ZXIoKTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVCZWZv
cmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGZvbGRMaW5lQmVmb3JlICYmIGZvbGRMaW5lQmVmb3JlICE9PSBmb2xkTGluZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9sZExpbmVCZWZvcmUubWVyZ2UoZm9sZExpbmUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZUJlZm9yZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhPZihm
b2xkTGluZSkgKyAxOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYodG9rZW5pemVyLmFk
ZEV2ZW50TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdmFyIG9uUmVsb2Fk
VG9rZW5pemVyID0gdGhpcy5vblJlbG9hZFRva2VuaXplci5iaW5kKHRoaXMpOworICAgICAgICAg
ICAgdG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZSIsIG9uUmVsb2FkVG9rZW5pemVy
KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZm9yIChpZHg7IGlkeCA8IGZvbGRMaW5l
cy5sZW5ndGg7IGlkeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZv
bGRMaW5lc1tpZHhdOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93
ID49IGVuZC5yb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93
KC1sZW4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICBpZiAoIXRoaXMuYmdUb2tlbml6ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIg
PSBuZXcgQmFja2dyb3VuZFRva2VuaXplcih0b2tlbml6ZXIpOworICAgICAgICAgICAgdmFyIF9z
ZWxmID0gdGhpczsKKyAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5l
cigidXBkYXRlIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgIF9zZWxmLl9lbWl0KCJ0
b2tlbml6ZXJVcGRhdGUiLCBlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXRUb2tlbml6ZXIodG9rZW5pemVyKTsKKyAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgbGFzdFJvdyA9IGZpcnN0Um93OwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJnczsKLSAgICAgICAgICAgICAgICBp
ZiAodXNlV3JhcE1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtmaXJzdFJvdywg
MF07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFy
Z3MucHVzaChbXSk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBEYXRhLnNwbGljZS5h
cHBseSh0aGlzLiR3cmFwRGF0YSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbik7Ci0gICAgICAgICAgICAgICAgICAg
IGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJv
d0xlbmd0aENhY2hlLnNwbGljZS5hcHBseSh0aGlzLiRyb3dMZW5ndGhDYWNoZSwgYXJncyk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRm
b2xkRGF0YTsKLSAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5l
KGZpcnN0Um93KTsKLSAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsKLSAgICAgICAgICAgICAg
ICBpZiAoZm9sZExpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNtcCA9IGZvbGRMaW5l
LnJhbmdlLmNvbXBhcmVJbnNpZGUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChjbXAgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExp
bmUgPSBmb2xkTGluZS5zcGxpdChzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhsZW4pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdFJvdywgMCwgZW5kLmNvbHVtbiAtIHN0YXJ0LmNvbHVtbik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhmaXJzdFJvdywgMCwg
ZW5kLmNvbHVtbiAtIHN0YXJ0LmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb2xk
TGluZS5zaGlmdFJvdyhsZW4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlkeCA9IGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5lKSArIDE7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0RG9j
dW1lbnQoKSk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKGlkeDsgaWR4IDwgZm9sZExpbmVzLmxl
bmd0aDsgaWR4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZExp
bmVzW2lkeF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZS5zdGFydC5yb3cgPj0g
Zmlyc3RSb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KGxl
bik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsZW4gPSBNYXRoLmFicyhlLmRhdGEu
cmFuZ2Uuc3RhcnQuY29sdW1uIC0gZS5kYXRhLnJhbmdlLmVuZC5jb2x1bW4pOwotICAgICAgICAg
ICAgaWYgKGFjdGlvbi5pbmRleE9mKCJyZW1vdmUiKSAhPSAtMSkgewotICAgICAgICAgICAgICAg
IHJlbW92ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUuZGF0YS5yYW5nZSk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOworICAgICAgICB0aGlz
LnRva2VuUmUgPSBtb2RlLnRva2VuUmU7CisgICAgICAgIHRoaXMubm9uVG9rZW5SZSA9IG1vZGUu
bm9uVG9rZW5SZTsKIAotICAgICAgICAgICAgICAgIGxlbiA9IC1sZW47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsK
LSAgICAgICAgICAgIGlmIChmb2xkTGluZSkgewotICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFk
ZFJlbW92ZUNoYXJzKGZpcnN0Um93LCBzdGFydC5jb2x1bW4sIGxlbik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAodXNlV3JhcE1vZGUgJiYgdGhpcy4kd3JhcERhdGEu
bGVuZ3RoICE9IHRoaXMuZG9jLmdldExlbmd0aCgpKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJkb2MuZ2V0TGVuZ3RoKCkgYW5kICR3cmFwRGF0YS5sZW5ndGggaGF2ZSB0byBiZSB0aGUg
c2FtZSEiKTsKKyAgICAgICAgaWYgKCEkaXNQbGFjZWhvbGRlcikgeworICAgICAgICAgICAgdGhp
cy4kbW9kZUlkID0gbW9kZS4kaWQ7CisgICAgICAgICAgICB0aGlzLiRzZXRGb2xkaW5nKG1vZGUu
Zm9sZGluZ1J1bGVzKTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZU1vZGUiKTsKKyAg
ICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCk7CiAgICAgICAgIH0KKyAgICB9Owog
Ci0gICAgICAgIGlmICh1c2VXcmFwTW9kZSkKLSAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBE
YXRhKGZpcnN0Um93LCBsYXN0Um93KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy4k
dXBkYXRlUm93TGVuZ3RoQ2FjaGUoZmlyc3RSb3csIGxhc3RSb3cpOwogCi0gICAgICAgIHJldHVy
biByZW1vdmVkRm9sZHM7Ci0gICAgfTsKKyAgICB0aGlzLiRzdG9wV29ya2VyID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh0aGlzLiR3b3JrZXIpCisgICAgICAgICAgICB0aGlzLiR3b3JrZXIu
dGVybWluYXRlKCk7CiAKLSAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZSA9IGZ1bmN0aW9u
KGZpcnN0Um93LCBsYXN0Um93LCBiKSB7Ci0gICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlW2Zp
cnN0Um93XSA9IG51bGw7Ci0gICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlW2xhc3RSb3ddID0g
bnVsbDsKKyAgICAgICAgdGhpcy4kd29ya2VyID0gbnVsbDsKICAgICB9OwogCi0gICAgdGhpcy4k
dXBkYXRlV3JhcERhdGEgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewotICAgICAgICB2
YXIgbGluZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpOwotICAgICAgICB2YXIgdGFiU2l6ZSA9
IHRoaXMuZ2V0VGFiU2l6ZSgpOwotICAgICAgICB2YXIgd3JhcERhdGEgPSB0aGlzLiR3cmFwRGF0
YTsKLSAgICAgICAgdmFyIHdyYXBMaW1pdCA9IHRoaXMuJHdyYXBMaW1pdDsKLSAgICAgICAgdmFy
IHRva2VuczsKLSAgICAgICAgdmFyIGZvbGRMaW5lOwotCi0gICAgICAgIHZhciByb3cgPSBmaXJz
dFJvdzsKLSAgICAgICAgbGFzdFJvdyA9IE1hdGgubWluKGxhc3RSb3csIGxpbmVzLmxlbmd0aCAt
IDEpOwotICAgICAgICB3aGlsZSAocm93IDw9IGxhc3RSb3cpIHsKLSAgICAgICAgICAgIGZvbGRM
aW5lID0gdGhpcy5nZXRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKLSAgICAgICAgICAgIGlmICgh
Zm9sZExpbmUpIHsKLSAgICAgICAgICAgICAgICB0b2tlbnMgPSB0aGlzLiRnZXREaXNwbGF5VG9r
ZW5zKGxhbmcuc3RyaW5nVHJpbVJpZ2h0KGxpbmVzW3Jvd10pKTsKLSAgICAgICAgICAgICAgICB3
cmFwRGF0YVtyb3ddID0gdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHModG9rZW5zLCB3cmFwTGltaXQs
IHRhYlNpemUpOwotICAgICAgICAgICAgICAgIHJvdyArKzsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgdG9rZW5zID0gW107Ci0gICAgICAgICAgICAgICAgZm9sZExpbmUu
d2FsayhmdW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB3YWxrVG9rZW5zOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBsYWNlaG9sZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIsIHRva2Vucy5sZW5ndGgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnNbMF0gPSBQTEFDRUhPTERF
Ul9TVEFSVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8
IHdhbGtUb2tlbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2Fsa1Rva2Vuc1tpXSA9IFBMQUNFSE9MREVSX0JPRFk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbcm93XS5zdWJzdHJpbmcobGFzdENv
bHVtbiwgY29sdW1uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLmxl
bmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbnMgPSB0b2tlbnMuY29uY2F0KHdhbGtUb2tlbnMpOwotICAgICAgICAgICAgICAgICAg
ICB9LmJpbmQodGhpcyksCi0gICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmVuZC5yb3csCi0g
ICAgICAgICAgICAgICAgICAgIGxpbmVzW2ZvbGRMaW5lLmVuZC5yb3ddLmxlbmd0aCArIDEKLSAg
ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoICE9
IDAgJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA+PSBTUEFDRSkKLSAgICAgICAgICAgICAg
ICAgICAgdG9rZW5zLnBvcCgpOwogCi0gICAgICAgICAgICAgICAgd3JhcERhdGFbZm9sZExpbmUu
c3RhcnQucm93XQotICAgICAgICAgICAgICAgICAgICA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRz
KHRva2Vucywgd3JhcExpbWl0LCB0YWJTaXplKTsKLSAgICAgICAgICAgICAgICByb3cgPSBmb2xk
TGluZS5lbmQucm93ICsgMTsKKyAgICB0aGlzLiRzdGFydFdvcmtlciA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gInVuZGVmaW5lZCIgJiYgIXJlcXVpcmUubm9X
b3JrZXIpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdGhpcy4kd29ya2Vy
ID0gdGhpcy4kbW9kZS5jcmVhdGVXb3JrZXIodGhpcyk7CisgICAgICAgICAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkNvdWxkIG5vdCBsb2FkIHdvcmtlciIp
OworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOworICAgICAgICAgICAgICAgIHRoaXMu
JHdvcmtlciA9IG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGhpcy4kd29ya2VyID0gbnVsbDsKKyAgICB9OworICAgIHRoaXMuZ2V0TW9k
ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kbW9kZTsKICAgICB9OwotICAg
IHZhciBDSEFSID0gMSwKLSAgICAgICAgQ0hBUl9FWFQgPSAyLAotICAgICAgICBQTEFDRUhPTERF
Ul9TVEFSVCA9IDMsCi0gICAgICAgIFBMQUNFSE9MREVSX0JPRFkgPSAgNCwKLSAgICAgICAgUFVO
Q1RVQVRJT04gPSA5LAotICAgICAgICBTUEFDRSA9IDEwLAotICAgICAgICBUQUIgPSAxMSwKLSAg
ICAgICAgVEFCX1NQQUNFID0gMTI7CiAKKyAgICB0aGlzLiRzY3JvbGxUb3AgPSAwOworICAgIHRo
aXMuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24oc2Nyb2xsVG9wKSB7CisgICAgICAgIHNjcm9sbFRv
cCA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKSk7CisgICAgICAgIGlmICh0aGlz
LiRzY3JvbGxUb3AgPT09IHNjcm9sbFRvcCB8fCBpc05hTihzY3JvbGxUb3ApKQorICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHMgPSBmdW5jdGlvbih0b2tl
bnMsIHdyYXBMaW1pdCkgewotICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PSAwKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gW107Ci0gICAgICAgIH0KKyAgICAgICAgdGhpcy4kc2Nyb2xsVG9wID0g
c2Nyb2xsVG9wOworICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZVNjcm9sbFRvcCIsIHNjcm9s
bFRvcCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy4kc2Nyb2xsVG9wOworICAgIH07CiAKLSAgICAgICAgdmFyIHNwbGl0
cyA9IFtdOwotICAgICAgICB2YXIgZGlzcGxheUxlbmd0aCA9IHRva2Vucy5sZW5ndGg7Ci0gICAg
ICAgIHZhciBsYXN0U3BsaXQgPSAwLCBsYXN0RG9jU3BsaXQgPSAwOworICAgIHRoaXMuJHNjcm9s
bExlZnQgPSAwOworICAgIHRoaXMuc2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKHNjcm9sbExlZnQp
IHsKKyAgICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgc2Nyb2xsTGVm
dCkpOworICAgICAgICBpZiAodGhpcy4kc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCB8fCBpc05h
TihzY3JvbGxMZWZ0KSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBmdW5jdGlvbiBh
ZGRTcGxpdChzY3JlZW5Qb3MpIHsKLSAgICAgICAgICAgIHZhciBkaXNwbGF5ZWQgPSB0b2tlbnMu
c2xpY2UobGFzdFNwbGl0LCBzY3JlZW5Qb3MpOwotICAgICAgICAgICAgdmFyIGxlbiA9IGRpc3Bs
YXllZC5sZW5ndGg7Ci0gICAgICAgICAgICBkaXNwbGF5ZWQuam9pbigiIikuCi0gICAgICAgICAg
ICAgICAgcmVwbGFjZSgvMTIvZywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxl
biAtPSAxOwotICAgICAgICAgICAgICAgIH0pLgotICAgICAgICAgICAgICAgIHJlcGxhY2UoLzIv
ZywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiAtPSAxOwotICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB0aGlzLiRzY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKKyAgICAg
ICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VTY3JvbGxMZWZ0Iiwgc2Nyb2xsTGVmdCk7CisgICAgfTsK
KyAgICB0aGlzLmdldFNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJHNjcm9sbExlZnQ7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcmVlbldpZHRoID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMuJGNvbXB1dGVXaWR0aCgpOworICAgICAgICByZXR1cm4gdGhp
cy5zY3JlZW5XaWR0aDsKKyAgICB9OwogCi0gICAgICAgICAgICBsYXN0RG9jU3BsaXQgKz0gbGVu
OwotICAgICAgICAgICAgc3BsaXRzLnB1c2gobGFzdERvY1NwbGl0KTsKLSAgICAgICAgICAgIGxh
c3RTcGxpdCA9IHNjcmVlblBvczsKLSAgICAgICAgfQorICAgIHRoaXMuJGNvbXB1dGVXaWR0aCA9
IGZ1bmN0aW9uKGZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLiRtb2RpZmllZCB8fCBmb3JjZSkg
eworICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSBmYWxzZTsKIAotICAgICAgICB3aGlsZSAo
ZGlzcGxheUxlbmd0aCAtIGxhc3RTcGxpdCA+IHdyYXBMaW1pdCkgewotICAgICAgICAgICAgdmFy
IHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0OwotICAgICAgICAgICAgaWYgKHRva2Vuc1tz
cGxpdF0gPj0gU1BBQ0UpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW5zW3NwbGl0XSA+
PSBTUEFDRSkgewotICAgICAgICAgICAgICAgICAgICBzcGxpdCArKzsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPT0g
UExBQ0VIT0xERVJfU1RBUlQKLSAgICAgICAgICAgICAgICB8fCB0b2tlbnNbc3BsaXRdID09IFBM
QUNFSE9MREVSX0JPRFkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChzcGxp
dDsgc3BsaXQgIT0gbGFzdFNwbGl0IC0gMTsgc3BsaXQtLSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAodG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9TVEFSVCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuJHVzZVdyYXBNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjcmVl
bldpZHRoID0gdGhpcy4kd3JhcExpbWl0OworCisgICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlz
LmRvYy5nZXRBbGxMaW5lcygpOworICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy4kcm93TGVu
Z3RoQ2FjaGU7CisgICAgICAgICAgICB2YXIgbG9uZ2VzdFNjcmVlbkxpbmUgPSAwOworICAgICAg
ICAgICAgdmFyIGZvbGRJbmRleCA9IDA7CisgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlz
LiRmb2xkRGF0YVtmb2xkSW5kZXhdOworICAgICAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRM
aW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAgICB2YXIgbGVu
ID0gbGluZXMubGVuZ3RoOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsg
aSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaSA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOworICAgICAgICAgICAgICAgICAgICBp
ZiAoaSA+PSBsZW4pCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3BsaXQg
PiBsYXN0U3BsaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUg
PSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgIGZvbGRT
dGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0
OwotICAgICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0IDwgdG9rZW5zLmxlbmd0aDsgc3Bs
aXQrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSAhPSBQTEFDRUhP
TERFUl9CT0RZKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoc3BsaXQgPT0gdG9rZW5zLmxlbmd0aCkgewotICAgICAgICAgICAgICAg
ICAgICBicmVhazsgIC8vIEJyZWFrcyB0aGUgd2hpbGUtbG9vcC4KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1pblNwbGl0ID0gTWF0aC5tYXgo
c3BsaXQgLSAxMCwgbGFzdFNwbGl0IC0gMSk7Ci0gICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBt
aW5TcGxpdCAmJiB0b2tlbnNbc3BsaXRdIDwgUExBQ0VIT0xERVJfU1RBUlQpIHsKLSAgICAgICAg
ICAgICAgICBzcGxpdCAtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlIChzcGxp
dCA+IG1pblNwbGl0ICYmIHRva2Vuc1tzcGxpdF0gPT0gUFVOQ1RVQVRJT04pIHsKLSAgICAgICAg
ICAgICAgICBzcGxpdCAtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcGxpdCA+
IG1pblNwbGl0KSB7Ci0gICAgICAgICAgICAgICAgYWRkU3BsaXQoKytzcGxpdCk7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcGxpdCA9IGxh
c3RTcGxpdCArIHdyYXBMaW1pdDsKLSAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gc3BsaXRzOwotICAgIH07Ci0gICAgdGhpcy4kZ2V0RGlzcGxh
eVRva2VucyA9IGZ1bmN0aW9uKHN0ciwgb2Zmc2V0KSB7Ci0gICAgICAgIHZhciBhcnIgPSBbXTsK
LSAgICAgICAgdmFyIHRhYlNpemU7Ci0gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwOwogCi0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOwotICAgICAgICAgICAgaWYgKGMgPT0gOSkgewot
ICAgICAgICAgICAgICAgIHRhYlNpemUgPSB0aGlzLmdldFNjcmVlblRhYlNpemUoYXJyLmxlbmd0
aCArIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYXJyLnB1c2goVEFCKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBuID0gMTsgbiA8IHRhYlNpemU7IG4rKykgewotICAgICAgICAgICAgICAg
ICAgICBhcnIucHVzaChUQUJfU1BBQ0UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMzIpIHsKLSAgICAgICAgICAgICAgICBhcnIu
cHVzaChTUEFDRSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYoKGMgPiAzOSAmJiBjIDwgNDgpIHx8
IChjID4gNTcgJiYgYyA8IDY0KSkgewotICAgICAgICAgICAgICAgIGFyci5wdXNoKFBVTkNUVUFU
SU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMTAwICYm
IGlzRnVsbFdpZHRoKGMpKSB7Ci0gICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUiwgQ0hBUl9F
WFQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhcnIucHVzaChDSEFS
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXJyOwotICAgIH07
Ci0gICAgdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGggPSBmdW5jdGlvbihzdHIsIG1heFNjcmVl
bkNvbHVtbiwgc2NyZWVuQ29sdW1uKSB7Ci0gICAgICAgIGlmIChtYXhTY3JlZW5Db2x1bW4gPT0g
MCkKLSAgICAgICAgICAgIHJldHVybiBbMCwgMF07Ci0gICAgICAgIGlmIChtYXhTY3JlZW5Db2x1
bW4gPT0gbnVsbCkKLSAgICAgICAgICAgIG1heFNjcmVlbkNvbHVtbiA9IEluZmluaXR5OwotICAg
ICAgICBzY3JlZW5Db2x1bW4gPSBzY3JlZW5Db2x1bW4gfHwgMDsKKyAgICAgICAgICAgICAgICBp
ZiAoY2FjaGVbaV0gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVbaV0gPSB0aGlz
LiRnZXRTdHJpbmdTY3JlZW5XaWR0aChsaW5lc1tpXSlbMF07CiAKLSAgICAgICAgdmFyIGMsIGNv
bHVtbjsKLSAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1
bW4rKykgewotICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7Ci0gICAgICAg
ICAgICBpZiAoYyA9PSA5KSB7Ci0gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMu
Z2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAoYyA+PSAweDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHsKLSAgICAgICAgICAg
ICAgICBzY3JlZW5Db2x1bW4gKz0gMjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc2NyZWVuQ29sdW1uICs9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
c2NyZWVuQ29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgaWYgKGNhY2hlW2ldID4gbG9uZ2VzdFNjcmVlbkxpbmUpCisgICAg
ICAgICAgICAgICAgICAgIGxvbmdlc3RTY3JlZW5MaW5lID0gY2FjaGVbaV07CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLnNjcmVlbldpZHRoID0gbG9uZ2VzdFNjcmVlbkxpbmU7CiAg
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gW3NjcmVlbkNvbHVtbiwgY29sdW1uXTsKICAgICB9
OwotICAgIHRoaXMuZ2V0Um93TGVuZ3RoID0gZnVuY3Rpb24ocm93KSB7Ci0gICAgICAgIGlmICgh
dGhpcy4kdXNlV3JhcE1vZGUgfHwgIXRoaXMuJHdyYXBEYXRhW3Jvd10pIHsKLSAgICAgICAgICAg
IHJldHVybiAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHdy
YXBEYXRhW3Jvd10ubGVuZ3RoICsgMTsKLSAgICAgICAgfQorICAgIHRoaXMuZ2V0TGluZSA9IGZ1
bmN0aW9uKHJvdykgeworICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGluZShyb3cpOwogICAg
IH07Ci0gICAgdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93
KSB7Ci0gICAgICAgIHZhciBwb3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3Jl
ZW5Sb3csIE51bWJlci5NQVhfVkFMVUUpOwotICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRv
U2NyZWVuQ29sdW1uKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgIHRoaXMuZ2V0TGluZXMgPSBm
dW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0
TGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgIH07Ci0gICAgdGhpcy5nZXREb2N1bWVudExh
c3RSb3dDb2x1bW4gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewotICAgICAgICB2YXIg
c2NyZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29sdW1uKTsK
LSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihzY3JlZW5Sb3cpOwor
ICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRv
Yy5nZXRMZW5ndGgoKTsKICAgICB9OwotICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1u
UG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewotICAgICAgICB2YXIgc2Ny
ZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29sdW1uKTsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgTnVt
YmVyLk1BWF9WQUxVRSAvIDEwKTsKKyAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJh
bmdlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UgfHwgdGhp
cy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7CiAgICAgfTsKLSAgICB0aGlzLmdldFJvd1NwbGl0RGF0
YSA9IGZ1bmN0aW9uKHJvdykgewotICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuJHdyYXBEYXRhW3Jvd107Ci0gICAgICAgIH0KKyAgICB0aGlzLmluc2Vy
dCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5p
bnNlcnQocG9zaXRpb24sIHRleHQpOwogICAgIH07Ci0gICAgdGhpcy5nZXRTY3JlZW5UYWJTaXpl
ID0gZnVuY3Rpb24oc2NyZWVuQ29sdW1uKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXpl
IC0gc2NyZWVuQ29sdW1uICUgdGhpcy4kdGFiU2l6ZTsKKyAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0
aW9uKHJhbmdlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5yZW1vdmUocmFuZ2UpOwogICAg
IH07CisgICAgdGhpcy51bmRvQ2hhbmdlcyA9IGZ1bmN0aW9uKGRlbHRhcywgZG9udFNlbGVjdCkg
eworICAgICAgICBpZiAoIWRlbHRhcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CiAKLQot
ICAgIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFJvdyA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVu
Q29sdW1uKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihz
Y3JlZW5Sb3csIHNjcmVlbkNvbHVtbikucm93OworICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IHRy
dWU7CisgICAgICAgIHZhciBsYXN0VW5kb1JhbmdlID0gbnVsbDsKKyAgICAgICAgZm9yICh2YXIg
aSA9IGRlbHRhcy5sZW5ndGggLSAxOyBpICE9IC0xOyBpLS0pIHsKKyAgICAgICAgICAgIHZhciBk
ZWx0YSA9IGRlbHRhc1tpXTsKKyAgICAgICAgICAgIGlmIChkZWx0YS5ncm91cCA9PSAiZG9jIikg
eworICAgICAgICAgICAgICAgIHRoaXMuZG9jLnJldmVydERlbHRhcyhkZWx0YS5kZWx0YXMpOwor
ICAgICAgICAgICAgICAgIGxhc3RVbmRvUmFuZ2UgPQorICAgICAgICAgICAgICAgICAgICB0aGlz
LiRnZXRVbmRvU2VsZWN0aW9uKGRlbHRhLmRlbHRhcywgdHJ1ZSwgbGFzdFVuZG9SYW5nZSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbHRhLmRlbHRhcy5mb3JFYWNo
KGZ1bmN0aW9uKGZvbGREZWx0YSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEZvbGRz
KGZvbGREZWx0YS5mb2xkcyk7CisgICAgICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy4kZnJvbVVuZG8gPSBmYWxzZTsKKyAgICAgICAg
bGFzdFVuZG9SYW5nZSAmJgorICAgICAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCAmJgorICAgICAg
ICAgICAgIWRvbnRTZWxlY3QgJiYKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVj
dGlvblJhbmdlKGxhc3RVbmRvUmFuZ2UpOworICAgICAgICByZXR1cm4gbGFzdFVuZG9SYW5nZTsK
ICAgICB9OworICAgIHRoaXMucmVkb0NoYW5nZXMgPSBmdW5jdGlvbihkZWx0YXMsIGRvbnRTZWxl
Y3QpIHsKKyAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwog
Ci0KLSAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRDb2x1bW4gPSBmdW5jdGlvbihzY3JlZW5Sb3cs
IHNjcmVlbkNvbHVtbikgewotICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9z
aXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLmNvbHVtbjsKKyAgICAgICAgdGhpcy4kZnJv
bVVuZG8gPSB0cnVlOworICAgICAgICB2YXIgbGFzdFVuZG9SYW5nZSA9IG51bGw7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2
YXIgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAoZGVsdGEuZ3JvdXAgPT0gImRv
YyIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmRvYy5hcHBseURlbHRhcyhkZWx0YS5kZWx0YXMp
OworICAgICAgICAgICAgICAgIGxhc3RVbmRvUmFuZ2UgPQorICAgICAgICAgICAgICAgICAgICB0
aGlzLiRnZXRVbmRvU2VsZWN0aW9uKGRlbHRhLmRlbHRhcywgZmFsc2UsIGxhc3RVbmRvUmFuZ2Up
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuJGZyb21VbmRvID0gZmFs
c2U7CisgICAgICAgIGxhc3RVbmRvUmFuZ2UgJiYKKyAgICAgICAgICAgIHRoaXMuJHVuZG9TZWxl
Y3QgJiYKKyAgICAgICAgICAgICFkb250U2VsZWN0ICYmCisgICAgICAgICAgICB0aGlzLnNlbGVj
dGlvbi5zZXRTZWxlY3Rpb25SYW5nZShsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAgcmV0dXJuIGxh
c3RVbmRvUmFuZ2U7CisgICAgfTsKKyAgICB0aGlzLnNldFVuZG9TZWxlY3QgPSBmdW5jdGlvbihl
bmFibGUpIHsKKyAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCA9IGVuYWJsZTsKICAgICB9OwotICAg
IHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3Jl
ZW5Db2x1bW4pIHsKLSAgICAgICAgaWYgKHNjcmVlblJvdyA8IDApCi0gICAgICAgICAgICByZXR1
cm4ge3JvdzogMCwgY29sdW1uOiAwfTsKIAotICAgICAgICB2YXIgbGluZTsKLSAgICAgICAgdmFy
IGRvY1JvdyA9IDA7Ci0gICAgICAgIHZhciBkb2NDb2x1bW4gPSAwOwotICAgICAgICB2YXIgY29s
dW1uOwotICAgICAgICB2YXIgcm93ID0gMDsKLSAgICAgICAgdmFyIHJvd0xlbmd0aCA9IDA7Cisg
ICAgdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbiA9IGZ1bmN0aW9uKGRlbHRhcywgaXNVbmRvLCBsYXN0
VW5kb1JhbmdlKSB7CisgICAgICAgIGZ1bmN0aW9uIGlzSW5zZXJ0KGRlbHRhKSB7CisgICAgICAg
ICAgICB2YXIgaW5zZXJ0ID0KKyAgICAgICAgICAgICAgICBkZWx0YS5hY3Rpb24gPT0gImluc2Vy
dFRleHQiIHx8IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0TGluZXMiOworICAgICAgICAgICAgcmV0
dXJuIGlzVW5kbyA/ICFpbnNlcnQgOiBpbnNlcnQ7CisgICAgICAgIH0KIAotICAgICAgICB2YXIg
cm93Q2FjaGUgPSB0aGlzLiRzY3JlZW5Sb3dDYWNoZTsKLSAgICAgICAgdmFyIGkgPSB0aGlzLiRn
ZXRSb3dDYWNoZUluZGV4KHJvd0NhY2hlLCBzY3JlZW5Sb3cpOwotICAgICAgICB2YXIgbCA9IHJv
d0NhY2hlLmxlbmd0aDsKLSAgICAgICAgaWYgKGwgJiYgaSA+PSAwKSB7Ci0gICAgICAgICAgICB2
YXIgcm93ID0gcm93Q2FjaGVbaV07Ci0gICAgICAgICAgICB2YXIgZG9jUm93ID0gdGhpcy4kZG9j
Um93Q2FjaGVbaV07Ci0gICAgICAgICAgICB2YXIgZG9DYWNoZSA9IHNjcmVlblJvdyA+IHJvd0Nh
Y2hlW2wgLSAxXTsKKyAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzWzBdOworICAgICAgICB2YXIg
cmFuZ2UsIHBvaW50OworICAgICAgICB2YXIgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGlzSW5zZXJ0KGRlbHRhKSkgeworICAgICAgICAgICAgcmFuZ2UgPSBkZWx0YS5y
YW5nZS5jbG9uZSgpOworICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSAhbDsKKyAgICAgICAgICAg
IHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5yYW5nZS5zdGFydCwgZGVsdGEucmFuZ2Uu
c3RhcnQpOworICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKICAgICAgICAg
fQogCi0gICAgICAgIHZhciBtYXhSb3cgPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKLSAgICAgICAg
dmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUoZG9jUm93KTsKLSAgICAgICAgdmFy
IGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7Ci0K
LSAgICAgICAgd2hpbGUgKHJvdyA8PSBzY3JlZW5Sb3cpIHsKLSAgICAgICAgICAgIHJvd0xlbmd0
aCA9IHRoaXMuZ2V0Um93TGVuZ3RoKGRvY1Jvdyk7Ci0gICAgICAgICAgICBpZiAocm93ICsgcm93
TGVuZ3RoIC0gMSA+PSBzY3JlZW5Sb3cgfHwgZG9jUm93ID49IG1heFJvdykgewotICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGRlbHRhcy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAo
aXNJbnNlcnQoZGVsdGEpKSB7CisgICAgICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5yYW5nZS5z
dGFydDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50
LmNvbHVtbikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoZGVs
dGEucmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb2lu
dCA9IGRlbHRhLnJhbmdlLmVuZDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShw
b2ludC5yb3csIHBvaW50LmNvbHVtbikgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICByYW5n
ZS5zZXRFbmQoZGVsdGEucmFuZ2UuZW5kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICByb3cgKz0gcm93TGVuZ3RoOwotICAgICAgICAgICAgICAgIGRvY1Jvdysr
OwotICAgICAgICAgICAgICAgIGlmIChkb2NSb3cgPiBmb2xkU3RhcnQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZG9jUm93ID0gZm9sZExpbmUuZW5kLnJvdysxOwotICAgICAgICAgICAgICAgICAg
ICBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1JvdywgZm9sZExpbmUpOwotICAg
ICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJv
dyA6IEluZmluaXR5OworICAgICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2Uuc3RhcnQ7
CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmUocG9pbnQucm93LCBwb2ludC5jb2x1
bW4pID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJhbmdlLmZyb21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdl
LnN0YXJ0KTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdERlbHRhSXNJ
bnNlcnQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGRvQ2FjaGUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKGRv
Y1Jvdyk7Ci0gICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChyb3cpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvbGRMaW5lICYmIGZvbGRM
aW5lLnN0YXJ0LnJvdyA8PSBkb2NSb3cpIHsKLSAgICAgICAgICAgIGxpbmUgPSB0aGlzLmdldEZv
bGREaXNwbGF5TGluZShmb2xkTGluZSk7Ci0gICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5z
dGFydC5yb3c7Ci0gICAgICAgIH0gZWxzZSBpZiAocm93ICsgcm93TGVuZ3RoIDw9IHNjcmVlblJv
dyB8fCBkb2NSb3cgPiBtYXhSb3cpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgcm93OiBtYXhSb3csCi0gICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmdldExpbmUo
bWF4Um93KS5sZW5ndGgKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGxpbmUgPSB0aGlzLmdldExpbmUoZG9jUm93KTsKLSAgICAgICAgICAgIGZvbGRMaW5lID0g
bnVsbDsKICAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgewotICAg
ICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMuJHdyYXBEYXRhW2RvY1Jvd107Ci0gICAgICAgICAg
ICBpZiAoc3BsaXRzKSB7Ci0gICAgICAgICAgICAgICAgY29sdW1uID0gc3BsaXRzW3NjcmVlblJv
dyAtIHJvd107Ci0gICAgICAgICAgICAgICAgaWYoc2NyZWVuUm93ID4gcm93ICYmIHNwbGl0cy5s
ZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jQ29sdW1uID0gc3BsaXRzW3NjcmVlblJv
dyAtIHJvdyAtIDFdIHx8IHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhkb2NDb2x1bW4pOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgaWYgKGxhc3RVbmRvUmFuZ2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdmFy
IGNtcCA9IGxhc3RVbmRvUmFuZ2UuY29tcGFyZVJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGlm
IChjbXAgPT0gMSkgeworICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KGxhc3RVbmRvUmFu
Z2Uuc3RhcnQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICByYW5nZS5zZXRFbmQobGFzdFVuZG9SYW5nZS5lbmQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKLSAgICAgICAgZG9jQ29sdW1uICs9IHRoaXMuJGdldFN0cmluZ1NjcmVlbldp
ZHRoKGxpbmUsIHNjcmVlbkNvbHVtbilbMV07Ci0gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9k
ZSAmJiBkb2NDb2x1bW4gPj0gY29sdW1uKQotICAgICAgICAgICAgZG9jQ29sdW1uID0gY29sdW1u
IC0gMTsKLQotICAgICAgICBpZiAoZm9sZExpbmUpCi0gICAgICAgICAgICByZXR1cm4gZm9sZExp
bmUuaWR4VG9Qb3NpdGlvbihkb2NDb2x1bW4pOwotCi0gICAgICAgIHJldHVybiB7cm93OiBkb2NS
b3csIGNvbHVtbjogZG9jQ29sdW1ufTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH07Ci0g
ICAgdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0Nv
bHVtbikgewotICAgICAgICBpZiAodHlwZW9mIGRvY0NvbHVtbiA9PT0gInVuZGVmaW5lZCIpCi0g
ICAgICAgICAgICB2YXIgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cu
cm93LCBkb2NSb3cuY29sdW1uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zID0gdGhp
cy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3csIGRvY0NvbHVtbik7CisgICAgdGhpcy5y
ZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHRleHQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9j
LnJlcGxhY2UocmFuZ2UsIHRleHQpOworICAgIH07CisgICAgdGhpcy5tb3ZlVGV4dCA9IGZ1bmN0
aW9uKGZyb21SYW5nZSwgdG9Qb3NpdGlvbikgeworICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0
VGV4dFJhbmdlKGZyb21SYW5nZSk7CisgICAgICAgIHRoaXMucmVtb3ZlKGZyb21SYW5nZSk7CiAK
LSAgICAgICAgZG9jUm93ID0gcG9zLnJvdzsKLSAgICAgICAgZG9jQ29sdW1uID0gcG9zLmNvbHVt
bjsKKyAgICAgICAgdmFyIHRvUm93ID0gdG9Qb3NpdGlvbi5yb3c7CisgICAgICAgIHZhciB0b0Nv
bHVtbiA9IHRvUG9zaXRpb24uY29sdW1uOworICAgICAgICBpZiAoIWZyb21SYW5nZS5pc011bHRp
TGluZSgpICYmIGZyb21SYW5nZS5zdGFydC5yb3cgPT0gdG9Sb3cgJiYKKyAgICAgICAgICAgIGZy
b21SYW5nZS5lbmQuY29sdW1uIDwgdG9Db2x1bW4pCisgICAgICAgICAgICB0b0NvbHVtbiAtPSB0
ZXh0Lmxlbmd0aDsKIAotICAgICAgICB2YXIgc2NyZWVuUm93ID0gMDsKLSAgICAgICAgdmFyIGZv
bGRTdGFydFJvdyA9IG51bGw7Ci0gICAgICAgIHZhciBmb2xkID0gbnVsbDsKLSAgICAgICAgZm9s
ZCA9IHRoaXMuZ2V0Rm9sZEF0KGRvY1JvdywgZG9jQ29sdW1uLCAxKTsKLSAgICAgICAgaWYgKGZv
bGQpIHsKLSAgICAgICAgICAgIGRvY1JvdyA9IGZvbGQuc3RhcnQucm93OwotICAgICAgICAgICAg
ZG9jQ29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47CisgICAgICAgIGlmIChmcm9tUmFuZ2UuaXNN
dWx0aUxpbmUoKSAmJiBmcm9tUmFuZ2UuZW5kLnJvdyA8IHRvUm93KSB7CisgICAgICAgICAgICB2
YXIgbGluZXMgPSB0aGlzLmRvYy4kc3BsaXQodGV4dCk7CisgICAgICAgICAgICB0b1JvdyAtPSBs
aW5lcy5sZW5ndGggLSAxOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyIHJvd0VuZCwgcm93ID0g
MDsKLQorICAgICAgICB2YXIgZW5kUm93ID0gdG9Sb3cgKyBmcm9tUmFuZ2UuZW5kLnJvdyAtIGZy
b21SYW5nZS5zdGFydC5yb3c7CisgICAgICAgIHZhciBlbmRDb2x1bW4gPSBmcm9tUmFuZ2UuaXNN
dWx0aUxpbmUoKSA/CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tUmFuZ2UuZW5kLmNvbHVt
biA6CisgICAgICAgICAgICAgICAgICAgICAgICB0b0NvbHVtbiArIGZyb21SYW5nZS5lbmQuY29s
dW1uIC0gZnJvbVJhbmdlLnN0YXJ0LmNvbHVtbjsKIAotICAgICAgICB2YXIgcm93Q2FjaGUgPSB0
aGlzLiRkb2NSb3dDYWNoZTsKLSAgICAgICAgdmFyIGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4
KHJvd0NhY2hlLCBkb2NSb3cpOwotICAgICAgICB2YXIgbCA9IHJvd0NhY2hlLmxlbmd0aDsKLSAg
ICAgICAgaWYgKGwgJiYgaSA+PSAwKSB7Ci0gICAgICAgICAgICB2YXIgcm93ID0gcm93Q2FjaGVb
aV07Ci0gICAgICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy4kc2NyZWVuUm93Q2FjaGVbaV07
Ci0gICAgICAgICAgICB2YXIgZG9DYWNoZSA9IGRvY1JvdyA+IHJvd0NhY2hlW2wgLSAxXTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBkb0NhY2hlID0gIWw7Ci0gICAgICAgIH0K
KyAgICAgICAgdmFyIHRvUmFuZ2UgPSBuZXcgUmFuZ2UodG9Sb3csIHRvQ29sdW1uLCBlbmRSb3cs
IGVuZENvbHVtbik7CiAKLSAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExp
bmUocm93KTsKLSAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGluZS5zdGFy
dC5yb3cgOkluZmluaXR5OworICAgICAgICB0aGlzLmluc2VydCh0b1JhbmdlLnN0YXJ0LCB0ZXh0
KTsKIAotICAgICAgICB3aGlsZSAocm93IDwgZG9jUm93KSB7Ci0gICAgICAgICAgICBpZiAocm93
ID49IGZvbGRTdGFydCkgewotICAgICAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVuZC5y
b3cgKyAxOwotICAgICAgICAgICAgICAgIGlmIChyb3dFbmQgPiBkb2NSb3cpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0
Rm9sZExpbmUocm93RW5kLCBmb2xkTGluZSk7Ci0gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0g
Zm9sZExpbmUgP2ZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByb3dFbmQgPSByb3cgKyAxOwotICAg
ICAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9SYW5nZTsKKyAgICB9OworICAgIHRoaXMuaW5k
ZW50Um93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3csIGluZGVudFN0cmluZykgeworICAg
ICAgICBpbmRlbnRTdHJpbmcgPSBpbmRlbnRTdHJpbmcucmVwbGFjZSgvXHQvZywgdGhpcy5nZXRU
YWJTdHJpbmcoKSk7CisgICAgICAgIGZvciAodmFyIHJvdz1zdGFydFJvdzsgcm93PD1lbmRSb3c7
IHJvdysrKQorICAgICAgICAgICAgdGhpcy5pbnNlcnQoe3Jvdzogcm93LCBjb2x1bW46MH0sIGlu
ZGVudFN0cmluZyk7CisgICAgfTsKKyAgICB0aGlzLm91dGRlbnRSb3dzID0gZnVuY3Rpb24gKHJh
bmdlKSB7CisgICAgICAgIHZhciByb3dSYW5nZSA9IHJhbmdlLmNvbGxhcHNlUm93cygpOworICAg
ICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CisgICAgICAgIHZh
ciBzaXplID0gdGhpcy5nZXRUYWJTaXplKCk7CiAKLSAgICAgICAgICAgIHNjcmVlblJvdyArPSB0
aGlzLmdldFJvd0xlbmd0aChyb3cpOwotICAgICAgICAgICAgcm93ID0gcm93RW5kOworICAgICAg
ICBmb3IgKHZhciBpID0gcm93UmFuZ2Uuc3RhcnQucm93OyBpIDw9IHJvd1JhbmdlLmVuZC5yb3c7
ICsraSkgeworICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUoaSk7CiAKLSAgICAg
ICAgICAgIGlmIChkb0NhY2hlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUu
cHVzaChyb3cpOwotICAgICAgICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlLnB1c2goc2Ny
ZWVuUm93KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YXIgdGV4dExpbmUg
PSAiIjsKLSAgICAgICAgaWYgKGZvbGRMaW5lICYmIHJvdyA+PSBmb2xkU3RhcnQpIHsKLSAgICAg
ICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZm9sZExpbmUsIGRvY1Jv
dywgZG9jQ29sdW1uKTsKLSAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGZvbGRMaW5lLnN0YXJ0
LnJvdzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRM
aW5lKGRvY1Jvdykuc3Vic3RyaW5nKDAsIGRvY0NvbHVtbik7Ci0gICAgICAgICAgICBmb2xkU3Rh
cnRSb3cgPSBkb2NSb3c7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2Rl
KSB7Ci0gICAgICAgICAgICB2YXIgd3JhcFJvdyA9IHRoaXMuJHdyYXBEYXRhW2ZvbGRTdGFydFJv
d107Ci0gICAgICAgICAgICB2YXIgc2NyZWVuUm93T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHdo
aWxlICh0ZXh0TGluZS5sZW5ndGggPj0gd3JhcFJvd1tzY3JlZW5Sb3dPZmZzZXRdKSB7Ci0gICAg
ICAgICAgICAgICAgc2NyZWVuUm93ICsrOwotICAgICAgICAgICAgICAgIHNjcmVlblJvd09mZnNl
dCsrOworICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTsKKyAgICAgICAgICAg
IGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBzaXplOyArK2opCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KGopICE9ICcgJykK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaiA8IHNpemUgJiYg
bGluZS5jaGFyQXQoaikgPT0gJ1x0JykgeworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0
YXJ0LmNvbHVtbiA9IGo7CisgICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9
IGogKyAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5n
ZS5zdGFydC5jb2x1bW4gPSAwOworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5jb2x1
bW4gPSBqOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGV4dExpbmUgPSB0ZXh0TGluZS5z
dWJzdHJpbmcoCi0gICAgICAgICAgICAgICAgd3JhcFJvd1tzY3JlZW5Sb3dPZmZzZXQgLSAxXSB8
fCAwLCB0ZXh0TGluZS5sZW5ndGgKLSAgICAgICAgICAgICk7CisgICAgICAgICAgICB0aGlzLnJl
bW92ZShkZWxldGVSYW5nZSk7CiAgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMubW92ZUxpbmVz
VXAgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICBpZiAoZmlyc3RSb3cg
PD0gMCkgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHJvdzogc2Ny
ZWVuUm93LAotICAgICAgICAgICAgY29sdW1uOiB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh0
ZXh0TGluZSlbMF0KLSAgICAgICAgfTsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLmRvYy5y
ZW1vdmVMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIHRoaXMuZG9jLmluc2VydExp
bmVzKGZpcnN0Um93IC0gMSwgcmVtb3ZlZCk7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Owot
ICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbiA9IGZ1bmN0aW9uKHJvdywgZG9jQ29sdW1u
KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyb3csIGRv
Y0NvbHVtbikuY29sdW1uOworICAgIHRoaXMubW92ZUxpbmVzRG93biA9IGZ1bmN0aW9uKGZpcnN0
Um93LCBsYXN0Um93KSB7CisgICAgICAgIGlmIChsYXN0Um93ID49IHRoaXMuZG9jLmdldExlbmd0
aCgpLTEpIHJldHVybiAwOworCisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5kb2MucmVtb3Zl
TGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAgICB0aGlzLmRvYy5pbnNlcnRMaW5lcyhm
aXJzdFJvdysxLCByZW1vdmVkKTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfTsKLSAgICB0aGlz
LmRvY3VtZW50VG9TY3JlZW5Sb3cgPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewotICAg
ICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZG9jUm93LCBkb2NDb2x1
bW4pLnJvdzsKKyAgICB0aGlzLmR1cGxpY2F0ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxh
c3RSb3cpIHsKKyAgICAgICAgdmFyIGZpcnN0Um93ID0gdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQo
Zmlyc3RSb3cpOworICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50
KGxhc3RSb3cpOworCisgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZ2V0TGluZXMoZmlyc3RSb3cs
IGxhc3RSb3cpOworICAgICAgICB0aGlzLmRvYy5pbnNlcnRMaW5lcyhmaXJzdFJvdywgbGluZXMp
OworCisgICAgICAgIHZhciBhZGRlZFJvd3MgPSBsYXN0Um93IC0gZmlyc3RSb3cgKyAxOworICAg
ICAgICByZXR1cm4gYWRkZWRSb3dzOwogICAgIH07Ci0gICAgdGhpcy5nZXRTY3JlZW5MZW5ndGgg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHNjcmVlblJvd3MgPSAwOwotICAgICAgICB2YXIg
Zm9sZCA9IG51bGw7Ci0gICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUpIHsKLSAgICAgICAg
ICAgIHNjcmVlblJvd3MgPSB0aGlzLmdldExlbmd0aCgpOwotICAgICAgICAgICAgdmFyIGZvbGRE
YXRhID0gdGhpcy4kZm9sZERhdGE7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZv
bGREYXRhLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZm9sZCA9IGZvbGREYXRhW2ld
OwotICAgICAgICAgICAgICAgIHNjcmVlblJvd3MgLT0gZm9sZC5lbmQucm93IC0gZm9sZC5zdGFy
dC5yb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIg
bGFzdFJvdyA9IHRoaXMuJHdyYXBEYXRhLmxlbmd0aDsKLSAgICAgICAgICAgIHZhciByb3cgPSAw
LCBpID0gMDsKLSAgICAgICAgICAgIHZhciBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsKLSAg
ICAgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOkluZmluaXR5
OwogCi0gICAgICAgICAgICB3aGlsZSAocm93IDwgbGFzdFJvdykgewotICAgICAgICAgICAgICAg
IHNjcmVlblJvd3MgKz0gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxOwotICAgICAgICAg
ICAgICAgIHJvdyArKzsKLSAgICAgICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJvdyA9IGZvbGQuZW5kLnJvdysxOwotICAgICAgICAgICAgICAg
ICAgICBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsKLSAgICAgICAgICAgICAgICAgICAgZm9s
ZFN0YXJ0ID0gZm9sZCA/Zm9sZC5zdGFydC5yb3cgOkluZmluaXR5OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzY3JlZW5Sb3dz
OworICAgIHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50ID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAg
IHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3csIHRoaXMuZG9jLmdldExlbmd0aCgpLTEp
KTsKICAgICB9OwotICAgIGZ1bmN0aW9uIGlzRnVsbFdpZHRoKGMpIHsKLSAgICAgICAgaWYgKGMg
PCAweDExMDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjID49
IDB4MTEwMCAmJiBjIDw9IDB4MTE1RiB8fAotICAgICAgICAgICAgICAgYyA+PSAweDExQTMgJiYg
YyA8PSAweDExQTcgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgxMUZBICYmIGMgPD0gMHgxMUZG
IHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MjMyOSAmJiBjIDw9IDB4MjMyQSB8fAotICAgICAg
ICAgICAgICAgYyA+PSAweDJFODAgJiYgYyA8PSAweDJFOTkgfHwKLSAgICAgICAgICAgICAgIGMg
Pj0gMHgyRTlCICYmIGMgPD0gMHgyRUYzIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MkYwMCAm
JiBjIDw9IDB4MkZENSB8fAotICAgICAgICAgICAgICAgYyA+PSAweDJGRjAgJiYgYyA8PSAweDJG
RkIgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgzMDAwICYmIGMgPD0gMHgzMDNFIHx8Ci0gICAg
ICAgICAgICAgICBjID49IDB4MzA0MSAmJiBjIDw9IDB4MzA5NiB8fAotICAgICAgICAgICAgICAg
YyA+PSAweDMwOTkgJiYgYyA8PSAweDMwRkYgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgzMTA1
ICYmIGMgPD0gMHgzMTJEIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MzEzMSAmJiBjIDw9IDB4
MzE4RSB8fAotICAgICAgICAgICAgICAgYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxQkEgfHwKLSAg
ICAgICAgICAgICAgIGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUUzIHx8Ci0gICAgICAgICAgICAg
ICBjID49IDB4MzFGMCAmJiBjIDw9IDB4MzIxRSB8fAotICAgICAgICAgICAgICAgYyA+PSAweDMy
MjAgJiYgYyA8PSAweDMyNDcgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgzMjUwICYmIGMgPD0g
MHgzMkZFIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MzMwMCAmJiBjIDw9IDB4NERCRiB8fAot
ICAgICAgICAgICAgICAgYyA+PSAweDRFMDAgJiYgYyA8PSAweEE0OEMgfHwKLSAgICAgICAgICAg
ICAgIGMgPj0gMHhBNDkwICYmIGMgPD0gMHhBNEM2IHx8Ci0gICAgICAgICAgICAgICBjID49IDB4
QTk2MCAmJiBjIDw9IDB4QTk3QyB8fAotICAgICAgICAgICAgICAgYyA+PSAweEFDMDAgJiYgYyA8
PSAweEQ3QTMgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHhEN0IwICYmIGMgPD0gMHhEN0M2IHx8
Ci0gICAgICAgICAgICAgICBjID49IDB4RDdDQiAmJiBjIDw9IDB4RDdGQiB8fAotICAgICAgICAg
ICAgICAgYyA+PSAweEY5MDAgJiYgYyA8PSAweEZBRkYgfHwKLSAgICAgICAgICAgICAgIGMgPj0g
MHhGRTEwICYmIGMgPD0gMHhGRTE5IHx8Ci0gICAgICAgICAgICAgICBjID49IDB4RkUzMCAmJiBj
IDw9IDB4RkU1MiB8fAotICAgICAgICAgICAgICAgYyA+PSAweEZFNTQgJiYgYyA8PSAweEZFNjYg
fHwKLSAgICAgICAgICAgICAgIGMgPj0gMHhGRTY4ICYmIGMgPD0gMHhGRTZCIHx8Ci0gICAgICAg
ICAgICAgICBjID49IDB4RkYwMSAmJiBjIDw9IDB4RkY2MCB8fAotICAgICAgICAgICAgICAgYyA+
PSAweEZGRTAgJiYgYyA8PSAweEZGRTY7CisKKyAgICB0aGlzLiRjbGlwQ29sdW1uVG9Sb3cgPSBm
dW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBpZiAoY29sdW1uIDwgMCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShy
b3cpLmxlbmd0aCwgY29sdW1uKTsKICAgICB9OwogCi19KS5jYWxsKEVkaXRTZXNzaW9uLnByb3Rv
dHlwZSk7CiAKLXJlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2ZvbGRpbmciKS5Gb2xkaW5nLmNhbGwo
RWRpdFNlc3Npb24ucHJvdG90eXBlKTsKLXJlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2JyYWNrZXRf
bWF0Y2giKS5CcmFja2V0TWF0Y2guY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOworICAgIHRo
aXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAg
ICAgICBjb2x1bW4gPSBNYXRoLm1heCgwLCBjb2x1bW4pOwogCi1leHBvcnRzLkVkaXRTZXNzaW9u
ID0gRWRpdFNlc3Npb247Ci19KTsKKyAgICAgICAgaWYgKHJvdyA8IDApIHsKKyAgICAgICAgICAg
IHJvdyA9IDA7CisgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpOworICAgICAgICAgICAgaWYg
KHJvdyA+PSBsZW4pIHsKKyAgICAgICAgICAgICAgICByb3cgPSBsZW4gLSAxOworICAgICAgICAg
ICAgICAgIGNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuLTEpLmxlbmd0aDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2Mu
Z2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
Ci1hY2UuZGVmaW5lKCdhY2UvY29uZmlnJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxl
JyAsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9uZXQnLCAnYWNlL2xp
Yi9ldmVudF9lbWl0dGVyJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewot
Im5vIHVzZSBzdHJpY3QiOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcm93OiByb3cs
CisgICAgICAgICAgICBjb2x1bW46IGNvbHVtbgorICAgICAgICB9OworICAgIH07CiAKLXZhciBs
YW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwotdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29v
cCIpOwotdmFyIG5ldCA9IHJlcXVpcmUoIi4vbGliL25ldCIpOwotdmFyIEV2ZW50RW1pdHRlciA9
IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CisgICAgdGhpcy4k
Y2xpcFJhbmdlVG9Eb2N1bWVudCA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIGlmIChyYW5n
ZS5zdGFydC5yb3cgPCAwKSB7CisgICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSAwOworICAg
ICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHRoaXMuJGNsaXBDb2x1bW5Ub1JvdygKKyAgICAg
ICAgICAgICAgICByYW5nZS5zdGFydC5yb3csCisgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQu
Y29sdW1uCisgICAgICAgICAgICApOworICAgICAgICB9CiAKLXZhciBnbG9iYWwgPSAoZnVuY3Rp
b24oKSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci19KSgpOworICAgICAgICB2YXIgbGVuID0gdGhpcy5k
b2MuZ2V0TGVuZ3RoKCkgLSAxOworICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA+IGxlbikgewor
ICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyA9IGxlbjsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5j
b2x1bW4gPSB0aGlzLmRvYy5nZXRMaW5lKGxlbikubGVuZ3RoOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHRoaXMuJGNsaXBDb2x1bW5Ub1JvdygKKyAg
ICAgICAgICAgICAgICByYW5nZS5lbmQucm93LAorICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5j
b2x1bW4KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhbmdlOwor
ICAgIH07CisgICAgdGhpcy4kd3JhcExpbWl0ID0gODA7CisgICAgdGhpcy4kdXNlV3JhcE1vZGUg
PSBmYWxzZTsKKyAgICB0aGlzLiR3cmFwTGltaXRSYW5nZSA9IHsKKyAgICAgICAgbWluIDogbnVs
bCwKKyAgICAgICAgbWF4IDogbnVsbAorICAgIH07CisgICAgdGhpcy5zZXRVc2VXcmFwTW9kZSA9
IGZ1bmN0aW9uKHVzZVdyYXBNb2RlKSB7CisgICAgICAgIGlmICh1c2VXcmFwTW9kZSAhPSB0aGlz
LiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgdGhpcy4kdXNlV3JhcE1vZGUgPSB1c2VXcmFw
TW9kZTsKKyAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRo
aXMuJHJlc2V0Um93Q2FjaGUoMCk7CisgICAgICAgICAgICBpZiAodXNlV3JhcE1vZGUpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLiR3cmFwRGF0YSA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy4kd3JhcERhdGEucHVzaChb
XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBE
YXRhKDAsIGxlbiAtIDEpOworICAgICAgICAgICAgfQogCi12YXIgb3B0aW9ucyA9IHsKLSAgICBw
YWNrYWdlZDogZmFsc2UsCi0gICAgd29ya2VyUGF0aDogbnVsbCwKLSAgICBtb2RlUGF0aDogbnVs
bCwKLSAgICB0aGVtZVBhdGg6IG51bGwsCi0gICAgYmFzZVBhdGg6ICIiLAotICAgIHN1ZmZpeDog
Ii5qcyIsCi0gICAgJG1vZHVsZVVybHM6IHt9Ci19OworICAgICAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlV3JhcE1vZGUiKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRVc2VXcmFw
TW9kZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGU7Cisg
ICAgfTsKKyAgICB0aGlzLnNldFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24obWluLCBtYXgpIHsK
KyAgICAgICAgaWYgKHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbiAhPT0gbWluIHx8IHRoaXMuJHdy
YXBMaW1pdFJhbmdlLm1heCAhPT0gbWF4KSB7CisgICAgICAgICAgICB0aGlzLiR3cmFwTGltaXRS
YW5nZS5taW4gPSBtaW47CisgICAgICAgICAgICB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXggPSBt
YXg7CisgICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CisgICAgICAgICAgICB0aGlz
Ll9lbWl0KCJjaGFuZ2VXcmFwTW9kZSIpOworICAgICAgICB9CisgICAgfTsKIAotZXhwb3J0cy5n
ZXQgPSBmdW5jdGlvbihrZXkpIHsKLSAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5
KSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbmZpZyBrZXk6ICIgKyBrZXkp
OworICAgIHRoaXMuJGZpeGVkR3V0dGVyV2lkdGggPSBmYWxzZTsKKyAgICB0aGlzLnNldEZpeGVk
R3V0dGVyV2lkdGggPSBmdW5jdGlvbihmaXhlZEd1dHRlcldpZHRoKSB7CisgICAgICAgIHRoaXMu
JGZpeGVkR3V0dGVyV2lkdGggPSBmaXhlZEd1dHRlcldpZHRoOworICAgIH0KIAotICAgIHJldHVy
biBvcHRpb25zW2tleV07Ci19OworICAgIHRoaXMuZ2V0Rml4ZWRHdXR0ZXJXaWR0aCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kZml4ZWRHdXR0ZXJXaWR0aDsKKyAgICB9Cisg
ICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbihkZXNpcmVkTGltaXQpIHsKKyAgICAg
ICAgdmFyIHdyYXBMaW1pdCA9IHRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdChkZXNpcmVkTGltaXQp
OworICAgICAgICBpZiAod3JhcExpbWl0ICE9IHRoaXMuJHdyYXBMaW1pdCAmJiB3cmFwTGltaXQg
PiAwKSB7CisgICAgICAgICAgICB0aGlzLiR3cmFwTGltaXQgPSB3cmFwTGltaXQ7CisgICAgICAg
ICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CisgICAgICAgICAgICBpZiAodGhpcy4kdXNlV3Jh
cE1vZGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCB0aGlzLmdl
dExlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTGltaXQiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OwogCi1leHBvcnRzLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsK
LSAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkKLSAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJVbmtub3duIGNvbmZpZyBrZXk6ICIgKyBrZXkpOworICAgIHRoaXMuJGNvbnN0cmFp
bldyYXBMaW1pdCA9IGZ1bmN0aW9uKHdyYXBMaW1pdCkgeworICAgICAgICB2YXIgbWluID0gdGhp
cy4kd3JhcExpbWl0UmFuZ2UubWluOworICAgICAgICBpZiAobWluKQorICAgICAgICAgICAgd3Jh
cExpbWl0ID0gTWF0aC5tYXgobWluLCB3cmFwTGltaXQpOwogCi0gICAgb3B0aW9uc1trZXldID0g
dmFsdWU7Ci19OworICAgICAgICB2YXIgbWF4ID0gdGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4Owor
ICAgICAgICBpZiAobWF4KQorICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5taW4obWF4LCB3
cmFwTGltaXQpOworICAgICAgICByZXR1cm4gTWF0aC5tYXgoMSwgd3JhcExpbWl0KTsKKyAgICB9
OworICAgIHRoaXMuZ2V0V3JhcExpbWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0
aGlzLiR3cmFwTGltaXQ7CisgICAgfTsKKyAgICB0aGlzLmdldFdyYXBMaW1pdFJhbmdlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBtaW4gOiB0aGlzLiR3cmFw
TGltaXRSYW5nZS5taW4sCisgICAgICAgICAgICBtYXggOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5t
YXgKKyAgICAgICAgfTsKKyAgICB9OwogCi1leHBvcnRzLmFsbCA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBsYW5nLmNvcHlPYmplY3Qob3B0aW9ucyk7Ci19Owotb29wLmltcGxlbWVudChleHBv
cnRzLCBFdmVudEVtaXR0ZXIpOworICAgIHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdl
ID0gZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgdXNlV3JhcE1vZGUgPSB0aGlzLiR1c2VXcmFw
TW9kZTsKKyAgICAgICAgdmFyIGxlbjsKKyAgICAgICAgdmFyIGFjdGlvbiA9IGUuZGF0YS5hY3Rp
b247CisgICAgICAgIHZhciBmaXJzdFJvdyA9IGUuZGF0YS5yYW5nZS5zdGFydC5yb3c7CisgICAg
ICAgIHZhciBsYXN0Um93ID0gZS5kYXRhLnJhbmdlLmVuZC5yb3c7CisgICAgICAgIHZhciBzdGFy
dCA9IGUuZGF0YS5yYW5nZS5zdGFydDsKKyAgICAgICAgdmFyIGVuZCA9IGUuZGF0YS5yYW5nZS5l
bmQ7CisgICAgICAgIHZhciByZW1vdmVkRm9sZHMgPSBudWxsOwogCi1leHBvcnRzLm1vZHVsZVVy
bCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBvbmVudCkgewotICAgIGlmIChvcHRpb25zLiRtb2R1bGVV
cmxzW25hbWVdKQotICAgICAgICByZXR1cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXTsKKyAg
ICAgICAgaWYgKGFjdGlvbi5pbmRleE9mKCJMaW5lcyIpICE9IC0xKSB7CisgICAgICAgICAgICBp
ZiAoYWN0aW9uID09ICJpbnNlcnRMaW5lcyIpIHsKKyAgICAgICAgICAgICAgICBsYXN0Um93ID0g
Zmlyc3RSb3cgKyAoZS5kYXRhLmxpbmVzLmxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxlbiA9IGUuZGF0YS5saW5lcyA/IGUuZGF0YS5saW5lcy5sZW5ndGggOiBsYXN0Um93
IC0gZmlyc3RSb3c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW4gPSBsYXN0Um93
IC0gZmlyc3RSb3c7CisgICAgICAgIH0KIAotICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoIi8i
KTsKLSAgICBjb21wb25lbnQgPSBjb21wb25lbnQgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMl0g
fHwgIiI7Ci0gICAgdmFyIGJhc2UgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5yZXBsYWNlKGNv
bXBvbmVudCwgIiIpLnJlcGxhY2UoLyheW1wtX10pfChbXC1fXSQpLywgIiIpOworICAgICAgICBp
ZiAobGVuICE9IDApIHsKKyAgICAgICAgICAgIGlmIChhY3Rpb24uaW5kZXhPZigicmVtb3ZlIikg
IT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0aGlzW3VzZVdyYXBNb2RlID8gIiR3cmFwRGF0YSIg
OiAiJHJvd0xlbmd0aENhY2hlIl0uc3BsaWNlKGZpcnN0Um93LCBsZW4pOwogCi0gICAgaWYgKCFi
YXNlICYmIHBhcnRzLmxlbmd0aCA+IDEpCi0gICAgICAgIGJhc2UgPSBwYXJ0c1twYXJ0cy5sZW5n
dGggLSAyXTsKLSAgICB2YXIgcGF0aCA9IG9wdGlvbnNbY29tcG9uZW50ICsgIlBhdGgiXTsKLSAg
ICBpZiAocGF0aCA9PSBudWxsKQotICAgICAgICBwYXRoID0gb3B0aW9ucy5iYXNlUGF0aDsKLSAg
ICBpZiAocGF0aCAmJiBwYXRoLnNsaWNlKC0xKSAhPSAiLyIpCi0gICAgICAgIHBhdGggKz0gIi8i
OwotICAgIHJldHVybiBwYXRoICsgY29tcG9uZW50ICsgIi0iICsgYmFzZSArIHRoaXMuZ2V0KCJz
dWZmaXgiKTsKLX07CisgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGRE
YXRhOworICAgICAgICAgICAgICAgIHJlbW92ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdl
KGUuZGF0YS5yYW5nZSk7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVk
Rm9sZHMpOwogCi1leHBvcnRzLnNldE1vZHVsZVVybCA9IGZ1bmN0aW9uKG5hbWUsIHN1YnN0KSB7
Ci0gICAgcmV0dXJuIG9wdGlvbnMuJG1vZHVsZVVybHNbbmFtZV0gPSBzdWJzdDsKLX07CisgICAg
ICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShlbmQucm93KTsKKyAg
ICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZW5kLnJvdywg
ZW5kLmNvbHVtbiwgc3RhcnQuY29sdW1uIC0gZW5kLmNvbHVtbik7CisgICAgICAgICAgICAgICAg
ICAgIGZvbGRMaW5lLnNoaWZ0Um93KC1sZW4pOwogCi1leHBvcnRzLmxvYWRNb2R1bGUgPSBmdW5j
dGlvbihtb2R1bGVOYW1lLCBvbkxvYWQpIHsKLSAgICB2YXIgbW9kdWxlLCBtb2R1bGVUeXBlOwot
ICAgIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZU5hbWUpKSB7Ci0gICAgICAgIG1vZHVsZVR5cGUg
PSBtb2R1bGVOYW1lWzBdOwotICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZVsxXTsKLSAg
ICB9Ci0gICAgdHJ5IHsKLSAgICAgICAgbW9kdWxlID0gcmVxdWlyZShtb2R1bGVOYW1lKTsKLSAg
ICB9IGNhdGNoIChlKSB7fTsKLSAgICBpZiAobW9kdWxlKQotICAgICAgICByZXR1cm4gb25Mb2Fk
KG1vZHVsZSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZUJlZm9yZSA9IHRoaXMu
Z2V0Rm9sZExpbmUoZmlyc3RSb3cpOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmVC
ZWZvcmUgJiYgZm9sZExpbmVCZWZvcmUgIT09IGZvbGRMaW5lKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb2xkTGluZUJlZm9yZS5tZXJnZShmb2xkTGluZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb2xkTGluZSA9IGZvbGRMaW5lQmVmb3JlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5lKSAr
IDE7CisgICAgICAgICAgICAgICAgfQogCi0gICAgdmFyIGFmdGVyTG9hZCA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICByZXF1aXJlKFttb2R1bGVOYW1lXSwgZnVuY3Rpb24obW9kdWxlKSB7Ci0gICAg
ICAgICAgICBleHBvcnRzLl9lbWl0KCJsb2FkLm1vZHVsZSIsIHtuYW1lOiBtb2R1bGVOYW1lLCBt
b2R1bGU6IG1vZHVsZX0pOwotICAgICAgICAgICAgb25Mb2FkKG1vZHVsZSk7Ci0gICAgICAgIH0p
OworICAgICAgICAgICAgICAgIGZvciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgr
KykgeworICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBlbmQucm93KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxh
c3RSb3cgPSBmaXJzdFJvdzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dmFyIGFyZ3M7CisgICAgICAgICAgICAgICAgaWYgKHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGFyZ3MgPSBbZmlyc3RSb3csIDBdOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzLnB1c2goW10pOworICAgICAgICAgICAgICAg
ICAgICB0aGlzLiR3cmFwRGF0YS5zcGxpY2UuYXBwbHkodGhpcy4kd3JhcERhdGEsIGFyZ3MpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBBcnJh
eShsZW4pOworICAgICAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDApOwor
ICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZS5zcGxpY2UuYXBwbHkodGhp
cy4kcm93TGVuZ3RoQ2FjaGUsIGFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgICAgICAgICAgdmFy
IGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAgICAgICAgICAgICAg
dmFyIGlkeCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBjbXAgPSBmb2xkTGluZS5yYW5nZS5jb21wYXJlSW5zaWRlKHN0YXJ0LnJv
dywgc3RhcnQuY29sdW1uKQorICAgICAgICAgICAgICAgICAgICBpZiAoY21wID09IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gZm9sZExpbmUuc3BsaXQoc3RhcnQucm93
LCBzdGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRS
b3cobGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJz
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBz
dGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNtcCA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUu
YWRkUmVtb3ZlQ2hhcnMoZmlyc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhP
Zihmb2xkTGluZSkgKyAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZv
ciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBmaXJzdFJvdykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGxlbiA9IE1hdGguYWJzKGUuZGF0YS5yYW5nZS5zdGFydC5jb2x1bW4gLSBlLmRhdGEucmFu
Z2UuZW5kLmNvbHVtbik7CisgICAgICAgICAgICBpZiAoYWN0aW9uLmluZGV4T2YoInJlbW92ZSIp
ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0lu
UmFuZ2UoZS5kYXRhLnJhbmdlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKHJl
bW92ZWRGb2xkcyk7CisKKyAgICAgICAgICAgICAgICBsZW4gPSAtbGVuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7
CisgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAgICAgICAgICAgICBmb2xkTGluZS5h
ZGRSZW1vdmVDaGFycyhmaXJzdFJvdywgc3RhcnQuY29sdW1uLCBsZW4pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZVdyYXBNb2RlICYmIHRoaXMuJHdyYXBEYXRh
Lmxlbmd0aCAhPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgY29uc29sZS5l
cnJvcigiZG9jLmdldExlbmd0aCgpIGFuZCAkd3JhcERhdGEubGVuZ3RoIGhhdmUgdG8gYmUgdGhl
IHNhbWUhIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlV3JhcE1vZGUpCisgICAgICAg
ICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YShmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKGZpcnN0Um93LCBsYXN0
Um93KTsKKworICAgICAgICByZXR1cm4gcmVtb3ZlZEZvbGRzOwogICAgIH07CiAKLSAgICBpZiAo
IWV4cG9ydHMuZ2V0KCJwYWNrYWdlZCIpKQotICAgICAgICByZXR1cm4gYWZ0ZXJMb2FkKCk7Ci0g
ICAgbmV0LmxvYWRTY3JpcHQoZXhwb3J0cy5tb2R1bGVVcmwobW9kdWxlTmFtZSwgbW9kdWxlVHlw
ZSksIGFmdGVyTG9hZCk7Ci19OwotZXhwb3J0cy5pbml0ID0gZnVuY3Rpb24oKSB7Ci0gICAgb3B0
aW9ucy5wYWNrYWdlZCA9IHJlcXVpcmUucGFja2FnZWQgfHwgbW9kdWxlLnBhY2thZ2VkIHx8IChn
bG9iYWwuZGVmaW5lICYmIGRlZmluZS5wYWNrYWdlZCk7CisgICAgdGhpcy4kdXBkYXRlUm93TGVu
Z3RoQ2FjaGUgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdywgYikgeworICAgICAgICB0aGlz
LiRyb3dMZW5ndGhDYWNoZVtmaXJzdFJvd10gPSBudWxsOworICAgICAgICB0aGlzLiRyb3dMZW5n
dGhDYWNoZVtsYXN0Um93XSA9IG51bGw7CisgICAgfTsKIAotICAgIGlmICghZ2xvYmFsLmRvY3Vt
ZW50KQotICAgICAgICByZXR1cm4gIiI7CisgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEgPSBmdW5j
dGlvbihmaXJzdFJvdywgbGFzdFJvdykgeworICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRvYy5n
ZXRBbGxMaW5lcygpOworICAgICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMuZ2V0VGFiU2l6ZSgpOwor
ICAgICAgICB2YXIgd3JhcERhdGEgPSB0aGlzLiR3cmFwRGF0YTsKKyAgICAgICAgdmFyIHdyYXBM
aW1pdCA9IHRoaXMuJHdyYXBMaW1pdDsKKyAgICAgICAgdmFyIHRva2VuczsKKyAgICAgICAgdmFy
IGZvbGRMaW5lOwogCi0gICAgdmFyIHNjcmlwdE9wdGlvbnMgPSB7fTsKLSAgICB2YXIgc2NyaXB0
VXJsID0gIiI7CisgICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsKKyAgICAgICAgbGFzdFJvdyA9
IE1hdGgubWluKGxhc3RSb3csIGxpbmVzLmxlbmd0aCAtIDEpOworICAgICAgICB3aGlsZSAocm93
IDw9IGxhc3RSb3cpIHsKKyAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShy
b3csIGZvbGRMaW5lKTsKKyAgICAgICAgICAgIGlmICghZm9sZExpbmUpIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbnMgPSB0aGlzLiRnZXREaXNwbGF5VG9rZW5zKGxhbmcuc3RyaW5nVHJpbVJpZ2h0
KGxpbmVzW3Jvd10pKTsKKyAgICAgICAgICAgICAgICB3cmFwRGF0YVtyb3ddID0gdGhpcy4kY29t
cHV0ZVdyYXBTcGxpdHModG9rZW5zLCB3cmFwTGltaXQsIHRhYlNpemUpOworICAgICAgICAgICAg
ICAgIHJvdyArKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG9rZW5z
ID0gW107CisgICAgICAgICAgICAgICAgZm9sZExpbmUud2FsayhmdW5jdGlvbihwbGFjZWhvbGRl
ciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB3YWxrVG9rZW5zOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyICE9
IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zID0gdGhpcy4k
Z2V0RGlzcGxheVRva2VucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGxhY2Vob2xkZXIsIHRva2Vucy5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdhbGtUb2tlbnNbMF0gPSBQTEFDRUhPTERFUl9TVEFSVDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHdhbGtUb2tlbnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa1Rva2Vuc1tpXSA9IFBMQUNF
SE9MREVSX0JPRFk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9r
ZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZXNbcm93XS5zdWJzdHJpbmcobGFzdENvbHVtbiwgY29sdW1uKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLmxlbmd0aCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSB0b2tlbnMuY29uY2F0
KHdhbGtUb2tlbnMpOworICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksCisgICAgICAg
ICAgICAgICAgICAgIGZvbGRMaW5lLmVuZC5yb3csCisgICAgICAgICAgICAgICAgICAgIGxpbmVz
W2ZvbGRMaW5lLmVuZC5yb3ddLmxlbmd0aCArIDEKKyAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoICE9IDAgJiYgdG9rZW5zW3Rva2Vucy5sZW5n
dGggLSAxXSA+PSBTUEFDRSkKKyAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgpOwogCi0g
ICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7
Ci0gICAgZm9yICh2YXIgaT0wOyBpPHNjcmlwdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFy
IHNjcmlwdCA9IHNjcmlwdHNbaV07CisgICAgICAgICAgICAgICAgd3JhcERhdGFbZm9sZExpbmUu
c3RhcnQucm93XQorICAgICAgICAgICAgICAgICAgICA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRz
KHRva2Vucywgd3JhcExpbWl0LCB0YWJTaXplKTsKKyAgICAgICAgICAgICAgICByb3cgPSBmb2xk
TGluZS5lbmQucm93ICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAg
dmFyIENIQVIgPSAxLAorICAgICAgICBDSEFSX0VYVCA9IDIsCisgICAgICAgIFBMQUNFSE9MREVS
X1NUQVJUID0gMywKKyAgICAgICAgUExBQ0VIT0xERVJfQk9EWSA9ICA0LAorICAgICAgICBQVU5D
VFVBVElPTiA9IDksCisgICAgICAgIFNQQUNFID0gMTAsCisgICAgICAgIFRBQiA9IDExLAorICAg
ICAgICBUQUJfU1BBQ0UgPSAxMjsKIAotICAgICAgICB2YXIgc3JjID0gc2NyaXB0LnNyYyB8fCBz
Y3JpcHQuZ2V0QXR0cmlidXRlKCJzcmMiKTsKLSAgICAgICAgaWYgKCFzcmMpCi0gICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHNjcmlwdC5hdHRyaWJ1dGVz
OwotICAgICAgICBmb3IgKHZhciBqPTAsIGw9YXR0cmlidXRlcy5sZW5ndGg7IGogPCBsOyBqKysp
IHsKLSAgICAgICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tqXTsKLSAgICAgICAgICAgIGlm
IChhdHRyLm5hbWUuaW5kZXhPZigiZGF0YS1hY2UtIikgPT09IDApIHsKLSAgICAgICAgICAgICAg
ICBzY3JpcHRPcHRpb25zW2RlSHlwaGVuYXRlKGF0dHIubmFtZS5yZXBsYWNlKC9eZGF0YS1hY2Ut
LywgIiIpKV0gPSBhdHRyLnZhbHVlOworICAgIHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzID0gZnVu
Y3Rpb24odG9rZW5zLCB3cmFwTGltaXQpIHsKKyAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0g
MCkgeworICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNw
bGl0cyA9IFtdOworICAgICAgICB2YXIgZGlzcGxheUxlbmd0aCA9IHRva2Vucy5sZW5ndGg7Cisg
ICAgICAgIHZhciBsYXN0U3BsaXQgPSAwLCBsYXN0RG9jU3BsaXQgPSAwOworCisgICAgICAgIGZ1
bmN0aW9uIGFkZFNwbGl0KHNjcmVlblBvcykgeworICAgICAgICAgICAgdmFyIGRpc3BsYXllZCA9
IHRva2Vucy5zbGljZShsYXN0U3BsaXQsIHNjcmVlblBvcyk7CisgICAgICAgICAgICB2YXIgbGVu
ID0gZGlzcGxheWVkLmxlbmd0aDsKKyAgICAgICAgICAgIGRpc3BsYXllZC5qb2luKCIiKS4KKyAg
ICAgICAgICAgICAgICByZXBsYWNlKC8xMi9nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGVuIC09IDE7CisgICAgICAgICAgICAgICAgfSkuCisgICAgICAgICAgICAgICAgcmVw
bGFjZSgvMi9nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgbGVuIC09IDE7Cisg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGxhc3REb2NTcGxpdCArPSBsZW47Cisg
ICAgICAgICAgICBzcGxpdHMucHVzaChsYXN0RG9jU3BsaXQpOworICAgICAgICAgICAgbGFzdFNw
bGl0ID0gc2NyZWVuUG9zOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGRpc3BsYXlMZW5n
dGggLSBsYXN0U3BsaXQgPiB3cmFwTGltaXQpIHsKKyAgICAgICAgICAgIHZhciBzcGxpdCA9IGxh
c3RTcGxpdCArIHdyYXBMaW1pdDsKKyAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID49IFNQ
QUNFKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRva2Vuc1tzcGxpdF0gPj0gU1BBQ0UpIHsK
KyAgICAgICAgICAgICAgICAgICAgc3BsaXQgKys7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVS
X1NUQVJUCisgICAgICAgICAgICAgICAgfHwgdG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9C
T0RZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0ICE9
IGxhc3RTcGxpdCAtIDE7IHNwbGl0LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vu
c1tzcGxpdF0gPT0gUExBQ0VIT0xERVJfU1RBUlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzcGxpdCA+IGxhc3RTcGxpdCkgeworICAgICAgICAgICAgICAgICAgICBh
ZGRTcGxpdChzcGxpdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdDsK
KyAgICAgICAgICAgICAgICBmb3IgKHNwbGl0OyBzcGxpdCA8IHRva2Vucy5sZW5ndGg7IHNwbGl0
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gIT0gUExBQ0VIT0xE
RVJfQk9EWSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKHNwbGl0ID09IHRva2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAvLyBCcmVha3MgdGhlIHdoaWxlLWxvb3AuCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBtaW5TcGxpdCA9IE1hdGgubWF4KHNw
bGl0IC0gMTAsIGxhc3RTcGxpdCAtIDEpOworICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWlu
U3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA8IFBMQUNFSE9MREVSX1NUQVJUKSB7CisgICAgICAgICAg
ICAgICAgc3BsaXQgLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoc3BsaXQg
PiBtaW5TcGxpdCAmJiB0b2tlbnNbc3BsaXRdID09IFBVTkNUVUFUSU9OKSB7CisgICAgICAgICAg
ICAgICAgc3BsaXQgLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BsaXQgPiBt
aW5TcGxpdCkgeworICAgICAgICAgICAgICAgIGFkZFNwbGl0KCsrc3BsaXQpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3BsaXQgPSBsYXN0
U3BsaXQgKyB3cmFwTGltaXQ7CisgICAgICAgICAgICBhZGRTcGxpdChzcGxpdCk7CiAgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHNwbGl0czsKKyAgICB9OworICAgIHRoaXMuJGdldERpc3BsYXlU
b2tlbnMgPSBmdW5jdGlvbihzdHIsIG9mZnNldCkgeworICAgICAgICB2YXIgYXJyID0gW107Cisg
ICAgICAgIHZhciB0YWJTaXplOworICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDsKIAotICAg
ICAgICB2YXIgbSA9IHNyYy5tYXRjaCgvXiguKilcL2FjZShcLVx3Kyk/XC5qcyhcP3wkKS8pOwot
ICAgICAgICBpZiAobSkKLSAgICAgICAgICAgIHNjcmlwdFVybCA9IG1bMV07Ci0gICAgfQorICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
dmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTsKKyAgICAgICAgICAgIGlmIChjID09IDkpIHsKKyAg
ICAgICAgICAgICAgICB0YWJTaXplID0gdGhpcy5nZXRTY3JlZW5UYWJTaXplKGFyci5sZW5ndGgg
KyBvZmZzZXQpOworICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQik7CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgbiA9IDE7IG4gPCB0YWJTaXplOyBuKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXJyLnB1c2goVEFCX1NQQUNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChjID09IDMyKSB7CisgICAgICAgICAgICAgICAgYXJyLnB1
c2goU1BBQ0UpOworICAgICAgICAgICAgfSBlbHNlIGlmKChjID4gMzkgJiYgYyA8IDQ4KSB8fCAo
YyA+IDU3ICYmIGMgPCA2NCkpIHsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChQVU5DVFVBVElP
Tik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjID49IDB4MTEwMCAmJiBp
c0Z1bGxXaWR0aChjKSkgeworICAgICAgICAgICAgICAgIGFyci5wdXNoKENIQVIsIENIQVJfRVhU
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycjsKKyAgICB9Owor
ICAgIHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoID0gZnVuY3Rpb24oc3RyLCBtYXhTY3JlZW5D
b2x1bW4sIHNjcmVlbkNvbHVtbikgeworICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IDAp
CisgICAgICAgICAgICByZXR1cm4gWzAsIDBdOworICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1u
ID09IG51bGwpCisgICAgICAgICAgICBtYXhTY3JlZW5Db2x1bW4gPSBJbmZpbml0eTsKKyAgICAg
ICAgc2NyZWVuQ29sdW1uID0gc2NyZWVuQ29sdW1uIHx8IDA7CisKKyAgICAgICAgdmFyIGMsIGNv
bHVtbjsKKyAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1
bW4rKykgeworICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7CisgICAgICAg
ICAgICBpZiAoYyA9PSA5KSB7CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMu
Z2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoYyA+PSAweDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHsKKyAgICAgICAgICAg
ICAgICBzY3JlZW5Db2x1bW4gKz0gMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2NyZWVuQ29sdW1uICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
c2NyZWVuQ29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gW3NjcmVlbkNvbHVt
biwgY29sdW1uXTsKKyAgICB9OworICAgIHRoaXMuZ2V0Um93TGVuZ3RoID0gZnVuY3Rpb24ocm93
KSB7CisgICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUgfHwgIXRoaXMuJHdyYXBEYXRhW3Jv
d10pIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuJHdyYXBEYXRhW3Jvd10ubGVuZ3RoICsgMTsKKyAgICAgICAgfQorICAg
IH07CisgICAgdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93
KSB7CisgICAgICAgIHZhciBwb3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3Jl
ZW5Sb3csIE51bWJlci5NQVhfVkFMVUUpOworICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRv
U2NyZWVuQ29sdW1uKHBvcy5yb3csIHBvcy5jb2x1bW4pOworICAgIH07CisgICAgdGhpcy5nZXRE
b2N1bWVudExhc3RSb3dDb2x1bW4gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgeworICAg
ICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9j
Q29sdW1uKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihzY3Jl
ZW5Sb3cpOworICAgIH07CisgICAgdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlv
biA9IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7CisgICAgICAgIHZhciBzY3JlZW5Sb3cg
PSB0aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3coZG9jUm93LCBkb2NDb2x1bW4pOworICAgICAgICBy
ZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBOdW1iZXIuTUFY
X1ZBTFVFIC8gMTApOworICAgIH07CisgICAgdGhpcy5nZXRSb3dTcGxpdERhdGEgPSBmdW5jdGlv
bihyb3cpIHsKKyAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAg
cmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLiR3cmFwRGF0YVtyb3ddOworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldFNjcmVl
blRhYlNpemUgPSBmdW5jdGlvbihzY3JlZW5Db2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JHRhYlNpemUgLSBzY3JlZW5Db2x1bW4gJSB0aGlzLiR0YWJTaXplOworICAgIH07CiAKLSAgICBp
ZiAoc2NyaXB0VXJsKSB7Ci0gICAgICAgIHNjcmlwdE9wdGlvbnMuYmFzZSA9IHNjcmlwdE9wdGlv
bnMuYmFzZSB8fCBzY3JpcHRVcmw7Ci0gICAgICAgIHNjcmlwdE9wdGlvbnMucGFja2FnZWQgPSB0
cnVlOwotICAgIH0KIAotICAgIHNjcmlwdE9wdGlvbnMuYmFzZVBhdGggPSBzY3JpcHRPcHRpb25z
LmJhc2U7Ci0gICAgc2NyaXB0T3B0aW9ucy53b3JrZXJQYXRoID0gc2NyaXB0T3B0aW9ucy53b3Jr
ZXJQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTsKLSAgICBzY3JpcHRPcHRpb25zLm1vZGVQYXRo
ID0gc2NyaXB0T3B0aW9ucy5tb2RlUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7Ci0gICAgc2Ny
aXB0T3B0aW9ucy50aGVtZVBhdGggPSBzY3JpcHRPcHRpb25zLnRoZW1lUGF0aCB8fCBzY3JpcHRP
cHRpb25zLmJhc2U7Ci0gICAgZGVsZXRlIHNjcmlwdE9wdGlvbnMuYmFzZTsKKyAgICB0aGlzLnNj
cmVlblRvRG9jdW1lbnRSb3cgPSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgewor
ICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBz
Y3JlZW5Db2x1bW4pLnJvdzsKKyAgICB9OwogCi0gICAgZm9yICh2YXIga2V5IGluIHNjcmlwdE9w
dGlvbnMpCi0gICAgICAgIGlmICh0eXBlb2Ygc2NyaXB0T3B0aW9uc1trZXldICE9PSAidW5kZWZp
bmVkIikKLSAgICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgc2NyaXB0T3B0aW9uc1trZXldKTsK
LX07CiAKLWZ1bmN0aW9uIGRlSHlwaGVuYXRlKHN0cikgewotICAgIHJldHVybiBzdHIucmVwbGFj
ZSgvLSguKS9nLCBmdW5jdGlvbihtLCBtMSkgeyByZXR1cm4gbTEudG9VcHBlckNhc2UoKTsgfSk7
Ci19CisgICAgdGhpcy5zY3JlZW5Ub0RvY3VtZW50Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93
LCBzY3JlZW5Db2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBv
c2l0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKS5jb2x1bW47CisgICAgfTsKKyAgICB0aGlz
LnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29s
dW1uKSB7CisgICAgICAgIGlmIChzY3JlZW5Sb3cgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHty
b3c6IDAsIGNvbHVtbjogMH07CiAKLX0pOwotYWNlLmRlZmluZSgnYWNlL2xpYi9uZXQnLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvdXNlcmFnZW50J10sIGZ1bmN0
aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworICAgICAgICB2YXIgbGluZTsKKyAgICAg
ICAgdmFyIGRvY1JvdyA9IDA7CisgICAgICAgIHZhciBkb2NDb2x1bW4gPSAwOworICAgICAgICB2
YXIgY29sdW1uOworICAgICAgICB2YXIgcm93ID0gMDsKKyAgICAgICAgdmFyIHJvd0xlbmd0aCA9
IDA7CiAKKyAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kc2NyZWVuUm93Q2FjaGU7CisgICAg
ICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgc2NyZWVuUm93KTsK
KyAgICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7CisgICAgICAgIGlmIChsICYmIGkgPj0g
MCkgeworICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFy
IGRvY1JvdyA9IHRoaXMuJGRvY1Jvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRvQ2FjaGUg
PSBzY3JlZW5Sb3cgPiByb3dDYWNoZVtsIC0gMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB2YXIgZG9DYWNoZSA9ICFsOworICAgICAgICB9CiAKLXZhciB1c2VyYWdlbnQgPSByZXF1
aXJlKCIuL3VzZXJhZ2VudCIpOworICAgICAgICB2YXIgbWF4Um93ID0gdGhpcy5nZXRMZW5ndGgo
KSAtIDE7CisgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1Jv
dyk7CisgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJv
dyA6IEluZmluaXR5OwogCi1leHBvcnRzLmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7
Ci0gICAgdmFyIHhociA9IGV4cG9ydHMuY3JlYXRlWGhyKCk7Ci0gICAgeGhyLm9wZW4oJ0dFVCcs
IHVybCwgdHJ1ZSk7Ci0gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIChldnQp
IHsKLSAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7Ci0gICAgICAgICAgICBjYWxs
YmFjayh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgd2hpbGUgKHJvdyA8PSBzY3JlZW5Sb3cp
IHsKKyAgICAgICAgICAgIHJvd0xlbmd0aCA9IHRoaXMuZ2V0Um93TGVuZ3RoKGRvY1Jvdyk7Cisg
ICAgICAgICAgICBpZiAocm93ICsgcm93TGVuZ3RoIC0gMSA+PSBzY3JlZW5Sb3cgfHwgZG9jUm93
ID49IG1heFJvdykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICByb3cgKz0gcm93TGVuZ3RoOworICAgICAgICAgICAgICAgIGRv
Y1JvdysrOworICAgICAgICAgICAgICAgIGlmIChkb2NSb3cgPiBmb2xkU3RhcnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZG9jUm93ID0gZm9sZExpbmUuZW5kLnJvdysxOworICAgICAgICAgICAg
ICAgICAgICBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1JvdywgZm9sZExpbmUp
OworICAgICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0
YXJ0LnJvdyA6IEluZmluaXR5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGRvQ2FjaGUpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLiRkb2NSb3dDYWNoZS5wdXNoKGRvY1Jvdyk7CisgICAgICAgICAgICAgICAgdGhpcy4kc2Ny
ZWVuUm93Q2FjaGUucHVzaChyb3cpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfTsK
LSAgICB4aHIuc2VuZChudWxsKTsKLX07CiAKLXZhciBwcm9nSWRzID0gWydNc3htbDIuWE1MSFRU
UCcsICdNaWNyb3NvZnQuWE1MSFRUUCcsICdNc3htbDIuWE1MSFRUUC40LjAnXTsKLQotZXhwb3J0
cy5jcmVhdGVYaHIgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgeGhyLCBpLCBwcm9nSWQ7Ci0gICAg
aWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgcmV0
dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaSA9
IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgIHByb2dJZCA9IHByb2dJZHNbaV07Ci0gICAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KHBy
b2dJZCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7fQorICAgICAgICBpZiAoZm9sZExpbmUg
JiYgZm9sZExpbmUuc3RhcnQucm93IDw9IGRvY1JvdykgeworICAgICAgICAgICAgbGluZSA9IHRo
aXMuZ2V0Rm9sZERpc3BsYXlMaW5lKGZvbGRMaW5lKTsKKyAgICAgICAgICAgIGRvY1JvdyA9IGZv
bGRMaW5lLnN0YXJ0LnJvdzsKKyAgICAgICAgfSBlbHNlIGlmIChyb3cgKyByb3dMZW5ndGggPD0g
c2NyZWVuUm93IHx8IGRvY1JvdyA+IG1heFJvdykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICByb3c6IG1heFJvdywKKyAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMu
Z2V0TGluZShtYXhSb3cpLmxlbmd0aAorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbGluZSA9IHRoaXMuZ2V0TGluZShkb2NSb3cpOworICAgICAgICAgICAgZm9s
ZExpbmUgPSBudWxsOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4aHIpIHsKLSAgICAg
ICAgICAgICAgICBwcm9nSWRzID0gW3Byb2dJZF07ICAvLyBzbyBmYXN0ZXIgbmV4dCB0aW1lCi0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgewor
ICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMuJHdyYXBEYXRhW2RvY1Jvd107CisgICAgICAg
ICAgICBpZiAoc3BsaXRzKSB7CisgICAgICAgICAgICAgICAgY29sdW1uID0gc3BsaXRzW3NjcmVl
blJvdyAtIHJvd107CisgICAgICAgICAgICAgICAgaWYoc2NyZWVuUm93ID4gcm93ICYmIHNwbGl0
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jQ29sdW1uID0gc3BsaXRzW3NjcmVl
blJvdyAtIHJvdyAtIDFdIHx8IHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV07CisgICAgICAgICAg
ICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhkb2NDb2x1bW4pOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAgIGlmICgheGhyKSB7
Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiY3JlYXRlWGhyKCk6IFhNTEh0dHBSZXF1ZXN0IG5v
dCBhdmFpbGFibGUiKTsKLSAgICB9CisgICAgICAgIGRvY0NvbHVtbiArPSB0aGlzLiRnZXRTdHJp
bmdTY3JlZW5XaWR0aChsaW5lLCBzY3JlZW5Db2x1bW4pWzFdOworICAgICAgICBpZiAodGhpcy4k
dXNlV3JhcE1vZGUgJiYgZG9jQ29sdW1uID49IGNvbHVtbikKKyAgICAgICAgICAgIGRvY0NvbHVt
biA9IGNvbHVtbiAtIDE7CiAKLSAgICByZXR1cm4geGhyOwotfTsKKyAgICAgICAgaWYgKGZvbGRM
aW5lKQorICAgICAgICAgICAgcmV0dXJuIGZvbGRMaW5lLmlkeFRvUG9zaXRpb24oZG9jQ29sdW1u
KTsKIAotZXhwb3J0cy5sb2FkU2NyaXB0ID0gZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2spIHsKLSAg
ICB2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07Ci0g
ICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgICAgICAgcmV0
dXJuIHtyb3c6IGRvY1JvdywgY29sdW1uOiBkb2NDb2x1bW59OworICAgIH07CisgICAgdGhpcy5k
b2N1bWVudFRvU2NyZWVuUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewor
ICAgICAgICBpZiAodHlwZW9mIGRvY0NvbHVtbiA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgICAg
ICB2YXIgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cucm93LCBkb2NS
b3cuY29sdW1uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBv
c2l0aW9uVG9Eb2N1bWVudChkb2NSb3csIGRvY0NvbHVtbik7CiAKLSAgICBzLnNyYyA9IHBhdGg7
Ci0gICAgaGVhZC5hcHBlbmRDaGlsZChzKTsKKyAgICAgICAgZG9jUm93ID0gcG9zLnJvdzsKKyAg
ICAgICAgZG9jQ29sdW1uID0gcG9zLmNvbHVtbjsKIAotICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJ
RSkKLSAgICAgICAgcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB0aGlzLnJlYWR5U3RhdGUgPT0gJ2xvYWRlZCcgJiYgY2FsbGJhY2soKTsKLSAgICAgICAg
fTsKLSAgICBlbHNlCi0gICAgICAgIHMub25sb2FkID0gY2FsbGJhY2s7Ci19OworICAgICAgICB2
YXIgc2NyZWVuUm93ID0gMDsKKyAgICAgICAgdmFyIGZvbGRTdGFydFJvdyA9IG51bGw7CisgICAg
ICAgIHZhciBmb2xkID0gbnVsbDsKKyAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGRvY1Jv
dywgZG9jQ29sdW1uLCAxKTsKKyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgIGRvY1Jv
dyA9IGZvbGQuc3RhcnQucm93OworICAgICAgICAgICAgZG9jQ29sdW1uID0gZm9sZC5zdGFydC5j
b2x1bW47CisgICAgICAgIH0KIAotfSk7CisgICAgICAgIHZhciByb3dFbmQsIHJvdyA9IDA7CiAK
LWFjZS5kZWZpbmUoJ2FjZS9saWIvZXZlbnRfZW1pdHRlcicsIFsncmVxdWlyZScsICdleHBvcnRz
JywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAKKyAg
ICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy4kZG9jUm93Q2FjaGU7CisgICAgICAgIHZhciBpID0g
dGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgZG9jUm93KTsKKyAgICAgICAgdmFyIGwg
PSByb3dDYWNoZS5sZW5ndGg7CisgICAgICAgIGlmIChsICYmIGkgPj0gMCkgeworICAgICAgICAg
ICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRo
aXMuJHNjcmVlblJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBkb2NSb3cg
PiByb3dDYWNoZVtsIC0gMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZG9D
YWNoZSA9ICFsOworICAgICAgICB9CiAKLXZhciBFdmVudEVtaXR0ZXIgPSB7fTsKKyAgICAgICAg
dmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUocm93KTsKKyAgICAgICAgdmFyIGZv
bGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5OwogCi1FdmVu
dEVtaXR0ZXIuX2VtaXQgPQotRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24o
ZXZlbnROYW1lLCBlKSB7Ci0gICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVn
aXN0cnkgfHwge307Ci0gICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhh
bmRsZXJzIHx8IHt9OworICAgICAgICB3aGlsZSAocm93IDwgZG9jUm93KSB7CisgICAgICAgICAg
ICBpZiAocm93ID49IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRM
aW5lLmVuZC5yb3cgKyAxOworICAgICAgICAgICAgICAgIGlmIChyb3dFbmQgPiBkb2NSb3cpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhp
cy5nZXROZXh0Rm9sZExpbmUocm93RW5kLCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9s
ZFN0YXJ0ID0gZm9sZExpbmUgP2ZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByb3dFbmQgPSByb3cg
KyAxOworICAgICAgICAgICAgfQogCi0gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVn
aXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKLSAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSB0aGlzLl9k
ZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXTsKLSAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGggJiYg
IWRlZmF1bHRIYW5kbGVyKQotICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzY3JlZW5Sb3cg
Kz0gdGhpcy5nZXRSb3dMZW5ndGgocm93KTsKKyAgICAgICAgICAgIHJvdyA9IHJvd0VuZDsKIAot
ICAgIGlmICh0eXBlb2YgZSAhPSAib2JqZWN0IiB8fCAhZSkKLSAgICAgICAgZSA9IHt9OworICAg
ICAgICAgICAgaWYgKGRvQ2FjaGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNo
ZS5wdXNoKHJvdyk7CisgICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChz
Y3JlZW5Sb3cpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0TGlu
ZSA9ICIiOworICAgICAgICBpZiAoZm9sZExpbmUgJiYgcm93ID49IGZvbGRTdGFydCkgeworICAg
ICAgICAgICAgdGV4dExpbmUgPSB0aGlzLmdldEZvbGREaXNwbGF5TGluZShmb2xkTGluZSwgZG9j
Um93LCBkb2NDb2x1bW4pOworICAgICAgICAgICAgZm9sZFN0YXJ0Um93ID0gZm9sZExpbmUuc3Rh
cnQucm93OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGV4dExpbmUgPSB0aGlzLmdl
dExpbmUoZG9jUm93KS5zdWJzdHJpbmcoMCwgZG9jQ29sdW1uKTsKKyAgICAgICAgICAgIGZvbGRT
dGFydFJvdyA9IGRvY1JvdzsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1v
ZGUpIHsKKyAgICAgICAgICAgIHZhciB3cmFwUm93ID0gdGhpcy4kd3JhcERhdGFbZm9sZFN0YXJ0
Um93XTsKKyAgICAgICAgICAgIHZhciBzY3JlZW5Sb3dPZmZzZXQgPSAwOworICAgICAgICAgICAg
d2hpbGUgKHRleHRMaW5lLmxlbmd0aCA+PSB3cmFwUm93W3NjcmVlblJvd09mZnNldF0pIHsKKyAg
ICAgICAgICAgICAgICBzY3JlZW5Sb3cgKys7CisgICAgICAgICAgICAgICAgc2NyZWVuUm93T2Zm
c2V0Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0TGluZSA9IHRleHRMaW5lLnN1
YnN0cmluZygKKyAgICAgICAgICAgICAgICB3cmFwUm93W3NjcmVlblJvd09mZnNldCAtIDFdIHx8
IDAsIHRleHRMaW5lLmxlbmd0aAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQogCi0gICAgaWYg
KCFlLnR5cGUpCi0gICAgICAgIGUudHlwZSA9IGV2ZW50TmFtZTsKLSAgICAKLSAgICBpZiAoIWUu
c3RvcFByb3BhZ2F0aW9uKSB7Ci0gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7Ci0gICAgICAg
IH07Ci0gICAgfQotICAgIAotICAgIGlmICghZS5wcmV2ZW50RGVmYXVsdCkgewotICAgICAgICBl
LnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLmRlZmF1bHRQ
cmV2ZW50ZWQgPSB0cnVlOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcm93OiBzY3Jl
ZW5Sb3csCisgICAgICAgICAgICBjb2x1bW46IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKHRl
eHRMaW5lKVswXQogICAgICAgICB9OwotICAgIH0KLQotICAgIGZvciAodmFyIGk9MDsgaTxsaXN0
ZW5lcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgbGlzdGVuZXJzW2ldKGUpOwotICAgICAgICBp
ZiAoZS5wcm9wYWdhdGlvblN0b3BwZWQpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCi0gICAgICAg
IHJldHVybiBkZWZhdWx0SGFuZGxlcihlKTsKLX07CisgICAgfTsKKyAgICB0aGlzLmRvY3VtZW50
VG9TY3JlZW5Db2x1bW4gPSBmdW5jdGlvbihyb3csIGRvY0NvbHVtbikgeworICAgICAgICByZXR1
cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocm93LCBkb2NDb2x1bW4pLmNvbHVtbjsK
KyAgICB9OworICAgIHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyA9IGZ1bmN0aW9uKGRvY1Jvdywg
ZG9jQ29sdW1uKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlv
bihkb2NSb3csIGRvY0NvbHVtbikucm93OworICAgIH07CisgICAgdGhpcy5nZXRTY3JlZW5MZW5n
dGggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNjcmVlblJvd3MgPSAwOworICAgICAgICB2
YXIgZm9sZCA9IG51bGw7CisgICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAg
ICAgICAgIHNjcmVlblJvd3MgPSB0aGlzLmdldExlbmd0aCgpOworICAgICAgICAgICAgdmFyIGZv
bGREYXRhID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGREYXRh
W2ldOworICAgICAgICAgICAgICAgIHNjcmVlblJvd3MgLT0gZm9sZC5lbmQucm93IC0gZm9sZC5z
dGFydC5yb3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2
YXIgbGFzdFJvdyA9IHRoaXMuJHdyYXBEYXRhLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciByb3cg
PSAwLCBpID0gMDsKKyAgICAgICAgICAgIHZhciBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsK
KyAgICAgICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOkluZmlu
aXR5OwogCi1FdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5h
bWUsIGNhbGxiYWNrKSB7Ci0gICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVs
dEhhbmRsZXJzIHx8IHt9OwotICAgIAotICAgIGlmICh0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZl
bnROYW1lXSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVmYXVsdCBoYW5kbGVyIGZv
ciAnIiArIGV2ZW50TmFtZSArICInIGlzIGFscmVhZHkgc2V0Iik7Ci0gICAgICAgIAotICAgIHRo
aXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gY2FsbGJhY2s7Ci19OworICAgICAgICAg
ICAgd2hpbGUgKHJvdyA8IGxhc3RSb3cpIHsKKyAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9
IHRoaXMuJHdyYXBEYXRhW3Jvd10ubGVuZ3RoICsgMTsKKyAgICAgICAgICAgICAgICByb3cgKys7
CisgICAgICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAg
ICAgICByb3cgPSBmb2xkLmVuZC5yb3crMTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZCA9IHRo
aXMuJGZvbGREYXRhW2krK107CisgICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQg
P2ZvbGQuc3RhcnQucm93IDpJbmZpbml0eTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAotRXZlbnRFbWl0dGVyLm9uID0KLUV2ZW50RW1pdHRlci5hZGRFdmVu
dExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnROYW1lLCBjYWxsYmFjaykgewotICAgIHRoaXMuX2V2
ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OworICAgICAgICByZXR1cm4g
c2NyZWVuUm93czsKKyAgICB9OworICAgIGZ1bmN0aW9uIGlzRnVsbFdpZHRoKGMpIHsKKyAgICAg
ICAgaWYgKGMgPCAweDExMDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBjID49IDB4MTEwMCAmJiBjIDw9IDB4MTE1RiB8fAorICAgICAgICAgICAgICAgYyA+PSAw
eDExQTMgJiYgYyA8PSAweDExQTcgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgxMUZBICYmIGMg
PD0gMHgxMUZGIHx8CisgICAgICAgICAgICAgICBjID49IDB4MjMyOSAmJiBjIDw9IDB4MjMyQSB8
fAorICAgICAgICAgICAgICAgYyA+PSAweDJFODAgJiYgYyA8PSAweDJFOTkgfHwKKyAgICAgICAg
ICAgICAgIGMgPj0gMHgyRTlCICYmIGMgPD0gMHgyRUYzIHx8CisgICAgICAgICAgICAgICBjID49
IDB4MkYwMCAmJiBjIDw9IDB4MkZENSB8fAorICAgICAgICAgICAgICAgYyA+PSAweDJGRjAgJiYg
YyA8PSAweDJGRkIgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMDAwICYmIGMgPD0gMHgzMDNF
IHx8CisgICAgICAgICAgICAgICBjID49IDB4MzA0MSAmJiBjIDw9IDB4MzA5NiB8fAorICAgICAg
ICAgICAgICAgYyA+PSAweDMwOTkgJiYgYyA8PSAweDMwRkYgfHwKKyAgICAgICAgICAgICAgIGMg
Pj0gMHgzMTA1ICYmIGMgPD0gMHgzMTJEIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzEzMSAm
JiBjIDw9IDB4MzE4RSB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMxOTAgJiYgYyA8PSAweDMx
QkEgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUUzIHx8CisgICAg
ICAgICAgICAgICBjID49IDB4MzFGMCAmJiBjIDw9IDB4MzIxRSB8fAorICAgICAgICAgICAgICAg
YyA+PSAweDMyMjAgJiYgYyA8PSAweDMyNDcgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMjUw
ICYmIGMgPD0gMHgzMkZFIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzMwMCAmJiBjIDw9IDB4
NERCRiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDRFMDAgJiYgYyA8PSAweEE0OEMgfHwKKyAg
ICAgICAgICAgICAgIGMgPj0gMHhBNDkwICYmIGMgPD0gMHhBNEM2IHx8CisgICAgICAgICAgICAg
ICBjID49IDB4QTk2MCAmJiBjIDw9IDB4QTk3QyB8fAorICAgICAgICAgICAgICAgYyA+PSAweEFD
MDAgJiYgYyA8PSAweEQ3QTMgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhEN0IwICYmIGMgPD0g
MHhEN0M2IHx8CisgICAgICAgICAgICAgICBjID49IDB4RDdDQiAmJiBjIDw9IDB4RDdGQiB8fAor
ICAgICAgICAgICAgICAgYyA+PSAweEY5MDAgJiYgYyA8PSAweEZBRkYgfHwKKyAgICAgICAgICAg
ICAgIGMgPj0gMHhGRTEwICYmIGMgPD0gMHhGRTE5IHx8CisgICAgICAgICAgICAgICBjID49IDB4
RkUzMCAmJiBjIDw9IDB4RkU1MiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEZFNTQgJiYgYyA8
PSAweEZFNjYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGRTY4ICYmIGMgPD0gMHhGRTZCIHx8
CisgICAgICAgICAgICAgICBjID49IDB4RkYwMSAmJiBjIDw9IDB4RkY2MCB8fAorICAgICAgICAg
ICAgICAgYyA+PSAweEZGRTAgJiYgYyA8PSAweEZGRTY7CisgICAgfTsKIAotICAgIHZhciBsaXN0
ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07Ci0gICAgaWYgKCFsaXN0ZW5l
cnMpCi0gICAgICAgIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9
IFtdOworfSkuY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOwogCi0gICAgaWYgKGxpc3RlbmVy
cy5pbmRleE9mKGNhbGxiYWNrKSA9PSAtMSkKLSAgICAgICAgbGlzdGVuZXJzLnB1c2goY2FsbGJh
Y2spOwotfTsKK3JlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2ZvbGRpbmciKS5Gb2xkaW5nLmNhbGwo
RWRpdFNlc3Npb24ucHJvdG90eXBlKTsKK3JlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2JyYWNrZXRf
bWF0Y2giKS5CcmFja2V0TWF0Y2guY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOwogCi1FdmVu
dEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQotRXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVu
ZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7Ci0gICAgdGhpcy5fZXZlbnRSZWdp
c3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307CiAKLSAgICB2YXIgbGlzdGVuZXJzID0g
dGhpcy5fZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdOwotICAgIGlmICghbGlzdGVuZXJzKQotICAg
ICAgICByZXR1cm47Citjb25maWcuZGVmaW5lT3B0aW9ucyhFZGl0U2Vzc2lvbi5wcm90b3R5cGUs
ICJzZXNzaW9uIiwgeworICAgIHdyYXA6IHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkg
eworICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PSAib2ZmIikKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gImZyZWUi
KQorICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHR5
cGVvZiB2YWx1ZSA9PSAic3RyaW5nIikKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50
KHZhbHVlLCAxMCkgfHwgZmFsc2U7CiAKLSAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhP
ZihjYWxsYmFjayk7Ci0gICAgaWYgKGluZGV4ICE9PSAtMSkKLSAgICAgICAgbGlzdGVuZXJzLnNw
bGljZShpbmRleCwgMSk7Ci19OworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuc2V0VXNlV3JhcE1vZGUoZmFsc2UpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB2YXIgY29sID0gdHlwZW9mIHZhbHVlID09ICJudW1iZXIiICYmIHZh
bHVlOworICAgICAgICAgICAgICAgIHRoaXMuc2V0VXNlV3JhcE1vZGUodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5zZXRXcmFwTGltaXRSYW5nZSh2YWx1ZSwgdmFsdWUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy4kd3JhcCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAg
ICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlV3JhcE1v
ZGUoKSA/IHRoaXMuZ2V0V3JhcExpbWl0UmFuZ2UoKS5taW4gfHwgImZyZWUiIDogIm9mZiI7Cisg
ICAgICAgIH0sCisgICAgICAgIGhhbmRsZXNTZXQ6IHRydWUKKyAgICB9LAorICAgIGZpcnN0TGlu
ZU51bWJlcjogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkge3RoaXMuX2VtaXQoImNoYW5nZUJy
ZWFrcG9pbnQiKTt9LAorICAgICAgICBpbml0aWFsVmFsdWU6IDEKKyAgICB9LAorICAgIHVzZVdv
cmtlcjogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uKHVzZVdvcmtlcikgeworICAgICAgICAgICAg
dGhpcy4kdXNlV29ya2VyID0gdXNlV29ya2VyOwogCi1FdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlz
dGVuZXJzID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7Ci0gICAgaWYgKHRoaXMuX2V2ZW50UmVnaXN0
cnkpIHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdOwotfTsKKyAgICAgICAgICAg
IHRoaXMuJHN0b3BXb3JrZXIoKTsKKyAgICAgICAgICAgIGlmICh1c2VXb3JrZXIpCisgICAgICAg
ICAgICAgICAgdGhpcy4kc3RhcnRXb3JrZXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgaW5pdGlh
bFZhbHVlOiB0cnVlCisgICAgfSwKKyAgICB1c2VTb2Z0VGFiczoge2luaXRpYWxWYWx1ZTogdHJ1
ZX0sCisgICAgdGFiU2l6ZTogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uKHRhYlNpemUpIHsKKyAg
ICAgICAgICAgIGlmIChpc05hTih0YWJTaXplKSB8fCB0aGlzLiR0YWJTaXplID09PSB0YWJTaXpl
KSByZXR1cm47CiAKLWV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOworICAgICAg
ICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy4kcm93TGVuZ3Ro
Q2FjaGUgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuJHRhYlNpemUgPSB0YWJTaXplOworICAgICAg
ICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlVGFiU2l6ZSIpOworICAgICAgICB9LAorICAgICAgICBp
bml0aWFsVmFsdWU6IDQsCisgICAgICAgIGhhbmRsZXNTZXQ6IHRydWUKKyAgICB9Cit9KTsKIAor
ZXhwb3J0cy5FZGl0U2Vzc2lvbiA9IEVkaXRTZXNzaW9uOwogfSk7CiAKIGFjZS5kZWZpbmUoJ2Fj
ZS9zZWxlY3Rpb24nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIv
b29wJywgJ2FjZS9saWIvbGFuZycsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3Jhbmdl
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewpAQCAtNzA1MCwxMyArNzE5
NiwxNCBAQCBSYW5nZS5mcm9tUG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgewogZXhwb3J0
cy5SYW5nZSA9IFJhbmdlOwogfSk7CiAKLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL3RleHQnLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS90b2tlbml6ZXInLCAnYWNlL21vZGUv
dGV4dF9oaWdobGlnaHRfcnVsZXMnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS91bmljb2Rl
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworYWNlLmRlZmluZSgnYWNl
L21vZGUvdGV4dCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3Rva2Vu
aXplcicsICdhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9iZWhhdmlv
dXInLCAnYWNlL3VuaWNvZGUnLCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4
cG9ydHMsIG1vZHVsZSkgewogCiAKIHZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6
ZXIiKS5Ub2tlbml6ZXI7CiB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0
X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKIHZhciBCZWhhdmlvdXIgPSBy
ZXF1aXJlKCIuL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKIHZhciB1bmljb2RlID0gcmVxdWlyZSgi
Li4vdW5pY29kZSIpOwordmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwogCiB2YXIg
TW9kZSA9IGZ1bmN0aW9uKCkgewogICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIo
bmV3IFRleHRIaWdobGlnaHRSdWxlcygpLmdldFJ1bGVzKCkpOwpAQCAtNzA4MywxMSArNzIzMCw1
MCBAQCB2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gdGhpcy4kdG9rZW5p
emVyOwogICAgIH07CiAKLSAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0
YXRlLCBkb2MsIHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5l
cyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBzdGFydFJvdywgZW5kUm93KSB7CisgICAgICAg
IHZhciBkb2MgPSBzZXNzaW9uLmRvYzsKKyAgICAgICAgdmFyIHJlZ2V4cFN0YXJ0LCBsaW5lQ29t
bWVudFN0YXJ0OworICAgICAgICBpZiAoIXRoaXMubGluZUNvbW1lbnRTdGFydCkgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlCisgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlz
LmxpbmVDb21tZW50U3RhcnQpKSB7CisgICAgICAgICAgICByZWdleHBTdGFydCA9IHRoaXMubGlu
ZUNvbW1lbnRTdGFydC5tYXAobGFuZy5lc2NhcGVSZWdFeHApLmpvaW4oInwiKTsKKyAgICAgICAg
ICAgIGxpbmVDb21tZW50U3RhcnQgPSB0aGlzLmxpbmVDb21tZW50U3RhcnRbMF07CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICByZWdleHBTdGFydCA9IGxhbmcuZXNjYXBlUmVnRXhwKHRo
aXMubGluZUNvbW1lbnRTdGFydCk7CisgICAgICAgICAgICBsaW5lQ29tbWVudFN0YXJ0ID0gdGhp
cy5saW5lQ29tbWVudFN0YXJ0OworICAgICAgICB9CisgICAgICAgIHJlZ2V4cFN0YXJ0ID0gbmV3
IFJlZ0V4cCgiXlxccyooPzoiICsgcmVnZXhwU3RhcnQgKyAiKSA/Iik7CisKKyAgICAgICAgdmFy
IHJlbW92ZUNvbW1lbnQgPSB0cnVlOworICAgICAgICB2YXIgbWluU3BhY2UgPSBJbmZpbml0eTsK
KyAgICAgICAgdmFyIGluZGVudGF0aW9ucyA9IFtdOworCisgICAgICAgIGZvciAodmFyIGkgPSBz
dGFydFJvdzsgaSA8PSBlbmRSb3c7IGkrKykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBkb2Mu
Z2V0TGluZShpKTsKKyAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFN8JC8p
OworICAgICAgICAgICAgaW5kZW50YXRpb25zW2ldID0gaW5kZW50OworICAgICAgICAgICAgaWYg
KGluZGVudCA8IG1pblNwYWNlKQorICAgICAgICAgICAgICAgIG1pblNwYWNlID0gaW5kZW50Owor
ICAgICAgICAgICAgaWYgKHJlbW92ZUNvbW1lbnQgJiYgIXJlZ2V4cFN0YXJ0LnRlc3QobGluZSkp
CisgICAgICAgICAgICAgICAgcmVtb3ZlQ29tbWVudCA9IGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHJlbW92ZUNvbW1lbnQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFy
dFJvdzsgaSA8PSBlbmRSb3c7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBsaW5lID0gZG9j
LmdldExpbmUoaSk7CisgICAgICAgICAgICAgICAgdmFyIG0gPSBsaW5lLm1hdGNoKHJlZ2V4cFN0
YXJ0KTsKKyAgICAgICAgICAgICAgICBkb2MucmVtb3ZlSW5MaW5lKGksIGluZGVudGF0aW9uc1tp
XSwgbVswXS5sZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbGluZUNvbW1lbnRTdGFydCArPSAiICI7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
c3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHsKKyAgICAgICAgICAgICAgICBkb2MuaW5zZXJ0
SW5MaW5lKHtyb3c6IGksIGNvbHVtbjogbWluU3BhY2V9LCBsaW5lQ29tbWVudFN0YXJ0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH07CiAKICAgICB0aGlzLmdldE5leHRMaW5lSW5k
ZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewotICAgICAgICByZXR1cm4gIiI7Cisg
ICAgICAgIHJldHVybiB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgfTsKIAogICAgIHRoaXMu
Y2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CkBAIC03MTcxLDgg
KzczNTcsOCBAQCBleHBvcnRzLk1vZGUgPSBNb2RlOwogfSk7CiAKIGFjZS5kZWZpbmUoJ2FjZS90
b2tlbml6ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotdmFyIFRva2VuaXplciA9IGZ1bmN0aW9uKHJ1bGVz
LCBmbGFnKSB7Ci0gICAgZmxhZyA9IGZsYWcgPyAiZyIgKyBmbGFnIDogImciOwordmFyIE1BWF9U
T0tFTl9DT1VOVCA9IDEwMDA7Cit2YXIgVG9rZW5pemVyID0gZnVuY3Rpb24ocnVsZXMpIHsKICAg
ICB0aGlzLnN0YXRlcyA9IHJ1bGVzOwogCiAgICAgdGhpcy5yZWdFeHBzID0ge307CkBAIC03MTgy
LDEzICs3MzY4LDE3IEBAIHZhciBUb2tlbml6ZXIgPSBmdW5jdGlvbihydWxlcywgZmxhZykgewog
ICAgICAgICB2YXIgcnVsZVJlZ0V4cHMgPSBbXTsKICAgICAgICAgdmFyIG1hdGNoVG90YWwgPSAw
OwogICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMubWF0Y2hNYXBwaW5nc1trZXldID0ge2RlZmF1
bHRUb2tlbjogInRleHQifTsKKyAgICAgICAgdmFyIGZsYWcgPSAiZyI7CiAKICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdmFyIHJ1
bGUgPSBzdGF0ZVtpXTsKLSAgICAgICAgICAgIGlmIChydWxlLmRlZmF1bHRUb2tlbikgeworICAg
ICAgICAgICAgaWYgKHJ1bGUuZGVmYXVsdFRva2VuKQogICAgICAgICAgICAgICAgIG1hcHBpbmcu
ZGVmYXVsdFRva2VuID0gcnVsZS5kZWZhdWx0VG9rZW47CisgICAgICAgICAgICBpZiAocnVsZS5j
YXNlSW5zZW5zaXRpdmUpCisgICAgICAgICAgICAgICAgZmxhZyA9ICJnaSI7CisgICAgICAgICAg
ICBpZiAocnVsZS5yZWdleCA9PSBudWxsKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocnVsZS5yZWdleCBpbnN0
YW5jZW9mIFJlZ0V4cCkKICAgICAgICAgICAgICAgICBydWxlLnJlZ2V4ID0gcnVsZS5yZWdleC50
b1N0cmluZygpLnNsaWNlKDEsIC0xKTsKICAgICAgICAgICAgIHZhciBhZGp1c3RlZHJlZ2V4ID0g
cnVsZS5yZWdleDsKQEAgLTcyMjksMTIgKzc0MTksMTIgQEAgdmFyIFRva2VuaXplciA9IGZ1bmN0
aW9uKHJ1bGVzLCBmbGFnKSB7CiAgICAgdGhpcy4kYXJyYXlUb2tlbnMgPSBmdW5jdGlvbihzdHIp
IHsKICAgICAgICAgaWYgKCFzdHIpCiAgICAgICAgICAgICByZXR1cm4gW107Ci0gICAgICAgIHZh
ciB2YWx1ZXMgPSBzdHIuc3BsaXQodGhpcy5zcGxpdFJlZ2V4KQorICAgICAgICB2YXIgdmFsdWVz
ID0gdGhpcy5zcGxpdFJlZ2V4LmV4ZWMoc3RyKTsKICAgICAgICAgdmFyIHRva2VucyA9IFtdOwog
ICAgICAgICB2YXIgdHlwZXMgPSB0aGlzLnRva2VuQXJyYXk7Ci0gICAgICAgIGlmICh0eXBlcy5s
ZW5ndGggIT0gdmFsdWVzLmxlbmd0aCAtIDIpIHsKKyAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCAh
PSB2YWx1ZXMubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKQot
ICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IodHlwZXMubGVuZ3RoICwgdmFsdWVzLmxlbmd0
aCAtIDIsIHN0ciwgdGhpcy5zcGxpdFJlZ2V4KTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKHR5cGVzICwgdmFsdWVzLCBzdHIsIHRoaXMuc3BsaXRSZWdleCwgdGhpcyk7CiAgICAgICAg
ICAgICByZXR1cm4gW3t0eXBlOiAiZXJyb3IuaW52YWxpZCIsIHZhbHVlOiBzdHJ9XTsKICAgICAg
ICAgfQogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CkBA
IC03MjU3LDggKzc0NDcsOCBAQCB2YXIgVG9rZW5pemVyID0gZnVuY3Rpb24ocnVsZXMsIGZsYWcp
IHsKICAgICB9OwogICAgIAogICAgIHRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHAgPSBmdW5jdGlv
bihzcmMsIGZsYWcpIHsKLSAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoL1woXD89KFteKCldfFxc
LikqP1wpJC8sICIiKTsKLSAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoc3JjLCBmbGFnKTsKKyAg
ICAgICAgc3JjID0gc3JjLnJlcGxhY2UoL1woXD89KFteKCldfFxcLnxcKChbXigpXXxcXC4pKj9c
KSkqXCkoPz1cKSokKS8sICIiKTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoc3JjLCAoZmxh
Z3x8IiIpLnJlcGxhY2UoImciLCAiIikpOwogICAgIH07CiAgICAgdGhpcy5nZXRMaW5lVG9rZW5z
ID0gZnVuY3Rpb24obGluZSwgc3RhcnRTdGF0ZSkgewogICAgICAgICBpZiAoc3RhcnRTdGF0ZSAm
JiB0eXBlb2Ygc3RhcnRTdGF0ZSAhPSAic3RyaW5nIikgewpAQCAtNzMwNSw3ICs3NDk1LDExIEBA
IHZhciBUb2tlbml6ZXIgPSBmdW5jdGlvbihydWxlcywgZmxhZykgewogICAgICAgICAgICAgICAg
ICAgICA6IHJ1bGUudG9rZW47CiAKICAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IHJ1bGUubmV4dDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBydWxlLm5leHQgPT0gInN0cmluZyIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBydWxlLm5leHQ7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IHJ1bGUubmV4dChj
dXJyZW50U3RhdGUsIHN0YWNrKTsKKwogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMu
c3RhdGVzW2N1cnJlbnRTdGF0ZV07CiAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUuZXJyb3Ig
JiYgY29uc29sZS5lcnJvcihjdXJyZW50U3RhdGUsICJkb2Vzbid0IGV4aXN0Iik7CkBAIC03MzQy
LDYgKzc1MzYsMTIgQEAgdmFyIFRva2VuaXplciA9IGZ1bmN0aW9uKHJ1bGVzLCBmbGFnKSB7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4Owor
CisgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IE1BWF9UT0tFTl9DT1VOVCkgeworICAg
ICAgICAgICAgICAgIHRva2VuLnZhbHVlICs9IGxpbmUuc3Vic3RyKGxhc3RJbmRleCk7CisgICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gInN0YXJ0IgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRva2VuLnR5cGUpCkBA
IC03MzcwLDggKzc1NzAsNyBAQCB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5lIiwKICAgICAgICAgICAgIHJlZ2V4IDog
J14kJwogICAgICAgICB9LCB7Ci0gICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKLSAgICAgICAg
ICAgIHJlZ2V4IDogIi4rIgorICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInRleHQiCiAgICAg
ICAgIH1dCiAgICAgfTsKIH07CkBAIC03NDA1LDcgKzc2MDQsNyBAQCB2YXIgVGV4dEhpZ2hsaWdo
dFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZW1iZWRS
dWxlcykKICAgICAgICAgICAgICAgICBzdGF0ZXMucHVzaChwcmVmaXggKyBrZXkpOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMuYWRkUnVsZXMoZW1iZWRSdWxlcywgcHJlZml4
KTsKIAogICAgICAgICBpZiAoZXNjYXBlUnVsZXMpIHsKQEAgLTc0MjIsMzYgKzc2MjEsODQgQEAg
dmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgIHRoaXMuZ2V0RW1iZWRz
ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiB0aGlzLiRlbWJlZHM7CiAgICAgfTsKLSAg
ICAKKworICAgIHZhciBwdXNoU3RhdGUgPSBmdW5jdGlvbihjdXJyZW50U3RhdGUsIHN0YWNrKSB7
CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gInN0YXJ0IikKKyAgICAgICAgICAgIHN0YWNr
LnVuc2hpZnQodGhpcy5uZXh0U3RhdGUsIGN1cnJlbnRTdGF0ZSk7CisgICAgICAgIHJldHVybiB0
aGlzLm5leHRTdGF0ZTsKKyAgICB9OworICAgIHZhciBwb3BTdGF0ZSA9IGZ1bmN0aW9uKGN1cnJl
bnRTdGF0ZSwgc3RhY2spIHsKKyAgICAgICAgaWYgKHN0YWNrWzBdICE9PSBjdXJyZW50U3RhdGUp
CisgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKKyAgICAgICAgc3RhY2suc2hpZnQoKTsKKyAg
ICAgICAgcmV0dXJuIHN0YWNrLnNoaWZ0KCk7CisgICAgfTsKKwogICAgIHRoaXMubm9ybWFsaXpl
UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIGlkID0gMDsKLSAgICAgICAgZm9yICh2
YXIga2V5IGluIHRoaXMuJHJ1bGVzKSB7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLiRy
dWxlc1trZXldOworICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLiRydWxlczsKKyAgICAgICAgZnVu
Y3Rpb24gcHJvY2Vzc1N0YXRlKGtleSkgeworICAgICAgICAgICAgdmFyIHN0YXRlID0gcnVsZXNb
a2V5XTsKKyAgICAgICAgICAgIHN0YXRlLnByb2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAg
dmFyIHJ1bGUgPSBzdGF0ZVtpXTsKLSAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0ICYmIEFy
cmF5LmlzQXJyYXkocnVsZS5uZXh0KSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVO
YW1lID0gcnVsZS5zdGF0ZU5hbWUgfHwgKCJzdGF0ZSIgKyBpZCsrKTsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy4kcnVsZXNbc3RhdGVOYW1lXSA9IHJ1bGUubmV4dDsKKyAgICAgICAgICAgICAg
ICBpZiAoIXJ1bGUucmVnZXggJiYgcnVsZS5zdGFydCkgeworICAgICAgICAgICAgICAgICAgICBy
dWxlLnJlZ2V4ID0gcnVsZS5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLm5l
eHQpCisgICAgICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBbXTsKKyAgICAgICAgICAg
ICAgICAgICAgcnVsZS5uZXh0LnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dFRva2VuOiBydWxlLnRva2VuCisgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuOiBydWxlLnRva2VuICsgIi5lbmQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVnZXg6IHJ1bGUuZW5kIHx8IHJ1bGUuc3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0OiAicG9wIgorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgcnVsZS50b2tlbiA9IHJ1bGUudG9rZW4gKyAiLnN0YXJ0IjsKKyAgICAgICAgICAg
ICAgICAgICAgcnVsZS5wdXNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdmFyIG5leHQgPSBydWxlLm5leHQgfHwgcnVsZS5wdXNoOworICAgICAgICAgICAgICAg
IGlmIChuZXh0ICYmIEFycmF5LmlzQXJyYXkobmV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHN0YXRlTmFtZSA9IHJ1bGUuc3RhdGVOYW1lIHx8IChydWxlLnRva2VuICsgaWQrKyk7Cisg
ICAgICAgICAgICAgICAgICAgIHJ1bGVzW3N0YXRlTmFtZV0gPSBuZXh0OwogICAgICAgICAgICAg
ICAgICAgICBydWxlLm5leHQgPSBzdGF0ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIHByb2Nl
c3NTdGF0ZShzdGF0ZU5hbWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAi
cG9wIikgeworICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQgPSBwb3BTdGF0ZTsKICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocnVsZS5wdXNoKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJ1bGUubmV4dFN0YXRlID0gcnVsZS5uZXh0IHx8IHJ1bGUucHVzaDsKKyAg
ICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gcHVzaFN0YXRlOworICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgcnVsZS5wdXNoOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
ICAgIGlmIChydWxlLnJ1bGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByIGlu
IHJ1bGUucnVsZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1ty
XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1tyXS5wdXNo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRydWxlc1tyXS5wdXNoLmFw
cGx5KHRoaXMuJHJ1bGVzW3JdLCBydWxlLnJ1bGVzW3JdKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgciBpbiBydWxlLnJ1bGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cnVsZXNbcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZXNbcl0ucHVz
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXNbcl0ucHVzaC5hcHBseShy
dWxlc1tyXSwgcnVsZS5ydWxlc1tyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJ1bGVzW3JdID0gcnVsZS5ydWxl
c1tyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlc1tyXSA9IHJ1bGUucnVsZXNb
cl07CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuaW5jbHVkZSB8fCB0eXBl
b2YgcnVsZSA9PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtp
LCAxXS5jb25jYXQodGhpcy4kcnVsZXNbcnVsZS5pbmNsdWRlIHx8IHJ1bGVdKTsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGluY2x1ZGVOYW1lID0gcnVsZS5pbmNsdWRlIHx8IHJ1bGU7CisgICAg
ICAgICAgICAgICAgICAgIHZhciB0b0luc2VydCA9IHJ1bGVzW2luY2x1ZGVOYW1lXTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocnVsZSkpCisgICAgICAgICAgICAg
ICAgICAgIHRvSW5zZXJ0ID0gcnVsZTsKKworICAgICAgICAgICAgICAgIGlmICh0b0luc2VydCkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtpLCAxXS5jb25jYXQodG9JbnNlcnQp
OwogICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5ub0VzY2FwZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3MgPSBhcmdzLmZpbHRlcihmdW5jdGlvbih4KSB7cmV0dXJuICF4Lm5leHQ7
fSk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNwbGljZS5hcHBseShzdGF0ZSwgYXJncyk7
CisgICAgICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICAgICAgdG9JbnNlcnQg
PSBudWxsCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CisgICAg
ICAgIH07CisgICAgICAgIE9iamVjdC5rZXlzKHJ1bGVzKS5mb3JFYWNoKHByb2Nlc3NTdGF0ZSk7
CiAgICAgfTsKIAogICAgIHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlciA9IGZ1bmN0aW9uKG1hcCwg
ZGVmYXVsdFRva2VuLCBpZ25vcmVDYXNlLCBzcGxpdENoYXIpIHsKQEAgLTgwOTQsNyArODM0MSw2
IEBAIGFjZS5kZWZpbmUoJ2FjZS9iYWNrZ3JvdW5kX3Rva2VuaXplcicsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpCiAKIHZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9v
b3AiKTsKIHZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIiku
RXZlbnRFbWl0dGVyOwotdmFyIE1BWF9MSU5FX0xFTkdUSCA9IDUwMDA7CiAKIHZhciBCYWNrZ3Jv
dW5kVG9rZW5pemVyID0gZnVuY3Rpb24odG9rZW5pemVyLCBlZGl0b3IpIHsKICAgICB0aGlzLnJ1
bm5pbmcgPSBmYWxzZTsKQEAgLTgyMDYsMTUgKzg0NTIsNyBAQCB2YXIgQmFja2dyb3VuZFRva2Vu
aXplciA9IGZ1bmN0aW9uKHRva2VuaXplciwgZWRpdG9yKSB7CiAgICAgICAgIHZhciBsaW5lID0g
dGhpcy5kb2MuZ2V0TGluZShyb3cpOwogICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1ty
b3cgLSAxXTsKIAotICAgICAgICBpZiAobGluZS5sZW5ndGggPiBNQVhfTElORV9MRU5HVEgpIHsK
LSAgICAgICAgICAgIHZhciBvdmVyZmxvdyA9IHt2YWx1ZTogbGluZS5zdWJzdHIoTUFYX0xJTkVf
TEVOR1RIKSwgdHlwZTogInRleHQifTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKDAs
IE1BWF9MSU5FX0xFTkdUSCk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRv
a2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKLSAgICAgICAgaWYgKG92ZXJmbG93
KSB7Ci0gICAgICAgICAgICBkYXRhLnRva2Vucy5wdXNoKG92ZXJmbG93KTsKLSAgICAgICAgICAg
IGRhdGEuc3RhdGUgPSAic3RhcnQiOwotICAgICAgICB9CisgICAgICAgIHZhciBkYXRhID0gdGhp
cy50b2tlbml6ZXIuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSwgcm93KTsKIAogICAgICAgICBp
ZiAodGhpcy5zdGF0ZXNbcm93XSArICIiICE9PSBkYXRhLnN0YXRlICsgIiIpIHsKICAgICAgICAg
ICAgIHRoaXMuc3RhdGVzW3Jvd10gPSBkYXRhLnN0YXRlOwpAQCAtODMxNSw3ICs4NTUzLDYgQEAg
ZnVuY3Rpb24gRm9sZGluZygpIHsKICAgICAgICAgfQogICAgIH07CiAgICAgdGhpcy5nZXRGb2xk
c0luUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewotICAgICAgICByYW5nZSA9IHJhbmdlLmNsb25l
KCk7CiAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0OwogICAgICAgICB2YXIgZW5kID0g
cmFuZ2UuZW5kOwogICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CkBAIC04
MzQ4LDYgKzg1ODUsOSBAQCBmdW5jdGlvbiBGb2xkaW5nKCkgewogICAgICAgICAgICAgICAgIGZv
dW5kRm9sZHMucHVzaChmb2xkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBz
dGFydC5jb2x1bW4gLT0gMTsKKyAgICAgICAgZW5kLmNvbHVtbiArPSAxOworCiAgICAgICAgIHJl
dHVybiBmb3VuZEZvbGRzOwogICAgIH07CiAgICAgdGhpcy5nZXRBbGxGb2xkcyA9IGZ1bmN0aW9u
KCkgewpAQCAtOTI5MCwxMCArOTUzMCwxMCBAQCB2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5n
ZSIpLlJhbmdlOwogCiBmdW5jdGlvbiBCcmFja2V0TWF0Y2goKSB7CiAKLSAgICB0aGlzLmZpbmRN
YXRjaGluZ0JyYWNrZXQgPSBmdW5jdGlvbihwb3NpdGlvbiwgY2hhcikgeworICAgIHRoaXMuZmlu
ZE1hdGNoaW5nQnJhY2tldCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCBjaHIpIHsKICAgICAgICAgaWYg
KHBvc2l0aW9uLmNvbHVtbiA9PSAwKSByZXR1cm4gbnVsbDsKIAotICAgICAgICB2YXIgY2hhckJl
Zm9yZUN1cnNvciA9IGNoYXIgfHwgdGhpcy5nZXRMaW5lKHBvc2l0aW9uLnJvdykuY2hhckF0KHBv
c2l0aW9uLmNvbHVtbi0xKTsKKyAgICAgICAgdmFyIGNoYXJCZWZvcmVDdXJzb3IgPSBjaHIgfHwg
dGhpcy5nZXRMaW5lKHBvc2l0aW9uLnJvdykuY2hhckF0KHBvc2l0aW9uLmNvbHVtbi0xKTsKICAg
ICAgICAgaWYgKGNoYXJCZWZvcmVDdXJzb3IgPT0gIiIpIHJldHVybiBudWxsOwogCiAgICAgICAg
IHZhciBtYXRjaCA9IGNoYXJCZWZvcmVDdXJzb3IubWF0Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1d
KS8pOwpAQCAtOTc1OCw3ICs5OTk4LDcgQEAgdmFyIENvbW1hbmRNYW5hZ2VyID0gZnVuY3Rpb24o
cGxhdGZvcm0sIGNvbW1hbmRzKSB7CiAgICAgdGhpcy5jb21tbWFuZEtleUJpbmRpbmcgPSB7fTsK
IAogICAgIHRoaXMuYWRkQ29tbWFuZHMoY29tbWFuZHMpOwotICAgIAorCiAgICAgdGhpcy5zZXRE
ZWZhdWx0SGFuZGxlcigiZXhlYyIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgcmV0dXJuIGUuY29t
bWFuZC5leGVjKGUuZWRpdG9yLCBlLmFyZ3MgfHwge30pOwogICAgIH0pOwpAQCAtOTc4MCwxMSAr
MTAwMjAsOSBAQCBvb3AuaW5oZXJpdHMoQ29tbWFuZE1hbmFnZXIsIEhhc2hIYW5kbGVyKTsKICAg
ICAgICAgaWYgKGVkaXRvciAmJiBlZGl0b3IuJHJlYWRPbmx5ICYmICFjb21tYW5kLnJlYWRPbmx5
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHZhciByZXR2YWx1ZSA9IHRo
aXMuX2VtaXQoImV4ZWMiLCB7Ci0gICAgICAgICAgICBlZGl0b3I6IGVkaXRvciwKLSAgICAgICAg
ICAgIGNvbW1hbmQ6IGNvbW1hbmQsCi0gICAgICAgICAgICBhcmdzOiBhcmdzCi0gICAgICAgIH0p
OworICAgICAgICB2YXIgZSA9IHtlZGl0b3I6IGVkaXRvciwgY29tbWFuZDogY29tbWFuZCwgYXJn
czogYXJnc307CisgICAgICAgIHZhciByZXR2YWx1ZSA9IHRoaXMuX2VtaXQoImV4ZWMiLCBlKTsK
KyAgICAgICAgdGhpcy5fc2lnbmFsKCJhZnRlckV4ZWMiLCBlKTsKIAogICAgICAgICByZXR1cm4g
cmV0dmFsdWUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlOwogICAgIH07CkBAIC05ODU0LDcgKzEw
MDkyLDcgQEAgZXhwb3J0cy5Db21tYW5kTWFuYWdlciA9IENvbW1hbmRNYW5hZ2VyOwogYWNlLmRl
ZmluZSgnYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywg
J21vZHVsZScgLCAnYWNlL2xpYi9rZXlzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgewogCiAKLXZhciBrZXlVdGlsICA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7Cit2YXIg
a2V5VXRpbCA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7CiAKIGZ1bmN0aW9uIEhhc2hIYW5kbGVy
KGNvbmZpZywgcGxhdGZvcm0pIHsKICAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07CkBAIC05
OTQyLDYgKzEwMTgwLDkgQEAgZnVuY3Rpb24gSGFzaEhhbmRsZXIoY29uZmlnLCBwbGF0Zm9ybSkg
ewogICAgICAgICB0aGlzLmJpbmRLZXkoa2V5LCBjb21tYW5kKTsKICAgICB9OwogICAgIHRoaXMu
cGFyc2VLZXlzID0gZnVuY3Rpb24oa2V5cykgeworICAgICAgICBpZiAoa2V5cy5pbmRleE9mKCIg
IikgIT0gLTEpCisgICAgICAgICAgICBrZXlzID0ga2V5cy5zcGxpdCgvXHMrLykucG9wKCk7CisK
ICAgICAgICAgdmFyIHBhcnRzID0ga2V5cy50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXC1cK10oW1wt
XCtdKT8vKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHh9KTsKICAgICAgICAgdmFyIGtleSA9
IHBhcnRzLnBvcCgpOwogCkBAIC05OTU2LDggKzEwMTk3LDExIEBAIGZ1bmN0aW9uIEhhc2hIYW5k
bGVyKGNvbmZpZywgcGxhdGZvcm0pIHsKICAgICAgICAgdmFyIGhhc2hJZCA9IDA7CiAgICAgICAg
IGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgIHZhciBtb2Rp
ZmllciA9IGtleVV0aWwuS0VZX01PRFNbcGFydHNbaV1dOwotICAgICAgICAgICAgaWYgKG1vZGlm
aWVyID09IG51bGwpCi0gICAgICAgICAgICAgICAgdGhyb3cgImludmFsaWQgbW9kaWZpZXIgIiAr
IHBhcnRzW2ldICsgIiBpbiAiICsga2V5czsKKyAgICAgICAgICAgIGlmIChtb2RpZmllciA9PSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9ICJ1bmRlZmluZWQi
KQorICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImludmFsaWQgbW9kaWZpZXIgIiArIHBh
cnRzW2ldICsgIiBpbiAiICsga2V5cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaGFzaElkIHw9IG1vZGlmaWVyOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiB7a2V5OiBrZXksIGhhc2hJZDogaGFzaElkfTsKQEAgLTEwNDU1LDcg
KzEwNjk5LDcgQEAgdmFyIFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7CiBleHBvcnRzLlVuZG9N
YW5hZ2VyID0gVW5kb01hbmFnZXI7CiB9KTsKIAotYWNlLmRlZmluZSgnYWNlL3ZpcnR1YWxfcmVu
ZGVyZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywg
J2FjZS9saWIvZG9tJywgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNl
L2NvbmZpZycsICdhY2UvbGliL25ldCcsICdhY2UvbGF5ZXIvZ3V0dGVyJywgJ2FjZS9sYXllci9t
YXJrZXInLCAnYWNlL2xheWVyL3RleHQnLCAnYWNlL2xheWVyL2N1cnNvcicsICdhY2Uvc2Nyb2xs
YmFyJywgJ2FjZS9yZW5kZXJsb29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKK2FjZS5kZWZpbmUoJ2FjZS92aXJ0dWFsX3Jl
bmRlcmVyJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcs
ICdhY2UvbGliL2RvbScsICdhY2UvbGliL2V2ZW50JywgJ2FjZS9saWIvdXNlcmFnZW50JywgJ2Fj
ZS9jb25maWcnLCAnYWNlL2xheWVyL2d1dHRlcicsICdhY2UvbGF5ZXIvbWFya2VyJywgJ2FjZS9s
YXllci90ZXh0JywgJ2FjZS9sYXllci9jdXJzb3InLCAnYWNlL3Njcm9sbGJhcicsICdhY2UvcmVu
ZGVybG9vcCcsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CiAKIAogdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwpAQCAt
MTA0NjMsNyArMTA3MDcsNiBAQCB2YXIgZG9tID0gcmVxdWlyZSgiLi9saWIvZG9tIik7CiB2YXIg
ZXZlbnQgPSByZXF1aXJlKCIuL2xpYi9ldmVudCIpOwogdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUo
Ii4vbGliL3VzZXJhZ2VudCIpOwogdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Ci12
YXIgbmV0ID0gcmVxdWlyZSgiLi9saWIvbmV0Iik7CiB2YXIgR3V0dGVyTGF5ZXIgPSByZXF1aXJl
KCIuL2xheWVyL2d1dHRlciIpLkd1dHRlcjsKIHZhciBNYXJrZXJMYXllciA9IHJlcXVpcmUoIi4v
bGF5ZXIvbWFya2VyIikuTWFya2VyOwogdmFyIFRleHRMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIv
dGV4dCIpLlRleHQ7CkBAIC0xMDY4Niw3ICsxMDkyOSw3IEBAIGN1cnNvcjogbW92ZTtcCiB9XAog
LmFjZV9ndXR0ZXItdG9vbHRpcCB7XAogYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcCi1iYWNrZ3Jv
dW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50
LCByZ2JhKDAsIDAsIDAsIDAuMSkpO1wKK2JhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFy
LWdyYWRpZW50KHRvcCwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XAogYmFja2dy
b3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEo
MCwgMCwgMCwgMC4xKSk7XAogYm9yZGVyOiAxcHggc29saWQgZ3JheTtcCiBib3JkZXItcmFkaXVz
OiAxcHg7XApAQCAtMTA4MjQsNyArMTEwNjcsNiBAQCB2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVu
Y3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewogICAgIHRoaXMuY29udGVudC5jbGFzc05hbWUgPSAi
YWNlX2NvbnRlbnQiOwogICAgIHRoaXMuc2Nyb2xsZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50
KTsKIAotICAgIHRoaXMuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZSh0cnVlKTsKICAgICB0aGlzLiRn
dXR0ZXJMYXllciA9IG5ldyBHdXR0ZXJMYXllcih0aGlzLiRndXR0ZXIpOwogICAgIHRoaXMuJGd1
dHRlckxheWVyLm9uKCJjaGFuZ2VHdXR0ZXJXaWR0aCIsIHRoaXMub25HdXR0ZXJSZXNpemUuYmlu
ZCh0aGlzKSk7CiAKQEAgLTEwODM5LDggKzExMDgxLDYgQEAgdmFyIFZpcnR1YWxSZW5kZXJlciA9
IGZ1bmN0aW9uKGNvbnRhaW5lciwgdGhlbWUpIHsKICAgICB0aGlzLiRob3JpelNjcm9sbCA9IGZh
bHNlOwogICAgIHRoaXMuJGhvcml6U2Nyb2xsQWx3YXlzVmlzaWJsZSA9IGZhbHNlOwogCi0gICAg
dGhpcy4kYW5pbWF0ZWRTY3JvbGwgPSBmYWxzZTsKLQogICAgIHRoaXMuc2Nyb2xsQmFyID0gbmV3
IFNjcm9sbEJhcih0aGlzLmNvbnRhaW5lcik7CiAgICAgdGhpcy5zY3JvbGxCYXIuYWRkRXZlbnRM
aXN0ZW5lcigic2Nyb2xsIiwgZnVuY3Rpb24oZSkgewogICAgICAgICBpZiAoIV9zZWxmLiRpblNj
cm9sbEFuaW1hdGlvbikKQEAgLTEwODk1LDEwICsxMTEzNSwxMSBAQCB2YXIgVmlydHVhbFJlbmRl
cmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewogCiAgICAgdGhpcy51cGRhdGVDaGFy
YWN0ZXJTaXplKCk7CiAgICAgdGhpcy5zZXRQYWRkaW5nKDQpOworICAgIGNvbmZpZy5yZXNldE9w
dGlvbnModGhpcyk7CisgICAgY29uZmlnLl9lbWl0KCJyZW5kZXJlciIsIHRoaXMpOwogfTsKIAog
KGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc2hvd0d1dHRlciA9IHRydWU7CiAKICAgICB0aGlzLkNI
QU5HRV9DVVJTT1IgPSAxOwogICAgIHRoaXMuQ0hBTkdFX01BUktFUiA9IDI7CkBAIC0xMDkxMywy
OSArMTExNTQsMjkgQEAgdmFyIFZpcnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNvbnRhaW5lciwg
dGhlbWUpIHsKICAgICB0aGlzLkNIQU5HRV9IX1NDUk9MTCA9IDEwMjQ7CiAKICAgICBvb3AuaW1w
bGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7Ci0gICAgCisKICAgICB0aGlzLnVwZGF0ZUNoYXJh
Y3RlclNpemUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5hbGxv
d0JvbGRGb250cyAhPSB0aGlzLiRhbGxvd0JvbGRGb250cykgewogICAgICAgICAgICAgdGhpcy4k
YWxsb3dCb2xkRm9udHMgPSB0aGlzLiR0ZXh0TGF5ZXIuYWxsb3dCb2xkRm9udHM7CiAgICAgICAg
ICAgICB0aGlzLnNldFN0eWxlKCJhY2Vfbm9ib2xkIiwgIXRoaXMuJGFsbG93Qm9sZEZvbnRzKTsK
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0aGlzLmNoYXJhY3RlcldpZHRoID0gdGhp
cy4kdGV4dExheWVyLmdldENoYXJhY3RlcldpZHRoKCk7CiAgICAgICAgIHRoaXMubGluZUhlaWdo
dCA9IHRoaXMuJHRleHRMYXllci5nZXRMaW5lSGVpZ2h0KCk7CiAgICAgICAgIHRoaXMuJHVwZGF0
ZVByaW50TWFyZ2luKCk7CiAgICAgfTsKICAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihz
ZXNzaW9uKSB7CiAgICAgICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgICAgIAorCiAg
ICAgICAgIHRoaXMuc2Nyb2xsZXIuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxlciI7Ci0gICAgICAg
IAorCiAgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7CiAgICAg
ICAgIHRoaXMuJG1hcmtlckJhY2suc2V0U2Vzc2lvbihzZXNzaW9uKTsKICAgICAgICAgdGhpcy4k
bWFya2VyRnJvbnQuc2V0U2Vzc2lvbihzZXNzaW9uKTsKICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5
ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKICAgICAgICAgdGhpcy4kdGV4dExheWVyLnNldFNlc3Np
b24oc2Vzc2lvbik7CiAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVM
TCk7Ci0gICAgICAgIAorCiAgICAgfTsKICAgICB0aGlzLnVwZGF0ZUxpbmVzID0gZnVuY3Rpb24o
Zmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICAgaWYgKGxhc3RSb3cgPT09IHVuZGVmaW5lZCkK
QEAgLTEwOTU0LDcgKzExMTk1LDcgQEAgdmFyIFZpcnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNv
bnRhaW5lciwgdGhlbWUpIHsKICAgICAgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMubGFz
dFJvdyA8IGxhc3RSb3cpCiAgICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxhc3RS
b3cgPSBsYXN0Um93OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0aGlzLiRj
aGFuZ2VkTGluZXMuZmlyc3RSb3cgPiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3cgfHwKICAgICAg
ICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93IDwgdGhpcy5sYXllckNvbmZpZy5maXJz
dFJvdykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwOTY5LDE4ICsxMTIxMCwxNiBAQCB2YXIg
VmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewogICAgICAgICB0
aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOwogICAgIH07CiAgICAgdGhpcy51
cGRhdGVGdWxsID0gZnVuY3Rpb24oZm9yY2UpIHsKLSAgICAgICAgaWYgKGZvcmNlKXsKKyAgICAg
ICAgaWYgKGZvcmNlKQogICAgICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyh0aGlzLkNIQU5H
RV9GVUxMLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgZWxzZQog
ICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKLSAgICAg
ICAgfQogICAgIH07CiAgICAgdGhpcy51cGRhdGVGb250U2l6ZSA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpOwogICAgIH07CiAgICAg
dGhpcy5vblJlc2l6ZSA9IGZ1bmN0aW9uKGZvcmNlLCBndXR0ZXJXaWR0aCwgd2lkdGgsIGhlaWdo
dCkgewotICAgICAgICB2YXIgY2hhbmdlcyA9IHRoaXMuQ0hBTkdFX1NJWkU7CisgICAgICAgIHZh
ciBjaGFuZ2VzID0gMDsKICAgICAgICAgdmFyIHNpemUgPSB0aGlzLiRzaXplOwogCiAgICAgICAg
IGlmICh0aGlzLnJlc2l6aW5nID4gMikKQEAgLTEwOTk0LDggKzExMjMzLDE0IEBAIHZhciBWaXJ0
dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7CiAKICAgICAgICAgaWYg
KGhlaWdodCAmJiAoZm9yY2UgfHwgc2l6ZS5oZWlnaHQgIT0gaGVpZ2h0KSkgewogICAgICAgICAg
ICAgc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICBjaGFuZ2VzID0gdGhpcy5DSEFO
R0VfU0laRTsKIAogICAgICAgICAgICAgc2l6ZS5zY3JvbGxlckhlaWdodCA9IHRoaXMuc2Nyb2xs
ZXIuY2xpZW50SGVpZ2h0OworICAgICAgICAgICAgaWYgKCFzaXplLnNjcm9sbGVySGVpZ2h0KSB7
CisgICAgICAgICAgICAgICAgc2l6ZS5zY3JvbGxlckhlaWdodCA9IHNpemUuaGVpZ2h0OworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLiRob3JpelNjcm9sbCkKKyAgICAgICAgICAgICAgICAgICAg
c2l6ZS5zY3JvbGxlckhlaWdodCAtPSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc2V0SGVpZ2h0KHNpemUuc2Nyb2xs
ZXJIZWlnaHQpOwogCiAgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uKSB7CkBAIC0xMTAwOCw5
ICsxMTI1MywxMCBAQCB2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0
aGVtZSkgewogICAgICAgICAgICAgd2lkdGggPSBkb20uZ2V0SW5uZXJXaWR0aCh0aGlzLmNvbnRh
aW5lcik7CiAKICAgICAgICAgaWYgKHdpZHRoICYmIChmb3JjZSB8fCB0aGlzLnJlc2l6aW5nID4g
MSB8fCBzaXplLndpZHRoICE9IHdpZHRoKSkgeworICAgICAgICAgICAgY2hhbmdlcyA9IHRoaXMu
Q0hBTkdFX1NJWkU7CiAgICAgICAgICAgICBzaXplLndpZHRoID0gd2lkdGg7CiAKLSAgICAgICAg
ICAgIHZhciBndXR0ZXJXaWR0aCA9IHRoaXMuc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZz
ZXRXaWR0aCA6IDA7CisgICAgICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSB0aGlzLiRzaG93R3V0
dGVyID8gdGhpcy4kZ3V0dGVyLm9mZnNldFdpZHRoIDogMDsKICAgICAgICAgICAgIHRoaXMuc2Ny
b2xsZXIuc3R5bGUubGVmdCA9IGd1dHRlcldpZHRoICsgInB4IjsKICAgICAgICAgICAgIHNpemUu
c2Nyb2xsZXJXaWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoIC0gZ3V0dGVyV2lkdGggLSB0aGlzLnNj
cm9sbEJhci5nZXRXaWR0aCgpKTsKICAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUucmln
aHQgPSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpICsgInB4IjsKQEAgLTExMDIzLDE0ICsxMTI2
OSwxNyBAQCB2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkg
ewogICAgICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyhjaGFuZ2VzLCB0cnVlKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZShjaGFuZ2VzKTsKLSAgICAg
ICAgCisKKyAgICAgICAgaWYgKGZvcmNlKQorICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIu
JHBhZGRpbmcgPSBudWxsOworCiAgICAgICAgIGlmIChmb3JjZSkKICAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLnJlc2l6aW5nOwogICAgIH07CiAKICAgICB0aGlzLm9uR3V0dGVyUmVzaXplID0gZnVu
Y3Rpb24oKSB7CiAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMuJHNpemUud2lkdGg7Ci0gICAgICAg
IHZhciBndXR0ZXJXaWR0aCA9IHRoaXMuc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZzZXRX
aWR0aCA6IDA7CisgICAgICAgIHZhciBndXR0ZXJXaWR0aCA9IHRoaXMuJHNob3dHdXR0ZXIgPyB0
aGlzLiRndXR0ZXIub2Zmc2V0V2lkdGggOiAwOwogICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxl
LmxlZnQgPSBndXR0ZXJXaWR0aCArICJweCI7CiAgICAgICAgIHRoaXMuJHNpemUuc2Nyb2xsZXJX
aWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoIC0gZ3V0dGVyV2lkdGggLSB0aGlzLnNjcm9sbEJhci5n
ZXRXaWR0aCgpKTsKIApAQCAtMTEwNDMsOTQgKzExMjkyLDcyIEBAIHZhciBWaXJ0dWFsUmVuZGVy
ZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnNl
c3Npb24uYWRqdXN0V3JhcExpbWl0KGxpbWl0KTsKICAgICB9OwogICAgIHRoaXMuc2V0QW5pbWF0
ZWRTY3JvbGwgPSBmdW5jdGlvbihzaG91bGRBbmltYXRlKXsKLSAgICAgICAgdGhpcy4kYW5pbWF0
ZWRTY3JvbGwgPSBzaG91bGRBbmltYXRlOworICAgICAgICB0aGlzLnNldE9wdGlvbigiYW5pbWF0
ZWRTY3JvbGwiLCBzaG91bGRBbmltYXRlKTsKICAgICB9OwogICAgIHRoaXMuZ2V0QW5pbWF0ZWRT
Y3JvbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuJGFuaW1hdGVkU2Nyb2xs
OwogICAgIH07CiAgICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKHNob3dJbnZp
c2libGVzKSB7Ci0gICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2V0U2hvd0ludmlzaWJsZXMo
c2hvd0ludmlzaWJsZXMpKQotICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNI
QU5HRV9URVhUKTsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oInNob3dJbnZpc2libGVzIiwgc2hv
d0ludmlzaWJsZXMpOwogICAgIH07CiAgICAgdGhpcy5nZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0
aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kdGV4dExheWVyLnNob3dJbnZpc2libGVzOwor
ICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dJbnZpc2libGVzIik7CiAgICAgfTsK
LQogICAgIHRoaXMuZ2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICByZXR1cm4gdGhpcy4kdGV4dExheWVyLmRpc3BsYXlJbmRlbnRHdWlkZXM7CisgICAgICAgIHJl
dHVybiB0aGlzLmdldE9wdGlvbigiZGlzcGxheUluZGVudEd1aWRlcyIpOwogICAgIH07Ci0gICAg
CisKICAgICB0aGlzLnNldERpc3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbihkaXNwbGF5KSB7
Ci0gICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2V0RGlzcGxheUluZGVudEd1aWRlcyhkaXNw
bGF5KSkKLSAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7
CisgICAgICAgIHRoaXMuc2V0T3B0aW9uKCJkaXNwbGF5SW5kZW50R3VpZGVzIiwgZGlzcGxheSk7
CiAgICAgfTsKLSAgICAKLSAgICB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPSB0cnVlOwogICAgIHRo
aXMuc2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7Ci0gICAg
ICAgIHRoaXMuJHNob3dQcmludE1hcmdpbiA9IHNob3dQcmludE1hcmdpbjsKLSAgICAgICAgdGhp
cy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oInNob3dQcmlu
dE1hcmdpbiIsIHNob3dQcmludE1hcmdpbik7CiAgICAgfTsKICAgICB0aGlzLmdldFNob3dQcmlu
dE1hcmdpbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kc2hvd1ByaW50TWFy
Z2luOworICAgICAgICB0aGlzLmdldE9wdGlvbigic2hvd1ByaW50TWFyZ2luIik7CiAgICAgfTsK
LQotICAgIHRoaXMuJHByaW50TWFyZ2luQ29sdW1uID0gODA7CiAgICAgdGhpcy5zZXRQcmludE1h
cmdpbkNvbHVtbiA9IGZ1bmN0aW9uKHNob3dQcmludE1hcmdpbikgewotICAgICAgICB0aGlzLiRw
cmludE1hcmdpbkNvbHVtbiA9IHNob3dQcmludE1hcmdpbjsKLSAgICAgICAgdGhpcy4kdXBkYXRl
UHJpbnRNYXJnaW4oKTsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oInByaW50TWFyZ2luQ29sdW1u
Iiwgc2hvd1ByaW50TWFyZ2luKTsKICAgICB9OwogICAgIHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1
bW4gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJHByaW50TWFyZ2luQ29sdW1u
OworICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInByaW50TWFyZ2luQ29sdW1uIik7CiAg
ICAgfTsKICAgICB0aGlzLmdldFNob3dHdXR0ZXIgPSBmdW5jdGlvbigpewotICAgICAgICByZXR1
cm4gdGhpcy5zaG93R3V0dGVyOworICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dH
dXR0ZXIiKTsKICAgICB9OwogICAgIHRoaXMuc2V0U2hvd0d1dHRlciA9IGZ1bmN0aW9uKHNob3cp
ewotICAgICAgICBpZih0aGlzLnNob3dHdXR0ZXIgPT09IHNob3cpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHRoaXMuJGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gc2hvdyA/ICJibG9jayIg
OiAibm9uZSI7Ci0gICAgICAgIHRoaXMuc2hvd0d1dHRlciA9IHNob3c7Ci0gICAgICAgIHRoaXMu
b25SZXNpemUodHJ1ZSk7CisgICAgICAgIHJldHVybiB0aGlzLnNldE9wdGlvbigic2hvd0d1dHRl
ciIsIHNob3cpOwogICAgIH07CiAKICAgICB0aGlzLmdldEZhZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0
aW9uKCl7Ci0gICAgICAgIHJldHVybiBkb20uaGFzQ3NzQ2xhc3ModGhpcy4kZ3V0dGVyLCAiYWNl
X2ZhZGUtZm9sZC13aWRnZXRzIik7CisgICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiZmFk
ZUZvbGRXaWRnZXRzIikKICAgICB9OwogCiAgICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBm
dW5jdGlvbihzaG93KSB7Ci0gICAgICAgIGlmIChzaG93KQotICAgICAgICAgICAgZG9tLmFkZENz
c0NsYXNzKHRoaXMuJGd1dHRlciwgImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy4kZ3V0dGVyLCAiYWNlX2Zh
ZGUtZm9sZC13aWRnZXRzIik7CisgICAgICAgIHRoaXMuc2V0T3B0aW9uKCJmYWRlRm9sZFdpZGdl
dHMiLCBzaG93KTsKICAgICB9OwogCi0gICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZh
bHNlOwogICAgIHRoaXMuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhp
Z2hsaWdodCkgewotICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9PSBzaG91
bGRIaWdobGlnaHQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuJGhpZ2hsaWdo
dEd1dHRlckxpbmUgPSBzaG91bGRIaWdobGlnaHQ7Ci0KLSAgICAgICAgaWYgKCF0aGlzLiRndXR0
ZXJMaW5lSGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0
ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGlu
ZUhpZ2hsaWdodC5jbGFzc05hbWUgPSAiYWNlX2d1dHRlci1hY3RpdmUtbGluZSI7Ci0gICAgICAg
ICAgICB0aGlzLiRndXR0ZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLiRndXR0ZXJM
aW5lSGlnaGxpZ2h0LnN0eWxlLmRpc3BsYXkgPSBzaG91bGRIaWdobGlnaHQgPyAiIiA6ICJub25l
IjsKLSAgICAgICAgaWYgKHRoaXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcykKLSAgICAgICAgICAg
IHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTsKKyAgICAgICAgdGhpcy5zZXRPcHRp
b24oImhpZ2hsaWdodEd1dHRlckxpbmUiLCBzaG91bGRIaWdobGlnaHQpOwogICAgIH07CiAKICAg
ICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmU7CisgICAgICAgIHJldHVybiB0aGlzLmdldE9w
dGlvbigiaGlnaGxpZ2h0R3V0dGVyTGluZSIpOwogICAgIH07CiAKICAgICB0aGlzLiR1cGRhdGVH
dXR0ZXJMaW5lSGlnaGxpZ2h0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJGd1dHRlckxp
bmVIaWdobGlnaHQuc3R5bGUudG9wID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLnRvcCAt
IHRoaXMubGF5ZXJDb25maWcub2Zmc2V0ICsgInB4IjsKLSAgICAgICAgdGhpcy4kZ3V0dGVyTGlu
ZUhpZ2hsaWdodC5zdHlsZS5oZWlnaHQgPSB0aGlzLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQgKyAi
cHgiOworICAgICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zOworICAg
ICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5sYXllckNvbmZpZy5saW5lSGVpZ2h0OworICAgICAgICBp
ZiAodGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkpIHsKKyAgICAgICAgICAgIHZhciBjdXJz
b3IgPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpOworICAgICAgICAgICAgY3Vy
c29yLmNvbHVtbiA9IDA7CisgICAgICAgICAgICBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQ
aXhlbFBvc2l0aW9uKGN1cnNvciwgdHJ1ZSk7CisgICAgICAgICAgICBoZWlnaHQgKj0gdGhpcy5z
ZXNzaW9uLmdldFJvd0xlbmd0aChjdXJzb3Iucm93KTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
LiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLnRvcCA9IHBvcy50b3AgLSB0aGlzLmxheWVyQ29u
ZmlnLm9mZnNldCArICJweCI7CisgICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5
bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgInB4IjsKICAgICB9OwotICAgIAorCiAgICAgdGhpcy4kdXBk
YXRlUHJpbnRNYXJnaW4gPSBmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKCF0aGlzLiRzaG93UHJp
bnRNYXJnaW4gJiYgIXRoaXMuJHByaW50TWFyZ2luRWwpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMTIyNyw2ICsxMTQ1NCw4IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250
YWluZXIsIHRoZW1lKSB7CiAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyA9IGZ1bmN0aW9uKGNoYW5n
ZXMsIGZvcmNlKSB7CiAgICAgICAgIGlmICghZm9yY2UgJiYgKCFjaGFuZ2VzIHx8ICF0aGlzLnNl
c3Npb24gfHwgIXRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoKSkKICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLl9zaWduYWwoImJlZm9yZVJlbmRlciIpOwogICAgICAgICBpZiAo
Y2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0ZVTEwgfHwKICAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlz
LkNIQU5HRV9TSVpFIHx8CiAgICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8
fApAQCAtMTEyNDYsNDMgKzExNDc1LDQ1IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlv
bihjb250YWluZXIsIHRoZW1lKSB7CiAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tG
b3JTaXplQ2hhbmdlcygpOwogICAgICAgICAgICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyKCk7CiAg
ICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwotICAg
ICAgICAgICAgaWYgKHRoaXMuc2hvd0d1dHRlcikKKyAgICAgICAgICAgIGlmICh0aGlzLiRzaG93
R3V0dGVyKQogICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxh
eWVyQ29uZmlnKTsKICAgICAgICAgICAgIHRoaXMuJG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5
ZXJDb25maWcpOwogICAgICAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKHRoaXMubGF5
ZXJDb25maWcpOwogICAgICAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5
ZXJDb25maWcpOwogICAgICAgICAgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKICAg
ICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgJiYgdGhpcy4kdXBkYXRlR3V0dGVy
TGluZUhpZ2hsaWdodCgpOworICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFuZ2VzICYg
dGhpcy5DSEFOR0VfU0NST0xMKSB7Ci0gICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIo
KTsKICAgICAgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fCBjaGFuZ2Vz
ICYgdGhpcy5DSEFOR0VfTElORVMpCiAgICAgICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVw
ZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICB0aGlzLiR0ZXh0TGF5ZXIuc2Nyb2xsTGluZXModGhpcy5sYXllckNvbmZpZyk7CiAKLSAgICAg
ICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1
dHRlcikKICAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXll
ckNvbmZpZyk7CiAgICAgICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZSh0aGlzLmxheWVy
Q29uZmlnKTsKICAgICAgICAgICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZSh0aGlzLmxheWVy
Q29uZmlnKTsKICAgICAgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZSh0aGlzLmxheWVy
Q29uZmlnKTsKLSAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CiAgICAg
ICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVwZGF0ZUd1dHRlckxp
bmVIaWdobGlnaHQoKTsKKyAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7
CisgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKTsKKyAgICAgICAgICAgIHRoaXMu
X3NpZ25hbCgiYWZ0ZXJSZW5kZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCkgewogICAgICAgICAgICAg
dGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKLSAgICAgICAgICAgIGlm
ICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcikKICAg
ICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7
CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVT
KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy4kdXBkYXRlTGluZXMoKSB8fCAoY2hhbmdlcyAmIHRo
aXMuQ0hBTkdFX0dVVFRFUikgJiYgdGhpcy5zaG93R3V0dGVyKQorICAgICAgICAgICAgaWYgKHRo
aXMuJHVwZGF0ZUxpbmVzKCkgfHwgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpICYmIHRo
aXMuJHNob3dHdXR0ZXIpCiAgICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRl
KHRoaXMubGF5ZXJDb25maWcpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoYW5nZXMg
JiB0aGlzLkNIQU5HRV9URVhUIHx8IGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpIHsKLSAg
ICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICBpZiAodGhpcy4kc2hv
d0d1dHRlcikKICAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5s
YXllckNvbmZpZyk7CiAgICAgICAgIH0KIApAQCAtMTEzMDIsOSArMTE1MzMsMTQgQEAgdmFyIFZp
cnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgdGhlbWUpIHsKIAogICAgICAgICBp
ZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1NJWkUpCiAgICAgICAgICAgICB0aGlzLiR1cGRhdGVT
Y3JvbGxCYXIoKTsKKworICAgICAgICB0aGlzLl9zaWduYWwoImFmdGVyUmVuZGVyIik7CiAgICAg
fTsKIAogICAgIHRoaXMuJGNvbXB1dGVMYXllckNvbmZpZyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAoIXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpCisgICAgICAgICAgICByZXR1cm4gdGhp
cy5vblJlc2l6ZSh0cnVlKTsKKwogICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsK
IAogICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgJSB0aGlzLmxpbmVIZWlnaHQ7
CkBAIC0xMTM3NSw3ICsxMTYxMSw3IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihj
b250YWluZXIsIHRoZW1lKSB7CiAgICAgICAgIGlmIChmaXJzdFJvdyA+IGxheWVyQ29uZmlnLmxh
c3RSb3cgKyAxKSB7IHJldHVybjsgfQogICAgICAgICBpZiAobGFzdFJvdyA8IGxheWVyQ29uZmln
LmZpcnN0Um93KSB7IHJldHVybjsgfQogICAgICAgICBpZiAobGFzdFJvdyA9PT0gSW5maW5pdHkp
IHsKLSAgICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICBpZiAodGhp
cy4kc2hvd0d1dHRlcikKICAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUo
bGF5ZXJDb25maWcpOwogICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZShsYXllckNv
bmZpZyk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTU1NSw5ICsxMTc5MSw5IEBAIHZhciBW
aXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7CiAgICAgICAgIGRl
bHRhWCAmJiB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xs
TGVmdCgpICsgZGVsdGFYKTsKICAgICB9OwogICAgIHRoaXMuaXNTY3JvbGxhYmxlQnkgPSBmdW5j
dGlvbihkZWx0YVgsIGRlbHRhWSkgewotICAgICAgICBpZiAoZGVsdGFZIDwgMCAmJiB0aGlzLnNl
c3Npb24uZ2V0U2Nyb2xsVG9wKCkgPiAwKQorICAgICAgICBpZiAoZGVsdGFZIDwgMCAmJiB0aGlz
LnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgPj0gMSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGlmIChkZWx0YVkgPiAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSArIHRo
aXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgPCB0aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodCkKKyAg
ICAgICAgaWYgKGRlbHRhWSA+IDAgJiYgdGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpICsgdGhp
cy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIHRoaXMubGF5ZXJDb25maWcubWF4SGVpZ2h0IDwgLTEp
CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CiAKQEAgLTExNjI1LDE1ICsxMTg2MSwx
MSBAQCB2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewog
ICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSB0aGlzLiRjb21wb3NpdGlvbi5j
c3NUZXh0OwogICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IG51bGw7CiAgICAgfTsKLQotICAg
IHRoaXMuX2xvYWRUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7Ci0gICAgICAgIAot
ICAgIH07CiAgICAgdGhpcy5zZXRUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7CiAgICAgICAgIHZh
ciBfc2VsZiA9IHRoaXM7CiAgICAgICAgIHRoaXMuJHRoZW1lVmFsdWUgPSB0aGVtZTsKICAgICAg
ICAgX3NlbGYuX2Rpc3BhdGNoRXZlbnQoJ3RoZW1lQ2hhbmdlJyx7dGhlbWU6dGhlbWV9KTsKLSAg
ICAgICAgCisKICAgICAgICAgaWYgKCF0aGVtZSB8fCB0eXBlb2YgdGhlbWUgPT0gInN0cmluZyIp
IHsKICAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gdGhlbWUgfHwgImFjZS90aGVtZS90ZXh0
bWF0ZSI7CiAgICAgICAgICAgICBjb25maWcubG9hZE1vZHVsZShbInRoZW1lIiwgbW9kdWxlTmFt
ZV0sIGFmdGVyTG9hZCk7CkBAIC0xMTY2Myw3ICsxMTg5NSw3IEBAIHZhciBWaXJ0dWFsUmVuZGVy
ZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7CiAgICAgICAgICAgICAgICAgX3NlbGYu
JHNpemUud2lkdGggPSAwOwogICAgICAgICAgICAgICAgIF9zZWxmLm9uUmVzaXplKCk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgX3NlbGYuX2Rpc3BhdGNoRXZl
bnQoJ3RoZW1lTG9hZGVkJyx7dGhlbWU6dGhlbWV9KTsKICAgICAgICAgfQogICAgIH07CkBAIC0x
MTY4Myw2ICsxMTkxNSw2NiBAQCB2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFp
bmVyLCB0aGVtZSkgewogCiB9KS5jYWxsKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUpOwogCisK
K2NvbmZpZy5kZWZpbmVPcHRpb25zKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUsICJyZW5kZXJl
ciIsIHsKKyAgICBhbmltYXRlZFNjcm9sbDoge2luaXRpYWxWYWx1ZTogZmFsc2V9LAorICAgIHNo
b3dJbnZpc2libGVzOiB7CisgICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2V0U2hvd0ludmlzaWJsZXModmFsdWUpKQorICAgICAg
ICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7CisgICAgICAg
IH0sCisgICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2UKKyAgICB9LAorICAgIHNob3dQcmludE1h
cmdpbjogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkgeyB0aGlzLiR1cGRhdGVQcmludE1hcmdp
bigpOyB9LAorICAgICAgICBpbml0aWFsVmFsdWU6IHRydWUKKyAgICB9LAorICAgIHByaW50TWFy
Z2luQ29sdW1uOiB7CisgICAgICAgIHNldDogZnVuY3Rpb24oKSB7IHRoaXMuJHVwZGF0ZVByaW50
TWFyZ2luKCk7IH0sCisgICAgICAgIGluaXRpYWxWYWx1ZTogODAKKyAgICB9LAorICAgIHNob3dH
dXR0ZXI6IHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbihzaG93KXsKKyAgICAgICAgICAgIHRoaXMu
JGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gc2hvdyA/ICJibG9jayIgOiAibm9uZSI7CisgICAgICAg
ICAgICB0aGlzLm9uR3V0dGVyUmVzaXplKCk7CisgICAgICAgIH0sCisgICAgICAgIGluaXRpYWxW
YWx1ZTogdHJ1ZQorICAgIH0sCisgICAgZmFkZUZvbGRXaWRnZXRzOiB7CisgICAgICAgIHNldDog
ZnVuY3Rpb24oc2hvdykgeworICAgICAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuJGd1dHRl
ciwgImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIsIHNob3cpOworICAgICAgICB9LAorICAgICAgICBp
bml0aWFsVmFsdWU6IGZhbHNlCisgICAgfSwKKyAgICBzaG93Rm9sZFdpZGdldHM6IHsKKyAgICAg
ICAgc2V0OiBmdW5jdGlvbihzaG93KSB7dGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRn
ZXRzKHNob3cpfSwKKyAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlCisgICAgfSwKKyAgICBkaXNw
bGF5SW5kZW50R3VpZGVzOiB7CisgICAgICAgIHNldDogZnVuY3Rpb24oc2hvdykgeworICAgICAg
ICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5zZXREaXNwbGF5SW5kZW50R3VpZGVzKHNob3cpKQor
ICAgICAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7Cisg
ICAgICAgIH0sCisgICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZQorICAgIH0sCisgICAgaGlnaGxp
Z2h0R3V0dGVyTGluZTogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkg
eworICAgICAgICAgICAgaWYgKCF0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0KSB7CisgICAgICAg
ICAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCA9IGRvbS5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LmNsYXNzTmFt
ZSA9ICJhY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIjsKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0
ZXIuYXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5l
SGlnaGxpZ2h0LnN0eWxlLmRpc3BsYXkgPSBzaG91bGRIaWdobGlnaHQgPyAiIiA6ICJub25lIjsK
KyAgICAgICAgICAgIGlmICh0aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3MpCisgICAgICAgICAg
ICAgICAgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOworICAgICAgICB9LAorICAg
ICAgICBpbml0aWFsVmFsdWU6IGZhbHNlLAorICAgICAgICB2YWx1ZTogdHJ1ZQorICAgIH0KK30p
OworCiBleHBvcnRzLlZpcnR1YWxSZW5kZXJlciA9IFZpcnR1YWxSZW5kZXJlcjsKIH0pOwogCkBA
IC0xMTc4Miw2ICsxMjA3NCw3IEBAIHZhciBHdXR0ZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkgewog
ICAgICAgICB2YXIgZm9sZFdpZGdldHMgPSB0aGlzLiRzaG93Rm9sZFdpZGdldHMgJiYgdGhpcy5z
ZXNzaW9uLmZvbGRXaWRnZXRzOwogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLnNlc3Np
b24uJGJyZWFrcG9pbnRzOwogICAgICAgICB2YXIgZGVjb3JhdGlvbnMgPSB0aGlzLnNlc3Npb24u
JGRlY29yYXRpb25zOworICAgICAgICB2YXIgZmlyc3RMaW5lTnVtYmVyID0gdGhpcy5zZXNzaW9u
LiRmaXJzdExpbmVOdW1iZXI7CiAgICAgICAgIHZhciBsYXN0TGluZU51bWJlciA9IDA7CiAKICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTExNzk4LDcgKzEyMDkxLDcgQEAgdmFyIEd1dHRlciA9
IGZ1bmN0aW9uKHBhcmVudEVsKSB7CiAgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2FjZV9n
dXR0ZXItY2VsbCAiLAogICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzW2ldIHx8ICIiLCBkZWNv
cmF0aW9uc1tpXSB8fCAiIiwgYW5ub3RhdGlvbi5jbGFzc05hbWUsCiAgICAgICAgICAgICAgICAg
Iicgc3R5bGU9J2hlaWdodDoiLCB0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoKGkpICogY29uZmln
LmxpbmVIZWlnaHQsICJweDsnPiIsIAotICAgICAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyID0g
aSArIDEKKyAgICAgICAgICAgICAgICBsYXN0TGluZU51bWJlciA9IGkgKyBmaXJzdExpbmVOdW1i
ZXIKICAgICAgICAgICAgICk7CiAKICAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0cykgewpAQCAt
MTE4MjIsNyArMTIxMTUsNyBAQCB2YXIgR3V0dGVyID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKICAg
ICAgICAgdGhpcy5lbGVtZW50ID0gZG9tLnNldElubmVySHRtbCh0aGlzLmVsZW1lbnQsIGh0bWwu
am9pbigiIikpOwogICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gY29uZmlnLm1p
bkhlaWdodCArICJweCI7CiAgICAgICAgIAotICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiR1c2VX
cmFwTW9kZSkKKyAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGUgfHwgdGhpcy5z
ZXNzaW9uLiRmaXhlZEd1dHRlcldpZHRoKQogICAgICAgICAgICAgbGFzdExpbmVOdW1iZXIgPSB0
aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgIAogICAgICAgICB2YXIgZ3V0dGVyV2lk
dGggPSAoIiIgKyBsYXN0TGluZU51bWJlcikubGVuZ3RoICogY29uZmlnLmNoYXJhY3RlcldpZHRo
OwpAQCAtMTE5MjksNiArMTIyMjIsOCBAQCB2YXIgTWFya2VyID0gZnVuY3Rpb24ocGFyZW50RWwp
IHsKICAgICAgICAgICAgICAgICBtYXJrZXIucmVuZGVyZXIoaHRtbCwgcmFuZ2UsIGxlZnQsIHRv
cCwgY29uZmlnKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobWFya2VyLnR5cGUgPT0gImZ1bGxM
aW5lIikgewogICAgICAgICAgICAgICAgIHRoaXMuZHJhd0Z1bGxMaW5lTWFya2VyKGh0bWwsIHJh
bmdlLCBtYXJrZXIuY2xhenosIGNvbmZpZyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtl
ci50eXBlID09ICJzY3JlZW5MaW5lIikgeworICAgICAgICAgICAgICAgIHRoaXMuZHJhd1NjcmVl
bkxpbmVNYXJrZXIoaHRtbCwgcmFuZ2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTsKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAocmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgIGlm
IChtYXJrZXIudHlwZSA9PSAidGV4dCIpCiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1Rl
eHRNYXJrZXIoaHRtbCwgcmFuZ2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTsKQEAgLTEyMDI3LDcg
KzEyMzIyLDE5IEBAIHZhciBNYXJrZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkgewogICAgICAgICAg
ICAgInRvcDoiLCB0b3AsICJweDsiLAogICAgICAgICAgICAgImxlZnQ6MDtyaWdodDowOyc+PC9k
aXY+IgogICAgICAgICApOwotICAgIH0KKyAgICB9OworICAgIAorICAgIHRoaXMuZHJhd1NjcmVl
bkxpbmVNYXJrZXIgPSBmdW5jdGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZp
ZykgeworICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29u
ZmlnKTsKKyAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OworCisgICAgICAg
IHN0cmluZ0J1aWxkZXIucHVzaCgKKyAgICAgICAgICAgICI8ZGl2IGNsYXNzPSciLCBjbGF6eiwg
Iicgc3R5bGU9JyIsCisgICAgICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAg
ICAgICAgICAidG9wOiIsIHRvcCwgInB4OyIsCisgICAgICAgICAgICAibGVmdDowO3JpZ2h0OjA7
Jz48L2Rpdj4iCisgICAgICAgICk7CisgICAgfTsKIAogfSkuY2FsbChNYXJrZXIucHJvdG90eXBl
KTsKIApAQCAtMTI3ODAsNyArMTMwODcsNyBAQCB2YXIgQ3Vyc29yID0gZnVuY3Rpb24ocGFyZW50
RWwpIHsKICAgICAgICAgICAgIHNlbGVjdGlvbnMgPSBbe2N1cnNvcjogbnVsbH1dOwogICAgICAg
ICB9CiAKLSAgICAgICAgZm9yICh2YXIgaSA9IHNlbGVjdGlvbnMubGVuZ3RoOyBpLS07ICkgewor
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHNlbGVjdGlvbnMubGVuZ3RoOyBpIDwgbjsgaSsr
KSB7CiAgICAgICAgICAgICB2YXIgcGl4ZWxQb3MgPSB0aGlzLmdldFBpeGVsUG9zaXRpb24oc2Vs
ZWN0aW9uc1tpXS5jdXJzb3IsIHRydWUpOwogICAgICAgICAgICAgaWYgKChwaXhlbFBvcy50b3Ag
PiBjb25maWcuaGVpZ2h0ICsgY29uZmlnLm9mZnNldCB8fAogICAgICAgICAgICAgICAgICBwaXhl
bFBvcy50b3AgPCAtY29uZmlnLm9mZnNldCkgJiYgaSA+IDEpIHsKQEAgLTEzMzEyLDggKzEzNjE5
LDggQEAgdmFyIEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwogICAgICAgICBp
ZiAodGhpcy4kcmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhpcy5f
ZW1pdCgicGFzdGUiLCB0ZXh0KTsKLSAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2Rl
KQorICAgICAgICB0aGlzLl9zaWduYWwoInBhc3RlIiwgdGV4dCk7CisgICAgICAgIGlmICghdGhp
cy5pbk11bHRpU2VsZWN0TW9kZSB8fCB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpCiAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnQodGV4dCk7CiAKICAgICAgICAgdmFyIGxpbmVzID0g
dGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwpAQCAtMTM5MTYsNyArMTQyMjMsNyBAQCBmdW5jdGlv
biBvbk1vdXNlRG93bihlKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgfSBl
bHNlIGlmICghc2hpZnQgJiYgYWx0ICYmIGJ1dHRvbiA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChh
bHQgJiYgYnV0dG9uID09IDApIHsKICAgICAgICAgZS5zdG9wKCk7CiAKICAgICAgICAgaWYgKGlz
TXVsdGlTZWxlY3QgJiYgIWN0cmwpCkBAIC0xMzkyNCwxMCArMTQyMzEsMTUgQEAgZnVuY3Rpb24g
b25Nb3VzZURvd24oZSkgewogICAgICAgICBlbHNlIGlmICghaXNNdWx0aVNlbGVjdCAmJiBjdHJs
KQogICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKCk7CiAKLSAgICAgICAgc2VsZWN0aW9u
Lm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBvcyk7Ci0gICAgICAgIHNlbGVjdGlvbi5jbGVhclNlbGVj
dGlvbigpOwotCiAgICAgICAgIHZhciByZWN0U2VsID0gW107CisgICAgICAgIGlmIChzaGlmdCkg
eworICAgICAgICAgICAgc2NyZWVuQW5jaG9yID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9z
aXRpb24oc2VsZWN0aW9uLmxlYWQpOworICAgICAgICAgICAgYmxvY2tTZWxlY3QoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihw
b3MpOworICAgICAgICAgICAgc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIH0K
KwogCiAgICAgICAgIHZhciBvbk1vdXNlU2VsZWN0aW9uRW5kID0gZnVuY3Rpb24oZSkgewogICAg
ICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTsKQEAgLTE0MTU5LDYgKzE0NDcxLDcgQEAg
dmFyIFVJV29ya2VyQ2xpZW50ID0gZnVuY3Rpb24odG9wTGV2ZWxOYW1lc3BhY2VzLCBtb2QsIGNs
YXNzbmFtZSkgewogICAgIHZhciBfc2VsZiA9IHRoaXM7CiAKICAgICB0aGlzLiR3b3JrZXIgPSB7
fQorICAgIHRoaXMuJHdvcmtlci50ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHt9OwogICAgIHRoaXMu
JHdvcmtlci5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgX3NlbGYubWVzc2Fn
ZUJ1ZmZlci5wdXNoKGUpOwogICAgICAgICBtYWluICYmIHNldFRpbWVvdXQocHJvY2Vzc05leHQp
OwpAQCAtMTQxODIsNyArMTQ0OTUsNyBAQCB2YXIgVUlXb3JrZXJDbGllbnQgPSBmdW5jdGlvbih0
b3BMZXZlbE5hbWVzcGFjZXMsIG1vZCwgY2xhc3NuYW1lKSB7CiAgICAgICAgIHRoaXMucG9zdE1l
c3NhZ2Uoe3R5cGU6ICJldmVudCIsIG5hbWU6IG5hbWUsIGRhdGE6IGRhdGF9KTsKICAgICB9Owog
Ci0gICAgcmVxdWlyZShbbW9kXSwgZnVuY3Rpb24oTWFpbikgeworICAgIGNvbmZpZy5sb2FkTW9k
dWxlKFsid29ya2VyIiwgbW9kXSwgZnVuY3Rpb24oTWFpbikgewogICAgICAgICBtYWluID0gbmV3
IE1haW5bY2xhc3NuYW1lXShzZW5kZXIpOwogICAgICAgICB3aGlsZSAoX3NlbGYubWVzc2FnZUJ1
ZmZlci5sZW5ndGgpCiAgICAgICAgICAgICBwcm9jZXNzTmV4dCgpOwpAQCAtMTQ0NTUsNiArMTQ3
NjgsMTQwIEBAIHZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9
OwogfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwogCiB9KTsKKworYWNlLmRlZmluZSgnYWNl
L3RoZW1lL3RleHRtYXRlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2Uv
bGliL2RvbSddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCitleHBv
cnRzLmlzRGFyayA9IGZhbHNlOworZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdG0iOworZXhwb3J0
cy5jc3NUZXh0ID0gIi5hY2UtdG0gLmFjZV9ndXR0ZXIge1wKK2JhY2tncm91bmQ6ICNmMGYwZjA7
XAorY29sb3I6ICMzMzM7XAorfVwKKy5hY2UtdG0gLmFjZV9wcmludC1tYXJnaW4ge1wKK3dpZHRo
OiAxcHg7XAorYmFja2dyb3VuZDogI2U4ZThlODtcCit9XAorLmFjZS10bSAuYWNlX2ZvbGQge1wK
K2JhY2tncm91bmQtY29sb3I6ICM2QjcyRTY7XAorfVwKKy5hY2UtdG0gLmFjZV9zY3JvbGxlciB7
XAorYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcCit9XAorLmFjZS10bSAuYWNlX2N1cnNvciB7
XAorYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjaztcCit9XAorLmFjZS10bSAuYWNlX292ZXJ3
cml0ZS1jdXJzb3JzIC5hY2VfY3Vyc29yIHtcCitib3JkZXItbGVmdDogMHB4O1wKK2JvcmRlci1i
b3R0b206IDFweCBzb2xpZCBibGFjaztcCit9XAorLmFjZS10bSAuYWNlX2ludmlzaWJsZSB7XAor
Y29sb3I6IHJnYigxOTEsIDE5MSwgMTkxKTtcCit9XAorLmFjZS10bSAuYWNlX3N0b3JhZ2UsXAor
LmFjZS10bSAuYWNlX2tleXdvcmQge1wKK2NvbG9yOiBibHVlO1wKK31cCisuYWNlLXRtIC5hY2Vf
Y29uc3RhbnQge1wKK2NvbG9yOiByZ2IoMTk3LCA2LCAxMSk7XAorfVwKKy5hY2UtdG0gLmFjZV9j
b25zdGFudC5hY2VfYnVpbGRpbiB7XAorY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7XAorfVwKKy5h
Y2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2Uge1wKK2NvbG9yOiByZ2IoODgsIDkyLCAy
NDYpO1wKK31cCisuYWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkge1wKK2NvbG9yOiBy
Z2IoNiwgMTUwLCAxNCk7XAorfVwKKy5hY2UtdG0gLmFjZV9pbnZhbGlkIHtcCitiYWNrZ3JvdW5k
LWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwgMC4xKTtcCitjb2xvcjogcmVkO1wKK31cCisuYWNlLXRt
IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKK2NvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO1wK
K31cCisuYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKK2NvbG9yOiByZ2IoNiwg
MTUwLCAxNCk7XAorfVwKKy5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV90eXBlLFwKKy5hY2UtdG0g
LmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7XAorY29sb3I6IHJnYigxMDksIDEyMSwgMjIyKTtcCit9
XAorLmFjZS10bSAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHtcCitjb2xvcjogcmdiKDEwNCwg
MTE4LCAxMzUpO1wKK31cCisuYWNlLXRtIC5hY2Vfc3RyaW5nIHtcCitjb2xvcjogcmdiKDMsIDEw
NiwgNyk7XAorfVwKKy5hY2UtdG0gLmFjZV9jb21tZW50IHtcCitjb2xvcjogcmdiKDc2LCAxMzYs
IDEwNyk7XAorfVwKKy5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2Mge1wKK2NvbG9yOiByZ2Io
MCwgMTAyLCAyNTUpO1wKK31cCisuYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcg
e1wKK2NvbG9yOiByZ2IoMTI4LCAxNTksIDE5MSk7XAorfVwKKy5hY2UtdG0gLmFjZV9jb25zdGFu
dC5hY2VfbnVtZXJpYyB7XAorY29sb3I6IHJnYigwLCAwLCAyMDUpO1wKK31cCisuYWNlLXRtIC5h
Y2VfdmFyaWFibGUge1wKK2NvbG9yOiByZ2IoNDksIDEzMiwgMTQ5KTtcCit9XAorLmFjZS10bSAu
YWNlX3htbC1wZSB7XAorY29sb3I6IHJnYigxMDQsIDEwNCwgOTEpO1wKK31cCisuYWNlLXRtIC5h
Y2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7XAorY29sb3I6ICMwMDAwQTI7XAorfVwK
Ky5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcge1wKK2NvbG9yOiByZ2IoMTIsIDcsIDI1
NSk7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrdXAuYWNlX2xpc3Qge1wKK2NvbG9yOnJnYigxODUs
IDYsIDE0NCk7XAorfVwKKy5hY2UtdG0gLmFjZV9tZXRhLmFjZV90YWcge1wKK2NvbG9yOnJnYigw
LCAyMiwgMTQyKTtcCit9XAorLmFjZS10bSAuYWNlX3N0cmluZy5hY2VfcmVnZXgge1wKK2NvbG9y
OiByZ2IoMjU1LCAwLCAwKVwKK31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2Vs
ZWN0aW9uIHtcCitiYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7XAorfVwKKy5hY2UtdG0u
YWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XAorYm94LXNoYWRvdzog
MCAwIDNweCAwcHggd2hpdGU7XAorYm9yZGVyLXJhZGl1czogMnB4O1wKK31cCisuYWNlLXRtIC5h
Y2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XAorYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAw
KTtcCit9XAorLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtcCitiYWNrZ3Jv
dW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIg
LmFjZV9icmFja2V0IHtcCittYXJnaW46IC0xcHggMCAwIC0xcHg7XAorYm9yZGVyOiAxcHggc29s
aWQgcmdiKDE5MiwgMTkyLCAxOTIpO1wKK31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5h
Y2VfYWN0aXZlLWxpbmUge1wKK2JhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNyk7XAorfVwK
Ky5hY2UtdG0gLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKK2JhY2tncm91bmQtY29sb3IgOiAj
ZGNkY2RjO1wKK31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29y
ZCB7XAorYmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpO1wKK2JvcmRlcjogMXB4IHNvbGlk
IHJnYigyMDAsIDIwMCwgMjUwKTtcCit9XAorLmFjZS10bSAuYWNlX2luZGVudC1ndWlkZSB7XAor
YmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJMbHkvL0J3
QW1WZ2QxL3cxMS9nQUFBQUJKUlU1RXJrSmdnZz09XCIpIHJpZ2h0IHJlcGVhdC15O1wKK31cCisi
OworCit2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOworZG9tLmltcG9ydENzc1N0cmlu
ZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOworfSk7CiA7CiAgICAgICAgICAg
ICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgYWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0s
IGZ1bmN0aW9uKGEpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191956</attachid>
            <date>2013-03-07 02:22:39 -0800</date>
            <delta_ts>2013-03-07 04:58:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111576-20130307141842.patch</filename>
            <type>text/plain</type>
            <size>201492</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFiMjkxMWJlMTdiMmY3
YThlZDIyNzhmNTU3NjEyOWM2ZmQ3MDIxZC4uOGFiODNhNGNkMTI5YmE2NmJlNjViNDRmMDQ3YmNj
N2U0MGJlYzYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAzLTA2ICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbQUNFXSBndXR0ZXIgc2l6ZSBzaG91bGQgYmUgZml4ZWQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1NzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjdXN0b20gYWNlIGVkaXRv
ciBidWlsZCB0aGF0IHN1cHBvcnRzIHNldEZpeGVkR3V0dGVyV2lkdGggY29uZmlndXJhdGlvbgor
ICAgICAgICBwYXJhbWV0ZXIgYW5kIHN3aXRjaCB0aGlzIHNldHRpbmcgb24uCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9BY2VUZXh0RWRp
dG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFjZVRleHRFZGl0b3IpOiBTd2l0Y2ggZml4
ZWRHdXR0ZXJXaWR0aCBzZXR0aW5nIG9uLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
YWNlL2FjZS5qczoKKyAgICAgICAgKC4pOgorCiAyMDEzLTAzLTA3ICBFdWdlbmUgS2x5dWNobmlr
b3YgIDxldXN0YXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlZmFj
dG9yaW5nczogUHJlcGFyZSBTdWdnZXN0Qm94IGZvciByZXVzZS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWNlVGV4dEVkaXRvci5qcwppbmRleCAxZWY5YmYz
MTk2YWI2YWVlYzRiOGVmM2M0NDJhZmZjZThiODcyNTJiLi5jODRkMTRlYzM4NWEyNDdhZGQ4ZmVh
ZThhMDU3MTQ5NzVhMjMwZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0FjZVRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9BY2VUZXh0RWRpdG9yLmpzCkBAIC01NSw2ICs1NSw3IEBAIFdlYkluc3BlY3Rv
ci5BY2VUZXh0RWRpdG9yID0gZnVuY3Rpb24odXJsLCBkZWxlZ2F0ZSkKICAgICB0aGlzLl9hY2VF
ZGl0b3IgPSB3aW5kb3cuYWNlLmVkaXQodGhpcy5lbGVtZW50KTsKIAogICAgIHRoaXMuX2FjZUVk
aXRvci5zZXRTaG93Rm9sZFdpZGdldHMoZmFsc2UpOworICAgIHRoaXMuX2FjZUVkaXRvci5zZXNz
aW9uLnNldEZpeGVkR3V0dGVyV2lkdGgodHJ1ZSk7CiAgICAgdGhpcy5fYWNlRWRpdG9yLm9uKCJn
dXR0ZXJjbGljayIsIHRoaXMuX2d1dHRlckNsaWNrLmJpbmQodGhpcykpOwogICAgIHRoaXMuX2Fj
ZUVkaXRvci5vbigiY2hhbmdlIiwgdGhpcy5fb25UZXh0Q2hhbmdlLmJpbmQodGhpcykpOwogICAg
IHRoaXMuX2FjZUVkaXRvci5zZXRIaWdobGlnaHRBY3RpdmVMaW5lKGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYWNlL2FjZS5qcwppbmRleCAxOWQxYjAwMzlm
MzIxM2RmNWViMTYwNjQ0YzBlNjRiOGE4NzBmMTc1Li5lY2RlYzBlMGVhYWMxZDY0ZWJlOTMzY2Ix
Y2U1ZmFkZDQ5NGJjNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2FjZS9hY2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9hY2UvYWNlLmpzCkBAIC0xNjcsNyArMTY3LDcgQEAgZXhwb3J0QWNlKEFDRV9OQU1FU1BBQ0Up
OwogCiB9KSgpOwogCi1hY2UuZGVmaW5lKCdhY2UvYWNlJywgWydyZXF1aXJlJywgJ2V4cG9ydHMn
LCAnbW9kdWxlJyAsICdhY2UvbGliL2ZpeG9sZGJyb3dzZXJzJywgJ2FjZS9saWIvZG9tJywgJ2Fj
ZS9saWIvZXZlbnQnLCAnYWNlL2VkaXRvcicsICdhY2UvZWRpdF9zZXNzaW9uJywgJ2FjZS91bmRv
bWFuYWdlcicsICdhY2UvdmlydHVhbF9yZW5kZXJlcicsICdhY2UvbXVsdGlfc2VsZWN0JywgJ2Fj
ZS93b3JrZXIvd29ya2VyX2NsaWVudCcsICdhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyJywgJ2Fj
ZS9wbGFjZWhvbGRlcicsICdhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZScsICdhY2UvY29uZmln
J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworYWNlLmRlZmluZSgnYWNl
L2FjZScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9maXhvbGRi
cm93c2VycycsICdhY2UvbGliL2RvbScsICdhY2UvbGliL2V2ZW50JywgJ2FjZS9lZGl0b3InLCAn
YWNlL2VkaXRfc2Vzc2lvbicsICdhY2UvdW5kb21hbmFnZXInLCAnYWNlL3ZpcnR1YWxfcmVuZGVy
ZXInLCAnYWNlL211bHRpX3NlbGVjdCcsICdhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQnLCAnYWNl
L2tleWJvYXJkL2hhc2hfaGFuZGxlcicsICdhY2UvcGxhY2Vob2xkZXInLCAnYWNlL21vZGUvZm9s
ZGluZy9mb2xkX21vZGUnLCAnYWNlL3RoZW1lL3RleHRtYXRlJywgJ2FjZS9jb25maWcnXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAKIAogcmVxdWlyZSgiLi9saWIvZml4
b2xkYnJvd3NlcnMiKTsKQEAgLTE4NCw2ICsxODQsOCBAQCByZXF1aXJlKCIuL3dvcmtlci93b3Jr
ZXJfY2xpZW50Iik7CiByZXF1aXJlKCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpOwogcmVxdWly
ZSgiLi9wbGFjZWhvbGRlciIpOwogcmVxdWlyZSgiLi9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIik7
CityZXF1aXJlKCIuL3RoZW1lL3RleHRtYXRlIik7CisKIGV4cG9ydHMuY29uZmlnID0gcmVxdWly
ZSgiLi9jb25maWciKTsKIGV4cG9ydHMucmVxdWlyZSA9IHJlcXVpcmU7CiBleHBvcnRzLmVkaXQg
PSBmdW5jdGlvbihlbCkgewpAQCAtMjA3LDkgKzIwOSwxMiBAQCBleHBvcnRzLmVkaXQgPSBmdW5j
dGlvbihlbCkgewogICAgIHZhciBlbnYgPSB7CiAgICAgICAgIGRvY3VtZW50OiBkb2MsCiAgICAg
ICAgIGVkaXRvcjogZWRpdG9yLAotICAgICAgICBvblJlc2l6ZTogZWRpdG9yLnJlc2l6ZS5iaW5k
KGVkaXRvcikKKyAgICAgICAgb25SZXNpemU6IGVkaXRvci5yZXNpemUuYmluZChlZGl0b3IsIG51
bGwpCiAgICAgfTsKICAgICBldmVudC5hZGRMaXN0ZW5lcih3aW5kb3csICJyZXNpemUiLCBlbnYu
b25SZXNpemUpOworICAgIGVkaXRvci5vbigiZGVzdHJveSIsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBldmVudC5yZW1vdmVMaXN0ZW5lcih3aW5kb3csICJyZXNpemUiLCBlbnYub25SZXNpemUpOwor
ICAgIH0pOwogICAgIGVsLmVudiA9IGVkaXRvci5lbnYgPSBlbnY7CiAgICAgcmV0dXJuIGVkaXRv
cjsKIH07CkBAIC05MzYsMjMgKzk0MSw2IEBAIGlmICghRGF0ZS5ub3cpIHsKICAgICAgICAgcmV0
dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgIH07CiB9Ci1pZigiMCIuc3BsaXQodm9pZCAw
LCAwKS5sZW5ndGgpIHsKLSAgICB2YXIgc3RyaW5nX3NwbGl0ID0gU3RyaW5nLnByb3RvdHlwZS5z
cGxpdDsKLSAgICBTdHJpbmcucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24oc2VwYXJhdG9yLCBs
aW1pdCkgewotICAgICAgICBpZihzZXBhcmF0b3IgPT09IHZvaWQgMCAmJiBsaW1pdCA9PT0gMCly
ZXR1cm4gW107Ci0gICAgICAgIHJldHVybiBzdHJpbmdfc3BsaXQuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKLSAgICB9Ci19Ci1pZigiIi5zdWJzdHIgJiYgIjBiIi5zdWJzdHIoLTEpICE9PSAiYiIp
IHsKLSAgICB2YXIgc3RyaW5nX3N1YnN0ciA9IFN0cmluZy5wcm90b3R5cGUuc3Vic3RyOwotICAg
IFN0cmluZy5wcm90b3R5cGUuc3Vic3RyID0gZnVuY3Rpb24oc3RhcnQsIGxlbmd0aCkgewotICAg
ICAgICByZXR1cm4gc3RyaW5nX3N1YnN0ci5jYWxsKAotICAgICAgICAgICAgdGhpcywKLSAgICAg
ICAgICAgIHN0YXJ0IDwgMCA/IChzdGFydCA9IHRoaXMubGVuZ3RoICsgc3RhcnQpIDwgMCA/IDAg
OiBzdGFydCA6IHN0YXJ0LAotICAgICAgICAgICAgbGVuZ3RoCi0gICAgICAgICk7Ci0gICAgfQot
fQogdmFyIHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4QTBcdTE2ODBcdTE4MEVcdTIw
MDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKICAgICAiXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUy
MDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHUyMDI4IiArCiAgICAgIlx1MjAyOVx1
RkVGRiI7CkBAIC05NjEsMTIgKzk0OSw3IEBAIGlmICghU3RyaW5nLnByb3RvdHlwZS50cmltIHx8
IHdzLnRyaW0oKSkgewogICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKCJeIiAr
IHdzICsgd3MgKyAiKiIpLAogICAgICAgICB0cmltRW5kUmVnZXhwID0gbmV3IFJlZ0V4cCh3cyAr
IHdzICsgIiokIik7CiAgICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgp
IHsKLSAgICAgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzID09PSBudWxsKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrdGhpcysiIHRv
IG9iamVjdCIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdHJpbmcodGhpcykKLSAgICAg
ICAgICAgIC5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgIiIpCi0gICAgICAgICAgICAucmVwbGFj
ZSh0cmltRW5kUmVnZXhwLCAiIik7CisgICAgICAgIHJldHVybiBTdHJpbmcodGhpcykucmVwbGFj
ZSh0cmltQmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsKICAgICB9
OwogfQogCkBAIC0xMDI0LDIzICsxMDA3LDIzIEBAIHZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChv
KSB7CiBhY2UuZGVmaW5lKCdhY2UvbGliL2RvbScsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21v
ZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAKIAoraWYgKHR5
cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIikKKyAgICByZXR1cm47CisKIHZhciBYSFRNTF9O
UyA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjsKIAorZXhwb3J0cy5nZXREb2N1bWVu
dEhlYWQgPSBmdW5jdGlvbihkb2MpIHsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgZG9jID0gZG9j
dW1lbnQ7CisgICAgcmV0dXJuIGRvYy5oZWFkIHx8IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
aGVhZCIpWzBdIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7Cit9CisKIGV4cG9ydHMuY3JlYXRlRWxl
bWVudCA9IGZ1bmN0aW9uKHRhZywgbnMpIHsKICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudE5TID8KICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zIHx8IFhIVE1M
X05TLCB0YWcpIDoKICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogfTsK
IAotZXhwb3J0cy5zZXRUZXh0ID0gZnVuY3Rpb24oZWxlbSwgdGV4dCkgewotICAgIGlmIChlbGVt
LmlubmVyVGV4dCAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGVsZW0uaW5uZXJUZXh0ID0gdGV4
dDsKLSAgICB9Ci0gICAgaWYgKGVsZW0udGV4dENvbnRlbnQgIT09IHVuZGVmaW5lZCkgewotICAg
ICAgICBlbGVtLnRleHRDb250ZW50ID0gdGV4dDsKLSAgICB9Ci19OwotCiBleHBvcnRzLmhhc0Nz
c0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHsKICAgICB2YXIgY2xhc3NlcyA9IGVsLmNsYXNz
TmFtZS5zcGxpdCgvXHMrL2cpOwogICAgIHJldHVybiBjbGFzc2VzLmluZGV4T2YobmFtZSkgIT09
IC0xOwpAQCAtMTEyMiw4ICsxMTA1LDcgQEAgZXhwb3J0cy5pbXBvcnRDc3NTdHJpbmcgPSBmdW5j
dGlvbiBpbXBvcnRDc3NTdHJpbmcoY3NzVGV4dCwgaWQsIGRvYykgewogICAgICAgICBpZiAoaWQp
CiAgICAgICAgICAgICBzdHlsZS5pZCA9IGlkOwogCi0gICAgICAgIHZhciBoZWFkID0gZG9jLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0gfHwgZG9jLmRvY3VtZW50RWxlbWVudDsKLSAg
ICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7CisgICAgICAgIGV4cG9ydHMuZ2V0RG9jdW1l
bnRIZWFkKGRvYykuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgIH0KIH07CiAKQEAgLTExMzUsOCAr
MTExNyw3IEBAIGV4cG9ydHMuaW1wb3J0Q3NzU3R5bHNoZWV0ID0gZnVuY3Rpb24odXJpLCBkb2Mp
IHsKICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7CiAgICAgICAgIGxpbmsuaHJlZiA9
IHVyaTsKIAotICAgICAgICB2YXIgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVh
ZCIpWzBdIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQo
bGluayk7CisgICAgICAgIGV4cG9ydHMuZ2V0RG9jdW1lbnRIZWFkKGRvYykuYXBwZW5kQ2hpbGQo
bGluayk7CiAgICAgfQogfTsKIApAQCAtMTIzMSwyMiArMTIxMiwyNCBAQCBleHBvcnRzLnNldElu
bmVySHRtbCA9IGZ1bmN0aW9uKGVsLCBpbm5lckh0bWwpIHsKICAgICByZXR1cm4gZWxlbWVudDsK
IH07CiAKLWV4cG9ydHMuc2V0SW5uZXJUZXh0ID0gZnVuY3Rpb24oZWwsIGlubmVyVGV4dCkgewot
ICAgIHZhciBkb2N1bWVudCA9IGVsLm93bmVyRG9jdW1lbnQ7Ci0gICAgaWYgKGRvY3VtZW50LmJv
ZHkgJiYgInRleHRDb250ZW50IiBpbiBkb2N1bWVudC5ib2R5KQoraWYgKCJ0ZXh0Q29udGVudCIg
aW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7CisgICAgZXhwb3J0cy5zZXRJbm5lclRleHQg
PSBmdW5jdGlvbihlbCwgaW5uZXJUZXh0KSB7CiAgICAgICAgIGVsLnRleHRDb250ZW50ID0gaW5u
ZXJUZXh0OwotICAgIGVsc2UKLSAgICAgICAgZWwuaW5uZXJUZXh0ID0gaW5uZXJUZXh0OwotCi19
OworICAgIH07CiAKLWV4cG9ydHMuZ2V0SW5uZXJUZXh0ID0gZnVuY3Rpb24oZWwpIHsKLSAgICB2
YXIgZG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50OwotICAgIGlmIChkb2N1bWVudC5ib2R5ICYm
ICJ0ZXh0Q29udGVudCIgaW4gZG9jdW1lbnQuYm9keSkKKyAgICBleHBvcnRzLmdldElubmVyVGV4
dCA9IGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgIHJldHVybiBlbC50ZXh0Q29udGVudDsKLSAgICBl
bHNlCi0gICAgICAgICByZXR1cm4gZWwuaW5uZXJUZXh0IHx8IGVsLnRleHRDb250ZW50IHx8ICIi
OwotfTsKKyAgICB9OworfQorZWxzZSB7CisgICAgZXhwb3J0cy5zZXRJbm5lclRleHQgPSBmdW5j
dGlvbihlbCwgaW5uZXJUZXh0KSB7CisgICAgICAgIGVsLmlubmVyVGV4dCA9IGlubmVyVGV4dDsK
KyAgICB9OworCisgICAgZXhwb3J0cy5nZXRJbm5lclRleHQgPSBmdW5jdGlvbihlbCkgeworICAg
ICAgICByZXR1cm4gZWwuaW5uZXJUZXh0OworICAgIH07Cit9CiAKIGV4cG9ydHMuZ2V0UGFyZW50
V2luZG93ID0gZnVuY3Rpb24oZG9jdW1lbnQpIHsKICAgICByZXR1cm4gZG9jdW1lbnQuZGVmYXVs
dFZpZXcgfHwgZG9jdW1lbnQucGFyZW50V2luZG93OwpAQCAtMTUwNiwxMCArMTQ4OSwxMCBAQCBp
ZiAod2luZG93LnBvc3RNZXNzYWdlICYmICF1c2VyYWdlbnQuaXNPbGRJRSkgewogCiAKIGV4cG9y
dHMubmV4dEZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAotICAgIHdpbmRv
dy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8Ci0gICAgd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlv
bkZyYW1lIHx8CiAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAotICAgIHdp
bmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CisgICAgd2luZG93LndlYmtpdFJlcXVl
c3RBbmltYXRpb25GcmFtZSB8fAorICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSB8
fAorICAgIHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lOwogCiBpZiAoZXhwb3J0cy5uZXh0
RnJhbWUpCiAgICAgZXhwb3J0cy5uZXh0RnJhbWUgPSBleHBvcnRzLm5leHRGcmFtZS5iaW5kKHdp
bmRvdyk7CkBAIC0xNzE2LDYgKzE2OTksOCBAQCB2YXIgRWRpdG9yID0gZnVuY3Rpb24ocmVuZGVy
ZXIsIHNlc3Npb24pIHsKICAgICB9KTsKIAogICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzaW9uIHx8
IG5ldyBFZGl0U2Vzc2lvbigiIikpOworICAgIGNvbmZpZy5yZXNldE9wdGlvbnModGhpcyk7Cisg
ICAgY29uZmlnLl9lbWl0KCJlZGl0b3IiLCB0aGlzKTsKIH07CiAKIChmdW5jdGlvbigpewpAQCAt
MTk4NSwxMCArMTk3MCwxMyBAQCB2YXIgRWRpdG9yID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Np
b24pIHsKICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHNlc3Npb24uJGhpZ2hsaWdo
dExpbmVNYXJrZXIuaWQpOwogICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtl
ciA9IG51bGw7CiAgICAgICAgIH0gZWxzZSBpZiAoIXNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJr
ZXIgJiYgaGlnaGxpZ2h0KSB7Ci0gICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFy
a2VyID0gc2Vzc2lvbi5oaWdobGlnaHRMaW5lcyhoaWdobGlnaHQucm93LCBoaWdobGlnaHQucm93
LCAiYWNlX2FjdGl2ZS1saW5lIik7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uo
aGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0LmNvbHVtbiwgaGlnaGxpZ2h0LnJvdywgSW5maW5pdHkp
OworICAgICAgICAgICAgcmFuZ2UuaWQgPSBzZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImFjZV9h
Y3RpdmUtbGluZSIsICJzY3JlZW5MaW5lIik7ICAgICAgICAgICAgCisgICAgICAgICAgICBzZXNz
aW9uLiRoaWdobGlnaHRMaW5lTWFya2VyID0gcmFuZ2U7CiAgICAgICAgIH0gZWxzZSBpZiAoaGln
aGxpZ2h0KSB7CiAgICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyLnN0YXJ0
LnJvdyA9IGhpZ2hsaWdodC5yb3c7CiAgICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRMaW5l
TWFya2VyLmVuZC5yb3cgPSBoaWdobGlnaHQucm93OworICAgICAgICAgICAgc2Vzc2lvbi4kaGln
aGxpZ2h0TGluZU1hcmtlci5zdGFydC5jb2x1bW4gPSBoaWdobGlnaHQuY29sdW1uOwogICAgICAg
ICAgICAgc2Vzc2lvbi5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpOwogICAgICAgICB9CiAgICAg
fTsKQEAgLTIwNjQsOCArMjA1Miw5IEBAIHZhciBFZGl0b3IgPSBmdW5jdGlvbihyZW5kZXJlciwg
c2Vzc2lvbikgewogICAgIH07CiAKIAotICAgIHRoaXMub25DaGFuZ2VNb2RlID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5vbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgIHRoaXMu
cmVuZGVyZXIudXBkYXRlVGV4dCgpOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VNb2RlIiwg
ZSk7CiAgICAgfTsKIAogCkBAIC0yMjA4LDYyICsyMTk3LDM4IEBAIHZhciBFZGl0b3IgPSBmdW5j
dGlvbihyZW5kZXJlciwgc2Vzc2lvbikgewogICAgICAgICB0aGlzLnNlc3Npb24udG9nZ2xlT3Zl
cndyaXRlKCk7CiAgICAgfTsKICAgICB0aGlzLnNldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oc3Bl
ZWQpIHsKLSAgICAgICAgdGhpcy4kbW91c2VIYW5kbGVyLnNldFNjcm9sbFNwZWVkKHNwZWVkKTsK
KyAgICAgICAgdGhpcy5zZXRPcHRpb24oInNjcm9sbFNwZWVkIiwgc3BlZWQpOwogICAgIH07CiAg
ICAgdGhpcy5nZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhp
cy4kbW91c2VIYW5kbGVyLmdldFNjcm9sbFNwZWVkKCk7CisgICAgICAgIHJldHVybiB0aGlzLmdl
dE9wdGlvbigic2Nyb2xsU3BlZWQiKTsKICAgICB9OwogICAgIHRoaXMuc2V0RHJhZ0RlbGF5ID0g
ZnVuY3Rpb24oZHJhZ0RlbGF5KSB7Ci0gICAgICAgIHRoaXMuJG1vdXNlSGFuZGxlci5zZXREcmFn
RGVsYXkoZHJhZ0RlbGF5KTsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oImRyYWdEZWxheSIsIGRy
YWdEZWxheSk7CiAgICAgfTsKICAgICB0aGlzLmdldERyYWdEZWxheSA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICByZXR1cm4gdGhpcy4kbW91c2VIYW5kbGVyLmdldERyYWdEZWxheSgpOworICAgICAg
ICByZXR1cm4gdGhpcy5nZXRPcHRpb24oImRyYWdEZWxheSIpOwogICAgIH07Ci0KLSAgICB0aGlz
LiRzZWxlY3Rpb25TdHlsZSA9ICJsaW5lIjsKLSAgICB0aGlzLnNldFNlbGVjdGlvblN0eWxlID0g
ZnVuY3Rpb24oc3R5bGUpIHsKLSAgICAgICAgaWYgKHRoaXMuJHNlbGVjdGlvblN0eWxlID09IHN0
eWxlKSByZXR1cm47Ci0KLSAgICAgICAgdGhpcy4kc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKLSAg
ICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpOwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFu
Z2VTZWxlY3Rpb25TdHlsZSIsIHtkYXRhOiBzdHlsZX0pOworICAgIHRoaXMuc2V0U2VsZWN0aW9u
U3R5bGUgPSBmdW5jdGlvbih2YWwpIHsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oInNlbGVjdGlv
blN0eWxlIiwgdmFsKTsKICAgICB9OwogICAgIHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGUgPSBmdW5j
dGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJHNlbGVjdGlvblN0eWxlOworICAgICAgICBy
ZXR1cm4gdGhpcy5nZXRPcHRpb24oInNlbGVjdGlvblN0eWxlIik7CiAgICAgfTsKLQotICAgIHRo
aXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUgPSB0cnVlOwogICAgIHRoaXMuc2V0SGlnaGxpZ2h0QWN0
aXZlTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgewotICAgICAgICBpZiAodGhpcy4k
aGlnaGxpZ2h0QWN0aXZlTGluZSA9PSBzaG91bGRIaWdobGlnaHQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZSA9IHNob3VsZEhpZ2hsaWdo
dDsKLSAgICAgICAgdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpOworICAgICAgICB0
aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0QWN0aXZlTGluZSIsIHNob3VsZEhpZ2hsaWdodCk7CiAg
ICAgfTsKICAgICB0aGlzLmdldEhpZ2hsaWdodEFjdGl2ZUxpbmUgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmU7CisgICAgICAgIHJldHVybiB0
aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0QWN0aXZlTGluZSIpOwogICAgIH07Ci0KLSAgICB0aGlz
LiRoaWdobGlnaHRHdXR0ZXJMaW5lID0gdHJ1ZTsKICAgICB0aGlzLnNldEhpZ2hsaWdodEd1dHRl
ckxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKLSAgICAgICAgaWYgKHRoaXMuJGhp
Z2hsaWdodEd1dHRlckxpbmUgPT0gc2hvdWxkSGlnaGxpZ2h0KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZShzaG91bGRI
aWdobGlnaHQpOwotICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lID0gc2hvdWxkSGln
aGxpZ2h0OworICAgICAgICB0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0R3V0dGVyTGluZSIsIHNo
b3VsZEhpZ2hsaWdodCk7CiAgICAgfTsKIAogICAgIHRoaXMuZ2V0SGlnaGxpZ2h0R3V0dGVyTGlu
ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGlu
ZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJoaWdobGlnaHRHdXR0ZXJMaW5lIik7
CiAgICAgfTsKLQotICAgIHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZCA9IHRydWU7CiAgICAg
dGhpcy5zZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQp
IHsKLSAgICAgICAgaWYgKHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZCA9PSBzaG91bGRIaWdo
bGlnaHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy4kaGlnaGxpZ2h0U2Vs
ZWN0ZWRXb3JkID0gc2hvdWxkSGlnaGxpZ2h0OwotICAgICAgICB0aGlzLiRvblNlbGVjdGlvbkNo
YW5nZSgpOworICAgICAgICB0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkIiwg
c2hvdWxkSGlnaGxpZ2h0KTsKICAgICB9OwogICAgIHRoaXMuZ2V0SGlnaGxpZ2h0U2VsZWN0ZWRX
b3JkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiB0aGlzLiRoaWdobGlnaHRTZWxlY3Rl
ZFdvcmQ7CkBAIC0yMzAyLDUxICsyMjY3LDM4IEBAIHZhciBFZGl0b3IgPSBmdW5jdGlvbihyZW5k
ZXJlciwgc2Vzc2lvbikgewogICAgIHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlv
bigpIHsKICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0UHJpbnRNYXJnaW5Db2x1bW4o
KTsKICAgICB9OwotCi0gICAgdGhpcy4kcmVhZE9ubHkgPSBmYWxzZTsKICAgICB0aGlzLnNldFJl
YWRPbmx5ID0gZnVuY3Rpb24ocmVhZE9ubHkpIHsKLSAgICAgICAgdGhpcy4kcmVhZE9ubHkgPSBy
ZWFkT25seTsKLSAgICAgICAgdGhpcy50ZXh0SW5wdXQuc2V0UmVhZE9ubHkocmVhZE9ubHkpOwot
ICAgICAgICB0aGlzLnJlbmRlcmVyLiRjdXJzb3JMYXllci5zZXRCbGlua2luZyghcmVhZE9ubHkp
OworICAgICAgICB0aGlzLnNldE9wdGlvbigicmVhZE9ubHkiLCByZWFkT25seSk7CiAgICAgfTsK
ICAgICB0aGlzLmdldFJlYWRPbmx5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
LiRyZWFkT25seTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJyZWFkT25seSIpOwog
ICAgIH07Ci0KLSAgICB0aGlzLiRtb2RlQmVoYXZpb3VycyA9IHRydWU7CiAgICAgdGhpcy5zZXRC
ZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFibGVkKSB7Ci0gICAgICAgIHRoaXMuJG1v
ZGVCZWhhdmlvdXJzID0gZW5hYmxlZDsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oImJlaGF2aW91
cnNFbmFibGVkIiwgZW5hYmxlZCk7CiAgICAgfTsKICAgICB0aGlzLmdldEJlaGF2aW91cnNFbmFi
bGVkID0gZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kbW9kZUJlaGF2aW91cnM7
CisgICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiYmVoYXZpb3Vyc0VuYWJsZWQiKTsKICAg
ICB9OwotCi0gICAgdGhpcy4kbW9kZVdyYXBCZWhhdmlvdXJzID0gdHJ1ZTsKICAgICB0aGlzLnNl
dFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFibGVkKSB7Ci0gICAgICAgIHRo
aXMuJG1vZGVXcmFwQmVoYXZpb3VycyA9IGVuYWJsZWQ7CisgICAgICAgIHRoaXMuc2V0T3B0aW9u
KCJ3cmFwQmVoYXZpb3Vyc0VuYWJsZWQiLCBlbmFibGVkKTsKICAgICB9OwogICAgIHRoaXMuZ2V0
V3JhcEJlaGF2aW91cnNFbmFibGVkID0gZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gdGhp
cy4kbW9kZVdyYXBCZWhhdmlvdXJzOworICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oIndy
YXBCZWhhdmlvdXJzRW5hYmxlZCIpOwogICAgIH07CiAgICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdl
dHMgPSBmdW5jdGlvbihzaG93KSB7Ci0gICAgICAgIHZhciBndXR0ZXIgPSB0aGlzLnJlbmRlcmVy
LiRndXR0ZXJMYXllcjsKLSAgICAgICAgaWYgKGd1dHRlci5nZXRTaG93Rm9sZFdpZGdldHMoKSA9
PSBzaG93KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLnNldE9wdGlvbigic2hv
d0ZvbGRXaWRnZXRzIiwgc2hvdyk7CiAKLSAgICAgICAgdGhpcy5yZW5kZXJlci4kZ3V0dGVyTGF5
ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKHNob3cpOwotICAgICAgICB0aGlzLiRzaG93Rm9sZFdpZGdl
dHMgPSBzaG93OwotICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKTsKICAgICB9Owog
ICAgIHRoaXMuZ2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRTaG93Rm9sZFdpZGdldHMoKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJzaG93Rm9sZFdpZGdldHMiKTsKICAgICB9OwogCi0g
ICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7Ci0gICAgICAgIHRo
aXMucmVuZGVyZXIuc2V0RmFkZUZvbGRXaWRnZXRzKHNob3cpOworICAgIHRoaXMuc2V0RmFkZUZv
bGRXaWRnZXRzID0gZnVuY3Rpb24oZmFkZSkgeworICAgICAgICB0aGlzLnNldE9wdGlvbigiZmFk
ZUZvbGRXaWRnZXRzIiwgZmFkZSk7CiAgICAgfTsKIAogICAgIHRoaXMuZ2V0RmFkZUZvbGRXaWRn
ZXRzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldEZhZGVG
b2xkV2lkZ2V0cygpOworICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oImZhZGVGb2xkV2lk
Z2V0cyIpOwogICAgIH07CiAgICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihkaXIpIHsKICAgICAg
ICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSl7CkBAIC0yOTk4LDExICsyOTUwLDExMCBA
QCB2YXIgRWRpdG9yID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Npb24pIHsKICAgICB9OwogICAg
IHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgICAgICB0aGlzLnJlbmRlcmVyLmRlc3Ry
b3koKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiZGVzdHJveSIsIHRoaXMpOworICAgIH07CisgICAg
dGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXcgPSBmdW5jdGlvbihlbmFibGUpIHsKKyAg
ICAgICAgaWYgKGVuYWJsZSA9PT0gdHJ1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
dmFyIHJlY3Q7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHNob3VsZFNj
cm9sbCA9IGZhbHNlOworICAgICAgICBpZiAoIXRoaXMuJHNjcm9sbEFuY2hvcikKKyAgICAgICAg
ICAgIHRoaXMuJHNjcm9sbEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgICAgICB2YXIgc2Nyb2xsQW5jaG9yID0gdGhpcy4kc2Nyb2xsQW5jaG9yOworICAgICAgICBz
Y3JvbGxBbmNob3Iuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjphYnNvbHV0ZSI7CisgICAgICAg
IHRoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZShzY3JvbGxBbmNob3IsIHRoaXMuY29udGFpbmVy
LmZpcnN0Q2hpbGQpOworICAgICAgICB2YXIgb25DaGFuZ2VTZWxlY3Rpb24gPSB0aGlzLm9uKCJj
aGFuZ2VTZWxlY3Rpb24iLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNob3VsZFNjcm9sbCA9
IHRydWU7CisgICAgICAgIH0pOworICAgICAgICB2YXIgb25CZWZvcmVSZW5kZXIgPSB0aGlzLnJl
bmRlcmVyLm9uKCJiZWZvcmVSZW5kZXIiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRTY3JvbGwpCisgICAgICAgICAgICAgICAgcmVjdCA9IHNlbGYucmVuZGVyZXIuY29udGFp
bmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICB9KTsKKyAgICAgICAgdmFyIG9u
QWZ0ZXJSZW5kZXIgPSB0aGlzLnJlbmRlcmVyLm9uKCJhZnRlclJlbmRlciIsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCAmJiByZWN0ICYmIHNlbGYuaXNGb2N1c2Vk
KCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVuZGVyZXIgPSBzZWxmLnJlbmRlcmVyOworICAg
ICAgICAgICAgICAgIHZhciBwb3MgPSByZW5kZXJlci4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zOwor
ICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSByZW5kZXJlci5sYXllckNvbmZpZzsKKyAgICAg
ICAgICAgICAgICB2YXIgdG9wID0gcG9zLnRvcCAtIGNvbmZpZy5vZmZzZXQ7CisgICAgICAgICAg
ICAgICAgaWYgKHBvcy50b3AgPj0gMCAmJiB0b3AgKyByZWN0LnRvcCA8IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2hvdWxkU2Nyb2xsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHBvcy50b3AgPCBjb25maWcuaGVpZ2h0ICYmCisgICAgICAgICAgICAgICAgICAgIHBvcy50
b3AgKyByZWN0LnRvcCArIGNvbmZpZy5saW5lSGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0KSB7
CisgICAgICAgICAgICAgICAgICAgIHNob3VsZFNjcm9sbCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZFNjcm9sbCA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzaG91bGRTY3JvbGwgIT0gbnVs
bCkgeworICAgICAgICAgICAgICAgICAgICBzY3JvbGxBbmNob3Iuc3R5bGUudG9wID0gdG9wICsg
InB4IjsKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5jaG9yLnN0eWxlLmxlZnQgPSBwb3Mu
bGVmdCArICJweCI7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS5oZWln
aHQgPSBjb25maWcubGluZUhlaWdodCArICJweCI7CisgICAgICAgICAgICAgICAgICAgIHNjcm9s
bEFuY2hvci5zY3JvbGxJbnRvVmlldyhzaG91bGRTY3JvbGwpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBzaG91bGRTY3JvbGwgPSByZWN0ID0gbnVsbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3
ID0gZnVuY3Rpb24oZW5hYmxlKSB7CisgICAgICAgICAgICBpZiAoZW5hYmxlID09PSBmYWxzZSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWxldGUgdGhpcy5zZXRBdXRv
U2Nyb2xsRWRpdG9ySW50b1ZpZXc7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVu
ZXIoImNoYW5nZVNlbGVjdGlvbiIsIG9uQ2hhbmdlU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIHRo
aXMucmVuZGVyZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWZ0ZXJSZW5kZXIiLCBvbkFmdGVyUmVu
ZGVyKTsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVm
b3JlUmVuZGVyIiwgb25CZWZvcmVSZW5kZXIpOworICAgICAgICB9OwogICAgIH07CiAKIH0pLmNh
bGwoRWRpdG9yLnByb3RvdHlwZSk7CiAKIAorCitjb25maWcuZGVmaW5lT3B0aW9ucyhFZGl0b3Iu
cHJvdG90eXBlLCAiZWRpdG9yIiwgeworICAgIHNlbGVjdGlvblN0eWxlOiB7CisgICAgICAgIHNl
dDogZnVuY3Rpb24oc3R5bGUpIHsKKyAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2Uo
KTsKKyAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVNlbGVjdGlvblN0eWxlIiwge2RhdGE6
IHN0eWxlfSk7CisgICAgICAgIH0sCisgICAgICAgIGluaXRpYWxWYWx1ZTogImxpbmUiLAorICAg
IH0sCisgICAgaGlnaGxpZ2h0QWN0aXZlTGluZTogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkg
e3RoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTt9LAorICAgICAgICBpbml0aWFsVmFs
dWU6IHRydWUKKyAgICB9LAorICAgIGhpZ2hsaWdodFNlbGVjdGVkV29yZDogeworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkge3RoaXMuJG9uU2VsZWN0aW9uQ2hhbmdlKCk7
fSwKKyAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlCisgICAgfSwKKyAgICByZWFkT25seTogewor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uKHJlYWRPbmx5KSB7CisgICAgICAgICAgICB0aGlzLnRleHRJ
bnB1dC5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLiRj
dXJzb3JMYXllci5zZXRCbGlua2luZyghcmVhZE9ubHkpOworICAgICAgICB9LAorICAgICAgICBp
bml0aWFsVmFsdWU6IGZhbHNlCisgICAgfSwKKyAgICBiZWhhdmlvdXJzRW5hYmxlZDoge2luaXRp
YWxWYWx1ZTogdHJ1ZX0sCisgICAgd3JhcEJlaGF2aW91cnNFbmFibGVkOiB7aW5pdGlhbFZhbHVl
OiB0cnVlfSwKKworICAgIGhpZ2hsaWdodEd1dHRlckxpbmU6ICJyZW5kZXJlciIsCisgICAgYW5p
bWF0ZWRTY3JvbGw6ICJyZW5kZXJlciIsCisgICAgc2hvd0ludmlzaWJsZXM6ICJyZW5kZXJlciIs
CisgICAgc2hvd1ByaW50TWFyZ2luOiAicmVuZGVyZXIiLAorICAgIHByaW50TWFyZ2luQ29sdW1u
OiAicmVuZGVyZXIiLAorICAgIGZhZGVGb2xkV2lkZ2V0czogInJlbmRlcmVyIiwKKyAgICBzaG93
Rm9sZFdpZGdldHM6ICJyZW5kZXJlciIsCisgICAgc2hvd0d1dHRlcjogInJlbmRlcmVyIiwKKyAg
ICBkaXNwbGF5SW5kZW50R3VpZGVzOiAicmVuZGVyZXIiLAorCisgICAgc2Nyb2xsU3BlZWQ6ICIk
bW91c2VIYW5kbGVyIiwKKyAgICBkcmFnRGVsYXk6ICIkbW91c2VIYW5kbGVyIiwKKyAgICBmb2N1
c1RpbW91dDogIiRtb3VzZUhhbmRsZXIiLAorCisgICAgZmlyc3RMaW5lTnVtYmVyOiAic2Vzc2lv
biIsCisgICAgdXNlV29ya2VyOiAic2Vzc2lvbiIsCisgICAgdXNlU29mdFRhYnM6ICJzZXNzaW9u
IiwKKyAgICB0YWJTaXplOiAic2Vzc2lvbiIsCisgICAgd3JhcDogInNlc3Npb24iCit9KTsKKwog
ZXhwb3J0cy5FZGl0b3IgPSBFZGl0b3I7CiB9KTsKIApAQCAtMzUwNiw5ICszNTU3LDEyIEBAIHZh
ciBUZXh0SW5wdXQgPSBmdW5jdGlvbihwYXJlbnROb2RlLCBob3N0KSB7CiAgICAgICAgIHJlc2V0
U2VsZWN0aW9uKGhvc3Quc2VsZWN0aW9uLmlzRW1wdHkoKSk7CiAgICAgICAgIGhvc3QuX2VtaXQo
Im5hdGl2ZWNvbnRleHRtZW51Iiwge3RhcmdldDogaG9zdH0pOwogICAgICAgICB2YXIgcmVjdCA9
IGhvc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICB2YXIgc3R5
bGUgPSBkb20uY29tcHV0ZWRTdHlsZShob3N0LmNvbnRhaW5lcik7CisgICAgICAgIHZhciB0b3Ag
PSByZWN0LnRvcCArIChwYXJzZUludChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgfHwgMCk7CisgICAg
ICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgKHBhcnNlSW50KHJlY3QuYm9yZGVyTGVmdFdpZHRo
KSB8fCAwKTsKICAgICAgICAgdmFyIG1vdmUgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB0
ZXh0LnN0eWxlLmxlZnQgPSBlLmNsaWVudFggLSByZWN0LmxlZnQgLSAyICsgInB4IjsKLSAgICAg
ICAgICAgIHRleHQuc3R5bGUudG9wID0gZS5jbGllbnRZIC0gcmVjdC50b3AgLSAyICsgInB4IjsK
KyAgICAgICAgICAgIHRleHQuc3R5bGUubGVmdCA9IGUuY2xpZW50WCAtIGxlZnQgLSAyICsgInB4
IjsKKyAgICAgICAgICAgIHRleHQuc3R5bGUudG9wID0gZS5jbGllbnRZIC0gdG9wIC0gMiArICJw
eCI7CiAgICAgICAgIH07CiAgICAgICAgIG1vdmUoZSk7CiAKQEAgLTM1NDUsNyArMzU5OSw3IEBA
IHZhciBUZXh0SW5wdXQgPSBmdW5jdGlvbihwYXJlbnROb2RlLCBob3N0KSB7CiBleHBvcnRzLlRl
eHRJbnB1dCA9IFRleHRJbnB1dDsKIH0pOwogCi1hY2UuZGVmaW5lKCdhY2UvbW91c2UvbW91c2Vf
aGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9ldmVu
dCcsICdhY2UvbGliL3VzZXJhZ2VudCcsICdhY2UvbW91c2UvZGVmYXVsdF9oYW5kbGVycycsICdh
Y2UvbW91c2UvZGVmYXVsdF9ndXR0ZXJfaGFuZGxlcicsICdhY2UvbW91c2UvbW91c2VfZXZlbnQn
LCAnYWNlL21vdXNlL2RyYWdkcm9wJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSkgeworYWNlLmRlZmluZSgnYWNlL21vdXNlL21vdXNlX2hhbmRsZXInLCBbJ3JlcXVpcmUnLCAn
ZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvZXZlbnQnLCAnYWNlL2xpYi91c2VyYWdlbnQn
LCAnYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMnLCAnYWNlL21vdXNlL2RlZmF1bHRfZ3V0dGVy
X2hhbmRsZXInLCAnYWNlL21vdXNlL21vdXNlX2V2ZW50JywgJ2FjZS9tb3VzZS9kcmFnZHJvcCcs
ICdhY2UvY29uZmlnJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogCiAK
IHZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOwpAQCAtMzU1NCw2ICszNjA4LDcg
QEAgdmFyIERlZmF1bHRIYW5kbGVycyA9IHJlcXVpcmUoIi4vZGVmYXVsdF9oYW5kbGVycyIpLkRl
ZmF1bHRIYW5kbGVyczsKIHZhciBEZWZhdWx0R3V0dGVySGFuZGxlciA9IHJlcXVpcmUoIi4vZGVm
YXVsdF9ndXR0ZXJfaGFuZGxlciIpLkd1dHRlckhhbmRsZXI7CiB2YXIgTW91c2VFdmVudCA9IHJl
cXVpcmUoIi4vbW91c2VfZXZlbnQiKS5Nb3VzZUV2ZW50OwogdmFyIERyYWdkcm9wSGFuZGxlciA9
IHJlcXVpcmUoIi4vZHJhZ2Ryb3AiKS5EcmFnZHJvcEhhbmRsZXI7Cit2YXIgY29uZmlnID0gcmVx
dWlyZSgiLi4vY29uZmlnIik7CiAKIHZhciBNb3VzZUhhbmRsZXIgPSBmdW5jdGlvbihlZGl0b3Ip
IHsKICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKQEAgLTM1ODEsMjkgKzM2MzYsMTAgQEAgdmFy
IE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgewogfTsKIAogKGZ1bmN0aW9uKCkgewot
Ci0gICAgdGhpcy4kc2Nyb2xsU3BlZWQgPSAxOwotICAgIHRoaXMuc2V0U2Nyb2xsU3BlZWQgPSBm
dW5jdGlvbihzcGVlZCkgewotICAgICAgICB0aGlzLiRzY3JvbGxTcGVlZCA9IHNwZWVkOwotICAg
IH07Ci0KLSAgICB0aGlzLmdldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLiRzY3JvbGxTcGVlZDsKLSAgICB9OwotCiAgICAgdGhpcy5vbk1vdXNlRXZlbnQg
PSBmdW5jdGlvbihuYW1lLCBlKSB7CiAgICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG5l
dyBNb3VzZUV2ZW50KGUsIHRoaXMuZWRpdG9yKSk7CiAgICAgfTsKIAotICAgIHRoaXMuJGRyYWdE
ZWxheSA9IDI1MDsKLSAgICB0aGlzLnNldERyYWdEZWxheSA9IGZ1bmN0aW9uKGRyYWdEZWxheSkg
ewotICAgICAgICB0aGlzLiRkcmFnRGVsYXkgPSBkcmFnRGVsYXk7Ci0gICAgfTsKLQotICAgIHRo
aXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRkcmFn
RGVsYXk7Ci0gICAgfTsKLQogICAgIHRoaXMub25Nb3VzZU1vdmUgPSBmdW5jdGlvbihuYW1lLCBl
KSB7CiAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeSAm
JiB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1vdmU7CiAgICAgICAgIGlmICghbGlz
dGVuZXJzIHx8ICFsaXN0ZW5lcnMubGVuZ3RoKQpAQCAtMzY0NSw2ICszNjgxLDcgQEAgdmFyIE1v
dXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgewogCiAgICAgICAgIHZhciBvbkNhcHR1cmVF
bmQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOwor
ICAgICAgICAgICAgb25DYXB0dXJlSW50ZXJ2YWwoKTsKICAgICAgICAgICAgIHNlbGZbc2VsZi5z
dGF0ZSArICJFbmQiXSAmJiBzZWxmW3NlbGYuc3RhdGUgKyAiRW5kIl0oZSk7CiAgICAgICAgICAg
ICBzZWxmLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIu
JGtlZXBUZXh0QXJlYUF0Q3Vyc29yID09IG51bGwpIHsKQEAgLTM2NTYsMTQgKzM2OTMsMTAgQEAg
dmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgewogCiAgICAgICAgIHZhciBvbkNh
cHR1cmVJbnRlcnZhbCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgc2VsZltzZWxmLnN0YXRl
XSAmJiBzZWxmW3NlbGYuc3RhdGVdKCk7Ci0gICAgICAgIH0KKyAgICAgICAgfTsKICAgICAgICAg
CiAgICAgICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSAmJiBldi5kb21FdmVudC50eXBlID09ICJk
YmxjbGljayIpIHsKLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgb25DYXB0dXJlSW50ZXJ2YWwoKTsKLSAgICAgICAgICAgICAgICBvbkNhcHR1cmVF
bmQoZXYuZG9tRXZlbnQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtvbkNhcHR1cmVFbmQoZXYu
ZG9tRXZlbnQpO30pOwogICAgICAgICB9CiAKICAgICAgICAgZXZlbnQuY2FwdHVyZSh0aGlzLmVk
aXRvci5jb250YWluZXIsIG9uTW91c2VNb3ZlLCBvbkNhcHR1cmVFbmQpOwpAQCAtMzY3MSw2ICsz
NzA0LDEzIEBAIHZhciBNb3VzZUhhbmRsZXIgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICB9Owog
fSkuY2FsbChNb3VzZUhhbmRsZXIucHJvdG90eXBlKTsKIAorY29uZmlnLmRlZmluZU9wdGlvbnMo
TW91c2VIYW5kbGVyLnByb3RvdHlwZSwgIm1vdXNlSGFuZGxlciIsIHsKKyAgICBzY3JvbGxTcGVl
ZDoge2luaXRpYWxWYWx1ZTogMX0sCisgICAgZHJhZ0RlbGF5OiB7aW5pdGlhbFZhbHVlOiAxNTB9
LAorICAgIGZvY3VzVGltb3V0OiB7aW5pdGlhbFZhbHVlOiAwfQorfSk7CisKKwogZXhwb3J0cy5N
b3VzZUhhbmRsZXIgPSBNb3VzZUhhbmRsZXI7CiB9KTsKIApAQCAtMzY4MCw3ICszNzIwLDcgQEAg
YWNlLmRlZmluZSgnYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMnLCBbJ3JlcXVpcmUnLCAnZXhw
b3J0cycsICdtb2R1bGUnICwgJ2FjZS8KIHZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7
CiB2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwogCi12YXIgRFJB
R19PRkZTRVQgPSA1OyAvLyBwaXhlbHMKK3ZhciBEUkFHX09GRlNFVCA9IDA7IC8vIHBpeGVscwog
CiBmdW5jdGlvbiBEZWZhdWx0SGFuZGxlcnMobW91c2VIYW5kbGVyKSB7CiAgICAgbW91c2VIYW5k
bGVyLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7CkBAIC0zNzAxLDggKzM3NDEsNiBAQCBmdW5jdGlv
biBEZWZhdWx0SGFuZGxlcnMobW91c2VIYW5kbGVyKSB7CiAKICAgICBtb3VzZUhhbmRsZXIuc2Vs
ZWN0QnlMaW5lcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsICJn
ZXRMaW5lUmFuZ2UiKTsKICAgICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlXb3JkcyA9IHRoaXMuZXh0
ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsICJnZXRXb3JkUmFuZ2UiKTsKLQotICAg
IG1vdXNlSGFuZGxlci4kZm9jdXNXYWl0VGltb3V0ID0gMjUwOwogfQogCiAoZnVuY3Rpb24oKSB7
CkBAIC0zNzI3LDcgKzM3NjUsNyBAQCBmdW5jdGlvbiBEZWZhdWx0SGFuZGxlcnMobW91c2VIYW5k
bGVyKSB7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGluU2VsZWN0aW9uICYmICFlZGl0b3IuaXNG
b2N1c2VkKCkpIHsKICAgICAgICAgICAgIGVkaXRvci5mb2N1cygpOwotICAgICAgICAgICAgaWYg
KHRoaXMuJGZvY3VzV2FpdFRpbW91dCAmJiAhdGhpcy4kY2xpY2tTZWxlY3Rpb24pIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLiRmb2N1c1RpbW91dCAmJiAhdGhpcy4kY2xpY2tTZWxlY3Rpb24pIHsK
ICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKCJmb2N1c1dhaXQiKTsKICAgICAgICAgICAg
ICAgICB0aGlzLmNhcHR1cmVNb3VzZShldik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV2LnBy
ZXZlbnREZWZhdWx0KCk7CkBAIC0zODQ0LDggKzM4ODIsOCBAQCBmdW5jdGlvbiBEZWZhdWx0SGFu
ZGxlcnMobW91c2VIYW5kbGVyKSB7CiAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNhbGNEaXN0YW5j
ZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3duRXZlbnQueSwgdGhpcy54LCB0
aGlzLnkpOwogICAgICAgICB2YXIgdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CiAKLSAg
ICAgICAgaWYgKGRpc3RhbmNlID4gRFJBR19PRkZTRVQgfHx0aW1lIC0gdGhpcy5tb3VzZWRvd25F
dmVudC50aW1lID4gdGhpcy4kZm9jdXNXYWl0VGltb3V0KQotICAgICAgICAgICAgdGhpcy5zdGFy
dFNlbGVjdCgpOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBEUkFHX09GRlNFVCB8fCB0aW1lIC0g
dGhpcy5tb3VzZWRvd25FdmVudC50aW1lID4gdGhpcy4kZm9jdXNUaW1vdXQpCisgICAgICAgICAg
ICB0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlv
bigpKTsKICAgICB9OwogCiAgICAgdGhpcy5kcmFnV2FpdCA9IGZ1bmN0aW9uKGUpIHsKQEAgLTM4
NTUsNyArMzg5Myw3IEBAIGZ1bmN0aW9uIERlZmF1bHRIYW5kbGVycyhtb3VzZUhhbmRsZXIpIHsK
IAogICAgICAgICBpZiAoZGlzdGFuY2UgPiBEUkFHX09GRlNFVCkgewogICAgICAgICAgICAgdGhp
cy5zdGFydFNlbGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAodGltZSAtIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA+IGVk
aXRvci5nZXREcmFnRGVsYXkoKSkgeworICAgICAgICB9IGVsc2UgaWYgKHRpbWUgLSB0aGlzLm1v
dXNlZG93bkV2ZW50LnRpbWUgPiBlZGl0b3IuJG1vdXNlSGFuZGxlci4kZHJhZ0RlbGF5KSB7CiAg
ICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZygpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTM5Mzgs
MjggKzM5NzYsMTggQEAgZnVuY3Rpb24gRGVmYXVsdEhhbmRsZXJzKG1vdXNlSGFuZGxlcikgewog
ICAgIH07CiAKICAgICB0aGlzLm9uTW91c2VXaGVlbCA9IGZ1bmN0aW9uKGV2KSB7Ci0gICAgICAg
IGlmIChldi5nZXRTaGlmdEtleSgpIHx8IGV2LmdldEFjY2VsS2V5KCkpeworICAgICAgICBpZiAo
ZXYuZ2V0U2hpZnRLZXkoKSB8fCBldi5nZXRBY2NlbEtleSgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9CisgICAgICAgIHZhciB0ID0gZXYuZG9tRXZlbnQudGltZVN0YW1wOworICAg
ICAgICB2YXIgZHQgPSB0IC0gKHRoaXMuJGxhc3RTY3JvbGxUaW1lfHwwKTsKKyAgICAgICAgCiAg
ICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKICAgICAgICAgdmFyIGlzU2Nyb2xhYmxl
ID0gZWRpdG9yLnJlbmRlcmVyLmlzU2Nyb2xsYWJsZUJ5KGV2LndoZWVsWCAqIGV2LnNwZWVkLCBl
di53aGVlbFkgKiBldi5zcGVlZCk7Ci0gICAgICAgIGlmIChpc1Njcm9sYWJsZSkgewotICAgICAg
ICAgICAgdGhpcy4kcGFzc1Njcm9sbEV2ZW50ID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAodGhpcy4kcGFzc1Njcm9sbEV2ZW50KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgaWYgKCF0aGlzLiRzY3JvbGxTdG9wVGltZW91dCkgewotICAg
ICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgICB0aGlzLiRzY3Jv
bGxTdG9wVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNlbGYuJHBhc3NTY3JvbGxFdmVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHNl
bGYuJHNjcm9sbFN0b3BUaW1lb3V0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9LCAyMDApOwot
ICAgICAgICAgICAgfQorICAgICAgICBpZiAoaXNTY3JvbGFibGUgfHwgZHQgPCAyMDApIHsKKyAg
ICAgICAgICAgIHRoaXMuJGxhc3RTY3JvbGxUaW1lID0gdDsKKyAgICAgICAgICAgIGVkaXRvci5y
ZW5kZXJlci5zY3JvbGxCeShldi53aGVlbFggKiBldi5zcGVlZCwgZXYud2hlZWxZICogZXYuc3Bl
ZWQpOworICAgICAgICAgICAgcmV0dXJuIGV2LnN0b3AoKTsKICAgICAgICAgfQotCi0gICAgICAg
IGVkaXRvci5yZW5kZXJlci5zY3JvbGxCeShldi53aGVlbFggKiBldi5zcGVlZCwgZXYud2hlZWxZ
ICogZXYuc3BlZWQpOwotICAgICAgICByZXR1cm4gZXYucHJldmVudERlZmF1bHQoKTsKICAgICB9
OwogCiB9KS5jYWxsKERlZmF1bHRIYW5kbGVycy5wcm90b3R5cGUpOwpAQCAtNDIwNSw2ICs0MjMz
LDkgQEAgdmFyIERyYWdkcm9wSGFuZGxlciA9IGZ1bmN0aW9uKG1vdXNlSGFuZGxlcikgewogICAg
IGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJhZ2VudGVyIiwgZnVuY3Rpb24oZSkg
ewogICAgICAgICBpZiAoZWRpdG9yLmdldFJlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHZhciB0eXBlcyA9IGUuZGF0YVRyYW5zZmVyLnR5cGVzOworICAgICAgICBpZiAo
dHlwZXMgJiYgQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0eXBlcywgJ0ZpbGVzJykgIT09
IC0xKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjb3VudGVyKys7CiAgICAgICAgIGlm
ICghZHJhZ1NlbGVjdGlvbk1hcmtlcikgewogICAgICAgICAgICAgcmFuZ2UgPSBlZGl0b3IuZ2V0
U2VsZWN0aW9uUmFuZ2UoKTsKQEAgLTQyMjEsNiArNDI1Miw5IEBAIHZhciBEcmFnZHJvcEhhbmRs
ZXIgPSBmdW5jdGlvbihtb3VzZUhhbmRsZXIpIHsKICAgICBldmVudC5hZGRMaXN0ZW5lcihtb3Vz
ZVRhcmdldCwgImRyYWdvdmVyIiwgZnVuY3Rpb24oZSkgewogICAgICAgICBpZiAoZWRpdG9yLmdl
dFJlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciB0eXBlcyA9IGUu
ZGF0YVRyYW5zZmVyLnR5cGVzOworICAgICAgICBpZiAodHlwZXMgJiYgQXJyYXkucHJvdG90eXBl
LmluZGV4T2YuY2FsbCh0eXBlcywgJ0ZpbGVzJykgIT09IC0xKQorICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB4ID0gZS5jbGllbnRYOwogICAgICAgICB5ID0gZS5jbGllbnRZOwogICAgICAg
ICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CkBAIC00MjM1LDYgKzQyNjksOSBAQCB2
YXIgRHJhZ2Ryb3BIYW5kbGVyID0gZnVuY3Rpb24obW91c2VIYW5kbGVyKSB7CiAgICAgZXZlbnQu
YWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJkcmFnbGVhdmUiLCBmdW5jdGlvbihlKSB7CiAgICAg
ICAgIGlmIChlZGl0b3IuZ2V0UmVhZE9ubHkoKSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdmFyIHR5cGVzID0gZS5kYXRhVHJhbnNmZXIudHlwZXM7CisgICAgICAgIGlmICh0eXBlcyAm
JiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHR5cGVzLCAnRmlsZXMnKSAhPT0gLTEpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNvdW50ZXItLTsKICAgICAgICAgaWYgKGNvdW50
ZXIgPiAwKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDI2NSwyMDEyICs0MzAyLDIxMjEgQEAg
dmFyIERyYWdkcm9wSGFuZGxlciA9IGZ1bmN0aW9uKG1vdXNlSGFuZGxlcikgewogZXhwb3J0cy5E
cmFnZHJvcEhhbmRsZXIgPSBEcmFnZHJvcEhhbmRsZXI7CiB9KTsKIAotYWNlLmRlZmluZSgnYWNl
L21vdXNlL2ZvbGRfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CithY2UuZGVmaW5lKCdhY2UvY29u
ZmlnJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2xhbmcnLCAn
YWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9uZXQnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10sIGZ1
bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgeworIm5vIHVzZSBzdHJpY3QiOwogCit2
YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBvb3AgPSByZXF1aXJlKCIuL2xp
Yi9vb3AiKTsKK3ZhciBuZXQgPSByZXF1aXJlKCIuL2xpYi9uZXQiKTsKK3ZhciBFdmVudEVtaXR0
ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwogCi1mdW5j
dGlvbiBGb2xkSGFuZGxlcihlZGl0b3IpIHsKK3ZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIHRoaXM7Cit9KSgpOwogCi0gICAgZWRpdG9yLm9uKCJjbGljayIsIGZ1bmN0aW9u
KGUpIHsKLSAgICAgICAgdmFyIHBvc2l0aW9uID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCk7Ci0g
ICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247Ci0gICAgICAgIHZhciBmb2xkID0g
c2Vzc2lvbi5nZXRGb2xkQXQocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIDEpOwotICAg
ICAgICBpZiAoZm9sZCkgewotICAgICAgICAgICAgaWYgKGUuZ2V0QWNjZWxLZXkoKSkKLSAgICAg
ICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQoZm9sZCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc2Vzc2lvbi5leHBhbmRGb2xkKGZvbGQpOwordmFyIG9wdGlvbnMgPSB7
CisgICAgcGFja2FnZWQ6IGZhbHNlLAorICAgIHdvcmtlclBhdGg6IG51bGwsCisgICAgbW9kZVBh
dGg6IG51bGwsCisgICAgdGhlbWVQYXRoOiBudWxsLAorICAgIGJhc2VQYXRoOiAiIiwKKyAgICBz
dWZmaXg6ICIuanMiLAorICAgICRtb2R1bGVVcmxzOiB7fQorfTsKIAotICAgICAgICAgICAgZS5z
dG9wKCk7Ci0gICAgICAgIH0KLSAgICB9KTsKK2V4cG9ydHMuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7
CisgICAgaWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiVW5rbm93biBjb25maWcga2V5OiAiICsga2V5KTsKIAotICAgIGVkaXRvci5vbigi
Z3V0dGVybW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgewotICAgICAgICBpZiAoIWVkaXRvci5pc0Zv
Y3VzZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9
IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKGUpOworICAgIHJldHVybiBv
cHRpb25zW2tleV07Cit9OwogCi0gICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gImZvbGRXaWRn
ZXRzIikgewotICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJv
dzsKLSAgICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247Ci0gICAgICAgICAg
ICBpZiAoc2Vzc2lvbi5mb2xkV2lkZ2V0cyAmJiBzZXNzaW9uLmZvbGRXaWRnZXRzW3Jvd10pCi0g
ICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ub25Gb2xkV2lkZ2V0Q2xpY2socm93LCBlKTsK
LSAgICAgICAgICAgIGUuc3RvcCgpOwotICAgICAgICB9Ci0gICAgfSk7CitleHBvcnRzLnNldCA9
IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHko
a2V5KSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbmZpZyBrZXk6ICIgKyBr
ZXkpOwogCi0gICAgZWRpdG9yLm9uKCJndXR0ZXJkYmxjbGljayIsIGZ1bmN0aW9uKGUpIHsKLSAg
ICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0
UmVnaW9uKGUpOworICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlOworfTsKIAotICAgICAgICBpZiAo
Z3V0dGVyUmVnaW9uID09ICJmb2xkV2lkZ2V0cyIpIHsKLSAgICAgICAgICAgIHZhciByb3cgPSBl
LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7Ci0gICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IGVk
aXRvci5zZXNzaW9uOwotICAgICAgICAgICAgdmFyIGZ3ID0gc2Vzc2lvbi5mb2xkV2lkZ2V0czsK
LSAgICAgICAgICAgIGlmICghZncgfHwgZndbcm93XSkKLSAgICAgICAgICAgICAgICByZXR1cm47
CitleHBvcnRzLmFsbCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBsYW5nLmNvcHlPYmplY3Qo
b3B0aW9ucyk7Cit9Oworb29wLmltcGxlbWVudChleHBvcnRzLCBFdmVudEVtaXR0ZXIpOwogCi0g
ICAgICAgICAgICB2YXIgaSA9IHJvdyAtIDEsIGZpcnN0UmFuZ2U7Ci0gICAgICAgICAgICB3aGls
ZSAoaSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSBmd1tpXTsKLSAgICAgICAgICAg
ICAgICBpZiAoYyA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBjID0gZndbaV0gPSBzZXNz
aW9uLmdldEZvbGRXaWRnZXQoKTsKK2V4cG9ydHMubW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwg
Y29tcG9uZW50KSB7CisgICAgaWYgKG9wdGlvbnMuJG1vZHVsZVVybHNbbmFtZV0pCisgICAgICAg
IHJldHVybiBvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdOwogCi0gICAgICAgICAgICAgICAgaWYg
KGMgPT0gInN0YXJ0IikgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9u
LmdldEZvbGRXaWRnZXRSYW5nZShpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJh
bmdlKQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IHJhbmdlOwotICAgICAg
ICAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UuZW5kLnJvdyA+PSByb3cpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkgPT0gLTEpCi0gICAgICAg
ICAgICAgICAgcmFuZ2UgPSBmaXJzdFJhbmdlOworICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQo
Ii8iKTsKKyAgICBjb21wb25lbnQgPSBjb21wb25lbnQgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0g
Ml0gfHwgIiI7CisgICAgdmFyIGJhc2UgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5yZXBsYWNl
KGNvbXBvbmVudCwgIiIpLnJlcGxhY2UoLyheW1wtX10pfChbXC1fXSQpLywgIiIpOwogCi0gICAg
ICAgICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm93ID0gcmFuZ2Uuc3Rh
cnQucm93OwotICAgICAgICAgICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXRGb2xkQXQocm93
LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgsIDEpOworICAgIGlmICghYmFzZSAmJiBwYXJ0
cy5sZW5ndGggPiAxKQorICAgICAgICBiYXNlID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl07Cisg
ICAgdmFyIHBhdGggPSBvcHRpb25zW2NvbXBvbmVudCArICJQYXRoIl07CisgICAgaWYgKHBhdGgg
PT0gbnVsbCkKKyAgICAgICAgcGF0aCA9IG9wdGlvbnMuYmFzZVBhdGg7CisgICAgaWYgKHBhdGgg
JiYgcGF0aC5zbGljZSgtMSkgIT0gIi8iKQorICAgICAgICBwYXRoICs9ICIvIjsKKyAgICByZXR1
cm4gcGF0aCArIGNvbXBvbmVudCArICItIiArIGJhc2UgKyB0aGlzLmdldCgic3VmZml4Iik7Cit9
OwogCi0gICAgICAgICAgICAgICAgaWYgKGZvbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgc2Vz
c2lvbi5yZW1vdmVGb2xkKGZvbGQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNlc3Npb24uYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOwotICAgICAgICAgICAg
ICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoe3JvdzogcmFuZ2Uu
c3RhcnQucm93LCBjb2x1bW46IDB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlLnN0b3AoKTsKLSAgICAgICAgfQotICAgIH0pOwotfQorZXhwb3J0cy5z
ZXRNb2R1bGVVcmwgPSBmdW5jdGlvbihuYW1lLCBzdWJzdCkgeworICAgIHJldHVybiBvcHRpb25z
LiRtb2R1bGVVcmxzW25hbWVdID0gc3Vic3Q7Cit9OwogCi1leHBvcnRzLkZvbGRIYW5kbGVyID0g
Rm9sZEhhbmRsZXI7CitleHBvcnRzLmxvYWRNb2R1bGUgPSBmdW5jdGlvbihtb2R1bGVOYW1lLCBv
bkxvYWQpIHsKKyAgICB2YXIgbW9kdWxlLCBtb2R1bGVUeXBlOworICAgIGlmIChBcnJheS5pc0Fy
cmF5KG1vZHVsZU5hbWUpKSB7CisgICAgICAgIG1vZHVsZVR5cGUgPSBtb2R1bGVOYW1lWzBdOwor
ICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZVsxXTsKKyAgICB9CisgICAgdHJ5IHsKKyAg
ICAgICAgbW9kdWxlID0gcmVxdWlyZShtb2R1bGVOYW1lKTsKKyAgICB9IGNhdGNoIChlKSB7fTsK
KyAgICBpZiAobW9kdWxlKQorICAgICAgICByZXR1cm4gb25Mb2FkKG1vZHVsZSk7CiAKLX0pOwor
ICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmVxdWlyZShbbW9kdWxl
TmFtZV0sIGZ1bmN0aW9uKG1vZHVsZSkgeworICAgICAgICAgICAgZXhwb3J0cy5fZW1pdCgibG9h
ZC5tb2R1bGUiLCB7bmFtZTogbW9kdWxlTmFtZSwgbW9kdWxlOiBtb2R1bGV9KTsKKyAgICAgICAg
ICAgIG9uTG9hZChtb2R1bGUpOworICAgICAgICB9KTsKKyAgICB9OwogCi1hY2UuZGVmaW5lKCdh
Y2Uva2V5Ym9hcmQva2V5YmluZGluZycsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpYi9rZXlzJywgJ2FjZS9saWIvZXZlbnQnXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhw
b3J0cywgbW9kdWxlKSB7CisgICAgaWYgKCFleHBvcnRzLmdldCgicGFja2FnZWQiKSkKKyAgICAg
ICAgcmV0dXJuIGFmdGVyTG9hZCgpOworICAgIG5ldC5sb2FkU2NyaXB0KGV4cG9ydHMubW9kdWxl
VXJsKG1vZHVsZU5hbWUsIG1vZHVsZVR5cGUpLCBhZnRlckxvYWQpOworfTsKK2V4cG9ydHMuaW5p
dCA9IGZ1bmN0aW9uKCkgeworICAgIG9wdGlvbnMucGFja2FnZWQgPSByZXF1aXJlLnBhY2thZ2Vk
IHx8IG1vZHVsZS5wYWNrYWdlZCB8fCAoZ2xvYmFsLmRlZmluZSAmJiBkZWZpbmUucGFja2FnZWQp
OwogCisgICAgaWYgKCFnbG9iYWwuZG9jdW1lbnQpCisgICAgICAgIHJldHVybiAiIjsKIAotdmFy
IGtleVV0aWwgID0gcmVxdWlyZSgiLi4vbGliL2tleXMiKTsKLXZhciBldmVudCA9IHJlcXVpcmUo
Ii4uL2xpYi9ldmVudCIpOworICAgIHZhciBzY3JpcHRPcHRpb25zID0ge307CisgICAgdmFyIHNj
cmlwdFVybCA9ICIiOwogCi12YXIgS2V5QmluZGluZyA9IGZ1bmN0aW9uKGVkaXRvcikgewotICAg
IHRoaXMuJGVkaXRvciA9IGVkaXRvcjsKLSAgICB0aGlzLiRkYXRhID0geyB9OwotICAgIHRoaXMu
JGhhbmRsZXJzID0gW107Ci0gICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlcihlZGl0b3IuY29tbWFu
ZHMpOworICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNj
cmlwdCIpOworICAgIGZvciAodmFyIGk9MDsgaTxzY3JpcHRzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIHZhciBzY3JpcHQgPSBzY3JpcHRzW2ldOworCisgICAgICAgIHZhciBzcmMgPSBzY3JpcHQu
c3JjIHx8IHNjcmlwdC5nZXRBdHRyaWJ1dGUoInNyYyIpOworICAgICAgICBpZiAoIXNyYykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gc2NyaXB0LmF0
dHJpYnV0ZXM7CisgICAgICAgIGZvciAodmFyIGo9MCwgbD1hdHRyaWJ1dGVzLmxlbmd0aDsgaiA8
IGw7IGorKykgeworICAgICAgICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2pdOworICAgICAg
ICAgICAgaWYgKGF0dHIubmFtZS5pbmRleE9mKCJkYXRhLWFjZS0iKSA9PT0gMCkgeworICAgICAg
ICAgICAgICAgIHNjcmlwdE9wdGlvbnNbZGVIeXBoZW5hdGUoYXR0ci5uYW1lLnJlcGxhY2UoL15k
YXRhLWFjZS0vLCAiIikpXSA9IGF0dHIudmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB2YXIgbSA9IHNyYy5tYXRjaCgvXiguKilcL2FjZShcLVx3Kyk/XC5qcyhcP3wk
KS8pOworICAgICAgICBpZiAobSkKKyAgICAgICAgICAgIHNjcmlwdFVybCA9IG1bMV07CisgICAg
fQorCisgICAgaWYgKHNjcmlwdFVybCkgeworICAgICAgICBzY3JpcHRPcHRpb25zLmJhc2UgPSBz
Y3JpcHRPcHRpb25zLmJhc2UgfHwgc2NyaXB0VXJsOworICAgICAgICBzY3JpcHRPcHRpb25zLnBh
Y2thZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzY3JpcHRPcHRpb25zLmJhc2VQYXRoID0gc2Ny
aXB0T3B0aW9ucy5iYXNlOworICAgIHNjcmlwdE9wdGlvbnMud29ya2VyUGF0aCA9IHNjcmlwdE9w
dGlvbnMud29ya2VyUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7CisgICAgc2NyaXB0T3B0aW9u
cy5tb2RlUGF0aCA9IHNjcmlwdE9wdGlvbnMubW9kZVBhdGggfHwgc2NyaXB0T3B0aW9ucy5iYXNl
OworICAgIHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoID0gc2NyaXB0T3B0aW9ucy50aGVtZVBhdGgg
fHwgc2NyaXB0T3B0aW9ucy5iYXNlOworICAgIGRlbGV0ZSBzY3JpcHRPcHRpb25zLmJhc2U7CisK
KyAgICBmb3IgKHZhciBrZXkgaW4gc2NyaXB0T3B0aW9ucykKKyAgICAgICAgaWYgKHR5cGVvZiBz
Y3JpcHRPcHRpb25zW2tleV0gIT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgZXhwb3J0cy5z
ZXQoa2V5LCBzY3JpcHRPcHRpb25zW2tleV0pOwogfTsKIAotKGZ1bmN0aW9uKCkgewotICAgIHRo
aXMuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihrYikgewotICAgICAgICB0aGlzLnJlbW92
ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxlcik7Ci0gICAgICAgIHRoaXMuJGRl
ZmF1bHRIYW5kbGVyID0ga2I7Ci0gICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAw
KTsKLSAgICAgICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IHRoaXMuJGVkaXRvcn07Ci0gICAgfTsK
K2Z1bmN0aW9uIGRlSHlwaGVuYXRlKHN0cikgeworICAgIHJldHVybiBzdHIucmVwbGFjZSgvLSgu
KS9nLCBmdW5jdGlvbihtLCBtMSkgeyByZXR1cm4gbTEudG9VcHBlckNhc2UoKTsgfSk7Cit9CiAK
LSAgICB0aGlzLnNldEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtiKSB7Ci0gICAgICAgIGlm
ICh0aGlzLiRoYW5kbGVyc1t0aGlzLiRoYW5kbGVycy5sZW5ndGggLSAxXSA9PSBrYikKK3ZhciBv
cHRpb25zUHJvdmlkZXIgPSB7CisgICAgc2V0T3B0aW9uczogZnVuY3Rpb24ob3B0TGlzdCkgewor
ICAgICAgICBPYmplY3Qua2V5cyhvcHRMaXN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAg
ICAgICAgICAgdGhpcy5zZXRPcHRpb24oa2V5LCBvcHRMaXN0W2tleV0pOworICAgICAgICB9LCB0
aGlzKTsKKyAgICB9LAorICAgIGdldE9wdGlvbnM6IGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgdmFy
IGIgPSB7fTsKKyAgICAgICAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsK
KyAgICAgICAgICAgIGJba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7CisgICAgICAgIH0sIHRo
aXMpOworICAgICAgICByZXR1cm4gYjsKKyAgICB9LAorICAgIHNldE9wdGlvbjogZnVuY3Rpb24o
bmFtZSwgdmFsdWUpIHsKKyAgICAgICAgaWYgKHRoaXNbIiQiICsgbmFtZV0gPT09IHZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgb3B0ID0gdGhpcy4kb3B0aW9uc1tuYW1l
XTsKKyAgICAgICAgaWYgKCFvcHQpCisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAg
ICAgICBpZiAob3B0LmZvcndhcmRUbykKKyAgICAgICAgICAgIHJldHVybiB0aGlzW29wdC5mb3J3
YXJkVG9dICYmIHRoaXNbb3B0LmZvcndhcmRUb10uc2V0T3B0aW9uKG5hbWUsIHZhbHVlKTsKIAot
ICAgICAgICB3aGlsZSAodGhpcy4kaGFuZGxlcnNbMV0pCi0gICAgICAgICAgICB0aGlzLnJlbW92
ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRoYW5kbGVyc1sxXSk7CisgICAgICAgIGlmICghb3B0Lmhh
bmRsZXNTZXQpCisgICAgICAgICAgICB0aGlzWyIkIiArIG5hbWVdID0gdmFsdWU7CisgICAgICAg
IGlmIChvcHQgJiYgb3B0LnNldCkKKyAgICAgICAgICAgIG9wdC5zZXQuY2FsbCh0aGlzLCB2YWx1
ZSk7CisgICAgfSwKKyAgICBnZXRPcHRpb246IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgdmFy
IG9wdCA9IHRoaXMuJG9wdGlvbnNbbmFtZV07CisgICAgICAgIGlmICghb3B0KQorICAgICAgICAg
ICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKG9wdC5mb3J3YXJkVG8pCisgICAgICAg
ICAgICByZXR1cm4gdGhpc1tvcHQuZm9yd2FyZFRvXSAmJiB0aGlzW29wdC5mb3J3YXJkVG9dLmdl
dE9wdGlvbihuYW1lKTsKKyAgICAgICAgcmV0dXJuIG9wdCAmJiBvcHQuZ2V0ID8gb3B0LmdldC5j
YWxsKHRoaXMpIDogdGhpc1siJCIgKyBuYW1lXTsKKyAgICB9Cit9OwogCi0gICAgICAgIHRoaXMu
YWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAxKTsKLSAgICB9OwordmFyIGRlZmF1bHRPcHRpb25zID0g
e307CitleHBvcnRzLmRlZmluZU9wdGlvbnMgPSBmdW5jdGlvbihvYmosIHBhdGgsIG9wdGlvbnMp
IHsKKyAgICBpZiAoIW9iai4kb3B0aW9ucykKKyAgICAgICAgZGVmYXVsdE9wdGlvbnNbcGF0aF0g
PSBvYmouJG9wdGlvbnMgPSB7fTsKIAotICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyID0gZnVu
Y3Rpb24oa2IsIHBvcykgewotICAgICAgICBpZiAoIWtiKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4T2Yoa2IpOwotICAgICAgICBpZiAo
aSAhPSAtMSkKLSAgICAgICAgICAgIHRoaXMuJGhhbmRsZXJzLnNwbGljZShpLCAxKTsKKyAgICBP
YmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICB2YXIg
b3B0ID0gb3B0aW9uc1trZXldOworICAgICAgICBpZiAodHlwZW9mIG9wdCA9PSAic3RyaW5nIikK
KyAgICAgICAgICAgIG9wdCA9IHtmb3J3YXJkVG86IG9wdH07CiAKLSAgICAgICAgaWYgKHBvcyA9
PSB1bmRlZmluZWQpCi0gICAgICAgICAgICB0aGlzLiRoYW5kbGVycy5wdXNoKGtiKTsKKyAgICAg
ICAgb3B0Lm5hbWUgfHwgKG9wdC5uYW1lID0ga2V5KTsKKyAgICAgICAgb2JqLiRvcHRpb25zW29w
dC5uYW1lXSA9IG9wdDsKKyAgICAgICAgaWYgKCJpbml0aWFsVmFsdWUiIGluIG9wdCkKKyAgICAg
ICAgICAgIG9ialsiJCIgKyBvcHQubmFtZV0gPSBvcHQuaW5pdGlhbFZhbHVlOworICAgIH0pOwor
ICAgIG9vcC5pbXBsZW1lbnQob2JqLCBvcHRpb25zUHJvdmlkZXIpOworCisgICAgcmV0dXJuIHRo
aXM7Cit9OworCitleHBvcnRzLnJlc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9iaikgeworICAgIE9i
amVjdC5rZXlzKG9iai4kb3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAg
dmFyIG9wdCA9IG9iai4kb3B0aW9uc1trZXldOworICAgICAgICBpZiAoInZhbHVlIiBpbiBvcHQp
CisgICAgICAgICAgICBvYmouc2V0T3B0aW9uKGtleSwgb3B0LnZhbHVlKTsKKyAgICB9KTsKK307
CisKK2V4cG9ydHMuc2V0RGVmYXVsdFZhbHVlID0gZnVuY3Rpb24ocGF0aCwgbmFtZSwgdmFsdWUp
IHsKKyAgICB2YXIgb3B0cyA9IGRlZmF1bHRPcHRpb25zW3BhdGhdIHx8IChkZWZhdWx0T3B0aW9u
c1twYXRoXSA9IHt9KTsKKyAgICBpZiAob3B0c1tuYW1lXSkgeworICAgICAgICBpZiAob3B0cy5m
b3J3YXJkVG8pCisgICAgICAgICAgICBleHBvcnRzLnNldERlZmF1bHRWYWx1ZShvcHRzLmZvcndh
cmRUbywgbmFtZSwgdmFsdWUpCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuJGhhbmRs
ZXJzLnNwbGljZShwb3MsIDAsIGtiKTsKKyAgICAgICAgICAgIG9wdHNbbmFtZV0udmFsdWUgPSB2
YWx1ZTsKKyAgICB9Cit9OwogCi0gICAgICAgIGlmIChpID09IC0xICYmIGtiLmF0dGFjaCkKLSAg
ICAgICAgICAgIGtiLmF0dGFjaCh0aGlzLiRlZGl0b3IpOwotICAgIH07CitleHBvcnRzLnNldERl
ZmF1bHRWYWx1ZXMgPSBmdW5jdGlvbihwYXRoLCBvcHRpb25IYXNoKSB7CisgICAgT2JqZWN0Lmtl
eXMob3B0aW9uSGFzaCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgZXhwb3J0cy5z
ZXREZWZhdWx0VmFsdWUocGF0aCwga2V5LCBvcHRpb25IYXNoW2tleV0pOworICAgIH0pOworfTsK
IAotICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsKLSAgICAg
ICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVycy5pbmRleE9mKGtiKTsKLSAgICAgICAgaWYgKGkgPT0g
LTEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRoaXMuJGhhbmRsZXJzLnNw
bGljZShpLCAxKTsKLSAgICAgICAga2IuZGV0YWNoICYmIGtiLmRldGFjaCh0aGlzLiRlZGl0b3Ip
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9OworfSk7CithY2UuZGVmaW5lKCdhY2UvbGli
L25ldCcsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xpYi9kb20nXSwg
ZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAKLSAgICB0aGlzLmdldEtleWJv
YXJkSGFuZGxlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcnNb
dGhpcy4kaGFuZGxlcnMubGVuZ3RoIC0gMV07Cit2YXIgZG9tID0gcmVxdWlyZSgiLi9kb20iKTsK
KworZXhwb3J0cy5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykgeworICAgIHZhciB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsK
KyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAo
eGhyLnJlYWR5U3RhdGUgPT09IDQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25z
ZVRleHQpOworICAgICAgICB9CiAgICAgfTsKKyAgICB4aHIuc2VuZChudWxsKTsKK307CiAKLSAg
ICB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycyA9IGZ1bmN0aW9uIChoYXNoSWQsIGtleVN0cmlu
Zywga2V5Q29kZSwgZSkgewotICAgICAgICB2YXIgdG9FeGVjdXRlOwotICAgICAgICB2YXIgc3Vj
Y2VzcyA9IGZhbHNlOwotICAgICAgICB2YXIgY29tbWFuZHMgPSB0aGlzLiRlZGl0b3IuY29tbWFu
ZHM7CitleHBvcnRzLmxvYWRTY3JpcHQgPSBmdW5jdGlvbihwYXRoLCBjYWxsYmFjaykgeworICAg
IHZhciBoZWFkID0gZG9tLmdldERvY3VtZW50SGVhZCgpOworICAgIHZhciBzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuJGhh
bmRsZXJzLmxlbmd0aDsgaS0tOykgewotICAgICAgICAgICAgdG9FeGVjdXRlID0gdGhpcy4kaGFu
ZGxlcnNbaV0uaGFuZGxlS2V5Ym9hcmQoCi0gICAgICAgICAgICAgICAgdGhpcy4kZGF0YSwgaGFz
aElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBp
ZiAoIXRvRXhlY3V0ZSB8fCAhdG9FeGVjdXRlLmNvbW1hbmQpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAodG9FeGVjdXRlLmNvbW1hbmQgPT0gIm51bGwiKSB7Ci0g
ICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRvRXhlY3V0ZS5wYXNzRXZlbnQgIT0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IGNvbW1hbmRzLmV4
ZWModG9FeGVjdXRlLmNvbW1hbmQsIHRoaXMuJGVkaXRvciwgdG9FeGVjdXRlLmFyZ3MsIGUpOyAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdWNjZXNzICYm
IGUgJiYgaGFzaElkICE9IC0xKQotICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BFdmVudChlKTsK
LSAgICAgICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgIHMu
c3JjID0gcGF0aDsKKyAgICBoZWFkLmFwcGVuZENoaWxkKHMpOworCisgICAgcy5vbmxvYWQgPSBz
Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKF8sIGlzQWJvcnQpIHsKKyAgICAgICAgaWYg
KGlzQWJvcnQgfHwgIXMucmVhZHlTdGF0ZSB8fCBzLnJlYWR5U3RhdGUgPT0gImxvYWRlZCIgfHwg
cy5yZWFkeVN0YXRlID09ICJjb21wbGV0ZSIpIHsKKyAgICAgICAgICAgIHMgPSBzLm9ubG9hZCA9
IHMub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKKyAgICAgICAgICAgIGlmICghaXNBYm9ydCkK
KyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBz
dWNjZXNzOwogICAgIH07Cit9OwogCi0gICAgdGhpcy5vbkNvbW1hbmRLZXkgPSBmdW5jdGlvbihl
LCBoYXNoSWQsIGtleUNvZGUpIHsKLSAgICAgICAgdmFyIGtleVN0cmluZyA9IGtleVV0aWwua2V5
Q29kZVRvU3RyaW5nKGtleUNvZGUpOwotICAgICAgICB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVy
cyhoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSwgZSk7Ci0gICAgfTsKK30pOwogCi0gICAgdGhp
cy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQpIHsKLSAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0
aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycygtMSwgdGV4dCk7Ci0gICAgICAgIGlmICghc3VjY2Vz
cykKLSAgICAgICAgICAgIHRoaXMuJGVkaXRvci5jb21tYW5kcy5leGVjKCJpbnNlcnRzdHJpbmci
LCB0aGlzLiRlZGl0b3IsIHRleHQpOwotICAgIH07CithY2UuZGVmaW5lKCdhY2UvbGliL2V2ZW50
X2VtaXR0ZXInLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJl
cXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogCi19KS5jYWxsKEtleUJpbmRpbmcucHJvdG90eXBl
KTsKIAotZXhwb3J0cy5LZXlCaW5kaW5nID0gS2V5QmluZGluZzsKLX0pOwordmFyIEV2ZW50RW1p
dHRlciA9IHt9OwordmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3Bh
Z2F0aW9uU3RvcHBlZCA9IHRydWU7IH07Cit2YXIgcHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigp
IHsgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfTsKIAotYWNlLmRlZmluZSgnYWNlL2Vk
aXRfc2Vzc2lvbicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2NvbmZp
ZycsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2xhbmcnLCAnYWNlL2xpYi9uZXQnLCAnYWNlL2xp
Yi9ldmVudF9lbWl0dGVyJywgJ2FjZS9zZWxlY3Rpb24nLCAnYWNlL21vZGUvdGV4dCcsICdhY2Uv
cmFuZ2UnLCAnYWNlL2RvY3VtZW50JywgJ2FjZS9iYWNrZ3JvdW5kX3Rva2VuaXplcicsICdhY2Uv
c2VhcmNoX2hpZ2hsaWdodCcsICdhY2UvZWRpdF9zZXNzaW9uL2ZvbGRpbmcnLCAnYWNlL2VkaXRf
c2Vzc2lvbi9icmFja2V0X21hdGNoJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVs
ZSkgeworRXZlbnRFbWl0dGVyLl9lbWl0ID0KK0V2ZW50RW1pdHRlci5fZGlzcGF0Y2hFdmVudCA9
IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZSkgeworICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwgKHRo
aXMuX2V2ZW50UmVnaXN0cnkgPSB7fSk7CisgICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0
aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CiAKKyAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5f
ZXZlbnRSZWdpc3RyeVtldmVudE5hbWVdIHx8IFtdOworICAgIHZhciBkZWZhdWx0SGFuZGxlciA9
IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOworICAgIGlmICghbGlzdGVuZXJzLmxl
bmd0aCAmJiAhZGVmYXVsdEhhbmRsZXIpCisgICAgICAgIHJldHVybjsKIAotdmFyIGNvbmZpZyA9
IHJlcXVpcmUoIi4vY29uZmlnIik7Ci12YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7Ci12
YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKLXZhciBuZXQgPSByZXF1aXJlKCIuL2xp
Yi9uZXQiKTsKLXZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVy
IikuRXZlbnRFbWl0dGVyOwotdmFyIFNlbGVjdGlvbiA9IHJlcXVpcmUoIi4vc2VsZWN0aW9uIiku
U2VsZWN0aW9uOwotdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi9tb2RlL3RleHQiKS5Nb2RlOwot
dmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwotdmFyIERvY3VtZW50ID0gcmVx
dWlyZSgiLi9kb2N1bWVudCIpLkRvY3VtZW50OwotdmFyIEJhY2tncm91bmRUb2tlbml6ZXIgPSBy
ZXF1aXJlKCIuL2JhY2tncm91bmRfdG9rZW5pemVyIikuQmFja2dyb3VuZFRva2VuaXplcjsKLXZh
ciBTZWFyY2hIaWdobGlnaHQgPSByZXF1aXJlKCIuL3NlYXJjaF9oaWdobGlnaHQiKS5TZWFyY2hI
aWdobGlnaHQ7CisgICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQorICAgICAgICBl
ID0ge307CiAKLXZhciBFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHsKLSAgICB0
aGlzLiRicmVha3BvaW50cyA9IFtdOwotICAgIHRoaXMuJGRlY29yYXRpb25zID0gW107Ci0gICAg
dGhpcy4kZnJvbnRNYXJrZXJzID0ge307Ci0gICAgdGhpcy4kYmFja01hcmtlcnMgPSB7fTsKLSAg
ICB0aGlzLiRtYXJrZXJJZCA9IDE7Ci0gICAgdGhpcy4kdW5kb1NlbGVjdCA9IHRydWU7Ci0gICAg
Ci0gICAgdGhpcy4kZm9sZERhdGEgPSBbXTsKLSAgICB0aGlzLiRmb2xkRGF0YS50b1N0cmluZyA9
IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgc3RyID0gIiI7Ci0gICAgICAgIHRoaXMuZm9yRWFj
aChmdW5jdGlvbihmb2xkTGluZSkgewotICAgICAgICAgICAgc3RyICs9ICJcbiIgKyBmb2xkTGlu
ZS50b1N0cmluZygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHN0cjsKKyAgICBpZiAo
IWUudHlwZSkKKyAgICAgICAgZS50eXBlID0gZXZlbnROYW1lOworICAgIGlmICghZS5zdG9wUHJv
cGFnYXRpb24pCisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwor
ICAgIGlmICghZS5wcmV2ZW50RGVmYXVsdCkKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCA9IHBy
ZXZlbnREZWZhdWx0OworICAgIGlmICghZS50YXJnZXQpCisgICAgICAgIGUudGFyZ2V0ID0gdGhp
czsKKworICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgbGlzdGVuZXJzW2ldKGUpOworICAgICAgICBpZiAoZS5wcm9wYWdhdGlvblN0b3BwZWQpCisg
ICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgdGhpcy5vbigiY2hhbmdlRm9sZCIsIHRoaXMu
b25DaGFuZ2VGb2xkLmJpbmQodGhpcykpOwotICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNo
YW5nZS5iaW5kKHRoaXMpOwogICAgIAotICAgIGlmICh0eXBlb2YgdGV4dCAhPSAib2JqZWN0IiB8
fCAhdGV4dC5nZXRMaW5lKQotICAgICAgICB0ZXh0ID0gbmV3IERvY3VtZW50KHRleHQpOwotCi0g
ICAgdGhpcy5zZXREb2N1bWVudCh0ZXh0KTsKLQotICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNl
bGVjdGlvbih0aGlzKTsKLSAgICB0aGlzLnNldE1vZGUobW9kZSk7CisgICAgaWYgKGRlZmF1bHRI
YW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCisgICAgICAgIHJldHVybiBkZWZhdWx0SGFu
ZGxlcihlKTsKIH07CiAKIAotKGZ1bmN0aW9uKCkgeworRXZlbnRFbWl0dGVyLl9zaWduYWwgPSBm
dW5jdGlvbihldmVudE5hbWUsIGUpIHsKKyAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50
UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CisgICAgaWYgKCFsaXN0ZW5lcnMpCisgICAgICAg
IHJldHVybjsKIAotICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKLSAgICB0
aGlzLnNldERvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7Ci0gICAgICAgIGlmICh0aGlzLmRvYykK
LSAgICAgICAgICAgIHRoaXMuZG9jLnJlbW92ZUxpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNo
YW5nZSk7CisgICAgZm9yICh2YXIgaT0wOyBpPGxpc3RlbmVycy5sZW5ndGg7IGkrKykKKyAgICAg
ICAgbGlzdGVuZXJzW2ldKGUpOworfTsKIAotICAgICAgICB0aGlzLmRvYyA9IGRvYzsKLSAgICAg
ICAgZG9jLm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CitFdmVudEVtaXR0ZXIub25jZSA9
IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKKyAgICB2YXIgX3NlbGYgPSB0aGlzOwor
ICAgIHZhciBuZXdDYWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAgICAgICBmdW4gJiYgZnVuLmFw
cGx5KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAgIF9zZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIo
ZXZlbnQsIG5ld0NhbGxiYWNrKTsKKyAgICB9OworICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihl
dmVudCwgbmV3Q2FsbGJhY2spOworfTsKIAotICAgICAgICBpZiAodGhpcy5iZ1Rva2VuaXplcikK
LSAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVu
dCgpKTsKIAotICAgICAgICB0aGlzLnJlc2V0Q2FjaGVzKCk7Ci0gICAgfTsKLSAgICB0aGlzLmdl
dERvY3VtZW50ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmRvYzsKLSAgICB9
OwotICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUgPSBmdW5jdGlvbihkb2NSb3cpIHsKLSAgICAgICAg
aWYgKCFkb2NSb3cpIHsKLSAgICAgICAgICAgIHRoaXMuJGRvY1Jvd0NhY2hlID0gW107Ci0gICAg
ICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZSA9IFtdOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CitFdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVu
dE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVm
YXVsdEhhbmRsZXJzIHx8IHt9OworICAgIAorICAgIGlmICh0aGlzLl9kZWZhdWx0SGFuZGxlcnNb
ZXZlbnROYW1lXSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVmYXVsdCBoYW5kbGVy
IGZvciAnIiArIGV2ZW50TmFtZSArICInIGlzIGFscmVhZHkgc2V0Iik7CisgICAgICAgIAorICAg
IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdID0gY2FsbGJhY2s7Cit9OwogCi0gICAg
ICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCh0aGlzLiRkb2NSb3dDYWNoZSwgZG9j
Um93KSArIDE7Ci0gICAgICAgIHZhciBsID0gdGhpcy4kZG9jUm93Q2FjaGUubGVuZ3RoOwotICAg
ICAgICB0aGlzLiRkb2NSb3dDYWNoZS5zcGxpY2UoaSwgbCk7Ci0gICAgICAgIHRoaXMuJHNjcmVl
blJvd0NhY2hlLnNwbGljZShpLCBsKTsKK0V2ZW50RW1pdHRlci5vbiA9CitFdmVudEVtaXR0ZXIu
YWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2ssIGNhcHR1cmlu
ZykgeworICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9
OwogCi0gICAgfTsKKyAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVtldmVu
dE5hbWVdOworICAgIGlmICghbGlzdGVuZXJzKQorICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9l
dmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKIAotICAgIHRoaXMuJGdldFJvd0NhY2hlSW5k
ZXggPSBmdW5jdGlvbihjYWNoZUFycmF5LCB2YWwpIHsKLSAgICAgICAgdmFyIGxvdyA9IDA7Ci0g
ICAgICAgIHZhciBoaSA9IGNhY2hlQXJyYXkubGVuZ3RoIC0gMTsKKyAgICBpZiAobGlzdGVuZXJz
LmluZGV4T2YoY2FsbGJhY2spID09IC0xKQorICAgICAgICBsaXN0ZW5lcnNbY2FwdHVyaW5nID8g
InVuc2hpZnQiIDogInB1c2giXShjYWxsYmFjayk7CisgICAgcmV0dXJuIGNhbGxiYWNrOworfTsK
IAotICAgICAgICB3aGlsZSAobG93IDw9IGhpKSB7Ci0gICAgICAgICAgICB2YXIgbWlkID0gKGxv
dyArIGhpKSA+PiAxOwotICAgICAgICAgICAgdmFyIGMgPSBjYWNoZUFycmF5W21pZF07CitFdmVu
dEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQorRXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVu
ZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5fZXZlbnRSZWdp
c3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307CiAKLSAgICAgICAgICAgIGlmICh2YWwg
PiBjKQotICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7Ci0gICAgICAgICAgICBlbHNlIGlm
ICh2YWwgPCBjKQotICAgICAgICAgICAgICAgIGhpID0gbWlkIC0gMTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXR1cm4gbWlkOwotICAgICAgICB9CisgICAgdmFyIGxpc3Rl
bmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXTsKKyAgICBpZiAoIWxpc3RlbmVy
cykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHJldHVybiBsb3cgLTE7Ci0gICAgfTsKKyAg
ICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjayk7CisgICAgaWYgKGluZGV4
ICE9PSAtMSkKKyAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7Cit9OwogCi0gICAg
dGhpcy5yZXNldENhY2hlcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLiRtb2RpZmllZCA9
IHRydWU7Ci0gICAgICAgIHRoaXMuJHdyYXBEYXRhID0gW107Ci0gICAgICAgIHRoaXMuJHJvd0xl
bmd0aENhY2hlID0gW107Ci0gICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7Ci0gICAgICAg
IGlmICh0aGlzLmJnVG9rZW5pemVyKQotICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFy
dCgwKTsKLSAgICB9OworRXZlbnRFbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9u
KGV2ZW50TmFtZSkgeworICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJl
Z2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKK307CiAKLSAgICB0aGlzLm9uQ2hhbmdlRm9sZCA9IGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgdmFyIGZvbGQgPSBlLmRhdGE7Ci0gICAgICAgIHRoaXMuJHJl
c2V0Um93Q2FjaGUoZm9sZC5zdGFydC5yb3cpOwotICAgIH07CitleHBvcnRzLkV2ZW50RW1pdHRl
ciA9IEV2ZW50RW1pdHRlcjsKIAotICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7Ci0g
ICAgICAgIHZhciBkZWx0YSA9IGUuZGF0YTsKLSAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVl
OworfSk7CiAKLSAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZShkZWx0YS5yYW5nZS5zdGFydC5y
b3cpOworYWNlLmRlZmluZSgnYWNlL21vdXNlL2ZvbGRfaGFuZGxlcicsIFsncmVxdWlyZScsICdl
eHBvcnRzJywgJ21vZHVsZScgXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7
CiAKLSAgICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9IHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9u
Q2hhbmdlKGUpOwotICAgICAgICBpZiAoIXRoaXMuJGZyb21VbmRvICYmIHRoaXMuJHVuZG9NYW5h
Z2VyICYmICFkZWx0YS5pZ25vcmUpIHsKLSAgICAgICAgICAgIHRoaXMuJGRlbHRhc0RvYy5wdXNo
KGRlbHRhKTsKLSAgICAgICAgICAgIGlmIChyZW1vdmVkRm9sZHMgJiYgcmVtb3ZlZEZvbGRzLmxl
bmd0aCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy4kZGVsdGFzRm9sZC5wdXNoKHsKLSAg
ICAgICAgICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlRm9sZHMiLAotICAgICAgICAgICAgICAg
ICAgICBmb2xkczogIHJlbW92ZWRGb2xkcwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5zY2hlZHVsZSgpOwor
ZnVuY3Rpb24gRm9sZEhhbmRsZXIoZWRpdG9yKSB7CisKKyAgICBlZGl0b3Iub24oImNsaWNrIiwg
ZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgcG9zaXRpb24gPSBlLmdldERvY3VtZW50UG9zaXRp
b24oKTsKKyAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKKyAgICAgICAgdmFy
IGZvbGQgPSBzZXNzaW9uLmdldEZvbGRBdChwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiwg
MSk7CisgICAgICAgIGlmIChmb2xkKSB7CisgICAgICAgICAgICBpZiAoZS5nZXRBY2NlbEtleSgp
KQorICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlRm9sZChmb2xkKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmV4cGFuZEZvbGQoZm9sZCk7CisKKyAgICAg
ICAgICAgIGUuc3RvcCgpOwogICAgICAgICB9CisgICAgfSk7CiAKLSAgICAgICAgdGhpcy5iZ1Rv
a2VuaXplci4kdXBkYXRlT25DaGFuZ2UoZGVsdGEpOwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFu
Z2UiLCBlKTsKLSAgICB9OwotICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7Ci0g
ICAgICAgIHRoaXMuZG9jLnNldFZhbHVlKHRleHQpOwotICAgICAgICB0aGlzLnNlbGVjdGlvbi5t
b3ZlQ3Vyc29yVG8oMCwgMCk7Ci0gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9u
KCk7CisgICAgZWRpdG9yLm9uKCJndXR0ZXJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CisgICAg
ICAgIGlmICghZWRpdG9yLmlzRm9jdXNlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB2YXIgZ3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRSZWdp
b24oZSk7CiAKLSAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKLSAgICAgICAgdGhpcy4k
ZGVsdGFzID0gW107Ci0gICAgICAgIHRoaXMuJGRlbHRhc0RvYyA9IFtdOwotICAgICAgICB0aGlz
LiRkZWx0YXNGb2xkID0gW107Ci0gICAgICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIoKS5yZXNldCgp
OwotICAgIH07Ci0gICAgdGhpcy5nZXRWYWx1ZSA9Ci0gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0
aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0VmFsdWUoKTsKLSAgICB9OwotICAg
IHRoaXMuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnNl
bGVjdGlvbjsKLSAgICB9OwotICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbihyb3cpIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93KTsKLSAgICB9OwotICAg
IHRoaXMuZ2V0VG9rZW5zID0gZnVuY3Rpb24ocm93KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmJn
VG9rZW5pemVyLmdldFRva2Vucyhyb3cpOwotICAgIH07Ci0gICAgdGhpcy5nZXRUb2tlbkF0ID0g
ZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuYmdUb2tl
bml6ZXIuZ2V0VG9rZW5zKHJvdyk7Ci0gICAgICAgIHZhciB0b2tlbiwgYyA9IDA7Ci0gICAgICAg
IGlmIChjb2x1bW4gPT0gbnVsbCkgewotICAgICAgICAgICAgaSA9IHRva2Vucy5sZW5ndGggLSAx
OwotICAgICAgICAgICAgYyA9IHRoaXMuZ2V0TGluZShyb3cpLmxlbmd0aDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgYyArPSB0b2tlbnNbaV0udmFsdWUubGVuZ3RoOwotICAgICAg
ICAgICAgICAgIGlmIChjID49IGNvbHVtbikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CisgICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gImZvbGRXaWRnZXRzIikg
eworICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdzsKKyAg
ICAgICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247CisgICAgICAgICAgICBpZiAo
c2Vzc2lvbi5mb2xkV2lkZ2V0cyAmJiBzZXNzaW9uLmZvbGRXaWRnZXRzW3Jvd10pCisgICAgICAg
ICAgICAgICAgZWRpdG9yLnNlc3Npb24ub25Gb2xkV2lkZ2V0Q2xpY2socm93LCBlKTsKKyAgICAg
ICAgICAgIGUuc3RvcCgpOwogICAgICAgICB9Ci0gICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwot
ICAgICAgICBpZiAoIXRva2VuKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHRv
a2VuLmluZGV4ID0gaTsKLSAgICAgICAgdG9rZW4uc3RhcnQgPSBjIC0gdG9rZW4udmFsdWUubGVu
Z3RoOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfTsKLSAgICB0aGlzLnNldFVuZG9NYW5h
Z2VyID0gZnVuY3Rpb24odW5kb01hbmFnZXIpIHsKLSAgICAgICAgdGhpcy4kdW5kb01hbmFnZXIg
PSB1bmRvTWFuYWdlcjsKLSAgICAgICAgdGhpcy4kZGVsdGFzID0gW107Ci0gICAgICAgIHRoaXMu
JGRlbHRhc0RvYyA9IFtdOwotICAgICAgICB0aGlzLiRkZWx0YXNGb2xkID0gW107CisgICAgfSk7
CiAKLSAgICAgICAgaWYgKHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyKQotICAgICAgICAgICAgdGhp
cy4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7CisgICAgZWRpdG9yLm9uKCJndXR0ZXJkYmxj
bGljayIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9IGVkaXRvci5y
ZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKGUpOwogCi0gICAgICAgIGlmICh1bmRvTWFu
YWdlcikgewotICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBpZiAoZ3V0dGVy
UmVnaW9uID09ICJmb2xkV2lkZ2V0cyIpIHsKKyAgICAgICAgICAgIHZhciByb3cgPSBlLmdldERv
Y3VtZW50UG9zaXRpb24oKS5yb3c7CisgICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5z
ZXNzaW9uOworICAgICAgICAgICAgdmFyIGZ3ID0gc2Vzc2lvbi5mb2xkV2lkZ2V0czsKKyAgICAg
ICAgICAgIGlmICghZncgfHwgZndbcm93XSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgIHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlciA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHNlbGYuJGluZm9ybVVuZG9NYW5hZ2VyLmNhbmNlbCgpOworICAgICAgICAg
ICAgdmFyIGkgPSByb3cgLSAxLCBmaXJzdFJhbmdlOworICAgICAgICAgICAgd2hpbGUgKGkgPj0g
MCkgeworICAgICAgICAgICAgICAgIHZhciBjID0gZndbaV07CisgICAgICAgICAgICAgICAgaWYg
KGMgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgYyA9IGZ3W2ldID0gc2Vzc2lvbi5nZXRG
b2xkV2lkZ2V0KGkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhc0ZvbGQubGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhcy5wdXNoKHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdyb3VwOiAiZm9sZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWx0YXM6IHNlbGYuJGRlbHRhc0ZvbGQKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNlbGYuJGRlbHRhc0ZvbGQgPSBbXTsKKyAgICAgICAgICAgICAgICBpZiAo
YyA9PSAic3RhcnQiKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24u
Z2V0Rm9sZFdpZGdldFJhbmdlKGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmFu
Z2UpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJhbmdlID0gcmFuZ2U7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5lbmQucm93ID49IHJvdykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA9PSAtMSkKKyAgICAgICAg
ICAgICAgICByYW5nZSA9IGZpcnN0UmFuZ2U7CiAKLSAgICAgICAgICAgICAgICBpZiAoc2VsZi4k
ZGVsdGFzRG9jLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBzZWxmLiRkZWx0YXMucHVz
aCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncm91cDogImRvYyIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWx0YXM6IHNlbGYuJGRlbHRhc0RvYwotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzRG9jID0gW107Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHJhbmdlKSB7CisgICAgICAgICAgICAgICAgdmFyIHJv
dyA9IHJhbmdlLnN0YXJ0LnJvdzsKKyAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IHNlc3Npb24u
Z2V0Rm9sZEF0KHJvdywgc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoLCAxKTsKIAotICAgICAg
ICAgICAgICAgIGlmIChzZWxmLiRkZWx0YXMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAg
ICAgICB1bmRvTWFuYWdlci5leGVjdXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlv
bjogImFjZXVwZGF0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbc2VsZi4kZGVs
dGFzLCBzZWxmXQotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAo
Zm9sZCkgeworICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQoZm9sZCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5hZGRG
b2xkKCIuLi4iLCByYW5nZSk7CisgICAgICAgICAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5z
Y3JvbGxDdXJzb3JJbnRvVmlldyh7cm93OiByYW5nZS5zdGFydC5yb3csIGNvbHVtbjogMH0pOwog
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhcyA9IFtdOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy4kaW5mb3JtVW5kb01hbmFnZXIgPQotICAg
ICAgICAgICAgICAgIGxhbmcuZGVmZXJyZWRDYWxsKHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdl
cik7CisgICAgICAgICAgICBlLnN0b3AoKTsKICAgICAgICAgfQotICAgIH07CisgICAgfSk7Cit9
CiAKLSAgICB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXIgPSB7Ci0gICAgICAgIHVuZG86IGZ1bmN0
aW9uKCkge30sCi0gICAgICAgIHJlZG86IGZ1bmN0aW9uKCkge30sCi0gICAgICAgIHJlc2V0OiBm
dW5jdGlvbigpIHt9Ci0gICAgfTsKLSAgICB0aGlzLmdldFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR1bmRvTWFuYWdlciB8fCB0aGlzLiRkZWZhdWx0VW5k
b01hbmFnZXI7Ci0gICAgfTsKLSAgICB0aGlzLmdldFRhYlN0cmluZyA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICBpZiAodGhpcy5nZXRVc2VTb2Z0VGFicygpKSB7Ci0gICAgICAgICAgICByZXR1cm4g
bGFuZy5zdHJpbmdSZXBlYXQoIiAiLCB0aGlzLmdldFRhYlNpemUoKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICByZXR1cm4gIlx0IjsKLSAgICAgICAgfQotICAgIH07CitleHBvcnRz
LkZvbGRIYW5kbGVyID0gRm9sZEhhbmRsZXI7CiAKLSAgICB0aGlzLiR1c2VTb2Z0VGFicyA9IHRy
dWU7Ci0gICAgdGhpcy5zZXRVc2VTb2Z0VGFicyA9IGZ1bmN0aW9uKHVzZVNvZnRUYWJzKSB7Ci0g
ICAgICAgIGlmICh0aGlzLiR1c2VTb2Z0VGFicyA9PT0gdXNlU29mdFRhYnMpIHJldHVybjsKK30p
OwogCi0gICAgICAgIHRoaXMuJHVzZVNvZnRUYWJzID0gdXNlU29mdFRhYnM7Ci0gICAgfTsKLSAg
ICB0aGlzLmdldFVzZVNvZnRUYWJzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
LiR1c2VTb2Z0VGFiczsKLSAgICB9OworYWNlLmRlZmluZSgnYWNlL2tleWJvYXJkL2tleWJpbmRp
bmcnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIva2V5cycsICdh
Y2UvbGliL2V2ZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogCi0g
ICAgdGhpcy4kdGFiU2l6ZSA9IDQ7Ci0gICAgdGhpcy5zZXRUYWJTaXplID0gZnVuY3Rpb24odGFi
U2l6ZSkgewotICAgICAgICBpZiAoaXNOYU4odGFiU2l6ZSkgfHwgdGhpcy4kdGFiU2l6ZSA9PT0g
dGFiU2l6ZSkgcmV0dXJuOwogCi0gICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKLSAgICAg
ICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGUgPSBbXTsKLSAgICAgICAgdGhpcy4kdGFiU2l6ZSA9IHRh
YlNpemU7Ci0gICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZVRhYlNpemUiKTsKLSAgICB9OwotICAg
IHRoaXMuZ2V0VGFiU2l6ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kdGFi
U2l6ZTsKLSAgICB9OwotICAgIHRoaXMuaXNUYWJTdG9wID0gZnVuY3Rpb24ocG9zaXRpb24pIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuJHVzZVNvZnRUYWJzICYmIChwb3NpdGlvbi5jb2x1bW4gJSB0
aGlzLiR0YWJTaXplID09IDApOwordmFyIGtleVV0aWwgID0gcmVxdWlyZSgiLi4vbGliL2tleXMi
KTsKK3ZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOworCit2YXIgS2V5QmluZGlu
ZyA9IGZ1bmN0aW9uKGVkaXRvcikgeworICAgIHRoaXMuJGVkaXRvciA9IGVkaXRvcjsKKyAgICB0
aGlzLiRkYXRhID0geyB9OworICAgIHRoaXMuJGhhbmRsZXJzID0gW107CisgICAgdGhpcy5zZXRE
ZWZhdWx0SGFuZGxlcihlZGl0b3IuY29tbWFuZHMpOworfTsKKworKGZ1bmN0aW9uKCkgeworICAg
IHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihrYikgeworICAgICAgICB0aGlzLnJl
bW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxlcik7CisgICAgICAgIHRoaXMu
JGRlZmF1bHRIYW5kbGVyID0ga2I7CisgICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGti
LCAwKTsKKyAgICAgICAgdGhpcy4kZGF0YSA9IHtlZGl0b3I6IHRoaXMuJGVkaXRvcn07CiAgICAg
fTsKIAotICAgIHRoaXMuJG92ZXJ3cml0ZSA9IGZhbHNlOwotICAgIHRoaXMuc2V0T3ZlcndyaXRl
ID0gZnVuY3Rpb24ob3ZlcndyaXRlKSB7Ci0gICAgICAgIGlmICh0aGlzLiRvdmVyd3JpdGUgPT0g
b3ZlcndyaXRlKSByZXR1cm47CisgICAgdGhpcy5zZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlv
bihrYikgeworICAgICAgICBpZiAodGhpcy4kaGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3Ro
IC0gMV0gPT0ga2IpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhpcy4kb3Zlcndy
aXRlID0gb3ZlcndyaXRlOwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VPdmVyd3JpdGUiKTsK
KyAgICAgICAgd2hpbGUgKHRoaXMuJGhhbmRsZXJzWzFdKQorICAgICAgICAgICAgdGhpcy5yZW1v
dmVLZXlib2FyZEhhbmRsZXIodGhpcy4kaGFuZGxlcnNbMV0pOworCisgICAgICAgIHRoaXMuYWRk
S2V5Ym9hcmRIYW5kbGVyKGtiLCAxKTsKICAgICB9OwotICAgIHRoaXMuZ2V0T3ZlcndyaXRlID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRvdmVyd3JpdGU7CisKKyAgICB0aGlz
LmFkZEtleWJvYXJkSGFuZGxlciA9IGZ1bmN0aW9uKGtiLCBwb3MpIHsKKyAgICAgICAgaWYgKCFr
YikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVycy5p
bmRleE9mKGtiKTsKKyAgICAgICAgaWYgKGkgIT0gLTEpCisgICAgICAgICAgICB0aGlzLiRoYW5k
bGVycy5zcGxpY2UoaSwgMSk7CisKKyAgICAgICAgaWYgKHBvcyA9PSB1bmRlZmluZWQpCisgICAg
ICAgICAgICB0aGlzLiRoYW5kbGVycy5wdXNoKGtiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKHBvcywgMCwga2IpOworCisgICAgICAgIGlmIChpID09
IC0xICYmIGtiLmF0dGFjaCkKKyAgICAgICAgICAgIGtiLmF0dGFjaCh0aGlzLiRlZGl0b3IpOwog
ICAgIH07Ci0gICAgdGhpcy50b2dnbGVPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy5zZXRPdmVyd3JpdGUoIXRoaXMuJG92ZXJ3cml0ZSk7Ci0gICAgfTsKLSAgICB0aGlzLmFk
ZEd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgewotICAgICAgICBp
ZiAoIXRoaXMuJGRlY29yYXRpb25zW3Jvd10pCi0gICAgICAgICAgICB0aGlzLiRkZWNvcmF0aW9u
c1tyb3ddID0gIiI7Ci0gICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gKz0gIiAiICsgY2xh
c3NOYW1lOwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOwotICAg
IH07Ci0gICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFz
c05hbWUpIHsKLSAgICAgICAgdGhpcy4kZGVjb3JhdGlvbnNbcm93XSA9ICh0aGlzLiRkZWNvcmF0
aW9uc1tyb3ddIHx8ICIiKS5yZXBsYWNlKCIgIiArIGNsYXNzTmFtZSwgIiIpOwotICAgICAgICB0
aGlzLl9lbWl0KCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOworCisgICAgdGhpcy5yZW1vdmVLZXli
b2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYikgeworICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRs
ZXJzLmluZGV4T2Yoa2IpOworICAgICAgICBpZiAoaSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKGksIDEpOworICAgICAgICBr
Yi5kZXRhY2ggJiYga2IuZGV0YWNoKHRoaXMuJGVkaXRvcik7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH07Ci0gICAgdGhpcy5nZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICByZXR1cm4gdGhpcy4kYnJlYWtwb2ludHM7CisKKyAgICB0aGlzLmdldEtleWJvYXJkSGFuZGxl
ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcnNbdGhpcy4kaGFu
ZGxlcnMubGVuZ3RoIC0gMV07CiAgICAgfTsKLSAgICB0aGlzLnNldEJyZWFrcG9pbnRzID0gZnVu
Y3Rpb24ocm93cykgewotICAgICAgICB0aGlzLiRicmVha3BvaW50cyA9IFtdOwotICAgICAgICBm
b3IgKHZhciBpPTA7IGk8cm93cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdGhpcy4kYnJl
YWtwb2ludHNbcm93c1tpXV0gPSAiYWNlX2JyZWFrcG9pbnQiOworCisgICAgdGhpcy4kY2FsbEtl
eWJvYXJkSGFuZGxlcnMgPSBmdW5jdGlvbiAoaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUp
IHsKKyAgICAgICAgdmFyIHRvRXhlY3V0ZTsKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZTsK
KyAgICAgICAgdmFyIGNvbW1hbmRzID0gdGhpcy4kZWRpdG9yLmNvbW1hbmRzOworCisgICAgICAg
IGZvciAodmFyIGkgPSB0aGlzLiRoYW5kbGVycy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICAg
IHRvRXhlY3V0ZSA9IHRoaXMuJGhhbmRsZXJzW2ldLmhhbmRsZUtleWJvYXJkKAorICAgICAgICAg
ICAgICAgIHRoaXMuJGRhdGEsIGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlCisgICAgICAg
ICAgICApOworICAgICAgICAgICAgaWYgKCF0b0V4ZWN1dGUgfHwgIXRvRXhlY3V0ZS5jb21tYW5k
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHRvRXhlY3V0ZS5j
b21tYW5kID09ICJudWxsIikgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0b0V4ZWN1dGUu
cGFzc0V2ZW50ICE9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBjb21tYW5kcy5leGVjKHRvRXhlY3V0ZS5jb21tYW5kLCB0aGlzLiRlZGl0b3Is
IHRvRXhlY3V0ZS5hcmdzLCBlKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoc3VjY2VzcyAmJiBlICYmIGhhc2hJZCAhPSAtMSkKKyAgICAgICAgICAgICAg
ICBldmVudC5zdG9wRXZlbnQoZSk7CisgICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCcmVh
a3BvaW50Iiwge30pOwotICAgIH07Ci0gICAgdGhpcy5jbGVhckJyZWFrcG9pbnRzID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107Ci0gICAgICAgIHRoaXMuX2Vt
aXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7Ci0gICAgfTsKLSAgICB0aGlzLnNldEJyZWFrcG9p
bnQgPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgewotICAgICAgICBpZiAoY2xhc3NOYW1lID09
PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBjbGFzc05hbWUgPSAiYWNlX2JyZWFrcG9pbnQiOwot
ICAgICAgICBpZiAoY2xhc3NOYW1lKQotICAgICAgICAgICAgdGhpcy4kYnJlYWtwb2ludHNbcm93
XSA9IGNsYXNzTmFtZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJy
ZWFrcG9pbnRzW3Jvd107Ci0gICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7
fSk7CisgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgIH07Ci0gICAgdGhpcy5jbGVhckJyZWFr
cG9pbnQgPSBmdW5jdGlvbihyb3cpIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRz
W3Jvd107Ci0gICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisKKyAg
ICB0aGlzLm9uQ29tbWFuZEtleSA9IGZ1bmN0aW9uKGUsIGhhc2hJZCwga2V5Q29kZSkgeworICAg
ICAgICB2YXIga2V5U3RyaW5nID0ga2V5VXRpbC5rZXlDb2RlVG9TdHJpbmcoa2V5Q29kZSk7Cisg
ICAgICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKGhhc2hJZCwga2V5U3RyaW5nLCBrZXlD
b2RlLCBlKTsKICAgICB9OwotICAgIHRoaXMuYWRkTWFya2VyID0gZnVuY3Rpb24ocmFuZ2UsIGNs
YXp6LCB0eXBlLCBpbkZyb250KSB7Ci0gICAgICAgIHZhciBpZCA9IHRoaXMuJG1hcmtlcklkKys7
CiAKLSAgICAgICAgdmFyIG1hcmtlciA9IHsKLSAgICAgICAgICAgIHJhbmdlIDogcmFuZ2UsCi0g
ICAgICAgICAgICB0eXBlIDogdHlwZSB8fCAibGluZSIsCi0gICAgICAgICAgICByZW5kZXJlcjog
dHlwZW9mIHR5cGUgPT0gImZ1bmN0aW9uIiA/IHR5cGUgOiBudWxsLAotICAgICAgICAgICAgY2xh
enogOiBjbGF6eiwKLSAgICAgICAgICAgIGluRnJvbnQ6ICEhaW5Gcm9udCwKLSAgICAgICAgICAg
IGlkOiBpZAotICAgICAgICB9CisgICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQp
IHsKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0aGlzLiRjYWxsS2V5Ym9hcmRIYW5kbGVycygtMSwg
dGV4dCk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHRoaXMuJGVkaXRvci5j
b21tYW5kcy5leGVjKCJpbnNlcnRzdHJpbmciLCB0aGlzLiRlZGl0b3IsIHRleHQpOworICAgIH07
CiAKLSAgICAgICAgaWYgKGluRnJvbnQpIHsKLSAgICAgICAgICAgIHRoaXMuJGZyb250TWFya2Vy
c1tpZF0gPSBtYXJrZXI7Ci0gICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VGcm9udE1hcmtl
ciIpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0g
PSBtYXJrZXI7Ci0gICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIikKLSAg
ICAgICAgfQorfSkuY2FsbChLZXlCaW5kaW5nLnByb3RvdHlwZSk7CiAKLSAgICAgICAgcmV0dXJu
IGlkOwotICAgIH07Ci0gICAgdGhpcy5hZGREeW5hbWljTWFya2VyID0gZnVuY3Rpb24obWFya2Vy
LCBpbkZyb250KSB7Ci0gICAgICAgIGlmICghbWFya2VyLnVwZGF0ZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQrKzsKLSAgICAgICAgbWFya2Vy
LmlkID0gaWQ7Ci0gICAgICAgIG1hcmtlci5pbkZyb250ID0gISFpbkZyb250OworZXhwb3J0cy5L
ZXlCaW5kaW5nID0gS2V5QmluZGluZzsKK30pOwogCi0gICAgICAgIGlmIChpbkZyb250KSB7Ci0g
ICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNbaWRdID0gbWFya2VyOwotICAgICAgICAgICAg
dGhpcy5fZW1pdCgiY2hhbmdlRnJvbnRNYXJrZXIiKQotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgdGhpcy4kYmFja01hcmtlcnNbaWRdID0gbWFya2VyOwotICAgICAgICAgICAgdGhpcy5f
ZW1pdCgiY2hhbmdlQmFja01hcmtlciIpCi0gICAgICAgIH0KK2FjZS5kZWZpbmUoJ2FjZS9lZGl0
X3Nlc3Npb24nLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9jb25maWcn
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9sYW5nJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlcics
ICdhY2Uvc2VsZWN0aW9uJywgJ2FjZS9tb2RlL3RleHQnLCAnYWNlL3JhbmdlJywgJ2FjZS9kb2N1
bWVudCcsICdhY2UvYmFja2dyb3VuZF90b2tlbml6ZXInLCAnYWNlL3NlYXJjaF9oaWdobGlnaHQn
LCAnYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nJywgJ2FjZS9lZGl0X3Nlc3Npb24vYnJhY2tldF9t
YXRjaCddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKIAotICAgICAgICBy
ZXR1cm4gbWFya2VyOwotICAgIH07Ci0gICAgdGhpcy5yZW1vdmVNYXJrZXIgPSBmdW5jdGlvbiht
YXJrZXJJZCkgewotICAgICAgICB2YXIgbWFya2VyID0gdGhpcy4kZnJvbnRNYXJrZXJzW21hcmtl
cklkXSB8fCB0aGlzLiRiYWNrTWFya2Vyc1ttYXJrZXJJZF07Ci0gICAgICAgIGlmICghbWFya2Vy
KQotICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBtYXJrZXJzID0gbWFya2VyLmlu
RnJvbnQgPyB0aGlzLiRmcm9udE1hcmtlcnMgOiB0aGlzLiRiYWNrTWFya2VyczsKLSAgICAgICAg
aWYgKG1hcmtlcikgewotICAgICAgICAgICAgZGVsZXRlIChtYXJrZXJzW21hcmtlcklkXSk7Ci0g
ICAgICAgICAgICB0aGlzLl9lbWl0KG1hcmtlci5pbkZyb250ID8gImNoYW5nZUZyb250TWFya2Vy
IiA6ICJjaGFuZ2VCYWNrTWFya2VyIik7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHRoaXMuZ2V0
TWFya2VycyA9IGZ1bmN0aW9uKGluRnJvbnQpIHsKLSAgICAgICAgcmV0dXJuIGluRnJvbnQgPyB0
aGlzLiRmcm9udE1hcmtlcnMgOiB0aGlzLiRiYWNrTWFya2VyczsKLSAgICB9OwordmFyIGNvbmZp
ZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Cit2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7
Cit2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKK3ZhciBFdmVudEVtaXR0ZXIgPSBy
ZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwordmFyIFNlbGVjdGlv
biA9IHJlcXVpcmUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uOwordmFyIFRleHRNb2RlID0gcmVx
dWlyZSgiLi9tb2RlL3RleHQiKS5Nb2RlOwordmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIp
LlJhbmdlOwordmFyIERvY3VtZW50ID0gcmVxdWlyZSgiLi9kb2N1bWVudCIpLkRvY3VtZW50Owor
dmFyIEJhY2tncm91bmRUb2tlbml6ZXIgPSByZXF1aXJlKCIuL2JhY2tncm91bmRfdG9rZW5pemVy
IikuQmFja2dyb3VuZFRva2VuaXplcjsKK3ZhciBTZWFyY2hIaWdobGlnaHQgPSByZXF1aXJlKCIu
L3NlYXJjaF9oaWdobGlnaHQiKS5TZWFyY2hIaWdobGlnaHQ7Cit2YXIgY29uZmlnID0gcmVxdWly
ZSgiLi9jb25maWciKTsKIAotICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmUpIHsKLSAg
ICAgICAgaWYgKCF0aGlzLiRzZWFyY2hIaWdobGlnaHQpIHsKLSAgICAgICAgICAgIHZhciBoaWdo
bGlnaHQgPSBuZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsICJhY2Vfc2VsZWN0ZWQtd29yZCIsICJ0
ZXh0Iik7Ci0gICAgICAgICAgICB0aGlzLiRzZWFyY2hIaWdobGlnaHQgPSB0aGlzLmFkZER5bmFt
aWNNYXJrZXIoaGlnaGxpZ2h0KTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLiRzZWFyY2hIaWdo
bGlnaHQuc2V0UmVnZXhwKHJlKTsKK3ZhciBFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1v
ZGUpIHsKKyAgICB0aGlzLiRicmVha3BvaW50cyA9IFtdOworICAgIHRoaXMuJGRlY29yYXRpb25z
ID0gW107CisgICAgdGhpcy4kZnJvbnRNYXJrZXJzID0ge307CisgICAgdGhpcy4kYmFja01hcmtl
cnMgPSB7fTsKKyAgICB0aGlzLiRtYXJrZXJJZCA9IDE7CisgICAgdGhpcy4kdW5kb1NlbGVjdCA9
IHRydWU7CisgICAgCisgICAgdGhpcy4kZm9sZERhdGEgPSBbXTsKKyAgICB0aGlzLiRmb2xkRGF0
YS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RyID0gIiI7CisgICAgICAg
IHRoaXMuZm9yRWFjaChmdW5jdGlvbihmb2xkTGluZSkgeworICAgICAgICAgICAgc3RyICs9ICJc
biIgKyBmb2xkTGluZS50b1N0cmluZygpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHN0
cjsKICAgICB9Ci0gICAgdGhpcy5oaWdobGlnaHRMaW5lcyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBl
bmRSb3csIGNsYXp6LCBpbkZyb250KSB7Ci0gICAgICAgIGlmICh0eXBlb2YgZW5kUm93ICE9ICJu
dW1iZXIiKSB7Ci0gICAgICAgICAgICBjbGF6eiA9IGVuZFJvdzsKLSAgICAgICAgICAgIGVuZFJv
dyA9IHN0YXJ0Um93OwotICAgICAgICB9Ci0gICAgICAgIGlmICghY2xhenopCi0gICAgICAgICAg
ICBjbGF6eiA9ICJhY2Vfc3RlcCI7Ci0gICAgICAgIAotICAgICAgICB2YXIgcmFuZ2UgPSBuZXcg
UmFuZ2Uoc3RhcnRSb3csIDAsIGVuZFJvdywgSW5maW5pdHkpOwotICAgICAgICAKLSAgICAgICAg
dmFyIGlkID0gdGhpcy5hZGRNYXJrZXIocmFuZ2UsIGNsYXp6LCAiZnVsbExpbmUiLCBpbkZyb250
KTsKLSAgICAgICAgcmFuZ2UuaWQgPSBpZDsKLSAgICAgICAgcmV0dXJuIHJhbmdlOwotICAgIH07
Ci0gICAgdGhpcy5zZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGFubm90YXRpb25zKSB7Ci0gICAg
ICAgIHRoaXMuJGFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7Ci0gICAgICAgIHRoaXMuX2VtaXQo
ImNoYW5nZUFubm90YXRpb24iLCB7fSk7Ci0gICAgfTsKLSAgICB0aGlzLmdldEFubm90YXRpb25z
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiRhbm5vdGF0aW9ucyB8fCBbXTsK
LSAgICB9OwotICAgIHRoaXMuY2xlYXJBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB0aGlzLiRhbm5vdGF0aW9ucyA9IHt9OwotICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VBbm5v
dGF0aW9uIiwge30pOwotICAgIH07Ci0gICAgdGhpcy4kZGV0ZWN0TmV3TGluZSA9IGZ1bmN0aW9u
KHRleHQpIHsKLSAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhccj9cbikvbSk7
Ci0gICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSBt
YXRjaFsxXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5l
ID0gIlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdGhpcy5nZXRXb3JkUmFuZ2UgPSBmdW5j
dGlvbihyb3csIGNvbHVtbikgewotICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShyb3cp
OworICAgIHRoaXMub24oImNoYW5nZUZvbGQiLCB0aGlzLm9uQ2hhbmdlRm9sZC5iaW5kKHRoaXMp
KTsKKyAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAK
KyAgICBpZiAodHlwZW9mIHRleHQgIT0gIm9iamVjdCIgfHwgIXRleHQuZ2V0TGluZSkKKyAgICAg
ICAgdGV4dCA9IG5ldyBEb2N1bWVudCh0ZXh0KTsKIAotICAgICAgICB2YXIgaW5Ub2tlbiA9IGZh
bHNlOwotICAgICAgICBpZiAoY29sdW1uID4gMCkKLSAgICAgICAgICAgIGluVG9rZW4gPSAhIWxp
bmUuY2hhckF0KGNvbHVtbiAtIDEpLm1hdGNoKHRoaXMudG9rZW5SZSk7CisgICAgdGhpcy5zZXRE
b2N1bWVudCh0ZXh0KTsKIAotICAgICAgICBpZiAoIWluVG9rZW4pCi0gICAgICAgICAgICBpblRv
a2VuID0gISFsaW5lLmNoYXJBdChjb2x1bW4pLm1hdGNoKHRoaXMudG9rZW5SZSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoaW5Ub2tlbikKLSAgICAgICAgICAgIHZhciByZSA9IHRoaXMudG9rZW5S
ZTsKLSAgICAgICAgZWxzZSBpZiAoL15ccyskLy50ZXN0KGxpbmUuc2xpY2UoY29sdW1uLTEsIGNv
bHVtbisxKSkpCi0gICAgICAgICAgICB2YXIgcmUgPSAvXHMvOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB2YXIgcmUgPSB0aGlzLm5vblRva2VuUmU7CisgICAgdGhpcy5zZWxlY3Rpb24gPSBu
ZXcgU2VsZWN0aW9uKHRoaXMpOworICAgIHRoaXMuc2V0TW9kZShtb2RlKTsKIAotICAgICAgICB2
YXIgc3RhcnQgPSBjb2x1bW47Ci0gICAgICAgIGlmIChzdGFydCA+IDApIHsKLSAgICAgICAgICAg
IGRvIHsKLSAgICAgICAgICAgICAgICBzdGFydC0tOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgd2hpbGUgKHN0YXJ0ID49IDAgJiYgbGluZS5jaGFyQXQoc3RhcnQpLm1hdGNoKHJlKSk7Ci0g
ICAgICAgICAgICBzdGFydCsrOwotICAgICAgICB9CisgICAgY29uZmlnLnJlc2V0T3B0aW9ucyh0
aGlzKTsKKyAgICBjb25maWcuX2VtaXQoInNlc3Npb24iLCB0aGlzKTsKK307CiAKLSAgICAgICAg
dmFyIGVuZCA9IGNvbHVtbjsKLSAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxp
bmUuY2hhckF0KGVuZCkubWF0Y2gocmUpKSB7Ci0gICAgICAgICAgICBlbmQrKzsKLSAgICAgICAg
fQogCi0gICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzdGFydCwgcm93LCBlbmQpOwotICAg
IH07Ci0gICAgdGhpcy5nZXRBV29yZFJhbmdlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKLSAg
ICAgICAgdmFyIHdvcmRSYW5nZSA9IHRoaXMuZ2V0V29yZFJhbmdlKHJvdywgY29sdW1uKTsKLSAg
ICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUod29yZFJhbmdlLmVuZC5yb3cpOworKGZ1bmN0
aW9uKCkgewogCi0gICAgICAgIHdoaWxlIChsaW5lLmNoYXJBdCh3b3JkUmFuZ2UuZW5kLmNvbHVt
bikubWF0Y2goL1sgXHRdLykpIHsKLSAgICAgICAgICAgIHdvcmRSYW5nZS5lbmQuY29sdW1uICs9
IDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHdvcmRSYW5nZTsKLSAgICB9OwotICAgIHRo
aXMuc2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbihuZXdMaW5lTW9kZSkgewotICAgICAgICB0aGlz
LmRvYy5zZXROZXdMaW5lTW9kZShuZXdMaW5lTW9kZSk7Ci0gICAgfTsKLSAgICB0aGlzLmdldE5l
d0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXROZXdM
aW5lTW9kZSgpOwotICAgIH07CisgICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIp
OworICAgIHRoaXMuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHsKKyAgICAgICAgaWYgKHRo
aXMuZG9jKQorICAgICAgICAgICAgdGhpcy5kb2MucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIsIHRo
aXMuJG9uQ2hhbmdlKTsKIAotICAgIHRoaXMuJHVzZVdvcmtlciA9IHRydWU7Ci0gICAgdGhpcy5z
ZXRVc2VXb3JrZXIgPSBmdW5jdGlvbih1c2VXb3JrZXIpIHsKLSAgICAgICAgaWYgKHRoaXMuJHVz
ZVdvcmtlciA9PSB1c2VXb3JrZXIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMu
ZG9jID0gZG9jOworICAgICAgICBkb2Mub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKIAot
ICAgICAgICB0aGlzLiR1c2VXb3JrZXIgPSB1c2VXb3JrZXI7CisgICAgICAgIGlmICh0aGlzLmJn
VG9rZW5pemVyKQorICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlz
LmdldERvY3VtZW50KCkpOwogCi0gICAgICAgIHRoaXMuJHN0b3BXb3JrZXIoKTsKLSAgICAgICAg
aWYgKHVzZVdvcmtlcikKLSAgICAgICAgICAgIHRoaXMuJHN0YXJ0V29ya2VyKCk7CisgICAgICAg
IHRoaXMucmVzZXRDYWNoZXMoKTsKICAgICB9OwotICAgIHRoaXMuZ2V0VXNlV29ya2VyID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR1c2VXb3JrZXI7CisgICAgdGhpcy5nZXRE
b2N1bWVudCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5kb2M7CiAgICAgfTsK
LSAgICB0aGlzLm9uUmVsb2FkVG9rZW5pemVyID0gZnVuY3Rpb24oZSkgewotICAgICAgICB2YXIg
cm93cyA9IGUuZGF0YTsKLSAgICAgICAgdGhpcy5iZ1Rva2VuaXplci5zdGFydChyb3dzLmZpcnN0
KTsKLSAgICAgICAgdGhpcy5fZW1pdCgidG9rZW5pemVyVXBkYXRlIiwgZSk7Ci0gICAgfTsKLQot
ICAgIHRoaXMuJG1vZGVzID0ge307Ci0gICAgdGhpcy4kbW9kZSA9IG51bGw7Ci0gICAgdGhpcy4k
bW9kZUlkID0gbnVsbDsKLSAgICB0aGlzLnNldE1vZGUgPSBmdW5jdGlvbihtb2RlKSB7Ci0gICAg
ICAgIGlmIChtb2RlICYmIHR5cGVvZiBtb2RlID09PSAib2JqZWN0IikgewotICAgICAgICAgICAg
aWYgKG1vZGUuZ2V0VG9rZW5pemVyKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRvbkNo
YW5nZU1vZGUobW9kZSk7Ci0gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IG1vZGU7Ci0gICAgICAg
ICAgICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHBhdGggPSBtb2RlIHx8ICJhY2UvbW9kZS90ZXh0IjsKKyAgICB0aGlzLiRyZXNldFJvd0Nh
Y2hlID0gZnVuY3Rpb24oZG9jUm93KSB7CisgICAgICAgIGlmICghZG9jUm93KSB7CisgICAgICAg
ICAgICB0aGlzLiRkb2NSb3dDYWNoZSA9IFtdOworICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93
Q2FjaGUgPSBbXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIg
bCA9IHRoaXMuJGRvY1Jvd0NhY2hlLmxlbmd0aDsKKyAgICAgICAgdmFyIGkgPSB0aGlzLiRnZXRS
b3dDYWNoZUluZGV4KHRoaXMuJGRvY1Jvd0NhY2hlLCBkb2NSb3cpICsgMTsKKyAgICAgICAgaWYg
KGwgPiBpKSB7CisgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5zcGxpY2UoaSwgbCk7Cisg
ICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZS5zcGxpY2UoaSwgbCk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKCF0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdKQotICAgICAgICAgICAg
dGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSA9IG5ldyBUZXh0TW9kZSgpOwotCi0gICAgICAg
IGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbcGF0aF0pOwotICAgICAgICB0aGlzLiRtb2Rl
SWQgPSBwYXRoOwotICAgICAgICBjb25maWcubG9hZE1vZHVsZShbIm1vZGUiLCBwYXRoXSwgZnVu
Y3Rpb24obSkgewotICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGVJZCAhPT0gcGF0aCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAodGhpcy4kbW9kZXNbcGF0aF0gJiYg
IW9wdGlvbnMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ2hhbmdlTW9kZSh0aGlz
LiRtb2Rlc1twYXRoXSk7Ci0gICAgICAgICAgICBpZiAobSAmJiBtLk1vZGUpIHsKLSAgICAgICAg
ICAgICAgICBtID0gbmV3IG0uTW9kZShvcHRpb25zKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9w
dGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy4kbW9kZXNbcGF0aF0gPSBtOwotICAg
ICAgICAgICAgICAgICAgICBtLiRpZCA9IHBhdGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlTW9kZShtKQotICAgICAgICAgICAgfQotICAgICAgICB9
LmJpbmQodGhpcykpOwotICAgICAgICBpZiAoIXRoaXMuJG1vZGUpCi0gICAgICAgICAgICB0aGlz
LiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSwgdHJ1ZSk7CiAgICAg
fTsKIAotICAgIHRoaXMuJG9uQ2hhbmdlTW9kZSA9IGZ1bmN0aW9uKG1vZGUsICRpc1BsYWNlaG9s
ZGVyKSB7Ci0gICAgICAgIGlmICh0aGlzLiRtb2RlID09PSBtb2RlKSByZXR1cm47Ci0gICAgICAg
IHRoaXMuJG1vZGUgPSBtb2RlOwotCi0gICAgICAgIHRoaXMuJHN0b3BXb3JrZXIoKTsKLQotICAg
ICAgICBpZiAodGhpcy4kdXNlV29ya2VyKQotICAgICAgICAgICAgdGhpcy4kc3RhcnRXb3JrZXIo
KTsKLQotICAgICAgICB2YXIgdG9rZW5pemVyID0gbW9kZS5nZXRUb2tlbml6ZXIoKTsKKyAgICB0
aGlzLiRnZXRSb3dDYWNoZUluZGV4ID0gZnVuY3Rpb24oY2FjaGVBcnJheSwgdmFsKSB7CisgICAg
ICAgIHZhciBsb3cgPSAwOworICAgICAgICB2YXIgaGkgPSBjYWNoZUFycmF5Lmxlbmd0aCAtIDE7
CiAKLSAgICAgICAgaWYodG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkg
ewotICAgICAgICAgICAgdmFyIG9uUmVsb2FkVG9rZW5pemVyID0gdGhpcy5vblJlbG9hZFRva2Vu
aXplci5iaW5kKHRoaXMpOwotICAgICAgICAgICAgdG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIo
InVwZGF0ZSIsIG9uUmVsb2FkVG9rZW5pemVyKTsKLSAgICAgICAgfQorICAgICAgICB3aGlsZSAo
bG93IDw9IGhpKSB7CisgICAgICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpKSA+PiAxOworICAg
ICAgICAgICAgdmFyIGMgPSBjYWNoZUFycmF5W21pZF07CiAKLSAgICAgICAgaWYgKCF0aGlzLmJn
VG9rZW5pemVyKSB7Ci0gICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyID0gbmV3IEJhY2tncm91
bmRUb2tlbml6ZXIodG9rZW5pemVyKTsKLSAgICAgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7Ci0g
ICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZSIsIGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICBfc2VsZi5fZW1pdCgidG9rZW5pemVyVXBkYXRl
IiwgZSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRo
aXMuYmdUb2tlbml6ZXIuc2V0VG9rZW5pemVyKHRva2VuaXplcik7CisgICAgICAgICAgICBpZiAo
dmFsID4gYykKKyAgICAgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOworICAgICAgICAgICAgZWxz
ZSBpZiAodmFsIDwgYykKKyAgICAgICAgICAgICAgICBoaSA9IG1pZCAtIDE7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKICAgICAgICAgfQogCi0gICAgICAg
IHRoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgpKTsKLQotICAg
ICAgICB0aGlzLnRva2VuUmUgPSBtb2RlLnRva2VuUmU7Ci0gICAgICAgIHRoaXMubm9uVG9rZW5S
ZSA9IG1vZGUubm9uVG9rZW5SZTsKLQorICAgICAgICByZXR1cm4gbG93IC0xOworICAgIH07CiAK
LSAgICAgICAgaWYgKCEkaXNQbGFjZWhvbGRlcikgewotICAgICAgICAgICAgdGhpcy4kbW9kZUlk
ID0gbW9kZS4kaWQ7Ci0gICAgICAgICAgICB0aGlzLiRzZXRGb2xkaW5nKG1vZGUuZm9sZGluZ1J1
bGVzKTsKLSAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZU1vZGUiKTsKKyAgICB0aGlzLnJl
c2V0Q2FjaGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsK
KyAgICAgICAgdGhpcy4kd3JhcERhdGEgPSBbXTsKKyAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2Fj
aGUgPSBbXTsKKyAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKKyAgICAgICAgaWYgKHRo
aXMuYmdUb2tlbml6ZXIpCiAgICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApOwot
ICAgICAgICB9CiAgICAgfTsKIAotCi0gICAgdGhpcy4kc3RvcFdvcmtlciA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICBpZiAodGhpcy4kd29ya2VyKQotICAgICAgICAgICAgdGhpcy4kd29ya2VyLnRl
cm1pbmF0ZSgpOwotCi0gICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7CisgICAgdGhpcy5vbkNo
YW5nZUZvbGQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBmb2xkID0gZS5kYXRhOworICAg
ICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKGZvbGQuc3RhcnQucm93KTsKICAgICB9OwogCisgICAg
dGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGRlbHRhID0gZS5kYXRh
OworICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CiAKLSAgICB0aGlzLiRzdGFydFdvcmtl
ciA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gInVuZGVmaW5l
ZCIgJiYgIXJlcXVpcmUubm9Xb3JrZXIpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy4kd29ya2VyID0gdGhpcy4kbW9kZS5jcmVhdGVXb3JrZXIodGhpcyk7Ci0gICAg
ICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkNvdWxk
IG5vdCBsb2FkIHdvcmtlciIpOwotICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwotICAg
ICAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7CisgICAgICAgIHRoaXMuJHJlc2V0Um93
Q2FjaGUoZGVsdGEucmFuZ2Uuc3RhcnQucm93KTsKKworICAgICAgICB2YXIgcmVtb3ZlZEZvbGRz
ID0gdGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UoZSk7CisgICAgICAgIGlmICghdGhp
cy4kZnJvbVVuZG8gJiYgdGhpcy4kdW5kb01hbmFnZXIgJiYgIWRlbHRhLmlnbm9yZSkgeworICAg
ICAgICAgICAgdGhpcy4kZGVsdGFzRG9jLnB1c2goZGVsdGEpOworICAgICAgICAgICAgaWYgKHJl
bW92ZWRGb2xkcyAmJiByZW1vdmVkRm9sZHMubGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLiRkZWx0YXNGb2xkLnB1c2goeworICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICJy
ZW1vdmVGb2xkcyIsCisgICAgICAgICAgICAgICAgICAgIGZvbGRzOiAgcmVtb3ZlZEZvbGRzCisg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuJGlu
Zm9ybVVuZG9NYW5hZ2VyLnNjaGVkdWxlKCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdGhpcy4kd29ya2VyID0gbnVsbDsKLSAgICB9OwotICAgIHRoaXMuZ2V0TW9kZSA9
IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kbW9kZTsKLSAgICB9OwogCi0gICAg
dGhpcy4kc2Nyb2xsVG9wID0gMDsKLSAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKHNj
cm9sbFRvcCkgewotICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIHNj
cm9sbFRvcCkpOwotICAgICAgICBpZiAodGhpcy4kc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuJHVwZGF0ZU9uQ2hh
bmdlKGRlbHRhKTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlIiwgZSk7CisgICAgfTsKKyAg
ICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgeworICAgICAgICB0aGlzLmRvYy5zZXRW
YWx1ZSh0ZXh0KTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKDAsIDApOwor
ICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOwogCi0gICAgICAgIHRoaXMu
JHNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKLSAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2Nyb2xs
VG9wIiwgc2Nyb2xsVG9wKTsKKyAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKKyAgICAg
ICAgdGhpcy4kZGVsdGFzID0gW107CisgICAgICAgIHRoaXMuJGRlbHRhc0RvYyA9IFtdOworICAg
ICAgICB0aGlzLiRkZWx0YXNGb2xkID0gW107CisgICAgICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIo
KS5yZXNldCgpOwogICAgIH07Ci0gICAgdGhpcy5nZXRTY3JvbGxUb3AgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbFRvcDsKKyAgICB0aGlzLmdldFZhbHVlID0KKyAg
ICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5n
ZXRWYWx1ZSgpOwogICAgIH07Ci0KLSAgICB0aGlzLiRzY3JvbGxMZWZ0ID0gMDsKLSAgICB0aGlz
LnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7Ci0gICAgICAgIHNjcm9sbExl
ZnQgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIHNjcm9sbExlZnQpKTsKLSAgICAgICAgaWYgKHRo
aXMuJHNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgdGhpcy4kc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7Ci0gICAgICAgIHRoaXMuX2VtaXQo
ImNoYW5nZVNjcm9sbExlZnQiLCBzY3JvbGxMZWZ0KTsKKyAgICB0aGlzLmdldFNlbGVjdGlvbiA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb247CiAgICAgfTsKLSAg
ICB0aGlzLmdldFNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
JHNjcm9sbExlZnQ7CisgICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykgeworICAgICAg
ICByZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpOwogICAgIH07Ci0gICAgdGhp
cy5nZXRTY3JlZW5XaWR0aCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLiRjb21wdXRlV2lk
dGgoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg7CisgICAgdGhpcy5nZXRUb2tl
bnMgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0
VG9rZW5zKHJvdyk7CisgICAgfTsKKyAgICB0aGlzLmdldFRva2VuQXQgPSBmdW5jdGlvbihyb3cs
IGNvbHVtbikgeworICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5iZ1Rva2VuaXplci5nZXRUb2tl
bnMocm93KTsKKyAgICAgICAgdmFyIHRva2VuLCBjID0gMDsKKyAgICAgICAgaWYgKGNvbHVtbiA9
PSBudWxsKSB7CisgICAgICAgICAgICBpID0gdG9rZW5zLmxlbmd0aCAtIDE7CisgICAgICAgICAg
ICBjID0gdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBjICs9IHRva2Vuc1tpXS52YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgaWYg
KGMgPj0gY29sdW1uKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKyAgICAgICAgaWYgKCF0b2tl
bikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB0b2tlbi5pbmRleCA9IGk7Cisg
ICAgICAgIHRva2VuLnN0YXJ0ID0gYyAtIHRva2VuLnZhbHVlLmxlbmd0aDsKKyAgICAgICAgcmV0
dXJuIHRva2VuOwogICAgIH07CisgICAgdGhpcy5zZXRVbmRvTWFuYWdlciA9IGZ1bmN0aW9uKHVu
ZG9NYW5hZ2VyKSB7CisgICAgICAgIHRoaXMuJHVuZG9NYW5hZ2VyID0gdW5kb01hbmFnZXI7Cisg
ICAgICAgIHRoaXMuJGRlbHRhcyA9IFtdOworICAgICAgICB0aGlzLiRkZWx0YXNEb2MgPSBbXTsK
KyAgICAgICAgdGhpcy4kZGVsdGFzRm9sZCA9IFtdOwogCi0gICAgdGhpcy4kY29tcHV0ZVdpZHRo
ID0gZnVuY3Rpb24oZm9yY2UpIHsKLSAgICAgICAgaWYgKHRoaXMuJG1vZGlmaWVkIHx8IGZvcmNl
KSB7Ci0gICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9IGZhbHNlOworICAgICAgICBpZiAodGhp
cy4kaW5mb3JtVW5kb01hbmFnZXIpCisgICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdl
ci5jYW5jZWwoKTsKIAotICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoID0gdGhpcy4kd3JhcExpbWl0OworICAg
ICAgICBpZiAodW5kb01hbmFnZXIpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKIAot
ICAgICAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5kb2MuZ2V0QWxsTGluZXMoKTsKLSAgICAgICAg
ICAgIHZhciBjYWNoZSA9IHRoaXMuJHJvd0xlbmd0aENhY2hlOwotICAgICAgICAgICAgdmFyIGxv
bmdlc3RTY3JlZW5MaW5lID0gMDsKLSAgICAgICAgICAgIHZhciBmb2xkSW5kZXggPSAwOwotICAg
ICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy4kZm9sZERhdGFbZm9sZEluZGV4XTsKLSAgICAg
ICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IElu
ZmluaXR5OwotICAgICAgICAgICAgdmFyIGxlbiA9IGxpbmVzLmxlbmd0aDsKKyAgICAgICAgICAg
IHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHNlbGYuJGluZm9ybVVuZG9NYW5hZ2VyLmNhbmNlbCgpOwogCi0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPiBmb2xk
U3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaSA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBsZW4pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtm
b2xkSW5kZXgrK107Ci0gICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8g
Zm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAgICAgICAgaWYgKHNlbGYu
JGRlbHRhc0ZvbGQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhcy5w
dXNoKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiAiZm9sZCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWx0YXM6IHNlbGYuJGRlbHRhc0ZvbGQKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuJGRlbHRhc0ZvbGQgPSBbXTsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoY2FjaGVbaV0gPT0gbnVsbCkKLSAg
ICAgICAgICAgICAgICAgICAgY2FjaGVbaV0gPSB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChs
aW5lc1tpXSlbMF07CisgICAgICAgICAgICAgICAgaWYgKHNlbGYuJGRlbHRhc0RvYy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi4kZGVsdGFzLnB1c2goeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ3JvdXA6ICJkb2MiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFz
OiBzZWxmLiRkZWx0YXNEb2MKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuJGRlbHRhc0RvYyA9IFtdOworICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGlmIChjYWNoZVtpXSA+IGxvbmdlc3RTY3JlZW5MaW5lKQotICAgICAgICAgICAg
ICAgICAgICBsb25nZXN0U2NyZWVuTGluZSA9IGNhY2hlW2ldOworICAgICAgICAgICAgICAgIGlm
IChzZWxmLiRkZWx0YXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICB1bmRvTWFu
YWdlci5leGVjdXRlKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogImFjZXVwZGF0
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbc2VsZi4kZGVsdGFzLCBzZWxmXQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBzZWxmLiRkZWx0YXMgPSBbXTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMu
c2NyZWVuV2lkdGggPSBsb25nZXN0U2NyZWVuTGluZTsKKyAgICAgICAgICAgIHRoaXMuJGluZm9y
bVVuZG9NYW5hZ2VyID0gbGFuZy5kZWxheWVkQ2FsbCh0aGlzLiRzeW5jSW5mb3JtVW5kb01hbmFn
ZXIpOwogICAgICAgICB9CiAgICAgfTsKLSAgICB0aGlzLmdldExpbmUgPSBmdW5jdGlvbihyb3cp
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldExpbmUocm93KTsKLSAgICB9OwotICAgIHRo
aXMuZ2V0TGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewotICAgICAgICByZXR1
cm4gdGhpcy5kb2MuZ2V0TGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworCisgICAgdGhpcy4kZGVm
YXVsdFVuZG9NYW5hZ2VyID0geworICAgICAgICB1bmRvOiBmdW5jdGlvbigpIHt9LAorICAgICAg
ICByZWRvOiBmdW5jdGlvbigpIHt9LAorICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7fQogICAg
IH07Ci0gICAgdGhpcy5nZXRMZW5ndGggPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuZG9jLmdldExlbmd0aCgpOworICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHVuZG9NYW5hZ2VyIHx8IHRoaXMuJGRlZmF1bHRVbmRv
TWFuYWdlcjsKICAgICB9OwotICAgIHRoaXMuZ2V0VGV4dFJhbmdlID0gZnVuY3Rpb24ocmFuZ2Up
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldFRleHRSYW5nZShyYW5nZSB8fCB0aGlzLnNl
bGVjdGlvbi5nZXRSYW5nZSgpKTsKKyAgICB0aGlzLmdldFRhYlN0cmluZyA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAodGhpcy5nZXRVc2VTb2Z0VGFicygpKSB7CisgICAgICAgICAgICByZXR1
cm4gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCB0aGlzLmdldFRhYlNpemUoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gIlx0IjsKKyAgICAgICAgfQogICAgIH07Ci0gICAg
dGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewotICAgICAgICByZXR1cm4g
dGhpcy5kb2MuaW5zZXJ0KHBvc2l0aW9uLCB0ZXh0KTsKKyAgICB0aGlzLnNldFVzZVNvZnRUYWJz
ID0gZnVuY3Rpb24odmFsKSB7CisgICAgICAgIHRoaXMuc2V0T3B0aW9uKCJ1c2VTb2Z0VGFicyIs
IHZhbCk7CiAgICAgfTsKLSAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLmRvYy5yZW1vdmUocmFuZ2UpOworICAgIHRoaXMuZ2V0VXNlU29mdFRh
YnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgIHJldHVybiB0aGlzLiR1c2VTb2Z0VGFiczsKICAg
ICB9OwotICAgIHRoaXMudW5kb0NoYW5nZXMgPSBmdW5jdGlvbihkZWx0YXMsIGRvbnRTZWxlY3Qp
IHsKLSAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTsKLSAgICAgICAgdmFyIGxhc3RVbmRvUmFuZ2Ug
PSBudWxsOwotICAgICAgICBmb3IgKHZhciBpID0gZGVsdGFzLmxlbmd0aCAtIDE7IGkgIT0gLTE7
IGktLSkgewotICAgICAgICAgICAgdmFyIGRlbHRhID0gZGVsdGFzW2ldOwotICAgICAgICAgICAg
aWYgKGRlbHRhLmdyb3VwID09ICJkb2MiKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5kb2MucmV2
ZXJ0RGVsdGFzKGRlbHRhLmRlbHRhcyk7Ci0gICAgICAgICAgICAgICAgbGFzdFVuZG9SYW5nZSA9
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rpb24oZGVsdGEuZGVsdGFz
LCB0cnVlLCBsYXN0VW5kb1JhbmdlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgZGVsdGEuZGVsdGFzLmZvckVhY2goZnVuY3Rpb24oZm9sZERlbHRhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuYWRkRm9sZHMoZm9sZERlbHRhLmZvbGRzKTsKLSAgICAgICAgICAg
ICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB0aGlzLiRm
cm9tVW5kbyA9IGZhbHNlOwotICAgICAgICBsYXN0VW5kb1JhbmdlICYmCi0gICAgICAgICAgICB0
aGlzLiR1bmRvU2VsZWN0ICYmCi0gICAgICAgICAgICAhZG9udFNlbGVjdCAmJgotICAgICAgICAg
ICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobGFzdFVuZG9SYW5nZSk7Ci0gICAg
ICAgIHJldHVybiBsYXN0VW5kb1JhbmdlOworICAgIHRoaXMuc2V0VGFiU2l6ZSA9IGZ1bmN0aW9u
KHRhYlNpemUpIHsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oInRhYlNpemUiLCB0YWJTaXplKQor
ICAgIH07CisgICAgdGhpcy5nZXRUYWJTaXplID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLiR0YWJTaXplOworICAgIH07CisgICAgdGhpcy5pc1RhYlN0b3AgPSBmdW5jdGlvbihw
b3NpdGlvbikgeworICAgICAgICByZXR1cm4gdGhpcy4kdXNlU29mdFRhYnMgJiYgKHBvc2l0aW9u
LmNvbHVtbiAlIHRoaXMuJHRhYlNpemUgPT0gMCk7CiAgICAgfTsKLSAgICB0aGlzLnJlZG9DaGFu
Z2VzID0gZnVuY3Rpb24oZGVsdGFzLCBkb250U2VsZWN0KSB7Ci0gICAgICAgIGlmICghZGVsdGFz
Lmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLiRmcm9tVW5kbyA9
IHRydWU7Ci0gICAgICAgIHZhciBsYXN0VW5kb1JhbmdlID0gbnVsbDsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBkZWx0YXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBkZWx0
YSA9IGRlbHRhc1tpXTsKLSAgICAgICAgICAgIGlmIChkZWx0YS5ncm91cCA9PSAiZG9jIikgewot
ICAgICAgICAgICAgICAgIHRoaXMuZG9jLmFwcGx5RGVsdGFzKGRlbHRhLmRlbHRhcyk7Ci0gICAg
ICAgICAgICAgICAgbGFzdFVuZG9SYW5nZSA9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuJGdl
dFVuZG9TZWxlY3Rpb24oZGVsdGEuZGVsdGFzLCBmYWxzZSwgbGFzdFVuZG9SYW5nZSk7Ci0gICAg
ICAgICAgICB9CisgICAgdGhpcy4kb3ZlcndyaXRlID0gZmFsc2U7CisgICAgdGhpcy5zZXRPdmVy
d3JpdGUgPSBmdW5jdGlvbihvdmVyd3JpdGUpIHsKKyAgICAgICAgaWYgKHRoaXMuJG92ZXJ3cml0
ZSA9PSBvdmVyd3JpdGUpIHJldHVybjsKKworICAgICAgICB0aGlzLiRvdmVyd3JpdGUgPSBvdmVy
d3JpdGU7CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZU92ZXJ3cml0ZSIpOworICAgIH07Cisg
ICAgdGhpcy5nZXRPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
JG92ZXJ3cml0ZTsKKyAgICB9OworICAgIHRoaXMudG9nZ2xlT3ZlcndyaXRlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuc2V0T3ZlcndyaXRlKCF0aGlzLiRvdmVyd3JpdGUpOworICAgIH07
CisgICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUp
IHsKKyAgICAgICAgaWYgKCF0aGlzLiRkZWNvcmF0aW9uc1tyb3ddKQorICAgICAgICAgICAgdGhp
cy4kZGVjb3JhdGlvbnNbcm93XSA9ICIiOworICAgICAgICB0aGlzLiRkZWNvcmF0aW9uc1tyb3dd
ICs9ICIgIiArIGNsYXNzTmFtZTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2lu
dCIsIHt9KTsKKyAgICB9OworICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0
aW9uKHJvdywgY2xhc3NOYW1lKSB7CisgICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gPSAo
dGhpcy4kZGVjb3JhdGlvbnNbcm93XSB8fCAiIikucmVwbGFjZSgiICIgKyBjbGFzc05hbWUsICIi
KTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsKKyAgICB9Owor
ICAgIHRoaXMuZ2V0QnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJGJyZWFrcG9pbnRzOworICAgIH07CisgICAgdGhpcy5zZXRCcmVha3BvaW50cyA9IGZ1bmN0
aW9uKHJvd3MpIHsKKyAgICAgICAgdGhpcy4kYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9y
ICh2YXIgaT0wOyBpPHJvd3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMuJGJyZWFr
cG9pbnRzW3Jvd3NbaV1dID0gImFjZV9icmVha3BvaW50IjsKICAgICAgICAgfQotICAgICAgICB0
aGlzLiRmcm9tVW5kbyA9IGZhbHNlOwotICAgICAgICBsYXN0VW5kb1JhbmdlICYmCi0gICAgICAg
ICAgICB0aGlzLiR1bmRvU2VsZWN0ICYmCi0gICAgICAgICAgICAhZG9udFNlbGVjdCAmJgotICAg
ICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobGFzdFVuZG9SYW5nZSk7
Ci0gICAgICAgIHJldHVybiBsYXN0VW5kb1JhbmdlOworICAgICAgICB0aGlzLl9lbWl0KCJjaGFu
Z2VCcmVha3BvaW50Iiwge30pOwogICAgIH07Ci0gICAgdGhpcy5zZXRVbmRvU2VsZWN0ID0gZnVu
Y3Rpb24oZW5hYmxlKSB7Ci0gICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgPSBlbmFibGU7CisgICAg
dGhpcy5jbGVhckJyZWFrcG9pbnRzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuJGJyZWFr
cG9pbnRzID0gW107CisgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7
CisgICAgfTsKKyAgICB0aGlzLnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihyb3csIGNsYXNzTmFt
ZSkgeworICAgICAgICBpZiAoY2xhc3NOYW1lID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICBj
bGFzc05hbWUgPSAiYWNlX2JyZWFrcG9pbnQiOworICAgICAgICBpZiAoY2xhc3NOYW1lKQorICAg
ICAgICAgICAgdGhpcy4kYnJlYWtwb2ludHNbcm93XSA9IGNsYXNzTmFtZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd107CisgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CisgICAgfTsKKyAgICB0aGlzLmNsZWFy
QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHJvdykgeworICAgICAgICBkZWxldGUgdGhpcy4kYnJlYWtw
b2ludHNbcm93XTsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQnJlYWtwb2ludCIsIHt9KTsK
ICAgICB9OworICAgIHRoaXMuYWRkTWFya2VyID0gZnVuY3Rpb24ocmFuZ2UsIGNsYXp6LCB0eXBl
LCBpbkZyb250KSB7CisgICAgICAgIHZhciBpZCA9IHRoaXMuJG1hcmtlcklkKys7CiAKLSAgICB0
aGlzLiRnZXRVbmRvU2VsZWN0aW9uID0gZnVuY3Rpb24oZGVsdGFzLCBpc1VuZG8sIGxhc3RVbmRv
UmFuZ2UpIHsKLSAgICAgICAgZnVuY3Rpb24gaXNJbnNlcnQoZGVsdGEpIHsKLSAgICAgICAgICAg
IHZhciBpbnNlcnQgPQotICAgICAgICAgICAgICAgIGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0VGV4
dCIgfHwgZGVsdGEuYWN0aW9uID09ICJpbnNlcnRMaW5lcyI7Ci0gICAgICAgICAgICByZXR1cm4g
aXNVbmRvID8gIWluc2VydCA6IGluc2VydDsKKyAgICAgICAgdmFyIG1hcmtlciA9IHsKKyAgICAg
ICAgICAgIHJhbmdlIDogcmFuZ2UsCisgICAgICAgICAgICB0eXBlIDogdHlwZSB8fCAibGluZSIs
CisgICAgICAgICAgICByZW5kZXJlcjogdHlwZW9mIHR5cGUgPT0gImZ1bmN0aW9uIiA/IHR5cGUg
OiBudWxsLAorICAgICAgICAgICAgY2xhenogOiBjbGF6eiwKKyAgICAgICAgICAgIGluRnJvbnQ6
ICEhaW5Gcm9udCwKKyAgICAgICAgICAgIGlkOiBpZAogICAgICAgICB9CiAKLSAgICAgICAgdmFy
IGRlbHRhID0gZGVsdGFzWzBdOwotICAgICAgICB2YXIgcmFuZ2UsIHBvaW50OwotICAgICAgICB2
YXIgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzSW5zZXJ0KGRlbHRh
KSkgewotICAgICAgICAgICAgcmFuZ2UgPSBkZWx0YS5yYW5nZS5jbG9uZSgpOwotICAgICAgICAg
ICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOworICAgICAgICBpZiAoaW5Gcm9udCkgeworICAg
ICAgICAgICAgdGhpcy4kZnJvbnRNYXJrZXJzW2lkXSA9IG1hcmtlcjsKKyAgICAgICAgICAgIHRo
aXMuX2VtaXQoImNoYW5nZUZyb250TWFya2VyIikKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkZWx0YS5yYW5nZS5zdGFydCwgZGVsdGEucmFu
Z2Uuc3RhcnQpOwotICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICBkZWx0YSA9IGRlbHRhc1tpXTsKLSAgICAgICAgICAgIGlmIChpc0luc2Vy
dChkZWx0YSkpIHsKLSAgICAgICAgICAgICAgICBwb2ludCA9IGRlbHRhLnJhbmdlLnN0YXJ0Owot
ICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1u
KSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChkZWx0YS5yYW5n
ZS5zdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBvaW50ID0gZGVs
dGEucmFuZ2UuZW5kOwotICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJv
dywgcG9pbnQuY29sdW1uKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldEVu
ZChkZWx0YS5yYW5nZS5lbmQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBs
YXN0RGVsdGFJc0luc2VydCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2Uuc3RhcnQ7Ci0gICAgICAgICAgICAgICAgaWYgKHJh
bmdlLmNvbXBhcmUocG9pbnQucm93LCBwb2ludC5jb2x1bW4pID09IC0xKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJhbmdlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlLmZyb21Qb2lu
dHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdlLnN0YXJ0KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGFzdFVuZG9SYW5nZSAhPSBudWxsKSB7Ci0g
ICAgICAgICAgICB2YXIgY21wID0gbGFzdFVuZG9SYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpOwot
ICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3Rh
cnQobGFzdFVuZG9SYW5nZS5zdGFydCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAt
MSkgewotICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChsYXN0VW5kb1JhbmdlLmVuZCk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLiRiYWNrTWFya2Vyc1tpZF0gPSBtYXJrZXI7
CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIikKICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiByYW5nZTsKLSAgICB9OwotICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0
aW9uKHJhbmdlLCB0ZXh0KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmRvYy5yZXBsYWNlKHJhbmdl
LCB0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGlkOwogICAgIH07Ci0gICAgdGhpcy5tb3ZlVGV4dCA9
IGZ1bmN0aW9uKGZyb21SYW5nZSwgdG9Qb3NpdGlvbikgewotICAgICAgICB2YXIgdGV4dCA9IHRo
aXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5nZSk7Ci0gICAgICAgIHRoaXMucmVtb3ZlKGZyb21SYW5n
ZSk7Ci0KLSAgICAgICAgdmFyIHRvUm93ID0gdG9Qb3NpdGlvbi5yb3c7Ci0gICAgICAgIHZhciB0
b0NvbHVtbiA9IHRvUG9zaXRpb24uY29sdW1uOwotICAgICAgICBpZiAoIWZyb21SYW5nZS5pc011
bHRpTGluZSgpICYmIGZyb21SYW5nZS5zdGFydC5yb3cgPT0gdG9Sb3cgJiYKLSAgICAgICAgICAg
IGZyb21SYW5nZS5lbmQuY29sdW1uIDwgdG9Db2x1bW4pCi0gICAgICAgICAgICB0b0NvbHVtbiAt
PSB0ZXh0Lmxlbmd0aDsKKyAgICB0aGlzLmFkZER5bmFtaWNNYXJrZXIgPSBmdW5jdGlvbihtYXJr
ZXIsIGluRnJvbnQpIHsKKyAgICAgICAgaWYgKCFtYXJrZXIudXBkYXRlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB2YXIgaWQgPSB0aGlzLiRtYXJrZXJJZCsrOworICAgICAgICBtYXJr
ZXIuaWQgPSBpZDsKKyAgICAgICAgbWFya2VyLmluRnJvbnQgPSAhIWluRnJvbnQ7CiAKLSAgICAg
ICAgaWYgKGZyb21SYW5nZS5pc011bHRpTGluZSgpICYmIGZyb21SYW5nZS5lbmQucm93IDwgdG9S
b3cpIHsKLSAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLiRzcGxpdCh0ZXh0KTsKLSAg
ICAgICAgICAgIHRvUm93IC09IGxpbmVzLmxlbmd0aCAtIDE7CisgICAgICAgIGlmIChpbkZyb250
KSB7CisgICAgICAgICAgICB0aGlzLiRmcm9udE1hcmtlcnNbaWRdID0gbWFya2VyOworICAgICAg
ICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlRnJvbnRNYXJrZXIiKQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdGhpcy4kYmFja01hcmtlcnNbaWRdID0gbWFya2VyOworICAgICAgICAgICAg
dGhpcy5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpCiAgICAgICAgIH0KIAotICAgICAgICB2YXIg
ZW5kUm93ID0gdG9Sb3cgKyBmcm9tUmFuZ2UuZW5kLnJvdyAtIGZyb21SYW5nZS5zdGFydC5yb3c7
Ci0gICAgICAgIHZhciBlbmRDb2x1bW4gPSBmcm9tUmFuZ2UuaXNNdWx0aUxpbmUoKSA/Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmcm9tUmFuZ2UuZW5kLmNvbHVtbiA6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0b0NvbHVtbiArIGZyb21SYW5nZS5lbmQuY29sdW1uIC0gZnJvbVJhbmdlLnN0
YXJ0LmNvbHVtbjsKLQotICAgICAgICB2YXIgdG9SYW5nZSA9IG5ldyBSYW5nZSh0b1JvdywgdG9D
b2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKLQotICAgICAgICB0aGlzLmluc2VydCh0b1Jhbmdl
LnN0YXJ0LCB0ZXh0KTsKLQotICAgICAgICByZXR1cm4gdG9SYW5nZTsKLSAgICB9OwotICAgIHRo
aXMuaW5kZW50Um93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3csIGluZGVudFN0cmluZykg
ewotICAgICAgICBpbmRlbnRTdHJpbmcgPSBpbmRlbnRTdHJpbmcucmVwbGFjZSgvXHQvZywgdGhp
cy5nZXRUYWJTdHJpbmcoKSk7Ci0gICAgICAgIGZvciAodmFyIHJvdz1zdGFydFJvdzsgcm93PD1l
bmRSb3c7IHJvdysrKQotICAgICAgICAgICAgdGhpcy5pbnNlcnQoe3Jvdzogcm93LCBjb2x1bW46
MH0sIGluZGVudFN0cmluZyk7CisgICAgICAgIHJldHVybiBtYXJrZXI7CiAgICAgfTsKLSAgICB0
aGlzLm91dGRlbnRSb3dzID0gZnVuY3Rpb24gKHJhbmdlKSB7Ci0gICAgICAgIHZhciByb3dSYW5n
ZSA9IHJhbmdlLmNvbGxhcHNlUm93cygpOwotICAgICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcg
UmFuZ2UoMCwgMCwgMCwgMCk7Ci0gICAgICAgIHZhciBzaXplID0gdGhpcy5nZXRUYWJTaXplKCk7
Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IHJvd1JhbmdlLnN0YXJ0LnJvdzsgaSA8PSByb3dSYW5n
ZS5lbmQucm93OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKGkp
OworICAgIHRoaXMucmVtb3ZlTWFya2VyID0gZnVuY3Rpb24obWFya2VySWQpIHsKKyAgICAgICAg
dmFyIG1hcmtlciA9IHRoaXMuJGZyb250TWFya2Vyc1ttYXJrZXJJZF0gfHwgdGhpcy4kYmFja01h
cmtlcnNbbWFya2VySWRdOworICAgICAgICBpZiAoIW1hcmtlcikKKyAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTsKLSAgICAgICAgICAg
IGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpOwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBzaXplOyArK2opCi0gICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KGopICE9ICcgJykK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoaiA8IHNpemUgJiYg
bGluZS5jaGFyQXQoaikgPT0gJ1x0JykgewotICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0
YXJ0LmNvbHVtbiA9IGo7Ci0gICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9
IGogKyAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWxldGVSYW5n
ZS5zdGFydC5jb2x1bW4gPSAwOwotICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5jb2x1
bW4gPSBqOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5yZW1vdmUoZGVsZXRlUmFu
Z2UpOworICAgICAgICB2YXIgbWFya2VycyA9IG1hcmtlci5pbkZyb250ID8gdGhpcy4kZnJvbnRN
YXJrZXJzIDogdGhpcy4kYmFja01hcmtlcnM7CisgICAgICAgIGlmIChtYXJrZXIpIHsKKyAgICAg
ICAgICAgIGRlbGV0ZSAobWFya2Vyc1ttYXJrZXJJZF0pOworICAgICAgICAgICAgdGhpcy5fZW1p
dChtYXJrZXIuaW5Gcm9udCA/ICJjaGFuZ2VGcm9udE1hcmtlciIgOiAiY2hhbmdlQmFja01hcmtl
ciIpOwogICAgICAgICB9CiAgICAgfTsKLSAgICB0aGlzLm1vdmVMaW5lc1VwID0gZnVuY3Rpb24o
Zmlyc3RSb3csIGxhc3RSb3cpIHsKLSAgICAgICAgaWYgKGZpcnN0Um93IDw9IDApIHJldHVybiAw
OworICAgIHRoaXMuZ2V0TWFya2VycyA9IGZ1bmN0aW9uKGluRnJvbnQpIHsKKyAgICAgICAgcmV0
dXJuIGluRnJvbnQgPyB0aGlzLiRmcm9udE1hcmtlcnMgOiB0aGlzLiRiYWNrTWFya2VyczsKKyAg
ICB9OwogCi0gICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5kb2MucmVtb3ZlTGluZXMoZmlyc3RS
b3csIGxhc3RSb3cpOwotICAgICAgICB0aGlzLmRvYy5pbnNlcnRMaW5lcyhmaXJzdFJvdyAtIDEs
IHJlbW92ZWQpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgdGhpcy5oaWdobGlnaHQgPSBmdW5j
dGlvbihyZSkgeworICAgICAgICBpZiAoIXRoaXMuJHNlYXJjaEhpZ2hsaWdodCkgeworICAgICAg
ICAgICAgdmFyIGhpZ2hsaWdodCA9IG5ldyBTZWFyY2hIaWdobGlnaHQobnVsbCwgImFjZV9zZWxl
Y3RlZC13b3JkIiwgInRleHQiKTsKKyAgICAgICAgICAgIHRoaXMuJHNlYXJjaEhpZ2hsaWdodCA9
IHRoaXMuYWRkRHluYW1pY01hcmtlcihoaWdobGlnaHQpOworICAgICAgICB9CisgICAgICAgIHRo
aXMuJHNlYXJjaEhpZ2hsaWdodC5zZXRSZWdleHAocmUpOworICAgIH0KKyAgICB0aGlzLmhpZ2hs
aWdodExpbmVzID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywgY2xhenosIGluRnJvbnQpIHsK
KyAgICAgICAgaWYgKHR5cGVvZiBlbmRSb3cgIT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIGNs
YXp6ID0gZW5kUm93OworICAgICAgICAgICAgZW5kUm93ID0gc3RhcnRSb3c7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFjbGF6eikKKyAgICAgICAgICAgIGNsYXp6ID0gImFjZV9zdGVwIjsKKyAg
ICAgICAgCisgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShzdGFydFJvdywgMCwgZW5kUm93
LCBJbmZpbml0eSk7CisgICAgICAgIHJhbmdlLmlkID0gdGhpcy5hZGRNYXJrZXIocmFuZ2UsIGNs
YXp6LCAiZnVsbExpbmUiLCBpbkZyb250KTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH07
Ci0gICAgdGhpcy5tb3ZlTGluZXNEb3duID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsK
LSAgICAgICAgaWYgKGxhc3RSb3cgPj0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkgcmV0dXJuIDA7
Ci0KLSAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLmRvYy5yZW1vdmVMaW5lcyhmaXJzdFJvdywg
bGFzdFJvdyk7Ci0gICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVzKGZpcnN0Um93KzEsIHJlbW92
ZWQpOwotICAgICAgICByZXR1cm4gMTsKKyAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rp
b24oYW5ub3RhdGlvbnMpIHsKKyAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9u
czsKKyAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlQW5ub3RhdGlvbiIsIHt9KTsKICAgICB9Owot
ICAgIHRoaXMuZHVwbGljYXRlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewot
ICAgICAgICB2YXIgZmlyc3RSb3cgPSB0aGlzLiRjbGlwUm93VG9Eb2N1bWVudChmaXJzdFJvdyk7
Ci0gICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQobGFzdFJvdyk7
Ci0KLSAgICAgICAgdmFyIGxpbmVzID0gdGhpcy5nZXRMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7
Ci0gICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVzKGZpcnN0Um93LCBsaW5lcyk7Ci0KLSAgICAg
ICAgdmFyIGFkZGVkUm93cyA9IGxhc3RSb3cgLSBmaXJzdFJvdyArIDE7Ci0gICAgICAgIHJldHVy
biBhZGRlZFJvd3M7CisgICAgdGhpcy5nZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy4kYW5ub3RhdGlvbnMgfHwgW107CiAgICAgfTsKLQotCi0gICAgdGhp
cy4kY2xpcFJvd1RvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3cpIHsKLSAgICAgICAgcmV0dXJuIE1h
dGgubWF4KDAsIE1hdGgubWluKHJvdywgdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkpOworICAgIHRo
aXMuY2xlYXJBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNldEFubm90
YXRpb25zKFtdKTsKICAgICB9OwotCi0gICAgdGhpcy4kY2xpcENvbHVtblRvUm93ID0gZnVuY3Rp
b24ocm93LCBjb2x1bW4pIHsKLSAgICAgICAgaWYgKGNvbHVtbiA8IDApCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZG9jLmdldExpbmUocm93KS5s
ZW5ndGgsIGNvbHVtbik7CisgICAgdGhpcy4kZGV0ZWN0TmV3TGluZSA9IGZ1bmN0aW9uKHRleHQp
IHsKKyAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhccj9cbikvbSk7CisgICAg
ICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgdGhpcy4kYXV0b05ld0xpbmUgPSBtYXRjaFsx
XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gIlxu
IjsKKyAgICAgICAgfQogICAgIH07CisgICAgdGhpcy5nZXRXb3JkUmFuZ2UgPSBmdW5jdGlvbihy
b3csIGNvbHVtbikgeworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShyb3cpOwogCisg
ICAgICAgIHZhciBpblRva2VuID0gZmFsc2U7CisgICAgICAgIGlmIChjb2x1bW4gPiAwKQorICAg
ICAgICAgICAgaW5Ub2tlbiA9ICEhbGluZS5jaGFyQXQoY29sdW1uIC0gMSkubWF0Y2godGhpcy50
b2tlblJlKTsKIAotICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihy
b3csIGNvbHVtbikgewotICAgICAgICBjb2x1bW4gPSBNYXRoLm1heCgwLCBjb2x1bW4pOworICAg
ICAgICBpZiAoIWluVG9rZW4pCisgICAgICAgICAgICBpblRva2VuID0gISFsaW5lLmNoYXJBdChj
b2x1bW4pLm1hdGNoKHRoaXMudG9rZW5SZSk7CisgICAgICAgIAorICAgICAgICBpZiAoaW5Ub2tl
bikKKyAgICAgICAgICAgIHZhciByZSA9IHRoaXMudG9rZW5SZTsKKyAgICAgICAgZWxzZSBpZiAo
L15ccyskLy50ZXN0KGxpbmUuc2xpY2UoY29sdW1uLTEsIGNvbHVtbisxKSkpCisgICAgICAgICAg
ICB2YXIgcmUgPSAvXHMvOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YXIgcmUgPSB0aGlz
Lm5vblRva2VuUmU7CiAKLSAgICAgICAgaWYgKHJvdyA8IDApIHsKLSAgICAgICAgICAgIHJvdyA9
IDA7Ci0gICAgICAgICAgICBjb2x1bW4gPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpOwotICAgICAgICAgICAgaWYgKHJvdyA+
PSBsZW4pIHsKLSAgICAgICAgICAgICAgICByb3cgPSBsZW4gLSAxOwotICAgICAgICAgICAgICAg
IGNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuLTEpLmxlbmd0aDsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGlu
ZShyb3cpLmxlbmd0aCwgY29sdW1uKTsKKyAgICAgICAgdmFyIHN0YXJ0ID0gY29sdW1uOworICAg
ICAgICBpZiAoc3RhcnQgPiAwKSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAg
c3RhcnQtLTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChzdGFydCA+PSAwICYm
IGxpbmUuY2hhckF0KHN0YXJ0KS5tYXRjaChyZSkpOworICAgICAgICAgICAgc3RhcnQrKzsKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICByb3c6IHJvdywKLSAgICAg
ICAgICAgIGNvbHVtbjogY29sdW1uCi0gICAgICAgIH07Ci0gICAgfTsKLQotICAgIHRoaXMuJGNs
aXBSYW5nZVRvRG9jdW1lbnQgPSBmdW5jdGlvbihyYW5nZSkgewotICAgICAgICBpZiAocmFuZ2Uu
c3RhcnQucm93IDwgMCkgewotICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gMDsKLSAgICAg
ICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0aGlzLiRjbGlwQ29sdW1uVG9Sb3coCi0gICAgICAg
ICAgICAgICAgcmFuZ2Uuc3RhcnQucm93LAotICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNv
bHVtbgotICAgICAgICAgICAgKTsKKyAgICAgICAgdmFyIGVuZCA9IGNvbHVtbjsKKyAgICAgICAg
d2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGVuZCkubWF0Y2gocmUpKSB7
CisgICAgICAgICAgICBlbmQrKzsKICAgICAgICAgfQogCi0gICAgICAgIHZhciBsZW4gPSB0aGlz
LmRvYy5nZXRMZW5ndGgoKSAtIDE7Ci0gICAgICAgIGlmIChyYW5nZS5lbmQucm93ID4gbGVuKSB7
Ci0gICAgICAgICAgICByYW5nZS5lbmQucm93ID0gbGVuOwotICAgICAgICAgICAgcmFuZ2UuZW5k
LmNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuKS5sZW5ndGg7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdGhpcy4kY2xpcENvbHVtblRvUm93KAot
ICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5yb3csCi0gICAgICAgICAgICAgICAgcmFuZ2UuZW5k
LmNvbHVtbgotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmFuZ2U7
Ci0gICAgfTsKLSAgICB0aGlzLiR3cmFwTGltaXQgPSA4MDsKLSAgICB0aGlzLiR1c2VXcmFwTW9k
ZSA9IGZhbHNlOwotICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlID0gewotICAgICAgICBtaW4gOiBu
dWxsLAotICAgICAgICBtYXggOiBudWxsCisgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBz
dGFydCwgcm93LCBlbmQpOwogICAgIH07Ci0gICAgdGhpcy5zZXRVc2VXcmFwTW9kZSA9IGZ1bmN0
aW9uKHVzZVdyYXBNb2RlKSB7Ci0gICAgICAgIGlmICh1c2VXcmFwTW9kZSAhPSB0aGlzLiR1c2VX
cmFwTW9kZSkgewotICAgICAgICAgICAgdGhpcy4kdXNlV3JhcE1vZGUgPSB1c2VXcmFwTW9kZTsK
LSAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuJHJl
c2V0Um93Q2FjaGUoMCk7Ci0gICAgICAgICAgICBpZiAodXNlV3JhcE1vZGUpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgbGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICB0aGlz
LiR3cmFwRGF0YSA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy4kd3JhcERhdGEucHVzaChbXSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKDAs
IGxlbiAtIDEpOwotICAgICAgICAgICAgfQorICAgIHRoaXMuZ2V0QVdvcmRSYW5nZSA9IGZ1bmN0
aW9uKHJvdywgY29sdW1uKSB7CisgICAgICAgIHZhciB3b3JkUmFuZ2UgPSB0aGlzLmdldFdvcmRS
YW5nZShyb3csIGNvbHVtbik7CisgICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHdvcmRS
YW5nZS5lbmQucm93KTsKIAotICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlV3JhcE1vZGUi
KTsKKyAgICAgICAgd2hpbGUgKGxpbmUuY2hhckF0KHdvcmRSYW5nZS5lbmQuY29sdW1uKS5tYXRj
aCgvWyBcdF0vKSkgeworICAgICAgICAgICAgd29yZFJhbmdlLmVuZC5jb2x1bW4gKz0gMTsKICAg
ICAgICAgfQorICAgICAgICByZXR1cm4gd29yZFJhbmdlOwogICAgIH07Ci0gICAgdGhpcy5nZXRV
c2VXcmFwTW9kZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kdXNlV3JhcE1v
ZGU7CisgICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7Cisg
ICAgICAgIHRoaXMuZG9jLnNldE5ld0xpbmVNb2RlKG5ld0xpbmVNb2RlKTsKICAgICB9OwotICAg
IHRoaXMuc2V0V3JhcExpbWl0UmFuZ2UgPSBmdW5jdGlvbihtaW4sIG1heCkgewotICAgICAgICBp
ZiAodGhpcy4kd3JhcExpbWl0UmFuZ2UubWluICE9PSBtaW4gfHwgdGhpcy4kd3JhcExpbWl0UmFu
Z2UubWF4ICE9PSBtYXgpIHsKLSAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbiA9
IG1pbjsKLSAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heCA9IG1heDsKLSAgICAg
ICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuX2VtaXQoImNo
YW5nZVdyYXBNb2RlIik7Ci0gICAgICAgIH0KKyAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXROZXdMaW5lTW9kZSgpOwogICAg
IH07Ci0gICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbihkZXNpcmVkTGltaXQpIHsK
LSAgICAgICAgdmFyIHdyYXBMaW1pdCA9IHRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdChkZXNpcmVk
TGltaXQpOwotICAgICAgICBpZiAod3JhcExpbWl0ICE9IHRoaXMuJHdyYXBMaW1pdCAmJiB3cmFw
TGltaXQgPiAwKSB7Ci0gICAgICAgICAgICB0aGlzLiR3cmFwTGltaXQgPSB3cmFwTGltaXQ7Ci0g
ICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodGhpcy4k
dXNlV3JhcE1vZGUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCB0
aGlzLmdldExlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNo
ZSgwKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTGltaXQiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB0aGlzLnNldFVzZVdvcmtlciA9IGZ1bmN0aW9uKHVzZVdvcmtl
cikgeyB0aGlzLnNldE9wdGlvbigidXNlV29ya2VyIiwgdXNlV29ya2VyKTsgfTsKKyAgICB0aGlz
LmdldFVzZVdvcmtlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy4kdXNlV29ya2VyOyB9Owor
ICAgIHRoaXMub25SZWxvYWRUb2tlbml6ZXIgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBy
b3dzID0gZS5kYXRhOworICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KHJvd3MuZmlyc3Qp
OworICAgICAgICB0aGlzLl9lbWl0KCJ0b2tlbml6ZXJVcGRhdGUiLCBlKTsKICAgICB9OwogCi0g
ICAgdGhpcy4kY29uc3RyYWluV3JhcExpbWl0ID0gZnVuY3Rpb24od3JhcExpbWl0KSB7Ci0gICAg
ICAgIHZhciBtaW4gPSB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW47Ci0gICAgICAgIGlmIChtaW4p
Ci0gICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1heChtaW4sIHdyYXBMaW1pdCk7CisgICAg
dGhpcy4kbW9kZXMgPSB7fTsKKyAgICB0aGlzLiRtb2RlID0gbnVsbDsKKyAgICB0aGlzLiRtb2Rl
SWQgPSBudWxsOworICAgIHRoaXMuc2V0TW9kZSA9IGZ1bmN0aW9uKG1vZGUpIHsKKyAgICAgICAg
aWYgKG1vZGUgJiYgdHlwZW9mIG1vZGUgPT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICBpZiAo
bW9kZS5nZXRUb2tlbml6ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ2hhbmdl
TW9kZShtb2RlKTsKKyAgICAgICAgICAgIHZhciBvcHRpb25zID0gbW9kZTsKKyAgICAgICAgICAg
IHZhciBwYXRoID0gb3B0aW9ucy5wYXRoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cGF0aCA9IG1vZGUgfHwgImFjZS9tb2RlL3RleHQiOworICAgICAgICB9CisgICAgICAgIGlmICgh
dGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSkKKyAgICAgICAgICAgIHRoaXMuJG1vZGVzWyJh
Y2UvbW9kZS90ZXh0Il0gPSBuZXcgVGV4dE1vZGUoKTsKIAotICAgICAgICB2YXIgbWF4ID0gdGhp
cy4kd3JhcExpbWl0UmFuZ2UubWF4OwotICAgICAgICBpZiAobWF4KQotICAgICAgICAgICAgd3Jh
cExpbWl0ID0gTWF0aC5taW4obWF4LCB3cmFwTGltaXQpOwotICAgICAgICByZXR1cm4gTWF0aC5t
YXgoMSwgd3JhcExpbWl0KTsKLSAgICB9OwotICAgIHRoaXMuZ2V0V3JhcExpbWl0ID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR3cmFwTGltaXQ7Ci0gICAgfTsKLSAgICB0aGlz
LmdldFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICBtaW4gOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4sCi0gICAgICAgICAgICBtYXgg
OiB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXgKLSAgICAgICAgfTsKKyAgICAgICAgaWYgKHRoaXMu
JG1vZGVzW3BhdGhdICYmICFvcHRpb25zKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ2hh
bmdlTW9kZSh0aGlzLiRtb2Rlc1twYXRoXSk7CisgICAgICAgIHRoaXMuJG1vZGVJZCA9IHBhdGg7
CisgICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsibW9kZSIsIHBhdGhdLCBmdW5jdGlvbihtKSB7
CisgICAgICAgICAgICBpZiAodGhpcy4kbW9kZUlkICE9PSBwYXRoKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmICh0aGlzLiRtb2Rlc1twYXRoXSAmJiAhb3B0aW9ucykK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzW3Bh
dGhdKTsKKyAgICAgICAgICAgIGlmIChtICYmIG0uTW9kZSkgeworICAgICAgICAgICAgICAgIG0g
PSBuZXcgbS5Nb2RlKG9wdGlvbnMpOworICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucykgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLiRtb2Rlc1twYXRoXSA9IG07CisgICAgICAgICAgICAg
ICAgICAgIG0uJGlkID0gcGF0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGhpcy4kb25DaGFuZ2VNb2RlKG0pCisgICAgICAgICAgICB9CisgICAgICAgIH0uYmluZCh0aGlz
KSk7CisgICAgICAgIGlmICghdGhpcy4kbW9kZSkKKyAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdl
TW9kZSh0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdLCB0cnVlKTsKICAgICB9OwogCi0gICAg
dGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAg
IHZhciB1c2VXcmFwTW9kZSA9IHRoaXMuJHVzZVdyYXBNb2RlOwotICAgICAgICB2YXIgbGVuOwot
ICAgICAgICB2YXIgYWN0aW9uID0gZS5kYXRhLmFjdGlvbjsKLSAgICAgICAgdmFyIGZpcnN0Um93
ID0gZS5kYXRhLnJhbmdlLnN0YXJ0LnJvdzsKLSAgICAgICAgdmFyIGxhc3RSb3cgPSBlLmRhdGEu
cmFuZ2UuZW5kLnJvdzsKLSAgICAgICAgdmFyIHN0YXJ0ID0gZS5kYXRhLnJhbmdlLnN0YXJ0Owot
ICAgICAgICB2YXIgZW5kID0gZS5kYXRhLnJhbmdlLmVuZDsKLSAgICAgICAgdmFyIHJlbW92ZWRG
b2xkcyA9IG51bGw7CisgICAgdGhpcy4kb25DaGFuZ2VNb2RlID0gZnVuY3Rpb24obW9kZSwgJGlz
UGxhY2Vob2xkZXIpIHsKKyAgICAgICAgaWYgKHRoaXMuJG1vZGUgPT09IG1vZGUpIHJldHVybjsK
KyAgICAgICAgdGhpcy4kbW9kZSA9IG1vZGU7CiAKLSAgICAgICAgaWYgKGFjdGlvbi5pbmRleE9m
KCJMaW5lcyIpICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoYWN0aW9uID09ICJpbnNlcnRMaW5l
cyIpIHsKLSAgICAgICAgICAgICAgICBsYXN0Um93ID0gZmlyc3RSb3cgKyAoZS5kYXRhLmxpbmVz
Lmxlbmd0aCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxhc3RSb3cg
PSBmaXJzdFJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbiA9IGUuZGF0YS5saW5l
cyA/IGUuZGF0YS5saW5lcy5sZW5ndGggOiBsYXN0Um93IC0gZmlyc3RSb3c7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBsZW4gPSBsYXN0Um93IC0gZmlyc3RSb3c7Ci0gICAgICAgIH0K
KyAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOwogCi0gICAgICAgIGlmIChsZW4gIT0gMCkgewot
ICAgICAgICAgICAgaWYgKGFjdGlvbi5pbmRleE9mKCJyZW1vdmUiKSAhPSAtMSkgewotICAgICAg
ICAgICAgICAgIHRoaXNbdXNlV3JhcE1vZGUgPyAiJHdyYXBEYXRhIiA6ICIkcm93TGVuZ3RoQ2Fj
aGUiXS5zcGxpY2UoZmlyc3RSb3csIGxlbik7CisgICAgICAgIGlmICh0aGlzLiR1c2VXb3JrZXIp
CisgICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOwogCi0gICAgICAgICAgICAgICAgdmFy
IGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOwotICAgICAgICAgICAgICAgIHJlbW92ZWRGb2xk
cyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUuZGF0YS5yYW5nZSk7Ci0gICAgICAgICAgICAgICAg
dGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOwotCi0gICAgICAgICAgICAgICAgdmFyIGZv
bGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShlbmQucm93KTsKLSAgICAgICAgICAgICAgICB2YXIg
aWR4ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZW5kLnJvdywgZW5kLmNvbHVtbiwgc3RhcnQu
Y29sdW1uIC0gZW5kLmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0
Um93KC1sZW4pOworICAgICAgICB2YXIgdG9rZW5pemVyID0gbW9kZS5nZXRUb2tlbml6ZXIoKTsK
IAotICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVCZWZvcmUgPSB0aGlzLmdldEZvbGRM
aW5lKGZpcnN0Um93KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lQmVmb3JlICYm
IGZvbGRMaW5lQmVmb3JlICE9PSBmb2xkTGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9sZExpbmVCZWZvcmUubWVyZ2UoZm9sZExpbmUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9sZExpbmUgPSBmb2xkTGluZUJlZm9yZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSkgKyAxOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgaWYodG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIgIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdmFyIG9uUmVsb2FkVG9rZW5pemVyID0gdGhpcy5v
blJlbG9hZFRva2VuaXplci5iaW5kKHRoaXMpOworICAgICAgICAgICAgdG9rZW5pemVyLmFkZEV2
ZW50TGlzdGVuZXIoInVwZGF0ZSIsIG9uUmVsb2FkVG9rZW5pemVyKTsKKyAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgZm9yIChpZHg7IGlkeCA8IGZvbGRMaW5lcy5sZW5ndGg7IGlkeCsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGRMaW5lc1tpZHhdOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93ID49IGVuZC5yb3cpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KC1sZW4pOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuYmdUb2tl
bml6ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIgPSBuZXcgQmFja2dyb3VuZFRv
a2VuaXplcih0b2tlbml6ZXIpOworICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKKyAgICAg
ICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlIiwgZnVuY3Rp
b24oZSkgeworICAgICAgICAgICAgICAgIF9zZWxmLl9lbWl0KCJ0b2tlbml6ZXJVcGRhdGUiLCBl
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5i
Z1Rva2VuaXplci5zZXRUb2tlbml6ZXIodG9rZW5pemVyKTsKKyAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgbGFzdFJvdyA9IGZpcnN0Um93OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB2YXIgYXJnczsKLSAgICAgICAgICAgICAgICBpZiAodXNlV3JhcE1vZGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtmaXJzdFJvdywgMF07Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3MucHVzaChbXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBEYXRhLnNwbGljZS5hcHBseSh0aGlzLiR3cmFwRGF0
YSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
YXJncyA9IEFycmF5KGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJz
dFJvdywgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlLnNwbGlj
ZS5hcHBseSh0aGlzLiRyb3dMZW5ndGhDYWNoZSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTsKLSAgICAgICAg
ICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsKLSAgICAg
ICAgICAgICAgICB2YXIgaWR4ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIGNtcCA9IGZvbGRMaW5lLnJhbmdlLmNvbXBhcmVJbnNp
ZGUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pCi0gICAgICAgICAgICAgICAgICAgIGlmIChjbXAg
PT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZS5zcGxp
dChzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb2xk
TGluZS5zaGlmdFJvdyhsZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRk
UmVtb3ZlQ2hhcnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJvdywgMCwgZW5k
LmNvbHVtbiAtIHN0YXJ0LmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhmaXJzdFJvdywgMCwgZW5kLmNvbHVtbiAtIHN0YXJ0
LmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhsZW4p
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlkeCA9IGZvbGRM
aW5lcy5pbmRleE9mKGZvbGRMaW5lKSArIDE7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICB0
aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0RG9jdW1lbnQoKSk7CiAKLSAgICAg
ICAgICAgICAgICBmb3IgKGlkeDsgaWR4IDwgZm9sZExpbmVzLmxlbmd0aDsgaWR4KyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZExpbmVzW2lkeF07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChmb2xkTGluZS5zdGFydC5yb3cgPj0gZmlyc3RSb3cpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KGxlbik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBsZW4gPSBNYXRoLmFicyhlLmRhdGEucmFuZ2Uuc3RhcnQuY29sdW1u
IC0gZS5kYXRhLnJhbmdlLmVuZC5jb2x1bW4pOwotICAgICAgICAgICAgaWYgKGFjdGlvbi5pbmRl
eE9mKCJyZW1vdmUiKSAhPSAtMSkgewotICAgICAgICAgICAgICAgIHJlbW92ZWRGb2xkcyA9IHRo
aXMuZ2V0Rm9sZHNJblJhbmdlKGUuZGF0YS5yYW5nZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5y
ZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOworICAgICAgICB0aGlzLnRva2VuUmUgPSBtb2RlLnRv
a2VuUmU7CisgICAgICAgIHRoaXMubm9uVG9rZW5SZSA9IG1vZGUubm9uVG9rZW5SZTsKIAotICAg
ICAgICAgICAgICAgIGxlbiA9IC1sZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIg
Zm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsKLSAgICAgICAgICAgIGlmIChm
b2xkTGluZSkgewotICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGZpcnN0
Um93LCBzdGFydC5jb2x1bW4sIGxlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAg
ICAgICBpZiAodXNlV3JhcE1vZGUgJiYgdGhpcy4kd3JhcERhdGEubGVuZ3RoICE9IHRoaXMuZG9j
LmdldExlbmd0aCgpKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJkb2MuZ2V0TGVuZ3Ro
KCkgYW5kICR3cmFwRGF0YS5sZW5ndGggaGF2ZSB0byBiZSB0aGUgc2FtZSEiKTsKKyAgICAgICAg
aWYgKCEkaXNQbGFjZWhvbGRlcikgeworICAgICAgICAgICAgdGhpcy4kbW9kZUlkID0gbW9kZS4k
aWQ7CisgICAgICAgICAgICB0aGlzLiRzZXRGb2xkaW5nKG1vZGUuZm9sZGluZ1J1bGVzKTsKKyAg
ICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZU1vZGUiKTsKKyAgICAgICAgICAgIHRoaXMuYmdU
b2tlbml6ZXIuc3RhcnQoMCk7CiAgICAgICAgIH0KKyAgICB9OwogCi0gICAgICAgIGlmICh1c2VX
cmFwTW9kZSkKLSAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKGZpcnN0Um93LCBsYXN0
Um93KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2Fj
aGUoZmlyc3RSb3csIGxhc3RSb3cpOwogCi0gICAgICAgIHJldHVybiByZW1vdmVkRm9sZHM7Ci0g
ICAgfTsKKyAgICB0aGlzLiRzdG9wV29ya2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0
aGlzLiR3b3JrZXIpCisgICAgICAgICAgICB0aGlzLiR3b3JrZXIudGVybWluYXRlKCk7CiAKLSAg
ICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZSA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93
LCBiKSB7Ci0gICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlW2ZpcnN0Um93XSA9IG51bGw7Ci0g
ICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlW2xhc3RSb3ddID0gbnVsbDsKKyAgICAgICAgdGhp
cy4kd29ya2VyID0gbnVsbDsKICAgICB9OwogCi0gICAgdGhpcy4kdXBkYXRlV3JhcERhdGEgPSBm
dW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewotICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRv
Yy5nZXRBbGxMaW5lcygpOwotICAgICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMuZ2V0VGFiU2l6ZSgp
OwotICAgICAgICB2YXIgd3JhcERhdGEgPSB0aGlzLiR3cmFwRGF0YTsKLSAgICAgICAgdmFyIHdy
YXBMaW1pdCA9IHRoaXMuJHdyYXBMaW1pdDsKLSAgICAgICAgdmFyIHRva2VuczsKLSAgICAgICAg
dmFyIGZvbGRMaW5lOwotCi0gICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsKLSAgICAgICAgbGFz
dFJvdyA9IE1hdGgubWluKGxhc3RSb3csIGxpbmVzLmxlbmd0aCAtIDEpOwotICAgICAgICB3aGls
ZSAocm93IDw9IGxhc3RSb3cpIHsKLSAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xk
TGluZShyb3csIGZvbGRMaW5lKTsKLSAgICAgICAgICAgIGlmICghZm9sZExpbmUpIHsKLSAgICAg
ICAgICAgICAgICB0b2tlbnMgPSB0aGlzLiRnZXREaXNwbGF5VG9rZW5zKGxhbmcuc3RyaW5nVHJp
bVJpZ2h0KGxpbmVzW3Jvd10pKTsKLSAgICAgICAgICAgICAgICB3cmFwRGF0YVtyb3ddID0gdGhp
cy4kY29tcHV0ZVdyYXBTcGxpdHModG9rZW5zLCB3cmFwTGltaXQsIHRhYlNpemUpOwotICAgICAg
ICAgICAgICAgIHJvdyArKzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
dG9rZW5zID0gW107Ci0gICAgICAgICAgICAgICAgZm9sZExpbmUud2FsayhmdW5jdGlvbihwbGFj
ZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB3YWxrVG9rZW5zOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlaG9s
ZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zID0g
dGhpcy4kZ2V0RGlzcGxheVRva2VucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGxhY2Vob2xkZXIsIHRva2Vucy5sZW5ndGgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdhbGtUb2tlbnNbMF0gPSBQTEFDRUhPTERFUl9TVEFSVDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHdhbGtUb2tlbnMubGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa1Rva2Vuc1tpXSA9
IFBMQUNFSE9MREVSX0JPRFk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZXNbcm93XS5zdWJzdHJpbmcobGFzdENvbHVtbiwgY29sdW1uKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLmxlbmd0aCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSB0b2tlbnMu
Y29uY2F0KHdhbGtUb2tlbnMpOwotICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksCi0g
ICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmVuZC5yb3csCi0gICAgICAgICAgICAgICAgICAg
IGxpbmVzW2ZvbGRMaW5lLmVuZC5yb3ddLmxlbmd0aCArIDEKLSAgICAgICAgICAgICAgICApOwot
ICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoICE9IDAgJiYgdG9rZW5zW3Rva2Vu
cy5sZW5ndGggLSAxXSA+PSBTUEFDRSkKLSAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgp
OwogCi0gICAgICAgICAgICAgICAgd3JhcERhdGFbZm9sZExpbmUuc3RhcnQucm93XQotICAgICAg
ICAgICAgICAgICAgICA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKHRva2Vucywgd3JhcExpbWl0
LCB0YWJTaXplKTsKLSAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93ICsgMTsK
KyAgICB0aGlzLiRzdGFydFdvcmtlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodHlwZW9m
IFdvcmtlciAhPT0gInVuZGVmaW5lZCIgJiYgIXJlcXVpcmUubm9Xb3JrZXIpIHsKKyAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdGhpcy4kd29ya2VyID0gdGhpcy4kbW9kZS5jcmVh
dGVXb3JrZXIodGhpcyk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAg
ICAgY29uc29sZS5sb2coIkNvdWxkIG5vdCBsb2FkIHdvcmtlciIpOworICAgICAgICAgICAgICAg
IGNvbnNvbGUubG9nKGUpOworICAgICAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy4k
d29ya2VyID0gbnVsbDsKKyAgICB9OworICAgIHRoaXMuZ2V0TW9kZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kbW9kZTsKICAgICB9OwotICAgIHZhciBDSEFSID0gMSwKLSAg
ICAgICAgQ0hBUl9FWFQgPSAyLAotICAgICAgICBQTEFDRUhPTERFUl9TVEFSVCA9IDMsCi0gICAg
ICAgIFBMQUNFSE9MREVSX0JPRFkgPSAgNCwKLSAgICAgICAgUFVOQ1RVQVRJT04gPSA5LAotICAg
ICAgICBTUEFDRSA9IDEwLAotICAgICAgICBUQUIgPSAxMSwKLSAgICAgICAgVEFCX1NQQUNFID0g
MTI7CiAKKyAgICB0aGlzLiRzY3JvbGxUb3AgPSAwOworICAgIHRoaXMuc2V0U2Nyb2xsVG9wID0g
ZnVuY3Rpb24oc2Nyb2xsVG9wKSB7CisgICAgICAgIHNjcm9sbFRvcCA9IE1hdGgucm91bmQoTWF0
aC5tYXgoMCwgc2Nyb2xsVG9wKSk7CisgICAgICAgIGlmICh0aGlzLiRzY3JvbGxUb3AgPT09IHNj
cm9sbFRvcCB8fCBpc05hTihzY3JvbGxUb3ApKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
dGhpcy4kY29tcHV0ZVdyYXBTcGxpdHMgPSBmdW5jdGlvbih0b2tlbnMsIHdyYXBMaW1pdCkgewot
ICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gW107
Ci0gICAgICAgIH0KKyAgICAgICAgdGhpcy4kc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOworICAgICAg
ICB0aGlzLl9zaWduYWwoImNoYW5nZVNjcm9sbFRvcCIsIHNjcm9sbFRvcCk7CisgICAgfTsKKyAg
ICB0aGlzLmdldFNjcm9sbFRvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy4k
c2Nyb2xsVG9wOworICAgIH07CiAKLSAgICAgICAgdmFyIHNwbGl0cyA9IFtdOwotICAgICAgICB2
YXIgZGlzcGxheUxlbmd0aCA9IHRva2Vucy5sZW5ndGg7Ci0gICAgICAgIHZhciBsYXN0U3BsaXQg
PSAwLCBsYXN0RG9jU3BsaXQgPSAwOworICAgIHRoaXMuJHNjcm9sbExlZnQgPSAwOworICAgIHRo
aXMuc2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uKHNjcm9sbExlZnQpIHsKKyAgICAgICAgc2Nyb2xs
TGVmdCA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCkpOworICAgICAgICBpZiAo
dGhpcy4kc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCB8fCBpc05hTihzY3JvbGxMZWZ0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBmdW5jdGlvbiBhZGRTcGxpdChzY3JlZW5Qb3Mp
IHsKLSAgICAgICAgICAgIHZhciBkaXNwbGF5ZWQgPSB0b2tlbnMuc2xpY2UobGFzdFNwbGl0LCBz
Y3JlZW5Qb3MpOwotICAgICAgICAgICAgdmFyIGxlbiA9IGRpc3BsYXllZC5sZW5ndGg7Ci0gICAg
ICAgICAgICBkaXNwbGF5ZWQuam9pbigiIikuCi0gICAgICAgICAgICAgICAgcmVwbGFjZSgvMTIv
ZywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiAtPSAxOwotICAgICAgICAg
ICAgICAgIH0pLgotICAgICAgICAgICAgICAgIHJlcGxhY2UoLzIvZywgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGxlbiAtPSAxOwotICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB0aGlzLiRzY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKKyAgICAgICAgdGhpcy5fc2lnbmFsKCJj
aGFuZ2VTY3JvbGxMZWZ0Iiwgc2Nyb2xsTGVmdCk7CisgICAgfTsKKyAgICB0aGlzLmdldFNjcm9s
bExlZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbExlZnQ7Cisg
ICAgfTsKKyAgICB0aGlzLmdldFNjcmVlbldpZHRoID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRo
aXMuJGNvbXB1dGVXaWR0aCgpOworICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5XaWR0aDsKKyAg
ICB9OwogCi0gICAgICAgICAgICBsYXN0RG9jU3BsaXQgKz0gbGVuOwotICAgICAgICAgICAgc3Bs
aXRzLnB1c2gobGFzdERvY1NwbGl0KTsKLSAgICAgICAgICAgIGxhc3RTcGxpdCA9IHNjcmVlblBv
czsKLSAgICAgICAgfQorICAgIHRoaXMuJGNvbXB1dGVXaWR0aCA9IGZ1bmN0aW9uKGZvcmNlKSB7
CisgICAgICAgIGlmICh0aGlzLiRtb2RpZmllZCB8fCBmb3JjZSkgeworICAgICAgICAgICAgdGhp
cy4kbW9kaWZpZWQgPSBmYWxzZTsKIAotICAgICAgICB3aGlsZSAoZGlzcGxheUxlbmd0aCAtIGxh
c3RTcGxpdCA+IHdyYXBMaW1pdCkgewotICAgICAgICAgICAgdmFyIHNwbGl0ID0gbGFzdFNwbGl0
ICsgd3JhcExpbWl0OwotICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPj0gU1BBQ0UpIHsK
LSAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW5zW3NwbGl0XSA+PSBTUEFDRSkgewotICAgICAg
ICAgICAgICAgICAgICBzcGxpdCArKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYWRkU3BsaXQoc3BsaXQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VIT0xERVJfU1RBUlQK
LSAgICAgICAgICAgICAgICB8fCB0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVSX0JPRFkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChzcGxpdDsgc3BsaXQgIT0gbGFzdFNw
bGl0IC0gMTsgc3BsaXQtLSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0
XSA9PSBQTEFDRUhPTERFUl9TVEFSVCkgeworICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBN
b2RlKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoID0gdGhpcy4kd3Jh
cExpbWl0OworCisgICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygp
OworICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy4kcm93TGVuZ3RoQ2FjaGU7CisgICAgICAg
ICAgICB2YXIgbG9uZ2VzdFNjcmVlbkxpbmUgPSAwOworICAgICAgICAgICAgdmFyIGZvbGRJbmRl
eCA9IDA7CisgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtmb2xkSW5k
ZXhdOworICAgICAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3Rh
cnQucm93IDogSW5maW5pdHk7CisgICAgICAgICAgICB2YXIgbGVuID0gbGluZXMubGVuZ3RoOwor
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGkgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGZvbGRM
aW5lLmVuZC5yb3cgKyAxOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBsZW4pCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3BsaXQgPiBsYXN0U3BsaXQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOwotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLiRmb2xkRGF0YVtm
b2xkSW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8g
Zm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0OwotICAgICAgICAgICAgICAg
IGZvciAoc3BsaXQ7IHNwbGl0IDwgdG9rZW5zLmxlbmd0aDsgc3BsaXQrKykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAodG9rZW5zW3NwbGl0XSAhPSBQTEFDRUhPTERFUl9CT0RZKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3Bs
aXQgPT0gdG9rZW5zLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIEJy
ZWFrcyB0aGUgd2hpbGUtbG9vcC4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YWRkU3BsaXQoc3BsaXQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIG1pblNwbGl0ID0gTWF0aC5tYXgoc3BsaXQgLSAxMCwgbGFzdFNw
bGl0IC0gMSk7Ci0gICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBtaW5TcGxpdCAmJiB0b2tlbnNb
c3BsaXRdIDwgUExBQ0VIT0xERVJfU1RBUlQpIHsKLSAgICAgICAgICAgICAgICBzcGxpdCAtLTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlIChzcGxpdCA+IG1pblNwbGl0ICYmIHRv
a2Vuc1tzcGxpdF0gPT0gUFVOQ1RVQVRJT04pIHsKLSAgICAgICAgICAgICAgICBzcGxpdCAtLTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcGxpdCA+IG1pblNwbGl0KSB7Ci0gICAg
ICAgICAgICAgICAgYWRkU3BsaXQoKytzcGxpdCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1p
dDsKLSAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gc3BsaXRzOwotICAgIH07Ci0gICAgdGhpcy4kZ2V0RGlzcGxheVRva2VucyA9IGZ1bmN0aW9u
KHN0ciwgb2Zmc2V0KSB7Ci0gICAgICAgIHZhciBhcnIgPSBbXTsKLSAgICAgICAgdmFyIHRhYlNp
emU7Ci0gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwOwogCi0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgYyA9IHN0ci5jaGFy
Q29kZUF0KGkpOwotICAgICAgICAgICAgaWYgKGMgPT0gOSkgewotICAgICAgICAgICAgICAgIHRh
YlNpemUgPSB0aGlzLmdldFNjcmVlblRhYlNpemUoYXJyLmxlbmd0aCArIG9mZnNldCk7Ci0gICAg
ICAgICAgICAgICAgYXJyLnB1c2goVEFCKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0g
MTsgbiA8IHRhYlNpemU7IG4rKykgewotICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChUQUJf
U1BBQ0UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKGMgPT0gMzIpIHsKLSAgICAgICAgICAgICAgICBhcnIucHVzaChTUEFDRSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYoKGMgPiAzOSAmJiBjIDwgNDgpIHx8IChjID4gNTcgJiYgYyA8IDY0
KSkgewotICAgICAgICAgICAgICAgIGFyci5wdXNoKFBVTkNUVUFUSU9OKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMTAwICYmIGlzRnVsbFdpZHRoKGMpKSB7
Ci0gICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUiwgQ0hBUl9FWFQpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhcnIucHVzaChDSEFSKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXJyOwotICAgIH07Ci0gICAgdGhpcy4kZ2V0U3Ry
aW5nU2NyZWVuV2lkdGggPSBmdW5jdGlvbihzdHIsIG1heFNjcmVlbkNvbHVtbiwgc2NyZWVuQ29s
dW1uKSB7Ci0gICAgICAgIGlmIChtYXhTY3JlZW5Db2x1bW4gPT0gMCkKLSAgICAgICAgICAgIHJl
dHVybiBbMCwgMF07Ci0gICAgICAgIGlmIChtYXhTY3JlZW5Db2x1bW4gPT0gbnVsbCkKLSAgICAg
ICAgICAgIG1heFNjcmVlbkNvbHVtbiA9IEluZmluaXR5OwotICAgICAgICBzY3JlZW5Db2x1bW4g
PSBzY3JlZW5Db2x1bW4gfHwgMDsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVbaV0gPT0gbnVs
bCkKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVbaV0gPSB0aGlzLiRnZXRTdHJpbmdTY3JlZW5X
aWR0aChsaW5lc1tpXSlbMF07CiAKLSAgICAgICAgdmFyIGMsIGNvbHVtbjsKLSAgICAgICAgZm9y
IChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykgewotICAgICAgICAg
ICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7Ci0gICAgICAgICAgICBpZiAoYyA9PSA5KSB7
Ci0gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShz
Y3JlZW5Db2x1bW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAw
eDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHsKLSAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4g
Kz0gMjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1u
ICs9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2NyZWVuQ29sdW1uID4gbWF4
U2NyZWVuQ29sdW1uKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
aWYgKGNhY2hlW2ldID4gbG9uZ2VzdFNjcmVlbkxpbmUpCisgICAgICAgICAgICAgICAgICAgIGxv
bmdlc3RTY3JlZW5MaW5lID0gY2FjaGVbaV07CiAgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aGlzLnNjcmVlbldpZHRoID0gbG9uZ2VzdFNjcmVlbkxpbmU7CiAgICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gW3NjcmVlbkNvbHVtbiwgY29sdW1uXTsKICAgICB9OwotICAgIHRoaXMuZ2V0Um93
TGVuZ3RoID0gZnVuY3Rpb24ocm93KSB7Ci0gICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUg
fHwgIXRoaXMuJHdyYXBEYXRhW3Jvd10pIHsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHdyYXBEYXRhW3Jvd10ubGVuZ3Ro
ICsgMTsKLSAgICAgICAgfQorICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykgeworICAg
ICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGluZShyb3cpOwogICAgIH07Ci0gICAgdGhpcy5nZXRT
Y3JlZW5MYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93KSB7Ci0gICAgICAgIHZhciBw
b3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIE51bWJlci5NQVhf
VkFMVUUpOwotICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuQ29sdW1uKHBvcy5y
b3csIHBvcy5jb2x1bW4pOworICAgIHRoaXMuZ2V0TGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywg
bGFzdFJvdykgeworICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TGluZXMoZmlyc3RSb3csIGxh
c3RSb3cpOwogICAgIH07Ci0gICAgdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1bW4gPSBmdW5j
dGlvbihkb2NSb3csIGRvY0NvbHVtbikgewotICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5k
b2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29sdW1uKTsKLSAgICAgICAgcmV0dXJuIHRo
aXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihzY3JlZW5Sb3cpOworICAgIHRoaXMuZ2V0TGVuZ3Ro
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMZW5ndGgoKTsKICAg
ICB9OwotICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb24gPSBmdW5jdGlv
bihkb2NSb3csIGRvY0NvbHVtbikgewotICAgICAgICB2YXIgc2NyZWVuUm93ID0gdGhpcy5kb2N1
bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29sdW1uKTsKLSAgICAgICAgcmV0dXJuIHRoaXMu
c2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgTnVtYmVyLk1BWF9WQUxVRSAvIDEw
KTsKKyAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UgfHwgdGhpcy5zZWxlY3Rpb24uZ2V0UmFu
Z2UoKSk7CiAgICAgfTsKLSAgICB0aGlzLmdldFJvd1NwbGl0RGF0YSA9IGZ1bmN0aW9uKHJvdykg
ewotICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7Ci0gICAgICAgICAgICByZXR1cm4g
dW5kZWZpbmVkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHdy
YXBEYXRhW3Jvd107Ci0gICAgICAgIH0KKyAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0
aW9uLCB0ZXh0KSB7CisgICAgICAgIHJldHVybiB0aGlzLmRvYy5pbnNlcnQocG9zaXRpb24sIHRl
eHQpOwogICAgIH07Ci0gICAgdGhpcy5nZXRTY3JlZW5UYWJTaXplID0gZnVuY3Rpb24oc2NyZWVu
Q29sdW1uKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplIC0gc2NyZWVuQ29sdW1uICUg
dGhpcy4kdGFiU2l6ZTsKKyAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmRvYy5yZW1vdmUocmFuZ2UpOwogICAgIH07CisgICAgdGhpcy51bmRv
Q2hhbmdlcyA9IGZ1bmN0aW9uKGRlbHRhcywgZG9udFNlbGVjdCkgeworICAgICAgICBpZiAoIWRl
bHRhcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CiAKLQotICAgIHRoaXMuc2NyZWVuVG9E
b2N1bWVudFJvdyA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKSB7Ci0gICAgICAg
IHJldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNv
bHVtbikucm93OworICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IHRydWU7CisgICAgICAgIHZhciBs
YXN0VW5kb1JhbmdlID0gbnVsbDsKKyAgICAgICAgZm9yICh2YXIgaSA9IGRlbHRhcy5sZW5ndGgg
LSAxOyBpICE9IC0xOyBpLS0pIHsKKyAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTsK
KyAgICAgICAgICAgIGlmIChkZWx0YS5ncm91cCA9PSAiZG9jIikgeworICAgICAgICAgICAgICAg
IHRoaXMuZG9jLnJldmVydERlbHRhcyhkZWx0YS5kZWx0YXMpOworICAgICAgICAgICAgICAgIGxh
c3RVbmRvUmFuZ2UgPQorICAgICAgICAgICAgICAgICAgICB0aGlzLiRnZXRVbmRvU2VsZWN0aW9u
KGRlbHRhLmRlbHRhcywgdHJ1ZSwgbGFzdFVuZG9SYW5nZSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGRlbHRhLmRlbHRhcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGREZWx0
YSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEZvbGRzKGZvbGREZWx0YS5mb2xkcyk7
CisgICAgICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy4kZnJvbVVuZG8gPSBmYWxzZTsKKyAgICAgICAgbGFzdFVuZG9SYW5nZSAmJgor
ICAgICAgICAgICAgdGhpcy4kdW5kb1NlbGVjdCAmJgorICAgICAgICAgICAgIWRvbnRTZWxlY3Qg
JiYKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGxhc3RVbmRv
UmFuZ2UpOworICAgICAgICByZXR1cm4gbGFzdFVuZG9SYW5nZTsKICAgICB9OworICAgIHRoaXMu
cmVkb0NoYW5nZXMgPSBmdW5jdGlvbihkZWx0YXMsIGRvbnRTZWxlY3QpIHsKKyAgICAgICAgaWYg
KCFkZWx0YXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwogCi0KLSAgICB0aGlzLnNjcmVl
blRvRG9jdW1lbnRDb2x1bW4gPSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgewot
ICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBz
Y3JlZW5Db2x1bW4pLmNvbHVtbjsKKyAgICAgICAgdGhpcy4kZnJvbVVuZG8gPSB0cnVlOworICAg
ICAgICB2YXIgbGFzdFVuZG9SYW5nZSA9IG51bGw7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZGVsdGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNb
aV07CisgICAgICAgICAgICBpZiAoZGVsdGEuZ3JvdXAgPT0gImRvYyIpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmRvYy5hcHBseURlbHRhcyhkZWx0YS5kZWx0YXMpOworICAgICAgICAgICAgICAg
IGxhc3RVbmRvUmFuZ2UgPQorICAgICAgICAgICAgICAgICAgICB0aGlzLiRnZXRVbmRvU2VsZWN0
aW9uKGRlbHRhLmRlbHRhcywgZmFsc2UsIGxhc3RVbmRvUmFuZ2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHRoaXMuJGZyb21VbmRvID0gZmFsc2U7CisgICAgICAgIGxhc3RV
bmRvUmFuZ2UgJiYKKyAgICAgICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgJiYKKyAgICAgICAgICAg
ICFkb250U2VsZWN0ICYmCisgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25S
YW5nZShsYXN0VW5kb1JhbmdlKTsKKyAgICAgICAgcmV0dXJuIGxhc3RVbmRvUmFuZ2U7CisgICAg
fTsKKyAgICB0aGlzLnNldFVuZG9TZWxlY3QgPSBmdW5jdGlvbihlbmFibGUpIHsKKyAgICAgICAg
dGhpcy4kdW5kb1NlbGVjdCA9IGVuYWJsZTsKICAgICB9OwotICAgIHRoaXMuc2NyZWVuVG9Eb2N1
bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pIHsKLSAgICAg
ICAgaWYgKHNjcmVlblJvdyA8IDApCi0gICAgICAgICAgICByZXR1cm4ge3JvdzogMCwgY29sdW1u
OiAwfTsKIAotICAgICAgICB2YXIgbGluZTsKLSAgICAgICAgdmFyIGRvY1JvdyA9IDA7Ci0gICAg
ICAgIHZhciBkb2NDb2x1bW4gPSAwOwotICAgICAgICB2YXIgY29sdW1uOwotICAgICAgICB2YXIg
cm93ID0gMDsKLSAgICAgICAgdmFyIHJvd0xlbmd0aCA9IDA7CisgICAgdGhpcy4kZ2V0VW5kb1Nl
bGVjdGlvbiA9IGZ1bmN0aW9uKGRlbHRhcywgaXNVbmRvLCBsYXN0VW5kb1JhbmdlKSB7CisgICAg
ICAgIGZ1bmN0aW9uIGlzSW5zZXJ0KGRlbHRhKSB7CisgICAgICAgICAgICB2YXIgaW5zZXJ0ID0K
KyAgICAgICAgICAgICAgICBkZWx0YS5hY3Rpb24gPT0gImluc2VydFRleHQiIHx8IGRlbHRhLmFj
dGlvbiA9PSAiaW5zZXJ0TGluZXMiOworICAgICAgICAgICAgcmV0dXJuIGlzVW5kbyA/ICFpbnNl
cnQgOiBpbnNlcnQ7CisgICAgICAgIH0KIAotICAgICAgICB2YXIgcm93Q2FjaGUgPSB0aGlzLiRz
Y3JlZW5Sb3dDYWNoZTsKLSAgICAgICAgdmFyIGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4KHJv
d0NhY2hlLCBzY3JlZW5Sb3cpOwotICAgICAgICB2YXIgbCA9IHJvd0NhY2hlLmxlbmd0aDsKLSAg
ICAgICAgaWYgKGwgJiYgaSA+PSAwKSB7Ci0gICAgICAgICAgICB2YXIgcm93ID0gcm93Q2FjaGVb
aV07Ci0gICAgICAgICAgICB2YXIgZG9jUm93ID0gdGhpcy4kZG9jUm93Q2FjaGVbaV07Ci0gICAg
ICAgICAgICB2YXIgZG9DYWNoZSA9IHNjcmVlblJvdyA+IHJvd0NhY2hlW2wgLSAxXTsKKyAgICAg
ICAgdmFyIGRlbHRhID0gZGVsdGFzWzBdOworICAgICAgICB2YXIgcmFuZ2UsIHBvaW50OworICAg
ICAgICB2YXIgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGlzSW5zZXJ0
KGRlbHRhKSkgeworICAgICAgICAgICAgcmFuZ2UgPSBkZWx0YS5yYW5nZS5jbG9uZSgpOworICAg
ICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdmFyIGRvQ2FjaGUgPSAhbDsKKyAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJv
bVBvaW50cyhkZWx0YS5yYW5nZS5zdGFydCwgZGVsdGEucmFuZ2Uuc3RhcnQpOworICAgICAgICAg
ICAgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHZhciBt
YXhSb3cgPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKLSAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhp
cy5nZXROZXh0Rm9sZExpbmUoZG9jUm93KTsKLSAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRM
aW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7Ci0KLSAgICAgICAgd2hpbGUgKHJv
dyA8PSBzY3JlZW5Sb3cpIHsKLSAgICAgICAgICAgIHJvd0xlbmd0aCA9IHRoaXMuZ2V0Um93TGVu
Z3RoKGRvY1Jvdyk7Ci0gICAgICAgICAgICBpZiAocm93ICsgcm93TGVuZ3RoIC0gMSA+PSBzY3Jl
ZW5Sb3cgfHwgZG9jUm93ID49IG1heFJvdykgewotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGRlbHRhcy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgZGVsdGEgPSBkZWx0YXNbaV07CisgICAgICAgICAgICBpZiAoaXNJbnNlcnQoZGVsdGEpKSB7
CisgICAgICAgICAgICAgICAgcG9pbnQgPSBkZWx0YS5yYW5nZS5zdGFydDsKKyAgICAgICAgICAg
ICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50LmNvbHVtbikgPT0gLTEpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoZGVsdGEucmFuZ2Uuc3RhcnQpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb2ludCA9IGRlbHRhLnJhbmdlLmVu
ZDsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50LmNv
bHVtbikgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQoZGVsdGEucmFu
Z2UuZW5kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdERlbHRhSXNJ
bnNlcnQgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByb3cg
Kz0gcm93TGVuZ3RoOwotICAgICAgICAgICAgICAgIGRvY1JvdysrOwotICAgICAgICAgICAgICAg
IGlmIChkb2NSb3cgPiBmb2xkU3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jUm93ID0g
Zm9sZExpbmUuZW5kLnJvdysxOwotICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMu
Z2V0TmV4dEZvbGRMaW5lKGRvY1JvdywgZm9sZExpbmUpOwotICAgICAgICAgICAgICAgICAgICBm
b2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OworICAg
ICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEucmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICAgICAg
aWYgKHJhbmdlLmNvbXBhcmUocG9pbnQucm93LCBwb2ludC5jb2x1bW4pID09IC0xKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJhbmdlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlLmZy
b21Qb2ludHMoZGVsdGEucmFuZ2Uuc3RhcnQsIGRlbHRhLnJhbmdlLnN0YXJ0KTsKICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSBmYWxzZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGRvQ2FjaGUpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKGRvY1Jvdyk7Ci0gICAgICAgICAg
ICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChyb3cpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGZvbGRMaW5lICYmIGZvbGRMaW5lLnN0YXJ0LnJvdyA8PSBk
b2NSb3cpIHsKLSAgICAgICAgICAgIGxpbmUgPSB0aGlzLmdldEZvbGREaXNwbGF5TGluZShmb2xk
TGluZSk7Ci0gICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7Ci0gICAgICAg
IH0gZWxzZSBpZiAocm93ICsgcm93TGVuZ3RoIDw9IHNjcmVlblJvdyB8fCBkb2NSb3cgPiBtYXhS
b3cpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgcm93OiBtYXhSb3cs
Ci0gICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmdldExpbmUobWF4Um93KS5sZW5ndGgKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpbmUgPSB0aGlzLmdl
dExpbmUoZG9jUm93KTsKLSAgICAgICAgICAgIGZvbGRMaW5lID0gbnVsbDsKICAgICAgICAgfQot
Ci0gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgewotICAgICAgICAgICAgdmFyIHNwbGl0
cyA9IHRoaXMuJHdyYXBEYXRhW2RvY1Jvd107Ci0gICAgICAgICAgICBpZiAoc3BsaXRzKSB7Ci0g
ICAgICAgICAgICAgICAgY29sdW1uID0gc3BsaXRzW3NjcmVlblJvdyAtIHJvd107Ci0gICAgICAg
ICAgICAgICAgaWYoc2NyZWVuUm93ID4gcm93ICYmIHNwbGl0cy5sZW5ndGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZG9jQ29sdW1uID0gc3BsaXRzW3NjcmVlblJvdyAtIHJvdyAtIDFdIHx8IHNw
bGl0c1tzcGxpdHMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5l
LnN1YnN0cmluZyhkb2NDb2x1bW4pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGxh
c3RVbmRvUmFuZ2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdmFyIGNtcCA9IGxhc3RVbmRvUmFu
Z2UuY29tcGFyZVJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgeworICAg
ICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KGxhc3RVbmRvUmFuZ2Uuc3RhcnQpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChjbXAgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICByYW5nZS5zZXRF
bmQobGFzdFVuZG9SYW5nZS5lbmQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgZG9jQ29sdW1uICs9IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKGxpbmUsIHNjcmVlbkNv
bHVtbilbMV07Ci0gICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSAmJiBkb2NDb2x1bW4gPj0g
Y29sdW1uKQotICAgICAgICAgICAgZG9jQ29sdW1uID0gY29sdW1uIC0gMTsKLQotICAgICAgICBp
ZiAoZm9sZExpbmUpCi0gICAgICAgICAgICByZXR1cm4gZm9sZExpbmUuaWR4VG9Qb3NpdGlvbihk
b2NDb2x1bW4pOwotCi0gICAgICAgIHJldHVybiB7cm93OiBkb2NSb3csIGNvbHVtbjogZG9jQ29s
dW1ufTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH07Ci0gICAgdGhpcy5kb2N1bWVudFRv
U2NyZWVuUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewotICAgICAgICBp
ZiAodHlwZW9mIGRvY0NvbHVtbiA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICB2YXIgcG9z
ID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cucm93LCBkb2NSb3cuY29sdW1u
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9E
b2N1bWVudChkb2NSb3csIGRvY0NvbHVtbik7CisgICAgdGhpcy5yZXBsYWNlID0gZnVuY3Rpb24o
cmFuZ2UsIHRleHQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UocmFuZ2UsIHRl
eHQpOworICAgIH07CisgICAgdGhpcy5tb3ZlVGV4dCA9IGZ1bmN0aW9uKGZyb21SYW5nZSwgdG9Q
b3NpdGlvbikgeworICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5n
ZSk7CisgICAgICAgIHRoaXMucmVtb3ZlKGZyb21SYW5nZSk7CiAKLSAgICAgICAgZG9jUm93ID0g
cG9zLnJvdzsKLSAgICAgICAgZG9jQ29sdW1uID0gcG9zLmNvbHVtbjsKKyAgICAgICAgdmFyIHRv
Um93ID0gdG9Qb3NpdGlvbi5yb3c7CisgICAgICAgIHZhciB0b0NvbHVtbiA9IHRvUG9zaXRpb24u
Y29sdW1uOworICAgICAgICBpZiAoIWZyb21SYW5nZS5pc011bHRpTGluZSgpICYmIGZyb21SYW5n
ZS5zdGFydC5yb3cgPT0gdG9Sb3cgJiYKKyAgICAgICAgICAgIGZyb21SYW5nZS5lbmQuY29sdW1u
IDwgdG9Db2x1bW4pCisgICAgICAgICAgICB0b0NvbHVtbiAtPSB0ZXh0Lmxlbmd0aDsKIAotICAg
ICAgICB2YXIgc2NyZWVuUm93ID0gMDsKLSAgICAgICAgdmFyIGZvbGRTdGFydFJvdyA9IG51bGw7
Ci0gICAgICAgIHZhciBmb2xkID0gbnVsbDsKLSAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0
KGRvY1JvdywgZG9jQ29sdW1uLCAxKTsKLSAgICAgICAgaWYgKGZvbGQpIHsKLSAgICAgICAgICAg
IGRvY1JvdyA9IGZvbGQuc3RhcnQucm93OwotICAgICAgICAgICAgZG9jQ29sdW1uID0gZm9sZC5z
dGFydC5jb2x1bW47CisgICAgICAgIGlmIChmcm9tUmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBmcm9t
UmFuZ2UuZW5kLnJvdyA8IHRvUm93KSB7CisgICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRv
Yy4kc3BsaXQodGV4dCk7CisgICAgICAgICAgICB0b1JvdyAtPSBsaW5lcy5sZW5ndGggLSAxOwog
ICAgICAgICB9CiAKLSAgICAgICAgdmFyIHJvd0VuZCwgcm93ID0gMDsKLQorICAgICAgICB2YXIg
ZW5kUm93ID0gdG9Sb3cgKyBmcm9tUmFuZ2UuZW5kLnJvdyAtIGZyb21SYW5nZS5zdGFydC5yb3c7
CisgICAgICAgIHZhciBlbmRDb2x1bW4gPSBmcm9tUmFuZ2UuaXNNdWx0aUxpbmUoKSA/CisgICAg
ICAgICAgICAgICAgICAgICAgICBmcm9tUmFuZ2UuZW5kLmNvbHVtbiA6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0b0NvbHVtbiArIGZyb21SYW5nZS5lbmQuY29sdW1uIC0gZnJvbVJhbmdlLnN0
YXJ0LmNvbHVtbjsKIAotICAgICAgICB2YXIgcm93Q2FjaGUgPSB0aGlzLiRkb2NSb3dDYWNoZTsK
LSAgICAgICAgdmFyIGkgPSB0aGlzLiRnZXRSb3dDYWNoZUluZGV4KHJvd0NhY2hlLCBkb2NSb3cp
OwotICAgICAgICB2YXIgbCA9IHJvd0NhY2hlLmxlbmd0aDsKLSAgICAgICAgaWYgKGwgJiYgaSA+
PSAwKSB7Ci0gICAgICAgICAgICB2YXIgcm93ID0gcm93Q2FjaGVbaV07Ci0gICAgICAgICAgICB2
YXIgc2NyZWVuUm93ID0gdGhpcy4kc2NyZWVuUm93Q2FjaGVbaV07Ci0gICAgICAgICAgICB2YXIg
ZG9DYWNoZSA9IGRvY1JvdyA+IHJvd0NhY2hlW2wgLSAxXTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHZhciBkb0NhY2hlID0gIWw7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIHRvUmFu
Z2UgPSBuZXcgUmFuZ2UodG9Sb3csIHRvQ29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAKLSAg
ICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUocm93KTsKLSAgICAgICAg
dmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID9mb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5Owor
ICAgICAgICB0aGlzLmluc2VydCh0b1JhbmdlLnN0YXJ0LCB0ZXh0KTsKIAotICAgICAgICB3aGls
ZSAocm93IDwgZG9jUm93KSB7Ci0gICAgICAgICAgICBpZiAocm93ID49IGZvbGRTdGFydCkgewot
ICAgICAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOwotICAgICAgICAg
ICAgICAgIGlmIChyb3dFbmQgPiBkb2NSb3cpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUocm93RW5kLCBm
b2xkTGluZSk7Ci0gICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgP2ZvbGRMaW5l
LnN0YXJ0LnJvdyA6SW5maW5pdHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICByb3dFbmQgPSByb3cgKyAxOwotICAgICAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdG9SYW5nZTsKKyAgICB9OworICAgIHRoaXMuaW5kZW50Um93cyA9IGZ1bmN0aW9u
KHN0YXJ0Um93LCBlbmRSb3csIGluZGVudFN0cmluZykgeworICAgICAgICBpbmRlbnRTdHJpbmcg
PSBpbmRlbnRTdHJpbmcucmVwbGFjZSgvXHQvZywgdGhpcy5nZXRUYWJTdHJpbmcoKSk7CisgICAg
ICAgIGZvciAodmFyIHJvdz1zdGFydFJvdzsgcm93PD1lbmRSb3c7IHJvdysrKQorICAgICAgICAg
ICAgdGhpcy5pbnNlcnQoe3Jvdzogcm93LCBjb2x1bW46MH0sIGluZGVudFN0cmluZyk7CisgICAg
fTsKKyAgICB0aGlzLm91dGRlbnRSb3dzID0gZnVuY3Rpb24gKHJhbmdlKSB7CisgICAgICAgIHZh
ciByb3dSYW5nZSA9IHJhbmdlLmNvbGxhcHNlUm93cygpOworICAgICAgICB2YXIgZGVsZXRlUmFu
Z2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CisgICAgICAgIHZhciBzaXplID0gdGhpcy5nZXRU
YWJTaXplKCk7CiAKLSAgICAgICAgICAgIHNjcmVlblJvdyArPSB0aGlzLmdldFJvd0xlbmd0aChy
b3cpOwotICAgICAgICAgICAgcm93ID0gcm93RW5kOworICAgICAgICBmb3IgKHZhciBpID0gcm93
UmFuZ2Uuc3RhcnQucm93OyBpIDw9IHJvd1JhbmdlLmVuZC5yb3c7ICsraSkgeworICAgICAgICAg
ICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUoaSk7CiAKLSAgICAgICAgICAgIGlmIChkb0NhY2hl
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUucHVzaChyb3cpOwotICAgICAg
ICAgICAgICAgIHRoaXMuJHNjcmVlblJvd0NhY2hlLnB1c2goc2NyZWVuUm93KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YXIgdGV4dExpbmUgPSAiIjsKLSAgICAgICAgaWYg
KGZvbGRMaW5lICYmIHJvdyA+PSBmb2xkU3RhcnQpIHsKLSAgICAgICAgICAgIHRleHRMaW5lID0g
dGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZm9sZExpbmUsIGRvY1JvdywgZG9jQ29sdW1uKTsKLSAg
ICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRMaW5lKGRvY1Jvdykuc3Vic3Ry
aW5nKDAsIGRvY0NvbHVtbik7Ci0gICAgICAgICAgICBmb2xkU3RhcnRSb3cgPSBkb2NSb3c7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7Ci0gICAgICAgICAgICB2
YXIgd3JhcFJvdyA9IHRoaXMuJHdyYXBEYXRhW2ZvbGRTdGFydFJvd107Ci0gICAgICAgICAgICB2
YXIgc2NyZWVuUm93T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHdoaWxlICh0ZXh0TGluZS5sZW5n
dGggPj0gd3JhcFJvd1tzY3JlZW5Sb3dPZmZzZXRdKSB7Ci0gICAgICAgICAgICAgICAgc2NyZWVu
Um93ICsrOwotICAgICAgICAgICAgICAgIHNjcmVlblJvd09mZnNldCsrOworICAgICAgICAgICAg
ZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTsKKyAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5y
b3cgPSBpOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyArK2opCisgICAg
ICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KGopICE9ICcgJykKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaiA8IHNpemUgJiYgbGluZS5jaGFyQXQoaikgPT0g
J1x0JykgeworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LmNvbHVtbiA9IGo7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IGogKyAxOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSAw
OworICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5jb2x1bW4gPSBqOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdGV4dExpbmUgPSB0ZXh0TGluZS5zdWJzdHJpbmcoCi0gICAgICAg
ICAgICAgICAgd3JhcFJvd1tzY3JlZW5Sb3dPZmZzZXQgLSAxXSB8fCAwLCB0ZXh0TGluZS5sZW5n
dGgKLSAgICAgICAgICAgICk7CisgICAgICAgICAgICB0aGlzLnJlbW92ZShkZWxldGVSYW5nZSk7
CiAgICAgICAgIH0KKyAgICB9OworICAgIHRoaXMubW92ZUxpbmVzVXAgPSBmdW5jdGlvbihmaXJz
dFJvdywgbGFzdFJvdykgeworICAgICAgICBpZiAoZmlyc3RSb3cgPD0gMCkgcmV0dXJuIDA7CiAK
LSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHJvdzogc2NyZWVuUm93LAotICAgICAgICAg
ICAgY29sdW1uOiB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh0ZXh0TGluZSlbMF0KLSAgICAg
ICAgfTsKKyAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLmRvYy5yZW1vdmVMaW5lcyhmaXJzdFJv
dywgbGFzdFJvdyk7CisgICAgICAgIHRoaXMuZG9jLmluc2VydExpbmVzKGZpcnN0Um93IC0gMSwg
cmVtb3ZlZCk7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9OwotICAgIHRoaXMuZG9jdW1lbnRU
b1NjcmVlbkNvbHVtbiA9IGZ1bmN0aW9uKHJvdywgZG9jQ29sdW1uKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyb3csIGRvY0NvbHVtbikuY29sdW1uOwor
ICAgIHRoaXMubW92ZUxpbmVzRG93biA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7Cisg
ICAgICAgIGlmIChsYXN0Um93ID49IHRoaXMuZG9jLmdldExlbmd0aCgpLTEpIHJldHVybiAwOwor
CisgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5kb2MucmVtb3ZlTGluZXMoZmlyc3RSb3csIGxh
c3RSb3cpOworICAgICAgICB0aGlzLmRvYy5pbnNlcnRMaW5lcyhmaXJzdFJvdysxLCByZW1vdmVk
KTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfTsKLSAgICB0aGlzLmRvY3VtZW50VG9TY3JlZW5S
b3cgPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewotICAgICAgICByZXR1cm4gdGhpcy5k
b2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZG9jUm93LCBkb2NDb2x1bW4pLnJvdzsKKyAgICB0aGlz
LmR1cGxpY2F0ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKKyAgICAgICAg
dmFyIGZpcnN0Um93ID0gdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQoZmlyc3RSb3cpOworICAgICAg
ICB2YXIgbGFzdFJvdyA9IHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50KGxhc3RSb3cpOworCisgICAg
ICAgIHZhciBsaW5lcyA9IHRoaXMuZ2V0TGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOworICAgICAg
ICB0aGlzLmRvYy5pbnNlcnRMaW5lcyhmaXJzdFJvdywgbGluZXMpOworCisgICAgICAgIHZhciBh
ZGRlZFJvd3MgPSBsYXN0Um93IC0gZmlyc3RSb3cgKyAxOworICAgICAgICByZXR1cm4gYWRkZWRS
b3dzOwogICAgIH07Ci0gICAgdGhpcy5nZXRTY3JlZW5MZW5ndGggPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdmFyIHNjcmVlblJvd3MgPSAwOwotICAgICAgICB2YXIgZm9sZCA9IG51bGw7Ci0gICAg
ICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUpIHsKLSAgICAgICAgICAgIHNjcmVlblJvd3MgPSB0
aGlzLmdldExlbmd0aCgpOwotICAgICAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERh
dGE7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgZm9sZCA9IGZvbGREYXRhW2ldOwotICAgICAgICAgICAgICAg
IHNjcmVlblJvd3MgLT0gZm9sZC5lbmQucm93IC0gZm9sZC5zdGFydC5yb3c7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMuJHdy
YXBEYXRhLmxlbmd0aDsKLSAgICAgICAgICAgIHZhciByb3cgPSAwLCBpID0gMDsKLSAgICAgICAg
ICAgIHZhciBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsKLSAgICAgICAgICAgIHZhciBmb2xk
U3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOkluZmluaXR5OwogCi0gICAgICAgICAgICB3
aGlsZSAocm93IDwgbGFzdFJvdykgewotICAgICAgICAgICAgICAgIHNjcmVlblJvd3MgKz0gdGhp
cy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxOwotICAgICAgICAgICAgICAgIHJvdyArKzsKLSAg
ICAgICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJvdyA9IGZvbGQuZW5kLnJvdysxOwotICAgICAgICAgICAgICAgICAgICBmb2xkID0gdGhpcy4k
Zm9sZERhdGFbaSsrXTsKLSAgICAgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZCA/Zm9s
ZC5zdGFydC5yb3cgOkluZmluaXR5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzY3JlZW5Sb3dzOworICAgIHRoaXMuJGNsaXBS
b3dUb0RvY3VtZW50ID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIHJldHVybiBNYXRoLm1heCgw
LCBNYXRoLm1pbihyb3csIHRoaXMuZG9jLmdldExlbmd0aCgpLTEpKTsKICAgICB9OwotICAgIGZ1
bmN0aW9uIGlzRnVsbFdpZHRoKGMpIHsKLSAgICAgICAgaWYgKGMgPCAweDExMDApCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjID49IDB4MTEwMCAmJiBjIDw9IDB4
MTE1RiB8fAotICAgICAgICAgICAgICAgYyA+PSAweDExQTMgJiYgYyA8PSAweDExQTcgfHwKLSAg
ICAgICAgICAgICAgIGMgPj0gMHgxMUZBICYmIGMgPD0gMHgxMUZGIHx8Ci0gICAgICAgICAgICAg
ICBjID49IDB4MjMyOSAmJiBjIDw9IDB4MjMyQSB8fAotICAgICAgICAgICAgICAgYyA+PSAweDJF
ODAgJiYgYyA8PSAweDJFOTkgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgyRTlCICYmIGMgPD0g
MHgyRUYzIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MkYwMCAmJiBjIDw9IDB4MkZENSB8fAot
ICAgICAgICAgICAgICAgYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkIgfHwKLSAgICAgICAgICAg
ICAgIGMgPj0gMHgzMDAwICYmIGMgPD0gMHgzMDNFIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4
MzA0MSAmJiBjIDw9IDB4MzA5NiB8fAotICAgICAgICAgICAgICAgYyA+PSAweDMwOTkgJiYgYyA8
PSAweDMwRkYgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgzMTA1ICYmIGMgPD0gMHgzMTJEIHx8
Ci0gICAgICAgICAgICAgICBjID49IDB4MzEzMSAmJiBjIDw9IDB4MzE4RSB8fAotICAgICAgICAg
ICAgICAgYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxQkEgfHwKLSAgICAgICAgICAgICAgIGMgPj0g
MHgzMUMwICYmIGMgPD0gMHgzMUUzIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4MzFGMCAmJiBj
IDw9IDB4MzIxRSB8fAotICAgICAgICAgICAgICAgYyA+PSAweDMyMjAgJiYgYyA8PSAweDMyNDcg
fHwKLSAgICAgICAgICAgICAgIGMgPj0gMHgzMjUwICYmIGMgPD0gMHgzMkZFIHx8Ci0gICAgICAg
ICAgICAgICBjID49IDB4MzMwMCAmJiBjIDw9IDB4NERCRiB8fAotICAgICAgICAgICAgICAgYyA+
PSAweDRFMDAgJiYgYyA8PSAweEE0OEMgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHhBNDkwICYm
IGMgPD0gMHhBNEM2IHx8Ci0gICAgICAgICAgICAgICBjID49IDB4QTk2MCAmJiBjIDw9IDB4QTk3
QyB8fAotICAgICAgICAgICAgICAgYyA+PSAweEFDMDAgJiYgYyA8PSAweEQ3QTMgfHwKLSAgICAg
ICAgICAgICAgIGMgPj0gMHhEN0IwICYmIGMgPD0gMHhEN0M2IHx8Ci0gICAgICAgICAgICAgICBj
ID49IDB4RDdDQiAmJiBjIDw9IDB4RDdGQiB8fAotICAgICAgICAgICAgICAgYyA+PSAweEY5MDAg
JiYgYyA8PSAweEZBRkYgfHwKLSAgICAgICAgICAgICAgIGMgPj0gMHhGRTEwICYmIGMgPD0gMHhG
RTE5IHx8Ci0gICAgICAgICAgICAgICBjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU1MiB8fAotICAg
ICAgICAgICAgICAgYyA+PSAweEZFNTQgJiYgYyA8PSAweEZFNjYgfHwKLSAgICAgICAgICAgICAg
IGMgPj0gMHhGRTY4ICYmIGMgPD0gMHhGRTZCIHx8Ci0gICAgICAgICAgICAgICBjID49IDB4RkYw
MSAmJiBjIDw9IDB4RkY2MCB8fAotICAgICAgICAgICAgICAgYyA+PSAweEZGRTAgJiYgYyA8PSAw
eEZGRTY7CisKKyAgICB0aGlzLiRjbGlwQ29sdW1uVG9Sb3cgPSBmdW5jdGlvbihyb3csIGNvbHVt
bikgeworICAgICAgICBpZiAoY29sdW1uIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1u
KTsKICAgICB9OwogCi19KS5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7CiAKLXJlcXVpcmUo
Ii4vZWRpdF9zZXNzaW9uL2ZvbGRpbmciKS5Gb2xkaW5nLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90
eXBlKTsKLXJlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2giKS5CcmFja2V0TWF0
Y2guY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOworICAgIHRoaXMuJGNsaXBQb3NpdGlvblRv
RG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgeworICAgICAgICBjb2x1bW4gPSBNYXRo
Lm1heCgwLCBjb2x1bW4pOwogCi1leHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Npb247Ci19
KTsKKyAgICAgICAgaWYgKHJvdyA8IDApIHsKKyAgICAgICAgICAgIHJvdyA9IDA7CisgICAgICAg
ICAgICBjb2x1bW4gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGxlbiA9
IHRoaXMuZG9jLmdldExlbmd0aCgpOworICAgICAgICAgICAgaWYgKHJvdyA+PSBsZW4pIHsKKyAg
ICAgICAgICAgICAgICByb3cgPSBsZW4gLSAxOworICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRo
aXMuZG9jLmdldExpbmUobGVuLTEpLmxlbmd0aDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0
aCwgY29sdW1uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi1hY2UuZGVmaW5lKCdhY2Uv
Y29uZmlnJywgWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2xhbmcn
LCAnYWNlL2xpYi9vb3AnLCAnYWNlL2xpYi9uZXQnLCAnYWNlL2xpYi9ldmVudF9lbWl0dGVyJ10s
IGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewotIm5vIHVzZSBzdHJpY3QiOwor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcm93OiByb3csCisgICAgICAgICAgICBjb2x1
bW46IGNvbHVtbgorICAgICAgICB9OworICAgIH07CiAKLXZhciBsYW5nID0gcmVxdWlyZSgiLi9s
aWIvbGFuZyIpOwotdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwotdmFyIG5ldCA9IHJl
cXVpcmUoIi4vbGliL25ldCIpOwotdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2
ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CisgICAgdGhpcy4kY2xpcFJhbmdlVG9Eb2N1bWVu
dCA9IGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPCAwKSB7
CisgICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSAwOworICAgICAgICAgICAgcmFuZ2Uuc3Rh
cnQuY29sdW1uID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlLnN0YXJ0
LmNvbHVtbiA9IHRoaXMuJGNsaXBDb2x1bW5Ub1JvdygKKyAgICAgICAgICAgICAgICByYW5nZS5z
dGFydC5yb3csCisgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uCisgICAgICAgICAg
ICApOworICAgICAgICB9CiAKLXZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IHRoaXM7Ci19KSgpOworICAgICAgICB2YXIgbGVuID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAx
OworICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyA+IGxlbikgeworICAgICAgICAgICAgcmFuZ2Uu
ZW5kLnJvdyA9IGxlbjsKKyAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSB0aGlzLmRvYy5n
ZXRMaW5lKGxlbikubGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2Uu
ZW5kLmNvbHVtbiA9IHRoaXMuJGNsaXBDb2x1bW5Ub1JvdygKKyAgICAgICAgICAgICAgICByYW5n
ZS5lbmQucm93LAorICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4KKyAgICAgICAgICAg
ICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhbmdlOworICAgIH07CisgICAgdGhpcy4k
d3JhcExpbWl0ID0gODA7CisgICAgdGhpcy4kdXNlV3JhcE1vZGUgPSBmYWxzZTsKKyAgICB0aGlz
LiR3cmFwTGltaXRSYW5nZSA9IHsKKyAgICAgICAgbWluIDogbnVsbCwKKyAgICAgICAgbWF4IDog
bnVsbAorICAgIH07CisgICAgdGhpcy5zZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKHVzZVdyYXBN
b2RlKSB7CisgICAgICAgIGlmICh1c2VXcmFwTW9kZSAhPSB0aGlzLiR1c2VXcmFwTW9kZSkgewor
ICAgICAgICAgICAgdGhpcy4kdXNlV3JhcE1vZGUgPSB1c2VXcmFwTW9kZTsKKyAgICAgICAgICAg
IHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUo
MCk7CisgICAgICAgICAgICBpZiAodXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIg
bGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB0aGlzLiR3cmFwRGF0YSA9
IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy4kd3JhcERhdGEucHVzaChbXSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKDAsIGxlbiAtIDEpOwor
ICAgICAgICAgICAgfQogCi12YXIgb3B0aW9ucyA9IHsKLSAgICBwYWNrYWdlZDogZmFsc2UsCi0g
ICAgd29ya2VyUGF0aDogbnVsbCwKLSAgICBtb2RlUGF0aDogbnVsbCwKLSAgICB0aGVtZVBhdGg6
IG51bGwsCi0gICAgYmFzZVBhdGg6ICIiLAotICAgIHN1ZmZpeDogIi5qcyIsCi0gICAgJG1vZHVs
ZVVybHM6IHt9Ci19OworICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlV3JhcE1vZGUiKTsK
KyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGU7CisgICAgfTsKKyAgICB0aGlzLnNl
dFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24obWluLCBtYXgpIHsKKyAgICAgICAgaWYgKHRoaXMu
JHdyYXBMaW1pdFJhbmdlLm1pbiAhPT0gbWluIHx8IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heCAh
PT0gbWF4KSB7CisgICAgICAgICAgICB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4gPSBtaW47Cisg
ICAgICAgICAgICB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXggPSBtYXg7CisgICAgICAgICAgICB0
aGlzLiRtb2RpZmllZCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VXcmFw
TW9kZSIpOworICAgICAgICB9CisgICAgfTsKIAotZXhwb3J0cy5nZXQgPSBmdW5jdGlvbihrZXkp
IHsKLSAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkKLSAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJVbmtub3duIGNvbmZpZyBrZXk6ICIgKyBrZXkpOworICAgIHRoaXMuJGZpeGVk
R3V0dGVyV2lkdGggPSBmYWxzZTsKKyAgICB0aGlzLnNldEZpeGVkR3V0dGVyV2lkdGggPSBmdW5j
dGlvbihmaXhlZEd1dHRlcldpZHRoKSB7CisgICAgICAgIHRoaXMuJGZpeGVkR3V0dGVyV2lkdGgg
PSBmaXhlZEd1dHRlcldpZHRoOworICAgIH0KIAotICAgIHJldHVybiBvcHRpb25zW2tleV07Ci19
OworICAgIHRoaXMuZ2V0Rml4ZWRHdXR0ZXJXaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy4kZml4ZWRHdXR0ZXJXaWR0aDsKKyAgICB9CisgICAgdGhpcy5hZGp1c3RXcmFw
TGltaXQgPSBmdW5jdGlvbihkZXNpcmVkTGltaXQpIHsKKyAgICAgICAgdmFyIHdyYXBMaW1pdCA9
IHRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdChkZXNpcmVkTGltaXQpOworICAgICAgICBpZiAod3Jh
cExpbWl0ICE9IHRoaXMuJHdyYXBMaW1pdCAmJiB3cmFwTGltaXQgPiAwKSB7CisgICAgICAgICAg
ICB0aGlzLiR3cmFwTGltaXQgPSB3cmFwTGltaXQ7CisgICAgICAgICAgICB0aGlzLiRtb2RpZmll
ZCA9IHRydWU7CisgICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7Cisg
ICAgICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9lbWl0KCJjaGFuZ2VXcmFwTGltaXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Owog
Ci1leHBvcnRzLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICBpZiAoIW9wdGlvbnMu
aGFzT3duUHJvcGVydHkoa2V5KSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNv
bmZpZyBrZXk6ICIgKyBrZXkpOworICAgIHRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdCA9IGZ1bmN0
aW9uKHdyYXBMaW1pdCkgeworICAgICAgICB2YXIgbWluID0gdGhpcy4kd3JhcExpbWl0UmFuZ2Uu
bWluOworICAgICAgICBpZiAobWluKQorICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5tYXgo
bWluLCB3cmFwTGltaXQpOwogCi0gICAgb3B0aW9uc1trZXldID0gdmFsdWU7Ci19OworICAgICAg
ICB2YXIgbWF4ID0gdGhpcy4kd3JhcExpbWl0UmFuZ2UubWF4OworICAgICAgICBpZiAobWF4KQor
ICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5taW4obWF4LCB3cmFwTGltaXQpOworICAgICAg
ICByZXR1cm4gTWF0aC5tYXgoMSwgd3JhcExpbWl0KTsKKyAgICB9OworICAgIHRoaXMuZ2V0V3Jh
cExpbWl0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLiR3cmFwTGltaXQ7Cisg
ICAgfTsKKyAgICB0aGlzLmdldFdyYXBMaW1pdFJhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICBtaW4gOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4sCisg
ICAgICAgICAgICBtYXggOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXgKKyAgICAgICAgfTsKKyAg
ICB9OwogCi1leHBvcnRzLmFsbCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBsYW5nLmNvcHlP
YmplY3Qob3B0aW9ucyk7Ci19Owotb29wLmltcGxlbWVudChleHBvcnRzLCBFdmVudEVtaXR0ZXIp
OworICAgIHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICB2YXIgdXNlV3JhcE1vZGUgPSB0aGlzLiR1c2VXcmFwTW9kZTsKKyAgICAgICAgdmFy
IGxlbjsKKyAgICAgICAgdmFyIGFjdGlvbiA9IGUuZGF0YS5hY3Rpb247CisgICAgICAgIHZhciBm
aXJzdFJvdyA9IGUuZGF0YS5yYW5nZS5zdGFydC5yb3c7CisgICAgICAgIHZhciBsYXN0Um93ID0g
ZS5kYXRhLnJhbmdlLmVuZC5yb3c7CisgICAgICAgIHZhciBzdGFydCA9IGUuZGF0YS5yYW5nZS5z
dGFydDsKKyAgICAgICAgdmFyIGVuZCA9IGUuZGF0YS5yYW5nZS5lbmQ7CisgICAgICAgIHZhciBy
ZW1vdmVkRm9sZHMgPSBudWxsOwogCi1leHBvcnRzLm1vZHVsZVVybCA9IGZ1bmN0aW9uKG5hbWUs
IGNvbXBvbmVudCkgewotICAgIGlmIChvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdKQotICAgICAg
ICByZXR1cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXTsKKyAgICAgICAgaWYgKGFjdGlvbi5p
bmRleE9mKCJMaW5lcyIpICE9IC0xKSB7CisgICAgICAgICAgICBpZiAoYWN0aW9uID09ICJpbnNl
cnRMaW5lcyIpIHsKKyAgICAgICAgICAgICAgICBsYXN0Um93ID0gZmlyc3RSb3cgKyAoZS5kYXRh
LmxpbmVzLmxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxh
c3RSb3cgPSBmaXJzdFJvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IGUuZGF0
YS5saW5lcyA/IGUuZGF0YS5saW5lcy5sZW5ndGggOiBsYXN0Um93IC0gZmlyc3RSb3c7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW4gPSBsYXN0Um93IC0gZmlyc3RSb3c7CisgICAg
ICAgIH0KIAotICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoIi8iKTsKLSAgICBjb21wb25lbnQg
PSBjb21wb25lbnQgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMl0gfHwgIiI7Ci0gICAgdmFyIGJh
c2UgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXS5yZXBsYWNlKGNvbXBvbmVudCwgIiIpLnJlcGxh
Y2UoLyheW1wtX10pfChbXC1fXSQpLywgIiIpOworICAgICAgICBpZiAobGVuICE9IDApIHsKKyAg
ICAgICAgICAgIGlmIChhY3Rpb24uaW5kZXhPZigicmVtb3ZlIikgIT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzW3VzZVdyYXBNb2RlID8gIiR3cmFwRGF0YSIgOiAiJHJvd0xlbmd0aENhY2hl
Il0uc3BsaWNlKGZpcnN0Um93LCBsZW4pOwogCi0gICAgaWYgKCFiYXNlICYmIHBhcnRzLmxlbmd0
aCA+IDEpCi0gICAgICAgIGJhc2UgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXTsKLSAgICB2YXIg
cGF0aCA9IG9wdGlvbnNbY29tcG9uZW50ICsgIlBhdGgiXTsKLSAgICBpZiAocGF0aCA9PSBudWxs
KQotICAgICAgICBwYXRoID0gb3B0aW9ucy5iYXNlUGF0aDsKLSAgICBpZiAocGF0aCAmJiBwYXRo
LnNsaWNlKC0xKSAhPSAiLyIpCi0gICAgICAgIHBhdGggKz0gIi8iOwotICAgIHJldHVybiBwYXRo
ICsgY29tcG9uZW50ICsgIi0iICsgYmFzZSArIHRoaXMuZ2V0KCJzdWZmaXgiKTsKLX07CisgICAg
ICAgICAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOworICAgICAgICAgICAg
ICAgIHJlbW92ZWRGb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUuZGF0YS5yYW5nZSk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOwogCi1leHBvcnRz
LnNldE1vZHVsZVVybCA9IGZ1bmN0aW9uKG5hbWUsIHN1YnN0KSB7Ci0gICAgcmV0dXJuIG9wdGlv
bnMuJG1vZHVsZVVybHNbbmFtZV0gPSBzdWJzdDsKLX07CisgICAgICAgICAgICAgICAgdmFyIGZv
bGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShlbmQucm93KTsKKyAgICAgICAgICAgICAgICB2YXIg
aWR4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZW5kLnJvdywgZW5kLmNvbHVtbiwgc3RhcnQu
Y29sdW1uIC0gZW5kLmNvbHVtbik7CisgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0
Um93KC1sZW4pOwogCi1leHBvcnRzLmxvYWRNb2R1bGUgPSBmdW5jdGlvbihtb2R1bGVOYW1lLCBv
bkxvYWQpIHsKLSAgICB2YXIgbW9kdWxlLCBtb2R1bGVUeXBlOwotICAgIGlmIChBcnJheS5pc0Fy
cmF5KG1vZHVsZU5hbWUpKSB7Ci0gICAgICAgIG1vZHVsZVR5cGUgPSBtb2R1bGVOYW1lWzBdOwot
ICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZVsxXTsKLSAgICB9Ci0gICAgdHJ5IHsKLSAg
ICAgICAgbW9kdWxlID0gcmVxdWlyZShtb2R1bGVOYW1lKTsKLSAgICB9IGNhdGNoIChlKSB7fTsK
LSAgICBpZiAobW9kdWxlKQotICAgICAgICByZXR1cm4gb25Mb2FkKG1vZHVsZSk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBmb2xkTGluZUJlZm9yZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZmlyc3RS
b3cpOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmVCZWZvcmUgJiYgZm9sZExpbmVC
ZWZvcmUgIT09IGZvbGRMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZUJl
Zm9yZS5tZXJnZShmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9
IGZvbGRMaW5lQmVmb3JlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlkeCA9IGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5lKSArIDE7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgdmFyIGFmdGVyTG9hZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXF1aXJl
KFttb2R1bGVOYW1lXSwgZnVuY3Rpb24obW9kdWxlKSB7Ci0gICAgICAgICAgICBleHBvcnRzLl9l
bWl0KCJsb2FkLm1vZHVsZSIsIHtuYW1lOiBtb2R1bGVOYW1lLCBtb2R1bGU6IG1vZHVsZX0pOwot
ICAgICAgICAgICAgb25Mb2FkKG1vZHVsZSk7Ci0gICAgICAgIH0pOworICAgICAgICAgICAgICAg
IGZvciAoaWR4OyBpZHggPCBmb2xkTGluZXMubGVuZ3RoOyBpZHgrKykgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBlbmQucm93KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb2xkTGluZS5zaGlmdFJvdygtbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdzsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGFyZ3M7CisgICAgICAg
ICAgICAgICAgaWYgKHVzZVdyYXBNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBb
Zmlyc3RSb3csIDBdOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
bjsgaSsrKSBhcmdzLnB1c2goW10pOworICAgICAgICAgICAgICAgICAgICB0aGlzLiR3cmFwRGF0
YS5zcGxpY2UuYXBwbHkodGhpcy4kd3JhcERhdGEsIGFyZ3MpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZW4pOworICAgICAgICAg
ICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDApOworICAgICAgICAgICAgICAgICAg
ICB0aGlzLiRyb3dMZW5ndGhDYWNoZS5zcGxpY2UuYXBwbHkodGhpcy4kcm93TGVuZ3RoQ2FjaGUs
IGFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVz
ID0gdGhpcy4kZm9sZERhdGE7CisgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5n
ZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAgICAgICAgICAgICAgdmFyIGlkeCA9IDA7CisgICAg
ICAgICAgICAgICAgaWYgKGZvbGRMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjbXAg
PSBmb2xkTGluZS5yYW5nZS5jb21wYXJlSW5zaWRlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoY21wID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvbGRMaW5lID0gZm9sZExpbmUuc3BsaXQoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAt
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZmly
c3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pOworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZHggPSBmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSkgKyAxOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaWR4OyBpZHggPCBmb2xk
TGluZXMubGVuZ3RoOyBpZHgrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUg
PSBmb2xkTGluZXNbaWR4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0
LnJvdyA+PSBmaXJzdFJvdykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hp
ZnRSb3cobGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbiA9IE1hdGguYWJz
KGUuZGF0YS5yYW5nZS5zdGFydC5jb2x1bW4gLSBlLmRhdGEucmFuZ2UuZW5kLmNvbHVtbik7Cisg
ICAgICAgICAgICBpZiAoYWN0aW9uLmluZGV4T2YoInJlbW92ZSIpICE9IC0xKSB7CisgICAgICAg
ICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZS5kYXRhLnJhbmdl
KTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKHJlbW92ZWRGb2xkcyk7CisKKyAg
ICAgICAgICAgICAgICBsZW4gPSAtbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7CisgICAgICAgICAgICBpZiAo
Zm9sZExpbmUpIHsKKyAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhmaXJz
dFJvdywgc3RhcnQuY29sdW1uLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHVzZVdyYXBNb2RlICYmIHRoaXMuJHdyYXBEYXRhLmxlbmd0aCAhPSB0aGlzLmRv
Yy5nZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcigiZG9jLmdldExlbmd0
aCgpIGFuZCAkd3JhcERhdGEubGVuZ3RoIGhhdmUgdG8gYmUgdGhlIHNhbWUhIik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodXNlV3JhcE1vZGUpCisgICAgICAgICAgICB0aGlzLiR1cGRhdGVX
cmFwRGF0YShmaXJzdFJvdywgbGFzdFJvdyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRo
aXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKGZpcnN0Um93LCBsYXN0Um93KTsKKworICAgICAgICBy
ZXR1cm4gcmVtb3ZlZEZvbGRzOwogICAgIH07CiAKLSAgICBpZiAoIWV4cG9ydHMuZ2V0KCJwYWNr
YWdlZCIpKQotICAgICAgICByZXR1cm4gYWZ0ZXJMb2FkKCk7Ci0gICAgbmV0LmxvYWRTY3JpcHQo
ZXhwb3J0cy5tb2R1bGVVcmwobW9kdWxlTmFtZSwgbW9kdWxlVHlwZSksIGFmdGVyTG9hZCk7Ci19
OwotZXhwb3J0cy5pbml0ID0gZnVuY3Rpb24oKSB7Ci0gICAgb3B0aW9ucy5wYWNrYWdlZCA9IHJl
cXVpcmUucGFja2FnZWQgfHwgbW9kdWxlLnBhY2thZ2VkIHx8IChnbG9iYWwuZGVmaW5lICYmIGRl
ZmluZS5wYWNrYWdlZCk7CisgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUgPSBmdW5jdGlv
bihmaXJzdFJvdywgbGFzdFJvdywgYikgeworICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZVtm
aXJzdFJvd10gPSBudWxsOworICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZVtsYXN0Um93XSA9
IG51bGw7CisgICAgfTsKIAotICAgIGlmICghZ2xvYmFsLmRvY3VtZW50KQotICAgICAgICByZXR1
cm4gIiI7CisgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFz
dFJvdykgeworICAgICAgICB2YXIgbGluZXMgPSB0aGlzLmRvYy5nZXRBbGxMaW5lcygpOworICAg
ICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMuZ2V0VGFiU2l6ZSgpOworICAgICAgICB2YXIgd3JhcERh
dGEgPSB0aGlzLiR3cmFwRGF0YTsKKyAgICAgICAgdmFyIHdyYXBMaW1pdCA9IHRoaXMuJHdyYXBM
aW1pdDsKKyAgICAgICAgdmFyIHRva2VuczsKKyAgICAgICAgdmFyIGZvbGRMaW5lOwogCi0gICAg
dmFyIHNjcmlwdE9wdGlvbnMgPSB7fTsKLSAgICB2YXIgc2NyaXB0VXJsID0gIiI7CisgICAgICAg
IHZhciByb3cgPSBmaXJzdFJvdzsKKyAgICAgICAgbGFzdFJvdyA9IE1hdGgubWluKGxhc3RSb3cs
IGxpbmVzLmxlbmd0aCAtIDEpOworICAgICAgICB3aGlsZSAocm93IDw9IGxhc3RSb3cpIHsKKyAg
ICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShyb3csIGZvbGRMaW5lKTsKKyAg
ICAgICAgICAgIGlmICghZm9sZExpbmUpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMgPSB0aGlz
LiRnZXREaXNwbGF5VG9rZW5zKGxhbmcuc3RyaW5nVHJpbVJpZ2h0KGxpbmVzW3Jvd10pKTsKKyAg
ICAgICAgICAgICAgICB3cmFwRGF0YVtyb3ddID0gdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHModG9r
ZW5zLCB3cmFwTGltaXQsIHRhYlNpemUpOworICAgICAgICAgICAgICAgIHJvdyArKzsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG9rZW5zID0gW107CisgICAgICAgICAg
ICAgICAgZm9sZExpbmUud2FsayhmdW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxh
c3RDb2x1bW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3YWxrVG9rZW5zOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlzcGxheVRva2VucygK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIs
IHRva2Vucy5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnNb
MF0gPSBQTEFDRUhPTERFUl9TVEFSVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMTsgaSA8IHdhbGtUb2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2Fsa1Rva2Vuc1tpXSA9IFBMQUNFSE9MREVSX0JPRFk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrVG9rZW5zID0gdGhpcy4kZ2V0RGlz
cGxheVRva2VucygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbcm93XS5z
dWJzdHJpbmcobGFzdENvbHVtbiwgY29sdW1uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW5zLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbnMgPSB0b2tlbnMuY29uY2F0KHdhbGtUb2tlbnMpOworICAg
ICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksCisgICAgICAgICAgICAgICAgICAgIGZvbGRM
aW5lLmVuZC5yb3csCisgICAgICAgICAgICAgICAgICAgIGxpbmVzW2ZvbGRMaW5lLmVuZC5yb3dd
Lmxlbmd0aCArIDEKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHdoaWxlICh0
b2tlbnMubGVuZ3RoICE9IDAgJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSA+PSBTUEFDRSkK
KyAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnBvcCgpOwogCi0gICAgdmFyIHNjcmlwdHMgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Ci0gICAgZm9yICh2YXIgaT0w
OyBpPHNjcmlwdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHNjcmlwdCA9IHNjcmlwdHNb
aV07CisgICAgICAgICAgICAgICAgd3JhcERhdGFbZm9sZExpbmUuc3RhcnQucm93XQorICAgICAg
ICAgICAgICAgICAgICA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKHRva2Vucywgd3JhcExpbWl0
LCB0YWJTaXplKTsKKyAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93ICsgMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgdmFyIENIQVIgPSAxLAorICAg
ICAgICBDSEFSX0VYVCA9IDIsCisgICAgICAgIFBMQUNFSE9MREVSX1NUQVJUID0gMywKKyAgICAg
ICAgUExBQ0VIT0xERVJfQk9EWSA9ICA0LAorICAgICAgICBQVU5DVFVBVElPTiA9IDksCisgICAg
ICAgIFNQQUNFID0gMTAsCisgICAgICAgIFRBQiA9IDExLAorICAgICAgICBUQUJfU1BBQ0UgPSAx
MjsKIAotICAgICAgICB2YXIgc3JjID0gc2NyaXB0LnNyYyB8fCBzY3JpcHQuZ2V0QXR0cmlidXRl
KCJzcmMiKTsKLSAgICAgICAgaWYgKCFzcmMpCi0gICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICB2YXIgYXR0cmlidXRlcyA9IHNjcmlwdC5hdHRyaWJ1dGVzOwotICAgICAgICBmb3IgKHZh
ciBqPTAsIGw9YXR0cmlidXRlcy5sZW5ndGg7IGogPCBsOyBqKyspIHsKLSAgICAgICAgICAgIHZh
ciBhdHRyID0gYXR0cmlidXRlc1tqXTsKLSAgICAgICAgICAgIGlmIChhdHRyLm5hbWUuaW5kZXhP
ZigiZGF0YS1hY2UtIikgPT09IDApIHsKLSAgICAgICAgICAgICAgICBzY3JpcHRPcHRpb25zW2Rl
SHlwaGVuYXRlKGF0dHIubmFtZS5yZXBsYWNlKC9eZGF0YS1hY2UtLywgIiIpKV0gPSBhdHRyLnZh
bHVlOworICAgIHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzID0gZnVuY3Rpb24odG9rZW5zLCB3cmFw
TGltaXQpIHsKKyAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAg
cmV0dXJuIFtdOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNwbGl0cyA9IFtdOworICAgICAg
ICB2YXIgZGlzcGxheUxlbmd0aCA9IHRva2Vucy5sZW5ndGg7CisgICAgICAgIHZhciBsYXN0U3Bs
aXQgPSAwLCBsYXN0RG9jU3BsaXQgPSAwOworCisgICAgICAgIGZ1bmN0aW9uIGFkZFNwbGl0KHNj
cmVlblBvcykgeworICAgICAgICAgICAgdmFyIGRpc3BsYXllZCA9IHRva2Vucy5zbGljZShsYXN0
U3BsaXQsIHNjcmVlblBvcyk7CisgICAgICAgICAgICB2YXIgbGVuID0gZGlzcGxheWVkLmxlbmd0
aDsKKyAgICAgICAgICAgIGRpc3BsYXllZC5qb2luKCIiKS4KKyAgICAgICAgICAgICAgICByZXBs
YWNlKC8xMi9nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgbGVuIC09IDE7Cisg
ICAgICAgICAgICAgICAgfSkuCisgICAgICAgICAgICAgICAgcmVwbGFjZSgvMi9nLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgbGVuIC09IDE7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIGxhc3REb2NTcGxpdCArPSBsZW47CisgICAgICAgICAgICBzcGxpdHMu
cHVzaChsYXN0RG9jU3BsaXQpOworICAgICAgICAgICAgbGFzdFNwbGl0ID0gc2NyZWVuUG9zOwor
ICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGRpc3BsYXlMZW5ndGggLSBsYXN0U3BsaXQgPiB3
cmFwTGltaXQpIHsKKyAgICAgICAgICAgIHZhciBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1p
dDsKKyAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID49IFNQQUNFKSB7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKHRva2Vuc1tzcGxpdF0gPj0gU1BBQ0UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3BsaXQgKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZFNwbGl0
KHNwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVSX1NUQVJUCisgICAgICAgICAg
ICAgICAgfHwgdG9rZW5zW3NwbGl0XSA9PSBQTEFDRUhPTERFUl9CT0RZKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZvciAoc3BsaXQ7IHNwbGl0ICE9IGxhc3RTcGxpdCAtIDE7IHNw
bGl0LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VI
T0xERVJfU1RBUlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzcGxp
dCA+IGxhc3RTcGxpdCkgeworICAgICAgICAgICAgICAgICAgICBhZGRTcGxpdChzcGxpdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdDsKKyAgICAgICAgICAgICAgICBm
b3IgKHNwbGl0OyBzcGxpdCA8IHRva2Vucy5sZW5ndGg7IHNwbGl0KyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gIT0gUExBQ0VIT0xERVJfQk9EWSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNwbGl0
ID09IHRva2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBCcmVh
a3MgdGhlIHdoaWxlLWxvb3AuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFk
ZFNwbGl0KHNwbGl0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhciBtaW5TcGxpdCA9IE1hdGgubWF4KHNwbGl0IC0gMTAsIGxhc3RTcGxp
dCAtIDEpOworICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3Nw
bGl0XSA8IFBMQUNFSE9MREVSX1NUQVJUKSB7CisgICAgICAgICAgICAgICAgc3BsaXQgLS07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBtaW5TcGxpdCAmJiB0b2tl
bnNbc3BsaXRdID09IFBVTkNUVUFUSU9OKSB7CisgICAgICAgICAgICAgICAgc3BsaXQgLS07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BsaXQgPiBtaW5TcGxpdCkgeworICAgICAg
ICAgICAgICAgIGFkZFNwbGl0KCsrc3BsaXQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc3BsaXQgPSBsYXN0U3BsaXQgKyB3cmFwTGltaXQ7
CisgICAgICAgICAgICBhZGRTcGxpdChzcGxpdCk7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHNwbGl0czsKKyAgICB9OworICAgIHRoaXMuJGdldERpc3BsYXlUb2tlbnMgPSBmdW5jdGlvbihz
dHIsIG9mZnNldCkgeworICAgICAgICB2YXIgYXJyID0gW107CisgICAgICAgIHZhciB0YWJTaXpl
OworICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDsKIAotICAgICAgICB2YXIgbSA9IHNyYy5t
YXRjaCgvXiguKilcL2FjZShcLVx3Kyk/XC5qcyhcP3wkKS8pOwotICAgICAgICBpZiAobSkKLSAg
ICAgICAgICAgIHNjcmlwdFVybCA9IG1bMV07Ci0gICAgfQorICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNv
ZGVBdChpKTsKKyAgICAgICAgICAgIGlmIChjID09IDkpIHsKKyAgICAgICAgICAgICAgICB0YWJT
aXplID0gdGhpcy5nZXRTY3JlZW5UYWJTaXplKGFyci5sZW5ndGggKyBvZmZzZXQpOworICAgICAg
ICAgICAgICAgIGFyci5wdXNoKFRBQik7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDE7
IG4gPCB0YWJTaXplOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goVEFCX1NQ
QUNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChjID09IDMyKSB7CisgICAgICAgICAgICAgICAgYXJyLnB1c2goU1BBQ0UpOworICAgICAg
ICAgICAgfSBlbHNlIGlmKChjID4gMzkgJiYgYyA8IDQ4KSB8fCAoYyA+IDU3ICYmIGMgPCA2NCkp
IHsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChQVU5DVFVBVElPTik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmIChjID49IDB4MTEwMCAmJiBpc0Z1bGxXaWR0aChjKSkgewor
ICAgICAgICAgICAgICAgIGFyci5wdXNoKENIQVIsIENIQVJfRVhUKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgYXJyLnB1c2goQ0hBUik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycjsKKyAgICB9OworICAgIHRoaXMuJGdldFN0cmlu
Z1NjcmVlbldpZHRoID0gZnVuY3Rpb24oc3RyLCBtYXhTY3JlZW5Db2x1bW4sIHNjcmVlbkNvbHVt
bikgeworICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IDApCisgICAgICAgICAgICByZXR1
cm4gWzAsIDBdOworICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IG51bGwpCisgICAgICAg
ICAgICBtYXhTY3JlZW5Db2x1bW4gPSBJbmZpbml0eTsKKyAgICAgICAgc2NyZWVuQ29sdW1uID0g
c2NyZWVuQ29sdW1uIHx8IDA7CisKKyAgICAgICAgdmFyIGMsIGNvbHVtbjsKKyAgICAgICAgZm9y
IChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykgeworICAgICAgICAg
ICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7CisgICAgICAgICAgICBpZiAoYyA9PSA5KSB7
CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShz
Y3JlZW5Db2x1bW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAw
eDExMDAgJiYgaXNGdWxsV2lkdGgoYykpIHsKKyAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4g
Kz0gMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1u
ICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2NyZWVuQ29sdW1uID4gbWF4
U2NyZWVuQ29sdW1uKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gW3NjcmVlbkNvbHVtbiwgY29sdW1uXTsKKyAgICB9
OworICAgIHRoaXMuZ2V0Um93TGVuZ3RoID0gZnVuY3Rpb24ocm93KSB7CisgICAgICAgIGlmICgh
dGhpcy4kdXNlV3JhcE1vZGUgfHwgIXRoaXMuJHdyYXBEYXRhW3Jvd10pIHsKKyAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHdy
YXBEYXRhW3Jvd10ubGVuZ3RoICsgMTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGhpcy5nZXRT
Y3JlZW5MYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93KSB7CisgICAgICAgIHZhciBw
b3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIE51bWJlci5NQVhf
VkFMVUUpOworICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuQ29sdW1uKHBvcy5y
b3csIHBvcy5jb2x1bW4pOworICAgIH07CisgICAgdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1
bW4gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgeworICAgICAgICB2YXIgc2NyZWVuUm93
ID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGRvY1JvdywgZG9jQ29sdW1uKTsKKyAgICAgICAg
cmV0dXJuIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihzY3JlZW5Sb3cpOworICAgIH07Cisg
ICAgdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlvbiA9IGZ1bmN0aW9uKGRvY1Jv
dywgZG9jQ29sdW1uKSB7CisgICAgICAgIHZhciBzY3JlZW5Sb3cgPSB0aGlzLmRvY3VtZW50VG9T
Y3JlZW5Sb3coZG9jUm93LCBkb2NDb2x1bW4pOworICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5U
b0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBOdW1iZXIuTUFYX1ZBTFVFIC8gMTApOworICAg
IH07CisgICAgdGhpcy5nZXRSb3dTcGxpdERhdGEgPSBmdW5jdGlvbihyb3cpIHsKKyAgICAgICAg
aWYgKCF0aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiR3cmFwRGF0YVtyb3dd
OworICAgICAgICB9CisgICAgfTsKKyAgICB0aGlzLmdldFNjcmVlblRhYlNpemUgPSBmdW5jdGlv
bihzY3JlZW5Db2x1bW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJHRhYlNpemUgLSBzY3JlZW5D
b2x1bW4gJSB0aGlzLiR0YWJTaXplOworICAgIH07CiAKLSAgICBpZiAoc2NyaXB0VXJsKSB7Ci0g
ICAgICAgIHNjcmlwdE9wdGlvbnMuYmFzZSA9IHNjcmlwdE9wdGlvbnMuYmFzZSB8fCBzY3JpcHRV
cmw7Ci0gICAgICAgIHNjcmlwdE9wdGlvbnMucGFja2FnZWQgPSB0cnVlOwotICAgIH0KIAotICAg
IHNjcmlwdE9wdGlvbnMuYmFzZVBhdGggPSBzY3JpcHRPcHRpb25zLmJhc2U7Ci0gICAgc2NyaXB0
T3B0aW9ucy53b3JrZXJQYXRoID0gc2NyaXB0T3B0aW9ucy53b3JrZXJQYXRoIHx8IHNjcmlwdE9w
dGlvbnMuYmFzZTsKLSAgICBzY3JpcHRPcHRpb25zLm1vZGVQYXRoID0gc2NyaXB0T3B0aW9ucy5t
b2RlUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7Ci0gICAgc2NyaXB0T3B0aW9ucy50aGVtZVBh
dGggPSBzY3JpcHRPcHRpb25zLnRoZW1lUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7Ci0gICAg
ZGVsZXRlIHNjcmlwdE9wdGlvbnMuYmFzZTsKKyAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRSb3cg
PSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgeworICAgICAgICByZXR1cm4gdGhp
cy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pLnJvdzsK
KyAgICB9OwogCi0gICAgZm9yICh2YXIga2V5IGluIHNjcmlwdE9wdGlvbnMpCi0gICAgICAgIGlm
ICh0eXBlb2Ygc2NyaXB0T3B0aW9uc1trZXldICE9PSAidW5kZWZpbmVkIikKLSAgICAgICAgICAg
IGV4cG9ydHMuc2V0KGtleSwgc2NyaXB0T3B0aW9uc1trZXldKTsKLX07CiAKLWZ1bmN0aW9uIGRl
SHlwaGVuYXRlKHN0cikgewotICAgIHJldHVybiBzdHIucmVwbGFjZSgvLSguKS9nLCBmdW5jdGlv
bihtLCBtMSkgeyByZXR1cm4gbTEudG9VcHBlckNhc2UoKTsgfSk7Ci19CisgICAgdGhpcy5zY3Jl
ZW5Ub0RvY3VtZW50Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4pIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywg
c2NyZWVuQ29sdW1uKS5jb2x1bW47CisgICAgfTsKKyAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRQ
b3NpdGlvbiA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKSB7CisgICAgICAgIGlm
IChzY3JlZW5Sb3cgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHtyb3c6IDAsIGNvbHVtbjogMH07
CiAKLX0pOwotYWNlLmRlZmluZSgnYWNlL2xpYi9uZXQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS9saWIvdXNlcmFnZW50J10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9y
dHMsIG1vZHVsZSkgeworICAgICAgICB2YXIgbGluZTsKKyAgICAgICAgdmFyIGRvY1JvdyA9IDA7
CisgICAgICAgIHZhciBkb2NDb2x1bW4gPSAwOworICAgICAgICB2YXIgY29sdW1uOworICAgICAg
ICB2YXIgcm93ID0gMDsKKyAgICAgICAgdmFyIHJvd0xlbmd0aCA9IDA7CiAKKyAgICAgICAgdmFy
IHJvd0NhY2hlID0gdGhpcy4kc2NyZWVuUm93Q2FjaGU7CisgICAgICAgIHZhciBpID0gdGhpcy4k
Z2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgc2NyZWVuUm93KTsKKyAgICAgICAgdmFyIGwgPSBy
b3dDYWNoZS5sZW5ndGg7CisgICAgICAgIGlmIChsICYmIGkgPj0gMCkgeworICAgICAgICAgICAg
dmFyIHJvdyA9IHJvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRvY1JvdyA9IHRoaXMuJGRv
Y1Jvd0NhY2hlW2ldOworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBzY3JlZW5Sb3cgPiByb3dD
YWNoZVtsIC0gMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZG9DYWNoZSA9
ICFsOworICAgICAgICB9CiAKLXZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuL3VzZXJhZ2VudCIp
OworICAgICAgICB2YXIgbWF4Um93ID0gdGhpcy5nZXRMZW5ndGgoKSAtIDE7CisgICAgICAgIHZh
ciBmb2xkTGluZSA9IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1Jvdyk7CisgICAgICAgIHZhciBm
b2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OwogCi1l
eHBvcnRzLmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7Ci0gICAgdmFyIHhociA9IGV4
cG9ydHMuY3JlYXRlWGhyKCk7Ci0gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7Ci0gICAg
eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIChldnQpIHsKLSAgICAgICAgaWYgKHho
ci5yZWFkeVN0YXRlID09PSA0KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayh4aHIucmVzcG9uc2VU
ZXh0KTsKKyAgICAgICAgd2hpbGUgKHJvdyA8PSBzY3JlZW5Sb3cpIHsKKyAgICAgICAgICAgIHJv
d0xlbmd0aCA9IHRoaXMuZ2V0Um93TGVuZ3RoKGRvY1Jvdyk7CisgICAgICAgICAgICBpZiAocm93
ICsgcm93TGVuZ3RoIC0gMSA+PSBzY3JlZW5Sb3cgfHwgZG9jUm93ID49IG1heFJvdykgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICByb3cgKz0gcm93TGVuZ3RoOworICAgICAgICAgICAgICAgIGRvY1JvdysrOworICAgICAgICAg
ICAgICAgIGlmIChkb2NSb3cgPiBmb2xkU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9j
Um93ID0gZm9sZExpbmUuZW5kLnJvdysxOworICAgICAgICAgICAgICAgICAgICBmb2xkTGluZSA9
IHRoaXMuZ2V0TmV4dEZvbGRMaW5lKGRvY1JvdywgZm9sZExpbmUpOworICAgICAgICAgICAgICAg
ICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGRvQ2FjaGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5w
dXNoKGRvY1Jvdyk7CisgICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChy
b3cpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfTsKLSAgICB4aHIuc2VuZChudWxs
KTsKLX07CiAKLXZhciBwcm9nSWRzID0gWydNc3htbDIuWE1MSFRUUCcsICdNaWNyb3NvZnQuWE1M
SFRUUCcsICdNc3htbDIuWE1MSFRUUC40LjAnXTsKLQotZXhwb3J0cy5jcmVhdGVYaHIgPSBmdW5j
dGlvbigpIHsKLSAgICB2YXIgeGhyLCBpLCBwcm9nSWQ7Ci0gICAgaWYgKHR5cGVvZiBYTUxIdHRw
UmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVx
dWVzdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsK
LSAgICAgICAgICAgIHByb2dJZCA9IHByb2dJZHNbaV07Ci0gICAgICAgICAgICB0cnkgewotICAg
ICAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KHByb2dJZCk7Ci0gICAgICAgICAg
ICB9IGNhdGNoIChlKSB7fQorICAgICAgICBpZiAoZm9sZExpbmUgJiYgZm9sZExpbmUuc3RhcnQu
cm93IDw9IGRvY1JvdykgeworICAgICAgICAgICAgbGluZSA9IHRoaXMuZ2V0Rm9sZERpc3BsYXlM
aW5lKGZvbGRMaW5lKTsKKyAgICAgICAgICAgIGRvY1JvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsK
KyAgICAgICAgfSBlbHNlIGlmIChyb3cgKyByb3dMZW5ndGggPD0gc2NyZWVuUm93IHx8IGRvY1Jv
dyA+IG1heFJvdykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICByb3c6
IG1heFJvdywKKyAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuZ2V0TGluZShtYXhSb3cpLmxl
bmd0aAorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZSA9
IHRoaXMuZ2V0TGluZShkb2NSb3cpOworICAgICAgICAgICAgZm9sZExpbmUgPSBudWxsOworICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4aHIpIHsKLSAgICAgICAgICAgICAgICBwcm9nSWRz
ID0gW3Byb2dJZF07ICAvLyBzbyBmYXN0ZXIgbmV4dCB0aW1lCi0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgeworICAgICAgICAgICAgdmFyIHNw
bGl0cyA9IHRoaXMuJHdyYXBEYXRhW2RvY1Jvd107CisgICAgICAgICAgICBpZiAoc3BsaXRzKSB7
CisgICAgICAgICAgICAgICAgY29sdW1uID0gc3BsaXRzW3NjcmVlblJvdyAtIHJvd107CisgICAg
ICAgICAgICAgICAgaWYoc2NyZWVuUm93ID4gcm93ICYmIHNwbGl0cy5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZG9jQ29sdW1uID0gc3BsaXRzW3NjcmVlblJvdyAtIHJvdyAtIDFdIHx8
IHNwbGl0c1tzcGxpdHMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBs
aW5lLnN1YnN0cmluZyhkb2NDb2x1bW4pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgIH0KIAotICAgIGlmICgheGhyKSB7Ci0gICAgICAgIHRocm93IG5l
dyBFcnJvcigiY3JlYXRlWGhyKCk6IFhNTEh0dHBSZXF1ZXN0IG5vdCBhdmFpbGFibGUiKTsKLSAg
ICB9CisgICAgICAgIGRvY0NvbHVtbiArPSB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChsaW5l
LCBzY3JlZW5Db2x1bW4pWzFdOworICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUgJiYgZG9j
Q29sdW1uID49IGNvbHVtbikKKyAgICAgICAgICAgIGRvY0NvbHVtbiA9IGNvbHVtbiAtIDE7CiAK
LSAgICByZXR1cm4geGhyOwotfTsKKyAgICAgICAgaWYgKGZvbGRMaW5lKQorICAgICAgICAgICAg
cmV0dXJuIGZvbGRMaW5lLmlkeFRvUG9zaXRpb24oZG9jQ29sdW1uKTsKIAotZXhwb3J0cy5sb2Fk
U2NyaXB0ID0gZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2spIHsKLSAgICB2YXIgaGVhZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07Ci0gICAgdmFyIHMgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgICAgICAgcmV0dXJuIHtyb3c6IGRvY1Jvdywg
Y29sdW1uOiBkb2NDb2x1bW59OworICAgIH07CisgICAgdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9z
aXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgeworICAgICAgICBpZiAodHlwZW9m
IGRvY0NvbHVtbiA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy4k
Y2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cucm93LCBkb2NSb3cuY29sdW1uKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChk
b2NSb3csIGRvY0NvbHVtbik7CiAKLSAgICBzLnNyYyA9IHBhdGg7Ci0gICAgaGVhZC5hcHBlbmRD
aGlsZChzKTsKKyAgICAgICAgZG9jUm93ID0gcG9zLnJvdzsKKyAgICAgICAgZG9jQ29sdW1uID0g
cG9zLmNvbHVtbjsKIAotICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSkKLSAgICAgICAgcy5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLnJlYWR5U3Rh
dGUgPT0gJ2xvYWRlZCcgJiYgY2FsbGJhY2soKTsKLSAgICAgICAgfTsKLSAgICBlbHNlCi0gICAg
ICAgIHMub25sb2FkID0gY2FsbGJhY2s7Ci19OworICAgICAgICB2YXIgc2NyZWVuUm93ID0gMDsK
KyAgICAgICAgdmFyIGZvbGRTdGFydFJvdyA9IG51bGw7CisgICAgICAgIHZhciBmb2xkID0gbnVs
bDsKKyAgICAgICAgZm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGRvY1JvdywgZG9jQ29sdW1uLCAxKTsK
KyAgICAgICAgaWYgKGZvbGQpIHsKKyAgICAgICAgICAgIGRvY1JvdyA9IGZvbGQuc3RhcnQucm93
OworICAgICAgICAgICAgZG9jQ29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47CisgICAgICAgIH0K
IAotfSk7CisgICAgICAgIHZhciByb3dFbmQsIHJvdyA9IDA7CiAKLWFjZS5kZWZpbmUoJ2FjZS9s
aWIvZXZlbnRfZW1pdHRlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgXSwgZnVu
Y3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAKKyAgICAgICAgdmFyIHJvd0NhY2hl
ID0gdGhpcy4kZG9jUm93Q2FjaGU7CisgICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJ
bmRleChyb3dDYWNoZSwgZG9jUm93KTsKKyAgICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7
CisgICAgICAgIGlmIChsICYmIGkgPj0gMCkgeworICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0Nh
Y2hlW2ldOworICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuJHNjcmVlblJvd0NhY2hl
W2ldOworICAgICAgICAgICAgdmFyIGRvQ2FjaGUgPSBkb2NSb3cgPiByb3dDYWNoZVtsIC0gMV07
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZG9DYWNoZSA9ICFsOworICAgICAg
ICB9CiAKLXZhciBFdmVudEVtaXR0ZXIgPSB7fTsKKyAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhp
cy5nZXROZXh0Rm9sZExpbmUocm93KTsKKyAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5l
ID9mb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5OwogCi1FdmVudEVtaXR0ZXIuX2VtaXQgPQot
RXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7Ci0g
ICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge307Ci0gICAg
dGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8IHt9OworICAg
ICAgICB3aGlsZSAocm93IDwgZG9jUm93KSB7CisgICAgICAgICAgICBpZiAocm93ID49IGZvbGRT
dGFydCkgeworICAgICAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOwor
ICAgICAgICAgICAgICAgIGlmIChyb3dFbmQgPiBkb2NSb3cpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUo
cm93RW5kLCBmb2xkTGluZSk7CisgICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUg
P2ZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICByb3dFbmQgPSByb3cgKyAxOworICAgICAgICAgICAg
fQogCi0gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8
fCBbXTsKLSAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZl
bnROYW1lXTsKLSAgICBpZiAoIWxpc3RlbmVycy5sZW5ndGggJiYgIWRlZmF1bHRIYW5kbGVyKQot
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzY3JlZW5Sb3cgKz0gdGhpcy5nZXRSb3dMZW5n
dGgocm93KTsKKyAgICAgICAgICAgIHJvdyA9IHJvd0VuZDsKIAotICAgIGlmICh0eXBlb2YgZSAh
PSAib2JqZWN0IiB8fCAhZSkKLSAgICAgICAgZSA9IHt9OworICAgICAgICAgICAgaWYgKGRvQ2Fj
aGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZS5wdXNoKHJvdyk7CisgICAg
ICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChzY3JlZW5Sb3cpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0ZXh0TGluZSA9ICIiOworICAgICAgICBp
ZiAoZm9sZExpbmUgJiYgcm93ID49IGZvbGRTdGFydCkgeworICAgICAgICAgICAgdGV4dExpbmUg
PSB0aGlzLmdldEZvbGREaXNwbGF5TGluZShmb2xkTGluZSwgZG9jUm93LCBkb2NDb2x1bW4pOwor
ICAgICAgICAgICAgZm9sZFN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGV4dExpbmUgPSB0aGlzLmdldExpbmUoZG9jUm93KS5zdWJz
dHJpbmcoMCwgZG9jQ29sdW1uKTsKKyAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGRvY1JvdzsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAg
IHZhciB3cmFwUm93ID0gdGhpcy4kd3JhcERhdGFbZm9sZFN0YXJ0Um93XTsKKyAgICAgICAgICAg
IHZhciBzY3JlZW5Sb3dPZmZzZXQgPSAwOworICAgICAgICAgICAgd2hpbGUgKHRleHRMaW5lLmxl
bmd0aCA+PSB3cmFwUm93W3NjcmVlblJvd09mZnNldF0pIHsKKyAgICAgICAgICAgICAgICBzY3Jl
ZW5Sb3cgKys7CisgICAgICAgICAgICAgICAgc2NyZWVuUm93T2Zmc2V0Kys7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0ZXh0TGluZSA9IHRleHRMaW5lLnN1YnN0cmluZygKKyAgICAgICAg
ICAgICAgICB3cmFwUm93W3NjcmVlblJvd09mZnNldCAtIDFdIHx8IDAsIHRleHRMaW5lLmxlbmd0
aAorICAgICAgICAgICAgKTsKKyAgICAgICAgfQogCi0gICAgaWYgKCFlLnR5cGUpCi0gICAgICAg
IGUudHlwZSA9IGV2ZW50TmFtZTsKLSAgICAKLSAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKSB7
Ci0gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0
aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7Ci0gICAgICAgIH07Ci0gICAgfQotICAgIAot
ICAgIGlmICghZS5wcmV2ZW50RGVmYXVsdCkgewotICAgICAgICBlLnByZXZlbnREZWZhdWx0ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOwor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcm93OiBzY3JlZW5Sb3csCisgICAgICAgICAg
ICBjb2x1bW46IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKHRleHRMaW5lKVswXQogICAgICAg
ICB9OwotICAgIH0KLQotICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgbGlzdGVuZXJzW2ldKGUpOwotICAgICAgICBpZiAoZS5wcm9wYWdhdGlvblN0
b3BwZWQpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGRlZmF1bHRI
YW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCi0gICAgICAgIHJldHVybiBkZWZhdWx0SGFu
ZGxlcihlKTsKLX07CisgICAgfTsKKyAgICB0aGlzLmRvY3VtZW50VG9TY3JlZW5Db2x1bW4gPSBm
dW5jdGlvbihyb3csIGRvY0NvbHVtbikgeworICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRv
U2NyZWVuUG9zaXRpb24ocm93LCBkb2NDb2x1bW4pLmNvbHVtbjsKKyAgICB9OworICAgIHRoaXMu
ZG9jdW1lbnRUb1NjcmVlblJvdyA9IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihkb2NSb3csIGRvY0NvbHVt
bikucm93OworICAgIH07CisgICAgdGhpcy5nZXRTY3JlZW5MZW5ndGggPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIHNjcmVlblJvd3MgPSAwOworICAgICAgICB2YXIgZm9sZCA9IG51bGw7Cisg
ICAgICAgIGlmICghdGhpcy4kdXNlV3JhcE1vZGUpIHsKKyAgICAgICAgICAgIHNjcmVlblJvd3Mg
PSB0aGlzLmdldExlbmd0aCgpOworICAgICAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9s
ZERhdGE7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgZm9sZCA9IGZvbGREYXRhW2ldOworICAgICAgICAgICAg
ICAgIHNjcmVlblJvd3MgLT0gZm9sZC5lbmQucm93IC0gZm9sZC5zdGFydC5yb3c7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbGFzdFJvdyA9IHRoaXMu
JHdyYXBEYXRhLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciByb3cgPSAwLCBpID0gMDsKKyAgICAg
ICAgICAgIHZhciBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsKKyAgICAgICAgICAgIHZhciBm
b2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOkluZmluaXR5OwogCi1FdmVudEVtaXR0
ZXIuc2V0RGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7Ci0g
ICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8IHt9Owot
ICAgIAotICAgIGlmICh0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZXZlbnROYW1lXSkKLSAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJUaGUgZGVmYXVsdCBoYW5kbGVyIGZvciAnIiArIGV2ZW50TmFtZSAr
ICInIGlzIGFscmVhZHkgc2V0Iik7Ci0gICAgICAgIAotICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVy
c1tldmVudE5hbWVdID0gY2FsbGJhY2s7Ci19OworICAgICAgICAgICAgd2hpbGUgKHJvdyA8IGxh
c3RSb3cpIHsKKyAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHRoaXMuJHdyYXBEYXRhW3Jv
d10ubGVuZ3RoICsgMTsKKyAgICAgICAgICAgICAgICByb3cgKys7CisgICAgICAgICAgICAgICAg
aWYgKHJvdyA+IGZvbGRTdGFydCkgeworICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xkLmVu
ZC5yb3crMTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZCA9IHRoaXMuJGZvbGREYXRhW2krK107
CisgICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGQgP2ZvbGQuc3RhcnQucm93IDpJ
bmZpbml0eTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAot
RXZlbnRFbWl0dGVyLm9uID0KLUV2ZW50RW1pdHRlci5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rp
b24oZXZlbnROYW1lLCBjYWxsYmFjaykgewotICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlz
Ll9ldmVudFJlZ2lzdHJ5IHx8IHt9OworICAgICAgICByZXR1cm4gc2NyZWVuUm93czsKKyAgICB9
OworICAgIGZ1bmN0aW9uIGlzRnVsbFdpZHRoKGMpIHsKKyAgICAgICAgaWYgKGMgPCAweDExMDAp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBjID49IDB4MTEwMCAm
JiBjIDw9IDB4MTE1RiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDExQTMgJiYgYyA8PSAweDEx
QTcgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgxMUZBICYmIGMgPD0gMHgxMUZGIHx8CisgICAg
ICAgICAgICAgICBjID49IDB4MjMyOSAmJiBjIDw9IDB4MjMyQSB8fAorICAgICAgICAgICAgICAg
YyA+PSAweDJFODAgJiYgYyA8PSAweDJFOTkgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgyRTlC
ICYmIGMgPD0gMHgyRUYzIHx8CisgICAgICAgICAgICAgICBjID49IDB4MkYwMCAmJiBjIDw9IDB4
MkZENSB8fAorICAgICAgICAgICAgICAgYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkIgfHwKKyAg
ICAgICAgICAgICAgIGMgPj0gMHgzMDAwICYmIGMgPD0gMHgzMDNFIHx8CisgICAgICAgICAgICAg
ICBjID49IDB4MzA0MSAmJiBjIDw9IDB4MzA5NiB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMw
OTkgJiYgYyA8PSAweDMwRkYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMTA1ICYmIGMgPD0g
MHgzMTJEIHx8CisgICAgICAgICAgICAgICBjID49IDB4MzEzMSAmJiBjIDw9IDB4MzE4RSB8fAor
ICAgICAgICAgICAgICAgYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxQkEgfHwKKyAgICAgICAgICAg
ICAgIGMgPj0gMHgzMUMwICYmIGMgPD0gMHgzMUUzIHx8CisgICAgICAgICAgICAgICBjID49IDB4
MzFGMCAmJiBjIDw9IDB4MzIxRSB8fAorICAgICAgICAgICAgICAgYyA+PSAweDMyMjAgJiYgYyA8
PSAweDMyNDcgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHgzMjUwICYmIGMgPD0gMHgzMkZFIHx8
CisgICAgICAgICAgICAgICBjID49IDB4MzMwMCAmJiBjIDw9IDB4NERCRiB8fAorICAgICAgICAg
ICAgICAgYyA+PSAweDRFMDAgJiYgYyA8PSAweEE0OEMgfHwKKyAgICAgICAgICAgICAgIGMgPj0g
MHhBNDkwICYmIGMgPD0gMHhBNEM2IHx8CisgICAgICAgICAgICAgICBjID49IDB4QTk2MCAmJiBj
IDw9IDB4QTk3QyB8fAorICAgICAgICAgICAgICAgYyA+PSAweEFDMDAgJiYgYyA8PSAweEQ3QTMg
fHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhEN0IwICYmIGMgPD0gMHhEN0M2IHx8CisgICAgICAg
ICAgICAgICBjID49IDB4RDdDQiAmJiBjIDw9IDB4RDdGQiB8fAorICAgICAgICAgICAgICAgYyA+
PSAweEY5MDAgJiYgYyA8PSAweEZBRkYgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhGRTEwICYm
IGMgPD0gMHhGRTE5IHx8CisgICAgICAgICAgICAgICBjID49IDB4RkUzMCAmJiBjIDw9IDB4RkU1
MiB8fAorICAgICAgICAgICAgICAgYyA+PSAweEZFNTQgJiYgYyA8PSAweEZFNjYgfHwKKyAgICAg
ICAgICAgICAgIGMgPj0gMHhGRTY4ICYmIGMgPD0gMHhGRTZCIHx8CisgICAgICAgICAgICAgICBj
ID49IDB4RkYwMSAmJiBjIDw9IDB4RkY2MCB8fAorICAgICAgICAgICAgICAgYyA+PSAweEZGRTAg
JiYgYyA8PSAweEZGRTY7CisgICAgfTsKIAotICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVu
dFJlZ2lzdHJ5W2V2ZW50TmFtZV07Ci0gICAgaWYgKCFsaXN0ZW5lcnMpCi0gICAgICAgIGxpc3Rl
bmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSA9IFtdOworfSkuY2FsbChFZGl0
U2Vzc2lvbi5wcm90b3R5cGUpOwogCi0gICAgaWYgKGxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNr
KSA9PSAtMSkKLSAgICAgICAgbGlzdGVuZXJzLnB1c2goY2FsbGJhY2spOwotfTsKK3JlcXVpcmUo
Ii4vZWRpdF9zZXNzaW9uL2ZvbGRpbmciKS5Gb2xkaW5nLmNhbGwoRWRpdFNlc3Npb24ucHJvdG90
eXBlKTsKK3JlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2giKS5CcmFja2V0TWF0
Y2guY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOwogCi1FdmVudEVtaXR0ZXIucmVtb3ZlTGlz
dGVuZXIgPQotRXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVu
dE5hbWUsIGNhbGxiYWNrKSB7Ci0gICAgdGhpcy5fZXZlbnRSZWdpc3RyeSA9IHRoaXMuX2V2ZW50
UmVnaXN0cnkgfHwge307CiAKLSAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRSZWdpc3Ry
eVtldmVudE5hbWVdOwotICAgIGlmICghbGlzdGVuZXJzKQotICAgICAgICByZXR1cm47Citjb25m
aWcuZGVmaW5lT3B0aW9ucyhFZGl0U2Vzc2lvbi5wcm90b3R5cGUsICJzZXNzaW9uIiwgeworICAg
IHdyYXA6IHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgICAgaWYg
KCF2YWx1ZSB8fCB2YWx1ZSA9PSAib2ZmIikKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGZhbHNl
OworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gImZyZWUiKQorICAgICAgICAgICAgICAg
IHZhbHVlID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PSAic3Ry
aW5nIikKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCkgfHwgZmFs
c2U7CiAKLSAgICB2YXIgaW5kZXggPSBsaXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjayk7Ci0gICAg
aWYgKGluZGV4ICE9PSAtMSkKLSAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7Ci19
OworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIHRoaXMuc2V0VXNl
V3JhcE1vZGUoZmFsc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29sID0gdHlwZW9mIHZhbHVlID09ICJudW1iZXIiICYmIHZhbHVlOworICAgICAgICAgICAg
ICAgIHRoaXMuc2V0VXNlV3JhcE1vZGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5zZXRX
cmFwTGltaXRSYW5nZSh2YWx1ZSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy4kd3JhcCA9IHZhbHVlOworICAgICAgICB9LAorICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlV3JhcE1vZGUoKSA/IHRoaXMuZ2V0V3Jh
cExpbWl0UmFuZ2UoKS5taW4gfHwgImZyZWUiIDogIm9mZiI7CisgICAgICAgIH0sCisgICAgICAg
IGhhbmRsZXNTZXQ6IHRydWUKKyAgICB9LAorICAgIGZpcnN0TGluZU51bWJlcjogeworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uKCkge3RoaXMuX2VtaXQoImNoYW5nZUJyZWFrcG9pbnQiKTt9LAorICAg
ICAgICBpbml0aWFsVmFsdWU6IDEKKyAgICB9LAorICAgIHVzZVdvcmtlcjogeworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKHVzZVdvcmtlcikgeworICAgICAgICAgICAgdGhpcy4kdXNlV29ya2VyID0g
dXNlV29ya2VyOwogCi1FdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24o
ZXZlbnROYW1lKSB7Ci0gICAgaWYgKHRoaXMuX2V2ZW50UmVnaXN0cnkpIHRoaXMuX2V2ZW50UmVn
aXN0cnlbZXZlbnROYW1lXSA9IFtdOwotfTsKKyAgICAgICAgICAgIHRoaXMuJHN0b3BXb3JrZXIo
KTsKKyAgICAgICAgICAgIGlmICh1c2VXb3JrZXIpCisgICAgICAgICAgICAgICAgdGhpcy4kc3Rh
cnRXb3JrZXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlCisgICAg
fSwKKyAgICB1c2VTb2Z0VGFiczoge2luaXRpYWxWYWx1ZTogdHJ1ZX0sCisgICAgdGFiU2l6ZTog
eworICAgICAgICBzZXQ6IGZ1bmN0aW9uKHRhYlNpemUpIHsKKyAgICAgICAgICAgIGlmIChpc05h
Tih0YWJTaXplKSB8fCB0aGlzLiR0YWJTaXplID09PSB0YWJTaXplKSByZXR1cm47CiAKLWV4cG9y
dHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOworICAgICAgICAgICAgdGhpcy4kbW9kaWZp
ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy4kcm93TGVuZ3RoQ2FjaGUgPSBbXTsKKyAgICAg
ICAgICAgIHRoaXMuJHRhYlNpemUgPSB0YWJTaXplOworICAgICAgICAgICAgdGhpcy5fZW1pdCgi
Y2hhbmdlVGFiU2l6ZSIpOworICAgICAgICB9LAorICAgICAgICBpbml0aWFsVmFsdWU6IDQsCisg
ICAgICAgIGhhbmRsZXNTZXQ6IHRydWUKKyAgICB9Cit9KTsKIAorZXhwb3J0cy5FZGl0U2Vzc2lv
biA9IEVkaXRTZXNzaW9uOwogfSk7CiAKIGFjZS5kZWZpbmUoJ2FjZS9zZWxlY3Rpb24nLCBbJ3Jl
cXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvbGFu
ZycsICdhY2UvbGliL2V2ZW50X2VtaXR0ZXInLCAnYWNlL3JhbmdlJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgewpAQCAtNzA1MCwxMyArNzE5NiwxNCBAQCBSYW5nZS5mcm9t
UG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgewogZXhwb3J0cy5SYW5nZSA9IFJhbmdlOwog
fSk7CiAKLWFjZS5kZWZpbmUoJ2FjZS9tb2RlL3RleHQnLCBbJ3JlcXVpcmUnLCAnZXhwb3J0cycs
ICdtb2R1bGUnICwgJ2FjZS90b2tlbml6ZXInLCAnYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVs
ZXMnLCAnYWNlL21vZGUvYmVoYXZpb3VyJywgJ2FjZS91bmljb2RlJ10sIGZ1bmN0aW9uKHJlcXVp
cmUsIGV4cG9ydHMsIG1vZHVsZSkgeworYWNlLmRlZmluZSgnYWNlL21vZGUvdGV4dCcsIFsncmVx
dWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL3Rva2VuaXplcicsICdhY2UvbW9kZS90
ZXh0X2hpZ2hsaWdodF9ydWxlcycsICdhY2UvbW9kZS9iZWhhdmlvdXInLCAnYWNlL3VuaWNvZGUn
LCAnYWNlL2xpYi9sYW5nJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewog
CiAKIHZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7CiB2
YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIp
LlRleHRIaWdobGlnaHRSdWxlczsKIHZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91
ciIpLkJlaGF2aW91cjsKIHZhciB1bmljb2RlID0gcmVxdWlyZSgiLi4vdW5pY29kZSIpOwordmFy
IGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwogCiB2YXIgTW9kZSA9IGZ1bmN0aW9uKCkg
ewogICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIobmV3IFRleHRIaWdobGlnaHRS
dWxlcygpLmdldFJ1bGVzKCkpOwpAQCAtNzA4MywxMSArNzIzMCw1MCBAQCB2YXIgTW9kZSA9IGZ1
bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gdGhpcy4kdG9rZW5pemVyOwogICAgIH07CiAKLSAg
ICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHN0YXJ0Um93
LCBlbmRSb3cpIHsKKyAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRl
LCBzZXNzaW9uLCBzdGFydFJvdywgZW5kUm93KSB7CisgICAgICAgIHZhciBkb2MgPSBzZXNzaW9u
LmRvYzsKKyAgICAgICAgdmFyIHJlZ2V4cFN0YXJ0LCBsaW5lQ29tbWVudFN0YXJ0OworICAgICAg
ICBpZiAoIXRoaXMubGluZUNvbW1lbnRTdGFydCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
CisgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVDb21tZW50U3RhcnQp
KSB7CisgICAgICAgICAgICByZWdleHBTdGFydCA9IHRoaXMubGluZUNvbW1lbnRTdGFydC5tYXAo
bGFuZy5lc2NhcGVSZWdFeHApLmpvaW4oInwiKTsKKyAgICAgICAgICAgIGxpbmVDb21tZW50U3Rh
cnQgPSB0aGlzLmxpbmVDb21tZW50U3RhcnRbMF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByZWdleHBTdGFydCA9IGxhbmcuZXNjYXBlUmVnRXhwKHRoaXMubGluZUNvbW1lbnRTdGFy
dCk7CisgICAgICAgICAgICBsaW5lQ29tbWVudFN0YXJ0ID0gdGhpcy5saW5lQ29tbWVudFN0YXJ0
OworICAgICAgICB9CisgICAgICAgIHJlZ2V4cFN0YXJ0ID0gbmV3IFJlZ0V4cCgiXlxccyooPzoi
ICsgcmVnZXhwU3RhcnQgKyAiKSA/Iik7CisKKyAgICAgICAgdmFyIHJlbW92ZUNvbW1lbnQgPSB0
cnVlOworICAgICAgICB2YXIgbWluU3BhY2UgPSBJbmZpbml0eTsKKyAgICAgICAgdmFyIGluZGVu
dGF0aW9ucyA9IFtdOworCisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdzsgaSA8PSBlbmRS
b3c7IGkrKykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShpKTsKKyAgICAg
ICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFN8JC8pOworICAgICAgICAgICAgaW5k
ZW50YXRpb25zW2ldID0gaW5kZW50OworICAgICAgICAgICAgaWYgKGluZGVudCA8IG1pblNwYWNl
KQorICAgICAgICAgICAgICAgIG1pblNwYWNlID0gaW5kZW50OworICAgICAgICAgICAgaWYgKHJl
bW92ZUNvbW1lbnQgJiYgIXJlZ2V4cFN0YXJ0LnRlc3QobGluZSkpCisgICAgICAgICAgICAgICAg
cmVtb3ZlQ29tbWVudCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlbW92ZUNv
bW1lbnQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdzsgaSA8PSBlbmRSb3c7
IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUoaSk7CisgICAg
ICAgICAgICAgICAgdmFyIG0gPSBsaW5lLm1hdGNoKHJlZ2V4cFN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICBkb2MucmVtb3ZlSW5MaW5lKGksIGluZGVudGF0aW9uc1tpXSwgbVswXS5sZW5ndGgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZUNvbW1lbnRT
dGFydCArPSAiICI7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3c7IGkgPD0gZW5k
Um93OyBpKyspIHsKKyAgICAgICAgICAgICAgICBkb2MuaW5zZXJ0SW5MaW5lKHtyb3c6IGksIGNv
bHVtbjogbWluU3BhY2V9LCBsaW5lQ29tbWVudFN0YXJ0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogICAgIH07CiAKICAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3Rh
dGUsIGxpbmUsIHRhYikgewotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiB0aGlz
LiRnZXRJbmRlbnQobGluZSk7CiAgICAgfTsKIAogICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVu
Y3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CkBAIC03MTcxLDggKzczNTcsOCBAQCBleHBvcnRz
Lk1vZGUgPSBNb2RlOwogfSk7CiAKIGFjZS5kZWZpbmUoJ2FjZS90b2tlbml6ZXInLCBbJ3JlcXVp
cmUnLCAnZXhwb3J0cycsICdtb2R1bGUnIF0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1v
ZHVsZSkgewotdmFyIFRva2VuaXplciA9IGZ1bmN0aW9uKHJ1bGVzLCBmbGFnKSB7Ci0gICAgZmxh
ZyA9IGZsYWcgPyAiZyIgKyBmbGFnIDogImciOwordmFyIE1BWF9UT0tFTl9DT1VOVCA9IDEwMDA7
Cit2YXIgVG9rZW5pemVyID0gZnVuY3Rpb24ocnVsZXMpIHsKICAgICB0aGlzLnN0YXRlcyA9IHJ1
bGVzOwogCiAgICAgdGhpcy5yZWdFeHBzID0ge307CkBAIC03MTgyLDEzICs3MzY4LDE3IEBAIHZh
ciBUb2tlbml6ZXIgPSBmdW5jdGlvbihydWxlcywgZmxhZykgewogICAgICAgICB2YXIgcnVsZVJl
Z0V4cHMgPSBbXTsKICAgICAgICAgdmFyIG1hdGNoVG90YWwgPSAwOwogICAgICAgICB2YXIgbWFw
cGluZyA9IHRoaXMubWF0Y2hNYXBwaW5nc1trZXldID0ge2RlZmF1bHRUb2tlbjogInRleHQifTsK
KyAgICAgICAgdmFyIGZsYWcgPSAiZyI7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
dGF0ZS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtpXTsKLSAg
ICAgICAgICAgIGlmIChydWxlLmRlZmF1bHRUb2tlbikgeworICAgICAgICAgICAgaWYgKHJ1bGUu
ZGVmYXVsdFRva2VuKQogICAgICAgICAgICAgICAgIG1hcHBpbmcuZGVmYXVsdFRva2VuID0gcnVs
ZS5kZWZhdWx0VG9rZW47CisgICAgICAgICAgICBpZiAocnVsZS5jYXNlSW5zZW5zaXRpdmUpCisg
ICAgICAgICAgICAgICAgZmxhZyA9ICJnaSI7CisgICAgICAgICAgICBpZiAocnVsZS5yZWdleCA9
PSBudWxsKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAocnVsZS5yZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCkKICAg
ICAgICAgICAgICAgICBydWxlLnJlZ2V4ID0gcnVsZS5yZWdleC50b1N0cmluZygpLnNsaWNlKDEs
IC0xKTsKICAgICAgICAgICAgIHZhciBhZGp1c3RlZHJlZ2V4ID0gcnVsZS5yZWdleDsKQEAgLTcy
MjksMTIgKzc0MTksMTIgQEAgdmFyIFRva2VuaXplciA9IGZ1bmN0aW9uKHJ1bGVzLCBmbGFnKSB7
CiAgICAgdGhpcy4kYXJyYXlUb2tlbnMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgaWYgKCFz
dHIpCiAgICAgICAgICAgICByZXR1cm4gW107Ci0gICAgICAgIHZhciB2YWx1ZXMgPSBzdHIuc3Bs
aXQodGhpcy5zcGxpdFJlZ2V4KQorICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5zcGxpdFJlZ2V4
LmV4ZWMoc3RyKTsKICAgICAgICAgdmFyIHRva2VucyA9IFtdOwogICAgICAgICB2YXIgdHlwZXMg
PSB0aGlzLnRva2VuQXJyYXk7Ci0gICAgICAgIGlmICh0eXBlcy5sZW5ndGggIT0gdmFsdWVzLmxl
bmd0aCAtIDIpIHsKKyAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCAhPSB2YWx1ZXMubGVuZ3RoIC0g
MSkgewogICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKQotICAgICAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IodHlwZXMubGVuZ3RoICwgdmFsdWVzLmxlbmd0aCAtIDIsIHN0ciwgdGhpcy5z
cGxpdFJlZ2V4KTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHR5cGVzICwgdmFsdWVz
LCBzdHIsIHRoaXMuc3BsaXRSZWdleCwgdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4gW3t0eXBl
OiAiZXJyb3IuaW52YWxpZCIsIHZhbHVlOiBzdHJ9XTsKICAgICAgICAgfQogICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CkBAIC03MjU3LDggKzc0NDcsOCBA
QCB2YXIgVG9rZW5pemVyID0gZnVuY3Rpb24ocnVsZXMsIGZsYWcpIHsKICAgICB9OwogICAgIAog
ICAgIHRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHAgPSBmdW5jdGlvbihzcmMsIGZsYWcpIHsKLSAg
ICAgICAgc3JjID0gc3JjLnJlcGxhY2UoL1woXD89KFteKCldfFxcLikqP1wpJC8sICIiKTsKLSAg
ICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoc3JjLCBmbGFnKTsKKyAgICAgICAgc3JjID0gc3JjLnJl
cGxhY2UoL1woXD89KFteKCldfFxcLnxcKChbXigpXXxcXC4pKj9cKSkqXCkoPz1cKSokKS8sICIi
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoc3JjLCAoZmxhZ3x8IiIpLnJlcGxhY2UoImci
LCAiIikpOwogICAgIH07CiAgICAgdGhpcy5nZXRMaW5lVG9rZW5zID0gZnVuY3Rpb24obGluZSwg
c3RhcnRTdGF0ZSkgewogICAgICAgICBpZiAoc3RhcnRTdGF0ZSAmJiB0eXBlb2Ygc3RhcnRTdGF0
ZSAhPSAic3RyaW5nIikgewpAQCAtNzMwNSw3ICs3NDk1LDExIEBAIHZhciBUb2tlbml6ZXIgPSBm
dW5jdGlvbihydWxlcywgZmxhZykgewogICAgICAgICAgICAgICAgICAgICA6IHJ1bGUudG9rZW47
CiAKICAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTdGF0ZSA9IHJ1bGUubmV4dDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVv
ZiBydWxlLm5leHQgPT0gInN0cmluZyIpCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U3RhdGUgPSBydWxlLm5leHQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IHJ1bGUubmV4dChjdXJyZW50U3RhdGUsIHN0YWNr
KTsKKwogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0
ZV07CiAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUuZXJyb3IgJiYgY29uc29sZS5lcnJvcihj
dXJyZW50U3RhdGUsICJkb2Vzbid0IGV4aXN0Iik7CkBAIC03MzQyLDYgKzc1MzYsMTIgQEAgdmFy
IFRva2VuaXplciA9IGZ1bmN0aW9uKHJ1bGVzLCBmbGFnKSB7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4OworCisgICAgICAgICAgICBpZiAo
dG9rZW5zLmxlbmd0aCA+IE1BWF9UT0tFTl9DT1VOVCkgeworICAgICAgICAgICAgICAgIHRva2Vu
LnZhbHVlICs9IGxpbmUuc3Vic3RyKGxhc3RJbmRleCk7CisgICAgICAgICAgICAgICAgY3VycmVu
dFN0YXRlID0gInN0YXJ0IgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKHRva2VuLnR5cGUpCkBAIC03MzcwLDggKzc1NzAsNyBA
QCB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB0b2tl
biA6ICJlbXB0eV9saW5lIiwKICAgICAgICAgICAgIHJlZ2V4IDogJ14kJwogICAgICAgICB9LCB7
Ci0gICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKLSAgICAgICAgICAgIHJlZ2V4IDogIi4rIgor
ICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInRleHQiCiAgICAgICAgIH1dCiAgICAgfTsKIH07
CkBAIC03NDA1LDcgKzc2MDQsNyBAQCB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZW1iZWRSdWxlcykKICAgICAgICAgICAg
ICAgICBzdGF0ZXMucHVzaChwcmVmaXggKyBrZXkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAg
ICAgICAgIHRoaXMuYWRkUnVsZXMoZW1iZWRSdWxlcywgcHJlZml4KTsKIAogICAgICAgICBpZiAo
ZXNjYXBlUnVsZXMpIHsKQEAgLTc0MjIsMzYgKzc2MjEsODQgQEAgdmFyIFRleHRIaWdobGlnaHRS
dWxlcyA9IGZ1bmN0aW9uKCkgewogICAgIHRoaXMuZ2V0RW1iZWRzID0gZnVuY3Rpb24oKSB7CiAg
ICAgICAgIHJldHVybiB0aGlzLiRlbWJlZHM7CiAgICAgfTsKLSAgICAKKworICAgIHZhciBwdXNo
U3RhdGUgPSBmdW5jdGlvbihjdXJyZW50U3RhdGUsIHN0YWNrKSB7CisgICAgICAgIGlmIChjdXJy
ZW50U3RhdGUgIT0gInN0YXJ0IikKKyAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0
U3RhdGUsIGN1cnJlbnRTdGF0ZSk7CisgICAgICAgIHJldHVybiB0aGlzLm5leHRTdGF0ZTsKKyAg
ICB9OworICAgIHZhciBwb3BTdGF0ZSA9IGZ1bmN0aW9uKGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsK
KyAgICAgICAgaWYgKHN0YWNrWzBdICE9PSBjdXJyZW50U3RhdGUpCisgICAgICAgICAgICByZXR1
cm4gInN0YXJ0IjsKKyAgICAgICAgc3RhY2suc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIHN0YWNr
LnNoaWZ0KCk7CisgICAgfTsKKwogICAgIHRoaXMubm9ybWFsaXplUnVsZXMgPSBmdW5jdGlvbigp
IHsKICAgICAgICAgdmFyIGlkID0gMDsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuJHJ1
bGVzKSB7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLiRydWxlc1trZXldOworICAgICAg
ICB2YXIgcnVsZXMgPSB0aGlzLiRydWxlczsKKyAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1N0YXRl
KGtleSkgeworICAgICAgICAgICAgdmFyIHN0YXRlID0gcnVsZXNba2V5XTsKKyAgICAgICAgICAg
IHN0YXRlLnByb2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHN0YXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBzdGF0ZVtp
XTsKLSAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0ICYmIEFycmF5LmlzQXJyYXkocnVsZS5u
ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVOYW1lID0gcnVsZS5zdGF0ZU5h
bWUgfHwgKCJzdGF0ZSIgKyBpZCsrKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy4kcnVsZXNb
c3RhdGVOYW1lXSA9IHJ1bGUubmV4dDsKKyAgICAgICAgICAgICAgICBpZiAoIXJ1bGUucmVnZXgg
JiYgcnVsZS5zdGFydCkgeworICAgICAgICAgICAgICAgICAgICBydWxlLnJlZ2V4ID0gcnVsZS5z
dGFydDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLm5leHQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBydWxlLm5leHQgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0
LnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiBydWxlLnRva2Vu
CisgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
OiBydWxlLnRva2VuICsgIi5lbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IHJ1
bGUuZW5kIHx8IHJ1bGUuc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9w
IgorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tl
biA9IHJ1bGUudG9rZW4gKyAiLnN0YXJ0IjsKKyAgICAgICAgICAgICAgICAgICAgcnVsZS5wdXNo
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBy
dWxlLm5leHQgfHwgcnVsZS5wdXNoOworICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIEFycmF5
LmlzQXJyYXkobmV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlTmFtZSA9IHJ1
bGUuc3RhdGVOYW1lIHx8IChydWxlLnRva2VuICsgaWQrKyk7CisgICAgICAgICAgICAgICAgICAg
IHJ1bGVzW3N0YXRlTmFtZV0gPSBuZXh0OwogICAgICAgICAgICAgICAgICAgICBydWxlLm5leHQg
PSBzdGF0ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTdGF0ZShzdGF0ZU5hbWUp
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAicG9wIikgeworICAgICAgICAg
ICAgICAgICAgICBydWxlLm5leHQgPSBwb3BTdGF0ZTsKICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAocnVsZS5wdXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bGUu
bmV4dFN0YXRlID0gcnVsZS5uZXh0IHx8IHJ1bGUucHVzaDsKKyAgICAgICAgICAgICAgICAgICAg
cnVsZS5uZXh0ID0gcHVzaFN0YXRlOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZS5w
dXNoOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGlmIChydWxlLnJ1bGVz
KSB7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByIGluIHJ1bGUucnVsZXMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1tyXSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1tyXS5wdXNoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLiRydWxlc1tyXS5wdXNoLmFwcGx5KHRoaXMuJHJ1bGVzW3Jd
LCBydWxlLnJ1bGVzW3JdKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgciBpbiBydWxl
LnJ1bGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZXNbcl0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZXNbcl0ucHVzaCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnVsZXNbcl0ucHVzaC5hcHBseShydWxlc1tyXSwgcnVsZS5ydWxl
c1tyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuJHJ1bGVzW3JdID0gcnVsZS5ydWxlc1tyXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBydWxlc1tyXSA9IHJ1bGUucnVsZXNbcl07CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaWYgKHJ1bGUuaW5jbHVkZSB8fCB0eXBlb2YgcnVsZSA9PSAic3RyaW5n
IikgewotICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtpLCAxXS5jb25jYXQodGhpcy4k
cnVsZXNbcnVsZS5pbmNsdWRlIHx8IHJ1bGVdKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlu
Y2x1ZGVOYW1lID0gcnVsZS5pbmNsdWRlIHx8IHJ1bGU7CisgICAgICAgICAgICAgICAgICAgIHZh
ciB0b0luc2VydCA9IHJ1bGVzW2luY2x1ZGVOYW1lXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKEFycmF5LmlzQXJyYXkocnVsZSkpCisgICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0ID0g
cnVsZTsKKworICAgICAgICAgICAgICAgIGlmICh0b0luc2VydCkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgYXJncyA9IFtpLCAxXS5jb25jYXQodG9JbnNlcnQpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAocnVsZS5ub0VzY2FwZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBh
cmdzLmZpbHRlcihmdW5jdGlvbih4KSB7cmV0dXJuICF4Lm5leHQ7fSk7CiAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnNwbGljZS5hcHBseShzdGF0ZSwgYXJncyk7CisgICAgICAgICAgICAgICAg
ICAgIGktLTsKKyAgICAgICAgICAgICAgICAgICAgdG9JbnNlcnQgPSBudWxsCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIE9i
amVjdC5rZXlzKHJ1bGVzKS5mb3JFYWNoKHByb2Nlc3NTdGF0ZSk7CiAgICAgfTsKIAogICAgIHRo
aXMuY3JlYXRlS2V5d29yZE1hcHBlciA9IGZ1bmN0aW9uKG1hcCwgZGVmYXVsdFRva2VuLCBpZ25v
cmVDYXNlLCBzcGxpdENoYXIpIHsKQEAgLTgwOTQsNyArODM0MSw2IEBAIGFjZS5kZWZpbmUoJ2Fj
ZS9iYWNrZ3JvdW5kX3Rva2VuaXplcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScg
LCAnYWNlL2xpCiAKIHZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKIHZhciBFdmVudEVt
aXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwotdmFy
IE1BWF9MSU5FX0xFTkdUSCA9IDUwMDA7CiAKIHZhciBCYWNrZ3JvdW5kVG9rZW5pemVyID0gZnVu
Y3Rpb24odG9rZW5pemVyLCBlZGl0b3IpIHsKICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKQEAg
LTgyMDYsMTUgKzg0NTIsNyBAQCB2YXIgQmFja2dyb3VuZFRva2VuaXplciA9IGZ1bmN0aW9uKHRv
a2VuaXplciwgZWRpdG9yKSB7CiAgICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShy
b3cpOwogICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1tyb3cgLSAxXTsKIAotICAgICAg
ICBpZiAobGluZS5sZW5ndGggPiBNQVhfTElORV9MRU5HVEgpIHsKLSAgICAgICAgICAgIHZhciBv
dmVyZmxvdyA9IHt2YWx1ZTogbGluZS5zdWJzdHIoTUFYX0xJTkVfTEVOR1RIKSwgdHlwZTogInRl
eHQifTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKDAsIE1BWF9MSU5FX0xFTkdUSCk7
Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRva2VuaXplci5nZXRMaW5lVG9r
ZW5zKGxpbmUsIHN0YXRlKTsKLSAgICAgICAgaWYgKG92ZXJmbG93KSB7Ci0gICAgICAgICAgICBk
YXRhLnRva2Vucy5wdXNoKG92ZXJmbG93KTsKLSAgICAgICAgICAgIGRhdGEuc3RhdGUgPSAic3Rh
cnQiOwotICAgICAgICB9CisgICAgICAgIHZhciBkYXRhID0gdGhpcy50b2tlbml6ZXIuZ2V0TGlu
ZVRva2VucyhsaW5lLCBzdGF0ZSwgcm93KTsKIAogICAgICAgICBpZiAodGhpcy5zdGF0ZXNbcm93
XSArICIiICE9PSBkYXRhLnN0YXRlICsgIiIpIHsKICAgICAgICAgICAgIHRoaXMuc3RhdGVzW3Jv
d10gPSBkYXRhLnN0YXRlOwpAQCAtODMxNSw3ICs4NTUzLDYgQEAgZnVuY3Rpb24gRm9sZGluZygp
IHsKICAgICAgICAgfQogICAgIH07CiAgICAgdGhpcy5nZXRGb2xkc0luUmFuZ2UgPSBmdW5jdGlv
bihyYW5nZSkgewotICAgICAgICByYW5nZSA9IHJhbmdlLmNsb25lKCk7CiAgICAgICAgIHZhciBz
dGFydCA9IHJhbmdlLnN0YXJ0OwogICAgICAgICB2YXIgZW5kID0gcmFuZ2UuZW5kOwogICAgICAg
ICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CkBAIC04MzQ4LDYgKzg1ODUsOSBAQCBm
dW5jdGlvbiBGb2xkaW5nKCkgewogICAgICAgICAgICAgICAgIGZvdW5kRm9sZHMucHVzaChmb2xk
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBzdGFydC5jb2x1bW4gLT0gMTsK
KyAgICAgICAgZW5kLmNvbHVtbiArPSAxOworCiAgICAgICAgIHJldHVybiBmb3VuZEZvbGRzOwog
ICAgIH07CiAgICAgdGhpcy5nZXRBbGxGb2xkcyA9IGZ1bmN0aW9uKCkgewpAQCAtOTI5MCwxMCAr
OTUzMCwxMCBAQCB2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwogCiBmdW5j
dGlvbiBCcmFja2V0TWF0Y2goKSB7CiAKLSAgICB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQgPSBm
dW5jdGlvbihwb3NpdGlvbiwgY2hhcikgeworICAgIHRoaXMuZmluZE1hdGNoaW5nQnJhY2tldCA9
IGZ1bmN0aW9uKHBvc2l0aW9uLCBjaHIpIHsKICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9
PSAwKSByZXR1cm4gbnVsbDsKIAotICAgICAgICB2YXIgY2hhckJlZm9yZUN1cnNvciA9IGNoYXIg
fHwgdGhpcy5nZXRMaW5lKHBvc2l0aW9uLnJvdykuY2hhckF0KHBvc2l0aW9uLmNvbHVtbi0xKTsK
KyAgICAgICAgdmFyIGNoYXJCZWZvcmVDdXJzb3IgPSBjaHIgfHwgdGhpcy5nZXRMaW5lKHBvc2l0
aW9uLnJvdykuY2hhckF0KHBvc2l0aW9uLmNvbHVtbi0xKTsKICAgICAgICAgaWYgKGNoYXJCZWZv
cmVDdXJzb3IgPT0gIiIpIHJldHVybiBudWxsOwogCiAgICAgICAgIHZhciBtYXRjaCA9IGNoYXJC
ZWZvcmVDdXJzb3IubWF0Y2goLyhbXChcW1x7XSl8KFtcKVxdXH1dKS8pOwpAQCAtOTc1OCw3ICs5
OTk4LDcgQEAgdmFyIENvbW1hbmRNYW5hZ2VyID0gZnVuY3Rpb24ocGxhdGZvcm0sIGNvbW1hbmRz
KSB7CiAgICAgdGhpcy5jb21tbWFuZEtleUJpbmRpbmcgPSB7fTsKIAogICAgIHRoaXMuYWRkQ29t
bWFuZHMoY29tbWFuZHMpOwotICAgIAorCiAgICAgdGhpcy5zZXREZWZhdWx0SGFuZGxlcigiZXhl
YyIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgcmV0dXJuIGUuY29tbWFuZC5leGVjKGUuZWRpdG9y
LCBlLmFyZ3MgfHwge30pOwogICAgIH0pOwpAQCAtOTc4MCwxMSArMTAwMjAsOSBAQCBvb3AuaW5o
ZXJpdHMoQ29tbWFuZE1hbmFnZXIsIEhhc2hIYW5kbGVyKTsKICAgICAgICAgaWYgKGVkaXRvciAm
JiBlZGl0b3IuJHJlYWRPbmx5ICYmICFjb21tYW5kLnJlYWRPbmx5KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIHZhciByZXR2YWx1ZSA9IHRoaXMuX2VtaXQoImV4ZWMiLCB7
Ci0gICAgICAgICAgICBlZGl0b3I6IGVkaXRvciwKLSAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1h
bmQsCi0gICAgICAgICAgICBhcmdzOiBhcmdzCi0gICAgICAgIH0pOworICAgICAgICB2YXIgZSA9
IHtlZGl0b3I6IGVkaXRvciwgY29tbWFuZDogY29tbWFuZCwgYXJnczogYXJnc307CisgICAgICAg
IHZhciByZXR2YWx1ZSA9IHRoaXMuX2VtaXQoImV4ZWMiLCBlKTsKKyAgICAgICAgdGhpcy5fc2ln
bmFsKCJhZnRlckV4ZWMiLCBlKTsKIAogICAgICAgICByZXR1cm4gcmV0dmFsdWUgPT09IGZhbHNl
ID8gZmFsc2UgOiB0cnVlOwogICAgIH07CkBAIC05ODU0LDcgKzEwMDkyLDcgQEAgZXhwb3J0cy5D
b21tYW5kTWFuYWdlciA9IENvbW1hbmRNYW5hZ2VyOwogYWNlLmRlZmluZSgnYWNlL2tleWJvYXJk
L2hhc2hfaGFuZGxlcicsIFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScgLCAnYWNlL2xp
Yi9rZXlzJ10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogCiAKLXZhciBr
ZXlVdGlsICA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7Cit2YXIga2V5VXRpbCA9IHJlcXVpcmUo
Ii4uL2xpYi9rZXlzIik7CiAKIGZ1bmN0aW9uIEhhc2hIYW5kbGVyKGNvbmZpZywgcGxhdGZvcm0p
IHsKICAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07CkBAIC05OTQyLDYgKzEwMTgwLDkgQEAg
ZnVuY3Rpb24gSGFzaEhhbmRsZXIoY29uZmlnLCBwbGF0Zm9ybSkgewogICAgICAgICB0aGlzLmJp
bmRLZXkoa2V5LCBjb21tYW5kKTsKICAgICB9OwogICAgIHRoaXMucGFyc2VLZXlzID0gZnVuY3Rp
b24oa2V5cykgeworICAgICAgICBpZiAoa2V5cy5pbmRleE9mKCIgIikgIT0gLTEpCisgICAgICAg
ICAgICBrZXlzID0ga2V5cy5zcGxpdCgvXHMrLykucG9wKCk7CisKICAgICAgICAgdmFyIHBhcnRz
ID0ga2V5cy50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXC1cK10oW1wtXCtdKT8vKS5maWx0ZXIoZnVu
Y3Rpb24oeCl7cmV0dXJuIHh9KTsKICAgICAgICAgdmFyIGtleSA9IHBhcnRzLnBvcCgpOwogCkBA
IC05OTU2LDggKzEwMTk3LDExIEBAIGZ1bmN0aW9uIEhhc2hIYW5kbGVyKGNvbmZpZywgcGxhdGZv
cm0pIHsKICAgICAgICAgdmFyIGhhc2hJZCA9IDA7CiAgICAgICAgIGZvciAodmFyIGkgPSBwYXJ0
cy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgIHZhciBtb2RpZmllciA9IGtleVV0aWwuS0VZ
X01PRFNbcGFydHNbaV1dOwotICAgICAgICAgICAgaWYgKG1vZGlmaWVyID09IG51bGwpCi0gICAg
ICAgICAgICAgICAgdGhyb3cgImludmFsaWQgbW9kaWZpZXIgIiArIHBhcnRzW2ldICsgIiBpbiAi
ICsga2V5czsKKyAgICAgICAgICAgIGlmIChtb2RpZmllciA9PSBudWxsKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAg
IGNvbnNvbGUuZXJyb3IoImludmFsaWQgbW9kaWZpZXIgIiArIHBhcnRzW2ldICsgIiBpbiAiICsg
a2V5cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaGFzaElkIHw9IG1vZGlmaWVyOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB7
a2V5OiBrZXksIGhhc2hJZDogaGFzaElkfTsKQEAgLTEwNDU1LDcgKzEwNjk5LDcgQEAgdmFyIFVu
ZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7CiBleHBvcnRzLlVuZG9NYW5hZ2VyID0gVW5kb01hbmFn
ZXI7CiB9KTsKIAotYWNlLmRlZmluZSgnYWNlL3ZpcnR1YWxfcmVuZGVyZXInLCBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnICwgJ2FjZS9saWIvb29wJywgJ2FjZS9saWIvZG9tJywgJ2Fj
ZS9saWIvZXZlbnQnLCAnYWNlL2xpYi91c2VyYWdlbnQnLCAnYWNlL2NvbmZpZycsICdhY2UvbGli
L25ldCcsICdhY2UvbGF5ZXIvZ3V0dGVyJywgJ2FjZS9sYXllci9tYXJrZXInLCAnYWNlL2xheWVy
L3RleHQnLCAnYWNlL2xheWVyL2N1cnNvcicsICdhY2Uvc2Nyb2xsYmFyJywgJ2FjZS9yZW5kZXJs
b29wJywgJ2FjZS9saWIvZXZlbnRfZW1pdHRlciddLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRz
LCBtb2R1bGUpIHsKK2FjZS5kZWZpbmUoJ2FjZS92aXJ0dWFsX3JlbmRlcmVyJywgWydyZXF1aXJl
JywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL29vcCcsICdhY2UvbGliL2RvbScsICdh
Y2UvbGliL2V2ZW50JywgJ2FjZS9saWIvdXNlcmFnZW50JywgJ2FjZS9jb25maWcnLCAnYWNlL2xh
eWVyL2d1dHRlcicsICdhY2UvbGF5ZXIvbWFya2VyJywgJ2FjZS9sYXllci90ZXh0JywgJ2FjZS9s
YXllci9jdXJzb3InLCAnYWNlL3Njcm9sbGJhcicsICdhY2UvcmVuZGVybG9vcCcsICdhY2UvbGli
L2V2ZW50X2VtaXR0ZXInXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAK
IAogdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwpAQCAtMTA0NjMsNyArMTA3MDcsNiBA
QCB2YXIgZG9tID0gcmVxdWlyZSgiLi9saWIvZG9tIik7CiB2YXIgZXZlbnQgPSByZXF1aXJlKCIu
L2xpYi9ldmVudCIpOwogdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4vbGliL3VzZXJhZ2VudCIp
OwogdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7Ci12YXIgbmV0ID0gcmVxdWlyZSgi
Li9saWIvbmV0Iik7CiB2YXIgR3V0dGVyTGF5ZXIgPSByZXF1aXJlKCIuL2xheWVyL2d1dHRlciIp
Lkd1dHRlcjsKIHZhciBNYXJrZXJMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvbWFya2VyIikuTWFy
a2VyOwogdmFyIFRleHRMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvdGV4dCIpLlRleHQ7CkBAIC0x
MDY4Niw3ICsxMDkyOSw3IEBAIGN1cnNvcjogbW92ZTtcCiB9XAogLmFjZV9ndXR0ZXItdG9vbHRp
cCB7XAogYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcCi1iYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0
LWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50LCByZ2JhKDAsIDAsIDAsIDAu
MSkpO1wKK2JhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgdHJh
bnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XAogYmFja2dyb3VuZC1pbWFnZTogbGluZWFy
LWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XAog
Ym9yZGVyOiAxcHggc29saWQgZ3JheTtcCiBib3JkZXItcmFkaXVzOiAxcHg7XApAQCAtMTA4MjQs
NyArMTEwNjcsNiBAQCB2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0
aGVtZSkgewogICAgIHRoaXMuY29udGVudC5jbGFzc05hbWUgPSAiYWNlX2NvbnRlbnQiOwogICAg
IHRoaXMuc2Nyb2xsZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTsKIAotICAgIHRoaXMuc2V0
SGlnaGxpZ2h0R3V0dGVyTGluZSh0cnVlKTsKICAgICB0aGlzLiRndXR0ZXJMYXllciA9IG5ldyBH
dXR0ZXJMYXllcih0aGlzLiRndXR0ZXIpOwogICAgIHRoaXMuJGd1dHRlckxheWVyLm9uKCJjaGFu
Z2VHdXR0ZXJXaWR0aCIsIHRoaXMub25HdXR0ZXJSZXNpemUuYmluZCh0aGlzKSk7CiAKQEAgLTEw
ODM5LDggKzExMDgxLDYgQEAgdmFyIFZpcnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNvbnRhaW5l
ciwgdGhlbWUpIHsKICAgICB0aGlzLiRob3JpelNjcm9sbCA9IGZhbHNlOwogICAgIHRoaXMuJGhv
cml6U2Nyb2xsQWx3YXlzVmlzaWJsZSA9IGZhbHNlOwogCi0gICAgdGhpcy4kYW5pbWF0ZWRTY3Jv
bGwgPSBmYWxzZTsKLQogICAgIHRoaXMuc2Nyb2xsQmFyID0gbmV3IFNjcm9sbEJhcih0aGlzLmNv
bnRhaW5lcik7CiAgICAgdGhpcy5zY3JvbGxCYXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwg
ZnVuY3Rpb24oZSkgewogICAgICAgICBpZiAoIV9zZWxmLiRpblNjcm9sbEFuaW1hdGlvbikKQEAg
LTEwODk1LDEwICsxMTEzNSwxMSBAQCB2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29u
dGFpbmVyLCB0aGVtZSkgewogCiAgICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJTaXplKCk7CiAgICAg
dGhpcy5zZXRQYWRkaW5nKDQpOworICAgIGNvbmZpZy5yZXNldE9wdGlvbnModGhpcyk7CisgICAg
Y29uZmlnLl9lbWl0KCJyZW5kZXJlciIsIHRoaXMpOwogfTsKIAogKGZ1bmN0aW9uKCkgewotICAg
IHRoaXMuc2hvd0d1dHRlciA9IHRydWU7CiAKICAgICB0aGlzLkNIQU5HRV9DVVJTT1IgPSAxOwog
ICAgIHRoaXMuQ0hBTkdFX01BUktFUiA9IDI7CkBAIC0xMDkxMywyOSArMTExNTQsMjkgQEAgdmFy
IFZpcnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgdGhlbWUpIHsKICAgICB0aGlz
LkNIQU5HRV9IX1NDUk9MTCA9IDEwMjQ7CiAKICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50
RW1pdHRlcik7Ci0gICAgCisKICAgICB0aGlzLnVwZGF0ZUNoYXJhY3RlclNpemUgPSBmdW5jdGlv
bigpIHsKICAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5hbGxvd0JvbGRGb250cyAhPSB0aGlz
LiRhbGxvd0JvbGRGb250cykgewogICAgICAgICAgICAgdGhpcy4kYWxsb3dCb2xkRm9udHMgPSB0
aGlzLiR0ZXh0TGF5ZXIuYWxsb3dCb2xkRm9udHM7CiAgICAgICAgICAgICB0aGlzLnNldFN0eWxl
KCJhY2Vfbm9ib2xkIiwgIXRoaXMuJGFsbG93Qm9sZEZvbnRzKTsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICB0aGlzLmNoYXJhY3RlcldpZHRoID0gdGhpcy4kdGV4dExheWVyLmdldENo
YXJhY3RlcldpZHRoKCk7CiAgICAgICAgIHRoaXMubGluZUhlaWdodCA9IHRoaXMuJHRleHRMYXll
ci5nZXRMaW5lSGVpZ2h0KCk7CiAgICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7CiAg
ICAgfTsKICAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAg
IHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMuc2Nyb2xs
ZXIuY2xhc3NOYW1lID0gImFjZV9zY3JvbGxlciI7Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMu
JGN1cnNvckxheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7CiAgICAgICAgIHRoaXMuJG1hcmtlckJh
Y2suc2V0U2Vzc2lvbihzZXNzaW9uKTsKICAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQuc2V0U2Vz
c2lvbihzZXNzaW9uKTsKICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2Vzc2lvbihzZXNz
aW9uKTsKICAgICAgICAgdGhpcy4kdGV4dExheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7CiAgICAg
ICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7Ci0gICAgICAgIAorCiAg
ICAgfTsKICAgICB0aGlzLnVwZGF0ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cp
IHsKICAgICAgICAgaWYgKGxhc3RSb3cgPT09IHVuZGVmaW5lZCkKQEAgLTEwOTU0LDcgKzExMTk1
LDcgQEAgdmFyIFZpcnR1YWxSZW5kZXJlciA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgdGhlbWUpIHsK
ICAgICAgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdyA8IGxhc3RSb3cpCiAg
ICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPSBsYXN0Um93OwogICAg
ICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RS
b3cgPiB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3cgfHwKICAgICAgICAgICAgIHRoaXMuJGNoYW5n
ZWRMaW5lcy5sYXN0Um93IDwgdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTEwOTY5LDE4ICsxMTIxMCwxNiBAQCB2YXIgVmlydHVhbFJlbmRlcmVyID0g
ZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewogICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxl
KHRoaXMuQ0hBTkdFX1RFWFQpOwogICAgIH07CiAgICAgdGhpcy51cGRhdGVGdWxsID0gZnVuY3Rp
b24oZm9yY2UpIHsKLSAgICAgICAgaWYgKGZvcmNlKXsKKyAgICAgICAgaWYgKGZvcmNlKQogICAg
ICAgICAgICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyh0aGlzLkNIQU5HRV9GVUxMLCB0cnVlKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpcy4k
bG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKLSAgICAgICAgfQogICAgIH07CiAgICAg
dGhpcy51cGRhdGVGb250U2l6ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICB0aGlzLiR0ZXh0TGF5
ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpOwogICAgIH07CiAgICAgdGhpcy5vblJlc2l6ZSA9IGZ1
bmN0aW9uKGZvcmNlLCBndXR0ZXJXaWR0aCwgd2lkdGgsIGhlaWdodCkgewotICAgICAgICB2YXIg
Y2hhbmdlcyA9IHRoaXMuQ0hBTkdFX1NJWkU7CisgICAgICAgIHZhciBjaGFuZ2VzID0gMDsKICAg
ICAgICAgdmFyIHNpemUgPSB0aGlzLiRzaXplOwogCiAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5n
ID4gMikKQEAgLTEwOTk0LDggKzExMjMzLDE0IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5j
dGlvbihjb250YWluZXIsIHRoZW1lKSB7CiAKICAgICAgICAgaWYgKGhlaWdodCAmJiAoZm9yY2Ug
fHwgc2l6ZS5oZWlnaHQgIT0gaGVpZ2h0KSkgewogICAgICAgICAgICAgc2l6ZS5oZWlnaHQgPSBo
ZWlnaHQ7CisgICAgICAgICAgICBjaGFuZ2VzID0gdGhpcy5DSEFOR0VfU0laRTsKIAogICAgICAg
ICAgICAgc2l6ZS5zY3JvbGxlckhlaWdodCA9IHRoaXMuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0Owor
ICAgICAgICAgICAgaWYgKCFzaXplLnNjcm9sbGVySGVpZ2h0KSB7CisgICAgICAgICAgICAgICAg
c2l6ZS5zY3JvbGxlckhlaWdodCA9IHNpemUuaGVpZ2h0OworICAgICAgICAgICAgICAgIGlmICh0
aGlzLiRob3JpelNjcm9sbCkKKyAgICAgICAgICAgICAgICAgICAgc2l6ZS5zY3JvbGxlckhlaWdo
dCAtPSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgdGhpcy5zY3JvbGxCYXIuc2V0SGVpZ2h0KHNpemUuc2Nyb2xsZXJIZWlnaHQpOwogCiAgICAg
ICAgICAgICBpZiAodGhpcy5zZXNzaW9uKSB7CkBAIC0xMTAwOCw5ICsxMTI1MywxMCBAQCB2YXIg
VmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewogICAgICAgICAg
ICAgd2lkdGggPSBkb20uZ2V0SW5uZXJXaWR0aCh0aGlzLmNvbnRhaW5lcik7CiAKICAgICAgICAg
aWYgKHdpZHRoICYmIChmb3JjZSB8fCB0aGlzLnJlc2l6aW5nID4gMSB8fCBzaXplLndpZHRoICE9
IHdpZHRoKSkgeworICAgICAgICAgICAgY2hhbmdlcyA9IHRoaXMuQ0hBTkdFX1NJWkU7CiAgICAg
ICAgICAgICBzaXplLndpZHRoID0gd2lkdGg7CiAKLSAgICAgICAgICAgIHZhciBndXR0ZXJXaWR0
aCA9IHRoaXMuc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZzZXRXaWR0aCA6IDA7CisgICAg
ICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSB0aGlzLiRzaG93R3V0dGVyID8gdGhpcy4kZ3V0dGVy
Lm9mZnNldFdpZHRoIDogMDsKICAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUubGVmdCA9
IGd1dHRlcldpZHRoICsgInB4IjsKICAgICAgICAgICAgIHNpemUuc2Nyb2xsZXJXaWR0aCA9IE1h
dGgubWF4KDAsIHdpZHRoIC0gZ3V0dGVyV2lkdGggLSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgp
KTsKICAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuc3R5bGUucmlnaHQgPSB0aGlzLnNjcm9sbEJh
ci5nZXRXaWR0aCgpICsgInB4IjsKQEAgLTExMDIzLDE0ICsxMTI2OSwxNyBAQCB2YXIgVmlydHVh
bFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewogICAgICAgICAgICAgdGhp
cy4kcmVuZGVyQ2hhbmdlcyhjaGFuZ2VzLCB0cnVlKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgdGhpcy4kbG9vcC5zY2hlZHVsZShjaGFuZ2VzKTsKLSAgICAgICAgCisKKyAgICAgICAgaWYg
KGZvcmNlKQorICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuJHBhZGRpbmcgPSBudWxsOwor
CiAgICAgICAgIGlmIChmb3JjZSkKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlc2l6aW5nOwog
ICAgIH07CiAKICAgICB0aGlzLm9uR3V0dGVyUmVzaXplID0gZnVuY3Rpb24oKSB7CiAgICAgICAg
IHZhciB3aWR0aCA9IHRoaXMuJHNpemUud2lkdGg7Ci0gICAgICAgIHZhciBndXR0ZXJXaWR0aCA9
IHRoaXMuc2hvd0d1dHRlciA/IHRoaXMuJGd1dHRlci5vZmZzZXRXaWR0aCA6IDA7CisgICAgICAg
IHZhciBndXR0ZXJXaWR0aCA9IHRoaXMuJHNob3dHdXR0ZXIgPyB0aGlzLiRndXR0ZXIub2Zmc2V0
V2lkdGggOiAwOwogICAgICAgICB0aGlzLnNjcm9sbGVyLnN0eWxlLmxlZnQgPSBndXR0ZXJXaWR0
aCArICJweCI7CiAgICAgICAgIHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCA9IE1hdGgubWF4KDAs
IHdpZHRoIC0gZ3V0dGVyV2lkdGggLSB0aGlzLnNjcm9sbEJhci5nZXRXaWR0aCgpKTsKIApAQCAt
MTEwNDMsOTQgKzExMjkyLDcyIEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250
YWluZXIsIHRoZW1lKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uYWRqdXN0V3JhcExp
bWl0KGxpbWl0KTsKICAgICB9OwogICAgIHRoaXMuc2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlv
bihzaG91bGRBbmltYXRlKXsKLSAgICAgICAgdGhpcy4kYW5pbWF0ZWRTY3JvbGwgPSBzaG91bGRB
bmltYXRlOworICAgICAgICB0aGlzLnNldE9wdGlvbigiYW5pbWF0ZWRTY3JvbGwiLCBzaG91bGRB
bmltYXRlKTsKICAgICB9OwogICAgIHRoaXMuZ2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbigp
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuJGFuaW1hdGVkU2Nyb2xsOwogICAgIH07CiAgICAgdGhp
cy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKHNob3dJbnZpc2libGVzKSB7Ci0gICAgICAg
IGlmICh0aGlzLiR0ZXh0TGF5ZXIuc2V0U2hvd0ludmlzaWJsZXMoc2hvd0ludmlzaWJsZXMpKQot
ICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTsKKyAgICAg
ICAgdGhpcy5zZXRPcHRpb24oInNob3dJbnZpc2libGVzIiwgc2hvd0ludmlzaWJsZXMpOwogICAg
IH07CiAgICAgdGhpcy5nZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICBy
ZXR1cm4gdGhpcy4kdGV4dExheWVyLnNob3dJbnZpc2libGVzOworICAgICAgICByZXR1cm4gdGhp
cy5nZXRPcHRpb24oInNob3dJbnZpc2libGVzIik7CiAgICAgfTsKLQogICAgIHRoaXMuZ2V0RGlz
cGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy4kdGV4
dExheWVyLmRpc3BsYXlJbmRlbnRHdWlkZXM7CisgICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlv
bigiZGlzcGxheUluZGVudEd1aWRlcyIpOwogICAgIH07Ci0gICAgCisKICAgICB0aGlzLnNldERp
c3BsYXlJbmRlbnRHdWlkZXMgPSBmdW5jdGlvbihkaXNwbGF5KSB7Ci0gICAgICAgIGlmICh0aGlz
LiR0ZXh0TGF5ZXIuc2V0RGlzcGxheUluZGVudEd1aWRlcyhkaXNwbGF5KSkKLSAgICAgICAgICAg
IHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7CisgICAgICAgIHRoaXMuc2V0
T3B0aW9uKCJkaXNwbGF5SW5kZW50R3VpZGVzIiwgZGlzcGxheSk7CiAgICAgfTsKLSAgICAKLSAg
ICB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPSB0cnVlOwogICAgIHRoaXMuc2V0U2hvd1ByaW50TWFy
Z2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7Ci0gICAgICAgIHRoaXMuJHNob3dQcmlu
dE1hcmdpbiA9IHNob3dQcmludE1hcmdpbjsKLSAgICAgICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJn
aW4oKTsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oInNob3dQcmludE1hcmdpbiIsIHNob3dQcmlu
dE1hcmdpbik7CiAgICAgfTsKICAgICB0aGlzLmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9u
KCkgewotICAgICAgICByZXR1cm4gdGhpcy4kc2hvd1ByaW50TWFyZ2luOworICAgICAgICB0aGlz
LmdldE9wdGlvbigic2hvd1ByaW50TWFyZ2luIik7CiAgICAgfTsKLQotICAgIHRoaXMuJHByaW50
TWFyZ2luQ29sdW1uID0gODA7CiAgICAgdGhpcy5zZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0
aW9uKHNob3dQcmludE1hcmdpbikgewotICAgICAgICB0aGlzLiRwcmludE1hcmdpbkNvbHVtbiA9
IHNob3dQcmludE1hcmdpbjsKLSAgICAgICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKKyAg
ICAgICAgdGhpcy5zZXRPcHRpb24oInByaW50TWFyZ2luQ29sdW1uIiwgc2hvd1ByaW50TWFyZ2lu
KTsKICAgICB9OwogICAgIHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuJHByaW50TWFyZ2luQ29sdW1uOworICAgICAgICByZXR1cm4g
dGhpcy5nZXRPcHRpb24oInByaW50TWFyZ2luQ29sdW1uIik7CiAgICAgfTsKICAgICB0aGlzLmdl
dFNob3dHdXR0ZXIgPSBmdW5jdGlvbigpewotICAgICAgICByZXR1cm4gdGhpcy5zaG93R3V0dGVy
OworICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dHdXR0ZXIiKTsKICAgICB9Owog
ICAgIHRoaXMuc2V0U2hvd0d1dHRlciA9IGZ1bmN0aW9uKHNob3cpewotICAgICAgICBpZih0aGlz
LnNob3dHdXR0ZXIgPT09IHNob3cpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMu
JGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gc2hvdyA/ICJibG9jayIgOiAibm9uZSI7Ci0gICAgICAg
IHRoaXMuc2hvd0d1dHRlciA9IHNob3c7Ci0gICAgICAgIHRoaXMub25SZXNpemUodHJ1ZSk7Cisg
ICAgICAgIHJldHVybiB0aGlzLnNldE9wdGlvbigic2hvd0d1dHRlciIsIHNob3cpOwogICAgIH07
CiAKICAgICB0aGlzLmdldEZhZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKCl7Ci0gICAgICAgIHJl
dHVybiBkb20uaGFzQ3NzQ2xhc3ModGhpcy4kZ3V0dGVyLCAiYWNlX2ZhZGUtZm9sZC13aWRnZXRz
Iik7CisgICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiZmFkZUZvbGRXaWRnZXRzIikKICAg
ICB9OwogCiAgICAgdGhpcy5zZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7Ci0g
ICAgICAgIGlmIChzaG93KQotICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuJGd1dHRl
ciwgImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBk
b20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy4kZ3V0dGVyLCAiYWNlX2ZhZGUtZm9sZC13aWRnZXRzIik7
CisgICAgICAgIHRoaXMuc2V0T3B0aW9uKCJmYWRlRm9sZFdpZGdldHMiLCBzaG93KTsKICAgICB9
OwogCi0gICAgdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZhbHNlOwogICAgIHRoaXMuc2V0
SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgewotICAgICAg
ICBpZiAodGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSA9PSBzaG91bGRIaWdobGlnaHQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPSBzaG91
bGRIaWdobGlnaHQ7Ci0KLSAgICAgICAgaWYgKCF0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0KSB7
Ci0gICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0ID0gZG9tLmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5jbGFzc05h
bWUgPSAiYWNlX2d1dHRlci1hY3RpdmUtbGluZSI7Ci0gICAgICAgICAgICB0aGlzLiRndXR0ZXIu
YXBwZW5kQ2hpbGQodGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxl
LmRpc3BsYXkgPSBzaG91bGRIaWdobGlnaHQgPyAiIiA6ICJub25lIjsKLSAgICAgICAgaWYgKHRo
aXMuJGN1cnNvckxheWVyLiRwaXhlbFBvcykKLSAgICAgICAgICAgIHRoaXMuJHVwZGF0ZUd1dHRl
ckxpbmVIaWdobGlnaHQoKTsKKyAgICAgICAgdGhpcy5zZXRPcHRpb24oImhpZ2hsaWdodEd1dHRl
ckxpbmUiLCBzaG91bGRIaWdobGlnaHQpOwogICAgIH07CiAKICAgICB0aGlzLmdldEhpZ2hsaWdo
dEd1dHRlckxpbmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJGhpZ2hsaWdo
dEd1dHRlckxpbmU7CisgICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0R3V0
dGVyTGluZSIpOwogICAgIH07CiAKICAgICB0aGlzLiR1cGRhdGVHdXR0ZXJMaW5lSGlnaGxpZ2h0
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5bGUu
dG9wID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zLnRvcCAtIHRoaXMubGF5ZXJDb25maWcu
b2Zmc2V0ICsgInB4IjsKLSAgICAgICAgdGhpcy4kZ3V0dGVyTGluZUhpZ2hsaWdodC5zdHlsZS5o
ZWlnaHQgPSB0aGlzLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQgKyAicHgiOworICAgICAgICB2YXIg
cG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zOworICAgICAgICB2YXIgaGVpZ2h0ID0g
dGhpcy5sYXllckNvbmZpZy5saW5lSGVpZ2h0OworICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdl
dFVzZVdyYXBNb2RlKCkpIHsKKyAgICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLnNlc3Npb24u
c2VsZWN0aW9uLmdldEN1cnNvcigpOworICAgICAgICAgICAgY3Vyc29yLmNvbHVtbiA9IDA7Cisg
ICAgICAgICAgICBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNv
ciwgdHJ1ZSk7CisgICAgICAgICAgICBoZWlnaHQgKj0gdGhpcy5zZXNzaW9uLmdldFJvd0xlbmd0
aChjdXJzb3Iucm93KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxp
Z2h0LnN0eWxlLnRvcCA9IHBvcy50b3AgLSB0aGlzLmxheWVyQ29uZmlnLm9mZnNldCArICJweCI7
CisgICAgICAgIHRoaXMuJGd1dHRlckxpbmVIaWdobGlnaHQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0
ICsgInB4IjsKICAgICB9OwotICAgIAorCiAgICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4gPSBm
dW5jdGlvbigpIHsKICAgICAgICAgaWYgKCF0aGlzLiRzaG93UHJpbnRNYXJnaW4gJiYgIXRoaXMu
JHByaW50TWFyZ2luRWwpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTIyNyw2ICsxMTQ1NCw4
IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7CiAg
ICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyA9IGZ1bmN0aW9uKGNoYW5nZXMsIGZvcmNlKSB7CiAgICAg
ICAgIGlmICghZm9yY2UgJiYgKCFjaGFuZ2VzIHx8ICF0aGlzLnNlc3Npb24gfHwgIXRoaXMuY29u
dGFpbmVyLm9mZnNldFdpZHRoKSkKICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll9zaWduYWwoImJlZm9yZVJlbmRlciIpOwogICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hB
TkdFX0ZVTEwgfHwKICAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9TSVpFIHx8CiAg
ICAgICAgICAgICBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fApAQCAtMTEyNDYsNDMgKzEx
NDc1LDQ1IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1l
KSB7CiAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpOwog
ICAgICAgICAgICAgdGhpcy4kdXBkYXRlU2Nyb2xsQmFyKCk7CiAgICAgICAgICAgICB0aGlzLiR0
ZXh0TGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwotICAgICAgICAgICAgaWYgKHRoaXMu
c2hvd0d1dHRlcikKKyAgICAgICAgICAgIGlmICh0aGlzLiRzaG93R3V0dGVyKQogICAgICAgICAg
ICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKICAgICAg
ICAgICAgIHRoaXMuJG1hcmtlckJhY2sudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwogICAgICAg
ICAgICAgdGhpcy4kbWFya2VyRnJvbnQudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwogICAgICAg
ICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpOwogICAgICAg
ICAgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKICAgICAgICAgICAgIHRoaXMuJGhp
Z2hsaWdodEd1dHRlckxpbmUgJiYgdGhpcy4kdXBkYXRlR3V0dGVyTGluZUhpZ2hsaWdodCgpOwor
ICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfU0NST0xM
KSB7Ci0gICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKTsKICAgICAgICAgICAgIGlm
IChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfVEVYVCB8fCBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfTElO
RVMpCiAgICAgICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29u
ZmlnKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIu
c2Nyb2xsTGluZXModGhpcy5sYXllckNvbmZpZyk7CiAKLSAgICAgICAgICAgIGlmICh0aGlzLnNo
b3dHdXR0ZXIpCisgICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcikKICAgICAgICAgICAg
ICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CiAgICAgICAg
ICAgICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKICAgICAgICAg
ICAgIHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKICAgICAgICAg
ICAgIHRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKLSAgICAgICAg
ICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CiAgICAgICAgICAgICB0aGlzLiRoaWdo
bGlnaHRHdXR0ZXJMaW5lICYmIHRoaXMuJHVwZGF0ZUd1dHRlckxpbmVIaWdobGlnaHQoKTsKKyAg
ICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CisgICAgICAgICAgICB0aGlz
LiR1cGRhdGVTY3JvbGxCYXIoKTsKKyAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiYWZ0ZXJSZW5k
ZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjaGFu
Z2VzICYgdGhpcy5DSEFOR0VfVEVYVCkgewogICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVw
ZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnNob3dHdXR0ZXIp
CisgICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcikKICAgICAgICAgICAgICAgICB0aGlz
LiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTKSB7Ci0gICAgICAgICAgICBp
ZiAodGhpcy4kdXBkYXRlTGluZXMoKSB8fCAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0dVVFRFUikg
JiYgdGhpcy5zaG93R3V0dGVyKQorICAgICAgICAgICAgaWYgKHRoaXMuJHVwZGF0ZUxpbmVzKCkg
fHwgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpICYmIHRoaXMuJHNob3dHdXR0ZXIpCiAg
ICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcp
OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhU
IHx8IGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpIHsKLSAgICAgICAgICAgIGlmICh0aGlz
LnNob3dHdXR0ZXIpCisgICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcikKICAgICAgICAg
ICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7CiAgICAg
ICAgIH0KIApAQCAtMTEzMDIsOSArMTE1MzMsMTQgQEAgdmFyIFZpcnR1YWxSZW5kZXJlciA9IGZ1
bmN0aW9uKGNvbnRhaW5lciwgdGhlbWUpIHsKIAogICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMu
Q0hBTkdFX1NJWkUpCiAgICAgICAgICAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXIoKTsKKworICAg
ICAgICB0aGlzLl9zaWduYWwoImFmdGVyUmVuZGVyIik7CiAgICAgfTsKIAogICAgIHRoaXMuJGNv
bXB1dGVMYXllckNvbmZpZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRoaXMuJHNpemUu
c2Nyb2xsZXJIZWlnaHQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5vblJlc2l6ZSh0cnVlKTsK
KwogICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKIAogICAgICAgICB2YXIgb2Zm
c2V0ID0gdGhpcy5zY3JvbGxUb3AgJSB0aGlzLmxpbmVIZWlnaHQ7CkBAIC0xMTM3NSw3ICsxMTYx
MSw3IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7
CiAgICAgICAgIGlmIChmaXJzdFJvdyA+IGxheWVyQ29uZmlnLmxhc3RSb3cgKyAxKSB7IHJldHVy
bjsgfQogICAgICAgICBpZiAobGFzdFJvdyA8IGxheWVyQ29uZmlnLmZpcnN0Um93KSB7IHJldHVy
bjsgfQogICAgICAgICBpZiAobGFzdFJvdyA9PT0gSW5maW5pdHkpIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLnNob3dHdXR0ZXIpCisgICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcikKICAg
ICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUobGF5ZXJDb25maWcpOwogICAg
ICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZShsYXllckNvbmZpZyk7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMTU1NSw5ICsxMTc5MSw5IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBm
dW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7CiAgICAgICAgIGRlbHRhWCAmJiB0aGlzLnNlc3Np
b24uc2V0U2Nyb2xsTGVmdCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpICsgZGVsdGFYKTsK
ICAgICB9OwogICAgIHRoaXMuaXNTY3JvbGxhYmxlQnkgPSBmdW5jdGlvbihkZWx0YVgsIGRlbHRh
WSkgewotICAgICAgICBpZiAoZGVsdGFZIDwgMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9w
KCkgPiAwKQorICAgICAgICBpZiAoZGVsdGFZIDwgMCAmJiB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xs
VG9wKCkgPj0gMSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChkZWx0YVkg
PiAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSArIHRoaXMuJHNpemUuc2Nyb2xsZXJI
ZWlnaHQgPCB0aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodCkKKyAgICAgICAgaWYgKGRlbHRhWSA+
IDAgJiYgdGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhl
aWdodCAtIHRoaXMubGF5ZXJDb25maWcubWF4SGVpZ2h0IDwgLTEpCiAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH07CiAKQEAgLTExNjI1LDE1ICsxMTg2MSwxMSBAQCB2YXIgVmlydHVhbFJl
bmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewogICAgICAgICB0aGlzLnRleHRh
cmVhLnN0eWxlLmNzc1RleHQgPSB0aGlzLiRjb21wb3NpdGlvbi5jc3NUZXh0OwogICAgICAgICB0
aGlzLiRjb21wb3NpdGlvbiA9IG51bGw7CiAgICAgfTsKLQotICAgIHRoaXMuX2xvYWRUaGVtZSA9
IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7Ci0gICAgICAgIAotICAgIH07CiAgICAgdGhpcy5z
ZXRUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7CiAgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7CiAg
ICAgICAgIHRoaXMuJHRoZW1lVmFsdWUgPSB0aGVtZTsKICAgICAgICAgX3NlbGYuX2Rpc3BhdGNo
RXZlbnQoJ3RoZW1lQ2hhbmdlJyx7dGhlbWU6dGhlbWV9KTsKLSAgICAgICAgCisKICAgICAgICAg
aWYgKCF0aGVtZSB8fCB0eXBlb2YgdGhlbWUgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgIHZh
ciBtb2R1bGVOYW1lID0gdGhlbWUgfHwgImFjZS90aGVtZS90ZXh0bWF0ZSI7CiAgICAgICAgICAg
ICBjb25maWcubG9hZE1vZHVsZShbInRoZW1lIiwgbW9kdWxlTmFtZV0sIGFmdGVyTG9hZCk7CkBA
IC0xMTY2Myw3ICsxMTg5NSw3IEBAIHZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250
YWluZXIsIHRoZW1lKSB7CiAgICAgICAgICAgICAgICAgX3NlbGYuJHNpemUud2lkdGggPSAwOwog
ICAgICAgICAgICAgICAgIF9zZWxmLm9uUmVzaXplKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKKwogICAgICAgICAgICAgX3NlbGYuX2Rpc3BhdGNoRXZlbnQoJ3RoZW1lTG9hZGVkJyx7
dGhlbWU6dGhlbWV9KTsKICAgICAgICAgfQogICAgIH07CkBAIC0xMTY4Myw2ICsxMTkxNSw2NiBA
QCB2YXIgVmlydHVhbFJlbmRlcmVyID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSkgewogCiB9
KS5jYWxsKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUpOwogCisKK2NvbmZpZy5kZWZpbmVPcHRp
b25zKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUsICJyZW5kZXJlciIsIHsKKyAgICBhbmltYXRl
ZFNjcm9sbDoge2luaXRpYWxWYWx1ZTogZmFsc2V9LAorICAgIHNob3dJbnZpc2libGVzOiB7Cisg
ICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLiR0ZXh0
TGF5ZXIuc2V0U2hvd0ludmlzaWJsZXModmFsdWUpKQorICAgICAgICAgICAgICAgIHRoaXMuJGxv
b3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7CisgICAgICAgIH0sCisgICAgICAgIGluaXRp
YWxWYWx1ZTogZmFsc2UKKyAgICB9LAorICAgIHNob3dQcmludE1hcmdpbjogeworICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKCkgeyB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOyB9LAorICAgICAgICBp
bml0aWFsVmFsdWU6IHRydWUKKyAgICB9LAorICAgIHByaW50TWFyZ2luQ29sdW1uOiB7CisgICAg
ICAgIHNldDogZnVuY3Rpb24oKSB7IHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7IH0sCisgICAg
ICAgIGluaXRpYWxWYWx1ZTogODAKKyAgICB9LAorICAgIHNob3dHdXR0ZXI6IHsKKyAgICAgICAg
c2V0OiBmdW5jdGlvbihzaG93KXsKKyAgICAgICAgICAgIHRoaXMuJGd1dHRlci5zdHlsZS5kaXNw
bGF5ID0gc2hvdyA/ICJibG9jayIgOiAibm9uZSI7CisgICAgICAgICAgICB0aGlzLm9uR3V0dGVy
UmVzaXplKCk7CisgICAgICAgIH0sCisgICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZQorICAgIH0s
CisgICAgZmFkZUZvbGRXaWRnZXRzOiB7CisgICAgICAgIHNldDogZnVuY3Rpb24oc2hvdykgewor
ICAgICAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuJGd1dHRlciwgImFjZV9mYWRlLWZvbGQt
d2lkZ2V0cyIsIHNob3cpOworICAgICAgICB9LAorICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNl
CisgICAgfSwKKyAgICBzaG93Rm9sZFdpZGdldHM6IHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbihz
aG93KSB7dGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKHNob3cpfSwKKyAgICAg
ICAgaW5pdGlhbFZhbHVlOiB0cnVlCisgICAgfSwKKyAgICBkaXNwbGF5SW5kZW50R3VpZGVzOiB7
CisgICAgICAgIHNldDogZnVuY3Rpb24oc2hvdykgeworICAgICAgICAgICAgaWYgKHRoaXMuJHRl
eHRMYXllci5zZXREaXNwbGF5SW5kZW50R3VpZGVzKHNob3cpKQorICAgICAgICAgICAgICAgIHRo
aXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCk7CisgICAgICAgIH0sCisgICAgICAg
IGluaXRpYWxWYWx1ZTogdHJ1ZQorICAgIH0sCisgICAgaGlnaGxpZ2h0R3V0dGVyTGluZTogewor
ICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgeworICAgICAgICAgICAgaWYg
KCF0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0KSB7CisgICAgICAgICAgICAgICAgdGhpcy4kZ3V0
dGVyTGluZUhpZ2hsaWdodCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LmNsYXNzTmFtZSA9ICJhY2VfZ3V0dGVyLWFj
dGl2ZS1saW5lIjsKKyAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXIuYXBwZW5kQ2hpbGQodGhp
cy4kZ3V0dGVyTGluZUhpZ2hsaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB0aGlzLiRndXR0ZXJMaW5lSGlnaGxpZ2h0LnN0eWxlLmRp
c3BsYXkgPSBzaG91bGRIaWdobGlnaHQgPyAiIiA6ICJub25lIjsKKyAgICAgICAgICAgIGlmICh0
aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3MpCisgICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRl
R3V0dGVyTGluZUhpZ2hsaWdodCgpOworICAgICAgICB9LAorICAgICAgICBpbml0aWFsVmFsdWU6
IGZhbHNlLAorICAgICAgICB2YWx1ZTogdHJ1ZQorICAgIH0KK30pOworCiBleHBvcnRzLlZpcnR1
YWxSZW5kZXJlciA9IFZpcnR1YWxSZW5kZXJlcjsKIH0pOwogCkBAIC0xMTc4Miw2ICsxMjA3NCw3
IEBAIHZhciBHdXR0ZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkgewogICAgICAgICB2YXIgZm9sZFdp
ZGdldHMgPSB0aGlzLiRzaG93Rm9sZFdpZGdldHMgJiYgdGhpcy5zZXNzaW9uLmZvbGRXaWRnZXRz
OwogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLnNlc3Npb24uJGJyZWFrcG9pbnRzOwog
ICAgICAgICB2YXIgZGVjb3JhdGlvbnMgPSB0aGlzLnNlc3Npb24uJGRlY29yYXRpb25zOworICAg
ICAgICB2YXIgZmlyc3RMaW5lTnVtYmVyID0gdGhpcy5zZXNzaW9uLiRmaXJzdExpbmVOdW1iZXI7
CiAgICAgICAgIHZhciBsYXN0TGluZU51bWJlciA9IDA7CiAKICAgICAgICAgd2hpbGUgKHRydWUp
IHsKQEAgLTExNzk4LDcgKzEyMDkxLDcgQEAgdmFyIEd1dHRlciA9IGZ1bmN0aW9uKHBhcmVudEVs
KSB7CiAgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2FjZV9ndXR0ZXItY2VsbCAiLAogICAg
ICAgICAgICAgICAgIGJyZWFrcG9pbnRzW2ldIHx8ICIiLCBkZWNvcmF0aW9uc1tpXSB8fCAiIiwg
YW5ub3RhdGlvbi5jbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgIicgc3R5bGU9J2hlaWdodDoi
LCB0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoKGkpICogY29uZmlnLmxpbmVIZWlnaHQsICJweDsn
PiIsIAotICAgICAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyID0gaSArIDEKKyAgICAgICAgICAg
ICAgICBsYXN0TGluZU51bWJlciA9IGkgKyBmaXJzdExpbmVOdW1iZXIKICAgICAgICAgICAgICk7
CiAKICAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0cykgewpAQCAtMTE4MjIsNyArMTIxMTUsNyBA
QCB2YXIgR3V0dGVyID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKICAgICAgICAgdGhpcy5lbGVtZW50
ID0gZG9tLnNldElubmVySHRtbCh0aGlzLmVsZW1lbnQsIGh0bWwuam9pbigiIikpOwogICAgICAg
ICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gY29uZmlnLm1pbkhlaWdodCArICJweCI7CiAg
ICAgICAgIAotICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZSkKKyAgICAgICAg
aWYgKHRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGUgfHwgdGhpcy5zZXNzaW9uLiRmaXhlZEd1dHRl
cldpZHRoKQogICAgICAgICAgICAgbGFzdExpbmVOdW1iZXIgPSB0aGlzLnNlc3Npb24uZ2V0TGVu
Z3RoKCk7CiAgICAgICAgIAogICAgICAgICB2YXIgZ3V0dGVyV2lkdGggPSAoIiIgKyBsYXN0TGlu
ZU51bWJlcikubGVuZ3RoICogY29uZmlnLmNoYXJhY3RlcldpZHRoOwpAQCAtMTE5MjksNiArMTIy
MjIsOCBAQCB2YXIgTWFya2VyID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKICAgICAgICAgICAgICAg
ICBtYXJrZXIucmVuZGVyZXIoaHRtbCwgcmFuZ2UsIGxlZnQsIHRvcCwgY29uZmlnKTsKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAobWFya2VyLnR5cGUgPT0gImZ1bGxMaW5lIikgewogICAgICAgICAg
ICAgICAgIHRoaXMuZHJhd0Z1bGxMaW5lTWFya2VyKGh0bWwsIHJhbmdlLCBtYXJrZXIuY2xhenos
IGNvbmZpZyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtlci50eXBlID09ICJzY3JlZW5M
aW5lIikgeworICAgICAgICAgICAgICAgIHRoaXMuZHJhd1NjcmVlbkxpbmVNYXJrZXIoaHRtbCwg
cmFuZ2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAocmFu
Z2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSAi
dGV4dCIpCiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1RleHRNYXJrZXIoaHRtbCwgcmFu
Z2UsIG1hcmtlci5jbGF6eiwgY29uZmlnKTsKQEAgLTEyMDI3LDcgKzEyMzIyLDE5IEBAIHZhciBN
YXJrZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkgewogICAgICAgICAgICAgInRvcDoiLCB0b3AsICJw
eDsiLAogICAgICAgICAgICAgImxlZnQ6MDtyaWdodDowOyc+PC9kaXY+IgogICAgICAgICApOwot
ICAgIH0KKyAgICB9OworICAgIAorICAgIHRoaXMuZHJhd1NjcmVlbkxpbmVNYXJrZXIgPSBmdW5j
dGlvbihzdHJpbmdCdWlsZGVyLCByYW5nZSwgY2xhenosIGNvbmZpZykgeworICAgICAgICB2YXIg
dG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTsKKyAgICAgICAgdmFy
IGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OworCisgICAgICAgIHN0cmluZ0J1aWxkZXIucHVz
aCgKKyAgICAgICAgICAgICI8ZGl2IGNsYXNzPSciLCBjbGF6eiwgIicgc3R5bGU9JyIsCisgICAg
ICAgICAgICAiaGVpZ2h0OiIsIGhlaWdodCwgInB4OyIsCisgICAgICAgICAgICAidG9wOiIsIHRv
cCwgInB4OyIsCisgICAgICAgICAgICAibGVmdDowO3JpZ2h0OjA7Jz48L2Rpdj4iCisgICAgICAg
ICk7CisgICAgfTsKIAogfSkuY2FsbChNYXJrZXIucHJvdG90eXBlKTsKIApAQCAtMTI3ODAsNyAr
MTMwODcsNyBAQCB2YXIgQ3Vyc29yID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKICAgICAgICAgICAg
IHNlbGVjdGlvbnMgPSBbe2N1cnNvcjogbnVsbH1dOwogICAgICAgICB9CiAKLSAgICAgICAgZm9y
ICh2YXIgaSA9IHNlbGVjdGlvbnMubGVuZ3RoOyBpLS07ICkgeworICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbiA9IHNlbGVjdGlvbnMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICB2
YXIgcGl4ZWxQb3MgPSB0aGlzLmdldFBpeGVsUG9zaXRpb24oc2VsZWN0aW9uc1tpXS5jdXJzb3Is
IHRydWUpOwogICAgICAgICAgICAgaWYgKChwaXhlbFBvcy50b3AgPiBjb25maWcuaGVpZ2h0ICsg
Y29uZmlnLm9mZnNldCB8fAogICAgICAgICAgICAgICAgICBwaXhlbFBvcy50b3AgPCAtY29uZmln
Lm9mZnNldCkgJiYgaSA+IDEpIHsKQEAgLTEzMzEyLDggKzEzNjE5LDggQEAgdmFyIEVkaXRvciA9
IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwogICAgICAgICBpZiAodGhpcy4kcmVhZE9ubHkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhpcy5fZW1pdCgicGFzdGUiLCB0ZXh0
KTsKLSAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlKQorICAgICAgICB0aGlzLl9z
aWduYWwoInBhc3RlIiwgdGV4dCk7CisgICAgICAgIGlmICghdGhpcy5pbk11bHRpU2VsZWN0TW9k
ZSB8fCB0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpCiAgICAgICAgICAgICByZXR1cm4gdGhp
cy5pbnNlcnQodGV4dCk7CiAKICAgICAgICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgvXHJcbnxc
cnxcbi8pOwpAQCAtMTM5MTYsNyArMTQyMjMsNyBAQCBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgfSBlbHNlIGlmICghc2hpZnQgJiYg
YWx0ICYmIGJ1dHRvbiA9PSAwKSB7CisgICAgfSBlbHNlIGlmIChhbHQgJiYgYnV0dG9uID09IDAp
IHsKICAgICAgICAgZS5zdG9wKCk7CiAKICAgICAgICAgaWYgKGlzTXVsdGlTZWxlY3QgJiYgIWN0
cmwpCkBAIC0xMzkyNCwxMCArMTQyMzEsMTUgQEAgZnVuY3Rpb24gb25Nb3VzZURvd24oZSkgewog
ICAgICAgICBlbHNlIGlmICghaXNNdWx0aVNlbGVjdCAmJiBjdHJsKQogICAgICAgICAgICAgc2Vs
ZWN0aW9uLmFkZFJhbmdlKCk7CiAKLSAgICAgICAgc2VsZWN0aW9uLm1vdmVDdXJzb3JUb1Bvc2l0
aW9uKHBvcyk7Ci0gICAgICAgIHNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOwotCiAgICAgICAg
IHZhciByZWN0U2VsID0gW107CisgICAgICAgIGlmIChzaGlmdCkgeworICAgICAgICAgICAgc2Ny
ZWVuQW5jaG9yID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oc2VsZWN0aW9uLmxl
YWQpOworICAgICAgICAgICAgYmxvY2tTZWxlY3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihwb3MpOworICAgICAgICAgICAg
c2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIH0KKwogCiAgICAgICAgIHZhciBv
bk1vdXNlU2VsZWN0aW9uRW5kID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgY2xlYXJJbnRl
cnZhbCh0aW1lcklkKTsKQEAgLTE0MTU5LDYgKzE0NDcxLDcgQEAgdmFyIFVJV29ya2VyQ2xpZW50
ID0gZnVuY3Rpb24odG9wTGV2ZWxOYW1lc3BhY2VzLCBtb2QsIGNsYXNzbmFtZSkgewogICAgIHZh
ciBfc2VsZiA9IHRoaXM7CiAKICAgICB0aGlzLiR3b3JrZXIgPSB7fQorICAgIHRoaXMuJHdvcmtl
ci50ZXJtaW5hdGUgPSBmdW5jdGlvbigpIHt9OwogICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2Fn
ZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgX3NlbGYubWVzc2FnZUJ1ZmZlci5wdXNoKGUpOwog
ICAgICAgICBtYWluICYmIHNldFRpbWVvdXQocHJvY2Vzc05leHQpOwpAQCAtMTQxODIsNyArMTQ0
OTUsNyBAQCB2YXIgVUlXb3JrZXJDbGllbnQgPSBmdW5jdGlvbih0b3BMZXZlbE5hbWVzcGFjZXMs
IG1vZCwgY2xhc3NuYW1lKSB7CiAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6ICJldmVu
dCIsIG5hbWU6IG5hbWUsIGRhdGE6IGRhdGF9KTsKICAgICB9OwogCi0gICAgcmVxdWlyZShbbW9k
XSwgZnVuY3Rpb24oTWFpbikgeworICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsid29ya2VyIiwgbW9k
XSwgZnVuY3Rpb24oTWFpbikgewogICAgICAgICBtYWluID0gbmV3IE1haW5bY2xhc3NuYW1lXShz
ZW5kZXIpOwogICAgICAgICB3aGlsZSAoX3NlbGYubWVzc2FnZUJ1ZmZlci5sZW5ndGgpCiAgICAg
ICAgICAgICBwcm9jZXNzTmV4dCgpOwpAQCAtMTQ0NTUsNiArMTQ3NjgsMTQwIEBAIHZhciBGb2xk
TW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9OwogfSkuY2FsbChGb2xkTW9k
ZS5wcm90b3R5cGUpOwogCiB9KTsKKworYWNlLmRlZmluZSgnYWNlL3RoZW1lL3RleHRtYXRlJywg
WydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJyAsICdhY2UvbGliL2RvbSddLCBmdW5jdGlv
bihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKKworCitleHBvcnRzLmlzRGFyayA9IGZhbHNl
OworZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdG0iOworZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2Ut
dG0gLmFjZV9ndXR0ZXIge1wKK2JhY2tncm91bmQ6ICNmMGYwZjA7XAorY29sb3I6ICMzMzM7XAor
fVwKKy5hY2UtdG0gLmFjZV9wcmludC1tYXJnaW4ge1wKK3dpZHRoOiAxcHg7XAorYmFja2dyb3Vu
ZDogI2U4ZThlODtcCit9XAorLmFjZS10bSAuYWNlX2ZvbGQge1wKK2JhY2tncm91bmQtY29sb3I6
ICM2QjcyRTY7XAorfVwKKy5hY2UtdG0gLmFjZV9zY3JvbGxlciB7XAorYmFja2dyb3VuZC1jb2xv
cjogI0ZGRkZGRjtcCit9XAorLmFjZS10bSAuYWNlX2N1cnNvciB7XAorYm9yZGVyLWxlZnQ6IDJw
eCBzb2xpZCBibGFjaztcCit9XAorLmFjZS10bSAuYWNlX292ZXJ3cml0ZS1jdXJzb3JzIC5hY2Vf
Y3Vyc29yIHtcCitib3JkZXItbGVmdDogMHB4O1wKK2JvcmRlci1ib3R0b206IDFweCBzb2xpZCBi
bGFjaztcCit9XAorLmFjZS10bSAuYWNlX2ludmlzaWJsZSB7XAorY29sb3I6IHJnYigxOTEsIDE5
MSwgMTkxKTtcCit9XAorLmFjZS10bSAuYWNlX3N0b3JhZ2UsXAorLmFjZS10bSAuYWNlX2tleXdv
cmQge1wKK2NvbG9yOiBibHVlO1wKK31cCisuYWNlLXRtIC5hY2VfY29uc3RhbnQge1wKK2NvbG9y
OiByZ2IoMTk3LCA2LCAxMSk7XAorfVwKKy5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfYnVpbGRp
biB7XAorY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7XAorfVwKKy5hY2UtdG0gLmFjZV9jb25zdGFu
dC5hY2VfbGFuZ3VhZ2Uge1wKK2NvbG9yOiByZ2IoODgsIDkyLCAyNDYpO1wKK31cCisuYWNlLXRt
IC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkge1wKK2NvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAor
fVwKKy5hY2UtdG0gLmFjZV9pbnZhbGlkIHtcCitiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwg
MCwgMCwgMC4xKTtcCitjb2xvcjogcmVkO1wKK31cCisuYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2Vf
ZnVuY3Rpb24ge1wKK2NvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO1wKK31cCisuYWNlLXRtIC5hY2Vf
c3VwcG9ydC5hY2VfY29uc3RhbnQge1wKK2NvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAorfVwKKy5h
Y2UtdG0gLmFjZV9zdXBwb3J0LmFjZV90eXBlLFwKKy5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9j
bGFzcyB7XAorY29sb3I6IHJnYigxMDksIDEyMSwgMjIyKTtcCit9XAorLmFjZS10bSAuYWNlX2tl
eXdvcmQuYWNlX29wZXJhdG9yIHtcCitjb2xvcjogcmdiKDEwNCwgMTE4LCAxMzUpO1wKK31cCisu
YWNlLXRtIC5hY2Vfc3RyaW5nIHtcCitjb2xvcjogcmdiKDMsIDEwNiwgNyk7XAorfVwKKy5hY2Ut
dG0gLmFjZV9jb21tZW50IHtcCitjb2xvcjogcmdiKDc2LCAxMzYsIDEwNyk7XAorfVwKKy5hY2Ut
dG0gLmFjZV9jb21tZW50LmFjZV9kb2Mge1wKK2NvbG9yOiByZ2IoMCwgMTAyLCAyNTUpO1wKK31c
CisuYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcge1wKK2NvbG9yOiByZ2IoMTI4
LCAxNTksIDE5MSk7XAorfVwKKy5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XAor
Y29sb3I6IHJnYigwLCAwLCAyMDUpO1wKK31cCisuYWNlLXRtIC5hY2VfdmFyaWFibGUge1wKK2Nv
bG9yOiByZ2IoNDksIDEzMiwgMTQ5KTtcCit9XAorLmFjZS10bSAuYWNlX3htbC1wZSB7XAorY29s
b3I6IHJnYigxMDQsIDEwNCwgOTEpO1wKK31cCisuYWNlLXRtIC5hY2VfZW50aXR5LmFjZV9uYW1l
LmFjZV9mdW5jdGlvbiB7XAorY29sb3I6ICMwMDAwQTI7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJr
dXAuYWNlX2hlYWRpbmcge1wKK2NvbG9yOiByZ2IoMTIsIDcsIDI1NSk7XAorfVwKKy5hY2UtdG0g
LmFjZV9tYXJrdXAuYWNlX2xpc3Qge1wKK2NvbG9yOnJnYigxODUsIDYsIDE0NCk7XAorfVwKKy5h
Y2UtdG0gLmFjZV9tZXRhLmFjZV90YWcge1wKK2NvbG9yOnJnYigwLCAyMiwgMTQyKTtcCit9XAor
LmFjZS10bSAuYWNlX3N0cmluZy5hY2VfcmVnZXgge1wKK2NvbG9yOiByZ2IoMjU1LCAwLCAwKVwK
K31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCitiYWNrZ3Jv
dW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7XAorfVwKKy5hY2UtdG0uYWNlX211bHRpc2VsZWN0IC5h
Y2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XAorYm94LXNoYWRvdzogMCAwIDNweCAwcHggd2hpdGU7
XAorYm9yZGVyLXJhZGl1czogMnB4O1wKK31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5h
Y2Vfc3RlcCB7XAorYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTtcCit9XAorLmFjZS10bSAu
YWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtcCitiYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjks
IDEwMSk7XAorfVwKKy5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCitt
YXJnaW46IC0xcHggMCAwIC0xcHg7XAorYm9yZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAx
OTIpO1wKK31cCisuYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wK
K2JhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNyk7XAorfVwKKy5hY2UtdG0gLmFjZV9ndXR0
ZXItYWN0aXZlLWxpbmUge1wKK2JhY2tncm91bmQtY29sb3IgOiAjZGNkY2RjO1wKK31cCisuYWNl
LXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XAorYmFja2dyb3VuZDog
cmdiKDI1MCwgMjUwLCAyNTUpO1wKK2JvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUw
KTtcCit9XAorLmFjZS10bSAuYWNlX2luZGVudC1ndWlkZSB7XAorYmFja2dyb3VuZDogdXJsKFwi
ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZ
QUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJMbHkvL0J3QW1WZ2QxL3cxMS9nQUFBQUJK
UlU1RXJrSmdnZz09XCIpIHJpZ2h0IHJlcGVhdC15O1wKK31cCisiOworCit2YXIgZG9tID0gcmVx
dWlyZSgiLi4vbGliL2RvbSIpOworZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQs
IGV4cG9ydHMuY3NzQ2xhc3MpOworfSk7CiA7CiAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICAgYWNlLnJlcXVpcmUoWyJhY2UvYWNlIl0sIGZ1bmN0aW9uKGEpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>