<?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>213184</bug_id>
          
          <creation_ts>2020-06-14 10:27:37 -0700</creation_ts>
          <short_desc>[LFC][Floats] Remove FloatBox class</short_desc>
          <delta_ts>2020-06-17 07:06:24 -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>Layout and Rendering</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>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1662497</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-06-14 10:27:37 -0700</bug_when>
    <thetext>apparently the only difference between a non-floating float avoider (regular formatting context root) and a float box is that while float boxes intersect their margin box, simple float avoiders use their border box. We can do that without subclassing FloatAvoider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662498</commentid>
    <comment_count>1</comment_count>
      <attachid>401863</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-06-14 10:36:31 -0700</bug_when>
    <thetext>Created attachment 401863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663452</commentid>
    <comment_count>2</comment_count>
      <attachid>401863</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-06-17 06:56:05 -0700</bug_when>
    <thetext>Comment on attachment 401863
Patch

Nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663455</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-17 07:05:50 -0700</bug_when>
    <thetext>Committed r263144: &lt;https://trac.webkit.org/changeset/263144&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401863.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663456</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-17 07:06:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/64447114&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401863</attachid>
            <date>2020-06-14 10:36:31 -0700</date>
            <delta_ts>2020-06-17 07:05:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213184-20200614103630.patch</filename>
            <type>text/plain</type>
            <size>35848</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2IxM2RiZjJhYzZmMGUz
OTlmMzYxNjkyM2RhN2NjOGY0YjBmNjZhMi4uYjQ1ZTIzMTdhMTYyZjFmMGFiZDBkZmY1ZDgxZTIw
MjAyNjM5ZTY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIwLTA2LTE0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bRmxvYXRzXSBSZW1v
dmUgRmxvYXRCb3ggY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMzE4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFwcGFyZW50bHkgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgbm9uLWZs
b2F0aW5nIGZsb2F0IGF2b2lkZXIgKHJlZ3VsYXIgZm9ybWF0dGluZyBjb250ZXh0IHJvb3QpCisg
ICAgICAgIGFuZCBhIGZsb2F0IGJveCBpcyB0aGF0IHdoaWxlIGZsb2F0IGJveGVzIGludGVyc2Vj
dCB0aGVpciBtYXJnaW4gYm94LCBzaW1wbGUgZmxvYXQgYXZvaWRlcnMgdXNlIHRoZWlyIGJvcmRl
ciBib3guCisgICAgICAgIFdlIGNhbiBkbyB0aGF0IHdpdGhvdXQgc3ViY2xhc3NpbmcgRmxvYXRB
dm9pZGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYWxzbyBpbiBwcmVwYXJhdGlvbiBmb3Ig
bW92aW5nICJjb21wdXRlRmxvYXRQb3NpdGlvbiIgbmV4dCB0byB0aGUgc3RhdGljIHBvc2l0aW9u
IGNvbXB1dGF0aW9uIHdoZW4KKyAgICAgICAgdGhlIGhlaWdodCB2YWx1ZSBpcyBub3QgY29tcHV0
ZWQgeWV0LiBTbyBpbnN0ZWFkIG9mIHBhc3NpbmcgaW4gdGhlIGRpc3BsYXkgYm94LCBsZXQncyBq
dXN0IHBhc3MgaW4gdG9wL2xlZnQgYW5kIHdpZHRoLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGxheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6RmxvYXRBdm9pZGVyOjpGbG9hdEF2b2lkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGbG9hdEF2b2lkZXI6OnNldEhvcml6b250YWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZsb2F0QXZvaWRlcjo6c2V0VmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkZsb2F0QXZvaWRlcjo6aW5pdGlhbEhvcml6b250YWxQb3NpdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0QXZvaWRlcjo6b3ZlcmZsb3dz
Q29udGFpbmluZ0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRB
dm9pZGVyOjp0b3BMZWZ0SW5Db250YWluaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OnNldEhvcml6b250YWxDb25zdHJhaW50cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0QXZvaWRlcjo6c2V0VmVydGljYWxD
b25zdHJhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRBdm9p
ZGVyOjpob3Jpem9udGFsUG9zaXRpb25DYW5kaWRhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OnZlcnRpY2FsUG9zaXRpb25DYW5kaWRhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OnJlY3RJbkNv
bnRhaW5pbmdCbG9jayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9G
bG9hdEF2b2lkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRBdm9pZGVyOjpy
ZXNldEhvcml6b250YWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0
QXZvaWRlcjo6aXNMZWZ0QWxpZ25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZsb2F0QXZvaWRlcjo6Ym9yZGVyQm94V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGbG9hdEF2b2lkZXI6Om1hcmdpbkJlZm9yZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkZsb2F0QXZvaWRlcjo6bWFyZ2luQWZ0ZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6Om1hcmdpblN0YXJ0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRBdm9pZGVyOjptYXJnaW5FbmQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6Om1hcmdpbkJveFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRBdm9pZGVyOjppc0Zsb2F0aW5nQm94
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRBdm9pZGVyOjpsYXlvdXRC
b3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OnRvcCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0QXZvaWRlcjo6bGVmdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0QXZvaWRlcjo6cmlnaHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OnJlY3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lkZXI6OmRpc3BsYXlC
b3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdEF2b2lk
ZXI6OmRpc3BsYXlCb3gpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRC
b3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRCb3guaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29udGV4dDo6cG9zaXRpb25Gb3JGbG9hdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29udGV4dDo6cG9zaXRp
b25Gb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpmaW5kQXZhaWxhYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpG
bG9hdGluZ0NvbnRleHQ6OmZpbmRQb3NpdGlvbkZvckZsb2F0Qm94IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0OjpmaW5kUG9zaXRpb25Gb3JGb3JtYXR0
aW5nQ29udGV4dFJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdFBh
aXI6OmludGVyc2VjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdFBh
aXI6Omhvcml6b250YWxDb25zdHJhaW50cyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zsb2F0
cy9GbG9hdGluZ0NvbnRleHQuaDoKKwogMjAyMC0wNi0xMiAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0Zsb2F0c10gRmxvYXRpbmcgcG9zaXRpb25lZCBi
b3ggaXMgYWx3YXlzIGEgZmxvYXQgYXZvaWRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNTlkYzljNjFi
MzUyNmUyMTEzZWJhODdlN2JjM2FiZjgwNzNmMTA3Zi4uNzE1NTRlY2NkMTc3MWM3ZDg2ZDlkNTY3
ZjczMjUyOTVkYThjNjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0NjcsNyArMTQ2Nyw2IEBAIGxh
eW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmNwcAogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3Bs
YXlJbmxpbmVDb250ZW50LmNwcAogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQYWludGVyLmNw
cAogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3BwCi1sYXlvdXQvZmxvYXRzL0Zsb2F0Qm94
LmNwcAogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCiBsYXlvdXQvZmxvYXRzL0Zs
b2F0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzNmEyNGY0NWYzYWE2ZmEwZDEzZmQxYmYzZDI3MGUwMWQ2OTY4YmU3
Li5iZjBkNjI5NTJkY2Y0MDA5YzUwZWIwMTU5OGU3MmM1NWI2OTI5ODQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDQzLDcg
KzIwNDMsNiBAQAogCQk2RjI2QkI2QzIzMzQzRTZGMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkJCNkIy
MzM0M0U1QjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjI2RUI0ODIzNDAwNEE1MDA2OTA2RTIgLyog
TGluZUxheW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAvKiBMaW5lTGF5b3V0Q29udGV4dC5o
ICovOyB9OwogCQk2RjM2MEU1MDIzOTk5NDIxMDAxNTEyQTcgLyogSW5saW5lU29mdExpbmVCcmVh
a0l0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZG
MzYwRTRFMjM5OTk0MjAwMDE1MTJBNyAvKiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTZGM0UxRjYyMjEz
NjE0MjAwMEE2NUEwOCAvKiBGbG9hdEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkYzRTFGNjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY2Mzgz
RjYyNDI3QUY0QTAwREFCQTUzIC8qIExheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGNjM4M0Y0MjQyN0FG
NDkwMERBQkE1MyAvKiBMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Nzg2ODgyMzQ5MUFEODAw
NEQ5NjM2IC8qIERpc3BsYXlQYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2Rjc3ODY4NzIzNDkxQUQ3MDA0RDk2MzYgLyogRGlzcGxheVBhaW50
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2
RjdDQTNDNjIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAv
KiBMYXlvdXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC05NDI2LDggKzk0MjUsNiBAQAogCQk2RjI2RUI0NjIzNDAwNEE1MDA2OTA2RTIg
LyogTGluZUxheW91dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGluZUxheW91dENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzNUVG
QUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMzYwRTRF
MjM5OTk0MjAwMDE1MTJBNyAvKiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RjNFMUY1RjIxMzYxNDE3MDBBNjVBMDggLyogRmxvYXRC
b3guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk2RjNFMUY2MTIxMzYxNDE3MDBBNjVBMDggLyogRmxvYXRCb3guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmxvYXRCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY0
QTVCRDUyMkY5RjE2QjAwQTgwRjI1IC8qIExheW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExheW91dFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY1QjdF
QUEyMzAwQTc5RTAwNjdEOUMzIC8qIFRhYmxlR3JpZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
YWJsZUdyaWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjYzODNGNDI0MjdB
RjQ5MDBEQUJBNTMgLyogTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTMyMCw4ICsyMTMxNyw2IEBACiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk2RkZEQzQzRTIxMkVGRjE2MDBBOUNBOTEgLyogRmxvYXRBdm9pZGVyLmNw
cCAqLywKIAkJCQk2RkZEQzQ0MDIxMkVGRjE2MDBBOUNBOTEgLyogRmxvYXRBdm9pZGVyLmggKi8s
Ci0JCQkJNkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmNwcCAqLywKLQkJCQk2
RjNFMUY2MTIxMzYxNDE3MDBBNjVBMDggLyogRmxvYXRCb3guaCAqLywKIAkJCQkxMTVDRkE4NTIw
OEI5MDY2MDAxRTY5OTEgLyogRmxvYXRpbmdDb250ZXh0LmNwcCAqLywKIAkJCQkxMTVDRkE4NDIw
OEI5MDY2MDAxRTY5OTEgLyogRmxvYXRpbmdDb250ZXh0LmggKi8sCiAJCQkJMTE1Q0ZBODEyMDhC
OEVEQTAwMUU2OTkxIC8qIEZsb2F0aW5nU3RhdGUuY3BwICovLApAQCAtMzA1NzYsNyArMzA1NzEs
NiBAQAogCQkJCTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlv
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRkRDNDQyMjEyRUZGMTcwMEE5Q0E5MSAvKiBGbG9h
dEF2b2lkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTZGM0UxRjYyMjEzNjE0MjAwMEE2NUEwOCAv
KiBGbG9hdEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNzNCQUEwQzM5OUIxRjAwMEY1OTc5
IC8qIEZsb2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1Q0ZBODYyMDhCOTA2
NjAwMUU2OTkxIC8qIEZsb2F0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUE1MjhF
ODQxN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5jcHAKaW5kZXggZTc3
MDk2Y2ZkYjdjYzM5MjMxY2U1MWJlNjc0ZDQ1ODEyNzk2NTljNS4uZTQ5YjQ1YmYxYzk5OTZkMWMy
ZDQzZjliMzY3MzIzZTI3ZGYzYmQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9h
dHMvRmxvYXRBdm9pZGVyLmNwcApAQCAtMzcsODMgKzM3LDcyIEBAIG5hbWVzcGFjZSBMYXlvdXQg
ewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRmxvYXRBdm9pZGVyKTsKIAotRmxvYXRB
dm9pZGVyOjpGbG9hdEF2b2lkZXIoY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCBh
YnNvbHV0ZURpc3BsYXlCb3gsIExheW91dFBvaW50IGNvbnRhaW5pbmdCbG9ja0Fic29sdXRlVG9w
TGVmdCwgSG9yaXpvbnRhbEVkZ2VzIGNvbnRhaW5pbmdCbG9ja0Fic29sdXRlQ29udGVudEJveCkK
Ky8vIEZsb2F0aW5nIGJveGVzIGludGVyc2VjdCB0aGVpciBtYXJnaW4gYm94IHdpdGggdGhlIG90
aGVyIGZsb2F0cyBpbiB0aGUgY29udGV4dCwKKy8vIHdoaWxlIG90aGVyIGZsb2F0IGF2b2lkZXJz
IChlLmcuIG5vbi1mbG9hdGluZyBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdHMpIGludGVyc2VjdCB0
aGVpciBib3JkZXIgYm94LgorRmxvYXRBdm9pZGVyOjpGbG9hdEF2b2lkZXIoY29uc3QgQm94JiBs
YXlvdXRCb3gsIExheW91dFBvaW50IGFic29sdXRlVG9wTGVmdCwgTGF5b3V0VW5pdCBib3JkZXJC
b3hXaWR0aCwgY29uc3QgRWRnZXMmIG1hcmdpbiwgTGF5b3V0UG9pbnQgY29udGFpbmluZ0Jsb2Nr
QWJzb2x1dGVUb3BMZWZ0LCBIb3Jpem9udGFsRWRnZXMgY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVD
b250ZW50Qm94KQogICAgIDogbV9sYXlvdXRCb3gobWFrZVdlYWtQdHIobGF5b3V0Qm94KSkKLSAg
ICAsIG1fYWJzb2x1dGVEaXNwbGF5Qm94KGFic29sdXRlRGlzcGxheUJveCkKKyAgICAsIG1fYWJz
b2x1dGVUb3BMZWZ0KGFic29sdXRlVG9wTGVmdCkKKyAgICAsIG1fYm9yZGVyQm94V2lkdGgoYm9y
ZGVyQm94V2lkdGgpCisgICAgLCBtX21hcmdpbihtYXJnaW4pCiAgICAgLCBtX2NvbnRhaW5pbmdC
bG9ja0Fic29sdXRlVG9wTGVmdChjb250YWluaW5nQmxvY2tBYnNvbHV0ZVRvcExlZnQpCiAgICAg
LCBtX2NvbnRhaW5pbmdCbG9ja0Fic29sdXRlQ29udGVudEJveChjb250YWluaW5nQmxvY2tBYnNv
bHV0ZUNvbnRlbnRCb3gpCiB7CiAgICAgQVNTRVJUKG1fbGF5b3V0Qm94LT5lc3RhYmxpc2hlc0Js
b2NrRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgbV9hYnNvbHV0ZURpc3BsYXlCb3guc2V0TGVm
dCh7IGluaXRpYWxIb3Jpem9udGFsUG9zaXRpb24oKSB9KTsKKyAgICBtX2Fic29sdXRlVG9wTGVm
dC5zZXRYKGluaXRpYWxIb3Jpem9udGFsUG9zaXRpb24oKSk7CiB9CiAKLXZvaWQgRmxvYXRBdm9p
ZGVyOjpzZXRIb3Jpem9udGFsQ29uc3RyYWludHMoSG9yaXpvbnRhbENvbnN0cmFpbnRzIGhvcml6
b250YWxDb25zdHJhaW50cykKK3ZvaWQgRmxvYXRBdm9pZGVyOjpzZXRIb3Jpem9udGFsUG9zaXRp
b24oTGF5b3V0VW5pdCBob3Jpem9udGFsUG9zaXRpb24pCiB7Ci0gICAgaWYgKChpc0xlZnRBbGln
bmVkKCkgJiYgIWhvcml6b250YWxDb25zdHJhaW50cy5sZWZ0KSB8fCAoIWlzTGVmdEFsaWduZWQo
KSAmJiAhaG9yaXpvbnRhbENvbnN0cmFpbnRzLnJpZ2h0KSkgewotICAgICAgICAvLyBObyBjb25z
dHJhaW50cz8gU2V0IGhvcml6b250YWwgcG9zaXRpb24gYmFjayB0byB0aGUgaW5pdGFsIHZhbHVl
LgotICAgICAgICBtX2Fic29sdXRlRGlzcGxheUJveC5zZXRMZWZ0KGluaXRpYWxIb3Jpem9udGFs
UG9zaXRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNMZWZ0QWxpZ25lZCgpICYm
IGlzRmxvYXRpbmdCb3goKSkKKyAgICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uICs9IG1hcmdpblN0
YXJ0KCk7CisgICAgaWYgKCFpc0xlZnRBbGlnbmVkKCkpIHsKKyAgICAgICAgaG9yaXpvbnRhbFBv
c2l0aW9uIC09IGJvcmRlckJveFdpZHRoKCk7CisgICAgICAgIGlmIChpc0Zsb2F0aW5nQm94KCkp
CisgICAgICAgICAgICBob3Jpem9udGFsUG9zaXRpb24gLT0gbWFyZ2luRW5kKCk7CiAgICAgfQog
Ci0gICAgYXV0byBjb25zdHJhaW5XaXRoQ29udGFpbmluZ0Jsb2NrID0gWyZdKGF1dG8gbGVmdCkg
LT4gUG9zaXRpb25JbkNvbnRleHRSb290IHsKKyAgICBhdXRvIGNvbnN0cmFpbmVkQnlDb250YWlu
aW5nQmxvY2sgPSBbJl0gewogICAgICAgICAvLyBIb3Jpem9udGFsIHBvc2l0aW9uIGlzIGNvbnN0
cmFpbmVkIGJ5IHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29udGVudCBib3guCiAgICAgICAgIC8v
IENvbXB1dGUgdGhlIGhvcml6b250YWwgcG9zaXRpb24gZm9yIHRoZSBuZXcgZmxvYXRpbmcgYnkg
dGFraW5nIGJvdGggdGhlIGNvbnRpbmluZyBibG9jayBhbmQgdGhlIGN1cnJlbnQgbGVmdC9yaWdo
dCBmbG9hdHMgaW50byBhY2NvdW50LgogICAgICAgICBpZiAoaXNMZWZ0QWxpZ25lZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PFBvc2l0aW9uSW5Db250ZXh0Um9vdD4oeyBtX2NvbnRh
aW5pbmdCbG9ja0Fic29sdXRlQ29udGVudEJveC5sZWZ0ICsgbWFyZ2luU3RhcnQoKSB9LCBsZWZ0
KTsKLQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KG1fY29udGFpbmluZ0Jsb2NrQWJzb2x1
dGVDb250ZW50Qm94LmxlZnQgKyBtYXJnaW5TdGFydCgpLCBob3Jpem9udGFsUG9zaXRpb24pOwog
ICAgICAgICAvLyBNYWtlIHN1cmUgaXQgZG9lcyBub3Qgb3ZlcmZsb3cgdGhlIGNvbnRhaW5pbmcg
YmxvY2sgb24gdGhlIHJpZ2h0LgotICAgICAgICByZXR1cm4gc3RkOjptaW48UG9zaXRpb25JbkNv
bnRleHRSb290PihsZWZ0LCB7IG1fY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVDb250ZW50Qm94LnJp
Z2h0IC0gbWFyZ2luQm94V2lkdGgoKSArIG1hcmdpblN0YXJ0KCkgfSk7Ci0gICAgfTsKLQotICAg
IGF1dG8gcG9zaXRpb25DYW5kaWRhdGUgPSBob3Jpem9udGFsUG9zaXRpb25DYW5kaWRhdGUoaG9y
aXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICBtX2Fic29sdXRlRGlzcGxheUJveC5zZXRMZWZ0KGNv
bnN0cmFpbldpdGhDb250YWluaW5nQmxvY2socG9zaXRpb25DYW5kaWRhdGUpKTsKLX0KLQotdm9p
ZCBGbG9hdEF2b2lkZXI6OnNldFZlcnRpY2FsQ29uc3RyYWludChQb3NpdGlvbkluQ29udGV4dFJv
b3QgdmVydGljYWxDb25zdHJhaW50KQotewotICAgIG1fYWJzb2x1dGVEaXNwbGF5Qm94LnNldFRv
cCh2ZXJ0aWNhbFBvc2l0aW9uQ2FuZGlkYXRlKHZlcnRpY2FsQ29uc3RyYWludCkpOwotfQotCi1Q
b3NpdGlvbkluQ29udGV4dFJvb3QgRmxvYXRBdm9pZGVyOjpob3Jpem9udGFsUG9zaXRpb25DYW5k
aWRhdGUoSG9yaXpvbnRhbENvbnN0cmFpbnRzIGhvcml6b250YWxDb25zdHJhaW50cykKLXsKLSAg
ICByZXR1cm4geyBpc0xlZnRBbGlnbmVkKCkgPyAqaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxlZnQg
OiAqaG9yaXpvbnRhbENvbnN0cmFpbnRzLnJpZ2h0IC0gcmVjdCgpLndpZHRoKCkgfTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWluKGhvcml6b250YWxQb3NpdGlvbiwgbV9jb250YWluaW5nQmxvY2tB
YnNvbHV0ZUNvbnRlbnRCb3gucmlnaHQgLSBtYXJnaW5Cb3hXaWR0aCgpICsgbWFyZ2luU3RhcnQo
KSk7CisgICAgfSgpOworICAgIG1fYWJzb2x1dGVUb3BMZWZ0LnNldFgoY29uc3RyYWluZWRCeUNv
bnRhaW5pbmdCbG9jayk7CiB9CiAKLVBvc2l0aW9uSW5Db250ZXh0Um9vdCBGbG9hdEF2b2lkZXI6
OnZlcnRpY2FsUG9zaXRpb25DYW5kaWRhdGUoUG9zaXRpb25JbkNvbnRleHRSb290IHZlcnRpY2Fs
Q29uc3RyYWludCkKK3ZvaWQgRmxvYXRBdm9pZGVyOjpzZXRWZXJ0aWNhbFBvc2l0aW9uKExheW91
dFVuaXQgdmVydGljYWxQb3NpdGlvbikKIHsKLSAgICByZXR1cm4gdmVydGljYWxDb25zdHJhaW50
OworICAgIGlmIChpc0Zsb2F0aW5nQm94KCkpCisgICAgICAgIHZlcnRpY2FsUG9zaXRpb24gKz0g
bWFyZ2luQmVmb3JlKCk7CisgICAgbV9hYnNvbHV0ZVRvcExlZnQuc2V0WSh2ZXJ0aWNhbFBvc2l0
aW9uKTsKIH0KIAotUG9zaXRpb25JbkNvbnRleHRSb290IEZsb2F0QXZvaWRlcjo6aW5pdGlhbEhv
cml6b250YWxQb3NpdGlvbigpIGNvbnN0CitMYXlvdXRVbml0IEZsb2F0QXZvaWRlcjo6aW5pdGlh
bEhvcml6b250YWxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgLy8gQWxpZ24gdGhlIGJveCB3aXRo
IHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29udGVudCBib3guCi0gICAgYXV0byBsZWZ0ID0gaXNM
ZWZ0QWxpZ25lZCgpID8gbV9jb250YWluaW5nQmxvY2tBYnNvbHV0ZUNvbnRlbnRCb3gubGVmdCA6
IG1fY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVDb250ZW50Qm94LnJpZ2h0IC0gbWFyZ2luQm94V2lk
dGgoKTsKLSAgICBsZWZ0ICs9IG1hcmdpblN0YXJ0KCk7Ci0gICAgcmV0dXJuIHsgbGVmdCB9Owor
ICAgIGlmIChpc0xlZnRBbGlnbmVkKCkpCisgICAgICAgIHJldHVybiB7IG1fY29udGFpbmluZ0Js
b2NrQWJzb2x1dGVDb250ZW50Qm94LmxlZnQgKyBtYXJnaW5TdGFydCgpIH07CisgICAgcmV0dXJu
IHsgbV9jb250YWluaW5nQmxvY2tBYnNvbHV0ZUNvbnRlbnRCb3gucmlnaHQgLSBtYXJnaW5FbmQo
KSAtIGJvcmRlckJveFdpZHRoKCkgfTsKIH0KIAogYm9vbCBGbG9hdEF2b2lkZXI6Om92ZXJmbG93
c0NvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiB7Ci0gICAgYXV0byBsZWZ0ID0gZGlzcGxheUJveCgp
LmxlZnQoKSAtIG1hcmdpblN0YXJ0KCk7CisgICAgYXV0byBsZWZ0ID0gbV9hYnNvbHV0ZVRvcExl
ZnQueCgpIC0gbWFyZ2luU3RhcnQoKTsKICAgICBpZiAobV9jb250YWluaW5nQmxvY2tBYnNvbHV0
ZUNvbnRlbnRCb3gubGVmdCA+IGxlZnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYXV0
byByaWdodCA9IGRpc3BsYXlCb3goKS5yaWdodCgpICsgbWFyZ2luRW5kKCk7CisgICAgYXV0byBy
aWdodCA9IGxlZnQgKyBtYXJnaW5Cb3hXaWR0aCgpOwogICAgIHJldHVybiBtX2NvbnRhaW5pbmdC
bG9ja0Fic29sdXRlQ29udGVudEJveC5yaWdodCA8IHJpZ2h0OwogfQogCi1EaXNwbGF5OjpSZWN0
IEZsb2F0QXZvaWRlcjo6cmVjdEluQ29udGFpbmluZ0Jsb2NrKCkgY29uc3QKK0xheW91dFBvaW50
IEZsb2F0QXZvaWRlcjo6dG9wTGVmdEluQ29udGFpbmluZ0Jsb2NrKCkgY29uc3QKIHsKICAgICAv
LyBGcm9tIGZvcm1hdHRpbmcgcm9vdCBjb29yZGluYXRlIHN5c3RlbSBiYWNrIHRvIGNvbnRhaW5p
bmcgYmxvY2sncy4KICAgICBpZiAobV9jb250YWluaW5nQmxvY2tBYnNvbHV0ZVRvcExlZnQuaXNa
ZXJvKCkpCi0gICAgICAgIHJldHVybiBtX2Fic29sdXRlRGlzcGxheUJveC5yZWN0KCk7CisgICAg
ICAgIHJldHVybiBtX2Fic29sdXRlVG9wTGVmdDsKIAotICAgIHJldHVybiB7Ci0gICAgICAgIG1f
YWJzb2x1dGVEaXNwbGF5Qm94LnRvcCgpIC0gbV9jb250YWluaW5nQmxvY2tBYnNvbHV0ZVRvcExl
ZnQueSgpLAotICAgICAgICBtX2Fic29sdXRlRGlzcGxheUJveC5sZWZ0KCkgLSBtX2NvbnRhaW5p
bmdCbG9ja0Fic29sdXRlVG9wTGVmdC54KCksCi0gICAgICAgIG1fYWJzb2x1dGVEaXNwbGF5Qm94
LndpZHRoKCksCi0gICAgICAgIG1fYWJzb2x1dGVEaXNwbGF5Qm94LmhlaWdodCgpCi0gICAgfTsK
KyAgICByZXR1cm4geyBtX2Fic29sdXRlVG9wTGVmdC54KCkgLSBtX2NvbnRhaW5pbmdCbG9ja0Fi
c29sdXRlVG9wTGVmdC54KCksIG1fYWJzb2x1dGVUb3BMZWZ0LnkoKSAtIG1fY29udGFpbmluZ0Js
b2NrQWJzb2x1dGVUb3BMZWZ0LnkoKSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaAppbmRleCBhY2UyNWY3MWQyNzRjZjA1Yjc4ODVkMWRhMDYx
NTE0NWI0MDcwMmJjLi5lMjAxODg3YjdjMmM2OTNlMjU2ZWVkOGFmNmQwMTM5NjZlMDA4ZGY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmgKQEAgLTM2LDU5
ICszNiw3NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSBEaXNwbGF5IHsK
LWNsYXNzIFJlY3Q7Ci19Ci0KIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBGbG9hdEF2b2lk
ZXIgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRmxvYXRBdm9pZGVyKTsKIHB1YmxpYzoK
LSAgICBGbG9hdEF2b2lkZXIoY29uc3QgQm94JiwgRGlzcGxheTo6Qm94IGFic29sdXRlRGlzcGxh
eUJveCwgTGF5b3V0UG9pbnQgY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVUb3BMZWZ0LCBIb3Jpem9u
dGFsRWRnZXMgY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVDb250ZW50Qm94KTsKKyAgICBGbG9hdEF2
b2lkZXIoY29uc3QgQm94JiwgTGF5b3V0UG9pbnQgYWJzb2x1dGVUb3BMZWZ0LCBMYXlvdXRVbml0
IGJvcmRlckJveFdpZHRoLCBjb25zdCBFZGdlcyYgbWFyZ2luLCBMYXlvdXRQb2ludCBjb250YWlu
aW5nQmxvY2tBYnNvbHV0ZVRvcExlZnQsIEhvcml6b250YWxFZGdlcyBjb250YWluaW5nQmxvY2tB
YnNvbHV0ZUNvbnRlbnRCb3gpOwogICAgIHZpcnR1YWwgfkZsb2F0QXZvaWRlcigpID0gZGVmYXVs
dDsKIAotICAgIHZpcnR1YWwgRGlzcGxheTo6UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9h
YnNvbHV0ZURpc3BsYXlCb3gucmVjdCgpOyB9Ci0gICAgRGlzcGxheTo6UmVjdCByZWN0SW5Db250
YWluaW5nQmxvY2soKSBjb25zdDsKLQotICAgIHN0cnVjdCBIb3Jpem9udGFsQ29uc3RyYWludHMg
ewotICAgICAgICBPcHRpb25hbDxQb3NpdGlvbkluQ29udGV4dFJvb3Q+IGxlZnQ7Ci0gICAgICAg
IE9wdGlvbmFsPFBvc2l0aW9uSW5Db250ZXh0Um9vdD4gcmlnaHQ7Ci0gICAgfTsKLSAgICB2b2lk
IHNldEhvcml6b250YWxDb25zdHJhaW50cyhIb3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIHZv
aWQgc2V0VmVydGljYWxDb25zdHJhaW50KFBvc2l0aW9uSW5Db250ZXh0Um9vdCk7CisgICAgdm9p
ZCBzZXRIb3Jpem9udGFsUG9zaXRpb24oTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRWZXJ0aWNh
bFBvc2l0aW9uKExheW91dFVuaXQpOworICAgIHZvaWQgcmVzZXRIb3Jpem9udGFsUG9zaXRpb24o
KSB7IG1fYWJzb2x1dGVUb3BMZWZ0LnNldFgoaW5pdGlhbEhvcml6b250YWxQb3NpdGlvbigpKTsg
fQogCiAgICAgYm9vbCBvdmVyZmxvd3NDb250YWluaW5nQmxvY2soKSBjb25zdDsKIAotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgYm9vbCBpc0xlZnRBbGlnbmVkKCkgY29uc3QgeyByZXR1cm4gbGF5
b3V0Qm94KCkuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7IH0KLSAgICBQb3NpdGlv
bkluQ29udGV4dFJvb3QgaW5pdGlhbEhvcml6b250YWxQb3NpdGlvbigpIGNvbnN0OworICAgIExh
eW91dFVuaXQgdG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7CisgICAg
TGF5b3V0VW5pdCByaWdodCgpIGNvbnN0OwogCi0gICAgdm9pZCByZXNldEhvcml6b250YWxDb25z
dHJhaW50cygpOworICAgIExheW91dFBvaW50IHRvcExlZnRJbkNvbnRhaW5pbmdCbG9jaygpIGNv
bnN0OwogCi0gICAgdmlydHVhbCBQb3NpdGlvbkluQ29udGV4dFJvb3QgaG9yaXpvbnRhbFBvc2l0
aW9uQ2FuZGlkYXRlKEhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgdmlydHVhbCBQb3NpdGlv
bkluQ29udGV4dFJvb3QgdmVydGljYWxQb3NpdGlvbkNhbmRpZGF0ZShQb3NpdGlvbkluQ29udGV4
dFJvb3QpOworICAgIGJvb2wgaXNMZWZ0QWxpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIGlzRmxvYXRp
bmdCb3goKSA/IGxheW91dEJveCgpLmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpIDogbGF5b3V0
Qm94KCkuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7IH0KIAotICAgIExheW91dFVu
aXQgbWFyZ2luQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gZGlzcGxheUJveCgpLm1hcmdpbkJlZm9y
ZSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIGRpc3Bs
YXlCb3goKS5tYXJnaW5BZnRlcigpOyB9Ci0gICAgLy8gRG8gbm90IHVzZSB0aGUgdXNlZCB2YWx1
ZXMgaGVyZSBiZWNhdXNlIHRoZXkgY29tcHV0ZWQgYXMgaWYgdGhpcyBib3ggd2FzIG5vdCBhIGZs
b2F0IGF2b2lkZXIuCi0gICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0IHsgcmV0dXJu
IGRpc3BsYXlCb3goKS5jb21wdXRlZE1hcmdpblN0YXJ0KCkudmFsdWVPcigwKTsgfQotICAgIExh
eW91dFVuaXQgbWFyZ2luRW5kKCkgY29uc3QgeyByZXR1cm4gZGlzcGxheUJveCgpLmNvbXB1dGVk
TWFyZ2luRW5kKCkudmFsdWVPcigwKTsgfQorcHJpdmF0ZToKKyAgICBMYXlvdXRVbml0IGJvcmRl
ckJveFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJCb3hXaWR0aDsgfQorICAgIExheW91
dFVuaXQgaW5pdGlhbEhvcml6b250YWxQb3NpdGlvbigpIGNvbnN0OwogCi0gICAgTGF5b3V0VW5p
dCBtYXJnaW5Cb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpblN0YXJ0KCkgKyBkaXNwbGF5
Qm94KCkud2lkdGgoKSArIG1hcmdpbkVuZCgpOyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZv
cmUoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbi52ZXJ0aWNhbC50b3A7IH0KKyAgICBMYXlvdXRV
bml0IG1hcmdpbkFmdGVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW4udmVydGljYWwuYm90dG9t
OyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2lu
Lmhvcml6b250YWwubGVmdDsgfQorICAgIExheW91dFVuaXQgbWFyZ2luRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXJnaW4uaG9yaXpvbnRhbC5yaWdodDsgfQorICAgIExheW91dFVuaXQgbWFyZ2lu
Qm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBtYXJnaW5TdGFydCgpICsgYm9yZGVyQm94V2lkdGgo
KSArIG1hcmdpbkVuZCgpOyB9CiAKKyAgICBib29sIGlzRmxvYXRpbmdCb3goKSBjb25zdCB7IHJl
dHVybiBsYXlvdXRCb3goKS5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpOyB9CiAgICAgY29uc3QgQm94
JiBsYXlvdXRCb3goKSBjb25zdCB7IHJldHVybiAqbV9sYXlvdXRCb3g7IH0KLSAgICBjb25zdCBE
aXNwbGF5OjpCb3gmIGRpc3BsYXlCb3goKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlRGlzcGxh
eUJveDsgfQotICAgIERpc3BsYXk6OkJveCYgZGlzcGxheUJveCgpIHsgcmV0dXJuIG1fYWJzb2x1
dGVEaXNwbGF5Qm94OyB9CiAKIHByaXZhdGU6CiAgICAgV2Vha1B0cjxjb25zdCBCb3g+IG1fbGF5
b3V0Qm94OwogICAgIC8vIFRoZXNlIGNvb3JkaW5hdGUgdmFsdWVzIGFyZSByZWxhdGl2ZSB0byB0
aGUgZm9ybWF0dGluZyByb290J3MgYm9yZGVyIGJveC4KLSAgICBEaXNwbGF5OjpCb3ggbV9hYnNv
bHV0ZURpc3BsYXlCb3g7CisgICAgTGF5b3V0UG9pbnQgbV9hYnNvbHV0ZVRvcExlZnQ7CisgICAg
Ly8gTm90ZSB0aGF0IGZsb2F0IGF2b2lkZXIgc2hvdWxkIHdvcmsgd2l0aCBubyBoZWlnaHQgdmFs
dWUuCisgICAgTGF5b3V0VW5pdCBtX2JvcmRlckJveFdpZHRoOworICAgIEVkZ2VzIG1fbWFyZ2lu
OwogICAgIExheW91dFBvaW50IG1fY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVUb3BMZWZ0OwogICAg
IEhvcml6b250YWxFZGdlcyBtX2NvbnRhaW5pbmdCbG9ja0Fic29sdXRlQ29udGVudEJveDsKIH07
CiAKK2lubGluZSBMYXlvdXRVbml0IEZsb2F0QXZvaWRlcjo6dG9wKCkgY29uc3QKK3sKKyAgICBh
dXRvIHRvcCA9IG1fYWJzb2x1dGVUb3BMZWZ0LnkoKTsKKyAgICBpZiAoaXNGbG9hdGluZ0JveCgp
KQorICAgICAgICB0b3AgLT0gbWFyZ2luQmVmb3JlKCk7CisgICAgcmV0dXJuIHRvcDsKK30KKwor
aW5saW5lIExheW91dFVuaXQgRmxvYXRBdm9pZGVyOjpsZWZ0KCkgY29uc3QKK3sKKyAgICBhdXRv
IGxlZnQgPSBtX2Fic29sdXRlVG9wTGVmdC54KCk7CisgICAgaWYgKGlzRmxvYXRpbmdCb3goKSkK
KyAgICAgICAgbGVmdCAtPSBtYXJnaW5TdGFydCgpOworICAgIHJldHVybiBsZWZ0OworfQorCitp
bmxpbmUgTGF5b3V0VW5pdCBGbG9hdEF2b2lkZXI6OnJpZ2h0KCkgY29uc3QKK3sKKyAgICBhdXRv
IHJpZ2h0ID0gbGVmdCgpICsgYm9yZGVyQm94V2lkdGgoKTsKKyAgICBpZiAoaXNGbG9hdGluZ0Jv
eCgpKQorICAgICAgICByaWdodCArPSBtYXJnaW5BZnRlcigpOworICAgIHJldHVybiByaWdodDsK
K30KKwogfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxv
YXRzL0Zsb2F0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3gu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWE2ZjIxZjZmNGNjZTlkMjkxZDQx
NDkxYWIwODMyYjEzODg2YjI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJGbG9hdEJveC5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCi0KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEZsb2F0Qm94KTsKLQotRmxvYXRCb3g6OkZsb2F0Qm94KGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBEaXNwbGF5OjpCb3ggYWJzb2x1dGVEaXNwbGF5Qm94LCBMYXlvdXRQb2ludCBjb250YWlu
aW5nQmxvY2tBYnNvbHV0ZVRvcExlZnQsIEhvcml6b250YWxFZGdlcyBjb250YWluaW5nQmxvY2tB
YnNvbHV0ZUNvbnRlbnRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IHByZXZpb3VzRmxvYXRBYnNv
bHV0ZVRvcCkKLSAgICA6IEZsb2F0QXZvaWRlcihsYXlvdXRCb3gsIGFic29sdXRlRGlzcGxheUJv
eCwgY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVUb3BMZWZ0LCBjb250YWluaW5nQmxvY2tBYnNvbHV0
ZUNvbnRlbnRCb3gpCi17Ci0gICAgZGlzcGxheUJveCgpLnNldFRvcExlZnQoeyBpbml0aWFsSG9y
aXpvbnRhbFBvc2l0aW9uKCksIGluaXRpYWxWZXJ0aWNhbFBvc2l0aW9uKHByZXZpb3VzRmxvYXRB
YnNvbHV0ZVRvcCkgfSk7Ci19Ci0KLURpc3BsYXk6OlJlY3QgRmxvYXRCb3g6OnJlY3QoKSBjb25z
dAotewotICAgIGF1dG8gcmVjdCA9IGRpc3BsYXlCb3goKS5yZWN0KCk7Ci0gICAgcmV0dXJuIHsg
cmVjdC50b3AoKSAtIG1hcmdpbkJlZm9yZSgpLCByZWN0LmxlZnQoKSAtIG1hcmdpblN0YXJ0KCks
IG1hcmdpblN0YXJ0KCkgKyByZWN0LndpZHRoKCkgKyBtYXJnaW5FbmQoKSwgbWFyZ2luQmVmb3Jl
KCkgKyByZWN0LmhlaWdodCgpICsgbWFyZ2luQWZ0ZXIoKSB9OwotfQotCi1Qb3NpdGlvbkluQ29u
dGV4dFJvb3QgRmxvYXRCb3g6Omhvcml6b250YWxQb3NpdGlvbkNhbmRpZGF0ZShIb3Jpem9udGFs
Q29uc3RyYWludHMgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQotewotICAgIGF1dG8gcG9zaXRpb25D
YW5kaWRhdGUgPSBpc0xlZnRBbGlnbmVkKCkgPyAqaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxlZnQg
OiAqaG9yaXpvbnRhbENvbnN0cmFpbnRzLnJpZ2h0IC0gcmVjdCgpLndpZHRoKCk7Ci0gICAgcG9z
aXRpb25DYW5kaWRhdGUgKz0gbWFyZ2luU3RhcnQoKTsKLQotICAgIHJldHVybiB7IHBvc2l0aW9u
Q2FuZGlkYXRlIH07Ci19Ci0KLVBvc2l0aW9uSW5Db250ZXh0Um9vdCBGbG9hdEJveDo6dmVydGlj
YWxQb3NpdGlvbkNhbmRpZGF0ZShQb3NpdGlvbkluQ29udGV4dFJvb3QgdmVydGljYWxDb25zdHJh
aW50KQotewotICAgIHJldHVybiB7IHZlcnRpY2FsQ29uc3RyYWludCArIG1hcmdpbkJlZm9yZSgp
IH07Ci19Ci0KLVBvc2l0aW9uSW5Db250ZXh0Um9vdCBGbG9hdEJveDo6aW5pdGlhbFZlcnRpY2Fs
UG9zaXRpb24oT3B0aW9uYWw8TGF5b3V0VW5pdD4gcHJldmlvdXNGbG9hdEFic29sdXRlVG9wKSBj
b25zdAotewotICAgIC8vIEluY29taW5nIGZsb2F0IGNhbm5vdCBiZSBwbGFjZWQgaGlnaGVyIHRo
YW4gZXhpc3RpbmcgZmxvYXRzIChtYXJnaW4gYm94IG9mIHRoZSBsYXN0IGZsb2F0KS4KLSAgICAv
LyBUYWtlIHRoZSBzdGF0aWMgcG9zaXRpb24gKHdoZXJlIHRoZSBib3ggd291bGQgZ28gaWYgaXQg
d2Fzbid0IGZsb2F0aW5nKSBhbmQgYWRqdXN0IGl0IHdpdGggdGhlIGxhc3QgZmxvYXQuCi0gICAg
YXV0byB0b3AgPSBkaXNwbGF5Qm94KCkudG9wKCkgLSBtYXJnaW5CZWZvcmUoKTsKLSAgICBpZiAo
cHJldmlvdXNGbG9hdEFic29sdXRlVG9wKQotICAgICAgICB0b3AgPSBzdGQ6Om1heCh0b3AsICpw
cmV2aW91c0Zsb2F0QWJzb2x1dGVUb3ApOwotICAgIHRvcCArPSBtYXJnaW5CZWZvcmUoKTsKLQot
ICAgIHJldHVybiB7IHRvcCB9OwotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mbG9hdHMvRmxvYXRCb3guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZmMWZi
ZjkwNzA1MjdlNWM4NWZkOWEzMzI3NGRkMjM4N2UyZjdjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zs
b2F0Qm94LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2lu
Y2x1ZGUgIkZsb2F0QXZvaWRlci5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLWNsYXNzIEJveDsKLQotY2xh
c3MgRmxvYXRCb3ggOiBwdWJsaWMgRmxvYXRBdm9pZGVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEKEZsb2F0Qm94KTsKLXB1YmxpYzoKLSAgICBGbG9hdEJveChjb25zdCBCb3gmLCBEaXNw
bGF5OjpCb3ggYWJzb2x1dGVEaXNwbGF5Qm94LCBMYXlvdXRQb2ludCBjb250YWluaW5nQmxvY2tB
YnNvbHV0ZVRvcExlZnQsIEhvcml6b250YWxFZGdlcyBjb250YWluaW5nQmxvY2tBYnNvbHV0ZUNv
bnRlbnRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IHByZXZpb3VzRmxvYXRBYnNvbHV0ZVRvcCk7
Ci0KLSAgICBEaXNwbGF5OjpSZWN0IHJlY3QoKSBjb25zdCBmaW5hbDsKLQotcHJpdmF0ZToKLSAg
ICBib29sIGlzTGVmdEFsaWduZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBsYXlvdXRCb3goKS5p
c0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKTsgfQotCi0gICAgUG9zaXRpb25JbkNvbnRleHRSb290
IGhvcml6b250YWxQb3NpdGlvbkNhbmRpZGF0ZShIb3Jpem9udGFsQ29uc3RyYWludHMpIGZpbmFs
OwotICAgIFBvc2l0aW9uSW5Db250ZXh0Um9vdCB2ZXJ0aWNhbFBvc2l0aW9uQ2FuZGlkYXRlKFBv
c2l0aW9uSW5Db250ZXh0Um9vdCkgZmluYWw7Ci0KLSAgICBQb3NpdGlvbkluQ29udGV4dFJvb3Qg
aW5pdGlhbFZlcnRpY2FsUG9zaXRpb24oT3B0aW9uYWw8TGF5b3V0VW5pdD4gcHJldmlvdXNGbG9h
dEFic29sdXRlVG9wKSBjb25zdDsKLX07Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCmluZGV4IGU4MjlmNjU1MTM5
NjdkM2ZkOTUyMGUxNTUzNzBhNTJkNjAyYjcxNDMuLjUzNDBjMjc0NGM5MmE4YjFjNThlNTZhM2M5
MjQwMzFmYjAxMDZlNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMv
RmxvYXRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zs
b2F0aW5nQ29udGV4dC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlC
b3guaCIKICNpbmNsdWRlICJGbG9hdEF2b2lkZXIuaCIKLSNpbmNsdWRlICJGbG9hdEJveC5oIgog
I2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAj
aW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCkBAIC03NCw5ICs3MywxNCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mbG9hdFBhaXIuaXNFbXB0eSgp
OyB9CiAgICAgY29uc3QgRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtKiBsZWZ0KCkgY29uc3Q7CiAg
ICAgY29uc3QgRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtKiByaWdodCgpIGNvbnN0OwotICAgIGJv
b2wgaW50ZXJzZWN0cyhjb25zdCBEaXNwbGF5OjpSZWN0JikgY29uc3Q7CisgICAgYm9vbCBpbnRl
cnNlY3RzKGNvbnN0IEZsb2F0QXZvaWRlciYpIGNvbnN0OwogICAgIFBvc2l0aW9uSW5Db250ZXh0
Um9vdCB2ZXJ0aWNhbENvbnN0cmFpbnQoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsUG9zaXRp
b247IH0KLSAgICBGbG9hdEF2b2lkZXI6Okhvcml6b250YWxDb25zdHJhaW50cyBob3Jpem9udGFs
Q29uc3RyYWludHMoKSBjb25zdDsKKworICAgIHN0cnVjdCBIb3Jpem9udGFsQ29uc3RyYWludHMg
eworICAgICAgICBPcHRpb25hbDxQb3NpdGlvbkluQ29udGV4dFJvb3Q+IGxlZnQ7CisgICAgICAg
IE9wdGlvbmFsPFBvc2l0aW9uSW5Db250ZXh0Um9vdD4gcmlnaHQ7CisgICAgfTsKKyAgICBIb3Jp
em9udGFsQ29uc3RyYWludHMgaG9yaXpvbnRhbENvbnN0cmFpbnRzKCkgY29uc3Q7CiAgICAgUG9z
aXRpb25JbkNvbnRleHRSb290IGJvdHRvbSgpIGNvbnN0OwogICAgIExlZnRSaWdodEluZGV4IG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvYXRQYWlyOyB9OwogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBGbG9hdFBhaXImKSBjb25zdDsKQEAgLTE4Niw5ICsxOTAsMTUgQEAgUG9pbnQg
RmxvYXRpbmdDb250ZXh0Ojpwb3NpdGlvbkZvckZsb2F0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ28KICAgICBhdXRvIGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVz
ID0gdGhpcy0+YWJzb2x1dGVEaXNwbGF5Qm94Q29vcmRpbmF0ZXMobGF5b3V0Qm94KTsKICAgICBB
U1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgYXV0byBwcmV2aW91c0Zsb2F0QWJzb2x1dGVUb3AgPSBm
bG9hdGluZ1N0YXRlKCkuZmxvYXRzKCkubGFzdCgpLnJlY3RXaXRoTWFyZ2luKCkudG9wKCk7Ci0g
ICAgYXV0byBmbG9hdEJveCA9IEZsb2F0Qm94IHsgbGF5b3V0Qm94LCBhYnNvbHV0ZURpc3BsYXlC
b3hDb29yZGluYXRlcy5kaXNwbGF5Qm94LCBhYnNvbHV0ZURpc3BsYXlCb3hDb29yZGluYXRlcy5j
b250YWluaW5nQmxvY2tUb3BMZWZ0LCBhYnNvbHV0ZURpc3BsYXlCb3hDb29yZGluYXRlcy5jb250
YWluaW5nQmxvY2tDb250ZW50Qm94LCBwcmV2aW91c0Zsb2F0QWJzb2x1dGVUb3AgfTsKKyAgICBh
dXRvIGFic29sdXRlRGlzcGxheUJveCA9IGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzLmRp
c3BsYXlCb3g7CisgICAgLy8gSW5jb21pbmcgZmxvYXQgY2Fubm90IGJlIHBsYWNlZCBoaWdoZXIg
dGhhbiBleGlzdGluZyBmbG9hdHMgKG1hcmdpbiBib3ggb2YgdGhlIGxhc3QgZmxvYXQpLgorICAg
IC8vIFRha2UgdGhlIHN0YXRpYyBwb3NpdGlvbiAod2hlcmUgdGhlIGJveCB3b3VsZCBnbyBpZiBp
dCB3YXNuJ3QgZmxvYXRpbmcpIGFuZCBhZGp1c3QgaXQgd2l0aCB0aGUgbGFzdCBmbG9hdC4KKyAg
ICBhdXRvIGFkanVzdGVkVG9wID0gc3RkOjptYXgoYWJzb2x1dGVEaXNwbGF5Qm94LnRvcCgpIC0g
YWJzb2x1dGVEaXNwbGF5Qm94Lm1hcmdpbkJlZm9yZSgpLCBwcmV2aW91c0Zsb2F0QWJzb2x1dGVU
b3ApOworICAgIGFic29sdXRlRGlzcGxheUJveC5zZXRUb3AoYWRqdXN0ZWRUb3AgKyBhYnNvbHV0
ZURpc3BsYXlCb3gubWFyZ2luQmVmb3JlKCkpOworICAgIGF1dG8gbWFyZ2luID0gRWRnZXMgeyB7
IGFic29sdXRlRGlzcGxheUJveC5jb21wdXRlZE1hcmdpblN0YXJ0KCkudmFsdWVPcigwKSwgYWJz
b2x1dGVEaXNwbGF5Qm94LmNvbXB1dGVkTWFyZ2luRW5kKCkudmFsdWVPcigwKSB9LCB7IGFic29s
dXRlRGlzcGxheUJveC5tYXJnaW5CZWZvcmUoKSwgYWJzb2x1dGVEaXNwbGF5Qm94Lm1hcmdpbkFm
dGVyKCkgfSB9OworICAgIGF1dG8gZmxvYXRCb3ggPSBGbG9hdEF2b2lkZXIgeyBsYXlvdXRCb3gs
IGFic29sdXRlRGlzcGxheUJveC50b3BMZWZ0KCksIGFic29sdXRlRGlzcGxheUJveC53aWR0aCgp
LCBtYXJnaW4sIGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja1Rv
cExlZnQsIGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRCb3ggfTsKICAgICBmaW5kUG9zaXRpb25Gb3JGbG9hdEJveChmbG9hdEJveCk7Ci0gICAgcmV0
dXJuIGZsb2F0Qm94LnJlY3RJbkNvbnRhaW5pbmdCbG9jaygpLnRvcExlZnQoKTsKKyAgICByZXR1
cm4gZmxvYXRCb3gudG9wTGVmdEluQ29udGFpbmluZ0Jsb2NrKCk7CiB9CiAKIE9wdGlvbmFsPFBv
aW50PiBGbG9hdGluZ0NvbnRleHQ6OnBvc2l0aW9uRm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNv
bnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdApAQCAtMjAyLDkgKzIxMiwxMSBAQCBPcHRpb25hbDxQ
b2ludD4gRmxvYXRpbmdDb250ZXh0Ojpwb3NpdGlvbkZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChj
b25zdCBCb3gmIGxheQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byBhYnNvbHV0ZURp
c3BsYXlCb3hDb29yZGluYXRlcyA9IHRoaXMtPmFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVz
KGxheW91dEJveCk7Ci0gICAgYXV0byBmbG9hdEF2b2lkZXIgPSBGbG9hdEF2b2lkZXIgeyBsYXlv
dXRCb3gsIGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzLmRpc3BsYXlCb3gsIGFic29sdXRl
RGlzcGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja1RvcExlZnQsIGFic29sdXRlRGlz
cGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3ggfTsKKyAgICBhdXRv
IGFic29sdXRlRGlzcGxheUJveCA9IGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzLmRpc3Bs
YXlCb3g7CisgICAgYXV0byBtYXJnaW4gPSBFZGdlcyB7IHsgYWJzb2x1dGVEaXNwbGF5Qm94LmNv
bXB1dGVkTWFyZ2luU3RhcnQoKS52YWx1ZU9yKDApLCBhYnNvbHV0ZURpc3BsYXlCb3guY29tcHV0
ZWRNYXJnaW5FbmQoKS52YWx1ZU9yKDApIH0sIHsgYWJzb2x1dGVEaXNwbGF5Qm94Lm1hcmdpbkJl
Zm9yZSgpLCBhYnNvbHV0ZURpc3BsYXlCb3gubWFyZ2luQWZ0ZXIoKSB9IH07CisgICAgYXV0byBm
bG9hdEF2b2lkZXIgPSBGbG9hdEF2b2lkZXIgeyBsYXlvdXRCb3gsIGFic29sdXRlRGlzcGxheUJv
eC50b3BMZWZ0KCksIGFic29sdXRlRGlzcGxheUJveC53aWR0aCgpLCBtYXJnaW4sIGFic29sdXRl
RGlzcGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja1RvcExlZnQsIGFic29sdXRlRGlz
cGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3ggfTsKICAgICBmaW5k
UG9zaXRpb25Gb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoZmxvYXRBdm9pZGVyKTsKLSAgICByZXR1
cm4geyBmbG9hdEF2b2lkZXIucmVjdEluQ29udGFpbmluZ0Jsb2NrKCkudG9wTGVmdCgpIH07Cisg
ICAgcmV0dXJuIHsgZmxvYXRBdm9pZGVyLnRvcExlZnRJbkNvbnRhaW5pbmdCbG9jaygpIH07CiB9
CiAKIEZsb2F0aW5nQ29udGV4dDo6Q2xlYXJhbmNlUG9zaXRpb24gRmxvYXRpbmdDb250ZXh0Ojp2
ZXJ0aWNhbFBvc2l0aW9uV2l0aENsZWFyYW5jZShjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QK
QEAgLTMzOSw3ICszNTEsNyBAQCBzdGF0aWMgRmxvYXRQYWlyOjpMZWZ0UmlnaHRJbmRleCBmaW5k
QXZhaWxhYmxlUG9zaXRpb24oRmxvYXRBdm9pZGVyJiBmbG9hdEF2b2lkZQogICAgIE9wdGlvbmFs
PFBvc2l0aW9uSW5Db250ZXh0Um9vdD4gYm90dG9tTW9zdDsKICAgICBPcHRpb25hbDxGbG9hdFBh
aXI6OkxlZnRSaWdodEluZGV4PiBpbm5lck1vc3RMZWZ0QW5kUmlnaHQ7CiAgICAgYXV0byBlbmQg
PSBMYXlvdXQ6OmVuZChmbG9hdHMpOwotICAgIGZvciAoYXV0byBpdGVyYXRvciA9IGJlZ2luKGZs
b2F0cywgeyBmbG9hdEF2b2lkZXIucmVjdCgpLnRvcCgpIH0pOyBpdGVyYXRvciAhPSBlbmQ7ICsr
aXRlcmF0b3IpIHsKKyAgICBmb3IgKGF1dG8gaXRlcmF0b3IgPSBiZWdpbihmbG9hdHMsIHsgZmxv
YXRBdm9pZGVyLnRvcCgpIH0pOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpIHsKICAgICAg
ICAgQVNTRVJUKCEoKml0ZXJhdG9yKS5pc0VtcHR5KCkpOwogICAgICAgICBhdXRvIGxlZnRSaWdo
dEZsb2F0UGFpciA9ICppdGVyYXRvcjsKICAgICAgICAgaW5uZXJNb3N0TGVmdEFuZFJpZ2h0ID0g
aW5uZXJNb3N0TGVmdEFuZFJpZ2h0LnZhbHVlT3IoKmxlZnRSaWdodEZsb2F0UGFpcik7CkBAIC0z
NDcsMTQgKzM1OSwxOCBAQCBzdGF0aWMgRmxvYXRQYWlyOjpMZWZ0UmlnaHRJbmRleCBmaW5kQXZh
aWxhYmxlUG9zaXRpb24oRmxvYXRBdm9pZGVyJiBmbG9hdEF2b2lkZQogICAgICAgICAvLyBNb3Zl
IHRoZSBib3ggaG9yaXpvbnRhbGx5IHNvIHRoYXQgaXQgZWl0aGVyCiAgICAgICAgIC8vIDEuIGFs
aWducyB3aXRoIHRoZSBjdXJyZW50IGZsb2F0aW5nIHBhaXIKICAgICAgICAgLy8gMi4gb3Igd2l0
aCB0aGUgY29udGFpbmluZyBibG9jaydzIGNvbnRlbnQgYm94IGlmIHRoZXJlJ3Mgbm8gZmxvYXQg
dG8gYWxpZ24gd2l0aCBhdCB0aGlzIHZlcnRpY2FsIHBvc2l0aW9uLgotICAgICAgICBmbG9hdEF2
b2lkZXIuc2V0SG9yaXpvbnRhbENvbnN0cmFpbnRzKGxlZnRSaWdodEZsb2F0UGFpci5ob3Jpem9u
dGFsQ29uc3RyYWludHMoKSk7Ci0gICAgICAgIGZsb2F0QXZvaWRlci5zZXRWZXJ0aWNhbENvbnN0
cmFpbnQobGVmdFJpZ2h0RmxvYXRQYWlyLnZlcnRpY2FsQ29uc3RyYWludCgpKTsKKyAgICAgICAg
YXV0byBsZWZ0UmlnaHRFZGdlID0gbGVmdFJpZ2h0RmxvYXRQYWlyLmhvcml6b250YWxDb25zdHJh
aW50cygpOworICAgICAgICBpZiAoYXV0byBob3Jpem9udGFsQ29uc3RyYWludCA9IGZsb2F0QXZv
aWRlci5pc0xlZnRBbGlnbmVkKCkgPyBsZWZ0UmlnaHRFZGdlLmxlZnQgOiBsZWZ0UmlnaHRFZGdl
LnJpZ2h0KSAgCisgICAgICAgICAgICBmbG9hdEF2b2lkZXIuc2V0SG9yaXpvbnRhbFBvc2l0aW9u
KCpob3Jpem9udGFsQ29uc3RyYWludCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZsb2F0
QXZvaWRlci5yZXNldEhvcml6b250YWxQb3NpdGlvbigpOworICAgICAgICBmbG9hdEF2b2lkZXIu
c2V0VmVydGljYWxQb3NpdGlvbihsZWZ0UmlnaHRGbG9hdFBhaXIudmVydGljYWxDb25zdHJhaW50
KCkpOwogCiAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBmbG9hdCBhdm9pZGVyCiAgICAgICAg
IC8vIDEuIGRvZXMgbm90ICJvdmVyZmxvdyIgaXRzIGNvbnRhaW5pbmcgYmxvY2sgd2l0aCB0aGUg
Y3VycmVudCBob3JpenRvbmFsIGNvbnN0cmFpbnRzLiBJdCBzaW1wbHkgbWVhbnMgdGhhdCB0aGUg
ZmxvYXQgYXZvaWRlcidzCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY291bGQgcHVzaCB0
aGUgY2FuZGlkYXRlIHBvc2l0aW9uIGJleW9uZCB0aGUgY3VycmVudCBmbG9hdCBob3Jpem9udGFs
bHkgKHRvbyBmYXIgdG8gdGhlIGxlZnQvcmlnaHQpCiAgICAgICAgIC8vIDIuIGF2b2lkcyBmbG9h
dHMgb24gYm90aCBzaWRlcy4KLSAgICAgICAgaWYgKCFmbG9hdEF2b2lkZXIub3ZlcmZsb3dzQ29u
dGFpbmluZ0Jsb2NrKCkgJiYgIWxlZnRSaWdodEZsb2F0UGFpci5pbnRlcnNlY3RzKGZsb2F0QXZv
aWRlci5yZWN0KCkpKQorICAgICAgICBpZiAoIWZsb2F0QXZvaWRlci5vdmVyZmxvd3NDb250YWlu
aW5nQmxvY2soKSAmJiAhbGVmdFJpZ2h0RmxvYXRQYWlyLmludGVyc2VjdHMoZmxvYXRBdm9pZGVy
KSkKICAgICAgICAgICAgIHJldHVybiAqaW5uZXJNb3N0TGVmdEFuZFJpZ2h0OwogCiAgICAgICAg
IGJvdHRvbU1vc3QgPSBsZWZ0UmlnaHRGbG9hdFBhaXIuYm90dG9tKCk7CkBAIC0zNjYsMTMgKzM4
MiwxMyBAQCBzdGF0aWMgRmxvYXRQYWlyOjpMZWZ0UmlnaHRJbmRleCBmaW5kQXZhaWxhYmxlUG9z
aXRpb24oRmxvYXRBdm9pZGVyJiBmbG9hdEF2b2lkZQogICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgLy8gUGFzc2VkIGFsbCB0aGUgZmxvYXRzIGFuZCBzdGlsbCBkb2VzIG5vdCBmaXQ/IFB1c2gg
aXQgYmVsb3cgdGhlIGxhc3QgZmxvYXQuCi0gICAgZmxvYXRBdm9pZGVyLnNldFZlcnRpY2FsQ29u
c3RyYWludCgqYm90dG9tTW9zdCk7Ci0gICAgZmxvYXRBdm9pZGVyLnNldEhvcml6b250YWxDb25z
dHJhaW50cyh7IH0pOworICAgIGZsb2F0QXZvaWRlci5zZXRWZXJ0aWNhbFBvc2l0aW9uKCpib3R0
b21Nb3N0KTsKKyAgICBmbG9hdEF2b2lkZXIucmVzZXRIb3Jpem9udGFsUG9zaXRpb24oKTsKICAg
ICBBU1NFUlQoaW5uZXJNb3N0TGVmdEFuZFJpZ2h0KTsKICAgICByZXR1cm4gKmlubmVyTW9zdExl
ZnRBbmRSaWdodDsKIH0KIAotdm9pZCBGbG9hdGluZ0NvbnRleHQ6OmZpbmRQb3NpdGlvbkZvckZs
b2F0Qm94KEZsb2F0Qm94JiBmbG9hdEJveCkgY29uc3QKK3ZvaWQgRmxvYXRpbmdDb250ZXh0Ojpm
aW5kUG9zaXRpb25Gb3JGbG9hdEJveChGbG9hdEF2b2lkZXImIGZsb2F0Qm94KSBjb25zdAogewog
ICAgIGZpbmRBdmFpbGFibGVQb3NpdGlvbihmbG9hdEJveCwgbV9mbG9hdGluZ1N0YXRlLmZsb2F0
cygpKTsKIH0KQEAgLTM5OSwyMCArNDE1LDI3IEBAIHZvaWQgRmxvYXRpbmdDb250ZXh0OjpmaW5k
UG9zaXRpb25Gb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoRmxvYXRBdm9pZGVyJiBmbG9hdEF2CiAg
ICAgICAgIGlmIChpbm5lck1vc3RMZWZ0QW5kUmlnaHQuaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGF1dG8gb3ZlcmxhcHBpbmdGbG9hdEJveCA9IFsmZmxvYXRzXShh
dXRvIHN0YXJ0RmxvYXRJbmRleCwgYXV0byBmbG9hdEF2b2lkZXJSZWN0KSAtPiBjb25zdCBGbG9h
dGluZ1N0YXRlOjpGbG9hdEl0ZW0qIHsKKyAgICAgICAgYXV0byBvdmVybGFwcGluZ0Zsb2F0Qm94
ID0gWyZmbG9hdHNdKGF1dG8gc3RhcnRGbG9hdEluZGV4LCBhdXRvJiBmbG9hdEF2b2lkZXIpIC0+
IGNvbnN0IEZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbSogewogICAgICAgICAgICAgZm9yIChhdXRv
IGkgPSBzdGFydEZsb2F0SW5kZXg7IGkgPCBmbG9hdHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBhdXRvJiBmbG9hdEJveCA9IGZsb2F0c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAo
ZmxvYXRCb3gucmVjdFdpdGhNYXJnaW4oKS5pbnRlcnNlY3RzKGZsb2F0QXZvaWRlclJlY3QpKQor
CisgICAgICAgICAgICAgICAgYXV0byBpbnRlcnNlY3RzID0gWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBmbG9hdGluZ1JlY3QgPSBmbG9hdEJveC5yZWN0V2l0aE1hcmdpbigpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZmxvYXRBdm9pZGVyLmxlZnQoKSA+PSBmbG9hdGluZ1JlY3Qu
cmlnaHQoKSB8fCBmbG9hdEF2b2lkZXIucmlnaHQoKSA8PSBmbG9hdGluZ1JlY3QubGVmdCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmxvYXRBdm9pZGVyLnRvcCgpID49IGZsb2F0aW5nUmVjdC50b3AoKSAmJiBmbG9h
dEF2b2lkZXIudG9wKCkgPCBmbG9hdGluZ1JlY3QuYm90dG9tKCk7CisgICAgICAgICAgICAgICAg
fSgpOworICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3RzKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJmZsb2F0Qm94OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH07CiAKICAgICAgICAgYXV0byBzdGFydEluZGV4ID0gc3RkOjptYXgo
aW5uZXJNb3N0TGVmdEFuZFJpZ2h0LmxlZnQudmFsdWVPcigwKSwgaW5uZXJNb3N0TGVmdEFuZFJp
Z2h0LnJpZ2h0LnZhbHVlT3IoMCkpICsgMTsKLSAgICAgICAgYXV0byogaW50ZXJzZWN0ZWRGbG9h
dEJveCA9IG92ZXJsYXBwaW5nRmxvYXRCb3goc3RhcnRJbmRleCwgZmxvYXRBdm9pZGVyLnJlY3Qo
KSk7CisgICAgICAgIGF1dG8qIGludGVyc2VjdGVkRmxvYXRCb3ggPSBvdmVybGFwcGluZ0Zsb2F0
Qm94KHN0YXJ0SW5kZXgsIGZsb2F0QXZvaWRlcik7CiAgICAgICAgIGlmICghaW50ZXJzZWN0ZWRG
bG9hdEJveCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZmxvYXRBdm9pZGVyLnNldFZl
cnRpY2FsQ29uc3RyYWludCh7IGludGVyc2VjdGVkRmxvYXRCb3gtPnJlY3RXaXRoTWFyZ2luKCku
dG9wKCkgfSk7CisgICAgICAgIGZsb2F0QXZvaWRlci5zZXRWZXJ0aWNhbFBvc2l0aW9uKHsgaW50
ZXJzZWN0ZWRGbG9hdEJveC0+cmVjdFdpdGhNYXJnaW4oKS50b3AoKSB9KTsKICAgICB9CiB9CiAK
QEAgLTQ4NywxMCArNTEwLDE1IEBAIGNvbnN0IEZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbSogRmxv
YXRQYWlyOjpyaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuICZtX2Zsb2F0c1sqbV9mbG9hdFBhaXIu
cmlnaHRdOwogfQogCi1ib29sIEZsb2F0UGFpcjo6aW50ZXJzZWN0cyhjb25zdCBEaXNwbGF5OjpS
ZWN0JiBmbG9hdEF2b2lkZXJSZWN0KSBjb25zdAorYm9vbCBGbG9hdFBhaXI6OmludGVyc2VjdHMo
Y29uc3QgRmxvYXRBdm9pZGVyJiBmbG9hdEF2b2lkZXIpIGNvbnN0CiB7CiAgICAgYXV0byBpbnRl
cnNlY3RzID0gWyZdKGF1dG8qIGZsb2F0aW5nKSB7Ci0gICAgICAgIHJldHVybiBmbG9hdGluZyAm
JiBmbG9hdGluZy0+cmVjdFdpdGhNYXJnaW4oKS5pbnRlcnNlY3RzKGZsb2F0QXZvaWRlclJlY3Qp
OworICAgICAgICBpZiAoIWZsb2F0aW5nKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBhdXRvIGZsb2F0aW5nUmVjdCA9IGZsb2F0aW5nLT5yZWN0V2l0aE1hcmdpbigpOworICAg
ICAgICBpZiAoZmxvYXRBdm9pZGVyLmxlZnQoKSA+PSBmbG9hdGluZ1JlY3QucmlnaHQoKSB8fCBm
bG9hdEF2b2lkZXIucmlnaHQoKSA8PSBmbG9hdGluZ1JlY3QubGVmdCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZmxvYXRBdm9pZGVyLnRvcCgpID49IGZsb2F0
aW5nUmVjdC50b3AoKSAmJiBmbG9hdEF2b2lkZXIudG9wKCkgPCBmbG9hdGluZ1JlY3QuYm90dG9t
KCk7CiAgICAgfTsKIAogICAgIEFTU0VSVCghbV9mbG9hdFBhaXIuaXNFbXB0eSgpKTsKQEAgLTUw
Miw3ICs1MzAsNyBAQCBib29sIEZsb2F0UGFpcjo6b3BlcmF0b3IgPT0oY29uc3QgRmxvYXRQYWly
JiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gbV9mbG9hdFBhaXIubGVmdCA9PSBvdGhlci5tX2Zs
b2F0UGFpci5sZWZ0ICYmIG1fZmxvYXRQYWlyLnJpZ2h0ID09IG90aGVyLm1fZmxvYXRQYWlyLnJp
Z2h0OwogfQogCi1GbG9hdEF2b2lkZXI6Okhvcml6b250YWxDb25zdHJhaW50cyBGbG9hdFBhaXI6
Omhvcml6b250YWxDb25zdHJhaW50cygpIGNvbnN0CitGbG9hdFBhaXI6Okhvcml6b250YWxDb25z
dHJhaW50cyBGbG9hdFBhaXI6Omhvcml6b250YWxDb25zdHJhaW50cygpIGNvbnN0CiB7CiAgICAg
T3B0aW9uYWw8UG9zaXRpb25JbkNvbnRleHRSb290PiBsZWZ0RWRnZTsKICAgICBPcHRpb25hbDxQ
b3NpdGlvbkluQ29udGV4dFJvb3Q+IHJpZ2h0RWRnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5oCmluZGV4IDY5Nzk4NjU0M2I1MWNiYTRmOTNhMjZi
MTMyNjFiZDM4NzY5MjhmZjYuLjkxYWQzMDMxNjY1ODM3YmNiZWFkNTkxY2NmMTYyMjA2OWViMjZl
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQu
aApAQCAtMzUsNyArMzUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0
IHsKIAogY2xhc3MgRmxvYXRBdm9pZGVyOwotY2xhc3MgRmxvYXRCb3g7CiBjbGFzcyBGb3JtYXR0
aW5nQ29udGV4dDsKIGNsYXNzIEJveDsKIGNsYXNzIExheW91dFN0YXRlOwpAQCAtNzIsNyArNzEs
NyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KICAgICBjb25zdCBD
b250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVybiAqbV9yb290OyB9CiAKLSAgICB2b2lk
IGZpbmRQb3NpdGlvbkZvckZsb2F0Qm94KEZsb2F0Qm94JikgY29uc3Q7CisgICAgdm9pZCBmaW5k
UG9zaXRpb25Gb3JGbG9hdEJveChGbG9hdEF2b2lkZXImKSBjb25zdDsKICAgICB2b2lkIGZpbmRQ
b3NpdGlvbkZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChGbG9hdEF2b2lkZXImKSBjb25zdDsKIAog
ICAgIHN0cnVjdCBBYnNvbHV0ZUNvb3JkaW5hdGVWYWx1ZXNGb3JGbG9hdEF2b2lkZXI7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>