<?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>184454</bug_id>
          
          <creation_ts>2018-04-10 10:18:03 -0700</creation_ts>
          <short_desc>[LayoutReloaded] Add support for out-of-flow descendants in inline formatting context.</short_desc>
          <delta_ts>2018-04-10 10:22:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1413305</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-04-10 10:18:03 -0700</bug_when>
    <thetext>when the containing block of a out-of-flow positioned element establishes an inline formatting context
&lt;span style=&quot;position: relative&quot;&gt;&lt;span style=&quot;position: absolute; top: 10px; left: 10px;&quot;&gt;foobar&lt;/span&gt;&lt;/span&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413307</commentid>
    <comment_count>1</comment_count>
      <attachid>337617</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-04-10 10:20:37 -0700</bug_when>
    <thetext>Created attachment 337617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413308</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-04-10 10:21:55 -0700</bug_when>
    <thetext>Committed r230484: &lt;https://trac.webkit.org/changeset/230484&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413309</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-10 10:22:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/39318403&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337617</attachid>
            <date>2018-04-10 10:20:37 -0700</date>
            <delta_ts>2018-04-10 10:20:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184454-20180410102036.patch</filename>
            <type>text/plain</type>
            <size>31001</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNDcwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmRhMzJlOGZjZWJhNzEzYTg2MTU3MGQ0YWYzNGUzMGFm
ODY3ODk5ZC4uNWI5MTE2MWVlM2NkM2ZhMWJiYzMwYmIyZTMyOWMyMTE3MDMwYzE1ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4
IEBACisyMDE4LTA0LTEwICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0xheW91dFJlbG9hZGVkXSBBZGQgc3VwcG9ydCBmb3Igb3V0LW9mLWZsb3cgZGVzY2VuZGFu
dHMgaW4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDQ1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YgYW4g
b3V0LW9mLWZsb3cgcG9zaXRpb25lZCBlbGVtZW50IGVzdGFibGlzaGVzIGFuIGlubGluZSBmb3Jt
YXR0aW5nIGNvbnRleHQuCisgICAgICAgIFRoaXMgaXMgbW9zdGx5IGFib3V0IG1vdmluZyBvdXQt
b2YtZmxvdyBsb2dpYyBmcm9tIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQgdG8gdGhlIGJhc2UgY2xh
c3MuCisKKyAgICAgICAgKiBMYXlvdXRSZWxvYWRlZC9Gb3JtYXR0aW5nQ29udGV4dC9CbG9ja0Zv
cm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5qczoKKyAgICAgICAgKEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQucHJvdG90eXBlLl9hZGp1c3RCb3R0b21XaXRoRklYTUUpOgorICAgICAgICAo
QmxvY2tGb3JtYXR0aW5nQ29udGV4dCk6CisgICAgICAgIChCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LnByb3RvdHlwZS5fbGF5b3V0T3V0T2ZGbG93RGVzY2VuZGFudHMpOiBEZWxldGVkLgorICAgICAg
ICAoQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5cGUuX2NvbXB1dGVPdXRPZkZsb3dXaWR0
aCk6IERlbGV0ZWQuCisgICAgICAgIChCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5f
Y29tcHV0ZUluRmxvd1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQucHJvdG90eXBlLl9jb21wdXRlT3V0T2ZGbG93SGVpZ2h0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEJsb2NrRm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBlLl9jb21wdXRlT3V0T2ZGbG93UG9z
aXRpb24pOiBEZWxldGVkLgorICAgICAgICAoQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5
cGUuX3Nocmlua1RvRml0V2lkdGgpOiBEZWxldGVkLgorICAgICAgICAqIExheW91dFJlbG9hZGVk
L0Zvcm1hdHRpbmdDb250ZXh0L0Zvcm1hdHRpbmdDb250ZXh0LmpzOgorICAgICAgICAoRm9ybWF0
dGluZ0NvbnRleHQucHJvdG90eXBlLl9wbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbik6Cisg
ICAgICAgIChGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5cGUuX2NvbXB1dGVJbkZsb3dXaWR0aCk6
CisgICAgICAgIChGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5cGUuX2xheW91dE91dE9mRmxvd0Rl
c2NlbmRhbnRzKToKKyAgICAgICAgKEZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5fY29tcHV0
ZU91dE9mRmxvd1dpZHRoKToKKyAgICAgICAgKEZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5f
Y29tcHV0ZU91dE9mRmxvd0hlaWdodCk6CisgICAgICAgIChGb3JtYXR0aW5nQ29udGV4dC5wcm90
b3R5cGUuX2NvbXB1dGVPdXRPZkZsb3dQb3NpdGlvbik6CisgICAgICAgIChGb3JtYXR0aW5nQ29u
dGV4dC5wcm90b3R5cGUuX3Nocmlua1RvRml0V2lkdGgpOgorICAgICAgICAqIExheW91dFJlbG9h
ZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0lubGluZUZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuanM6CisgICAgICAgIChJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5cGUubGF5
b3V0KToKKyAgICAgICAgKElubGluZUZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5faGFuZGxl
SW5saW5lQ29udGFpbmVyKToKKyAgICAgICAgKElubGluZUZvcm1hdHRpbmdDb250ZXh0LnByb3Rv
dHlwZS5faGFuZGxlSW5saW5lQmxvY2tDb250YWluZXIpOgorICAgICAgICAoSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQucHJvdG90eXBlLl9wbGFjZU91dE9mRmxvd0Rlc2NlbmRhbnRzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBMYXlvdXRSZWxvYWRlZC90ZXN0L2luZGV4Lmh0bWw6CisgICAgICAgICog
TGF5b3V0UmVsb2FkZWQvdGVzdC9pbmxpbmUtd2l0aC1vdXQtb2YtZmxvdy1kZXNjZW5kYW50Lmh0
bWw6IEFkZGVkLgorCiAyMDE4LTA0LTA5ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0xheW91dFJlbG9hZGVkXSBBZGQgc3VwcG9ydCBmb3IgcmVsYXRpdmVseSBw
b3NpdGlvbmVkIGNvbnRhaW5lcnMgaW4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dC4KZGlmZiAt
LWdpdCBhL1Rvb2xzL0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Jsb2NrRm9ybWF0
dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmpzIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9y
bWF0dGluZ0NvbnRleHQvQmxvY2tGb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuanMK
aW5kZXggNDdlMWRhNzFmY2Y4MTFkYjQwNWRjNmYyN2JlNDk5NzM0NzFhNzI2NC4uYTI0M2MyODM5
OGNhYTJhOTczYWY2ZTc4N2IyMTg3NGQ5YjM2MWQ2NyAxMDA2NDQKLS0tIGEvVG9vbHMvTGF5b3V0
UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvQmxvY2tGb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuanMKKysrIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQv
QmxvY2tGb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuanMKQEAgLTExOCw5NSArMTE4
LDYgQEAgY2xhc3MgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCBleHRlbmRzIEZvcm1hdHRpbmdDb250
ZXh0IHsKICAgICAgICAgdGhpcy5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VG9wTGVmdChwb3Np
dGlvbik7CiAgICAgfQogCi0gICAgX2xheW91dE91dE9mRmxvd0Rlc2NlbmRhbnRzKCkgewotICAg
ICAgICAvLyBUaGlzIGxheXMgb3V0IGFsbCB0aGUgb3V0LW9mLWZsb3cgYm94ZXMgdGhhdCBiZWxv
bmcgdG8gdGhpcyBmb3JtYXR0aW5nIGNvbnRleHQgZXZlbiBpZgotICAgICAgICAvLyB0aGUgcm9v
dCBjb250YWluZXIgaXMgbm90IHRoZSBjb250YWluaW5nIGJsb2NrLgotICAgICAgICBsZXQgb3V0
T2ZGbG93RGVzY2VuZGFudHMgPSB0aGlzLl9vdXRPZkZsb3dEZXNjZW5kYW50cygpOwotICAgICAg
ICBmb3IgKGxldCBvdXRPZkZsb3dCb3ggb2Ygb3V0T2ZGbG93RGVzY2VuZGFudHMpIHsKLSAgICAg
ICAgICAgIHRoaXMuX2FkZFRvTGF5b3V0UXVldWUob3V0T2ZGbG93Qm94KTsKLSAgICAgICAgICAg
IHRoaXMuY29tcHV0ZVdpZHRoKG91dE9mRmxvd0JveCk7Ci0gICAgICAgICAgICB0aGlzLmxheW91
dFN0YXRlKCkubGF5b3V0KG91dE9mRmxvd0JveCk7Ci0gICAgICAgICAgICB0aGlzLmNvbXB1dGVI
ZWlnaHQob3V0T2ZGbG93Qm94KTsKLSAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVPdXRPZkZsb3dQ
b3NpdGlvbihvdXRPZkZsb3dCb3gpOwotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlRnJvbUxheW91
dFF1ZXVlKG91dE9mRmxvd0JveCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfY29tcHV0ZU91
dE9mRmxvd1dpZHRoKGxheW91dEJveCkgewotICAgICAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBw
b3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMKLQotICAgICAgICAvLyAxLiAnbGVmdCcg
YW5kICd3aWR0aCcgYXJlICdhdXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRo
ZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVmdCcKLSAgICAgICAg
Ly8gMi4gJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICd3aWR0aCcgaXMgbm90ICdh
dXRvJywgdGhlbiBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0
YWJsaXNoaW5nCi0gICAgICAgIC8vICAgICB0aGUgc3RhdGljLXBvc2l0aW9uIGNvbnRhaW5pbmcg
YmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBvdGhlcndp
c2Ugc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KLSAgICAgICAgLy8gICAgIFRo
ZW4gc29sdmUgZm9yICdsZWZ0JyAoaWYgJ2RpcmVjdGlvbiBpcyAncnRsJykgb3IgJ3JpZ2h0JyAo
aWYgJ2RpcmVjdGlvbicgaXMgJ2x0cicpLgotICAgICAgICAvLyAzLiAnd2lkdGgnIGFuZCAncmln
aHQnIGFyZSAnYXV0bycgYW5kICdsZWZ0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBp
cyBzaHJpbmstdG8tZml0IC4gVGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JwotICAgICAgICAvLyA0LiAn
bGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVu
IHNvbHZlIGZvciAnbGVmdCcKLSAgICAgICAgLy8gNS4gJ3dpZHRoJyBpcyAnYXV0bycsICdsZWZ0
JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3IgJ3dpZHRoJwotICAg
ICAgICAvLyA2LiAncmlnaHQnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSBub3Qg
J2F1dG8nLCB0aGVuIHNvbHZlIGZvciAncmlnaHQnCi0gICAgICAgIGxldCB3aWR0aCA9IE51bWJl
ci5OYU47Ci0gICAgICAgIGlmIChVdGlscy5pc1dpZHRoQXV0byhsYXlvdXRCb3gpICYmIFV0aWxz
LmlzTGVmdEF1dG8obGF5b3V0Qm94KSAmJiBVdGlscy5pc1JpZ2h0QXV0byhsYXlvdXRCb3gpKQot
ICAgICAgICAgICAgd2lkdGggPSB0aGlzLl9zaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCk7Ci0g
ICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzTGVmdEF1dG8obGF5b3V0Qm94KSAmJiBVdGlscy5pc1dp
ZHRoQXV0byhsYXlvdXRCb3gpICYmICFVdGlscy5pc1JpZ2h0QXV0byhsYXlvdXRCb3gpKQotICAg
ICAgICAgICAgd2lkdGggPSB0aGlzLl9zaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCk7IC8vIDEK
LSAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNMZWZ0QXV0byhsYXlvdXRCb3gpICYmIFV0aWxzLmlz
UmlnaHRBdXRvKGxheW91dEJveCkgJiYgIVV0aWxzLmlzV2lkdGhBdXRvKGxheW91dEJveCkpCi0g
ICAgICAgICAgICB3aWR0aCA9IFV0aWxzLndpZHRoKGxheW91dEJveCk7IC8vIDIKLSAgICAgICAg
ZWxzZSBpZiAoVXRpbHMuaXNXaWR0aEF1dG8obGF5b3V0Qm94KSAmJiBVdGlscy5pc1JpZ2h0QXV0
byhsYXlvdXRCb3gpICYmICFVdGlscy5pc0xlZnRBdXRvKGxheW91dEJveCkpCi0gICAgICAgICAg
ICB3aWR0aCA9IHRoaXMuX3Nocmlua1RvRml0V2lkdGgobGF5b3V0Qm94KTsgLy8gMwotICAgICAg
ICBlbHNlIGlmIChVdGlscy5pc0xlZnRBdXRvKGxheW91dEJveCkgJiYgIVV0aWxzLmlzV2lkdGhB
dXRvKGxheW91dEJveCkgJiYgIVV0aWxzLmlzUmlnaHRBdXRvKGxheW91dEJveCkpCi0gICAgICAg
ICAgICB3aWR0aCA9IFV0aWxzLndpZHRoKGxheW91dEJveCk7IC8vIDQKLSAgICAgICAgZWxzZSBp
ZiAoVXRpbHMuaXNXaWR0aEF1dG8obGF5b3V0Qm94KSAmJiAhVXRpbHMuaXNMZWZ0QXV0byhsYXlv
dXRCb3gpICYmICFVdGlscy5pc1JpZ2h0QXV0byhsYXlvdXRCb3gpKQotICAgICAgICAgICAgd2lk
dGggPSBNYXRoLm1heCgwLCB0aGlzLmRpc3BsYXlCb3gobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKS5jb250ZW50Qm94KCkud2lkdGgoKSAtIFV0aWxzLnJpZ2h0KGxheW91dEJveCkgLSBVdGls
cy5sZWZ0KGxheW91dEJveCkpOyAvLyA1Ci0gICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzUmlnaHRB
dXRvKGxheW91dEJveCkgJiYgIVV0aWxzLmlzTGVmdEF1dG8obGF5b3V0Qm94KSAmJiAhVXRpbHMu
aXNXaWR0aEF1dG8obGF5b3V0Qm94KSkKLSAgICAgICAgICAgIHdpZHRoID0gVXRpbHMud2lkdGgo
bGF5b3V0Qm94KTsgLy8gNgotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgd2lkdGggKz0gVXRpbHMuY29tcHV0ZWRIb3Jpem9udGFsQm9yZGVy
QW5kUGFkZGluZyhsYXlvdXRCb3gubm9kZSgpKTsKLSAgICAgICAgdGhpcy5kaXNwbGF5Qm94KGxh
eW91dEJveCkuc2V0V2lkdGgod2lkdGgpOwotICAgIH0KLQotICAgIF9jb21wdXRlSW5GbG93V2lk
dGgobGF5b3V0Qm94KSB7Ci0gICAgICAgIGlmIChVdGlscy5pc1dpZHRoQXV0byhsYXlvdXRCb3gp
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldFdpZHRo
KHRoaXMuX2hvcml6b250YWxDb25zdHJhaW50KGxheW91dEJveCkpOwotICAgICAgICByZXR1cm4g
dGhpcy5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0V2lkdGgoVXRpbHMud2lkdGgobGF5b3V0Qm94
KSArIFV0aWxzLmNvbXB1dGVkSG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmcobGF5b3V0Qm94Lm5v
ZGUoKSkpOwotICAgIH0KLQotICAgIF9jb21wdXRlT3V0T2ZGbG93SGVpZ2h0KGxheW91dEJveCkg
ewotICAgICAgICAvLyAxLiBJZiBhbGwgdGhyZWUgb2YgJ3RvcCcsICdoZWlnaHQnLCBhbmQgJ2Jv
dHRvbScgYXJlIGF1dG8sIHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGFuZCBhcHBs
eSBydWxlIG51bWJlciB0aHJlZSBiZWxvdy4KLSAgICAgICAgLy8gMi4gSWYgbm9uZSBvZiB0aGUg
dGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9t
JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIKLSAgICAgICAgLy8gICAgdGhl
IGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcy4g
SWYgb25lIG9mICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLWJvdHRvbScgaXMgJ2F1dG8nLAotICAg
ICAgICAvLyAgICBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuIElmIHRoZSB2YWx1
ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20nIGFu
ZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KLSAgICAgICAgLy8gT3RoZXJ3aXNlLCBwaWNrIHRoZSBv
bmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgotCi0gICAgICAgIC8v
IDMuICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnYm90dG9tJyBpcyBub3QgJ2F1
dG8nLCB0aGVuIHRoZSBoZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywK
LSAgICAgICAgLy8gICAgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21h
cmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcKLSAgICAgICAgLy8gNC4gJ3Rv
cCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRo
ZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzCi0g
ICAgICAgIC8vICAgIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBh
bmQgc29sdmUgZm9yICdib3R0b20nCi0gICAgICAgIC8vIDUuICdoZWlnaHQnIGFuZCAnYm90dG9t
JyBhcmUgJ2F1dG8nIGFuZCAndG9wJyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSBoZWlnaHQgaXMg
YmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywKLSAgICAgICAgLy8gICAgc2V0ICdhdXRv
JyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBz
b2x2ZSBmb3IgJ2JvdHRvbScKLSAgICAgICAgLy8gNi4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVpZ2h0
JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9y
ICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3Rv
cCcKLSAgICAgICAgLy8gNy4gJ2hlaWdodCcgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2JvdHRvbScg
YXJlIG5vdCAnYXV0bycsIHRoZW4gJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAn
bWFyZ2luLWJvdHRvbScgYXJlIHNldCB0byAwIGFuZCBzb2x2ZSBmb3IgJ2hlaWdodCcKLSAgICAg
ICAgLy8gOC4gJ2JvdHRvbScgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2hlaWdodCcgYXJlIG5vdCAn
YXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdp
bi1ib3R0b20nIHRvIDAgYW5kIHNvbHZlIGZvciAnYm90dG9tJwotICAgICAgICBsZXQgaGVpZ2h0
ID0gTnVtYmVyLk5hTjsKLSAgICAgICAgaWYgKFV0aWxzLmlzSGVpZ2h0QXV0byhsYXlvdXRCb3gp
ICYmIFV0aWxzLmlzQm90dG9tQXV0byhsYXlvdXRCb3gpICYmIFV0aWxzLmlzVG9wQXV0byhsYXlv
dXRCb3gpKQotICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5fY29udGVudEhlaWdodChsYXlvdXRC
b3gpOyAvLyAxCi0gICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzVG9wQXV0bygobGF5b3V0Qm94KSkg
JiYgVXRpbHMuaXNIZWlnaHRBdXRvKChsYXlvdXRCb3gpKSAmJiAhVXRpbHMuaXNCb3R0b21BdXRv
KChsYXlvdXRCb3gpKSkKLSAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuX2NvbnRlbnRIZWlnaHQo
bGF5b3V0Qm94KTsgLy8gMwotICAgICAgICBlbHNlIGlmIChVdGlscy5pc1RvcEF1dG8oKGxheW91
dEJveCkpICYmIFV0aWxzLmlzQm90dG9tQXV0bygobGF5b3V0Qm94KSkgJiYgIVV0aWxzLmlzSGVp
Z2h0QXV0bygobGF5b3V0Qm94KSkpCi0gICAgICAgICAgICBoZWlnaHQgPSBVdGlscy5oZWlnaHQo
bGF5b3V0Qm94KTsgLy8gNAotICAgICAgICBlbHNlIGlmIChVdGlscy5pc0hlaWdodEF1dG8oKGxh
eW91dEJveCkpICYmIFV0aWxzLmlzQm90dG9tQXV0bygobGF5b3V0Qm94KSkgJiYgIVV0aWxzLmlz
VG9wQXV0bygobGF5b3V0Qm94KSkpCi0gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLl9jb250ZW50
SGVpZ2h0KGxheW91dEJveCk7IC8vIDUKLSAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNUb3BBdXRv
KChsYXlvdXRCb3gpKSAmJiAhVXRpbHMuaXNIZWlnaHRBdXRvKChsYXlvdXRCb3gpKSAmJiAhVXRp
bHMuaXNCb3R0b21BdXRvKChsYXlvdXRCb3gpKSkKLSAgICAgICAgICAgIGhlaWdodCA9IFV0aWxz
LmhlaWdodChsYXlvdXRCb3gpOyAvLyA2Ci0gICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzSGVpZ2h0
QXV0bygobGF5b3V0Qm94KSkgJiYgIVV0aWxzLmlzVG9wQXV0bygobGF5b3V0Qm94KSkgJiYgIVV0
aWxzLmlzQm90dG9tQXV0bygobGF5b3V0Qm94KSkpCi0gICAgICAgICAgICBoZWlnaHQgPSBNYXRo
Lm1heCgwLCB0aGlzLmRpc3BsYXlCb3gobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250
ZW50Qm94KCkuaGVpZ2h0KCkgLSBVdGlscy5ib3R0b20obGF5b3V0Qm94KSAtIFV0aWxzLnRvcChs
YXlvdXRCb3gpKTsgLy8gNwotICAgICAgICBlbHNlIGlmIChVdGlscy5pc0JvdHRvbUF1dG8oKGxh
eW91dEJveCkpICYmICFVdGlscy5pc1RvcEF1dG8oKGxheW91dEJveCkpICYmICFVdGlscy5pc0hl
aWdodEF1dG8oKGxheW91dEJveCkpKQotICAgICAgICAgICAgaGVpZ2h0ID0gVXRpbHMuaGVpZ2h0
KGxheW91dEJveCk7IC8vIDgKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIGhlaWdodCArPSBVdGlscy5jb21wdXRlZFZlcnRpY2FsQm9yZGVy
QW5kUGFkZGluZyhsYXlvdXRCb3gubm9kZSgpKTsKLSAgICAgICAgdGhpcy5kaXNwbGF5Qm94KGxh
eW91dEJveCkuc2V0SGVpZ2h0KGhlaWdodCk7Ci0gICAgfQotCiAgICAgX2NvbXB1dGVJbkZsb3dI
ZWlnaHQobGF5b3V0Qm94KSB7CiAgICAgICAgIGlmIChVdGlscy5pc0hlaWdodEF1dG8obGF5b3V0
Qm94KSkgewogICAgICAgICAgICAgLy8gT25seSBjaGlsZHJlbiBpbiB0aGUgbm9ybWFsIGZsb3cg
YXJlIHRha2VuIGludG8gYWNjb3VudCAoaS5lLiwgZmxvYXRpbmcgYm94ZXMgYW5kIGFic29sdXRl
bHkgcG9zaXRpb25lZCBib3hlcyBhcmUgaWdub3JlZCwKQEAgLTI2NCw2NSArMTc1LDQgQEAgY2xh
c3MgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCBleHRlbmRzIEZvcm1hdHRpbmdDb250ZXh0IHsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gYm90dG9tOwogICAgIH0KLQotICAgIF9jb21wdXRlT3V0
T2ZGbG93UG9zaXRpb24obGF5b3V0Qm94KSB7Ci0gICAgICAgIGxldCBkaXNwbGF5Qm94ID0gdGhp
cy5kaXNwbGF5Qm94KGxheW91dEJveCk7Ci0gICAgICAgIGxldCB0b3AgPSBOdW1iZXIuTmFOOwot
ICAgICAgICBsZXQgY29udGFpbmVyU2l6ZSA9IHRoaXMuZGlzcGxheUJveChsYXlvdXRCb3guY29u
dGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3goKS5zaXplKCk7Ci0gICAgICAgIC8vIFRvcC9ib3R0
b20KLSAgICAgICAgaWYgKFV0aWxzLmlzVG9wQXV0byhsYXlvdXRCb3gpICYmIFV0aWxzLmlzQm90
dG9tQXV0byhsYXlvdXRCb3gpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoVXRpbHMuaXNTdGF0aWNh
bGx5UG9zaXRpb25lZChsYXlvdXRCb3gpKTsKLSAgICAgICAgICAgIC8vIFZlcnRpY2FsbHkgc3Rh
dGljYWxseSBwb3NpdGlvbmVkLgotICAgICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaWYg
aXQgaXMgYWN0dWFsbHkgdmFsaWQgdGhhdCB3ZSB1c2UgdGhlIHBhcmVudCBib3ggYXMgdGhlIGNv
bnRhaW5lciAod2hpY2ggaXMgbm90IGV2ZW4gaW4gdGhpcyBmb3JtYXR0aW5nIGNvbnRleHQpLgot
ICAgICAgICAgICAgbGV0IHBhcmVudCA9IGxheW91dEJveC5wYXJlbnQoKTsKLSAgICAgICAgICAg
IGxldCBwYXJlbnREaXNwbGF5Qm94ID0gdGhpcy5kaXNwbGF5Qm94KHBhcmVudCk7Ci0gICAgICAg
ICAgICBsZXQgcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93
U2libGluZygpOwotICAgICAgICAgICAgbGV0IGNvbnRlbnRCb3R0b20gPSBwcmV2aW91c0luRmxv
d1NpYmxpbmcgPyB0aGlzLmRpc3BsYXlCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nKS5ib3R0b20o
KSA6IHBhcmVudERpc3BsYXlCb3guY29udGVudEJveCgpLnRvcCgpOwotICAgICAgICAgICAgdG9w
ID0gY29udGVudEJvdHRvbSArIHRoaXMubWFyZ2luVG9wKGxheW91dEJveCk7Ci0gICAgICAgICAg
ICAvLyBDb252ZXJ0IHN0YXRpYyBwb3NpdGlvbiAoaW4gcGFyZW50IGNvb3JkaW5hdGUgc3lzdGVt
KSB0byBhYnNvbHV0ZSAoaW4gY29udGFpbmluZyBibG9jayBjb29yZGluZGF0ZSBzeXN0ZW0pLgot
ICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoZGlzcGxheUJveC5wYXJlbnQoKSA9PSB0aGlzLmRpc3Bs
YXlCb3gobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKSk7Ci0gICAgICAgICAgICAgICAgdG9w
ICs9IFV0aWxzLm1hcFBvc2l0aW9uKHBhcmVudERpc3BsYXlCb3gudG9wTGVmdCgpLCBwYXJlbnRE
aXNwbGF5Qm94LCBkaXNwbGF5Qm94LnBhcmVudCgpKS50b3AoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmICghVXRpbHMuaXNUb3BBdXRvKGxheW91dEJveCkpCi0gICAgICAgICAg
ICB0b3AgPSBVdGlscy50b3AobGF5b3V0Qm94KSArIHRoaXMubWFyZ2luVG9wKGxheW91dEJveCk7
Ci0gICAgICAgIGVsc2UgaWYgKCFVdGlscy5pc0JvdHRvbUF1dG8obGF5b3V0Qm94KSkKLSAgICAg
ICAgICAgIHRvcCA9IGNvbnRhaW5lclNpemUuaGVpZ2h0KCkgLSBVdGlscy5ib3R0b20obGF5b3V0
Qm94KSAtIGRpc3BsYXlCb3guaGVpZ2h0KCkgLSB0aGlzLm1hcmdpbkJvdHRvbShsYXlvdXRCb3gp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgLy8gTGVmdC9yaWdodAotICAgICAgICBsZXQgbGVmdCA9IE51bWJlci5OYU47Ci0gICAgICAg
IGlmIChVdGlscy5pc0xlZnRBdXRvKGxheW91dEJveCkgJiYgVXRpbHMuaXNSaWdodEF1dG8obGF5
b3V0Qm94KSkgewotICAgICAgICAgICAgQVNTRVJUKFV0aWxzLmlzU3RhdGljYWxseVBvc2l0aW9u
ZWQobGF5b3V0Qm94KSk7Ci0gICAgICAgICAgICAvLyBIb3Jpem9udGFsbHkgc3RhdGljYWxseSBw
b3NpdGlvbmVkLgotICAgICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaWYgaXQgaXMgYWN0
dWFsbHkgdmFsaWQgdGhhdCB3ZSB1c2UgdGhlIHBhcmVudCBib3ggYXMgdGhlIGNvbnRhaW5lciAo
d2hpY2ggaXMgbm90IGV2ZW4gaW4gdGhpcyBmb3JtYXR0aW5nIGNvbnRleHQpLgotICAgICAgICAg
ICAgbGV0IHBhcmVudCA9IGxheW91dEJveC5wYXJlbnQoKTsKLSAgICAgICAgICAgIGxldCBwYXJl
bnREaXNwbGF5Qm94ID0gdGhpcy5kaXNwbGF5Qm94KHBhcmVudCk7Ci0gICAgICAgICAgICBsZWZ0
ID0gcGFyZW50RGlzcGxheUJveC5jb250ZW50Qm94KCkubGVmdCgpICsgdGhpcy5tYXJnaW5MZWZ0
KGxheW91dEJveCk7Ci0gICAgICAgICAgICAvLyBDb252ZXJ0IHN0YXRpYyBwb3NpdGlvbiAoaW4g
cGFyZW50IGNvb3JkaW5hdGUgc3lzdGVtKSB0byBhYnNvbHV0ZSAoaW4gY29udGFpbmluZyBibG9j
ayBjb29yZGluZGF0ZSBzeXN0ZW0pLgotICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZGlzcGxheUJv
eC5wYXJlbnQoKSA9PSB0aGlzLmRpc3BsYXlCb3gobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KSk7Ci0gICAgICAgICAgICAgICAgbGVmdCArPSBVdGlscy5tYXBQb3NpdGlvbihwYXJlbnREaXNw
bGF5Qm94LnRvcExlZnQoKSwgcGFyZW50RGlzcGxheUJveCwgZGlzcGxheUJveC5wYXJlbnQoKSku
bGVmdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc0xlZnRB
dXRvKGxheW91dEJveCkpCi0gICAgICAgICAgICBsZWZ0ID0gVXRpbHMubGVmdChsYXlvdXRCb3gp
ICsgdGhpcy5tYXJnaW5MZWZ0KGxheW91dEJveCk7Ci0gICAgICAgIGVsc2UgaWYgKCFVdGlscy5p
c1JpZ2h0QXV0byhsYXlvdXRCb3gpKQotICAgICAgICAgICAgbGVmdCA9IGNvbnRhaW5lclNpemUu
d2lkdGgoKSAtIFV0aWxzLnJpZ2h0KGxheW91dEJveCkgLSBkaXNwbGF5Qm94LndpZHRoKCkgLSB0
aGlzLm1hcmdpblJpZ2h0KGxheW91dEJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQobmV3IExh
eW91dFBvaW50KHRvcCwgbGVmdCkpOwotICAgIH0KLQotICAgIF9zaHJpbmtUb0ZpdFdpZHRoKGxh
eW91dEJveCkgewotICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyBuYWl2ZS4KLSAgICAgICAgQVNT
RVJUKFV0aWxzLmlzV2lkdGhBdXRvKGxheW91dEJveCkpOwotICAgICAgICBpZiAoIWxheW91dEJv
eC5pc0NvbnRhaW5lcigpIHx8ICFsYXlvdXRCb3guaGFzQ2hpbGQoKSkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICBsZXQgd2lkdGggPSAwOwotICAgICAgICBmb3IgKGxldCBpbkZsb3dD
aGlsZCA9IGxheW91dEJveC5maXJzdEluRmxvd0NoaWxkKCk7IGluRmxvd0NoaWxkOyBpbkZsb3dD
aGlsZCA9IGluRmxvd0NoaWxkLm5leHRJbkZsb3dTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgIGxl
dCB3aWR0aENhbmRpZGF0ZSA9IFV0aWxzLmlzV2lkdGhBdXRvKGluRmxvd0NoaWxkKSA/IHRoaXMu
X3Nocmlua1RvRml0V2lkdGgoaW5GbG93Q2hpbGQpIDogVXRpbHMud2lkdGgoaW5GbG93Q2hpbGQp
OwotICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgd2lkdGhDYW5kaWRhdGUgKyBV
dGlscy5jb21wdXRlZEhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nKGluRmxvd0NoaWxkLm5vZGUo
KSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3aWR0aDsKLSAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9Gb3JtYXR0aW5nQ29udGV4dC9Gb3JtYXR0aW5nQ29u
dGV4dC5qcyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Zvcm1hdHRp
bmdDb250ZXh0LmpzCmluZGV4IDljMjUyYTA1NDYyMWE2NDVmN2FmZjFjMGI1ZWU1NjQ0MmQ0ZjQ1
NTguLjQyNWU2YTkzYmUyNzhhNWJkNzM1NWNlMDI0MmY2ODUzMDFjZDMxZjYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Zvcm1hdHRpbmdDb250ZXh0
LmpzCisrKyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Zvcm1hdHRp
bmdDb250ZXh0LmpzCkBAIC0xMTcsNiArMTE3LDIwIEBAIGNsYXNzIEZvcm1hdHRpbmdDb250ZXh0
IHsKICAgICAgICAgdGhpcy5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0SGVpZ2h0KFV0aWxzLmhl
aWdodChsYXlvdXRCb3gpICsgVXRpbHMuY29tcHV0ZWRWZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmco
bGF5b3V0Qm94Lm5vZGUoKSkpOwogICAgIH0KIAorICAgIF9wbGFjZUluRmxvd1Bvc2l0aW9uZWRD
aGlsZHJlbihjb250YWluZXIpIHsKKyAgICAgICAgaWYgKCFjb250YWluZXIuaXNDb250YWluZXIo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gSWYgdGhpcyBsYXlvdXRCb3ggYWxz
byBlc3RhYmxpc2hlcyBhIGZvcm1hdHRpbmcgY29udGV4dCwgdGhlbiBwb3NpdGlvbmluZyBhbHJl
YWR5IGhhcyBoYXBwZW5kIGF0IHRoZSBmb3JtYXR0aW5nIGNvbnRleHQuCisgICAgICAgIGlmIChj
b250YWluZXIuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpICYmIGNvbnRhaW5lciAhPSB0
aGlzLmZvcm1hdHRpbmdSb290KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VS
VChjb250YWluZXIuaXNDb250YWluZXIoKSk7CisgICAgICAgIGZvciAobGV0IGluRmxvd0NoaWxk
ID0gY29udGFpbmVyLmZpcnN0SW5GbG93Q2hpbGQoKTsgaW5GbG93Q2hpbGQ7IGluRmxvd0NoaWxk
ID0gaW5GbG93Q2hpbGQubmV4dEluRmxvd1NpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKCFp
bkZsb3dDaGlsZC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24oaW5G
bG93Q2hpbGQpOworICAgICAgICB9CisgICAgfQorCiAgICAgX2NvbXB1dGVJbkZsb3dQb3NpdGlv
bmVkUG9zaXRpb24obGF5b3V0Qm94KSB7CiAgICAgICAgIC8vIFN0YXJ0IHdpdGggdGhlIG9yaWdp
bmFsLCBzdGF0aWMgcG9zaXRpb24uCiAgICAgICAgIGxldCBkaXNwbGF5Qm94ID0gdGhpcy5kaXNw
bGF5Qm94KGxheW91dEJveCk7CkBAIC0xMzQsMTggKzE0OCwxNTQgQEAgY2xhc3MgRm9ybWF0dGlu
Z0NvbnRleHQgewogICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQocmVsYXRpdmVQb3NpdGlv
bik7CiAgICAgfQogCi0gICAgX3BsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnRhaW5l
cikgewotICAgICAgICBpZiAoIWNvbnRhaW5lci5pc0NvbnRhaW5lcigpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAvLyBJZiB0aGlzIGxheW91dEJveCBhbHNvIGVzdGFibGlzaGVzIGEg
Zm9ybWF0dGluZyBjb250ZXh0LCB0aGVuIHBvc2l0aW9uaW5nIGFscmVhZHkgaGFzIGhhcHBlbmQg
YXQgdGhlIGZvcm1hdHRpbmcgY29udGV4dC4KLSAgICAgICAgaWYgKGNvbnRhaW5lci5lc3RhYmxp
c2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkgJiYgY29udGFpbmVyICE9IHRoaXMuZm9ybWF0dGluZ1Jv
b3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKGNvbnRhaW5lci5pc0Nv
bnRhaW5lcigpKTsKLSAgICAgICAgZm9yIChsZXQgaW5GbG93Q2hpbGQgPSBjb250YWluZXIuZmly
c3RJbkZsb3dDaGlsZCgpOyBpbkZsb3dDaGlsZDsgaW5GbG93Q2hpbGQgPSBpbkZsb3dDaGlsZC5u
ZXh0SW5GbG93U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoIWluRmxvd0NoaWxkLmlzSW5G
bG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
dGhpcy5fY29tcHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbihpbkZsb3dDaGlsZCk7CisgICAg
X2NvbXB1dGVJbkZsb3dXaWR0aChsYXlvdXRCb3gpIHsKKyAgICAgICAgaWYgKFV0aWxzLmlzV2lk
dGhBdXRvKGxheW91dEJveCkpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5Qm94KGxh
eW91dEJveCkuc2V0V2lkdGgodGhpcy5faG9yaXpvbnRhbENvbnN0cmFpbnQobGF5b3V0Qm94KSk7
CisgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlCb3gobGF5b3V0Qm94KS5zZXRXaWR0aChVdGls
cy53aWR0aChsYXlvdXRCb3gpICsgVXRpbHMuY29tcHV0ZWRIb3Jpem9udGFsQm9yZGVyQW5kUGFk
ZGluZyhsYXlvdXRCb3gubm9kZSgpKSk7CisgICAgfQorCisgICAgX2xheW91dE91dE9mRmxvd0Rl
c2NlbmRhbnRzKCkgeworICAgICAgICAvLyBUaGlzIGxheXMgb3V0IGFsbCB0aGUgb3V0LW9mLWZs
b3cgYm94ZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBmb3JtYXR0aW5nIGNvbnRleHQgZXZlbiBpZgor
ICAgICAgICAvLyB0aGUgcm9vdCBjb250YWluZXIgaXMgbm90IHRoZSBjb250YWluaW5nIGJsb2Nr
LgorICAgICAgICBsZXQgb3V0T2ZGbG93RGVzY2VuZGFudHMgPSB0aGlzLl9vdXRPZkZsb3dEZXNj
ZW5kYW50cygpOworICAgICAgICBmb3IgKGxldCBvdXRPZkZsb3dCb3ggb2Ygb3V0T2ZGbG93RGVz
Y2VuZGFudHMpIHsKKyAgICAgICAgICAgIHRoaXMuX2FkZFRvTGF5b3V0UXVldWUob3V0T2ZGbG93
Qm94KTsKKyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVPdXRPZkZsb3dXaWR0aChvdXRPZkZsb3dC
b3gpOworICAgICAgICAgICAgdGhpcy5sYXlvdXRTdGF0ZSgpLmxheW91dChvdXRPZkZsb3dCb3gp
OworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZU91dE9mRmxvd0hlaWdodChvdXRPZkZsb3dCb3gp
OworICAgICAgICAgICAgdGhpcy5fY29tcHV0ZU91dE9mRmxvd1Bvc2l0aW9uKG91dE9mRmxvd0Jv
eCk7CisgICAgICAgICAgICB0aGlzLl9yZW1vdmVGcm9tTGF5b3V0UXVldWUob3V0T2ZGbG93Qm94
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9jb21wdXRlT3V0T2ZGbG93V2lkdGgobGF5b3V0
Qm94KSB7CisgICAgICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBs
YWNlZCBlbGVtZW50cworCisgICAgICAgIC8vIDEuICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgJ2F1
dG8nIGFuZCAncmlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10
by1maXQuIFRoZW4gc29sdmUgZm9yICdsZWZ0JworICAgICAgICAvLyAyLiAnbGVmdCcgYW5kICdy
aWdodCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAn
ZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcKKyAgICAgICAg
Ly8gICAgIHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRyJyBzZXQg
J2xlZnQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIG90aGVyd2lzZSBzZXQgJ3JpZ2h0JyB0byB0
aGUgc3RhdGljIHBvc2l0aW9uLgorICAgICAgICAvLyAgICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQn
IChpZiAnZGlyZWN0aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAn
bHRyJykuCisgICAgICAgIC8vIDMuICd3aWR0aCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyBhbmQg
J2xlZnQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10by1maXQgLiBU
aGVuIHNvbHZlIGZvciAncmlnaHQnCisgICAgICAgIC8vIDQuICdsZWZ0JyBpcyAnYXV0bycsICd3
aWR0aCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdsZWZ0Jwor
ICAgICAgICAvLyA1LiAnd2lkdGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBu
b3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnd2lkdGgnCisgICAgICAgIC8vIDYuICdyaWdodCcg
aXMgJ2F1dG8nLCAnbGVmdCcgYW5kICd3aWR0aCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUg
Zm9yICdyaWdodCcKKyAgICAgICAgbGV0IHdpZHRoID0gTnVtYmVyLk5hTjsKKyAgICAgICAgaWYg
KFV0aWxzLmlzV2lkdGhBdXRvKGxheW91dEJveCkgJiYgVXRpbHMuaXNMZWZ0QXV0byhsYXlvdXRC
b3gpICYmIFV0aWxzLmlzUmlnaHRBdXRvKGxheW91dEJveCkpCisgICAgICAgICAgICB3aWR0aCA9
IHRoaXMuX3Nocmlua1RvRml0V2lkdGgobGF5b3V0Qm94KTsKKyAgICAgICAgZWxzZSBpZiAoVXRp
bHMuaXNMZWZ0QXV0byhsYXlvdXRCb3gpICYmIFV0aWxzLmlzV2lkdGhBdXRvKGxheW91dEJveCkg
JiYgIVV0aWxzLmlzUmlnaHRBdXRvKGxheW91dEJveCkpCisgICAgICAgICAgICB3aWR0aCA9IHRo
aXMuX3Nocmlua1RvRml0V2lkdGgobGF5b3V0Qm94KTsgLy8gMQorICAgICAgICBlbHNlIGlmIChV
dGlscy5pc0xlZnRBdXRvKGxheW91dEJveCkgJiYgVXRpbHMuaXNSaWdodEF1dG8obGF5b3V0Qm94
KSAmJiAhVXRpbHMuaXNXaWR0aEF1dG8obGF5b3V0Qm94KSkKKyAgICAgICAgICAgIHdpZHRoID0g
VXRpbHMud2lkdGgobGF5b3V0Qm94KTsgLy8gMgorICAgICAgICBlbHNlIGlmIChVdGlscy5pc1dp
ZHRoQXV0byhsYXlvdXRCb3gpICYmIFV0aWxzLmlzUmlnaHRBdXRvKGxheW91dEJveCkgJiYgIVV0
aWxzLmlzTGVmdEF1dG8obGF5b3V0Qm94KSkKKyAgICAgICAgICAgIHdpZHRoID0gdGhpcy5fc2hy
aW5rVG9GaXRXaWR0aChsYXlvdXRCb3gpOyAvLyAzCisgICAgICAgIGVsc2UgaWYgKFV0aWxzLmlz
TGVmdEF1dG8obGF5b3V0Qm94KSAmJiAhVXRpbHMuaXNXaWR0aEF1dG8obGF5b3V0Qm94KSAmJiAh
VXRpbHMuaXNSaWdodEF1dG8obGF5b3V0Qm94KSkKKyAgICAgICAgICAgIHdpZHRoID0gVXRpbHMu
d2lkdGgobGF5b3V0Qm94KTsgLy8gNAorICAgICAgICBlbHNlIGlmIChVdGlscy5pc1dpZHRoQXV0
byhsYXlvdXRCb3gpICYmICFVdGlscy5pc0xlZnRBdXRvKGxheW91dEJveCkgJiYgIVV0aWxzLmlz
UmlnaHRBdXRvKGxheW91dEJveCkpCisgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KDAsIHRo
aXMuZGlzcGxheUJveChsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3goKS53
aWR0aCgpIC0gVXRpbHMucmlnaHQobGF5b3V0Qm94KSAtIFV0aWxzLmxlZnQobGF5b3V0Qm94KSk7
IC8vIDUKKyAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNSaWdodEF1dG8obGF5b3V0Qm94KSAmJiAh
VXRpbHMuaXNMZWZ0QXV0byhsYXlvdXRCb3gpICYmICFVdGlscy5pc1dpZHRoQXV0byhsYXlvdXRC
b3gpKQorICAgICAgICAgICAgd2lkdGggPSBVdGlscy53aWR0aChsYXlvdXRCb3gpOyAvLyA2Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB3
aWR0aCArPSBVdGlscy5jb21wdXRlZEhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nKGxheW91dEJv
eC5ub2RlKCkpOworICAgICAgICB0aGlzLmRpc3BsYXlCb3gobGF5b3V0Qm94KS5zZXRXaWR0aCh3
aWR0aCk7CisgICAgfQorCisgICAgX2NvbXB1dGVPdXRPZkZsb3dIZWlnaHQobGF5b3V0Qm94KSB7
CisgICAgICAgIC8vIDEuIElmIGFsbCB0aHJlZSBvZiAndG9wJywgJ2hlaWdodCcsIGFuZCAnYm90
dG9tJyBhcmUgYXV0bywgc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5
IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93LgorICAgICAgICAvLyAyLiBJZiBub25lIG9mIHRoZSB0
aHJlZSBhcmUgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20n
IGFyZSAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlcgorICAgICAgICAvLyAgICB0aGUg
ZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVzLiBJ
ZiBvbmUgb2YgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyBpcyAnYXV0bycsCisgICAg
ICAgIC8vICAgIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4gSWYgdGhlIHZhbHVl
cyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2JvdHRvbScgYW5k
IHNvbHZlIGZvciB0aGF0IHZhbHVlLgorICAgICAgICAvLyBPdGhlcndpc2UsIHBpY2sgdGhlIG9u
ZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCisKKyAgICAgICAgLy8g
My4gJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSAnYXV0bycgYW5kICdib3R0b20nIGlzIG5vdCAnYXV0
bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVudCBwZXIgMTAuNi43LAor
ICAgICAgICAvLyAgICBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFy
Z2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAndG9wJworICAgICAgICAvLyA0LiAndG9w
JyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ2hlaWdodCcgaXMgbm90ICdhdXRvJywgdGhl
biBzZXQgJ3RvcCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgc2V0ICdhdXRvJyB2YWx1ZXMKKyAg
ICAgICAgLy8gICAgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFu
ZCBzb2x2ZSBmb3IgJ2JvdHRvbScKKyAgICAgICAgLy8gNS4gJ2hlaWdodCcgYW5kICdib3R0b20n
IGFyZSAnYXV0bycgYW5kICd0b3AnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBi
YXNlZCBvbiB0aGUgY29udGVudCBwZXIgMTAuNi43LAorICAgICAgICAvLyAgICBzZXQgJ2F1dG8n
IHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNv
bHZlIGZvciAnYm90dG9tJworICAgICAgICAvLyA2LiAndG9wJyBpcyAnYXV0bycsICdoZWlnaHQn
IGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZhbHVlcyBmb3Ig
J21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAndG9w
JworICAgICAgICAvLyA3LiAnaGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFuZCAnYm90dG9tJyBh
cmUgbm90ICdhdXRvJywgdGhlbiAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdt
YXJnaW4tYm90dG9tJyBhcmUgc2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVpZ2h0JworICAgICAg
ICAvLyA4LiAnYm90dG9tJyBpcyAnYXV0bycsICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgbm90ICdh
dXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2lu
LWJvdHRvbScgdG8gMCBhbmQgc29sdmUgZm9yICdib3R0b20nCisgICAgICAgIGxldCBoZWlnaHQg
PSBOdW1iZXIuTmFOOworICAgICAgICBpZiAoVXRpbHMuaXNIZWlnaHRBdXRvKGxheW91dEJveCkg
JiYgVXRpbHMuaXNCb3R0b21BdXRvKGxheW91dEJveCkgJiYgVXRpbHMuaXNUb3BBdXRvKGxheW91
dEJveCkpCisgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLl9jb250ZW50SGVpZ2h0KGxheW91dEJv
eCk7IC8vIDEKKyAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNUb3BBdXRvKChsYXlvdXRCb3gpKSAm
JiBVdGlscy5pc0hlaWdodEF1dG8oKGxheW91dEJveCkpICYmICFVdGlscy5pc0JvdHRvbUF1dG8o
KGxheW91dEJveCkpKQorICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5fY29udGVudEhlaWdodChs
YXlvdXRCb3gpOyAvLyAzCisgICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzVG9wQXV0bygobGF5b3V0
Qm94KSkgJiYgVXRpbHMuaXNCb3R0b21BdXRvKChsYXlvdXRCb3gpKSAmJiAhVXRpbHMuaXNIZWln
aHRBdXRvKChsYXlvdXRCb3gpKSkKKyAgICAgICAgICAgIGhlaWdodCA9IFV0aWxzLmhlaWdodChs
YXlvdXRCb3gpOyAvLyA0CisgICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzSGVpZ2h0QXV0bygobGF5
b3V0Qm94KSkgJiYgVXRpbHMuaXNCb3R0b21BdXRvKChsYXlvdXRCb3gpKSAmJiAhVXRpbHMuaXNU
b3BBdXRvKChsYXlvdXRCb3gpKSkKKyAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuX2NvbnRlbnRI
ZWlnaHQobGF5b3V0Qm94KTsgLy8gNQorICAgICAgICBlbHNlIGlmIChVdGlscy5pc1RvcEF1dG8o
KGxheW91dEJveCkpICYmICFVdGlscy5pc0hlaWdodEF1dG8oKGxheW91dEJveCkpICYmICFVdGls
cy5pc0JvdHRvbUF1dG8oKGxheW91dEJveCkpKQorICAgICAgICAgICAgaGVpZ2h0ID0gVXRpbHMu
aGVpZ2h0KGxheW91dEJveCk7IC8vIDYKKyAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNIZWlnaHRB
dXRvKChsYXlvdXRCb3gpKSAmJiAhVXRpbHMuaXNUb3BBdXRvKChsYXlvdXRCb3gpKSAmJiAhVXRp
bHMuaXNCb3R0b21BdXRvKChsYXlvdXRCb3gpKSkKKyAgICAgICAgICAgIGhlaWdodCA9IE1hdGgu
bWF4KDAsIHRoaXMuZGlzcGxheUJveChsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRl
bnRCb3goKS5oZWlnaHQoKSAtIFV0aWxzLmJvdHRvbShsYXlvdXRCb3gpIC0gVXRpbHMudG9wKGxh
eW91dEJveCkpOyAvLyA3CisgICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzQm90dG9tQXV0bygobGF5
b3V0Qm94KSkgJiYgIVV0aWxzLmlzVG9wQXV0bygobGF5b3V0Qm94KSkgJiYgIVV0aWxzLmlzSGVp
Z2h0QXV0bygobGF5b3V0Qm94KSkpCisgICAgICAgICAgICBoZWlnaHQgPSBVdGlscy5oZWlnaHQo
bGF5b3V0Qm94KTsgLy8gOAorICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgaGVpZ2h0ICs9IFV0aWxzLmNvbXB1dGVkVmVydGljYWxCb3JkZXJB
bmRQYWRkaW5nKGxheW91dEJveC5ub2RlKCkpOworICAgICAgICB0aGlzLmRpc3BsYXlCb3gobGF5
b3V0Qm94KS5zZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICB9CisKKyAgICBfY29tcHV0ZU91dE9mRmxv
d1Bvc2l0aW9uKGxheW91dEJveCkgeworICAgICAgICBsZXQgZGlzcGxheUJveCA9IHRoaXMuZGlz
cGxheUJveChsYXlvdXRCb3gpOworICAgICAgICBsZXQgdG9wID0gTnVtYmVyLk5hTjsKKyAgICAg
ICAgbGV0IGNvbnRhaW5lclNpemUgPSB0aGlzLmRpc3BsYXlCb3gobGF5b3V0Qm94LmNvbnRhaW5p
bmdCbG9jaygpKS5jb250ZW50Qm94KCkuc2l6ZSgpOworICAgICAgICAvLyBUb3AvYm90dG9tCisg
ICAgICAgIGlmIChVdGlscy5pc1RvcEF1dG8obGF5b3V0Qm94KSAmJiBVdGlscy5pc0JvdHRvbUF1
dG8obGF5b3V0Qm94KSkgeworICAgICAgICAgICAgQVNTRVJUKFV0aWxzLmlzU3RhdGljYWxseVBv
c2l0aW9uZWQobGF5b3V0Qm94KSk7CisgICAgICAgICAgICAvLyBWZXJ0aWNhbGx5IHN0YXRpY2Fs
bHkgcG9zaXRpb25lZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGlmIGl0IGlz
IGFjdHVhbGx5IHZhbGlkIHRoYXQgd2UgdXNlIHRoZSBwYXJlbnQgYm94IGFzIHRoZSBjb250YWlu
ZXIgKHdoaWNoIGlzIG5vdCBldmVuIGluIHRoaXMgZm9ybWF0dGluZyBjb250ZXh0KS4KKyAgICAg
ICAgICAgIGxldCBwYXJlbnQgPSBsYXlvdXRCb3gucGFyZW50KCk7CisgICAgICAgICAgICBsZXQg
cGFyZW50RGlzcGxheUJveCA9IHRoaXMuZGlzcGxheUJveChwYXJlbnQpOworICAgICAgICAgICAg
bGV0IHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxp
bmcoKTsKKyAgICAgICAgICAgIGxldCBjb250ZW50Qm90dG9tID0gcHJldmlvdXNJbkZsb3dTaWJs
aW5nID8gdGhpcy5kaXNwbGF5Qm94KHByZXZpb3VzSW5GbG93U2libGluZykuYm90dG9tKCkgOiBw
YXJlbnREaXNwbGF5Qm94LmNvbnRlbnRCb3goKS50b3AoKTsKKyAgICAgICAgICAgIHRvcCA9IGNv
bnRlbnRCb3R0b20gKyB0aGlzLm1hcmdpblRvcChsYXlvdXRCb3gpOworICAgICAgICAgICAgLy8g
Q29udmVydCBzdGF0aWMgcG9zaXRpb24gKGluIHBhcmVudCBjb29yZGluYXRlIHN5c3RlbSkgdG8g
YWJzb2x1dGUgKGluIGNvbnRhaW5pbmcgYmxvY2sgY29vcmRpbmRhdGUgc3lzdGVtKS4KKyAgICAg
ICAgICAgIGlmIChwYXJlbnQgIT0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGRpc3BsYXlCb3gucGFyZW50KCkgPT0gdGhpcy5kaXNwbGF5Qm94
KGxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkpOworICAgICAgICAgICAgICAgIHRvcCArPSBV
dGlscy5tYXBQb3NpdGlvbihwYXJlbnREaXNwbGF5Qm94LnRvcExlZnQoKSwgcGFyZW50RGlzcGxh
eUJveCwgZGlzcGxheUJveC5wYXJlbnQoKSkudG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoIVV0aWxzLmlzVG9wQXV0byhsYXlvdXRCb3gpKQorICAgICAgICAgICAgdG9w
ID0gVXRpbHMudG9wKGxheW91dEJveCkgKyB0aGlzLm1hcmdpblRvcChsYXlvdXRCb3gpOworICAg
ICAgICBlbHNlIGlmICghVXRpbHMuaXNCb3R0b21BdXRvKGxheW91dEJveCkpCisgICAgICAgICAg
ICB0b3AgPSBjb250YWluZXJTaXplLmhlaWdodCgpIC0gVXRpbHMuYm90dG9tKGxheW91dEJveCkg
LSBkaXNwbGF5Qm94LmhlaWdodCgpIC0gdGhpcy5tYXJnaW5Cb3R0b20obGF5b3V0Qm94KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIC8v
IExlZnQvcmlnaHQKKyAgICAgICAgbGV0IGxlZnQgPSBOdW1iZXIuTmFOOworICAgICAgICBpZiAo
VXRpbHMuaXNMZWZ0QXV0byhsYXlvdXRCb3gpICYmIFV0aWxzLmlzUmlnaHRBdXRvKGxheW91dEJv
eCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChVdGlscy5pc1N0YXRpY2FsbHlQb3NpdGlvbmVkKGxh
eW91dEJveCkpOworICAgICAgICAgICAgLy8gSG9yaXpvbnRhbGx5IHN0YXRpY2FsbHkgcG9zaXRp
b25lZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGlmIGl0IGlzIGFjdHVhbGx5
IHZhbGlkIHRoYXQgd2UgdXNlIHRoZSBwYXJlbnQgYm94IGFzIHRoZSBjb250YWluZXIgKHdoaWNo
IGlzIG5vdCBldmVuIGluIHRoaXMgZm9ybWF0dGluZyBjb250ZXh0KS4KKyAgICAgICAgICAgIGxl
dCBwYXJlbnQgPSBsYXlvdXRCb3gucGFyZW50KCk7CisgICAgICAgICAgICBsZXQgcGFyZW50RGlz
cGxheUJveCA9IHRoaXMuZGlzcGxheUJveChwYXJlbnQpOworICAgICAgICAgICAgbGVmdCA9IHBh
cmVudERpc3BsYXlCb3guY29udGVudEJveCgpLmxlZnQoKSArIHRoaXMubWFyZ2luTGVmdChsYXlv
dXRCb3gpOworICAgICAgICAgICAgLy8gQ29udmVydCBzdGF0aWMgcG9zaXRpb24gKGluIHBhcmVu
dCBjb29yZGluYXRlIHN5c3RlbSkgdG8gYWJzb2x1dGUgKGluIGNvbnRhaW5pbmcgYmxvY2sgY29v
cmRpbmRhdGUgc3lzdGVtKS4KKyAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGRpc3BsYXlCb3gucGFy
ZW50KCkgPT0gdGhpcy5kaXNwbGF5Qm94KGxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkpOwor
ICAgICAgICAgICAgICAgIGxlZnQgKz0gVXRpbHMubWFwUG9zaXRpb24ocGFyZW50RGlzcGxheUJv
eC50b3BMZWZ0KCksIHBhcmVudERpc3BsYXlCb3gsIGRpc3BsYXlCb3gucGFyZW50KCkpLmxlZnQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghVXRpbHMuaXNMZWZ0QXV0byhs
YXlvdXRCb3gpKQorICAgICAgICAgICAgbGVmdCA9IFV0aWxzLmxlZnQobGF5b3V0Qm94KSArIHRo
aXMubWFyZ2luTGVmdChsYXlvdXRCb3gpOworICAgICAgICBlbHNlIGlmICghVXRpbHMuaXNSaWdo
dEF1dG8obGF5b3V0Qm94KSkKKyAgICAgICAgICAgIGxlZnQgPSBjb250YWluZXJTaXplLndpZHRo
KCkgLSBVdGlscy5yaWdodChsYXlvdXRCb3gpIC0gZGlzcGxheUJveC53aWR0aCgpIC0gdGhpcy5t
YXJnaW5SaWdodChsYXlvdXRCb3gpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KG5ldyBMYXlvdXRQ
b2ludCh0b3AsIGxlZnQpKTsKKyAgICB9CisKKyAgICBfc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRC
b3gpIHsKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgbmFpdmUgYW5kIG1pc3NpbmcgdGhlIGFj
dHVhbCBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24uCisgICAgICAgIEFTU0VSVChVdGlscy5p
c1dpZHRoQXV0byhsYXlvdXRCb3gpKTsKKyAgICAgICAgaWYgKCFsYXlvdXRCb3guaXNDb250YWlu
ZXIoKSB8fCAhbGF5b3V0Qm94Lmhhc0NoaWxkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgbGV0IHdpZHRoID0gMDsKKyAgICAgICAgZm9yIChsZXQgaW5GbG93Q2hpbGQgPSBsYXlv
dXRCb3guZmlyc3RJbkZsb3dDaGlsZCgpOyBpbkZsb3dDaGlsZDsgaW5GbG93Q2hpbGQgPSBpbkZs
b3dDaGlsZC5uZXh0SW5GbG93U2libGluZygpKSB7CisgICAgICAgICAgICBsZXQgd2lkdGhDYW5k
aWRhdGUgPSBVdGlscy5pc1dpZHRoQXV0byhpbkZsb3dDaGlsZCkgPyB0aGlzLl9zaHJpbmtUb0Zp
dFdpZHRoKGluRmxvd0NoaWxkKSA6IFV0aWxzLndpZHRoKGluRmxvd0NoaWxkKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIHdpZHRoQ2FuZGlkYXRlICsgVXRpbHMuY29tcHV0
ZWRIb3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZyhpbkZsb3dDaGlsZC5ub2RlKCkpKTsKICAgICAg
ICAgfQorICAgICAgICByZXR1cm4gd2lkdGg7CiAgICAgfQogCiAgICAgX291dE9mRmxvd0Rlc2Nl
bmRhbnRzKCkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0Nv
bnRleHQvSW5saW5lRm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5qcyBiL1Rvb2xz
L0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0lubGluZUZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuanMKaW5kZXggY2I0MmU5OWEzMjVjMGUzYzc2YmYzZDIzMjk0MDJi
OGRlZmU2N2VmYi4uZjdmMGZjOWU3MjJkYjljNDQwYWQzNTIzZDMyZDlhYjI5MDY5MTQ5YiAxMDA2
NDQKLS0tIGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvSW5saW5lRm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5qcworKysgYi9Ub29scy9MYXlvdXRSZWxv
YWRlZC9Gb3JtYXR0aW5nQ29udGV4dC9JbmxpbmVGb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0LmpzCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250ZXh0
IGV4dGVuZHMgRm9ybWF0dGluZ0NvbnRleHQgewogICAgICAgICAvLyBQbGFjZSB0aGUgaW5mbG93
IHBvc2l0aW9uZWQgY2hpbGRyZW4uCiAgICAgICAgIHRoaXMuX3BsYWNlSW5GbG93UG9zaXRpb25l
ZENoaWxkcmVuKHRoaXMuZm9ybWF0dGluZ1Jvb3QoKSk7CiAgICAgICAgIC8vIEFuZCB0YWtlIGNh
cmUgb2Ygb3V0LW9mLWZsb3cgYm94ZXMgYXMgdGhlIGZpbmFsIHN0ZXAuCi0gICAgICAgIHRoaXMu
X3BsYWNlT3V0T2ZGbG93RGVzY2VuZGFudHModGhpcy5mb3JtYXR0aW5nUm9vdCgpKTsKKyAgICAg
ICAgdGhpcy5fbGF5b3V0T3V0T2ZGbG93RGVzY2VuZGFudHModGhpcy5mb3JtYXR0aW5nUm9vdCgp
KTsKICAgICAgICAgdGhpcy5fY29tbWl0TGluZSgpOwogICAgICAgICBBU1NFUlQoIXRoaXMubV9p
bmxpbmVDb250YWluZXJTdGFjay5sZW5ndGgpOwogICAgfQpAQCAtNjksMjIgKzY5LDIzIEBAIGNs
YXNzIElubGluZUZvcm1hdHRpbmdDb250ZXh0IGV4dGVuZHMgRm9ybWF0dGluZ0NvbnRleHQgewog
ICAgICAgICB0aGlzLl9hZGp1c3RMaW5lRm9ySW5saW5lQ29udGFpbmVyRW5kKGlubGluZUNvbnRh
aW5lcik7CiAgICAgICAgIHRoaXMuX3JlbW92ZUZyb21MYXlvdXRRdWV1ZShpbmxpbmVDb250YWlu
ZXIpOwogICAgICAgICB0aGlzLl9hZGRUb0xheW91dFF1ZXVlKGlubGluZUNvbnRhaW5lci5uZXh0
SW5GbG93T3JGbG9hdFNpYmxpbmcoKSk7Ci0gICAgICAgIC8vIFBsYWNlIHRoZSBpbi0gYW5kIG91
dC1vZi1mbG93IHBvc2l0aW9uZWQgY2hpbGRyZW4uCisgICAgICAgIC8vIFBsYWNlIGluZmxvdyBw
b3NpdGlvbmVkIGNoaWxkcmVuLgogICAgICAgICB0aGlzLl9wbGFjZUluRmxvd1Bvc2l0aW9uZWRD
aGlsZHJlbihpbmxpbmVDb250YWluZXIpOwotICAgICAgICB0aGlzLl9wbGFjZU91dE9mRmxvd0Rl
c2NlbmRhbnRzKGlubGluZUNvbnRhaW5lcik7CiAgICAgfQogCiAKICAgICBfaGFuZGxlSW5saW5l
QmxvY2tDb250YWluZXIoaW5saW5lQmxvY2tDb250YWluZXIpIHsKICAgICAgICAgQVNTRVJUKGlu
bGluZUJsb2NrQ29udGFpbmVyLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAg
ICAgIHRoaXMuX2FkanVzdExpbmVGb3JJbmxpbmVDb250YWluZXJTdGFydChpbmxpbmVCbG9ja0Nv
bnRhaW5lcik7Ci0gICAgICAgIC8vIFRPRE86IGF1dG8gd2lkdGgvaGVpZ2h0CiAgICAgICAgIGxl
dCBkaXNwbGF5Qm94ID0gdGhpcy5kaXNwbGF5Qm94KGlubGluZUJsb2NrQ29udGFpbmVyKTsKKwor
ICAgICAgICAvLyBUT0RPOiBhdXRvIHdpZHRoL2hlaWdodAorICAgICAgICB0aGlzLl9hZGp1c3RM
aW5lRm9ySW5saW5lQ29udGFpbmVyU3RhcnQoaW5saW5lQmxvY2tDb250YWluZXIpOwogICAgICAg
ICBkaXNwbGF5Qm94LnNldFdpZHRoKFV0aWxzLndpZHRoKGlubGluZUJsb2NrQ29udGFpbmVyKSAr
IFV0aWxzLmNvbXB1dGVkSG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmcoaW5saW5lQmxvY2tDb250
YWluZXIubm9kZSgpKSk7Ci0gICAgICAgIGRpc3BsYXlCb3guc2V0SGVpZ2h0KFV0aWxzLmhlaWdo
dChpbmxpbmVCbG9ja0NvbnRhaW5lcikgKyBVdGlscy5jb21wdXRlZFZlcnRpY2FsQm9yZGVyQW5k
UGFkZGluZyhpbmxpbmVCbG9ja0NvbnRhaW5lci5ub2RlKCkpKTsKICAgICAgICAgdGhpcy5sYXlv
dXRTdGF0ZSgpLmxheW91dChpbmxpbmVCbG9ja0NvbnRhaW5lcik7Ci0gICAgICAgIHRoaXMuX2xp
bmUoKS5hZGRJbmxpbmVDb250YWluZXJCb3goZGlzcGxheUJveC5zaXplKCkpOworICAgICAgICBk
aXNwbGF5Qm94LnNldEhlaWdodChVdGlscy5oZWlnaHQoaW5saW5lQmxvY2tDb250YWluZXIpICsg
VXRpbHMuY29tcHV0ZWRWZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmcoaW5saW5lQmxvY2tDb250YWlu
ZXIubm9kZSgpKSk7CiAgICAgICAgIHRoaXMuX2FkanVzdExpbmVGb3JJbmxpbmVDb250YWluZXJF
bmQoaW5saW5lQmxvY2tDb250YWluZXIpOworCisgICAgICAgIHRoaXMuX2xpbmUoKS5hZGRJbmxp
bmVDb250YWluZXJCb3goZGlzcGxheUJveC5zaXplKCkpOwogICAgICAgICB0aGlzLl9yZW1vdmVG
cm9tTGF5b3V0UXVldWUoaW5saW5lQmxvY2tDb250YWluZXIpOwogICAgICAgICB0aGlzLl9hZGRU
b0xheW91dFF1ZXVlKGlubGluZUJsb2NrQ29udGFpbmVyLm5leHRJbkZsb3dPckZsb2F0U2libGlu
ZygpKTsKICAgICB9CkBAIC0xNTIsMTAgKzE1Myw2IEBAIGNsYXNzIElubGluZUZvcm1hdHRpbmdD
b250ZXh0IGV4dGVuZHMgRm9ybWF0dGluZ0NvbnRleHQgewogICAgICAgICB0aGlzLl9saW5lKCku
YWRqdXN0V2l0aE9mZnNldChvZmZzZXQpOwogICAgIH0KIAotICAgIF9wbGFjZU91dE9mRmxvd0Rl
c2NlbmRhbnRzKGNvbnRhaW5lcikgewotCi0gICAgfQotCiAgICAgX2NvbW1pdExpbmUoKSB7CiAg
ICAgICAgIGlmICh0aGlzLl9saW5lKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvdGVzdC9pbmRleC5odG1sIGIvVG9vbHMv
TGF5b3V0UmVsb2FkZWQvdGVzdC9pbmRleC5odG1sCmluZGV4IDliMzdhMjA1MzRjMDc1YzMyMDM4
ZTNiYjE2OTVlZDYxNzI3Yzg2MDEuLmE3YThjODdlODFkMmM1ZWU1Yjk0YTYzY2Y2MTVkOTM3ZWJi
MDAwODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0xheW91dFJlbG9hZGVkL3Rlc3QvaW5kZXguaHRtbAor
KysgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC90ZXN0L2luZGV4Lmh0bWwKQEAgLTgwLDcgKzgwLDgg
QEAgbGV0IHRlc3RGaWxlcyA9IFsKICAgICAiaW5saW5lLWZvcm1hdHRpbmctY29udGV4dC1mbG9h
dHMyLmh0bWwiLAogICAgICJpbmxpbmUtd2l0aC1wYWRkaW5nLWJvcmRlci1tYXJnaW4tb2Zmc2V0
cy5odG1sIiwKICAgICAiaW5saW5lLWJsb2NrLXdpdGgtZml4ZWQtd2lkdGgtaGVpZ2h0Lmh0bWwi
LAotICAgICJpbmxpbmUtd2l0aC1yZWxhdGl2ZS1wb3NpdGlvbmluZy5odG1sIgorICAgICJpbmxp
bmUtd2l0aC1yZWxhdGl2ZS1wb3NpdGlvbmluZy5odG1sIiwKKyAgICAiaW5saW5lLXdpdGgtb3V0
LW9mLWZsb3ctZGVzY2VuZGFudC5odG1sIgogXTsKIAogbGV0IGRlYnVnVGhpcyA9IFtdOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvdGVzdC9pbmxpbmUtd2l0aC1vdXQtb2YtZmxv
dy1kZXNjZW5kYW50Lmh0bWwgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC90ZXN0L2lubGluZS13aXRo
LW91dC1vZi1mbG93LWRlc2NlbmRhbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjVhZTMyMjllZTQ4Nzlh
MDlmNmFjYzYzYzJjNjg0NTIzNjVkZGRkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTGF5b3V0
UmVsb2FkZWQvdGVzdC9pbmxpbmUtd2l0aC1vdXQtb2YtZmxvdy1kZXNjZW5kYW50Lmh0bWwKQEAg
LTAsMCArMSw2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8ZGl2IHN0eWxl
PSJwb3NpdGlvbjogcmVsYXRpdmUiPjxzcGFuPmZvbzxzcGFuIHN0eWxlPSJwb3NpdGlvbjogYWJz
b2x1dGU7IGxlZnQ6IDEwMHB4OyB0b3A6IDEwMHB4OyB3aWR0aDogMTAwcHg7IGhlaWdodDogMTAw
cHg7Ij5mb29iYXI8L3NwYW4+PC9zcGFuPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>