<?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>167922</bug_id>
          
          <creation_ts>2017-02-06 21:52:35 -0800</creation_ts>
          <short_desc>Move platform-independent parts of ComplexTextController out of mac/ subfolder</short_desc>
          <delta_ts>2017-02-07 00:15:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>167566</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1273856</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-02-06 21:52:35 -0800</bug_when>
    <thetext>Move platform-independent parts of ComplexTextController out of mac/ subfolder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273859</commentid>
    <comment_count>1</comment_count>
      <attachid>300788</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-02-06 21:54:55 -0800</bug_when>
    <thetext>Created attachment 300788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273891</commentid>
    <comment_count>2</comment_count>
      <attachid>300788</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-07 00:15:37 -0800</bug_when>
    <thetext>Comment on attachment 300788
Patch

Clearing flags on attachment: 300788

Committed r211776: &lt;http://trac.webkit.org/changeset/211776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273892</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-07 00:15:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300788</attachid>
            <date>2017-02-06 21:54:55 -0800</date>
            <delta_ts>2017-02-07 00:15:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167922-20170206215232.patch</filename>
            <type>text/plain</type>
            <size>113573</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExNzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZmNjZkMzcwZTAyY2I1
MGIyYzgwZWE0MDllOTljZDlkZjljZmViMS4uYTZhZWQxM2Y0NjUwYTE0NTc1MGE5ZjVmMWUxODJk
ZDE3MTBiZGM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3LTAyLTA2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBwbGF0
Zm9ybS1pbmRlcGVuZGVudCBwYXJ0cyBvZiBDb21wbGV4VGV4dENvbnRyb2xsZXIgb3V0IG9mIG1h
Yy8gc3ViZm9sZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjc5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBKdXN0IGEgbWVjaGFuaWNhbCBnaXQgbXYsIGFuZCB1cGRhdGluZyB0aGUgWGNvZGUgcHJv
amVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZp
b3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaC4KKwogMjAxNy0wMi0wNiAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN5bWJvbHMgZXhwb3NlZCBvbiBj
cm9zcy1vcmlnaW4gV2luZG93IC8gTG9jYXRpb24gb2JqZWN0cyBzaG91bGQgYmUgY29uZmlndXJh
YmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggN2I3NTE2YTRkNTZhODI1MWVkMTExOGVkNDYzNmExMjE1OTNlOGJhOS4uNzg5OGUz
MzlhZmUzZGMwYjY0MmYwMzFkZjVjNDI5OGUzNDQ4ODdlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ2NCw4ICsxNDY0LDYg
QEAKIAkJMzdBQ0NGNjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0FDQ0U2MjBEQTJB
QTk2MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCAqLzsgfTsKIAkJMzdCMzI3RDMxRDE3
MDk2QTAwNTczN0ZBIC8qIFBJUFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdCMzI3RDIxRDE3MDk2QTAwNTczN0ZBIC8qIFBJUFNQSS5oICovOyB9
OwogCQkzN0JBQUU1ODE5ODBEMUREMDA1REZFNzEgLyogUHJvdGVjdGlvblNwYWNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0JBQUU1NzE5ODBEMURE
MDA1REZFNzEgLyogUHJvdGVjdGlvblNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzdDMjM2MTAxMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0MyMzYwRTEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcCAqLzsgfTsKLQkJMzdDMjM2MTExMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBsZXhUZXh0
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzdDMjM2MEYxMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3QzIzODIy
MTA5OEM4NDIwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QzIzODIwMTA5OEM4
NDIwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbSAqLzsgfTsKIAkJ
MzdENDU2RkQxQTlBNTBEODAwMzMzMEExIC8qIExvY2FsaXphYmxlU3RyaW5ncy5wbSBpbiBDb3B5
IFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdENDU2RkIxQTlB
NTBCNjAwMzMzMEExIC8qIExvY2FsaXphYmxlU3RyaW5ncy5wbSAqLzsgfTsKIAkJMzdERENEOTQx
Mzg0NEZENTAwMDhCNzkzIC8qIE1JTUVIZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdERENEOTIxMzg0NEZENTAwMDhCNzkzIC8qIE1JTUVI
ZWFkZXIuY3BwICovOyB9OwpAQCAtNTY4Miw2ICs1NjgwLDggQEAKIAkJQzI4MDgzNDAxQzZEQzI3
NTAwMTQ1MUI2IC8qIEpTRm9udEZhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzI4MDgzM0QxQzZEQzIyQzAwMTQ1MUI2IC8qIEpTRm9udEZhY2Uu
Y3BwICovOyB9OwogCQlDMjgwODM0MjFDNkRDOTZBMDAxNDUxQjYgLyogSlNGb250RmFjZUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjgw
ODM0MTFDNkRDOTZBMDAxNDUxQjYgLyogSlNGb250RmFjZUN1c3RvbS5jcHAgKi87IH07CiAJCUMy
RTFGNDNGMUQ2MjU0RTEwMDk0NjI1QyAvKiBCcmVha0xpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgxNjA5N0Q5MzAyMDA5NEM5RTQgLyog
QnJlYWtMaW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUMyRjRFNzhBMUU0NUJFQTEwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGNEU3
ODgxRTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi87IH07CisJ
CUMyRjRFNzhDMUU0NUMzRUYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjRFNzg5MUU0NUFF
REYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMzMwQTIyMzEzRUMxOTZCMDAwMEI0NUIg
LyogQ29sb3JDaG9vc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMzMwQTIyMTEzRUMxOTZCMDAwMEI0NUIgLyogQ29sb3JDaG9vc2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzMzRUU1QzQxNEZC
NDk2MTAwMDIwOTVBIC8qIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMzM0VFNUMyMTRGQjQ5NjEw
MDAyMDk1QSAvKiBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5jcHAgKi87IH07CiAJCUMz
M0VFNUM1MTRGQjQ5NjEwMDAyMDk1QSAvKiBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzMzRUU1QzMx
NEZCNDk2MTAwMDIwOTVBIC8qIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmggKi87IH07
CkBAIC04NzA3LDggKzg3MDcsNiBAQAogCQkzN0FDQ0U2MjBEQTJBQTk2MDA4OUU2MDIgLyogRm9u
dERlc2NyaXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
bnREZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3QjMyN0Qy
MUQxNzA5NkEwMDU3MzdGQSAvKiBQSVBTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUElQU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3QkFBRTU3MTk4
MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHJvdGVjdGlvblNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3QzIzNjBFMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzdDMjM2MEYxMDk3RUU3NzAw
RUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21wbGV4VGV4dENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzdDMjM4MjAxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29t
cGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3RDQ1NkZCMUE5QTUwQjYwMDMzMzBBMSAvKiBMb2NhbGl6YWJsZVN0cmluZ3MucG0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5wZXJsOyBwYXRoID0gTG9jYWxpemFibGVTdHJpbmdzLnBtOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzN0REQ0Q5MjEzODQ0RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNSU1FSGVhZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNzE0LDYgKzEzNzEyLDggQEAKIAkJQzI4MDgzM0Qx
QzZEQzIyQzAwMTQ1MUI2IC8qIEpTRm9udEZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyODA4MzNFMUM2REMyMkMwMDE0NTFCNiAvKiBKU0ZvbnRGYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRm9udEZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzI4MDgzNDExQzZEQzk2QTAwMTQ1MUI2IC8qIEpTRm9udEZhY2VDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGb250RmFjZUN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRjRFNzg4MUU0NUFFREYwMDZENzEw
NSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29tcGxleFRleHRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzJGNEU3ODkxRTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV4VGV4dENvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzMzMEEyMjExM0VDMTk2QjAw
MDBCNDVCIC8qIENvbG9yQ2hvb3Nlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb2xvckNob29zZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzMzRUU1QzIx
NEZCNDk2MTAwMDIwOTVBIC8qIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VDbGlja2FibGVXaXRoS2V5SW5w
dXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzMzRUU1QzMxNEZCNDk2
MTAwMDIwOTVBIC8qIEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VDbGlja2FibGVXaXRoS2V5SW5wdXRUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTg4Nyw4ICsyMTg4Nyw2IEBACiAJCQljaGls
ZHJlbiA9ICgKIAkJCQlFREUzQTRGRjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCAqLywK
IAkJCQlCMjc1MzU0QTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3JNYWMubW0gKi8sCi0JCQkJMzdD
MjM2MEUxMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCi0J
CQkJMzdDMjM2MEYxMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICov
LAogCQkJCTM3QzIzODIwMTA5OEM4NDIwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXJD
b3JlVGV4dC5tbSAqLywKIAkJCQk0OUFGMkQ2QjE0NDM1RDIxMDAxNkE3ODQgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9yTWFjLmNwcCAqLywKIAkJCQkyREU3MDAyMjE5MkZFODJBMDBCMDk3NUMgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9yTWFjLmggKi8sCkBAIC0yMTkyMyw2ICsyMTkyMSw4IEBACiAJ
CUIyQTAxNTkxMEFGNkNENTMwMDZCQ0UwRSAvKiBncmFwaGljcyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzJGNEU3ODgxRTQ1QUVERjAwNkQ3MTA1IC8q
IENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCisJCQkJQzJGNEU3ODkxRTQ1QUVERjAwNkQ3
MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAogCQkJCTA3NkYwRDA4MTJCODE5Mjcw
MEMyNkFBNCAvKiBhdmZvdW5kYXRpb24gKi8sCiAJCQkJNDk5QjNFQzAxMjhDQ0MxODAwRTcyNkMy
IC8qIGNhICovLAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywKQEAgLTI1
MTcyLDYgKzI1MTcyLDcgQEAKIAkJCQlGRDMxNjAzRTEyQjAyNjc2MDBDMUEzNTkgLyogQW5hbHlz
ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyog
QU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3MTIxOUMw
NDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzJG
NEU3OEMxRTQ1QzNFRjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTMxOTg0ODAxMUExRDgxN0IwMEExMzMxOCAvKiBBbmltYXRp
b25FdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTQzNCw3ICsyNTQzNSw2IEBACiAJCQkJRTFG
RTEzNzUxODQwMkE2NzAwODkyRjEzIC8qIENvbW1vbkNyeXB0b1V0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2MEYzMkIxREZCQjEwNzAwNDE2RDZDIC8qIENvbW1vblZNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QzkzRjM0QTFBQTZCQTVFMDBBOThCQUIgLyogQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkzN0MyMzYxMTEwOTdFRTc3MDBFRjlGNzIg
LyogQ29tcGxleFRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFC
Q0ZCRDk1MDBFMzRFRjcgLyogQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29t
cG9zaXRlQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI5MzM4LDcgKzI5MzM4LDYgQEAK
IAkJCQlFMUZFMTM3NDE4NDAyQTY3MDA4OTJGMTMgLyogQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjBGMzJDMURGQkIxMEIwMDQxNkQ2QyAvKiBDb21tb25W
TS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzkzRjM0OTFBQTZCQTVFMDBBOThCQUIgLyogQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3QzIzNjEwMTA5
N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzdDMjM4MjIxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckNv
cmVUZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0RkExODcxQkNBOTE1NjAwOTFCNkVGIC8q
IENvbXBvc2VkVHJlZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNkZFMTE1MEU2
RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMTMwOCw2ICszMTMwNyw3IEBACiAJCQkJRDA2QzBEOTAwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJl
bW92ZUZvcm1hdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMDQwOTlFNjQ5
MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTA2MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29t
bWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMkY0RTc4QTFFNDVCRUExMDA2RDcxMDUgLyog
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRDQ5NENDMUE4
NkVCMUQwMDBBODdFQyAvKiBSZW5kZXJBdHRhY2htZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRUE0ODVGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCbG9jay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzEwRDc2NzE3RDhFRTZFMDA1RTI2MjYgLyogUmVuZGVyQmxvY2tGbG93LmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ5ZjNjYWNkYzM0
YjA0YTQxODFmN2IyOTAwN2I1ODM2ODNiZGNjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTAs
MCArMSw4MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUg
IkNoYXJhY3RlclByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGV4dC5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlIDx1bmljb2RlL3Vicmsu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1
ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRMYXlvdXQgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBib29sIGlzTmVlZGVkKFJl
bmRlclRleHQmIHRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQorICAgIHsKKyAgICAgICAg
VGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LnN0
eWxlKCkpOworICAgICAgICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnRDYXNjYWRl
OjpDb21wbGV4OworICAgIH0KKworICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCYgdGV4dCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHhQb3MpCisgICAgICAgIDogbV9mb250KGZvbnQp
CisgICAgICAgICwgbV9ydW4oY29uc3RydWN0VGV4dFJ1bih0ZXh0LCB4UG9zKSkKKyAgICAgICAg
LCBtX2NvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxDb21wbGV4VGV4dENvbnRyb2xsZXI+KG1f
Zm9udCwgbV9ydW4sIHRydWUpKQorICAgIHsKKyAgICB9CisKKyAgICBmbG9hdCB3aWR0aCh1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzKQorICAgIHsKKyAgICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hv
bGVHbHlwaHMsIGZhbGxiYWNrRm9udHMpOworICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1f
Y29udHJvbGxlci0+cnVuV2lkdGhTb0ZhcigpOworICAgICAgICBpZiAobV9mb250LndvcmRTcGFj
aW5nKCkgJiYgZnJvbSAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zyb21dKSkK
KyAgICAgICAgICAgIGJlZm9yZVdpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygpOworICAgICAg
ICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJvbSArIGxlbiwgMCwgQnlXaG9sZUdseXBocywgZmFs
bGJhY2tGb250cyk7CisgICAgICAgIGZsb2F0IGFmdGVyV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1
bldpZHRoU29GYXIoKTsKKyAgICAgICAgcmV0dXJuIGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aDsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihS
ZW5kZXJUZXh0JiB0ZXh0LCBmbG9hdCB4UG9zKQorICAgIHsKKyAgICAgICAgVGV4dFJ1biBydW4g
PSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LnN0eWxlKCkpOworICAg
ICAgICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aCh0ZXh0LnRleHRMZW5ndGgoKSk7CisgICAgICAg
IEFTU0VSVChydW4uY2hhcmFjdGVyc0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CisgICAgICAg
IHJ1bi5zZXRYUG9zKHhQb3MpOworICAgICAgICByZXR1cm4gcnVuOworICAgIH0KKworICAgIC8v
IENvbXBsZXhUZXh0Q29udHJvbGxlciBoYXMgb25seSByZWZlcmVuY2VzIHRvIGl0cyBGb250Q2Fz
Y2FkZSBhbmQgVGV4dFJ1biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgorICAgIEZv
bnRDYXNjYWRlIG1fZm9udDsKKyAgICBUZXh0UnVuIG1fcnVuOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDb21wbGV4VGV4dENvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKK307CisKK3ZvaWQgVGV4dExh
eW91dERlbGV0ZXI6Om9wZXJhdG9yKCkoVGV4dExheW91dCogbGF5b3V0KSBjb25zdAoreworICAg
IGRlbGV0ZSBsYXlvdXQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxUZXh0TGF5b3V0LCBUZXh0TGF5
b3V0RGVsZXRlcj4gRm9udENhc2NhZGU6OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0JiB0ZXh0LCBm
bG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3QKK3sKKyAgICBpZiAoIWNv
bGxhcHNlV2hpdGVTcGFjZSB8fCAhVGV4dExheW91dDo6aXNOZWVkZWQodGV4dCwgKnRoaXMpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFRleHRM
YXlvdXQsIFRleHRMYXlvdXREZWxldGVyPihuZXcgVGV4dExheW91dCh0ZXh0LCAqdGhpcywgeFBv
cykpOworfQorCitmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFj
a0ZvbnRzKQoreworICAgIHJldHVybiBsYXlvdXQud2lkdGgoZnJvbSwgbGVuLCBmYWxsYmFja0Zv
bnRzKTsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbXB1dGVFeHBhbnNpb25P
cHBvcnR1bml0eSgpCit7CisgICAgaWYgKCFtX2V4cGFuc2lvbikKKyAgICAgICAgbV9leHBhbnNp
b25QZXJPcHBvcnR1bml0eSA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBtX3J1bi5leHBhbnNp
b25CZWhhdmlvcigpKS5maXJzdDsKKworICAgICAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQpCisgICAgICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IG1fZXhwYW5z
aW9uIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAgICB9Cit9CisKK0NvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24s
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNp
cykKKyAgICA6IG1fZmFsbGJhY2tGb250cyhmYWxsYmFja0ZvbnRzKQorICAgICwgbV9mb250KGZv
bnQpCisgICAgLCBtX3J1bihydW4pCisgICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCisgICAgLCBt
X2V4cGFuc2lvbihydW4uZXhwYW5zaW9uKCkpCisgICAgLCBtX21heVVzZU5hdHVyYWxXcml0aW5n
RGlyZWN0aW9uKG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uKQorICAgICwgbV9mb3JUZXh0
RW1waGFzaXMoZm9yVGV4dEVtcGhhc2lzKQoreworICAgIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1
bml0eSgpOworCisgICAgY29sbGVjdENvbXBsZXhUZXh0UnVucygpOworCisgICAgZmluaXNoQ29u
c3RydWN0aW9uKCk7Cit9CisKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250
cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIFZlY3Rv
cjxSZWY8Q29tcGxleFRleHRSdW4+PiYgcnVucykKKyAgICA6IG1fZm9udChmb250KQorICAgICwg
bV9ydW4ocnVuKQorICAgICwgbV9lbmQocnVuLmxlbmd0aCgpKQorICAgICwgbV9leHBhbnNpb24o
cnVuLmV4cGFuc2lvbigpKQoreworICAgIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSgpOwor
CisgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKQorICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5h
cHBlbmQocnVuLnB0cigpKTsKKworICAgIGZpbmlzaENvbnN0cnVjdGlvbigpOworfQorCit2b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6ZmluaXNoQ29uc3RydWN0aW9uKCkKK3sKKyAgICBhZGp1
c3RHbHlwaHNBbmRBZHZhbmNlcygpOworCisgICAgaWYgKCFtX2lzTFRST25seSkgeworICAgICAg
ICBtX3J1bkluZGljZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NvbXBsZXhUZXh0UnVucy5z
aXplKCkpOworCisgICAgICAgIG1fZ2x5cGhDb3VudEZyb21TdGFydFRvSW5kZXgucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX2NvbXBsZXhUZXh0UnVucy5zaXplKCkpOworICAgICAgICB1bnNpZ25l
ZCBnbHlwaENvdW50U29GYXIgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9jb21wbGV4VGV4dFJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIG1fZ2x5cGhDb3Vu
dEZyb21TdGFydFRvSW5kZXgudW5jaGVja2VkQXBwZW5kKGdseXBoQ291bnRTb0Zhcik7CisgICAg
ICAgICAgICBnbHlwaENvdW50U29GYXIgKz0gbV9jb21wbGV4VGV4dFJ1bnNbaV0tPmdseXBoQ291
bnQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCBoLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KQoreworICAgIGlmIChoID49IG1fdG90YWxXaWR0aCkKKyAgICAgICAgcmV0dXJuIG1fcnVuLmx0
cigpID8gbV9lbmQgOiAwOworCisgICAgaWYgKGggPCAwKQorICAgICAgICByZXR1cm4gbV9ydW4u
bHRyKCkgPyAwIDogbV9lbmQ7CisKKyAgICBmbG9hdCB4ID0gaDsKKworICAgIHNpemVfdCBydW5D
b3VudCA9IG1fY29tcGxleFRleHRSdW5zLnNpemUoKTsKKyAgICB1bnNpZ25lZCBvZmZzZXRJbnRv
QWRqdXN0ZWRHbHlwaHMgPSAwOworCisgICAgZm9yIChzaXplX3QgciA9IDA7IHIgPCBydW5Db3Vu
dDsgKytyKSB7CisgICAgICAgIGNvbnN0IENvbXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1biA9
ICptX2NvbXBsZXhUZXh0UnVuc1tyXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsgKytqKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IG9mZnNldEludG9BZGp1c3RlZEdseXBocyArIGo7CisgICAgICAgICAgICBmbG9h
dCBhZGp1c3RlZEFkdmFuY2UgPSBtX2FkanVzdGVkQmFzZUFkdmFuY2VzW2luZGV4XS53aWR0aCgp
OworICAgICAgICAgICAgaWYgKHggPCBhZGp1c3RlZEFkdmFuY2UpIHsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBoaXRHbHlwaFN0YXJ0ID0gY29tcGxleFRleHRSdW4uaW5kZXhBdChqKTsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRHbHlwaEVuZDsKKyAgICAgICAgICAgICAgICBpZiAo
bV9ydW4ubHRyKCkpCisgICAgICAgICAgICAgICAgICAgIGhpdEdseXBoRW5kID0gc3RkOjptYXgo
aGl0R2x5cGhTdGFydCwgaiArIDEgPCBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCkgPyBjb21w
bGV4VGV4dFJ1bi5pbmRleEF0KGogKyAxKSA6IGNvbXBsZXhUZXh0UnVuLmluZGV4RW5kKCkpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaGl0R2x5cGhFbmQgPSBz
dGQ6Om1heChoaXRHbHlwaFN0YXJ0LCBqID4gMCA/IGNvbXBsZXhUZXh0UnVuLmluZGV4QXQoaiAt
IDEpIDogY29tcGxleFRleHRSdW4uaW5kZXhFbmQoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSW5zdGVhZCBvZiBkaXZpZGluZyB0aGUgZ2x5cGgncyBhZHZhbmNlIGVxdWFsbHkgYmV0
d2VlbiB0aGUgY2hhcmFjdGVycywgdGhpcworICAgICAgICAgICAgICAgIC8vIGNvdWxkIHVzZSB0
aGUgZ2x5cGgncyAibGlnYXR1cmUgY2FyZXRzIi4gVGhpcyBpcyBhdmFpbGFibGUgaW4gQ29yZVRl
eHQgdmlhIENURm9udEdldExpZ2F0dXJlQ2FyZXRQb3NpdGlvbnMoKS4KKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBoaXRJbmRleCA9IGhpdEdseXBoU3RhcnQgKyAoaGl0R2x5cGhFbmQgLSBoaXRH
bHlwaFN0YXJ0KSAqIChtX3J1bi5sdHIoKSA/IHggLyBhZGp1c3RlZEFkdmFuY2UgOiAxIC0geCAv
IGFkanVzdGVkQWR2YW5jZSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3Ro
ID0gY29tcGxleFRleHRSdW4uc3RyaW5nTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgVUJyZWFr
SXRlcmF0b3IqIGN1cnNvclBvc2l0aW9uSXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9y
KFN0cmluZ1ZpZXcoY29tcGxleFRleHRSdW4uY2hhcmFjdGVycygpLCBzdHJpbmdMZW5ndGgpKTsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjbHVzdGVyU3RhcnQ7CisgICAgICAgICAgICAgICAg
aWYgKHVicmtfaXNCb3VuZGFyeShjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCkpCisg
ICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTdGFydCA9IGhpdEluZGV4OworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnQgcHJlY2VlZGluZyA9IHVicmtfcHJl
Y2VkaW5nKGN1cnNvclBvc2l0aW9uSXRlcmF0b3IsIGhpdEluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgY2x1c3RlclN0YXJ0ID0gcHJlY2VlZGluZyA9PSBVQlJLX0RPTkUgPyAwIDogcHJlY2Vl
ZGluZzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxleFRleHRSdW4u
c3RyaW5nTG9jYXRpb24oKSArIGNsdXN0ZXJTdGFydDsKKworICAgICAgICAgICAgICAgIGludCBm
b2xsb3dpbmcgPSB1YnJrX2ZvbGxvd2luZyhjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRl
eCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2x1c3RlckVuZCA9IGZvbGxvd2luZyA9PSBV
QlJLX0RPTkUgPyBzdHJpbmdMZW5ndGggOiBmb2xsb3dpbmc7CisKKyAgICAgICAgICAgICAgICBm
bG9hdCBjbHVzdGVyV2lkdGg7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBzZWFyY2gg
c3RvcHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgY29tcGxleFRleHRSdW4uIEluIHRoZW9yeSwgaXQg
c2hvdWxkIGdvIG9uIGludG8gbmVpZ2hib3JpbmcgQ29tcGxleFRleHRSdW5zCisgICAgICAgICAg
ICAgICAgLy8gZGVyaXZlZCBmcm9tIHRoZSBzYW1lIENUTGluZS4gSW4gcHJhY3RpY2UsIHdlIGRv
IG5vdCBleHBlY3QgdGhlcmUgdG8gYmUgbW9yZSB0aGFuIG9uZSBDVFJ1biBpbiBhIENUTGluZSwg
YXMgbm8KKyAgICAgICAgICAgICAgICAvLyByZW9yZGVyaW5nIGFuZCBubyBmb250IGZhbGxiYWNr
IHNob3VsZCBvY2N1ciB3aXRoaW4gYSBDVExpbmUuCisgICAgICAgICAgICAgICAgaWYgKGNsdXN0
ZXJFbmQgLSBjbHVzdGVyU3RhcnQgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJX
aWR0aCA9IGFkanVzdGVkQWR2YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGopIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0R2x5cGhCZWZvcmVDbHVzdGVyID0g
aiAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGxleFRleHRSdW4uaW5k
ZXhBdChmaXJzdEdseXBoQmVmb3JlQ2x1c3RlcikgPj0gY2x1c3RlclN0YXJ0ICYmIGNvbXBsZXhU
ZXh0UnVuLmluZGV4QXQoZmlyc3RHbHlwaEJlZm9yZUNsdXN0ZXIpIDwgY2x1c3RlckVuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoID0gbV9hZGp1c3RlZEJhc2VB
ZHZhbmNlc1tvZmZzZXRJbnRvQWRqdXN0ZWRHbHlwaHMgKyBmaXJzdEdseXBoQmVmb3JlQ2x1c3Rl
cl0ud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyV2lkdGggKz0g
d2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCArPSB3aWR0aDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0R2x5cGhCZWZvcmVDbHVzdGVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdEdseXBoQmVmb3JlQ2x1c3Rlci0tOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZp
cnN0R2x5cGhBZnRlckNsdXN0ZXIgPSBqICsgMTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KGZpcnN0R2x5cGhBZnRlckNsdXN0ZXIgPCBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCkgJiYg
Y29tcGxleFRleHRSdW4uaW5kZXhBdChmaXJzdEdseXBoQWZ0ZXJDbHVzdGVyKSA+PSBjbHVzdGVy
U3RhcnQgJiYgY29tcGxleFRleHRSdW4uaW5kZXhBdChmaXJzdEdseXBoQWZ0ZXJDbHVzdGVyKSA8
IGNsdXN0ZXJFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJXaWR0aCArPSBt
X2FkanVzdGVkQmFzZUFkdmFuY2VzW29mZnNldEludG9BZGp1c3RlZEdseXBocyArIGZpcnN0R2x5
cGhBZnRlckNsdXN0ZXJdLndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEds
eXBoQWZ0ZXJDbHVzdGVyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjbHVzdGVyV2lkdGggPSBhZGp1c3RlZEFk
dmFuY2UgLyAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KTsKKyAgICAgICAgICAgICAgICAg
ICAgeCAtPSAgY2x1c3RlcldpZHRoICogKG1fcnVuLmx0cigpID8gaGl0SW5kZXggLSBoaXRHbHlw
aFN0YXJ0IDogaGl0R2x5cGhFbmQgLSBoaXRJbmRleCAtIDEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoeCA8PSBjbHVzdGVyV2lkdGggLyAyKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKSArIChtX3J1bi5s
dHIoKSA/IGNsdXN0ZXJTdGFydCA6IGNsdXN0ZXJFbmQpOworICAgICAgICAgICAgICAgIHJldHVy
biBjb21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigpICsgKG1fcnVuLmx0cigpID8gY2x1c3Rl
ckVuZCA6IGNsdXN0ZXJTdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4IC09IGFk
anVzdGVkQWR2YW5jZTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXRJbnRvQWRqdXN0ZWRHbHlw
aHMgKz0gY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNv
bnNpZGVyIHJlaW1wbGVtZW50aW5nIHRoaXMgZnVuY3Rpb24gdXNpbmcgSUNVIHRvIGFkdmFuY2Ug
YnkgZ3JhcGhlbWUuCisvLyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IGNvbnNpZGVy
cyBleHBsaWNpdGx5IGVtb2ppIHNlcXVlbmNlcyBhbmQgZW1vamkgdmFyaWF0aW9ucy4KK3N0YXRp
YyBib29sIGFkdmFuY2VCeUNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiYg
aXRlcmF0b3IsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyMzImIGJhc2VDaGFyYWN0ZXIsIHVuc2ln
bmVkJiBtYXJrQ291bnQpCit7CisgICAgQVNTRVJUKGl0ZXJhdG9yIDwgZW5kKTsKKworICAgIG1h
cmtDb3VudCA9IDA7CisKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCByZW1haW5p
bmdDaGFyYWN0ZXJzID0gZW5kIC0gaXRlcmF0b3I7CisgICAgVTE2X05FWFQoaXRlcmF0b3IsIGks
IHJlbWFpbmluZ0NoYXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXIpOworICAgIGl0ZXJhdG9yID0gaXRl
cmF0b3IgKyBpOworICAgIGlmIChVX0lTX1NVUlJPR0FURShiYXNlQ2hhcmFjdGVyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ29uc3VtZSBtYXJrcy4KKyAgICBib29sIHNhd0Vt
b2ppR3JvdXBDYW5kaWRhdGUgPSBpc0Vtb2ppR3JvdXBDYW5kaWRhdGUoYmFzZUNoYXJhY3Rlcik7
CisgICAgYm9vbCBzYXdKb2luZXIgPSBmYWxzZTsKKyAgICB3aGlsZSAoaXRlcmF0b3IgPCBlbmQp
IHsKKyAgICAgICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOworICAgICAgICB1bnNpZ25lZCBtYXJr
TGVuZ3RoID0gMDsKKyAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IGZhbHNlOworICAgICAg
ICBBU1NFUlQoZW5kID49IGl0ZXJhdG9yKTsKKyAgICAgICAgVTE2X05FWFQoaXRlcmF0b3IsIG1h
cmtMZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQgLSBpdGVyYXRvciksIG5leHRDaGFy
YWN0ZXIpOworCisgICAgICAgIGlmIChpc1ZhcmlhdGlvblNlbGVjdG9yKG5leHRDaGFyYWN0ZXIp
IHx8IGlzRW1vamlGaXR6cGF0cmlja01vZGlmaWVyKG5leHRDaGFyYWN0ZXIpKQorICAgICAgICAg
ICAgc2hvdWxkQ29udGludWUgPSB0cnVlOworCisgICAgICAgIGlmIChzYXdKb2luZXIgJiYgaXNF
bW9qaUdyb3VwQ2FuZGlkYXRlKG5leHRDaGFyYWN0ZXIpKQorICAgICAgICAgICAgc2hvdWxkQ29u
dGludWUgPSB0cnVlOworCisgICAgICAgIHNhd0pvaW5lciA9IGZhbHNlOworICAgICAgICBpZiAo
c2F3RW1vamlHcm91cENhbmRpZGF0ZSAmJiBuZXh0Q2hhcmFjdGVyID09IHplcm9XaWR0aEpvaW5l
cikgeworICAgICAgICAgICAgc2F3Sm9pbmVyID0gdHJ1ZTsKKyAgICAgICAgICAgIHNob3VsZENv
bnRpbnVlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFzaG91bGRD
b250aW51ZSAmJiAhKFVfR0VUX0dDX01BU0sobmV4dENoYXJhY3RlcikgJiBVX0dDX01fTUFTSykp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBtYXJrQ291bnQgKz0gbWFya0xlbmd0aDsK
KyAgICAgICAgaXRlcmF0b3IgKz0gbWFya0xlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gRklYTUU6IENhcGl0YWxpemF0aW9uIGlzIGxhbmd1YWdlLWRlcGVuZGVudCBh
bmQgY29udGV4dC1kZXBlbmRlbnQgYW5kIHNob3VsZCBvcGVyYXRlIG9uIGdyYXBoZW1lIGNsdXN0
ZXJzIGluc3RlYWQgb2YgY29kZXBvaW50cy4KK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxV
Q2hhcjMyPiBjYXBpdGFsaXplZChVQ2hhcjMyIGJhc2VDaGFyYWN0ZXIpCit7CisgICAgaWYgKFVf
R0VUX0dDX01BU0soYmFzZUNoYXJhY3RlcikgJiBVX0dDX01fTUFTSykKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIFVDaGFyMzIgdXBwZXJjYXNlQ2hhcmFjdGVyID0gdV90b3Vw
cGVyKGJhc2VDaGFyYWN0ZXIpOworICAgIEFTU0VSVCh1cHBlcmNhc2VDaGFyYWN0ZXIgPT0gYmFz
ZUNoYXJhY3RlciB8fCAoVV9JU19CTVAoYmFzZUNoYXJhY3RlcikgPT0gVV9JU19CTVAodXBwZXJj
YXNlQ2hhcmFjdGVyKSkpOworICAgIGlmICh1cHBlcmNhc2VDaGFyYWN0ZXIgIT0gYmFzZUNoYXJh
Y3RlcikKKyAgICAgICAgcmV0dXJuIHVwcGVyY2FzZUNoYXJhY3RlcjsKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitzdGF0aWMgYm9vbCBzaG91bGRTeW50aGVzaXplKGJvb2wgZG9udFN5
bnRoZXNpemVTbWFsbENhcHMsIGNvbnN0IEZvbnQqIG5leHRGb250LCBVQ2hhcjMyIGJhc2VDaGFy
YWN0ZXIsIHN0ZDo6b3B0aW9uYWw8VUNoYXIzMj4gY2FwaXRhbGl6ZWRCYXNlLCBGb250VmFyaWFu
dENhcHMgZm9udFZhcmlhbnRDYXBzLCBib29sIGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3Npbmcp
Cit7CisgICAgaWYgKGRvbnRTeW50aGVzaXplU21hbGxDYXBzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFuZXh0Rm9udCB8fCBuZXh0Rm9udCA9PSBGb250OjpzeXN0ZW1GYWxsYmFj
aygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVuZ2FnZUFsbFNtYWxsQ2Fwc1By
b2Nlc3NpbmcgJiYgaXNBU0NJSVNwYWNlKGJhc2VDaGFyYWN0ZXIpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nICYmICFjYXBpdGFs
aXplZEJhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIW5leHRGb250LT52
YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKGZvbnRWYXJpYW50Q2Fwcywg
YmFzZUNoYXJhY3Rlcik7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0
Q29tcGxleFRleHRSdW5zKCkKK3sKKyAgICBpZiAoIW1fZW5kKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBXZSBicmVhayB1cCBnbHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBi
eSBGb250LgorICAgIGNvbnN0IFVDaGFyKiBjcDsKKworICAgIGlmIChtX3J1bi5pczhCaXQoKSkg
eworICAgICAgICBTdHJpbmcgc3RyaW5nRm9yOEJpdFJ1biA9IFN0cmluZzo6bWFrZTE2Qml0RnJv
bThCaXRTb3VyY2UobV9ydW4uY2hhcmFjdGVyczgoKSwgbV9ydW4ubGVuZ3RoKCkpOworICAgICAg
ICBtX3N0cmluZ3NGb3I4Qml0UnVucy5hcHBlbmQoV1RGTW92ZShzdHJpbmdGb3I4Qml0UnVuKSk7
CisgICAgICAgIGNwID0gbV9zdHJpbmdzRm9yOEJpdFJ1bnMubGFzdCgpLmNoYXJhY3RlcnMxNigp
OworICAgIH0gZWxzZQorICAgICAgICBjcCA9IG1fcnVuLmNoYXJhY3RlcnMxNigpOworCisgICAg
YXV0byBmb250VmFyaWFudENhcHMgPSBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudENh
cHMoKTsKKyAgICBib29sIGRvbnRTeW50aGVzaXplU21hbGxDYXBzID0gIXN0YXRpY19jYXN0PGJv
b2w+KG1fZm9udC5mb250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgJiBGb250U3ludGhl
c2lzU21hbGxDYXBzKTsKKyAgICBib29sIGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgPSBm
b250VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbCB8fCBmb250VmFyaWFu
dENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU7CisgICAgYm9vbCBlbmdhZ2VTbWFs
bENhcHNQcm9jZXNzaW5nID0gZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZyB8fCBmb250VmFy
aWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpTbWFsbCB8fCBmb250VmFyaWFudENhcHMgPT0g
Rm9udFZhcmlhbnRDYXBzOjpQZXRpdGU7CisKKyAgICBpZiAoZW5nYWdlQWxsU21hbGxDYXBzUHJv
Y2Vzc2luZyB8fCBlbmdhZ2VTbWFsbENhcHNQcm9jZXNzaW5nKQorICAgICAgICBtX3NtYWxsQ2Fw
c0J1ZmZlci5yZXNpemUobV9lbmQpOworCisgICAgdW5zaWduZWQgaW5kZXhPZkZvbnRUcmFuc2l0
aW9uID0gMDsKKyAgICBjb25zdCBVQ2hhciogY3VyciA9IGNwOworICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBjcCArIG1fZW5kOworCisgICAgY29uc3QgRm9udCogZm9udDsKKyAgICBjb25zdCBGb250
KiBuZXh0Rm9udDsKKyAgICBjb25zdCBGb250KiBzeW50aGVzaXplZEZvbnQgPSBudWxscHRyOwor
ICAgIGNvbnN0IEZvbnQqIHNtYWxsU3ludGhlc2l6ZWRGb250ID0gbnVsbHB0cjsKKworICAgIHVu
c2lnbmVkIG1hcmtDb3VudDsKKyAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CisgICAgaWYgKCFh
ZHZhbmNlQnlDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjdXJyLCBlbmQsIGJhc2VDaGFyYWN0
ZXIsIG1hcmtDb3VudCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5leHRGb250ID0gbV9mb250
LmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCwgY3VyciAtIGNwKTsKKworICAg
IGJvb2wgaXNTbWFsbENhcHMgPSBmYWxzZTsKKyAgICBib29sIG5leHRJc1NtYWxsQ2FwcyA9IGZh
bHNlOworCisgICAgYXV0byBjYXBpdGFsaXplZEJhc2UgPSBjYXBpdGFsaXplZChiYXNlQ2hhcmFj
dGVyKTsKKyAgICBpZiAoc2hvdWxkU3ludGhlc2l6ZShkb250U3ludGhlc2l6ZVNtYWxsQ2Fwcywg
bmV4dEZvbnQsIGJhc2VDaGFyYWN0ZXIsIGNhcGl0YWxpemVkQmFzZSwgZm9udFZhcmlhbnRDYXBz
LCBlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nKSkgeworICAgICAgICBzeW50aGVzaXplZEZv
bnQgPSAmbmV4dEZvbnQtPm5vU3ludGhlc2l6YWJsZUZlYXR1cmVzRm9udCgpOworICAgICAgICBz
bWFsbFN5bnRoZXNpemVkRm9udCA9IHN5bnRoZXNpemVkRm9udC0+c21hbGxDYXBzRm9udChtX2Zv
bnQuZm9udERlc2NyaXB0aW9uKCkpOworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlclRvV3JpdGUg
PSBjYXBpdGFsaXplZEJhc2UgPyBjYXBpdGFsaXplZEJhc2UudmFsdWUoKSA6IGNwWzBdOworICAg
ICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJJbmRleCA9IDA7CisgICAgICAgIFUxNl9BUFBFTkRfVU5T
QUZFKG1fc21hbGxDYXBzQnVmZmVyLCBjaGFyYWN0ZXJJbmRleCwgY2hhcmFjdGVyVG9Xcml0ZSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNoYXJhY3RlckluZGV4OyBjcCArIGkgPCBjdXJy
OyArK2kpCisgICAgICAgICAgICBtX3NtYWxsQ2Fwc0J1ZmZlcltpXSA9IGNwW2ldOworICAgICAg
ICBuZXh0SXNTbWFsbENhcHMgPSB0cnVlOworICAgIH0KKworICAgIHdoaWxlIChjdXJyIDwgZW5k
KSB7CisgICAgICAgIGZvbnQgPSBuZXh0Rm9udDsKKyAgICAgICAgaXNTbWFsbENhcHMgPSBuZXh0
SXNTbWFsbENhcHM7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gY3VyciAtIGNwOworCisgICAg
ICAgIGlmICghYWR2YW5jZUJ5Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3VyciwgZW5kLCBi
YXNlQ2hhcmFjdGVyLCBtYXJrQ291bnQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChzeW50aGVzaXplZEZvbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNhcGl0YWxpemVk
QmFzZSA9IGNhcGl0YWxpemVkKGJhc2VDaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhcmFjdGVySW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBVMTZfQVBQRU5E
X1VOU0FGRShtX3NtYWxsQ2Fwc0J1ZmZlciwgY2hhcmFjdGVySW5kZXgsIGNhcGl0YWxpemVkQmFz
ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFy
a0NvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fc21hbGxDYXBzQnVmZmVyW2kgKyBj
aGFyYWN0ZXJJbmRleF0gPSBjcFtpICsgY2hhcmFjdGVySW5kZXhdOworICAgICAgICAgICAgICAg
IG5leHRJc1NtYWxsQ2FwcyA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGlmIChlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjdXJyIC0gY3AgLSBpbmRleDsgKytpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zbWFsbENhcHNCdWZmZXJbaW5kZXggKyBpXSA9IGNw
W2luZGV4ICsgaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5leHRJc1Nt
YWxsQ2FwcyA9IGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3Npbmc7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYmFzZUNoYXJhY3RlciA9PSB6ZXJvV2lkdGhKb2luZXIp
CisgICAgICAgICAgICBuZXh0Rm9udCA9IGZvbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG5leHRGb250ID0gbV9mb250LmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCAr
IGluZGV4LCBjdXJyIC0gY3AgLSBpbmRleCk7CisKKyAgICAgICAgY2FwaXRhbGl6ZWRCYXNlID0g
Y2FwaXRhbGl6ZWQoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgIGlmICghc3ludGhlc2l6ZWRGb250
ICYmIHNob3VsZFN5bnRoZXNpemUoZG9udFN5bnRoZXNpemVTbWFsbENhcHMsIG5leHRGb250LCBi
YXNlQ2hhcmFjdGVyLCBjYXBpdGFsaXplZEJhc2UsIGZvbnRWYXJpYW50Q2FwcywgZW5nYWdlQWxs
U21hbGxDYXBzUHJvY2Vzc2luZykpIHsKKyAgICAgICAgICAgIC8vIFJhdGhlciB0aGFuIHN5bnRo
ZXNpemUgZWFjaCBjaGFyYWN0ZXIgaW5kaXZpZHVhbGx5LCB3ZSBzaG91bGQgc3ludGhlc2l6ZSB0
aGUgZW50aXJlICJydW4iIGlmIGFueSBjaGFyYWN0ZXIgcmVxdWlyZXMgc3ludGhlc2lzLgorICAg
ICAgICAgICAgc3ludGhlc2l6ZWRGb250ID0gJm5leHRGb250LT5ub1N5bnRoZXNpemFibGVGZWF0
dXJlc0ZvbnQoKTsKKyAgICAgICAgICAgIHNtYWxsU3ludGhlc2l6ZWRGb250ID0gc3ludGhlc2l6
ZWRGb250LT5zbWFsbENhcHNGb250KG1fZm9udC5mb250RGVzY3JpcHRpb24oKSk7CisgICAgICAg
ICAgICBuZXh0SXNTbWFsbENhcHMgPSB0cnVlOworICAgICAgICAgICAgY3VyciA9IGNwICsgaW5k
ZXhPZkZvbnRUcmFuc2l0aW9uOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobmV4dEZvbnQgIT0gZm9udCB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNTbWFs
bENhcHMpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGl0ZW1MZW5ndGggPSBpbmRleCAtIGluZGV4
T2ZGb250VHJhbnNpdGlvbjsKKyAgICAgICAgICAgIGlmIChpdGVtTGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaXRlbVN0YXJ0ID0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOworICAg
ICAgICAgICAgICAgIGlmIChzeW50aGVzaXplZEZvbnQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGlzU21hbGxDYXBzKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdENvbXBsZXhU
ZXh0UnVuc0ZvckNoYXJhY3RlcnMobV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpICsgaXRlbVN0YXJ0
LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsIHNtYWxsU3ludGhlc2l6ZWRGb250KTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdENvbXBsZXhU
ZXh0UnVuc0ZvckNoYXJhY3RlcnMoY3AgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFy
dCwgc3ludGhlc2l6ZWRGb250KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY3AgKyBpdGVtU3Rh
cnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgZm9udCk7CisgICAgICAgICAgICAgICAgaWYgKG5l
eHRGb250ICE9IGZvbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZWRGb250ID0g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgc21hbGxTeW50aGVzaXplZEZvbnQgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleE9mRm9udFRyYW5z
aXRpb24gPSBpbmRleDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVChtX2VuZCA+PSBp
bmRleE9mRm9udFRyYW5zaXRpb24pOworICAgIHVuc2lnbmVkIGl0ZW1MZW5ndGggPSBtX2VuZCAt
IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKKyAgICBpZiAoaXRlbUxlbmd0aCkgeworICAgICAgICB1
bnNpZ25lZCBpdGVtU3RhcnQgPSBpbmRleE9mRm9udFRyYW5zaXRpb247CisgICAgICAgIGlmIChz
eW50aGVzaXplZEZvbnQpIHsKKyAgICAgICAgICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCisgICAg
ICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMobV9zbWFsbENh
cHNCdWZmZXIuZGF0YSgpICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsIHNtYWxs
U3ludGhlc2l6ZWRGb250KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb2xs
ZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjcCArIGl0ZW1TdGFydCwgaXRlbUxlbmd0
aCwgaXRlbVN0YXJ0LCBzeW50aGVzaXplZEZvbnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNwICsgaXRlbVN0YXJ0LCBp
dGVtTGVuZ3RoLCBpdGVtU3RhcnQsIG5leHRGb250KTsKKyAgICB9CisKKyAgICBpZiAoIW1fcnVu
Lmx0cigpKQorICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5yZXZlcnNlKCk7Cit9CisKK3Vuc2ln
bmVkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmluZGV4QXQodW5zaWdu
ZWQgaSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaSA8IG1fZ2x5cGhDb3VudCk7CisKKyAgICByZXR1
cm4gbV9jb3JlVGV4dEluZGljZXNbaV07Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dFJ1bjo6c2V0SXNOb25Nb25vdG9uaWMoKQoreworICAgIEFTU0VSVChtX2lz
TW9ub3RvbmljKTsKKyAgICBtX2lzTW9ub3RvbmljID0gZmFsc2U7CisKKyAgICBWZWN0b3I8Ym9v
bCwgNjQ+IG1hcHBlZEluZGljZXMobV9zdHJpbmdMZW5ndGgsIGZhbHNlKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9nbHlwaENvdW50OyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGlu
ZGV4QXQoaSkgPCBtX3N0cmluZ0xlbmd0aCk7CisgICAgICAgIG1hcHBlZEluZGljZXNbaW5kZXhB
dChpKV0gPSB0cnVlOworICAgIH0KKworICAgIG1fZ2x5cGhFbmRPZmZzZXRzLmdyb3cobV9nbHlw
aENvdW50KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nbHlwaENvdW50OyArK2kp
IHsKKyAgICAgICAgdW5zaWduZWQgbmV4dE1hcHBlZEluZGV4ID0gbV9pbmRleEVuZDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gaW5kZXhBdChpKSArIDE7IGogPCBtX3N0cmluZ0xlbmd0aDsg
KytqKSB7CisgICAgICAgICAgICBpZiAobWFwcGVkSW5kaWNlc1tqXSkgeworICAgICAgICAgICAg
ICAgIG5leHRNYXBwZWRJbmRleCA9IGo7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9nbHlwaEVuZE9mZnNldHNbaV0gPSBuZXh0TWFw
cGVkSW5kZXg7CisgICAgfQorfQorCit1bnNpZ25lZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6Omlu
ZGV4T2ZDdXJyZW50UnVuKHVuc2lnbmVkJiBsZWZ0bW9zdEdseXBoKQoreworICAgIGxlZnRtb3N0
R2x5cGggPSAwOworICAgIAorICAgIHNpemVfdCBydW5Db3VudCA9IG1fY29tcGxleFRleHRSdW5z
LnNpemUoKTsKKyAgICBpZiAobV9jdXJyZW50UnVuID49IHJ1bkNvdW50KQorICAgICAgICByZXR1
cm4gcnVuQ291bnQ7CisKKyAgICBpZiAobV9pc0xUUk9ubHkpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fY3VycmVudFJ1bjsgKytpKQorICAgICAgICAgICAgbGVmdG1vc3RH
bHlwaCArPSBtX2NvbXBsZXhUZXh0UnVuc1tpXS0+Z2x5cGhDb3VudCgpOworICAgICAgICByZXR1
cm4gbV9jdXJyZW50UnVuOworICAgIH0KKworICAgIGlmIChtX3J1bkluZGljZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgIHVuc2lnbmVkIGZpcnN0UnVuID0gMDsKKyAgICAgICAgdW5zaWduZWQgZmly
c3RSdW5PZmZzZXQgPSBzdHJpbmdCZWdpbigqbV9jb21wbGV4VGV4dFJ1bnNbMF0pOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcnVuQ291bnQ7ICsraSkgeworICAgICAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gc3RyaW5nQmVnaW4oKm1fY29tcGxleFRleHRSdW5zW2ldKTsKKyAg
ICAgICAgICAgIGlmIChvZmZzZXQgPCBmaXJzdFJ1bk9mZnNldCkgeworICAgICAgICAgICAgICAg
IGZpcnN0UnVuID0gaTsKKyAgICAgICAgICAgICAgICBmaXJzdFJ1bk9mZnNldCA9IG9mZnNldDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3J1bkluZGljZXMudW5jaGVja2Vk
QXBwZW5kKGZpcnN0UnVuKTsKKyAgICB9CisKKyAgICB3aGlsZSAobV9ydW5JbmRpY2VzLnNpemUo
KSA8PSBtX2N1cnJlbnRSdW4pIHsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc3RyaW5nRW5k
KCptX2NvbXBsZXhUZXh0UnVuc1ttX3J1bkluZGljZXMubGFzdCgpXSk7CisKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bkNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgPT0gc3RyaW5nQmVnaW4oKm1fY29tcGxleFRleHRSdW5zW2ldKSkgeworICAgICAgICAg
ICAgICAgIG1fcnVuSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoaSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBj
dXJyZW50UnVuSW5kZXggPSBtX3J1bkluZGljZXNbbV9jdXJyZW50UnVuXTsKKyAgICBsZWZ0bW9z
dEdseXBoID0gbV9nbHlwaENvdW50RnJvbVN0YXJ0VG9JbmRleFtjdXJyZW50UnVuSW5kZXhdOwor
ICAgIHJldHVybiBjdXJyZW50UnVuSW5kZXg7Cit9CisKK3Vuc2lnbmVkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6aW5jcmVtZW50Q3VycmVudFJ1bih1bnNpZ25lZCYgbGVmdG1vc3RHbHlwaCkKK3sK
KyAgICBpZiAobV9pc0xUUk9ubHkpIHsKKyAgICAgICAgbGVmdG1vc3RHbHlwaCArPSBtX2NvbXBs
ZXhUZXh0UnVuc1ttX2N1cnJlbnRSdW4rK10tPmdseXBoQ291bnQoKTsKKyAgICAgICAgcmV0dXJu
IG1fY3VycmVudFJ1bjsKKyAgICB9CisKKyAgICBtX2N1cnJlbnRSdW4rKzsKKyAgICBsZWZ0bW9z
dEdseXBoID0gMDsKKyAgICByZXR1cm4gaW5kZXhPZkN1cnJlbnRSdW4obGVmdG1vc3RHbHlwaCk7
Cit9CisKK2Zsb2F0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6cnVuV2lkdGhTb0ZhckZyYWN0aW9u
KHVuc2lnbmVkIGdseXBoU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGdseXBoRW5kT2Zmc2V0LCB1bnNp
Z25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCwgR2x5cGhJdGVyYXRpb25TdHlsZSBpdGVy
YXRpb25TdHlsZSkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBkaXZpZGluZyB0
aGUgZ2x5cGgncyBhZHZhbmNlIGVxdWFsbHkgYmV0d2VlbiB0aGUgY2hhcmFjdGVycywgdGhpcwor
ICAgIC8vIGNvdWxkIHVzZSB0aGUgZ2x5cGgncyAibGlnYXR1cmUgY2FyZXRzIi4gVGhpcyBpcyBh
dmFpbGFibGUgaW4gQ29yZVRleHQgdmlhIENURm9udEdldExpZ2F0dXJlQ2FyZXRQb3NpdGlvbnMo
KS4KKyAgICBpZiAoZ2x5cGhTdGFydE9mZnNldCA9PSBnbHlwaEVuZE9mZnNldCkgeworICAgICAg
ICAvLyBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBnbHlwaHMgcGVyIGNoYXJhY3RlciB3ZSBuZWVk
IHRvIGFkdmFuY2UgYnkgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGdseXBoLgorICAgICAgICBBU1NF
UlQobV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9PSBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlw
aCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChpdGVyYXRpb25TdHlsZSA9
PSBCeVdob2xlR2x5cGhzKSB7CisgICAgICAgIGlmICghb2xkQ2hhcmFjdGVySW5DdXJyZW50R2x5
cGgpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2NoYXJhY3RlckluQ3VycmVudEdseXBoIC0g
b2xkQ2hhcmFjdGVySW5DdXJyZW50R2x5cGgpIC8gKGdseXBoRW5kT2Zmc2V0IC0gZ2x5cGhTdGFy
dE9mZnNldCk7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2ln
bmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlvblN0eWxl
IGl0ZXJhdGlvblN0eWxlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKK3sK
KyAgICBpZiAob2Zmc2V0ID4gbV9lbmQpCisgICAgICAgIG9mZnNldCA9IG1fZW5kOworCisgICAg
aWYgKG9mZnNldCA8PSBtX2N1cnJlbnRDaGFyYWN0ZXIpIHsKKyAgICAgICAgbV9ydW5XaWR0aFNv
RmFyID0gMDsKKyAgICAgICAgbV9udW1HbHlwaHNTb0ZhciA9IDA7CisgICAgICAgIG1fY3VycmVu
dFJ1biA9IDA7CisgICAgICAgIG1fZ2x5cGhJbkN1cnJlbnRSdW4gPSAwOworICAgICAgICBtX2No
YXJhY3RlckluQ3VycmVudEdseXBoID0gMDsKKyAgICB9CisKKyAgICBtX2N1cnJlbnRDaGFyYWN0
ZXIgPSBvZmZzZXQ7CisKKyAgICBzaXplX3QgcnVuQ291bnQgPSBtX2NvbXBsZXhUZXh0UnVucy5z
aXplKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleE9mTGVmdG1vc3RHbHlwaEluQ3VycmVudFJ1biA9
IDA7IC8vIFJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgQ29tcGxleFRleHRDb250cm9sbGVy
LgorICAgIHVuc2lnbmVkIGN1cnJlbnRSdW5JbmRleCA9IGluZGV4T2ZDdXJyZW50UnVuKGluZGV4
T2ZMZWZ0bW9zdEdseXBoSW5DdXJyZW50UnVuKTsKKyAgICB3aGlsZSAobV9jdXJyZW50UnVuIDwg
cnVuQ291bnQpIHsKKyAgICAgICAgY29uc3QgQ29tcGxleFRleHRSdW4mIGNvbXBsZXhUZXh0UnVu
ID0gKm1fY29tcGxleFRleHRSdW5zW2N1cnJlbnRSdW5JbmRleF07CisgICAgICAgIGJvb2wgbHRy
ID0gY29tcGxleFRleHRSdW4uaXNMVFIoKTsKKyAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9
IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291bnQoKTsKKyAgICAgICAgdW5zaWduZWQgZ2x5cGhJbmRl
eEludG9DdXJyZW50UnVuID0gbHRyID8gbV9nbHlwaEluQ3VycmVudFJ1biA6IGdseXBoQ291bnQg
LSAxIC0gbV9nbHlwaEluQ3VycmVudFJ1bjsKKyAgICAgICAgdW5zaWduZWQgZ2x5cGhJbmRleElu
dG9Db21wbGV4VGV4dENvbnRyb2xsZXIgPSBpbmRleE9mTGVmdG1vc3RHbHlwaEluQ3VycmVudFJ1
biArIGdseXBoSW5kZXhJbnRvQ3VycmVudFJ1bjsKKyAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMg
JiYgJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCisgICAg
ICAgICAgICBmYWxsYmFja0ZvbnRzLT5hZGQoJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSk7CisKKyAg
ICAgICAgLy8gV2UgbXVzdCBzdG9yZSB0aGUgaW5pdGlhbCBhZHZhbmNlIGZvciB0aGUgZmlyc3Qg
Z2x5cGggd2UgYXJlIGdvaW5nIHRvIGRyYXcuCisgICAgICAgIC8vIFdoZW4gbGVmdG1vc3RHbHlw
aCBpcyAwLCBpdCByZXByZXNlbnRzIHRoZSBmaXJzdCBnbHlwaCB0byBkcmF3LCB0YWtpbmcgaW50
bworICAgICAgICAvLyBhY2NvdW50IHRoZSB0ZXh0IGRpcmVjdGlvbi4KKyAgICAgICAgaWYgKCFp
bmRleE9mTGVmdG1vc3RHbHlwaEluQ3VycmVudFJ1biAmJiBnbHlwaEJ1ZmZlcikKKyAgICAgICAg
ICAgIGdseXBoQnVmZmVyLT5zZXRJbml0aWFsQWR2YW5jZShHbHlwaEJ1ZmZlckFkdmFuY2UoY29t
cGxleFRleHRSdW4uaW5pdGlhbEFkdmFuY2UoKS53aWR0aCgpLCBjb21wbGV4VGV4dFJ1bi5pbml0
aWFsQWR2YW5jZSgpLmhlaWdodCgpKSk7CisKKyAgICAgICAgd2hpbGUgKG1fZ2x5cGhJbkN1cnJl
bnRSdW4gPCBnbHlwaENvdW50KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBnbHlwaFN0YXJ0T2Zm
c2V0ID0gY29tcGxleFRleHRSdW4uaW5kZXhBdChnbHlwaEluZGV4SW50b0N1cnJlbnRSdW4pOwor
ICAgICAgICAgICAgdW5zaWduZWQgZ2x5cGhFbmRPZmZzZXQ7CisgICAgICAgICAgICBpZiAoY29t
cGxleFRleHRSdW4uaXNNb25vdG9uaWMoKSkgeworICAgICAgICAgICAgICAgIGlmIChsdHIpCisg
ICAgICAgICAgICAgICAgICAgIGdseXBoRW5kT2Zmc2V0ID0gc3RkOjptYXgoZ2x5cGhTdGFydE9m
ZnNldCwgZ2x5cGhJbmRleEludG9DdXJyZW50UnVuICsgMSA8IGdseXBoQ291bnQgPyBjb21wbGV4
VGV4dFJ1bi5pbmRleEF0KGdseXBoSW5kZXhJbnRvQ3VycmVudFJ1biArIDEpIDogY29tcGxleFRl
eHRSdW4uaW5kZXhFbmQoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBnbHlwaEVuZE9mZnNldCA9IHN0ZDo6bWF4KGdseXBoU3RhcnRPZmZzZXQsIGdseXBoSW5k
ZXhJbnRvQ3VycmVudFJ1biA+IDAgPyBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGdseXBoSW5kZXhJ
bnRvQ3VycmVudFJ1biAtIDEpIDogY29tcGxleFRleHRSdW4uaW5kZXhFbmQoKSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBnbHlwaEVuZE9mZnNldCA9IGNvbXBsZXhUZXh0
UnVuLmVuZE9mZnNldEF0KGdseXBoSW5kZXhJbnRvQ3VycmVudFJ1bik7CisKKyAgICAgICAgICAg
IEZsb2F0U2l6ZSBhZGp1c3RlZEJhc2VBZHZhbmNlID0gbV9hZGp1c3RlZEJhc2VBZHZhbmNlc1tn
bHlwaEluZGV4SW50b0NvbXBsZXhUZXh0Q29udHJvbGxlcl07CisKKyAgICAgICAgICAgIGlmIChn
bHlwaFN0YXJ0T2Zmc2V0ICsgY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKSA+PSBtX2N1
cnJlbnRDaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBp
ZiAoZ2x5cGhCdWZmZXIgJiYgIW1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGgpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIGN1cnJlbnRHbHlwaE9yaWdpbiA9IGdseXBoT3JpZ2luKGdseXBoSW5kZXhJ
bnRvQ29tcGxleFRleHRDb250cm9sbGVyKTsKKyAgICAgICAgICAgICAgICBHbHlwaEJ1ZmZlckFk
dmFuY2UgcGFpbnRBZHZhbmNlKGFkanVzdGVkQmFzZUFkdmFuY2UpOworICAgICAgICAgICAgICAg
IGlmICghZ2x5cGhJbmRleEludG9DdXJyZW50UnVuKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBmaXJzdCBsYXlvdXQgYWR2YW5jZSBvZiBldmVyeSBydW4gaW5jbHVkZXMgdGhlICJpbml0
aWFsIGxheW91dCBhZHZhbmNlLiIgSG93ZXZlciwgaGVyZSwgd2UgbmVlZAorICAgICAgICAgICAg
ICAgICAgICAvLyBwYWludCBhZHZhbmNlcywgc28gc3VidHJhY3QgaXQgb3V0IGJlZm9yZSB0cmFu
c2Zvcm1pbmcgdGhlIGxheW91dCBhZHZhbmNlIGludG8gYSBwYWludCBhZHZhbmNlLgorICAgICAg
ICAgICAgICAgICAgICBwYWludEFkdmFuY2Uuc2V0V2lkdGgocGFpbnRBZHZhbmNlLndpZHRoKCkg
LSAoY29tcGxleFRleHRSdW4uaW5pdGlhbEFkdmFuY2UoKS53aWR0aCgpIC0gY3VycmVudEdseXBo
T3JpZ2luLngoKSkpOworICAgICAgICAgICAgICAgICAgICBwYWludEFkdmFuY2Uuc2V0SGVpZ2h0
KHBhaW50QWR2YW5jZS5oZWlnaHQoKSAtIChjb21wbGV4VGV4dFJ1bi5pbml0aWFsQWR2YW5jZSgp
LmhlaWdodCgpIC0gY3VycmVudEdseXBoT3JpZ2luLnkoKSkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBwYWludEFkdmFuY2Uuc2V0V2lkdGgocGFpbnRBZHZhbmNlLndpZHRo
KCkgKyBnbHlwaE9yaWdpbihnbHlwaEluZGV4SW50b0NvbXBsZXhUZXh0Q29udHJvbGxlciArIDEp
LngoKSAtIGN1cnJlbnRHbHlwaE9yaWdpbi54KCkpOworICAgICAgICAgICAgICAgIHBhaW50QWR2
YW5jZS5zZXRIZWlnaHQocGFpbnRBZHZhbmNlLmhlaWdodCgpICsgZ2x5cGhPcmlnaW4oZ2x5cGhJ
bmRleEludG9Db21wbGV4VGV4dENvbnRyb2xsZXIgKyAxKS55KCkgLSBjdXJyZW50R2x5cGhPcmln
aW4ueSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJbmRleEludG9DdXJyZW50UnVuID09
IGdseXBoQ291bnQgLSAxICYmIGN1cnJlbnRSdW5JbmRleCArIDEgPCBydW5Db3VudCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBPdXIgcGFpbnQgYWR2YW5jZSBwb2ludHMgdG8gdGhlIGVuZCBv
ZiB0aGUgcnVuLiBIb3dldmVyLCB0aGUgbmV4dCBydW4gbWF5IGhhdmUgYW4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gaW5pdGlhbCBhZHZhbmNlLCBhbmQgb3VyIHBhaW50IGFkdmFuY2UgbmVlZHMg
dG8gcG9pbnQgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgICAg
IC8vIGdseXBoLiBTbywgd2UgbmVlZCB0byBhZGQgaW4gdGhlIG5leHQgcnVuJ3MgaW5pdGlhbCBh
ZHZhbmNlLgorICAgICAgICAgICAgICAgICAgICBwYWludEFkdmFuY2Uuc2V0V2lkdGgocGFpbnRB
ZHZhbmNlLndpZHRoKCkgLSBnbHlwaE9yaWdpbihnbHlwaEluZGV4SW50b0NvbXBsZXhUZXh0Q29u
dHJvbGxlciArIDEpLngoKSArIG1fY29tcGxleFRleHRSdW5zW2N1cnJlbnRSdW5JbmRleCArIDFd
LT5pbml0aWFsQWR2YW5jZSgpLndpZHRoKCkpOworICAgICAgICAgICAgICAgICAgICBwYWludEFk
dmFuY2Uuc2V0SGVpZ2h0KHBhaW50QWR2YW5jZS5oZWlnaHQoKSAtIGdseXBoT3JpZ2luKGdseXBo
SW5kZXhJbnRvQ29tcGxleFRleHRDb250cm9sbGVyICsgMSkueSgpICsgbV9jb21wbGV4VGV4dFJ1
bnNbY3VycmVudFJ1bkluZGV4ICsgMV0tPmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYWludEFkdmFuY2Uuc2V0SGVpZ2h0KC1w
YWludEFkdmFuY2UuaGVpZ2h0KCkpOyAvLyBJbmNyZWFzaW5nIHkgcG9pbnRzIGRvd24KKyAgICAg
ICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRqdXN0ZWRHbHlwaHNbZ2x5cGhJbmRleElu
dG9Db21wbGV4VGV4dENvbnRyb2xsZXJdLCAmY29tcGxleFRleHRSdW4uZm9udCgpLCBwYWludEFk
dmFuY2UsIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRH
bHlwaCA9IG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGg7CisgICAgICAgICAgICBtX2NoYXJhY3Rl
ckluQ3VycmVudEdseXBoID0gc3RkOjptaW4obV9jdXJyZW50Q2hhcmFjdGVyIC0gY29tcGxleFRl
eHRSdW4uc3RyaW5nTG9jYXRpb24oKSwgZ2x5cGhFbmRPZmZzZXQpIC0gZ2x5cGhTdGFydE9mZnNl
dDsKKyAgICAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhZGp1c3RlZEJhc2VBZHZhbmNlLndp
ZHRoKCkgKiBydW5XaWR0aFNvRmFyRnJhY3Rpb24oZ2x5cGhTdGFydE9mZnNldCwgZ2x5cGhFbmRP
ZmZzZXQsIG9sZENoYXJhY3RlckluQ3VycmVudEdseXBoLCBpdGVyYXRpb25TdHlsZSk7CisKKyAg
ICAgICAgICAgIGlmIChnbHlwaEVuZE9mZnNldCArIGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xvY2F0
aW9uKCkgPiBtX2N1cnJlbnRDaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBtX251bUdseXBoc1NvRmFyKys7CisgICAgICAgICAgICBtX2dseXBoSW5DdXJy
ZW50UnVuKys7CisgICAgICAgICAgICBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoID0gMDsKKyAg
ICAgICAgICAgIGlmIChsdHIpIHsKKyAgICAgICAgICAgICAgICBnbHlwaEluZGV4SW50b0N1cnJl
bnRSdW4rKzsKKyAgICAgICAgICAgICAgICBnbHlwaEluZGV4SW50b0NvbXBsZXhUZXh0Q29udHJv
bGxlcisrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBnbHlwaEluZGV4
SW50b0N1cnJlbnRSdW4tLTsKKyAgICAgICAgICAgICAgICBnbHlwaEluZGV4SW50b0NvbXBsZXhU
ZXh0Q29udHJvbGxlci0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGN1cnJl
bnRSdW5JbmRleCA9IGluY3JlbWVudEN1cnJlbnRSdW4oaW5kZXhPZkxlZnRtb3N0R2x5cGhJbkN1
cnJlbnRSdW4pOworICAgICAgICBtX2dseXBoSW5DdXJyZW50UnVuID0gMDsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgc3RkOjpwYWlyPGJvb2wsIGJvb2w+IGV4cGFuc2lvbkxvY2F0aW9uKGJv
b2wgaWRlb2dyYXBoLCBib29sIHRyZWF0QXNTcGFjZSwgYm9vbCBsdHIsIGJvb2wgaXNBZnRlckV4
cGFuc2lvbiwgYm9vbCBmb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBib29sIGZvcmJpZFRyYWlsaW5n
RXhwYW5zaW9uLCBib29sIGZvcmNlTGVhZGluZ0V4cGFuc2lvbiwgYm9vbCBmb3JjZVRyYWlsaW5n
RXhwYW5zaW9uKQoreworICAgIGJvb2wgZXhwYW5kTGVmdCA9IGlkZW9ncmFwaDsKKyAgICBib29s
IGV4cGFuZFJpZ2h0ID0gaWRlb2dyYXBoOworICAgIGlmICh0cmVhdEFzU3BhY2UpIHsKKyAgICAg
ICAgaWYgKGx0cikKKyAgICAgICAgICAgIGV4cGFuZFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZXhwYW5kTGVmdCA9IHRydWU7CisgICAgfQorICAgIGlmIChpc0FmdGVy
RXhwYW5zaW9uKQorICAgICAgICBleHBhbmRMZWZ0ID0gZmFsc2U7CisgICAgQVNTRVJUKCFmb3Ji
aWRMZWFkaW5nRXhwYW5zaW9uIHx8ICFmb3JjZUxlYWRpbmdFeHBhbnNpb24pOworICAgIEFTU0VS
VCghZm9yYmlkVHJhaWxpbmdFeHBhbnNpb24gfHwgIWZvcmNlVHJhaWxpbmdFeHBhbnNpb24pOwor
ICAgIGlmIChmb3JiaWRMZWFkaW5nRXhwYW5zaW9uKQorICAgICAgICBleHBhbmRMZWZ0ID0gZmFs
c2U7CisgICAgaWYgKGZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uKQorICAgICAgICBleHBhbmRSaWdo
dCA9IGZhbHNlOworICAgIGlmIChmb3JjZUxlYWRpbmdFeHBhbnNpb24pCisgICAgICAgIGV4cGFu
ZExlZnQgPSB0cnVlOworICAgIGlmIChmb3JjZVRyYWlsaW5nRXhwYW5zaW9uKQorICAgICAgICBl
eHBhbmRSaWdodCA9IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGV4cGFuZExlZnQs
IGV4cGFuZFJpZ2h0KTsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEds
eXBoc0FuZEFkdmFuY2VzKCkKK3sKKyAgICBib29sIGFmdGVyRXhwYW5zaW9uID0gKG1fcnVuLmV4
cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWFkaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVhZGlu
Z0V4cGFuc2lvbjsKKyAgICBmbG9hdCB3aWR0aFNpbmNlTGFzdENvbW1pdCA9IDA7CisgICAgc2l6
ZV90IHJ1bkNvdW50ID0gbV9jb21wbGV4VGV4dFJ1bnMuc2l6ZSgpOworICAgIGJvb2wgaGFzRXh0
cmFTcGFjaW5nID0gKG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250LndvcmRTcGFjaW5n
KCkgfHwgbV9leHBhbnNpb24pICYmICFtX3J1bi5zcGFjaW5nRGlzYWJsZWQoKTsKKyAgICBib29s
IHJ1bkZvcmNlc0xlYWRpbmdFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAm
IExlYWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JjZUxlYWRpbmdFeHBhbnNpb247CisgICAgYm9v
bCBydW5Gb3JjZXNUcmFpbGluZ0V4cGFuc2lvbiA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigp
ICYgVHJhaWxpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JjZVRyYWlsaW5nRXhwYW5zaW9uOworICAg
IGJvb2wgcnVuRm9yYmlkc0xlYWRpbmdFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZp
b3IoKSAmIExlYWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uOwor
ICAgIGJvb2wgcnVuRm9yYmlkc1RyYWlsaW5nRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJl
aGF2aW9yKCkgJiBUcmFpbGluZ0V4cGFuc2lvbk1hc2spID09IEZvcmJpZFRyYWlsaW5nRXhwYW5z
aW9uOworCisgICAgLy8gV2UgYXJlIGl0ZXJhdGluZyBpbiBnbHlwaCBvcmRlciwgbm90IHN0cmlu
ZyBvcmRlci4gQ29tcGFyZSB0aGlzIHRvIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbCgp
CisgICAgZm9yIChzaXplX3QgcnVuSW5kZXggPSAwOyBydW5JbmRleCA8IHJ1bkNvdW50OyArK3J1
bkluZGV4KSB7CisgICAgICAgIENvbXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1biA9ICptX2Nv
bXBsZXhUZXh0UnVuc1tydW5JbmRleF07CisgICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQgPSBj
b21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBj
b21wbGV4VGV4dFJ1bi5mb250KCk7CisKKyAgICAgICAgaWYgKCFjb21wbGV4VGV4dFJ1bi5pc0xU
UigpKQorICAgICAgICAgICAgbV9pc0xUUk9ubHkgPSBmYWxzZTsKKworICAgICAgICBjb25zdCBD
R0dseXBoKiBnbHlwaHMgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaHMoKTsKKyAgICAgICAgY29uc3Qg
RmxvYXRTaXplKiBhZHZhbmNlcyA9IGNvbXBsZXhUZXh0UnVuLmJhc2VBZHZhbmNlcygpOworCisg
ICAgICAgIGJvb2wgbGFzdFJ1biA9IHJ1bkluZGV4ICsgMSA9PSBydW5Db3VudDsKKyAgICAgICAg
ZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCgpIC0gZm9udC5zeW50aGV0aWNCb2xk
T2Zmc2V0KCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjcCA9IGNvbXBsZXhUZXh0UnVuLmNoYXJh
Y3RlcnMoKTsKKyAgICAgICAgRmxvYXRQb2ludCBnbHlwaE9yaWdpbjsKKyAgICAgICAgdW5zaWdu
ZWQgbGFzdENoYXJhY3RlckluZGV4ID0gbV9ydW4ubHRyKCkgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWluKCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
CisgICAgICAgIGJvb2wgaXNNb25vdG9uaWMgPSB0cnVlOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBnbHlwaENvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXJhY3RlckluZGV4ID0gY29tcGxleFRleHRSdW4uaW5kZXhBdChpKTsKKyAgICAgICAgICAgIGlm
IChtX3J1bi5sdHIoKSkgeworICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCA8IGxh
c3RDaGFyYWN0ZXJJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgaXNNb25vdG9uaWMgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcklu
ZGV4ID4gbGFzdENoYXJhY3RlckluZGV4KQorICAgICAgICAgICAgICAgICAgICBpc01vbm90b25p
YyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVUNoYXIgY2ggPSAqKGNwICsg
Y2hhcmFjdGVySW5kZXgpOworICAgICAgICAgICAgYm9vbCBsYXN0R2x5cGggPSBsYXN0UnVuICYm
IGkgKyAxID09IGdseXBoQ291bnQ7CisgICAgICAgICAgICBVQ2hhciBuZXh0Q2g7CisgICAgICAg
ICAgICBpZiAobGFzdEdseXBoKQorICAgICAgICAgICAgICAgIG5leHRDaCA9ICcgJzsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGkgKyAxIDwgZ2x5cGhDb3VudCkKKyAgICAgICAgICAgICAgICBuZXh0
Q2ggPSAqKGNwICsgY29tcGxleFRleHRSdW4uaW5kZXhBdChpICsgMSkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG5leHRDaCA9ICoobV9jb21wbGV4VGV4dFJ1bnNbcnVuSW5k
ZXggKyAxXS0+Y2hhcmFjdGVycygpICsgbV9jb21wbGV4VGV4dFJ1bnNbcnVuSW5kZXggKyAxXS0+
aW5kZXhBdCgwKSk7CisKKyAgICAgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2Nh
ZGU6OnRyZWF0QXNTcGFjZShjaCk7CisgICAgICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRB
c1NwYWNlID8gZm9udC5zcGFjZUdseXBoKCkgOiBnbHlwaHNbaV07CisgICAgICAgICAgICBGbG9h
dFNpemUgYWR2YW5jZSA9IHRyZWF0QXNTcGFjZSA/IEZsb2F0U2l6ZShzcGFjZVdpZHRoLCBhZHZh
bmNlc1tpXS5oZWlnaHQoKSkgOiBhZHZhbmNlc1tpXTsKKworICAgICAgICAgICAgaWYgKGNoID09
ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCisgICAgICAgICAgICAgICAgYWR2YW5jZS5zZXRX
aWR0aChtX2ZvbnQudGFiV2lkdGgoZm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkg
KyBtX3RvdGFsV2lkdGggKyB3aWR0aFNpbmNlTGFzdENvbW1pdCkpOworICAgICAgICAgICAgZWxz
ZSBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNT
cGFjZSkgeworICAgICAgICAgICAgICAgIGFkdmFuY2Uuc2V0V2lkdGgoMCk7CisgICAgICAgICAg
ICAgICAgZ2x5cGggPSBmb250LnNwYWNlR2x5cGgoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZS5leHBhbmQoY29tcGxleFRl
eHRSdW4uaW5pdGlhbEFkdmFuY2UoKS53aWR0aCgpLCBjb21wbGV4VGV4dFJ1bi5pbml0aWFsQWR2
YW5jZSgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogb3JpZ2lucyA9IGNv
bXBsZXhUZXh0UnVuLmdseXBoT3JpZ2lucygpKQorICAgICAgICAgICAgICAgICAgICBhZHZhbmNl
LmV4cGFuZCgtb3JpZ2luc1swXS54KCksIC1vcmlnaW5zWzBdLnkoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGFkdmFuY2UuZXhwYW5kKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgp
LCAwKTsKKworICAgICAgICAgICAgaWYgKGhhc0V4dHJhU3BhY2luZykgeworICAgICAgICAgICAg
ICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZhbmNlLCBhZGQgaW4gbGV0dGVyLXNw
YWNpbmcuCisgICAgICAgICAgICAgICAgLy8gVGhhdCB3YXkgd2Ugd2VlZCBvdXQgemVybyB3aWR0
aCBsdXJrZXJzLiBUaGlzIGJlaGF2aW9yIG1hdGNoZXMgdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGgu
CisgICAgICAgICAgICAgICAgaWYgKGFkdmFuY2Uud2lkdGgoKSkKKyAgICAgICAgICAgICAgICAg
ICAgYWR2YW5jZS5leHBhbmQobV9mb250LmxldHRlclNwYWNpbmcoKSwgMCk7CisKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJJbmRleEluUnVuID0gY2hhcmFjdGVySW5kZXggKyBj
b21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigpOworICAgICAgICAgICAgICAgIGJvb2wgaXNG
aXJzdENoYXJhY3RlciA9ICEoY2hhcmFjdGVySW5kZXggKyBjb21wbGV4VGV4dFJ1bi5zdHJpbmdM
b2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICBib29sIGlzTGFzdENoYXJhY3RlciA9IGNoYXJh
Y3RlckluZGV4SW5SdW4gKyAxID09IG1fcnVuLmxlbmd0aCgpIHx8IChVMTZfSVNfTEVBRChjaCkg
JiYgY2hhcmFjdGVySW5kZXhJblJ1biArIDIgPT0gbV9ydW4ubGVuZ3RoKCkgJiYgVTE2X0lTX1RS
QUlMKCooY3AgKyBjaGFyYWN0ZXJJbmRleCArIDEpKSk7CisKKyAgICAgICAgICAgICAgICBib29s
IGZvcmNlTGVhZGluZ0V4cGFuc2lvbiA9IGZhbHNlOyAvLyBPbiB0aGUgbGVmdCwgcmVnYXJkbGVz
cyBvZiBtX3J1bi5sdHIoKQorICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VUcmFpbGluZ0V4cGFu
c2lvbiA9IGZhbHNlOyAvLyBPbiB0aGUgcmlnaHQsIHJlZ2FyZGxlc3Mgb2YgbV9ydW4ubHRyKCkK
KyAgICAgICAgICAgICAgICBib29sIGZvcmJpZExlYWRpbmdFeHBhbnNpb24gPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBib29sIGZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgaWYgKHJ1bkZvcmNlc0xlYWRpbmdFeHBhbnNpb24pCisgICAgICAgICAgICAg
ICAgICAgIGZvcmNlTGVhZGluZ0V4cGFuc2lvbiA9IG1fcnVuLmx0cigpID8gaXNGaXJzdENoYXJh
Y3RlciA6IGlzTGFzdENoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICBpZiAocnVuRm9yY2VzVHJh
aWxpbmdFeHBhbnNpb24pCisgICAgICAgICAgICAgICAgICAgIGZvcmNlVHJhaWxpbmdFeHBhbnNp
b24gPSBtX3J1bi5sdHIoKSA/IGlzTGFzdENoYXJhY3RlciA6IGlzRmlyc3RDaGFyYWN0ZXI7Cisg
ICAgICAgICAgICAgICAgaWYgKHJ1bkZvcmJpZHNMZWFkaW5nRXhwYW5zaW9uKQorICAgICAgICAg
ICAgICAgICAgICBmb3JiaWRMZWFkaW5nRXhwYW5zaW9uID0gbV9ydW4ubHRyKCkgPyBpc0ZpcnN0
Q2hhcmFjdGVyIDogaXNMYXN0Q2hhcmFjdGVyOworICAgICAgICAgICAgICAgIGlmIChydW5Gb3Ji
aWRzVHJhaWxpbmdFeHBhbnNpb24pCisgICAgICAgICAgICAgICAgICAgIGZvcmJpZFRyYWlsaW5n
RXhwYW5zaW9uID0gbV9ydW4ubHRyKCkgPyBpc0xhc3RDaGFyYWN0ZXIgOiBpc0ZpcnN0Q2hhcmFj
dGVyOworICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3b3JkLXNw
YWNpbmcuCisgICAgICAgICAgICAgICAgYm9vbCBpZGVvZ3JhcGggPSBGb250Q2FzY2FkZTo6aXND
SktJZGVvZ3JhcGhPclN5bWJvbChjaCk7CisgICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFj
ZSB8fCBpZGVvZ3JhcGggfHwgZm9yY2VMZWFkaW5nRXhwYW5zaW9uIHx8IGZvcmNlVHJhaWxpbmdF
eHBhbnNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3Mg
dG90YWwgZXhwYW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBp
biB0aGUgcnVuLgorICAgICAgICAgICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZXhwYW5kTGVmdCwgZXhwYW5kUmlnaHQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnRpZShleHBhbmRMZWZ0LCBleHBhbmRSaWdodCkgPSBleHBh
bnNpb25Mb2NhdGlvbihpZGVvZ3JhcGgsIHRyZWF0QXNTcGFjZSwgbV9ydW4ubHRyKCksIGFmdGVy
RXhwYW5zaW9uLCBmb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBmb3JiaWRUcmFpbGluZ0V4cGFuc2lv
biwgZm9yY2VMZWFkaW5nRXhwYW5zaW9uLCBmb3JjZVRyYWlsaW5nRXhwYW5zaW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5p
dHk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlLmV4cGFuZChtX2V4cGFuc2lvblBl
ck9wcG9ydHVuaXR5LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRMZWZ0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgcHJldmlvdXMgd2lk
dGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9hZGp1c3RlZEJhc2VBZHZhbmNl
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhUZXh0
UnVuLmdyb3dJbml0aWFsQWR2YW5jZUhvcml6b250YWxseShtX2V4cGFuc2lvblBlck9wcG9ydHVu
aXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXMubGFzdCgpLmV4cGFuZChtX2V4
cGFuc2lvblBlck9wcG9ydHVuaXR5LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRSaWdodCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciB3b3JkLXNwYWNpbmcuCisgICAgICAg
ICAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgJiYgKGNoICE9ICdcdCcgfHwgIW1fcnVuLmFs
bG93VGFicygpKSAmJiAoY2hhcmFjdGVySW5kZXggPiAwIHx8IHJ1bkluZGV4ID4gMCkgJiYgbV9m
b250LndvcmRTcGFjaW5nKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlLmV4cGFu
ZChtX2ZvbnQud29yZFNwYWNpbmcoKSwgMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGFmdGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHdpZHRoU2luY2VMYXN0Q29tbWl0ICs9IGFkdmFuY2Uud2lkdGgoKTsKKwor
ICAgICAgICAgICAgLy8gRklYTUU6IENvbWJpbmluZyBtYXJrcyBzaG91bGQgcmVjZWl2ZSBhIHRl
eHQgZW1waGFzaXMgbWFyayBpZiB0aGV5IGFyZSBjb21iaW5lIHdpdGggYSBzcGFjZS4KKyAgICAg
ICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAoIUZvbnRDYXNjYWRlOjpjYW5SZWNlaXZl
VGV4dEVtcGhhc2lzKGNoKSB8fCAoVV9HRVRfR0NfTUFTSyhjaCkgJiBVX0dDX01fTUFTSykpKQor
ICAgICAgICAgICAgICAgIGdseXBoID0gMDsKKworICAgICAgICAgICAgbV9hZGp1c3RlZEJhc2VB
ZHZhbmNlcy5hcHBlbmQoYWR2YW5jZSk7CisgICAgICAgICAgICBpZiAoYXV0byogb3JpZ2lucyA9
IGNvbXBsZXhUZXh0UnVuLmdseXBoT3JpZ2lucygpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KG1fZ2x5cGhPcmlnaW5zLnNpemUoKSA8IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBtX2dseXBoT3JpZ2lucy5ncm93KG1fYWRqdXN0ZWRCYXNlQWR2YW5j
ZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2dseXBoT3JpZ2luc1ttX2dseXBoT3JpZ2lu
cy5zaXplKCkgLSAxXSA9IG9yaWdpbnNbaV07CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ2x5
cGhPcmlnaW5zLnNpemUoKSA9PSBtX2FkanVzdGVkQmFzZUFkdmFuY2VzLnNpemUoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2FkanVzdGVkR2x5cGhzLmFwcGVuZChnbHlwaCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnQuYm91
bmRzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShnbHlwaE9y
aWdpbi54KCksIGdseXBoT3JpZ2luLnkoKSk7CisgICAgICAgICAgICBtX21pbkdseXBoQm91bmRp
bmdCb3hYID0gc3RkOjptaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgp
KTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1heChtX21heEds
eXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkpOworICAgICAgICAgICAgbV9taW5H
bHlwaEJvdW5kaW5nQm94WSA9IHN0ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBo
Qm91bmRzLnkoKSk7CisgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gc3RkOjpt
YXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKKyAgICAgICAg
ICAgIGdseXBoT3JpZ2luLm1vdmUoYWR2YW5jZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGxhc3RDaGFyYWN0ZXJJbmRleCA9IGNoYXJhY3RlckluZGV4OworICAgICAgICB9CisgICAgICAg
IGlmICghaXNNb25vdG9uaWMpCisgICAgICAgICAgICBjb21wbGV4VGV4dFJ1bi5zZXRJc05vbk1v
bm90b25pYygpOworICAgIH0KKworICAgIG1fdG90YWxXaWR0aCArPSB3aWR0aFNpbmNlTGFzdENv
bW1pdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wOWFiYTU1YzRkMjU1MGU5YWYxYmJkYWU3MmRkNjA2NzFlYTViNGE1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250
cm9sbGVyLmgKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNkZWZpbmUgVVNFX0xBWU9VVF9T
UEVDSUZJQ19BRFZBTkNFUyAoKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDExMDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDkwMDAwKSkKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBD
R0dseXBoOworCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUUnVuICogQ1RSdW5SZWY7Cit0eXBl
ZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGluZSAqIENUTGluZVJlZjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGb250Q2FzY2FkZTsKK2NsYXNzIEZvbnQ7CitjbGFzcyBUZXh0UnVuOwor
CitlbnVtIEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFydGlhbEdseXBocywgQnlXaG9s
ZUdseXBocyB9OworCisvLyBTZWUgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvd2lraS9Db21wbGV4
VGV4dENvbnRyb2xsZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ29tcGxleFRleHRDb250
cm9sbGVyLgorY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVj
dGlvbiA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOworCisgICAgY2xhc3MgQ29tcGxleFRleHRSdW47
CisgICAgV0VCQ09SRV9FWFBPUlQgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIFZlY3RvcjxSZWY8Q29tcGxleFRleHRSdW4+PiYpOworCisg
ICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0
ZXIuCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1
ZmZlciogPSBudWxscHRyLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlw
aHMsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gbnVsbHB0cik7CisKKyAg
ICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0
ZS4KKyAgICB1bnNpZ25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKKworICAgIC8vIFJldHVybnMgdGhlIHdpZHRoIG9mIGV2ZXJ5dGhpbmcg
d2UndmUgY29uc3VtZWQgc28gZmFyLgorICAgIGZsb2F0IHJ1bldpZHRoU29GYXIoKSBjb25zdCB7
IHJldHVybiBtX3J1bldpZHRoU29GYXI7IH0KKworICAgIGZsb2F0IHRvdGFsV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3RvdGFsV2lkdGg7IH0KKworICAgIGZsb2F0IG1pbkdseXBoQm91bmRpbmdC
b3hYKCkgY29uc3QgeyByZXR1cm4gbV9taW5HbHlwaEJvdW5kaW5nQm94WDsgfQorICAgIGZsb2F0
IG1heEdseXBoQm91bmRpbmdCb3hYKCkgY29uc3QgeyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5n
Qm94WDsgfQorICAgIGZsb2F0IG1pbkdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyByZXR1cm4g
bV9taW5HbHlwaEJvdW5kaW5nQm94WTsgfQorICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZ
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQorCisgICAgY2xhc3Mg
Q29tcGxleFRleHRSdW4gOiBwdWJsaWMgUmVmQ291bnRlZDxDb21wbGV4VGV4dFJ1bj4geworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKENUUnVu
UmVmIGN0UnVuLCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgc3RyaW5nTG9jYXRpb24sIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCwgdW5zaWduZWQgaW5k
ZXhCZWdpbiwgdW5zaWduZWQgaW5kZXhFbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGN0UnVuLCBmb250LCBjaGFyYWN0ZXJzLCBz
dHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBpbmRleEJlZ2luLCBpbmRleEVuZCkpOworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2Nh
dGlvbiwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCB1bnNpZ25lZCBpbmRleEJlZ2luLCB1bnNpZ25l
ZCBpbmRleEVuZCwgYm9vbCBsdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGZvbnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9u
LCBzdHJpbmdMZW5ndGgsIGluZGV4QmVnaW4sIGluZGV4RW5kLCBsdHIpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShjb25zdCBWZWN0b3I8
RmxvYXRTaXplPiYgYWR2YW5jZXMsIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYgb3JpZ2lucywg
Y29uc3QgVmVjdG9yPEdseXBoPiYgZ2x5cGhzLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBzdHJp
bmdJbmRpY2VzLCBGbG9hdFNpemUgaW5pdGlhbEFkdmFuY2UsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgdW5zaWduZWQg
c3RyaW5nTGVuZ3RoLCB1bnNpZ25lZCBpbmRleEJlZ2luLCB1bnNpZ25lZCBpbmRleEVuZCwgYm9v
bCBsdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBs
ZXhUZXh0UnVuKGFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMsIGluaXRp
YWxBZHZhbmNlLCBmb250LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3Ro
LCBpbmRleEJlZ2luLCBpbmRleEVuZCwgbHRyKSk7CisgICAgICAgIH0KKworICAgICAgICB1bnNp
Z25lZCBnbHlwaENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaENvdW50OyB9CisgICAgICAg
IGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKyAgICAgICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KKyAg
ICAgICAgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ0xv
Y2F0aW9uOyB9CisgICAgICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nTGVuZ3RoOyB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgaW5kZXhB
dCh1bnNpZ25lZCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIGluZGV4QmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX2luZGV4QmVnaW47IH0KKyAgICAgICAgdW5zaWduZWQgaW5kZXhFbmQoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4RW5kOyB9CisgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldEF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgQVNTRVJUKCFtX2lzTW9ub3RvbmljKTsgcmV0dXJuIG1fZ2x5cGhF
bmRPZmZzZXRzW2ldOyB9CisgICAgICAgIGNvbnN0IENHR2x5cGgqIGdseXBocygpIGNvbnN0IHsg
cmV0dXJuIG1fZ2x5cGhzLmRhdGEoKTsgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMg
aXMgdGhlIGZvcm1hdCBvZiB0aGUgaW5mb3JtYXRpb24gQ29yZVRleHQgZ2l2ZXMgdXMgYWJvdXQg
ZWFjaCBydW46CisgICAgICAgICAqCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0tLS0tPlggKFBhaW50IGdseXBoIHBvc2l0aW9uKSAgIFggKFBhaW50
IGdseXBoIHBvc2l0aW9uKSAgIFggKFBhaW50IGdseXBoIHBvc2l0aW9uKQorICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gICAgIDcgICAgICAgICAgICAg
ICAgICAgICAgICAgIDcgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyAgICAgICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gICAgIC8gICAgICAgICAgICAgICAg
ICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICogICAgICAg
ICAgICAgICAgICAgKEluaXRpYWwgYWR2YW5jZSkgLyAgICAgLyAoR2x5cGggb3JpZ2luKSAgICAg
ICAgICAgLyAoR2x5cGggb3JpZ2luKSAgICAgICAgICAgLyAoR2x5cGggb3JpZ2luKQorICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC8gICAgICAgICAg
ICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICog
ICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAg
ICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICogICAgICAg
ICAgICAgICAgWCAgICAgICAgICAgICAgICAgICAgICAgWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
WAorICAgICAgICAgKiAodGV4dCBwb3NpdGlvbiBeKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGJhc2UgYWR2YW5jZSkgICAgICAgICAgICAgKGJhc2UgYWR2YW5jZSkgICAgICAgICAgICAg
KGJhc2UgYWR2YW5jZSkKKyAgICAgICAgICoKKyAgICAgICAgICoKKyAgICAgICAgICoKKyAgICAg
ICAgICoKKyAgICAgICAgICoKKyAgICAgICAgICogQW5kIGhlcmUgaXMgdGhlIG91dHB1dCB3ZSB0
cmFuc2Zvcm0gdGhpcyBpbnRvIChmb3IgZWFjaCBydW4pOgorICAgICAgICAgKgorICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLT5YLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLT5YLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5YCisgICAgICAgICAq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgIChQYWlu
dCBhZHZhbmNlKSAgICAgICAgICAgIChQYWludCBhZHZhbmNlKSAgICAgICBcCisgICAgICAgICAq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAoSW5pdGlhbCBhZHZhbmNlKSAvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIChQYWludCBh
ZHZhbmNlKQorICAgICAgICAgKiAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKiAgICAgICAgICAgICAgICAgLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICog
ICAgICAgICAgICAgICAgWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tWAorICAgICAgICAgKiAodGV4dCBwb3NpdGlvbiBeKSAgICAgICAgICAgICAgICAobGF5
b3V0IGFkdmFuY2UpICAgICAgICAgICAgICAgICAgICAgICAobGF5b3V0IGFkdmFuY2UpICAgICAg
ICAgICAobGF5b3V0IGFkdmFuY2UpCisgICAgICAgICAqLworICAgICAgICB2b2lkIGdyb3dJbml0
aWFsQWR2YW5jZUhvcml6b250YWxseShmbG9hdCBkZWx0YSkgeyBtX2luaXRpYWxBZHZhbmNlLmV4
cGFuZChkZWx0YSwgMCk7IH0KKyAgICAgICAgRmxvYXRTaXplIGluaXRpYWxBZHZhbmNlKCkgY29u
c3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQorICAgICAgICBjb25zdCBGbG9hdFNpemUq
IGJhc2VBZHZhbmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUFkdmFuY2VzLmRhdGEoKTsgfQor
ICAgICAgICBjb25zdCBGbG9hdFBvaW50KiBnbHlwaE9yaWdpbnMoKSBjb25zdCB7IHJldHVybiBt
X2dseXBoT3JpZ2lucy5zaXplKCkgPT0gZ2x5cGhDb3VudCgpID8gbV9nbHlwaE9yaWdpbnMuZGF0
YSgpIDogbnVsbHB0cjsgfQorICAgICAgICBib29sIGlzTFRSKCkgY29uc3QgeyByZXR1cm4gbV9p
c0xUUjsgfQorICAgICAgICBib29sIGlzTW9ub3RvbmljKCkgY29uc3QgeyByZXR1cm4gbV9pc01v
bm90b25pYzsgfQorICAgICAgICB2b2lkIHNldElzTm9uTW9ub3RvbmljKCk7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgRm9udCYsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgdW5zaWduZWQgc3Ry
aW5nTGVuZ3RoLCB1bnNpZ25lZCBpbmRleEJlZ2luLCB1bnNpZ25lZCBpbmRleEVuZCk7CisgICAg
ICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCwgdW5zaWduZWQg
aW5kZXhCZWdpbiwgdW5zaWduZWQgaW5kZXhFbmQsIGJvb2wgbHRyKTsKKyAgICAgICAgV0VCQ09S
RV9FWFBPUlQgQ29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGFkdmFuY2Vz
LCBjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIG9yaWdpbnMsIGNvbnN0IFZlY3RvcjxHbHlwaD4m
IGdseXBocywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgc3RyaW5nSW5kaWNlcywgRmxvYXRTaXpl
IGluaXRpYWxBZHZhbmNlLCBjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIHN0cmluZ0xvY2F0aW9uLCB1bnNpZ25lZCBzdHJpbmdMZW5ndGgsIHVuc2lnbmVkIGlu
ZGV4QmVnaW4sIHVuc2lnbmVkIGluZGV4RW5kLCBib29sIGx0cik7CisKKyAgICAgICAgVmVjdG9y
PEZsb2F0U2l6ZSwgNjQ+IG1fYmFzZUFkdmFuY2VzOworICAgICAgICBWZWN0b3I8RmxvYXRQb2lu
dCwgNjQ+IG1fZ2x5cGhPcmlnaW5zOworICAgICAgICBWZWN0b3I8Q0dHbHlwaCwgNjQ+IG1fZ2x5
cGhzOworICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDY0PiBtX2dseXBoRW5kT2Zmc2V0czsKKyAg
ICAgICAgVmVjdG9yPHVuc2lnbmVkLCA2ND4gbV9jb3JlVGV4dEluZGljZXM7CisgICAgICAgIEZs
b2F0U2l6ZSBtX2luaXRpYWxBZHZhbmNlOworICAgICAgICBjb25zdCBGb250JiBtX2ZvbnQ7Cisg
ICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fc3Ry
aW5nTGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4QmVnaW47CisgICAgICAgIHVuc2ln
bmVkIG1faW5kZXhFbmQ7CisgICAgICAgIHVuc2lnbmVkIG1fZ2x5cGhDb3VudDsKKyAgICAgICAg
dW5zaWduZWQgbV9zdHJpbmdMb2NhdGlvbjsKKyAgICAgICAgYm9vbCBtX2lzTFRSOworICAgICAg
ICBib29sIG1faXNNb25vdG9uaWMgeyB0cnVlIH07CisgICAgfTsKK3ByaXZhdGU6CisgICAgdm9p
ZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKTsKKyAgICB2b2lkIGZpbmlzaENvbnN0cnVj
dGlvbigpOworICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBzdHJpbmdCZWdpbihjb25zdCBDb21w
bGV4VGV4dFJ1biYgcnVuKSB7IHJldHVybiBydW4uc3RyaW5nTG9jYXRpb24oKSArIHJ1bi5pbmRl
eEJlZ2luKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgc3RyaW5nRW5kKGNvbnN0IENvbXBsZXhU
ZXh0UnVuJiBydW4pIHsgcmV0dXJuIHJ1bi5zdHJpbmdMb2NhdGlvbigpICsgcnVuLmluZGV4RW5k
KCk7IH0KKworICAgIHZvaWQgY29sbGVjdENvbXBsZXhUZXh0UnVucygpOworCisgICAgdm9pZCBj
b2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQqKTsKKyAgICB2b2lk
IGFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleE9mQ3VycmVu
dFJ1bih1bnNpZ25lZCYgbGVmdG1vc3RHbHlwaCk7CisgICAgdW5zaWduZWQgaW5jcmVtZW50Q3Vy
cmVudFJ1bih1bnNpZ25lZCYgbGVmdG1vc3RHbHlwaCk7CisKKyAgICBmbG9hdCBydW5XaWR0aFNv
RmFyRnJhY3Rpb24odW5zaWduZWQgZ2x5cGhTdGFydE9mZnNldCwgdW5zaWduZWQgZ2x5cGhFbmRP
ZmZzZXQsIHVuc2lnbmVkIG9sZENoYXJhY3RlckluQ3VycmVudEdseXBoLCBHbHlwaEl0ZXJhdGlv
blN0eWxlKSBjb25zdDsKKworICAgIEZsb2F0UG9pbnQgZ2x5cGhPcmlnaW4odW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgbV9nbHlwaE9yaWdpbnMuc2l6ZSgpID8gbV9nbHlw
aE9yaWdpbnNbaW5kZXhdIDogRmxvYXRQb2ludCgpOyB9CisKKyAgICBWZWN0b3I8RmxvYXRTaXpl
LCAyNTY+IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXM7CisgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDI1
Nj4gbV9nbHlwaE9yaWdpbnM7CisgICAgVmVjdG9yPENHR2x5cGgsIDI1Nj4gbV9hZGp1c3RlZEds
eXBoczsKKworICAgIFZlY3RvcjxVQ2hhciwgMjU2PiBtX3NtYWxsQ2Fwc0J1ZmZlcjsKKworICAg
IC8vIFRoZXJlIGlzIGEgMy1sZXZlbCBoaWVyYXJjaHkgaGVyZS4gQXQgdGhlIHRvcCwgd2UgYXJl
IGludGVyZXN0ZWQgaW4gbV9ydW4uc3RyaW5nKCkuIFdlIHBhcnRpdGlvbiB0aGF0IHN0cmluZwor
ICAgIC8vIGludG8gTGluZXMsIGVhY2ggb2Ygd2hpY2ggaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0
ZXJzIHdoaWNoIHNob3VsZCB1c2UgdGhlIHNhbWUgRm9udC4gQ29yZSBUZXh0IHRoZW4gcGFydGl0
aW9ucworICAgIC8vIHRoZSBMaW5lIGludG8gQ29tcGxleFRleHRSdW5zLgorICAgIC8vIENvbXBs
ZXhUZXh0UnVuOjpzdHJpbmdMb2NhdGlvbigpIGFuZCBDb21wbGV4VGV4dFJ1bjo6c3RyaW5nTGVu
Z3RoKCkgcmVmZXIgdG8gdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBMaW5lCisgICAgLy8g
cmVsYXRpdmUgdG8gbV9ydW4uc3RyaW5nKCkuIENvbXBsZXhUZXh0UnVuOjppbmRleEF0KCkgcmV0
dXJucyB0byB0aGUgb2Zmc2V0IG9mIGEgY29kZXBvaW50IHJlbGF0aXZlIHRvCisgICAgLy8gaXRz
IExpbmUuIENvbXBsZXhUZXh0UnVuOjpnbHlwaHMoKSBhbmQgQ29tcGxleFRleHRSdW46OmFkdmFu
Y2VzKCkgcmVmZXIgdG8gZ2x5cGhzIHJlbGF0aXZlIHRvIHRoZSBDb21wbGV4VGV4dFJ1bi4KKyAg
ICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBlbnRpcmUgVGV4dFJ1biBpcyBtX3J1bi5sZW5ndGgoKQor
ICAgIFZlY3RvcjxSZWZQdHI8Q29tcGxleFRleHRSdW4+LCAxNj4gbV9jb21wbGV4VGV4dFJ1bnM7
CisKKyAgICAvLyBUaGUgaW5pdGlhbCBjYXBhY2l0eSBvZiB0aGVzZSB2ZWN0b3JzIHdhcyBzZWxl
Y3RlZCBhcyBiZWluZyB0aGUgc21hbGxlc3QgcG93ZXIgb2YgdHdvIGdyZWF0ZXIgdGhhbgorICAg
IC8vIHRoZSBhdmVyYWdlICgzLjUpIHBsdXMgb25lIHN0YW5kYXJkIGRldmlhdGlvbiAoNy41KSBv
ZiBub256ZXJvIHNpemVzIHVzZWQgb24gQXJhYmljIFdpa2lwZWRpYS4KKyAgICBWZWN0b3I8dW5z
aWduZWQsIDE2PiBtX3J1bkluZGljZXM7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gbV9nbHlw
aENvdW50RnJvbVN0YXJ0VG9JbmRleDsKKworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q1RMaW5lUmVm
Pj4gbV9jb3JlVGV4dExpbmVzOworCisgICAgVmVjdG9yPFN0cmluZz4gbV9zdHJpbmdzRm9yOEJp
dFJ1bnM7CisKKyAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzIHsgbnVs
bHB0ciB9OworCisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKKyAgICBjb25zdCBUZXh0
UnVuJiBtX3J1bjsKKworICAgIHVuc2lnbmVkIG1fY3VycmVudENoYXJhY3RlciB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBtX2VuZCB7IDAgfTsKKworICAgIGZsb2F0IG1fdG90YWxXaWR0aCB7IDAgfTsK
KyAgICBmbG9hdCBtX3J1bldpZHRoU29GYXIgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1HbHlw
aHNTb0ZhciB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRSdW4geyAwIH07CisgICAgdW5z
aWduZWQgbV9nbHlwaEluQ3VycmVudFJ1biB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2NoYXJhY3Rl
ckluQ3VycmVudEdseXBoIHsgMCB9OworICAgIGZsb2F0IG1fZXhwYW5zaW9uIHsgMCB9OworICAg
IGZsb2F0IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgeyAwIH07CisKKyAgICBmbG9hdCBtX21p
bkdseXBoQm91bmRpbmdCb3hYIHsgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpIH07
CisgICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjptaW4oKSB9OworICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFkgeyBzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkgfTsKKyAgICBmbG9hdCBtX21heEdseXBoQm91
bmRpbmdCb3hZIHsgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpIH07CisKKyAgICBi
b29sIG1faXNMVFJPbmx5IHsgdHJ1ZSB9OworICAgIGJvb2wgbV9tYXlVc2VOYXR1cmFsV3JpdGlu
Z0RpcmVjdGlvbiB7IGZhbHNlIH07CisgICAgYm9vbCBtX2ZvclRleHRFbXBoYXNpcyB7IGZhbHNl
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDlmM2NhY2RjMzRiMDRhNDE4MWY3
YjI5MDA3YjU4MzY4M2JkY2M3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODMzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
b21wbGV4VGV4dENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRpZXMu
aCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUg
IlRleHRSdW4uaCIKLSNpbmNsdWRlIDx1bmljb2RlL3VicmsuaD4KLSNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJO
YW1lcy5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0
Lmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFRleHRMYXlvdXQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIHN0YXRpYyBib29sIGlzTmVlZGVkKFJlbmRlclRleHQmIHRleHQsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250KQotICAgIHsKLSAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJC
bG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LnN0eWxlKCkpOwotICAgICAgICByZXR1
cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnRDYXNjYWRlOjpDb21wbGV4OwotICAgIH0KLQot
ICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCYgdGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGZsb2F0IHhQb3MpCi0gICAgICAgIDogbV9mb250KGZvbnQpCi0gICAgICAgICwgbV9ydW4oY29u
c3RydWN0VGV4dFJ1bih0ZXh0LCB4UG9zKSkKLSAgICAgICAgLCBtX2NvbnRyb2xsZXIoc3RkOjpt
YWtlX3VuaXF1ZTxDb21wbGV4VGV4dENvbnRyb2xsZXI+KG1fZm9udCwgbV9ydW4sIHRydWUpKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBs
ZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQotICAgIHsKLSAgICAgICAg
bV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hvbGVHbHlwaHMsIGZhbGxiYWNrRm9u
dHMpOwotICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1fY29udHJvbGxlci0+cnVuV2lkdGhT
b0ZhcigpOwotICAgICAgICBpZiAobV9mb250LndvcmRTcGFjaW5nKCkgJiYgZnJvbSAmJiBGb250
Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zyb21dKSkKLSAgICAgICAgICAgIGJlZm9yZVdp
ZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygpOwotICAgICAgICBtX2NvbnRyb2xsZXItPmFkdmFu
Y2UoZnJvbSArIGxlbiwgMCwgQnlXaG9sZUdseXBocywgZmFsbGJhY2tGb250cyk7Ci0gICAgICAg
IGZsb2F0IGFmdGVyV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIoKTsKLSAgICAg
ICAgcmV0dXJuIGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJUZXh0JiB0ZXh0LCBmbG9h
dCB4UG9zKQotICAgIHsKLSAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LnN0eWxlKCkpOwotICAgICAgICBydW4uc2V0Q2hhcmFjdGVy
c0xlbmd0aCh0ZXh0LnRleHRMZW5ndGgoKSk7Ci0gICAgICAgIEFTU0VSVChydW4uY2hhcmFjdGVy
c0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHJ1bi5zZXRYUG9zKHhQb3MpOwot
ICAgICAgICByZXR1cm4gcnVuOwotICAgIH0KLQotICAgIC8vIENvbXBsZXhUZXh0Q29udHJvbGxl
ciBoYXMgb25seSByZWZlcmVuY2VzIHRvIGl0cyBGb250Q2FzY2FkZSBhbmQgVGV4dFJ1biBzbyB0
aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgotICAgIEZvbnRDYXNjYWRlIG1fZm9udDsKLSAg
ICBUZXh0UnVuIG1fcnVuOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wbGV4VGV4dENvbnRyb2xs
ZXI+IG1fY29udHJvbGxlcjsKLX07Ci0KLXZvaWQgVGV4dExheW91dERlbGV0ZXI6Om9wZXJhdG9y
KCkoVGV4dExheW91dCogbGF5b3V0KSBjb25zdAotewotICAgIGRlbGV0ZSBsYXlvdXQ7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxUZXh0TGF5b3V0LCBUZXh0TGF5b3V0RGVsZXRlcj4gRm9udENhc2Nh
ZGU6OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0JiB0ZXh0LCBmbG9hdCB4UG9zLCBib29sIGNvbGxh
cHNlV2hpdGVTcGFjZSkgY29uc3QKLXsKLSAgICBpZiAoIWNvbGxhcHNlV2hpdGVTcGFjZSB8fCAh
VGV4dExheW91dDo6aXNOZWVkZWQodGV4dCwgKnRoaXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQsIFRleHRMYXlvdXREZWxl
dGVyPihuZXcgVGV4dExheW91dCh0ZXh0LCAqdGhpcywgeFBvcykpOwotfQotCi1mbG9hdCBGb250
Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQotewotICAgIHJldHVy
biBsYXlvdXQud2lkdGgoZnJvbSwgbGVuLCBmYWxsYmFja0ZvbnRzKTsKLX0KLQotdm9pZCBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSgpCi17Ci0gICAg
aWYgKCFtX2V4cGFuc2lvbikKLSAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1f
cnVuLmx0cigpID8gTFRSIDogUlRMLCBtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpKS5maXJzdDsK
LQotICAgICAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgICAgICAgICBt
X2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IG1fZXhwYW5zaW9uIC8gZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudDsKLSAgICB9Ci19Ci0KLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRl
eHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4s
IGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzLCBib29sIGZvclRleHRFbXBoYXNpcykKLSAgICA6IG1fZmFsbGJhY2tG
b250cyhmYWxsYmFja0ZvbnRzKQotICAgICwgbV9mb250KGZvbnQpCi0gICAgLCBtX3J1bihydW4p
Ci0gICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCi0gICAgLCBtX2V4cGFuc2lvbihydW4uZXhwYW5z
aW9uKCkpCi0gICAgLCBtX21heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uKG1heVVzZU5hdHVy
YWxXcml0aW5nRGlyZWN0aW9uKQotICAgICwgbV9mb3JUZXh0RW1waGFzaXMoZm9yVGV4dEVtcGhh
c2lzKQotewotICAgIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSgpOwotCi0gICAgY29sbGVj
dENvbXBsZXhUZXh0UnVucygpOwotCi0gICAgZmluaXNoQ29uc3RydWN0aW9uKCk7Ci19Ci0KLUNv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIFZlY3RvcjxSZWY8Q29tcGxleFRleHRSdW4+
PiYgcnVucykKLSAgICA6IG1fZm9udChmb250KQotICAgICwgbV9ydW4ocnVuKQotICAgICwgbV9l
bmQocnVuLmxlbmd0aCgpKQotICAgICwgbV9leHBhbnNpb24ocnVuLmV4cGFuc2lvbigpKQotewot
ICAgIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSgpOwotCi0gICAgZm9yIChhdXRvJiBydW4g
OiBydW5zKQotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQocnVuLnB0cigpKTsKLQot
ICAgIGZpbmlzaENvbnN0cnVjdGlvbigpOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6ZmluaXNoQ29uc3RydWN0aW9uKCkKLXsKLSAgICBhZGp1c3RHbHlwaHNBbmRBZHZhbmNlcygp
OwotCi0gICAgaWYgKCFtX2lzTFRST25seSkgewotICAgICAgICBtX3J1bkluZGljZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtX2NvbXBsZXhUZXh0UnVucy5zaXplKCkpOwotCi0gICAgICAgIG1f
Z2x5cGhDb3VudEZyb21TdGFydFRvSW5kZXgucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NvbXBs
ZXhUZXh0UnVucy5zaXplKCkpOwotICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50U29GYXIgPSAw
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21wbGV4VGV4dFJ1bnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIG1fZ2x5cGhDb3VudEZyb21TdGFydFRvSW5kZXgudW5j
aGVja2VkQXBwZW5kKGdseXBoQ291bnRTb0Zhcik7Ci0gICAgICAgICAgICBnbHlwaENvdW50U29G
YXIgKz0gbV9jb21wbGV4VGV4dFJ1bnNbaV0tPmdseXBoQ291bnQoKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlv
bihmbG9hdCBoLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKQotewotICAgIGlmIChoID49IG1f
dG90YWxXaWR0aCkKLSAgICAgICAgcmV0dXJuIG1fcnVuLmx0cigpID8gbV9lbmQgOiAwOwotCi0g
ICAgaWYgKGggPCAwKQotICAgICAgICByZXR1cm4gbV9ydW4ubHRyKCkgPyAwIDogbV9lbmQ7Ci0K
LSAgICBmbG9hdCB4ID0gaDsKLQotICAgIHNpemVfdCBydW5Db3VudCA9IG1fY29tcGxleFRleHRS
dW5zLnNpemUoKTsKLSAgICB1bnNpZ25lZCBvZmZzZXRJbnRvQWRqdXN0ZWRHbHlwaHMgPSAwOwot
Ci0gICAgZm9yIChzaXplX3QgciA9IDA7IHIgPCBydW5Db3VudDsgKytyKSB7Ci0gICAgICAgIGNv
bnN0IENvbXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1biA9ICptX2NvbXBsZXhUZXh0UnVuc1ty
XTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNvbXBsZXhUZXh0UnVuLmdseXBo
Q291bnQoKTsgKytqKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IG9mZnNldEludG9B
ZGp1c3RlZEdseXBocyArIGo7Ci0gICAgICAgICAgICBmbG9hdCBhZGp1c3RlZEFkdmFuY2UgPSBt
X2FkanVzdGVkQmFzZUFkdmFuY2VzW2luZGV4XS53aWR0aCgpOwotICAgICAgICAgICAgaWYgKHgg
PCBhZGp1c3RlZEFkdmFuY2UpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRHbHlwaFN0
YXJ0ID0gY29tcGxleFRleHRSdW4uaW5kZXhBdChqKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBoaXRHbHlwaEVuZDsKLSAgICAgICAgICAgICAgICBpZiAobV9ydW4ubHRyKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGhpdEdseXBoRW5kID0gc3RkOjptYXgoaGl0R2x5cGhTdGFydCwgaiArIDEg
PCBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCkgPyBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGog
KyAxKSA6IGNvbXBsZXhUZXh0UnVuLmluZGV4RW5kKCkpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgaGl0R2x5cGhFbmQgPSBzdGQ6Om1heChoaXRHbHlwaFN0YXJ0
LCBqID4gMCA/IGNvbXBsZXhUZXh0UnVuLmluZGV4QXQoaiAtIDEpIDogY29tcGxleFRleHRSdW4u
aW5kZXhFbmQoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBkaXZp
ZGluZyB0aGUgZ2x5cGgncyBhZHZhbmNlIGVxdWFsbHkgYmV0d2VlbiB0aGUgY2hhcmFjdGVycywg
dGhpcwotICAgICAgICAgICAgICAgIC8vIGNvdWxkIHVzZSB0aGUgZ2x5cGgncyAibGlnYXR1cmUg
Y2FyZXRzIi4gVGhpcyBpcyBhdmFpbGFibGUgaW4gQ29yZVRleHQgdmlhIENURm9udEdldExpZ2F0
dXJlQ2FyZXRQb3NpdGlvbnMoKS4KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRJbmRleCA9
IGhpdEdseXBoU3RhcnQgKyAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KSAqIChtX3J1bi5s
dHIoKSA/IHggLyBhZGp1c3RlZEFkdmFuY2UgOiAxIC0geCAvIGFkanVzdGVkQWR2YW5jZSk7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3Ry
aW5nTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgVUJyZWFrSXRlcmF0b3IqIGN1cnNvclBvc2l0
aW9uSXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmluZ1ZpZXcoY29tcGxleFRl
eHRSdW4uY2hhcmFjdGVycygpLCBzdHJpbmdMZW5ndGgpKTsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjbHVzdGVyU3RhcnQ7Ci0gICAgICAgICAgICAgICAgaWYgKHVicmtfaXNCb3VuZGFyeShj
dXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIGNs
dXN0ZXJTdGFydCA9IGhpdEluZGV4OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBpbnQgcHJlY2VlZGluZyA9IHVicmtfcHJlY2VkaW5nKGN1cnNvclBvc2l0aW9u
SXRlcmF0b3IsIGhpdEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgY2x1c3RlclN0YXJ0ID0g
cHJlY2VlZGluZyA9PSBVQlJLX0RPTkUgPyAwIDogcHJlY2VlZGluZzsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWluY2x1ZGVQYXJ0aWFsR2x5cGhzKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKSArIGNs
dXN0ZXJTdGFydDsKLQotICAgICAgICAgICAgICAgIGludCBmb2xsb3dpbmcgPSB1YnJrX2ZvbGxv
d2luZyhjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCk7Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgY2x1c3RlckVuZCA9IGZvbGxvd2luZyA9PSBVQlJLX0RPTkUgPyBzdHJpbmdMZW5n
dGggOiBmb2xsb3dpbmc7Ci0KLSAgICAgICAgICAgICAgICBmbG9hdCBjbHVzdGVyV2lkdGg7Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBzZWFyY2ggc3RvcHMgYXQgdGhlIGJvdW5kYXJp
ZXMgb2YgY29tcGxleFRleHRSdW4uIEluIHRoZW9yeSwgaXQgc2hvdWxkIGdvIG9uIGludG8gbmVp
Z2hib3JpbmcgQ29tcGxleFRleHRSdW5zCi0gICAgICAgICAgICAgICAgLy8gZGVyaXZlZCBmcm9t
IHRoZSBzYW1lIENUTGluZS4gSW4gcHJhY3RpY2UsIHdlIGRvIG5vdCBleHBlY3QgdGhlcmUgdG8g
YmUgbW9yZSB0aGFuIG9uZSBDVFJ1biBpbiBhIENUTGluZSwgYXMgbm8KLSAgICAgICAgICAgICAg
ICAvLyByZW9yZGVyaW5nIGFuZCBubyBmb250IGZhbGxiYWNrIHNob3VsZCBvY2N1ciB3aXRoaW4g
YSBDVExpbmUuCi0gICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJFbmQgLSBjbHVzdGVyU3RhcnQg
PiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJXaWR0aCA9IGFkanVzdGVkQWR2YW5j
ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGopIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGZpcnN0R2x5cGhCZWZvcmVDbHVzdGVyID0gaiAtIDE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoY29tcGxleFRleHRSdW4uaW5kZXhBdChmaXJzdEdseXBoQmVmb3Jl
Q2x1c3RlcikgPj0gY2x1c3RlclN0YXJ0ICYmIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQoZmlyc3RH
bHlwaEJlZm9yZUNsdXN0ZXIpIDwgY2x1c3RlckVuZCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHdpZHRoID0gbV9hZGp1c3RlZEJhc2VBZHZhbmNlc1tvZmZzZXRJbnRvQWRq
dXN0ZWRHbHlwaHMgKyBmaXJzdEdseXBoQmVmb3JlQ2x1c3Rlcl0ud2lkdGgoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbHVzdGVyV2lkdGggKz0gd2lkdGg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeCArPSB3aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZpcnN0R2x5cGhCZWZvcmVDbHVzdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEdseXBoQmVmb3Jl
Q2x1c3Rlci0tOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0R2x5cGhBZnRlckNsdXN0ZXIg
PSBqICsgMTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZpcnN0R2x5cGhBZnRlckNsdXN0
ZXIgPCBjb21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCkgJiYgY29tcGxleFRleHRSdW4uaW5kZXhB
dChmaXJzdEdseXBoQWZ0ZXJDbHVzdGVyKSA+PSBjbHVzdGVyU3RhcnQgJiYgY29tcGxleFRleHRS
dW4uaW5kZXhBdChmaXJzdEdseXBoQWZ0ZXJDbHVzdGVyKSA8IGNsdXN0ZXJFbmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJXaWR0aCArPSBtX2FkanVzdGVkQmFzZUFkdmFuY2Vz
W29mZnNldEludG9BZGp1c3RlZEdseXBocyArIGZpcnN0R2x5cGhBZnRlckNsdXN0ZXJdLndpZHRo
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEdseXBoQWZ0ZXJDbHVzdGVyKys7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBjbHVzdGVyV2lkdGggPSBhZGp1c3RlZEFkdmFuY2UgLyAoaGl0R2x5cGhFbmQg
LSBoaXRHbHlwaFN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgeCAtPSAgY2x1c3RlcldpZHRo
ICogKG1fcnVuLmx0cigpID8gaGl0SW5kZXggLSBoaXRHbHlwaFN0YXJ0IDogaGl0R2x5cGhFbmQg
LSBoaXRJbmRleCAtIDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
eCA8PSBjbHVzdGVyV2lkdGggLyAyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxl
eFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKSArIChtX3J1bi5sdHIoKSA/IGNsdXN0ZXJTdGFydCA6
IGNsdXN0ZXJFbmQpOwotICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV4VGV4dFJ1bi5zdHJp
bmdMb2NhdGlvbigpICsgKG1fcnVuLmx0cigpID8gY2x1c3RlckVuZCA6IGNsdXN0ZXJTdGFydCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4IC09IGFkanVzdGVkQWR2YW5jZTsKLSAgICAg
ICAgfQotICAgICAgICBvZmZzZXRJbnRvQWRqdXN0ZWRHbHlwaHMgKz0gY29tcGxleFRleHRSdW4u
Z2x5cGhDb3VudCgpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwOwotfQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlaW1wbGVtZW50aW5n
IHRoaXMgZnVuY3Rpb24gdXNpbmcgSUNVIHRvIGFkdmFuY2UgYnkgZ3JhcGhlbWUuCi0vLyBUaGUg
Y3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5IGNvbnNpZGVycyBleHBsaWNpdGx5IGVtb2ppIHNl
cXVlbmNlcyBhbmQgZW1vamkgdmFyaWF0aW9ucy4KLXN0YXRpYyBib29sIGFkdmFuY2VCeUNvbWJp
bmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiYgaXRlcmF0b3IsIGNvbnN0IFVDaGFy
KiBlbmQsIFVDaGFyMzImIGJhc2VDaGFyYWN0ZXIsIHVuc2lnbmVkJiBtYXJrQ291bnQpCi17Ci0g
ICAgQVNTRVJUKGl0ZXJhdG9yIDwgZW5kKTsKLQotICAgIG1hcmtDb3VudCA9IDA7Ci0KLSAgICB1
bnNpZ25lZCBpID0gMDsKLSAgICB1bnNpZ25lZCByZW1haW5pbmdDaGFyYWN0ZXJzID0gZW5kIC0g
aXRlcmF0b3I7Ci0gICAgVTE2X05FWFQoaXRlcmF0b3IsIGksIHJlbWFpbmluZ0NoYXJhY3RlcnMs
IGJhc2VDaGFyYWN0ZXIpOwotICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgKyBpOwotICAgIGlmIChV
X0lTX1NVUlJPR0FURShiYXNlQ2hhcmFjdGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgLy8gQ29uc3VtZSBtYXJrcy4KLSAgICBib29sIHNhd0Vtb2ppR3JvdXBDYW5kaWRhdGUgPSBp
c0Vtb2ppR3JvdXBDYW5kaWRhdGUoYmFzZUNoYXJhY3Rlcik7Ci0gICAgYm9vbCBzYXdKb2luZXIg
PSBmYWxzZTsKLSAgICB3aGlsZSAoaXRlcmF0b3IgPCBlbmQpIHsKLSAgICAgICAgVUNoYXIzMiBu
ZXh0Q2hhcmFjdGVyOwotICAgICAgICB1bnNpZ25lZCBtYXJrTGVuZ3RoID0gMDsKLSAgICAgICAg
Ym9vbCBzaG91bGRDb250aW51ZSA9IGZhbHNlOwotICAgICAgICBBU1NFUlQoZW5kID49IGl0ZXJh
dG9yKTsKLSAgICAgICAgVTE2X05FWFQoaXRlcmF0b3IsIG1hcmtMZW5ndGgsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihlbmQgLSBpdGVyYXRvciksIG5leHRDaGFyYWN0ZXIpOwotCi0gICAgICAgIGlm
IChpc1ZhcmlhdGlvblNlbGVjdG9yKG5leHRDaGFyYWN0ZXIpIHx8IGlzRW1vamlGaXR6cGF0cmlj
a01vZGlmaWVyKG5leHRDaGFyYWN0ZXIpKQotICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0
cnVlOwotCi0gICAgICAgIGlmIChzYXdKb2luZXIgJiYgaXNFbW9qaUdyb3VwQ2FuZGlkYXRlKG5l
eHRDaGFyYWN0ZXIpKQotICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwotCi0gICAg
ICAgIHNhd0pvaW5lciA9IGZhbHNlOwotICAgICAgICBpZiAoc2F3RW1vamlHcm91cENhbmRpZGF0
ZSAmJiBuZXh0Q2hhcmFjdGVyID09IHplcm9XaWR0aEpvaW5lcikgewotICAgICAgICAgICAgc2F3
Sm9pbmVyID0gdHJ1ZTsKLSAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSAmJiAhKFVfR0VUX0dD
X01BU0sobmV4dENoYXJhY3RlcikgJiBVX0dDX01fTUFTSykpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBtYXJrQ291bnQgKz0gbWFya0xlbmd0aDsKLSAgICAgICAgaXRlcmF0b3IgKz0g
bWFya0xlbmd0aDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRklYTUU6IENh
cGl0YWxpemF0aW9uIGlzIGxhbmd1YWdlLWRlcGVuZGVudCBhbmQgY29udGV4dC1kZXBlbmRlbnQg
YW5kIHNob3VsZCBvcGVyYXRlIG9uIGdyYXBoZW1lIGNsdXN0ZXJzIGluc3RlYWQgb2YgY29kZXBv
aW50cy4KLXN0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxVQ2hhcjMyPiBjYXBpdGFsaXplZChV
Q2hhcjMyIGJhc2VDaGFyYWN0ZXIpCi17Ci0gICAgaWYgKFVfR0VUX0dDX01BU0soYmFzZUNoYXJh
Y3RlcikgJiBVX0dDX01fTUFTSykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
IFVDaGFyMzIgdXBwZXJjYXNlQ2hhcmFjdGVyID0gdV90b3VwcGVyKGJhc2VDaGFyYWN0ZXIpOwot
ICAgIEFTU0VSVCh1cHBlcmNhc2VDaGFyYWN0ZXIgPT0gYmFzZUNoYXJhY3RlciB8fCAoVV9JU19C
TVAoYmFzZUNoYXJhY3RlcikgPT0gVV9JU19CTVAodXBwZXJjYXNlQ2hhcmFjdGVyKSkpOwotICAg
IGlmICh1cHBlcmNhc2VDaGFyYWN0ZXIgIT0gYmFzZUNoYXJhY3RlcikKLSAgICAgICAgcmV0dXJu
IHVwcGVyY2FzZUNoYXJhY3RlcjsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi1zdGF0
aWMgYm9vbCBzaG91bGRTeW50aGVzaXplKGJvb2wgZG9udFN5bnRoZXNpemVTbWFsbENhcHMsIGNv
bnN0IEZvbnQqIG5leHRGb250LCBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXIsIHN0ZDo6b3B0aW9uYWw8
VUNoYXIzMj4gY2FwaXRhbGl6ZWRCYXNlLCBGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBz
LCBib29sIGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcpCi17Ci0gICAgaWYgKGRvbnRTeW50
aGVzaXplU21hbGxDYXBzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFuZXh0Rm9u
dCB8fCBuZXh0Rm9udCA9PSBGb250OjpzeXN0ZW1GYWxsYmFjaygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgJiYgaXNBU0NJSVNw
YWNlKGJhc2VDaGFyYWN0ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFlbmdh
Z2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nICYmICFjYXBpdGFsaXplZEJhc2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gIW5leHRGb250LT52YXJpYW50Q2Fwc1N1cHBvcnRzQ2hh
cmFjdGVyRm9yU3ludGhlc2lzKGZvbnRWYXJpYW50Q2FwcywgYmFzZUNoYXJhY3Rlcik7Ci19Ci0K
LXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zKCkKLXsK
LSAgICBpZiAoIW1fZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBicmVhayB1cCBn
bHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBieSBGb250LgotICAgIGNvbnN0IFVD
aGFyKiBjcDsKLQotICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewotICAgICAgICBTdHJpbmcgc3Ry
aW5nRm9yOEJpdFJ1biA9IFN0cmluZzo6bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UobV9ydW4uY2hh
cmFjdGVyczgoKSwgbV9ydW4ubGVuZ3RoKCkpOwotICAgICAgICBtX3N0cmluZ3NGb3I4Qml0UnVu
cy5hcHBlbmQoV1RGTW92ZShzdHJpbmdGb3I4Qml0UnVuKSk7Ci0gICAgICAgIGNwID0gbV9zdHJp
bmdzRm9yOEJpdFJ1bnMubGFzdCgpLmNoYXJhY3RlcnMxNigpOwotICAgIH0gZWxzZQotICAgICAg
ICBjcCA9IG1fcnVuLmNoYXJhY3RlcnMxNigpOwotCi0gICAgYXV0byBmb250VmFyaWFudENhcHMg
PSBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudENhcHMoKTsKLSAgICBib29sIGRvbnRT
eW50aGVzaXplU21hbGxDYXBzID0gIXN0YXRpY19jYXN0PGJvb2w+KG1fZm9udC5mb250RGVzY3Jp
cHRpb24oKS5mb250U3ludGhlc2lzKCkgJiBGb250U3ludGhlc2lzU21hbGxDYXBzKTsKLSAgICBi
b29sIGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgPSBmb250VmFyaWFudENhcHMgPT0gRm9u
dFZhcmlhbnRDYXBzOjpBbGxTbWFsbCB8fCBmb250VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRD
YXBzOjpBbGxQZXRpdGU7Ci0gICAgYm9vbCBlbmdhZ2VTbWFsbENhcHNQcm9jZXNzaW5nID0gZW5n
YWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZyB8fCBmb250VmFyaWFudENhcHMgPT0gRm9udFZhcmlh
bnRDYXBzOjpTbWFsbCB8fCBmb250VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpQZXRp
dGU7Ci0KLSAgICBpZiAoZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZyB8fCBlbmdhZ2VTbWFs
bENhcHNQcm9jZXNzaW5nKQotICAgICAgICBtX3NtYWxsQ2Fwc0J1ZmZlci5yZXNpemUobV9lbmQp
OwotCi0gICAgdW5zaWduZWQgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gMDsKLSAgICBjb25zdCBV
Q2hhciogY3VyciA9IGNwOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjcCArIG1fZW5kOwotCi0g
ICAgY29uc3QgRm9udCogZm9udDsKLSAgICBjb25zdCBGb250KiBuZXh0Rm9udDsKLSAgICBjb25z
dCBGb250KiBzeW50aGVzaXplZEZvbnQgPSBudWxscHRyOwotICAgIGNvbnN0IEZvbnQqIHNtYWxs
U3ludGhlc2l6ZWRGb250ID0gbnVsbHB0cjsKLQotICAgIHVuc2lnbmVkIG1hcmtDb3VudDsKLSAg
ICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgaWYgKCFhZHZhbmNlQnlDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjdXJyLCBlbmQsIGJhc2VDaGFyYWN0ZXIsIG1hcmtDb3VudCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG5leHRGb250ID0gbV9mb250LmZvbnRGb3JDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjcCwgY3VyciAtIGNwKTsKLQotICAgIGJvb2wgaXNTbWFsbENhcHMgPSBm
YWxzZTsKLSAgICBib29sIG5leHRJc1NtYWxsQ2FwcyA9IGZhbHNlOwotCi0gICAgYXV0byBjYXBp
dGFsaXplZEJhc2UgPSBjYXBpdGFsaXplZChiYXNlQ2hhcmFjdGVyKTsKLSAgICBpZiAoc2hvdWxk
U3ludGhlc2l6ZShkb250U3ludGhlc2l6ZVNtYWxsQ2FwcywgbmV4dEZvbnQsIGJhc2VDaGFyYWN0
ZXIsIGNhcGl0YWxpemVkQmFzZSwgZm9udFZhcmlhbnRDYXBzLCBlbmdhZ2VBbGxTbWFsbENhcHNQ
cm9jZXNzaW5nKSkgewotICAgICAgICBzeW50aGVzaXplZEZvbnQgPSAmbmV4dEZvbnQtPm5vU3lu
dGhlc2l6YWJsZUZlYXR1cmVzRm9udCgpOwotICAgICAgICBzbWFsbFN5bnRoZXNpemVkRm9udCA9
IHN5bnRoZXNpemVkRm9udC0+c21hbGxDYXBzRm9udChtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkp
OwotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlclRvV3JpdGUgPSBjYXBpdGFsaXplZEJhc2UgPyBj
YXBpdGFsaXplZEJhc2UudmFsdWUoKSA6IGNwWzBdOwotICAgICAgICB1bnNpZ25lZCBjaGFyYWN0
ZXJJbmRleCA9IDA7Ci0gICAgICAgIFUxNl9BUFBFTkRfVU5TQUZFKG1fc21hbGxDYXBzQnVmZmVy
LCBjaGFyYWN0ZXJJbmRleCwgY2hhcmFjdGVyVG9Xcml0ZSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGNoYXJhY3RlckluZGV4OyBjcCArIGkgPCBjdXJyOyArK2kpCi0gICAgICAgICAgICBt
X3NtYWxsQ2Fwc0J1ZmZlcltpXSA9IGNwW2ldOwotICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSB0
cnVlOwotICAgIH0KLQotICAgIHdoaWxlIChjdXJyIDwgZW5kKSB7Ci0gICAgICAgIGZvbnQgPSBu
ZXh0Rm9udDsKLSAgICAgICAgaXNTbWFsbENhcHMgPSBuZXh0SXNTbWFsbENhcHM7Ci0gICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gY3VyciAtIGNwOwotCi0gICAgICAgIGlmICghYWR2YW5jZUJ5Q29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3VyciwgZW5kLCBiYXNlQ2hhcmFjdGVyLCBtYXJrQ291
bnQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChzeW50aGVzaXplZEZvbnQp
IHsKLSAgICAgICAgICAgIGlmIChhdXRvIGNhcGl0YWxpemVkQmFzZSA9IGNhcGl0YWxpemVkKGJh
c2VDaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcmFjdGVySW5kZXgg
PSBpbmRleDsKLSAgICAgICAgICAgICAgICBVMTZfQVBQRU5EX1VOU0FGRShtX3NtYWxsQ2Fwc0J1
ZmZlciwgY2hhcmFjdGVySW5kZXgsIGNhcGl0YWxpemVkQmFzZS52YWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFya0NvdW50OyArK2kpCi0gICAgICAg
ICAgICAgICAgICAgIG1fc21hbGxDYXBzQnVmZmVyW2kgKyBjaGFyYWN0ZXJJbmRleF0gPSBjcFtp
ICsgY2hhcmFjdGVySW5kZXhdOwotICAgICAgICAgICAgICAgIG5leHRJc1NtYWxsQ2FwcyA9IHRy
dWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChlbmdhZ2VBbGxT
bWFsbENhcHNQcm9jZXNzaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjdXJyIC0gY3AgLSBpbmRleDsgKytpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zbWFsbENhcHNCdWZmZXJbaW5kZXggKyBpXSA9IGNwW2luZGV4ICsgaV07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5leHRJc1NtYWxsQ2FwcyA9IGVuZ2FnZUFsbFNt
YWxsQ2Fwc1Byb2Nlc3Npbmc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoYmFzZUNoYXJhY3RlciA9PSB6ZXJvV2lkdGhKb2luZXIpCi0gICAgICAgICAgICBuZXh0Rm9u
dCA9IGZvbnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5leHRGb250ID0gbV9mb250LmZv
bnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJyIC0gY3AgLSBp
bmRleCk7Ci0KLSAgICAgICAgY2FwaXRhbGl6ZWRCYXNlID0gY2FwaXRhbGl6ZWQoYmFzZUNoYXJh
Y3Rlcik7Ci0gICAgICAgIGlmICghc3ludGhlc2l6ZWRGb250ICYmIHNob3VsZFN5bnRoZXNpemUo
ZG9udFN5bnRoZXNpemVTbWFsbENhcHMsIG5leHRGb250LCBiYXNlQ2hhcmFjdGVyLCBjYXBpdGFs
aXplZEJhc2UsIGZvbnRWYXJpYW50Q2FwcywgZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZykp
IHsKLSAgICAgICAgICAgIC8vIFJhdGhlciB0aGFuIHN5bnRoZXNpemUgZWFjaCBjaGFyYWN0ZXIg
aW5kaXZpZHVhbGx5LCB3ZSBzaG91bGQgc3ludGhlc2l6ZSB0aGUgZW50aXJlICJydW4iIGlmIGFu
eSBjaGFyYWN0ZXIgcmVxdWlyZXMgc3ludGhlc2lzLgotICAgICAgICAgICAgc3ludGhlc2l6ZWRG
b250ID0gJm5leHRGb250LT5ub1N5bnRoZXNpemFibGVGZWF0dXJlc0ZvbnQoKTsKLSAgICAgICAg
ICAgIHNtYWxsU3ludGhlc2l6ZWRGb250ID0gc3ludGhlc2l6ZWRGb250LT5zbWFsbENhcHNGb250
KG1fZm9udC5mb250RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgICAgICBuZXh0SXNTbWFsbENhcHMg
PSB0cnVlOwotICAgICAgICAgICAgY3VyciA9IGNwICsgaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmV4dEZvbnQg
IT0gZm9udCB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNTbWFsbENhcHMpIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGl0ZW1MZW5ndGggPSBpbmRleCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAg
ICAgICAgICAgIGlmIChpdGVtTGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaXRl
bVN0YXJ0ID0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgICAgIGlmIChzeW50
aGVzaXplZEZvbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU21hbGxDYXBzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMo
bV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3Rh
cnQsIHNtYWxsU3ludGhlc2l6ZWRGb250KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMo
Y3AgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgc3ludGhlc2l6ZWRGb250KTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY29sbGVjdENvbXBs
ZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY3AgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1T
dGFydCwgZm9udCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5leHRGb250ICE9IGZvbnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZWRGb250ID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICAgICAgc21hbGxTeW50aGVzaXplZEZvbnQgPSBudWxscHRyOwotICAgICAgICAgICAgICAg
ICAgICBuZXh0SXNTbWFsbENhcHMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBpbmRleDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIEFTU0VSVChtX2VuZCA+PSBpbmRleE9mRm9udFRyYW5zaXRpb24p
OwotICAgIHVuc2lnbmVkIGl0ZW1MZW5ndGggPSBtX2VuZCAtIGluZGV4T2ZGb250VHJhbnNpdGlv
bjsKLSAgICBpZiAoaXRlbUxlbmd0aCkgewotICAgICAgICB1bnNpZ25lZCBpdGVtU3RhcnQgPSBp
bmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgIGlmIChzeW50aGVzaXplZEZvbnQpIHsKLSAg
ICAgICAgICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgICAgICAgICAgY29sbGVjdENv
bXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMobV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpICsgaXRl
bVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsIHNtYWxsU3ludGhlc2l6ZWRGb250KTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9y
Q2hhcmFjdGVycyhjcCArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCBzeW50aGVz
aXplZEZvbnQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNwICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQs
IG5leHRGb250KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcnVuLmx0cigpKQotICAgICAgICBtX2Nv
bXBsZXhUZXh0UnVucy5yZXZlcnNlKCk7Ci19Ci0KLXVuc2lnbmVkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Q29tcGxleFRleHRSdW46OmluZGV4QXQodW5zaWduZWQgaSkgY29uc3QKLXsKLSAgICBB
U1NFUlQoaSA8IG1fZ2x5cGhDb3VudCk7Ci0KLSAgICByZXR1cm4gbV9jb3JlVGV4dEluZGljZXNb
aV07Ci19Ci0KLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6c2V0
SXNOb25Nb25vdG9uaWMoKQotewotICAgIEFTU0VSVChtX2lzTW9ub3RvbmljKTsKLSAgICBtX2lz
TW9ub3RvbmljID0gZmFsc2U7Ci0KLSAgICBWZWN0b3I8Ym9vbCwgNjQ+IG1hcHBlZEluZGljZXMo
bV9zdHJpbmdMZW5ndGgsIGZhbHNlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9n
bHlwaENvdW50OyArK2kpIHsKLSAgICAgICAgQVNTRVJUKGluZGV4QXQoaSkgPCBtX3N0cmluZ0xl
bmd0aCk7Ci0gICAgICAgIG1hcHBlZEluZGljZXNbaW5kZXhBdChpKV0gPSB0cnVlOwotICAgIH0K
LQotICAgIG1fZ2x5cGhFbmRPZmZzZXRzLmdyb3cobV9nbHlwaENvdW50KTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9nbHlwaENvdW50OyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQg
bmV4dE1hcHBlZEluZGV4ID0gbV9pbmRleEVuZDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
aW5kZXhBdChpKSArIDE7IGogPCBtX3N0cmluZ0xlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICBp
ZiAobWFwcGVkSW5kaWNlc1tqXSkgewotICAgICAgICAgICAgICAgIG5leHRNYXBwZWRJbmRleCA9
IGo7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9nbHlwaEVuZE9mZnNldHNbaV0gPSBuZXh0TWFwcGVkSW5kZXg7Ci0gICAgfQotfQot
Ci11bnNpZ25lZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmluZGV4T2ZDdXJyZW50UnVuKHVuc2ln
bmVkJiBsZWZ0bW9zdEdseXBoKQotewotICAgIGxlZnRtb3N0R2x5cGggPSAwOwotICAgIAotICAg
IHNpemVfdCBydW5Db3VudCA9IG1fY29tcGxleFRleHRSdW5zLnNpemUoKTsKLSAgICBpZiAobV9j
dXJyZW50UnVuID49IHJ1bkNvdW50KQotICAgICAgICByZXR1cm4gcnVuQ291bnQ7Ci0KLSAgICBp
ZiAobV9pc0xUUk9ubHkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3Vy
cmVudFJ1bjsgKytpKQotICAgICAgICAgICAgbGVmdG1vc3RHbHlwaCArPSBtX2NvbXBsZXhUZXh0
UnVuc1tpXS0+Z2x5cGhDb3VudCgpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50UnVuOwotICAg
IH0KLQotICAgIGlmIChtX3J1bkluZGljZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGZpcnN0UnVuID0gMDsKLSAgICAgICAgdW5zaWduZWQgZmlyc3RSdW5PZmZzZXQgPSBzdHJpbmdC
ZWdpbigqbV9jb21wbGV4VGV4dFJ1bnNbMF0pOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgcnVuQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc3Ry
aW5nQmVnaW4oKm1fY29tcGxleFRleHRSdW5zW2ldKTsKLSAgICAgICAgICAgIGlmIChvZmZzZXQg
PCBmaXJzdFJ1bk9mZnNldCkgewotICAgICAgICAgICAgICAgIGZpcnN0UnVuID0gaTsKLSAgICAg
ICAgICAgICAgICBmaXJzdFJ1bk9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBtX3J1bkluZGljZXMudW5jaGVja2VkQXBwZW5kKGZpcnN0UnVuKTsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAobV9ydW5JbmRpY2VzLnNpemUoKSA8PSBtX2N1cnJlbnRSdW4pIHsK
LSAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc3RyaW5nRW5kKCptX2NvbXBsZXhUZXh0UnVuc1tt
X3J1bkluZGljZXMubGFzdCgpXSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJ1bkNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gc3RyaW5nQmVnaW4o
Km1fY29tcGxleFRleHRSdW5zW2ldKSkgewotICAgICAgICAgICAgICAgIG1fcnVuSW5kaWNlcy51
bmNoZWNrZWRBcHBlbmQoaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjdXJyZW50UnVuSW5kZXggPSBtX3J1
bkluZGljZXNbbV9jdXJyZW50UnVuXTsKLSAgICBsZWZ0bW9zdEdseXBoID0gbV9nbHlwaENvdW50
RnJvbVN0YXJ0VG9JbmRleFtjdXJyZW50UnVuSW5kZXhdOwotICAgIHJldHVybiBjdXJyZW50UnVu
SW5kZXg7Ci19Ci0KLXVuc2lnbmVkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6aW5jcmVtZW50Q3Vy
cmVudFJ1bih1bnNpZ25lZCYgbGVmdG1vc3RHbHlwaCkKLXsKLSAgICBpZiAobV9pc0xUUk9ubHkp
IHsKLSAgICAgICAgbGVmdG1vc3RHbHlwaCArPSBtX2NvbXBsZXhUZXh0UnVuc1ttX2N1cnJlbnRS
dW4rK10tPmdseXBoQ291bnQoKTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudFJ1bjsKLSAgICB9
Ci0KLSAgICBtX2N1cnJlbnRSdW4rKzsKLSAgICBsZWZ0bW9zdEdseXBoID0gMDsKLSAgICByZXR1
cm4gaW5kZXhPZkN1cnJlbnRSdW4obGVmdG1vc3RHbHlwaCk7Ci19Ci0KLWZsb2F0IENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6cnVuV2lkdGhTb0ZhckZyYWN0aW9uKHVuc2lnbmVkIGdseXBoU3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGdseXBoRW5kT2Zmc2V0LCB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1
cnJlbnRHbHlwaCwgR2x5cGhJdGVyYXRpb25TdHlsZSBpdGVyYXRpb25TdHlsZSkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBkaXZpZGluZyB0aGUgZ2x5cGgncyBhZHZhbmNlIGVx
dWFsbHkgYmV0d2VlbiB0aGUgY2hhcmFjdGVycywgdGhpcwotICAgIC8vIGNvdWxkIHVzZSB0aGUg
Z2x5cGgncyAibGlnYXR1cmUgY2FyZXRzIi4gVGhpcyBpcyBhdmFpbGFibGUgaW4gQ29yZVRleHQg
dmlhIENURm9udEdldExpZ2F0dXJlQ2FyZXRQb3NpdGlvbnMoKS4KLSAgICBpZiAoZ2x5cGhTdGFy
dE9mZnNldCA9PSBnbHlwaEVuZE9mZnNldCkgewotICAgICAgICAvLyBXaGVuIHRoZXJlIGFyZSBt
dWx0aXBsZSBnbHlwaHMgcGVyIGNoYXJhY3RlciB3ZSBuZWVkIHRvIGFkdmFuY2UgYnkgdGhlIGZ1
bGwgd2lkdGggb2YgdGhlIGdseXBoLgotICAgICAgICBBU1NFUlQobV9jaGFyYWN0ZXJJbkN1cnJl
bnRHbHlwaCA9PSBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCk7Ci0gICAgICAgIHJldHVybiAx
OwotICAgIH0KLQotICAgIGlmIChpdGVyYXRpb25TdHlsZSA9PSBCeVdob2xlR2x5cGhzKSB7Ci0g
ICAgICAgIGlmICghb2xkQ2hhcmFjdGVySW5DdXJyZW50R2x5cGgpCi0gICAgICAgICAgICByZXR1
cm4gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PihtX2NoYXJhY3RlckluQ3VycmVudEdseXBoIC0gb2xkQ2hhcmFjdGVySW5DdXJyZW50
R2x5cGgpIC8gKGdseXBoRW5kT2Zmc2V0IC0gZ2x5cGhTdGFydE9mZnNldCk7Ci19Ci0KLXZvaWQg
Q29tcGxleFRleHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZm
ZXIqIGdseXBoQnVmZmVyLCBHbHlwaEl0ZXJhdGlvblN0eWxlIGl0ZXJhdGlvblN0eWxlLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKLXsKLSAgICBpZiAob2Zmc2V0ID4gbV9l
bmQpCi0gICAgICAgIG9mZnNldCA9IG1fZW5kOwotCi0gICAgaWYgKG9mZnNldCA8PSBtX2N1cnJl
bnRDaGFyYWN0ZXIpIHsKLSAgICAgICAgbV9ydW5XaWR0aFNvRmFyID0gMDsKLSAgICAgICAgbV9u
dW1HbHlwaHNTb0ZhciA9IDA7Ci0gICAgICAgIG1fY3VycmVudFJ1biA9IDA7Ci0gICAgICAgIG1f
Z2x5cGhJbkN1cnJlbnRSdW4gPSAwOwotICAgICAgICBtX2NoYXJhY3RlckluQ3VycmVudEdseXBo
ID0gMDsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBvZmZzZXQ7Ci0KLSAgICBz
aXplX3QgcnVuQ291bnQgPSBtX2NvbXBsZXhUZXh0UnVucy5zaXplKCk7Ci0KLSAgICB1bnNpZ25l
ZCBpbmRleE9mTGVmdG1vc3RHbHlwaEluQ3VycmVudFJ1biA9IDA7IC8vIFJlbGF0aXZlIHRvIHRo
ZSBiZWdpbm5pbmcgb2YgQ29tcGxleFRleHRDb250cm9sbGVyLgotICAgIHVuc2lnbmVkIGN1cnJl
bnRSdW5JbmRleCA9IGluZGV4T2ZDdXJyZW50UnVuKGluZGV4T2ZMZWZ0bW9zdEdseXBoSW5DdXJy
ZW50UnVuKTsKLSAgICB3aGlsZSAobV9jdXJyZW50UnVuIDwgcnVuQ291bnQpIHsKLSAgICAgICAg
Y29uc3QgQ29tcGxleFRleHRSdW4mIGNvbXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRleHRSdW5z
W2N1cnJlbnRSdW5JbmRleF07Ci0gICAgICAgIGJvb2wgbHRyID0gY29tcGxleFRleHRSdW4uaXNM
VFIoKTsKLSAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBo
Q291bnQoKTsKLSAgICAgICAgdW5zaWduZWQgZ2x5cGhJbmRleEludG9DdXJyZW50UnVuID0gbHRy
ID8gbV9nbHlwaEluQ3VycmVudFJ1biA6IGdseXBoQ291bnQgLSAxIC0gbV9nbHlwaEluQ3VycmVu
dFJ1bjsKLSAgICAgICAgdW5zaWduZWQgZ2x5cGhJbmRleEludG9Db21wbGV4VGV4dENvbnRyb2xs
ZXIgPSBpbmRleE9mTGVmdG1vc3RHbHlwaEluQ3VycmVudFJ1biArIGdseXBoSW5kZXhJbnRvQ3Vy
cmVudFJ1bjsKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udHMgJiYgJmNvbXBsZXhUZXh0UnVuLmZv
bnQoKSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0gICAgICAgICAgICBmYWxsYmFja0ZvbnRz
LT5hZGQoJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSk7Ci0KLSAgICAgICAgLy8gV2UgbXVzdCBzdG9y
ZSB0aGUgaW5pdGlhbCBhZHZhbmNlIGZvciB0aGUgZmlyc3QgZ2x5cGggd2UgYXJlIGdvaW5nIHRv
IGRyYXcuCi0gICAgICAgIC8vIFdoZW4gbGVmdG1vc3RHbHlwaCBpcyAwLCBpdCByZXByZXNlbnRz
IHRoZSBmaXJzdCBnbHlwaCB0byBkcmF3LCB0YWtpbmcgaW50bwotICAgICAgICAvLyBhY2NvdW50
IHRoZSB0ZXh0IGRpcmVjdGlvbi4KLSAgICAgICAgaWYgKCFpbmRleE9mTGVmdG1vc3RHbHlwaElu
Q3VycmVudFJ1biAmJiBnbHlwaEJ1ZmZlcikKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5zZXRJ
bml0aWFsQWR2YW5jZShHbHlwaEJ1ZmZlckFkdmFuY2UoY29tcGxleFRleHRSdW4uaW5pdGlhbEFk
dmFuY2UoKS53aWR0aCgpLCBjb21wbGV4VGV4dFJ1bi5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgp
KSk7Ci0KLSAgICAgICAgd2hpbGUgKG1fZ2x5cGhJbkN1cnJlbnRSdW4gPCBnbHlwaENvdW50KSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBnbHlwaFN0YXJ0T2Zmc2V0ID0gY29tcGxleFRleHRSdW4u
aW5kZXhBdChnbHlwaEluZGV4SW50b0N1cnJlbnRSdW4pOwotICAgICAgICAgICAgdW5zaWduZWQg
Z2x5cGhFbmRPZmZzZXQ7Ci0gICAgICAgICAgICBpZiAoY29tcGxleFRleHRSdW4uaXNNb25vdG9u
aWMoKSkgewotICAgICAgICAgICAgICAgIGlmIChsdHIpCi0gICAgICAgICAgICAgICAgICAgIGds
eXBoRW5kT2Zmc2V0ID0gc3RkOjptYXgoZ2x5cGhTdGFydE9mZnNldCwgZ2x5cGhJbmRleEludG9D
dXJyZW50UnVuICsgMSA8IGdseXBoQ291bnQgPyBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGdseXBo
SW5kZXhJbnRvQ3VycmVudFJ1biArIDEpIDogY29tcGxleFRleHRSdW4uaW5kZXhFbmQoKSk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBnbHlwaEVuZE9mZnNldCA9
IHN0ZDo6bWF4KGdseXBoU3RhcnRPZmZzZXQsIGdseXBoSW5kZXhJbnRvQ3VycmVudFJ1biA+IDAg
PyBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGdseXBoSW5kZXhJbnRvQ3VycmVudFJ1biAtIDEpIDog
Y29tcGxleFRleHRSdW4uaW5kZXhFbmQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBnbHlwaEVuZE9mZnNldCA9IGNvbXBsZXhUZXh0UnVuLmVuZE9mZnNldEF0KGdseXBo
SW5kZXhJbnRvQ3VycmVudFJ1bik7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBhZGp1c3RlZEJh
c2VBZHZhbmNlID0gbV9hZGp1c3RlZEJhc2VBZHZhbmNlc1tnbHlwaEluZGV4SW50b0NvbXBsZXhU
ZXh0Q29udHJvbGxlcl07Ci0KLSAgICAgICAgICAgIGlmIChnbHlwaFN0YXJ0T2Zmc2V0ICsgY29t
cGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKSA+PSBtX2N1cnJlbnRDaGFyYWN0ZXIpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIgJiYgIW1f
Y2hhcmFjdGVySW5DdXJyZW50R2x5cGgpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRH
bHlwaE9yaWdpbiA9IGdseXBoT3JpZ2luKGdseXBoSW5kZXhJbnRvQ29tcGxleFRleHRDb250cm9s
bGVyKTsKLSAgICAgICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgcGFpbnRBZHZhbmNlKGFk
anVzdGVkQmFzZUFkdmFuY2UpOwotICAgICAgICAgICAgICAgIGlmICghZ2x5cGhJbmRleEludG9D
dXJyZW50UnVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBsYXlvdXQgYWR2
YW5jZSBvZiBldmVyeSBydW4gaW5jbHVkZXMgdGhlICJpbml0aWFsIGxheW91dCBhZHZhbmNlLiIg
SG93ZXZlciwgaGVyZSwgd2UgbmVlZAotICAgICAgICAgICAgICAgICAgICAvLyBwYWludCBhZHZh
bmNlcywgc28gc3VidHJhY3QgaXQgb3V0IGJlZm9yZSB0cmFuc2Zvcm1pbmcgdGhlIGxheW91dCBh
ZHZhbmNlIGludG8gYSBwYWludCBhZHZhbmNlLgotICAgICAgICAgICAgICAgICAgICBwYWludEFk
dmFuY2Uuc2V0V2lkdGgocGFpbnRBZHZhbmNlLndpZHRoKCkgLSAoY29tcGxleFRleHRSdW4uaW5p
dGlhbEFkdmFuY2UoKS53aWR0aCgpIC0gY3VycmVudEdseXBoT3JpZ2luLngoKSkpOwotICAgICAg
ICAgICAgICAgICAgICBwYWludEFkdmFuY2Uuc2V0SGVpZ2h0KHBhaW50QWR2YW5jZS5oZWlnaHQo
KSAtIChjb21wbGV4VGV4dFJ1bi5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgpIC0gY3VycmVudEds
eXBoT3JpZ2luLnkoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYWlu
dEFkdmFuY2Uuc2V0V2lkdGgocGFpbnRBZHZhbmNlLndpZHRoKCkgKyBnbHlwaE9yaWdpbihnbHlw
aEluZGV4SW50b0NvbXBsZXhUZXh0Q29udHJvbGxlciArIDEpLngoKSAtIGN1cnJlbnRHbHlwaE9y
aWdpbi54KCkpOwotICAgICAgICAgICAgICAgIHBhaW50QWR2YW5jZS5zZXRIZWlnaHQocGFpbnRB
ZHZhbmNlLmhlaWdodCgpICsgZ2x5cGhPcmlnaW4oZ2x5cGhJbmRleEludG9Db21wbGV4VGV4dENv
bnRyb2xsZXIgKyAxKS55KCkgLSBjdXJyZW50R2x5cGhPcmlnaW4ueSgpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZ2x5cGhJbmRleEludG9DdXJyZW50UnVuID09IGdseXBoQ291bnQgLSAxICYmIGN1
cnJlbnRSdW5JbmRleCArIDEgPCBydW5Db3VudCkgewotICAgICAgICAgICAgICAgICAgICAvLyBP
dXIgcGFpbnQgYWR2YW5jZSBwb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgcnVuLiBIb3dldmVyLCB0
aGUgbmV4dCBydW4gbWF5IGhhdmUgYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbCBh
ZHZhbmNlLCBhbmQgb3VyIHBhaW50IGFkdmFuY2UgbmVlZHMgdG8gcG9pbnQgdG8gdGhlIGxvY2F0
aW9uIG9mIHRoZSBuZXh0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGdseXBoLiBTbywgd2UgbmVl
ZCB0byBhZGQgaW4gdGhlIG5leHQgcnVuJ3MgaW5pdGlhbCBhZHZhbmNlLgotICAgICAgICAgICAg
ICAgICAgICBwYWludEFkdmFuY2Uuc2V0V2lkdGgocGFpbnRBZHZhbmNlLndpZHRoKCkgLSBnbHlw
aE9yaWdpbihnbHlwaEluZGV4SW50b0NvbXBsZXhUZXh0Q29udHJvbGxlciArIDEpLngoKSArIG1f
Y29tcGxleFRleHRSdW5zW2N1cnJlbnRSdW5JbmRleCArIDFdLT5pbml0aWFsQWR2YW5jZSgpLndp
ZHRoKCkpOwotICAgICAgICAgICAgICAgICAgICBwYWludEFkdmFuY2Uuc2V0SGVpZ2h0KHBhaW50
QWR2YW5jZS5oZWlnaHQoKSAtIGdseXBoT3JpZ2luKGdseXBoSW5kZXhJbnRvQ29tcGxleFRleHRD
b250cm9sbGVyICsgMSkueSgpICsgbV9jb21wbGV4VGV4dFJ1bnNbY3VycmVudFJ1bkluZGV4ICsg
MV0tPmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBwYWludEFkdmFuY2Uuc2V0SGVpZ2h0KC1wYWludEFkdmFuY2UuaGVpZ2h0KCkp
OyAvLyBJbmNyZWFzaW5nIHkgcG9pbnRzIGRvd24KLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZl
ci0+YWRkKG1fYWRqdXN0ZWRHbHlwaHNbZ2x5cGhJbmRleEludG9Db21wbGV4VGV4dENvbnRyb2xs
ZXJdLCAmY29tcGxleFRleHRSdW4uZm9udCgpLCBwYWludEFkdmFuY2UsIGNvbXBsZXhUZXh0UnVu
LmluZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9IG1fY2hhcmFjdGVySW5D
dXJyZW50R2x5cGg7Ci0gICAgICAgICAgICBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoID0gc3Rk
OjptaW4obV9jdXJyZW50Q2hhcmFjdGVyIC0gY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24o
KSwgZ2x5cGhFbmRPZmZzZXQpIC0gZ2x5cGhTdGFydE9mZnNldDsKLSAgICAgICAgICAgIG1fcnVu
V2lkdGhTb0ZhciArPSBhZGp1c3RlZEJhc2VBZHZhbmNlLndpZHRoKCkgKiBydW5XaWR0aFNvRmFy
RnJhY3Rpb24oZ2x5cGhTdGFydE9mZnNldCwgZ2x5cGhFbmRPZmZzZXQsIG9sZENoYXJhY3Rlcklu
Q3VycmVudEdseXBoLCBpdGVyYXRpb25TdHlsZSk7Ci0KLSAgICAgICAgICAgIGlmIChnbHlwaEVu
ZE9mZnNldCArIGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xvY2F0aW9uKCkgPiBtX2N1cnJlbnRDaGFy
YWN0ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtX251bUdseXBo
c1NvRmFyKys7Ci0gICAgICAgICAgICBtX2dseXBoSW5DdXJyZW50UnVuKys7Ci0gICAgICAgICAg
ICBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoID0gMDsKLSAgICAgICAgICAgIGlmIChsdHIpIHsK
LSAgICAgICAgICAgICAgICBnbHlwaEluZGV4SW50b0N1cnJlbnRSdW4rKzsKLSAgICAgICAgICAg
ICAgICBnbHlwaEluZGV4SW50b0NvbXBsZXhUZXh0Q29udHJvbGxlcisrOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBnbHlwaEluZGV4SW50b0N1cnJlbnRSdW4tLTsKLSAg
ICAgICAgICAgICAgICBnbHlwaEluZGV4SW50b0NvbXBsZXhUZXh0Q29udHJvbGxlci0tOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnRSdW5JbmRleCA9IGluY3JlbWVu
dEN1cnJlbnRSdW4oaW5kZXhPZkxlZnRtb3N0R2x5cGhJbkN1cnJlbnRSdW4pOwotICAgICAgICBt
X2dseXBoSW5DdXJyZW50UnVuID0gMDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjpw
YWlyPGJvb2wsIGJvb2w+IGV4cGFuc2lvbkxvY2F0aW9uKGJvb2wgaWRlb2dyYXBoLCBib29sIHRy
ZWF0QXNTcGFjZSwgYm9vbCBsdHIsIGJvb2wgaXNBZnRlckV4cGFuc2lvbiwgYm9vbCBmb3JiaWRM
ZWFkaW5nRXhwYW5zaW9uLCBib29sIGZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uLCBib29sIGZvcmNl
TGVhZGluZ0V4cGFuc2lvbiwgYm9vbCBmb3JjZVRyYWlsaW5nRXhwYW5zaW9uKQotewotICAgIGJv
b2wgZXhwYW5kTGVmdCA9IGlkZW9ncmFwaDsKLSAgICBib29sIGV4cGFuZFJpZ2h0ID0gaWRlb2dy
YXBoOwotICAgIGlmICh0cmVhdEFzU3BhY2UpIHsKLSAgICAgICAgaWYgKGx0cikKLSAgICAgICAg
ICAgIGV4cGFuZFJpZ2h0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhwYW5k
TGVmdCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uKQotICAgICAgICBl
eHBhbmRMZWZ0ID0gZmFsc2U7Ci0gICAgQVNTRVJUKCFmb3JiaWRMZWFkaW5nRXhwYW5zaW9uIHx8
ICFmb3JjZUxlYWRpbmdFeHBhbnNpb24pOwotICAgIEFTU0VSVCghZm9yYmlkVHJhaWxpbmdFeHBh
bnNpb24gfHwgIWZvcmNlVHJhaWxpbmdFeHBhbnNpb24pOwotICAgIGlmIChmb3JiaWRMZWFkaW5n
RXhwYW5zaW9uKQotICAgICAgICBleHBhbmRMZWZ0ID0gZmFsc2U7Ci0gICAgaWYgKGZvcmJpZFRy
YWlsaW5nRXhwYW5zaW9uKQotICAgICAgICBleHBhbmRSaWdodCA9IGZhbHNlOwotICAgIGlmIChm
b3JjZUxlYWRpbmdFeHBhbnNpb24pCi0gICAgICAgIGV4cGFuZExlZnQgPSB0cnVlOwotICAgIGlm
IChmb3JjZVRyYWlsaW5nRXhwYW5zaW9uKQotICAgICAgICBleHBhbmRSaWdodCA9IHRydWU7Ci0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGV4cGFuZExlZnQsIGV4cGFuZFJpZ2h0KTsKLX0KLQot
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkKLXsK
LSAgICBib29sIGFmdGVyRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBM
ZWFkaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVhZGluZ0V4cGFuc2lvbjsKLSAgICBmbG9h
dCB3aWR0aFNpbmNlTGFzdENvbW1pdCA9IDA7Ci0gICAgc2l6ZV90IHJ1bkNvdW50ID0gbV9jb21w
bGV4VGV4dFJ1bnMuc2l6ZSgpOwotICAgIGJvb2wgaGFzRXh0cmFTcGFjaW5nID0gKG1fZm9udC5s
ZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250LndvcmRTcGFjaW5nKCkgfHwgbV9leHBhbnNpb24pICYm
ICFtX3J1bi5zcGFjaW5nRGlzYWJsZWQoKTsKLSAgICBib29sIHJ1bkZvcmNlc0xlYWRpbmdFeHBh
bnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlYWRpbmdFeHBhbnNpb25NYXNr
KSA9PSBGb3JjZUxlYWRpbmdFeHBhbnNpb247Ci0gICAgYm9vbCBydW5Gb3JjZXNUcmFpbGluZ0V4
cGFuc2lvbiA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgVHJhaWxpbmdFeHBhbnNpb25N
YXNrKSA9PSBGb3JjZVRyYWlsaW5nRXhwYW5zaW9uOwotICAgIGJvb2wgcnVuRm9yYmlkc0xlYWRp
bmdFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlYWRpbmdFeHBhbnNp
b25NYXNrKSA9PSBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uOwotICAgIGJvb2wgcnVuRm9yYmlkc1Ry
YWlsaW5nRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBUcmFpbGluZ0V4
cGFuc2lvbk1hc2spID09IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uOwotCi0gICAgLy8gV2UgYXJl
IGl0ZXJhdGluZyBpbiBnbHlwaCBvcmRlciwgbm90IHN0cmluZyBvcmRlci4gQ29tcGFyZSB0aGlz
IHRvIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbCgpCi0gICAgZm9yIChzaXplX3QgcnVu
SW5kZXggPSAwOyBydW5JbmRleCA8IHJ1bkNvdW50OyArK3J1bkluZGV4KSB7Ci0gICAgICAgIENv
bXBsZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1biA9ICptX2NvbXBsZXhUZXh0UnVuc1tydW5JbmRl
eF07Ci0gICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQgPSBjb21wbGV4VGV4dFJ1bi5nbHlwaENv
dW50KCk7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBjb21wbGV4VGV4dFJ1bi5mb250KCk7
Ci0KLSAgICAgICAgaWYgKCFjb21wbGV4VGV4dFJ1bi5pc0xUUigpKQotICAgICAgICAgICAgbV9p
c0xUUk9ubHkgPSBmYWxzZTsKLQotICAgICAgICBjb25zdCBDR0dseXBoKiBnbHlwaHMgPSBjb21w
bGV4VGV4dFJ1bi5nbHlwaHMoKTsKLSAgICAgICAgY29uc3QgRmxvYXRTaXplKiBhZHZhbmNlcyA9
IGNvbXBsZXhUZXh0UnVuLmJhc2VBZHZhbmNlcygpOwotCi0gICAgICAgIGJvb2wgbGFzdFJ1biA9
IHJ1bkluZGV4ICsgMSA9PSBydW5Db3VudDsKLSAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZv
bnQuc3BhY2VXaWR0aCgpIC0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBjcCA9IGNvbXBsZXhUZXh0UnVuLmNoYXJhY3RlcnMoKTsKLSAgICAgICAgRmxv
YXRQb2ludCBnbHlwaE9yaWdpbjsKLSAgICAgICAgdW5zaWduZWQgbGFzdENoYXJhY3RlckluZGV4
ID0gbV9ydW4ubHRyKCkgPyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWluKCkgOiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIGJvb2wgaXNNb25v
dG9uaWMgPSB0cnVlOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnbHlwaENv
dW50OyBpKyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXJhY3RlckluZGV4ID0gY29tcGxl
eFRleHRSdW4uaW5kZXhBdChpKTsKLSAgICAgICAgICAgIGlmIChtX3J1bi5sdHIoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCA8IGxhc3RDaGFyYWN0ZXJJbmRleCkKLSAg
ICAgICAgICAgICAgICAgICAgaXNNb25vdG9uaWMgPSBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ID4gbGFzdENoYXJhY3Rlcklu
ZGV4KQotICAgICAgICAgICAgICAgICAgICBpc01vbm90b25pYyA9IGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgVUNoYXIgY2ggPSAqKGNwICsgY2hhcmFjdGVySW5kZXgpOwotICAg
ICAgICAgICAgYm9vbCBsYXN0R2x5cGggPSBsYXN0UnVuICYmIGkgKyAxID09IGdseXBoQ291bnQ7
Ci0gICAgICAgICAgICBVQ2hhciBuZXh0Q2g7Ci0gICAgICAgICAgICBpZiAobGFzdEdseXBoKQot
ICAgICAgICAgICAgICAgIG5leHRDaCA9ICcgJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGkgKyAx
IDwgZ2x5cGhDb3VudCkKLSAgICAgICAgICAgICAgICBuZXh0Q2ggPSAqKGNwICsgY29tcGxleFRl
eHRSdW4uaW5kZXhBdChpICsgMSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG5leHRDaCA9ICoobV9jb21wbGV4VGV4dFJ1bnNbcnVuSW5kZXggKyAxXS0+Y2hhcmFjdGVycygp
ICsgbV9jb21wbGV4VGV4dFJ1bnNbcnVuSW5kZXggKyAxXS0+aW5kZXhBdCgwKSk7Ci0KLSAgICAg
ICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7
Ci0gICAgICAgICAgICBDR0dseXBoIGdseXBoID0gdHJlYXRBc1NwYWNlID8gZm9udC5zcGFjZUds
eXBoKCkgOiBnbHlwaHNbaV07Ci0gICAgICAgICAgICBGbG9hdFNpemUgYWR2YW5jZSA9IHRyZWF0
QXNTcGFjZSA/IEZsb2F0U2l6ZShzcGFjZVdpZHRoLCBhZHZhbmNlc1tpXS5oZWlnaHQoKSkgOiBh
ZHZhbmNlc1tpXTsKLQotICAgICAgICAgICAgaWYgKGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dU
YWJzKCkpCi0gICAgICAgICAgICAgICAgYWR2YW5jZS5zZXRXaWR0aChtX2ZvbnQudGFiV2lkdGgo
Zm9udCwgbV9ydW4udGFiU2l6ZSgpLCBtX3J1bi54UG9zKCkgKyBtX3RvdGFsV2lkdGggKyB3aWR0
aFNpbmNlTGFzdENvbW1pdCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoRm9udENhc2NhZGU6OnRy
ZWF0QXNaZXJvV2lkdGhTcGFjZShjaCkgJiYgIXRyZWF0QXNTcGFjZSkgewotICAgICAgICAgICAg
ICAgIGFkdmFuY2Uuc2V0V2lkdGgoMCk7Ci0gICAgICAgICAgICAgICAgZ2x5cGggPSBmb250LnNw
YWNlR2x5cGgoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFpKSB7Ci0gICAg
ICAgICAgICAgICAgYWR2YW5jZS5leHBhbmQoY29tcGxleFRleHRSdW4uaW5pdGlhbEFkdmFuY2Uo
KS53aWR0aCgpLCBjb21wbGV4VGV4dFJ1bi5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYXV0byogb3JpZ2lucyA9IGNvbXBsZXhUZXh0UnVuLmdseXBoT3Jp
Z2lucygpKQotICAgICAgICAgICAgICAgICAgICBhZHZhbmNlLmV4cGFuZCgtb3JpZ2luc1swXS54
KCksIC1vcmlnaW5zWzBdLnkoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFkdmFu
Y2UuZXhwYW5kKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCAwKTsKLQotICAgICAgICAgICAg
aWYgKGhhc0V4dHJhU3BhY2luZykgewotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5
cGggd2l0aCBhbiBhZHZhbmNlLCBhZGQgaW4gbGV0dGVyLXNwYWNpbmcuCi0gICAgICAgICAgICAg
ICAgLy8gVGhhdCB3YXkgd2Ugd2VlZCBvdXQgemVybyB3aWR0aCBsdXJrZXJzLiBUaGlzIGJlaGF2
aW9yIG1hdGNoZXMgdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCi0gICAgICAgICAgICAgICAgaWYg
KGFkdmFuY2Uud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZS5leHBhbmQobV9m
b250LmxldHRlclNwYWNpbmcoKSwgMCk7Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
YWN0ZXJJbmRleEluUnVuID0gY2hhcmFjdGVySW5kZXggKyBjb21wbGV4VGV4dFJ1bi5zdHJpbmdM
b2NhdGlvbigpOwotICAgICAgICAgICAgICAgIGJvb2wgaXNGaXJzdENoYXJhY3RlciA9ICEoY2hh
cmFjdGVySW5kZXggKyBjb21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigpKTsKLSAgICAgICAg
ICAgICAgICBib29sIGlzTGFzdENoYXJhY3RlciA9IGNoYXJhY3RlckluZGV4SW5SdW4gKyAxID09
IG1fcnVuLmxlbmd0aCgpIHx8IChVMTZfSVNfTEVBRChjaCkgJiYgY2hhcmFjdGVySW5kZXhJblJ1
biArIDIgPT0gbV9ydW4ubGVuZ3RoKCkgJiYgVTE2X0lTX1RSQUlMKCooY3AgKyBjaGFyYWN0ZXJJ
bmRleCArIDEpKSk7Ci0KLSAgICAgICAgICAgICAgICBib29sIGZvcmNlTGVhZGluZ0V4cGFuc2lv
biA9IGZhbHNlOyAvLyBPbiB0aGUgbGVmdCwgcmVnYXJkbGVzcyBvZiBtX3J1bi5sdHIoKQotICAg
ICAgICAgICAgICAgIGJvb2wgZm9yY2VUcmFpbGluZ0V4cGFuc2lvbiA9IGZhbHNlOyAvLyBPbiB0
aGUgcmlnaHQsIHJlZ2FyZGxlc3Mgb2YgbV9ydW4ubHRyKCkKLSAgICAgICAgICAgICAgICBib29s
IGZvcmJpZExlYWRpbmdFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBib29sIGZv
cmJpZFRyYWlsaW5nRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1bkZv
cmNlc0xlYWRpbmdFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGZvcmNlTGVhZGluZ0V4
cGFuc2lvbiA9IG1fcnVuLmx0cigpID8gaXNGaXJzdENoYXJhY3RlciA6IGlzTGFzdENoYXJhY3Rl
cjsKLSAgICAgICAgICAgICAgICBpZiAocnVuRm9yY2VzVHJhaWxpbmdFeHBhbnNpb24pCi0gICAg
ICAgICAgICAgICAgICAgIGZvcmNlVHJhaWxpbmdFeHBhbnNpb24gPSBtX3J1bi5sdHIoKSA/IGlz
TGFzdENoYXJhY3RlciA6IGlzRmlyc3RDaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1
bkZvcmJpZHNMZWFkaW5nRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAgICBmb3JiaWRMZWFk
aW5nRXhwYW5zaW9uID0gbV9ydW4ubHRyKCkgPyBpc0ZpcnN0Q2hhcmFjdGVyIDogaXNMYXN0Q2hh
cmFjdGVyOwotICAgICAgICAgICAgICAgIGlmIChydW5Gb3JiaWRzVHJhaWxpbmdFeHBhbnNpb24p
Ci0gICAgICAgICAgICAgICAgICAgIGZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uID0gbV9ydW4ubHRy
KCkgPyBpc0xhc3RDaGFyYWN0ZXIgOiBpc0ZpcnN0Q2hhcmFjdGVyOwotICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAg
ICAgYm9vbCBpZGVvZ3JhcGggPSBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChj
aCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCBpZGVvZ3JhcGggfHwgZm9y
Y2VMZWFkaW5nRXhwYW5zaW9uIHx8IGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhwYW5zaW9uIGV2ZW5s
eSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVuLgotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgZXhwYW5kTGVmdCwgZXhwYW5kUmlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnRpZShleHBhbmRMZWZ0LCBleHBhbmRSaWdodCkgPSBleHBhbnNpb25Mb2NhdGlvbihpZGVvZ3Jh
cGgsIHRyZWF0QXNTcGFjZSwgbV9ydW4ubHRyKCksIGFmdGVyRXhwYW5zaW9uLCBmb3JiaWRMZWFk
aW5nRXhwYW5zaW9uLCBmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiwgZm9yY2VMZWFkaW5nRXhwYW5z
aW9uLCBmb3JjZVRyYWlsaW5nRXhwYW5zaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhZHZhbmNlLmV4cGFuZChtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5LCAwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRMZWZ0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSW5jcmVhc2UgcHJldmlvdXMgd2lkdGgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9hZGp1c3RlZEJhc2VBZHZhbmNlcy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhUZXh0UnVuLmdyb3dJbml0aWFsQWR2YW5j
ZUhvcml6b250YWxseShtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYWRq
dXN0ZWRCYXNlQWR2YW5jZXMubGFzdCgpLmV4cGFuZChtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5
LCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChleHBhbmRSaWdodCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckV4cGFu
c2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgYWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBBY2NvdW50IGZvciB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmVh
dEFzU3BhY2UgJiYgKGNoICE9ICdcdCcgfHwgIW1fcnVuLmFsbG93VGFicygpKSAmJiAoY2hhcmFj
dGVySW5kZXggPiAwIHx8IHJ1bkluZGV4ID4gMCkgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlLmV4cGFuZChtX2ZvbnQud29yZFNwYWNpbmco
KSwgMCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFmdGVy
RXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdpZHRoU2lu
Y2VMYXN0Q29tbWl0ICs9IGFkdmFuY2Uud2lkdGgoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6
IENvbWJpbmluZyBtYXJrcyBzaG91bGQgcmVjZWl2ZSBhIHRleHQgZW1waGFzaXMgbWFyayBpZiB0
aGV5IGFyZSBjb21iaW5lIHdpdGggYSBzcGFjZS4KLSAgICAgICAgICAgIGlmIChtX2ZvclRleHRF
bXBoYXNpcyAmJiAoIUZvbnRDYXNjYWRlOjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoKSB8fCAo
VV9HRVRfR0NfTUFTSyhjaCkgJiBVX0dDX01fTUFTSykpKQotICAgICAgICAgICAgICAgIGdseXBo
ID0gMDsKLQotICAgICAgICAgICAgbV9hZGp1c3RlZEJhc2VBZHZhbmNlcy5hcHBlbmQoYWR2YW5j
ZSk7Ci0gICAgICAgICAgICBpZiAoYXV0byogb3JpZ2lucyA9IGNvbXBsZXhUZXh0UnVuLmdseXBo
T3JpZ2lucygpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZ2x5cGhPcmlnaW5zLnNpemUo
KSA8IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2ds
eXBoT3JpZ2lucy5ncm93KG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpKTsKLSAgICAgICAg
ICAgICAgICBtX2dseXBoT3JpZ2luc1ttX2dseXBoT3JpZ2lucy5zaXplKCkgLSAxXSA9IG9yaWdp
bnNbaV07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZ2x5cGhPcmlnaW5zLnNpemUoKSA9PSBt
X2FkanVzdGVkQmFzZUFkdmFuY2VzLnNpemUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2FkanVzdGVkR2x5cGhzLmFwcGVuZChnbHlwaCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGgpOwot
ICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShnbHlwaE9yaWdpbi54KCksIGdseXBoT3JpZ2lu
LnkoKSk7Ci0gICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptaW4obV9t
aW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKLSAgICAgICAgICAgIG1fbWF4
R2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlw
aEJvdW5kcy5tYXhYKCkpOwotICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IHN0
ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAg
ICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5n
Qm94WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKLSAgICAgICAgICAgIGdseXBoT3JpZ2luLm1vdmUo
YWR2YW5jZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxhc3RDaGFyYWN0ZXJJbmRleCA9
IGNoYXJhY3RlckluZGV4OwotICAgICAgICB9Ci0gICAgICAgIGlmICghaXNNb25vdG9uaWMpCi0g
ICAgICAgICAgICBjb21wbGV4VGV4dFJ1bi5zZXRJc05vbk1vbm90b25pYygpOwotICAgIH0KLQot
ICAgIG1fdG90YWxXaWR0aCArPSB3aWR0aFNpbmNlTGFzdENvbW1pdDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwOWFiYTU1YzRkMjU1MGU5YWYxYmJkYWU3MmRkNjA2NzFlYTViNGE1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jZGVmaW5lIFVTRV9MQVlPVVRfU1BFQ0lG
SUNfQURWQU5DRVMgKChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMTAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSA5MDAwMCkpCi0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgQ0dHbHlw
aDsKLQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVFJ1biAqIENUUnVuUmVmOwotdHlwZWRlZiBj
b25zdCBzdHJ1Y3QgX19DVExpbmUgKiBDVExpbmVSZWY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRm9udENhc2NhZGU7Ci1jbGFzcyBGb250OwotY2xhc3MgVGV4dFJ1bjsKLQotZW51
bSBHbHlwaEl0ZXJhdGlvblN0eWxlIHsgSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEJ5V2hvbGVHbHlw
aHMgfTsKLQotLy8gU2VlIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL3dpa2kvQ29tcGxleFRleHRD
b250cm9sbGVyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENvbXBsZXhUZXh0Q29udHJvbGxl
ci4KLWNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24g
PSBmYWxzZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGZv
clRleHRFbXBoYXNpcyA9IGZhbHNlKTsKLQotICAgIGNsYXNzIENvbXBsZXhUZXh0UnVuOwotICAg
IFdFQkNPUkVfRVhQT1JUIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBWZWN0b3I8UmVmPENvbXBsZXhUZXh0UnVuPj4mKTsKLQotICAgIC8v
IEFkdmFuY2UgYW5kIGVtaXQgZ2x5cGhzIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIq
ID0gbnVsbHB0ciwgR2x5cGhJdGVyYXRpb25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBI
YXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IG51bGxwdHIpOwotCi0gICAgLy8g
Q29tcHV0ZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmb3IgYSBnaXZlbiB4IGNvb3JkaW5hdGUuCi0g
ICAgdW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocyk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiBldmVyeXRoaW5nIHdlJ3Zl
IGNvbnN1bWVkIHNvIGZhci4KLSAgICBmbG9hdCBydW5XaWR0aFNvRmFyKCkgY29uc3QgeyByZXR1
cm4gbV9ydW5XaWR0aFNvRmFyOyB9Ci0KLSAgICBmbG9hdCB0b3RhbFdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV90b3RhbFdpZHRoOyB9Ci0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtYXhH
bHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7
IH0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWlu
R2x5cGhCb3VuZGluZ0JveFk7IH0KLSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KLQotICAgIGNsYXNzIENvbXBs
ZXhUZXh0UnVuIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcGxleFRleHRSdW4+IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShDVFJ1blJlZiBj
dFJ1biwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IHN0cmluZ0xvY2F0aW9uLCB1bnNpZ25lZCBzdHJpbmdMZW5ndGgsIHVuc2lnbmVkIGluZGV4QmVn
aW4sIHVuc2lnbmVkIGluZGV4RW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udCwgY2hhcmFjdGVycywgc3RyaW5n
TG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgaW5kZXhCZWdpbiwgaW5kZXhFbmQpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZShjb25zdCBGb250
JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24s
IHVuc2lnbmVkIHN0cmluZ0xlbmd0aCwgdW5zaWduZWQgaW5kZXhCZWdpbiwgdW5zaWduZWQgaW5k
ZXhFbmQsIGJvb2wgbHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDb21wbGV4VGV4dFJ1bihmb250LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3Ry
aW5nTGVuZ3RoLCBpbmRleEJlZ2luLCBpbmRleEVuZCwgbHRyKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoY29uc3QgVmVjdG9yPEZsb2F0
U2l6ZT4mIGFkdmFuY2VzLCBjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIG9yaWdpbnMsIGNvbnN0
IFZlY3RvcjxHbHlwaD4mIGdseXBocywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgc3RyaW5nSW5k
aWNlcywgRmxvYXRTaXplIGluaXRpYWxBZHZhbmNlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHVuc2lnbmVkIHN0cmlu
Z0xlbmd0aCwgdW5zaWduZWQgaW5kZXhCZWdpbiwgdW5zaWduZWQgaW5kZXhFbmQsIGJvb2wgbHRy
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4
dFJ1bihhZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBpbml0aWFsQWR2
YW5jZSwgZm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgaW5k
ZXhCZWdpbiwgaW5kZXhFbmQsIGx0cikpOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQg
Z2x5cGhDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhDb3VudDsgfQotICAgICAgICBjb25z
dCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9Ci0gICAgICAg
IHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdMb2NhdGlv
bjsgfQotICAgICAgICB1bnNpZ25lZCBzdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZ0xlbmd0aDsgfQotICAgICAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGluZGV4QXQodW5z
aWduZWQpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBpbmRleEJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleEJlZ2luOyB9Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4RW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleEVuZDsgfQotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXRBdCh1bnNpZ25l
ZCBpKSBjb25zdCB7IEFTU0VSVCghbV9pc01vbm90b25pYyk7IHJldHVybiBtX2dseXBoRW5kT2Zm
c2V0c1tpXTsgfQotICAgICAgICBjb25zdCBDR0dseXBoKiBnbHlwaHMoKSBjb25zdCB7IHJldHVy
biBtX2dseXBocy5kYXRhKCk7IH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIGlzIHRo
ZSBmb3JtYXQgb2YgdGhlIGluZm9ybWF0aW9uIENvcmVUZXh0IGdpdmVzIHVzIGFib3V0IGVhY2gg
cnVuOgotICAgICAgICAgKgotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtLS0tLT5YIChQYWludCBnbHlwaCBwb3NpdGlvbikgICBYIChQYWludCBnbHlw
aCBwb3NpdGlvbikgICBYIChQYWludCBnbHlwaCBwb3NpdGlvbikKLSAgICAgICAgICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvICAgICA3ICAgICAgICAgICAgICAgICAg
ICAgICAgICA3ICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0gICAgICAgICAqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvICAgICAvICAgICAgICAgICAgICAgICAgICAg
ICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gICAgICAgICAqICAgICAgICAgICAg
ICAgICAgIChJbml0aWFsIGFkdmFuY2UpIC8gICAgIC8gKEdseXBoIG9yaWdpbikgICAgICAgICAg
IC8gKEdseXBoIG9yaWdpbikgICAgICAgICAgIC8gKEdseXBoIG9yaWdpbikKLSAgICAgICAgICog
ICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tICAgICAvICAgICAgICAgICAgICAg
ICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gICAgICAgICAqICAgICAg
ICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAg
ICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gICAgICAgICAqICAgICAgICAgICAg
ICAgIFggICAgICAgICAgICAgICAgICAgICAgIFgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVgt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVgKLSAg
ICAgICAgICogKHRleHQgcG9zaXRpb24gXikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChi
YXNlIGFkdmFuY2UpICAgICAgICAgICAgIChiYXNlIGFkdmFuY2UpICAgICAgICAgICAgIChiYXNl
IGFkdmFuY2UpCi0gICAgICAgICAqCi0gICAgICAgICAqCi0gICAgICAgICAqCi0gICAgICAgICAq
Ci0gICAgICAgICAqCi0gICAgICAgICAqIEFuZCBoZXJlIGlzIHRoZSBvdXRwdXQgd2UgdHJhbnNm
b3JtIHRoaXMgaW50byAoZm9yIGVhY2ggcnVuKToKLSAgICAgICAgICoKLSAgICAgICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0+WC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0+WC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+WAotICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAoUGFpbnQgYWR2
YW5jZSkgICAgICAgICAgICAoUGFpbnQgYWR2YW5jZSkgICAgICAgXAotICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICogICAg
ICAgICAgICAgICAgICAgKEluaXRpYWwgYWR2YW5jZSkgLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAoUGFpbnQgYWR2YW5j
ZSkKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICogICAgICAgICAgICAgICAgIC8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAqICAgICAg
ICAgICAgICAgIFgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVgKLSAgICAgICAgICogKHRleHQgcG9zaXRpb24gXikgICAgICAgICAgICAgICAgKGxheW91dCBh
ZHZhbmNlKSAgICAgICAgICAgICAgICAgICAgICAgKGxheW91dCBhZHZhbmNlKSAgICAgICAgICAg
KGxheW91dCBhZHZhbmNlKQotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBncm93SW5pdGlhbEFk
dmFuY2VIb3Jpem9udGFsbHkoZmxvYXQgZGVsdGEpIHsgbV9pbml0aWFsQWR2YW5jZS5leHBhbmQo
ZGVsdGEsIDApOyB9Ci0gICAgICAgIEZsb2F0U2l6ZSBpbml0aWFsQWR2YW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5pdGlhbEFkdmFuY2U7IH0KLSAgICAgICAgY29uc3QgRmxvYXRTaXplKiBiYXNl
QWR2YW5jZXMoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VBZHZhbmNlcy5kYXRhKCk7IH0KLSAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCogZ2x5cGhPcmlnaW5zKCkgY29uc3QgeyByZXR1cm4gbV9nbHlw
aE9yaWdpbnMuc2l6ZSgpID09IGdseXBoQ291bnQoKSA/IG1fZ2x5cGhPcmlnaW5zLmRhdGEoKSA6
IG51bGxwdHI7IH0KLSAgICAgICAgYm9vbCBpc0xUUigpIGNvbnN0IHsgcmV0dXJuIG1faXNMVFI7
IH0KLSAgICAgICAgYm9vbCBpc01vbm90b25pYygpIGNvbnN0IHsgcmV0dXJuIG1faXNNb25vdG9u
aWM7IH0KLSAgICAgICAgdm9pZCBzZXRJc05vbk1vbm90b25pYygpOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgQ29tcGxleFRleHRSdW4oQ1RSdW5SZWYsIGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHVuc2lnbmVkIHN0cmluZ0xl
bmd0aCwgdW5zaWduZWQgaW5kZXhCZWdpbiwgdW5zaWduZWQgaW5kZXhFbmQpOwotICAgICAgICBD
b21wbGV4VGV4dFJ1bihjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCB1bnNpZ25lZCBzdHJpbmdMZW5ndGgsIHVuc2lnbmVkIGluZGV4
QmVnaW4sIHVuc2lnbmVkIGluZGV4RW5kLCBib29sIGx0cik7Ci0gICAgICAgIFdFQkNPUkVfRVhQ
T1JUIENvbXBsZXhUZXh0UnVuKGNvbnN0IFZlY3RvcjxGbG9hdFNpemU+JiBhZHZhbmNlcywgY29u
c3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBvcmlnaW5zLCBjb25zdCBWZWN0b3I8R2x5cGg+JiBnbHlw
aHMsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHN0cmluZ0luZGljZXMsIEZsb2F0U2l6ZSBpbml0
aWFsQWR2YW5jZSwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBzdHJpbmdMb2NhdGlvbiwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCB1bnNpZ25lZCBpbmRleEJl
Z2luLCB1bnNpZ25lZCBpbmRleEVuZCwgYm9vbCBsdHIpOwotCi0gICAgICAgIFZlY3RvcjxGbG9h
dFNpemUsIDY0PiBtX2Jhc2VBZHZhbmNlczsKLSAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDY0
PiBtX2dseXBoT3JpZ2luczsKLSAgICAgICAgVmVjdG9yPENHR2x5cGgsIDY0PiBtX2dseXBoczsK
LSAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCA2ND4gbV9nbHlwaEVuZE9mZnNldHM7Ci0gICAgICAg
IFZlY3Rvcjx1bnNpZ25lZCwgNjQ+IG1fY29yZVRleHRJbmRpY2VzOwotICAgICAgICBGbG9hdFNp
emUgbV9pbml0aWFsQWR2YW5jZTsKLSAgICAgICAgY29uc3QgRm9udCYgbV9mb250OwotICAgICAg
ICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwotICAgICAgICB1bnNpZ25lZCBtX3N0cmluZ0xl
bmd0aDsKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJlZ2luOwotICAgICAgICB1bnNpZ25lZCBt
X2luZGV4RW5kOwotICAgICAgICB1bnNpZ25lZCBtX2dseXBoQ291bnQ7Ci0gICAgICAgIHVuc2ln
bmVkIG1fc3RyaW5nTG9jYXRpb247Ci0gICAgICAgIGJvb2wgbV9pc0xUUjsKLSAgICAgICAgYm9v
bCBtX2lzTW9ub3RvbmljIHsgdHJ1ZSB9OwotICAgIH07Ci1wcml2YXRlOgotICAgIHZvaWQgY29t
cHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXR5KCk7Ci0gICAgdm9pZCBmaW5pc2hDb25zdHJ1Y3Rpb24o
KTsKLSAgICAKLSAgICBzdGF0aWMgdW5zaWduZWQgc3RyaW5nQmVnaW4oY29uc3QgQ29tcGxleFRl
eHRSdW4mIHJ1bikgeyByZXR1cm4gcnVuLnN0cmluZ0xvY2F0aW9uKCkgKyBydW4uaW5kZXhCZWdp
bigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIHN0cmluZ0VuZChjb25zdCBDb21wbGV4VGV4dFJ1
biYgcnVuKSB7IHJldHVybiBydW4uc3RyaW5nTG9jYXRpb24oKSArIHJ1bi5pbmRleEVuZCgpOyB9
Ci0KLSAgICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnMoKTsKLQotICAgIHZvaWQgY29sbGVj
dENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250Kik7Ci0gICAgdm9pZCBhZGp1
c3RHbHlwaHNBbmRBZHZhbmNlcygpOwotCi0gICAgdW5zaWduZWQgaW5kZXhPZkN1cnJlbnRSdW4o
dW5zaWduZWQmIGxlZnRtb3N0R2x5cGgpOwotICAgIHVuc2lnbmVkIGluY3JlbWVudEN1cnJlbnRS
dW4odW5zaWduZWQmIGxlZnRtb3N0R2x5cGgpOwotCi0gICAgZmxvYXQgcnVuV2lkdGhTb0ZhckZy
YWN0aW9uKHVuc2lnbmVkIGdseXBoU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGdseXBoRW5kT2Zmc2V0
LCB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCwgR2x5cGhJdGVyYXRpb25TdHls
ZSkgY29uc3Q7Ci0KLSAgICBGbG9hdFBvaW50IGdseXBoT3JpZ2luKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBpbmRleCA8IG1fZ2x5cGhPcmlnaW5zLnNpemUoKSA/IG1fZ2x5cGhPcmln
aW5zW2luZGV4XSA6IEZsb2F0UG9pbnQoKTsgfQotCi0gICAgVmVjdG9yPEZsb2F0U2l6ZSwgMjU2
PiBtX2FkanVzdGVkQmFzZUFkdmFuY2VzOwotICAgIFZlY3RvcjxGbG9hdFBvaW50LCAyNTY+IG1f
Z2x5cGhPcmlnaW5zOwotICAgIFZlY3RvcjxDR0dseXBoLCAyNTY+IG1fYWRqdXN0ZWRHbHlwaHM7
Ci0KLSAgICBWZWN0b3I8VUNoYXIsIDI1Nj4gbV9zbWFsbENhcHNCdWZmZXI7Ci0KLSAgICAvLyBU
aGVyZSBpcyBhIDMtbGV2ZWwgaGllcmFyY2h5IGhlcmUuIEF0IHRoZSB0b3AsIHdlIGFyZSBpbnRl
cmVzdGVkIGluIG1fcnVuLnN0cmluZygpLiBXZSBwYXJ0aXRpb24gdGhhdCBzdHJpbmcKLSAgICAv
LyBpbnRvIExpbmVzLCBlYWNoIG9mIHdoaWNoIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB3
aGljaCBzaG91bGQgdXNlIHRoZSBzYW1lIEZvbnQuIENvcmUgVGV4dCB0aGVuIHBhcnRpdGlvbnMK
LSAgICAvLyB0aGUgTGluZSBpbnRvIENvbXBsZXhUZXh0UnVucy4KLSAgICAvLyBDb21wbGV4VGV4
dFJ1bjo6c3RyaW5nTG9jYXRpb24oKSBhbmQgQ29tcGxleFRleHRSdW46OnN0cmluZ0xlbmd0aCgp
IHJlZmVyIHRvIHRoZSBvZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgTGluZQotICAgIC8vIHJlbGF0
aXZlIHRvIG1fcnVuLnN0cmluZygpLiBDb21wbGV4VGV4dFJ1bjo6aW5kZXhBdCgpIHJldHVybnMg
dG8gdGhlIG9mZnNldCBvZiBhIGNvZGVwb2ludCByZWxhdGl2ZSB0bwotICAgIC8vIGl0cyBMaW5l
LiBDb21wbGV4VGV4dFJ1bjo6Z2x5cGhzKCkgYW5kIENvbXBsZXhUZXh0UnVuOjphZHZhbmNlcygp
IHJlZmVyIHRvIGdseXBocyByZWxhdGl2ZSB0byB0aGUgQ29tcGxleFRleHRSdW4uCi0gICAgLy8g
VGhlIGxlbmd0aCBvZiB0aGUgZW50aXJlIFRleHRSdW4gaXMgbV9ydW4ubGVuZ3RoKCkKLSAgICBW
ZWN0b3I8UmVmUHRyPENvbXBsZXhUZXh0UnVuPiwgMTY+IG1fY29tcGxleFRleHRSdW5zOwotCi0g
ICAgLy8gVGhlIGluaXRpYWwgY2FwYWNpdHkgb2YgdGhlc2UgdmVjdG9ycyB3YXMgc2VsZWN0ZWQg
YXMgYmVpbmcgdGhlIHNtYWxsZXN0IHBvd2VyIG9mIHR3byBncmVhdGVyIHRoYW4KLSAgICAvLyB0
aGUgYXZlcmFnZSAoMy41KSBwbHVzIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gKDcuNSkgb2Ygbm9u
emVybyBzaXplcyB1c2VkIG9uIEFyYWJpYyBXaWtpcGVkaWEuCi0gICAgVmVjdG9yPHVuc2lnbmVk
LCAxNj4gbV9ydW5JbmRpY2VzOwotICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IG1fZ2x5cGhDb3Vu
dEZyb21TdGFydFRvSW5kZXg7Ci0KLSAgICBWZWN0b3I8UmV0YWluUHRyPENUTGluZVJlZj4+IG1f
Y29yZVRleHRMaW5lczsKLQotICAgIFZlY3RvcjxTdHJpbmc+IG1fc3RyaW5nc0ZvcjhCaXRSdW5z
OwotCi0gICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250cyB7IG51bGxwdHIg
fTsKLQotICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7Ci0gICAgY29uc3QgVGV4dFJ1biYg
bV9ydW47Ci0KLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRDaGFyYWN0ZXIgeyAwIH07Ci0gICAgdW5z
aWduZWQgbV9lbmQgeyAwIH07Ci0KLSAgICBmbG9hdCBtX3RvdGFsV2lkdGggeyAwIH07Ci0gICAg
ZmxvYXQgbV9ydW5XaWR0aFNvRmFyIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzU29G
YXIgeyAwIH07Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50UnVuIHsgMCB9OwotICAgIHVuc2lnbmVk
IG1fZ2x5cGhJbkN1cnJlbnRSdW4geyAwIH07Ci0gICAgdW5zaWduZWQgbV9jaGFyYWN0ZXJJbkN1
cnJlbnRHbHlwaCB7IDAgfTsKLSAgICBmbG9hdCBtX2V4cGFuc2lvbiB7IDAgfTsKLSAgICBmbG9h
dCBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5IHsgMCB9OwotCi0gICAgZmxvYXQgbV9taW5HbHlw
aEJvdW5kaW5nQm94WCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSB9OwotICAg
IGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFggeyBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6bWluKCkgfTsKLSAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZIHsgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46Om1heCgpIH07Ci0gICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5n
Qm94WSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSB9OwotCi0gICAgYm9vbCBt
X2lzTFRST25seSB7IHRydWUgfTsKLSAgICBib29sIG1fbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJl
Y3Rpb24geyBmYWxzZSB9OwotICAgIGJvb2wgbV9mb3JUZXh0RW1waGFzaXMgeyBmYWxzZSB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>