<?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>201809</bug_id>
          
          <creation_ts>2019-09-15 15:17:36 -0700</creation_ts>
          <short_desc>[LFC] Always provide a containing block width value to compute* functions.</short_desc>
          <delta_ts>2019-09-16 09:56:43 -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>commit-queue</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>1570975</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-09-15 15:17:36 -0700</bug_when>
    <thetext>The only case when the containing block width might not be available is when computing the preferred width. Let&apos;s just pass in a 0 value in those cases instead of dealing with the optional cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570976</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-15 15:18:04 -0700</bug_when>
    <thetext>&lt;rdar://problem/55383153&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570979</commentid>
    <comment_count>2</comment_count>
      <attachid>378825</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-09-15 15:35:07 -0700</bug_when>
    <thetext>Created attachment 378825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571081</commentid>
    <comment_count>3</comment_count>
      <attachid>378825</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-16 06:48:10 -0700</bug_when>
    <thetext>Comment on attachment 378825
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        The caller can always make a more informative decision about the default value when the continaing block width is not available.

Typo &apos;continaing&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571118</commentid>
    <comment_count>4</comment_count>
      <attachid>378864</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-09-16 09:16:20 -0700</bug_when>
    <thetext>Created attachment 378864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571144</commentid>
    <comment_count>5</comment_count>
      <attachid>378864</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-16 09:56:42 -0700</bug_when>
    <thetext>Comment on attachment 378864
Patch

Clearing flags on attachment: 378864

Committed r249903: &lt;https://trac.webkit.org/changeset/249903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571145</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-16 09:56:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378825</attachid>
            <date>2019-09-15 15:35:07 -0700</date>
            <delta_ts>2019-09-16 09:16:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201809-20190915153501.patch</filename>
            <type>text/plain</type>
            <size>33401</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTM4OWNmZjc4ZWUxMDY0
NTQzYTQ0ZGZkOTlhOWE5YmFlNjg0OGYzNS4uZDFiYjIyMjlhZDE3ZTMyMjJlZjk5Mzc2MmY4ZmQx
MDdjOGE3ZTc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE5LTA5LTE1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gQWx3YXlzIHByb3Zp
ZGUgYSBjb250YWluaW5nIGJsb2NrIHdpZHRoIHZhbHVlIHRvIGNvbXB1dGUqIGZ1bmN0aW9ucy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTgwOQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTUzODMxNTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNhbGxlciBjYW4gYWx3YXlzIG1ha2UgYSBt
b3JlIGluZm9ybWF0aXZlIGRlY2lzaW9uIGFib3V0IHRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gdGhl
IGNvbnRpbmFpbmcgYmxvY2sgd2lkdGggaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgKEN1cnJl
bnRseSB0aGUgb25seSBjYXNlIGlzIHdoZW4gY29tcHV0aW5nIHRoZSBwcmVmZXJyZWQgd2lkdGgu
KQorCisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5n
KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5r
VG9GaXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpv
dXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRW
ZXJ0aWNhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRy
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6ZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1JlcGxh
Y2VkV2lkdGhBbmRNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVk
UG9zaXRpb25PZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luIGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvTGF5b3V0VW5pdHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VXNl
ZEhvcml6b250YWxWYWx1ZXM6OlVzZWRIb3Jpem9udGFsVmFsdWVzKToKKyAgICAgICAgKiBsYXlv
dXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94KToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKToKKwogMjAxOS0wOS0xNSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0JGQ10gQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFy
Z2luIHNob3VsZCBub3QgcmVhZCBjb250YWluaW5nIGJsb2NrJ3Mgd2lkdGgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGI2NjI2NzExZDU2ODQxMjA2
MzMwYWRkNGNjZTZjZmM4NTZhNjMxNmQuLmVlMjFiNjA0M2U3NjY5M2QxOWRlODFmMWU4MDA3YTJk
OTkyNmNiZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNw
cApAQCAtMTI4LDEzICsxMjgsMTMgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91
dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gpCiAgICAgZGlzcGxh
eUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luLCB7IH0g
fSk7CiB9CiAKLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5n
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxVc2VkSG9yaXpvbnRhbFZhbHVlcz4gdXNl
ZFZhbHVlcykKK3ZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5n
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxVc2VkSG9yaXpvbnRhbFZhbHVlcz4gdXNl
ZEhvcml6b250YWxWYWx1ZXMpCiB7Ci0gICAgaWYgKCF1c2VkVmFsdWVzKQotICAgICAgICB1c2Vk
VmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBnZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94
LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OworICAgIGlmICghdXNlZEhv
cml6b250YWxWYWx1ZXMpCisgICAgICAgIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6
b250YWxWYWx1ZXMgeyBnZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5n
U3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5zZXRCb3JkZXIo
Z2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKLSAgICBkaXNwbGF5Qm94LnNl
dFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcobGF5b3V0Qm94LCAqdXNlZFZhbHVl
cykpOworICAgIGRpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGlu
ZyhsYXlvdXRCb3gsICp1c2VkSG9yaXpvbnRhbFZhbHVlcykpOwogfQogCiB2b2lkIEZvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCA2MWI2MTM0Njlm
YTBjMjRhZDAwNzNhZWI1YjI1ZDk3Y2RmMDNhYjE0Li5jMTQ2YzVlNzg4MTUxNWNlMWVhZDQzYTll
ODI5Mjk2Y2UzNjBkYWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC0yNDUsMTEgKzI0NSwxMCBAQCBMYXlvdXRVbml0
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9y
T3V0T2ZGbG93UG9zaQogICAgIHJldHVybiBsZWZ0IC0gcGFkZGluZ0JveExlZnQ7CiB9CiAKLUxh
eW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKGNv
bnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMp
CitMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0
aChjb25zdCBCb3gmIGZvcm1hdHRpbmdSb290LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkSG9y
aXpvbnRhbFZhbHVlcykKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBzaHJpbmsgdG8gZml0IC0+IHVuc3VwcG9ydGVk
IC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0gPDwgInB4KSBsYXlvdXRCb3g6ICIgPDwgJmZv
cm1hdHRpbmdSb290IDw8ICIpIik7CiAgICAgQVNTRVJUKGZvcm1hdHRpbmdSb290LmVzdGFibGlz
aGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgQVNTRVJUKHVzZWRWYWx1ZXMuY29udGFpbmlu
Z0Jsb2NrV2lkdGguaGFzVmFsdWUoKSk7CiAKICAgICAvLyBDYWxjdWxhdGlvbiBvZiB0aGUgc2hy
aW5rLXRvLWZpdCB3aWR0aCBpcyBzaW1pbGFyIHRvIGNhbGN1bGF0aW5nIHRoZSB3aWR0aCBvZiBh
IHRhYmxlIGNlbGwgdXNpbmcgdGhlIGF1dG9tYXRpYyB0YWJsZSBsYXlvdXQgYWxnb3JpdGhtLgog
ICAgIC8vIFJvdWdobHk6IGNhbGN1bGF0ZSB0aGUgcHJlZmVycmVkIHdpZHRoIGJ5IGZvcm1hdHRp
bmcgdGhlIGNvbnRlbnQgd2l0aG91dCBicmVha2luZyBsaW5lcyBvdGhlciB0aGFuIHdoZXJlIGV4
cGxpY2l0IGxpbmUgYnJlYWtzIG9jY3VyLApAQCAtMjY4LDcgKzI2Nyw3IEBAIExheW91dFVuaXQg
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYg
Zm9ybWF0dGluZ1JvCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgPSAqcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwogICAgIH0K
LSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gKnVzZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lk
dGg7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRh
aW5pbmdCbG9ja1dpZHRoOwogICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heChpbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2YWlsYWJsZVdpZHRoKSwgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cy5tYXhpbXVtKTsKIH0KIApAQCAtMjc2LDcgKzI3NSw2IEBAIFZlcnRpY2FsR2Vv
bWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZl
cnRpY2FsR2VvbWV0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSAmJiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogICAgIEFTU0VSVCh1c2VkVmVydGljYWxW
YWx1ZXMuY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICBBU1NFUlQodXNlZEhvcml6b250YWxW
YWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgpOwogCiAgICAgLy8gMTAuNi40IEFic29sdXRlbHkg
cG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCiAgICAgLy8KQEAgLTMwNiw3ICszMDQs
NyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZG
bG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldAogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94
LnN0eWxlKCk7CiAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0g
KnVzZWRWZXJ0aWNhbFZhbHVlcy5jb250YWluaW5nQmxvY2tIZWlnaHQ7Ci0gICAgYXV0byBjb250
YWluaW5nQmxvY2tXaWR0aCA9ICp1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb250YWluaW5nQmxvY2tX
aWR0aDsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZEhvcml6b250YWxWYWx1
ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGg7CiAKICAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWVJ
Zk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAg
YXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxCb3R0b20o
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpAQCAtMzk2LDcgKzM5NCw3IEBAIFZlcnRpY2FsR2Vv
bWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZl
cnRpY2FsR2VvbWV0CiAgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwgeyBjb250ZW50SGVpZ2h0
KCksIHVzZWRWZXJ0aWNhbE1hcmdpbiB9IH07CiB9CiAKLUhvcml6b250YWxHZW9tZXRyeSBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdl
b21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFs
dWVzKQorSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gs
IFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKQogewogICAgIEFTU0VS
VChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5yZXBsYWNl
ZCgpKTsKICAgICAKQEAgLTQyOSwxNSArNDI3LDEzIEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdl
CiAgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgp
OwogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CiAgICAgYXV0byYgYm94R2Vv
bWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAg
IGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgYXV0byYgY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChjb250YWluaW5nQmxvY2spOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lk
dGggPSB1c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7Ci0gICAgYXV0
byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2Vk
SG9yaXpvbnRhbFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aDsKKyAgICBhdXRvIGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24gPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgIAogICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFs
dWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbExlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwog
ICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxSaWdo
dCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byB3aWR0aCA9IGNvbXB1dGVkVmFs
dWVJZk5vdEF1dG8odXNlZFZhbHVlcy53aWR0aCA/IExlbmd0aCB7IHVzZWRWYWx1ZXMud2lkdGgu
dmFsdWUoKSwgRml4ZWQgfSA6IHN0eWxlLmxvZ2ljYWxXaWR0aCgpLCBjb250YWluaW5nQmxvY2tX
aWR0aCk7Ci0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgYXV0byB3
aWR0aCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8odXNlZEhvcml6b250YWxWYWx1ZXMud2lkdGgg
PyBMZW5ndGggeyB1c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0aC52YWx1ZSgpLCBGaXhlZCB9IDog
c3R5bGUubG9naWNhbFdpZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJn
aW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgVXNlZEhvcml6b250YWxN
YXJnaW4gdXNlZEhvcml6b250YWxNYXJnaW47CiAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdl
b21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKICAgICBhdXRvIHBhZGRpbmdSaWdodCA9
IGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CkBAIC01MDIsNyArNDk4LDcg
QEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZG
bG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2UKICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFp
bGFibGUgd2lkdGggYnkgc29sdmluZyBmb3IgJ3dpZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAo
aW4gY2FzZSAxKSB0byAwCiAgICAgICAgIGxlZnQgPSBMYXlvdXRVbml0IHsgMCB9OwogICAgICAg
ICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBh
ZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJp
Z2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgVXNlZEhv
cml6b250YWxWYWx1ZXMgeyBhdmFpbGFibGVXaWR0aCwgdXNlZFZhbHVlcy53aWR0aCwgdXNlZFZh
bHVlcy5tYXJnaW4gfSk7CisgICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRC
b3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgYXZhaWxhYmxlV2lkdGgsIHVzZWRIb3Jpem9udGFs
VmFsdWVzLndpZHRoLCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4gfSk7CiAgICAgICAgIGxl
ZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAr
IGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCAgKyBib3Jk
ZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CiAgICAgfSBlbHNl
IGlmICghbGVmdCAmJiAhcmlnaHQgJiYgd2lkdGgpIHsKICAgICAgICAgLy8gIzIKQEAgLTUxOSw3
ICs1MTUsNyBAQCBIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZQogICAgICAgICAvLyBDYWxjdWxhdGUg
dGhlIGF2YWlsYWJsZSB3aWR0aCBieSBzb2x2aW5nIGZvciAnd2lkdGgnIGFmdGVyIHNldHRpbmcg
J3JpZ2h0JyAoaW4gY2FzZSAzKSB0byAwCiAgICAgICAgIHJpZ2h0ID0gTGF5b3V0VW5pdCB7IDAg
fTsKICAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0g
KCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGlu
Z0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCArICpyaWdodCk7Ci0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRC
b3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgYXZhaWxhYmxlV2lkdGgsIHVzZWRWYWx1ZXMud2lk
dGgsIHVzZWRWYWx1ZXMubWFyZ2luIH0pOworICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lk
dGgobGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGF2YWlsYWJsZVdpZHRoLCB1c2Vk
SG9yaXpvbnRhbFZhbHVlcy53aWR0aCwgdXNlZEhvcml6b250YWxWYWx1ZXMubWFyZ2luIH0pOwog
ICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CiAg
ICAgfSBlbHNlIGlmICghbGVmdCAmJiB3aWR0aCAmJiByaWdodCkgewogICAgICAgICAvLyAjNApA
QCAtNTM4LDcgKzUzNCw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAKICAgICAvLyBGb3Ig
b3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRo
ZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhl
IHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRk
aW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVt
LgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGNvbnRhaW5p
bmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdCb3hMZWZ0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxv
Y2tQYWRkaW5nVmVydGljYWxFZGdlID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3go
KmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkucGFkZGluZ0JveExlZnQoKTsKICAgICAqbGVm
dCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogICAgICpyaWdodCArPSBj
b250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogCkBAIC01NTAsNyArNTQ2LDYgQEAg
VmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1Jl
cGxhY2VkVmVydGljYWxHZW9tZXRyeSgKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZG
bG93UG9zaXRpb25lZCgpICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsKICAgICBBU1NFUlQodXNl
ZFZlcnRpY2FsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja0hlaWdodCk7Ci0gICAgQVNTRVJUKHVzZWRI
b3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKIAogICAgIC8vIDEwLjYuNSBB
YnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzCiAgICAgLy8KQEAgLTU2Niw3
ICs1NjEsNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KAogICAgIGF1dG8mIHN0eWxlID0gbGF5
b3V0Qm94LnN0eWxlKCk7CiAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVp
Z2h0ID0gKnVzZWRWZXJ0aWNhbFZhbHVlcy5jb250YWluaW5nQmxvY2tIZWlnaHQ7Ci0gICAgYXV0
byBjb250YWluaW5nQmxvY2tXaWR0aCA9ICp1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb250YWluaW5n
QmxvY2tXaWR0aDsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZEhvcml6b250
YWxWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGg7CiAKICAgICBhdXRvIHRvcCA9IGNvbXB1dGVk
VmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7
CiAgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxC
b3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpAQCAtNjI5LDcgKzYyNCw3IEBAIFZlcnRp
Y2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNl
ZFZlcnRpY2FsR2VvbWV0cnkoCiAgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwgeyBoZWlnaHQs
IHsgKnVzZWRNYXJnaW5CZWZvcmUsICp1c2VkTWFyZ2luQWZ0ZXIgfSB9IH07CiB9CiAKLUhvcml6
b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxh
Y2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRh
bFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAorSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29u
c3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFs
dWVzKSBjb25zdAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCkBAIC02NTAsMTYgKzY0NSwxNSBAQCBIb3Jp
em9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBs
YWNlZEhvcml6b250YWxHZW9tZQogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+
Zm9ybWF0dGluZ0NvbnRleHQoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgp
OwogICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSAqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkVmFs
dWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uID0gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkSG9yaXpvbnRhbFZh
bHVlcy5jb250YWluaW5nQmxvY2tXaWR0aDsKKyAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24gPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpOwogCiAgICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHls
ZS5sb2dpY2FsTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAgYXV0byByaWdodCA9
IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFJpZ2h0KCksIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICBh
dXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250
YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gdXNlZE1hcmdpblN0YXJ0ID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0OwogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5FbmQgPSBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uZW5kOwotICAgIGF1dG8gd2lkdGggPSBpbmxpbmVSZXBsYWNlZFdpZHRo
QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcykud2lkdGg7CisgICAgYXV0byB3aWR0aCA9
IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZh
bHVlcykud2lkdGg7CiAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRpbmdM
ZWZ0KCkudmFsdWVPcigwKTsKICAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGJveEdlb21ldHJ5LnBh
ZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CiAgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0
cnkuYm9yZGVyTGVmdCgpOwpAQCAtNzI2LDcgKzcyMCw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdl
b21lCiAKICAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxv
Y2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgogICAgIC8v
IEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUg
c3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94
IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRp
Y2FsRWRnZSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdCbG9j
aykucGFkZGluZ0JveExlZnQoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0
aWNhbEVkZ2UgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpKS5wYWRkaW5nQm94TGVmdCgpOwogICAgICpsZWZ0ICs9IGNvbnRhaW5p
bmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CiAgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9j
a1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CiAKQEAgLTc2NSw3ICs3NTksNyBAQCBIZWlnaHRBbmRNYXJn
aW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IEJv
eCYgbGF5b3V0QgogICAgIHJldHVybiBIZWlnaHRBbmRNYXJnaW4geyAqaGVpZ2h0LCB1c2VkVmVy
dGljYWxNYXJnaW4gfTsKIH0KIAotV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpCitXaWR0aEFuZE1hcmdpbiBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aEFuZE1h
cmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6
b250YWxWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7CiAKQEAgLTc3NCwxNCArNzY4LDE0IEBAIFdp
ZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdOb25SZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKGNvCiAgICAgLy8gMS4gSWYgJ21hcmdpbi1sZWZ0Jywgb3IgJ21h
cmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAn
MCcuCiAgICAgLy8gMi4gSWYgJ3dpZHRoJyBpcyBjb21wdXRlZCBhcyAnYXV0bycsIHRoZSB1c2Vk
IHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZpdCIgd2lkdGguCiAKLSAgICBhdXRvIGNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5
b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9
IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CiAKICAgICAvLyAjMQogICAgIGF1dG8gdXNlZEhvcml6b250YWxsTWFyZ2lu
ID0gVXNlZEhvcml6b250YWxNYXJnaW4geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQu
dmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CiAg
ICAgLy8gIzIKLSAgICBhdXRvIHdpZHRoID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byh1c2VkVmFs
dWVzLndpZHRoID8gTGVuZ3RoIHsgdXNlZFZhbHVlcy53aWR0aC52YWx1ZSgpLCBGaXhlZCB9IDog
bGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbFdpZHRoKCksIHVzZWRWYWx1ZXMuY29udGFpbmluZ0Js
b2NrV2lkdGgudmFsdWVPcigwKSk7CisgICAgYXV0byB3aWR0aCA9IGNvbXB1dGVkVmFsdWVJZk5v
dEF1dG8odXNlZEhvcml6b250YWxWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2VkSG9yaXpvbnRh
bFZhbHVlcy53aWR0aC52YWx1ZSgpLCBGaXhlZCB9IDogbGF5b3V0Qm94LnN0eWxlKCkubG9naWNh
bFdpZHRoKCksIHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAg
ICBpZiAoIXdpZHRoKQotICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0Qm94
LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJv
eCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBmbG9hdGluZyBu
b24tcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCB1c2Vk
SG9yaXpvbnRhbGxNYXJnaW4uc3RhcnQgPDwgInB4LCAiIDw8IHVzZWRIb3Jpem9udGFsbE1hcmdp
bi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CiAgICAg
cmV0dXJuIFdpZHRoQW5kTWFyZ2luIHsgKndpZHRoLCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4sIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbiB9OwpAQCAtNzk3LDcgKzc5MSw3IEBAIEhlaWdodEFuZE1h
cmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRIZWlnaHRB
bmRNYXJnaW4oY29uCiAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxh
eW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CiB9CiAK
LVdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB1c2VkVmFsdWVzKSBjb25zdAorV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdAog
ewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRC
b3gucmVwbGFjZWQoKSk7CiAKQEAgLTgwNSwxMSArNzk5LDExIEBAIFdpZHRoQW5kTWFyZ2luIEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZFdpZHRoQW5kTWFyZ2lu
KGNvbnN0CiAgICAgLy8KICAgICAvLyAxLiBJZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmln
aHQnIGFyZSBjb21wdXRlZCBhcyAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgJzAnLgogICAg
IC8vIDIuIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5s
aW5lIHJlcGxhY2VkIGVsZW1lbnRzLgotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
ID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1
ZXMpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIAog
ICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJb
SGVpZ2h0XVtNYXJnaW5dIC0+IGZsb2F0aW5nIHJlcGxhY2VkIC0+IHJlZGlyZWN0ZWQgdG8gaW5s
aW5lIHJlcGxhY2VkIik7Ci0gICAgcmV0dXJuIGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4o
bGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IHVzZWRWYWx1ZXMuY29udGFpbmluZ0Js
b2NrV2lkdGgudmFsdWVPcigwKSwKLSAgICAgICAgdXNlZFZhbHVlcy53aWR0aCwgVXNlZEhvcml6
b250YWxNYXJnaW4geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwg
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH0gfSk7CisgICAgcmV0dXJu
IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB7IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLAorICAgICAg
ICB1c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0aCwgVXNlZEhvcml6b250YWxNYXJnaW4geyBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZC52YWx1ZU9yKDApIH0gfSk7CiB9CiAKIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJv
eCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkSG9yaXpvbnRhbFZhbHVlcywg
VXNlZFZlcnRpY2FsVmFsdWVzIHVzZWRWZXJ0aWNhbFZhbHVlcykgY29uc3QKQEAgLTg1MSw3ICs4
NDUsNiBAQCBXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0
aW5nV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYQogSGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVz
LCBVc2VkVmVydGljYWxWYWx1ZXMgdXNlZFZlcnRpY2FsVmFsdWVzKSBjb25zdAogewogICAgIEFT
U0VSVCgobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0Zs
b2F0aW5nUG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0luRmxvdygpKSAmJiBsYXlvdXRCb3gu
cmVwbGFjZWQoKSk7Ci0gICAgQVNTRVJUKHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKIAogICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJs
b2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2Nr
JyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFjZWQg
ZWxlbWVudHMKICAgICAvLwpAQCAtODk1LDcgKzg4OCw3IEBAIEhlaWdodEFuZE1hcmdpbiBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNv
bnN0CiAgICAgcmV0dXJuIHsgKmhlaWdodCwgdXNlZFZlcnRpY2FsTWFyZ2luIH07CiB9CiAKLVdp
ZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMg
dXNlZFZhbHVlcykgY29uc3QKK1dpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwg
VXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94Lmlz
RmxvYXRpbmdQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzSW5GbG93KCkpICYmIGxheW91dEJv
eC5yZXBsYWNlZCgpKTsKIApAQCAtOTE5LDI1ICs5MTIsMjUgQEAgV2lkdGhBbmRNYXJnaW4gRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNv
bnN0IEIKICAgICAvLyAgICBJZiAzMDBweCBpcyB0b28gd2lkZSB0byBmaXQgdGhlIGRldmljZSwg
VUFzIHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhh
cyBhIDI6MSByYXRpbyBhbmQgZml0cyB0aGUgZGV2aWNlIGluc3RlYWQuCiAKICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGgg
PSB1c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBj
b21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0
aCA9IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoOworICAgIGF1dG8g
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIAogICAgIGF1dG8gdXNlZE1h
cmdpblN0YXJ0ID0gWyZdIHsKLSAgICAgICAgaWYgKHVzZWRWYWx1ZXMubWFyZ2luKQotICAgICAg
ICAgICAgcmV0dXJuIHVzZWRWYWx1ZXMubWFyZ2luLT5zdGFydDsKKyAgICAgICAgaWYgKHVzZWRI
b3Jpem9udGFsVmFsdWVzLm1hcmdpbikKKyAgICAgICAgICAgIHJldHVybiB1c2VkSG9yaXpvbnRh
bFZhbHVlcy5tYXJnaW4tPnN0YXJ0OwogICAgICAgICByZXR1cm4gY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLnN0YXJ0LnZhbHVlT3IoMF9sdSk7CiAgICAgfTsKIAogICAgIGF1dG8gdXNlZE1hcmdp
bkVuZCA9IFsmXSB7Ci0gICAgICAgIGlmICh1c2VkVmFsdWVzLm1hcmdpbikKLSAgICAgICAgICAg
IHJldHVybiB1c2VkVmFsdWVzLm1hcmdpbi0+ZW5kOworICAgICAgICBpZiAodXNlZEhvcml6b250
YWxWYWx1ZXMubWFyZ2luKQorICAgICAgICAgICAgcmV0dXJuIHVzZWRIb3Jpem9udGFsVmFsdWVz
Lm1hcmdpbi0+ZW5kOwogICAgICAgICByZXR1cm4gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZC52YWx1ZU9yKDBfbHUpOwogICAgIH07CiAKICAgICBhdXRvIHJlcGxhY2VkID0gbGF5b3V0Qm94
LnJlcGxhY2VkKCk7CiAgICAgQVNTRVJUKHJlcGxhY2VkKTsKIAotICAgIGF1dG8gd2lkdGggPSBj
b21wdXRlZFZhbHVlSWZOb3RBdXRvKHVzZWRWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2VkVmFs
dWVzLndpZHRoLnZhbHVlKCksIEZpeGVkIH0gOiBzdHlsZS5sb2dpY2FsV2lkdGgoKSwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gd2lkdGggPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KHVzZWRIb3Jpem9udGFsVmFsdWVzLndpZHRoID8gTGVuZ3RoIHsgdXNlZEhvcml6b250YWxWYWx1
ZXMud2lkdGgudmFsdWUoKSwgRml4ZWQgfSA6IHN0eWxlLmxvZ2ljYWxXaWR0aCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CiAgICAgYXV0byBoZWlnaHRJc0F1dG8gPSBpc0hlaWdodEF1dG8obGF5
b3V0Qm94KTsKICAgICBhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94
LCBIZWlnaHRUeXBlOjpOb3JtYWwpOwogCkBAIC05NjksNyArOTYyLDYgQEAgV2lkdGhBbmRNYXJn
aW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFy
Z2luKGNvbnN0IEIKIExheW91dFNpemUgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZs
b3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jp
em9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdAogewogICAgIEFTU0VSVChs
YXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpOwotICAgIEFTU0VSVCh1c2VkSG9yaXpvbnRh
bFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aCk7CiAKICAgICAvLyA5LjQuMyBSZWxhdGl2ZSBw
b3NpdGlvbmluZwogICAgIC8vCkBAIC05ODEsOCArOTczLDcgQEAgTGF5b3V0U2l6ZSBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25z
dCBCb3gKICAgICAvLyAzLiBJZiBuZWl0aGVyIGlzICdhdXRvJywgJ2JvdHRvbScgaXMgaWdub3Jl
ZCAoaS5lLiwgdGhlIHVzZWQgdmFsdWUgb2YgJ2JvdHRvbScgd2lsbCBiZSBtaW51cyB0aGUgdmFs
dWUgb2YgJ3RvcCcpLgogCiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAg
ICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwot
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSAqdXNlZEhvcml6b250YWxWYWx1ZXMuY29u
dGFpbmluZ0Jsb2NrV2lkdGg7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRI
b3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoOwogCiAgICAgYXV0byB0b3AgPSBj
b21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOwogICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5s
b2dpY2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKQEAgLTEwMjYsNyArMTAxNyw3
IEBAIExheW91dFNpemUgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlv
bmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94CiAgICAgICAgIHJpZ2h0ID0gLSpsZWZ0OwogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vICM0Ci0gICAgICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVj
dGlvbiA9IGNvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
KyAgICAgICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5b3V0Qm94LmNvbnRhaW5p
bmdCbG9jaygpLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCiAgICAgICAgICAgICByaWdodCA9IC0qbGVmdDsKICAg
ICAgICAgZWxzZQpAQCAtMTA1MywxMyArMTA0NCwxMyBAQCBFZGdlcyBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkQm9yZGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAog
ICAgIH07CiB9CiAKLU9wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1
ZXMgdXNlZFZhbHVlcykgY29uc3QKK09wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6
b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0CiB7CiAgICAgaWYgKCFsYXlv
dXRCb3guaXNQYWRkaW5nQXBwbGljYWJsZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja1dpZHRoID0gdXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9y
KDApOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkSG9yaXpvbnRhbFZhbHVl
cy5jb250YWluaW5nQmxvY2tXaWR0aDsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0Nv
bnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1BhZGRpbmddIC0+IGxheW91dEJveDogIiA8PCAmbGF5
b3V0Qm94KTsKICAgICByZXR1cm4gRWRnZXMgewogICAgICAgICB7IHZhbHVlRm9yTGVuZ3RoKHN0
eWxlLnBhZGRpbmdMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgdmFsdWVGb3JMZW5ndGgo
c3R5bGUucGFkZGluZ1JpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9LApAQCAtMTA2Nywx
NyArMTA1OCwxNyBAQCBPcHRpb25hbDxFZGdlcz4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
Ojpjb21wdXRlZFBhZGRpbmcoY29uc3QgQm94JiBsYXlvdXRCbwogICAgIH07CiB9CiAKLUNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1
ZXMgdXNlZFZhbHVlcykgY29uc3QKK0NvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxh
eW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0
CiB7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja1dpZHRoID0gdXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9y
KDApOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkSG9yaXpvbnRhbFZhbHVl
cy5jb250YWluaW5nQmxvY2tXaWR0aDsKICAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlSWZOb3RB
dXRvKHN0eWxlLm1hcmdpblN0YXJ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRW
YWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5FbmQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07
CiB9CiAKLUNvbXB1dGVkVmVydGljYWxNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAorQ29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBj
b25zdAogewogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBj
b250YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgudmFs
dWVPcigwKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZEhvcml6b250YWxW
YWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGg7CiAgICAgcmV0dXJuIHsgY29tcHV0ZWRWYWx1ZUlm
Tm90QXV0byhzdHlsZS5tYXJnaW5CZWZvcmUoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCBjb21w
dXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLm1hcmdpbkFmdGVyKCksIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKSB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0VW5p
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRVbml0cy5oCmluZGV4IDE1NWVmOTJl
MWM0OGJlMjIzMmI1OTEzYzVlYzBhODJlYzZjMmMyMjEuLmI1YzUzYTJmM2IwYWQ5Y2I4NWY2NDRl
YTQ3OTM4MzJjNDI4ZDA2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlv
dXRVbml0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRVbml0cy5oCkBAIC0x
MzgsMjMgKzEzOCwxOSBAQCBzdHJ1Y3QgVmVydGljYWxHZW9tZXRyeSB7CiB9OwogCiBzdHJ1Y3Qg
VXNlZEhvcml6b250YWxWYWx1ZXMgewotICAgIGV4cGxpY2l0IFVzZWRIb3Jpem9udGFsVmFsdWVz
KCkKLSAgICAgICAgewotICAgICAgICB9Ci0KICAgICBleHBsaWNpdCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyhMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQogICAgICAgICA6IGNvbnRhaW5p
bmdCbG9ja1dpZHRoKGNvbnRhaW5pbmdCbG9ja1dpZHRoKQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgIGV4cGxpY2l0IFVzZWRIb3Jpem9udGFsVmFsdWVzKE9wdGlvbmFsPExheW91dFVuaXQ+
IGNvbnRhaW5pbmdCbG9ja1dpZHRoLCBPcHRpb25hbDxMYXlvdXRVbml0PiB3aWR0aCwgT3B0aW9u
YWw8VXNlZEhvcml6b250YWxNYXJnaW4+IG1hcmdpbikKKyAgICBleHBsaWNpdCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyhMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoLCBPcHRpb25hbDxMYXlv
dXRVbml0PiB3aWR0aCwgT3B0aW9uYWw8VXNlZEhvcml6b250YWxNYXJnaW4+IG1hcmdpbikKICAg
ICAgICAgOiBjb250YWluaW5nQmxvY2tXaWR0aChjb250YWluaW5nQmxvY2tXaWR0aCkKICAgICAg
ICAgLCB3aWR0aCh3aWR0aCkKICAgICAgICAgLCBtYXJnaW4obWFyZ2luKQogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja1dpZHRo
OworICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGg7CiAgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gd2lkdGg7CiAgICAgT3B0aW9uYWw8VXNlZEhvcml6b250YWxNYXJnaW4+IG1hcmdp
bjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5n
L0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5k
ZXggYTdkZDI5NmIzYjc1YzU2MzYwMTZiYzMxMTVkMmQxNDJjZDVmY2Q3Zi4uMDRlZmUwZDBiYjNk
NWJkYjcyNDNiYmRhZGIzY2MyYWQ1OWU0YzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtNDEsNyArNDEsNiBAQCBIZWlnaHRBbmRNYXJnaW4g
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0
QW5kTWFyZwogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSAmJiAhbGF5b3V0Qm94
LnJlcGxhY2VkKCkpOwogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSk7
Ci0gICAgQVNTRVJUKHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
IAogICAgIGF1dG8gY29tcHV0ZSA9IFsmXSgpIC0+IEhlaWdodEFuZE1hcmdpbiB7CiAKQEAgLTEx
Myw3ICsxMTIsNiBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZwogV2lkdGhBbmRNYXJnaW4gQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkV2lkdGhBbmRN
YXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jp
em9udGFsVmFsdWVzKSBjb25zdAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7
Ci0gICAgQVNTRVJUKHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
IAogICAgIGF1dG8gY29tcHV0ZSA9IFsmXSgpIHsKIApAQCAtMTM5LDcgKzEzNyw3IEBAIFdpZHRo
QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBs
YWNlZFdpZHRoQW5kTWFyZ2luCiAgICAgICAgIC8vICAgIGVkZ2VzIG9mIHRoZSBjb250YWluaW5n
IGJsb2NrLgogCiAgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAg
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSAqdXNlZEhvcml6b250YWxWYWx1ZXMuY29u
dGFpbmluZ0Jsb2NrV2lkdGg7CisgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1
c2VkSG9yaXpvbnRhbFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aDsKICAgICAgICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eCk7CiAKICAgICAgICAgYXV0byB3aWR0aCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8odXNlZEhv
cml6b250YWxWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0
aC52YWx1ZSgpLCBGaXhlZCB9IDogc3R5bGUubG9naWNhbFdpZHRoKCksIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA1NTM5NDg2
OWZjYjI1YTBkODdmYTc1MmI2MzQyN2IxNWFlNDc4NjMwLi45MWRlYWE1NzYyZDQ4OTQyMzQ1ZGRj
ZTQ4MjU0Y2RiMzVhZDczNjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CkBAIC0xMDcsNyArMTA3LDcgQEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW4KICAgICB9CiAKICAg
ICBWZWN0b3I8Y29uc3QgQm94Kj4gZm9ybWF0dGluZ0NvbnRleHRSb290TGlzdDsKLSAgICBhdXRv
IHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CisgICAgYXV0byB1c2VkVmFs
dWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBMYXlvdXRVbml0IHsgfSB9OwogICAgIGF1dG8q
IGxheW91dEJveCA9IHJvb3QoKS5maXJzdEluRmxvd09yRmxvYXRpbmdDaGlsZCgpOwogICAgIHdo
aWxlIChsYXlvdXRCb3gpIHsKICAgICAgICAgaWYgKGxheW91dEJveC0+ZXN0YWJsaXNoZXNGb3Jt
YXR0aW5nQ29udGV4dCgpKSB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3Qg
Qm94JgogewogICAgIEFTU0VSVChmb3JtYXR0aW5nUm9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdD
b250ZXh0KCkpOwogCi0gICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMg
eyB9OworICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgTGF5b3V0
VW5pdCB7IH0gfTsKICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhmb3JtYXR0aW5nUm9vdCwg
dXNlZFZhbHVlcyk7CiAgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oZm9ybWF0dGluZ1Jvb3Qs
IHVzZWRWYWx1ZXMpOwogCkBAIC0yMjYsMTMgKzIyNiwxMiBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQog
ICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyBoZWlnaHRBbmRNYXJnaW4ubm9uQ29s
bGFwc2VkTWFyZ2luLCB7IH0gfSk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIHJvb3QsIFVzZWRIb3Jpem9u
dGFsVmFsdWVzIHVzZWRWYWx1ZXMpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiByb290LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB1c2VkSG9yaXpvbnRhbFZhbHVlcykKIHsKICAgICBBU1NFUlQocm9vdC5pc0Zsb2F0aW5n
UG9zaXRpb25lZCgpIHx8IHJvb3QuaXNJbmxpbmVCbG9ja0JveCgpKTsKLSAgICBBU1NFUlQodXNl
ZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aCk7CiAKLSAgICBjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZyhyb290LCB1c2VkVmFsdWVzKTsKLSAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4ocm9vdCwg
dXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcocm9vdCwgdXNlZEhvcml6
b250YWxWYWx1ZXMpOworICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihyb290LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CiAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHN0YXRpYyBwb3NpdGlvbmlu
ZyBpbiBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQuIFdlIGp1c3QgbmVlZCB0byBpbml0aWFsaXpl
IHRoZSB0b3AgbGVmdCBwb3NpdGlvbi4KICAgICBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94
KHJvb3QpLnNldFRvcExlZnQoeyAwLCAwIH0pOwogICAgIC8vIFN3aWNoIG92ZXIgdG8gdGhlIG5l
dyBmb3JtYXR0aW5nIGNvbnRleHQgKHRoZSBvbmUgdGhhdCB0aGUgcm9vdCBjcmVhdGVzKS4KQEAg
LTI0NywxNSArMjQ2LDE0IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZv
cm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIHJvb3QsIFVzZWRICiAgICAgICAgIGNvbXB1
dGVIZWlnaHRBbmRNYXJnaW4ocm9vdCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94KGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKQordm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVC
b3goY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9u
dGFsVmFsdWVzKQogewogICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzQ29udGFpbmVyKCkpOwogICAg
IEFTU0VSVCghbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CiAgICAg
QVNTRVJUKGxheW91dEJveC5yZXBsYWNlZCgpKTsKLSAgICBBU1NFUlQodXNlZFZhbHVlcy5jb250
YWluaW5nQmxvY2tXaWR0aCk7CiAKLSAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRC
b3gsIHVzZWRWYWx1ZXMpOwotICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIHVz
ZWRWYWx1ZXMpOworICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCwgdXNlZEhv
cml6b250YWxWYWx1ZXMpOworICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIHVz
ZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJv
eCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5j
cHAKaW5kZXggZjA4YjA3YTJlZWZlNGRjZmFhOTJlZjk3ZGM0YjkyZmQ3MGM4MDc1Mi4uYjFkZjFl
ZDQwN2IzZGRjMmExNjQ5NmY4Nzg4YjI0NTIwZDQwMWY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgV2lkdGhB
bmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja1dp
ZHRoQW5kTWFyZ2luKGNvbnMKICAgICAvLyBJZiAnd2lkdGgnIGlzICdhdXRvJywgdGhlIHVzZWQg
dmFsdWUgaXMgdGhlIHNocmluay10by1maXQgd2lkdGggYXMgZm9yIGZsb2F0aW5nIGVsZW1lbnRz
LgogICAgIC8vIEEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nIGZvciAnbWFyZ2luLWxlZnQnIG9y
ICdtYXJnaW4tcmlnaHQnIGJlY29tZXMgYSB1c2VkIHZhbHVlIG9mICcwJy4KICAgICAvLyAjMQot
ICAgIGF1dG8gd2lkdGggPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKGZvcm1hdHRpbmdDb250ZXh0
Um9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLCB1c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dp
ZHRoLnZhbHVlT3IoMCkpOworICAgIGF1dG8gd2lkdGggPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KGZvcm1hdHRpbmdDb250ZXh0Um9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLCB1c2VkVmFsdWVz
LmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBpZiAoIXdpZHRoKQogICAgICAgICB3aWR0aCA9
IHNocmlua1RvRml0V2lkdGgoZm9ybWF0dGluZ0NvbnRleHRSb290LCB1c2VkVmFsdWVzKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378864</attachid>
            <date>2019-09-16 09:16:20 -0700</date>
            <delta_ts>2019-09-16 09:56:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201809-20190916091620.patch</filename>
            <type>text/plain</type>
            <size>33401</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5OTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE1NjE4NDU2MmYzZTAw
NDQ1NGJjMGM4ZDEyMTNlMDE3N2EzOWUwMS4uZjNkNzk3ZWIxMGEwYmEyOGQ4MmNiN2M5MTJkYWQ3
OTFiOTY4Mzc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE5LTA5LTE2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gQWx3YXlzIHByb3Zp
ZGUgYSBjb250YWluaW5nIGJsb2NrIHdpZHRoIHZhbHVlIHRvIGNvbXB1dGUqIGZ1bmN0aW9ucy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTgwOQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTUzODMxNTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgVGhlIGNhbGxlciBjYW4gYWx3YXlzIG1ha2UgYSBt
b3JlIGluZm9ybWF0aXZlIGRlY2lzaW9uIGFib3V0IHRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gdGhl
IGNvbnRhaW5pbmcgYmxvY2sgd2lkdGggaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgKEN1cnJl
bnRseSB0aGUgb25seSBjYXNlIGlzIHdoZW4gY29tcHV0aW5nIHRoZSBwcmVmZXJyZWQgd2lkdGgu
KQorCisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5n
KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5r
VG9GaXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpv
dXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRW
ZXJ0aWNhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRy
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6ZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1JlcGxh
Y2VkV2lkdGhBbmRNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVk
UG9zaXRpb25PZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luIGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvTGF5b3V0VW5pdHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VXNl
ZEhvcml6b250YWxWYWx1ZXM6OlVzZWRIb3Jpem9udGFsVmFsdWVzKToKKyAgICAgICAgKiBsYXlv
dXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94KToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKToKKwogMjAxOS0wOS0xNiAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0JGQ10gQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFy
Z2luIHNob3VsZCBub3QgcmVhZCBjb250YWluaW5nIGJsb2NrJ3Mgd2lkdGgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGI2NjI2NzExZDU2ODQxMjA2
MzMwYWRkNGNjZTZjZmM4NTZhNjMxNmQuLmVlMjFiNjA0M2U3NjY5M2QxOWRlODFmMWU4MDA3YTJk
OTkyNmNiZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNw
cApAQCAtMTI4LDEzICsxMjgsMTMgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91
dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gpCiAgICAgZGlzcGxh
eUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luLCB7IH0g
fSk7CiB9CiAKLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5n
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxVc2VkSG9yaXpvbnRhbFZhbHVlcz4gdXNl
ZFZhbHVlcykKK3ZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5n
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxVc2VkSG9yaXpvbnRhbFZhbHVlcz4gdXNl
ZEhvcml6b250YWxWYWx1ZXMpCiB7Ci0gICAgaWYgKCF1c2VkVmFsdWVzKQotICAgICAgICB1c2Vk
VmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBnZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94
LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OworICAgIGlmICghdXNlZEhv
cml6b250YWxWYWx1ZXMpCisgICAgICAgIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6
b250YWxWYWx1ZXMgeyBnZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5n
U3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5zZXRCb3JkZXIo
Z2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKLSAgICBkaXNwbGF5Qm94LnNl
dFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcobGF5b3V0Qm94LCAqdXNlZFZhbHVl
cykpOworICAgIGRpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGlu
ZyhsYXlvdXRCb3gsICp1c2VkSG9yaXpvbnRhbFZhbHVlcykpOwogfQogCiB2b2lkIEZvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCA2MWI2MTM0Njlm
YTBjMjRhZDAwNzNhZWI1YjI1ZDk3Y2RmMDNhYjE0Li5jMTQ2YzVlNzg4MTUxNWNlMWVhZDQzYTll
ODI5Mjk2Y2UzNjBkYWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC0yNDUsMTEgKzI0NSwxMCBAQCBMYXlvdXRVbml0
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9y
T3V0T2ZGbG93UG9zaQogICAgIHJldHVybiBsZWZ0IC0gcGFkZGluZ0JveExlZnQ7CiB9CiAKLUxh
eW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKGNv
bnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMp
CitMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0
aChjb25zdCBCb3gmIGZvcm1hdHRpbmdSb290LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkSG9y
aXpvbnRhbFZhbHVlcykKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBzaHJpbmsgdG8gZml0IC0+IHVuc3VwcG9ydGVk
IC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0gPDwgInB4KSBsYXlvdXRCb3g6ICIgPDwgJmZv
cm1hdHRpbmdSb290IDw8ICIpIik7CiAgICAgQVNTRVJUKGZvcm1hdHRpbmdSb290LmVzdGFibGlz
aGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgQVNTRVJUKHVzZWRWYWx1ZXMuY29udGFpbmlu
Z0Jsb2NrV2lkdGguaGFzVmFsdWUoKSk7CiAKICAgICAvLyBDYWxjdWxhdGlvbiBvZiB0aGUgc2hy
aW5rLXRvLWZpdCB3aWR0aCBpcyBzaW1pbGFyIHRvIGNhbGN1bGF0aW5nIHRoZSB3aWR0aCBvZiBh
IHRhYmxlIGNlbGwgdXNpbmcgdGhlIGF1dG9tYXRpYyB0YWJsZSBsYXlvdXQgYWxnb3JpdGhtLgog
ICAgIC8vIFJvdWdobHk6IGNhbGN1bGF0ZSB0aGUgcHJlZmVycmVkIHdpZHRoIGJ5IGZvcm1hdHRp
bmcgdGhlIGNvbnRlbnQgd2l0aG91dCBicmVha2luZyBsaW5lcyBvdGhlciB0aGFuIHdoZXJlIGV4
cGxpY2l0IGxpbmUgYnJlYWtzIG9jY3VyLApAQCAtMjY4LDcgKzI2Nyw3IEBAIExheW91dFVuaXQg
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYg
Zm9ybWF0dGluZ1JvCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgPSAqcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwogICAgIH0K
LSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gKnVzZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lk
dGg7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRh
aW5pbmdCbG9ja1dpZHRoOwogICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heChpbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2YWlsYWJsZVdpZHRoKSwgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cy5tYXhpbXVtKTsKIH0KIApAQCAtMjc2LDcgKzI3NSw2IEBAIFZlcnRpY2FsR2Vv
bWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZl
cnRpY2FsR2VvbWV0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSAmJiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogICAgIEFTU0VSVCh1c2VkVmVydGljYWxW
YWx1ZXMuY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICBBU1NFUlQodXNlZEhvcml6b250YWxW
YWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgpOwogCiAgICAgLy8gMTAuNi40IEFic29sdXRlbHkg
cG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCiAgICAgLy8KQEAgLTMwNiw3ICszMDQs
NyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZG
bG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldAogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94
LnN0eWxlKCk7CiAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0g
KnVzZWRWZXJ0aWNhbFZhbHVlcy5jb250YWluaW5nQmxvY2tIZWlnaHQ7Ci0gICAgYXV0byBjb250
YWluaW5nQmxvY2tXaWR0aCA9ICp1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb250YWluaW5nQmxvY2tX
aWR0aDsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZEhvcml6b250YWxWYWx1
ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGg7CiAKICAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWVJ
Zk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAg
YXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxCb3R0b20o
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpAQCAtMzk2LDcgKzM5NCw3IEBAIFZlcnRpY2FsR2Vv
bWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZl
cnRpY2FsR2VvbWV0CiAgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwgeyBjb250ZW50SGVpZ2h0
KCksIHVzZWRWZXJ0aWNhbE1hcmdpbiB9IH07CiB9CiAKLUhvcml6b250YWxHZW9tZXRyeSBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdl
b21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFs
dWVzKQorSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gs
IFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKQogewogICAgIEFTU0VS
VChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5yZXBsYWNl
ZCgpKTsKICAgICAKQEAgLTQyOSwxNSArNDI3LDEzIEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdl
CiAgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgp
OwogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CiAgICAgYXV0byYgYm94R2Vv
bWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAg
IGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgYXV0byYgY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChjb250YWluaW5nQmxvY2spOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lk
dGggPSB1c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7Ci0gICAgYXV0
byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2Vk
SG9yaXpvbnRhbFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aDsKKyAgICBhdXRvIGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24gPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgIAogICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFs
dWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbExlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwog
ICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxSaWdo
dCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byB3aWR0aCA9IGNvbXB1dGVkVmFs
dWVJZk5vdEF1dG8odXNlZFZhbHVlcy53aWR0aCA/IExlbmd0aCB7IHVzZWRWYWx1ZXMud2lkdGgu
dmFsdWUoKSwgRml4ZWQgfSA6IHN0eWxlLmxvZ2ljYWxXaWR0aCgpLCBjb250YWluaW5nQmxvY2tX
aWR0aCk7Ci0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgYXV0byB3
aWR0aCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8odXNlZEhvcml6b250YWxWYWx1ZXMud2lkdGgg
PyBMZW5ndGggeyB1c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0aC52YWx1ZSgpLCBGaXhlZCB9IDog
c3R5bGUubG9naWNhbFdpZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJn
aW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgVXNlZEhvcml6b250YWxN
YXJnaW4gdXNlZEhvcml6b250YWxNYXJnaW47CiAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdl
b21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKICAgICBhdXRvIHBhZGRpbmdSaWdodCA9
IGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CkBAIC01MDIsNyArNDk4LDcg
QEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZG
bG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2UKICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFp
bGFibGUgd2lkdGggYnkgc29sdmluZyBmb3IgJ3dpZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAo
aW4gY2FzZSAxKSB0byAwCiAgICAgICAgIGxlZnQgPSBMYXlvdXRVbml0IHsgMCB9OwogICAgICAg
ICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBh
ZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJp
Z2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgVXNlZEhv
cml6b250YWxWYWx1ZXMgeyBhdmFpbGFibGVXaWR0aCwgdXNlZFZhbHVlcy53aWR0aCwgdXNlZFZh
bHVlcy5tYXJnaW4gfSk7CisgICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRC
b3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgYXZhaWxhYmxlV2lkdGgsIHVzZWRIb3Jpem9udGFs
VmFsdWVzLndpZHRoLCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4gfSk7CiAgICAgICAgIGxl
ZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAr
IGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCAgKyBib3Jk
ZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CiAgICAgfSBlbHNl
IGlmICghbGVmdCAmJiAhcmlnaHQgJiYgd2lkdGgpIHsKICAgICAgICAgLy8gIzIKQEAgLTUxOSw3
ICs1MTUsNyBAQCBIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZQogICAgICAgICAvLyBDYWxjdWxhdGUg
dGhlIGF2YWlsYWJsZSB3aWR0aCBieSBzb2x2aW5nIGZvciAnd2lkdGgnIGFmdGVyIHNldHRpbmcg
J3JpZ2h0JyAoaW4gY2FzZSAzKSB0byAwCiAgICAgICAgIHJpZ2h0ID0gTGF5b3V0VW5pdCB7IDAg
fTsKICAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0g
KCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGlu
Z0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCArICpyaWdodCk7Ci0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRC
b3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgYXZhaWxhYmxlV2lkdGgsIHVzZWRWYWx1ZXMud2lk
dGgsIHVzZWRWYWx1ZXMubWFyZ2luIH0pOworICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lk
dGgobGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGF2YWlsYWJsZVdpZHRoLCB1c2Vk
SG9yaXpvbnRhbFZhbHVlcy53aWR0aCwgdXNlZEhvcml6b250YWxWYWx1ZXMubWFyZ2luIH0pOwog
ICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CiAg
ICAgfSBlbHNlIGlmICghbGVmdCAmJiB3aWR0aCAmJiByaWdodCkgewogICAgICAgICAvLyAjNApA
QCAtNTM4LDcgKzUzNCw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAKICAgICAvLyBGb3Ig
b3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRo
ZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhl
IHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRk
aW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVt
LgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGNvbnRhaW5p
bmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdCb3hMZWZ0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxv
Y2tQYWRkaW5nVmVydGljYWxFZGdlID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3go
KmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkucGFkZGluZ0JveExlZnQoKTsKICAgICAqbGVm
dCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogICAgICpyaWdodCArPSBj
b250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogCkBAIC01NTAsNyArNTQ2LDYgQEAg
VmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1Jl
cGxhY2VkVmVydGljYWxHZW9tZXRyeSgKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZG
bG93UG9zaXRpb25lZCgpICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsKICAgICBBU1NFUlQodXNl
ZFZlcnRpY2FsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja0hlaWdodCk7Ci0gICAgQVNTRVJUKHVzZWRI
b3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKIAogICAgIC8vIDEwLjYuNSBB
YnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzCiAgICAgLy8KQEAgLTU2Niw3
ICs1NjEsNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KAogICAgIGF1dG8mIHN0eWxlID0gbGF5
b3V0Qm94LnN0eWxlKCk7CiAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVp
Z2h0ID0gKnVzZWRWZXJ0aWNhbFZhbHVlcy5jb250YWluaW5nQmxvY2tIZWlnaHQ7Ci0gICAgYXV0
byBjb250YWluaW5nQmxvY2tXaWR0aCA9ICp1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb250YWluaW5n
QmxvY2tXaWR0aDsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZEhvcml6b250
YWxWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGg7CiAKICAgICBhdXRvIHRvcCA9IGNvbXB1dGVk
VmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7
CiAgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxC
b3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpAQCAtNjI5LDcgKzYyNCw3IEBAIFZlcnRp
Y2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNl
ZFZlcnRpY2FsR2VvbWV0cnkoCiAgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwgeyBoZWlnaHQs
IHsgKnVzZWRNYXJnaW5CZWZvcmUsICp1c2VkTWFyZ2luQWZ0ZXIgfSB9IH07CiB9CiAKLUhvcml6
b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxh
Y2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRh
bFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAorSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29u
c3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFs
dWVzKSBjb25zdAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCkBAIC02NTAsMTYgKzY0NSwxNSBAQCBIb3Jp
em9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBs
YWNlZEhvcml6b250YWxHZW9tZQogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+
Zm9ybWF0dGluZ0NvbnRleHQoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgp
OwogICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSAqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkVmFs
dWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uID0gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkSG9yaXpvbnRhbFZh
bHVlcy5jb250YWluaW5nQmxvY2tXaWR0aDsKKyAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24gPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpOwogCiAgICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHls
ZS5sb2dpY2FsTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAgYXV0byByaWdodCA9
IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFJpZ2h0KCksIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICBh
dXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250
YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gdXNlZE1hcmdpblN0YXJ0ID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0OwogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5FbmQgPSBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uZW5kOwotICAgIGF1dG8gd2lkdGggPSBpbmxpbmVSZXBsYWNlZFdpZHRo
QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcykud2lkdGg7CisgICAgYXV0byB3aWR0aCA9
IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpvbnRhbFZh
bHVlcykud2lkdGg7CiAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRpbmdM
ZWZ0KCkudmFsdWVPcigwKTsKICAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGJveEdlb21ldHJ5LnBh
ZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CiAgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0
cnkuYm9yZGVyTGVmdCgpOwpAQCAtNzI2LDcgKzcyMCw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdl
b21lCiAKICAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxv
Y2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgogICAgIC8v
IEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUg
c3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94
IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRp
Y2FsRWRnZSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdCbG9j
aykucGFkZGluZ0JveExlZnQoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0
aWNhbEVkZ2UgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpKS5wYWRkaW5nQm94TGVmdCgpOwogICAgICpsZWZ0ICs9IGNvbnRhaW5p
bmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CiAgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9j
a1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CiAKQEAgLTc2NSw3ICs3NTksNyBAQCBIZWlnaHRBbmRNYXJn
aW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IEJv
eCYgbGF5b3V0QgogICAgIHJldHVybiBIZWlnaHRBbmRNYXJnaW4geyAqaGVpZ2h0LCB1c2VkVmVy
dGljYWxNYXJnaW4gfTsKIH0KIAotV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpCitXaWR0aEFuZE1hcmdpbiBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aEFuZE1h
cmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6
b250YWxWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7CiAKQEAgLTc3NCwxNCArNzY4LDE0IEBAIFdp
ZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdOb25SZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKGNvCiAgICAgLy8gMS4gSWYgJ21hcmdpbi1sZWZ0Jywgb3IgJ21h
cmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAn
MCcuCiAgICAgLy8gMi4gSWYgJ3dpZHRoJyBpcyBjb21wdXRlZCBhcyAnYXV0bycsIHRoZSB1c2Vk
IHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZpdCIgd2lkdGguCiAKLSAgICBhdXRvIGNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5
b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9
IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CiAKICAgICAvLyAjMQogICAgIGF1dG8gdXNlZEhvcml6b250YWxsTWFyZ2lu
ID0gVXNlZEhvcml6b250YWxNYXJnaW4geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQu
dmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CiAg
ICAgLy8gIzIKLSAgICBhdXRvIHdpZHRoID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byh1c2VkVmFs
dWVzLndpZHRoID8gTGVuZ3RoIHsgdXNlZFZhbHVlcy53aWR0aC52YWx1ZSgpLCBGaXhlZCB9IDog
bGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbFdpZHRoKCksIHVzZWRWYWx1ZXMuY29udGFpbmluZ0Js
b2NrV2lkdGgudmFsdWVPcigwKSk7CisgICAgYXV0byB3aWR0aCA9IGNvbXB1dGVkVmFsdWVJZk5v
dEF1dG8odXNlZEhvcml6b250YWxWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2VkSG9yaXpvbnRh
bFZhbHVlcy53aWR0aC52YWx1ZSgpLCBGaXhlZCB9IDogbGF5b3V0Qm94LnN0eWxlKCkubG9naWNh
bFdpZHRoKCksIHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAg
ICBpZiAoIXdpZHRoKQotICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0Qm94
LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJv
eCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBmbG9hdGluZyBu
b24tcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCB1c2Vk
SG9yaXpvbnRhbGxNYXJnaW4uc3RhcnQgPDwgInB4LCAiIDw8IHVzZWRIb3Jpem9udGFsbE1hcmdp
bi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CiAgICAg
cmV0dXJuIFdpZHRoQW5kTWFyZ2luIHsgKndpZHRoLCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4sIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbiB9OwpAQCAtNzk3LDcgKzc5MSw3IEBAIEhlaWdodEFuZE1h
cmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRIZWlnaHRB
bmRNYXJnaW4oY29uCiAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxh
eW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMsIHVzZWRWZXJ0aWNhbFZhbHVlcyk7CiB9CiAK
LVdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB1c2VkVmFsdWVzKSBjb25zdAorV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdAog
ewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRC
b3gucmVwbGFjZWQoKSk7CiAKQEAgLTgwNSwxMSArNzk5LDExIEBAIFdpZHRoQW5kTWFyZ2luIEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZFdpZHRoQW5kTWFyZ2lu
KGNvbnN0CiAgICAgLy8KICAgICAvLyAxLiBJZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmln
aHQnIGFyZSBjb21wdXRlZCBhcyAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgJzAnLgogICAg
IC8vIDIuIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5s
aW5lIHJlcGxhY2VkIGVsZW1lbnRzLgotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
ID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1
ZXMpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIAog
ICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJb
SGVpZ2h0XVtNYXJnaW5dIC0+IGZsb2F0aW5nIHJlcGxhY2VkIC0+IHJlZGlyZWN0ZWQgdG8gaW5s
aW5lIHJlcGxhY2VkIik7Ci0gICAgcmV0dXJuIGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4o
bGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IHVzZWRWYWx1ZXMuY29udGFpbmluZ0Js
b2NrV2lkdGgudmFsdWVPcigwKSwKLSAgICAgICAgdXNlZFZhbHVlcy53aWR0aCwgVXNlZEhvcml6
b250YWxNYXJnaW4geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwg
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH0gfSk7CisgICAgcmV0dXJu
IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB7IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLAorICAgICAg
ICB1c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0aCwgVXNlZEhvcml6b250YWxNYXJnaW4geyBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZC52YWx1ZU9yKDApIH0gfSk7CiB9CiAKIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJv
eCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkSG9yaXpvbnRhbFZhbHVlcywg
VXNlZFZlcnRpY2FsVmFsdWVzIHVzZWRWZXJ0aWNhbFZhbHVlcykgY29uc3QKQEAgLTg1MSw3ICs4
NDUsNiBAQCBXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0
aW5nV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYQogSGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVz
LCBVc2VkVmVydGljYWxWYWx1ZXMgdXNlZFZlcnRpY2FsVmFsdWVzKSBjb25zdAogewogICAgIEFT
U0VSVCgobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0Zs
b2F0aW5nUG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0luRmxvdygpKSAmJiBsYXlvdXRCb3gu
cmVwbGFjZWQoKSk7Ci0gICAgQVNTRVJUKHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKIAogICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJs
b2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2Nr
JyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFjZWQg
ZWxlbWVudHMKICAgICAvLwpAQCAtODk1LDcgKzg4OCw3IEBAIEhlaWdodEFuZE1hcmdpbiBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNv
bnN0CiAgICAgcmV0dXJuIHsgKmhlaWdodCwgdXNlZFZlcnRpY2FsTWFyZ2luIH07CiB9CiAKLVdp
ZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMg
dXNlZFZhbHVlcykgY29uc3QKK1dpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwg
VXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94Lmlz
RmxvYXRpbmdQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzSW5GbG93KCkpICYmIGxheW91dEJv
eC5yZXBsYWNlZCgpKTsKIApAQCAtOTE5LDI1ICs5MTIsMjUgQEAgV2lkdGhBbmRNYXJnaW4gRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNv
bnN0IEIKICAgICAvLyAgICBJZiAzMDBweCBpcyB0b28gd2lkZSB0byBmaXQgdGhlIGRldmljZSwg
VUFzIHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhh
cyBhIDI6MSByYXRpbyBhbmQgZml0cyB0aGUgZGV2aWNlIGluc3RlYWQuCiAKICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGgg
PSB1c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBj
b21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0
aCA9IHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoOworICAgIGF1dG8g
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbihsYXlvdXRCb3gsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIAogICAgIGF1dG8gdXNlZE1h
cmdpblN0YXJ0ID0gWyZdIHsKLSAgICAgICAgaWYgKHVzZWRWYWx1ZXMubWFyZ2luKQotICAgICAg
ICAgICAgcmV0dXJuIHVzZWRWYWx1ZXMubWFyZ2luLT5zdGFydDsKKyAgICAgICAgaWYgKHVzZWRI
b3Jpem9udGFsVmFsdWVzLm1hcmdpbikKKyAgICAgICAgICAgIHJldHVybiB1c2VkSG9yaXpvbnRh
bFZhbHVlcy5tYXJnaW4tPnN0YXJ0OwogICAgICAgICByZXR1cm4gY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLnN0YXJ0LnZhbHVlT3IoMF9sdSk7CiAgICAgfTsKIAogICAgIGF1dG8gdXNlZE1hcmdp
bkVuZCA9IFsmXSB7Ci0gICAgICAgIGlmICh1c2VkVmFsdWVzLm1hcmdpbikKLSAgICAgICAgICAg
IHJldHVybiB1c2VkVmFsdWVzLm1hcmdpbi0+ZW5kOworICAgICAgICBpZiAodXNlZEhvcml6b250
YWxWYWx1ZXMubWFyZ2luKQorICAgICAgICAgICAgcmV0dXJuIHVzZWRIb3Jpem9udGFsVmFsdWVz
Lm1hcmdpbi0+ZW5kOwogICAgICAgICByZXR1cm4gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZC52YWx1ZU9yKDBfbHUpOwogICAgIH07CiAKICAgICBhdXRvIHJlcGxhY2VkID0gbGF5b3V0Qm94
LnJlcGxhY2VkKCk7CiAgICAgQVNTRVJUKHJlcGxhY2VkKTsKIAotICAgIGF1dG8gd2lkdGggPSBj
b21wdXRlZFZhbHVlSWZOb3RBdXRvKHVzZWRWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2VkVmFs
dWVzLndpZHRoLnZhbHVlKCksIEZpeGVkIH0gOiBzdHlsZS5sb2dpY2FsV2lkdGgoKSwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gd2lkdGggPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KHVzZWRIb3Jpem9udGFsVmFsdWVzLndpZHRoID8gTGVuZ3RoIHsgdXNlZEhvcml6b250YWxWYWx1
ZXMud2lkdGgudmFsdWUoKSwgRml4ZWQgfSA6IHN0eWxlLmxvZ2ljYWxXaWR0aCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CiAgICAgYXV0byBoZWlnaHRJc0F1dG8gPSBpc0hlaWdodEF1dG8obGF5
b3V0Qm94KTsKICAgICBhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94
LCBIZWlnaHRUeXBlOjpOb3JtYWwpOwogCkBAIC05NjksNyArOTYyLDYgQEAgV2lkdGhBbmRNYXJn
aW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFy
Z2luKGNvbnN0IEIKIExheW91dFNpemUgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZs
b3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jp
em9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdAogewogICAgIEFTU0VSVChs
YXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpOwotICAgIEFTU0VSVCh1c2VkSG9yaXpvbnRh
bFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aCk7CiAKICAgICAvLyA5LjQuMyBSZWxhdGl2ZSBw
b3NpdGlvbmluZwogICAgIC8vCkBAIC05ODEsOCArOTczLDcgQEAgTGF5b3V0U2l6ZSBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25z
dCBCb3gKICAgICAvLyAzLiBJZiBuZWl0aGVyIGlzICdhdXRvJywgJ2JvdHRvbScgaXMgaWdub3Jl
ZCAoaS5lLiwgdGhlIHVzZWQgdmFsdWUgb2YgJ2JvdHRvbScgd2lsbCBiZSBtaW51cyB0aGUgdmFs
dWUgb2YgJ3RvcCcpLgogCiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAg
ICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwot
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSAqdXNlZEhvcml6b250YWxWYWx1ZXMuY29u
dGFpbmluZ0Jsb2NrV2lkdGg7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRI
b3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoOwogCiAgICAgYXV0byB0b3AgPSBj
b21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOwogICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5s
b2dpY2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKQEAgLTEwMjYsNyArMTAxNyw3
IEBAIExheW91dFNpemUgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlv
bmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94CiAgICAgICAgIHJpZ2h0ID0gLSpsZWZ0OwogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vICM0Ci0gICAgICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVj
dGlvbiA9IGNvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
KyAgICAgICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5b3V0Qm94LmNvbnRhaW5p
bmdCbG9jaygpLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCiAgICAgICAgICAgICByaWdodCA9IC0qbGVmdDsKICAg
ICAgICAgZWxzZQpAQCAtMTA1MywxMyArMTA0NCwxMyBAQCBFZGdlcyBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkQm9yZGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAog
ICAgIH07CiB9CiAKLU9wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1
ZXMgdXNlZFZhbHVlcykgY29uc3QKK09wdGlvbmFsPEVkZ2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6
b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0CiB7CiAgICAgaWYgKCFsYXlv
dXRCb3guaXNQYWRkaW5nQXBwbGljYWJsZSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja1dpZHRoID0gdXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9y
KDApOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkSG9yaXpvbnRhbFZhbHVl
cy5jb250YWluaW5nQmxvY2tXaWR0aDsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0Nv
bnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1BhZGRpbmddIC0+IGxheW91dEJveDogIiA8PCAmbGF5
b3V0Qm94KTsKICAgICByZXR1cm4gRWRnZXMgewogICAgICAgICB7IHZhbHVlRm9yTGVuZ3RoKHN0
eWxlLnBhZGRpbmdMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgdmFsdWVGb3JMZW5ndGgo
c3R5bGUucGFkZGluZ1JpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9LApAQCAtMTA2Nywx
NyArMTA1OCwxNyBAQCBPcHRpb25hbDxFZGdlcz4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
Ojpjb21wdXRlZFBhZGRpbmcoY29uc3QgQm94JiBsYXlvdXRCbwogICAgIH07CiB9CiAKLUNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1
ZXMgdXNlZFZhbHVlcykgY29uc3QKK0NvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxh
eW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0
CiB7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja1dpZHRoID0gdXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9y
KDApOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkSG9yaXpvbnRhbFZhbHVl
cy5jb250YWluaW5nQmxvY2tXaWR0aDsKICAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlSWZOb3RB
dXRvKHN0eWxlLm1hcmdpblN0YXJ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRW
YWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5FbmQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07
CiB9CiAKLUNvbXB1dGVkVmVydGljYWxNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAorQ29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBj
b25zdAogewogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBj
b250YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgudmFs
dWVPcigwKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZEhvcml6b250YWxW
YWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGg7CiAgICAgcmV0dXJuIHsgY29tcHV0ZWRWYWx1ZUlm
Tm90QXV0byhzdHlsZS5tYXJnaW5CZWZvcmUoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCBjb21w
dXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLm1hcmdpbkFmdGVyKCksIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKSB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0VW5p
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRVbml0cy5oCmluZGV4IDE1NWVmOTJl
MWM0OGJlMjIzMmI1OTEzYzVlYzBhODJlYzZjMmMyMjEuLmI1YzUzYTJmM2IwYWQ5Y2I4NWY2NDRl
YTQ3OTM4MzJjNDI4ZDA2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlv
dXRVbml0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRVbml0cy5oCkBAIC0x
MzgsMjMgKzEzOCwxOSBAQCBzdHJ1Y3QgVmVydGljYWxHZW9tZXRyeSB7CiB9OwogCiBzdHJ1Y3Qg
VXNlZEhvcml6b250YWxWYWx1ZXMgewotICAgIGV4cGxpY2l0IFVzZWRIb3Jpem9udGFsVmFsdWVz
KCkKLSAgICAgICAgewotICAgICAgICB9Ci0KICAgICBleHBsaWNpdCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyhMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQogICAgICAgICA6IGNvbnRhaW5p
bmdCbG9ja1dpZHRoKGNvbnRhaW5pbmdCbG9ja1dpZHRoKQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgIGV4cGxpY2l0IFVzZWRIb3Jpem9udGFsVmFsdWVzKE9wdGlvbmFsPExheW91dFVuaXQ+
IGNvbnRhaW5pbmdCbG9ja1dpZHRoLCBPcHRpb25hbDxMYXlvdXRVbml0PiB3aWR0aCwgT3B0aW9u
YWw8VXNlZEhvcml6b250YWxNYXJnaW4+IG1hcmdpbikKKyAgICBleHBsaWNpdCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyhMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoLCBPcHRpb25hbDxMYXlv
dXRVbml0PiB3aWR0aCwgT3B0aW9uYWw8VXNlZEhvcml6b250YWxNYXJnaW4+IG1hcmdpbikKICAg
ICAgICAgOiBjb250YWluaW5nQmxvY2tXaWR0aChjb250YWluaW5nQmxvY2tXaWR0aCkKICAgICAg
ICAgLCB3aWR0aCh3aWR0aCkKICAgICAgICAgLCBtYXJnaW4obWFyZ2luKQogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja1dpZHRo
OworICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGg7CiAgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gd2lkdGg7CiAgICAgT3B0aW9uYWw8VXNlZEhvcml6b250YWxNYXJnaW4+IG1hcmdp
bjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5n
L0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5k
ZXggYTdkZDI5NmIzYjc1YzU2MzYwMTZiYzMxMTVkMmQxNDJjZDVmY2Q3Zi4uMDRlZmUwZDBiYjNk
NWJkYjcyNDNiYmRhZGIzY2MyYWQ1OWU0YzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtNDEsNyArNDEsNiBAQCBIZWlnaHRBbmRNYXJnaW4g
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0
QW5kTWFyZwogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSAmJiAhbGF5b3V0Qm94
LnJlcGxhY2VkKCkpOwogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSk7
Ci0gICAgQVNTRVJUKHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
IAogICAgIGF1dG8gY29tcHV0ZSA9IFsmXSgpIC0+IEhlaWdodEFuZE1hcmdpbiB7CiAKQEAgLTEx
Myw3ICsxMTIsNiBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZwogV2lkdGhBbmRNYXJnaW4gQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkV2lkdGhBbmRN
YXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jp
em9udGFsVmFsdWVzKSBjb25zdAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7
Ci0gICAgQVNTRVJUKHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
IAogICAgIGF1dG8gY29tcHV0ZSA9IFsmXSgpIHsKIApAQCAtMTM5LDcgKzEzNyw3IEBAIFdpZHRo
QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBs
YWNlZFdpZHRoQW5kTWFyZ2luCiAgICAgICAgIC8vICAgIGVkZ2VzIG9mIHRoZSBjb250YWluaW5n
IGJsb2NrLgogCiAgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAg
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSAqdXNlZEhvcml6b250YWxWYWx1ZXMuY29u
dGFpbmluZ0Jsb2NrV2lkdGg7CisgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1
c2VkSG9yaXpvbnRhbFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aDsKICAgICAgICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eCk7CiAKICAgICAgICAgYXV0byB3aWR0aCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8odXNlZEhv
cml6b250YWxWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2VkSG9yaXpvbnRhbFZhbHVlcy53aWR0
aC52YWx1ZSgpLCBGaXhlZCB9IDogc3R5bGUubG9naWNhbFdpZHRoKCksIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA1NTM5NDg2
OWZjYjI1YTBkODdmYTc1MmI2MzQyN2IxNWFlNDc4NjMwLi45MWRlYWE1NzYyZDQ4OTQyMzQ1ZGRj
ZTQ4MjU0Y2RiMzVhZDczNjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CkBAIC0xMDcsNyArMTA3LDcgQEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW4KICAgICB9CiAKICAg
ICBWZWN0b3I8Y29uc3QgQm94Kj4gZm9ybWF0dGluZ0NvbnRleHRSb290TGlzdDsKLSAgICBhdXRv
IHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CisgICAgYXV0byB1c2VkVmFs
dWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBMYXlvdXRVbml0IHsgfSB9OwogICAgIGF1dG8q
IGxheW91dEJveCA9IHJvb3QoKS5maXJzdEluRmxvd09yRmxvYXRpbmdDaGlsZCgpOwogICAgIHdo
aWxlIChsYXlvdXRCb3gpIHsKICAgICAgICAgaWYgKGxheW91dEJveC0+ZXN0YWJsaXNoZXNGb3Jt
YXR0aW5nQ29udGV4dCgpKSB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3Qg
Qm94JgogewogICAgIEFTU0VSVChmb3JtYXR0aW5nUm9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdD
b250ZXh0KCkpOwogCi0gICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMg
eyB9OworICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgTGF5b3V0
VW5pdCB7IH0gfTsKICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhmb3JtYXR0aW5nUm9vdCwg
dXNlZFZhbHVlcyk7CiAgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oZm9ybWF0dGluZ1Jvb3Qs
IHVzZWRWYWx1ZXMpOwogCkBAIC0yMjYsMTMgKzIyNiwxMiBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQog
ICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyBoZWlnaHRBbmRNYXJnaW4ubm9uQ29s
bGFwc2VkTWFyZ2luLCB7IH0gfSk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIHJvb3QsIFVzZWRIb3Jpem9u
dGFsVmFsdWVzIHVzZWRWYWx1ZXMpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiByb290LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB1c2VkSG9yaXpvbnRhbFZhbHVlcykKIHsKICAgICBBU1NFUlQocm9vdC5pc0Zsb2F0aW5n
UG9zaXRpb25lZCgpIHx8IHJvb3QuaXNJbmxpbmVCbG9ja0JveCgpKTsKLSAgICBBU1NFUlQodXNl
ZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aCk7CiAKLSAgICBjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZyhyb290LCB1c2VkVmFsdWVzKTsKLSAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4ocm9vdCwg
dXNlZFZhbHVlcyk7CisgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcocm9vdCwgdXNlZEhvcml6
b250YWxWYWx1ZXMpOworICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihyb290LCB1c2VkSG9yaXpv
bnRhbFZhbHVlcyk7CiAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHN0YXRpYyBwb3NpdGlvbmlu
ZyBpbiBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQuIFdlIGp1c3QgbmVlZCB0byBpbml0aWFsaXpl
IHRoZSB0b3AgbGVmdCBwb3NpdGlvbi4KICAgICBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94
KHJvb3QpLnNldFRvcExlZnQoeyAwLCAwIH0pOwogICAgIC8vIFN3aWNoIG92ZXIgdG8gdGhlIG5l
dyBmb3JtYXR0aW5nIGNvbnRleHQgKHRoZSBvbmUgdGhhdCB0aGUgcm9vdCBjcmVhdGVzKS4KQEAg
LTI0NywxNSArMjQ2LDE0IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZv
cm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIHJvb3QsIFVzZWRICiAgICAgICAgIGNvbXB1
dGVIZWlnaHRBbmRNYXJnaW4ocm9vdCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJlcGxhY2VkSW5saW5lQm94KGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKQordm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVC
b3goY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9u
dGFsVmFsdWVzKQogewogICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzQ29udGFpbmVyKCkpOwogICAg
IEFTU0VSVCghbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CiAgICAg
QVNTRVJUKGxheW91dEJveC5yZXBsYWNlZCgpKTsKLSAgICBBU1NFUlQodXNlZFZhbHVlcy5jb250
YWluaW5nQmxvY2tXaWR0aCk7CiAKLSAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRC
b3gsIHVzZWRWYWx1ZXMpOwotICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIHVz
ZWRWYWx1ZXMpOworICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCwgdXNlZEhv
cml6b250YWxWYWx1ZXMpOworICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIHVz
ZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJv
eCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5j
cHAKaW5kZXggZjA4YjA3YTJlZWZlNGRjZmFhOTJlZjk3ZGM0YjkyZmQ3MGM4MDc1Mi4uYjFkZjFl
ZDQwN2IzZGRjMmExNjQ5NmY4Nzg4YjI0NTIwZDQwMWY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgV2lkdGhB
bmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja1dp
ZHRoQW5kTWFyZ2luKGNvbnMKICAgICAvLyBJZiAnd2lkdGgnIGlzICdhdXRvJywgdGhlIHVzZWQg
dmFsdWUgaXMgdGhlIHNocmluay10by1maXQgd2lkdGggYXMgZm9yIGZsb2F0aW5nIGVsZW1lbnRz
LgogICAgIC8vIEEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nIGZvciAnbWFyZ2luLWxlZnQnIG9y
ICdtYXJnaW4tcmlnaHQnIGJlY29tZXMgYSB1c2VkIHZhbHVlIG9mICcwJy4KICAgICAvLyAjMQot
ICAgIGF1dG8gd2lkdGggPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKGZvcm1hdHRpbmdDb250ZXh0
Um9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLCB1c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dp
ZHRoLnZhbHVlT3IoMCkpOworICAgIGF1dG8gd2lkdGggPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KGZvcm1hdHRpbmdDb250ZXh0Um9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLCB1c2VkVmFsdWVz
LmNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBpZiAoIXdpZHRoKQogICAgICAgICB3aWR0aCA9
IHNocmlua1RvRml0V2lkdGgoZm9ybWF0dGluZ0NvbnRleHRSb290LCB1c2VkVmFsdWVzKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>