<?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>215451</bug_id>
          
          <creation_ts>2020-08-13 08:36:04 -0700</creation_ts>
          <short_desc>[LFC][Integration] Basic pagination support</short_desc>
          <delta_ts>2020-09-22 21:39:12 -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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</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>1679985</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-08-13 08:36:04 -0700</bug_when>
    <thetext>The last blocker for removing SLL completely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679987</commentid>
    <comment_count>1</comment_count>
      <attachid>406519</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-08-13 08:36:59 -0700</bug_when>
    <thetext>Created attachment 406519
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681690</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-20 08:37:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/67482721&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690747</commentid>
    <comment_count>3</comment_count>
      <attachid>409370</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-22 09:53:13 -0700</bug_when>
    <thetext>Created attachment 409370
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690753</commentid>
    <comment_count>4</comment_count>
      <attachid>409372</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-22 09:58:07 -0700</bug_when>
    <thetext>Created attachment 409372
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690766</commentid>
    <comment_count>5</comment_count>
      <attachid>409376</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-22 10:30:06 -0700</bug_when>
    <thetext>Created attachment 409376
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690795</commentid>
    <comment_count>6</comment_count>
      <attachid>409384</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-22 11:45:25 -0700</bug_when>
    <thetext>Created attachment 409384
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691024</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-22 21:39:11 -0700</bug_when>
    <thetext>Committed r267463: &lt;https://trac.webkit.org/changeset/267463&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 409384.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406519</attachid>
            <date>2020-08-13 08:36:59 -0700</date>
            <delta_ts>2020-09-22 09:53:13 -0700</delta_ts>
            <desc>wip</desc>
            <filename>ifc-pagination.patch</filename>
            <type>text/plain</type>
            <size>16043</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggMjdlMmQ2MzZhODFiLi5hZWNhYWIzOGExODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xNDM3LDYgKzE0MzcsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3Bw
CiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcAogbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKK2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCiBsYXlvdXQvaW52YWxpZGF0
aW9uL0ludmFsaWRhdGlvbkNvbnRleHQuY3BwCiBsYXlvdXQvaW52YWxpZGF0aW9uL0ludmFsaWRh
dGlvblN0YXRlLmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE4NjAz
MmU2ZmM5MS4uN2FhNGQxZWVkZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTcwOCw2ICsxNTcwOCw4IEBACiAJCUU0MkU3
NkRCMUM3QUY3NzYwMEUzNjE0RCAvKiBTdHlsZVVwZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHlsZVVwZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2
ZXJzYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVRyYXZlcnNhbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDMxMkFCNTI0QjMyNjU2MDA2NzgzNDkg
LyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0MzEyQUI3MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJ
bnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxl
UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVy
c2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDM0M0QyNDIz
OTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNBMDIzQTE3RUIzNzBBMDA0Q0RE
MjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODIwNCw2ICsy
ODIwNiw4IEBACiAJCUU0RkI0QjFFMjM5NTM1NkYwMDNDMzM2QSAvKiBpbnRlZ3JhdGlvbiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTQzMTJBQjUyNEIz
MjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgKi8sCisJCQkJ
RTQzMTJBQjcyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5o
ICovLAogCQkJCUU0MTgwMjU2MjNENDU0QjUwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJv
eFRyZWUuY3BwICovLAogCQkJCUU0MTgwMjUzMjNENDU0OUEwMEZGQjA3MSAvKiBMYXlvdXRJbnRl
Z3JhdGlvbkJveFRyZWUuaCAqLywKIAkJCQlFNEFCQUJERTIzNjA4OTNEMDBGQTQzNDUgLyogTGF5
b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxh
eW91dC5jcHAKaW5kZXggZDRiNDUxMmM4ZjYyLi5lYzBjYWIyM2Y5OWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlv
dXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIK
ICNpbmNsdWRlICJJbnZhbGlkYXRpb25TdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0
aW9uUGFnaW5hdGlvbi5oIgogI2luY2x1ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCkBAIC03NCwxMyAr
NzUsNyBAQCBib29sIExpbmVMYXlvdXQ6OmNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
IGZsb3csIE9wdGlvbmFsPGJvb2w+IGNvdWxkVXNlUwogICAgICAgICByZXR1cm4gU2ltcGxlTGlu
ZUxheW91dDo6Y2FuVXNlRm9yKGZsb3cpOwogICAgIH0pOwogCi0gICAgaWYgKCFwYXNzZXNTaW1w
bGVMaW5lTGF5b3V0VGVzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZsb3cu
ZnJhZ21lbnRlZEZsb3dTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRlRnJhZ21lbnRl
ZEZsb3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBwYXNzZXNTaW1wbGVMaW5lTGF5b3V0VGVzdDsKIH0KIAogdm9pZCBMaW5lTGF5b3V0Ojp1
cGRhdGVTdHlsZSgpCkBAIC0xMTEsNyArMTA2LDkgQEAgdm9pZCBMaW5lTGF5b3V0OjpsYXlvdXQo
KQogICAgIGF1dG8gdmVydGljYWxDb25zdHJhaW50cyA9IExheW91dDo6VmVydGljYWxDb25zdHJh
aW50cyB7IG1fZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCksIHsgfSB9OwogCiAgICAgaW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQubGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0
ZSwgeyBob3Jpem9udGFsQ29uc3RyYWludHMsIHZlcnRpY2FsQ29uc3RyYWludHMgfSk7CisgICAg
CiAgICAgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUuc2hyaW5rRGlzcGxheUlubGluZUNvbnRlbnQo
KTsKKwogfQogCiB2b2lkIExpbmVMYXlvdXQ6OnByZXBhcmVMYXlvdXRTdGF0ZSgpCkBAIC0xODgs
NiArMTg1LDEyIEBAIExheW91dFVuaXQgTGluZUxheW91dDo6bGFzdExpbmVCYXNlbGluZSgpIGNv
bnN0CiAgICAgcmV0dXJuIExheW91dDo6dG9MYXlvdXRVbml0KGxhc3RMaW5lQm94LnRvcCgpICsg
bGFzdExpbmVCb3guYmFzZWxpbmVPZmZzZXQoKSk7CiB9CiAKK3ZvaWQgTGluZUxheW91dDo6YWRq
dXN0Rm9yUGFnaW5hdGlvbihSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCit7CisgICAgQVNTRVJUKCZm
bG93ID09ICZtX2Zsb3cpOworICAgIGFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKG1f
aW5saW5lRm9ybWF0dGluZ1N0YXRlLmVuc3VyZURpc3BsYXlJbmxpbmVDb250ZW50KCksIGZsb3cp
OworfQorCiB2b2lkIExpbmVMYXlvdXQ6OmNvbGxlY3RPdmVyZmxvdyhSZW5kZXJCbG9ja0Zsb3cm
IGZsb3cpCiB7CiAgICAgQVNTRVJUKCZmbG93ID09ICZtX2Zsb3cpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91
dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
TGluZUxheW91dC5oCmluZGV4IDAyMmZhNDE2ODgxZS4uZTVhM2Q4MjU2MzM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
TGF5b3V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uTGluZUxheW91dC5oCkBAIC03MCw2ICs3MCw3IEBAIHB1YmxpYzoKICAgICBMYXlv
dXRVbml0IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBsYXN0TGlu
ZUJhc2VsaW5lKCkgY29uc3Q7CiAKKyAgICB2b2lkIGFkanVzdEZvclBhZ2luYXRpb24oUmVuZGVy
QmxvY2tGbG93Jik7CiAgICAgdm9pZCBjb2xsZWN0T3ZlcmZsb3coUmVuZGVyQmxvY2tGbG93Jik7
CiAKICAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVDb250ZW50KiBkaXNwbGF5SW5saW5lQ29udGVu
dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjlkZTNjMjRhNjA0YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBh
Z2luYXRpb24uY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oIgorCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNs
dWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCisjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0
aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRp
b24geworCitzdHJ1Y3QgU3RydXQgeworICAgIHVuc2lnbmVkIGxpbmVCcmVhazsKKyAgICBmbG9h
dCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgUGFnaW5hdGVkTGluZSB7CisgICAgTGF5b3V0VW5pdCB0
b3A7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcDsKKyAgICBMYXlvdXRVbml0IGhlaWdodDsK
K307Cit1c2luZyBQYWdpbmF0ZWRMaW5lcyA9IFZlY3RvcjxQYWdpbmF0ZWRMaW5lLCAyMD47CisK
K3N0YXRpYyBQYWdpbmF0ZWRMaW5lIGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgRGlzcGxheTo6SW5saW5lQ29udGVudDo6TGlu
ZUJveGVzJiBsaW5lQm94ZXMsIHVuc2lnbmVkIGxpbmVJbmRleCwgVmVjdG9yPFN0cnV0PiYgc3Ry
dXRzKQoreworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCk7CisgICAgZm9yIChhdXRvJiBzdHJ1dCA6IHN0cnV0cykgeworICAgICAgICBpZiAoc3Ry
dXQubGluZUJyZWFrID4gbGluZUluZGV4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG9m
ZnNldCArPSBzdHJ1dC5vZmZzZXQ7CisgICAgfQorICAgIGF1dG8gcmVjdCA9IExheW91dFJlY3Qo
bGluZUJveGVzW2xpbmVJbmRleF0ucmVjdCgpKTsKKyAgICBhdXRvIG92ZXJmbG93UmVjdCA9IExh
eW91dFJlY3QobGluZUJveGVzW2xpbmVJbmRleF0uaW5rT3ZlcmZsb3coKSk7CisgICAgcmV0dXJu
IHsgcmVjdC55KCkgKyBvZmZzZXQsIG92ZXJmbG93UmVjdC55KCkgKyBvZmZzZXQsIHJlY3QuaGVp
Z2h0KCkgfTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVMaW5lQnJlYWtJbmRleCh1bnNp
Z25lZCBicmVha0NhbmRpZGF0ZSwgdW5zaWduZWQgbGluZUNvdW50LCBpbnQgb3JwaGFuc05lZWRl
ZCwgaW50IHdpZG93c05lZWRlZCwKKyAgICBjb25zdCBWZWN0b3I8U3RydXQ+JiBzdHJ1dHMpCit7
CisgICAgLy8gRmlyc3QgbGluZSBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgcGFnZS4KKyAgICBp
ZiAoIWJyZWFrQ2FuZGlkYXRlKQorICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7CisgICAg
CisgICAgaW50IHdpZG93c09uVGhlTmV4dFBhZ2UgPSBsaW5lQ291bnQgLSBicmVha0NhbmRpZGF0
ZTsKKyAgICBpZiAod2lkb3dzTmVlZGVkIDw9IHdpZG93c09uVGhlTmV4dFBhZ2UpCisgICAgICAg
IHJldHVybiBicmVha0NhbmRpZGF0ZTsKKyAgICAvLyBPbmx5IGJyZWFrIGFmdGVyIHRoZSBmaXJz
dCBsaW5lIHdpdGggd2lkb3dzLgorICAgIGF1dG8gbGluZUJyZWFrID0gc3RkOjptYXg8aW50Pihs
aW5lQ291bnQgLSB3aWRvd3NOZWVkZWQsIDEpOworICAgIGlmIChvcnBoYW5zTmVlZGVkID4gbGlu
ZUJyZWFrKQorICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7CisgICAgLy8gQnJlYWsgb24g
Y3VycmVudCBwYWdlIG9ubHkuCisgICAgaWYgKHN0cnV0cy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBsaW5lQnJlYWs7CisgICAgQVNTRVJUKHN0cnV0cy5sYXN0KCkubGluZUJyZWFrICsgMSA8
IGxpbmVDb3VudCk7CisgICAgcmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVkPihzdHJ1dHMubGFzdCgp
LmxpbmVCcmVhayArIDEsIGxpbmVCcmVhayk7Cit9CisKK3N0YXRpYyBMYXlvdXRVbml0IGNvbXB1
dGVPZmZzZXRBZnRlckxpbmVCcmVhayhMYXlvdXRVbml0IGxpbmVCcmVha1Bvc2l0aW9uLCBib29s
IGlzRmlyc3RMaW5lLCBib29sIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYgZmxvdykKK3sKKyAgICAvLyBObyBvZmZzZXQgZm9yIHRvcCBvZiB0aGUgcGFnZSBs
aW5lcyB1bmxlc3Mgd2lkb3dzIHB1c2hlZCB0aGUgbGluZSBicmVhay4KKyAgICBMYXlvdXRVbml0
IG9mZnNldCA9IGlzRmlyc3RMaW5lID8gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiAw
X2x1OworICAgIGlmIChhdFRoZVRvcE9mQ29sdW1uT3JQYWdlKQorICAgICAgICByZXR1cm4gb2Zm
c2V0OworICAgIHJldHVybiBvZmZzZXQgKyBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0
Rm9yT2Zmc2V0KGxpbmVCcmVha1Bvc2l0aW9uLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdl
Qm91bmRhcnkpOworfQorCitzdGF0aWMgdm9pZCBzZXRQYWdlQnJlYWtGb3JMaW5lKHVuc2lnbmVk
IGxpbmVCcmVha0luZGV4LCBQYWdpbmF0ZWRMaW5lcyYgbGluZXMsIFJlbmRlckJsb2NrRmxvdyYg
ZmxvdywgVmVjdG9yPFN0cnV0PiYgc3RydXRzLAorICAgIGJvb2wgYXRUaGVUb3BPZkNvbHVtbk9y
UGFnZSwgYm9vbCBsaW5lRG9lc05vdEZpdCkKK3sKKyAgICBhdXRvIGxpbmUgPSBsaW5lcy5hdChs
aW5lQnJlYWtJbmRleCk7CisgICAgYXV0byByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gZmxvdy5w
YWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChsaW5lLnRvcCwgUmVuZGVyQmxvY2tG
bG93OjpFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKKyAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUo
KTsKKyAgICBhdXRvIGZpcnN0TGluZURvZXNOb3RGaXQgPSAhbGluZUJyZWFrSW5kZXggJiYgbGlu
ZS5oZWlnaHQgPCBmbG93LnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wKTsKKyAg
ICBhdXRvIG1vdmVPcnBoYW5Ub05leHRDb2x1bW4gPSBsaW5lRG9lc05vdEZpdCAmJiAhc3R5bGUu
aGFzQXV0b09ycGhhbnMoKSAmJiBzdHlsZS5vcnBoYW5zKCkgPiAoc2hvcnQpbGluZUJyZWFrSW5k
ZXg7CisgICAgaWYgKGZpcnN0TGluZURvZXNOb3RGaXQgfHwgbW92ZU9ycGhhblRvTmV4dENvbHVt
bikgeworICAgICAgICBhdXRvIGZpcnN0TGluZSA9IGxpbmVzLmZpcnN0KCk7CisgICAgICAgIGF1
dG8gZmlyc3RMaW5lVXBwZXJPdmVyaGFuZyA9IHN0ZDo6bWF4KExheW91dFVuaXQoLWZpcnN0TGlu
ZS5vdmVyZmxvd1RvcCksIDBfbHUpOworICAgICAgICBmbG93LnNldFBhZ2luYXRpb25TdHJ1dChs
aW5lLnRvcCArIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgKyBmaXJzdExpbmVVcHBlck92ZXJoYW5n
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYXRUaGVUb3BPZkNvbHVtbk9yUGFn
ZSkKKyAgICAgICAgZmxvdy5zZXRQYWdlQnJlYWsobGluZS50b3AsIGxpbmUuaGVpZ2h0KTsKKyAg
ICBlbHNlCisgICAgICAgIGZsb3cuc2V0UGFnZUJyZWFrKGxpbmUudG9wLCBsaW5lLmhlaWdodCAt
IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQpOworICAgIHN0cnV0cy5hcHBlbmQoeyBsaW5lQnJlYWtJ
bmRleCwgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJyZWFrKGxpbmVzW2xpbmVCcmVha0luZGV4XS50
b3AsICFsaW5lQnJlYWtJbmRleCwgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgZmxvdykgfSk7Cit9
CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KFJlbmRlckJsb2NrRmxvdyYg
ZmxvdywgY29uc3QgRGlzcGxheTo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgdW5zaWdu
ZWQgbGluZUNvdW50KQoreworICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1
dG8gd2lkb3dzID0gc3R5bGUuaGFzQXV0b1dpZG93cygpID8gMSA6IHN0ZDo6bWF4PGludD4oc3R5
bGUud2lkb3dzKCksIDEpOworICAgIGF1dG8gb3JwaGFucyA9IHN0eWxlLmhhc0F1dG9PcnBoYW5z
KCkgPyAxIDogc3RkOjptYXg8aW50PihzdHlsZS5vcnBoYW5zKCksIDEpOworICAgIGF1dG8gbWlu
aW11bUxpbmVDb3VudCA9IHN0ZDo6bWluPHVuc2lnbmVkPihzdGQ6Om1heCh3aWRvd3MsIG9ycGhh
bnMpLCBsaW5lQ291bnQpOworICAgIGZsb3cudXBkYXRlTWluaW11bVBhZ2VIZWlnaHQoMCwgTGF5
b3V0VW5pdChpbmxpbmVDb250ZW50LmxpbmVCb3hlc1ttaW5pbXVtTGluZUNvdW50IC0gMV0uYm90
dG9tKCkpKTsKK30KKwordm9pZCBhZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbihEaXNw
bGF5OjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cp
Cit7CisgICAgVmVjdG9yPFN0cnV0PiBzdHJ1dHM7CisgICAgYXV0byBsaW5lQ291bnQgPSBpbmxp
bmVDb250ZW50LmxpbmVCb3hlcy5zaXplKCk7CisgICAgdXBkYXRlTWluaW11bVBhZ2VIZWlnaHQo
ZmxvdywgaW5saW5lQ29udGVudCwgbGluZUNvdW50KTsKKyAgICAvLyBGaXJzdCBwYXNzIHdpdGgg
bm8gcGFnaW5hdGlvbiBvZmZzZXQ/CisgICAgaWYgKCFmbG93LnBhZ2VMb2dpY2FsSGVpZ2h0Rm9y
T2Zmc2V0KDApKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHdpZG93cyA9IGZsb3cuc3R5
bGUoKS5oYXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8aW50PihmbG93LnN0eWxlKCkud2lk
b3dzKCksIDEpOworICAgIGF1dG8gb3JwaGFucyA9IGZsb3cuc3R5bGUoKS5oYXNBdXRvT3JwaGFu
cygpID8gMSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgpLm9ycGhhbnMoKSwgMSk7CisgICAg
UGFnaW5hdGVkTGluZXMgbGluZXM7CisgICAgZm9yICh1bnNpZ25lZCBsaW5lSW5kZXggPSAwOyBs
aW5lSW5kZXggPCBsaW5lQ291bnQ7ICsrbGluZUluZGV4KSB7CisgICAgICAgIGF1dG8gbGluZSA9
IGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGlubGluZUNvbnRlbnQu
bGluZUJveGVzLCBsaW5lSW5kZXgsIHN0cnV0cyk7CisgICAgICAgIGxpbmVzLmFwcGVuZChsaW5l
KTsKKyAgICAgICAgYXV0byByZW1haW5pbmdIZWlnaHQgPSBmbG93LnBhZ2VSZW1haW5pbmdMb2dp
Y2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdl
Qm91bmRhcnkpOworICAgICAgICBhdXRvIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgPSBmbG93LnBh
Z2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wKSA9PSByZW1haW5pbmdIZWlnaHQ7Cisg
ICAgICAgIGF1dG8gbGluZURvZXNOb3RGaXQgPSBsaW5lLmhlaWdodCA+IHJlbWFpbmluZ0hlaWdo
dDsKKyAgICAgICAgaWYgKGxpbmVEb2VzTm90Rml0IHx8IChhdFRoZVRvcE9mQ29sdW1uT3JQYWdl
ICYmIGxpbmVJbmRleCkpIHsKKyAgICAgICAgICAgIGF1dG8gbGluZUJyZWFrSW5kZXggPSBjb21w
dXRlTGluZUJyZWFrSW5kZXgobGluZUluZGV4LCBsaW5lQ291bnQsIG9ycGhhbnMsIHdpZG93cywg
c3RydXRzKTsKKyAgICAgICAgICAgIC8vIEFyZSB3ZSBzdGlsbCBhdCB0aGUgdG9wIG9mIHRoZSBj
b2x1bW4vcGFnZT8KKyAgICAgICAgICAgIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgPSBhdFRoZVRv
cE9mQ29sdW1uT3JQYWdlID8gbGluZUluZGV4ID09IGxpbmVCcmVha0luZGV4IDogZmFsc2U7Cisg
ICAgICAgICAgICBzZXRQYWdlQnJlYWtGb3JMaW5lKGxpbmVCcmVha0luZGV4LCBsaW5lcywgZmxv
dywgc3RydXRzLCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBsaW5lRG9lc05vdEZpdCk7CisgICAg
ICAgICAgICAvLyBSZWNvbXB1dGUgbGluZSBwb3NpdGlvbnMgdGhhdCB3ZSBhbHJlYWR5IHZpc2l0
ZWQgYnV0IHdpZG93IGJyZWFrIHB1c2hlZCB0aGVtIHRvIGEgbmV3IHBhZ2UuCisgICAgICAgICAg
ICBmb3IgKGF1dG8gaSA9IGxpbmVCcmVha0luZGV4OyBpIDwgbGluZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXQoaSkgPSBjb21wdXRlTGluZVRvcEFuZEJvdHRvbVdpdGhP
dmVyZmxvdyhmbG93LCBpbmxpbmVDb250ZW50LmxpbmVCb3hlcywgaSwgc3RydXRzKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgc3RydXQgOiBzdHJ1dHMpIHsKKyAgICAgICAg
Zm9yIChhdXRvIGxpbmVJbmRleCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUluZGV4IDwgbGluZUNv
dW50OyArK2xpbmVJbmRleCkKKyAgICAgICAgICAgIGlubGluZUNvbnRlbnQubGluZUJveGVzW2xp
bmVJbmRleF0ubW92ZVZlcnRpY2FsbHkoc3RydXQub2Zmc2V0KTsKKyAgICAgICAgZm9yIChhdXRv
JiBydW4gOiBpbmxpbmVDb250ZW50LnJ1bnMpIHsKKyAgICAgICAgICAgIGlmIChydW4ubGluZUlu
ZGV4KCkgPj0gc3RydXQubGluZUJyZWFrKQorICAgICAgICAgICAgICAgIHJ1bi5tb3ZlVmVydGlj
YWxseShzdHJ1dC5vZmZzZXQpOworICAgICAgICB9CisgICAgfQorICAgIAorfQorCit9Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25QYWdpbmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi5lMjllNDEwOTdkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgKQEAgLTAs
MCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxh
eUlubGluZUNvbnRlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJC
bG9ja0Zsb3c7CisKK25hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CisgICAgCit2b2lkIGFk
anVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKERpc3BsYXk6OklubGluZUNvbnRlbnQmLCBS
ZW5kZXJCbG9ja0Zsb3cmKTsKKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcAppbmRleCBlMjEzYWFjNzFhOTQuLjk4NTE5NWJhODU4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTM3NDQsNiAr
Mzc0NCw5IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMRkNMaW5lcyhib29sLCBMYXlv
dXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0CiAKICAgICBsYXlvdXRGb3JtYXR0aW5n
Q29udGV4dExpbmVMYXlvdXQubGF5b3V0KCk7CiAKKyAgICBpZiAodmlldygpLmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlv
dXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKSkKKyAgICAgICAgbGF5b3V0
Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmFkanVzdEZvclBhZ2luYXRpb24oKnRoaXMpOwor
CiAgICAgYXV0byBjb250ZW50SGVpZ2h0ID0gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0LmNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiAgICAgYXV0byBjb250ZW50Qm94VG9wID0gYm9y
ZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogICAgIGF1dG8gY29udGVudEJveEJvdHRvbSA9IGNvbnRl
bnRCb3hUb3AgKyBjb250ZW50SGVpZ2h0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409370</attachid>
            <date>2020-09-22 09:53:13 -0700</date>
            <delta_ts>2020-09-22 09:58:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>lfc-pagination-2.patch</filename>
            <type>text/plain</type>
            <size>22754</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzA4NDcxNGYzZmEuLjRhNWVhNDJjNDljZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQxIEBACisyMDIwLTA5LTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQmFzaWMgcGFnaW5hdGlvbiBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU0NTEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY3NDgyNzIxPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnQgdGhlIFNpbXBsZSBMaW5lIExheW91dCBw
YWdpbmF0aW9uIGNvZGUgdG8gTEZDIGludGVncmF0aW9uIGxheWVyLgorICAgICAgICBQYWdpbmF0
aW9uIGlzIHRoZSBsYXN0IHJlbWFpbmluZyB1c2Ugb2YgU0xMIHNvIHRoaXMgcGF0Y2ggdHVybnMg
aXQgaW50byBkZWFkIGNvZGUuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlJbmxpbmVDb250ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpJbmxpbmVDb250ZW50OjpjcmVhdGUpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y29udGVudExvZ2ljYWxIZWlnaHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmFkanVz
dEZvclBhZ2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246Okxp
bmVMYXlvdXQ6OmVuc3VyZURpc3BsYXlJbmxpbmVDb250ZW50KToKKworICAgICAgICBUaGlzIGlz
IGZhaXJseSBkaXJlY3QgY29weSBvZiB0aGUgU0xMIGNvZGUuIEl0IGlzIG5vdCBmdXR1cmUgcHJv
b2Ygb3Igb3RoZXJ3aXNlIGdyZWF0IGJ1dCBpdCBzZXJ2ZXMgdGhlIGpvYiBmb3Igbm93LgorCisg
ICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5o
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmlzUGFn
aW5hdGVkIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25QYWdpbmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6Y29tcHV0ZUxpbmVUb3BBbmRCb3R0b21XaXRoT3ZlcmZsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNvbXB1dGVMaW5lQnJlYWtJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y29tcHV0ZU9mZnNldEFmdGVyTGluZUJy
ZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpzZXRQYWdlQnJlYWtG
b3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjp1cGRhdGVNaW5p
bXVtUGFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6bWFr
ZUFkanVzdGVkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6
YWRqdXN0TGluZVBvc2l0aW9uc0ZvclBhZ2luYXRpb24pOgorICAgICAgICAqIGxheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlJbmxpbmVDb250ZW50LmguCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9ja0Zsb3c6OmxheW91dExGQ0xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrRmxvdzo6ZW5zdXJlTGluZUJveGVzKToKKwogMjAyMC0wOS0yMSAgUGhpbGlwcGUgTm9y
bWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gbWVkaWEv
bWVkaWEtY2FuLXBsYXktbXAzLmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI3NTYzZTVm
Yjc3Li5iNzFkZjdlMmQwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDU2LDYgKzE0NTYsNyBAQCBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25Cb3hUcmVlLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
TGluZUxheW91dC5jcHAKK2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2lu
YXRpb24uY3BwCiBsYXlvdXQvaW52YWxpZGF0aW9uL0ludmFsaWRhdGlvbkNvbnRleHQuY3BwCiBs
YXlvdXQvaW52YWxpZGF0aW9uL0ludmFsaWRhdGlvblN0YXRlLmNwcAogbGF5b3V0L2xheW91dHRy
ZWUvTGF5b3V0Qm94LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDNkY2M1ZTcxYjhiMS4uODk5NWE1YTM0MjFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NTgxNiw2ICsxNTgxNiw4IEBACiAJCUU0MkU3NkRCMUM3QUY3NzYwMEUzNjE0RCAvKiBTdHlsZVVw
ZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVVwZGF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyog
Tm9kZVRyYXZlcnNhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBO
b2RlVHJhdmVyc2FsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzMTA1QkEx
Njc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTm9kZVRyYXZlcnNhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDMxMkFCNTI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0
aW9uUGFnaW5hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0MzEyQUI3
MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAv
KiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRy
YXZlcnNhbENvbXBsZXhQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExp
bmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDNBMDIzQTE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yODQxNSw2ICsyODQxNyw4IEBACiAJCUU0RkI0QjFFMjM5NTM1NkYw
MDNDMzM2QSAvKiBpbnRlZ3JhdGlvbiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJRTQzMTJBQjUyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0
aW9uUGFnaW5hdGlvbi5jcHAgKi8sCisJCQkJRTQzMTJBQjcyNEIzMjY1NjAwNjc4MzQ5IC8qIExh
eW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oICovLAogCQkJCUU0MTgwMjU2MjNENDU0QjUwMEZG
QjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuY3BwICovLAogCQkJCUU0MTgwMjUzMjNE
NDU0OUEwMEZGQjA3MSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCAqLywKIAkJCQlFNEFC
QUJERTIzNjA4OTNEMDBGQTQzNDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5
SW5saW5lQ29udGVudC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3Bs
YXlJbmxpbmVDb250ZW50LmgKaW5kZXggYTliNDUwYjkzOTNlLi43Yzk2NzQ0ZWNkNjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5SW5saW5lQ29u
dGVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5SW5s
aW5lQ29udGVudC5oCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBEaXNwbGF5IHsKIAogc3RydWN0IElubGluZUNvbnRlbnQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJbmxpbmVDb250ZW50PiB7CisgICAgc3RhdGljIFJlZjxJbmxpbmVDb250ZW50PiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IElubGluZUNvbnRlbnQpOyB9CiAgICAgfklubGluZUNv
bnRlbnQoKTsKIAogICAgIHVzaW5nIFJ1bnMgPSBWZWN0b3I8UnVuLCA0PjsKQEAgLTQ3LDYgKzQ4
LDkgQEAgc3RydWN0IElubGluZUNvbnRlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbmxpbmVDb250
ZW50PiB7CiAgICAgY29uc3QgTGluZSYgbGluZUZvclJ1bihjb25zdCBSdW4mIHJ1bikgY29uc3Qg
eyByZXR1cm4gbGluZXNbcnVuLmxpbmVJbmRleCgpXTsgfQogICAgIFdURjo6SXRlcmF0b3JSYW5n
ZTxjb25zdCBSdW4qPiBydW5zRm9yUmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOworCitwcml2YXRlOgorICAgIElubGluZUNvbnRlbnQoKSA9IGRl
ZmF1bHQ7CiB9OwogCiBpbmxpbmUgdm9pZCBJbmxpbmVDb250ZW50OjpzaHJpbmtUb0ZpdCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25MaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCmluZGV4IDRkNWRkYjAxNzlkNC4uMjE5ODUx
ODUwOGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkludmFs
aWRhdGlvblN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNsdWRl
ICJMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCIKICNpbmNsdWRlICJMYXlvdXRUcmVlQnVp
bGRlci5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxv
dy5oIgpAQCAtNzQsMTMgKzc1LDcgQEAgYm9vbCBMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbG93LCBPcHRpb25hbDxib29sPiBjb3VsZFVzZVMKICAgICAgICAg
cmV0dXJuIFNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvcihmbG93KTsKICAgICB9KTsKIAotICAg
IGlmICghcGFzc2VzU2ltcGxlTGluZUxheW91dFRlc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChmbG93LmZyYWdtZW50ZWRGbG93U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6Ok5v
dEluc2lkZUZyYWdtZW50ZWRGbG93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gcGFzc2VzU2ltcGxlTGluZUxheW91dFRlc3Q7CiB9CiAKIGJv
b2wgTGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGZsb3csIFN0eWxlRGlmZmVyZW5jZSBkaWZmKQpAQCAtMjI1LDYgKzIyMCw5IEBAIHZv
aWQgTGluZUxheW91dDo6cHJlcGFyZUZsb2F0aW5nU3RhdGUoKQogCiBMYXlvdXRVbml0IExpbmVM
YXlvdXQ6OmNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKKyAgICBpZiAobV9wYWdpbmF0
ZWRIZWlnaHQpCisgICAgICAgIHJldHVybiAqbV9wYWdpbmF0ZWRIZWlnaHQ7CisKICAgICBhdXRv
JiBsaW5lcyA9IG1faW5saW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVzKCk7CiAgICAgcmV0dXJuIExh
eW91dFVuaXQgeyBsaW5lcy5sYXN0KCkubG9naWNhbEJvdHRvbSgpIC0gbGluZXMuZmlyc3QoKS5s
b2dpY2FsVG9wKCkgfTsKIH0KQEAgLTI2Myw2ICsyNjEsMjEgQEAgTGF5b3V0VW5pdCBMaW5lTGF5
b3V0OjpsYXN0TGluZUJhc2VsaW5lKCkgY29uc3QKICAgICByZXR1cm4gTGF5b3V0Ojp0b0xheW91
dFVuaXQobGFzdExpbmUubG9naWNhbFRvcCgpICsgbGFzdExpbmUuYmFzZWxpbmUoKSk7CiB9CiAK
K3ZvaWQgTGluZUxheW91dDo6YWRqdXN0Rm9yUGFnaW5hdGlvbihSZW5kZXJCbG9ja0Zsb3cmIGZs
b3cpCit7CisgICAgQVNTRVJUKCZmbG93ID09ICZtX2Zsb3cpOworICAgIGF1dG8gcGFnaW5lZElu
bGluZUNvbnRlbnQgPSBhZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbigqbV9kaXNwbGF5
SW5saW5lQ29udGVudCwgZmxvdyk7CisgICAgaWYgKHBhZ2luZWRJbmxpbmVDb250ZW50LnB0cigp
ID09IG1fZGlzcGxheUlubGluZUNvbnRlbnQpIHsKKyAgICAgICAgbV9wYWdpbmF0ZWRIZWlnaHQg
PSB7IH07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBsaW5lcyA9IHBhZ2lu
ZWRJbmxpbmVDb250ZW50LT5saW5lczsKKyAgICBtX3BhZ2luYXRlZEhlaWdodCA9IExheW91dFVu
aXQgeyBsaW5lcy5sYXN0KCkucmVjdCgpLm1heFkoKSAtIGxpbmVzLmZpcnN0KCkucmVjdCgpLnko
KSB9OworCisgICAgbV9kaXNwbGF5SW5saW5lQ29udGVudCA9IFdURk1vdmUocGFnaW5lZElubGlu
ZUNvbnRlbnQpOworfQorCiB2b2lkIExpbmVMYXlvdXQ6OmNvbGxlY3RPdmVyZmxvdyhSZW5kZXJC
bG9ja0Zsb3cmIGZsb3cpCiB7CiAgICAgQVNTRVJUKCZmbG93ID09ICZtX2Zsb3cpOwpAQCAtMjc3
LDcgKzI5MCw3IEBAIHZvaWQgTGluZUxheW91dDo6Y29sbGVjdE92ZXJmbG93KFJlbmRlckJsb2Nr
RmxvdyYgZmxvdykKIERpc3BsYXk6OklubGluZUNvbnRlbnQmIExpbmVMYXlvdXQ6OmVuc3VyZURp
c3BsYXlJbmxpbmVDb250ZW50KCkKIHsKICAgICBpZiAoIW1fZGlzcGxheUlubGluZUNvbnRlbnQp
Ci0gICAgICAgIG1fZGlzcGxheUlubGluZUNvbnRlbnQgPSBhZG9wdFJlZigqbmV3IERpc3BsYXk6
OklubGluZUNvbnRlbnQpOworICAgICAgICBtX2Rpc3BsYXlJbmxpbmVDb250ZW50ID0gRGlzcGxh
eTo6SW5saW5lQ29udGVudDo6Y3JlYXRlKCk7CiAgICAgcmV0dXJuICptX2Rpc3BsYXlJbmxpbmVD
b250ZW50OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKaW5kZXggOTIwNmEyYTQ2
YzM5Li41MTNlZDRkN2ZjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKQEAgLTY3
LDkgKzY3LDExIEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGZpcnN0TGluZUJhc2VsaW5lKCkg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCBsYXN0TGluZUJhc2VsaW5lKCkgY29uc3Q7CiAKKyAgICB2
b2lkIGFkanVzdEZvclBhZ2luYXRpb24oUmVuZGVyQmxvY2tGbG93Jik7CiAgICAgdm9pZCBjb2xs
ZWN0T3ZlcmZsb3coUmVuZGVyQmxvY2tGbG93Jik7CiAKICAgICBjb25zdCBEaXNwbGF5OjpJbmxp
bmVDb250ZW50KiBkaXNwbGF5SW5saW5lQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxh
eUlubGluZUNvbnRlbnQuZ2V0KCk7IH0KKyAgICBib29sIGlzUGFnaW5hdGVkKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3BhZ2luYXRlZEhlaWdodDsgfQogCiAgICAgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwogICAgIGJvb2wgaGl0VGVzdChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwpA
QCAtOTUsNiArOTcsNyBAQCBwcml2YXRlOgogICAgIExheW91dDo6TGF5b3V0U3RhdGUgbV9sYXlv
dXRTdGF0ZTsKICAgICBMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdTdGF0ZSYgbV9pbmxpbmVGb3Jt
YXR0aW5nU3RhdGU7CiAgICAgUmVmUHRyPERpc3BsYXk6OklubGluZUNvbnRlbnQ+IG1fZGlzcGxh
eUlubGluZUNvbnRlbnQ7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbV9wYWdpbmF0ZWRIZWln
aHQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODQyMDhlY2IxYjQ4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
UGFnaW5hdGlvbi5jcHAKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCIK
KworI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93Lmgi
CisjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlv
dXRGdW5jdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dElu
dGVncmF0aW9uIHsKKworc3RydWN0IFN0cnV0IHsKKyAgICB1bnNpZ25lZCBsaW5lQnJlYWs7Cisg
ICAgZmxvYXQgb2Zmc2V0OworfTsKKworc3RydWN0IFBhZ2luYXRlZExpbmUgeworICAgIExheW91
dFVuaXQgdG9wOworICAgIExheW91dFVuaXQgaGVpZ2h0OworfTsKK3VzaW5nIFBhZ2luYXRlZExp
bmVzID0gVmVjdG9yPFBhZ2luYXRlZExpbmUsIDIwPjsKKworc3RhdGljIFBhZ2luYXRlZExpbmUg
Y29tcHV0ZUxpbmVUb3BBbmRCb3R0b21XaXRoT3ZlcmZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93
JiwgRGlzcGxheTo6SW5saW5lQ29udGVudDo6TGluZXMmIGxpbmVzLCB1bnNpZ25lZCBsaW5lSW5k
ZXgsIFZlY3RvcjxTdHJ1dD4mIHN0cnV0cykKK3sKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IDA7
CisgICAgZm9yIChhdXRvJiBzdHJ1dCA6IHN0cnV0cykgeworICAgICAgICBpZiAoc3RydXQubGlu
ZUJyZWFrID4gbGluZUluZGV4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG9mZnNldCAr
PSBzdHJ1dC5vZmZzZXQ7CisgICAgfQorICAgIGF1dG8gb3ZlcmZsb3dSZWN0ID0gTGF5b3V0UmVj
dChsaW5lc1tsaW5lSW5kZXhdLmlua092ZXJmbG93KCkpOworICAgIHJldHVybiB7IG92ZXJmbG93
UmVjdC55KCkgKyBvZmZzZXQsIG92ZXJmbG93UmVjdC5oZWlnaHQoKSB9OworfQorCitzdGF0aWMg
dW5zaWduZWQgY29tcHV0ZUxpbmVCcmVha0luZGV4KHVuc2lnbmVkIGJyZWFrQ2FuZGlkYXRlLCB1
bnNpZ25lZCBsaW5lQ291bnQsIGludCBvcnBoYW5zTmVlZGVkLCBpbnQgd2lkb3dzTmVlZGVkLAor
ICAgIGNvbnN0IFZlY3RvcjxTdHJ1dD4mIHN0cnV0cykKK3sKKyAgICAvLyBGaXJzdCBsaW5lIGRv
ZXMgbm90IGZpdCB0aGUgY3VycmVudCBwYWdlLgorICAgIGlmICghYnJlYWtDYW5kaWRhdGUpCisg
ICAgICAgIHJldHVybiBicmVha0NhbmRpZGF0ZTsKKyAgICAKKyAgICBpbnQgd2lkb3dzT25UaGVO
ZXh0UGFnZSA9IGxpbmVDb3VudCAtIGJyZWFrQ2FuZGlkYXRlOworICAgIGlmICh3aWRvd3NOZWVk
ZWQgPD0gd2lkb3dzT25UaGVOZXh0UGFnZSkKKyAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlkYXRl
OworICAgIC8vIE9ubHkgYnJlYWsgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgd2l0aCB3aWRvd3MuCisg
ICAgYXV0byBsaW5lQnJlYWsgPSBzdGQ6Om1heDxpbnQ+KGxpbmVDb3VudCAtIHdpZG93c05lZWRl
ZCwgMSk7CisgICAgaWYgKG9ycGhhbnNOZWVkZWQgPiBsaW5lQnJlYWspCisgICAgICAgIHJldHVy
biBicmVha0NhbmRpZGF0ZTsKKyAgICAvLyBCcmVhayBvbiBjdXJyZW50IHBhZ2Ugb25seS4KKyAg
ICBpZiAoc3RydXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGxpbmVCcmVhazsKKyAgICBB
U1NFUlQoc3RydXRzLmxhc3QoKS5saW5lQnJlYWsgKyAxIDwgbGluZUNvdW50KTsKKyAgICByZXR1
cm4gc3RkOjptYXg8dW5zaWduZWQ+KHN0cnV0cy5sYXN0KCkubGluZUJyZWFrICsgMSwgbGluZUJy
ZWFrKTsKK30KKworc3RhdGljIExheW91dFVuaXQgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJyZWFr
KExheW91dFVuaXQgbGluZUJyZWFrUG9zaXRpb24sIGJvb2wgaXNGaXJzdExpbmUsIGJvb2wgYXRU
aGVUb3BPZkNvbHVtbk9yUGFnZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQoreworICAg
IC8vIE5vIG9mZnNldCBmb3IgdG9wIG9mIHRoZSBwYWdlIGxpbmVzIHVubGVzcyB3aWRvd3MgcHVz
aGVkIHRoZSBsaW5lIGJyZWFrLgorICAgIExheW91dFVuaXQgb2Zmc2V0ID0gaXNGaXJzdExpbmUg
PyBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSA6IDBfbHU7CisgICAgaWYgKGF0VGhlVG9w
T2ZDb2x1bW5PclBhZ2UpCisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgcmV0dXJuIG9mZnNl
dCArIGZsb3cucGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZUJyZWFrUG9z
aXRpb24sIFJlbmRlckJsb2NrRmxvdzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7Cit9CisKK3N0YXRp
YyB2b2lkIHNldFBhZ2VCcmVha0ZvckxpbmUodW5zaWduZWQgbGluZUJyZWFrSW5kZXgsIFBhZ2lu
YXRlZExpbmVzJiBsaW5lcywgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBWZWN0b3I8U3RydXQ+JiBz
dHJ1dHMsCisgICAgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBib29sIGxpbmVEb2VzTm90
Rml0KQoreworICAgIGF1dG8gbGluZSA9IGxpbmVzLmF0KGxpbmVCcmVha0luZGV4KTsKKyAgICBh
dXRvIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVp
Z2h0Rm9yT2Zmc2V0KGxpbmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91bmRh
cnkpOworICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8gZmlyc3RMaW5l
RG9lc05vdEZpdCA9ICFsaW5lQnJlYWtJbmRleCAmJiBsaW5lLmhlaWdodCA8IGZsb3cucGFnZUxv
Z2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApOworICAgIGF1dG8gbW92ZU9ycGhhblRvTmV4
dENvbHVtbiA9IGxpbmVEb2VzTm90Rml0ICYmICFzdHlsZS5oYXNBdXRvT3JwaGFucygpICYmIHN0
eWxlLm9ycGhhbnMoKSA+IChzaG9ydClsaW5lQnJlYWtJbmRleDsKKyAgICBpZiAoZmlyc3RMaW5l
RG9lc05vdEZpdCB8fCBtb3ZlT3JwaGFuVG9OZXh0Q29sdW1uKSB7CisgICAgICAgIGF1dG8gZmly
c3RMaW5lID0gbGluZXMuZmlyc3QoKTsKKyAgICAgICAgYXV0byBmaXJzdExpbmVVcHBlck92ZXJo
YW5nID0gc3RkOjptYXgoTGF5b3V0VW5pdCgtZmlyc3RMaW5lLnRvcCksIDBfbHUpOworICAgICAg
ICBmbG93LnNldFBhZ2luYXRpb25TdHJ1dChsaW5lLnRvcCArIHJlbWFpbmluZ0xvZ2ljYWxIZWln
aHQgKyBmaXJzdExpbmVVcHBlck92ZXJoYW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSkKKyAgICAgICAgZmxvdy5zZXRQYWdlQnJlYWso
bGluZS50b3AsIGxpbmUuaGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGZsb3cuc2V0UGFnZUJy
ZWFrKGxpbmUudG9wLCBsaW5lLmhlaWdodCAtIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQpOworICAg
IHN0cnV0cy5hcHBlbmQoeyBsaW5lQnJlYWtJbmRleCwgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJy
ZWFrKGxpbmVzW2xpbmVCcmVha0luZGV4XS50b3AsICFsaW5lQnJlYWtJbmRleCwgYXRUaGVUb3BP
ZkNvbHVtbk9yUGFnZSwgZmxvdykgfSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU1pbmltdW1Q
YWdlSGVpZ2h0KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgRGlzcGxheTo6SW5saW5lQ29u
dGVudCYgaW5saW5lQ29udGVudCwgdW5zaWduZWQgbGluZUNvdW50KQoreworICAgIGF1dG8mIHN0
eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8gd2lkb3dzID0gc3R5bGUuaGFzQXV0b1dpZG93
cygpID8gMSA6IHN0ZDo6bWF4PGludD4oc3R5bGUud2lkb3dzKCksIDEpOworICAgIGF1dG8gb3Jw
aGFucyA9IHN0eWxlLmhhc0F1dG9PcnBoYW5zKCkgPyAxIDogc3RkOjptYXg8aW50PihzdHlsZS5v
cnBoYW5zKCksIDEpOworICAgIGF1dG8gbWluaW11bUxpbmVDb3VudCA9IHN0ZDo6bWluPHVuc2ln
bmVkPihzdGQ6Om1heCh3aWRvd3MsIG9ycGhhbnMpLCBsaW5lQ291bnQpOworICAgIGZsb3cudXBk
YXRlTWluaW11bVBhZ2VIZWlnaHQoMCwgTGF5b3V0VW5pdChpbmxpbmVDb250ZW50LmxpbmVzW21p
bmltdW1MaW5lQ291bnQgLSAxXS5yZWN0KCkubWF4WSgpKSk7Cit9CisKK3N0YXRpYyBSZWY8RGlz
cGxheTo6SW5saW5lQ29udGVudD4gbWFrZUFkanVzdGVkQ29udGVudChjb25zdCBEaXNwbGF5OjpJ
bmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBWZWN0b3I8ZmxvYXQ+IGFkanVzdG1lbnRzKQor
eworICAgIGF1dG8gbW92ZVZlcnRpY2FsbHkgPSBbXShGbG9hdFJlY3QgcmVjdCwgZmxvYXQgb2Zm
c2V0KSB7CisgICAgICAgIHJlY3QubW92ZShGbG9hdFNpemUoMCwgb2Zmc2V0KSk7CisgICAgICAg
IHJldHVybiByZWN0OworICAgIH07CisKKyAgICBhdXRvIGFkanVzdGVkTGluZSA9IFsmXShjb25z
dCBEaXNwbGF5OjpMaW5lJiBsaW5lLCBmbG9hdCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1
cm4gRGlzcGxheTo6TGluZSB7CisgICAgICAgICAgICBtb3ZlVmVydGljYWxseShsaW5lLnJlY3Qo
KSwgb2Zmc2V0KSwKKyAgICAgICAgICAgIG1vdmVWZXJ0aWNhbGx5KGxpbmUuc2Nyb2xsYWJsZU92
ZXJmbG93KCksIG9mZnNldCksCisgICAgICAgICAgICBtb3ZlVmVydGljYWxseShsaW5lLmlua092
ZXJmbG93KCksIG9mZnNldCksCisgICAgICAgICAgICBsaW5lLmJhc2VsaW5lKCksCisgICAgICAg
ICAgICBsaW5lLmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKQorICAgICAgICB9OworICAgIH07
CisKKyAgICBhdXRvIGFkanVzdGVkUnVuID0gWyZdKGNvbnN0IERpc3BsYXk6OlJ1biYgcnVuLCBm
bG9hdCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxheTo6UnVuIHsKKyAgICAg
ICAgICAgIHJ1bi5saW5lSW5kZXgoKSwKKyAgICAgICAgICAgIHJ1bi5sYXlvdXRCb3goKSwKKyAg
ICAgICAgICAgIG1vdmVWZXJ0aWNhbGx5KHJ1bi5yZWN0KCksIG9mZnNldCksCisgICAgICAgICAg
ICBtb3ZlVmVydGljYWxseShydW4uaW5rT3ZlcmZsb3coKSwgb2Zmc2V0KSwKKyAgICAgICAgICAg
IHJ1bi5leHBhbnNpb24oKSwKKyAgICAgICAgICAgIHJ1bi50ZXh0Q29udGVudCgpCisgICAgICAg
IH07CisgICAgfTsKKworICAgIGF1dG8gYWRqdXN0ZWRDb250ZW50ID0gRGlzcGxheTo6SW5saW5l
Q29udGVudDo6Y3JlYXRlKCk7CisKKyAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAwOyBsaW5l
SW5kZXggPCBpbmxpbmVDb250ZW50LmxpbmVzLnNpemUoKTsgKytsaW5lSW5kZXgpCisgICAgICAg
IGFkanVzdGVkQ29udGVudC0+bGluZXMuYXBwZW5kKGFkanVzdGVkTGluZShpbmxpbmVDb250ZW50
LmxpbmVzW2xpbmVJbmRleF0sIGFkanVzdG1lbnRzW2xpbmVJbmRleF0pKTsKKworICAgIGZvciAo
YXV0byYgcnVuIDogaW5saW5lQ29udGVudC5ydW5zKQorICAgICAgICBhZGp1c3RlZENvbnRlbnQt
PnJ1bnMuYXBwZW5kKGFkanVzdGVkUnVuKHJ1biwgYWRqdXN0bWVudHNbcnVuLmxpbmVJbmRleCgp
XSkpOworCisgICAgcmV0dXJuIGFkanVzdGVkQ29udGVudDsKK30KKworUmVmPERpc3BsYXk6Oklu
bGluZUNvbnRlbnQ+IGFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKERpc3BsYXk6Oklu
bGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyAg
ICBWZWN0b3I8U3RydXQ+IHN0cnV0czsKKyAgICBhdXRvIGxpbmVDb3VudCA9IGlubGluZUNvbnRl
bnQubGluZXMuc2l6ZSgpOworICAgIHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGZsb3csIGlubGlu
ZUNvbnRlbnQsIGxpbmVDb3VudCk7CisgICAgLy8gRmlyc3QgcGFzcyB3aXRoIG5vIHBhZ2luYXRp
b24gb2Zmc2V0PworICAgIGlmICghZmxvdy5wYWdlTG9naWNhbEhlaWdodEZvck9mZnNldCgwKSkK
KyAgICAgICAgcmV0dXJuIGlubGluZUNvbnRlbnQ7CisKKyAgICBhdXRvIHdpZG93cyA9IGZsb3cu
c3R5bGUoKS5oYXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8aW50PihmbG93LnN0eWxlKCku
d2lkb3dzKCksIDEpOworICAgIGF1dG8gb3JwaGFucyA9IGZsb3cuc3R5bGUoKS5oYXNBdXRvT3Jw
aGFucygpID8gMSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgpLm9ycGhhbnMoKSwgMSk7Cisg
ICAgUGFnaW5hdGVkTGluZXMgbGluZXM7CisgICAgZm9yICh1bnNpZ25lZCBsaW5lSW5kZXggPSAw
OyBsaW5lSW5kZXggPCBsaW5lQ291bnQ7ICsrbGluZUluZGV4KSB7CisgICAgICAgIGF1dG8gbGlu
ZSA9IGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGlubGluZUNvbnRl
bnQubGluZXMsIGxpbmVJbmRleCwgc3RydXRzKTsKKyAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUp
OworICAgICAgICBhdXRvIHJlbWFpbmluZ0hlaWdodCA9IGZsb3cucGFnZVJlbWFpbmluZ0xvZ2lj
YWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3AsIFJlbmRlckJsb2NrRmxvdzo6RXhjbHVkZVBhZ2VC
b3VuZGFyeSk7CisgICAgICAgIGF1dG8gYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA9IGZsb3cucGFn
ZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApID09IHJlbWFpbmluZ0hlaWdodDsKKyAg
ICAgICAgYXV0byBsaW5lRG9lc05vdEZpdCA9IGxpbmUuaGVpZ2h0ID4gcmVtYWluaW5nSGVpZ2h0
OworICAgICAgICBpZiAobGluZURvZXNOb3RGaXQgfHwgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2Ug
JiYgbGluZUluZGV4KSkgeworICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtJbmRleCA9IGNvbXB1
dGVMaW5lQnJlYWtJbmRleChsaW5lSW5kZXgsIGxpbmVDb3VudCwgb3JwaGFucywgd2lkb3dzLCBz
dHJ1dHMpOworICAgICAgICAgICAgLy8gQXJlIHdlIHN0aWxsIGF0IHRoZSB0b3Agb2YgdGhlIGNv
bHVtbi9wYWdlPworICAgICAgICAgICAgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA9IGF0VGhlVG9w
T2ZDb2x1bW5PclBhZ2UgPyBsaW5lSW5kZXggPT0gbGluZUJyZWFrSW5kZXggOiBmYWxzZTsKKyAg
ICAgICAgICAgIHNldFBhZ2VCcmVha0ZvckxpbmUobGluZUJyZWFrSW5kZXgsIGxpbmVzLCBmbG93
LCBzdHJ1dHMsIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGxpbmVEb2VzTm90Rml0KTsKKyAgICAg
ICAgICAgIC8vIFJlY29tcHV0ZSBsaW5lIHBvc2l0aW9ucyB0aGF0IHdlIGFscmVhZHkgdmlzaXRl
ZCBidXQgd2lkb3cgYnJlYWsgcHVzaGVkIHRoZW0gdG8gYSBuZXcgcGFnZS4KKyAgICAgICAgICAg
IGZvciAoYXV0byBpID0gbGluZUJyZWFrSW5kZXg7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hdChpKSA9IGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92
ZXJmbG93KGZsb3csIGlubGluZUNvbnRlbnQubGluZXMsIGksIHN0cnV0cyk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoc3RydXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGlubGlu
ZUNvbnRlbnQ7CisKKyAgICBhdXRvIGFkanVzdG1lbnRzID0gVmVjdG9yPGZsb2F0PihsaW5lQ291
bnQsIDApOworICAgIGZvciAoYXV0byYgc3RydXQgOiBzdHJ1dHMpIHsKKyAgICAgICAgZm9yIChh
dXRvIGxpbmVJbmRleCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUluZGV4IDwgbGluZUNvdW50OyAr
K2xpbmVJbmRleCkKKyAgICAgICAgICAgIGFkanVzdG1lbnRzW2xpbmVJbmRleF0gKz0gc3RydXQu
b2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiBtYWtlQWRqdXN0ZWRDb250ZW50KGlubGluZUNv
bnRlbnQsIGFkanVzdG1lbnRzKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzVhOTMwOWE1OWZl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xh
eW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlJbmxpbmVDb250ZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyQmxvY2tGbG93OworCituYW1lc3BhY2Ug
TGF5b3V0SW50ZWdyYXRpb24geworICAgIAorUmVmPERpc3BsYXk6OklubGluZUNvbnRlbnQ+IGFk
anVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKERpc3BsYXk6OklubGluZUNvbnRlbnQmLCBS
ZW5kZXJCbG9ja0Zsb3cmKTsKKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcAppbmRleCBmYWU3MzViOTQzZWQuLmNhNjAzOTAwMWE3MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTM3NDMsNiAr
Mzc0Myw5IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMRkNMaW5lcyhib29sLCBMYXlv
dXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0CiAKICAgICBsYXlvdXRGb3JtYXR0aW5n
Q29udGV4dExpbmVMYXlvdXQubGF5b3V0KCk7CiAKKyAgICBpZiAodmlldygpLmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRlZCgpKQorICAgICAgICBs
YXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuYWRqdXN0Rm9yUGFnaW5hdGlvbigqdGhp
cyk7CisKICAgICBhdXRvIGNvbnRlbnRIZWlnaHQgPSBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExp
bmVMYXlvdXQuY29udGVudExvZ2ljYWxIZWlnaHQoKTsKICAgICBhdXRvIGNvbnRlbnRCb3hUb3Ag
PSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgYXV0byBjb250ZW50Qm94Qm90dG9tID0g
Y29udGVudEJveFRvcCArIGNvbnRlbnRIZWlnaHQ7CkBAIC0zNzY2LDYgKzM3NjksMTQgQEAgdm9p
ZCBSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcygpCiAKICAgICBhdXRvIHNpbXBsZUxp
bmVMYXlvdXQgPSBtYWtlUmVmUHRyKHRoaXMtPnNpbXBsZUxpbmVMYXlvdXQoKSk7CiAKKyAgICBi
b29sIG5lZWRzVG9QYWdpbmF0ZUNvbXBsZXhMaW5leCA9IFsmXSB7CisgICAgICAgIGlmIChzaW1w
bGVMaW5lTGF5b3V0ICYmIHNpbXBsZUxpbmVMYXlvdXQtPmlzUGFnaW5hdGVkKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGlu
ZUxheW91dCgpICYmIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5pc1BhZ2lu
YXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9KCk7CisKICAgICBtX2xpbmVMYXlvdXQgPSBtYWtlVW5pcXVlPENvbXBsZXhMaW5lTGF5
b3V0PigqdGhpcyk7CiAKICAgICBpZiAoc2ltcGxlTGluZUxheW91dCkgewpAQCAtMzc4NSw3ICsz
Nzk2LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcygpCiAgICAgYm9v
bCByZWxheW91dENoaWxkcmVuID0gZmFsc2U7CiAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNh
bFRvcDsKICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tOwotICAgIGlmIChzaW1w
bGVMaW5lTGF5b3V0ICYmIHNpbXBsZUxpbmVMYXlvdXQtPmlzUGFnaW5hdGVkKCkpIHsKKyAgICBp
ZiAobmVlZHNUb1BhZ2luYXRlQ29tcGxleExpbmV4KSB7CiAgICAgICAgIFBhZ2luYXRlZExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZSgqdGhpcyk7CiAgICAgICAgIGNvbXBsZXhMaW5lTGF5b3V0
LmxheW91dExpbmVCb3hlcyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVw
YWludExvZ2ljYWxCb3R0b20pOwogICAgICAgICAvLyBUaGlzIG1hdGNoZXMgcmVsYXlvdXRUb0F2
b2lkV2lkb3dzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409372</attachid>
            <date>2020-09-22 09:58:07 -0700</date>
            <delta_ts>2020-09-22 11:00:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>lfc-pagination-3.patch</filename>
            <type>text/plain</type>
            <size>22818</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzA4NDcxNGYzZmEuLjAyMjY0ZTI3Zjg0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ0IEBACisyMDIwLTA5LTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQmFzaWMgcGFnaW5hdGlvbiBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU0NTEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY3NDgyNzIxPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnQgdGhlIFNpbXBsZSBMaW5lIExheW91dCBw
YWdpbmF0aW9uIGNvZGUgdG8gTEZDIGludGVncmF0aW9uIGxheWVyLgorICAgICAgICBQYWdpbmF0
aW9uIGlzIHRoZSBsYXN0IHJlbWFpbmluZyB1c2Ugb2YgU0xMIHNvIHRoaXMgcGF0Y2ggdHVybnMg
aXQgaW50byBkZWFkIGNvZGUuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlJbmxpbmVDb250ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpJbmxpbmVDb250ZW50OjpjcmVhdGUpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcik6CisKKyAgICAgICAgVGhpcyBub3cg
dGhlIHNhbWUgYXMgU0xMIHRlc3QsIGNvdmVyaW5nIGFsbCBjYXNlcy4KKworICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbnRlbnRMb2dpY2FsSGVpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
OjphZGp1c3RGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpMaW5lTGF5b3V0OjplbnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCk6CisKKyAgICAgICAg
VGhpcyBpcyBmYWlybHkgZGlyZWN0IGNvcHkgb2YgdGhlIFNMTCBjb2RlLiBJdCBpcyBub3QgZnV0
dXJlIHByb29mIG9yIG90aGVyd2lzZSBncmVhdCBidXQgaXQgc2VydmVzIHRoZSBqb2IgZm9yIG5v
dy4KKworICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVM
YXlvdXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
Ojppc1BhZ2luYXRlZCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OmNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjb21wdXRlTGluZUJyZWFrSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNvbXB1dGVPZmZzZXRBZnRl
ckxpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6c2V0UGFn
ZUJyZWFrRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6dXBk
YXRlTWluaW11bVBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246Om1ha2VBZGp1c3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OmFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5SW5saW5lQ29udGVudC5o
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMRkNMaW5lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcyk6CisKIDIwMjAtMDktMjEgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJd
IG1lZGlhL21lZGlhLWNhbi1wbGF5LW1wMy5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcy
NzU2M2U1ZmI3Ny4uYjcxZGY3ZTJkMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ1Niw2ICsxNDU2
LDcgQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xh
eW91dEludGVncmF0aW9uQm94VHJlZS5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwCitsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25QYWdpbmF0aW9uLmNwcAogbGF5b3V0L2ludmFsaWRhdGlvbi9JbnZhbGlkYXRpb25Db250ZXh0
LmNwcAogbGF5b3V0L2ludmFsaWRhdGlvbi9JbnZhbGlkYXRpb25TdGF0ZS5jcHAKIGxheW91dC9s
YXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZGNjNWU3MWI4YjEuLjg5OTVhNWEzNDIxYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTU4MTYsNiArMTU4MTYsOCBAQAogCQlFNDJFNzZEQjFDN0FGNzc2MDBFMzYxNEQgLyog
U3R5bGVVcGRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVVcGRh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzMTA1QjcxNjc1MEYwQzAwREIy
RkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTm9kZVRyYXZlcnNhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTQzMTJBQjUyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFn
aW5hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJ
bnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDMxMkFCNzI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5h
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDM0M0QyMTIzOTI3NzgzMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzNDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVM
YXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg0MTUsNiArMjg0MTcsOCBAQAogCQlFNEZCNEIxRTIz
OTUzNTZGMDAzQzMzNkEgLyogaW50ZWdyYXRpb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUU0MzEyQUI1MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJ
bnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwICovLAorCQkJCUU0MzEyQUI3MjRCMzI2NTYwMDY3ODM0
OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLywKIAkJCQlFNDE4MDI1NjIzRDQ1
NEI1MDBGRkIwNzEgLyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcCAqLywKIAkJCQlFNDE4
MDI1MzIzRDQ1NDlBMDBGRkIwNzEgLyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmggKi8sCiAJ
CQkJRTRBQkFCREUyMzYwODkzRDAwRkE0MzQ1IC8qIExheW91dEludGVncmF0aW9uTGluZUxheW91
dC5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheUlubGluZUNvbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJl
ZS9EaXNwbGF5SW5saW5lQ29udGVudC5oCmluZGV4IGE5YjQ1MGI5MzkzZS4uN2M5Njc0NGVjZDY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlu
bGluZUNvbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlz
cGxheUlubGluZUNvbnRlbnQuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgRGlzcGxheSB7CiAKIHN0cnVjdCBJbmxpbmVDb250ZW50IDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5saW5lQ29udGVudD4geworICAgIHN0YXRpYyBSZWY8SW5saW5lQ29udGVudD4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmxpbmVDb250ZW50KTsgfQogICAgIH5J
bmxpbmVDb250ZW50KCk7CiAKICAgICB1c2luZyBSdW5zID0gVmVjdG9yPFJ1biwgND47CkBAIC00
Nyw2ICs0OCw5IEBAIHN0cnVjdCBJbmxpbmVDb250ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW5s
aW5lQ29udGVudD4gewogICAgIGNvbnN0IExpbmUmIGxpbmVGb3JSdW4oY29uc3QgUnVuJiBydW4p
IGNvbnN0IHsgcmV0dXJuIGxpbmVzW3J1bi5saW5lSW5kZXgoKV07IH0KICAgICBXVEY6Okl0ZXJh
dG9yUmFuZ2U8Y29uc3QgUnVuKj4gcnVuc0ZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0
OwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKworcHJpdmF0ZToKKyAgICBJbmxpbmVDb250ZW50
KCkgPSBkZWZhdWx0OwogfTsKIAogaW5saW5lIHZvaWQgSW5saW5lQ29udGVudDo6c2hyaW5rVG9G
aXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCA0ZDVkZGIwMTc5ZDQu
LjIxOTg1MTg1MDhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTM3
LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRl
ICJJbnZhbGlkYXRpb25TdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5b3V0
VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJC
bG9ja0Zsb3cuaCIKQEAgLTc0LDEzICs3NSw3IEBAIGJvb2wgTGluZUxheW91dDo6Y2FuVXNlRm9y
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgT3B0aW9uYWw8Ym9vbD4gY291bGRVc2VTCiAg
ICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoZmxvdyk7CiAgICAgfSk7
CiAKLSAgICBpZiAoIXBhc3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoZmxvdy5mcmFnbWVudGVkRmxvd1N0YXRlKCkgIT0gUmVuZGVyT2Jq
ZWN0OjpOb3RJbnNpZGVGcmFnbWVudGVkRmxvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHBhc3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0Owog
fQogCiBib29sIExpbmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbG93LCBTdHlsZURpZmZlcmVuY2UgZGlmZikKQEAgLTIyNSw2ICsyMjAs
OSBAQCB2b2lkIExpbmVMYXlvdXQ6OnByZXBhcmVGbG9hdGluZ1N0YXRlKCkKIAogTGF5b3V0VW5p
dCBMaW5lTGF5b3V0Ojpjb250ZW50TG9naWNhbEhlaWdodCgpIGNvbnN0CiB7CisgICAgaWYgKG1f
cGFnaW5hdGVkSGVpZ2h0KQorICAgICAgICByZXR1cm4gKm1fcGFnaW5hdGVkSGVpZ2h0OworCiAg
ICAgYXV0byYgbGluZXMgPSBtX2lubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lcygpOwogICAgIHJl
dHVybiBMYXlvdXRVbml0IHsgbGluZXMubGFzdCgpLmxvZ2ljYWxCb3R0b20oKSAtIGxpbmVzLmZp
cnN0KCkubG9naWNhbFRvcCgpIH07CiB9CkBAIC0yNjMsNiArMjYxLDIxIEBAIExheW91dFVuaXQg
TGluZUxheW91dDo6bGFzdExpbmVCYXNlbGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIExheW91dDo6
dG9MYXlvdXRVbml0KGxhc3RMaW5lLmxvZ2ljYWxUb3AoKSArIGxhc3RMaW5lLmJhc2VsaW5lKCkp
OwogfQogCit2b2lkIExpbmVMYXlvdXQ6OmFkanVzdEZvclBhZ2luYXRpb24oUmVuZGVyQmxvY2tG
bG93JiBmbG93KQoreworICAgIEFTU0VSVCgmZmxvdyA9PSAmbV9mbG93KTsKKyAgICBhdXRvIHBh
Z2luZWRJbmxpbmVDb250ZW50ID0gYWRqdXN0TGluZVBvc2l0aW9uc0ZvclBhZ2luYXRpb24oKm1f
ZGlzcGxheUlubGluZUNvbnRlbnQsIGZsb3cpOworICAgIGlmIChwYWdpbmVkSW5saW5lQ29udGVu
dC5wdHIoKSA9PSBtX2Rpc3BsYXlJbmxpbmVDb250ZW50KSB7CisgICAgICAgIG1fcGFnaW5hdGVk
SGVpZ2h0ID0geyB9OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgbGluZXMg
PSBwYWdpbmVkSW5saW5lQ29udGVudC0+bGluZXM7CisgICAgbV9wYWdpbmF0ZWRIZWlnaHQgPSBM
YXlvdXRVbml0IHsgbGluZXMubGFzdCgpLnJlY3QoKS5tYXhZKCkgLSBsaW5lcy5maXJzdCgpLnJl
Y3QoKS55KCkgfTsKKworICAgIG1fZGlzcGxheUlubGluZUNvbnRlbnQgPSBXVEZNb3ZlKHBhZ2lu
ZWRJbmxpbmVDb250ZW50KTsKK30KKwogdm9pZCBMaW5lTGF5b3V0Ojpjb2xsZWN0T3ZlcmZsb3co
UmVuZGVyQmxvY2tGbG93JiBmbG93KQogewogICAgIEFTU0VSVCgmZmxvdyA9PSAmbV9mbG93KTsK
QEAgLTI3Nyw3ICsyOTAsNyBAQCB2b2lkIExpbmVMYXlvdXQ6OmNvbGxlY3RPdmVyZmxvdyhSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3cpCiBEaXNwbGF5OjpJbmxpbmVDb250ZW50JiBMaW5lTGF5b3V0Ojpl
bnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCgpCiB7CiAgICAgaWYgKCFtX2Rpc3BsYXlJbmxpbmVD
b250ZW50KQotICAgICAgICBtX2Rpc3BsYXlJbmxpbmVDb250ZW50ID0gYWRvcHRSZWYoKm5ldyBE
aXNwbGF5OjpJbmxpbmVDb250ZW50KTsKKyAgICAgICAgbV9kaXNwbGF5SW5saW5lQ29udGVudCA9
IERpc3BsYXk6OklubGluZUNvbnRlbnQ6OmNyZWF0ZSgpOwogICAgIHJldHVybiAqbV9kaXNwbGF5
SW5saW5lQ29udGVudDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCmluZGV4IDky
MDZhMmE0NmMzOS4uNTEzZWQ0ZDdmY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5o
CkBAIC02Nyw5ICs2NywxMSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBmaXJzdExpbmVCYXNl
bGluZSgpIGNvbnN0OwogICAgIExheW91dFVuaXQgbGFzdExpbmVCYXNlbGluZSgpIGNvbnN0Owog
CisgICAgdm9pZCBhZGp1c3RGb3JQYWdpbmF0aW9uKFJlbmRlckJsb2NrRmxvdyYpOwogICAgIHZv
aWQgY29sbGVjdE92ZXJmbG93KFJlbmRlckJsb2NrRmxvdyYpOwogCiAgICAgY29uc3QgRGlzcGxh
eTo6SW5saW5lQ29udGVudCogZGlzcGxheUlubGluZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlJbmxpbmVDb250ZW50LmdldCgpOyB9CisgICAgYm9vbCBpc1BhZ2luYXRlZCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9wYWdpbmF0ZWRIZWlnaHQ7IH0KIAogICAgIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICBib29sIGhpdFRl
c3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKTsKQEAgLTk1LDYgKzk3LDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXQ6OkxheW91dFN0YXRl
IG1fbGF5b3V0U3RhdGU7CiAgICAgTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIG1faW5s
aW5lRm9ybWF0dGluZ1N0YXRlOwogICAgIFJlZlB0cjxEaXNwbGF5OjpJbmxpbmVDb250ZW50PiBt
X2Rpc3BsYXlJbmxpbmVDb250ZW50OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG1fcGFnaW5h
dGVkSGVpZ2h0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjg0MjA4ZWNiMWI0OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvblBhZ2luYXRpb24uY3BwCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0
aW9uLmgiCisKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2Nr
Rmxvdy5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKKyNpbmNsdWRlICJTaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBM
YXlvdXRJbnRlZ3JhdGlvbiB7CisKK3N0cnVjdCBTdHJ1dCB7CisgICAgdW5zaWduZWQgbGluZUJy
ZWFrOworICAgIGZsb2F0IG9mZnNldDsKK307CisKK3N0cnVjdCBQYWdpbmF0ZWRMaW5lIHsKKyAg
ICBMYXlvdXRVbml0IHRvcDsKKyAgICBMYXlvdXRVbml0IGhlaWdodDsKK307Cit1c2luZyBQYWdp
bmF0ZWRMaW5lcyA9IFZlY3RvcjxQYWdpbmF0ZWRMaW5lLCAyMD47CisKK3N0YXRpYyBQYWdpbmF0
ZWRMaW5lIGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYsIERpc3BsYXk6OklubGluZUNvbnRlbnQ6OkxpbmVzJiBsaW5lcywgdW5zaWduZWQg
bGluZUluZGV4LCBWZWN0b3I8U3RydXQ+JiBzdHJ1dHMpCit7CisgICAgTGF5b3V0VW5pdCBvZmZz
ZXQgPSAwOworICAgIGZvciAoYXV0byYgc3RydXQgOiBzdHJ1dHMpIHsKKyAgICAgICAgaWYgKHN0
cnV0LmxpbmVCcmVhayA+IGxpbmVJbmRleCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBv
ZmZzZXQgKz0gc3RydXQub2Zmc2V0OworICAgIH0KKyAgICBhdXRvIG92ZXJmbG93UmVjdCA9IExh
eW91dFJlY3QobGluZXNbbGluZUluZGV4XS5pbmtPdmVyZmxvdygpKTsKKyAgICByZXR1cm4geyBv
dmVyZmxvd1JlY3QueSgpICsgb2Zmc2V0LCBvdmVyZmxvd1JlY3QuaGVpZ2h0KCkgfTsKK30KKwor
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVMaW5lQnJlYWtJbmRleCh1bnNpZ25lZCBicmVha0NhbmRp
ZGF0ZSwgdW5zaWduZWQgbGluZUNvdW50LCBpbnQgb3JwaGFuc05lZWRlZCwgaW50IHdpZG93c05l
ZWRlZCwKKyAgICBjb25zdCBWZWN0b3I8U3RydXQ+JiBzdHJ1dHMpCit7CisgICAgLy8gRmlyc3Qg
bGluZSBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgcGFnZS4KKyAgICBpZiAoIWJyZWFrQ2FuZGlk
YXRlKQorICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7CisgICAgCisgICAgaW50IHdpZG93
c09uVGhlTmV4dFBhZ2UgPSBsaW5lQ291bnQgLSBicmVha0NhbmRpZGF0ZTsKKyAgICBpZiAod2lk
b3dzTmVlZGVkIDw9IHdpZG93c09uVGhlTmV4dFBhZ2UpCisgICAgICAgIHJldHVybiBicmVha0Nh
bmRpZGF0ZTsKKyAgICAvLyBPbmx5IGJyZWFrIGFmdGVyIHRoZSBmaXJzdCBsaW5lIHdpdGggd2lk
b3dzLgorICAgIGF1dG8gbGluZUJyZWFrID0gc3RkOjptYXg8aW50PihsaW5lQ291bnQgLSB3aWRv
d3NOZWVkZWQsIDEpOworICAgIGlmIChvcnBoYW5zTmVlZGVkID4gbGluZUJyZWFrKQorICAgICAg
ICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7CisgICAgLy8gQnJlYWsgb24gY3VycmVudCBwYWdlIG9u
bHkuCisgICAgaWYgKHN0cnV0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBsaW5lQnJlYWs7
CisgICAgQVNTRVJUKHN0cnV0cy5sYXN0KCkubGluZUJyZWFrICsgMSA8IGxpbmVDb3VudCk7Cisg
ICAgcmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVkPihzdHJ1dHMubGFzdCgpLmxpbmVCcmVhayArIDEs
IGxpbmVCcmVhayk7Cit9CisKK3N0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVPZmZzZXRBZnRlckxp
bmVCcmVhayhMYXlvdXRVbml0IGxpbmVCcmVha1Bvc2l0aW9uLCBib29sIGlzRmlyc3RMaW5lLCBi
b29sIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykK
K3sKKyAgICAvLyBObyBvZmZzZXQgZm9yIHRvcCBvZiB0aGUgcGFnZSBsaW5lcyB1bmxlc3Mgd2lk
b3dzIHB1c2hlZCB0aGUgbGluZSBicmVhay4KKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IGlzRmly
c3RMaW5lID8gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiAwX2x1OworICAgIGlmIChh
dFRoZVRvcE9mQ29sdW1uT3JQYWdlKQorICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgIHJldHVy
biBvZmZzZXQgKyBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmVC
cmVha1Bvc2l0aW9uLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91bmRhcnkpOworfQor
CitzdGF0aWMgdm9pZCBzZXRQYWdlQnJlYWtGb3JMaW5lKHVuc2lnbmVkIGxpbmVCcmVha0luZGV4
LCBQYWdpbmF0ZWRMaW5lcyYgbGluZXMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgVmVjdG9yPFN0
cnV0PiYgc3RydXRzLAorICAgIGJvb2wgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgYm9vbCBsaW5l
RG9lc05vdEZpdCkKK3sKKyAgICBhdXRvIGxpbmUgPSBsaW5lcy5hdChsaW5lQnJlYWtJbmRleCk7
CisgICAgYXV0byByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gZmxvdy5wYWdlUmVtYWluaW5nTG9n
aWNhbEhlaWdodEZvck9mZnNldChsaW5lLnRvcCwgUmVuZGVyQmxvY2tGbG93OjpFeGNsdWRlUGFn
ZUJvdW5kYXJ5KTsKKyAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICBhdXRvIGZp
cnN0TGluZURvZXNOb3RGaXQgPSAhbGluZUJyZWFrSW5kZXggJiYgbGluZS5oZWlnaHQgPCBmbG93
LnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wKTsKKyAgICBhdXRvIG1vdmVPcnBo
YW5Ub05leHRDb2x1bW4gPSBsaW5lRG9lc05vdEZpdCAmJiAhc3R5bGUuaGFzQXV0b09ycGhhbnMo
KSAmJiBzdHlsZS5vcnBoYW5zKCkgPiAoc2hvcnQpbGluZUJyZWFrSW5kZXg7CisgICAgaWYgKGZp
cnN0TGluZURvZXNOb3RGaXQgfHwgbW92ZU9ycGhhblRvTmV4dENvbHVtbikgeworICAgICAgICBh
dXRvIGZpcnN0TGluZSA9IGxpbmVzLmZpcnN0KCk7CisgICAgICAgIGF1dG8gZmlyc3RMaW5lVXBw
ZXJPdmVyaGFuZyA9IHN0ZDo6bWF4KExheW91dFVuaXQoLWZpcnN0TGluZS50b3ApLCAwX2x1KTsK
KyAgICAgICAgZmxvdy5zZXRQYWdpbmF0aW9uU3RydXQobGluZS50b3AgKyByZW1haW5pbmdMb2dp
Y2FsSGVpZ2h0ICsgZmlyc3RMaW5lVXBwZXJPdmVyaGFuZyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UpCisgICAgICAgIGZsb3cuc2V0UGFn
ZUJyZWFrKGxpbmUudG9wLCBsaW5lLmhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBmbG93LnNl
dFBhZ2VCcmVhayhsaW5lLnRvcCwgbGluZS5oZWlnaHQgLSByZW1haW5pbmdMb2dpY2FsSGVpZ2h0
KTsKKyAgICBzdHJ1dHMuYXBwZW5kKHsgbGluZUJyZWFrSW5kZXgsIGNvbXB1dGVPZmZzZXRBZnRl
ckxpbmVCcmVhayhsaW5lc1tsaW5lQnJlYWtJbmRleF0udG9wLCAhbGluZUJyZWFrSW5kZXgsIGF0
VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGZsb3cpIH0pOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVN
aW5pbXVtUGFnZUhlaWdodChSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IERpc3BsYXk6Oklu
bGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIHVuc2lnbmVkIGxpbmVDb3VudCkKK3sKKyAgICBh
dXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICBhdXRvIHdpZG93cyA9IHN0eWxlLmhhc0F1
dG9XaWRvd3MoKSA/IDEgOiBzdGQ6Om1heDxpbnQ+KHN0eWxlLndpZG93cygpLCAxKTsKKyAgICBh
dXRvIG9ycGhhbnMgPSBzdHlsZS5oYXNBdXRvT3JwaGFucygpID8gMSA6IHN0ZDo6bWF4PGludD4o
c3R5bGUub3JwaGFucygpLCAxKTsKKyAgICBhdXRvIG1pbmltdW1MaW5lQ291bnQgPSBzdGQ6Om1p
bjx1bnNpZ25lZD4oc3RkOjptYXgod2lkb3dzLCBvcnBoYW5zKSwgbGluZUNvdW50KTsKKyAgICBm
bG93LnVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KDAsIExheW91dFVuaXQoaW5saW5lQ29udGVudC5s
aW5lc1ttaW5pbXVtTGluZUNvdW50IC0gMV0ucmVjdCgpLm1heFkoKSkpOworfQorCitzdGF0aWMg
UmVmPERpc3BsYXk6OklubGluZUNvbnRlbnQ+IG1ha2VBZGp1c3RlZENvbnRlbnQoY29uc3QgRGlz
cGxheTo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgVmVjdG9yPGZsb2F0PiBhZGp1c3Rt
ZW50cykKK3sKKyAgICBhdXRvIG1vdmVWZXJ0aWNhbGx5ID0gW10oRmxvYXRSZWN0IHJlY3QsIGZs
b2F0IG9mZnNldCkgeworICAgICAgICByZWN0Lm1vdmUoRmxvYXRTaXplKDAsIG9mZnNldCkpOwor
ICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9OworCisgICAgYXV0byBhZGp1c3RlZExpbmUgPSBb
Jl0oY29uc3QgRGlzcGxheTo6TGluZSYgbGluZSwgZmxvYXQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIERpc3BsYXk6OkxpbmUgeworICAgICAgICAgICAgbW92ZVZlcnRpY2FsbHkobGlu
ZS5yZWN0KCksIG9mZnNldCksCisgICAgICAgICAgICBtb3ZlVmVydGljYWxseShsaW5lLnNjcm9s
bGFibGVPdmVyZmxvdygpLCBvZmZzZXQpLAorICAgICAgICAgICAgbW92ZVZlcnRpY2FsbHkobGlu
ZS5pbmtPdmVyZmxvdygpLCBvZmZzZXQpLAorICAgICAgICAgICAgbGluZS5iYXNlbGluZSgpLAor
ICAgICAgICAgICAgbGluZS5ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KCkKKyAgICAgICAgfTsK
KyAgICB9OworCisgICAgYXV0byBhZGp1c3RlZFJ1biA9IFsmXShjb25zdCBEaXNwbGF5OjpSdW4m
IHJ1biwgZmxvYXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXk6OlJ1biB7
CisgICAgICAgICAgICBydW4ubGluZUluZGV4KCksCisgICAgICAgICAgICBydW4ubGF5b3V0Qm94
KCksCisgICAgICAgICAgICBtb3ZlVmVydGljYWxseShydW4ucmVjdCgpLCBvZmZzZXQpLAorICAg
ICAgICAgICAgbW92ZVZlcnRpY2FsbHkocnVuLmlua092ZXJmbG93KCksIG9mZnNldCksCisgICAg
ICAgICAgICBydW4uZXhwYW5zaW9uKCksCisgICAgICAgICAgICBydW4udGV4dENvbnRlbnQoKQor
ICAgICAgICB9OworICAgIH07CisKKyAgICBhdXRvIGFkanVzdGVkQ29udGVudCA9IERpc3BsYXk6
OklubGluZUNvbnRlbnQ6OmNyZWF0ZSgpOworCisgICAgZm9yIChzaXplX3QgbGluZUluZGV4ID0g
MDsgbGluZUluZGV4IDwgaW5saW5lQ29udGVudC5saW5lcy5zaXplKCk7ICsrbGluZUluZGV4KQor
ICAgICAgICBhZGp1c3RlZENvbnRlbnQtPmxpbmVzLmFwcGVuZChhZGp1c3RlZExpbmUoaW5saW5l
Q29udGVudC5saW5lc1tsaW5lSW5kZXhdLCBhZGp1c3RtZW50c1tsaW5lSW5kZXhdKSk7CisKKyAg
ICBmb3IgKGF1dG8mIHJ1biA6IGlubGluZUNvbnRlbnQucnVucykKKyAgICAgICAgYWRqdXN0ZWRD
b250ZW50LT5ydW5zLmFwcGVuZChhZGp1c3RlZFJ1bihydW4sIGFkanVzdG1lbnRzW3J1bi5saW5l
SW5kZXgoKV0pKTsKKworICAgIHJldHVybiBhZGp1c3RlZENvbnRlbnQ7Cit9CisKK1JlZjxEaXNw
bGF5OjpJbmxpbmVDb250ZW50PiBhZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbihEaXNw
bGF5OjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cp
Cit7CisgICAgVmVjdG9yPFN0cnV0PiBzdHJ1dHM7CisgICAgYXV0byBsaW5lQ291bnQgPSBpbmxp
bmVDb250ZW50LmxpbmVzLnNpemUoKTsKKyAgICB1cGRhdGVNaW5pbXVtUGFnZUhlaWdodChmbG93
LCBpbmxpbmVDb250ZW50LCBsaW5lQ291bnQpOworICAgIC8vIEZpcnN0IHBhc3Mgd2l0aCBubyBw
YWdpbmF0aW9uIG9mZnNldD8KKyAgICBpZiAoIWZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZz
ZXQoMCkpCisgICAgICAgIHJldHVybiBpbmxpbmVDb250ZW50OworCisgICAgYXV0byB3aWRvd3Mg
PSBmbG93LnN0eWxlKCkuaGFzQXV0b1dpZG93cygpID8gMSA6IHN0ZDo6bWF4PGludD4oZmxvdy5z
dHlsZSgpLndpZG93cygpLCAxKTsKKyAgICBhdXRvIG9ycGhhbnMgPSBmbG93LnN0eWxlKCkuaGFz
QXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6Om1heDxpbnQ+KGZsb3cuc3R5bGUoKS5vcnBoYW5zKCks
IDEpOworICAgIFBhZ2luYXRlZExpbmVzIGxpbmVzOworICAgIGZvciAodW5zaWduZWQgbGluZUlu
ZGV4ID0gMDsgbGluZUluZGV4IDwgbGluZUNvdW50OyArK2xpbmVJbmRleCkgeworICAgICAgICBh
dXRvIGxpbmUgPSBjb21wdXRlTGluZVRvcEFuZEJvdHRvbVdpdGhPdmVyZmxvdyhmbG93LCBpbmxp
bmVDb250ZW50LmxpbmVzLCBsaW5lSW5kZXgsIHN0cnV0cyk7CisgICAgICAgIGxpbmVzLmFwcGVu
ZChsaW5lKTsKKyAgICAgICAgYXV0byByZW1haW5pbmdIZWlnaHQgPSBmbG93LnBhZ2VSZW1haW5p
bmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1
ZGVQYWdlQm91bmRhcnkpOworICAgICAgICBhdXRvIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgPSBm
bG93LnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wKSA9PSByZW1haW5pbmdIZWln
aHQ7CisgICAgICAgIGF1dG8gbGluZURvZXNOb3RGaXQgPSBsaW5lLmhlaWdodCA+IHJlbWFpbmlu
Z0hlaWdodDsKKyAgICAgICAgaWYgKGxpbmVEb2VzTm90Rml0IHx8IChhdFRoZVRvcE9mQ29sdW1u
T3JQYWdlICYmIGxpbmVJbmRleCkpIHsKKyAgICAgICAgICAgIGF1dG8gbGluZUJyZWFrSW5kZXgg
PSBjb21wdXRlTGluZUJyZWFrSW5kZXgobGluZUluZGV4LCBsaW5lQ291bnQsIG9ycGhhbnMsIHdp
ZG93cywgc3RydXRzKTsKKyAgICAgICAgICAgIC8vIEFyZSB3ZSBzdGlsbCBhdCB0aGUgdG9wIG9m
IHRoZSBjb2x1bW4vcGFnZT8KKyAgICAgICAgICAgIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgPSBh
dFRoZVRvcE9mQ29sdW1uT3JQYWdlID8gbGluZUluZGV4ID09IGxpbmVCcmVha0luZGV4IDogZmFs
c2U7CisgICAgICAgICAgICBzZXRQYWdlQnJlYWtGb3JMaW5lKGxpbmVCcmVha0luZGV4LCBsaW5l
cywgZmxvdywgc3RydXRzLCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBsaW5lRG9lc05vdEZpdCk7
CisgICAgICAgICAgICAvLyBSZWNvbXB1dGUgbGluZSBwb3NpdGlvbnMgdGhhdCB3ZSBhbHJlYWR5
IHZpc2l0ZWQgYnV0IHdpZG93IGJyZWFrIHB1c2hlZCB0aGVtIHRvIGEgbmV3IHBhZ2UuCisgICAg
ICAgICAgICBmb3IgKGF1dG8gaSA9IGxpbmVCcmVha0luZGV4OyBpIDwgbGluZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgbGluZXMuYXQoaSkgPSBjb21wdXRlTGluZVRvcEFuZEJvdHRv
bVdpdGhPdmVyZmxvdyhmbG93LCBpbmxpbmVDb250ZW50LmxpbmVzLCBpLCBzdHJ1dHMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKHN0cnV0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBpbmxpbmVDb250ZW50OworCisgICAgYXV0byBhZGp1c3RtZW50cyA9IFZlY3RvcjxmbG9hdD4o
bGluZUNvdW50LCAwKTsKKyAgICBmb3IgKGF1dG8mIHN0cnV0IDogc3RydXRzKSB7CisgICAgICAg
IGZvciAoYXV0byBsaW5lSW5kZXggPSBzdHJ1dC5saW5lQnJlYWs7IGxpbmVJbmRleCA8IGxpbmVD
b3VudDsgKytsaW5lSW5kZXgpCisgICAgICAgICAgICBhZGp1c3RtZW50c1tsaW5lSW5kZXhdICs9
IHN0cnV0Lm9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gbWFrZUFkanVzdGVkQ29udGVudChp
bmxpbmVDb250ZW50LCBhZGp1c3RtZW50cyk7Cit9CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBh
Z2luYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM1YTkz
MDlhNTlmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaApAQCAtMCwwICsxLDM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5SW5saW5lQ29udGVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlckJsb2NrRmxvdzsKKworbmFt
ZXNwYWNlIExheW91dEludGVncmF0aW9uIHsKKyAgICAKK1JlZjxEaXNwbGF5OjpJbmxpbmVDb250
ZW50PiBhZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbihEaXNwbGF5OjpJbmxpbmVDb250
ZW50JiwgUmVuZGVyQmxvY2tGbG93Jik7CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggZmFlNzM1Yjk0M2VkLi42NGJjYjlmNmIxMjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0z
NzQzLDYgKzM3NDMsOSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0TEZDTGluZXMoYm9v
bCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dAogCiAgICAgbGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmxheW91dCgpOwogCisgICAgaWYgKHZpZXcoKS5mcmFt
ZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKSkKKyAg
ICAgICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmFkanVzdEZvclBhZ2luYXRp
b24oKnRoaXMpOworCiAgICAgYXV0byBjb250ZW50SGVpZ2h0ID0gbGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRMaW5lTGF5b3V0LmNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiAgICAgYXV0byBjb250ZW50
Qm94VG9wID0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogICAgIGF1dG8gY29udGVudEJveEJv
dHRvbSA9IGNvbnRlbnRCb3hUb3AgKyBjb250ZW50SGVpZ2h0OwpAQCAtMzc2Niw2ICszNzY5LDE0
IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogCiAgICAgYXV0byBz
aW1wbGVMaW5lTGF5b3V0ID0gbWFrZVJlZlB0cih0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpOwog
CisgICAgYm9vbCBuZWVkc1RvUGFnaW5hdGVDb21wbGV4TGluZXMgPSBbJl0geworICAgICAgICBp
ZiAoc2ltcGxlTGluZUxheW91dCAmJiBzaW1wbGVMaW5lTGF5b3V0LT5pc1BhZ2luYXRlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dExpbmVMYXlvdXQoKSAmJiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+
aXNQYWdpbmF0ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfSgpOworCiAgICAgbV9saW5lTGF5b3V0ID0gbWFrZVVuaXF1ZTxDb21wbGV4
TGluZUxheW91dD4oKnRoaXMpOwogCiAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQpIHsKQEAgLTM3
ODUsNyArMzc5Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQog
ICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9IGZhbHNlOwogICAgIExheW91dFVuaXQgcmVwYWlu
dExvZ2ljYWxUb3A7CiAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRvbTsKLSAgICBp
ZiAoc2ltcGxlTGluZUxheW91dCAmJiBzaW1wbGVMaW5lTGF5b3V0LT5pc1BhZ2luYXRlZCgpKSB7
CisgICAgaWYgKG5lZWRzVG9QYWdpbmF0ZUNvbXBsZXhMaW5lcykgewogICAgICAgICBQYWdpbmF0
ZWRMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGUoKnRoaXMpOwogICAgICAgICBjb21wbGV4TGlu
ZUxheW91dC5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxU
b3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKICAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHJlbGF5
b3V0VG9Bdm9pZFdpZG93cy4K
</data>
<flag name="commit-queue"
          id="425068"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409376</attachid>
            <date>2020-09-22 10:30:06 -0700</date>
            <delta_ts>2020-09-22 12:05:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>lfc-pagination-4.patch</filename>
            <type>text/plain</type>
            <size>22920</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzA4NDcxNGYzZmEuLjAyMjY0ZTI3Zjg0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ0IEBACisyMDIwLTA5LTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQmFzaWMgcGFnaW5hdGlvbiBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU0NTEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY3NDgyNzIxPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnQgdGhlIFNpbXBsZSBMaW5lIExheW91dCBw
YWdpbmF0aW9uIGNvZGUgdG8gTEZDIGludGVncmF0aW9uIGxheWVyLgorICAgICAgICBQYWdpbmF0
aW9uIGlzIHRoZSBsYXN0IHJlbWFpbmluZyB1c2Ugb2YgU0xMIHNvIHRoaXMgcGF0Y2ggdHVybnMg
aXQgaW50byBkZWFkIGNvZGUuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlJbmxpbmVDb250ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpJbmxpbmVDb250ZW50OjpjcmVhdGUpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcik6CisKKyAgICAgICAgVGhpcyBub3cg
dGhlIHNhbWUgYXMgU0xMIHRlc3QsIGNvdmVyaW5nIGFsbCBjYXNlcy4KKworICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbnRlbnRMb2dpY2FsSGVpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
OjphZGp1c3RGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpMaW5lTGF5b3V0OjplbnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCk6CisKKyAgICAgICAg
VGhpcyBpcyBmYWlybHkgZGlyZWN0IGNvcHkgb2YgdGhlIFNMTCBjb2RlLiBJdCBpcyBub3QgZnV0
dXJlIHByb29mIG9yIG90aGVyd2lzZSBncmVhdCBidXQgaXQgc2VydmVzIHRoZSBqb2IgZm9yIG5v
dy4KKworICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVM
YXlvdXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
Ojppc1BhZ2luYXRlZCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OmNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjb21wdXRlTGluZUJyZWFrSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNvbXB1dGVPZmZzZXRBZnRl
ckxpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6c2V0UGFn
ZUJyZWFrRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6dXBk
YXRlTWluaW11bVBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246Om1ha2VBZGp1c3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OmFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5SW5saW5lQ29udGVudC5o
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMRkNMaW5lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcyk6CisKIDIwMjAtMDktMjEgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJd
IG1lZGlhL21lZGlhLWNhbi1wbGF5LW1wMy5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcy
NzU2M2U1ZmI3Ny4uYjcxZGY3ZTJkMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ1Niw2ICsxNDU2
LDcgQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xh
eW91dEludGVncmF0aW9uQm94VHJlZS5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwCitsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25QYWdpbmF0aW9uLmNwcAogbGF5b3V0L2ludmFsaWRhdGlvbi9JbnZhbGlkYXRpb25Db250ZXh0
LmNwcAogbGF5b3V0L2ludmFsaWRhdGlvbi9JbnZhbGlkYXRpb25TdGF0ZS5jcHAKIGxheW91dC9s
YXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZGNjNWU3MWI4YjEuLjg5OTVhNWEzNDIxYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTU4MTYsNiArMTU4MTYsOCBAQAogCQlFNDJFNzZEQjFDN0FGNzc2MDBFMzYxNEQgLyog
U3R5bGVVcGRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVVcGRh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzMTA1QjcxNjc1MEYwQzAwREIy
RkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTm9kZVRyYXZlcnNhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTQzMTJBQjUyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFn
aW5hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJ
bnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDMxMkFCNzI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5h
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDM0M0QyMTIzOTI3NzgzMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzNDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVM
YXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg0MTUsNiArMjg0MTcsOCBAQAogCQlFNEZCNEIxRTIz
OTUzNTZGMDAzQzMzNkEgLyogaW50ZWdyYXRpb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUU0MzEyQUI1MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJ
bnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwICovLAorCQkJCUU0MzEyQUI3MjRCMzI2NTYwMDY3ODM0
OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLywKIAkJCQlFNDE4MDI1NjIzRDQ1
NEI1MDBGRkIwNzEgLyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcCAqLywKIAkJCQlFNDE4
MDI1MzIzRDQ1NDlBMDBGRkIwNzEgLyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmggKi8sCiAJ
CQkJRTRBQkFCREUyMzYwODkzRDAwRkE0MzQ1IC8qIExheW91dEludGVncmF0aW9uTGluZUxheW91
dC5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheUlubGluZUNvbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJl
ZS9EaXNwbGF5SW5saW5lQ29udGVudC5oCmluZGV4IGE5YjQ1MGI5MzkzZS4uN2M5Njc0NGVjZDY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlu
bGluZUNvbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlz
cGxheUlubGluZUNvbnRlbnQuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgRGlzcGxheSB7CiAKIHN0cnVjdCBJbmxpbmVDb250ZW50IDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5saW5lQ29udGVudD4geworICAgIHN0YXRpYyBSZWY8SW5saW5lQ29udGVudD4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmxpbmVDb250ZW50KTsgfQogICAgIH5J
bmxpbmVDb250ZW50KCk7CiAKICAgICB1c2luZyBSdW5zID0gVmVjdG9yPFJ1biwgND47CkBAIC00
Nyw2ICs0OCw5IEBAIHN0cnVjdCBJbmxpbmVDb250ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW5s
aW5lQ29udGVudD4gewogICAgIGNvbnN0IExpbmUmIGxpbmVGb3JSdW4oY29uc3QgUnVuJiBydW4p
IGNvbnN0IHsgcmV0dXJuIGxpbmVzW3J1bi5saW5lSW5kZXgoKV07IH0KICAgICBXVEY6Okl0ZXJh
dG9yUmFuZ2U8Y29uc3QgUnVuKj4gcnVuc0ZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0
OwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKworcHJpdmF0ZToKKyAgICBJbmxpbmVDb250ZW50
KCkgPSBkZWZhdWx0OwogfTsKIAogaW5saW5lIHZvaWQgSW5saW5lQ29udGVudDo6c2hyaW5rVG9G
aXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCA0ZDVkZGIwMTc5ZDQu
LjIxOTg1MTg1MDhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTM3
LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRl
ICJJbnZhbGlkYXRpb25TdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5b3V0
VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJC
bG9ja0Zsb3cuaCIKQEAgLTc0LDEzICs3NSw3IEBAIGJvb2wgTGluZUxheW91dDo6Y2FuVXNlRm9y
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgT3B0aW9uYWw8Ym9vbD4gY291bGRVc2VTCiAg
ICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoZmxvdyk7CiAgICAgfSk7
CiAKLSAgICBpZiAoIXBhc3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoZmxvdy5mcmFnbWVudGVkRmxvd1N0YXRlKCkgIT0gUmVuZGVyT2Jq
ZWN0OjpOb3RJbnNpZGVGcmFnbWVudGVkRmxvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHBhc3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0Owog
fQogCiBib29sIExpbmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbG93LCBTdHlsZURpZmZlcmVuY2UgZGlmZikKQEAgLTIyNSw2ICsyMjAs
OSBAQCB2b2lkIExpbmVMYXlvdXQ6OnByZXBhcmVGbG9hdGluZ1N0YXRlKCkKIAogTGF5b3V0VW5p
dCBMaW5lTGF5b3V0Ojpjb250ZW50TG9naWNhbEhlaWdodCgpIGNvbnN0CiB7CisgICAgaWYgKG1f
cGFnaW5hdGVkSGVpZ2h0KQorICAgICAgICByZXR1cm4gKm1fcGFnaW5hdGVkSGVpZ2h0OworCiAg
ICAgYXV0byYgbGluZXMgPSBtX2lubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lcygpOwogICAgIHJl
dHVybiBMYXlvdXRVbml0IHsgbGluZXMubGFzdCgpLmxvZ2ljYWxCb3R0b20oKSAtIGxpbmVzLmZp
cnN0KCkubG9naWNhbFRvcCgpIH07CiB9CkBAIC0yNjMsNiArMjYxLDIxIEBAIExheW91dFVuaXQg
TGluZUxheW91dDo6bGFzdExpbmVCYXNlbGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIExheW91dDo6
dG9MYXlvdXRVbml0KGxhc3RMaW5lLmxvZ2ljYWxUb3AoKSArIGxhc3RMaW5lLmJhc2VsaW5lKCkp
OwogfQogCit2b2lkIExpbmVMYXlvdXQ6OmFkanVzdEZvclBhZ2luYXRpb24oUmVuZGVyQmxvY2tG
bG93JiBmbG93KQoreworICAgIEFTU0VSVCgmZmxvdyA9PSAmbV9mbG93KTsKKyAgICBhdXRvIHBh
Z2luZWRJbmxpbmVDb250ZW50ID0gYWRqdXN0TGluZVBvc2l0aW9uc0ZvclBhZ2luYXRpb24oKm1f
ZGlzcGxheUlubGluZUNvbnRlbnQsIGZsb3cpOworICAgIGlmIChwYWdpbmVkSW5saW5lQ29udGVu
dC5wdHIoKSA9PSBtX2Rpc3BsYXlJbmxpbmVDb250ZW50KSB7CisgICAgICAgIG1fcGFnaW5hdGVk
SGVpZ2h0ID0geyB9OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgbGluZXMg
PSBwYWdpbmVkSW5saW5lQ29udGVudC0+bGluZXM7CisgICAgbV9wYWdpbmF0ZWRIZWlnaHQgPSBM
YXlvdXRVbml0IHsgbGluZXMubGFzdCgpLnJlY3QoKS5tYXhZKCkgLSBsaW5lcy5maXJzdCgpLnJl
Y3QoKS55KCkgfTsKKworICAgIG1fZGlzcGxheUlubGluZUNvbnRlbnQgPSBXVEZNb3ZlKHBhZ2lu
ZWRJbmxpbmVDb250ZW50KTsKK30KKwogdm9pZCBMaW5lTGF5b3V0Ojpjb2xsZWN0T3ZlcmZsb3co
UmVuZGVyQmxvY2tGbG93JiBmbG93KQogewogICAgIEFTU0VSVCgmZmxvdyA9PSAmbV9mbG93KTsK
QEAgLTI3Nyw3ICsyOTAsNyBAQCB2b2lkIExpbmVMYXlvdXQ6OmNvbGxlY3RPdmVyZmxvdyhSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3cpCiBEaXNwbGF5OjpJbmxpbmVDb250ZW50JiBMaW5lTGF5b3V0Ojpl
bnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCgpCiB7CiAgICAgaWYgKCFtX2Rpc3BsYXlJbmxpbmVD
b250ZW50KQotICAgICAgICBtX2Rpc3BsYXlJbmxpbmVDb250ZW50ID0gYWRvcHRSZWYoKm5ldyBE
aXNwbGF5OjpJbmxpbmVDb250ZW50KTsKKyAgICAgICAgbV9kaXNwbGF5SW5saW5lQ29udGVudCA9
IERpc3BsYXk6OklubGluZUNvbnRlbnQ6OmNyZWF0ZSgpOwogICAgIHJldHVybiAqbV9kaXNwbGF5
SW5saW5lQ29udGVudDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCmluZGV4IDky
MDZhMmE0NmMzOS4uNTEzZWQ0ZDdmY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5o
CkBAIC02Nyw5ICs2NywxMSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBmaXJzdExpbmVCYXNl
bGluZSgpIGNvbnN0OwogICAgIExheW91dFVuaXQgbGFzdExpbmVCYXNlbGluZSgpIGNvbnN0Owog
CisgICAgdm9pZCBhZGp1c3RGb3JQYWdpbmF0aW9uKFJlbmRlckJsb2NrRmxvdyYpOwogICAgIHZv
aWQgY29sbGVjdE92ZXJmbG93KFJlbmRlckJsb2NrRmxvdyYpOwogCiAgICAgY29uc3QgRGlzcGxh
eTo6SW5saW5lQ29udGVudCogZGlzcGxheUlubGluZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlJbmxpbmVDb250ZW50LmdldCgpOyB9CisgICAgYm9vbCBpc1BhZ2luYXRlZCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9wYWdpbmF0ZWRIZWlnaHQ7IH0KIAogICAgIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICBib29sIGhpdFRl
c3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKTsKQEAgLTk1LDYgKzk3LDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXQ6OkxheW91dFN0YXRl
IG1fbGF5b3V0U3RhdGU7CiAgICAgTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIG1faW5s
aW5lRm9ybWF0dGluZ1N0YXRlOwogICAgIFJlZlB0cjxEaXNwbGF5OjpJbmxpbmVDb250ZW50PiBt
X2Rpc3BsYXlJbmxpbmVDb250ZW50OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG1fcGFnaW5h
dGVkSGVpZ2h0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjg2MmI0OGM4YTk1NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvblBhZ2luYXRpb24uY3BwCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0
aW9uLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dEludGVncmF0aW9u
IHsKKworc3RydWN0IFN0cnV0IHsKKyAgICB1bnNpZ25lZCBsaW5lQnJlYWs7CisgICAgZmxvYXQg
b2Zmc2V0OworfTsKKworc3RydWN0IFBhZ2luYXRlZExpbmUgeworICAgIExheW91dFVuaXQgdG9w
OworICAgIExheW91dFVuaXQgaGVpZ2h0OworfTsKK3VzaW5nIFBhZ2luYXRlZExpbmVzID0gVmVj
dG9yPFBhZ2luYXRlZExpbmUsIDIwPjsKKworc3RhdGljIFBhZ2luYXRlZExpbmUgY29tcHV0ZUxp
bmVUb3BBbmRCb3R0b21XaXRoT3ZlcmZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgRGlzcGxh
eTo6SW5saW5lQ29udGVudDo6TGluZXMmIGxpbmVzLCB1bnNpZ25lZCBsaW5lSW5kZXgsIFZlY3Rv
cjxTdHJ1dD4mIHN0cnV0cykKK3sKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IDA7CisgICAgZm9y
IChhdXRvJiBzdHJ1dCA6IHN0cnV0cykgeworICAgICAgICBpZiAoc3RydXQubGluZUJyZWFrID4g
bGluZUluZGV4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG9mZnNldCArPSBzdHJ1dC5v
ZmZzZXQ7CisgICAgfQorICAgIGF1dG8gb3ZlcmZsb3dSZWN0ID0gTGF5b3V0UmVjdChsaW5lc1ts
aW5lSW5kZXhdLmlua092ZXJmbG93KCkpOworICAgIHJldHVybiB7IG92ZXJmbG93UmVjdC55KCkg
KyBvZmZzZXQsIG92ZXJmbG93UmVjdC5oZWlnaHQoKSB9OworfQorCitzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZUxpbmVCcmVha0luZGV4KHVuc2lnbmVkIGJyZWFrQ2FuZGlkYXRlLCB1bnNpZ25lZCBs
aW5lQ291bnQsIGludCBvcnBoYW5zTmVlZGVkLCBpbnQgd2lkb3dzTmVlZGVkLAorICAgIGNvbnN0
IFZlY3RvcjxTdHJ1dD4mIHN0cnV0cykKK3sKKyAgICAvLyBGaXJzdCBsaW5lIGRvZXMgbm90IGZp
dCB0aGUgY3VycmVudCBwYWdlLgorICAgIGlmICghYnJlYWtDYW5kaWRhdGUpCisgICAgICAgIHJl
dHVybiBicmVha0NhbmRpZGF0ZTsKKyAgICAKKyAgICBpbnQgd2lkb3dzT25UaGVOZXh0UGFnZSA9
IGxpbmVDb3VudCAtIGJyZWFrQ2FuZGlkYXRlOworICAgIGlmICh3aWRvd3NOZWVkZWQgPD0gd2lk
b3dzT25UaGVOZXh0UGFnZSkKKyAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlkYXRlOworICAgIC8v
IE9ubHkgYnJlYWsgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgd2l0aCB3aWRvd3MuCisgICAgYXV0byBs
aW5lQnJlYWsgPSBzdGQ6Om1heDxpbnQ+KGxpbmVDb3VudCAtIHdpZG93c05lZWRlZCwgMSk7Cisg
ICAgaWYgKG9ycGhhbnNOZWVkZWQgPiBsaW5lQnJlYWspCisgICAgICAgIHJldHVybiBicmVha0Nh
bmRpZGF0ZTsKKyAgICAvLyBCcmVhayBvbiBjdXJyZW50IHBhZ2Ugb25seS4KKyAgICBpZiAoc3Ry
dXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGxpbmVCcmVhazsKKyAgICBBU1NFUlQoc3Ry
dXRzLmxhc3QoKS5saW5lQnJlYWsgKyAxIDwgbGluZUNvdW50KTsKKyAgICByZXR1cm4gc3RkOjpt
YXg8dW5zaWduZWQ+KHN0cnV0cy5sYXN0KCkubGluZUJyZWFrICsgMSwgbGluZUJyZWFrKTsKK30K
Kworc3RhdGljIExheW91dFVuaXQgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJyZWFrKExheW91dFVu
aXQgbGluZUJyZWFrUG9zaXRpb24sIGJvb2wgaXNGaXJzdExpbmUsIGJvb2wgYXRUaGVUb3BPZkNv
bHVtbk9yUGFnZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQoreworICAgIC8vIE5vIG9m
ZnNldCBmb3IgdG9wIG9mIHRoZSBwYWdlIGxpbmVzIHVubGVzcyB3aWRvd3MgcHVzaGVkIHRoZSBs
aW5lIGJyZWFrLgorICAgIExheW91dFVuaXQgb2Zmc2V0ID0gaXNGaXJzdExpbmUgPyBmbG93LmJv
cmRlckFuZFBhZGRpbmdCZWZvcmUoKSA6IDBfbHU7CisgICAgaWYgKGF0VGhlVG9wT2ZDb2x1bW5P
clBhZ2UpCisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgcmV0dXJuIG9mZnNldCArIGZsb3cu
cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZUJyZWFrUG9zaXRpb24sIFJl
bmRlckJsb2NrRmxvdzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7Cit9CisKK3N0YXRpYyB2b2lkIHNl
dFBhZ2VCcmVha0ZvckxpbmUodW5zaWduZWQgbGluZUJyZWFrSW5kZXgsIFBhZ2luYXRlZExpbmVz
JiBsaW5lcywgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBWZWN0b3I8U3RydXQ+JiBzdHJ1dHMsCisg
ICAgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBib29sIGxpbmVEb2VzTm90Rml0KQorewor
ICAgIGF1dG8gbGluZSA9IGxpbmVzLmF0KGxpbmVCcmVha0luZGV4KTsKKyAgICBhdXRvIHJlbWFp
bmluZ0xvZ2ljYWxIZWlnaHQgPSBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zm
c2V0KGxpbmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91bmRhcnkpOworICAg
IGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8gZmlyc3RMaW5lRG9lc05vdEZp
dCA9ICFsaW5lQnJlYWtJbmRleCAmJiBsaW5lLmhlaWdodCA8IGZsb3cucGFnZUxvZ2ljYWxIZWln
aHRGb3JPZmZzZXQobGluZS50b3ApOworICAgIGF1dG8gbW92ZU9ycGhhblRvTmV4dENvbHVtbiA9
IGxpbmVEb2VzTm90Rml0ICYmICFzdHlsZS5oYXNBdXRvT3JwaGFucygpICYmIHN0eWxlLm9ycGhh
bnMoKSA+IChzaG9ydClsaW5lQnJlYWtJbmRleDsKKyAgICBpZiAoZmlyc3RMaW5lRG9lc05vdEZp
dCB8fCBtb3ZlT3JwaGFuVG9OZXh0Q29sdW1uKSB7CisgICAgICAgIGF1dG8gZmlyc3RMaW5lID0g
bGluZXMuZmlyc3QoKTsKKyAgICAgICAgYXV0byBmaXJzdExpbmVVcHBlck92ZXJoYW5nID0gc3Rk
OjptYXgoTGF5b3V0VW5pdCgtZmlyc3RMaW5lLnRvcCksIDBfbHUpOworICAgICAgICBmbG93LnNl
dFBhZ2luYXRpb25TdHJ1dChsaW5lLnRvcCArIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgKyBmaXJz
dExpbmVVcHBlck92ZXJoYW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYXRU
aGVUb3BPZkNvbHVtbk9yUGFnZSkKKyAgICAgICAgZmxvdy5zZXRQYWdlQnJlYWsobGluZS50b3As
IGxpbmUuaGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGZsb3cuc2V0UGFnZUJyZWFrKGxpbmUu
dG9wLCBsaW5lLmhlaWdodCAtIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQpOworICAgIHN0cnV0cy5h
cHBlbmQoeyBsaW5lQnJlYWtJbmRleCwgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJyZWFrKGxpbmVz
W2xpbmVCcmVha0luZGV4XS50b3AsICFsaW5lQnJlYWtJbmRleCwgYXRUaGVUb3BPZkNvbHVtbk9y
UGFnZSwgZmxvdykgfSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0
KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgRGlzcGxheTo6SW5saW5lQ29udGVudCYgaW5s
aW5lQ29udGVudCwgdW5zaWduZWQgbGluZUNvdW50KQoreworICAgIGF1dG8mIHN0eWxlID0gZmxv
dy5zdHlsZSgpOworICAgIGF1dG8gd2lkb3dzID0gc3R5bGUuaGFzQXV0b1dpZG93cygpID8gMSA6
IHN0ZDo6bWF4PGludD4oc3R5bGUud2lkb3dzKCksIDEpOworICAgIGF1dG8gb3JwaGFucyA9IHN0
eWxlLmhhc0F1dG9PcnBoYW5zKCkgPyAxIDogc3RkOjptYXg8aW50PihzdHlsZS5vcnBoYW5zKCks
IDEpOworICAgIGF1dG8gbWluaW11bUxpbmVDb3VudCA9IHN0ZDo6bWluPHVuc2lnbmVkPihzdGQ6
Om1heCh3aWRvd3MsIG9ycGhhbnMpLCBsaW5lQ291bnQpOworICAgIGZsb3cudXBkYXRlTWluaW11
bVBhZ2VIZWlnaHQoMCwgTGF5b3V0VW5pdChpbmxpbmVDb250ZW50LmxpbmVzW21pbmltdW1MaW5l
Q291bnQgLSAxXS5yZWN0KCkubWF4WSgpKSk7Cit9CisKK3N0YXRpYyBSZWY8RGlzcGxheTo6SW5s
aW5lQ29udGVudD4gbWFrZUFkanVzdGVkQ29udGVudChjb25zdCBEaXNwbGF5OjpJbmxpbmVDb250
ZW50JiBpbmxpbmVDb250ZW50LCBWZWN0b3I8ZmxvYXQ+IGFkanVzdG1lbnRzKQoreworICAgIGF1
dG8gbW92ZVZlcnRpY2FsbHkgPSBbXShGbG9hdFJlY3QgcmVjdCwgZmxvYXQgb2Zmc2V0KSB7Cisg
ICAgICAgIHJlY3QubW92ZShGbG9hdFNpemUoMCwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBy
ZWN0OworICAgIH07CisKKyAgICBhdXRvIGFkanVzdGVkTGluZSA9IFsmXShjb25zdCBEaXNwbGF5
OjpMaW5lJiBsaW5lLCBmbG9hdCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxh
eTo6TGluZSB7CisgICAgICAgICAgICBtb3ZlVmVydGljYWxseShsaW5lLnJlY3QoKSwgb2Zmc2V0
KSwKKyAgICAgICAgICAgIG1vdmVWZXJ0aWNhbGx5KGxpbmUuc2Nyb2xsYWJsZU92ZXJmbG93KCks
IG9mZnNldCksCisgICAgICAgICAgICBtb3ZlVmVydGljYWxseShsaW5lLmlua092ZXJmbG93KCks
IG9mZnNldCksCisgICAgICAgICAgICBsaW5lLmJhc2VsaW5lKCksCisgICAgICAgICAgICBsaW5l
Lmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKQorICAgICAgICB9OworICAgIH07CisKKyAgICBh
dXRvIGFkanVzdGVkUnVuID0gWyZdKGNvbnN0IERpc3BsYXk6OlJ1biYgcnVuLCBmbG9hdCBvZmZz
ZXQpCisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxheTo6UnVuIHsKKyAgICAgICAgICAgIHJ1
bi5saW5lSW5kZXgoKSwKKyAgICAgICAgICAgIHJ1bi5sYXlvdXRCb3goKSwKKyAgICAgICAgICAg
IG1vdmVWZXJ0aWNhbGx5KHJ1bi5yZWN0KCksIG9mZnNldCksCisgICAgICAgICAgICBtb3ZlVmVy
dGljYWxseShydW4uaW5rT3ZlcmZsb3coKSwgb2Zmc2V0KSwKKyAgICAgICAgICAgIHJ1bi5leHBh
bnNpb24oKSwKKyAgICAgICAgICAgIHJ1bi50ZXh0Q29udGVudCgpCisgICAgICAgIH07CisgICAg
fTsKKworICAgIGF1dG8gYWRqdXN0ZWRDb250ZW50ID0gRGlzcGxheTo6SW5saW5lQ29udGVudDo6
Y3JlYXRlKCk7CisKKyAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBp
bmxpbmVDb250ZW50LmxpbmVzLnNpemUoKTsgKytsaW5lSW5kZXgpCisgICAgICAgIGFkanVzdGVk
Q29udGVudC0+bGluZXMuYXBwZW5kKGFkanVzdGVkTGluZShpbmxpbmVDb250ZW50LmxpbmVzW2xp
bmVJbmRleF0sIGFkanVzdG1lbnRzW2xpbmVJbmRleF0pKTsKKworICAgIGZvciAoYXV0byYgcnVu
IDogaW5saW5lQ29udGVudC5ydW5zKQorICAgICAgICBhZGp1c3RlZENvbnRlbnQtPnJ1bnMuYXBw
ZW5kKGFkanVzdGVkUnVuKHJ1biwgYWRqdXN0bWVudHNbcnVuLmxpbmVJbmRleCgpXSkpOworCisg
ICAgcmV0dXJuIGFkanVzdGVkQ29udGVudDsKK30KKworUmVmPERpc3BsYXk6OklubGluZUNvbnRl
bnQ+IGFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKERpc3BsYXk6OklubGluZUNvbnRl
bnQmIGlubGluZUNvbnRlbnQsIFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyAgICBWZWN0b3I8
U3RydXQ+IHN0cnV0czsKKyAgICBhdXRvIGxpbmVDb3VudCA9IGlubGluZUNvbnRlbnQubGluZXMu
c2l6ZSgpOworICAgIHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGZsb3csIGlubGluZUNvbnRlbnQs
IGxpbmVDb3VudCk7CisgICAgLy8gRmlyc3QgcGFzcyB3aXRoIG5vIHBhZ2luYXRpb24gb2Zmc2V0
PworICAgIGlmICghZmxvdy5wYWdlTG9naWNhbEhlaWdodEZvck9mZnNldCgwKSkKKyAgICAgICAg
cmV0dXJuIGlubGluZUNvbnRlbnQ7CisKKyAgICBhdXRvIHdpZG93cyA9IGZsb3cuc3R5bGUoKS5o
YXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8aW50PihmbG93LnN0eWxlKCkud2lkb3dzKCks
IDEpOworICAgIGF1dG8gb3JwaGFucyA9IGZsb3cuc3R5bGUoKS5oYXNBdXRvT3JwaGFucygpID8g
MSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgpLm9ycGhhbnMoKSwgMSk7CisgICAgUGFnaW5h
dGVkTGluZXMgbGluZXM7CisgICAgZm9yICh1bnNpZ25lZCBsaW5lSW5kZXggPSAwOyBsaW5lSW5k
ZXggPCBsaW5lQ291bnQ7ICsrbGluZUluZGV4KSB7CisgICAgICAgIGF1dG8gbGluZSA9IGNvbXB1
dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGlubGluZUNvbnRlbnQubGluZXMs
IGxpbmVJbmRleCwgc3RydXRzKTsKKyAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpOworICAgICAg
ICBhdXRvIHJlbWFpbmluZ0hlaWdodCA9IGZsb3cucGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRG
b3JPZmZzZXQobGluZS50b3AsIFJlbmRlckJsb2NrRmxvdzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7
CisgICAgICAgIGF1dG8gYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA9IGZsb3cucGFnZUxvZ2ljYWxI
ZWlnaHRGb3JPZmZzZXQobGluZS50b3ApID09IHJlbWFpbmluZ0hlaWdodDsKKyAgICAgICAgYXV0
byBsaW5lRG9lc05vdEZpdCA9IGxpbmUuaGVpZ2h0ID4gcmVtYWluaW5nSGVpZ2h0OworICAgICAg
ICBpZiAobGluZURvZXNOb3RGaXQgfHwgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgJiYgbGluZUlu
ZGV4KSkgeworICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtJbmRleCA9IGNvbXB1dGVMaW5lQnJl
YWtJbmRleChsaW5lSW5kZXgsIGxpbmVDb3VudCwgb3JwaGFucywgd2lkb3dzLCBzdHJ1dHMpOwor
ICAgICAgICAgICAgLy8gQXJlIHdlIHN0aWxsIGF0IHRoZSB0b3Agb2YgdGhlIGNvbHVtbi9wYWdl
PworICAgICAgICAgICAgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA9IGF0VGhlVG9wT2ZDb2x1bW5P
clBhZ2UgPyBsaW5lSW5kZXggPT0gbGluZUJyZWFrSW5kZXggOiBmYWxzZTsKKyAgICAgICAgICAg
IHNldFBhZ2VCcmVha0ZvckxpbmUobGluZUJyZWFrSW5kZXgsIGxpbmVzLCBmbG93LCBzdHJ1dHMs
IGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGxpbmVEb2VzTm90Rml0KTsKKyAgICAgICAgICAgIC8v
IFJlY29tcHV0ZSBsaW5lIHBvc2l0aW9ucyB0aGF0IHdlIGFscmVhZHkgdmlzaXRlZCBidXQgd2lk
b3cgYnJlYWsgcHVzaGVkIHRoZW0gdG8gYSBuZXcgcGFnZS4KKyAgICAgICAgICAgIGZvciAoYXV0
byBpID0gbGluZUJyZWFrSW5kZXg7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hdChpKSA9IGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGZs
b3csIGlubGluZUNvbnRlbnQubGluZXMsIGksIHN0cnV0cyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoc3RydXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGlubGluZUNvbnRlbnQ7
CisKKyAgICBhdXRvIGFkanVzdG1lbnRzID0gVmVjdG9yPGZsb2F0PihsaW5lQ291bnQsIDApOwor
ICAgIGZvciAoYXV0byYgc3RydXQgOiBzdHJ1dHMpIHsKKyAgICAgICAgZm9yIChhdXRvIGxpbmVJ
bmRleCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUluZGV4IDwgbGluZUNvdW50OyArK2xpbmVJbmRl
eCkKKyAgICAgICAgICAgIGFkanVzdG1lbnRzW2xpbmVJbmRleF0gKz0gc3RydXQub2Zmc2V0Owor
ICAgIH0KKworICAgIHJldHVybiBtYWtlQWRqdXN0ZWRDb250ZW50KGlubGluZUNvbnRlbnQsIGFk
anVzdG1lbnRzKTsKK30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJkYWQ5OTAxNDMz
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
KworI2luY2x1ZGUgIkRpc3BsYXlJbmxpbmVDb250ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVuZGVyQmxvY2tGbG93OworCituYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRp
b24geworICAgIAorUmVmPERpc3BsYXk6OklubGluZUNvbnRlbnQ+IGFkanVzdExpbmVQb3NpdGlv
bnNGb3JQYWdpbmF0aW9uKERpc3BsYXk6OklubGluZUNvbnRlbnQmLCBSZW5kZXJCbG9ja0Zsb3cm
KTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAKaW5kZXggZmFlNzM1Yjk0M2VkLi42NGJjYjlmNmIxMjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0zNzQzLDYgKzM3NDMs
OSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0TEZDTGluZXMoYm9vbCwgTGF5b3V0VW5p
dCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dAogCiAgICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0LmxheW91dCgpOwogCisgICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlv
dXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKSkKKyAgICAgICAgbGF5b3V0
Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmFkanVzdEZvclBhZ2luYXRpb24oKnRoaXMpOwor
CiAgICAgYXV0byBjb250ZW50SGVpZ2h0ID0gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0LmNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiAgICAgYXV0byBjb250ZW50Qm94VG9wID0gYm9y
ZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogICAgIGF1dG8gY29udGVudEJveEJvdHRvbSA9IGNvbnRl
bnRCb3hUb3AgKyBjb250ZW50SGVpZ2h0OwpAQCAtMzc2Niw2ICszNzY5LDE0IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogCiAgICAgYXV0byBzaW1wbGVMaW5lTGF5
b3V0ID0gbWFrZVJlZlB0cih0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpOwogCisgICAgYm9vbCBu
ZWVkc1RvUGFnaW5hdGVDb21wbGV4TGluZXMgPSBbJl0geworICAgICAgICBpZiAoc2ltcGxlTGlu
ZUxheW91dCAmJiBzaW1wbGVMaW5lTGF5b3V0LT5pc1BhZ2luYXRlZCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQoKSAmJiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+aXNQYWdpbmF0ZWQo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSgpOworCiAgICAgbV9saW5lTGF5b3V0ID0gbWFrZVVuaXF1ZTxDb21wbGV4TGluZUxheW91dD4o
KnRoaXMpOwogCiAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQpIHsKQEAgLTM3ODUsNyArMzc5Niw3
IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAgIGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiA9IGZhbHNlOwogICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxUb3A7
CiAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRvbTsKLSAgICBpZiAoc2ltcGxlTGlu
ZUxheW91dCAmJiBzaW1wbGVMaW5lTGF5b3V0LT5pc1BhZ2luYXRlZCgpKSB7CisgICAgaWYgKG5l
ZWRzVG9QYWdpbmF0ZUNvbXBsZXhMaW5lcykgewogICAgICAgICBQYWdpbmF0ZWRMYXlvdXRTdGF0
ZU1haW50YWluZXIgc3RhdGUoKnRoaXMpOwogICAgICAgICBjb21wbGV4TGluZUxheW91dC5sYXlv
dXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRM
b2dpY2FsQm90dG9tKTsKICAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHJlbGF5b3V0VG9Bdm9pZFdp
ZG93cy4K
</data>
<flag name="commit-queue"
          id="425082"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409384</attachid>
            <date>2020-09-22 11:45:25 -0700</date>
            <delta_ts>2020-09-22 21:39:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>lfc-pagination-5.patch</filename>
            <type>text/plain</type>
            <size>22967</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzA4NDcxNGYzZmEuLjAyMjY0ZTI3Zjg0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ0IEBACisyMDIwLTA5LTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQmFzaWMgcGFnaW5hdGlvbiBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU0NTEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY3NDgyNzIxPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnQgdGhlIFNpbXBsZSBMaW5lIExheW91dCBw
YWdpbmF0aW9uIGNvZGUgdG8gTEZDIGludGVncmF0aW9uIGxheWVyLgorICAgICAgICBQYWdpbmF0
aW9uIGlzIHRoZSBsYXN0IHJlbWFpbmluZyB1c2Ugb2YgU0xMIHNvIHRoaXMgcGF0Y2ggdHVybnMg
aXQgaW50byBkZWFkIGNvZGUuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlJbmxpbmVDb250ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpJbmxpbmVDb250ZW50OjpjcmVhdGUpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNhblVzZUZvcik6CisKKyAgICAgICAgVGhpcyBub3cg
dGhlIHNhbWUgYXMgU0xMIHRlc3QsIGNvdmVyaW5nIGFsbCBjYXNlcy4KKworICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbnRlbnRMb2dpY2FsSGVpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
OjphZGp1c3RGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpMaW5lTGF5b3V0OjplbnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCk6CisKKyAgICAgICAg
VGhpcyBpcyBmYWlybHkgZGlyZWN0IGNvcHkgb2YgdGhlIFNMTCBjb2RlLiBJdCBpcyBub3QgZnV0
dXJlIHByb29mIG9yIG90aGVyd2lzZSBncmVhdCBidXQgaXQgc2VydmVzIHRoZSBqb2IgZm9yIG5v
dy4KKworICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVM
YXlvdXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
Ojppc1BhZ2luYXRlZCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OmNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjb21wdXRlTGluZUJyZWFrSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNvbXB1dGVPZmZzZXRBZnRl
ckxpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6c2V0UGFn
ZUJyZWFrRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6dXBk
YXRlTWluaW11bVBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246Om1ha2VBZGp1c3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OmFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5SW5saW5lQ29udGVudC5o
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMRkNMaW5lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcyk6CisKIDIwMjAtMDktMjEgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJd
IG1lZGlhL21lZGlhLWNhbi1wbGF5LW1wMy5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcy
NzU2M2U1ZmI3Ny4uYjcxZGY3ZTJkMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ1Niw2ICsxNDU2
LDcgQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xh
eW91dEludGVncmF0aW9uQm94VHJlZS5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwCitsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25QYWdpbmF0aW9uLmNwcAogbGF5b3V0L2ludmFsaWRhdGlvbi9JbnZhbGlkYXRpb25Db250ZXh0
LmNwcAogbGF5b3V0L2ludmFsaWRhdGlvbi9JbnZhbGlkYXRpb25TdGF0ZS5jcHAKIGxheW91dC9s
YXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZGNjNWU3MWI4YjEuLjg5OTVhNWEzNDIxYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTU4MTYsNiArMTU4MTYsOCBAQAogCQlFNDJFNzZEQjFDN0FGNzc2MDBFMzYxNEQgLyog
U3R5bGVVcGRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVVcGRh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzMTA1QjcxNjc1MEYwQzAwREIy
RkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTm9kZVRyYXZlcnNhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTQzMTJBQjUyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFn
aW5hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJ
bnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDMxMkFCNzI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5h
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDM0M0QyMTIzOTI3NzgzMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzNDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVM
YXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg0MTUsNiArMjg0MTcsOCBAQAogCQlFNEZCNEIxRTIz
OTUzNTZGMDAzQzMzNkEgLyogaW50ZWdyYXRpb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUU0MzEyQUI1MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJ
bnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwICovLAorCQkJCUU0MzEyQUI3MjRCMzI2NTYwMDY3ODM0
OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLywKIAkJCQlFNDE4MDI1NjIzRDQ1
NEI1MDBGRkIwNzEgLyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmNwcCAqLywKIAkJCQlFNDE4
MDI1MzIzRDQ1NDlBMDBGRkIwNzEgLyogTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmggKi8sCiAJ
CQkJRTRBQkFCREUyMzYwODkzRDAwRkE0MzQ1IC8qIExheW91dEludGVncmF0aW9uTGluZUxheW91
dC5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheUlubGluZUNvbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJl
ZS9EaXNwbGF5SW5saW5lQ29udGVudC5oCmluZGV4IGE5YjQ1MGI5MzkzZS4uN2M5Njc0NGVjZDY4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlu
bGluZUNvbnRlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlz
cGxheUlubGluZUNvbnRlbnQuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgRGlzcGxheSB7CiAKIHN0cnVjdCBJbmxpbmVDb250ZW50IDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5saW5lQ29udGVudD4geworICAgIHN0YXRpYyBSZWY8SW5saW5lQ29udGVudD4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbmxpbmVDb250ZW50KTsgfQogICAgIH5J
bmxpbmVDb250ZW50KCk7CiAKICAgICB1c2luZyBSdW5zID0gVmVjdG9yPFJ1biwgND47CkBAIC00
Nyw2ICs0OCw5IEBAIHN0cnVjdCBJbmxpbmVDb250ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW5s
aW5lQ29udGVudD4gewogICAgIGNvbnN0IExpbmUmIGxpbmVGb3JSdW4oY29uc3QgUnVuJiBydW4p
IGNvbnN0IHsgcmV0dXJuIGxpbmVzW3J1bi5saW5lSW5kZXgoKV07IH0KICAgICBXVEY6Okl0ZXJh
dG9yUmFuZ2U8Y29uc3QgUnVuKj4gcnVuc0ZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0
OwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKworcHJpdmF0ZToKKyAgICBJbmxpbmVDb250ZW50
KCkgPSBkZWZhdWx0OwogfTsKIAogaW5saW5lIHZvaWQgSW5saW5lQ29udGVudDo6c2hyaW5rVG9G
aXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCA0ZDVkZGIwMTc5ZDQu
LjIxOTg1MTg1MDhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTM3
LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRl
ICJJbnZhbGlkYXRpb25TdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5b3V0
VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJC
bG9ja0Zsb3cuaCIKQEAgLTc0LDEzICs3NSw3IEBAIGJvb2wgTGluZUxheW91dDo6Y2FuVXNlRm9y
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgT3B0aW9uYWw8Ym9vbD4gY291bGRVc2VTCiAg
ICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoZmxvdyk7CiAgICAgfSk7
CiAKLSAgICBpZiAoIXBhc3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoZmxvdy5mcmFnbWVudGVkRmxvd1N0YXRlKCkgIT0gUmVuZGVyT2Jq
ZWN0OjpOb3RJbnNpZGVGcmFnbWVudGVkRmxvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHBhc3Nlc1NpbXBsZUxpbmVMYXlvdXRUZXN0Owog
fQogCiBib29sIExpbmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbG93LCBTdHlsZURpZmZlcmVuY2UgZGlmZikKQEAgLTIyNSw2ICsyMjAs
OSBAQCB2b2lkIExpbmVMYXlvdXQ6OnByZXBhcmVGbG9hdGluZ1N0YXRlKCkKIAogTGF5b3V0VW5p
dCBMaW5lTGF5b3V0Ojpjb250ZW50TG9naWNhbEhlaWdodCgpIGNvbnN0CiB7CisgICAgaWYgKG1f
cGFnaW5hdGVkSGVpZ2h0KQorICAgICAgICByZXR1cm4gKm1fcGFnaW5hdGVkSGVpZ2h0OworCiAg
ICAgYXV0byYgbGluZXMgPSBtX2lubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lcygpOwogICAgIHJl
dHVybiBMYXlvdXRVbml0IHsgbGluZXMubGFzdCgpLmxvZ2ljYWxCb3R0b20oKSAtIGxpbmVzLmZp
cnN0KCkubG9naWNhbFRvcCgpIH07CiB9CkBAIC0yNjMsNiArMjYxLDIxIEBAIExheW91dFVuaXQg
TGluZUxheW91dDo6bGFzdExpbmVCYXNlbGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIExheW91dDo6
dG9MYXlvdXRVbml0KGxhc3RMaW5lLmxvZ2ljYWxUb3AoKSArIGxhc3RMaW5lLmJhc2VsaW5lKCkp
OwogfQogCit2b2lkIExpbmVMYXlvdXQ6OmFkanVzdEZvclBhZ2luYXRpb24oUmVuZGVyQmxvY2tG
bG93JiBmbG93KQoreworICAgIEFTU0VSVCgmZmxvdyA9PSAmbV9mbG93KTsKKyAgICBhdXRvIHBh
Z2luZWRJbmxpbmVDb250ZW50ID0gYWRqdXN0TGluZVBvc2l0aW9uc0ZvclBhZ2luYXRpb24oKm1f
ZGlzcGxheUlubGluZUNvbnRlbnQsIGZsb3cpOworICAgIGlmIChwYWdpbmVkSW5saW5lQ29udGVu
dC5wdHIoKSA9PSBtX2Rpc3BsYXlJbmxpbmVDb250ZW50KSB7CisgICAgICAgIG1fcGFnaW5hdGVk
SGVpZ2h0ID0geyB9OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgbGluZXMg
PSBwYWdpbmVkSW5saW5lQ29udGVudC0+bGluZXM7CisgICAgbV9wYWdpbmF0ZWRIZWlnaHQgPSBM
YXlvdXRVbml0IHsgbGluZXMubGFzdCgpLnJlY3QoKS5tYXhZKCkgLSBsaW5lcy5maXJzdCgpLnJl
Y3QoKS55KCkgfTsKKworICAgIG1fZGlzcGxheUlubGluZUNvbnRlbnQgPSBXVEZNb3ZlKHBhZ2lu
ZWRJbmxpbmVDb250ZW50KTsKK30KKwogdm9pZCBMaW5lTGF5b3V0Ojpjb2xsZWN0T3ZlcmZsb3co
UmVuZGVyQmxvY2tGbG93JiBmbG93KQogewogICAgIEFTU0VSVCgmZmxvdyA9PSAmbV9mbG93KTsK
QEAgLTI3Nyw3ICsyOTAsNyBAQCB2b2lkIExpbmVMYXlvdXQ6OmNvbGxlY3RPdmVyZmxvdyhSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3cpCiBEaXNwbGF5OjpJbmxpbmVDb250ZW50JiBMaW5lTGF5b3V0Ojpl
bnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCgpCiB7CiAgICAgaWYgKCFtX2Rpc3BsYXlJbmxpbmVD
b250ZW50KQotICAgICAgICBtX2Rpc3BsYXlJbmxpbmVDb250ZW50ID0gYWRvcHRSZWYoKm5ldyBE
aXNwbGF5OjpJbmxpbmVDb250ZW50KTsKKyAgICAgICAgbV9kaXNwbGF5SW5saW5lQ29udGVudCA9
IERpc3BsYXk6OklubGluZUNvbnRlbnQ6OmNyZWF0ZSgpOwogICAgIHJldHVybiAqbV9kaXNwbGF5
SW5saW5lQ29udGVudDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5oCmluZGV4IDky
MDZhMmE0NmMzOS4uNTEzZWQ0ZDdmY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5o
CkBAIC02Nyw5ICs2NywxMSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBmaXJzdExpbmVCYXNl
bGluZSgpIGNvbnN0OwogICAgIExheW91dFVuaXQgbGFzdExpbmVCYXNlbGluZSgpIGNvbnN0Owog
CisgICAgdm9pZCBhZGp1c3RGb3JQYWdpbmF0aW9uKFJlbmRlckJsb2NrRmxvdyYpOwogICAgIHZv
aWQgY29sbGVjdE92ZXJmbG93KFJlbmRlckJsb2NrRmxvdyYpOwogCiAgICAgY29uc3QgRGlzcGxh
eTo6SW5saW5lQ29udGVudCogZGlzcGxheUlubGluZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlJbmxpbmVDb250ZW50LmdldCgpOyB9CisgICAgYm9vbCBpc1BhZ2luYXRlZCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9wYWdpbmF0ZWRIZWlnaHQ7IH0KIAogICAgIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICBib29sIGhpdFRl
c3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKTsKQEAgLTk1LDYgKzk3LDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXQ6OkxheW91dFN0YXRl
IG1fbGF5b3V0U3RhdGU7CiAgICAgTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIG1faW5s
aW5lRm9ybWF0dGluZ1N0YXRlOwogICAgIFJlZlB0cjxEaXNwbGF5OjpJbmxpbmVDb250ZW50PiBt
X2Rpc3BsYXlJbmxpbmVDb250ZW50OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG1fcGFnaW5h
dGVkSGVpZ2h0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjg2MmI0OGM4YTk1NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvblBhZ2luYXRpb24uY3BwCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0
aW9uLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dEludGVncmF0aW9u
IHsKKworc3RydWN0IFN0cnV0IHsKKyAgICB1bnNpZ25lZCBsaW5lQnJlYWs7CisgICAgZmxvYXQg
b2Zmc2V0OworfTsKKworc3RydWN0IFBhZ2luYXRlZExpbmUgeworICAgIExheW91dFVuaXQgdG9w
OworICAgIExheW91dFVuaXQgaGVpZ2h0OworfTsKK3VzaW5nIFBhZ2luYXRlZExpbmVzID0gVmVj
dG9yPFBhZ2luYXRlZExpbmUsIDIwPjsKKworc3RhdGljIFBhZ2luYXRlZExpbmUgY29tcHV0ZUxp
bmVUb3BBbmRCb3R0b21XaXRoT3ZlcmZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgRGlzcGxh
eTo6SW5saW5lQ29udGVudDo6TGluZXMmIGxpbmVzLCB1bnNpZ25lZCBsaW5lSW5kZXgsIFZlY3Rv
cjxTdHJ1dD4mIHN0cnV0cykKK3sKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IDA7CisgICAgZm9y
IChhdXRvJiBzdHJ1dCA6IHN0cnV0cykgeworICAgICAgICBpZiAoc3RydXQubGluZUJyZWFrID4g
bGluZUluZGV4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG9mZnNldCArPSBzdHJ1dC5v
ZmZzZXQ7CisgICAgfQorICAgIGF1dG8gb3ZlcmZsb3dSZWN0ID0gTGF5b3V0UmVjdChsaW5lc1ts
aW5lSW5kZXhdLmlua092ZXJmbG93KCkpOworICAgIHJldHVybiB7IG92ZXJmbG93UmVjdC55KCkg
KyBvZmZzZXQsIG92ZXJmbG93UmVjdC5oZWlnaHQoKSB9OworfQorCitzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZUxpbmVCcmVha0luZGV4KHVuc2lnbmVkIGJyZWFrQ2FuZGlkYXRlLCB1bnNpZ25lZCBs
aW5lQ291bnQsIGludCBvcnBoYW5zTmVlZGVkLCBpbnQgd2lkb3dzTmVlZGVkLAorICAgIGNvbnN0
IFZlY3RvcjxTdHJ1dD4mIHN0cnV0cykKK3sKKyAgICAvLyBGaXJzdCBsaW5lIGRvZXMgbm90IGZp
dCB0aGUgY3VycmVudCBwYWdlLgorICAgIGlmICghYnJlYWtDYW5kaWRhdGUpCisgICAgICAgIHJl
dHVybiBicmVha0NhbmRpZGF0ZTsKKyAgICAKKyAgICBpbnQgd2lkb3dzT25UaGVOZXh0UGFnZSA9
IGxpbmVDb3VudCAtIGJyZWFrQ2FuZGlkYXRlOworICAgIGlmICh3aWRvd3NOZWVkZWQgPD0gd2lk
b3dzT25UaGVOZXh0UGFnZSkKKyAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlkYXRlOworICAgIC8v
IE9ubHkgYnJlYWsgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgd2l0aCB3aWRvd3MuCisgICAgYXV0byBs
aW5lQnJlYWsgPSBzdGQ6Om1heDxpbnQ+KGxpbmVDb3VudCAtIHdpZG93c05lZWRlZCwgMSk7Cisg
ICAgaWYgKG9ycGhhbnNOZWVkZWQgPiBsaW5lQnJlYWspCisgICAgICAgIHJldHVybiBicmVha0Nh
bmRpZGF0ZTsKKyAgICAvLyBCcmVhayBvbiBjdXJyZW50IHBhZ2Ugb25seS4KKyAgICBpZiAoc3Ry
dXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGxpbmVCcmVhazsKKyAgICBBU1NFUlQoc3Ry
dXRzLmxhc3QoKS5saW5lQnJlYWsgKyAxIDwgbGluZUNvdW50KTsKKyAgICByZXR1cm4gc3RkOjpt
YXg8dW5zaWduZWQ+KHN0cnV0cy5sYXN0KCkubGluZUJyZWFrICsgMSwgbGluZUJyZWFrKTsKK30K
Kworc3RhdGljIExheW91dFVuaXQgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJyZWFrKExheW91dFVu
aXQgbGluZUJyZWFrUG9zaXRpb24sIGJvb2wgaXNGaXJzdExpbmUsIGJvb2wgYXRUaGVUb3BPZkNv
bHVtbk9yUGFnZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQoreworICAgIC8vIE5vIG9m
ZnNldCBmb3IgdG9wIG9mIHRoZSBwYWdlIGxpbmVzIHVubGVzcyB3aWRvd3MgcHVzaGVkIHRoZSBs
aW5lIGJyZWFrLgorICAgIExheW91dFVuaXQgb2Zmc2V0ID0gaXNGaXJzdExpbmUgPyBmbG93LmJv
cmRlckFuZFBhZGRpbmdCZWZvcmUoKSA6IDBfbHU7CisgICAgaWYgKGF0VGhlVG9wT2ZDb2x1bW5P
clBhZ2UpCisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgcmV0dXJuIG9mZnNldCArIGZsb3cu
cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZUJyZWFrUG9zaXRpb24sIFJl
bmRlckJsb2NrRmxvdzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7Cit9CisKK3N0YXRpYyB2b2lkIHNl
dFBhZ2VCcmVha0ZvckxpbmUodW5zaWduZWQgbGluZUJyZWFrSW5kZXgsIFBhZ2luYXRlZExpbmVz
JiBsaW5lcywgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBWZWN0b3I8U3RydXQ+JiBzdHJ1dHMsCisg
ICAgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBib29sIGxpbmVEb2VzTm90Rml0KQorewor
ICAgIGF1dG8gbGluZSA9IGxpbmVzLmF0KGxpbmVCcmVha0luZGV4KTsKKyAgICBhdXRvIHJlbWFp
bmluZ0xvZ2ljYWxIZWlnaHQgPSBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zm
c2V0KGxpbmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91bmRhcnkpOworICAg
IGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8gZmlyc3RMaW5lRG9lc05vdEZp
dCA9ICFsaW5lQnJlYWtJbmRleCAmJiBsaW5lLmhlaWdodCA8IGZsb3cucGFnZUxvZ2ljYWxIZWln
aHRGb3JPZmZzZXQobGluZS50b3ApOworICAgIGF1dG8gbW92ZU9ycGhhblRvTmV4dENvbHVtbiA9
IGxpbmVEb2VzTm90Rml0ICYmICFzdHlsZS5oYXNBdXRvT3JwaGFucygpICYmIHN0eWxlLm9ycGhh
bnMoKSA+IChzaG9ydClsaW5lQnJlYWtJbmRleDsKKyAgICBpZiAoZmlyc3RMaW5lRG9lc05vdEZp
dCB8fCBtb3ZlT3JwaGFuVG9OZXh0Q29sdW1uKSB7CisgICAgICAgIGF1dG8gZmlyc3RMaW5lID0g
bGluZXMuZmlyc3QoKTsKKyAgICAgICAgYXV0byBmaXJzdExpbmVVcHBlck92ZXJoYW5nID0gc3Rk
OjptYXgoTGF5b3V0VW5pdCgtZmlyc3RMaW5lLnRvcCksIDBfbHUpOworICAgICAgICBmbG93LnNl
dFBhZ2luYXRpb25TdHJ1dChsaW5lLnRvcCArIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgKyBmaXJz
dExpbmVVcHBlck92ZXJoYW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYXRU
aGVUb3BPZkNvbHVtbk9yUGFnZSkKKyAgICAgICAgZmxvdy5zZXRQYWdlQnJlYWsobGluZS50b3As
IGxpbmUuaGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGZsb3cuc2V0UGFnZUJyZWFrKGxpbmUu
dG9wLCBsaW5lLmhlaWdodCAtIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQpOworICAgIHN0cnV0cy5h
cHBlbmQoeyBsaW5lQnJlYWtJbmRleCwgY29tcHV0ZU9mZnNldEFmdGVyTGluZUJyZWFrKGxpbmVz
W2xpbmVCcmVha0luZGV4XS50b3AsICFsaW5lQnJlYWtJbmRleCwgYXRUaGVUb3BPZkNvbHVtbk9y
UGFnZSwgZmxvdykgfSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0
KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgRGlzcGxheTo6SW5saW5lQ29udGVudCYgaW5s
aW5lQ29udGVudCwgdW5zaWduZWQgbGluZUNvdW50KQoreworICAgIGF1dG8mIHN0eWxlID0gZmxv
dy5zdHlsZSgpOworICAgIGF1dG8gd2lkb3dzID0gc3R5bGUuaGFzQXV0b1dpZG93cygpID8gMSA6
IHN0ZDo6bWF4PGludD4oc3R5bGUud2lkb3dzKCksIDEpOworICAgIGF1dG8gb3JwaGFucyA9IHN0
eWxlLmhhc0F1dG9PcnBoYW5zKCkgPyAxIDogc3RkOjptYXg8aW50PihzdHlsZS5vcnBoYW5zKCks
IDEpOworICAgIGF1dG8gbWluaW11bUxpbmVDb3VudCA9IHN0ZDo6bWluPHVuc2lnbmVkPihzdGQ6
Om1heCh3aWRvd3MsIG9ycGhhbnMpLCBsaW5lQ291bnQpOworICAgIGZsb3cudXBkYXRlTWluaW11
bVBhZ2VIZWlnaHQoMCwgTGF5b3V0VW5pdChpbmxpbmVDb250ZW50LmxpbmVzW21pbmltdW1MaW5l
Q291bnQgLSAxXS5yZWN0KCkubWF4WSgpKSk7Cit9CisKK3N0YXRpYyBSZWY8RGlzcGxheTo6SW5s
aW5lQ29udGVudD4gbWFrZUFkanVzdGVkQ29udGVudChjb25zdCBEaXNwbGF5OjpJbmxpbmVDb250
ZW50JiBpbmxpbmVDb250ZW50LCBWZWN0b3I8ZmxvYXQ+IGFkanVzdG1lbnRzKQoreworICAgIGF1
dG8gbW92ZVZlcnRpY2FsbHkgPSBbXShGbG9hdFJlY3QgcmVjdCwgZmxvYXQgb2Zmc2V0KSB7Cisg
ICAgICAgIHJlY3QubW92ZShGbG9hdFNpemUoMCwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBy
ZWN0OworICAgIH07CisKKyAgICBhdXRvIGFkanVzdGVkTGluZSA9IFsmXShjb25zdCBEaXNwbGF5
OjpMaW5lJiBsaW5lLCBmbG9hdCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxh
eTo6TGluZSB7CisgICAgICAgICAgICBtb3ZlVmVydGljYWxseShsaW5lLnJlY3QoKSwgb2Zmc2V0
KSwKKyAgICAgICAgICAgIG1vdmVWZXJ0aWNhbGx5KGxpbmUuc2Nyb2xsYWJsZU92ZXJmbG93KCks
IG9mZnNldCksCisgICAgICAgICAgICBtb3ZlVmVydGljYWxseShsaW5lLmlua092ZXJmbG93KCks
IG9mZnNldCksCisgICAgICAgICAgICBsaW5lLmJhc2VsaW5lKCksCisgICAgICAgICAgICBsaW5l
Lmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKQorICAgICAgICB9OworICAgIH07CisKKyAgICBh
dXRvIGFkanVzdGVkUnVuID0gWyZdKGNvbnN0IERpc3BsYXk6OlJ1biYgcnVuLCBmbG9hdCBvZmZz
ZXQpCisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxheTo6UnVuIHsKKyAgICAgICAgICAgIHJ1
bi5saW5lSW5kZXgoKSwKKyAgICAgICAgICAgIHJ1bi5sYXlvdXRCb3goKSwKKyAgICAgICAgICAg
IG1vdmVWZXJ0aWNhbGx5KHJ1bi5yZWN0KCksIG9mZnNldCksCisgICAgICAgICAgICBtb3ZlVmVy
dGljYWxseShydW4uaW5rT3ZlcmZsb3coKSwgb2Zmc2V0KSwKKyAgICAgICAgICAgIHJ1bi5leHBh
bnNpb24oKSwKKyAgICAgICAgICAgIHJ1bi50ZXh0Q29udGVudCgpCisgICAgICAgIH07CisgICAg
fTsKKworICAgIGF1dG8gYWRqdXN0ZWRDb250ZW50ID0gRGlzcGxheTo6SW5saW5lQ29udGVudDo6
Y3JlYXRlKCk7CisKKyAgICBmb3IgKHNpemVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBp
bmxpbmVDb250ZW50LmxpbmVzLnNpemUoKTsgKytsaW5lSW5kZXgpCisgICAgICAgIGFkanVzdGVk
Q29udGVudC0+bGluZXMuYXBwZW5kKGFkanVzdGVkTGluZShpbmxpbmVDb250ZW50LmxpbmVzW2xp
bmVJbmRleF0sIGFkanVzdG1lbnRzW2xpbmVJbmRleF0pKTsKKworICAgIGZvciAoYXV0byYgcnVu
IDogaW5saW5lQ29udGVudC5ydW5zKQorICAgICAgICBhZGp1c3RlZENvbnRlbnQtPnJ1bnMuYXBw
ZW5kKGFkanVzdGVkUnVuKHJ1biwgYWRqdXN0bWVudHNbcnVuLmxpbmVJbmRleCgpXSkpOworCisg
ICAgcmV0dXJuIGFkanVzdGVkQ29udGVudDsKK30KKworUmVmPERpc3BsYXk6OklubGluZUNvbnRl
bnQ+IGFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKERpc3BsYXk6OklubGluZUNvbnRl
bnQmIGlubGluZUNvbnRlbnQsIFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyAgICBWZWN0b3I8
U3RydXQ+IHN0cnV0czsKKyAgICBhdXRvIGxpbmVDb3VudCA9IGlubGluZUNvbnRlbnQubGluZXMu
c2l6ZSgpOworICAgIHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGZsb3csIGlubGluZUNvbnRlbnQs
IGxpbmVDb3VudCk7CisgICAgLy8gRmlyc3QgcGFzcyB3aXRoIG5vIHBhZ2luYXRpb24gb2Zmc2V0
PworICAgIGlmICghZmxvdy5wYWdlTG9naWNhbEhlaWdodEZvck9mZnNldCgwKSkKKyAgICAgICAg
cmV0dXJuIGlubGluZUNvbnRlbnQ7CisKKyAgICBhdXRvIHdpZG93cyA9IGZsb3cuc3R5bGUoKS5o
YXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8aW50PihmbG93LnN0eWxlKCkud2lkb3dzKCks
IDEpOworICAgIGF1dG8gb3JwaGFucyA9IGZsb3cuc3R5bGUoKS5oYXNBdXRvT3JwaGFucygpID8g
MSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgpLm9ycGhhbnMoKSwgMSk7CisgICAgUGFnaW5h
dGVkTGluZXMgbGluZXM7CisgICAgZm9yICh1bnNpZ25lZCBsaW5lSW5kZXggPSAwOyBsaW5lSW5k
ZXggPCBsaW5lQ291bnQ7ICsrbGluZUluZGV4KSB7CisgICAgICAgIGF1dG8gbGluZSA9IGNvbXB1
dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGlubGluZUNvbnRlbnQubGluZXMs
IGxpbmVJbmRleCwgc3RydXRzKTsKKyAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpOworICAgICAg
ICBhdXRvIHJlbWFpbmluZ0hlaWdodCA9IGZsb3cucGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRG
b3JPZmZzZXQobGluZS50b3AsIFJlbmRlckJsb2NrRmxvdzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7
CisgICAgICAgIGF1dG8gYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA9IGZsb3cucGFnZUxvZ2ljYWxI
ZWlnaHRGb3JPZmZzZXQobGluZS50b3ApID09IHJlbWFpbmluZ0hlaWdodDsKKyAgICAgICAgYXV0
byBsaW5lRG9lc05vdEZpdCA9IGxpbmUuaGVpZ2h0ID4gcmVtYWluaW5nSGVpZ2h0OworICAgICAg
ICBpZiAobGluZURvZXNOb3RGaXQgfHwgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgJiYgbGluZUlu
ZGV4KSkgeworICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtJbmRleCA9IGNvbXB1dGVMaW5lQnJl
YWtJbmRleChsaW5lSW5kZXgsIGxpbmVDb3VudCwgb3JwaGFucywgd2lkb3dzLCBzdHJ1dHMpOwor
ICAgICAgICAgICAgLy8gQXJlIHdlIHN0aWxsIGF0IHRoZSB0b3Agb2YgdGhlIGNvbHVtbi9wYWdl
PworICAgICAgICAgICAgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA9IGF0VGhlVG9wT2ZDb2x1bW5P
clBhZ2UgPyBsaW5lSW5kZXggPT0gbGluZUJyZWFrSW5kZXggOiBmYWxzZTsKKyAgICAgICAgICAg
IHNldFBhZ2VCcmVha0ZvckxpbmUobGluZUJyZWFrSW5kZXgsIGxpbmVzLCBmbG93LCBzdHJ1dHMs
IGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGxpbmVEb2VzTm90Rml0KTsKKyAgICAgICAgICAgIC8v
IFJlY29tcHV0ZSBsaW5lIHBvc2l0aW9ucyB0aGF0IHdlIGFscmVhZHkgdmlzaXRlZCBidXQgd2lk
b3cgYnJlYWsgcHVzaGVkIHRoZW0gdG8gYSBuZXcgcGFnZS4KKyAgICAgICAgICAgIGZvciAoYXV0
byBpID0gbGluZUJyZWFrSW5kZXg7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hdChpKSA9IGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGZs
b3csIGlubGluZUNvbnRlbnQubGluZXMsIGksIHN0cnV0cyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoc3RydXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGlubGluZUNvbnRlbnQ7
CisKKyAgICBhdXRvIGFkanVzdG1lbnRzID0gVmVjdG9yPGZsb2F0PihsaW5lQ291bnQsIDApOwor
ICAgIGZvciAoYXV0byYgc3RydXQgOiBzdHJ1dHMpIHsKKyAgICAgICAgZm9yIChhdXRvIGxpbmVJ
bmRleCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUluZGV4IDwgbGluZUNvdW50OyArK2xpbmVJbmRl
eCkKKyAgICAgICAgICAgIGFkanVzdG1lbnRzW2xpbmVJbmRleF0gKz0gc3RydXQub2Zmc2V0Owor
ICAgIH0KKworICAgIHJldHVybiBtYWtlQWRqdXN0ZWRDb250ZW50KGlubGluZUNvbnRlbnQsIGFk
anVzdG1lbnRzKTsKK30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJkYWQ5OTAxNDMz
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
KworI2luY2x1ZGUgIkRpc3BsYXlJbmxpbmVDb250ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVuZGVyQmxvY2tGbG93OworCituYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRp
b24geworICAgIAorUmVmPERpc3BsYXk6OklubGluZUNvbnRlbnQ+IGFkanVzdExpbmVQb3NpdGlv
bnNGb3JQYWdpbmF0aW9uKERpc3BsYXk6OklubGluZUNvbnRlbnQmLCBSZW5kZXJCbG9ja0Zsb3cm
KTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAKaW5kZXggZmFlNzM1Yjk0M2VkLi43ZTZhMmE3ZWVjNGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0zNzQzLDYgKzM3NDMs
OSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0TEZDTGluZXMoYm9vbCwgTGF5b3V0VW5p
dCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dAogCiAgICAgbGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0LmxheW91dCgpOwogCisgICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlv
dXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKSkKKyAgICAgICAgbGF5b3V0
Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmFkanVzdEZvclBhZ2luYXRpb24oKnRoaXMpOwor
CiAgICAgYXV0byBjb250ZW50SGVpZ2h0ID0gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0LmNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiAgICAgYXV0byBjb250ZW50Qm94VG9wID0gYm9y
ZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogICAgIGF1dG8gY29udGVudEJveEJvdHRvbSA9IGNvbnRl
bnRCb3hUb3AgKyBjb250ZW50SGVpZ2h0OwpAQCAtMzc2Niw2ICszNzY5LDE2IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogCiAgICAgYXV0byBzaW1wbGVMaW5lTGF5
b3V0ID0gbWFrZVJlZlB0cih0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpOwogCisgICAgYm9vbCBu
ZWVkc1RvUGFnaW5hdGVDb21wbGV4TGluZXMgPSBbJl0geworICAgICAgICBpZiAoc2ltcGxlTGlu
ZUxheW91dCAmJiBzaW1wbGVMaW5lTGF5b3V0LT5pc1BhZ2luYXRlZCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisgICAg
ICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSAmJiBsYXlvdXRGb3Jt
YXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+aXNQYWdpbmF0ZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworI2VuZGlmCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KCk7CisKICAg
ICBtX2xpbmVMYXlvdXQgPSBtYWtlVW5pcXVlPENvbXBsZXhMaW5lTGF5b3V0PigqdGhpcyk7CiAK
ICAgICBpZiAoc2ltcGxlTGluZUxheW91dCkgewpAQCAtMzc4NSw3ICszNzk4LDcgQEAgdm9pZCBS
ZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcygpCiAgICAgYm9vbCByZWxheW91dENoaWxk
cmVuID0gZmFsc2U7CiAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcDsKICAgICBMYXlv
dXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tOwotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0ICYm
IHNpbXBsZUxpbmVMYXlvdXQtPmlzUGFnaW5hdGVkKCkpIHsKKyAgICBpZiAobmVlZHNUb1BhZ2lu
YXRlQ29tcGxleExpbmVzKSB7CiAgICAgICAgIFBhZ2luYXRlZExheW91dFN0YXRlTWFpbnRhaW5l
ciBzdGF0ZSgqdGhpcyk7CiAgICAgICAgIGNvbXBsZXhMaW5lTGF5b3V0LmxheW91dExpbmVCb3hl
cyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0
b20pOwogICAgICAgICAvLyBUaGlzIG1hdGNoZXMgcmVsYXlvdXRUb0F2b2lkV2lkb3dzLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>