<?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>216400</bug_id>
          
          <creation_ts>2020-09-11 00:35:00 -0700</creation_ts>
          <short_desc>[Cocoa] Migrate CoreText-specific code from ***Cocoa.mm to ***CoreText.cpp</short_desc>
          <delta_ts>2020-09-11 13:28:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>216353</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1687679</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-11 00:35:00 -0700</bug_when>
    <thetext>[Cocoa] Migrate CoreText-specific code from ***Cocoa.mm to ***CoreText.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687681</commentid>
    <comment_count>1</comment_count>
      <attachid>408520</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-11 00:40:12 -0700</bug_when>
    <thetext>Created attachment 408520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687682</commentid>
    <comment_count>2</comment_count>
      <attachid>408521</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-11 00:42:08 -0700</bug_when>
    <thetext>Created attachment 408521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687683</commentid>
    <comment_count>3</comment_count>
      <attachid>408522</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-11 00:45:00 -0700</bug_when>
    <thetext>Created attachment 408522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687793</commentid>
    <comment_count>4</comment_count>
      <attachid>408522</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-09-11 13:13:53 -0700</bug_when>
    <thetext>Comment on attachment 408522
Patch

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

&gt; Source/WTF/wtf/PlatformUse.h:58
&gt; +#define USE_CT 1

Maybe let&apos;s type it out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687798</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-11 13:27:47 -0700</bug_when>
    <thetext>Committed r266936: &lt;https://trac.webkit.org/changeset/266936&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687799</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-11 13:28:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/68728353&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408520</attachid>
            <date>2020-09-11 00:40:12 -0700</date>
            <delta_ts>2020-09-11 00:42:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216400-20200911004011.patch</filename>
            <type>text/plain</type>
            <size>167612</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiYWY5MmYwNjYxMjgwYzFhNTQzZGRk
YWJmMzgzNjk1ZjNkMmE1NDUuLmFlODc4MGFmODNkMTFhZDU5OWYzYjMxYTU2NmMyOWExMTg1YzA5
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTEgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgQ29yZVRleHQt
c3BlY2lmaWMgY29kZSBmcm9tICoqKkNvY29hLm1tIHRvICoqKkNvcmVUZXh0LmNwcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NDAwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1V
c2UuaDoKKwogMjAyMC0wOS0xMCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBEaXNhYmxlIGhhcmR3YXJlIEpQRUcgZGVjb2Rpbmcgb24geDg2IE1hYwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDBiNWZjZjQ3Y2E0ZWQ4MzFiYjAxNjI3OWZmYTdmYzMyYjE1MDdiNDQuLmNhMzI4ZThkNzJmZGM4
ZDhmYWE4YjM5MjI4YjI1OTE1ZWNjM2JiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MyBAQAor
MjAyMC0wOS0xMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisg
ICAgICAgIFtDb2NvYV0gTWlncmF0ZSBDb3JlVGV4dC1zcGVjaWZpYyBjb2RlIGZyb20gKioqQ29j
b2EubW0gdG8gKioqQ29yZVRleHQuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTY0MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBzaGFyaW5nIHRoZSBD
b3JlVGV4dCBjb2RlIHdpdGggdGhlIEFwcGxlIFdpbmRvd3MgcG9ydC4KKworICAgICAgICBUaGlz
IHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgY2F1c2UgV2luZG93cyB0byB1c2UgdGhpcyBuZXdseS1z
aGFyZWQgY29kZSB5ZXQuCisgICAgICAgIEknbSBkb2luZyB0aGlzIHByb2Nlc3MgaW4gc3RhZ2Vz
LiBUaGlzIHBhdGNoIGlzIHRoZSBmaXJzdCBzdGFnZS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
YmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRm
b3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRl
Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhB
ZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6aXNTdWJwaXhlbEFudGlh
bGlhc2luZ0F2YWlsYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWxsVmVjdG9y
V2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpzaG93R2x5cGhzV2l0aEFkdmFuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNl
dENHRm9udFJlbmRlcmluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGU6OmRyYXdHbHlwaHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2Nv
YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1EZXN0cm95KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzU3lzdGVtRm9udCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpyZWdpc3Rl
cmVkRm9udCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYXBGb250V2lkdGhW
YXJpYW50VG9DVEZlYXR1cmVTZWxlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpj
YXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25hcnkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Y2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b2Jq
ZWN0Rm9yRXF1YWxpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5
TmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0uCisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZTo6aXNTdWJwaXhlbEFudGlhbGlhc2luZ0F2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG93R2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENH
Rm9udFJlbmRlcmluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnByaW1hcnlGb250SXNTeXN0
ZW1Gb250IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpGb250
OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1DaGFyV2lk
dGhJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9u
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4
dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6aXNTeXN0ZW1Gb250
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnJlZ2lzdGVyZWRGb250IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVz
RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJDb3JlOjpjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFy
aWF0aW9uc0ZvbnREZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmN0Rm9udCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpv
YmplY3RGb3JFcXVhbGl0eUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdMZXZlbCk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nQ29udHJhc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y2xlYXJUeXBlQ29udHJhc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnN5c3Rl
bUZvbnRTbW9vdGhpbmdDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpz
ZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVy
aW5nU3R5bGVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpnZXRQbGF0
Zm9ybUdseXBoQWR2YW5jZXMpOgorCiAyMDIwLTA5LTEwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgU21hbGwgY2xlYW51cCBpbiBSZW5kZXJUaGVt
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNzk1ZjQzZjQ0ODllMTdjZGNkY2EyOWRhNGM5MjAyNWFh
ZDNkYjRmZC4uODk3ZjRiYzhlZWViNGY5Yzg0OGJmMTQ5NWU4M2M0MTM1ZTJiZDczZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTEgIE15bGVzIEMuIE1heGZp
ZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgQ29y
ZVRleHQtc3BlY2lmaWMgY29kZSBmcm9tICoqKkNvY29hLm1tIHRvICoqKkNvcmVUZXh0LmNwcAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NDAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWwvc3Bp
L3dpbi9Db3JlVGV4dFNQSVdpbi5oOgorCiAyMDIwLTA5LTEwICBCZW4gTmhhbSAgPG5oYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIERpc2FibGUgaGFyZHdhcmUgSlBFRyBkZWNvZGluZyBvbiB4ODYg
TWFjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1Vc2UuaAppbmRleCBhNmViZTY3MmY0YTk1NGMzMzIyNDc4MDNmYmRhZTFj
ODI4MWFmZmUyLi45M2MyNWFhOTdlYzU0ODU2ODBlMTcwN2M3MDU4YjA4NDRmM2Q4NTVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtVXNlLmgKQEAgLTU0LDYgKzU0LDEwIEBACiAjZGVmaW5lIFVTRV9DRyAxCiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBVU0VfQ1QgMQorI2VuZGlmCisKICNp
ZiBQTEFURk9STShDT0NPQSkKICNkZWZpbmUgVVNFX0NBIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmggYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaAppbmRleCBkMjhiMTZiNGNh
ODQ2ODdhM2ZiMTVmZDliYWI0MDlmMzMzZmVkZmE4Li45MGVlOWNmODVhOTllNmVhZmU4NDAyZWI3
ODMzZjFjODgzZWM4NjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93
aW4vQ29yZVRleHRTUElXaW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93aW4v
Q29yZVRleHRTUElXaW4uaApAQCAtNDIsMjIgKzQyLDEyMSBAQCBDVF9FWFBPUlQgY29uc3QgQ0ZT
dHJpbmdSZWYga0NURm9udE5hbWVBdHRyaWJ1dGU7CiBDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdS
ZWYga0NURm9yZWdyb3VuZENvbG9yRnJvbUNvbnRleHRBdHRyaWJ1dGVOYW1lOwogQ1RfRVhQT1JU
IGNvbnN0IENGU3RyaW5nUmVmIGtDVFN0cm9rZVdpZHRoQXR0cmlidXRlTmFtZTsKIENUX0VYUE9S
VCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWU7CitDVF9FWFBP
UlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZzsKK0NUX0VYUE9S
VCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5OworQ1Rf
RVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZTsKK0NU
X0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmll
cktleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250RmVhdHVyZVR5cGVTZWxl
Y3RvcnNLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udEZlYXR1cmVTZWxl
Y3RvckRlZmF1bHRLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udEZlYXR1
cmVTZXR0aW5nc0F0dHJpYnV0ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250
Rml4ZWRBZHZhbmNlQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZv
bnRWYXJpYXRpb25BdHRyaWJ1dGU7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9u
dFVSTEF0dHJpYnV0ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250UmVmZXJl
bmNlVVJMQXR0cmlidXRlOwogCi0vLyBUaGlzIGVudW0gaXMgZGVmaW5lZCBpbiBDVEZvbnQuaC4g
VG8gYXZvaWQgcmVkZWZpbml0aW9uLCBvbmx5IGRlZmluZSBpdCBoZXJlIGlmIENURm9udC5oIGhh
cyBub3QgYmVlbiBpbmNsdWRlZC4gCisvLyBUaGVzZSBlbnVtcyBhcmUgZGVmaW5lZCBpbiBDVEZv
bnQuaC4gVG8gYXZvaWQgcmVkZWZpbml0aW9uLCBvbmx5IGRlZmluZSB0aGVtIGhlcmUgaWYgQ1RG
b250LmggaGFzIG5vdCBiZWVuIGluY2x1ZGVkLiAKICNpZm5kZWYgX19DVEZPTlRfXwordHlwZWRl
ZiBDRl9PUFRJT05TKHVpbnQzMl90LCBDVEZvbnRTeW1ib2xpY1RyYWl0cykgeworICAgIGtDVEZv
bnRUcmFpdEl0YWxpYyA9ICgxIDw8IDApLAorICAgIGtDVEZvbnRUcmFpdEJvbGQgPSAoMSA8PCAx
KSwKKyAgICBrQ1RGb250VHJhaXRNb25vU3BhY2UgPSAoMSA8PCAxMCksCisgICAga0NURm9udFRy
YWl0Q29sb3JHbHlwaHMgPSAoMSA8PCAxMyksCisKKyAgICBrQ1RGb250SXRhbGljVHJhaXQgPSBr
Q1RGb250VHJhaXRJdGFsaWMsCisgICAga0NURm9udEJvbGRUcmFpdCA9IGtDVEZvbnRUcmFpdEJv
bGQsCisgICAga0NURm9udE1vbm9TcGFjZVRyYWl0ID0ga0NURm9udFRyYWl0TW9ub1NwYWNlLAor
ICAgIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0ID0ga0NURm9udFRyYWl0Q29sb3JHbHlwaHMsCit9
OworCiB0eXBlZGVmIENGX09QVElPTlModWludDMyX3QsIENURm9udFRhYmxlT3B0aW9ucykgewog
ICAgIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucyA9IDAsCiAgICAga0NURm9udFRhYmxlT3B0
aW9uRXhjbHVkZVN5bnRoZXRpYyA9ICgxIDw8IDApCiB9OworCitlbnVtIHsKKyAgICBrQ1RGb250
VGFibGVNQVRIID0gJ01BVEgnLAorICAgIGtDVEZvbnRUYWJsZU9TMiAgPSAnT1MvMicsCisgICAg
a0NURm9udFRhYmxlVk9SRyA9ICdWT1JHJywKKyAgICBrQ1RGb250VGFibGVIZWFkID0gJ2hlYWQn
LAorICAgIGtDVEZvbnRUYWJsZVZoZWEgPSAndmhlYScsCit9OworCit0eXBlZGVmIENGX09QVElP
TlModWludDMyX3QsIENURm9udFRyYW5zZm9ybU9wdGlvbnMpIHsKKyAgICBrQ1RGb250VHJhbnNm
b3JtQXBwbHlTaGFwaW5nID0gKDEgPDwgMCksCisgICAga0NURm9udFRyYW5zZm9ybUFwcGx5UG9z
aXRpb25pbmcgPSAoMSA8PCAxKQorfTsKKworZW51bSB7CisgICAga0xvd2VyQ2FzZVR5cGUgPSAz
NywKKyAgICBrVXBwZXJDYXNlVHlwZSA9IDM4LAorfTsKKworZW51bSB7CisgICAga0RlZmF1bHRM
b3dlckNhc2VTZWxlY3RvciA9IDAsCisgICAga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yID0g
MSwKKyAgICBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yID0gMgorfTsKKworZW51bSB7Cisg
ICAga0RlZmF1bHRVcHBlckNhc2VTZWxlY3RvciA9IDAsCisgICAga1VwcGVyQ2FzZVNtYWxsQ2Fw
c1NlbGVjdG9yID0gMSwKKyAgICBrVXBwZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yID0gMgorfTsK
KworZW51bSB7CisgICAga1Byb3BvcnRpb25hbFRleHRTZWxlY3RvciA9IDAsCisgICAga0hhbGZX
aWR0aFRleHRTZWxlY3RvciA9IDIsCisgICAga1RoaXJkV2lkdGhUZXh0U2VsZWN0b3IgPSAzLAor
ICAgIGtRdWFydGVyV2lkdGhUZXh0U2VsZWN0b3IgPSA0LAorfTsKKwordHlwZWRlZiBDRl9FTlVN
KHVpbnQzMl90LCBDVEZvbnRPcmllbnRhdGlvbikKK3sKKyAgICBrQ1RGb250T3JpZW50YXRpb25E
ZWZhdWx0ID0gMCwKKyAgICBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsID0gMSwKKyAgICBr
Q1RGb250T3JpZW50YXRpb25WZXJ0aWNhbCA9IDIsCit9OwogI2VuZGlmCiAKK3Vuc2lnbmVkIENU
Rm9udEdldFVuaXRzUGVyRW0oQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0Q2FwSGVpZ2h0
KENURm9udFJlZik7CitDR0Zsb2F0IENURm9udEdldExlYWRpbmcoQ1RGb250UmVmKTsKK0NHRmxv
YXQgQ1RGb250R2V0QXNjZW50KENURm9udFJlZik7CitDR0Zsb2F0IENURm9udEdldERlc2NlbnQo
Q1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0WEhlaWdodChDVEZvbnRSZWYpOworQ0dGbG9h
dCBDVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRH
ZXRVbmRlcmxpbmVUaGlja25lc3MoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0U2l6ZShD
VEZvbnRSZWYpOworQ1RGb250U3ltYm9saWNUcmFpdHMgQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
Q1RGb250UmVmKTsKK0NGQ2hhcmFjdGVyU2V0UmVmIENURm9udENvcHlDaGFyYWN0ZXJTZXQoQ1RG
b250UmVmKTsKK0NGU3RyaW5nUmVmIENURm9udENvcHlGYW1pbHlOYW1lKENURm9udFJlZik7CitD
RlN0cmluZ1JlZiBDVEZvbnRDb3B5RnVsbE5hbWUoQ1RGb250UmVmKTsKK0NURm9udFJlZiBDVEZv
bnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoQ1RGb250UmVmLCBDR0Zsb2F0IHNpemUsIGNvbnN0
IENHQWZmaW5lVHJhbnNmb3JtKiBtYXRyaXgsIENURm9udERlc2NyaXB0b3JSZWYgYXR0cmlidXRl
cyk7CiBDVEZvbnRSZWYgQ1RGb250Q3JlYXRlV2l0aE5hbWUoQ0ZTdHJpbmdSZWYsIENHRmxvYXQg
c2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKIENURm9udFJlZiBDVEZvbnRDcmVhdGVX
aXRoR3JhcGhpY3NGb250KENHRm9udFJlZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRy
YW5zZm9ybSosIENURm9udERlc2NyaXB0b3JSZWYgYXR0cmlidXRlcyk7CitDVEZvbnRSZWYgQ1RG
b250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKENURm9udERlc2NyaXB0b3JSZWYsIENHRmxvYXQg
c2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKIENUTGluZVJlZiBDVExpbmVDcmVhdGVX
aXRoQXR0cmlidXRlZFN0cmluZyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYpOwogdm9pZCBDVExpbmVE
cmF3KENUTGluZVJlZiwgQ0dDb250ZXh0UmVmKTsKIENGRGF0YVJlZiBDVEZvbnRDb3B5VGFibGUo
Q1RGb250UmVmLCBDVEZvbnRUYWJsZVRhZywgQ1RGb250VGFibGVPcHRpb25zKTsKIENGQXJyYXlS
ZWYgQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhDVEZvbnRSZWYsIENURm9udFRhYmxlT3B0aW9u
cyk7CiBDR1BhdGhSZWYgQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKENURm9udFJlZiwgQ0dHbHlw
aCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKK3ZvaWQgQ1RGb250R2V0VmVydGljYWxUcmFu
c2xhdGlvbnNGb3JHbHlwaHMoQ1RGb250UmVmLCBjb25zdCBDR0dseXBoW10sIENHU2l6ZSB0cmFu
c2xhdGlvbnNbXSwgQ0ZJbmRleCBjb3VudCk7Cit2b2lkIENURm9udERyYXdHbHlwaHMoQ1RGb250
UmVmLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9pbnRbXSwgc2l6ZV90IGNvdW50LCBDR0Nv
bnRleHRSZWYpOworQ0dBZmZpbmVUcmFuc2Zvcm0gQ1RGb250R2V0TWF0cml4KENURm9udFJlZik7
CitDRkFycmF5UmVmIENURm9udENvcHlGZWF0dXJlcyhDVEZvbnRSZWYpOworQ0ZUeXBlUmVmIENU
Rm9udENvcHlBdHRyaWJ1dGUoQ1RGb250UmVmLCBDRlN0cmluZ1JlZik7CitDVEZvbnREZXNjcmlw
dG9yUmVmIENURm9udENvcHlGb250RGVzY3JpcHRvcihDVEZvbnRSZWYpOworYm9vbCBDVEZvbnRU
cmFuc2Zvcm1HbHlwaHMoQ1RGb250UmVmLCBDR0dseXBoW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBD
RkluZGV4IGNvdW50LCBDVEZvbnRUcmFuc2Zvcm1PcHRpb25zKTsKK0NHUmVjdCBDVEZvbnRHZXRC
b3VuZGluZ1JlY3RzRm9yR2x5cGhzKENURm9udFJlZiwgQ1RGb250T3JpZW50YXRpb24sIGNvbnN0
IENHR2x5cGhbXSwgQ0dSZWN0IGJvdW5kaW5nUmVjdHNbXSwgQ0ZJbmRleCBjb3VudCk7Citkb3Vi
bGUgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMoQ1RGb250UmVmLCBDVEZvbnRPcmllbnRhdGlv
biwgY29uc3QgQ0dHbHlwaFtdLCBDR1NpemUgYWR2YW5jZXNbXSwgQ0ZJbmRleCBjb3VudCk7Citi
b29sIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFy
W10sIENHR2x5cGhbXSwgQ0ZJbmRleCBjb3VudCk7Citib29sIENURm9udEdldEdseXBoc0ZvckNo
YXJhY3RlclJhbmdlKENURm9udFJlZiwgQ0dHbHlwaFtdLCBDRlJhbmdlKTsKK0NGRGF0YVJlZiBD
VEZvbnRDb3B5VGFibGUoQ1RGb250UmVmLCBDVEZvbnRUYWJsZVRhZywgQ1RGb250VGFibGVPcHRp
b25zKTsKK2Jvb2wgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKENURm9udFJl
ZiwgY29uc3QgVW5pQ2hhcltdLCBDR0dseXBoW10sIENGSW5kZXggY291bnQpOworCitDVEZvbnRE
ZXNjcmlwdG9yUmVmIENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhDRkRpY3Rp
b25hcnlSZWYpOworYm9vbCBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoQ1RGb250RGVz
Y3JpcHRvclJlZik7CitDVEZvbnREZXNjcmlwdG9yUmVmIENURm9udERlc2NyaXB0b3JDcmVhdGVX
aXRoTmFtZUFuZFNpemUoQ0ZTdHJpbmdSZWYsIENHRmxvYXQpOwogCiBXVEZfRVhURVJOX0NfRU5E
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYmIyMTdiYjNkNDZlOWMwZmU1NjkwMzMz
OThmNWQ0MTQyYzQ2NzYwOS4uZDc3ZDgzZTc4MTYyMWU2YmM0ZjM2MTVmY2Q2M2ViZGI1NTU3YTc1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTMwNiw3ICszMDYsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9hdFJl
Y3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZh
bWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTMyMSw2ICszMjEsMTEgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXll
ci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCiAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9G
b250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5
cGhQYWdlQ29yZVRleHQuY3BwCisKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVJvdGF0
aW9uU2Vzc2lvblZULm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25m
b3JtZXJDVi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpA
QCAtMzM1LDcgKzM0MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0Zsb2F0U2l6ZU1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0KICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9p
bnRNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDcyNjA0MTE5MjI0MDVhZmQwYmJi
NTA1Mzc2ZmU5ZTRlYmI1NzY1YWUuLjllMDJjZDZmZmY4MTBmMGUxZDAwOTRiZmYzZmI0MmZjOGVl
ZTk4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KLXBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENvY29hLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0aW9u
Q29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNv
Y29hLm1tCkBAIC0zNjksNiArMzY5LDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNv
cmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xM
YXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR1BVTGF5ZXIubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRlV2ViTS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250
Q29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRl
eHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9U
ZXh0dXJlQ2FjaGVDVi5tbQpAQCAtNDAyLDcgKzQwNiw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxv
YXRQb2ludE1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCi1wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25N
YWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ludFBvaW50TWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDBkNTk1Mzk5ZGU1Y2EwNTE4ZjIxMDUyMmVmNDMw
NTJiMWU4MTAyZi4uZDc2Y2M0ZmVkODYyNjliODM3ZTMzZjU0NTFkODBiMTU5N2NjMGIwMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNjY0MCw2ICs2NjQwLDExIEBACiAJCTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250
RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3
QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzZCOTVERDIyQzg1OEE0MDBFNkYx
NEYgLyogV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBQzI1MEEyOTREMDBENkU5MjAgLyogRm9udFBs
YXRmb3JtRGF0YUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRQbGF0Zm9ybURh
dGFDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEFEMjUw
QTJFNTMwMEQ2RTkyMCAvKiBHbHlwaFBhZ2VDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHbHlwaFBhZ2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
NkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250Q2FzY2FkZUNvcmVUZXh0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5MjAgLyogRm9udENvcmVUZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udENvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwMTY0LDcgKzEwMTY5LDYgQEAKIAkJN0M0Qzk2REExQUQ0NDgzNTAw
MzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0Qzk2REIxQUQ0NDgzNTAwMzYzNTcy
IC8qIEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFt
RGVmYXVsdFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1JlYWRh
YmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzUxNEUwMDI0QUY4MDU4MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzUxNEUwMjI0QUY4MDU4MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDNTE2QUQyMUYzNTI1MjAwMDM0QjZCRiAvKiBET01Qcm9taXNlUHJveHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NUHJvbWlzZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzEzNiw3ICsxMzE0MCw2IEBACiAJCUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0
RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAw
QTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2x5cGhQYWdlTWFjLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDOEMwRDAwQTVERjAwMzAwNzRE
IC8qIFRleHRCb3VuZGFyaWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFRleHRCb3VuZGFyaWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkIxRjcxNDBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNTBEMDBDQUE4MDA0QUVB
NjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE4MTMwLDYgKzE4MTMzLDE3IEBACiAJCQluYW1lID0gSW5zcGVjdG9yOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUM2RkQ4QUEyNTBBMjkyNDAwRDZFOTIwIC8q
IGN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQzZG
RDhBRTI1MEEzMTE1MDBENkU5MjAgLyogRm9udENhc2NhZGVDb3JlVGV4dC5jcHAgKi8sCisJCQkJ
MUM2RkQ4QUYyNTBBMzNDRjAwRDZFOTIwIC8qIEZvbnRDb3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2
RkQ4QUMyNTBBMjk0RDAwRDZFOTIwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAgKi8s
CisJCQkJMUM2RkQ4QUQyNTBBMkU1MzAwRDZFOTIwIC8qIEdseXBoUGFnZUNvcmVUZXh0LmNwcCAq
LywKKwkJCSk7CisJCQlwYXRoID0gY3Q7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQkxQzgxQjk0RDBFOTczMkQ5MDAyNjZFMDcgLyogaW5zcGVjdG9yICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1ODE3LDcgKzI1ODMxLDYgQEAKIAkJ
CQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1tICovLAogCQkJCUIy
QUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLywK
IAkJCQlCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5o
ICovLAotCQkJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3BwICov
LAogCQkJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tICovLAogCQkJCUIy
NzUzNTRFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZU1hYy5tbSAqLywKIAkJCQlCMjc1MzU0RjBC
MDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gKi8sCkBAIC0yNTg0NCw2ICsyNTg1Nyw3
IEBACiAJCQkJQjUzMjBENjgxMjJBMjRFOTAwMkQxNDQwIC8qIGNvY29hICovLAogCQkJCTJDRTEx
ODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8sCiAJCQkJOTMzMkFCM0IxNjUxNUQ3
NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkxQzZGRDhBQTI1MEEyOTI0MDBENkU5MjAgLyogY3Qg
Ki8sCiAJCQkJQ0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2IC8qIGN2ICovLAogCQkJCTBGRTVGQkM5
MUMzREQ1MDYwMDA3QTJDQSAvKiBkaXNwbGF5bGlzdHMgKi8sCiAJCQkJQTc1RThCN0YwRTFERTJC
MDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8sCkBAIC0yNjIwNCw3ICsyNjIxOCw3IEBACiAJCQkJMUMz
OTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmNwcCAqLywKIAkJCQlD
MjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAqLywKIAkJCQlC
MkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2NvYS5tbSAqLywKLQkJCQk3
QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovLAorCQkJCTFDNkZEOEIw
MjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3BwICovLAogCQkJCTFDMTJBQzJDMUVFNzc5
OTUwMDc5RTBBMCAvKiBGb250RGVzY3JpcHRpb25Db2NvYS5jcHAgKi8sCiAJCQkJMUMxMkFDMjgx
RUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwICov
LAogCQkJCTFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CmluZGV4IDZlZjk3ODkyN2MzMDI0OTEyN2RmNWNiZDRlOWE1NWE4NzhkNDQ5YzMuLjEwNjUwZjlh
MDM3NjUyYmNjNTVhNTY3NzBlZTE4MzFjMTI4ODZlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC00NzQsNyArNDc0LDcgQEAgY29uc3QgRm9udCYgRm9u
dDo6YnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0CiAgICAgcmV0dXJuICpkZXJpdmVkRm9udERh
dGEuYnJva2VuSWRlb2dyYXBoRm9udDsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkKKyNpZiAh
VVNFKENUKQogCiBib29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBj
b25zdAogewpAQCAtNTExLDcgKzUxMSw3IEBAIFJlZlB0cjxGb250PiBGb250OjpjcmVhdGVTY2Fs
ZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hCiAgICAg
cmV0dXJuIHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChmb250RGVzY3JpcHRpb24sIHNjYWxlRmFj
dG9yKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkKKyNpZiAhVVNFKENUKQogdm9pZCBGb250
OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2ws
IGJvb2wsIGNvbnN0IEF0b21TdHJpbmcmLCBTdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uKSBjb25z
dAogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDdhYjUz
MTdhYjEyNGVmMjZlNDEyOTY1M2Q2M2Y5ZjY3MzQ3NWEyMzcuLjM4MmZlYjZjNTExODc2NzdiZGMy
NmU3YWRkZjU4YTVmYTg5YWRjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmgKQEAgLTY0LDcgKzY0LDcgQEAgZW51bSBGb250VmFyaWFudCB7IEF1dG9WYXJpYW50LCBO
b3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXIKIGVudW0gUGl0
Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKIGVudW0gY2xh
c3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFllcyB9OwogCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCisjaWYgVVNFKENUKQogYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmLCB1bnNp
Z25lZCB0YWJsZVRhZyk7CiBib29sIGZvbnRIYXNFaXRoZXJUYWJsZShDVEZvbnRSZWYsIHVuc2ln
bmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDMyNDMwYTZi
NTU0NDk5MGNkYTdiNzYzYWZmOGUwMzYwY2ZjYjNlMzYuLjU2MTBiMmY4M2NiOWEyYzAzM2IzYjkw
OGRhYzgzZmE2NmIyYzVlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTU5NSw3ICs1OTUsNyBAQCBib29sIEZvbnRDYXNjYWRl
OjpzaG91bGRVc2VTbW9vdGhpbmcoKQogICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5n
OwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0UoQ1QpCiBib29sIEZvbnRDYXNj
YWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkKIHsKICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaApp
bmRleCAzODczOTlmMTQ1NDNkNmEwMTQ0ZGRjOWQ4NTNjMTlmMTk0NDExZWU5Li5kZDc4OWQ0MjY5
Njg5MzUxYzZmZDc2YTFhMWZiMzIxYjAzNWZiNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTgxLDYgKzgxLDExIEBAIHN0cnVjdCBH
bHlwaE92ZXJmbG93IHsKICAgICBib29sIGNvbXB1dGVCb3VuZHMgeyBmYWxzZSB9OwogfTsKIAor
I2lmIFVTRShDVCkKK3ZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZvbnQmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBDR0ds
eXBoKiwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpOwordm9pZCBmaWxs
VmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYg
cG9zaXRpb25zLCBDR0NvbnRleHRSZWYsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVk
IGNvdW50KTsKKyNlbmRpZgorCiBjbGFzcyBUZXh0TGF5b3V0RGVsZXRlciB7CiBwdWJsaWM6CiAg
ICAgdm9pZCBvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggZDRi
YzJhNGYxMTFkMzgyMGY4MDlkMTgwZmU2NzMyNDkwOWNiZTdkNi4uZDg5ZDZlYzRhZGM2ZWU1YzQw
NTY5M2VmNzg1YzkwNWZiNjEzNmIxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgRm9u
dFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHNvdXJjZSwKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQor
I2lmICFVU0UoQ1QpCiAKIFN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29u
c3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQ
bGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0
Zm9ybURhdGEuaAppbmRleCA0NmM5YWM3NzhhZDlhOTY0NGIxMzFjNTM2ZTIwYmIwOGE0YzA0ZGFj
Li5iYzMxMWVlY2IzYzkwMGExMmRhZTc1M2ZlNWVjYmY2NGMyZjY4NWVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENl
bnRlciBVU0EsIEluYy4KQEAgLTQ5LDcgKzQ5LDcgQEAKIE9CSkNfQ0xBU1MgTlNGb250OwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0UoQ1QpCiB0eXBlZGVmIGNvbnN0IHN0
cnVjdCBfX0NURm9udCogQ1RGb250UmVmOwogI2VuZGlmCiAKQEAgLTgyLDcgKzgyLDcgQEAgcHVi
bGljOgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0Jv
bGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0
aW9uOjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVn
dWxhcldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4
dFJlbmRlcmluZyk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0UoQ1QpCiAgICAgV0VC
Q09SRV9FWFBPUlQgRm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wg
c3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwgRm9u
dE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJp
YW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9
IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZyk7CiAjZW5kaWYKIApAQCAtOTgs
OCArOTgsOCBAQCBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+
LCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwg
Ym9vbCB1c2VHREkpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLSAg
ICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIENHRm9udFJlZiwgZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJ
KTsKKyNpZiBQTEFURk9STShXSU4pICYmIFVTRShDVCkKKyAgICBGb250UGxhdGZvcm1EYXRhKEdE
SU9iamVjdDxIRk9OVD4sIENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oV0lOKSAmJiBVU0UoRElSRUNUMkQpCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91c2VHREk7IH0KICNlbmRpZgogCi0j
aWYgUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogICAgIENURm9udFJlZiBmb250KCkgY29u
c3QgeyByZXR1cm4gbV9mb250LmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgQ1RGb250UmVm
IHJlZ2lzdGVyZWRGb250KCkgY29uc3Q7IC8vIFJldHVybnMgbnVsbHB0ciBpZmYgdGhlIGZvbnQg
aXMgbm90IHJlZ2lzdGVyZWQsIHN1Y2ggYXMgd2ViIGZvbnRzIChvdGhlcndpc2UgcmV0dXJucyBm
b250KCkpLgogCkBAIC0yMjIsNyArMjIyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkU2Nh
bGVkRm9udChjYWlyb19mb250X2ZhY2VfdCopOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NP
QSkKKyNpZiBVU0UoQ1QpCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2Ygb25lIG9mIHRoZXNlLiBU
aGVzZSB0d28gZm9udHMgYXJlIHN1YnRseSBkaWZmZXJlbnQsIGFuZCBpdCBpcyBub3Qgb2J2aW91
cyB3aGljaCBvbmUgdG8gdXNlIHdoZXJlLgogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fZm9u
dDsKICAgICBtdXRhYmxlIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fY3RGb250OwpAQCAtMjc2LDcg
KzI3Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBVU0UoQ1QpCiBib29sIGlzU3lzdGVtRm9udChDVEZvbnRSZWYpOwogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRl
Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fz
Y2FkZUNvY29hLm1tCmluZGV4IDBhMjNkNmE1MTRmMGMxZTQyZWE0M2Q3NWU4MWYxN2YyMzE2NmRm
NTguLmZkYzY4OTI3ZmY5OTFlMmUyMWRiYzdhMmU2ZDdiYjFmOGJhM2JkNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2Nh
ZGVDb2NvYS5tbQpAQCAtMjMsMTkgKzIzLDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiRm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCi0j
aW1wb3J0ICJEYXNoQXJyYXkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkdseXBoQnVm
ZmVyLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIkxheW91dFJlY3Qu
aCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNz
U1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0jaWYgVVNFKEFQ
UEtJVCkKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotI2ltcG9ydCA8d3RmL01h
dGhFeHRyYXMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDxwYWwvaW9z
L1VJS2l0U29mdExpbmsuaD4KQEAgLTQ5LDI0ICszOCw2IEBAIFNPRlRfTElOS19DTEFTUyhDb3Jl
VUksIENVSVN0eWxlRWZmZWN0Q29uZmlndXJhdGlvbikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0vLyBDb25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhp
bmdEaXNhYmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMo
KSBzdGlsbCBpbXBhY3RzIHRleHQKLS8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVu
Y3Rpb24gdXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290
aGluZyIgdGVybWlub2xvZ3kuCi1ib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFz
aW5nQXZhaWxhYmxlKCkKLXsKLSNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NN
T09USElOR19ESVNBQkxFRCkKLSAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0Vu
YWJsZWQ7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VGbGFnLCBbJl0gKCkgewotICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0Vu
YWJsZWQgPSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7Ci0gICAg
fSk7Ci0gICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKLSNlbGlmIFBMQVRG
T1JNKE1BQykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi19Ci0KIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21w
bGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NywyOCArNDgsNyBAQCBib29sIEZv
bnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6
b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQp
Ci17Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZl
cnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7Ci0gICAgcG9zaXRpb25zWzBdID0g
Q0dQb2ludFplcm87Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZh
bmNlc1tpIC0gMV0sIG1hdHJpeCk7Ci0gICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25z
W2kgLSAxXS54ICsgYWR2YW5jZS53aWR0aDsKLSAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3Np
dGlvbnNbaSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgIHJldHVybiBjb250ZXh0
LnRleHREcmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3Mp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
I2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFu
Y2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0Nv
bnRleHQmIGNvcmVDb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSog
YWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQordm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dp
dGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3Jh
cGhpY3NDb250ZXh0JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBD
R1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJF
U1MpCiAgICAgaWYgKCFjb3VudCkKQEAgLTE1MCwyMjcgKzEwMCw0IEBAIHN0YXRpYyB2b2lkIHNo
b3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVm
IGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywg
dW5zaWduZWQgY291bnQpCi17Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNvbnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgp
KTsKLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxh
dGZvcm1EYXRhKCk7Ci0gICAgVmVjdG9yPENHUG9pbnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsK
LSAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpW
ZXJ0aWNhbCkgewotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSByb3RhdGVMZWZ0VHJhbnNmb3Jt
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDAsIC0xLCAxLCAwLCAwLCAwKTsKLSAgICAgICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gdGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4
dCk7Ci0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHJ1bk1hdHJpeCA9IENHQWZmaW5lVHJhbnNm
b3JtQ29uY2F0KHRleHRNYXRyaXgsIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwotICAgICAgICBTY29w
ZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KHJ1bk1hdHJpeCwgY29udGV4dCk7Ci0KLSAgICAgICAg
VmVjdG9yPENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlvbnMoY291bnQpOwotICAgICAgICBDVEZvbnRH
ZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGds
eXBocywgdHJhbnNsYXRpb25zLmRhdGEoKSwgY291bnQpOwotCi0gICAgICAgIENHQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRl
eHRNYXRyaXgoY29udGV4dCkpOwotCi0gICAgICAgIENHUG9pbnQgcG9zaXRpb24gPSBGbG9hdFBv
aW50KHBvaW50LngoKSwgcG9pbnQueSgpICsgZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50
KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAg
ICAgICAgQ0dTaXplIHRyYW5zbGF0aW9uID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0odHJh
bnNsYXRpb25zW2ldLCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKLSAgICAgICAgICAgIHBvc2l0aW9u
c1tpXSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZShwb3NpdGlvbi54
IC0gdHJhbnNsYXRpb24ud2lkdGgsIHBvc2l0aW9uLnkgKyB0cmFuc2xhdGlvbi5oZWlnaHQpLCB0
cmFuc2Zvcm0pOwotICAgICAgICAgICAgcG9zaXRpb24ueCArPSBhZHZhbmNlc1tpXS53aWR0aDsK
LSAgICAgICAgICAgIHBvc2l0aW9uLnkgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0OwotICAgICAgICB9
Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMs
IHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRl
eHQsIGFkdmFuY2VzLCBjb3VudCk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotewotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhc0ZvbnRz
KGNnQ29udGV4dCwgdHJ1ZSk7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNm
b3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7Ci0gICAgYm9vbCBpc1RyYW5zbGF0aW9u
T3JJbnRlZ3JhbFNjYWxlID0gV1RGOjppc0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uYSkgJiYg
V1RGOjppc0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uZCkgJiYgY29udGV4dFRyYW5zZm9ybS5i
ID09IDAuZiAmJiBjb250ZXh0VHJhbnNmb3JtLmMgPT0gMC5mOwotICAgIGJvb2wgaXNSb3RhdGVk
ID0gKChjb250ZXh0VHJhbnNmb3JtLmIgfHwgY29udGV4dFRyYW5zZm9ybS5jKSAmJiAoY29udGV4
dFRyYW5zZm9ybS5hIHx8IGNvbnRleHRUcmFuc2Zvcm0uZCkpOwotICAgIGJvb2wgZG9TdWJwaXhl
bFF1YW50aXphdGlvbiA9IGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgfHwgKCFpc1JvdGF0
ZWQgJiYgY29udGV4dC5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSk7Ci0KLSAgICBDR0Nv
bnRleHRTZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCB0cnVlKTsKLSAg
ICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0LCBkb1N1
YnBpeGVsUXVhbnRpemF0aW9uKTsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKLXsKLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBs
YXRmb3JtRGF0YSgpOwotICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCk7Ci0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7Ci0gICAgYm9vbCBzaG91
bGRTbW9vdGhGb250cyA9IHRydWU7Ci0gICAgCi0gICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlh
c2luZygpKQotICAgICAgICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21v
b3RoaW5nOwotCi0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7Ci0gICAgY2FzZSBGb250U21v
b3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6Ci0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9v
dGhpbmc6Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoK
LSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6Ci0gICAgICAgIHNob3VsZEFudGlhbGlh
cyA9IGZhbHNlOwotICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygpKQotICAgICAgICBz
aG91bGRTbW9vdGhGb250cyA9IGZhbHNlOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0NvbnRleHRHZXRTaG91
bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpOwotICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBv
cmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCi0gICAgICAgIENHQ29udGV4dFNldFNob3Vs
ZFNtb290aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwotI2VuZGlmCi0KLSAg
ICBib29sIG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFs
aWFzKGNnQ29udGV4dCk7Ci0gICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3Vs
ZEFudGlhbGlhcykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4
dCwgc2hvdWxkQW50aWFsaWFzKTsKLQotICAgIGJvb2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBz
aG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb250ZXh0KTsKLSAgICBGbG9hdFBvaW50IHBvaW50
ID0gYW5jaG9yUG9pbnQ7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmlu
ZVRyYW5zZm9ybUlkZW50aXR5OwotICAgIGlmICghcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBG
b250KCkpCi0gICAgICAgIG1hdHJpeCA9IENURm9udEdldE1hdHJpeChwbGF0Zm9ybURhdGEuZm9u
dCgpKTsKLSAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKLSAgICBtYXRyaXguZCA9IC1tYXRyaXgu
ZDsKLSAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkgewotICAgICAgICBz
dGF0aWMgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICog
cGlGbG9hdCAvIDE4MCk7Ci0gICAgICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgICAgICBpZiAoZm9udC5pc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0gICAgICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZp
bmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgb2JsaXF1
ZVNrZXcsIDAsIDEsIDAsIDApKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
YXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3Jt
TWFrZSgxLCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5l
VHJhbnNmb3JtTWFrZSgxLCAwLCAtb2JsaXF1ZVNrZXcsIDEsIDAsIDApKTsKLSAgICB9Ci0gICAg
U2NvcGVkVGV4dE1hdHJpeCByZXN0b3JlcihtYXRyaXgsIGNnQ29udGV4dCk7Ci0KLSAgICBzZXRD
R0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOwotICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNn
Q29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAg
Y29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7
Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0Q1RNKCk7Ci0g
ICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgp
OwotICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYmICFjb250ZXh0Q1RNLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpIHsKLSAgICAgICAgRmxvYXRTaXplIGhvcml6b250YWxV
bml0U2l6ZUluRGV2aWNlUGl4ZWxzID0gY29udGV4dENUTS5tYXBTaXplKEZsb2F0U2l6ZSgxLCAw
KSk7Ci0gICAgICAgIGZsb2F0IGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMgPSBz
cXJ0Zihob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0aCgpICogaG9yaXpvbnRh
bFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSArIGhvcml6b250YWxVbml0U2l6ZUluRGV2
aWNlUGl4ZWxzLmhlaWdodCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVp
Z2h0KCkpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscykg
ewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzY2FsZWQgZG93biBjb250ZXh0IHdv
bid0IGJsb3cgdXAgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnbHlwaHMuIAotICAgICAgICAgICAgc3lu
dGhldGljQm9sZE9mZnNldCA9IHN0ZDo6bWluKHN5bnRoZXRpY0JvbGRPZmZzZXQsIHN5bnRoZXRp
Y0JvbGRPZmZzZXQgLyBob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERy
YXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFs
aWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkg
JiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lk
ZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50
IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93
cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICAgICAgY29udGV4
dC5jbGVhclNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxD
b2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwotICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBz
aGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwotICAgICAgICAv
LyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBw
bGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAg
ICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQo
KSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAg
ICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1Rl
eHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVm
ZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwotICAgICAgICBpZiAoc3ludGhldGljQm9s
ZE9mZnNldCkKLSAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChz
aGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dD
b250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZy
b20pLCBudW1HbHlwaHMpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3Ip
OwotICAgIH0KLQotICAgIGlmICh1c2VMZXR0ZXJwcmVzc0VmZmVjdCkKLSAgICAgICAgc2hvd0xl
dHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNvbnRleHQsIGdseXBo
QnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBo
cyk7Ci0gICAgZWxzZQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250
LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoZnJvbSksIG51bUdseXBocyk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAg
ICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmds
eXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0KLSAg
ICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRT
bW9vdGhpbmcpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4
dCwgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKTsKLSNlbmRpZgotCi0gICAgaWYgKHNo
b3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKLSAgICAgICAgQ0dDb250
ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMp
OwotfQotCi1ib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0
Ci17Ci0gICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udCgpOwotICAgIHJldHVy
biBpc1N5c3RlbUZvbnQoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpOwotfQotCi0v
LyBGSVhNRTogVXNlIHRoaXMgb24gYWxsIHBvcnRzLgotY29uc3QgRm9udCogRm9udENhc2NhZGU6
OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkgY29uc3QKLXsKLSAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0g
ICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOwotICAgIFUxNl9ORVhUKGNoYXJhY3Rl
cnMsIGJhc2VDaGFyYWN0ZXJMZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0KLSAgICBH
bHlwaERhdGEgYmFzZUNoYXJhY3RlckdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJhY3Rlcihi
YXNlQ2hhcmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCk7Ci0KLSAgICBpZiAoIWJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KGxlbmd0aCA9PSBiYXNlQ2hhcmFjdGVyTGVuZ3RoKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5mb250OwotCi0gICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0g
ZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5p
c051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdl
c0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICghZm9u
dCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
ICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZm
ZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotI2VuZGlmCi0gICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlv
bigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgICAgIGlmIChpc0NK
S0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEds
eXBocygpKQotICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+YnJva2VuSWRlb2dyYXBoRm9u
dCgpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhP
cmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgRm9udCYgdmVydGljYWxSaWdodEZvbnQgPSBmb250LT52ZXJ0aWNhbFJp
Z2h0T3JpZW50YXRpb25Gb250KCk7Ci0gICAgICAgICAgICAgICAgR2x5cGggdmVydGljYWxSaWdo
dEdseXBoID0gdmVydGljYWxSaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rl
cik7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFj
dGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICBmb250ID0gJnZlcnRpY2Fs
UmlnaHRGb250OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCBG
b250JiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKLSAgICAg
ICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udC5nbHlwaEZvckNoYXJh
Y3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9
IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgIGZvbnQg
PSAmdXByaWdodEZvbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
Zm9udCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQpCi0gICAgICAgICAgICB0cmllZEJh
c2VDaGFyYWN0ZXJGb250ID0gdHJ1ZTsKLQotICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgICAg
IHJldHVybiBmb250OwotICAgIH0KLQotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAm
JiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5n
dGgpKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwotCi0gICAg
cmV0dXJuIEZvbnQ6OnN5c3RlbUZhbGxiYWNrKCk7Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJhMmEzOWNhMWIxOTA5ZTk5ZDBiMGIzZWFmM2IwYWU2Mjg3MWE3NzgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3Bw
CkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJGb250LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250OjpwbGF0
Zm9ybURlc3Ryb3koKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OWJlMWQ0ZjM5NTIzMjUzMzA1NjQ1MGY3YmM4MmE0
OTMyMTNhMzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCisrKyAv
ZGV2L251bGwKQEAgLTEsNzczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJGb250LmgiCi0KLSNpbXBvcnQgIkNvbG9yLmgiCi0jaW1wb3J0ICJG
bG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvbnRDYWNoZS5oIgotI2ltcG9ydCAiRm9udENhc2NhZGUu
aCIKLSNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgotI2ltcG9ydCAiTG9jYWxlQ29jb2EuaCIK
LSNpbXBvcnQgIk9wZW5UeXBlQ0cuaCIKLSNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9y
dCA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4
dFNQSS5oPgotI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jZW5k
aWYKLQotCi0jaWYgVVNFKEFQUEtJVCkKLUBpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNy
ZXRBUEkpCi0tIChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOwotQGVuZAotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBib29sIGNhc2VJbnNlbnNpdGl2ZUNvbXBh
cmUoQ0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYikKLXsKLSAgICByZXR1cm4gYSAmJiBDRlN0
cmluZ0NvbXBhcmUoYSwgYiwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG87Ci19Ci0KLXN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRS
ZWYgZm9udCkKLXsKLSAgICByZXR1cm4gZm9udEhhc0VpdGhlclRhYmxlKGZvbnQsIGtDVEZvbnRU
YWJsZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLWJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBm
b250RmFtaWx5TmFtZSkKLXsKLSAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBUaW1lcyBOZXcgUm9tYW4gYW5kIEFyaWFsIGFyZSBub3QgcGVy
Zm9ybWFudCBlbm91Z2ggdG8gdXNlLiA8cmRhcjovL3Byb2JsZW0vMjEzMzMzMjY+Ci0gICAgLy8g
RklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNl
IHRoZSBhYm92ZSBidWcgaXMgZml4ZWQuCi0gICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZT
VFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVx
dWFsVG8pCi0gICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRG
YW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBm
bG9hdCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKLQotc3RhdGljIGJvb2wgc2hvdWxk
VXNlQWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKTsKLQot
ICAgIGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgoZmFtaWx5TmFtZS5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJUaW1lcyIpKQotICAgICAgICB8fCBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIZWx2ZXRpY2EiKSkK
LSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNU
UigiLkhlbHZldGljYSBOZXVlVUkiKSk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBib29sIG5lZWRz
QXNjZW50QWRqdXN0bWVudChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQotewotICAgIHJldHVybiBm
YW1pbHlOYW1lICYmIChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJU
aW1lcyIpKQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENG
U1RSKCJIZWx2ZXRpY2EiKSkKLSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1p
bHlOYW1lLCBDRlNUUigiQ291cmllciIpKSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBp
c0FoZW1Gb250KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJuIGZhbWlseU5h
bWUgJiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQWhlbSIpKTsK
LX0KLQotYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVU
YWcpCi17Ci0gICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVU
YWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoIXRh
YmxlVGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENGSW5kZXggbnVtVGFibGVzID0g
Q0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGluZGV4
ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byB0YWcgPSBz
dGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKLSAgICAgICAg
aWYgKHRhZyA9PSB0YWJsZVRhZykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiBj
dEZvbnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKQotewotICAgIGF1
dG8gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwg
a0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKCF0YWJsZVRhZ3MpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3Vu
dCh0YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwg
bnVtVGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAgIGF1dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RG
b250VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5R2V0VmFsdWVB
dEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7Ci0gICAgICAgIGlmICh0YWcgPT0gdGFi
bGVUYWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCi17
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBt
X3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXpl
KCkgLyAyNC4wZikgOiAwLmY7Ci0jZWxzZQotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1f
cGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0jZW5kaWYKLQotICAg
IHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBDVEZvbnRHZXRVbml0c1BlckVtKG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSk7Ci0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwot
ICAgIENHRmxvYXQgY2FwSGVpZ2h0ID0gcG9pbnRTaXplID8gQ1RGb250R2V0Q2FwSGVpZ2h0KG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOwotICAgIENHRmxvYXQgbGluZUdhcCA9IHBvaW50U2l6
ZSA/IENURm9udEdldExlYWRpbmcobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dG
bG9hdCBhc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEu
Zm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBkZXNjZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0
RGVzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLQotICAgIC8vIFRoZSBPcGVuIEZv
bnQgRm9ybWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBVU0VfVFlQT19NRVRSSUNTIGZsYWcgYXMgZm9s
bG93czoKLSAgICAvLyAiSWYgc2V0LCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2Ug
T1MvMi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlwb0Rlc2NlbmRlcisgT1MvMi5zVHlwb0xpbmVH
YXAgYXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5lIHNwYWNpbmcgZm9yIHRoaXMgZm9udC4iCi0g
ICAgLy8gT24gT1MgWCwgd2Ugb25seSBhcHBseSB0aGlzIHJ1bGUgaW4gdGhlIGltcG9ydGFudCBj
YXNlIG9mIGZvbnRzIHdpdGggYSBNQVRIIHRhYmxlLgotICAgIGlmIChmb250SGFzVGFibGUobV9w
bGF0Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRUYWJsZU1BVEgpKSB7Ci0gICAgICAgIHNob3J0
IHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcDsKLSAgICAgICAgaWYgKE9wZW5U
eXBlOjp0cnlHZXRUeXBvTWV0cmljcyhtX3BsYXRmb3JtRGF0YS5mb250KCksIHR5cG9Bc2NlbnQs
IHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcCkpIHsKLSAgICAgICAgICAgIGFzY2VudCA9IHNjYWxl
RW1Ub1VuaXRzKHR5cG9Bc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgICAgICAg
ICAgZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyh0eXBvRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemU7Ci0gICAgICAgICAgICBsaW5lR2FwID0gc2NhbGVFbVRvVW5pdHModHlwb0xpbmVH
YXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0
byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShtX3BsYXRmb3JtRGF0
YS5mb250KCkpKTsKLQotICAgIC8vIERpc2FibGUgYW50aWFsaWFzaW5nIHdoZW4gcmVuZGVyaW5n
IHdpdGggQWhlbSBiZWNhdXNlIG1hbnkgdGVzdHMgcmVxdWlyZSB0aGlzLgotICAgIGlmIChpc0Fo
ZW1Gb250KGZhbWlseU5hbWUuZ2V0KCkpKQotICAgICAgICBtX2FsbG93c0FudGlhbGlhc2luZyA9
IGZhbHNlOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRp
bWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCi0gICAgLy8g
dmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRoYXQgYXJl
IHRoZSBkZSBmYWN0bwotICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50
IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcwotICAgIC8vIGluY29ycmVjdGx5IGFkZGVkIHRvIGxp
bmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAotICAgIC8vIGFu
ZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpMb2Nh
bCAmJiBuZWVkc0FzY2VudEFkanVzdG1lbnQoZmFtaWx5TmFtZS5nZXQoKSkpCi0gICAgICAgIGFz
Y2VudCArPSBzdGQ6OnJvdW5kKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVmKTsKLSNlbmRpZgot
Ci0gICAgLy8gQ29tcHV0ZSBsaW5lIHNwYWNpbmcgYmVmb3JlIHRoZSBsaW5lIG1ldHJpY3MgaGFj
a3MgYXJlIGFwcGxpZWQuCi0gICAgZmxvYXQgbGluZVNwYWNpbmcgPSBscm91bmRmKGFzY2VudCkg
KyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKTsKLQotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29tIGZvciBt
YXJrZWQgdGV4dCB1bmRlcmxpbmVzLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2MTgzPgot
ICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgZmFtaWx5TmFtZSAmJiBDRlN0
cmluZ0hhc1ByZWZpeChmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiSGlyYWdpbm8iKSkpIHsKLSAg
ICAgICAgbGluZUdhcCAtPSAzIC0gZGVzY2VudDsKLSAgICAgICAgZGVzY2VudCA9IDM7Ci0gICAg
fQotI2VuZGlmCi0gICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygp
KQotICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1f
cGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
Q0dGbG9hdCBhZGp1c3RtZW50ID0gc2hvdWxkVXNlQWRqdXN0bWVudChtX3BsYXRmb3JtRGF0YS5m
b250KCkpID8gY2VpbCgoYXNjZW50ICsgZGVzY2VudCkgKiBrTGluZUhlaWdodEFkanVzdG1lbnQp
IDogMDsKLQotICAgIGxpbmVHYXAgPSBjZWlsZihsaW5lR2FwKTsKLSAgICBsaW5lU3BhY2luZyA9
IGNlaWwoYXNjZW50KSArIGFkanVzdG1lbnQgKyBjZWlsKGRlc2NlbnQpICsgbGluZUdhcDsKLSAg
ICBhc2NlbnQgPSBjZWlsZihhc2NlbnQgKyBhZGp1c3RtZW50KTsKLSAgICBkZXNjZW50ID0gY2Vp
bGYoZGVzY2VudCk7Ci0KLSAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9IGZvbnRGYW1p
bHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7Ci0jZW5kaWYKLQot
ICAgIENHRmxvYXQgeEhlaWdodCA9IDA7Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnNpemUoKSkg
ewotICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50
YXRpb246Okhvcml6b250YWwpIHsKLSAgICAgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBj
aGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cg
dGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKLSAgICAgICAgICAgIC8vIHJlcG9ydGVkIHgt
aGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBh
Ym92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgICAgICBHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNo
YXJhY3RlcigneCcpOwotICAgICAgICAgICAgaWYgKHhHbHlwaCkKLSAgICAgICAgICAgICAgICB4
SGVpZ2h0ID0gLUNHUmVjdEdldE1pblkocGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCh4R2x5cGgpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4SGVpZ2h0ID0gQ1RGb250R2V0WEhl
aWdodChtX3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZm9udE1ldHJpY3MoKS54
SGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRz
UGVyRW0pOwotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0gICAgbV9mb250
TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVp
Z2h0KGNhcEhlaWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwot
ICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNz
LnNldExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVy
bGluZVBvc2l0aW9uKC1DVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihtX3BsYXRmb3JtRGF0YS5m
b250KCkpKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRH
ZXRVbmRlcmxpbmVUaGlja25lc3MobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Ci19Ci0KLXZvaWQg
Rm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7
Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwOwotCi0gICAgYXV0byBvczJUYWJsZSA9IGFkb3B0Q0Yo
Q1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udFRhYmxlT1MyLCBr
Q1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRh
R2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7Ci0gICAgICAgIGNvbnN0IFVJbnQ4KiBv
czIgPSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKLSAgICAgICAgU0ludDE2IG9z
MkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKLSAgICAgICAgbV9hdmdDaGFy
V2lkdGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5p
dHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGhl
YWRUYWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwg
a0NURm9udFRhYmxlSGVhZCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYg
KGhlYWRUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0Mikgewot
ICAgICAgICBjb25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdl
dCgpKTsKLSAgICAgICAgdXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsK
LSAgICAgICAgdXNob3J0IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKLSAgICAg
ICAgU0ludDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKLSAgICAgICAgU0lu
dDE2IHhNYXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKLSAgICAgICAgZmxvYXQgZGlm
ZiA9IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7Ci0gICAgICAgIG1fbWF4Q2hhcldp
ZHRoID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICog
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jv
c3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlm
IHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KLSAgICBpbml0Q2hhcldpZHRocygpOwotfQotCi12b2lk
IEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLWJvb2wgRm9udDo6dmFyaWFudENhcHNT
dXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRD
YXBzLCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKLXsKLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlM
WSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQotICAgIEdseXBoIGdseXBoID0g
Z2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAoIWdseXBoKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgewotICAgIGNhc2Ug
Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlw
aHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUo
KSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRW
YXJpYW50Q2Fwczo6UGV0aXRlOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1
cHBvcnRlZEJ5UGV0aXRlQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+
IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJp
YW50Q2Fwczo6QWxsU21hbGw6IHsKLSAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3Vw
cG9ydGVkQnlBbGxTbWFsbENhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkg
PiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6OkFsbFBldGl0ZTogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNT
dXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXpl
KCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1
ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOwotCi0gICAgc3dpdGNoIChmb250VmFyaWFudENhcHMp
IHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6Ci0gICAgY2FzZSBGb250VmFyaWFu
dENhcHM6OlBldGl0ZToKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6Ci0gICAg
Y2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJp
YW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotI2VuZGlmCi19Ci0KLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lP
UykgfHwgUExBVEZPUk0oTUFDKQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNt
YWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXksIGludCByYXdWYWx1ZSkK
LXsKLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsK
LSAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBrQ1RG
b250T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtl
eSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMp
LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVl
Q2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFs
bENhcHNUcnVlVHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJhd1ZhbHVlKQotewotICAg
IFJldGFpblB0cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5KSk7Ci0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7Ci0gICAgQ0ZUeXBlUmVm
IGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwga0NURm9udEZlYXR1
cmVTZWxlY3RvcklkZW50aWZpZXJLZXkgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtl
eS5nZXQoKSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RI
KGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVuaW9uQml0VmVjdG9ycyhCaXRW
ZWN0b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQotewotICAgIENGSW5kZXggbGVu
Z3RoID0gQ0ZCaXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOwotICAgIHJlc3VsdC5lbnN1cmVTaXpl
KGxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBtaW4gPSAwOwotICAgIHdoaWxlIChtaW4gPCBsZW5ndGgp
IHsKLSAgICAgICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3RvckdldEZpcnN0SW5kZXhP
ZkJpdChzb3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7Ci0gICAgICAg
IGlmIChuZXh0SW5kZXggPT0ga0NGTm90Rm91bmQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgcmVzdWx0LnNldChuZXh0SW5kZXgsIHRydWUpOwotICAgICAgICBtaW4gPSBuZXh0SW5kZXgg
KyAxOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlN0
cmluZ1JlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1bHQpCi17Ci0g
ICAgUmV0YWluUHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENURm9udENvcHlH
bHlwaENvdmVyYWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVuVHlwZURpY3Rpb25hcnko
ZmVhdHVyZSwgMSkuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2Uu
Z2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGludCB0eXBl
LCBpbnQgc2VsZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAg
ICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUds
eXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeSh0
eXBlLCBzZWxlY3RvcikuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3Vy
Y2UuZ2V0KCkpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5
U21hbGxDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENh
cHMpIHsKLSAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJpdFZlY3Rvcigp
OwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3Jt
RGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAg
ICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNt
YWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVk
QnlTbWFsbENhcHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRl
ZEJ5U21hbGxDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhz
U3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKSBjb25zdAotewotICAgIGlmICghbV9nbHlwaHNTdXBw
b3J0ZWRCeUFsbFNtYWxsQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21h
bGxDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZT
VFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxs
U21hbGxDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RS
KCJjMnNjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNt
YWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJD
YXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250
KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7Ci0gICAgICAgIGlu
amVjdFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VTbWFsbENhcHNT
ZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21h
bGxDYXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFs
bFNtYWxsQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1
cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRl
ZEJ5UGV0aXRlQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcyA9
IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2Fw
IiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMu
dmFsdWUoKSk7Ci0gICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUs
IGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9n
bHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBt
X2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0
b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcykgewotICAgICAgICBtX2dseXBo
c1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RP
cGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9n
bHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdE9w
ZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2ds
eXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1
ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3Rv
ciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fw
cy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlw
ZSwga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBt
X2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCk7Ci19Ci0jZW5kaWYK
LQotc3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChDVEZvbnRSZWYgZm9u
dCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBDVEZvbnRTeW1ib2xp
Y1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljKQotewotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBp
ZiAoc3ludGhldGljQm9sZCkKLSAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0
OwotICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCi0gICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9u
dEl0YWxpY1RyYWl0OwotCi0gICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0
cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOwotCi0gICAgYm9vbCB1c2VkU3ludGhl
dGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250
VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7Ci0gICAgYm9vbCB1c2VkU3ludGhldGljT2JsaXF1
ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFp
dHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9u
dERhdGEoZm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0aWNPYmxpcXVl
LCBvcmllbnRhdGlvbik7Ci0KLSAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRh
KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFy
eVJlZiBmZWF0dXJlKQotewotICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0
dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tl
eShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0g
ICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJl
VHlwZUlkZW50aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtD
VEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBP
cHRpb25hbDxDRlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0
dXJlKQotewotICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7Ci0gICAgQ0ZT
dHJpbmdSZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZh
bHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKLSAgICBpbnQgcmF3VmFs
dWU7Ci0gICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7
Ci0gICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NGTnVtYmVySW50
VHlwZSwgJnJhd1ZhbHVlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwot
ICAgIHJldHVybiByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVmPih0YWcpIDogV1RGOjpu
dWxsb3B0OwotfQotCi1zdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQsIGludD4gdHJ1ZVR5cGVG
ZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIEFTU0VSVChpc1RydWVUeXBl
RmVhdHVyZShmZWF0dXJlKSk7Ci0gICAgaW50IHJhd1R5cGU7Ci0gICAgQ0ZOdW1iZXJSZWYgdHlw
ZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJl
LCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgYXV0byBzdWNjZXNzID0g
Q0ZOdW1iZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlwZSk7Ci0gICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICBpbnQgcmF3U2VsZWN0b3I7Ci0g
ICAgQ0ZOdW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJL
ZXkpKTsKLSAgICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwga0NGTnVtYmVy
SW50VHlwZSwgJnJhd1NlbGVjdG9yKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCByYXdTZWxlY3Rvcik7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVG
ZWF0dXJlKGludCBrZXksIENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVzKGZvbnQpKTsKLSAgICBD
RkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7Ci0g
ICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKLSAgICAgICAg
Q0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVm
PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7Ci0gICAgICAgIENG
TnVtYmVyUmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkp
KTsKLSAgICAgICAgaWYgKCFmZWF0dXJlS2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGludCByYXdGZWF0dXJlS2V5OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKGZlYXR1cmVL
ZXksIGtDRk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKLSAgICAgICAgaWYgKHJhd0Zl
YXR1cmVLZXkgIT0ga2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ0ZBcnJh
eVJlZiBmZWF0dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVjdG9yc0tleSkp
OwotICAgICAgICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJl
U2VsZWN0b3JzKTsKLSAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBqIDwgc2VsZWN0b3JzQ291
bnQ7ICsraikgewotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVTZWxlY3RvciA9
IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0
dXJlU2VsZWN0b3JzLCBqKSk7Ci0gICAgICAgICAgICBDRk51bWJlclJlZiBpc0RlZmF1bHQgPSBz
dGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVj
dG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOwotICAgICAgICAgICAgaWYg
KCFpc0RlZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnQg
cmF3SXNEZWZhdWx0OwotICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0RlZmF1bHQsIGtD
Rk51bWJlckludFR5cGUsICZyYXdJc0RlZmF1bHQpOwotICAgICAgICAgICAgaWYgKCFyYXdJc0Rl
ZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rv
ciwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSwgQ1RG
b250UmVmIGZvbnQpCi17Ci0gICAgYm9vbCBpc09wZW5UeXBlID0gaXNPcGVuVHlwZUZlYXR1cmUo
ZmVhdHVyZSk7Ci0gICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVy
ZSk7Ci0gICAgaWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQotICAgICAgICByZXR1cm4g
ZmVhdHVyZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0LgotICAgIFJl
dGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAg
IGlmIChpc09wZW5UeXBlKSB7Ci0gICAgICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9wZW5UeXBlRmVh
dHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1YWwoZmVhdHVy
ZVRhZy52YWx1ZSgpLCBDRlNUUigic21jcCIpKQotICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0
dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnNjIikpCi0gICAgICAgICAgICB8fCBDRkVxdWFsKGZl
YXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKLSAgICAgICAgICAgIHx8IENGRXF1YWwo
ZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKLSAgICAgICAgICAgIGludCBy
YXdaZXJvID0gMDsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gemVybyA9IGFk
b3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlw
ZSwgJnJhd1plcm8pKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5n
ZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRhZy52YWx1ZSgpKTsKLSAg
ICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5U
eXBlRmVhdHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVh
dHVyZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVh
dHVyZVRhZykpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1
cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChpc1RydWVUeXBlKSB7Ci0gICAgICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJlUGFpciA9IHRy
dWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKHRydWVUeXBlRmVhdHVyZVBhaXIu
Zmlyc3QgPT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09
IGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29u
ZCA9PSBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgewotICAgICAgICAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVy
S2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVu
dGlmaWVyS2V5KSk7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9y
ID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VUeXBlLCBmb250
KSkKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtD
VEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0b3IpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3Vs
dC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGljdGlvbmFy
eUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrVXBwZXJD
YXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVNtYWxs
Q2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VQ
ZXRpdGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShy
ZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFy
eUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAg
ICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0
b3JGb3JUcnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQpKQotICAgICAgICAgICAg
ICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxl
Y3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250
RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVy
ZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9u
dEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwg
a0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmll
cktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRo
ZXNpemFibGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJh
eVJlZj4gZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udENv
cHlBdHRyaWJ1dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSkpKTsKLSAg
ICBpZiAoIWZlYXR1cmVzKQotICAgICAgICByZXR1cm4gZm9udDsKLSAgICBDRkluZGV4IGZlYXR1
cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7Ci0gICAgUmV0YWluUHRy
PENGTXV0YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11
dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAma0NGVHlwZUFycmF5Q2Fs
bEJhY2tzKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kp
IHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKLSAg
ICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgpLCByZW1vdmVkRmVhdHVy
ZShmZWF0dXJlLCBmb250KS5nZXQoKSk7Ci0gICAgfQotICAgIENGVHlwZVJlZiBrZXlzW10gPSB7
IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVz
W10gPSB7IG5ld0ZlYXR1cmVzLmdldCgpIH07Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwot
ICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkp
OwotICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250
LCBDVEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlwdG9yLmdldCgpKSk7Ci19
Ci0KLVJlZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0
dXJlcygpIGNvbnN0Ci17Ci0gICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsK
LSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBj
dEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1fcGxhdGZv
cm1EYXRhLmZvbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0Rm9udC5n
ZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9w
bGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxp
cXVlKCkpOwotfQotCi1SZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAg
IGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKLSAgICBD
VEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
bV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Ci0gICAg
UmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVkRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0
aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7Ci0K
LSAgICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwg
bV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEu
c3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOwotfQot
Ci12b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVu
c2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4
LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3Ry
aW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9u
KSBjb25zdAotewotICAgIFVOVVNFRF9QQVJBTShyZXF1aXJlc1NoYXBpbmcpOwotCi0gICAgLy8g
RklYTUU6IEltcGxlbWVudCBHbHlwaEJ1ZmZlciBpbml0aWFsIGFkdmFuY2UuCi0jaWYgVVNFKENU
Rk9OVFNIQVBFR0xZUEhTKQotICAgIGF1dG8gaGFuZGxlciA9IF4oQ0ZSYW5nZSByYW5nZSwgQ0dH
bHlwaCoqIG5ld0dseXBoc1BvaW50ZXIsIENHU2l6ZSoqIG5ld0FkdmFuY2VzUG9pbnRlciwgQ0dQ
b2ludCoqIG5ld09mZnNldHNQb2ludGVyLCBDRkluZGV4KiogbmV3SW5kaWNlc1BvaW50ZXIpIHsK
LSAgICAgICAgcmFuZ2UubG9jYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChyYW5nZS5sb2NhdGlv
biwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oMCkpLCBzdGF0aWNfY2FzdDxDRkluZGV4PihnbHlwaEJ1
ZmZlci5zaXplKCkpKTsKLSAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA8IDApIHsKLSAgICAgICAg
ICAgIHJhbmdlLmxlbmd0aCA9IHN0ZDo6bWluKHJhbmdlLmxvY2F0aW9uLCAtcmFuZ2UubGVuZ3Ro
KTsKLSAgICAgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gcmFuZ2UubG9jYXRpb24gLSByYW5nZS5s
ZW5ndGg7Ci0gICAgICAgICAgICBnbHlwaEJ1ZmZlci5yZW1vdmUoYmVnaW5uaW5nR2x5cGhJbmRl
eCArIHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGdseXBoQnVmZmVyLm1ha2VIb2xlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5s
b2NhdGlvbiwgcmFuZ2UubGVuZ3RoLCB0aGlzKTsKLQotICAgICAgICAqbmV3R2x5cGhzUG9pbnRl
ciA9IGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICAgICAgKm5l
d0FkdmFuY2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5k
ZXgpOwotICAgICAgICAqbmV3T2Zmc2V0c1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5vcmlnaW5zKGJl
Z2lubmluZ0dseXBoSW5kZXgpOwotICAgICAgICAqbmV3SW5kaWNlc1BvaW50ZXIgPSBnbHlwaEJ1
ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0gICAgfTsKLQotICAg
IGF1dG8gc3Vic3RyaW5nID0gdGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5nU3RyaW5nSW5kZXgpOwot
ICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Vic3RyaW5nLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOwotICAgIGF1dG8gbG9jYWxlU3RyaW5nID0gTG9jYWxlQ29jb2E6OmNhbm9uaWNh
bExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmcobG9jYWxlKS5zdHJpbmcoKS5jcmVhdGVDRlN0
cmluZygpOwotICAgIENURm9udFNoYXBlT3B0aW9ucyBvcHRpb25zID0ga0NURm9udFNoYXBlV2l0
aENsdXN0ZXJDb21wb3NpdGlvbgotICAgICAgICB8IChlbmFibGVLZXJuaW5nID8ga0NURm9udFNo
YXBlV2l0aEtlcm5pbmcgOiAwKQotICAgICAgICB8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJl
Y3Rpb246OlJUTCA/IGtDVEZvbnRTaGFwZVJpZ2h0VG9MZWZ0IDogMCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRl
eDsgKytpKQotICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5
cGhJbmRleClbaV0gLT0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7Ci0KLSAgICBDVEZvbnRTaGFwZUds
eXBocygKLSAgICAgICAgbV9wbGF0Zm9ybURhdGEuY3RGb250KCksCi0gICAgICAgIGdseXBoQnVm
ZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KSksCi0g
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQb2ludCo+KGdseXBoQnVmZmVyLm9yaWdpbnMoYmVn
aW5uaW5nR2x5cGhJbmRleCkpLAotICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmco
YmVnaW5uaW5nR2x5cGhJbmRleCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5p
Q2hhcio+KHVwY29udmVydGVkQ2hhcmFjdGVycy5nZXQoKSksCi0gICAgICAgIGdseXBoQnVmZmVy
LnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgsCi0gICAgICAgIG9wdGlvbnMsCi0gICAgICAg
IGxvY2FsZVN0cmluZy5nZXQoKSwKLSAgICAgICAgaGFuZGxlcik7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleDsg
KytpKQotICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJ
bmRleClbaV0gKz0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7Ci0KLSNlbHNlCi0KLSAgICBVTlVTRURf
UEFSQU0oYmVnaW5uaW5nU3RyaW5nSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShsb2NhbGUpOwot
ICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKLQotICAgIC8vIENURm9udFRyYW5zZm9ybUdseXBocygp
IG9wZXJhdGVzIGluIHZpc3VhbCBvcmRlciwgYnV0IFdpZHRoSXRlcmF0b3IgaXRlcmF0ZXMgaW4g
bG9naWNhbCBvcmRlci4KLSAgICAvLyBUZW1wb3JhcmlseSBwdXQgdXMgaW4gdmlzdWFsIG9yZGVy
IGp1c3QgZm9yIHRoZSBjYWxsLCB0aGVuIHB1dCB1cyBiYWNrIGludG8gbG9naWNhbCBvcmRlciB3
aGVuCi0gICAgLy8gdGhlIGNhbGwgaXMgZG9uZS4KLSAgICAvLyBXZSBkb24ndCBoYXZlIGEgZ2xv
YmFsIHZpZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlcjsgd2UncmUganVzdCBvcGVyYXRpbmcg
b24gYSBzaW5nbGUgY2h1bmsgb2YgaXQuCi0gICAgLy8gV2lkdGhJdGVyYXRvciBlbmNvdW50ZXJz
IHRoZSBjaHVua3Mgb3V0IGluIGxvZ2ljYWwgb3JkZXIsIHNvIHdlIGhhdmUgdG8gbWFpbnRhaW4g
dGhhdCBpbnZhcmlhbnQuCi0gICAgLy8gRXZlbnR1YWxseSwgRm9udENhc2NhZGU6OmxheW91dFNp
bXBsZVRleHQoKSB3aWxsIHJldmVyc2UgdGhlIHdob2xlIGJ1ZmZlciB0byBwdXQgdGhlIGVudGly
ZSB0aGluZwotICAgIC8vIGluIHZpc3VhbCBvcmRlciwgYnV0IHRoYXQncyBva2F5IGJlY2F1c2Ug
aXQgaGFzIGEgdmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyLgotICAgIC8vIE9uIHRoZSBv
dGhlciBoYW5kLCBDVEZvbnRTaGFwZUdseXBocygpIGFjY2VwdHMgdGhlIGJ1ZmZlciBpbiBsb2dp
Y2FsIG9yZGVyIGJ1dCByZXR1cm5zIGl0IGluIHBoeXNpY2FsCi0gICAgLy8gb3JkZXIsIHdoaWNo
IG1lYW5zIHRoZSBzZWNvbmQgcmV2ZXJzZSgpIGluIHRoaXMgZnVuY3Rpb24gc3RpbGwgbmVlZHMg
dG8gZXhlY3V0ZSB3aGVuCi0gICAgLy8gQ1RGb250U2hhcGVHbHlwaHMoKSBpcyBiZWluZyB1c2Vk
LgotICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKLSAgICAgICAg
Z2x5cGhCdWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXpl
KCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4KTsKLQotICAgIENURm9udFRyYW5zZm9ybU9wdGlvbnMg
b3B0aW9ucyA9IChlbmFibGVLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25p
bmcgOiAwKSB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmc7Ci0gICAgQ1RGb250VHJhbnNm
b3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVn
aW5uaW5nR2x5cGhJbmRleCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdp
bm5pbmdHbHlwaEluZGV4LCBvcHRpb25zKTsKLSNlbmRpZgotCi0gICAgLy8gU2VlIHRoZSBjb21t
ZW50IGFib3ZlIGluIHRoaXMgZnVuY3Rpb24gd2hlcmUgdGhlIG90aGVyIGNhbGwgdG8gcmV2ZXJz
ZSgpIGlzLgotICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKLSAg
ICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZl
ci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4KTsKLX0KLQotc3RhdGljIGludCBleHRyYWN0
TnVtYmVyKENGTnVtYmVyUmVmIG51bWJlcikKLXsKLSAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICBp
ZiAobnVtYmVyKQotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVySW50
VHlwZSwgJnJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBGb250OjpkZXRl
cm1pbmVQaXRjaCgpCi17Ci0gICAgQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZv
bnQoKTsKLSAgICBBU1NFUlQoY3RGb250KTsKLQotICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1N
b25vLgotICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNo
b3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCB0
aGUgQXBwS2l0IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotCi0g
ICAgLy8gU3BlY2lhbCBjYXNlIE1TLVBHb3RoaWMuCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFy
Oi8vcHJvYmxlbS80MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZp
eGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhp
YyBhcyBmaXhlZCBwaXRjaC4KLQotICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEK
LSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQg
bm90IHRyZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRo
YXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLQot
ICAgIGF1dG8gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsK
LSAgICBhdXRvIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9u
dCkpOwotCi0gICAgaW50IGZpeGVkUGl0Y2ggPSBleHRyYWN0TnVtYmVyKGFkb3B0Q0Yoc3RhdGlj
X2Nhc3Q8Q0ZOdW1iZXJSZWY+KENURm9udENvcHlBdHRyaWJ1dGUobV9wbGF0Zm9ybURhdGEuZm9u
dCgpLCBrQ1RGb250Rml4ZWRBZHZhbmNlQXR0cmlidXRlKSkpLmdldCgpKTsKLSAgICBtX3RyZWF0
QXNGaXhlZFBpdGNoID0gKENURm9udEdldFN5bWJvbGljVHJhaXRzKGN0Rm9udCkgJiBrQ1RGb250
TW9ub1NwYWNlVHJhaXQpIHx8IGZpeGVkUGl0Y2ggfHwgKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
ZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIikpIHx8IGNhc2VJbnNlbnNpdGl2ZUNv
bXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIikpIHx8IGNhc2VJbnNlbnNp
dGl2ZUNvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNb25vdHlwZUNvcnNpdmEiKSkpOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGZhbWlseU5hbWUgJiYgY2FzZUluc2Vu
c2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiQ291cmllciBOZXciKSkpIHsK
LSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBiZSB0cmVhdGVkIGFz
IGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNrZWQgc3BhY2Ugd2lk
dGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFyOi8vNjI2OTc4Myku
Ci0gICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAgICB9Ci0jZW5kaWYKLX0K
LQotRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Ci17Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwotICAgIGJvdW5kaW5nQm94ID0gQ1RG
b250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsID8g
a0NURm9udE9yaWVudGF0aW9uVmVydGljYWwgOiBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFs
LCAmZ2x5cGgsIDAsIDEpOwotICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFko
KSk7Ci0gICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgYm91bmRpbmdCb3gu
c2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7Ci0K
LSAgICByZXR1cm4gYm91bmRpbmdCb3g7Ci19Ci0KLWZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6
ZVplcm87Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhKCkuc2l6ZSgpKSB7Ci0gICAgICAgIGJvb2wg
aG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpIb3Jpem9udGFsOwotICAgICAgICBDVEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9
IGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrID8ga0NURm9udE9yaWVu
dGF0aW9uSG9yaXpvbnRhbCA6IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsOwotI2lmIFVTRShD
VEZPTlRHRVRBRFZBTkNFU19XT1JLQVJPVU5EKQotICAgICAgICBDR0ZvbnRSZW5kZXJpbmdTdHls
ZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5k
ZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJw
aXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7Ci0g
ICAgICAgIGlmICghQ1RGb250SXNBcHBsZUNvbG9yRW1vamkobV9wbGF0Zm9ybURhdGEuY3RGb250
KCkpICYmICFtX3BsYXRmb3JtRGF0YS5oYXNWYXJpYXRpb25zKCkpCi0gICAgICAgICAgICBDVEZv
bnRHZXRVbnN1bW1lZEFkdmFuY2VzRm9yR2x5cGhzQW5kU3R5bGUobV9wbGF0Zm9ybURhdGEuY3RG
b250KCksIG9yaWVudGF0aW9uLCBzdHlsZSwgJmdseXBoLCAmYWR2YW5jZSwgMSk7Ci0gICAgICAg
IGVsc2UKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0Zv
ckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgb3JpZW50YXRpb24sICZnbHlwaCwgJmFk
dmFuY2UsIDEpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhZHZhbmNlLndpZHRoICsg
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotfQotCi1QYXRoIEZvbnQ6OnBsYXRmb3JtUGF0aEZvckds
eXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDVEZv
bnRDcmVhdGVQYXRoRm9yR2x5cGgocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGdseXBoLCBudWxs
cHRyKSk7Ci0gICAgYXV0byBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gdGhpcy0+c3ludGhldGljQm9s
ZE9mZnNldCgpOwotICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KSB7Ci0gICAgICAgIGF1dG8g
bmV3UGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKLSAgICAgICAgQ0dQYXRo
QWRkUGF0aChuZXdQYXRoLmdldCgpLCBudWxscHRyLCByZXN1bHQuZ2V0KCkpOwotICAgICAgICBh
dXRvIHRyYW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oc3ludGhl
dGljQm9sZE9mZnNldCwgMCk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwg
JnRyYW5zbGF0aW9uLCByZXN1bHQuZ2V0KCkpOwotICAgICAgICByZXR1cm4geyBXVEZNb3ZlKG5l
d1BhdGgpIH07Ci0gICAgfQotICAgIHJldHVybiB7IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJs
ZUNvcHkocmVzdWx0LmdldCgpKSkgfTsKLX0KLQotYm9vbCBGb250OjpwbGF0Zm9ybVN1cHBvcnRz
Q29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyLCBPcHRpb25hbDxVQ2hhcjMyPiB2YXJpYXRpb24p
IGNvbnN0Ci17Ci0gICAgaWYgKHZhcmlhdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVW5pQ2hhciBjb2RlVW5pdHNbMl07Ci0gICAgQ0dHbHlwaCBnbHlwaHNbMl07Ci0gICAgQ0ZJ
bmRleCBjb3VudCA9IDA7Ci0gICAgVTE2X0FQUEVORF9VTlNBRkUoY29kZVVuaXRzLCBjb3VudCwg
Y2hhcmFjdGVyKTsKLSAgICByZXR1cm4gQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhwbGF0
Zm9ybURhdGEoKS5jdEZvbnQoKSwgY29kZVVuaXRzLCBnbHlwaHMsIGNvdW50KTsKLX0KLQotYm9v
bCBGb250Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QKLXsKLSAgICBh
dXRvIHBsYXRmb3JtRm9udCA9IHBsYXRmb3JtRGF0YSgpLmZvbnQoKTsKLSAgICBpZiAoIXBsYXRm
b3JtRm9udCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWxsb3cgbW9zdCBub24t
aWNvbiBmb250cyB0byBiYWlsIGVhcmx5IGhlcmUgYnkgdGVzdGluZyBhIHNpbmdsZSBjaGFyYWN0
ZXIgJ2EnLCB3aXRob3V0IGl0ZXJhdGluZyBvdmVyIGFsbCBiYXNpYyBsYXRpbiBjaGFyYWN0ZXJz
LgotICAgIFVuaUNoYXIgbG93ZXJjYXNlQUNoYXJhY3RlciA9ICdhJzsKLSAgICBDR0dseXBoIGxv
d2VyY2FzZUFHbHlwaDsKLSAgICBpZiAoQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhwbGF0
Zm9ybUZvbnQsICZsb3dlcmNhc2VBQ2hhcmFjdGVyLCAmbG93ZXJjYXNlQUdseXBoLCAxKSkgewot
ICAgICAgICBpZiAoIUNHUmVjdElzRW1wdHkoQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBo
cyhwbGF0Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsICZsb3dlcmNhc2VBR2x5
cGgsIG51bGxwdHIsIDEpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBhdXRvIHN1cHBvcnRlZENoYXJhY3RlcnMgPSBhZG9wdENGKENURm9udENvcHlDaGFyYWN0ZXJT
ZXQocGxhdGZvcm1Gb250KSk7Ci0gICAgaWYgKENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVySW5QbGFu
ZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAxKSB8fCBDRkNoYXJhY3RlclNldEhhc01lbWJl
ckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFRoaXMgZW5jb21wYXNzZXMgYWxsIGJhc2ljIExhdGluIG5vbi1jb250
cm9sIGNoYXJhY3RlcnMuCi0gICAgY29uc3RleHByIFVuaUNoYXIgZmlyc3RDaGFyYWN0ZXJUb1Rl
c3QgPSAnICc7Ci0gICAgY29uc3RleHByIFVuaUNoYXIgbGFzdENoYXJhY3RlclRvVGVzdCA9ICd+
JzsKLSAgICBjb25zdGV4cHIgYXV0byBudW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3QgPSBsYXN0Q2hh
cmFjdGVyVG9UZXN0IC0gZmlyc3RDaGFyYWN0ZXJUb1Rlc3QgKyAxOwotCi0gICAgVmVjdG9yPENH
R2x5cGg+IGdseXBoczsKLSAgICBnbHlwaHMuZmlsbCgwLCBudW1iZXJPZkNoYXJhY3RlcnNUb1Rl
c3QpOwotICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlclJhbmdlKHBsYXRmb3JtRm9udCwg
Z2x5cGhzLmJlZ2luKCksIENGUmFuZ2VNYWtlKGZpcnN0Q2hhcmFjdGVyVG9UZXN0LCBudW1iZXJP
ZkNoYXJhY3RlcnNUb1Rlc3QpKTsKLSAgICBnbHlwaHMucmVtb3ZlQWxsKDApOwotCi0gICAgaWYg
KGdseXBocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxD
R1JlY3Q+IGJvdW5kaW5nUmVjdHM7Ci0gICAgYm91bmRpbmdSZWN0cy5maWxsKENHUmVjdFplcm8s
IGdseXBocy5zaXplKCkpOwotICAgIENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxh
dGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCBnbHlwaHMuYmVnaW4oKSwgYm91
bmRpbmdSZWN0cy5iZWdpbigpLCBnbHlwaHMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbm90Rm91bmQg
PT0gYm91bmRpbmdSZWN0cy5maW5kTWF0Y2hpbmcoW10oYXV0byYgcmVjdCkgewotICAgICAgICBy
ZXR1cm4gIUNHUmVjdElzRW1wdHkocmVjdCk7Ci0gICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCBkYjFiNGZmNGExNmE0
MjNmZTg2M2NlNzNiNThjNjYyOGMxYjA4ZTY0Li5jOTdkNTBhNTI2YTJmZDcxOGRiOWNjNjIwMTZj
MzI1ZWQ4MWIzYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0zNSwzMyAr
MzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgaXNTeXN0ZW1Gb250KENURm9u
dFJlZiBmb250KQotewotI2lmIEhBVkUoQ1RGT05USVNTWVNURU1VSUZPTlQpCi0gICAgcmV0dXJu
IENURm9udElzU3lzdGVtVUlGb250KGZvbnQpOwotI2Vsc2UKLSAgICByZXR1cm4gQ1RGb250RGVz
Y3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZv
bnQpKS5nZXQoKSk7Ci0jZW5kaWYKLX0KLQotLy8gVGhlc2UgQ29yZVRleHQgVGV4dCBTcGFjaW5n
IGZlYXR1cmUgc2VsZWN0b3JzIGFyZSBub3QgZGVmaW5lZCBpbiBDb3JlVGV4dC4KLWVudW0gVGV4
dFNwYWNpbmdDVEZlYXR1cmVTZWxlY3RvciB7IFRleHRTcGFjaW5nUHJvcG9ydGlvbmFsLCBUZXh0
U3BhY2luZ0Z1bGxXaWR0aCwgVGV4dFNwYWNpbmdIYWxmV2lkdGgsIFRleHRTcGFjaW5nVGhpcmRX
aWR0aCwgVGV4dFNwYWNpbmdRdWFydGVyV2lkdGggfTsKLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5k
ZXJpbmdNb2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5n
TW9kZSkKLXsKLSAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOwotICAgIG1fZm9udCA9IGZvbnQ7
Ci0gICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQp
ICYga0NURm9udFRyYWl0Q29sb3JHbHlwaHM7Ci0gICAgbV9pc1N5c3RlbUZvbnQgPSBXZWJDb3Jl
Ojppc1N5c3RlbUZvbnQobV9mb250LmdldCgpKTsKLSAgICBhdXRvIHZhcmlhdGlvbnMgPSBhZG9w
dENGKHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShmb250
LCBrQ1RGb250VmFyaWF0aW9uQXR0cmlidXRlKSkpOwotICAgIG1faGFzVmFyaWF0aW9ucyA9IHZh
cmlhdGlvbnMgJiYgQ0ZEaWN0aW9uYXJ5R2V0Q291bnQodmFyaWF0aW9ucy5nZXQoKSk7Ci0KLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIG1faXNFbW9qaSA9IENURm9udElzQXBwbGVDb2xv
ckVtb2ppKG1fZm9udC5nZXQoKSk7Ci0jZW5kaWYKLX0KLQogdW5zaWduZWQgRm9udFBsYXRmb3Jt
RGF0YTo6aGFzaCgpIGNvbnN0CiB7CiAgICAgdWludHB0cl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8
dWludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93aWR0aFZhcmlhbnQpIDw8IDYKQEAg
LTcxLDcgKzQ0LDcgQEAgdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0CiAg
ICAgICAgIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEKICAgICAgICAgfCBtX3N5bnRoZXRpY09ibGlx
dWUpOwogCi0gICAgdWludHB0cl90IGZvbnRIYXNoID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KENGSGFzaChtX2ZvbnQuZ2V0KCkpKTsKKyAgICB1aW50cHRyX3QgZm9udEhhc2ggPSBzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KENGSGFzaChtX2ZvbnQuZ2V0KCkpKTsKICAgICB1aW50cHRyX3Qg
aGFzaENvZGVzW10gPSB7IGZvbnRIYXNoLCBmbGFncyB9OwogICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CiB9CkBAIC04Mywx
MTggKzU2LDQgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIENGRXF1YWwobV9mb250
LmdldCgpLCBvdGhlci5tX2ZvbnQuZ2V0KCkpOwogfQogCi1DVEZvbnRSZWYgRm9udFBsYXRmb3Jt
RGF0YTo6cmVnaXN0ZXJlZEZvbnQoKSBjb25zdAotewotICAgIENURm9udFJlZiBwbGF0Zm9ybUZv
bnQgPSBmb250KCk7Ci0gICAgQVNTRVJUKHBsYXRmb3JtRm9udCk7Ci0gICAgaWYgKHBsYXRmb3Jt
Rm9udCAmJiBhZG9wdENGKENURm9udENvcHlBdHRyaWJ1dGUocGxhdGZvcm1Gb250LCBrQ1RGb250
VVJMQXR0cmlidXRlKSkpCi0gICAgICAgIHJldHVybiBwbGF0Zm9ybUZvbnQ7Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLWlubGluZSBpbnQgbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJl
U2VsZWN0b3IoRm9udFdpZHRoVmFyaWFudCB2YXJpYW50KQotewotICAgIHN3aXRjaCh2YXJpYW50
KSB7Ci0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGg6Ci0gICAgICAgIHJl
dHVybiBUZXh0U3BhY2luZ1Byb3BvcnRpb25hbDsKLQotICAgIGNhc2UgRm9udFdpZHRoVmFyaWFu
dDo6SGFsZldpZHRoOgotICAgICAgICByZXR1cm4gVGV4dFNwYWNpbmdIYWxmV2lkdGg7Ci0KLSAg
ICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6Ci0gICAgICAgIHJldHVybiBUZXh0
U3BhY2luZ1RoaXJkV2lkdGg7Ci0KLSAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJX
aWR0aDoKLSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5nUXVhcnRlcldpZHRoOwotICAgIH0KLQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXh0U3BhY2luZ1Byb3BvcnRp
b25hbDsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNhc2NhZGVUb0xh
c3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpCi17Ci0gICAgYXV0byBsYXN0UmVzb3J0ID0g
YWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXplKENGU1RSKCJMYXN0
UmVzb3J0IiksIDApKTsKLQotICAgIENGVHlwZVJlZiBkZXNjcmlwdG9yc1tdID0geyBsYXN0UmVz
b3J0LmdldCgpIH07Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihD
RkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc2NyaXB0b3JzLCBXVEZfQVJSQVlf
TEVOR1RIKGRlc2NyaXB0b3JzKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotCi0gICAgQ0ZU
eXBlUmVmIGtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07Ci0gICAgQ0ZU
eXBlUmVmIHZhbHVlc1tdID0geyBhcnJheS5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9B
UlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLX0KLQotc3RhdGljIENURm9udERlc2NyaXB0
b3JSZWYgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpCi17
Ci0gICAgc3RhdGljIENURm9udERlc2NyaXB0b3JSZWYgZGVzY3JpcHRvciA9IENURm9udERlc2Ny
aXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0Rp
Y3Rpb25hcnkoKS5nZXQoKSk7Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19Ci0KLUNURm9udFJl
ZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAotewotICAgIGlmIChtX2N0Rm9udCkK
LSAgICAgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOwotCi0gICAgQVNTRVJUKG1fZm9udCk7Ci0g
ICAgbV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhtX2Zv
bnQuZ2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlv
bnNGb250RGVzY3JpcHRvcigpKSk7Ci0KLSAgICBpZiAobV93aWR0aFZhcmlhbnQgIT0gRm9udFdp
ZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7Ci0gICAgICAgIGludCBmZWF0dXJlVHlwZVZhbHVl
ID0ga1RleHRTcGFjaW5nVHlwZTsKLSAgICAgICAgaW50IGZlYXR1cmVTZWxlY3RvclZhbHVlID0g
bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IobV93aWR0aFZhcmlhbnQpOwot
ICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc291cmNlRGVzY3JpcHRvciA9
IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fY3RGb250LmdldCgpKSk7Ci0gICAg
ICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVR5cGUgPSBhZG9wdENGKENGTnVtYmVy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJlVHlw
ZVZhbHVlKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVNlbGVjdG9y
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJ
bnRUeXBlLCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUpKTsKLSAgICAgICAgUmV0YWluUHRyPENURm9u
dERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JD
cmVhdGVDb3B5V2l0aEZlYXR1cmUoc291cmNlRGVzY3JpcHRvci5nZXQoKSwgZmVhdHVyZVR5cGUu
Z2V0KCksIGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiBuZXdGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IobmV3
RGVzY3JpcHRvci5nZXQoKSwgbV9zaXplLCAwKSk7Ci0KLSAgICAgICAgaWYgKG5ld0ZvbnQpCi0g
ICAgICAgICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fY3RG
b250LmdldCgpOwotfQotCi1SZXRhaW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxhdGZvcm1EYXRhOjpv
YmplY3RGb3JFcXVhbGl0eUNoZWNrKENURm9udFJlZiBjdEZvbnQpCi17Ci0gICAgYXV0byBmb250
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGN0Rm9udCkpOwot
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4
NjgzIFRoaXMgaXMgYSBzaGFsbG93IHBvaW50ZXIgY29tcGFyZSBmb3Igd2ViIGZvbnRzCi0gICAg
Ly8gYmVjYXVzZSB0aGUgVVJMIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBmb250LiBUaGlz
IG1lYW5zIHdlIG1pZ2h0IGVycm9uZW91c2x5IGdldCBmYWxzZSBuZWdhdGl2ZXMuCi0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiB1cmwgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGVVJMUmVmPihDVEZv
bnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRvci5nZXQoKSwga0NURm9udFJl
ZmVyZW5jZVVSTEF0dHJpYnV0ZSkpKTsKLSAgICBBU1NFUlQoIXVybCB8fCBDRkdldFR5cGVJRCh1
cmwuZ2V0KCkpID09IENGVVJMR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiB1cmw7Ci19Ci0KLVJl
dGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hl
Y2soKSBjb25zdAotewotICAgIHJldHVybiBvYmplY3RGb3JFcXVhbGl0eUNoZWNrKGN0Rm9udCgp
KTsKLX0KLQotUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6b3BlblR5cGVU
YWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKLXsKLSAgICBpZiAoUmV0YWluUHRyPENGRGF0YVJl
Zj4gZGF0YSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKGZvbnQoKSwgdGFibGUsIGtDVEZvbnRU
YWJsZU9wdGlvbk5vT3B0aW9ucykpKQotICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoZGF0YS5nZXQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLSNpZiAhTE9H
X0RJU0FCTEVECi0KLVN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0
Ci17Ci0gICAgU3RyaW5nIGZvbnREZXNjcmlwdGlvbiB7IGFkb3B0Q0YoQ0ZDb3B5RGVzY3JpcHRp
b24oZm9udCgpKSkuZ2V0KCkgfTsKLSAgICByZXR1cm4gbWFrZVN0cmluZyhmb250RGVzY3JpcHRp
b24sICcgJywgbV9zaXplLAotICAgICAgICAobV9zeW50aGV0aWNCb2xkID8gIiBzeW50aGV0aWMg
Ym9sZCIgOiAiIiksCi0gICAgICAgIChtX3N5bnRoZXRpY09ibGlxdWUgPyAiIHN5bnRoZXRpYyBv
YmxpcXVlIiA6ICIiKSwKLSAgICAgICAgKG1fb3JpZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9u
OjpWZXJ0aWNhbCA/ICIgdmVydGljYWwgb3JpZW50YXRpb24iIDogIiIpKTsKLX0KLQotI2VuZGlm
Ci0KLVN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QKLXsKLSAgICBp
ZiAoYXV0byBwbGF0Zm9ybUZvbnQgPSBmb250KCkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENU
Rm9udENvcHlGYW1pbHlOYW1lKHBsYXRmb3JtRm9udCkpLmdldCgpOwotICAgIHJldHVybiB7IH07
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5jcHAKaW5kZXggZDgxNTQ4YTMwYjlkMjJjYWZmOGFhNzg3MGRhYjRiZWZiMjM0YjkwNC4uOGFl
YzJlYTNkNGYxNzU5ZGY3Y2U2NDIzNmMzMmI2ODE1NjQ0ZGY3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVm
ZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTUzLDkgKzUzLDYgQEAgV1RGX1dFQUtfTElOS19GT1JDRV9J
TVBPUlQod2VibTo6c3dhcCk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFJl
bW92ZSB0aGlzIG9uY2Uga0NNVmlkZW9Db2RlY1R5cGVfVlA5IGlzIGFkZGVkIHRvIENNRm9ybWF0
RGVzY3JpcHRpb24uaAotY29uc3RleHByIENNVmlkZW9Db2RlY1R5cGUga0NNVmlkZW9Db2RlY1R5
cGVfVlA5IHsgJ3ZwMDknIH07Ci0KIHVzaW5nIG5hbWVzcGFjZSBQQUw7CiAKIHN0YXRpYyBib29s
IGlzV2VibVBhcnNlckF2YWlsYWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjAyOGI1MTI0M2U1Nzg1YTA2MmRmZWViYmU3NjM3ZTUzMDY2MDQ5NjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcApAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LTIwMjAsIDIw
MTYgQXBwbGUgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKKworI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRhc2hB
cnJheS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4K
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwv
c3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gQ29uZnVzaW5nbHksIGV2ZW4gd2hlbiBDR0ZvbnRSZW5kZXJpbmdHZXRGb250U21vb3Ro
aW5nRGlzYWJsZWQoKSByZXR1cm5zIHRydWUsIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRz
KCkgc3RpbGwgaW1wYWN0cyB0ZXh0CisvLyByZW5kZXJpbmcsIHdoaWNoIGlzIHdoeSB0aGlzIGZ1
bmN0aW9uIHVzZXMgdGhlICJzdWJwaXhlbCBhbnRpYWxpYXNpbmciIHJhdGhlciB0aGFuICJzbW9v
dGhpbmciIHRlcm1pbm9sb2d5LgorYm9vbCBGb250Q2FzY2FkZTo6aXNTdWJwaXhlbEFudGlhbGlh
c2luZ0F2YWlsYWJsZSgpCit7CisjaWYgSEFWRShDR19GT05UX1JFTkRFUklOR19HRVRfRk9OVF9T
TU9PVEhJTkdfRElTQUJMRUQpCisgICAgc3RhdGljIGJvb2wgc3VicGl4ZWxBbnRpYWxpYXNpbmdF
bmFibGVkOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNh
bGxfb25jZShvbmNlRmxhZywgWyZdKCkgeworICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0Vu
YWJsZWQgPSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7CisgICAg
fSk7CisgICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKKyNlbGlmIFBMQVRG
T1JNKE1BQykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK3ZvaWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVj
dG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0
IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQoreworICAgIENHQWZmaW5lVHJhbnNm
b3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRy
aXgoY29udGV4dCkpOworICAgIHBvc2l0aW9uc1swXSA9IENHUG9pbnRaZXJvOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENHU2l6ZSBhZHZhbmNl
ID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oYWR2YW5jZXNbaSAtIDFdLCBtYXRyaXgpOwor
ICAgICAgICBwb3NpdGlvbnNbaV0ueCA9IHBvc2l0aW9uc1tpIC0gMV0ueCArIGFkdmFuY2Uud2lk
dGg7CisgICAgICAgIHBvc2l0aW9uc1tpXS55ID0gcG9zaXRpb25zW2kgLSAxXS55ICsgYWR2YW5j
ZS5oZWlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0dGVy
cHJlc3NFZmZlY3QoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIEVOQUJM
RShMRVRURVJQUkVTUykKKyAgICByZXR1cm4gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKS5jb250
YWlucyhUZXh0RHJhd2luZ01vZGU6OkxldHRlcnByZXNzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9p
ZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBG
b250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBj
b25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBpZiAoIWNvdW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY29udGV4
dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOworCisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKyAgICBWZWN0b3I8Q0dQb2ludCwg
MjU2PiBwb3NpdGlvbnMoY291bnQpOworICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24o
KSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgIENHQWZmaW5lVHJhbnNm
b3JtIHJvdGF0ZUxlZnRUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMCwgLTEsIDEs
IDAsIDAsIDApOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0ZXh0TWF0cml4ID0gQ0dDb250
ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KTsKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcnVu
TWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQodGV4dE1hdHJpeCwgcm90YXRlTGVmdFRy
YW5zZm9ybSk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgocnVuTWF0cml4
LCBjb250ZXh0KTsKKworICAgICAgICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhj
b3VudCk7CisgICAgICAgIENURm9udEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7
CisKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zv
cm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CisKKyAgICAgICAgQ0dQ
b2ludCBwb3NpdGlvbiA9IEZsb2F0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgKyBmb250LmZv
bnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250LmZvbnRN
ZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVB
cHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlvbnNbaV0sIHJvdGF0ZUxlZnRUcmFuc2Zvcm0p
OworICAgICAgICAgICAgcG9zaXRpb25zW2ldID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3Jt
KENHUG9pbnRNYWtlKHBvc2l0aW9uLnggLSB0cmFuc2xhdGlvbi53aWR0aCwgcG9zaXRpb24ueSAr
IHRyYW5zbGF0aW9uLmhlaWdodCksIHRyYW5zZm9ybSk7CisgICAgICAgICAgICBwb3NpdGlvbi54
ICs9IGFkdmFuY2VzW2ldLndpZHRoOworICAgICAgICAgICAgcG9zaXRpb24ueSArPSBhZHZhbmNl
c1tpXS5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9y
bURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9z
aXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMsIGNvdW50KTsKKyAgICAgICAgQ1RG
b250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRh
dGEoKSwgY291bnQsIGNvbnRleHQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0Q0dGb250
UmVuZGVyaW5nTW9kZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0
U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0LCB0cnVlKTsKKworICAgIENHQWZmaW5l
VHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KTsK
KyAgICBib29sIGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgPSBXVEY6OmlzSW50ZWdyYWwo
Y29udGV4dFRyYW5zZm9ybS5hKSAmJiBXVEY6OmlzSW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5k
KSAmJiBjb250ZXh0VHJhbnNmb3JtLmIgPT0gMC5mICYmIGNvbnRleHRUcmFuc2Zvcm0uYyA9PSAw
LmY7CisgICAgYm9vbCBpc1JvdGF0ZWQgPSAoKGNvbnRleHRUcmFuc2Zvcm0uYiB8fCBjb250ZXh0
VHJhbnNmb3JtLmMpICYmIChjb250ZXh0VHJhbnNmb3JtLmEgfHwgY29udGV4dFRyYW5zZm9ybS5k
KSk7CisgICAgYm9vbCBkb1N1YnBpeGVsUXVhbnRpemF0aW9uID0gaXNUcmFuc2xhdGlvbk9ySW50
ZWdyYWxTY2FsZSB8fCAoIWlzUm90YXRlZCAmJiBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cygpKTsKKworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250
cyhjZ0NvbnRleHQsIHRydWUpOworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxRdWFudGl6YXRpb24pOworfQorCit2b2lkIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisgICAgaWYgKCFwbGF0Zm9ybURh
dGEuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFz
ID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzID0gdHJ1ZTsKKworICAgIGlmICgh
Zm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKKyAgICAgICAgc21vb3RoaW5nTW9kZSA9IEZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKKworICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkg
eworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOgorICAgICAgICBzaG91
bGRTbW9vdGhGb250cyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRTbW9v
dGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgorICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OlN1
YnBpeGVsQW50aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOgorICAg
ICAgICBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgc2hvdWxkU21vb3RoRm9udHMg
PSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFzaG91bGRVc2VTbW9v
dGhpbmcoKSkKKyAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKKworI2lmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5n
ID0gQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0KTsKKyAgICBpZiAoc2hv
dWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKQorICAgICAg
ICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIHNob3VsZFNtb290aEZv
bnRzKTsKKyNlbmRpZgorCisgICAgYm9vbCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyA9IENHQ29u
dGV4dEdldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQpOworICAgIGlmIChzaG91bGRBbnRpYWxp
YXMgIT0gb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIENHQ29udGV4dFNldFNob3Vs
ZEFudGlhbGlhcyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7CisKKyAgICBib29sIHVzZUxl
dHRlcnByZXNzRWZmZWN0ID0gc2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QoY29udGV4dCk7Cisg
ICAgVU5VU0VEX1ZBUklBQkxFKHVzZUxldHRlcnByZXNzRWZmZWN0KTsKKyAgICBGbG9hdFBvaW50
IHBvaW50ID0gYW5jaG9yUG9pbnQ7CisKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBD
R0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OworICAgIGlmICghcGxhdGZvcm1EYXRhLmlzQ29sb3JC
aXRtYXBGb250KCkpCisgICAgICAgIG1hdHJpeCA9IENURm9udEdldE1hdHJpeChwbGF0Zm9ybURh
dGEuZm9udCgpKTsKKyAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKKyAgICBtYXRyaXguZCA9IC1t
YXRyaXguZDsKKyAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkgeworICAg
ICAgICBzdGF0aWMgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKHN5bnRoZXRpY09ibGlxdWVBbmds
ZSgpICogcGlGbG9hdCAvIDE4MCk7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgICAgICBpZiAoZm9u
dC5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgICAgICAgICAgICAgbWF0cml4ID0g
Q0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwg
b2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJh
bnNmb3JtTWFrZSgxLCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENH
QWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCAtb2JsaXF1ZVNrZXcsIDEsIDAsIDApKTsKKyAgICB9
CisgICAgU2NvcGVkVGV4dE1hdHJpeCByZXN0b3JlcihtYXRyaXgsIGNnQ29udGV4dCk7CisKKyAg
ICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOworICAgIENHQ29udGV4dFNldEZvbnRT
aXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CisKKyAgICBGbG9hdFNpemUgc2hh
ZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7
CisgICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dD
b2xvcik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0Q1RN
KCk7CisgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9m
ZnNldCgpOworICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYmICFjb250ZXh0Q1RNLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpIHsKKyAgICAgICAgRmxvYXRTaXplIGhvcml6
b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzID0gY29udGV4dENUTS5tYXBTaXplKEZsb2F0U2l6
ZSgxLCAwKSk7CisgICAgICAgIGZsb2F0IGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhl
bHMgPSBzcXJ0Zihob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0aCgpICogaG9y
aXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSArIGhvcml6b250YWxVbml0U2l6
ZUluRGV2aWNlUGl4ZWxzLmhlaWdodCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhl
bHMuaGVpZ2h0KCkpOworICAgICAgICBpZiAoaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBp
eGVscykgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzY2FsZWQgZG93biBjb250
ZXh0IHdvbid0IGJsb3cgdXAgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnbHlwaHMuCisgICAgICAgICAg
ICBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gc3RkOjptaW4oc3ludGhldGljQm9sZE9mZnNldCwgc3lu
dGhldGljQm9sZE9mZnNldCAvIGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50
ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3Iu
aXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZv
bnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RN
LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFu
c3BhcmVuY3lMYXllcigpOworICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKKyAgICAgICAgLy8g
UGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBz
aGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgICAgICBj
b250ZXh0LmNsZWFyU2hhZG93KCk7CisgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQu
ZmlsbENvbG9yKCk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9y
LmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Cisg
ICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7CisgICAgICAgIGZs
b2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAg
ICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4n
dCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUu
CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0Lmhl
aWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Cisg
ICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hh
ZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIGlmIChzeW50aGV0
aWNCb2xkT2Zmc2V0KQorICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBv
aW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250
LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxD
b2xvcik7CisgICAgfQorCisjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQorICAgIGlmICh1c2VMZXR0
ZXJwcmVzc0VmZmVjdCkKKyAgICAgICAgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5j
ZXMocG9pbnQsIGZvbnQsIGNvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhC
dWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgZWxzZQorI2VuZGlmCisgICAg
eworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0NvbnRleHQs
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51
bUdseXBocyk7CisgICAgfQorCisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAg
IHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNC
b2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisKKyAgICBp
ZiAoaGFzU2ltcGxlU2hhZG93KQorICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9v
dGhpbmcpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwg
b3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKTsKKyNlbmRpZgorCisgICAgaWYgKHNob3Vs
ZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKKyAgICAgICAgQ0dDb250ZXh0
U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpOwor
fQorCitib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0Cit7
CisgICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udCgpOworICAgIHJldHVybiBp
c1N5c3RlbUZvbnQoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpOworfQorCisvLyBG
SVhNRTogVXNlIHRoaXMgb24gYWxsIHBvcnRzLgorY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZv
bnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CisgICAg
c2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOworICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMs
IGJhc2VDaGFyYWN0ZXJMZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7CisKKyAgICBHbHlw
aERhdGEgYmFzZUNoYXJhY3RlckdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJhY3RlcihiYXNl
Q2hhcmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCk7CisKKyAgICBpZiAoIWJhc2VDaGFyYWN0
ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGxl
bmd0aCA9PSBiYXNlQ2hhcmFjdGVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5mb250OworCisgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFs
c2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051
bGwoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0
KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgIGlmICghZm9udCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAg
IGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAm
JiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworI2VuZGlmCisgICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAgICAgIGlmIChpc0NKS0lk
ZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEdseXBo
cygpKQorICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+YnJva2VuSWRlb2dyYXBoRm9udCgp
OworICAgICAgICAgICAgZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmll
bnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgRm9udCYgdmVydGljYWxSaWdodEZvbnQgPSBmb250LT52ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250KCk7CisgICAgICAgICAgICAgICAgR2x5cGggdmVydGljYWxSaWdodEds
eXBoID0gdmVydGljYWxSaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7
CisgICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVy
R2x5cGhEYXRhLmdseXBoKQorICAgICAgICAgICAgICAgICAgICBmb250ID0gJnZlcnRpY2FsUmln
aHRGb250OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGb250
JiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKKyAgICAgICAg
ICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3Rl
cihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgICAgICAgICAgICAgIGZvbnQgPSAm
dXByaWdodEZvbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9u
dCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQpCisgICAgICAgICAgICB0cmllZEJhc2VD
aGFyYWN0ZXJGb250ID0gdHJ1ZTsKKworICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmb250OworICAgIH0KKworICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAmJiBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250
LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgp
KQorICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OworCisgICAgcmV0
dXJuIEZvbnQ6OnN5c3RlbUZhbGxiYWNrKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjll
MjI1MWQ2YWRhOWEwZWEwYzQ4MTJmN2M1NTYzN2Y5ZjA5NDg5ODgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwCkBA
IC0wLDAgKzEsNzcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQu
aCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJPcGVuVHlwZUNHLmgiCisjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbmNsdWRlIDxmbG9h
dC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8
dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2lmIFBM
QVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkxvY2FsZUNvY29hLmgiCisjaW5jbHVkZSA8cGFsL3Nw
aS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3Jl
VGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlu
bGluZSBib29sIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoQ0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdS
ZWYgYikKK3sKKyAgICByZXR1cm4gYSAmJiBDRlN0cmluZ0NvbXBhcmUoYSwgYiwga0NGQ29tcGFy
ZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG87Cit9CisKK3N0YXRpYyBib29s
IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgZm9udCkKK3sKKyAgICByZXR1cm4gZm9u
dEhhc0VpdGhlclRhYmxlKGZvbnQsIGtDVEZvbnRUYWJsZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcp
OworfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2Jvb2wgZm9udEZhbWlseVNob3VsZE5v
dEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKK3sKKyAgICBpZiAo
IWZvbnRGYW1pbHlOYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaW1lcyBO
ZXcgUm9tYW4gYW5kIEFyaWFsIGFyZSBub3QgcGVyZm9ybWFudCBlbm91Z2ggdG8gdXNlLiA8cmRh
cjovL3Byb2JsZW0vMjEzMzMzMjY+CisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2
ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBhYm92ZSBidWcgaXMgZml4ZWQuCisg
ICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250
RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgIHx8IChDRlN0cmlu
Z0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJl
RXF1YWxUbyk7Cit9CisKK3N0YXRpYyBjb25zdCBmbG9hdCBrTGluZUhlaWdodEFkanVzdG1lbnQg
PSAwLjE1ZjsKKworc3RhdGljIGJvb2wgc2hvdWxkVXNlQWRqdXN0bWVudChDVEZvbnRSZWYgZm9u
dCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENU
Rm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKTsKKworICAgIGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZT
dHJpbmdHZXRMZW5ndGgoZmFtaWx5TmFtZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENG
U1RSKCJUaW1lcyIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5h
bWUuZ2V0KCksIENGU1RSKCJIZWx2ZXRpY2EiKSkKKyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiLkhlbHZldGljYSBOZXVlVUkiKSk7Cit9
CisKKyNlbHNlCisKK3N0YXRpYyBib29sIG5lZWRzQXNjZW50QWRqdXN0bWVudChDRlN0cmluZ1Jl
ZiBmYW1pbHlOYW1lKQoreworICAgIHJldHVybiBmYW1pbHlOYW1lICYmIChjYXNlSW5zZW5zaXRp
dmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJUaW1lcyIpKQorICAgICAgICB8fCBjYXNlSW5z
ZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJIZWx2ZXRpY2EiKSkKKyAgICAgICAg
fHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQ291cmllciIpKSk7
Cit9CisKKyNlbmRpZgorCitzdGF0aWMgYm9vbCBpc0FoZW1Gb250KENGU3RyaW5nUmVmIGZhbWls
eU5hbWUpCit7CisgICAgcmV0dXJuIGZhbWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFy
ZShmYW1pbHlOYW1lLCBDRlNUUigiQWhlbSIpKTsKK30KKworYm9vbCBmb250SGFzVGFibGUoQ1RG
b250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcpCit7CisgICAgYXV0byB0YWJsZVRhZ3Mg
PSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVP
cHRpb25Ob09wdGlvbnMpKTsKKyAgICBpZiAoIXRhYmxlVGFncykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5n
ZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsr
aW5kZXgpIHsKKyAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVU
YWdzLmdldCgpLCBpbmRleCkpKTsKKyAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZykKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
Zm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiBjdEZvbnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwg
dW5zaWduZWQgdGFibGVUYWcyKQoreworICAgIGF1dG8gdGFibGVUYWdzID0gYWRvcHRDRihDVEZv
bnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25z
KSk7CisgICAgaWYgKCF0YWJsZVRhZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDRklu
ZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZv
ciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7CisgICAg
ICAgIGF1dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RGb250VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5k
ZXgpKSk7CisgICAgICAgIGlmICh0YWcgPT0gdGFibGVUYWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xk
KCkgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyAyNC4wZikgOiAwLmY7CisjZWxzZQor
ICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQo
KSA/IDEuMGYgOiAwLmY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBtX3Njcmlw
dENhY2hlID0gMDsKKyAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gbnVsbHB0cjsKKyAgICBp
ZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCisgICAgICAgIHJldHVybiBpbml0R0RJRm9udCgp
OworI2VuZGlmCisKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gQ1RGb250R2V0VW5pdHNQZXJF
bShtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZv
cm1EYXRhLnNpemUoKTsKKyAgICBDR0Zsb2F0IGNhcEhlaWdodCA9IHBvaW50U2l6ZSA/IENURm9u
dEdldENhcEhlaWdodChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKKyAgICBDR0Zsb2F0IGxp
bmVHYXAgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSkgOiAwOworICAgIENHRmxvYXQgYXNjZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0QXNjZW50
KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxvYXQgZGVzY2VudCA9IHBvaW50
U2l6ZSA/IENURm9udEdldERlc2NlbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7CisKKyAg
ICAvLyBUaGUgT3BlbiBGb250IEZvcm1hdCBkZXNjcmliZXMgdGhlIE9TLzIgVVNFX1RZUE9fTUVU
UklDUyBmbGFnIGFzIGZvbGxvd3M6CisgICAgLy8gIklmIHNldCwgaXQgaXMgc3Ryb25nbHkgcmVj
b21tZW5kZWQgdG8gdXNlIE9TLzIuc1R5cG9Bc2NlbmRlciAtIE9TLzIuc1R5cG9EZXNjZW5kZXIr
IE9TLzIuc1R5cG9MaW5lR2FwIGFzIGEgdmFsdWUgZm9yIGRlZmF1bHQgbGluZSBzcGFjaW5nIGZv
ciB0aGlzIGZvbnQuIgorICAgIC8vIE9uIE9TIFgsIHdlIG9ubHkgYXBwbHkgdGhpcyBydWxlIGlu
IHRoZSBpbXBvcnRhbnQgY2FzZSBvZiBmb250cyB3aXRoIGEgTUFUSCB0YWJsZS4KKyAgICBpZiAo
Zm9udEhhc1RhYmxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBrQ1RGb250VGFibGVNQVRIKSkg
eworICAgICAgICBzaG9ydCB0eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXA7Cisg
ICAgICAgIGlmIChPcGVuVHlwZTo6dHJ5R2V0VHlwb01ldHJpY3MobV9wbGF0Zm9ybURhdGEuZm9u
dCgpLCB0eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXApKSB7CisgICAgICAgICAg
ICBhc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyh0eXBvQXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50
U2l6ZTsKKyAgICAgICAgICAgIGRlc2NlbnQgPSAtc2NhbGVFbVRvVW5pdHModHlwb0Rlc2NlbnQs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAgICAgICAgbGluZUdhcCA9IHNjYWxlRW1U
b1VuaXRzKHR5cG9MaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5h
bWUobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisKKyAgICAvLyBEaXNhYmxlIGFudGlhbGlhc2lu
ZyB3aGVuIHJlbmRlcmluZyB3aXRoIEFoZW0gYmVjYXVzZSBtYW55IHRlc3RzIHJlcXVpcmUgdGhp
cy4KKyAgICBpZiAoaXNBaGVtRm9udChmYW1pbHlOYW1lLmdldCgpKSkKKyAgICAgICAgbV9hbGxv
d3NBbnRpYWxpYXNpbmcgPSBmYWxzZTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBXZSBu
ZWVkIHRvIGFkanVzdCBUaW1lcywgSGVsdmV0aWNhLCBhbmQgQ291cmllciB0byBjbG9zZWx5IG1h
dGNoIHRoZQorICAgIC8vIHZlcnRpY2FsIG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50
ZXJwYXJ0cyB0aGF0IGFyZSB0aGUgZGUgZmFjdG8KKyAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBB
cHBLaXQgYWRqdXN0bWVudCBvZiAyMCUgaXMgdG9vIGJpZyBhbmQgaXMKKyAgICAvLyBpbmNvcnJl
Y3RseSBhZGRlZCB0byBsaW5lIHNwYWNpbmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGlu
c3RlYWQKKyAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBhc2NlbnQuCisgICAgaWYgKG9yaWdpbigp
ID09IE9yaWdpbjo6TG9jYWwgJiYgbmVlZHNBc2NlbnRBZGp1c3RtZW50KGZhbWlseU5hbWUuZ2V0
KCkpKQorICAgICAgICBhc2NlbnQgKz0gc3RkOjpyb3VuZCgoYXNjZW50ICsgZGVzY2VudCkgKiAw
LjE1Zik7CisjZW5kaWYKKworICAgIC8vIENvbXB1dGUgbGluZSBzcGFjaW5nIGJlZm9yZSB0aGUg
bGluZSBtZXRyaWNzIGhhY2tzIGFyZSBhcHBsaWVkLgorICAgIGZsb2F0IGxpbmVTcGFjaW5nID0g
bHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCk7CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gSGFjayBIaXJhZ2lubyBsaW5lIG1ldHJpY3MgdG8g
YWxsb3cgcm9vbSBmb3IgbWFya2VkIHRleHQgdW5kZXJsaW5lcy4KKyAgICAvLyA8cmRhcjovL3By
b2JsZW0vNTM4NjE4Mz4KKyAgICBpZiAoZGVzY2VudCA8IDMgJiYgbGluZUdhcCA+PSAzICYmIGZh
bWlseU5hbWUgJiYgQ0ZTdHJpbmdIYXNQcmVmaXgoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhp
cmFnaW5vIikpKSB7CisgICAgICAgIGxpbmVHYXAgLT0gMyAtIGRlc2NlbnQ7CisgICAgICAgIGRl
c2NlbnQgPSAzOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIGlmIChwbGF0Zm9ybURhdGEoKS5v
cmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYgIWlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNW
ZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIENHRmxvYXQgYWRqdXN0bWVudCA9IHNob3VsZFVzZUFkanVzdG1lbnQo
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSA/IGNlaWwoKGFzY2VudCArIGRlc2NlbnQpICoga0xpbmVI
ZWlnaHRBZGp1c3RtZW50KSA6IDA7CisKKyAgICBsaW5lR2FwID0gY2VpbGYobGluZUdhcCk7Cisg
ICAgbGluZVNwYWNpbmcgPSBjZWlsKGFzY2VudCkgKyBhZGp1c3RtZW50ICsgY2VpbChkZXNjZW50
KSArIGxpbmVHYXA7CisgICAgYXNjZW50ID0gY2VpbGYoYXNjZW50ICsgYWRqdXN0bWVudCk7Cisg
ICAgZGVzY2VudCA9IGNlaWxmKGRlc2NlbnQpOworCisgICAgbV9zaG91bGROb3RCZVVzZWRGb3JB
cmFiaWMgPSBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0
KCkpOworI2VuZGlmCisKKyAgICBDR0Zsb2F0IHhIZWlnaHQgPSAwOworICAgIGlmIChtX3BsYXRm
b3JtRGF0YS5zaXplKCkpIHsKKyAgICAgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9u
KCkgPT0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSB7CisgICAgICAgICAgICAvLyBNZWFz
dXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQg
dG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCisgICAgICAgICAg
ICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhl
IGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2VsaW5lLgorICAgICAgICAgICAgR2x5cGggeEds
eXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoJ3gnKTsKKyAgICAgICAgICAgIGlmICh4R2x5cGgpCisg
ICAgICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRzRm9y
R2x5cGgoeEdseXBoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeEhlaWdo
dCA9IENURm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgp
LmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgIH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0
VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2Nl
bnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRN
ZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZUdhcChsaW5lR2FwKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250
TWV0cmljcy5zZXRVbmRlcmxpbmVQb3NpdGlvbigtQ1RGb250R2V0VW5kZXJsaW5lUG9zaXRpb24o
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgbV9mb250TWV0cmljcy5zZXRVbmRlcmxpbmVU
aGlja25lc3MoQ1RGb250R2V0VW5kZXJsaW5lVGhpY2tuZXNzKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSkpOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9h
dmdDaGFyV2lkdGggPSAwOworICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKKworICAgIGF1dG8gb3My
VGFibGUgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtD
VEZvbnRUYWJsZU9TMiwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgaWYgKG9z
MlRhYmxlICYmIENGRGF0YUdldExlbmd0aChvczJUYWJsZS5nZXQoKSkgPj0gNCkgeworICAgICAg
ICBjb25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7Cisg
ICAgICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBvczJbMl0gKiAyNTYgKyBvczJbM107Cisg
ICAgICAgIG1fYXZnQ2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBt
X2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAg
fQorCisgICAgYXV0byBoZWFkVGFibGUgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShtX3BsYXRm
b3JtRGF0YS5mb250KCksIGtDVEZvbnRUYWJsZUhlYWQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0
aW9ucykpOworICAgIGlmIChoZWFkVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5n
ZXQoKSkgPj0gNDIpIHsKKyAgICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRl
UHRyKGhlYWRUYWJsZS5nZXQoKSk7CisgICAgICAgIHVuc2lnbmVkIHV4TWluID0gaGVhZFszNl0g
KiAyNTYgKyBoZWFkWzM3XTsKKyAgICAgICAgdW5zaWduZWQgdXhNYXggPSBoZWFkWzQwXSAqIDI1
NiArIGhlYWRbNDFdOworICAgICAgICBTSW50MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4o
dXhNaW4pOworICAgICAgICBTSW50MTYgeE1heCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgp
OworICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsK
KyAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRy
aWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgfQorCisgICAg
Ly8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1
bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgorICAgIGluaXRDaGFy
V2lkdGhzKCk7Cit9CisKK2Jvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZv
clN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMyIGNoYXJh
Y3RlcikgY29uc3QKK3sKKyNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lP
UykgfHwgUExBVEZPUk0oTUFDKQorICAgIEdseXBoIGdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyKTsKKyAgICBpZiAoIWdseXBoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgeworICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpT
bWFsbDogeworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxs
Q2FwcygpOworICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBv
cnRlZC5nZXQoZ2x5cGgpOworICAgIH0KKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRl
OiB7CisgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fw
cygpOworICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRl
ZC5nZXQoZ2x5cGgpOworICAgIH0KKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6
IHsKKyAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENh
cHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0
ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0
ZTogeworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0
ZUNhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBw
b3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU3ludGhl
c2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjaGFy
YWN0ZXIpOworCisgICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsKKyAgICBjYXNlIEZvbnRW
YXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToKKyAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBGb250VmFyaWFudENh
cHM6OkFsbFBldGl0ZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxp
c3RlZCBhYm92ZS4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCit9CisKKyNp
ZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFD
KQorc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc09wZW5UeXBlRGlj
dGlvbmFyeShDRlN0cmluZ1JlZiBrZXksIGludCByYXdWYWx1ZSkKK3sKKyAgICBSZXRhaW5QdHI8
Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKKyAgICBDRlR5cGVSZWYga2V5
c1tdID0geyBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBrQ1RGb250T3BlblR5cGVGZWF0dXJl
VmFsdWUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleSwgdmFsdWUuZ2V0KCkgfTsK
KyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisK
K3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFsbENhcHNUcnVlVHlwZURpY3Rp
b25hcnkoaW50IHJhd0tleSwgaW50IHJhd1ZhbHVlKQoreworICAgIFJldGFpblB0cjxDRk51bWJl
clJlZj4ga2V5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBr
Q0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5KSk7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB2
YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVt
YmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9u
dEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZp
ZXJLZXkgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleS5nZXQoKSwgdmFsdWUuZ2V0
KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHVuaW9uQml0VmVjdG9ycyhCaXRWZWN0b3ImIHJlc3VsdCwgQ0ZC
aXRWZWN0b3JSZWYgc291cmNlKQoreworICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZCaXRWZWN0b3JH
ZXRDb3VudChzb3VyY2UpOworICAgIHJlc3VsdC5lbnN1cmVTaXplKGxlbmd0aCk7CisgICAgQ0ZJ
bmRleCBtaW4gPSAwOworICAgIHdoaWxlIChtaW4gPCBsZW5ndGgpIHsKKyAgICAgICAgQ0ZJbmRl
eCBuZXh0SW5kZXggPSBDRkJpdFZlY3RvckdldEZpcnN0SW5kZXhPZkJpdChzb3VyY2UsIENGUmFu
Z2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7CisgICAgICAgIGlmIChuZXh0SW5kZXggPT0g
a0NGTm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmVzdWx0LnNldChuZXh0
SW5kZXgsIHRydWUpOworICAgICAgICBtaW4gPSBuZXh0SW5kZXggKyAxOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlN0cmluZ1JlZiBmZWF0dXJlLCBD
VEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1bHQpCit7CisgICAgUmV0YWluUHRyPENGQml0
VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENURm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVh
dHVyZShmb250LCBzbWFsbENhcHNPcGVuVHlwZURpY3Rpb25hcnkoZmVhdHVyZSwgMSkuZ2V0KCkp
KTsKKyAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOworfQorCitzdGF0
aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGludCB0eXBlLCBpbnQgc2VsZWN0b3IsIENU
Rm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZCaXRW
ZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0
dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeSh0eXBlLCBzZWxlY3RvcikuZ2V0
KCkpKTsKKyAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOworfQorCitj
b25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMpIHsKKyAgICAgICAgbV9n
bHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RP
cGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9n
bHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5
cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBw
bGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUo
KSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVl
KCk7Cit9CisKK2NvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFs
bENhcHMoKSBjb25zdAoreworICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fw
cykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzID0gQml0VmVjdG9y
KCk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZv
cm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkp
OworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJjMnNjIiksIHBsYXRmb3Jt
RGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsK
KyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2Fz
ZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9y
dGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJh
Z2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VTbWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1E
YXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgp
OworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fw
cygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcykgewor
ICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOworICAg
ICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgp
LmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAg
IGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVD
YXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBl
dGl0ZUNhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5
UGV0aXRlQ2Fwcy52YWx1ZSgpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1
cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBv
cnRlZEJ5QWxsUGV0aXRlQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0
aXRlQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENG
U1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFs
bFBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZT
VFIoImMycGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxs
UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93
ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCku
Zm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAg
ICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVBldGl0
ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5
QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9y
dGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCk7Cit9CisjZW5kaWYKKworc3RhdGljIFJlZlB0cjxG
b250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9u
dE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRz
LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQoreworICAgIGlmICgh
Zm9udCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoc3ludGhldGljQm9sZCkK
KyAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OworICAgIGlmIChzeW50aGV0
aWNJdGFsaWMpCisgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0OworCisg
ICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJv
bGljVHJhaXRzKGZvbnQpOworCisgICAgYm9vbCB1c2VkU3ludGhldGljQm9sZCA9IChmb250VHJh
aXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRy
YWl0Qm9sZCk7CisgICAgYm9vbCB1c2VkU3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYg
a0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJ
dGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoZm9udCwgc2l6ZSwg
dXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbik7CisK
KyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGlzT3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQorewor
ICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5
cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250
T3BlblR5cGVGZWF0dXJlVmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNUcnVlVHlw
ZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCit7CisgICAgcmV0dXJuIENGRGljdGlv
bmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkp
ICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0
b3JJZGVudGlmaWVyS2V5KTsKK30KKworc3RhdGljIGlubGluZSBPcHRpb25hbDxDRlN0cmluZ1Jl
Zj4gb3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIEFTU0VS
VChpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7CisgICAgQ0ZTdHJpbmdSZWYgdGFnID0gc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZv
bnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKKyAgICBpbnQgcmF3VmFsdWU7CisgICAgQ0ZOdW1iZXJS
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
ZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7CisgICAgYXV0byBzdWNjZXNz
ID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIHJldHVybiByYXdWYWx1
ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVmPih0YWcpIDogV1RGOjpudWxsb3B0OworfQorCitzdGF0
aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQsIGludD4gdHJ1ZVR5cGVGZWF0dXJlKENGRGljdGlvbmFy
eVJlZiBmZWF0dXJlKQoreworICAgIEFTU0VSVChpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKSk7
CisgICAgaW50IHJhd1R5cGU7CisgICAgQ0ZOdW1iZXJSZWYgdHlwZSA9IHN0YXRpY19jYXN0PENG
TnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5
cGVJZGVudGlmaWVyS2V5KSk7CisgICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh0
eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlwZSk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNj
ZXNzLCBzdWNjZXNzKTsKKyAgICBpbnQgcmF3U2VsZWN0b3I7CisgICAgQ0ZOdW1iZXJSZWYgc2Vs
ZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVh
dHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICBzdWNjZXNz
ID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwga0NGTnVtYmVySW50VHlwZSwgJnJhd1NlbGVj
dG9yKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihyYXdUeXBlLCByYXdTZWxlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Q0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGludCBrZXksIENU
Rm9udFJlZiBmb250KQoreworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFk
b3B0Q0YoQ1RGb250Q29weUZlYXR1cmVzKGZvbnQpKTsKKyAgICBDRkluZGV4IGZlYXR1cmVDb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkg
PSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZl
YXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVB
dEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7CisgICAgICAgIENGTnVtYmVyUmVmIGZlYXR1cmVL
ZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVy
ZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgaWYgKCFm
ZWF0dXJlS2V5KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGludCByYXdGZWF0dXJl
S2V5OworICAgICAgICBDRk51bWJlckdldFZhbHVlKGZlYXR1cmVLZXksIGtDRk51bWJlckludFR5
cGUsICZyYXdGZWF0dXJlS2V5KTsKKyAgICAgICAgaWYgKHJhd0ZlYXR1cmVLZXkgIT0ga2V5KQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ0ZBcnJheVJlZiBmZWF0dXJlU2VsZWN0
b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVy
ZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVjdG9yc0tleSkpOworICAgICAgICBpZiAoIWZl
YXR1cmVTZWxlY3RvcnMpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQ0ZJbmRleCBz
ZWxlY3RvcnNDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlU2VsZWN0b3JzKTsKKyAgICAg
ICAgZm9yIChDRkluZGV4IGogPSAwOyBqIDwgc2VsZWN0b3JzQ291bnQ7ICsraikgeworICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVTZWxlY3RvciA9IHN0YXRpY19jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJlU2VsZWN0b3JzLCBqKSk7
CisgICAgICAgICAgICBDRk51bWJlclJlZiBpc0RlZmF1bHQgPSBzdGF0aWNfY2FzdDxDRk51bWJl
clJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVy
ZVNlbGVjdG9yRGVmYXVsdEtleSkpOworICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHQpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpbnQgcmF3SXNEZWZhdWx0OworICAg
ICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0RlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZy
YXdJc0RlZmF1bHQpOworICAgICAgICAgICAgaWYgKCFyYXdJc0RlZmF1bHQpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJS
ZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rvciwga0NURm9udEZlYXR1cmVT
ZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZW1v
dmVkRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSwgQ1RGb250UmVmIGZvbnQpCit7Cisg
ICAgYm9vbCBpc09wZW5UeXBlID0gaXNPcGVuVHlwZUZlYXR1cmUoZmVhdHVyZSk7CisgICAgYm9v
bCBpc1RydWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVyZSk7CisgICAgaWYgKCFpc09w
ZW5UeXBlICYmICFpc1RydWVUeXBlKQorICAgICAgICByZXR1cm4gZmVhdHVyZTsgLy8gV2UgZG9u
J3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0LgorICAgIFJldGFpblB0cjxDRk11dGFibGVE
aWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIGlmIChpc09wZW5UeXBlKSB7
CisgICAgICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9wZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAg
ICAgICAgaWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNU
Uigic21jcCIpKQorICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENG
U1RSKCJjMnNjIikpCisgICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwg
Q0ZTVFIoInBjYXAiKSkKKyAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgp
LCBDRlNUUigiYzJwYyIpKSkpIHsKKyAgICAgICAgICAgIGludCByYXdaZXJvID0gMDsKKyAgICAg
ICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gemVybyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1plcm8pKTsKKyAg
ICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5U
eXBlRmVhdHVyZVRhZywgZmVhdHVyZVRhZy52YWx1ZSgpKTsKKyAgICAgICAgICAgIENGRGljdGlv
bmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlLCB6
ZXJvLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFk
ZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZykpOworICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVG
ZWF0dXJlVmFsdWUsIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlw
ZUZlYXR1cmVWYWx1ZSkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpc1RydWVUeXBlKSB7
CisgICAgICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJlUGFpciA9IHRydWVUeXBlRmVhdHVyZShmZWF0
dXJlKTsKKyAgICAgICAgaWYgKHRydWVUeXBlRmVhdHVyZVBhaXIuZmlyc3QgPT0ga0xvd2VyQ2Fz
ZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtMb3dlckNhc2VTbWFsbENh
cHNTZWxlY3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlUGV0
aXRlQ2Fwc1NlbGVjdG9yKSkgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVz
dWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAg
ICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9y
Rm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VUeXBlLCBmb250KSkKKyAgICAgICAgICAgICAg
ICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0
b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0b3IpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZl
YXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUs
IGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7CisgICAgICAgIH0gZWxzZSBp
ZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrVXBwZXJDYXNlVHlwZSAmJiAodHJ1ZVR5
cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRy
dWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3Ip
KSB7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZv
bnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUs
IGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgICAgIGlmIChDRk51
bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1
cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQpKQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFk
ZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXks
IGRlZmF1bHRTZWxlY3Rvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRl
bnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVT
ZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRp
ZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBl
SWRlbnRpZmllcktleSkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0
LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUmV0YWlu
UHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhD
VEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBh
ZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwg
a0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSkpKTsKKyAgICBpZiAoIWZlYXR1cmVzKQor
ICAgICAgICByZXR1cm4gZm9udDsKKyAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlH
ZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7CisgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVm
PiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgZmVhdHVyZUNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgZm9y
IChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlH
ZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVu
ZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgpLCByZW1vdmVkRmVhdHVyZShmZWF0dXJlLCBmb250KS5n
ZXQoKSk7CisgICAgfQorICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0
dGluZ3NBdHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IG5ld0ZlYXR1cmVz
LmdldCgpIH07CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVl
cywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIFJldGFpblB0cjxDVEZv
bnREZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9y
Q3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOworICAgIHJldHVybiBhZG9w
dENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250LCBDVEZvbnRHZXRTaXplKGZv
bnQpLCBudWxscHRyLCBuZXdEZXNjcmlwdG9yLmdldCgpKSk7Cit9CisKK1JlZlB0cjxGb250PiBG
b250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcygpIGNvbnN0Cit7Cisg
ICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBDVEZvbnRTeW1ib2xp
Y1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURh
dGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZv
bnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0
Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOworfQorCitSZWZQ
dHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIGZsb2F0IHNpemUgPSBtX3Bs
YXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0
cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9u
dCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3Ig
PSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkp
KTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRD
cmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxw
dHIpKTsKKworICAgIHJldHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChzY2FsZWRGb250LmdldCgp
LCBzaXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRm
b3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUo
KSk7Cit9CisKK3ZvaWQgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3Ry
aW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0
IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHRE
aXJlY3Rpb24pIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7CisK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IEdseXBoQnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KKyNp
ZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMpCisgICAgYXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJh
bmdlLCBDR0dseXBoKiogbmV3R2x5cGhzUG9pbnRlciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2lu
dGVyLCBDR1BvaW50KiogbmV3T2Zmc2V0c1BvaW50ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9p
bnRlcikKKyAgICB7CisgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gc3RkOjptaW4oc3RkOjptYXgo
cmFuZ2UubG9jYXRpb24sIHN0YXRpY19jYXN0PENGSW5kZXg+KDApKSwgc3RhdGljX2Nhc3Q8Q0ZJ
bmRleD4oZ2x5cGhCdWZmZXIuc2l6ZSgpKSk7CisgICAgICAgIGlmIChyYW5nZS5sZW5ndGggPCAw
KSB7CisgICAgICAgICAgICByYW5nZS5sZW5ndGggPSBzdGQ6Om1pbihyYW5nZS5sb2NhdGlvbiwg
LXJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHJhbmdlLmxvY2F0
aW9uIC0gcmFuZ2UubGVuZ3RoOworICAgICAgICAgICAgZ2x5cGhCdWZmZXIucmVtb3ZlKGJlZ2lu
bmluZ0dseXBoSW5kZXggKyByYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci5tYWtlSG9sZShiZWdpbm5pbmdHbHlwaElu
ZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgdGhpcyk7CisKKyAgICAgICAgKm5l
d0dseXBoc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCk7
CisgICAgICAgICpuZXdBZHZhbmNlc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdp
bm5pbmdHbHlwaEluZGV4KTsKKyAgICAgICAgKm5ld09mZnNldHNQb2ludGVyID0gZ2x5cGhCdWZm
ZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAgICAgKm5ld0luZGljZXNQb2lu
dGVyID0gZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpOwor
ICAgIH07CisKKyAgICBhdXRvIHN1YnN0cmluZyA9IHRleHQuc3Vic3RyaW5nKGJlZ2lubmluZ1N0
cmluZ0luZGV4KTsKKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN1YnN0cmluZy51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIGxvY2FsZVN0cmluZyA9IExvY2FsZUNv
Y29hOjpjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nKGxvY2FsZSkuc3RyaW5n
KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBDVEZvbnRTaGFwZU9wdGlvbnMgb3B0aW9ucyA9IGtD
VEZvbnRTaGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRpb24KKyAgICAgICAgfCAoZW5hYmxlS2Vybmlu
ZyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJuaW5nIDogMCkKKyAgICAgICAgfCAodGV4dERpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdodFRvTGVmdCA6IDApOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lu
bmluZ0dseXBoSW5kZXg7ICsraSkKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5n
KGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldIC09IGJlZ2lubmluZ1N0cmluZ0luZGV4OworCisgICAg
Q1RGb250U2hhcGVHbHlwaHMoCisgICAgICAgIG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLAorICAg
ICAgICBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCksCisgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5
cGhJbmRleCkpLAorICAgICAgICByZWludGVycHJldF9jYXN0PENHUG9pbnQqPihnbHlwaEJ1ZmZl
ci5vcmlnaW5zKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zm
c2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpLAorICAgICAgICByZWludGVycHJldF9j
YXN0PGNvbnN0IFVuaUNoYXIqPih1cGNvbnZlcnRlZENoYXJhY3RlcnMuZ2V0KCkpLAorICAgICAg
ICBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4LAorICAgICAgICBvcHRp
b25zLAorICAgICAgICBsb2NhbGVTdHJpbmcuZ2V0KCksCisgICAgICAgIGhhbmRsZXIpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmlu
Z0dseXBoSW5kZXg7ICsraSkKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJl
Z2lubmluZ0dseXBoSW5kZXgpW2ldICs9IGJlZ2lubmluZ1N0cmluZ0luZGV4OworCisjZWxzZQor
CisgICAgVU5VU0VEX1BBUkFNKGJlZ2lubmluZ1N0cmluZ0luZGV4KTsKKyAgICBVTlVTRURfUEFS
QU0obG9jYWxlKTsKKyAgICBVTlVTRURfUEFSQU0odGV4dCk7CisKKyAgICAvLyBDVEZvbnRUcmFu
c2Zvcm1HbHlwaHMoKSBvcGVyYXRlcyBpbiB2aXN1YWwgb3JkZXIsIGJ1dCBXaWR0aEl0ZXJhdG9y
IGl0ZXJhdGVzIGluIGxvZ2ljYWwgb3JkZXIuCisgICAgLy8gVGVtcG9yYXJpbHkgcHV0IHVzIGlu
IHZpc3VhbCBvcmRlciBqdXN0IGZvciB0aGUgY2FsbCwgdGhlbiBwdXQgdXMgYmFjayBpbnRvIGxv
Z2ljYWwgb3JkZXIgd2hlbgorICAgIC8vIHRoZSBjYWxsIGlzIGRvbmUuCisgICAgLy8gV2UgZG9u
J3QgaGF2ZSBhIGdsb2JhbCB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXI7IHdlJ3JlIGp1
c3Qgb3BlcmF0aW5nIG9uIGEgc2luZ2xlIGNodW5rIG9mIGl0LgorICAgIC8vIFdpZHRoSXRlcmF0
b3IgZW5jb3VudGVycyB0aGUgY2h1bmtzIG91dCBpbiBsb2dpY2FsIG9yZGVyLCBzbyB3ZSBoYXZl
IHRvIG1haW50YWluIHRoYXQgaW52YXJpYW50LgorICAgIC8vIEV2ZW50dWFsbHksIEZvbnRDYXNj
YWRlOjpsYXlvdXRTaW1wbGVUZXh0KCkgd2lsbCByZXZlcnNlIHRoZSB3aG9sZSBidWZmZXIgdG8g
cHV0IHRoZSBlbnRpcmUgdGhpbmcKKyAgICAvLyBpbiB2aXN1YWwgb3JkZXIsIGJ1dCB0aGF0J3Mg
b2theSBiZWNhdXNlIGl0IGhhcyBhIHZpZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlci4KKyAg
ICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgQ1RGb250U2hhcGVHbHlwaHMoKSBhY2NlcHRzIHRoZSBi
dWZmZXIgaW4gbG9naWNhbCBvcmRlciBidXQgcmV0dXJucyBpdCBpbiBwaHlzaWNhbAorICAgIC8v
IG9yZGVyLCB3aGljaCBtZWFucyB0aGUgc2Vjb25kIHJldmVyc2UoKSBpbiB0aGlzIGZ1bmN0aW9u
IHN0aWxsIG5lZWRzIHRvIGV4ZWN1dGUgd2hlbgorICAgIC8vIENURm9udFNoYXBlR2x5cGhzKCkg
aXMgYmVpbmcgdXNlZC4KKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpS
VEwpCisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5
cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7CisKKyAgICBDVEZvbnRUcmFu
c2Zvcm1PcHRpb25zIG9wdGlvbnMgPSAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRUcmFuc2Zvcm1B
cHBseVBvc2l0aW9uaW5nIDogMCkgfCBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nOworICAg
IENURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+
KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwgZ2x5cGhCdWZmZXIu
c2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwgb3B0aW9ucyk7CisjZW5kaWYKKworICAgIC8v
IFNlZSB0aGUgY29tbWVudCBhYm92ZSBpbiB0aGlzIGZ1bmN0aW9uIHdoZXJlIHRoZSBvdGhlciBj
YWxsIHRvIHJldmVyc2UoKSBpcy4KKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0
aW9uOjpSVEwpCisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRl
eCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7Cit9CisKK3N0YXRp
YyBpbnQgZXh0cmFjdE51bWJlcihDRk51bWJlclJlZiBudW1iZXIpCit7CisgICAgaW50IHJlc3Vs
dCA9IDA7CisgICAgaWYgKG51bWJlcikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIs
IGtDRk51bWJlckludFR5cGUsICZyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3Bs
YXRmb3JtRGF0YS5mb250KCk7CisgICAgQVNTRVJUKGN0Rm9udCk7CisKKyAgICAvLyBTcGVjaWFs
IGNhc2UgT3Nha2EtTW9uby4KKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5
OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KKyAgICAv
LyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhl
ZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBNUy1QR290aGljLgorICAgIC8vIEFjY29y
ZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOD4sIHdlIHNob3VsZCBub3QgdHJlYXQgTVMt
UEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVw
b3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCisKKyAgICAvLyBTcGVjaWFsIGNhc2UgTW9u
b3R5cGVDb3JzaXZhCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81NDU0NzA0
Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCisg
ICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4
ZWQgcGl0Y2guCisKKyAgICBhdXRvIGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5h
bWUoY3RGb250KSk7CisgICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFt
aWx5TmFtZShjdEZvbnQpKTsKKworICAgIGludCBmaXhlZFBpdGNoID0gZXh0cmFjdE51bWJlcihh
ZG9wdENGKHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSwga0NURm9udEZpeGVkQWR2YW5jZUF0dHJpYnV0ZSkpKS5nZXQoKSk7
CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZv
bnQpICYga0NURm9udE1vbm9TcGFjZVRyYWl0KSB8fCBmaXhlZFBpdGNoIHx8IChjYXNlSW5zZW5z
aXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpKSB8fCBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIpKSB8
fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTW9ub3R5cGVD
b3JzaXZhIikpKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChmYW1pbHlOYW1l
ICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJp
ZXIgTmV3IikpKSB7CisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3Qg
YmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFj
a2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRh
cjovLzYyNjk3ODMpLgorICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7CisgICAg
fQorI2VuZGlmCit9CisKK0Zsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICBib3Vu
ZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEu
Y3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9u
OjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsIDoga0NURm9udE9yaWVudGF0
aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAwLCAxKTsKKyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3Vu
ZGluZ0JveC5tYXhZKCkpOworICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAg
IGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQpOworCisgICAgcmV0dXJuIGJvdW5kaW5nQm94OworfQorCitmbG9hdCBGb250Ojpw
bGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQ0dTaXplIGFk
dmFuY2UgPSBDR1NpemVaZXJvOworCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLnNpemUoKSkgewor
ICAgICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbDsKKyAgICAgICAgQ1RGb250T3JpZW50YXRpb24g
b3JpZW50YXRpb24gPSBob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA/
IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwgOiBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNh
bDsKKyNpZiBVU0UoQ1RGT05UR0VUQURWQU5DRVNfV09SS0FST1VORCkKKyAgICAgICAgQ0dGb250
UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcg
fCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRl
cmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5nU3R5bGVV
bmZpbHRlcmVkOworICAgICAgICBpZiAoIUNURm9udElzQXBwbGVDb2xvckVtb2ppKG1fcGxhdGZv
cm1EYXRhLmN0Rm9udCgpKSAmJiAhbV9wbGF0Zm9ybURhdGEuaGFzVmFyaWF0aW9ucygpKQorICAg
ICAgICAgICAgQ1RGb250R2V0VW5zdW1tZWRBZHZhbmNlc0ZvckdseXBoc0FuZFN0eWxlKG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgc3R5bGUsICZnbHlwaCwgJmFkdmFuY2Us
IDEpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgQ1RGb250
R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIG9yaWVudGF0aW9u
LCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYWR2
YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworUGF0aCBGb250OjpwbGF0
Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3VsdCA9
IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgp
LCBnbHlwaCwgbnVsbHB0cikpOworICAgIGF1dG8gc3ludGhldGljQm9sZE9mZnNldCA9IHRoaXMt
PnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkgewor
ICAgICAgICBhdXRvIG5ld1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7Cisg
ICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVzdWx0LmdldCgp
KTsKKyAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5z
bGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZzZXQsIDApOworICAgICAgICBDR1BhdGhBZGRQYXRoKG5l
d1BhdGguZ2V0KCksICZ0cmFuc2xhdGlvbiwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgcmV0dXJu
IHsgV1RGTW92ZShuZXdQYXRoKSB9OworICAgIH0KKyAgICByZXR1cm4geyBhZG9wdENGKENHUGF0
aENyZWF0ZU11dGFibGVDb3B5KHJlc3VsdC5nZXQoKSkpIH07Cit9CisKK2Jvb2wgRm9udDo6cGxh
dGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlciwgT3B0aW9uYWw8VUNoYXIz
Mj4gdmFyaWF0aW9uKSBjb25zdAoreworICAgIGlmICh2YXJpYXRpb24pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFVuaUNoYXIgY29kZVVuaXRzWzJdOworICAgIENHR2x5cGggZ2x5cGhz
WzJdOworICAgIENGSW5kZXggY291bnQgPSAwOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNvZGVV
bml0cywgY291bnQsIGNoYXJhY3Rlcik7CisgICAgcmV0dXJuIENURm9udEdldEdseXBoc0ZvckNo
YXJhY3RlcnMocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGNvZGVVbml0cywgZ2x5cGhzLCBjb3Vu
dCk7Cit9CisKK2Jvb2wgRm9udDo6aXNQcm9iYWJseU9ubHlVc2VkVG9SZW5kZXJJY29ucygpIGNv
bnN0Cit7CisgICAgYXV0byBwbGF0Zm9ybUZvbnQgPSBwbGF0Zm9ybURhdGEoKS5mb250KCk7Cisg
ICAgaWYgKCFwbGF0Zm9ybUZvbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEFs
bG93IG1vc3Qgbm9uLWljb24gZm9udHMgdG8gYmFpbCBlYXJseSBoZXJlIGJ5IHRlc3RpbmcgYSBz
aW5nbGUgY2hhcmFjdGVyICdhJywgd2l0aG91dCBpdGVyYXRpbmcgb3ZlciBhbGwgYmFzaWMgbGF0
aW4gY2hhcmFjdGVycy4KKyAgICBVbmlDaGFyIGxvd2VyY2FzZUFDaGFyYWN0ZXIgPSAnYSc7Cisg
ICAgQ0dHbHlwaCBsb3dlcmNhc2VBR2x5cGg7CisgICAgaWYgKENURm9udEdldEdseXBoc0ZvckNo
YXJhY3RlcnMocGxhdGZvcm1Gb250LCAmbG93ZXJjYXNlQUNoYXJhY3RlciwgJmxvd2VyY2FzZUFH
bHlwaCwgMSkpIHsKKyAgICAgICAgaWYgKCFDR1JlY3RJc0VtcHR5KENURm9udEdldEJvdW5kaW5n
UmVjdHNGb3JHbHlwaHMocGxhdGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCAm
bG93ZXJjYXNlQUdseXBoLCBudWxscHRyLCAxKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgYXV0byBzdXBwb3J0ZWRDaGFyYWN0ZXJzID0gYWRvcHRDRihDVEZvbnRD
b3B5Q2hhcmFjdGVyU2V0KHBsYXRmb3JtRm9udCkpOworICAgIGlmIChDRkNoYXJhY3RlclNldEhh
c01lbWJlckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMSkgfHwgQ0ZDaGFyYWN0
ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCksIDIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGVuY29tcGFzc2VzIGFsbCBiYXNpYyBM
YXRpbiBub24tY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGNvbnN0ZXhwciBVbmlDaGFyIGZpcnN0
Q2hhcmFjdGVyVG9UZXN0ID0gJyAnOworICAgIGNvbnN0ZXhwciBVbmlDaGFyIGxhc3RDaGFyYWN0
ZXJUb1Rlc3QgPSAnfic7CisgICAgY29uc3RleHByIGF1dG8gbnVtYmVyT2ZDaGFyYWN0ZXJzVG9U
ZXN0ID0gbGFzdENoYXJhY3RlclRvVGVzdCAtIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ICsgMTsKKwor
ICAgIFZlY3RvcjxDR0dseXBoPiBnbHlwaHM7CisgICAgZ2x5cGhzLmZpbGwoMCwgbnVtYmVyT2ZD
aGFyYWN0ZXJzVG9UZXN0KTsKKyAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJSYW5nZShw
bGF0Zm9ybUZvbnQsIGdseXBocy5iZWdpbigpLCBDRlJhbmdlTWFrZShmaXJzdENoYXJhY3RlclRv
VGVzdCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KSk7CisgICAgZ2x5cGhzLnJlbW92ZUFsbCgw
KTsKKworICAgIGlmIChnbHlwaHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBWZWN0b3I8Q0dSZWN0PiBib3VuZGluZ1JlY3RzOworICAgIGJvdW5kaW5nUmVjdHMuZmls
bChDR1JlY3RaZXJvLCBnbHlwaHMuc2l6ZSgpKTsKKyAgICBDVEZvbnRHZXRCb3VuZGluZ1JlY3Rz
Rm9yR2x5cGhzKHBsYXRmb3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwgZ2x5cGhz
LmJlZ2luKCksIGJvdW5kaW5nUmVjdHMuYmVnaW4oKSwgZ2x5cGhzLnNpemUoKSk7CisgICAgcmV0
dXJuIG5vdEZvdW5kID09IGJvdW5kaW5nUmVjdHMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIHJlY3Qp
IHsKKyAgICAgICAgcmV0dXJuICFDR1JlY3RJc0VtcHR5KHJlY3QpOworICAgIH0pOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NDViMGU4NTAxMjE1OWY2MDEzZmY1MjI5ZGIyNDBhMjdlNjI4MGNiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRm
b3JtRGF0YUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworI2lmIFBMQVRGT1JNKENP
Q09BKQorI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQ29yZVRleHRTUEkuaD4KKyNlbHNlCisjaW5j
bHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVm
IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxp
cXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhW
YXJpYW50LCBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSkKKyAgICA6IEZvbnRQ
bGF0Zm9ybURhdGEoc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50
YXRpb24sIHdpZHRoVmFyaWFudCwgdGV4dFJlbmRlcmluZ01vZGUpCit7CisgICAgQVNTRVJUX0FS
Ryhmb250LCBmb250KTsKKyAgICBtX2ZvbnQgPSBmb250OworICAgIG1faXNDb2xvckJpdG1hcEZv
bnQgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtDVEZvbnRDb2xvckdseXBoc1Ry
YWl0OworICAgIG1faXNTeXN0ZW1Gb250ID0gV2ViQ29yZTo6aXNTeXN0ZW1Gb250KG1fZm9udC5n
ZXQoKSk7CisgICAgYXV0byB2YXJpYXRpb25zID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFZhcmlhdGlvbkF0dHJp
YnV0ZSkpKTsKKyAgICBtX2hhc1ZhcmlhdGlvbnMgPSB2YXJpYXRpb25zICYmIENGRGljdGlvbmFy
eUdldENvdW50KHZhcmlhdGlvbnMuZ2V0KCkpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBtX2lzRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX2ZvbnQuZ2V0KCkpOwor
I2VuZGlmCit9CisKK2Jvb2wgaXNTeXN0ZW1Gb250KENURm9udFJlZiBmb250KQoreworI2lmIEhB
VkUoQ1RGT05USVNTWVNURU1VSUZPTlQpCisgICAgcmV0dXJuIENURm9udElzU3lzdGVtVUlGb250
KGZvbnQpOworI2Vsc2UKKyAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250
KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5nZXQoKSk7CisjZW5kaWYK
K30KKworQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OnJlZ2lzdGVyZWRGb250KCkgY29uc3QK
K3sKKyAgICBDVEZvbnRSZWYgcGxhdGZvcm1Gb250ID0gZm9udCgpOworICAgIEFTU0VSVChwbGF0
Zm9ybUZvbnQpOworICAgIGlmIChwbGF0Zm9ybUZvbnQgJiYgYWRvcHRDRihDVEZvbnRDb3B5QXR0
cmlidXRlKHBsYXRmb3JtRm9udCwga0NURm9udFVSTEF0dHJpYnV0ZSkpKQorICAgICAgICByZXR1
cm4gcGxhdGZvcm1Gb250OworICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYgUExBVEZPUk0o
Q09DT0EpCitpbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVjdG9y
KEZvbnRXaWR0aFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKKyAg
ICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtQ
cm9wb3J0aW9uYWxUZXh0U2VsZWN0b3I7CisKKyAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6Okhh
bGZXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtIYWxmV2lkdGhUZXh0U2VsZWN0b3I7CisKKyAgICBj
YXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6CisgICAgICAgIHJldHVybiBrVGhpcmRX
aWR0aFRleHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldp
ZHRoOgorICAgICAgICByZXR1cm4ga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3RvcjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1Byb3BvcnRpb25hbFRleHRT
ZWxlY3RvcjsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNhc2NhZGVU
b0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpCit7CisgICAgYXV0byBsYXN0UmVzb3J0
ID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXplKENGU1RSKCJM
YXN0UmVzb3J0IiksIDApKTsKKworICAgIENGVHlwZVJlZiBkZXNjcmlwdG9yc1tdID0geyBsYXN0
UmVzb3J0LmdldCgpIH07CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRD
RihDRkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc2NyaXB0b3JzLCBXVEZfQVJS
QVlfTEVOR1RIKGRlc2NyaXB0b3JzKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworCisgICAg
Q0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07CisgICAg
Q0ZUeXBlUmVmIHZhbHVlc1tdID0geyBhcnJheS5nZXQoKSB9OworICAgIHJldHVybiBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdU
Rl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGljIENURm9udERlc2Ny
aXB0b3JSZWYgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigp
Cit7CisgICAgc3RhdGljIENURm9udERlc2NyaXB0b3JSZWYgZGVzY3JpcHRvciA9IENURm9udERl
c2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRl
c0RpY3Rpb25hcnkoKS5nZXQoKSk7CisgICAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9CisKK0NURm9u
dFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAoreworICAgIGlmIChtX2N0Rm9u
dCkKKyAgICAgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOworCisgICAgQVNTRVJUKG1fZm9udCk7
CisgICAgbV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyht
X2ZvbnQuZ2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlh
dGlvbnNGb250RGVzY3JpcHRvcigpKSk7CisKKyAgICBpZiAobV93aWR0aFZhcmlhbnQgIT0gRm9u
dFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7CisgICAgICAgIGludCBmZWF0dXJlVHlwZVZh
bHVlID0ga1RleHRTcGFjaW5nVHlwZTsKKyAgICAgICAgaW50IGZlYXR1cmVTZWxlY3RvclZhbHVl
ID0gbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IobV93aWR0aFZhcmlhbnQp
OworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc291cmNlRGVzY3JpcHRv
ciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fY3RGb250LmdldCgpKSk7Cisg
ICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVR5cGUgPSBhZG9wdENGKENGTnVt
YmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJl
VHlwZVZhbHVlKSk7CisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVNlbGVj
dG9yID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUpKTsKKyAgICAgICAgUmV0YWluUHRyPENU
Rm9udERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0
b3JDcmVhdGVDb3B5V2l0aEZlYXR1cmUoc291cmNlRGVzY3JpcHRvci5nZXQoKSwgZmVhdHVyZVR5
cGUuZ2V0KCksIGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RG
b250UmVmPiBuZXdGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3Io
bmV3RGVzY3JpcHRvci5nZXQoKSwgbV9zaXplLCAwKSk7CisKKyAgICAgICAgaWYgKG5ld0ZvbnQp
CisgICAgICAgICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7CisgICAgfQorCisgICAgcmV0dXJuIG1f
Y3RGb250LmdldCgpOworfQorI2Vsc2UKK0NURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZv
bnQoKSBjb25zdAoreworICAgIHJldHVybiBmb250KCk7Cit9CisjZW5kaWYKKworUmV0YWluUHRy
PENGVHlwZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhDVEZv
bnRSZWYgY3RGb250KQoreworICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9u
dENvcHlGb250RGVzY3JpcHRvcihjdEZvbnQpKTsKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODY4MyBUaGlzIGlzIGEgc2hhbGxvdyBwb2lu
dGVyIGNvbXBhcmUgZm9yIHdlYiBmb250cworICAgIC8vIGJlY2F1c2UgdGhlIFVSTCBjb250YWlu
cyB0aGUgYWRkcmVzcyBvZiB0aGUgZm9udC4gVGhpcyBtZWFucyB3ZSBtaWdodCBlcnJvbmVvdXNs
eSBnZXQgZmFsc2UgbmVnYXRpdmVzLgorICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsID0gYWRv
cHRDRihzdGF0aWNfY2FzdDxDRlVSTFJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUo
Zm9udERlc2NyaXB0b3IuZ2V0KCksIGtDVEZvbnRSZWZlcmVuY2VVUkxBdHRyaWJ1dGUpKSk7Cisg
ICAgQVNTRVJUKCF1cmwgfHwgQ0ZHZXRUeXBlSUQodXJsLmdldCgpKSA9PSBDRlVSTEdldFR5cGVJ
RCgpKTsKKyAgICByZXR1cm4gdXJsOworfQorCitSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxh
dGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhjdEZvbnQoKSk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0
Cit7CisgICAgaWYgKFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENURm9udENv
cHlUYWJsZShmb250KCksIHRhYmxlLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKSkKKyAg
ICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEuZ2V0KCkpOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECisKK1N0cmluZyBGb250UGxhdGZv
cm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgU3RyaW5nIGZvbnREZXNjcmlwdGlv
biB7IGFkb3B0Q0YoQ0ZDb3B5RGVzY3JpcHRpb24oZm9udCgpKSkuZ2V0KCkgfTsKKyAgICByZXR1
cm4gbWFrZVN0cmluZyhmb250RGVzY3JpcHRpb24sICcgJywgbV9zaXplLAorICAgICAgICAobV9z
eW50aGV0aWNCb2xkID8gIiBzeW50aGV0aWMgYm9sZCIgOiAiIiksCisgICAgICAgIChtX3N5bnRo
ZXRpY09ibGlxdWUgPyAiIHN5bnRoZXRpYyBvYmxpcXVlIiA6ICIiKSwKKyAgICAgICAgKG1fb3Jp
ZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/ICIgdmVydGljYWwgb3JpZW50
YXRpb24iIDogIiIpKTsKK30KKworI2VuZGlmCisKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpm
YW1pbHlOYW1lKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBwbGF0Zm9ybUZvbnQgPSBmb250KCkp
CisgICAgICAgIHJldHVybiBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKHBsYXRmb3JtRm9u
dCkpLmdldCgpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFn
ZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBo
UGFnZUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzhlZTM2ZGM2Yjg1YzQzYTNkNWI5Y2Q5NTRl
YzRlMTM3YmVmNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGlj
c1NQSS5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9D
b3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdp
bi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hvdWxk
RmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgaWYgKCFmb250Lmhhc1ZlcnRpY2Fs
R2x5cGhzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXND
SktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjb25zdGV4cHIgQ0dHbHlwaCBk
ZWxldGVkR2x5cGggPSAweEZGRkY7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKK3sKKyAgICBBU1NFUlQoYnVmZmVyTGVuZ3RoID09
IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0gMiAqIEdseXBoUGFnZTo6c2l6ZSk7
CisKKyAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOworICAgIFZlY3RvcjxDR0ds
eXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOworICAgIHVuc2lnbmVkIGdseXBoU3RlcCA9
IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKKworICAgIGlmIChzaG91bGRGaWxsV2l0
aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAgQ1RG
b250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RG
b250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCks
IGJ1ZmZlckxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFy
YWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5p
Q2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQ
YWdlOjpzaXplOyArK2kpIHsKKyAgICAgICAgYXV0byB0aGVHbHlwaCA9IGdseXBoc1tpICogZ2x5
cGhTdGVwXTsKKyAgICAgICAgaWYgKHRoZUdseXBoICYmIHRoZUdseXBoICE9IGRlbGV0ZWRHbHlw
aCkgeworICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCB0aGVHbHlwaCk7CisgICAgICAg
ICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGF2
ZUdseXBoczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhNTM1ZGM0MDNlNDMyNDNhYjgxM2M2YzE0ZmRlY2FkNjdl
OGRlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkds
eXBoUGFnZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgi
Ci0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDxwYWwv
c3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGJvb2wgc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgaWYgKCFmb250
Lmhhc1ZlcnRpY2FsR2x5cGhzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFGb250
Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBjb25zdCBjb25zdGV4
cHIgQ0dHbHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7Ci0KLWJvb2wgR2x5cGhQYWdlOjpmaWxs
KFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKLXsKLSAgICBBU1NFUlQoYnVm
ZmVyTGVuZ3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0gMiAqIEdseXBo
UGFnZTo6c2l6ZSk7Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOwotICAg
IFZlY3RvcjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOwotICAgIHVuc2lnbmVk
IGdseXBoU3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKLQotICAgIGlmIChz
aG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkK
LSAgICAgICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZv
cm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGds
eXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICBDVEZvbnRHZXRH
bHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7
Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKLSAgICAgICAgYXV0byB0aGVHbHlwaCA9IGds
eXBoc1tpICogZ2x5cGhTdGVwXTsKLSAgICAgICAgaWYgKHRoZUdseXBoICYmIHRoZUdseXBoICE9
IGRlbGV0ZWRHbHlwaCkgewotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCB0aGVHbHlw
aCk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlQ0dX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRl
Q0dXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ZGMzZWMxMjFjYzAyMjA3YjhjYjE2ODI3MTNkNmJiOGQ5
ZjZkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisKKyNpZiBVU0UoQ0cp
CisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
V2ViQ29yZVRleHRSZW5kZXJlci5oIgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNz
U1BJLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTWluaW11bSA9ICgx
IDw8IDQpOworY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUxpZ2h0ID0g
KDIgPDwgNCk7Citjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVt
ID0gKDMgPDwgNCk7Citjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlSGVh
dnkgPSAoNCA8PCA0KTsKKworY29uc3RleHByIGludCBmb250U21vb3RoaW5nTGV2ZWxNZWRpdW0g
PSAyOworY29uc3RleHByIENHRmxvYXQgYW50aWFsaWFzaW5nR2FtbWEgPSAyLjM7CisKK2RvdWJs
ZSBGb250Q2FzY2FkZTo6c19mb250U21vb3RoaW5nQ29udHJhc3QgPSAyOwordWludDMyX3QgRm9u
dENhc2NhZGU6OnNfZm9udFNtb290aGluZ1R5cGUgPSBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRp
dW07CitpbnQgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGluZ0xldmVsID0gZm9udFNtb290aGlu
Z0xldmVsTWVkaXVtOworYm9vbCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nRW5h
YmxlZDsKK3VpbnQzMl90IEZvbnRDYXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdUeXBlOwor
Ym9vbCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nU2V0OworCit2b2lkIEZvbnRD
YXNjYWRlOjpzZXRGb250U21vb3RoaW5nTGV2ZWwoaW50IGxldmVsKQoreworICAgIGNvbnN0IHVp
bnQzMl90IHNtb290aGluZ1R5cGVbXSA9IHsgCisgICAgICAgIDAsIC8vIEZvbnRTbW9vdGhpbmdU
eXBlU3RhbmRhcmQKKyAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlTGlnaHQsIC8vIEZvbnRT
bW9vdGhpbmdUeXBlTGlnaHQKKyAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtLCAv
LyBGb250U21vb3RoaW5nVHlwZU1lZGl1bQorICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5bGVI
ZWF2eSwgLy8gRm9udFNtb290aGluZ1R5cGVTdHJvbmcKKyAgICB9OworCisgICAgaWYgKGxldmVs
IDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxldmVsKSA+IEFSUkFZU0laRShzbW9vdGhpbmdU
eXBlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc19mb250U21vb3RoaW5nVHlwZSA9IHNtb290
aGluZ1R5cGVbbGV2ZWxdOworICAgIHNfZm9udFNtb290aGluZ0xldmVsID0gbGV2ZWw7Cit9CisK
K3N0YXRpYyB2b2lkIHNldENHRm9udFNtb290aGluZ1N0eWxlKENHQ29udGV4dFJlZiBjZ0NvbnRl
eHQsIHVpbnQzMl90IHNtb290aGluZ1R5cGUsIGJvb2wgZm9udEFsbG93c1Ntb290aGluZyA9IHRy
dWUpCit7CisgICAgaWYgKHNtb290aGluZ1R5cGUpIHsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hv
dWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBmb250QWxsb3dzU21vb3RoaW5nKTsKKyAgICAgICAg
Q0dDb250ZXh0U2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgc21vb3RoaW5nVHlwZSk7
CisgICAgfSBlbHNlCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29u
dGV4dCwgZmFsc2UpOworfQorCit1aW50MzJfdCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGlu
Z1N0eWxlKENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIGJvb2wgZm9udEFsbG93c1Ntb290aGluZykK
K3sKKyAgICB1aW50MzJfdCBvbGRGb250U21vb3RoaW5nU3R5bGUgPSAwOworICAgIGlmIChDR0Nv
bnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpKQorICAgICAgICBvbGRGb250U21v
b3RoaW5nU3R5bGUgPSBDR0NvbnRleHRHZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0KTsK
KyAgICBzZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIHNfZm9udFNtb290aGluZ1R5
cGUsIGZvbnRBbGxvd3NTbW9vdGhpbmcpOworCisgICAgcmV0dXJuIG9sZEZvbnRTbW9vdGhpbmdT
dHlsZTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KENH
RmxvYXQgY29udHJhc3QpCit7CisgICAgc19mb250U21vb3RoaW5nQ29udHJhc3QgPSBjb250cmFz
dDsKK30KKworc3RhdGljIGZsb2F0IGNsZWFyVHlwZUNvbnRyYXN0KCkKK3sKKyAgICBjb25zdCBX
Q0hBUiByZWZlcmVuY2VDaGFyYWN0ZXIgPSAnXFwnOworICAgIHN0YXRpYyBVSU5UIGxhc3RDb250
cmFzdCA9IDIwMDA7CisgICAgc3RhdGljIGZsb2F0IGdhbW1hID0gMjsKKyAgICBVSU5UIGNvbnRy
YXN0OworCisgICAgaWYgKCFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VURk9OVFNNT09USElO
R0NPTlRSQVNULCAwLCAmY29udHJhc3QsIDApIHx8IGNvbnRyYXN0ID09IGxhc3RDb250cmFzdCkK
KyAgICAgICAgcmV0dXJuIGdhbW1hOworCisgICAgbGFzdENvbnRyYXN0ID0gY29udHJhc3Q7CisK
KyAgICBhdXRvIGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwor
CisgICAgSEdESU9CSiBvbGRIRk9OVCA9IDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBHZXRTdG9j
a09iamVjdChERUZBVUxUX0dVSV9GT05UKSk7CisgICAgR0xZUEhNRVRSSUNTIGdseXBoTWV0cmlj
czsKKworICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAs
IDAsICAwLCAxIH07CisgICAgaWYgKDo6R2V0R2x5cGhPdXRsaW5lKGRjLmdldCgpLCByZWZlcmVu
Y2VDaGFyYWN0ZXIsIEdHT19NRVRSSUNTLCAmZ2x5cGhNZXRyaWNzLCAwLCAwLCAmaWRlbnRpdHkp
ID09IEdESV9FUlJPUikKKyAgICAgICAgcmV0dXJuIGNvbnRyYXN0IC8gMTAwMC4wZjsKKworICAg
IEJJVE1BUElORk8gYml0bWFwSW5mbzsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUg
PSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlQ
bGFuZXMgPSAxOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBCSV9S
R0I7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgPSAwOworICAgIGJpdG1h
cEluZm8uYm1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7CisgICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlZUGVsc1Blck1ldGVyID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNs
ckltcG9ydGFudCA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlXaWR0aCA9IGdseXBo
TWV0cmljcy5nbUJsYWNrQm94WDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9
IC1zdGF0aWNfY2FzdDxpbnQ+KGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSk7CisgICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlCaXRDb3VudCA9IDMyOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpQ2xyVXNlZCA9IDA7CisKKyAgICB1aW50OF90KiBwaXhlbHMgPSBudWxscHRyOworICAgIGF1
dG8gYml0bWFwID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJ
bmZvLCBESUJfUkdCX0NPTE9SUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZwaXhlbHMpLCAw
LCAwKSk7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBjb250cmFzdCAvIDEwMDAu
MGY7CisKKyAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBi
aXRtYXAuZ2V0KCkpOworCisgICAgQklUTUFQIGJtcEluZm87CisgICAgOjpHZXRPYmplY3QoYml0
bWFwLmdldCgpLCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKKyAgICBtZW1zZXQocGl4ZWxz
LCAwLCBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkgKiBibXBJbmZvLmJtV2lkdGhCeXRlcyk7CisK
KyAgICA6OlNldEJrTW9kZShkYy5nZXQoKSwgT1BBUVVFKTsKKyAgICA6OlNldFRleHRBbGlnbihk
Yy5nZXQoKSwgVEFfTEVGVCB8IFRBX1RPUCk7CisKKyAgICA6OlNldFRleHRDb2xvcihkYy5nZXQo
KSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsKKyAgICA6OlNldEJrQ29sb3IoZGMuZ2V0KCksIFJHQigw
LCAwLCAwKSk7CisgICAgOjpFeHRUZXh0T3V0VyhkYy5nZXQoKSwgMCwgMCwgMCwgMCwgJnJlZmVy
ZW5jZUNoYXJhY3RlciwgMSwgMCk7CisKKyAgICB1aW50OF90KiByZWZlcmVuY2VQaXhlbCA9IG51
bGxwdHI7CisgICAgdWludDhfdCB3aGl0ZVJlZmVyZW5jZVZhbHVlID0gMDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSAmJiAhcmVmZXJlbmNlUGl4
ZWw7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQgKiBnbHlwaE1ldHJp
Y3MuZ21CbGFja0JveFg7ICsraikgeworICAgICAgICAgICAgd2hpdGVSZWZlcmVuY2VWYWx1ZSA9
IHBpeGVsc1tpICogYm1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqXTsKKyAgICAgICAgICAgIC8vIExv
b2sgZm9yIGEgcGl4ZWwgdmFsdWUgaW4gdGhlIHJhbmdlIHRoYXQgYWxsb3dzIHVzIHRvIGVzdGlt
YXRlCisgICAgICAgICAgICAvLyBnYW1tYSB3aXRoaW4gMC4xIHdpdGhvdXQgYW4gZXJyb3IuCisg
ICAgICAgICAgICBpZiAod2hpdGVSZWZlcmVuY2VWYWx1ZSA+IDMyICYmIHdoaXRlUmVmZXJlbmNl
VmFsdWUgPCAyNDApIHsKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VQaXhlbCA9IHBpeGVscyAr
IGkgKiBibXBJbmZvLmJtV2lkdGhCeXRlcyArIGo7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVmZXJlbmNlUGl4ZWwp
IHsKKyAgICAgICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigwLCAwLCAwKSk7CisgICAg
ICAgIDo6U2V0QmtDb2xvcihkYy5nZXQoKSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsKKyAgICAgICAg
OjpFeHRUZXh0T3V0VyhkYy5nZXQoKSwgMCwgMCwgMCwgMCwgJnJlZmVyZW5jZUNoYXJhY3Rlciwg
MSwgMCk7CisgICAgICAgIHVpbnQ4X3QgYmxhY2tSZWZlcmVuY2VWYWx1ZSA9ICpyZWZlcmVuY2VQ
aXhlbDsKKworICAgICAgICBmbG9hdCBtaW5EZWx0YSA9IDE7CisgICAgICAgIGZvciAoZmxvYXQg
ZyA9IDE7IGcgPCAyLjNmOyBnICs9IDAuMWYpIHsKKyAgICAgICAgICAgIGZsb2F0IGRlbHRhID0g
ZmFicyhwb3dmKCh3aGl0ZVJlZmVyZW5jZVZhbHVlIC8gMjU1LjBmKSwgZykgKyBwb3dmKChibGFj
a1JlZmVyZW5jZVZhbHVlIC8gMjU1LjBmKSwgZykgLSAxKTsKKyAgICAgICAgICAgIGlmIChkZWx0
YSA8IG1pbkRlbHRhKSB7CisgICAgICAgICAgICAgICAgbWluRGVsdGEgPSBkZWx0YTsKKyAgICAg
ICAgICAgICAgICBnYW1tYSA9IGc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgZ2FtbWEgPSBjb250cmFzdCAvIDEwMDAuMGY7CisKKyAgICA6OlNlbGVjdE9i
amVjdChkYy5nZXQoKSwgb2xkQml0bWFwKTsKKyAgICA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwg
b2xkSEZPTlQpOworCisgICAgcmV0dXJuIGdhbW1hOworfQorCit2b2lkIEZvbnRDYXNjYWRlOjpz
eXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgpCit7CisgICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5m
byhTUElfR0VURk9OVFNNT09USElORywgMCwgJnNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQs
IDApOworICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdUWVBF
LCAwLCAmc19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZSwgMCk7CisgICAgc19mb250U21vb3RoaW5n
Q29udHJhc3QgPSBjbGVhclR5cGVDb250cmFzdCgpOworICAgIHNfc3lzdGVtRm9udFNtb290aGlu
Z1NldCA9IHRydWU7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OnNldENHQ29udGV4dEZvbnRSZW5k
ZXJpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIGlzU3lzdGVtRm9udCwgYm9v
bCAvKmlzUHJpbnRlckZvbnQqLywgYm9vbCB1c2VQbGF0Zm9ybU5hdGl2ZUdseXBocykKK3sKKyAg
ICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7CisgICAgYm9vbCBtYXlTdWJwaXhlbFBvc2l0
aW9uID0gdHJ1ZTsKKyAgICBDR0Zsb2F0IGNvbnRyYXN0ID0gMjsKKyAgICBpZiAodXNlUGxhdGZv
cm1OYXRpdmVHbHlwaHMpIHsKKyAgICAgICAgLy8gPHJkYXI6Ly82NTY0NTAxPiBHREkgY2FuJ3Qg
c3VicGl4ZWwtcG9zaXRpb24sIHNvIGRvbid0IGJvdGhlciBhc2tpbmcuCisgICAgICAgIG1heVN1
YnBpeGVsUG9zaXRpb24gPSBmYWxzZTsKKyAgICAgICAgaWYgKCFzX3N5c3RlbUZvbnRTbW9vdGhp
bmdTZXQpCisgICAgICAgICAgICBzeXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgpOworICAgICAg
ICBjb250cmFzdCA9IHNfZm9udFNtb290aGluZ0NvbnRyYXN0OworICAgICAgICBzaG91bGRBbnRp
YWxpYXMgPSBzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkOworICAgICAgICBpZiAoc19zeXN0
ZW1Gb250U21vb3RoaW5nVHlwZSA9PSBGRV9GT05UU01PT1RISU5HU1RBTkRBUkQpIHsKKyAgICAg
ICAgICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIGtDR0ZvbnRT
bW9vdGhpbmdTdHlsZU1pbmltdW0pOworICAgICAgICAgICAgY29udHJhc3QgPSBhbnRpYWxpYXNp
bmdHYW1tYTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5n
Q29udHJhc3QoY2dDb250ZXh0LCBjb250cmFzdCk7CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkVXNl
UGxhdGZvcm1OYXRpdmVHbHlwaHMoY2dDb250ZXh0LCB1c2VQbGF0Zm9ybU5hdGl2ZUdseXBocyk7
CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0LCBzaG91bGRB
bnRpYWxpYXMpOworICAgIENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBDR0Nv
bnRleHRHZXRDVE0oY2dDb250ZXh0KTsKKyAgICBib29sIGlzUHVyZVRyYW5zbGF0aW9uID0gY29u
dGV4dFRyYW5zZm9ybS5hID09IDEgJiYgKGNvbnRleHRUcmFuc2Zvcm0uZCA9PSAxIHx8IGNvbnRl
eHRUcmFuc2Zvcm0uZCA9PSAtMSkgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYiAmJiAhY29udGV4dFRy
YW5zZm9ybS5jOworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250cyhj
Z0NvbnRleHQsIG1heVN1YnBpeGVsUG9zaXRpb24gJiYgKGlzU3lzdGVtRm9udCB8fCAhaXNQdXJl
VHJhbnNsYXRpb24pKTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMoY2dDb250ZXh0LCBpc1B1cmVUcmFuc2xhdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0dG
b250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGVGb3JGb250KGJvb2wgaXNTeXN0ZW1Gb250
LCBib29sIGlzUHJpbnRlckZvbnQpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCBh
IG1pbmltdW0gYW50aWFsaWFzZWQgZm9udCBzaXplLgorCisgICAgaWYgKGlzU3lzdGVtRm9udCB8
fCBpc1ByaW50ZXJGb250KQorICAgICAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50
aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOworCisgICAgcmV0dXJuIGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6
Z2V0UGxhdGZvcm1HbHlwaEFkdmFuY2VzKENHRm9udFJlZiBmb250LCBjb25zdCBDR0FmZmluZVRy
YW5zZm9ybSYgbSwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgaXNQcmludGVyRm9udCwgQ0dHbHlw
aCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKQoreworICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0
eWxlID0gcmVuZGVyaW5nU3R5bGVGb3JGb250KGlzU3lzdGVtRm9udCwgaXNQcmludGVyRm9udCk7
CisgICAgQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKGZvbnQsICZtLCBzdHlsZSwgJmds
eXBoLCAxLCAmYWR2YW5jZSk7CisKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzc2MTE2NT4gVGhl
IEdESSBiYWNrIGVuZCBpbiBDb3JlIEdyYXBoaWNzIHNvbWV0aW1lcyByZXR1cm5zIGFkdmFuY2Vz
IHRoYXQKKyAgICAvLyBkaWZmZXIgZnJvbSB3aGF0IHRoZSBmb250J3MgaG10eCB0YWJsZSBzcGVj
aWZpZXMuIFRoZSBmb2xsb3dpbmcgY29kZSBjb3JyZWN0cyB0aGF0LgorICAgIENGRGF0YVJlZiBo
bXR4VGFibGUgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoZm9udCwgJ2htdHgnKTsKKyAgICBpZiAo
IWhtdHhUYWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIENGRGF0YVJlZiBoaGVhVGFibGUgPSBD
R0ZvbnRDb3B5VGFibGVGb3JUYWcoZm9udCwgJ2hoZWEnKTsKKyAgICBpZiAoIWhoZWFUYWJsZSkg
eworICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNvbnN0IENGSW5kZXggaGhlYVRhYmxlU2l6ZSA9IDM2OworICAgIGNvbnN0IHB0cmRp
ZmZfdCBoaGVhVGFibGVOdW1iZXJPZkhNZXRyaWNzT2Zmc2V0ID0gMzQ7CisgICAgaWYgKENGRGF0
YUdldExlbmd0aChoaGVhVGFibGUpIDwgaGhlYVRhYmxlU2l6ZSkgeworICAgICAgICBDRlJlbGVh
c2UoaG10eFRhYmxlKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaG9ydCBudW1iZXJPZkhNZXRyaWNzID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihDRkRhdGFHZXRCeXRlUHRyKGho
ZWFUYWJsZSkgKyBoaGVhVGFibGVOdW1iZXJPZkhNZXRyaWNzT2Zmc2V0KTsKKyAgICBudW1iZXJP
ZkhNZXRyaWNzID0gKChudW1iZXJPZkhNZXRyaWNzICYgMHhGRikgPDwgOCkgfCAobnVtYmVyT2ZI
TWV0cmljcyA+PiA4KTsKKyAgICBpZiAoIW51bWJlck9mSE1ldHJpY3MpIHsKKyAgICAgICAgQ0ZS
ZWxlYXNlKGhtdHhUYWJsZSk7CisgICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdseXBoID49IG51bWJlck9mSE1ldHJpY3MpCisg
ICAgICAgIGdseXBoID0gbnVtYmVyT2ZITWV0cmljcyAtIDE7CisKKyAgICBpZiAoQ0ZEYXRhR2V0
TGVuZ3RoKGhtdHhUYWJsZSkgPCA0ICogKGdseXBoICsgMSkpIHsKKyAgICAgICAgQ0ZSZWxlYXNl
KGhtdHhUYWJsZSk7CisgICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdW5zaWduZWQgc2hvcnQgYWR2YW5jZUluRGVzaWduVW5pdHMgPSAq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KENGRGF0YUdldEJ5dGVQdHIo
aG10eFRhYmxlKSArIDQgKiBnbHlwaCk7CisgICAgYWR2YW5jZUluRGVzaWduVW5pdHMgPSAoKGFk
dmFuY2VJbkRlc2lnblVuaXRzICYgMHhGRikgPDwgOCkgfCAoYWR2YW5jZUluRGVzaWduVW5pdHMg
Pj4gOCk7CisgICAgQ0dTaXplIGhvcml6b250YWxBZHZhbmNlID0gQ0dTaXplTWFrZShzdGF0aWNf
Y2FzdDxDR0Zsb2F0PihhZHZhbmNlSW5EZXNpZ25Vbml0cykgLyBDR0ZvbnRHZXRVbml0c1BlckVt
KGZvbnQpLCAwKTsKKyAgICBob3Jpem9udGFsQWR2YW5jZSA9IENHU2l6ZUFwcGx5QWZmaW5lVHJh
bnNmb3JtKGhvcml6b250YWxBZHZhbmNlLCBtKTsKKyAgICBhZHZhbmNlLndpZHRoID0gaG9yaXpv
bnRhbEFkdmFuY2Uud2lkdGg7CisgICAgaWYgKCEoc3R5bGUgJiBrQ0dGb250UmVuZGVyaW5nU3R5
bGVTdWJwaXhlbFBvc2l0aW9uaW5nKSkKKyAgICAgICAgYWR2YW5jZS53aWR0aCA9IHJvdW5kZihh
ZHZhbmNlLndpZHRoKTsKKworICAgIENGUmVsZWFzZShoaGVhVGFibGUpOworICAgIENGUmVsZWFz
ZShobXR4VGFibGUpOworfQorCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408521</attachid>
            <date>2020-09-11 00:42:08 -0700</date>
            <delta_ts>2020-09-11 00:44:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216400-20200911004206.patch</filename>
            <type>text/plain</type>
            <size>167108</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiYWY5MmYwNjYxMjgwYzFhNTQzZGRk
YWJmMzgzNjk1ZjNkMmE1NDUuLmFlODc4MGFmODNkMTFhZDU5OWYzYjMxYTU2NmMyOWExMTg1YzA5
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTEgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgQ29yZVRleHQt
c3BlY2lmaWMgY29kZSBmcm9tICoqKkNvY29hLm1tIHRvICoqKkNvcmVUZXh0LmNwcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NDAwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1V
c2UuaDoKKwogMjAyMC0wOS0xMCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBEaXNhYmxlIGhhcmR3YXJlIEpQRUcgZGVjb2Rpbmcgb24geDg2IE1hYwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDBiNWZjZjQ3Y2E0ZWQ4MzFiYjAxNjI3OWZmYTdmYzMyYjE1MDdiNDQuLmNhMzI4ZThkNzJmZGM4
ZDhmYWE4YjM5MjI4YjI1OTE1ZWNjM2JiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MyBAQAor
MjAyMC0wOS0xMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisg
ICAgICAgIFtDb2NvYV0gTWlncmF0ZSBDb3JlVGV4dC1zcGVjaWZpYyBjb2RlIGZyb20gKioqQ29j
b2EubW0gdG8gKioqQ29yZVRleHQuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTY0MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBzaGFyaW5nIHRoZSBD
b3JlVGV4dCBjb2RlIHdpdGggdGhlIEFwcGxlIFdpbmRvd3MgcG9ydC4KKworICAgICAgICBUaGlz
IHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgY2F1c2UgV2luZG93cyB0byB1c2UgdGhpcyBuZXdseS1z
aGFyZWQgY29kZSB5ZXQuCisgICAgICAgIEknbSBkb2luZyB0aGlzIHByb2Nlc3MgaW4gc3RhZ2Vz
LiBUaGlzIHBhdGNoIGlzIHRoZSBmaXJzdCBzdGFnZS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
YmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRm
b3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRl
Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhB
ZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6aXNTdWJwaXhlbEFudGlh
bGlhc2luZ0F2YWlsYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWxsVmVjdG9y
V2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpzaG93R2x5cGhzV2l0aEFkdmFuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNl
dENHRm9udFJlbmRlcmluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGU6OmRyYXdHbHlwaHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2Nv
YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1EZXN0cm95KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzU3lzdGVtRm9udCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpyZWdpc3Rl
cmVkRm9udCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYXBGb250V2lkdGhW
YXJpYW50VG9DVEZlYXR1cmVTZWxlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpj
YXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25hcnkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Y2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b2Jq
ZWN0Rm9yRXF1YWxpdHlDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5
TmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0uCisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZTo6aXNTdWJwaXhlbEFudGlhbGlhc2luZ0F2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG93R2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENH
Rm9udFJlbmRlcmluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnByaW1hcnlGb250SXNTeXN0
ZW1Gb250IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpGb250
OjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1DaGFyV2lk
dGhJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9u
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4
dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6aXNTeXN0ZW1Gb250
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnJlZ2lzdGVyZWRGb250IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVz
RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJDb3JlOjpjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFy
aWF0aW9uc0ZvbnREZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmN0Rm9udCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpv
YmplY3RGb3JFcXVhbGl0eUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdMZXZlbCk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nQ29udHJhc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y2xlYXJUeXBlQ29udHJhc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnN5c3Rl
bUZvbnRTbW9vdGhpbmdDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpz
ZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVy
aW5nU3R5bGVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpnZXRQbGF0
Zm9ybUdseXBoQWR2YW5jZXMpOgorCiAyMDIwLTA5LTEwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgU21hbGwgY2xlYW51cCBpbiBSZW5kZXJUaGVt
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNzk1ZjQzZjQ0ODllMTdjZGNkY2EyOWRhNGM5MjAyNWFh
ZDNkYjRmZC4uODk3ZjRiYzhlZWViNGY5Yzg0OGJmMTQ5NWU4M2M0MTM1ZTJiZDczZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTEgIE15bGVzIEMuIE1heGZp
ZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgQ29y
ZVRleHQtc3BlY2lmaWMgY29kZSBmcm9tICoqKkNvY29hLm1tIHRvICoqKkNvcmVUZXh0LmNwcAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NDAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWwvc3Bp
L3dpbi9Db3JlVGV4dFNQSVdpbi5oOgorCiAyMDIwLTA5LTEwICBCZW4gTmhhbSAgPG5oYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIERpc2FibGUgaGFyZHdhcmUgSlBFRyBkZWNvZGluZyBvbiB4ODYg
TWFjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oIGIvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1Vc2UuaAppbmRleCBhNmViZTY3MmY0YTk1NGMzMzIyNDc4MDNmYmRhZTFj
ODI4MWFmZmUyLi45M2MyNWFhOTdlYzU0ODU2ODBlMTcwN2M3MDU4YjA4NDRmM2Q4NTVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtVXNlLmgKQEAgLTU0LDYgKzU0LDEwIEBACiAjZGVmaW5lIFVTRV9DRyAxCiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBVU0VfQ1QgMQorI2VuZGlmCisKICNp
ZiBQTEFURk9STShDT0NPQSkKICNkZWZpbmUgVVNFX0NBIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmggYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaAppbmRleCBkMjhiMTZiNGNh
ODQ2ODdhM2ZiMTVmZDliYWI0MDlmMzMzZmVkZmE4Li45MGVlOWNmODVhOTllNmVhZmU4NDAyZWI3
ODMzZjFjODgzZWM4NjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93
aW4vQ29yZVRleHRTUElXaW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93aW4v
Q29yZVRleHRTUElXaW4uaApAQCAtNDIsMjIgKzQyLDEyMSBAQCBDVF9FWFBPUlQgY29uc3QgQ0ZT
dHJpbmdSZWYga0NURm9udE5hbWVBdHRyaWJ1dGU7CiBDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdS
ZWYga0NURm9yZWdyb3VuZENvbG9yRnJvbUNvbnRleHRBdHRyaWJ1dGVOYW1lOwogQ1RfRVhQT1JU
IGNvbnN0IENGU3RyaW5nUmVmIGtDVFN0cm9rZVdpZHRoQXR0cmlidXRlTmFtZTsKIENUX0VYUE9S
VCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWU7CitDVF9FWFBP
UlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZzsKK0NUX0VYUE9S
VCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5OworQ1Rf
RVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZTsKK0NU
X0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmll
cktleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250RmVhdHVyZVR5cGVTZWxl
Y3RvcnNLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udEZlYXR1cmVTZWxl
Y3RvckRlZmF1bHRLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udEZlYXR1
cmVTZXR0aW5nc0F0dHJpYnV0ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250
Rml4ZWRBZHZhbmNlQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZv
bnRWYXJpYXRpb25BdHRyaWJ1dGU7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9u
dFVSTEF0dHJpYnV0ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250UmVmZXJl
bmNlVVJMQXR0cmlidXRlOwogCi0vLyBUaGlzIGVudW0gaXMgZGVmaW5lZCBpbiBDVEZvbnQuaC4g
VG8gYXZvaWQgcmVkZWZpbml0aW9uLCBvbmx5IGRlZmluZSBpdCBoZXJlIGlmIENURm9udC5oIGhh
cyBub3QgYmVlbiBpbmNsdWRlZC4gCisvLyBUaGVzZSBlbnVtcyBhcmUgZGVmaW5lZCBpbiBDVEZv
bnQuaC4gVG8gYXZvaWQgcmVkZWZpbml0aW9uLCBvbmx5IGRlZmluZSB0aGVtIGhlcmUgaWYgQ1RG
b250LmggaGFzIG5vdCBiZWVuIGluY2x1ZGVkLiAKICNpZm5kZWYgX19DVEZPTlRfXwordHlwZWRl
ZiBDRl9PUFRJT05TKHVpbnQzMl90LCBDVEZvbnRTeW1ib2xpY1RyYWl0cykgeworICAgIGtDVEZv
bnRUcmFpdEl0YWxpYyA9ICgxIDw8IDApLAorICAgIGtDVEZvbnRUcmFpdEJvbGQgPSAoMSA8PCAx
KSwKKyAgICBrQ1RGb250VHJhaXRNb25vU3BhY2UgPSAoMSA8PCAxMCksCisgICAga0NURm9udFRy
YWl0Q29sb3JHbHlwaHMgPSAoMSA8PCAxMyksCisKKyAgICBrQ1RGb250SXRhbGljVHJhaXQgPSBr
Q1RGb250VHJhaXRJdGFsaWMsCisgICAga0NURm9udEJvbGRUcmFpdCA9IGtDVEZvbnRUcmFpdEJv
bGQsCisgICAga0NURm9udE1vbm9TcGFjZVRyYWl0ID0ga0NURm9udFRyYWl0TW9ub1NwYWNlLAor
ICAgIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0ID0ga0NURm9udFRyYWl0Q29sb3JHbHlwaHMsCit9
OworCiB0eXBlZGVmIENGX09QVElPTlModWludDMyX3QsIENURm9udFRhYmxlT3B0aW9ucykgewog
ICAgIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucyA9IDAsCiAgICAga0NURm9udFRhYmxlT3B0
aW9uRXhjbHVkZVN5bnRoZXRpYyA9ICgxIDw8IDApCiB9OworCitlbnVtIHsKKyAgICBrQ1RGb250
VGFibGVNQVRIID0gJ01BVEgnLAorICAgIGtDVEZvbnRUYWJsZU9TMiAgPSAnT1MvMicsCisgICAg
a0NURm9udFRhYmxlVk9SRyA9ICdWT1JHJywKKyAgICBrQ1RGb250VGFibGVIZWFkID0gJ2hlYWQn
LAorICAgIGtDVEZvbnRUYWJsZVZoZWEgPSAndmhlYScsCit9OworCit0eXBlZGVmIENGX09QVElP
TlModWludDMyX3QsIENURm9udFRyYW5zZm9ybU9wdGlvbnMpIHsKKyAgICBrQ1RGb250VHJhbnNm
b3JtQXBwbHlTaGFwaW5nID0gKDEgPDwgMCksCisgICAga0NURm9udFRyYW5zZm9ybUFwcGx5UG9z
aXRpb25pbmcgPSAoMSA8PCAxKQorfTsKKworZW51bSB7CisgICAga0xvd2VyQ2FzZVR5cGUgPSAz
NywKKyAgICBrVXBwZXJDYXNlVHlwZSA9IDM4LAorfTsKKworZW51bSB7CisgICAga0RlZmF1bHRM
b3dlckNhc2VTZWxlY3RvciA9IDAsCisgICAga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yID0g
MSwKKyAgICBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yID0gMgorfTsKKworZW51bSB7Cisg
ICAga0RlZmF1bHRVcHBlckNhc2VTZWxlY3RvciA9IDAsCisgICAga1VwcGVyQ2FzZVNtYWxsQ2Fw
c1NlbGVjdG9yID0gMSwKKyAgICBrVXBwZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yID0gMgorfTsK
KworZW51bSB7CisgICAga1Byb3BvcnRpb25hbFRleHRTZWxlY3RvciA9IDAsCisgICAga0hhbGZX
aWR0aFRleHRTZWxlY3RvciA9IDIsCisgICAga1RoaXJkV2lkdGhUZXh0U2VsZWN0b3IgPSAzLAor
ICAgIGtRdWFydGVyV2lkdGhUZXh0U2VsZWN0b3IgPSA0LAorfTsKKwordHlwZWRlZiBDRl9FTlVN
KHVpbnQzMl90LCBDVEZvbnRPcmllbnRhdGlvbikKK3sKKyAgICBrQ1RGb250T3JpZW50YXRpb25E
ZWZhdWx0ID0gMCwKKyAgICBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsID0gMSwKKyAgICBr
Q1RGb250T3JpZW50YXRpb25WZXJ0aWNhbCA9IDIsCit9OwogI2VuZGlmCiAKK3Vuc2lnbmVkIENU
Rm9udEdldFVuaXRzUGVyRW0oQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0Q2FwSGVpZ2h0
KENURm9udFJlZik7CitDR0Zsb2F0IENURm9udEdldExlYWRpbmcoQ1RGb250UmVmKTsKK0NHRmxv
YXQgQ1RGb250R2V0QXNjZW50KENURm9udFJlZik7CitDR0Zsb2F0IENURm9udEdldERlc2NlbnQo
Q1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0WEhlaWdodChDVEZvbnRSZWYpOworQ0dGbG9h
dCBDVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRH
ZXRVbmRlcmxpbmVUaGlja25lc3MoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0U2l6ZShD
VEZvbnRSZWYpOworQ1RGb250U3ltYm9saWNUcmFpdHMgQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
Q1RGb250UmVmKTsKK0NGQ2hhcmFjdGVyU2V0UmVmIENURm9udENvcHlDaGFyYWN0ZXJTZXQoQ1RG
b250UmVmKTsKK0NGU3RyaW5nUmVmIENURm9udENvcHlGYW1pbHlOYW1lKENURm9udFJlZik7CitD
RlN0cmluZ1JlZiBDVEZvbnRDb3B5RnVsbE5hbWUoQ1RGb250UmVmKTsKK0NURm9udFJlZiBDVEZv
bnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoQ1RGb250UmVmLCBDR0Zsb2F0IHNpemUsIGNvbnN0
IENHQWZmaW5lVHJhbnNmb3JtKiBtYXRyaXgsIENURm9udERlc2NyaXB0b3JSZWYgYXR0cmlidXRl
cyk7CiBDVEZvbnRSZWYgQ1RGb250Q3JlYXRlV2l0aE5hbWUoQ0ZTdHJpbmdSZWYsIENHRmxvYXQg
c2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKIENURm9udFJlZiBDVEZvbnRDcmVhdGVX
aXRoR3JhcGhpY3NGb250KENHRm9udFJlZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRy
YW5zZm9ybSosIENURm9udERlc2NyaXB0b3JSZWYgYXR0cmlidXRlcyk7CitDVEZvbnRSZWYgQ1RG
b250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKENURm9udERlc2NyaXB0b3JSZWYsIENHRmxvYXQg
c2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKIENUTGluZVJlZiBDVExpbmVDcmVhdGVX
aXRoQXR0cmlidXRlZFN0cmluZyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYpOwogdm9pZCBDVExpbmVE
cmF3KENUTGluZVJlZiwgQ0dDb250ZXh0UmVmKTsKIENGRGF0YVJlZiBDVEZvbnRDb3B5VGFibGUo
Q1RGb250UmVmLCBDVEZvbnRUYWJsZVRhZywgQ1RGb250VGFibGVPcHRpb25zKTsKIENGQXJyYXlS
ZWYgQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhDVEZvbnRSZWYsIENURm9udFRhYmxlT3B0aW9u
cyk7CiBDR1BhdGhSZWYgQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKENURm9udFJlZiwgQ0dHbHlw
aCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKK3ZvaWQgQ1RGb250R2V0VmVydGljYWxUcmFu
c2xhdGlvbnNGb3JHbHlwaHMoQ1RGb250UmVmLCBjb25zdCBDR0dseXBoW10sIENHU2l6ZSB0cmFu
c2xhdGlvbnNbXSwgQ0ZJbmRleCBjb3VudCk7Cit2b2lkIENURm9udERyYXdHbHlwaHMoQ1RGb250
UmVmLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9pbnRbXSwgc2l6ZV90IGNvdW50LCBDR0Nv
bnRleHRSZWYpOworQ0dBZmZpbmVUcmFuc2Zvcm0gQ1RGb250R2V0TWF0cml4KENURm9udFJlZik7
CitDRkFycmF5UmVmIENURm9udENvcHlGZWF0dXJlcyhDVEZvbnRSZWYpOworQ0ZUeXBlUmVmIENU
Rm9udENvcHlBdHRyaWJ1dGUoQ1RGb250UmVmLCBDRlN0cmluZ1JlZik7CitDVEZvbnREZXNjcmlw
dG9yUmVmIENURm9udENvcHlGb250RGVzY3JpcHRvcihDVEZvbnRSZWYpOworYm9vbCBDVEZvbnRU
cmFuc2Zvcm1HbHlwaHMoQ1RGb250UmVmLCBDR0dseXBoW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBD
RkluZGV4IGNvdW50LCBDVEZvbnRUcmFuc2Zvcm1PcHRpb25zKTsKK0NHUmVjdCBDVEZvbnRHZXRC
b3VuZGluZ1JlY3RzRm9yR2x5cGhzKENURm9udFJlZiwgQ1RGb250T3JpZW50YXRpb24sIGNvbnN0
IENHR2x5cGhbXSwgQ0dSZWN0IGJvdW5kaW5nUmVjdHNbXSwgQ0ZJbmRleCBjb3VudCk7Citkb3Vi
bGUgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMoQ1RGb250UmVmLCBDVEZvbnRPcmllbnRhdGlv
biwgY29uc3QgQ0dHbHlwaFtdLCBDR1NpemUgYWR2YW5jZXNbXSwgQ0ZJbmRleCBjb3VudCk7Citi
b29sIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFy
W10sIENHR2x5cGhbXSwgQ0ZJbmRleCBjb3VudCk7Citib29sIENURm9udEdldEdseXBoc0ZvckNo
YXJhY3RlclJhbmdlKENURm9udFJlZiwgQ0dHbHlwaFtdLCBDRlJhbmdlKTsKK0NGRGF0YVJlZiBD
VEZvbnRDb3B5VGFibGUoQ1RGb250UmVmLCBDVEZvbnRUYWJsZVRhZywgQ1RGb250VGFibGVPcHRp
b25zKTsKK2Jvb2wgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKENURm9udFJl
ZiwgY29uc3QgVW5pQ2hhcltdLCBDR0dseXBoW10sIENGSW5kZXggY291bnQpOworCitDVEZvbnRE
ZXNjcmlwdG9yUmVmIENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhDRkRpY3Rp
b25hcnlSZWYpOworYm9vbCBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoQ1RGb250RGVz
Y3JpcHRvclJlZik7CitDVEZvbnREZXNjcmlwdG9yUmVmIENURm9udERlc2NyaXB0b3JDcmVhdGVX
aXRoTmFtZUFuZFNpemUoQ0ZTdHJpbmdSZWYsIENHRmxvYXQpOwogCiBXVEZfRVhURVJOX0NfRU5E
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYmIyMTdiYjNkNDZlOWMwZmU1NjkwMzMz
OThmNWQ0MTQyYzQ2NzYwOS4uZDc3ZDgzZTc4MTYyMWU2YmM0ZjM2MTVmY2Q2M2ViZGI1NTU3YTc1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTMwNiw3ICszMDYsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9hdFJl
Y3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZh
bWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTMyMSw2ICszMjEsMTEgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXll
ci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCiAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9G
b250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5
cGhQYWdlQ29yZVRleHQuY3BwCisKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVJvdGF0
aW9uU2Vzc2lvblZULm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25m
b3JtZXJDVi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpA
QCAtMzM1LDcgKzM0MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0Zsb2F0U2l6ZU1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0KICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9p
bnRNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDcyNjA0MTE5MjI0MDVhZmQwYmJi
NTA1Mzc2ZmU5ZTRlYmI1NzY1YWUuLjllMDJjZDZmZmY4MTBmMGUxZDAwOTRiZmYzZmI0MmZjOGVl
ZTk4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KLXBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENvY29hLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0aW9u
Q29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNv
Y29hLm1tCkBAIC0zNjksNiArMzY5LDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNv
cmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xM
YXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR1BVTGF5ZXIubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRlV2ViTS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250
Q29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRl
eHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9U
ZXh0dXJlQ2FjaGVDVi5tbQpAQCAtNDAyLDcgKzQwNiw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxv
YXRQb2ludE1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCi1wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25N
YWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ludFBvaW50TWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDBkNTk1Mzk5ZGU1Y2EwNTE4ZjIxMDUyMmVmNDMw
NTJiMWU4MTAyZi4uZDc2Y2M0ZmVkODYyNjliODM3ZTMzZjU0NTFkODBiMTU5N2NjMGIwMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNjY0MCw2ICs2NjQwLDExIEBACiAJCTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250
RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3
QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzZCOTVERDIyQzg1OEE0MDBFNkYx
NEYgLyogV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBQzI1MEEyOTREMDBENkU5MjAgLyogRm9udFBs
YXRmb3JtRGF0YUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRQbGF0Zm9ybURh
dGFDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEFEMjUw
QTJFNTMwMEQ2RTkyMCAvKiBHbHlwaFBhZ2VDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHbHlwaFBhZ2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
NkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250Q2FzY2FkZUNvcmVUZXh0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5MjAgLyogRm9udENvcmVUZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udENvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwMTY0LDcgKzEwMTY5LDYgQEAKIAkJN0M0Qzk2REExQUQ0NDgzNTAw
MzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0Qzk2REIxQUQ0NDgzNTAwMzYzNTcy
IC8qIEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFt
RGVmYXVsdFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1JlYWRh
YmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzUxNEUwMDI0QUY4MDU4MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzUxNEUwMjI0QUY4MDU4MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDNTE2QUQyMUYzNTI1MjAwMDM0QjZCRiAvKiBET01Qcm9taXNlUHJveHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NUHJvbWlzZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzEzNiw3ICsxMzE0MCw2IEBACiAJCUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0
RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAw
QTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZU1hYy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2x5cGhQYWdlTWFjLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDOEMwRDAwQTVERjAwMzAwNzRE
IC8qIFRleHRCb3VuZGFyaWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFRleHRCb3VuZGFyaWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkIxRjcxNDBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNTBEMDBDQUE4MDA0QUVB
NjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE4MTMwLDYgKzE4MTMzLDE3IEBACiAJCQluYW1lID0gSW5zcGVjdG9yOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUM2RkQ4QUEyNTBBMjkyNDAwRDZFOTIwIC8q
IGN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQzZG
RDhBRTI1MEEzMTE1MDBENkU5MjAgLyogRm9udENhc2NhZGVDb3JlVGV4dC5jcHAgKi8sCisJCQkJ
MUM2RkQ4QUYyNTBBMzNDRjAwRDZFOTIwIC8qIEZvbnRDb3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2
RkQ4QUMyNTBBMjk0RDAwRDZFOTIwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAgKi8s
CisJCQkJMUM2RkQ4QUQyNTBBMkU1MzAwRDZFOTIwIC8qIEdseXBoUGFnZUNvcmVUZXh0LmNwcCAq
LywKKwkJCSk7CisJCQlwYXRoID0gY3Q7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQkxQzgxQjk0RDBFOTczMkQ5MDAyNjZFMDcgLyogaW5zcGVjdG9yICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1ODE3LDcgKzI1ODMxLDYgQEAKIAkJ
CQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1tICovLAogCQkJCUIy
QUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLywK
IAkJCQlCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5o
ICovLAotCQkJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3BwICov
LAogCQkJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tICovLAogCQkJCUIy
NzUzNTRFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZU1hYy5tbSAqLywKIAkJCQlCMjc1MzU0RjBC
MDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gKi8sCkBAIC0yNTg0NCw2ICsyNTg1Nyw3
IEBACiAJCQkJQjUzMjBENjgxMjJBMjRFOTAwMkQxNDQwIC8qIGNvY29hICovLAogCQkJCTJDRTEx
ODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8sCiAJCQkJOTMzMkFCM0IxNjUxNUQ3
NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkxQzZGRDhBQTI1MEEyOTI0MDBENkU5MjAgLyogY3Qg
Ki8sCiAJCQkJQ0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2IC8qIGN2ICovLAogCQkJCTBGRTVGQkM5
MUMzREQ1MDYwMDA3QTJDQSAvKiBkaXNwbGF5bGlzdHMgKi8sCiAJCQkJQTc1RThCN0YwRTFERTJC
MDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8sCkBAIC0yNjIwNCw3ICsyNjIxOCw3IEBACiAJCQkJMUMz
OTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmNwcCAqLywKIAkJCQlD
MjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAqLywKIAkJCQlC
MkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2NvYS5tbSAqLywKLQkJCQk3
QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovLAorCQkJCTFDNkZEOEIw
MjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3BwICovLAogCQkJCTFDMTJBQzJDMUVFNzc5
OTUwMDc5RTBBMCAvKiBGb250RGVzY3JpcHRpb25Db2NvYS5jcHAgKi8sCiAJCQkJMUMxMkFDMjgx
RUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwICov
LAogCQkJCTFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CmluZGV4IDZlZjk3ODkyN2MzMDI0OTEyN2RmNWNiZDRlOWE1NWE4NzhkNDQ5YzMuLjEwNjUwZjlh
MDM3NjUyYmNjNTVhNTY3NzBlZTE4MzFjMTI4ODZlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC00NzQsNyArNDc0LDcgQEAgY29uc3QgRm9udCYgRm9u
dDo6YnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0CiAgICAgcmV0dXJuICpkZXJpdmVkRm9udERh
dGEuYnJva2VuSWRlb2dyYXBoRm9udDsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkKKyNpZiAh
VVNFKENUKQogCiBib29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBj
b25zdAogewpAQCAtNTExLDcgKzUxMSw3IEBAIFJlZlB0cjxGb250PiBGb250OjpjcmVhdGVTY2Fs
ZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hCiAgICAg
cmV0dXJuIHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChmb250RGVzY3JpcHRpb24sIHNjYWxlRmFj
dG9yKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkKKyNpZiAhVVNFKENUKQogdm9pZCBGb250
OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2ws
IGJvb2wsIGNvbnN0IEF0b21TdHJpbmcmLCBTdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uKSBjb25z
dAogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDdhYjUz
MTdhYjEyNGVmMjZlNDEyOTY1M2Q2M2Y5ZjY3MzQ3NWEyMzcuLjM4MmZlYjZjNTExODc2NzdiZGMy
NmU3YWRkZjU4YTVmYTg5YWRjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmgKQEAgLTY0LDcgKzY0LDcgQEAgZW51bSBGb250VmFyaWFudCB7IEF1dG9WYXJpYW50LCBO
b3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNpc01hcmtWYXIKIGVudW0gUGl0
Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKIGVudW0gY2xh
c3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFllcyB9OwogCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCisjaWYgVVNFKENUKQogYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmLCB1bnNp
Z25lZCB0YWJsZVRhZyk7CiBib29sIGZvbnRIYXNFaXRoZXJUYWJsZShDVEZvbnRSZWYsIHVuc2ln
bmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDMyNDMwYTZi
NTU0NDk5MGNkYTdiNzYzYWZmOGUwMzYwY2ZjYjNlMzYuLjU2MTBiMmY4M2NiOWEyYzAzM2IzYjkw
OGRhYzgzZmE2NmIyYzVlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTU5NSw3ICs1OTUsNyBAQCBib29sIEZvbnRDYXNjYWRl
OjpzaG91bGRVc2VTbW9vdGhpbmcoKQogICAgIHJldHVybiBzaG91bGRVc2VGb250U21vb3RoaW5n
OwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0UoQ1QpCiBib29sIEZvbnRDYXNj
YWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkKIHsKICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaApp
bmRleCAzODczOTlmMTQ1NDNkNmEwMTQ0ZGRjOWQ4NTNjMTlmMTk0NDExZWU5Li5kZDc4OWQ0MjY5
Njg5MzUxYzZmZDc2YTFhMWZiMzIxYjAzNWZiNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTgxLDYgKzgxLDExIEBAIHN0cnVjdCBH
bHlwaE92ZXJmbG93IHsKICAgICBib29sIGNvbXB1dGVCb3VuZHMgeyBmYWxzZSB9OwogfTsKIAor
I2lmIFVTRShDVCkKK3ZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZvbnQmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBDR0ds
eXBoKiwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpOwordm9pZCBmaWxs
VmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYg
cG9zaXRpb25zLCBDR0NvbnRleHRSZWYsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVk
IGNvdW50KTsKKyNlbmRpZgorCiBjbGFzcyBUZXh0TGF5b3V0RGVsZXRlciB7CiBwdWJsaWM6CiAg
ICAgdm9pZCBvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggZDRi
YzJhNGYxMTFkMzgyMGY4MDlkMTgwZmU2NzMyNDkwOWNiZTdkNi4uZDg5ZDZlYzRhZGM2ZWU1YzQw
NTY5M2VmNzg1YzkwNWZiNjEzNmIxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgRm9u
dFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHNvdXJjZSwKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQor
I2lmICFVU0UoQ1QpCiAKIFN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29u
c3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQ
bGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0
Zm9ybURhdGEuaAppbmRleCA0NmM5YWM3NzhhZDlhOTY0NGIxMzFjNTM2ZTIwYmIwOGE0YzA0ZGFj
Li4xZjk2ODllYWRlZGFlZDdhOTAxNTA4ODM2NzRmZWU0ODI3MTNjNTAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENl
bnRlciBVU0EsIEluYy4KQEAgLTQ5LDcgKzQ5LDcgQEAKIE9CSkNfQ0xBU1MgTlNGb250OwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0UoQ1QpCiB0eXBlZGVmIGNvbnN0IHN0
cnVjdCBfX0NURm9udCogQ1RGb250UmVmOwogI2VuZGlmCiAKQEAgLTgyLDcgKzgyLDcgQEAgcHVi
bGljOgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0Jv
bGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0
aW9uOjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVn
dWxhcldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4
dFJlbmRlcmluZyk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0UoQ1QpCiAgICAgV0VC
Q09SRV9FWFBPUlQgRm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wg
c3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwgRm9u
dE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJp
YW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9
IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZyk7CiAjZW5kaWYKIApAQCAtMTE5
LDcgKzExOSw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZUdESSgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlR0RJOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDVCkKICAg
ICBDVEZvbnRSZWYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5nZXQoKTsgfQogICAgIFdF
QkNPUkVfRVhQT1JUIENURm9udFJlZiByZWdpc3RlcmVkRm9udCgpIGNvbnN0OyAvLyBSZXR1cm5z
IG51bGxwdHIgaWZmIHRoZSBmb250IGlzIG5vdCByZWdpc3RlcmVkLCBzdWNoIGFzIHdlYiBmb250
cyAob3RoZXJ3aXNlIHJldHVybnMgZm9udCgpKS4KIApAQCAtMjIyLDcgKzIyMiw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBidWlsZFNjYWxlZEZvbnQoY2Fpcm9fZm9udF9mYWNlX3QqKTsKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogICAgIC8vIEZJWE1FOiBHZXQg
cmlkIG9mIG9uZSBvZiB0aGVzZS4gVGhlc2UgdHdvIGZvbnRzIGFyZSBzdWJ0bHkgZGlmZmVyZW50
LCBhbmQgaXQgaXMgbm90IG9idmlvdXMgd2hpY2ggb25lIHRvIHVzZSB3aGVyZS4KICAgICBSZXRh
aW5QdHI8Q1RGb250UmVmPiBtX2ZvbnQ7CiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q1RGb250UmVm
PiBtX2N0Rm9udDsKQEAgLTI3Niw3ICsyNzYsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi0j
aWYgUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogYm9vbCBpc1N5c3RlbUZvbnQoQ1RGb250
UmVmKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQppbmRleCAwYTIzZDZhNTE0ZjBjMWU0
MmVhNDNkNzVlODFmMTdmMjMxNjZkZjU4Li5mZGM2ODkyN2ZmOTkxZTJlMjFkYmM3YTJlNmQ3YmIx
ZjhiYTNiZDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTIzLDE5ICsyMyw4IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKLSNpbXBvcnQgIkNvbXBs
ZXhUZXh0Q29udHJvbGxlci5oIgotI2ltcG9ydCAiRGFzaEFycmF5LmgiCi0jaW1wb3J0ICJGb250
LmgiCi0jaW1wb3J0ICJHbHlwaEJ1ZmZlci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW1wb3J0ICJMYXlvdXRSZWN0LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0IDxw
YWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9Db3Jl
VGV4dFNQSS5oPgotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0j
ZW5kaWYKLSNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogI2ltcG9ydCA8cGFsL2lvcy9VSUtpdFNvZnRMaW5rLmg+CkBAIC00OSwyNCArMzgsNiBA
QCBTT0ZUX0xJTktfQ0xBU1MoQ29yZVVJLCBDVUlTdHlsZUVmZmVjdENvbmZpZ3VyYXRpb24pCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29uZnVzaW5nbHksIGV2ZW4gd2hlbiBDR0ZvbnRS
ZW5kZXJpbmdHZXRGb250U21vb3RoaW5nRGlzYWJsZWQoKSByZXR1cm5zIHRydWUsIENHQ29udGV4
dFNldFNob3VsZFNtb290aEZvbnRzKCkgc3RpbGwgaW1wYWN0cyB0ZXh0Ci0vLyByZW5kZXJpbmcs
IHdoaWNoIGlzIHdoeSB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlICJzdWJwaXhlbCBhbnRpYWxpYXNp
bmciIHJhdGhlciB0aGFuICJzbW9vdGhpbmciIHRlcm1pbm9sb2d5LgotYm9vbCBGb250Q2FzY2Fk
ZTo6aXNTdWJwaXhlbEFudGlhbGlhc2luZ0F2YWlsYWJsZSgpCi17Ci0jaWYgSEFWRShDR19GT05U
X1JFTkRFUklOR19HRVRfRk9OVF9TTU9PVEhJTkdfRElTQUJMRUQpCi0gICAgc3RhdGljIGJvb2wg
c3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkOwotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdICgpIHsKLSAgICAgICAg
c3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkID0gIUNHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9v
dGhpbmdEaXNhYmxlZCgpOwotICAgIH0pOwotICAgIHJldHVybiBzdWJwaXhlbEFudGlhbGlhc2lu
Z0VuYWJsZWQ7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQot
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBib29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1
cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQogewogICAgIHJldHVybiB0cnVlOwpAQCAt
NzcsMjggKzQ4LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBo
c0luQ29tcGxleFRleHQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZv
aWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9pbnQs
IDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHU2l6ZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50KQotewotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9
IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCkp
OwotICAgIHBvc2l0aW9uc1swXSA9IENHUG9pbnRaZXJvOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplQXBw
bHlBZmZpbmVUcmFuc2Zvcm0oYWR2YW5jZXNbaSAtIDFdLCBtYXRyaXgpOwotICAgICAgICBwb3Np
dGlvbnNbaV0ueCA9IHBvc2l0aW9uc1tpIC0gMV0ueCArIGFkdmFuY2Uud2lkdGg7Ci0gICAgICAg
IHBvc2l0aW9uc1tpXS55ID0gcG9zaXRpb25zW2kgLSAxXS55ICsgYWR2YW5jZS5oZWlnaHQ7Ci0g
ICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3Qo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotI2lmIEVOQUJMRShMRVRURVJQUkVT
UykKLSAgICByZXR1cm4gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKS5jb250YWlucyhUZXh0RHJh
d2luZ01vZGU6OkxldHRlcnByZXNzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBzaG93TGV0dGVy
cHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
Rm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dHbHlwaCog
Z2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKK3ZvaWQgc2hv
d0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29yZUNvbnRleHQsIGNvbnN0IENH
R2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCiB7
CiAjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQogICAgIGlmICghY291bnQpCkBAIC0xNTAsMjI3ICsx
MDAsNCBAQCBzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRgogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lk
IHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZv
bnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNv
bnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQotewotICAgIGlmICghY291bnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0
LCBwb2ludC54KCksIHBvaW50LnkoKSk7Ci0KLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBw
bGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwotICAgIFZlY3RvcjxDR1BvaW50LCAy
NTY+IHBvc2l0aW9ucyhjb3VudCk7Ci0gICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigp
ID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gcm90YXRlTGVmdFRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgwLCAtMSwgMSwg
MCwgMCwgMCk7Ci0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHRleHRNYXRyaXggPSBDR0NvbnRl
eHRHZXRUZXh0TWF0cml4KGNvbnRleHQpOwotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBydW5N
YXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCh0ZXh0TWF0cml4LCByb3RhdGVMZWZ0VHJh
bnNmb3JtKTsKLSAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChydW5NYXRyaXgs
IGNvbnRleHQpOwotCi0gICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25zKGNv
dW50KTsKLSAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMocGxh
dGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50KTsK
LQotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9y
bUludmVydChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKLQotICAgICAgICBDR1Bv
aW50IHBvc2l0aW9uID0gRmxvYXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQuZm9u
dE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1l
dHJpY3MoKS5mbG9hdEFzY2VudCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENHU2l6ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFw
cGx5QWZmaW5lVHJhbnNmb3JtKHRyYW5zbGF0aW9uc1tpXSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7
Ci0gICAgICAgICAgICBwb3NpdGlvbnNbaV0gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0o
Q0dQb2ludE1ha2UocG9zaXRpb24ueCAtIHRyYW5zbGF0aW9uLndpZHRoLCBwb3NpdGlvbi55ICsg
dHJhbnNsYXRpb24uaGVpZ2h0KSwgdHJhbnNmb3JtKTsKLSAgICAgICAgICAgIHBvc2l0aW9uLngg
Kz0gYWR2YW5jZXNbaV0ud2lkdGg7Ci0gICAgICAgICAgICBwb3NpdGlvbi55ICs9IGFkdmFuY2Vz
W2ldLmhlaWdodDsKLSAgICAgICAgfQotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3Jt
RGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3Np
dGlvbnMocG9zaXRpb25zLCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQpOwotICAgICAgICBDVEZv
bnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0
YSgpLCBjb3VudCwgY29udGV4dCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBzZXRDR0ZvbnRS
ZW5kZXJpbmdNb2RlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBDR0NvbnRleHRT
ZXRTaG91bGRBbnRpYWxpYXNGb250cyhjZ0NvbnRleHQsIHRydWUpOwotCi0gICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gY29udGV4dFRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpOwot
ICAgIGJvb2wgaXNUcmFuc2xhdGlvbk9ySW50ZWdyYWxTY2FsZSA9IFdURjo6aXNJbnRlZ3JhbChj
b250ZXh0VHJhbnNmb3JtLmEpICYmIFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmQp
ICYmIGNvbnRleHRUcmFuc2Zvcm0uYiA9PSAwLmYgJiYgY29udGV4dFRyYW5zZm9ybS5jID09IDAu
ZjsKLSAgICBib29sIGlzUm90YXRlZCA9ICgoY29udGV4dFRyYW5zZm9ybS5iIHx8IGNvbnRleHRU
cmFuc2Zvcm0uYykgJiYgKGNvbnRleHRUcmFuc2Zvcm0uYSB8fCBjb250ZXh0VHJhbnNmb3JtLmQp
KTsKLSAgICBib29sIGRvU3VicGl4ZWxRdWFudGl6YXRpb24gPSBpc1RyYW5zbGF0aW9uT3JJbnRl
Z3JhbFNjYWxlIHx8ICghaXNSb3RhdGVkICYmIGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKCkpOwotCi0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRz
KGNnQ29udGV4dCwgdHJ1ZSk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKGNnQ29udGV4dCwgZG9TdWJwaXhlbFF1YW50aXphdGlvbik7Ci19Ci0KLXZvaWQgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9v
dGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
cGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKLSAgICBpZiAoIXBsYXRmb3JtRGF0
YS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMg
PSB0cnVlOwotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgPSB0cnVlOwotICAgIAotICAgIGlm
ICghZm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKLSAgICAgICAgc21vb3RoaW5nTW9kZSA9IEZv
bnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKLQotICAgIHN3aXRjaCAoc21vb3RoaW5nTW9k
ZSkgewotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOgotICAgICAgICBz
aG91bGRTbW9vdGhGb250cyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRT
bW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6
OlN1YnBpeGVsQW50aWFsaWFzZWQ6Ci0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOgot
ICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKLSAgICAgICAgc2hvdWxkU21vb3RoRm9u
dHMgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFzaG91bGRVc2VT
bW9vdGhpbmcoKSkKLSAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3Ro
aW5nID0gQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0KTsKLSAgICBpZiAo
c2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKQotICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIHNob3VsZFNtb290
aEZvbnRzKTsKLSNlbmRpZgotCi0gICAgYm9vbCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyA9IENH
Q29udGV4dEdldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQpOwotICAgIGlmIChzaG91bGRBbnRp
YWxpYXMgIT0gb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCi0gICAgICAgIENHQ29udGV4dFNldFNo
b3VsZEFudGlhbGlhcyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBib29sIHVz
ZUxldHRlcnByZXNzRWZmZWN0ID0gc2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QoY29udGV4dCk7
Ci0gICAgRmxvYXRQb2ludCBwb2ludCA9IGFuY2hvclBvaW50OwotCi0gICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKLSAgICBpZiAoIXBsYXRm
b3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpKQotICAgICAgICBtYXRyaXggPSBDVEZvbnRHZXRN
YXRyaXgocGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgbWF0cml4LmIgPSAtbWF0cml4LmI7Ci0g
ICAgbWF0cml4LmQgPSAtbWF0cml4LmQ7Ci0gICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNP
YmxpcXVlKCkpIHsKLSAgICAgICAgc3RhdGljIGZsb2F0IG9ibGlxdWVTa2V3ID0gdGFuZihzeW50
aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxvYXQgLyAxODApOwotICAgICAgICBpZiAocGxhdGZv
cm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAg
ICAgICAgICAgaWYgKGZvbnQuaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQotICAgICAgICAg
ICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlKDEsIG9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0
cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgLW9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1D
b25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgLW9ibGlxdWVTa2V3LCAx
LCAwLCAwKSk7Ci0gICAgfQotICAgIFNjb3BlZFRleHRNYXRyaXggcmVzdG9yZXIobWF0cml4LCBj
Z0NvbnRleHQpOwotCi0gICAgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShjb250ZXh0KTsKLSAgICBD
R0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOwotCi0g
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENv
bG9yIHNoYWRvd0NvbG9yOwotICAgIGNvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRDVE0g
PSBjb250ZXh0LmdldENUTSgpOwotICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250
LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCAmJiAh
Y29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSB7Ci0gICAgICAg
IEZsb2F0U2l6ZSBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscyA9IGNvbnRleHRDVE0u
bWFwU2l6ZShGbG9hdFNpemUoMSwgMCkpOwotICAgICAgICBmbG9hdCBob3Jpem9udGFsVW5pdExl
bmd0aEluRGV2aWNlUGl4ZWxzID0gc3FydGYoaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhl
bHMud2lkdGgoKSAqIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKyBo
b3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWlnaHQoKSAqIGhvcml6b250YWxVbml0
U2l6ZUluRGV2aWNlUGl4ZWxzLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKGhvcml6b250YWxVbml0
TGVuZ3RoSW5EZXZpY2VQaXhlbHMpIHsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEg
c2NhbGVkIGRvd24gY29udGV4dCB3b24ndCBibG93IHVwIHRoZSBnYXAgYmV0d2VlbiB0aGUgZ2x5
cGhzLiAKLSAgICAgICAgICAgIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBzdGQ6Om1pbihzeW50aGV0
aWNCb2xkT2Zmc2V0LCBzeW50aGV0aWNCb2xkT2Zmc2V0IC8gaG9yaXpvbnRhbFVuaXRMZW5ndGhJ
bkRldmljZVBpeGVscyk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm9vbCBoYXNTaW1wbGVT
aGFkb3cgPSBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6Rmls
bCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0
YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYg
IWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRv
dykgewotICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBv
ZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxp
YXNpbmcuCi0gICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLSAgICAgICAgQ29sb3IgZmls
bENvbG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENv
bG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFs
cGhhQXNGbG9hdCgpKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENv
bG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZz
ZXQud2lkdGgoKTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3Jt
cywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28g
ZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkg
KyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50
KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIu
Z2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLSAg
ICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBzaG93R2x5cGhzV2l0
aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBz
aGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLSAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKLSAgICB9Ci0KLSAgICBpZiAodXNlTGV0dGVycHJlc3NF
ZmZlY3QpCi0gICAgICAgIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50
LCBmb250LCBjb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFk
dmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwotICAgIGVsc2UKLSAgICAgICAgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwotICAgIGlmIChzeW50
aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9p
bnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY2dD
b250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZy
b20pLCBudW1HbHlwaHMpOwotCi0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykKLSAgICAgICAgY29u
dGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0K
LSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0g
b3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91
bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZyk7
Ci0jZW5kaWYKLQotICAgIGlmIChzaG91bGRBbnRpYWxpYXMgIT0gb3JpZ2luYWxTaG91bGRBbnRp
YWxpYXMpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQsIG9y
aWdpbmFsU2hvdWxkQW50aWFsaWFzKTsKLX0KLQotYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFyeUZv
bnRJc1N5c3RlbUZvbnQoKSBjb25zdAotewotICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJp
bWFyeUZvbnQoKTsKLSAgICByZXR1cm4gaXNTeXN0ZW1Gb250KGZvbnREYXRhLnBsYXRmb3JtRGF0
YSgpLmN0Rm9udCgpKTsKLX0KLQotLy8gRklYTUU6IFVzZSB0aGlzIG9uIGFsbCBwb3J0cy4KLWNv
bnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgVUNo
YXIzMiBiYXNlQ2hhcmFjdGVyOwotICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsK
LSAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBiYXNlQ2hhcmFjdGVyTGVuZ3RoLCBsZW5ndGgsIGJh
c2VDaGFyYWN0ZXIpOwotCi0gICAgR2x5cGhEYXRhIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEgPSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3RlciwgZmFsc2UsIE5vcm1hbFZhcmlhbnQp
OwotCi0gICAgaWYgKCFiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGlmIChsZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKLQotICAgIGJvb2wgdHJp
ZWRCYXNlQ2hhcmFjdGVyRm9udCA9IGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
IWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICBjb25zdCBGb250
KiBmb250ID0gZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0
ZXIpOwotICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYmFzZUNoYXJhY3RlciA+PSAweDA2MDAgJiYg
YmFzZUNoYXJhY3RlciA8PSAweDA2ZmYgJiYgZm9udC0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZgotICAgICAgICBpZiAoZm9udC0+cGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7
Ci0gICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAm
JiAhZm9udC0+aGFzVmVydGljYWxHbHlwaHMoKSkKLSAgICAgICAgICAgICAgICBmb250ID0gJmZv
bnQtPmJyb2tlbklkZW9ncmFwaEZvbnQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fZm9udERl
c2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9yaWVudGF0
aW9uOjpNaXhlZCkgewotICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHZlcnRpY2FsUmlnaHRG
b250ID0gZm9udC0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpOwotICAgICAgICAgICAg
ICAgIEdseXBoIHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250LmdseXBoRm9y
Q2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJp
Z2h0R2x5cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgICAgICAg
ICAgICAgZm9udCA9ICZ2ZXJ0aWNhbFJpZ2h0Rm9udDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgRm9udCYgdXByaWdodEZvbnQgPSBmb250LT51cHJpZ2h0T3Jp
ZW50YXRpb25Gb250KCk7Ci0gICAgICAgICAgICAgICAgR2x5cGggdXByaWdodEdseXBoID0gdXBy
aWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKHVwcmlnaHRHbHlwaCAhPSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAg
ICAgICAgICAgICAgICAgICBmb250ID0gJnVwcmlnaHRGb250OwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGZvbnQgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250
KQotICAgICAgICAgICAgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKGZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMs
IGxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gZm9udDsKLSAgICB9Ci0KLSAgICBpZiAoIXRy
aWVkQmFzZUNoYXJhY3RlckZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250ICYmIGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udC0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2Vx
dWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJH
bHlwaERhdGEuZm9udDsKLQotICAgIHJldHVybiBGb250OjpzeXN0ZW1GYWxsYmFjaygpOwotfQot
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Y2Y2NGZmYTlkZjUxODc2MTM5MTRmNDdhNjVmMDY2OWJm
MzM5ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENvY29hLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJGb250LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBG
b250OjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2Eu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OWJlMWQ0ZjM5NTIzMjUzMzA1NjQ1
MGY3YmM4MmE0OTMyMTNhMzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29h
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNzczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250LmgiCi0KLSNpbXBvcnQgIkNvbG9yLmgiCi0j
aW1wb3J0ICJGbG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvbnRDYWNoZS5oIgotI2ltcG9ydCAiRm9u
dENhc2NhZGUuaCIKLSNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgotI2ltcG9ydCAiTG9jYWxl
Q29jb2EuaCIKLSNpbXBvcnQgIk9wZW5UeXBlQ0cuaCIKLSNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5o
IgotI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+Ci0jaW1w
b3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2Nv
YS9Db3JlVGV4dFNQSS5oPgotI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgotI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0
Lmg+Ci0jZW5kaWYKLQotCi0jaWYgVVNFKEFQUEtJVCkKLUBpbnRlcmZhY2UgTlNGb250IChXZWJB
cHBLaXRTZWNyZXRBUEkpCi0tIChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOwotQGVuZAotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBib29sIGNhc2VJbnNlbnNp
dGl2ZUNvbXBhcmUoQ0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYikKLXsKLSAgICByZXR1cm4g
YSAmJiBDRlN0cmluZ0NvbXBhcmUoYSwgYiwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0g
a0NGQ29tcGFyZUVxdWFsVG87Ci19Ci0KLXN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBo
cyhDVEZvbnRSZWYgZm9udCkKLXsKLSAgICByZXR1cm4gZm9udEhhc0VpdGhlclRhYmxlKGZvbnQs
IGtDVEZvbnRUYWJsZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcpOwotfQotCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLWJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0
cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKLXsKLSAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaW1lcyBOZXcgUm9tYW4gYW5kIEFyaWFsIGFy
ZSBub3QgcGVyZm9ybWFudCBlbm91Z2ggdG8gdXNlLiA8cmRhcjovL3Byb2JsZW0vMjEzMzMzMjY+
Ci0gICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5j
dGlvbiBvbmNlIHRoZSBhYm92ZSBidWcgaXMgZml4ZWQuCi0gICAgcmV0dXJuIChDRlN0cmluZ0Nv
bXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NG
Q29tcGFyZUVxdWFsVG8pCi0gICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFs
IiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Ci19Ci0KLXN0YXRp
YyBjb25zdCBmbG9hdCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKLQotc3RhdGljIGJv
b2wgc2hvdWxkVXNlQWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZv
bnQpKTsKLQotICAgIGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgoZmFtaWx5
TmFtZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjYXNlSW5z
ZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJUaW1lcyIpKQotICAgICAg
ICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIZWx2
ZXRpY2EiKSkKLSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdl
dCgpLCBDRlNUUigiLkhlbHZldGljYSBOZXVlVUkiKSk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBi
b29sIG5lZWRzQXNjZW50QWRqdXN0bWVudChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQotewotICAg
IHJldHVybiBmYW1pbHlOYW1lICYmIChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUs
IENGU1RSKCJUaW1lcyIpKQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWls
eU5hbWUsIENGU1RSKCJIZWx2ZXRpY2EiKSkKLSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQ291cmllciIpKSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0
aWMgYm9vbCBpc0FoZW1Gb250KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJu
IGZhbWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigi
QWhlbSIpKTsKLX0KLQotYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWdu
ZWQgdGFibGVUYWcpCi17Ci0gICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlB
dmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAg
ICBpZiAoIXRhYmxlVGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENGSW5kZXggbnVt
VGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRklu
ZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0
byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsK
LSAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENU
Rm9udFJlZiBjdEZvbnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKQot
ewotICAgIGF1dG8gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVz
KGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKCF0YWJsZVRh
Z3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJy
YXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAgIGF1dG8gdGFnID0gc3RhdGlj
X2Nhc3Q8Q1RGb250VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7Ci0gICAgICAgIGlmICh0
YWcgPT0gdGFibGVUYWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3Jt
SW5pdCgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX3N5bnRoZXRpY0JvbGRP
ZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyBjZWlsZihtX3BsYXRmb3Jt
RGF0YS5zaXplKCkgLyAyNC4wZikgOiAwLmY7Ci0jZWxzZQotICAgIG1fc3ludGhldGljQm9sZE9m
ZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0jZW5k
aWYKLQotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBDVEZvbnRHZXRVbml0c1BlckVtKG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpOwotICAgIENHRmxvYXQgY2FwSGVpZ2h0ID0gcG9pbnRTaXplID8gQ1RGb250R2V0Q2Fw
SGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOwotICAgIENHRmxvYXQgbGluZUdhcCA9
IHBvaW50U2l6ZSA/IENURm9udEdldExlYWRpbmcobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7
Ci0gICAgQ0dGbG9hdCBhc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRBc2NlbnQobV9wbGF0
Zm9ybURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBkZXNjZW50ID0gcG9pbnRTaXplID8g
Q1RGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLQotICAgIC8vIFRo
ZSBPcGVuIEZvbnQgRm9ybWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBVU0VfVFlQT19NRVRSSUNTIGZs
YWcgYXMgZm9sbG93czoKLSAgICAvLyAiSWYgc2V0LCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRl
ZCB0byB1c2UgT1MvMi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlwb0Rlc2NlbmRlcisgT1MvMi5z
VHlwb0xpbmVHYXAgYXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5lIHNwYWNpbmcgZm9yIHRoaXMg
Zm9udC4iCi0gICAgLy8gT24gT1MgWCwgd2Ugb25seSBhcHBseSB0aGlzIHJ1bGUgaW4gdGhlIGlt
cG9ydGFudCBjYXNlIG9mIGZvbnRzIHdpdGggYSBNQVRIIHRhYmxlLgotICAgIGlmIChmb250SGFz
VGFibGUobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRUYWJsZU1BVEgpKSB7Ci0gICAg
ICAgIHNob3J0IHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcDsKLSAgICAgICAg
aWYgKE9wZW5UeXBlOjp0cnlHZXRUeXBvTWV0cmljcyhtX3BsYXRmb3JtRGF0YS5mb250KCksIHR5
cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcCkpIHsKLSAgICAgICAgICAgIGFzY2Vu
dCA9IHNjYWxlRW1Ub1VuaXRzKHR5cG9Bc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwot
ICAgICAgICAgICAgZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyh0eXBvRGVzY2VudCwgdW5pdHNQ
ZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgICAgICBsaW5lR2FwID0gc2NhbGVFbVRvVW5pdHMo
dHlwb0xpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShtX3Bs
YXRmb3JtRGF0YS5mb250KCkpKTsKLQotICAgIC8vIERpc2FibGUgYW50aWFsaWFzaW5nIHdoZW4g
cmVuZGVyaW5nIHdpdGggQWhlbSBiZWNhdXNlIG1hbnkgdGVzdHMgcmVxdWlyZSB0aGlzLgotICAg
IGlmIChpc0FoZW1Gb250KGZhbWlseU5hbWUuZ2V0KCkpKQotICAgICAgICBtX2FsbG93c0FudGlh
bGlhc2luZyA9IGZhbHNlOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFdlIG5lZWQgdG8g
YWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhl
Ci0gICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRz
IHRoYXQgYXJlIHRoZSBkZSBmYWN0bwotICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBh
ZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcwotICAgIC8vIGluY29ycmVjdGx5IGFk
ZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAot
ICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KLSAgICBpZiAob3JpZ2luKCkgPT0gT3Jp
Z2luOjpMb2NhbCAmJiBuZWVkc0FzY2VudEFkanVzdG1lbnQoZmFtaWx5TmFtZS5nZXQoKSkpCi0g
ICAgICAgIGFzY2VudCArPSBzdGQ6OnJvdW5kKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVmKTsK
LSNlbmRpZgotCi0gICAgLy8gQ29tcHV0ZSBsaW5lIHNwYWNpbmcgYmVmb3JlIHRoZSBsaW5lIG1l
dHJpY3MgaGFja3MgYXJlIGFwcGxpZWQuCi0gICAgZmxvYXQgbGluZVNwYWNpbmcgPSBscm91bmRm
KGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKTsKLQotI2lmIFBM
QVRGT1JNKE1BQykKLSAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyBy
b29tIGZvciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81
Mzg2MTgzPgotICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgZmFtaWx5TmFt
ZSAmJiBDRlN0cmluZ0hhc1ByZWZpeChmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiSGlyYWdpbm8i
KSkpIHsKLSAgICAgICAgbGluZUdhcCAtPSAzIC0gZGVzY2VudDsKLSAgICAgICAgZGVzY2VudCA9
IDM7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjaygpKQotICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2Fs
R2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgQ0dGbG9hdCBhZGp1c3RtZW50ID0gc2hvdWxkVXNlQWRqdXN0bWVudChtX3BsYXRm
b3JtRGF0YS5mb250KCkpID8gY2VpbCgoYXNjZW50ICsgZGVzY2VudCkgKiBrTGluZUhlaWdodEFk
anVzdG1lbnQpIDogMDsKLQotICAgIGxpbmVHYXAgPSBjZWlsZihsaW5lR2FwKTsKLSAgICBsaW5l
U3BhY2luZyA9IGNlaWwoYXNjZW50KSArIGFkanVzdG1lbnQgKyBjZWlsKGRlc2NlbnQpICsgbGlu
ZUdhcDsKLSAgICBhc2NlbnQgPSBjZWlsZihhc2NlbnQgKyBhZGp1c3RtZW50KTsKLSAgICBkZXNj
ZW50ID0gY2VpbGYoZGVzY2VudCk7Ci0KLSAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9
IGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7Ci0j
ZW5kaWYKLQotICAgIENHRmxvYXQgeEhlaWdodCA9IDA7Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRh
LnNpemUoKSkgewotICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBG
b250T3JpZW50YXRpb246Okhvcml6b250YWwpIHsKLSAgICAgICAgICAgIC8vIE1lYXN1cmUgdGhl
IGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRl
bmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKLSAgICAgICAgICAgIC8vIHJl
cG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGgg
dGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgICAgICBHbHlwaCB4R2x5cGggPSBn
bHlwaEZvckNoYXJhY3RlcigneCcpOwotICAgICAgICAgICAgaWYgKHhHbHlwaCkKLSAgICAgICAg
ICAgICAgICB4SGVpZ2h0ID0gLUNHUmVjdEdldE1pblkocGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCh4
R2x5cGgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4SGVpZ2h0ID0gQ1RG
b250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZm9udE1l
dHJpY3MoKS54SGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1Bl
ckVtKHVuaXRzUGVyRW0pOwotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0g
ICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Mu
c2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxp
bmVHYXApOwotICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBtX2Zv
bnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNz
LnNldFVuZGVybGluZVBvc2l0aW9uKC1DVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihtX3BsYXRm
b3JtRGF0YS5mb250KCkpKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVRoaWNrbmVz
cyhDVEZvbnRHZXRVbmRlcmxpbmVUaGlja25lc3MobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Ci19
Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBtX2F2Z0NoYXJX
aWR0aCA9IDA7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwOwotCi0gICAgYXV0byBvczJUYWJsZSA9
IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udFRh
YmxlT1MyLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAob3MyVGFibGUg
JiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7Ci0gICAgICAgIGNvbnN0
IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKLSAgICAgICAg
U0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKLSAgICAgICAg
bV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1l
dHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICB9Ci0KLSAg
ICBhdXRvIGhlYWRUYWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSwga0NURm9udFRhYmxlSGVhZCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7
Ci0gICAgaWYgKGhlYWRUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+
PSA0MikgewotICAgICAgICBjb25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVh
ZFRhYmxlLmdldCgpKTsKLSAgICAgICAgdXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBo
ZWFkWzM3XTsKLSAgICAgICAgdXNob3J0IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQx
XTsKLSAgICAgICAgU0ludDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKLSAg
ICAgICAgU0ludDE2IHhNYXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKLSAgICAgICAg
ZmxvYXQgZGlmZiA9IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7Ci0gICAgICAgIG1f
bWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1Bl
ckVtKCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNr
IHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2Ug
dmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KLSAgICBpbml0Q2hhcldpZHRocygpOwot
fQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLWJvb2wgRm9udDo6dmFy
aWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9u
dFZhcmlhbnRDYXBzLCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKLXsKLSNpZiAoUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQotICAgIEdseXBo
IGdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAoIWdseXBoKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fwcykgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDogewotICAgICAgICBhdXRvJiBzdXBwb3J0
ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9y
dGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBj
YXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9
IGdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVk
LnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6IHsKLSAgICAgICAgYXV0byYgc3VwcG9ydGVkID0g
Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRl
ZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0gICAgY2Fz
ZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZTogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQg
PSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1cHBv
cnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQt
Y2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOwotCi0gICAgc3dpdGNoIChmb250VmFy
aWFudENhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6Ci0gICAgY2FzZSBG
b250VmFyaWFudENhcHM6OlBldGl0ZToKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21h
bGw6Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRz
IHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotI2VuZGlmCi19Ci0KLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFS
R0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXksIGludCBy
YXdWYWx1ZSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihD
Rk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3
VmFsdWUpKTsKLSAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVGZWF0dXJl
VGFnLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVz
W10gPSB7IGtleSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVO
R1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJhd1ZhbHVl
KQotewotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5KSk7Ci0g
ICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7Ci0gICAg
Q0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwga0NU
Rm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVz
W10gPSB7IGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJS
QVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVuaW9uQml0VmVj
dG9ycyhCaXRWZWN0b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQotewotICAgIENG
SW5kZXggbGVuZ3RoID0gQ0ZCaXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOwotICAgIHJlc3VsdC5l
bnN1cmVTaXplKGxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBtaW4gPSAwOwotICAgIHdoaWxlIChtaW4g
PCBsZW5ndGgpIHsKLSAgICAgICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3RvckdldEZp
cnN0SW5kZXhPZkJpdChzb3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7
Ci0gICAgICAgIGlmIChuZXh0SW5kZXggPT0ga0NGTm90Rm91bmQpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgcmVzdWx0LnNldChuZXh0SW5kZXgsIHRydWUpOwotICAgICAgICBtaW4gPSBu
ZXh0SW5kZXggKyAxOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5cGVDb3Zl
cmFnZShDRlN0cmluZ1JlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1
bHQpCi17Ci0gICAgUmV0YWluUHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENU
Rm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVuVHlwZURp
Y3Rpb25hcnkoZmVhdHVyZSwgMSkuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0
LCBzb3VyY2UuZ2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdl
KGludCB0eXBlLCBpbnQgc2VsZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3Vs
dCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RG
b250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGlj
dGlvbmFyeSh0eXBlLCBzZWxlY3RvcikuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMocmVz
dWx0LCBzb3VyY2UuZ2V0KCkpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1
cHBvcnRlZEJ5U21hbGxDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVk
QnlTbWFsbENhcHMpIHsKLSAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJp
dFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiks
IHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1
ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xv
d2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhz
U3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBo
c1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9u
dDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKSBjb25zdAotewotICAgIGlmICghbV9n
bHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsU21hbGxDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292
ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBv
cnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVy
YWdlKENGU1RSKCJjMnNjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0
ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFn
ZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURh
dGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7Ci0g
ICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VT
bWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9nbHlwaHNTdXBw
b3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6
OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBo
c1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0
aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENG
U1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBl
dGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2Vy
Q2FzZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZv
bnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgfQotICAg
IHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25z
dCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcykgewotICAgICAg
ICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwotICAgICAg
ICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZv
bnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgICAg
IGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9u
dCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAg
aW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNh
cHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxs
UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBw
ZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCku
Zm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCk7Ci19
Ci0jZW5kaWYKLQotc3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChDVEZv
bnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBDVEZv
bnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKQotewotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoc3ludGhldGljQm9sZCkKLSAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250
Qm9sZFRyYWl0OwotICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCi0gICAgICAgIGZvbnRUcmFpdHMg
fD0ga0NURm9udEl0YWxpY1RyYWl0OwotCi0gICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVk
Rm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOwotCi0gICAgYm9vbCB1
c2VkU3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShz
Y2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7Ci0gICAgYm9vbCB1c2VkU3ludGhl
dGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxl
ZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEg
c2NhbGVkRm9udERhdGEoZm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0
aWNPYmxpcXVlLCBvcmllbnRhdGlvbik7Ci0KLSAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxl
ZEZvbnREYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0dXJlKENG
RGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWlu
c0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlD
b250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOwotfQotCi1z
dGF0aWMgaW5saW5lIGJvb2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1
cmUpCi17Ci0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZv
bnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZl
YXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKLX0KLQotc3RhdGlj
IGlubGluZSBPcHRpb25hbDxDRlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFy
eVJlZiBmZWF0dXJlKQotewotICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7
Ci0gICAgQ0ZTdHJpbmdSZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKLSAgICBp
bnQgcmF3VmFsdWU7Ci0gICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJl
clJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVZhbHVlKSk7Ci0gICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NG
TnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1
Y2Nlc3MpOwotICAgIHJldHVybiByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVmPih0YWcp
IDogV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQsIGludD4g
dHJ1ZVR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIEFTU0VSVChp
c1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKSk7Ci0gICAgaW50IHJhd1R5cGU7Ci0gICAgQ0ZOdW1i
ZXJSZWYgdHlwZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1
ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgYXV0byBz
dWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlw
ZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICBpbnQgcmF3U2Vs
ZWN0b3I7Ci0gICAgQ0ZOdW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3Rvcklk
ZW50aWZpZXJLZXkpKTsKLSAgICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwg
a0NGTnVtYmVySW50VHlwZSwgJnJhd1NlbGVjdG9yKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCByYXdTZWxl
Y3Rvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9y
VHJ1ZVR5cGVGZWF0dXJlKGludCBrZXksIENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0
cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVzKGZvbnQp
KTsKLSAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5n
ZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsK
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7Ci0g
ICAgICAgIENGTnVtYmVyUmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50
aWZpZXJLZXkpKTsKLSAgICAgICAgaWYgKCFmZWF0dXJlS2V5KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGludCByYXdGZWF0dXJlS2V5OwotICAgICAgICBDRk51bWJlckdldFZhbHVl
KGZlYXR1cmVLZXksIGtDRk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKLSAgICAgICAg
aWYgKHJhd0ZlYXR1cmVLZXkgIT0ga2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgQ0ZBcnJheVJlZiBmZWF0dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVj
dG9yc0tleSkpOwotICAgICAgICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChmZWF0dXJlU2VsZWN0b3JzKTsKLSAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBqIDwgc2Vs
ZWN0b3JzQ291bnQ7ICsraikgewotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVT
ZWxlY3RvciA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJ
bmRleChmZWF0dXJlU2VsZWN0b3JzLCBqKSk7Ci0gICAgICAgICAgICBDRk51bWJlclJlZiBpc0Rl
ZmF1bHQgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVh
dHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOwotICAgICAg
ICAgICAgaWYgKCFpc0RlZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpbnQgcmF3SXNEZWZhdWx0OwotICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0Rl
ZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdJc0RlZmF1bHQpOwotICAgICAgICAgICAgaWYg
KCFyYXdJc0RlZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1
cmVTZWxlY3Rvciwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGlubGluZSBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVh
dHVyZSwgQ1RGb250UmVmIGZvbnQpCi17Ci0gICAgYm9vbCBpc09wZW5UeXBlID0gaXNPcGVuVHlw
ZUZlYXR1cmUoZmVhdHVyZSk7Ci0gICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1
cmUoZmVhdHVyZSk7Ci0gICAgaWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQotICAgICAg
ICByZXR1cm4gZmVhdHVyZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0
LgotICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOwotICAgIGlmIChpc09wZW5UeXBlKSB7Ci0gICAgICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9w
ZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1
YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigic21jcCIpKQotICAgICAgICAgICAgfHwgQ0ZF
cXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnNjIikpCi0gICAgICAgICAgICB8fCBD
RkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKLSAgICAgICAgICAgIHx8
IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKLSAgICAgICAg
ICAgIGludCByYXdaZXJvID0gMDsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4g
emVybyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVt
YmVySW50VHlwZSwgJnJhd1plcm8pKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRhZy52YWx1
ZSgpKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9w
ZW5UeXBlRmVhdHVyZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9w
ZW5UeXBlRmVhdHVyZVRhZykpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVz
dWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFyeUdldFZh
bHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGlmIChpc1RydWVUeXBlKSB7Ci0gICAgICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJl
UGFpciA9IHRydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKHRydWVUeXBlRmVh
dHVyZVBhaXIuZmlyc3QgPT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVyZVBhaXIu
c2Vjb25kID09IGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQ
YWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgewotICAgICAgICAg
ICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJ
ZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVy
ZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVs
dFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VU
eXBlLCBmb250KSkKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQu
Z2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0
b3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZh
bHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlm
aWVyS2V5KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9
PSBrVXBwZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVy
Q2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtV
cHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJL
ZXkpKTsKLSAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZh
dWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQpKQotICAg
ICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZl
YXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQo
KSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
ZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAgICAgICAg
Q0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9y
SWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1
cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0
aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+
KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0
ZSkpKTsKLSAgICBpZiAoIWZlYXR1cmVzKQotICAgICAgICByZXR1cm4gZm9udDsKLSAgICBDRklu
ZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7Ci0gICAg
UmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJh
eUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAma0NGVHlw
ZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNv
dW50OyArK2kpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2Fz
dDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCks
IGkpKTsKLSAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgpLCByZW1v
dmVkRmVhdHVyZShmZWF0dXJlLCBmb250KS5nZXQoKSk7Ci0gICAgfQotICAgIENGVHlwZVJlZiBr
ZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKLSAgICBDRlR5cGVS
ZWYgdmFsdWVzW10gPSB7IG5ld0ZlYXR1cmVzLmdldCgpIH07Ci0gICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOwotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9y
ID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRl
cy5nZXQoKSkpOwotICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmli
dXRlcyhmb250LCBDVEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlwdG9yLmdl
dCgpKSk7Ci19Ci0KLVJlZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNp
emFibGVGZWF0dXJlcygpIGNvbnN0Ci17Ci0gICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRh
LnNpemUoKTsKLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0
U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBSZXRhaW5QdHI8Q1RG
b250UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVz
KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250
KGN0Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRy
YWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50
aGV0aWNPYmxpcXVlKCkpOwotfQotCi1SZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVT
Y2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25z
dAotewotICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3Rv
cjsKLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBhdXRvIGZvbnREZXNjcmlwdG9y
ID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9wbGF0Zm9ybURhdGEuZm9udCgp
KSk7Ci0gICAgUmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVkRm9udCA9IGFkb3B0Q0YoQ1RGb250
Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxs
cHRyKSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoc2NhbGVkRm9udC5nZXQo
KSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0
Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVl
KCkpOwotfQotCi12b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIHVuc2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0
cmluZ0luZGV4LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25z
dCBBdG9tU3RyaW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0
RGlyZWN0aW9uKSBjb25zdAotewotICAgIFVOVVNFRF9QQVJBTShyZXF1aXJlc1NoYXBpbmcpOwot
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBHbHlwaEJ1ZmZlciBpbml0aWFsIGFkdmFuY2UuCi0j
aWYgVVNFKENURk9OVFNIQVBFR0xZUEhTKQotICAgIGF1dG8gaGFuZGxlciA9IF4oQ0ZSYW5nZSBy
YW5nZSwgQ0dHbHlwaCoqIG5ld0dseXBoc1BvaW50ZXIsIENHU2l6ZSoqIG5ld0FkdmFuY2VzUG9p
bnRlciwgQ0dQb2ludCoqIG5ld09mZnNldHNQb2ludGVyLCBDRkluZGV4KiogbmV3SW5kaWNlc1Bv
aW50ZXIpIHsKLSAgICAgICAgcmFuZ2UubG9jYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChyYW5n
ZS5sb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oMCkpLCBzdGF0aWNfY2FzdDxDRkluZGV4
PihnbHlwaEJ1ZmZlci5zaXplKCkpKTsKLSAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA8IDApIHsK
LSAgICAgICAgICAgIHJhbmdlLmxlbmd0aCA9IHN0ZDo6bWluKHJhbmdlLmxvY2F0aW9uLCAtcmFu
Z2UubGVuZ3RoKTsKLSAgICAgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gcmFuZ2UubG9jYXRpb24g
LSByYW5nZS5sZW5ndGg7Ci0gICAgICAgICAgICBnbHlwaEJ1ZmZlci5yZW1vdmUoYmVnaW5uaW5n
R2x5cGhJbmRleCArIHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLm1ha2VIb2xlKGJlZ2lubmluZ0dseXBoSW5kZXgg
KyByYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoLCB0aGlzKTsKLQotICAgICAgICAqbmV3R2x5
cGhzUG9pbnRlciA9IGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAg
ICAgICAgKm5ld0FkdmFuY2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmlu
Z0dseXBoSW5kZXgpOwotICAgICAgICAqbmV3T2Zmc2V0c1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5v
cmlnaW5zKGJlZ2lubmluZ0dseXBoSW5kZXgpOwotICAgICAgICAqbmV3SW5kaWNlc1BvaW50ZXIg
PSBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0gICAg
fTsKLQotICAgIGF1dG8gc3Vic3RyaW5nID0gdGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5nU3RyaW5n
SW5kZXgpOwotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Vic3RyaW5nLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwotICAgIGF1dG8gbG9jYWxlU3RyaW5nID0gTG9jYWxlQ29jb2E6
OmNhbm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmcobG9jYWxlKS5zdHJpbmcoKS5j
cmVhdGVDRlN0cmluZygpOwotICAgIENURm9udFNoYXBlT3B0aW9ucyBvcHRpb25zID0ga0NURm9u
dFNoYXBlV2l0aENsdXN0ZXJDb21wb3NpdGlvbgotICAgICAgICB8IChlbmFibGVLZXJuaW5nID8g
a0NURm9udFNoYXBlV2l0aEtlcm5pbmcgOiAwKQotICAgICAgICB8ICh0ZXh0RGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OlJUTCA/IGtDVEZvbnRTaGFwZVJpZ2h0VG9MZWZ0IDogMCk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5n
R2x5cGhJbmRleDsgKytpKQotICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVn
aW5uaW5nR2x5cGhJbmRleClbaV0gLT0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7Ci0KLSAgICBDVEZv
bnRTaGFwZUdseXBocygKLSAgICAgICAgbV9wbGF0Zm9ybURhdGEuY3RGb250KCksCi0gICAgICAg
IGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KSwKLSAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaElu
ZGV4KSksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQb2ludCo+KGdseXBoQnVmZmVyLm9y
aWdpbnMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLAotICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRz
SW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVW5pQ2hhcio+KHVwY29udmVydGVkQ2hhcmFjdGVycy5nZXQoKSksCi0gICAgICAgIGds
eXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgsCi0gICAgICAgIG9wdGlvbnMs
Ci0gICAgICAgIGxvY2FsZVN0cmluZy5nZXQoKSwKLSAgICAgICAgaGFuZGxlcik7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5
cGhJbmRleDsgKytpKQotICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5u
aW5nR2x5cGhJbmRleClbaV0gKz0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7Ci0KLSNlbHNlCi0KLSAg
ICBVTlVTRURfUEFSQU0oYmVnaW5uaW5nU3RyaW5nSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShs
b2NhbGUpOwotICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKLQotICAgIC8vIENURm9udFRyYW5zZm9y
bUdseXBocygpIG9wZXJhdGVzIGluIHZpc3VhbCBvcmRlciwgYnV0IFdpZHRoSXRlcmF0b3IgaXRl
cmF0ZXMgaW4gbG9naWNhbCBvcmRlci4KLSAgICAvLyBUZW1wb3JhcmlseSBwdXQgdXMgaW4gdmlz
dWFsIG9yZGVyIGp1c3QgZm9yIHRoZSBjYWxsLCB0aGVuIHB1dCB1cyBiYWNrIGludG8gbG9naWNh
bCBvcmRlciB3aGVuCi0gICAgLy8gdGhlIGNhbGwgaXMgZG9uZS4KLSAgICAvLyBXZSBkb24ndCBo
YXZlIGEgZ2xvYmFsIHZpZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlcjsgd2UncmUganVzdCBv
cGVyYXRpbmcgb24gYSBzaW5nbGUgY2h1bmsgb2YgaXQuCi0gICAgLy8gV2lkdGhJdGVyYXRvciBl
bmNvdW50ZXJzIHRoZSBjaHVua3Mgb3V0IGluIGxvZ2ljYWwgb3JkZXIsIHNvIHdlIGhhdmUgdG8g
bWFpbnRhaW4gdGhhdCBpbnZhcmlhbnQuCi0gICAgLy8gRXZlbnR1YWxseSwgRm9udENhc2NhZGU6
OmxheW91dFNpbXBsZVRleHQoKSB3aWxsIHJldmVyc2UgdGhlIHdob2xlIGJ1ZmZlciB0byBwdXQg
dGhlIGVudGlyZSB0aGluZwotICAgIC8vIGluIHZpc3VhbCBvcmRlciwgYnV0IHRoYXQncyBva2F5
IGJlY2F1c2UgaXQgaGFzIGEgdmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyLgotICAgIC8v
IE9uIHRoZSBvdGhlciBoYW5kLCBDVEZvbnRTaGFwZUdseXBocygpIGFjY2VwdHMgdGhlIGJ1ZmZl
ciBpbiBsb2dpY2FsIG9yZGVyIGJ1dCByZXR1cm5zIGl0IGluIHBoeXNpY2FsCi0gICAgLy8gb3Jk
ZXIsIHdoaWNoIG1lYW5zIHRoZSBzZWNvbmQgcmV2ZXJzZSgpIGluIHRoaXMgZnVuY3Rpb24gc3Rp
bGwgbmVlZHMgdG8gZXhlY3V0ZSB3aGVuCi0gICAgLy8gQ1RGb250U2hhcGVHbHlwaHMoKSBpcyBi
ZWluZyB1c2VkLgotICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkK
LSAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1
ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4KTsKLQotICAgIENURm9udFRyYW5zZm9y
bU9wdGlvbnMgb3B0aW9ucyA9IChlbmFibGVLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5
UG9zaXRpb25pbmcgOiAwKSB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmc7Ci0gICAgQ1RG
b250VHJhbnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5n
bHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLCBnbHlwaEJ1ZmZlci5zaXpl
KCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4LCBvcHRpb25zKTsKLSNlbmRpZgotCi0gICAgLy8gU2Vl
IHRoZSBjb21tZW50IGFib3ZlIGluIHRoaXMgZnVuY3Rpb24gd2hlcmUgdGhlIG90aGVyIGNhbGwg
dG8gcmV2ZXJzZSgpIGlzLgotICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OlJUTCkKLSAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBn
bHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4KTsKLX0KLQotc3RhdGljIGlu
dCBleHRyYWN0TnVtYmVyKENGTnVtYmVyUmVmIG51bWJlcikKLXsKLSAgICBpbnQgcmVzdWx0ID0g
MDsKLSAgICBpZiAobnVtYmVyKQotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NG
TnVtYmVySW50VHlwZSwgJnJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBG
b250OjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZv
cm1EYXRhLmZvbnQoKTsKLSAgICBBU1NFUlQoY3RGb250KTsKLQotICAgIC8vIFNwZWNpYWwgY2Fz
ZSBPc2FrYS1Nb25vLgotICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2
Nz4sIHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5v
dGUgdGhhdCB0aGUgQXBwS2l0IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBp
dGNoLgotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE1TLVBHb3RoaWMuCi0gICAgLy8gQWNjb3JkaW5n
IHRvIDxyZGFyOi8vcHJvYmxlbS80MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290
aGljIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQg
TVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KLQotICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlw
ZUNvcnNpdmEKLSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3
ZSBzaG91bGQgbm90IHRyZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLSAgICAv
LyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBw
aXRjaC4KLQotICAgIGF1dG8gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShj
dEZvbnQpKTsKLSAgICBhdXRvIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlO
YW1lKGN0Rm9udCkpOwotCi0gICAgaW50IGZpeGVkUGl0Y2ggPSBleHRyYWN0TnVtYmVyKGFkb3B0
Q0Yoc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENURm9udENvcHlBdHRyaWJ1dGUobV9wbGF0Zm9y
bURhdGEuZm9udCgpLCBrQ1RGb250Rml4ZWRBZHZhbmNlQXR0cmlidXRlKSkpLmdldCgpKTsKLSAg
ICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gKENURm9udEdldFN5bWJvbGljVHJhaXRzKGN0Rm9udCkg
JiBrQ1RGb250TW9ub1NwYWNlVHJhaXQpIHx8IGZpeGVkUGl0Y2ggfHwgKGNhc2VJbnNlbnNpdGl2
ZUNvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIikpIHx8IGNhc2VJbnNl
bnNpdGl2ZUNvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIikpIHx8IGNh
c2VJbnNlbnNpdGl2ZUNvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNb25vdHlwZUNvcnNp
dmEiKSkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGZhbWlseU5hbWUgJiYg
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiQ291cmllciBO
ZXciKSkpIHsKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBiZSB0
cmVhdGVkIGFzIGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNrZWQg
c3BhY2Ugd2lkdGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFyOi8v
NjI2OTc4MykuCi0gICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAgICB9Ci0j
ZW5kaWYKLX0KLQotRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwotICAgIGJvdW5kaW5n
Qm94ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZv
bnQoKSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZl
cnRpY2FsID8ga0NURm9udE9yaWVudGF0aW9uVmVydGljYWwgOiBrQ1RGb250T3JpZW50YXRpb25I
b3Jpem9udGFsLCAmZ2x5cGgsIDAsIDEpOwotICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5kaW5n
Qm94Lm1heFkoKSk7Ci0gICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgYm91
bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9m
ZnNldCk7Ci0KLSAgICByZXR1cm4gYm91bmRpbmdCb3g7Ci19Ci0KLWZsb2F0IEZvbnQ6OnBsYXRm
b3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBDR1NpemUgYWR2YW5j
ZSA9IENHU2l6ZVplcm87Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhKCkuc2l6ZSgpKSB7Ci0gICAg
ICAgIGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpIb3Jpem9udGFsOwotICAgICAgICBDVEZvbnRPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiA9IGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrID8ga0NU
Rm9udE9yaWVudGF0aW9uSG9yaXpvbnRhbCA6IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsOwot
I2lmIFVTRShDVEZPTlRHRVRBRFZBTkNFU19XT1JLQVJPVU5EKQotICAgICAgICBDR0ZvbnRSZW5k
ZXJpbmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5n
U3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmls
dGVyZWQ7Ci0gICAgICAgIGlmICghQ1RGb250SXNBcHBsZUNvbG9yRW1vamkobV9wbGF0Zm9ybURh
dGEuY3RGb250KCkpICYmICFtX3BsYXRmb3JtRGF0YS5oYXNWYXJpYXRpb25zKCkpCi0gICAgICAg
ICAgICBDVEZvbnRHZXRVbnN1bW1lZEFkdmFuY2VzRm9yR2x5cGhzQW5kU3R5bGUobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIG9yaWVudGF0aW9uLCBzdHlsZSwgJmdseXBoLCAmYWR2YW5jZSwgMSk7
Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAgICBDVEZvbnRHZXRB
ZHZhbmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgb3JpZW50YXRpb24sICZn
bHlwaCwgJmFkdmFuY2UsIDEpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhZHZhbmNl
LndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotfQotCi1QYXRoIEZvbnQ6OnBsYXRmb3Jt
UGF0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHRDRihDVEZvbnRDcmVhdGVQYXRoRm9yR2x5cGgocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGds
eXBoLCBudWxscHRyKSk7Ci0gICAgYXV0byBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gdGhpcy0+c3lu
dGhldGljQm9sZE9mZnNldCgpOwotICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KSB7Ci0gICAg
ICAgIGF1dG8gbmV3UGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKLSAgICAg
ICAgQ0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCBudWxscHRyLCByZXN1bHQuZ2V0KCkpOwot
ICAgICAgICBhdXRvIHRyYW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRp
b24oc3ludGhldGljQm9sZE9mZnNldCwgMCk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0
aC5nZXQoKSwgJnRyYW5zbGF0aW9uLCByZXN1bHQuZ2V0KCkpOwotICAgICAgICByZXR1cm4geyBX
VEZNb3ZlKG5ld1BhdGgpIH07Ci0gICAgfQotICAgIHJldHVybiB7IGFkb3B0Q0YoQ0dQYXRoQ3Jl
YXRlTXV0YWJsZUNvcHkocmVzdWx0LmdldCgpKSkgfTsKLX0KLQotYm9vbCBGb250OjpwbGF0Zm9y
bVN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyLCBPcHRpb25hbDxVQ2hhcjMyPiB2
YXJpYXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKHZhcmlhdGlvbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgVW5pQ2hhciBjb2RlVW5pdHNbMl07Ci0gICAgQ0dHbHlwaCBnbHlwaHNbMl07
Ci0gICAgQ0ZJbmRleCBjb3VudCA9IDA7Ci0gICAgVTE2X0FQUEVORF9VTlNBRkUoY29kZVVuaXRz
LCBjb3VudCwgY2hhcmFjdGVyKTsKLSAgICByZXR1cm4gQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFj
dGVycyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgY29kZVVuaXRzLCBnbHlwaHMsIGNvdW50KTsK
LX0KLQotYm9vbCBGb250Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QK
LXsKLSAgICBhdXRvIHBsYXRmb3JtRm9udCA9IHBsYXRmb3JtRGF0YSgpLmZvbnQoKTsKLSAgICBp
ZiAoIXBsYXRmb3JtRm9udCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWxsb3cg
bW9zdCBub24taWNvbiBmb250cyB0byBiYWlsIGVhcmx5IGhlcmUgYnkgdGVzdGluZyBhIHNpbmds
ZSBjaGFyYWN0ZXIgJ2EnLCB3aXRob3V0IGl0ZXJhdGluZyBvdmVyIGFsbCBiYXNpYyBsYXRpbiBj
aGFyYWN0ZXJzLgotICAgIFVuaUNoYXIgbG93ZXJjYXNlQUNoYXJhY3RlciA9ICdhJzsKLSAgICBD
R0dseXBoIGxvd2VyY2FzZUFHbHlwaDsKLSAgICBpZiAoQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFj
dGVycyhwbGF0Zm9ybUZvbnQsICZsb3dlcmNhc2VBQ2hhcmFjdGVyLCAmbG93ZXJjYXNlQUdseXBo
LCAxKSkgewotICAgICAgICBpZiAoIUNHUmVjdElzRW1wdHkoQ1RGb250R2V0Qm91bmRpbmdSZWN0
c0ZvckdseXBocyhwbGF0Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsICZsb3dl
cmNhc2VBR2x5cGgsIG51bGxwdHIsIDEpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBhdXRvIHN1cHBvcnRlZENoYXJhY3RlcnMgPSBhZG9wdENGKENURm9udENvcHlD
aGFyYWN0ZXJTZXQocGxhdGZvcm1Gb250KSk7Ci0gICAgaWYgKENGQ2hhcmFjdGVyU2V0SGFzTWVt
YmVySW5QbGFuZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAxKSB8fCBDRkNoYXJhY3RlclNl
dEhhc01lbWJlckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoaXMgZW5jb21wYXNzZXMgYWxsIGJhc2ljIExhdGlu
IG5vbi1jb250cm9sIGNoYXJhY3RlcnMuCi0gICAgY29uc3RleHByIFVuaUNoYXIgZmlyc3RDaGFy
YWN0ZXJUb1Rlc3QgPSAnICc7Ci0gICAgY29uc3RleHByIFVuaUNoYXIgbGFzdENoYXJhY3RlclRv
VGVzdCA9ICd+JzsKLSAgICBjb25zdGV4cHIgYXV0byBudW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3Qg
PSBsYXN0Q2hhcmFjdGVyVG9UZXN0IC0gZmlyc3RDaGFyYWN0ZXJUb1Rlc3QgKyAxOwotCi0gICAg
VmVjdG9yPENHR2x5cGg+IGdseXBoczsKLSAgICBnbHlwaHMuZmlsbCgwLCBudW1iZXJPZkNoYXJh
Y3RlcnNUb1Rlc3QpOwotICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlclJhbmdlKHBsYXRm
b3JtRm9udCwgZ2x5cGhzLmJlZ2luKCksIENGUmFuZ2VNYWtlKGZpcnN0Q2hhcmFjdGVyVG9UZXN0
LCBudW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3QpKTsKLSAgICBnbHlwaHMucmVtb3ZlQWxsKDApOwot
Ci0gICAgaWYgKGdseXBocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFZlY3RvcjxDR1JlY3Q+IGJvdW5kaW5nUmVjdHM7Ci0gICAgYm91bmRpbmdSZWN0cy5maWxsKENH
UmVjdFplcm8sIGdseXBocy5zaXplKCkpOwotICAgIENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JH
bHlwaHMocGxhdGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCBnbHlwaHMuYmVn
aW4oKSwgYm91bmRpbmdSZWN0cy5iZWdpbigpLCBnbHlwaHMuc2l6ZSgpKTsKLSAgICByZXR1cm4g
bm90Rm91bmQgPT0gYm91bmRpbmdSZWN0cy5maW5kTWF0Y2hpbmcoW10oYXV0byYgcmVjdCkgewot
ICAgICAgICByZXR1cm4gIUNHUmVjdElzRW1wdHkocmVjdCk7Ci0gICAgfSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCBkYjFi
NGZmNGExNmE0MjNmZTg2M2NlNzNiNThjNjYyOGMxYjA4ZTY0Li5jOTdkNTBhNTI2YTJmZDcxOGRi
OWNjNjIwMTZjMzI1ZWQ4MWIzYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBA
IC0zNSwzMyArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgaXNTeXN0ZW1G
b250KENURm9udFJlZiBmb250KQotewotI2lmIEhBVkUoQ1RGT05USVNTWVNURU1VSUZPTlQpCi0g
ICAgcmV0dXJuIENURm9udElzU3lzdGVtVUlGb250KGZvbnQpOwotI2Vsc2UKLSAgICByZXR1cm4g
Q1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNj
cmlwdG9yKGZvbnQpKS5nZXQoKSk7Ci0jZW5kaWYKLX0KLQotLy8gVGhlc2UgQ29yZVRleHQgVGV4
dCBTcGFjaW5nIGZlYXR1cmUgc2VsZWN0b3JzIGFyZSBub3QgZGVmaW5lZCBpbiBDb3JlVGV4dC4K
LWVudW0gVGV4dFNwYWNpbmdDVEZlYXR1cmVTZWxlY3RvciB7IFRleHRTcGFjaW5nUHJvcG9ydGlv
bmFsLCBUZXh0U3BhY2luZ0Z1bGxXaWR0aCwgVGV4dFNwYWNpbmdIYWxmV2lkdGgsIFRleHRTcGFj
aW5nVGhpcmRXaWR0aCwgVGV4dFNwYWNpbmdRdWFydGVyV2lkdGggfTsKLQotRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2Rl
IHRleHRSZW5kZXJpbmdNb2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0
UmVuZGVyaW5nTW9kZSkKLXsKLSAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOwotICAgIG1fZm9u
dCA9IGZvbnQ7Ci0gICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKGZvbnQpICYga0NURm9udFRyYWl0Q29sb3JHbHlwaHM7Ci0gICAgbV9pc1N5c3RlbUZvbnQg
PSBXZWJDb3JlOjppc1N5c3RlbUZvbnQobV9mb250LmdldCgpKTsKLSAgICBhdXRvIHZhcmlhdGlv
bnMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250Q29weUF0dHJp
YnV0ZShmb250LCBrQ1RGb250VmFyaWF0aW9uQXR0cmlidXRlKSkpOwotICAgIG1faGFzVmFyaWF0
aW9ucyA9IHZhcmlhdGlvbnMgJiYgQ0ZEaWN0aW9uYXJ5R2V0Q291bnQodmFyaWF0aW9ucy5nZXQo
KSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIG1faXNFbW9qaSA9IENURm9udElz
QXBwbGVDb2xvckVtb2ppKG1fZm9udC5nZXQoKSk7Ci0jZW5kaWYKLX0KLQogdW5zaWduZWQgRm9u
dFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0CiB7CiAgICAgdWludHB0cl90IGZsYWdzID0gc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93aWR0aFZhcmlhbnQp
IDw8IDYKQEAgLTcxLDcgKzQ0LDcgQEAgdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgp
IGNvbnN0CiAgICAgICAgIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEKICAgICAgICAgfCBtX3N5bnRo
ZXRpY09ibGlxdWUpOwogCi0gICAgdWludHB0cl90IGZvbnRIYXNoID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KENGSGFzaChtX2ZvbnQuZ2V0KCkpKTsKKyAgICB1aW50cHRyX3QgZm9udEhh
c2ggPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KENGSGFzaChtX2ZvbnQuZ2V0KCkpKTsKICAgICB1
aW50cHRyX3QgaGFzaENvZGVzW10gPSB7IGZvbnRIYXNoLCBmbGFncyB9OwogICAgIHJldHVybiBT
dHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CiB9
CkBAIC04MywxMTggKzU2LDQgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1
YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIENGRXF1
YWwobV9mb250LmdldCgpLCBvdGhlci5tX2ZvbnQuZ2V0KCkpOwogfQogCi1DVEZvbnRSZWYgRm9u
dFBsYXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQoKSBjb25zdAotewotICAgIENURm9udFJlZiBw
bGF0Zm9ybUZvbnQgPSBmb250KCk7Ci0gICAgQVNTRVJUKHBsYXRmb3JtRm9udCk7Ci0gICAgaWYg
KHBsYXRmb3JtRm9udCAmJiBhZG9wdENGKENURm9udENvcHlBdHRyaWJ1dGUocGxhdGZvcm1Gb250
LCBrQ1RGb250VVJMQXR0cmlidXRlKSkpCi0gICAgICAgIHJldHVybiBwbGF0Zm9ybUZvbnQ7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWlubGluZSBpbnQgbWFwRm9udFdpZHRoVmFyaWFudFRv
Q1RGZWF0dXJlU2VsZWN0b3IoRm9udFdpZHRoVmFyaWFudCB2YXJpYW50KQotewotICAgIHN3aXRj
aCh2YXJpYW50KSB7Ci0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGg6Ci0g
ICAgICAgIHJldHVybiBUZXh0U3BhY2luZ1Byb3BvcnRpb25hbDsKLQotICAgIGNhc2UgRm9udFdp
ZHRoVmFyaWFudDo6SGFsZldpZHRoOgotICAgICAgICByZXR1cm4gVGV4dFNwYWNpbmdIYWxmV2lk
dGg7Ci0KLSAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6Ci0gICAgICAgIHJl
dHVybiBUZXh0U3BhY2luZ1RoaXJkV2lkdGg7Ci0KLSAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6
OlF1YXJ0ZXJXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5nUXVhcnRlcldpZHRoOwot
ICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXh0U3BhY2lu
Z1Byb3BvcnRpb25hbDsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNh
c2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpCi17Ci0gICAgYXV0byBsYXN0
UmVzb3J0ID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXplKENG
U1RSKCJMYXN0UmVzb3J0IiksIDApKTsKLQotICAgIENGVHlwZVJlZiBkZXNjcmlwdG9yc1tdID0g
eyBsYXN0UmVzb3J0LmdldCgpIH07Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5ID0g
YWRvcHRDRihDRkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc2NyaXB0b3JzLCBX
VEZfQVJSQVlfTEVOR1RIKGRlc2NyaXB0b3JzKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwot
Ci0gICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07
Ci0gICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBhcnJheS5nZXQoKSB9OwotICAgIHJldHVybiBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1
ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLX0KLQotc3RhdGljIENURm9u
dERlc2NyaXB0b3JSZWYgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3Jp
cHRvcigpCi17Ci0gICAgc3RhdGljIENURm9udERlc2NyaXB0b3JSZWYgZGVzY3JpcHRvciA9IENU
Rm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhjYXNjYWRlVG9MYXN0UmVzb3J0QXR0
cmlidXRlc0RpY3Rpb25hcnkoKS5nZXQoKSk7Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19Ci0K
LUNURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAotewotICAgIGlmICht
X2N0Rm9udCkKLSAgICAgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOwotCi0gICAgQVNTRVJUKG1f
Zm9udCk7Ci0gICAgbV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmli
dXRlcyhtX2ZvbnQuZ2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRvTGFzdFJlc29ydEFu
ZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpKSk7Ci0KLSAgICBpZiAobV93aWR0aFZhcmlhbnQg
IT0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7Ci0gICAgICAgIGludCBmZWF0dXJl
VHlwZVZhbHVlID0ga1RleHRTcGFjaW5nVHlwZTsKLSAgICAgICAgaW50IGZlYXR1cmVTZWxlY3Rv
clZhbHVlID0gbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IobV93aWR0aFZh
cmlhbnQpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc291cmNlRGVz
Y3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fY3RGb250LmdldCgp
KSk7Ci0gICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVR5cGUgPSBhZG9wdENG
KENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZm
ZWF0dXJlVHlwZVZhbHVlKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVy
ZVNlbGVjdG9yID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBr
Q0ZOdW1iZXJJbnRUeXBlLCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUpKTsKLSAgICAgICAgUmV0YWlu
UHRyPENURm9udERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERl
c2NyaXB0b3JDcmVhdGVDb3B5V2l0aEZlYXR1cmUoc291cmNlRGVzY3JpcHRvci5nZXQoKSwgZmVh
dHVyZVR5cGUuZ2V0KCksIGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkpOwotICAgICAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBuZXdGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2Ny
aXB0b3IobmV3RGVzY3JpcHRvci5nZXQoKSwgbV9zaXplLCAwKSk7Ci0KLSAgICAgICAgaWYgKG5l
d0ZvbnQpCi0gICAgICAgICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1fY3RGb250LmdldCgpOwotfQotCi1SZXRhaW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxhdGZv
cm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKENURm9udFJlZiBjdEZvbnQpCi17Ci0gICAg
YXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGN0
Rm9udCkpOwotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM4NjgzIFRoaXMgaXMgYSBzaGFsbG93IHBvaW50ZXIgY29tcGFyZSBmb3Igd2ViIGZv
bnRzCi0gICAgLy8gYmVjYXVzZSB0aGUgVVJMIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBm
b250LiBUaGlzIG1lYW5zIHdlIG1pZ2h0IGVycm9uZW91c2x5IGdldCBmYWxzZSBuZWdhdGl2ZXMu
Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmwgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGVVJM
UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRvci5nZXQoKSwg
a0NURm9udFJlZmVyZW5jZVVSTEF0dHJpYnV0ZSkpKTsKLSAgICBBU1NFUlQoIXVybCB8fCBDRkdl
dFR5cGVJRCh1cmwuZ2V0KCkpID09IENGVVJMR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiB1cmw7
Ci19Ci0KLVJldGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVx
dWFsaXR5Q2hlY2soKSBjb25zdAotewotICAgIHJldHVybiBvYmplY3RGb3JFcXVhbGl0eUNoZWNr
KGN0Rm9udCgpKTsKLX0KLQotUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6
b3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKLXsKLSAgICBpZiAoUmV0YWluUHRy
PENGRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKGZvbnQoKSwgdGFibGUs
IGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpKQotICAgICAgICByZXR1cm4gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoZGF0YS5nZXQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0KLVN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlv
bigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGZvbnREZXNjcmlwdGlvbiB7IGFkb3B0Q0YoQ0ZDb3B5
RGVzY3JpcHRpb24oZm9udCgpKSkuZ2V0KCkgfTsKLSAgICByZXR1cm4gbWFrZVN0cmluZyhmb250
RGVzY3JpcHRpb24sICcgJywgbV9zaXplLAotICAgICAgICAobV9zeW50aGV0aWNCb2xkID8gIiBz
eW50aGV0aWMgYm9sZCIgOiAiIiksCi0gICAgICAgIChtX3N5bnRoZXRpY09ibGlxdWUgPyAiIHN5
bnRoZXRpYyBvYmxpcXVlIiA6ICIiKSwKLSAgICAgICAgKG1fb3JpZW50YXRpb24gPT0gRm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCA/ICIgdmVydGljYWwgb3JpZW50YXRpb24iIDogIiIpKTsKLX0K
LQotI2VuZGlmCi0KLVN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QK
LXsKLSAgICBpZiAoYXV0byBwbGF0Zm9ybUZvbnQgPSBmb250KCkpCi0gICAgICAgIHJldHVybiBh
ZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKHBsYXRmb3JtRm9udCkpLmdldCgpOwotICAgIHJl
dHVybiB7IH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5jcHAKaW5kZXggZDgxNTQ4YTMwYjlkMjJjYWZmOGFhNzg3MGRhYjRiZWZiMjM0
YjkwNC4uOGFlYzJlYTNkNGYxNzU5ZGY3Y2U2NDIzNmMzMmI2ODE1NjQ0ZGY3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTUzLDkgKzUzLDYgQEAgV1RGX1dFQUtfTElO
S19GT1JDRV9JTVBPUlQod2VibTo6c3dhcCk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8g
RklYTUU6IFJlbW92ZSB0aGlzIG9uY2Uga0NNVmlkZW9Db2RlY1R5cGVfVlA5IGlzIGFkZGVkIHRv
IENNRm9ybWF0RGVzY3JpcHRpb24uaAotY29uc3RleHByIENNVmlkZW9Db2RlY1R5cGUga0NNVmlk
ZW9Db2RlY1R5cGVfVlA5IHsgJ3ZwMDknIH07Ci0KIHVzaW5nIG5hbWVzcGFjZSBQQUw7CiAKIHN0
YXRpYyBib29sIGlzV2VibVBhcnNlckF2YWlsYWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAyOGI1MTI0M2U1Nzg1YTA2MmRmZWViYmU3NjM3ZTUzMDY2MDQ5NjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2Fz
Y2FkZUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
LTIwMjAsIDIwMTYgQXBwbGUgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKKworI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkRhc2hBcnJheS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0oQ09D
T0EpCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gQ29uZnVzaW5nbHksIGV2ZW4gd2hlbiBDR0ZvbnRSZW5kZXJpbmdHZXRG
b250U21vb3RoaW5nRGlzYWJsZWQoKSByZXR1cm5zIHRydWUsIENHQ29udGV4dFNldFNob3VsZFNt
b290aEZvbnRzKCkgc3RpbGwgaW1wYWN0cyB0ZXh0CisvLyByZW5kZXJpbmcsIHdoaWNoIGlzIHdo
eSB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlICJzdWJwaXhlbCBhbnRpYWxpYXNpbmciIHJhdGhlciB0
aGFuICJzbW9vdGhpbmciIHRlcm1pbm9sb2d5LgorYm9vbCBGb250Q2FzY2FkZTo6aXNTdWJwaXhl
bEFudGlhbGlhc2luZ0F2YWlsYWJsZSgpCit7CisjaWYgSEFWRShDR19GT05UX1JFTkRFUklOR19H
RVRfRk9OVF9TTU9PVEhJTkdfRElTQUJMRUQpCisgICAgc3RhdGljIGJvb2wgc3VicGl4ZWxBbnRp
YWxpYXNpbmdFbmFibGVkOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdKCkgeworICAgICAgICBzdWJwaXhlbEFudGlh
bGlhc2luZ0VuYWJsZWQgPSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVk
KCk7CisgICAgfSk7CisgICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKKyNl
bGlmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CisKK3ZvaWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3Np
dGlvbnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQoreworICAgIENHQWZm
aW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdl
dFRleHRNYXRyaXgoY29udGV4dCkpOworICAgIHBvc2l0aW9uc1swXSA9IENHUG9pbnRaZXJvOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENHU2l6
ZSBhZHZhbmNlID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oYWR2YW5jZXNbaSAtIDFdLCBt
YXRyaXgpOworICAgICAgICBwb3NpdGlvbnNbaV0ueCA9IHBvc2l0aW9uc1tpIC0gMV0ueCArIGFk
dmFuY2Uud2lkdGg7CisgICAgICAgIHBvc2l0aW9uc1tpXS55ID0gcG9zaXRpb25zW2kgLSAxXS55
ICsgYWR2YW5jZS5oZWlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxk
VXNlTGV0dGVycHJlc3NFZmZlY3QoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorewor
I2lmIEVOQUJMRShMRVRURVJQUkVTUykKKyAgICByZXR1cm4gY29udGV4dC50ZXh0RHJhd2luZ01v
ZGUoKS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OkxldHRlcnByZXNzKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitz
dGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCog
Z2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBp
ZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRp
b24oY29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOworCisgICAgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKyAgICBWZWN0b3I8
Q0dQb2ludCwgMjU2PiBwb3NpdGlvbnMoY291bnQpOworICAgIGlmIChwbGF0Zm9ybURhdGEub3Jp
ZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgIENHQWZm
aW5lVHJhbnNmb3JtIHJvdGF0ZUxlZnRUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2Uo
MCwgLTEsIDEsIDAsIDAsIDApOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0ZXh0TWF0cml4
ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KTsKKyAgICAgICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gcnVuTWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQodGV4dE1hdHJpeCwgcm90
YXRlTGVmdFRyYW5zZm9ybSk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgo
cnVuTWF0cml4LCBjb250ZXh0KTsKKworICAgICAgICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5z
bGF0aW9ucyhjb3VudCk7CisgICAgICAgIENURm9udEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9y
R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgp
LCBjb3VudCk7CisKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZp
bmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CisKKyAg
ICAgICAgQ0dQb2ludCBwb3NpdGlvbiA9IEZsb2F0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkg
KyBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBm
b250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1NpemUgdHJhbnNsYXRpb24g
PSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlvbnNbaV0sIHJvdGF0ZUxlZnRU
cmFuc2Zvcm0pOworICAgICAgICAgICAgcG9zaXRpb25zW2ldID0gQ0dQb2ludEFwcGx5QWZmaW5l
VHJhbnNmb3JtKENHUG9pbnRNYWtlKHBvc2l0aW9uLnggLSB0cmFuc2xhdGlvbi53aWR0aCwgcG9z
aXRpb24ueSArIHRyYW5zbGF0aW9uLmhlaWdodCksIHRyYW5zZm9ybSk7CisgICAgICAgICAgICBw
b3NpdGlvbi54ICs9IGFkdmFuY2VzW2ldLndpZHRoOworICAgICAgICAgICAgcG9zaXRpb24ueSAr
PSBhZHZhbmNlc1tpXS5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgQ1RGb250RHJhd0dseXBo
cyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQs
IGNvbnRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRh
bEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMsIGNvdW50KTsKKyAg
ICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9z
aXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
c2V0Q0dGb250UmVuZGVyaW5nTW9kZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAg
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAg
Q0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0LCB0cnVlKTsKKworICAg
IENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY2dD
b250ZXh0KTsKKyAgICBib29sIGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgPSBXVEY6Omlz
SW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5hKSAmJiBXVEY6OmlzSW50ZWdyYWwoY29udGV4dFRy
YW5zZm9ybS5kKSAmJiBjb250ZXh0VHJhbnNmb3JtLmIgPT0gMC5mICYmIGNvbnRleHRUcmFuc2Zv
cm0uYyA9PSAwLmY7CisgICAgYm9vbCBpc1JvdGF0ZWQgPSAoKGNvbnRleHRUcmFuc2Zvcm0uYiB8
fCBjb250ZXh0VHJhbnNmb3JtLmMpICYmIChjb250ZXh0VHJhbnNmb3JtLmEgfHwgY29udGV4dFRy
YW5zZm9ybS5kKSk7CisgICAgYm9vbCBkb1N1YnBpeGVsUXVhbnRpemF0aW9uID0gaXNUcmFuc2xh
dGlvbk9ySW50ZWdyYWxTY2FsZSB8fCAoIWlzUm90YXRlZCAmJiBjb250ZXh0LnNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cygpKTsKKworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUG9z
aXRpb25Gb250cyhjZ0NvbnRleHQsIHRydWUpOworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxRdWFudGl6YXRpb24pOworfQor
Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAgIGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisgICAgaWYgKCFw
bGF0Zm9ybURhdGEuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGJvb2wgc2hvdWxk
QW50aWFsaWFzID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzID0gdHJ1ZTsKKwor
ICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKKyAgICAgICAgc21vb3RoaW5nTW9k
ZSA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKKworICAgIHN3aXRjaCAoc21vb3Ro
aW5nTW9kZSkgeworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOgorICAg
ICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgorICAgIGNhc2UgRm9udFNtb290aGlu
Z01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3Ro
aW5nOgorICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgc2hvdWxkU21v
b3RoRm9udHMgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFzaG91
bGRVc2VTbW9vdGhpbmcoKSkKKyAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKKwor
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgb3JpZ2luYWxTaG91bGRVc2VGb250
U21vb3RoaW5nID0gQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0KTsKKyAg
ICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5n
KQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIHNob3Vs
ZFNtb290aEZvbnRzKTsKKyNlbmRpZgorCisgICAgYm9vbCBvcmlnaW5hbFNob3VsZEFudGlhbGlh
cyA9IENHQ29udGV4dEdldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQpOworICAgIGlmIChzaG91
bGRBbnRpYWxpYXMgIT0gb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIENHQ29udGV4
dFNldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7CisKKyAgICBi
b29sIHVzZUxldHRlcnByZXNzRWZmZWN0ID0gc2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QoY29u
dGV4dCk7CisgICAgVU5VU0VEX1ZBUklBQkxFKHVzZUxldHRlcnByZXNzRWZmZWN0KTsKKyAgICBG
bG9hdFBvaW50IHBvaW50ID0gYW5jaG9yUG9pbnQ7CisKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBt
YXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OworICAgIGlmICghcGxhdGZvcm1EYXRh
LmlzQ29sb3JCaXRtYXBGb250KCkpCisgICAgICAgIG1hdHJpeCA9IENURm9udEdldE1hdHJpeChw
bGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKKyAgICBtYXRy
aXguZCA9IC1tYXRyaXguZDsKKyAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUo
KSkgeworICAgICAgICBzdGF0aWMgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKHN5bnRoZXRpY09i
bGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MCk7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEu
b3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgICAg
ICBpZiAoZm9udC5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgICAgICAgICAgICAg
bWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9y
bU1ha2UoMSwgb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENH
QWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCht
YXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCAtb2JsaXF1ZVNrZXcsIDEsIDAsIDAp
KTsKKyAgICB9CisgICAgU2NvcGVkVGV4dE1hdHJpeCByZXN0b3JlcihtYXRyaXgsIGNnQ29udGV4
dCk7CisKKyAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOworICAgIENHQ29udGV4
dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CisKKyAgICBGbG9h
dFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hh
ZG93Q29sb3I7CisgICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVy
LCBzaGFkb3dDb2xvcik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRl
eHQuZ2V0Q1RNKCk7CisgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhl
dGljQm9sZE9mZnNldCgpOworICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYmICFjb250ZXh0
Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpIHsKKyAgICAgICAgRmxvYXRT
aXplIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzID0gY29udGV4dENUTS5tYXBTaXpl
KEZsb2F0U2l6ZSgxLCAwKSk7CisgICAgICAgIGZsb2F0IGhvcml6b250YWxVbml0TGVuZ3RoSW5E
ZXZpY2VQaXhlbHMgPSBzcXJ0Zihob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0
aCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSArIGhvcml6b250
YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLmhlaWdodCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5E
ZXZpY2VQaXhlbHMuaGVpZ2h0KCkpOworICAgICAgICBpZiAoaG9yaXpvbnRhbFVuaXRMZW5ndGhJ
bkRldmljZVBpeGVscykgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzY2FsZWQg
ZG93biBjb250ZXh0IHdvbid0IGJsb3cgdXAgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnbHlwaHMuCisg
ICAgICAgICAgICBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gc3RkOjptaW4oc3ludGhldGljQm9sZE9m
ZnNldCwgc3ludGhldGljQm9sZE9mZnNldCAvIGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQ
aXhlbHMpOworICAgICAgICB9CisgICAgfTsKKworICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0g
Y29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hh
ZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEuaXNDb2xv
ckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBj
b250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFjb250ZXh0
LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKKyAg
ICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWlu
ZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgor
ICAgICAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7CisgICAgICAgIENvbG9yIGZpbGxDb2xvciA9
IGNvbnRleHQuZmlsbENvbG9yKCk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNo
YWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxv
YXQoKSk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Cisg
ICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRo
KCk7CisgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4g
d2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMg
bmVnYXRpdmUuCisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93
T2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0x
IDogMSk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dU
ZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhm
cm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIGlm
IChzeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4
dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKGZpbGxDb2xvcik7CisgICAgfQorCisjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQorICAgIGlm
ICh1c2VMZXR0ZXJwcmVzc0VmZmVjdCkKKyAgICAgICAgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNX
aXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9t
KSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgZWxzZQorI2Vu
ZGlmCisgICAgeworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBj
Z0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
ZnJvbSksIG51bUdseXBocyk7CisgICAgfQorCisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQp
CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBz
eW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVm
ZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7
CisKKyAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQorICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVz
ZUZvbnRTbW9vdGhpbmcpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNn
Q29udGV4dCwgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKTsKKyNlbmRpZgorCisgICAg
aWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKKyAgICAgICAg
Q0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRBbnRp
YWxpYXMpOworfQorCitib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgp
IGNvbnN0Cit7CisgICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udCgpOworICAg
IHJldHVybiBpc1N5c3RlbUZvbnQoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpOwor
fQorCisvLyBGSVhNRTogVXNlIHRoaXMgb24gYWxsIHBvcnRzLgorY29uc3QgRm9udCogRm9udENh
c2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0
ZXI7CisgICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOworICAgIFUxNl9ORVhUKGNo
YXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXJMZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7CisK
KyAgICBHbHlwaERhdGEgYmFzZUNoYXJhY3RlckdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJh
Y3RlcihiYXNlQ2hhcmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCk7CisKKyAgICBpZiAoIWJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgaWYgKGxlbmd0aCA9PSBiYXNlQ2hhcmFjdGVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gYmFz
ZUNoYXJhY3RlckdseXBoRGF0YS5mb250OworCisgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJG
b250ID0gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNB
dChpKS5pc051bGwoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFj
a1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgIGlm
ICghZm9udCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9
IDB4MDZmZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworI2VuZGlmCisgICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAgICAgIGlm
IChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFmb250LT5oYXNWZXJ0
aWNhbEdseXBocygpKQorICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+YnJva2VuSWRlb2dy
YXBoRm9udCgpOworICAgICAgICAgICAgZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pL
R2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgRm9udCYgdmVydGljYWxSaWdodEZvbnQgPSBmb250LT52ZXJ0
aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCk7CisgICAgICAgICAgICAgICAgR2x5cGggdmVydGlj
YWxSaWdodEdseXBoID0gdmVydGljYWxSaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNo
YXJhY3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNl
Q2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQorICAgICAgICAgICAgICAgICAgICBmb250ID0gJnZl
cnRpY2FsUmlnaHRGb250OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBGb250JiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKTsK
KyAgICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udC5nbHlwaEZv
ckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodXByaWdodEds
eXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgICAgICAgICAgICAg
IGZvbnQgPSAmdXByaWdodEZvbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZm9udCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQpCisgICAgICAgICAgICB0
cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gdHJ1ZTsKKworICAgICAgICBpZiAoZm9udC0+Y2FuUmVu
ZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmb250OworICAgIH0KKworICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVy
Rm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5mb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJz
LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250Owor
CisgICAgcmV0dXJuIEZvbnQ6OnN5c3RlbUZhbGxiYWNrKCk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjllMjI1MWQ2YWRhOWEwZWEwYzQ4MTJmN2M1NTYzN2Y5ZjA5NDg5ODgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRl
eHQuY3BwCkBAIC0wLDAgKzEsNzcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJPcGVuVHlwZUNHLmgiCisjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbmNs
dWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Cisj
aW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkxvY2FsZUNvY29hLmgiCisjaW5jbHVk
ZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3Bp
L3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGlubGluZSBib29sIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoQ0ZTdHJpbmdSZWYgYSwg
Q0ZTdHJpbmdSZWYgYikKK3sKKyAgICByZXR1cm4gYSAmJiBDRlN0cmluZ0NvbXBhcmUoYSwgYiwg
a0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG87Cit9CisKK3N0
YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBy
ZXR1cm4gZm9udEhhc0VpdGhlclRhYmxlKGZvbnQsIGtDVEZvbnRUYWJsZVZoZWEsIGtDVEZvbnRU
YWJsZVZPUkcpOworfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2Jvb2wgZm9udEZhbWls
eVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKK3sK
KyAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBUaW1lcyBOZXcgUm9tYW4gYW5kIEFyaWFsIGFyZSBub3QgcGVyZm9ybWFudCBlbm91Z2ggdG8g
dXNlLiA8cmRhcjovL3Byb2JsZW0vMjEzMzMzMjY+CisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9i
bGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBhYm92ZSBidWcgaXMg
Zml4ZWQuCisgICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21h
biIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgIHx8
IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBr
Q0ZDb21wYXJlRXF1YWxUbyk7Cit9CisKK3N0YXRpYyBjb25zdCBmbG9hdCBrTGluZUhlaWdodEFk
anVzdG1lbnQgPSAwLjE1ZjsKKworc3RhdGljIGJvb2wgc2hvdWxkVXNlQWRqdXN0bWVudChDVEZv
bnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBh
ZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKTsKKworICAgIGlmICghZmFtaWx5TmFt
ZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgoZmFtaWx5TmFtZS5nZXQoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUu
Z2V0KCksIENGU1RSKCJUaW1lcyIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJl
KGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIZWx2ZXRpY2EiKSkKKyAgICAgICAgfHwgY2FzZUlu
c2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiLkhlbHZldGljYSBOZXVl
VUkiKSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBib29sIG5lZWRzQXNjZW50QWRqdXN0bWVudChD
RlN0cmluZ1JlZiBmYW1pbHlOYW1lKQoreworICAgIHJldHVybiBmYW1pbHlOYW1lICYmIChjYXNl
SW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJUaW1lcyIpKQorICAgICAgICB8
fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJIZWx2ZXRpY2EiKSkK
KyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQ291
cmllciIpKSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgYm9vbCBpc0FoZW1Gb250KENGU3RyaW5n
UmVmIGZhbWlseU5hbWUpCit7CisgICAgcmV0dXJuIGZhbWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0
aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQWhlbSIpKTsKK30KKworYm9vbCBmb250SGFz
VGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcpCit7CisgICAgYXV0byB0
YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RG
b250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBpZiAoIXRhYmxlVGFncykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRh
YmxlVGFncy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1U
YWJsZXM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRU
YWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKKyAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRh
ZykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiBjdEZvbnQsIHVuc2lnbmVkIHRh
YmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKQoreworICAgIGF1dG8gdGFibGVUYWdzID0gYWRv
cHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9u
Tm9PcHRpb25zKSk7CisgICAgaWYgKCF0YWJsZVRhZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkp
OworICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4
KSB7CisgICAgICAgIGF1dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RGb250VGFibGVUYWc+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5n
ZXQoKSwgaW5kZXgpKSk7CisgICAgICAgIGlmICh0YWcgPT0gdGFibGVUYWcxIHx8IHRhZyA9PSB0
YWJsZVRhZzIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCit7CisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50
aGV0aWNCb2xkKCkgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyAyNC4wZikgOiAwLmY7
CisjZWxzZQorICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICBtX3NjcmlwdENhY2hlID0gMDsKKyAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gbnVsbHB0
cjsKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCisgICAgICAgIHJldHVybiBpbml0
R0RJRm9udCgpOworI2VuZGlmCisKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gQ1RGb250R2V0
VW5pdHNQZXJFbShtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgIGZsb2F0IHBvaW50U2l6ZSA9
IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBDR0Zsb2F0IGNhcEhlaWdodCA9IHBvaW50U2l6
ZSA/IENURm9udEdldENhcEhlaWdodChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKKyAgICBD
R0Zsb2F0IGxpbmVHYXAgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1E
YXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxvYXQgYXNjZW50ID0gcG9pbnRTaXplID8gQ1RGb250
R2V0QXNjZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxvYXQgZGVzY2Vu
dCA9IHBvaW50U2l6ZSA/IENURm9udEdldERlc2NlbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6
IDA7CisKKyAgICAvLyBUaGUgT3BlbiBGb250IEZvcm1hdCBkZXNjcmliZXMgdGhlIE9TLzIgVVNF
X1RZUE9fTUVUUklDUyBmbGFnIGFzIGZvbGxvd3M6CisgICAgLy8gIklmIHNldCwgaXQgaXMgc3Ry
b25nbHkgcmVjb21tZW5kZWQgdG8gdXNlIE9TLzIuc1R5cG9Bc2NlbmRlciAtIE9TLzIuc1R5cG9E
ZXNjZW5kZXIrIE9TLzIuc1R5cG9MaW5lR2FwIGFzIGEgdmFsdWUgZm9yIGRlZmF1bHQgbGluZSBz
cGFjaW5nIGZvciB0aGlzIGZvbnQuIgorICAgIC8vIE9uIE9TIFgsIHdlIG9ubHkgYXBwbHkgdGhp
cyBydWxlIGluIHRoZSBpbXBvcnRhbnQgY2FzZSBvZiBmb250cyB3aXRoIGEgTUFUSCB0YWJsZS4K
KyAgICBpZiAoZm9udEhhc1RhYmxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBrQ1RGb250VGFi
bGVNQVRIKSkgeworICAgICAgICBzaG9ydCB0eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xp
bmVHYXA7CisgICAgICAgIGlmIChPcGVuVHlwZTo6dHJ5R2V0VHlwb01ldHJpY3MobV9wbGF0Zm9y
bURhdGEuZm9udCgpLCB0eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXApKSB7Cisg
ICAgICAgICAgICBhc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyh0eXBvQXNjZW50LCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZTsKKyAgICAgICAgICAgIGRlc2NlbnQgPSAtc2NhbGVFbVRvVW5pdHModHlw
b0Rlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAgICAgICAgbGluZUdhcCA9
IHNjYWxlRW1Ub1VuaXRzKHR5cG9MaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29w
eUZhbWlseU5hbWUobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisKKyAgICAvLyBEaXNhYmxlIGFu
dGlhbGlhc2luZyB3aGVuIHJlbmRlcmluZyB3aXRoIEFoZW0gYmVjYXVzZSBtYW55IHRlc3RzIHJl
cXVpcmUgdGhpcy4KKyAgICBpZiAoaXNBaGVtRm9udChmYW1pbHlOYW1lLmdldCgpKSkKKyAgICAg
ICAgbV9hbGxvd3NBbnRpYWxpYXNpbmcgPSBmYWxzZTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1lcywgSGVsdmV0aWNhLCBhbmQgQ291cmllciB0byBj
bG9zZWx5IG1hdGNoIHRoZQorICAgIC8vIHZlcnRpY2FsIG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9z
b2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0aGUgZGUgZmFjdG8KKyAgICAvLyB3ZWIgc3RhbmRh
cmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBvZiAyMCUgaXMgdG9vIGJpZyBhbmQgaXMKKyAgICAv
LyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5lIHNwYWNpbmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1
c3RtZW50IGluc3RlYWQKKyAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBhc2NlbnQuCisgICAgaWYg
KG9yaWdpbigpID09IE9yaWdpbjo6TG9jYWwgJiYgbmVlZHNBc2NlbnRBZGp1c3RtZW50KGZhbWls
eU5hbWUuZ2V0KCkpKQorICAgICAgICBhc2NlbnQgKz0gc3RkOjpyb3VuZCgoYXNjZW50ICsgZGVz
Y2VudCkgKiAwLjE1Zik7CisjZW5kaWYKKworICAgIC8vIENvbXB1dGUgbGluZSBzcGFjaW5nIGJl
Zm9yZSB0aGUgbGluZSBtZXRyaWNzIGhhY2tzIGFyZSBhcHBsaWVkLgorICAgIGZsb2F0IGxpbmVT
cGFjaW5nID0gbHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGlu
ZUdhcCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gSGFjayBIaXJhZ2lubyBsaW5lIG1l
dHJpY3MgdG8gYWxsb3cgcm9vbSBmb3IgbWFya2VkIHRleHQgdW5kZXJsaW5lcy4KKyAgICAvLyA8
cmRhcjovL3Byb2JsZW0vNTM4NjE4Mz4KKyAgICBpZiAoZGVzY2VudCA8IDMgJiYgbGluZUdhcCA+
PSAzICYmIGZhbWlseU5hbWUgJiYgQ0ZTdHJpbmdIYXNQcmVmaXgoZmFtaWx5TmFtZS5nZXQoKSwg
Q0ZTVFIoIkhpcmFnaW5vIikpKSB7CisgICAgICAgIGxpbmVHYXAgLT0gMyAtIGRlc2NlbnQ7Cisg
ICAgICAgIGRlc2NlbnQgPSAzOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIGlmIChwbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYgIWlz
VGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9
IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIENHRmxvYXQgYWRqdXN0bWVudCA9IHNob3VsZFVzZUFk
anVzdG1lbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA/IGNlaWwoKGFzY2VudCArIGRlc2NlbnQp
ICoga0xpbmVIZWlnaHRBZGp1c3RtZW50KSA6IDA7CisKKyAgICBsaW5lR2FwID0gY2VpbGYobGlu
ZUdhcCk7CisgICAgbGluZVNwYWNpbmcgPSBjZWlsKGFzY2VudCkgKyBhZGp1c3RtZW50ICsgY2Vp
bChkZXNjZW50KSArIGxpbmVHYXA7CisgICAgYXNjZW50ID0gY2VpbGYoYXNjZW50ICsgYWRqdXN0
bWVudCk7CisgICAgZGVzY2VudCA9IGNlaWxmKGRlc2NlbnQpOworCisgICAgbV9zaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWMgPSBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWls
eU5hbWUuZ2V0KCkpOworI2VuZGlmCisKKyAgICBDR0Zsb2F0IHhIZWlnaHQgPSAwOworICAgIGlm
IChtX3BsYXRmb3JtRGF0YS5zaXplKCkpIHsKKyAgICAgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9y
aWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSB7CisgICAgICAgICAg
ICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJs
ZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCisg
ICAgICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRp
b24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2VsaW5lLgorICAgICAgICAgICAg
R2x5cGggeEdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoJ3gnKTsKKyAgICAgICAgICAgIGlmICh4
R2x5cGgpCisgICAgICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3Jt
Qm91bmRzRm9yR2x5cGgoeEdseXBoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeEhlaWdodCA9IENURm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0
aW9uRm9udCgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgIH0KKworICAgIG1fZm9udE1l
dHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFz
Y2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAg
ICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOworICAgIG1fZm9udE1ldHJp
Y3Muc2V0TGluZUdhcChsaW5lR2FwKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhl
aWdodCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRVbmRlcmxpbmVQb3NpdGlvbigtQ1RGb250R2V0VW5kZXJsaW5l
UG9zaXRpb24obV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgbV9mb250TWV0cmljcy5zZXRV
bmRlcmxpbmVUaGlja25lc3MoQ1RGb250R2V0VW5kZXJsaW5lVGhpY2tuZXNzKG1fcGxhdGZvcm1E
YXRhLmZvbnQoKSkpOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7
CisgICAgbV9hdmdDaGFyV2lkdGggPSAwOworICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKKworICAg
IGF1dG8gb3MyVGFibGUgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShtX3BsYXRmb3JtRGF0YS5m
b250KCksIGtDVEZvbnRUYWJsZU9TMiwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Cisg
ICAgaWYgKG9zMlRhYmxlICYmIENGRGF0YUdldExlbmd0aChvczJUYWJsZS5nZXQoKSkgPj0gNCkg
eworICAgICAgICBjb25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5n
ZXQoKSk7CisgICAgICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBvczJbMl0gKiAyNTYgKyBv
czJbM107CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hh
cldpZHRoLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5zaXpl
KCk7CisgICAgfQorCisgICAgYXV0byBoZWFkVGFibGUgPSBhZG9wdENGKENURm9udENvcHlUYWJs
ZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRUYWJsZUhlYWQsIGtDVEZvbnRUYWJsZU9w
dGlvbk5vT3B0aW9ucykpOworICAgIGlmIChoZWFkVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKGhl
YWRUYWJsZS5nZXQoKSkgPj0gNDIpIHsKKyAgICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBDRkRh
dGFHZXRCeXRlUHRyKGhlYWRUYWJsZS5nZXQoKSk7CisgICAgICAgIHVuc2lnbmVkIHV4TWluID0g
aGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKKyAgICAgICAgdW5zaWduZWQgdXhNYXggPSBoZWFk
WzQwXSAqIDI1NiArIGhlYWRbNDFdOworICAgICAgICBTSW50MTYgeE1pbiA9IHN0YXRpY19jYXN0
PFNJbnQxNj4odXhNaW4pOworICAgICAgICBTSW50MTYgeE1heCA9IHN0YXRpY19jYXN0PFNJbnQx
Nj4odXhNYXgpOworICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXgg
LSB4TWluKTsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBt
X2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAg
fQorCisgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2gg
d2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgorICAg
IGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK2Jvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0No
YXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBzLCBVQ2hh
cjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFS
R0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQorICAgIEdseXBoIGdseXBoID0gZ2x5cGhGb3JD
aGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAoIWdseXBoKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgeworICAgIGNhc2UgRm9udFZhcmlh
bnRDYXBzOjpTbWFsbDogeworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0
ZWRCeVNtYWxsQ2FwcygpOworICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBo
ICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAgIH0KKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6UGV0aXRlOiB7CisgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5
UGV0aXRlQ2FwcygpOworICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYm
IHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAgIH0KKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
QWxsU21hbGw6IHsKKyAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlB
bGxTbWFsbENhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAm
JiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6
OkFsbFBldGl0ZTogeworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRC
eUFsbFBldGl0ZUNhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlw
aCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
Ly8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVk
IGFib3ZlLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShjaGFyYWN0ZXIpOworCisgICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsKKyAgICBj
YXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBl
dGl0ZToKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBGb250
VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMg
dmFsdWVzIGxpc3RlZCBhYm92ZS4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlm
Cit9CisKKyNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExB
VEZPUk0oTUFDKQorc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc09w
ZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXksIGludCByYXdWYWx1ZSkKK3sKKyAgICBS
ZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKKyAgICBDRlR5
cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBrQ1RGb250T3BlblR5
cGVGZWF0dXJlVmFsdWUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleSwgdmFsdWUu
Z2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlw
ZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tz
KSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFsbENhcHNUcnVl
VHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJhd1ZhbHVlKQoreworICAgIFJldGFpblB0
cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5KSk7CisgICAgUmV0YWluUHRyPENGTnVt
YmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9
IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXkgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleS5nZXQoKSwg
dmFsdWUuZ2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVuaW9uQml0VmVjdG9ycyhCaXRWZWN0b3ImIHJl
c3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQoreworICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZC
aXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOworICAgIHJlc3VsdC5lbnN1cmVTaXplKGxlbmd0aCk7
CisgICAgQ0ZJbmRleCBtaW4gPSAwOworICAgIHdoaWxlIChtaW4gPCBsZW5ndGgpIHsKKyAgICAg
ICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3RvckdldEZpcnN0SW5kZXhPZkJpdChzb3Vy
Y2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7CisgICAgICAgIGlmIChuZXh0
SW5kZXggPT0ga0NGTm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmVzdWx0
LnNldChuZXh0SW5kZXgsIHRydWUpOworICAgICAgICBtaW4gPSBuZXh0SW5kZXggKyAxOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlN0cmluZ1JlZiBm
ZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1bHQpCit7CisgICAgUmV0YWlu
UHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENURm9udENvcHlHbHlwaENvdmVy
YWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVuVHlwZURpY3Rpb25hcnkoZmVhdHVyZSwg
MSkuZ2V0KCkpKTsKKyAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOwor
fQorCitzdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGludCB0eXBlLCBpbnQgc2Vs
ZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKK3sKKyAgICBSZXRhaW5Q
dHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292ZXJh
Z2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeSh0eXBlLCBzZWxl
Y3RvcikuZ2V0KCkpKTsKKyAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkp
OworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBz
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMpIHsKKyAg
ICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAg
ICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3JtRGF0YSgpLmZv
bnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5q
ZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1Nl
bGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENh
cHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxD
YXBzLnZhbHVlKCk7Cit9CisKK2NvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVk
QnlBbGxTbWFsbENhcHMoKSBjb25zdAoreworICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeUFs
bFNtYWxsQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzID0g
Qml0VmVjdG9yKCk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3Ai
KSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBz
LnZhbHVlKCkpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJjMnNjIiks
IHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52
YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwg
a0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5
cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVU
eXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VTbWFsbENhcHNTZWxlY3Rvciwg
cGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZh
bHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fw
cy52YWx1ZSgpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5
UGV0aXRlQ2FwcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRl
Q2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcyA9IEJpdFZlY3Rv
cigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRm
b3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7
CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNh
c2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBw
b3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1
cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6
OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ds
eXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNv
dmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBw
b3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292
ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBv
cnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3Zl
cmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZv
cm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgp
KTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwga1VwcGVy
Q2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZ2x5
cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCk7Cit9CisjZW5kaWYKKworc3RhdGlj
IFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChDVEZvbnRSZWYgZm9udCwgZmxvYXQg
c2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBDVEZvbnRTeW1ib2xpY1RyYWl0cyBm
b250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQorewor
ICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoc3ludGhl
dGljQm9sZCkKKyAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OworICAgIGlm
IChzeW50aGV0aWNJdGFsaWMpCisgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxpY1Ry
YWl0OworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENURm9u
dEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOworCisgICAgYm9vbCB1c2VkU3ludGhldGljQm9sZCA9
IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYg
a0NURm9udFRyYWl0Qm9sZCk7CisgICAgYm9vbCB1c2VkU3ludGhldGljT2JsaXF1ZSA9IChmb250
VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RG
b250VHJhaXRJdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoZm9u
dCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0aWNPYmxpcXVlLCBvcmllbnRh
dGlvbik7CisKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0
dXJlKQoreworICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RG
b250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJl
LCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCit7CisgICAgcmV0dXJu
IENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50
aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0
dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKK30KKworc3RhdGljIGlubGluZSBPcHRpb25hbDxD
RlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQorewor
ICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7CisgICAgQ0ZTdHJpbmdSZWYg
dGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1
cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKKyAgICBpbnQgcmF3VmFsdWU7CisgICAg
Q0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7CisgICAgYXV0
byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NGTnVtYmVySW50VHlwZSwgJnJh
d1ZhbHVlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIHJldHVy
biByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVmPih0YWcpIDogV1RGOjpudWxsb3B0Owor
fQorCitzdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQsIGludD4gdHJ1ZVR5cGVGZWF0dXJlKENG
RGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIEFTU0VSVChpc1RydWVUeXBlRmVhdHVyZShm
ZWF0dXJlKSk7CisgICAgaW50IHJhd1R5cGU7CisgICAgQ0ZOdW1iZXJSZWYgdHlwZSA9IHN0YXRp
Y19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250
RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJH
ZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlwZSk7CisgICAgQVNTRVJUX1VO
VVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICBpbnQgcmF3U2VsZWN0b3I7CisgICAgQ0ZOdW1i
ZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAg
ICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwga0NGTnVtYmVySW50VHlwZSwg
JnJhd1NlbGVjdG9yKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCByYXdTZWxlY3Rvcik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGlu
dCBrZXksIENURm9udFJlZiBmb250KQoreworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBmZWF0
dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVzKGZvbnQpKTsKKyAgICBDRkluZGV4IGZl
YXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7CisgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9u
YXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7CisgICAgICAgIENGTnVtYmVyUmVm
IGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKKyAgICAg
ICAgaWYgKCFmZWF0dXJlS2V5KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGludCBy
YXdGZWF0dXJlS2V5OworICAgICAgICBDRk51bWJlckdldFZhbHVlKGZlYXR1cmVLZXksIGtDRk51
bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKKyAgICAgICAgaWYgKHJhd0ZlYXR1cmVLZXkg
IT0ga2V5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ0ZBcnJheVJlZiBmZWF0
dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVjdG9yc0tleSkpOworICAgICAg
ICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Q0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlU2VsZWN0b3Jz
KTsKKyAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBqIDwgc2VsZWN0b3JzQ291bnQ7ICsraikg
eworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVTZWxlY3RvciA9IHN0YXRpY19j
YXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJlU2VsZWN0
b3JzLCBqKSk7CisgICAgICAgICAgICBDRk51bWJlclJlZiBpc0RlZmF1bHQgPSBzdGF0aWNfY2Fz
dDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RG
b250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOworICAgICAgICAgICAgaWYgKCFpc0RlZmF1
bHQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpbnQgcmF3SXNEZWZh
dWx0OworICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0RlZmF1bHQsIGtDRk51bWJlcklu
dFR5cGUsICZyYXdJc0RlZmF1bHQpOworICAgICAgICAgICAgaWYgKCFyYXdJc0RlZmF1bHQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rvciwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSwgQ1RGb250UmVmIGZv
bnQpCit7CisgICAgYm9vbCBpc09wZW5UeXBlID0gaXNPcGVuVHlwZUZlYXR1cmUoZmVhdHVyZSk7
CisgICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVyZSk7CisgICAg
aWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQorICAgICAgICByZXR1cm4gZmVhdHVyZTsg
Ly8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0LgorICAgIFJldGFpblB0cjxD
Rk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIGlmIChpc09w
ZW5UeXBlKSB7CisgICAgICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9wZW5UeXBlRmVhdHVyZShmZWF0
dXJlKTsKKyAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1YWwoZmVhdHVyZVRhZy52YWx1
ZSgpLCBDRlNUUigic21jcCIpKQorICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZh
bHVlKCksIENGU1RSKCJjMnNjIikpCisgICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcu
dmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKKyAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRh
Zy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKKyAgICAgICAgICAgIGludCByYXdaZXJvID0g
MDsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gemVybyA9IGFkb3B0Q0YoQ0ZO
dW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1pl
cm8pKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRhZy52YWx1ZSgpKTsKKyAgICAgICAgICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVZhbHVlLCB6ZXJvLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENGRGlj
dGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywg
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZykp
OworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250
T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZv
bnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpc1Ry
dWVUeXBlKSB7CisgICAgICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJlUGFpciA9IHRydWVUeXBlRmVh
dHVyZShmZWF0dXJlKTsKKyAgICAgICAgaWYgKHRydWVUeXBlRmVhdHVyZVBhaXIuZmlyc3QgPT0g
a0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtMb3dlckNh
c2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrTG93
ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRk
VmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5
KSk7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yID0gZGVmYXVs
dFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VUeXBlLCBmb250KSkKKyAgICAg
ICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0
dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0b3IpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwg
a0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7CisgICAgICAg
IH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrVXBwZXJDYXNlVHlwZSAm
JiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVj
dG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VQZXRpdGVDYXBz
U2VsZWN0b3IpKSB7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0
KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgICAg
IGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JGb3JUcnVl
VHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQpKQorICAgICAgICAgICAgICAgIENGRGlj
dGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50
aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNl
bGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVU
eXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZl
YXR1cmVUeXBlSWRlbnRpZmllcktleSkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFs
dWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZp
ZXJLZXkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRoZXNpemFibGVG
ZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmVh
dHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udENvcHlBdHRyaWJ1
dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSkpKTsKKyAgICBpZiAoIWZl
YXR1cmVzKQorICAgICAgICByZXR1cm4gZm9udDsKKyAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9
IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7CisgICAgUmV0YWluUHRyPENGTXV0YWJs
ZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7
CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKKyAgICAg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+
KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgQ0ZB
cnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgpLCByZW1vdmVkRmVhdHVyZShmZWF0dXJl
LCBmb250KS5nZXQoKSk7CisgICAgfQorICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRG
ZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IG5l
d0ZlYXR1cmVzLmdldCgpIH07CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmli
dXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtl
eXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIFJldGFp
blB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRE
ZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOworICAgIHJl
dHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250LCBDVEZvbnRH
ZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlwdG9yLmdldCgpKSk7Cit9CisKK1JlZlB0
cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcygpIGNv
bnN0Cit7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBDVEZv
bnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9w
bGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjdEZvbnQgPSBj
cmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1fcGxhdGZvcm1EYXRhLmZv
bnQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0Rm9udC5nZXQoKSwgc2l6
ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURh
dGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOwor
fQorCitSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIGZsb2F0IHNp
emUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKKyAgICBDVEZvbnRTeW1i
b2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9y
bURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERl
c2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0
YS5mb250KCkpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBzY2FsZWRGb250ID0gYWRvcHRD
RihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNp
emUsIG51bGxwdHIpKTsKKworICAgIHJldHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChzY2FsZWRG
b250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRz
LCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRp
Y09ibGlxdWUoKSk7Cit9CisKK3ZvaWQgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVn
aW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBp
bmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hh
cGluZyk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IEdseXBoQnVmZmVyIGluaXRpYWwgYWR2
YW5jZS4KKyNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMpCisgICAgYXV0byBoYW5kbGVyID0gXihD
RlJhbmdlIHJhbmdlLCBDR0dseXBoKiogbmV3R2x5cGhzUG9pbnRlciwgQ0dTaXplKiogbmV3QWR2
YW5jZXNQb2ludGVyLCBDR1BvaW50KiogbmV3T2Zmc2V0c1BvaW50ZXIsIENGSW5kZXgqKiBuZXdJ
bmRpY2VzUG9pbnRlcikKKyAgICB7CisgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gc3RkOjptaW4o
c3RkOjptYXgocmFuZ2UubG9jYXRpb24sIHN0YXRpY19jYXN0PENGSW5kZXg+KDApKSwgc3RhdGlj
X2Nhc3Q8Q0ZJbmRleD4oZ2x5cGhCdWZmZXIuc2l6ZSgpKSk7CisgICAgICAgIGlmIChyYW5nZS5s
ZW5ndGggPCAwKSB7CisgICAgICAgICAgICByYW5nZS5sZW5ndGggPSBzdGQ6Om1pbihyYW5nZS5s
b2NhdGlvbiwgLXJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHJh
bmdlLmxvY2F0aW9uIC0gcmFuZ2UubGVuZ3RoOworICAgICAgICAgICAgZ2x5cGhCdWZmZXIucmVt
b3ZlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci5tYWtlSG9sZShiZWdpbm5p
bmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgdGhpcyk7CisKKyAg
ICAgICAgKm5ld0dseXBoc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5
cGhJbmRleCk7CisgICAgICAgICpuZXdBZHZhbmNlc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAgICAgKm5ld09mZnNldHNQb2ludGVyID0g
Z2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAgICAgKm5ld0lu
ZGljZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBo
SW5kZXgpOworICAgIH07CisKKyAgICBhdXRvIHN1YnN0cmluZyA9IHRleHQuc3Vic3RyaW5nKGJl
Z2lubmluZ1N0cmluZ0luZGV4KTsKKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN1
YnN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIGxvY2FsZVN0cmluZyA9
IExvY2FsZUNvY29hOjpjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nKGxvY2Fs
ZSkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBDVEZvbnRTaGFwZU9wdGlvbnMgb3B0
aW9ucyA9IGtDVEZvbnRTaGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRpb24KKyAgICAgICAgfCAoZW5h
YmxlS2VybmluZyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJuaW5nIDogMCkKKyAgICAgICAgfCAodGV4
dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdodFRvTGVm
dCA6IDApOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUo
KSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0
c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldIC09IGJlZ2lubmluZ1N0cmluZ0luZGV4
OworCisgICAgQ1RGb250U2hhcGVHbHlwaHMoCisgICAgICAgIG1fcGxhdGZvcm1EYXRhLmN0Rm9u
dCgpLAorICAgICAgICBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCksCisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVn
aW5uaW5nR2x5cGhJbmRleCkpLAorICAgICAgICByZWludGVycHJldF9jYXN0PENHUG9pbnQqPihn
bHlwaEJ1ZmZlci5vcmlnaW5zKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwKKyAgICAgICAgZ2x5cGhC
dWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpLAorICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cGNvbnZlcnRlZENoYXJhY3RlcnMuZ2V0KCkp
LAorICAgICAgICBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4LAorICAg
ICAgICBvcHRpb25zLAorICAgICAgICBsb2NhbGVTdHJpbmcuZ2V0KCksCisgICAgICAgIGhhbmRs
ZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAt
IGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0lu
U3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldICs9IGJlZ2lubmluZ1N0cmluZ0luZGV4Owor
CisjZWxzZQorCisgICAgVU5VU0VEX1BBUkFNKGJlZ2lubmluZ1N0cmluZ0luZGV4KTsKKyAgICBV
TlVTRURfUEFSQU0obG9jYWxlKTsKKyAgICBVTlVTRURfUEFSQU0odGV4dCk7CisKKyAgICAvLyBD
VEZvbnRUcmFuc2Zvcm1HbHlwaHMoKSBvcGVyYXRlcyBpbiB2aXN1YWwgb3JkZXIsIGJ1dCBXaWR0
aEl0ZXJhdG9yIGl0ZXJhdGVzIGluIGxvZ2ljYWwgb3JkZXIuCisgICAgLy8gVGVtcG9yYXJpbHkg
cHV0IHVzIGluIHZpc3VhbCBvcmRlciBqdXN0IGZvciB0aGUgY2FsbCwgdGhlbiBwdXQgdXMgYmFj
ayBpbnRvIGxvZ2ljYWwgb3JkZXIgd2hlbgorICAgIC8vIHRoZSBjYWxsIGlzIGRvbmUuCisgICAg
Ly8gV2UgZG9uJ3QgaGF2ZSBhIGdsb2JhbCB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXI7
IHdlJ3JlIGp1c3Qgb3BlcmF0aW5nIG9uIGEgc2luZ2xlIGNodW5rIG9mIGl0LgorICAgIC8vIFdp
ZHRoSXRlcmF0b3IgZW5jb3VudGVycyB0aGUgY2h1bmtzIG91dCBpbiBsb2dpY2FsIG9yZGVyLCBz
byB3ZSBoYXZlIHRvIG1haW50YWluIHRoYXQgaW52YXJpYW50LgorICAgIC8vIEV2ZW50dWFsbHks
IEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KCkgd2lsbCByZXZlcnNlIHRoZSB3aG9sZSBi
dWZmZXIgdG8gcHV0IHRoZSBlbnRpcmUgdGhpbmcKKyAgICAvLyBpbiB2aXN1YWwgb3JkZXIsIGJ1
dCB0aGF0J3Mgb2theSBiZWNhdXNlIGl0IGhhcyBhIHZpZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1
ZmZlci4KKyAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgQ1RGb250U2hhcGVHbHlwaHMoKSBhY2Nl
cHRzIHRoZSBidWZmZXIgaW4gbG9naWNhbCBvcmRlciBidXQgcmV0dXJucyBpdCBpbiBwaHlzaWNh
bAorICAgIC8vIG9yZGVyLCB3aGljaCBtZWFucyB0aGUgc2Vjb25kIHJldmVyc2UoKSBpbiB0aGlz
IGZ1bmN0aW9uIHN0aWxsIG5lZWRzIHRvIGV4ZWN1dGUgd2hlbgorICAgIC8vIENURm9udFNoYXBl
R2x5cGhzKCkgaXMgYmVpbmcgdXNlZC4KKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpSVEwpCisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJ
bmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7CisKKyAgICBD
VEZvbnRUcmFuc2Zvcm1PcHRpb25zIG9wdGlvbnMgPSAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRU
cmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFw
aW5nOworICAgIENURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLCByZWludGVycHJldF9jYXN0
PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwgZ2x5
cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwgb3B0aW9ucyk7CisjZW5kaWYK
KworICAgIC8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBpbiB0aGlzIGZ1bmN0aW9uIHdoZXJlIHRo
ZSBvdGhlciBjYWxsIHRvIHJldmVyc2UoKSBpcy4KKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBU
ZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5n
R2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7Cit9
CisKK3N0YXRpYyBpbnQgZXh0cmFjdE51bWJlcihDRk51bWJlclJlZiBudW1iZXIpCit7CisgICAg
aW50IHJlc3VsdCA9IDA7CisgICAgaWYgKG51bWJlcikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShudW1iZXIsIGtDRk51bWJlckludFR5cGUsICZyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIENURm9udFJlZiBjdEZv
bnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7CisgICAgQVNTRVJUKGN0Rm9udCk7CisKKyAgICAv
LyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4KKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9w
cm9ibGVtLzM5OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRj
aC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9u
byBhcyBmaXhlZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBNUy1QR290aGljLgorICAg
IC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOD4sIHdlIHNob3VsZCBub3Qg
dHJlYXQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgQXBwS2l0
IGRvZXMgcmVwb3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCisKKyAgICAvLyBTcGVjaWFs
IGNhc2UgTW9ub3R5cGVDb3JzaXZhCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxl
bS81NDU0NzA0Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQg
cGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNb25vdHlwZUNvcnNp
dmEgYXMgZml4ZWQgcGl0Y2guCisKKyAgICBhdXRvIGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRD
b3B5RnVsbE5hbWUoY3RGb250KSk7CisgICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZv
bnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKKworICAgIGludCBmaXhlZFBpdGNoID0gZXh0cmFj
dE51bWJlcihhZG9wdENGKHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDVEZvbnRDb3B5QXR0cmli
dXRlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udEZpeGVkQWR2YW5jZUF0dHJpYnV0ZSkp
KS5nZXQoKSk7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IChDVEZvbnRHZXRTeW1ib2xpY1Ry
YWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRyYWl0KSB8fCBmaXhlZFBpdGNoIHx8IChj
YXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIp
KSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdv
dGhpYyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigi
TW9ub3R5cGVDb3JzaXZhIikpKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChm
YW1pbHlOYW1lICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZT
VFIoIkNvdXJpZXIgTmV3IikpKSB7CisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5l
dyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNl
IG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25l
IChzZWUgcmRhcjovLzYyNjk3ODMpLgorICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFs
c2U7CisgICAgfQorI2VuZGlmCit9CisKK0Zsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsK
KyAgICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0
Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsIDoga0NURm9u
dE9yaWVudGF0aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAwLCAxKTsKKyAgICBib3VuZGluZ0JveC5z
ZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOworICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQp
CisgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQpOworCisgICAgcmV0dXJuIGJvdW5kaW5nQm94OworfQorCitmbG9h
dCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAg
Q0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLnNp
emUoKSkgeworICAgICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbDsKKyAgICAgICAgQ1RGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24gPSBob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhG
YWxsYmFjayA/IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwgOiBrQ1RGb250T3JpZW50YXRp
b25WZXJ0aWNhbDsKKyNpZiBVU0UoQ1RGT05UR0VUQURWQU5DRVNfV09SS0FST1VORCkKKyAgICAg
ICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRp
YWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NH
Rm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFz
aW5nU3R5bGVVbmZpbHRlcmVkOworICAgICAgICBpZiAoIUNURm9udElzQXBwbGVDb2xvckVtb2pp
KG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKSAmJiAhbV9wbGF0Zm9ybURhdGEuaGFzVmFyaWF0aW9u
cygpKQorICAgICAgICAgICAgQ1RGb250R2V0VW5zdW1tZWRBZHZhbmNlc0ZvckdseXBoc0FuZFN0
eWxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgc3R5bGUsICZnbHlwaCwg
JmFkdmFuY2UsIDEpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAg
ICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIG9y
aWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworUGF0aCBG
b250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBhdXRv
IHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKHBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpLCBnbHlwaCwgbnVsbHB0cikpOworICAgIGF1dG8gc3ludGhldGljQm9sZE9mZnNl
dCA9IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICBpZiAoc3ludGhldGljQm9sZE9m
ZnNldCkgeworICAgICAgICBhdXRvIG5ld1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFi
bGUoKSk7CisgICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVz
dWx0LmdldCgpKTsKKyAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3Jt
TWFrZVRyYW5zbGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZzZXQsIDApOworICAgICAgICBDR1BhdGhB
ZGRQYXRoKG5ld1BhdGguZ2V0KCksICZ0cmFuc2xhdGlvbiwgcmVzdWx0LmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuIHsgV1RGTW92ZShuZXdQYXRoKSB9OworICAgIH0KKyAgICByZXR1cm4geyBhZG9w
dENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KHJlc3VsdC5nZXQoKSkpIH07Cit9CisKK2Jvb2wg
Rm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlciwgT3B0aW9u
YWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAoreworICAgIGlmICh2YXJpYXRpb24pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFVuaUNoYXIgY29kZVVuaXRzWzJdOworICAgIENHR2x5
cGggZ2x5cGhzWzJdOworICAgIENGSW5kZXggY291bnQgPSAwOworICAgIFUxNl9BUFBFTkRfVU5T
QUZFKGNvZGVVbml0cywgY291bnQsIGNoYXJhY3Rlcik7CisgICAgcmV0dXJuIENURm9udEdldEds
eXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGNvZGVVbml0cywgZ2x5
cGhzLCBjb3VudCk7Cit9CisKK2Jvb2wgRm9udDo6aXNQcm9iYWJseU9ubHlVc2VkVG9SZW5kZXJJ
Y29ucygpIGNvbnN0Cit7CisgICAgYXV0byBwbGF0Zm9ybUZvbnQgPSBwbGF0Zm9ybURhdGEoKS5m
b250KCk7CisgICAgaWYgKCFwbGF0Zm9ybUZvbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIEFsbG93IG1vc3Qgbm9uLWljb24gZm9udHMgdG8gYmFpbCBlYXJseSBoZXJlIGJ5IHRl
c3RpbmcgYSBzaW5nbGUgY2hhcmFjdGVyICdhJywgd2l0aG91dCBpdGVyYXRpbmcgb3ZlciBhbGwg
YmFzaWMgbGF0aW4gY2hhcmFjdGVycy4KKyAgICBVbmlDaGFyIGxvd2VyY2FzZUFDaGFyYWN0ZXIg
PSAnYSc7CisgICAgQ0dHbHlwaCBsb3dlcmNhc2VBR2x5cGg7CisgICAgaWYgKENURm9udEdldEds
eXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1Gb250LCAmbG93ZXJjYXNlQUNoYXJhY3RlciwgJmxv
d2VyY2FzZUFHbHlwaCwgMSkpIHsKKyAgICAgICAgaWYgKCFDR1JlY3RJc0VtcHR5KENURm9udEdl
dEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxhdGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25E
ZWZhdWx0LCAmbG93ZXJjYXNlQUdseXBoLCBudWxscHRyLCAxKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgYXV0byBzdXBwb3J0ZWRDaGFyYWN0ZXJzID0gYWRvcHRD
RihDVEZvbnRDb3B5Q2hhcmFjdGVyU2V0KHBsYXRmb3JtRm9udCkpOworICAgIGlmIChDRkNoYXJh
Y3RlclNldEhhc01lbWJlckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMSkgfHwg
Q0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCks
IDIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGVuY29tcGFzc2VzIGFs
bCBiYXNpYyBMYXRpbiBub24tY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGNvbnN0ZXhwciBVbmlD
aGFyIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ID0gJyAnOworICAgIGNvbnN0ZXhwciBVbmlDaGFyIGxh
c3RDaGFyYWN0ZXJUb1Rlc3QgPSAnfic7CisgICAgY29uc3RleHByIGF1dG8gbnVtYmVyT2ZDaGFy
YWN0ZXJzVG9UZXN0ID0gbGFzdENoYXJhY3RlclRvVGVzdCAtIGZpcnN0Q2hhcmFjdGVyVG9UZXN0
ICsgMTsKKworICAgIFZlY3RvcjxDR0dseXBoPiBnbHlwaHM7CisgICAgZ2x5cGhzLmZpbGwoMCwg
bnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KTsKKyAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0
ZXJSYW5nZShwbGF0Zm9ybUZvbnQsIGdseXBocy5iZWdpbigpLCBDRlJhbmdlTWFrZShmaXJzdENo
YXJhY3RlclRvVGVzdCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KSk7CisgICAgZ2x5cGhzLnJl
bW92ZUFsbCgwKTsKKworICAgIGlmIChnbHlwaHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBWZWN0b3I8Q0dSZWN0PiBib3VuZGluZ1JlY3RzOworICAgIGJvdW5kaW5n
UmVjdHMuZmlsbChDR1JlY3RaZXJvLCBnbHlwaHMuc2l6ZSgpKTsKKyAgICBDVEZvbnRHZXRCb3Vu
ZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVs
dCwgZ2x5cGhzLmJlZ2luKCksIGJvdW5kaW5nUmVjdHMuYmVnaW4oKSwgZ2x5cGhzLnNpemUoKSk7
CisgICAgcmV0dXJuIG5vdEZvdW5kID09IGJvdW5kaW5nUmVjdHMuZmluZE1hdGNoaW5nKFtdKGF1
dG8mIHJlY3QpIHsKKyAgICAgICAgcmV0dXJuICFDR1JlY3RJc0VtcHR5KHJlY3QpOworICAgIH0p
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41NDViMGU4NTAxMjE1OWY2MDEzZmY1MjI5ZGIyNDBhMjdlNjI4MGNi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
Rm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworI2lmIFBM
QVRGT1JNKENPQ09BKQorI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQ29yZVRleHRTUEkuaD4KKyNl
bHNlCisjaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
Q1RGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlh
bnQgd2lkdGhWYXJpYW50LCBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSkKKyAg
ICA6IEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1
ZSwgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwgdGV4dFJlbmRlcmluZ01vZGUpCit7CisgICAg
QVNTRVJUX0FSRyhmb250LCBmb250KTsKKyAgICBtX2ZvbnQgPSBmb250OworICAgIG1faXNDb2xv
ckJpdG1hcEZvbnQgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtDVEZvbnRDb2xv
ckdseXBoc1RyYWl0OworICAgIG1faXNTeXN0ZW1Gb250ID0gV2ViQ29yZTo6aXNTeXN0ZW1Gb250
KG1fZm9udC5nZXQoKSk7CisgICAgYXV0byB2YXJpYXRpb25zID0gYWRvcHRDRihzdGF0aWNfY2Fz
dDxDRkRpY3Rpb25hcnlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFZhcmlh
dGlvbkF0dHJpYnV0ZSkpKTsKKyAgICBtX2hhc1ZhcmlhdGlvbnMgPSB2YXJpYXRpb25zICYmIENG
RGljdGlvbmFyeUdldENvdW50KHZhcmlhdGlvbnMuZ2V0KCkpOworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBtX2lzRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX2ZvbnQu
Z2V0KCkpOworI2VuZGlmCit9CisKK2Jvb2wgaXNTeXN0ZW1Gb250KENURm9udFJlZiBmb250KQor
eworI2lmIEhBVkUoQ1RGT05USVNTWVNURU1VSUZPTlQpCisgICAgcmV0dXJuIENURm9udElzU3lz
dGVtVUlGb250KGZvbnQpOworI2Vsc2UKKyAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lz
dGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5nZXQoKSk7
CisjZW5kaWYKK30KKworQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OnJlZ2lzdGVyZWRGb250
KCkgY29uc3QKK3sKKyAgICBDVEZvbnRSZWYgcGxhdGZvcm1Gb250ID0gZm9udCgpOworICAgIEFT
U0VSVChwbGF0Zm9ybUZvbnQpOworICAgIGlmIChwbGF0Zm9ybUZvbnQgJiYgYWRvcHRDRihDVEZv
bnRDb3B5QXR0cmlidXRlKHBsYXRmb3JtRm9udCwga0NURm9udFVSTEF0dHJpYnV0ZSkpKQorICAg
ICAgICByZXR1cm4gcGxhdGZvcm1Gb250OworICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYg
UExBVEZPUk0oQ09DT0EpCitpbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVy
ZVNlbGVjdG9yKEZvbnRXaWR0aFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlh
bnQpIHsKKyAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aDoKKyAgICAgICAg
cmV0dXJuIGtQcm9wb3J0aW9uYWxUZXh0U2VsZWN0b3I7CisKKyAgICBjYXNlIEZvbnRXaWR0aFZh
cmlhbnQ6OkhhbGZXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtIYWxmV2lkdGhUZXh0U2VsZWN0b3I7
CisKKyAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6CisgICAgICAgIHJldHVy
biBrVGhpcmRXaWR0aFRleHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6
UXVhcnRlcldpZHRoOgorICAgICAgICByZXR1cm4ga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3RvcjsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1Byb3BvcnRp
b25hbFRleHRTZWxlY3RvcjsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpCit7CisgICAgYXV0byBs
YXN0UmVzb3J0ID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXpl
KENGU1RSKCJMYXN0UmVzb3J0IiksIDApKTsKKworICAgIENGVHlwZVJlZiBkZXNjcmlwdG9yc1td
ID0geyBsYXN0UmVzb3J0LmdldCgpIH07CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5
ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc2NyaXB0b3Jz
LCBXVEZfQVJSQVlfTEVOR1RIKGRlc2NyaXB0b3JzKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykp
OworCisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRl
IH07CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBhcnJheS5nZXQoKSB9OworICAgIHJldHVy
biBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2
YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGljIENU
Rm9udERlc2NyaXB0b3JSZWYgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVz
Y3JpcHRvcigpCit7CisgICAgc3RhdGljIENURm9udERlc2NyaXB0b3JSZWYgZGVzY3JpcHRvciA9
IENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhjYXNjYWRlVG9MYXN0UmVzb3J0
QXR0cmlidXRlc0RpY3Rpb25hcnkoKS5nZXQoKSk7CisgICAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9
CisKK0NURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAoreworICAgIGlm
IChtX2N0Rm9udCkKKyAgICAgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOworCisgICAgQVNTRVJU
KG1fZm9udCk7CisgICAgbV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0
cmlidXRlcyhtX2ZvbnQuZ2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRvTGFzdFJlc29y
dEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpKSk7CisKKyAgICBpZiAobV93aWR0aFZhcmlh
bnQgIT0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7CisgICAgICAgIGludCBmZWF0
dXJlVHlwZVZhbHVlID0ga1RleHRTcGFjaW5nVHlwZTsKKyAgICAgICAgaW50IGZlYXR1cmVTZWxl
Y3RvclZhbHVlID0gbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IobV93aWR0
aFZhcmlhbnQpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc291cmNl
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fY3RGb250Lmdl
dCgpKSk7CisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVR5cGUgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUs
ICZmZWF0dXJlVHlwZVZhbHVlKSk7CisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVh
dHVyZVNlbGVjdG9yID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUpKTsKKyAgICAgICAgUmV0
YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9u
dERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aEZlYXR1cmUoc291cmNlRGVzY3JpcHRvci5nZXQoKSwg
ZmVhdHVyZVR5cGUuZ2V0KCksIGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkpOworICAgICAgICBSZXRh
aW5QdHI8Q1RGb250UmVmPiBuZXdGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERl
c2NyaXB0b3IobmV3RGVzY3JpcHRvci5nZXQoKSwgbV9zaXplLCAwKSk7CisKKyAgICAgICAgaWYg
KG5ld0ZvbnQpCisgICAgICAgICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7CisgICAgfQorCisgICAg
cmV0dXJuIG1fY3RGb250LmdldCgpOworfQorI2Vsc2UKK0NURm9udFJlZiBGb250UGxhdGZvcm1E
YXRhOjpjdEZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBmb250KCk7Cit9CisjZW5kaWYKKwor
UmV0YWluUHRyPENGVHlwZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlD
aGVjayhDVEZvbnRSZWYgY3RGb250KQoreworICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9w
dENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihjdEZvbnQpKTsKKyAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODY4MyBUaGlzIGlzIGEgc2hh
bGxvdyBwb2ludGVyIGNvbXBhcmUgZm9yIHdlYiBmb250cworICAgIC8vIGJlY2F1c2UgdGhlIFVS
TCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgZm9udC4gVGhpcyBtZWFucyB3ZSBtaWdodCBl
cnJvbmVvdXNseSBnZXQgZmFsc2UgbmVnYXRpdmVzLgorICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
dXJsID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRlVSTFJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlB
dHRyaWJ1dGUoZm9udERlc2NyaXB0b3IuZ2V0KCksIGtDVEZvbnRSZWZlcmVuY2VVUkxBdHRyaWJ1
dGUpKSk7CisgICAgQVNTRVJUKCF1cmwgfHwgQ0ZHZXRUeXBlSUQodXJsLmdldCgpKSA9PSBDRlVS
TEdldFR5cGVJRCgpKTsKKyAgICByZXR1cm4gdXJsOworfQorCitSZXRhaW5QdHI8Q0ZUeXBlUmVm
PiBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gb2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhjdEZvbnQoKSk7Cit9CisKK1JlZlB0cjxT
aGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFi
bGUpIGNvbnN0Cit7CisgICAgaWYgKFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENG
KENURm9udENvcHlUYWJsZShmb250KCksIHRhYmxlLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlv
bnMpKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEuZ2V0KCkpOwor
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECisKK1N0cmluZyBG
b250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgU3RyaW5nIGZvbnRE
ZXNjcmlwdGlvbiB7IGFkb3B0Q0YoQ0ZDb3B5RGVzY3JpcHRpb24oZm9udCgpKSkuZ2V0KCkgfTsK
KyAgICByZXR1cm4gbWFrZVN0cmluZyhmb250RGVzY3JpcHRpb24sICcgJywgbV9zaXplLAorICAg
ICAgICAobV9zeW50aGV0aWNCb2xkID8gIiBzeW50aGV0aWMgYm9sZCIgOiAiIiksCisgICAgICAg
IChtX3N5bnRoZXRpY09ibGlxdWUgPyAiIHN5bnRoZXRpYyBvYmxpcXVlIiA6ICIiKSwKKyAgICAg
ICAgKG1fb3JpZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/ICIgdmVydGlj
YWwgb3JpZW50YXRpb24iIDogIiIpKTsKK30KKworI2VuZGlmCisKK1N0cmluZyBGb250UGxhdGZv
cm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBwbGF0Zm9ybUZvbnQg
PSBmb250KCkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKHBs
YXRmb3JtRm9udCkpLmdldCgpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0
L0dseXBoUGFnZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2N0L0dseXBoUGFnZUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzhlZTM2ZGM2Yjg1YzQzYTNk
NWI5Y2Q5NTRlYzRlMTM3YmVmNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwCkBAIC0wLDAgKzEsODEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisKKyNpbmNsdWRlICJG
b250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8cGFsL3Nw
aS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3Jl
VGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJv
b2wgc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgaWYgKCFmb250Lmhh
c1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFGb250Q2Fz
Y2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjb25zdGV4cHIg
Q0dHbHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVD
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKK3sKKyAgICBBU1NFUlQoYnVmZmVy
TGVuZ3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0gMiAqIEdseXBoUGFn
ZTo6c2l6ZSk7CisKKyAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOworICAgIFZl
Y3RvcjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOworICAgIHVuc2lnbmVkIGds
eXBoU3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKKworICAgIGlmIChzaG91
bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAg
ICAgICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1E
YXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBo
cy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBDVEZvbnRHZXRHbHlw
aHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisK
KyAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKKyAgICAgICAgYXV0byB0aGVHbHlwaCA9IGdseXBo
c1tpICogZ2x5cGhTdGVwXTsKKyAgICAgICAgaWYgKHRoZUdseXBoICYmIHRoZUdseXBoICE9IGRl
bGV0ZWRHbHlwaCkgeworICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCB0aGVHbHlwaCk7
CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gaGF2ZUdseXBoczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhNTM1ZGM0MDNlNDMyNDNhYjgxM2M2YzE0
ZmRlY2FkNjdlOGRlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNs
dWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIGJvb2wgc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciog
YnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAg
aWYgKCFmb250Lmhhc1ZlcnRpY2FsR2x5cGhzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
aWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBjb25z
dCBjb25zdGV4cHIgQ0dHbHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7Ci0KLWJvb2wgR2x5cGhQ
YWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKLXsKLSAgICBB
U1NFUlQoYnVmZmVyTGVuZ3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0g
MiAqIEdseXBoUGFnZTo6c2l6ZSk7Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9u
dCgpOwotICAgIFZlY3RvcjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOwotICAg
IHVuc2lnbmVkIGdseXBoU3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKLQot
ICAgIGlmIChzaG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3Ro
LCBmb250KSkKLSAgICAgICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZv
bnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1
ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICBD
VEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZl
ckxlbmd0aCk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKLSAgICAgICAgYXV0byB0aGVH
bHlwaCA9IGdseXBoc1tpICogZ2x5cGhTdGVwXTsKLSAgICAgICAgaWYgKHRoZUdseXBoICYmIHRo
ZUdseXBoICE9IGRlbGV0ZWRHbHlwaCkgewotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChp
LCB0aGVHbHlwaCk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
YXNjYWRlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYXNjYWRlQ0dXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ZGMzZWMxMjFjYzAyMjA3YjhjYjE2ODI3
MTNkNmJiOGQ5ZjZkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisKKyNp
ZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9h
dENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTWlu
aW11bSA9ICgxIDw8IDQpOworY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHls
ZUxpZ2h0ID0gKDIgPDwgNCk7Citjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0
eWxlTWVkaXVtID0gKDMgPDwgNCk7Citjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGlu
Z1N0eWxlSGVhdnkgPSAoNCA8PCA0KTsKKworY29uc3RleHByIGludCBmb250U21vb3RoaW5nTGV2
ZWxNZWRpdW0gPSAyOworY29uc3RleHByIENHRmxvYXQgYW50aWFsaWFzaW5nR2FtbWEgPSAyLjM7
CisKK2RvdWJsZSBGb250Q2FzY2FkZTo6c19mb250U21vb3RoaW5nQ29udHJhc3QgPSAyOwordWlu
dDMyX3QgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGluZ1R5cGUgPSBrQ0dGb250U21vb3RoaW5n
U3R5bGVNZWRpdW07CitpbnQgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGluZ0xldmVsID0gZm9u
dFNtb290aGluZ0xldmVsTWVkaXVtOworYm9vbCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21v
b3RoaW5nRW5hYmxlZDsKK3VpbnQzMl90IEZvbnRDYXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhp
bmdUeXBlOworYm9vbCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nU2V0OworCit2
b2lkIEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nTGV2ZWwoaW50IGxldmVsKQoreworICAg
IGNvbnN0IHVpbnQzMl90IHNtb290aGluZ1R5cGVbXSA9IHsgCisgICAgICAgIDAsIC8vIEZvbnRT
bW9vdGhpbmdUeXBlU3RhbmRhcmQKKyAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlTGlnaHQs
IC8vIEZvbnRTbW9vdGhpbmdUeXBlTGlnaHQKKyAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxl
TWVkaXVtLCAvLyBGb250U21vb3RoaW5nVHlwZU1lZGl1bQorICAgICAgICBrQ0dGb250U21vb3Ro
aW5nU3R5bGVIZWF2eSwgLy8gRm9udFNtb290aGluZ1R5cGVTdHJvbmcKKyAgICB9OworCisgICAg
aWYgKGxldmVsIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxldmVsKSA+IEFSUkFZU0laRShz
bW9vdGhpbmdUeXBlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc19mb250U21vb3RoaW5nVHlw
ZSA9IHNtb290aGluZ1R5cGVbbGV2ZWxdOworICAgIHNfZm9udFNtb290aGluZ0xldmVsID0gbGV2
ZWw7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHRm9udFNtb290aGluZ1N0eWxlKENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQsIHVpbnQzMl90IHNtb290aGluZ1R5cGUsIGJvb2wgZm9udEFsbG93c1Ntb290
aGluZyA9IHRydWUpCit7CisgICAgaWYgKHNtb290aGluZ1R5cGUpIHsKKyAgICAgICAgQ0dDb250
ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBmb250QWxsb3dzU21vb3RoaW5nKTsK
KyAgICAgICAgQ0dDb250ZXh0U2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgc21vb3Ro
aW5nVHlwZSk7CisgICAgfSBlbHNlCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZv
bnRzKGNnQ29udGV4dCwgZmFsc2UpOworfQorCit1aW50MzJfdCBGb250Q2FzY2FkZTo6c2V0Rm9u
dFNtb290aGluZ1N0eWxlKENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIGJvb2wgZm9udEFsbG93c1Nt
b290aGluZykKK3sKKyAgICB1aW50MzJfdCBvbGRGb250U21vb3RoaW5nU3R5bGUgPSAwOworICAg
IGlmIChDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpKQorICAgICAgICBv
bGRGb250U21vb3RoaW5nU3R5bGUgPSBDR0NvbnRleHRHZXRGb250U21vb3RoaW5nU3R5bGUoY2dD
b250ZXh0KTsKKyAgICBzZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIHNfZm9udFNt
b290aGluZ1R5cGUsIGZvbnRBbGxvd3NTbW9vdGhpbmcpOworCisgICAgcmV0dXJuIG9sZEZvbnRT
bW9vdGhpbmdTdHlsZTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0Nv
bnRyYXN0KENHRmxvYXQgY29udHJhc3QpCit7CisgICAgc19mb250U21vb3RoaW5nQ29udHJhc3Qg
PSBjb250cmFzdDsKK30KKworc3RhdGljIGZsb2F0IGNsZWFyVHlwZUNvbnRyYXN0KCkKK3sKKyAg
ICBjb25zdCBXQ0hBUiByZWZlcmVuY2VDaGFyYWN0ZXIgPSAnXFwnOworICAgIHN0YXRpYyBVSU5U
IGxhc3RDb250cmFzdCA9IDIwMDA7CisgICAgc3RhdGljIGZsb2F0IGdhbW1hID0gMjsKKyAgICBV
SU5UIGNvbnRyYXN0OworCisgICAgaWYgKCFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VURk9O
VFNNT09USElOR0NPTlRSQVNULCAwLCAmY29udHJhc3QsIDApIHx8IGNvbnRyYXN0ID09IGxhc3RD
b250cmFzdCkKKyAgICAgICAgcmV0dXJuIGdhbW1hOworCisgICAgbGFzdENvbnRyYXN0ID0gY29u
dHJhc3Q7CisKKyAgICBhdXRvIGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxl
REMoMCkpOworCisgICAgSEdESU9CSiBvbGRIRk9OVCA9IDo6U2VsZWN0T2JqZWN0KGRjLmdldCgp
LCBHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSk7CisgICAgR0xZUEhNRVRSSUNTIGds
eXBoTWV0cmljczsKKworICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAg
MCwgMCwgIDAsIDAsICAwLCAxIH07CisgICAgaWYgKDo6R2V0R2x5cGhPdXRsaW5lKGRjLmdldCgp
LCByZWZlcmVuY2VDaGFyYWN0ZXIsIEdHT19NRVRSSUNTLCAmZ2x5cGhNZXRyaWNzLCAwLCAwLCAm
aWRlbnRpdHkpID09IEdESV9FUlJPUikKKyAgICAgICAgcmV0dXJuIGNvbnRyYXN0IC8gMTAwMC4w
ZjsKKworICAgIEJJVE1BUElORk8gYml0bWFwSW5mbzsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7CisgICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlQbGFuZXMgPSAxOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Np
b24gPSBCSV9SR0I7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgPSAwOwor
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7CisgICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlZUGVsc1Blck1ldGVyID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaUNsckltcG9ydGFudCA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlXaWR0
aCA9IGdseXBoTWV0cmljcy5nbUJsYWNrQm94WDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5i
aUhlaWdodCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSk7Cisg
ICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlCaXRDb3VudCA9IDMyOworICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpQ2xyVXNlZCA9IDA7CisKKyAgICB1aW50OF90KiBwaXhlbHMgPSBudWxscHRy
OworICAgIGF1dG8gYml0bWFwID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAs
ICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZw
aXhlbHMpLCAwLCAwKSk7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBjb250cmFz
dCAvIDEwMDAuMGY7CisKKyAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGRj
LmdldCgpLCBiaXRtYXAuZ2V0KCkpOworCisgICAgQklUTUFQIGJtcEluZm87CisgICAgOjpHZXRP
YmplY3QoYml0bWFwLmdldCgpLCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKKyAgICBtZW1z
ZXQocGl4ZWxzLCAwLCBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkgKiBibXBJbmZvLmJtV2lkdGhC
eXRlcyk7CisKKyAgICA6OlNldEJrTW9kZShkYy5nZXQoKSwgT1BBUVVFKTsKKyAgICA6OlNldFRl
eHRBbGlnbihkYy5nZXQoKSwgVEFfTEVGVCB8IFRBX1RPUCk7CisKKyAgICA6OlNldFRleHRDb2xv
cihkYy5nZXQoKSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsKKyAgICA6OlNldEJrQ29sb3IoZGMuZ2V0
KCksIFJHQigwLCAwLCAwKSk7CisgICAgOjpFeHRUZXh0T3V0VyhkYy5nZXQoKSwgMCwgMCwgMCwg
MCwgJnJlZmVyZW5jZUNoYXJhY3RlciwgMSwgMCk7CisKKyAgICB1aW50OF90KiByZWZlcmVuY2VQ
aXhlbCA9IG51bGxwdHI7CisgICAgdWludDhfdCB3aGl0ZVJlZmVyZW5jZVZhbHVlID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSAmJiAhcmVm
ZXJlbmNlUGl4ZWw7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQgKiBn
bHlwaE1ldHJpY3MuZ21CbGFja0JveFg7ICsraikgeworICAgICAgICAgICAgd2hpdGVSZWZlcmVu
Y2VWYWx1ZSA9IHBpeGVsc1tpICogYm1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqXTsKKyAgICAgICAg
ICAgIC8vIExvb2sgZm9yIGEgcGl4ZWwgdmFsdWUgaW4gdGhlIHJhbmdlIHRoYXQgYWxsb3dzIHVz
IHRvIGVzdGltYXRlCisgICAgICAgICAgICAvLyBnYW1tYSB3aXRoaW4gMC4xIHdpdGhvdXQgYW4g
ZXJyb3IuCisgICAgICAgICAgICBpZiAod2hpdGVSZWZlcmVuY2VWYWx1ZSA+IDMyICYmIHdoaXRl
UmVmZXJlbmNlVmFsdWUgPCAyNDApIHsKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VQaXhlbCA9
IHBpeGVscyArIGkgKiBibXBJbmZvLmJtV2lkdGhCeXRlcyArIGo7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVmZXJl
bmNlUGl4ZWwpIHsKKyAgICAgICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigwLCAwLCAw
KSk7CisgICAgICAgIDo6U2V0QmtDb2xvcihkYy5nZXQoKSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsK
KyAgICAgICAgOjpFeHRUZXh0T3V0VyhkYy5nZXQoKSwgMCwgMCwgMCwgMCwgJnJlZmVyZW5jZUNo
YXJhY3RlciwgMSwgMCk7CisgICAgICAgIHVpbnQ4X3QgYmxhY2tSZWZlcmVuY2VWYWx1ZSA9ICpy
ZWZlcmVuY2VQaXhlbDsKKworICAgICAgICBmbG9hdCBtaW5EZWx0YSA9IDE7CisgICAgICAgIGZv
ciAoZmxvYXQgZyA9IDE7IGcgPCAyLjNmOyBnICs9IDAuMWYpIHsKKyAgICAgICAgICAgIGZsb2F0
IGRlbHRhID0gZmFicyhwb3dmKCh3aGl0ZVJlZmVyZW5jZVZhbHVlIC8gMjU1LjBmKSwgZykgKyBw
b3dmKChibGFja1JlZmVyZW5jZVZhbHVlIC8gMjU1LjBmKSwgZykgLSAxKTsKKyAgICAgICAgICAg
IGlmIChkZWx0YSA8IG1pbkRlbHRhKSB7CisgICAgICAgICAgICAgICAgbWluRGVsdGEgPSBkZWx0
YTsKKyAgICAgICAgICAgICAgICBnYW1tYSA9IGc7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9IGVsc2UKKyAgICAgICAgZ2FtbWEgPSBjb250cmFzdCAvIDEwMDAuMGY7CisKKyAgICA6
OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgb2xkQml0bWFwKTsKKyAgICA6OlNlbGVjdE9iamVjdChk
Yy5nZXQoKSwgb2xkSEZPTlQpOworCisgICAgcmV0dXJuIGdhbW1hOworfQorCit2b2lkIEZvbnRD
YXNjYWRlOjpzeXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgpCit7CisgICAgOjpTeXN0ZW1QYXJh
bWV0ZXJzSW5mbyhTUElfR0VURk9OVFNNT09USElORywgMCwgJnNfc3lzdGVtRm9udFNtb290aGlu
Z0VuYWJsZWQsIDApOworICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9P
VEhJTkdUWVBFLCAwLCAmc19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZSwgMCk7CisgICAgc19mb250
U21vb3RoaW5nQ29udHJhc3QgPSBjbGVhclR5cGVDb250cmFzdCgpOworICAgIHNfc3lzdGVtRm9u
dFNtb290aGluZ1NldCA9IHRydWU7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OnNldENHQ29udGV4
dEZvbnRSZW5kZXJpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIGlzU3lzdGVt
Rm9udCwgYm9vbCAvKmlzUHJpbnRlckZvbnQqLywgYm9vbCB1c2VQbGF0Zm9ybU5hdGl2ZUdseXBo
cykKK3sKKyAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7CisgICAgYm9vbCBtYXlTdWJw
aXhlbFBvc2l0aW9uID0gdHJ1ZTsKKyAgICBDR0Zsb2F0IGNvbnRyYXN0ID0gMjsKKyAgICBpZiAo
dXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpIHsKKyAgICAgICAgLy8gPHJkYXI6Ly82NTY0NTAxPiBH
REkgY2FuJ3Qgc3VicGl4ZWwtcG9zaXRpb24sIHNvIGRvbid0IGJvdGhlciBhc2tpbmcuCisgICAg
ICAgIG1heVN1YnBpeGVsUG9zaXRpb24gPSBmYWxzZTsKKyAgICAgICAgaWYgKCFzX3N5c3RlbUZv
bnRTbW9vdGhpbmdTZXQpCisgICAgICAgICAgICBzeXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgp
OworICAgICAgICBjb250cmFzdCA9IHNfZm9udFNtb290aGluZ0NvbnRyYXN0OworICAgICAgICBz
aG91bGRBbnRpYWxpYXMgPSBzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkOworICAgICAgICBp
ZiAoc19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZSA9PSBGRV9GT05UU01PT1RISU5HU1RBTkRBUkQp
IHsKKyAgICAgICAgICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQs
IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1pbmltdW0pOworICAgICAgICAgICAgY29udHJhc3QgPSBh
bnRpYWxpYXNpbmdHYW1tYTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDR0NvbnRleHRTZXRGb250
U21vb3RoaW5nQ29udHJhc3QoY2dDb250ZXh0LCBjb250cmFzdCk7CisgICAgQ0dDb250ZXh0U2V0
U2hvdWxkVXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMoY2dDb250ZXh0LCB1c2VQbGF0Zm9ybU5hdGl2
ZUdseXBocyk7CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0
LCBzaG91bGRBbnRpYWxpYXMpOworICAgIENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zv
cm0gPSBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KTsKKyAgICBib29sIGlzUHVyZVRyYW5zbGF0
aW9uID0gY29udGV4dFRyYW5zZm9ybS5hID09IDEgJiYgKGNvbnRleHRUcmFuc2Zvcm0uZCA9PSAx
IHx8IGNvbnRleHRUcmFuc2Zvcm0uZCA9PSAtMSkgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYiAmJiAh
Y29udGV4dFRyYW5zZm9ybS5jOworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUG9zaXRp
b25Gb250cyhjZ0NvbnRleHQsIG1heVN1YnBpeGVsUG9zaXRpb24gJiYgKGlzU3lzdGVtRm9udCB8
fCAhaXNQdXJlVHJhbnNsYXRpb24pKTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMoY2dDb250ZXh0LCBpc1B1cmVUcmFuc2xhdGlvbik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGVGb3JGb250KGJvb2wgaXNT
eXN0ZW1Gb250LCBib29sIGlzUHJpbnRlckZvbnQpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8g
c3VwcG9ydCBhIG1pbmltdW0gYW50aWFsaWFzZWQgZm9udCBzaXplLgorCisgICAgaWYgKGlzU3lz
dGVtRm9udCB8fCBpc1ByaW50ZXJGb250KQorICAgICAgICByZXR1cm4ga0NHRm9udFJlbmRlcmlu
Z1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlv
bmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOworCisgICAg
cmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKK30KKwordm9pZCBGb250
Q2FzY2FkZTo6Z2V0UGxhdGZvcm1HbHlwaEFkdmFuY2VzKENHRm9udFJlZiBmb250LCBjb25zdCBD
R0FmZmluZVRyYW5zZm9ybSYgbSwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgaXNQcmludGVyRm9u
dCwgQ0dHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKQoreworICAgIENHRm9udFJlbmRlcmlu
Z1N0eWxlIHN0eWxlID0gcmVuZGVyaW5nU3R5bGVGb3JGb250KGlzU3lzdGVtRm9udCwgaXNQcmlu
dGVyRm9udCk7CisgICAgQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKGZvbnQsICZtLCBz
dHlsZSwgJmdseXBoLCAxLCAmYWR2YW5jZSk7CisKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzc2
MTE2NT4gVGhlIEdESSBiYWNrIGVuZCBpbiBDb3JlIEdyYXBoaWNzIHNvbWV0aW1lcyByZXR1cm5z
IGFkdmFuY2VzIHRoYXQKKyAgICAvLyBkaWZmZXIgZnJvbSB3aGF0IHRoZSBmb250J3MgaG10eCB0
YWJsZSBzcGVjaWZpZXMuIFRoZSBmb2xsb3dpbmcgY29kZSBjb3JyZWN0cyB0aGF0LgorICAgIENG
RGF0YVJlZiBobXR4VGFibGUgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoZm9udCwgJ2htdHgnKTsK
KyAgICBpZiAoIWhtdHhUYWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIENGRGF0YVJlZiBoaGVh
VGFibGUgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoZm9udCwgJ2hoZWEnKTsKKyAgICBpZiAoIWho
ZWFUYWJsZSkgeworICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNvbnN0IENGSW5kZXggaGhlYVRhYmxlU2l6ZSA9IDM2OworICAgIGNv
bnN0IHB0cmRpZmZfdCBoaGVhVGFibGVOdW1iZXJPZkhNZXRyaWNzT2Zmc2V0ID0gMzQ7CisgICAg
aWYgKENGRGF0YUdldExlbmd0aChoaGVhVGFibGUpIDwgaGhlYVRhYmxlU2l6ZSkgeworICAgICAg
ICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaG9ydCBudW1iZXJPZkhNZXRy
aWNzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihDRkRhdGFHZXRC
eXRlUHRyKGhoZWFUYWJsZSkgKyBoaGVhVGFibGVOdW1iZXJPZkhNZXRyaWNzT2Zmc2V0KTsKKyAg
ICBudW1iZXJPZkhNZXRyaWNzID0gKChudW1iZXJPZkhNZXRyaWNzICYgMHhGRikgPDwgOCkgfCAo
bnVtYmVyT2ZITWV0cmljcyA+PiA4KTsKKyAgICBpZiAoIW51bWJlck9mSE1ldHJpY3MpIHsKKyAg
ICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7CisgICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdseXBoID49IG51bWJlck9mSE1l
dHJpY3MpCisgICAgICAgIGdseXBoID0gbnVtYmVyT2ZITWV0cmljcyAtIDE7CisKKyAgICBpZiAo
Q0ZEYXRhR2V0TGVuZ3RoKGhtdHhUYWJsZSkgPCA0ICogKGdseXBoICsgMSkpIHsKKyAgICAgICAg
Q0ZSZWxlYXNlKGhtdHhUYWJsZSk7CisgICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgdW5zaWduZWQgc2hvcnQgYWR2YW5jZUluRGVzaWdu
VW5pdHMgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KENGRGF0YUdl
dEJ5dGVQdHIoaG10eFRhYmxlKSArIDQgKiBnbHlwaCk7CisgICAgYWR2YW5jZUluRGVzaWduVW5p
dHMgPSAoKGFkdmFuY2VJbkRlc2lnblVuaXRzICYgMHhGRikgPDwgOCkgfCAoYWR2YW5jZUluRGVz
aWduVW5pdHMgPj4gOCk7CisgICAgQ0dTaXplIGhvcml6b250YWxBZHZhbmNlID0gQ0dTaXplTWFr
ZShzdGF0aWNfY2FzdDxDR0Zsb2F0PihhZHZhbmNlSW5EZXNpZ25Vbml0cykgLyBDR0ZvbnRHZXRV
bml0c1BlckVtKGZvbnQpLCAwKTsKKyAgICBob3Jpem9udGFsQWR2YW5jZSA9IENHU2l6ZUFwcGx5
QWZmaW5lVHJhbnNmb3JtKGhvcml6b250YWxBZHZhbmNlLCBtKTsKKyAgICBhZHZhbmNlLndpZHRo
ID0gaG9yaXpvbnRhbEFkdmFuY2Uud2lkdGg7CisgICAgaWYgKCEoc3R5bGUgJiBrQ0dGb250UmVu
ZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nKSkKKyAgICAgICAgYWR2YW5jZS53aWR0aCA9
IHJvdW5kZihhZHZhbmNlLndpZHRoKTsKKworICAgIENGUmVsZWFzZShoaGVhVGFibGUpOworICAg
IENGUmVsZWFzZShobXR4VGFibGUpOworfQorCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408522</attachid>
            <date>2020-09-11 00:45:00 -0700</date>
            <delta_ts>2020-09-11 13:13:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216400-20200911004459.patch</filename>
            <type>text/plain</type>
            <size>167422</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiYWY5MmYwNjYxMjgwYzFhNTQzZGRk
YWJmMzgzNjk1ZjNkMmE1NDUuLmFlODc4MGFmODNkMTFhZDU5OWYzYjMxYTU2NmMyOWExMTg1YzA5
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTEgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgQ29yZVRleHQt
c3BlY2lmaWMgY29kZSBmcm9tICoqKkNvY29hLm1tIHRvICoqKkNvcmVUZXh0LmNwcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NDAwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1V
c2UuaDoKKwogMjAyMC0wOS0xMCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBEaXNhYmxlIGhhcmR3YXJlIEpQRUcgZGVjb2Rpbmcgb24geDg2IE1hYwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDBiNWZjZjQ3Y2E0ZWQ4MzFiYjAxNjI3OWZmYTdmYzMyYjE1MDdiNDQuLmIyODIwMGU4ZGVjMTU1
MTA2YmQwYTE4ZDQ2MjgxOGUzOGEyMjgxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDAgQEAK
KzIwMjAtMDktMTEgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbQ29jb2FdIE1pZ3JhdGUgQ29yZVRleHQtc3BlY2lmaWMgY29kZSBmcm9tICoqKkNv
Y29hLm1tIHRvICoqKkNvcmVUZXh0LmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NDAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3Igc2hhcmluZyB0aGUg
Q29yZVRleHQgY29kZSB3aXRoIHRoZSBBcHBsZSBXaW5kb3dzIHBvcnQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBkb2Vzbid0IGFjdHVhbGx5IGNhdXNlIFdpbmRvd3MgdG8gdXNlIHRoaXMgY29kZSB5
ZXQuIFRoYXQgd2lsbCBoYXBwZW4KKyAgICAgICAgaW4gYSBzZXJpZXMgb2Ygc3Vic2VxdWVudCBw
YXRjaGVzLiBUaGlzIHBhdGNoIGlzIGp1c3QgdGhlIGZpcnN0IHN0YWdlLgorCisgICAgICAgIFRo
ZXJlIGlzbid0IGFueSBhY3R1YWwgYmVoYXZpb3IgY2hhbmdlIGhlcmUgLSBpdCdzIGp1c3QgbW92
aW5nIGNvZGUgYXJvdW5kIGJldHdlZW4KKyAgICAgICAgZmlsZXMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGFkZHMgYSBuZXcgVVNFKCkgZmxhZzogVVNFKENUKSB0byBiZSBwYXJhbGxlbCB3
aXRoIFVTRShDRykgYW5kCisgICAgICAgIFVTRShDQSkuIEl0IG1pZ3JhdGVzIENvcmVUZXh0LXNw
ZWNpZmljIGNvZGUgZnJvbSAjaWYgUExBVEZPUk0oQ09DT0EpIHRvCisgICAgICAgICNpZiBVU0Uo
Q1QpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9y
IGNoYW5nZS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFVzZUxldHRlcnByZXNzRWZmZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dGb250UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3RlbUZvbnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZvbnRGb3JD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTeXN0ZW1Gb250
KTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnJlZ2lzdGVyZWRGb250IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVjdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVz
RGljdGlvbmFyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjYXNjYWRlVG9MYXN0UmVz
b3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5
Q2hlY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6b3BlblR5cGVUYWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjppc1N1YnBpeGVs
QW50aWFsaWFzaW5nQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxWZWN0b3JXaXRo
SG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFVzZUxl
dHRlcnByZXNzRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5j
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dGb250UmVuZGVyaW5nTW9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3RlbUZvbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENvcmVUZXh0LmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2Nv
YS5tbS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OmFwcGx5VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1N5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bWFw
Rm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FzY2FkZVRvTGFzdFJlc29ydEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OmNhc2NhZGVUb0xhc3RSZXNvcnRBbmRWYXJpYXRpb25zRm9udERlc2NyaXB0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y3RGb250IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseU5hbWUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
bHlwaFBhZ2VNYWMuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fz
Y2FkZUNHV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0
Rm9udFNtb290aGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHRm9udFNtb290aGlu
Z1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5n
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdD
b250cmFzdCk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclR5cGVDb250cmFzdCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZTo6c3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnNldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJpbmdTdHlsZUZvckZvbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldFBsYXRmb3JtR2x5cGhBZHZhbmNlcyk6CisKIDIwMjAt
MDktMTAgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTbWFsbCBjbGVhbnVwIGluIFJlbmRlclRoZW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA3OTVm
NDNmNDQ4OWUxN2NkY2RjYTI5ZGE0YzkyMDI1YWFkM2RiNGZkLi44OTdmNGJjOGVlZWI0ZjljODQ4
YmYxNDk1ZTgzYzQxMzVlMmJkNzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBA
QAorMjAyMC0wOS0xMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBDb3JlVGV4dC1zcGVjaWZpYyBjb2RlIGZyb20gKioq
Q29jb2EubW0gdG8gKioqQ29yZVRleHQuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg6CisKIDIw
MjAtMDktMTAgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBo
YXJkd2FyZSBKUEVHIGRlY29kaW5nIG9uIHg4NiBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtVXNlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCmluZGV4IGE2
ZWJlNjcyZjRhOTU0YzMzMjI0NzgwM2ZiZGFlMWM4MjgxYWZmZTIuLjkzYzI1YWE5N2VjNTQ4NTY4
MGUxNzA3YzcwNThiMDg0NGYzZDg1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtVXNlLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaApAQCAtNTQsNiArNTQs
MTAgQEAKICNkZWZpbmUgVVNFX0NHIDEKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisj
ZGVmaW5lIFVTRV9DVCAxCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogI2RlZmluZSBV
U0VfQ0EgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93
aW4vQ29yZVRleHRTUElXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL3dpbi9Db3Jl
VGV4dFNQSVdpbi5oCmluZGV4IGQyOGIxNmI0Y2E4NDY4N2EzZmIxNWZkOWJhYjQwOWYzMzNmZWRm
YTguLjkwZWU5Y2Y4NWE5OWU2ZWFmZTg0MDJlYjc4MzNmMWM4ODNlYzg2NDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCkBAIC00MiwyMiAr
NDIsMTIxIEBAIENUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250TmFtZUF0dHJpYnV0
ZTsKIENUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb3JlZ3JvdW5kQ29sb3JGcm9tQ29u
dGV4dEF0dHJpYnV0ZU5hbWU7CiBDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NUU3Ryb2tl
V2lkdGhBdHRyaWJ1dGVOYW1lOwogQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVFN0cm9r
ZUNvbG9yQXR0cmlidXRlTmFtZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250
T3BlblR5cGVGZWF0dXJlVGFnOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRG
ZWF0dXJlVHlwZUlkZW50aWZpZXJLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtD
VEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5OworQ1RfRVhQT1JUIGNvbnN0IENGU3Ry
aW5nUmVmIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVjdG9yc0tleTsKK0NUX0VYUE9SVCBjb25zdCBD
RlN0cmluZ1JlZiBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleTsKK0NUX0VYUE9SVCBj
b25zdCBDRlN0cmluZ1JlZiBrQ1RGb250RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlOworQ1RfRVhQ
T1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGU7CitDVF9F
WFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udFZhcmlhdGlvbkF0dHJpYnV0ZTsKK0NUX0VY
UE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250VVJMQXR0cmlidXRlOworQ1RfRVhQT1JUIGNv
bnN0IENGU3RyaW5nUmVmIGtDVEZvbnRSZWZlcmVuY2VVUkxBdHRyaWJ1dGU7CiAKLS8vIFRoaXMg
ZW51bSBpcyBkZWZpbmVkIGluIENURm9udC5oLiBUbyBhdm9pZCByZWRlZmluaXRpb24sIG9ubHkg
ZGVmaW5lIGl0IGhlcmUgaWYgQ1RGb250LmggaGFzIG5vdCBiZWVuIGluY2x1ZGVkLiAKKy8vIFRo
ZXNlIGVudW1zIGFyZSBkZWZpbmVkIGluIENURm9udC5oLiBUbyBhdm9pZCByZWRlZmluaXRpb24s
IG9ubHkgZGVmaW5lIHRoZW0gaGVyZSBpZiBDVEZvbnQuaCBoYXMgbm90IGJlZW4gaW5jbHVkZWQu
IAogI2lmbmRlZiBfX0NURk9OVF9fCit0eXBlZGVmIENGX09QVElPTlModWludDMyX3QsIENURm9u
dFN5bWJvbGljVHJhaXRzKSB7CisgICAga0NURm9udFRyYWl0SXRhbGljID0gKDEgPDwgMCksCisg
ICAga0NURm9udFRyYWl0Qm9sZCA9ICgxIDw8IDEpLAorICAgIGtDVEZvbnRUcmFpdE1vbm9TcGFj
ZSA9ICgxIDw8IDEwKSwKKyAgICBrQ1RGb250VHJhaXRDb2xvckdseXBocyA9ICgxIDw8IDEzKSwK
KworICAgIGtDVEZvbnRJdGFsaWNUcmFpdCA9IGtDVEZvbnRUcmFpdEl0YWxpYywKKyAgICBrQ1RG
b250Qm9sZFRyYWl0ID0ga0NURm9udFRyYWl0Qm9sZCwKKyAgICBrQ1RGb250TW9ub1NwYWNlVHJh
aXQgPSBrQ1RGb250VHJhaXRNb25vU3BhY2UsCisgICAga0NURm9udENvbG9yR2x5cGhzVHJhaXQg
PSBrQ1RGb250VHJhaXRDb2xvckdseXBocywKK307CisKIHR5cGVkZWYgQ0ZfT1BUSU9OUyh1aW50
MzJfdCwgQ1RGb250VGFibGVPcHRpb25zKSB7CiAgICAga0NURm9udFRhYmxlT3B0aW9uTm9PcHRp
b25zID0gMCwKICAgICBrQ1RGb250VGFibGVPcHRpb25FeGNsdWRlU3ludGhldGljID0gKDEgPDwg
MCkKIH07CisKK2VudW0geworICAgIGtDVEZvbnRUYWJsZU1BVEggPSAnTUFUSCcsCisgICAga0NU
Rm9udFRhYmxlT1MyICA9ICdPUy8yJywKKyAgICBrQ1RGb250VGFibGVWT1JHID0gJ1ZPUkcnLAor
ICAgIGtDVEZvbnRUYWJsZUhlYWQgPSAnaGVhZCcsCisgICAga0NURm9udFRhYmxlVmhlYSA9ICd2
aGVhJywKK307CisKK3R5cGVkZWYgQ0ZfT1BUSU9OUyh1aW50MzJfdCwgQ1RGb250VHJhbnNmb3Jt
T3B0aW9ucykgeworICAgIGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcgPSAoMSA8PCAwKSwK
KyAgICBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA9ICgxIDw8IDEpCit9OworCitl
bnVtIHsKKyAgICBrTG93ZXJDYXNlVHlwZSA9IDM3LAorICAgIGtVcHBlckNhc2VUeXBlID0gMzgs
Cit9OworCitlbnVtIHsKKyAgICBrRGVmYXVsdExvd2VyQ2FzZVNlbGVjdG9yID0gMCwKKyAgICBr
TG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IgPSAxLAorICAgIGtMb3dlckNhc2VQZXRpdGVDYXBz
U2VsZWN0b3IgPSAyCit9OworCitlbnVtIHsKKyAgICBrRGVmYXVsdFVwcGVyQ2FzZVNlbGVjdG9y
ID0gMCwKKyAgICBrVXBwZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IgPSAxLAorICAgIGtVcHBlckNh
c2VQZXRpdGVDYXBzU2VsZWN0b3IgPSAyCit9OworCitlbnVtIHsKKyAgICBrUHJvcG9ydGlvbmFs
VGV4dFNlbGVjdG9yID0gMCwKKyAgICBrSGFsZldpZHRoVGV4dFNlbGVjdG9yID0gMiwKKyAgICBr
VGhpcmRXaWR0aFRleHRTZWxlY3RvciA9IDMsCisgICAga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3Rv
ciA9IDQsCit9OworCit0eXBlZGVmIENGX0VOVU0odWludDMyX3QsIENURm9udE9yaWVudGF0aW9u
KQoreworICAgIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQgPSAwLAorICAgIGtDVEZvbnRPcmll
bnRhdGlvbkhvcml6b250YWwgPSAxLAorICAgIGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsID0g
MiwKK307CiAjZW5kaWYKIAordW5zaWduZWQgQ1RGb250R2V0VW5pdHNQZXJFbShDVEZvbnRSZWYp
OworQ0dGbG9hdCBDVEZvbnRHZXRDYXBIZWlnaHQoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250
R2V0TGVhZGluZyhDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRHZXRBc2NlbnQoQ1RGb250UmVm
KTsKK0NHRmxvYXQgQ1RGb250R2V0RGVzY2VudChDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRH
ZXRYSGVpZ2h0KENURm9udFJlZik7CitDR0Zsb2F0IENURm9udEdldFVuZGVybGluZVBvc2l0aW9u
KENURm9udFJlZik7CitDR0Zsb2F0IENURm9udEdldFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRS
ZWYpOworQ0dGbG9hdCBDVEZvbnRHZXRTaXplKENURm9udFJlZik7CitDVEZvbnRTeW1ib2xpY1Ry
YWl0cyBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhDVEZvbnRSZWYpOworQ0ZDaGFyYWN0ZXJTZXRS
ZWYgQ1RGb250Q29weUNoYXJhY3RlclNldChDVEZvbnRSZWYpOworQ0ZTdHJpbmdSZWYgQ1RGb250
Q29weUZhbWlseU5hbWUoQ1RGb250UmVmKTsKK0NGU3RyaW5nUmVmIENURm9udENvcHlGdWxsTmFt
ZShDVEZvbnRSZWYpOworQ1RGb250UmVmIENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhD
VEZvbnRSZWYsIENHRmxvYXQgc2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qIG1hdHJpeCwg
Q1RGb250RGVzY3JpcHRvclJlZiBhdHRyaWJ1dGVzKTsKIENURm9udFJlZiBDVEZvbnRDcmVhdGVX
aXRoTmFtZShDRlN0cmluZ1JlZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRyYW5zZm9y
bSopOwogQ1RGb250UmVmIENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQoQ0dGb250UmVmLCBD
R0Zsb2F0IHNpemUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgQ1RGb250RGVzY3JpcHRvclJl
ZiBhdHRyaWJ1dGVzKTsKK0NURm9udFJlZiBDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3Io
Q1RGb250RGVzY3JpcHRvclJlZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRyYW5zZm9y
bSopOwogQ1RMaW5lUmVmIENUTGluZUNyZWF0ZVdpdGhBdHRyaWJ1dGVkU3RyaW5nKENGQXR0cmli
dXRlZFN0cmluZ1JlZik7CiB2b2lkIENUTGluZURyYXcoQ1RMaW5lUmVmLCBDR0NvbnRleHRSZWYp
OwogQ0ZEYXRhUmVmIENURm9udENvcHlUYWJsZShDVEZvbnRSZWYsIENURm9udFRhYmxlVGFnLCBD
VEZvbnRUYWJsZU9wdGlvbnMpOwogQ0ZBcnJheVJlZiBDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVz
KENURm9udFJlZiwgQ1RGb250VGFibGVPcHRpb25zKTsKIENHUGF0aFJlZiBDVEZvbnRDcmVhdGVQ
YXRoRm9yR2x5cGgoQ1RGb250UmVmLCBDR0dseXBoLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSop
Owordm9pZCBDVEZvbnRHZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhDVEZvbnRSZWYs
IGNvbnN0IENHR2x5cGhbXSwgQ0dTaXplIHRyYW5zbGF0aW9uc1tdLCBDRkluZGV4IGNvdW50KTsK
K3ZvaWQgQ1RGb250RHJhd0dseXBocyhDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3Qg
Q0dQb2ludFtdLCBzaXplX3QgY291bnQsIENHQ29udGV4dFJlZik7CitDR0FmZmluZVRyYW5zZm9y
bSBDVEZvbnRHZXRNYXRyaXgoQ1RGb250UmVmKTsKK0NGQXJyYXlSZWYgQ1RGb250Q29weUZlYXR1
cmVzKENURm9udFJlZik7CitDRlR5cGVSZWYgQ1RGb250Q29weUF0dHJpYnV0ZShDVEZvbnRSZWYs
IENGU3RyaW5nUmVmKTsKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250Q29weUZvbnREZXNjcmlw
dG9yKENURm9udFJlZik7Citib29sIENURm9udFRyYW5zZm9ybUdseXBocyhDVEZvbnRSZWYsIENH
R2x5cGhbXSwgQ0dTaXplIGFkdmFuY2VzW10sIENGSW5kZXggY291bnQsIENURm9udFRyYW5zZm9y
bU9wdGlvbnMpOworQ0dSZWN0IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoQ1RGb250
UmVmLCBDVEZvbnRPcmllbnRhdGlvbiwgY29uc3QgQ0dHbHlwaFtdLCBDR1JlY3QgYm91bmRpbmdS
ZWN0c1tdLCBDRkluZGV4IGNvdW50KTsKK2RvdWJsZSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBo
cyhDVEZvbnRSZWYsIENURm9udE9yaWVudGF0aW9uLCBjb25zdCBDR0dseXBoW10sIENHU2l6ZSBh
ZHZhbmNlc1tdLCBDRkluZGV4IGNvdW50KTsKK2Jvb2wgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFj
dGVycyhDVEZvbnRSZWYsIGNvbnN0IFVuaUNoYXJbXSwgQ0dHbHlwaFtdLCBDRkluZGV4IGNvdW50
KTsKK2Jvb2wgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UoQ1RGb250UmVmLCBDR0ds
eXBoW10sIENGUmFuZ2UpOworQ0ZEYXRhUmVmIENURm9udENvcHlUYWJsZShDVEZvbnRSZWYsIENU
Rm9udFRhYmxlVGFnLCBDVEZvbnRUYWJsZU9wdGlvbnMpOworYm9vbCBDVEZvbnRHZXRWZXJ0aWNh
bEdseXBoc0ZvckNoYXJhY3RlcnMoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFyW10sIENHR2x5cGhb
XSwgQ0ZJbmRleCBjb3VudCk7CisKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250RGVzY3JpcHRv
ckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKENGRGljdGlvbmFyeVJlZik7Citib29sIENURm9udERlc2Ny
aXB0b3JJc1N5c3RlbVVJRm9udChDVEZvbnREZXNjcmlwdG9yUmVmKTsKK0NURm9udERlc2NyaXB0
b3JSZWYgQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShDRlN0cmluZ1JlZiwg
Q0dGbG9hdCk7CiAKIFdURl9FWFRFUk5fQ19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpp
bmRleCBiYjIxN2JiM2Q0NmU5YzBmZTU2OTAzMzM5OGY1ZDQxNDJjNDY3NjA5Li5kNzdkODNlNzgx
NjIxZTZiYzRmMzYxNWZjZDYzZWJkYjU1NTdhNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFr
ZQpAQCAtMzA2LDcgKzMwNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDb2NvYS5tbQorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RGVzY3JpcHRpb25Db2NvYS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpA
QCAtMzIxLDYgKzMyMSwxMSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViR1BVTGF5ZXIubW0KIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENvcmVUZXh0LmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAKKwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlUm90YXRpb25TZXNzaW9uVlQubW0KICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tCkBAIC0zMzUsNyArMzQwLDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRN
YWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSWNvbk1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggNzI2MDQxMTkyMjQwNWFmZDBiYmI1MDUzNzZmZTllNGViYjU3NjVhZS4uOWUwMmNk
NmZmZjgxMGYwZTFkMDA5NGJmZjNmYjQyZmM4ZWVlOThlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC0zNDcsNyArMzQ3LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ29sb3JDb2Nv
YS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRmxvYXRSZWN0Q29jb2EubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQotcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENv
Y29hLm1tCitwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250RGVzY3JpcHRpb25Db2NvYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTM2OSw2ICszNjksMTAgQEAg
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViQ29yZURlY29tcHJlc3Npb25TZXNzaW9uLm1tCiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJHUFVMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVmlkZW9UcmFja1By
aXZhdGVXZWJNLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENhc2NhZGVDb3JlVGV4dC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2N0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2N0
L0dseXBoUGFnZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2Zl
clNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJD
Vi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tCkBAIC00MDIsNyAr
NDA2LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tCiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ltYWdlTWFjLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAw
MGQ1OTUzOTlkZTVjYTA1MThmMjEwNTIyZWY0MzA1MmIxZTgxMDJmLi5kNzZjYzRmZWQ4NjI2OWI4
MzdlMzNmNTQ1MWQ4MGIxNTk3Y2MwYjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NjQwLDYgKzY2NDAsMTEgQEAKIAkJMUM2
NjI2MEUxQzZFN0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUM2NjI2MEYxQzZFN0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRGYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDNkI5NUREMjJDODU4QTQwMEU2RjE0RiAvKiBXSExTTEJ1aWxkU3RhbmRhcmRMaWJy
YXJ5RnVuY3Rpb25NYXAucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBXSExTTEJ1aWxkU3RhbmRhcmRM
aWJyYXJ5RnVuY3Rpb25NYXAucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZE
OEFDMjUwQTI5NEQwMEQ2RTkyMCAvKiBGb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUM2RkQ4QUQyNTBBMkU1MzAwRDZFOTIwIC8qIEdseXBoUGFnZUNv
cmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFnZUNvcmVUZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM2RkQ4QUUyNTBBMzExNTAwRDZFOTIwIC8qIEZv
bnRDYXNjYWRlQ29yZVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2NhZGVDb3Jl
VGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEFGMjUwQTMzQ0Yw
MEQ2RTkyMCAvKiBGb250Q29yZVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENvcmVU
ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM2RkQ4QjAyNTBBMzVGMTAw
RDZFOTIwIC8qIEZvbnRDb2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q29jb2EuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NjBFOTczMzA4MDAyNjZFMDcg
LyogSW5zcGVjdG9yQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
ODFCOTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyog
SW5zcGVjdG9yQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3Bl
Y3RvckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxNjQsNyArMTAx
NjksNiBAQAogCQk3QzRDOTZEQTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURl
ZmF1bHRSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNS
ZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzRDOTZEQjFBRDQ0ODM1MDAzNjM1NzIgLyogSlNSZWFkYWJsZVN0cmVhbUJZT0JSZWFk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbUJZ
T0JSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0Qzk2REIxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDNEVERDczMUE3QjYwNzgwMDE5OEM0RCAvKiBG
b250Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNTE0RTAwMjRBRjgwNTgw
MDUwNzEwRiAvKiBDb2xvckNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JDb252ZXJz
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNTE0RTAyMjRBRjgwNTgwMDUw
NzEwRiAvKiBDb2xvckNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3JDb252
ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M1MTZBRDIxRjM1MjUy
MDAwMzRCNkJGIC8qIERPTVByb21pc2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Qcm9taXNl
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMTM2LDcgKzEzMTQwLDYg
QEAKIAkJQjJBRkZDNzUwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkFGRkM3NjBEMDBB
NUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVD
b2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250Q2Fz
Y2FkZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkFGRkM3QjBEMDBB
NUMxMDAzMDA3NEQgLyogR2x5cGhQYWdlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHbHlwaFBhZ2VNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMkFGRkM4QzBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJvdW5kYXJpZXMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGV4dEJvdW5kYXJpZXMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQjFGNzE0MEQwMENBQTgwMDRBRUE2NCAvKiBQ
b2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQjFGNzE1MEQwMENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJFdmVudHNIaXRSdWxl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgxMzAsNiArMTgxMzMsMTcgQEAK
IAkJCW5hbWUgPSBJbnNwZWN0b3I7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owor
CQkxQzZGRDhBQTI1MEEyOTI0MDBENkU5MjAgLyogY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFDNkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250
Q2FzY2FkZUNvcmVUZXh0LmNwcCAqLywKKwkJCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5MjAgLyog
Rm9udENvcmVUZXh0LmNwcCAqLywKKwkJCQkxQzZGRDhBQzI1MEEyOTREMDBENkU5MjAgLyogRm9u
dFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcCAqLywKKwkJCQkxQzZGRDhBRDI1MEEyRTUzMDBENkU5
MjAgLyogR2x5cGhQYWdlQ29yZVRleHQuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBjdDsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTFDODFCOTREMEU5NzMyRDkwMDI2NkUw
NyAvKiBpbnNwZWN0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMjU4MTcsNyArMjU4MzEsNiBAQAogCQkJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemVNYWMubW0gKi8sCiAJCQkJQjJBRkZDNzUwRDAwQTVDMTAwMzAwNzREIC8qIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwICovLAogCQkJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0
RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggKi8sCi0JCQkJQjJBRkZDN0IwRDAwQTVDMTAw
MzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi8sCiAJCQkJQjI3NTM1OEQwQjA1M0E2NjAwMkNF
NjRGIC8qIEljb25NYWMubW0gKi8sCiAJCQkJQjI3NTM1NEUwQjA1MzgxNDAwMkNFNjRGIC8qIElt
YWdlTWFjLm1tICovLAogCQkJCUIyNzUzNTRGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludE1h
Yy5tbSAqLywKQEAgLTI1ODQ0LDYgKzI1ODU3LDcgQEAKIAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAy
RDE0NDAgLyogY29jb2EgKi8sCiAJCQkJMkNFMTE4OTgyNEMyNDAyQzAwMzc3MEU5IC8qIGNvcmVp
bWFnZSAqLywKIAkJCQk5MzMyQUIzQjE2NTE1RDc3MDBEODI3RUMgLyogY3B1ICovLAorCQkJCTFD
NkZEOEFBMjUwQTI5MjQwMEQ2RTkyMCAvKiBjdCAqLywKIAkJCQlDRDlEODI3QzFDN0JCMkVEMDA2
RkYwNjYgLyogY3YgKi8sCiAJCQkJMEZFNUZCQzkxQzNERDUwNjAwMDdBMkNBIC8qIGRpc3BsYXls
aXN0cyAqLywKIAkJCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLywKQEAg
LTI2MjA0LDcgKzI2MjE4LDcgQEAKIAkJCQkxQzM5NjlDRjFCNzQyMTFFMDAyQkNGQTcgLyogRm9u
dENhY2hlQ29yZVRleHQuY3BwICovLAogCQkJCUMyNDU4RTYxMUZFODk3OUUwMDU5NDc1OSAvKiBG
b250Q2FjaGVDb3JlVGV4dC5oICovLAogCQkJCUIyQUZGQzc4MEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q2FzY2FkZUNvY29hLm1tICovLAotCQkJCTdDNEVERDczMUE3QjYwNzgwMDE5OEM0RCAvKiBG
b250Q29jb2EubW0gKi8sCisJCQkJMUM2RkQ4QjAyNTBBMzVGMTAwRDZFOTIwIC8qIEZvbnRDb2Nv
YS5jcHAgKi8sCiAJCQkJMUMxMkFDMkMxRUU3Nzk5NTAwNzlFMEEwIC8qIEZvbnREZXNjcmlwdGlv
bkNvY29hLmNwcCAqLywKIAkJCQkxQzEyQUMyODFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWls
eVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgKi8sCiAJCQkJMUMxMkFDMjkxRUU3NzhBRTAwNzlF
MEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaCAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggNmVmOTc4OTI3YzMwMjQ5MTI3ZGY1
Y2JkNGU5YTU1YTg3OGQ0NDljMy4uMTA2NTBmOWEwMzc2NTJiY2M1NWE1Njc3MGVlMTgzMWMxMjg4
NmUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTQ3
NCw3ICs0NzQsNyBAQCBjb25zdCBGb250JiBGb250Ojpicm9rZW5JZGVvZ3JhcGhGb250KCkgY29u
c3QKICAgICByZXR1cm4gKmRlcml2ZWRGb250RGF0YS5icm9rZW5JZGVvZ3JhcGhGb250OwogfQog
Ci0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0UoQ1QpCiAKIGJvb2wgRm9udDo6aXNQcm9i
YWJseU9ubHlVc2VkVG9SZW5kZXJJY29ucygpIGNvbnN0CiB7CkBAIC01MTEsNyArNTExLDcgQEAg
UmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGZsb2EKICAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRG
b250KGZvbnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0b3IpOwogfQogCi0jaWYgIVBMQVRGT1JNKENP
Q09BKQorI2lmICFVU0UoQ1QpCiB2b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZl
ciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCwgYm9vbCwgY29uc3QgQXRvbVN0cmluZyYsIFN0
cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24pIGNvbnN0CiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKaW5kZXggN2FiNTMxN2FiMTI0ZWYyNmU0MTI5NjUzZDYzZjlmNjcz
NDc1YTIzNy4uMzgyZmViNmM1MTE4NzY3N2JkYzI2ZTdhZGRmNThhNWZhODlhZGMwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtNjQsNyArNjQsNyBAQCBlbnVt
IEZvbnRWYXJpYW50IHsgQXV0b1ZhcmlhbnQsIE5vcm1hbFZhcmlhbnQsIFNtYWxsQ2Fwc1Zhcmlh
bnQsIEVtcGhhc2lzTWFya1ZhcgogZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRj
aCwgVmFyaWFibGVQaXRjaCB9OwogZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IHVpbnQ4
X3QgeyBObywgWWVzIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0UoQ1QpCiBib29s
IGZvbnRIYXNUYWJsZShDVEZvbnRSZWYsIHVuc2lnbmVkIHRhYmxlVGFnKTsKIGJvb2wgZm9udEhh
c0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJs
ZVRhZzIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKaW5kZXggMzI0MzBhNmI1NTQ0OTkwY2RhN2I3NjNhZmY4ZTAzNjBjZmNi
M2UzNi4uNTYxMGIyZjgzY2I5YTJjMDMzYjNiOTA4ZGFjODNmYTY2YjJjNWViNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtNTk1
LDcgKzU5NSw3IEBAIGJvb2wgRm9udENhc2NhZGU6OnNob3VsZFVzZVNtb290aGluZygpCiAgICAg
cmV0dXJuIHNob3VsZFVzZUZvbnRTbW9vdGhpbmc7CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0Ep
CisjaWYgIVVTRShDVCkKIGJvb2wgRm9udENhc2NhZGU6OmlzU3VicGl4ZWxBbnRpYWxpYXNpbmdB
dmFpbGFibGUoKQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCmluZGV4IDM4NzM5OWYxNDU0M2Q2YTAxNDRkZGM5
ZDg1M2MxOWYxOTQ0MTFlZTkuLmRkNzg5ZDQyNjk2ODkzNTFjNmZkNzZhMWExZmIzMjFiMDM1ZmI0
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aApAQCAtODEsNiArODEsMTEgQEAgc3RydWN0IEdseXBoT3ZlcmZsb3cgewogICAgIGJvb2wgY29t
cHV0ZUJvdW5kcyB7IGZhbHNlIH07CiB9OwogCisjaWYgVVNFKENUKQordm9pZCBzaG93TGV0dGVy
cHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRm9udCYs
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IENHR2x5cGgqLCBjb25zdCBDR1NpemUqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBjb3VudCk7Cit2b2lkIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9z
aXRpb25zKFZlY3RvcjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMsIENHQ29udGV4dFJlZiwgY29u
c3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpOworI2VuZGlmCisKIGNsYXNzIFRl
eHRMYXlvdXREZWxldGVyIHsKIHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yKCkoVGV4dExheW91
dCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmNwcAppbmRleCBkNGJjMmE0ZjExMWQzODIwZjgwOWQxODBmZTY3MzI0
OTA5Y2JlN2Q2Li5kODlkNmVjNGFkYzZlZTVjNDA1NjkzZWY3ODVjOTA1ZmI2MTM2YjE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1E
YXRhLmNwcApAQCAtODQsNyArODQsNyBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRQbGF0Zm9ybURh
dGE6OmNsb25lV2l0aFNpemUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc291cmNlLAogfQogI2Vu
ZGlmCiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpCisjaWYgIVVTRShDVCkKIAogU3RyaW5nIEZvbnRQ
bGF0Zm9ybURhdGE6OmZhbWlseU5hbWUoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDQ2YzlhYzc3OGFk
OWE5NjQ0YjEzMWM1MzZlMjBiYjA4YTRjMDRkYWMuLjFmOTY4OWVhZGVkYWVkN2E5MDE1MDg4MzY3
NGZlZTQ4MjcxM2M1MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogQ29weXJpZ2h0
IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgpAQCAtNDksNyArNDks
NyBAQAogT0JKQ19DTEFTUyBOU0ZvbnQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQor
I2lmIFVTRShDVCkKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RGb250KiBDVEZvbnRSZWY7CiAj
ZW5kaWYKIApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAKICAgICBGb250UGxhdGZvcm1EYXRh
KGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBG
b250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRpb246Okhvcml6b250YWwsIEZvbnRXaWR0aFZh
cmlhbnQgPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsIFRleHRSZW5kZXJpbmdNb2Rl
ID0gVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nKTsKIAotI2lmIFBMQVRGT1JN
KENPQ09BKQorI2lmIFVTRShDVCkKICAgICBXRUJDT1JFX0VYUE9SVCBGb250UGxhdGZvcm1EYXRh
KENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkID0gZmFsc2UsIGJvb2wg
c3ludGhldGljT2JsaXF1ZSA9IGZhbHNlLCBGb250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRp
b246Okhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBGb250V2lkdGhWYXJpYW50OjpSZWd1
bGFyV2lkdGgsIFRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0
UmVuZGVyaW5nKTsKICNlbmRpZgogCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogICAgIGJv
b2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91c2VHREk7IH0KICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogICAgIENURm9udFJlZiBmb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250LmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgQ1RGb250UmVmIHJlZ2lz
dGVyZWRGb250KCkgY29uc3Q7IC8vIFJldHVybnMgbnVsbHB0ciBpZmYgdGhlIGZvbnQgaXMgbm90
IHJlZ2lzdGVyZWQsIHN1Y2ggYXMgd2ViIGZvbnRzIChvdGhlcndpc2UgcmV0dXJucyBmb250KCkp
LgogCkBAIC0yMjIsNyArMjIyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkU2NhbGVkRm9u
dChjYWlyb19mb250X2ZhY2VfdCopOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBVU0UoQ1QpCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2Ygb25lIG9mIHRoZXNlLiBUaGVzZSB0
d28gZm9udHMgYXJlIHN1YnRseSBkaWZmZXJlbnQsIGFuZCBpdCBpcyBub3Qgb2J2aW91cyB3aGlj
aCBvbmUgdG8gdXNlIHdoZXJlLgogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fZm9udDsKICAg
ICBtdXRhYmxlIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fY3RGb250OwpAQCAtMjc2LDcgKzI3Niw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0Uo
Q1QpCiBib29sIGlzU3lzdGVtRm9udChDVEZvbnRSZWYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tCmluZGV4IDBhMjNkNmE1MTRmMGMxZTQyZWE0M2Q3NWU4MWYxN2YyMzE2NmRmNTguLmZk
YzY4OTI3ZmY5OTFlMmUyMWRiYzdhMmU2ZDdiYjFmOGJhM2JkNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2Nv
YS5tbQpAQCAtMjMsMTkgKzIzLDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9u
dENhc2NhZGUuaCIKIAotI2ltcG9ydCAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCi0jaW1wb3J0
ICJEYXNoQXJyYXkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkdseXBoQnVmZmVyLmgi
CiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIkxheW91dFJlY3QuaCIKLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0jaWYgVVNFKEFQUEtJVCkK
LSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotI2ltcG9ydCA8d3RmL01hdGhFeHRy
YXMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDxwYWwvaW9zL1VJS2l0
U29mdExpbmsuaD4KQEAgLTQ5LDI0ICszOCw2IEBAIFNPRlRfTElOS19DTEFTUyhDb3JlVUksIENV
SVN0eWxlRWZmZWN0Q29uZmlndXJhdGlvbikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBD
b25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNh
YmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGls
bCBpbXBhY3RzIHRleHQKLS8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24g
dXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIg
dGVybWlub2xvZ3kuCi1ib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZh
aWxhYmxlKCkKLXsKLSNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElO
R19ESVNBQkxFRCkKLSAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7
Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbJl0gKCkgewotICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQg
PSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKLSNlbGlmIFBMQVRGT1JNKE1B
QykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4
dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NywyOCArNDgsNyBAQCBib29sIEZvbnRDYXNj
YWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxH
bHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCi17Ci0g
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dD
b250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7Ci0gICAgcG9zaXRpb25zWzBdID0gQ0dQb2lu
dFplcm87Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlc1tp
IC0gMV0sIG1hdHJpeCk7Ci0gICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kgLSAx
XS54ICsgYWR2YW5jZS53aWR0aDsKLSAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlvbnNb
aSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgIHJldHVybiBjb250ZXh0LnRleHRE
cmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3MpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQm
IGNvcmVDb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50KQordm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZh
bmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3ND
b250ZXh0JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUq
IGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAg
ICAgaWYgKCFjb3VudCkKQEAgLTE1MCwyMjcgKzEwMCw0IEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0
ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25z
dCBGCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWdu
ZWQgY291bnQpCi17Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dD
b250ZXh0U2V0VGV4dFBvc2l0aW9uKGNvbnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKLQot
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1E
YXRhKCk7Ci0gICAgVmVjdG9yPENHUG9pbnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKLSAgICBp
ZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNh
bCkgewotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSByb3RhdGVMZWZ0VHJhbnNmb3JtID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlKDAsIC0xLCAxLCAwLCAwLCAwKTsKLSAgICAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gdGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCk7Ci0g
ICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHJ1bk1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29u
Y2F0KHRleHRNYXRyaXgsIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwotICAgICAgICBTY29wZWRUZXh0
TWF0cml4IHNhdmVkTWF0cml4KHJ1bk1hdHJpeCwgY29udGV4dCk7Ci0KLSAgICAgICAgVmVjdG9y
PENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlvbnMoY291bnQpOwotICAgICAgICBDVEZvbnRHZXRWZXJ0
aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywg
dHJhbnNsYXRpb25zLmRhdGEoKSwgY291bnQpOwotCi0gICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRy
aXgoY29udGV4dCkpOwotCi0gICAgICAgIENHUG9pbnQgcG9zaXRpb24gPSBGbG9hdFBvaW50KHBv
aW50LngoKSwgcG9pbnQueSgpICsgZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KElkZW9n
cmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAg
Q0dTaXplIHRyYW5zbGF0aW9uID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0odHJhbnNsYXRp
b25zW2ldLCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKLSAgICAgICAgICAgIHBvc2l0aW9uc1tpXSA9
IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZShwb3NpdGlvbi54IC0gdHJh
bnNsYXRpb24ud2lkdGgsIHBvc2l0aW9uLnkgKyB0cmFuc2xhdGlvbi5oZWlnaHQpLCB0cmFuc2Zv
cm0pOwotICAgICAgICAgICAgcG9zaXRpb24ueCArPSBhZHZhbmNlc1tpXS53aWR0aDsKLSAgICAg
ICAgICAgIHBvc2l0aW9uLnkgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0OwotICAgICAgICB9Ci0gICAg
ICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0
aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmaWxs
VmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIGFk
dmFuY2VzLCBjb3VudCk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0
Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQotewotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOwotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhc0ZvbnRzKGNnQ29u
dGV4dCwgdHJ1ZSk7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtID0g
Q0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7Ci0gICAgYm9vbCBpc1RyYW5zbGF0aW9uT3JJbnRl
Z3JhbFNjYWxlID0gV1RGOjppc0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uYSkgJiYgV1RGOjpp
c0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uZCkgJiYgY29udGV4dFRyYW5zZm9ybS5iID09IDAu
ZiAmJiBjb250ZXh0VHJhbnNmb3JtLmMgPT0gMC5mOwotICAgIGJvb2wgaXNSb3RhdGVkID0gKChj
b250ZXh0VHJhbnNmb3JtLmIgfHwgY29udGV4dFRyYW5zZm9ybS5jKSAmJiAoY29udGV4dFRyYW5z
Zm9ybS5hIHx8IGNvbnRleHRUcmFuc2Zvcm0uZCkpOwotICAgIGJvb2wgZG9TdWJwaXhlbFF1YW50
aXphdGlvbiA9IGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgfHwgKCFpc1JvdGF0ZWQgJiYg
Y29udGV4dC5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSk7Ci0KLSAgICBDR0NvbnRleHRT
ZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCB0cnVlKTsKLSAgICBDR0Nv
bnRleHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0LCBkb1N1YnBpeGVs
UXVhbnRpemF0aW9uKTsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsK
LSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3Jt
RGF0YSgpOwotICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
Ci0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7Ci0gICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cyA9IHRydWU7Ci0gICAgCi0gICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygp
KQotICAgICAgICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5n
OwotCi0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7Ci0gICAgY2FzZSBGb250U21vb3RoaW5n
TW9kZTo6QW50aWFsaWFzZWQ6Ci0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6
Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKLSAgICAg
ICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6Ci0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZh
bHNlOwotICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygpKQotICAgICAgICBzaG91bGRT
bW9vdGhGb250cyA9IGZhbHNlOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9v
bCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0NvbnRleHRHZXRTaG91bGRTbW9v
dGhGb250cyhjZ0NvbnRleHQpOwotICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290
aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwotI2VuZGlmCi0KLSAgICBib29s
IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFsaWFzKGNn
Q29udGV4dCk7Ci0gICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlh
bGlhcykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgc2hv
dWxkQW50aWFsaWFzKTsKLQotICAgIGJvb2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBzaG91bGRV
c2VMZXR0ZXJwcmVzc0VmZmVjdChjb250ZXh0KTsKLSAgICBGbG9hdFBvaW50IHBvaW50ID0gYW5j
aG9yUG9pbnQ7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5z
Zm9ybUlkZW50aXR5OwotICAgIGlmICghcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkp
Ci0gICAgICAgIG1hdHJpeCA9IENURm9udEdldE1hdHJpeChwbGF0Zm9ybURhdGEuZm9udCgpKTsK
LSAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKLSAgICBtYXRyaXguZCA9IC1tYXRyaXguZDsKLSAg
ICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkgewotICAgICAgICBzdGF0aWMg
ZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9h
dCAvIDE4MCk7Ci0gICAgICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250
T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgICAgICBpZiAoZm9udC5pc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKCkpCi0gICAgICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFu
c2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgb2JsaXF1ZVNrZXcs
IDAsIDEsIDAsIDApKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYXRyaXgg
PSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgx
LCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNm
b3JtTWFrZSgxLCAwLCAtb2JsaXF1ZVNrZXcsIDEsIDAsIDApKTsKLSAgICB9Ci0gICAgU2NvcGVk
VGV4dE1hdHJpeCByZXN0b3JlcihtYXRyaXgsIGNnQ29udGV4dCk7Ci0KLSAgICBzZXRDR0ZvbnRS
ZW5kZXJpbmdNb2RlKGNvbnRleHQpOwotICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4
dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0Owot
ICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4
dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0Q1RNKCk7Ci0gICAgZmxv
YXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwotICAg
IGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYmICFjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uT3JGbGlwcGVkKCkpIHsKLSAgICAgICAgRmxvYXRTaXplIGhvcml6b250YWxVbml0U2l6
ZUluRGV2aWNlUGl4ZWxzID0gY29udGV4dENUTS5tYXBTaXplKEZsb2F0U2l6ZSgxLCAwKSk7Ci0g
ICAgICAgIGZsb2F0IGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMgPSBzcXJ0Ziho
b3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0aCgpICogaG9yaXpvbnRhbFVuaXRT
aXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSArIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4
ZWxzLmhlaWdodCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVpZ2h0KCkp
OwotICAgICAgICBpZiAoaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscykgewotICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzY2FsZWQgZG93biBjb250ZXh0IHdvbid0IGJs
b3cgdXAgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnbHlwaHMuIAotICAgICAgICAgICAgc3ludGhldGlj
Qm9sZE9mZnNldCA9IHN0ZDo6bWluKHN5bnRoZXRpY0JvbGRPZmZzZXQsIHN5bnRoZXRpY0JvbGRP
ZmZzZXQgLyBob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERyYXdpbmdN
b2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAm
JiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50IHNpbXBs
ZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8g
YXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICAgICAgY29udGV4dC5jbGVh
clNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigp
OwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwotICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dU
ZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwotICAgICAgICAvLyBJZiBz
aGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0
aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBm
bG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBzaG93
R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwg
Zm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFk
dmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwotICAgICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNl
dCkKLSAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dU
ZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0
LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBu
dW1HbHlwaHMpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwotICAg
IH0KLQotICAgIGlmICh1c2VMZXR0ZXJwcmVzc0VmZmVjdCkKLSAgICAgICAgc2hvd0xldHRlcnBy
ZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNvbnRleHQsIGdseXBoQnVmZmVy
LmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0g
ICAgZWxzZQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0Nv
bnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJv
bSksIG51bUdseXBocyk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIHNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xk
T2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhm
cm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0KLSAgICBpZiAo
aGFzU2ltcGxlU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhp
bmcpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgb3Jp
Z2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKTsKLSNlbmRpZgotCi0gICAgaWYgKHNob3VsZEFu
dGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKLSAgICAgICAgQ0dDb250ZXh0U2V0
U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpOwotfQot
Ci1ib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udCgpOwotICAgIHJldHVybiBpc1N5
c3RlbUZvbnQoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpOwotfQotCi0vLyBGSVhN
RTogVXNlIHRoaXMgb24gYWxsIHBvcnRzLgotY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRG
b3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6
ZV90IGxlbmd0aCkgY29uc3QKLXsKLSAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgc2l6
ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOwotICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGJh
c2VDaGFyYWN0ZXJMZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0KLSAgICBHbHlwaERh
dGEgYmFzZUNoYXJhY3RlckdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJhY3RlcihiYXNlQ2hh
cmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCk7Ci0KLSAgICBpZiAoIWJhc2VDaGFyYWN0ZXJH
bHlwaERhdGEuZ2x5cGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGxlbmd0
aCA9PSBiYXNlQ2hhcmFjdGVyTGVuZ3RoKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3Rlckds
eXBoRGF0YS5mb250OwotCi0gICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkp
LmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICghZm9udCkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlm
IChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBm
b250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
I2VuZGlmCi0gICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgICAgIGlmIChpc0NKS0lkZW9n
cmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEdseXBocygp
KQotICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+YnJva2VuSWRlb2dyYXBoRm9udCgpOwot
ICAgICAgICAgICAgZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRh
dGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgRm9udCYgdmVydGljYWxSaWdodEZvbnQgPSBmb250LT52ZXJ0aWNhbFJpZ2h0T3Jp
ZW50YXRpb25Gb250KCk7Ci0gICAgICAgICAgICAgICAgR2x5cGggdmVydGljYWxSaWdodEdseXBo
ID0gdmVydGljYWxSaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICBmb250ID0gJnZlcnRpY2FsUmlnaHRG
b250OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCBGb250JiB1
cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKLSAgICAgICAgICAg
ICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3Rlcihi
YXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VD
aGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdXBy
aWdodEZvbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZm9udCA9
PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQpCi0gICAgICAgICAgICB0cmllZEJhc2VDaGFy
YWN0ZXJGb250ID0gdHJ1ZTsKLQotICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVy
biBmb250OwotICAgIH0KLQotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAmJiBiYXNl
Q2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250LT5j
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwotCi0gICAgcmV0dXJu
IEZvbnQ6OnN5c3RlbUZhbGxiYWNrKCk7Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjZjY0
ZmZhOWRmNTE4NzYxMzkxNGY0N2E2NWYwNjY5YmYzMzlmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCkBAIC0w
LDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5
YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTg5YmUxZDRmMzk1MjMyNTMzMDU2NDUwZjdiYzgyYTQ5MzIxM2EzMy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKysrIC9kZXYvbnVsbApAQCAtMSw3NzMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5
IFByb3NrdXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZv
bnQuaCIKLQotI2ltcG9ydCAiQ29sb3IuaCIKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgotI2ltcG9y
dCAiRm9udENhY2hlLmgiCi0jaW1wb3J0ICJGb250Q2FzY2FkZS5oIgotI2ltcG9ydCAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW1wb3J0ICJMb2NhbGVDb2NvYS5oIgotI2ltcG9ydCAiT3BlblR5cGVD
Ry5oIgotI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCi0jaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4
dC5oPgotI2ltcG9ydCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNz
U1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0jaW1wb3J0IDx1
bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jaWYgVVNFKEFQ
UEtJVCkKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotCi0KLSNpZiBVU0UoQVBQ
S0lUKQotQGludGVyZmFjZSBOU0ZvbnQgKFdlYkFwcEtpdFNlY3JldEFQSSkKLS0gKEJPT0wpX2lz
RmFrZUZpeGVkUGl0Y2g7Ci1AZW5kCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgaW5saW5lIGJvb2wgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShDRlN0cmluZ1JlZiBhLCBD
RlN0cmluZ1JlZiBiKQotewotICAgIHJldHVybiBhICYmIENGU3RyaW5nQ29tcGFyZShhLCBiLCBr
Q0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbzsKLX0KLQotc3Rh
dGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBmb250KQotewotICAgIHJl
dHVybiBmb250SGFzRWl0aGVyVGFibGUoZm9udCwga0NURm9udFRhYmxlVmhlYSwga0NURm9udFRh
YmxlVk9SRyk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotYm9vbCBmb250RmFtaWx5
U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKENGU3RyaW5nUmVmIGZvbnRGYW1pbHlOYW1lKQotewot
ICAgIGlmICghZm9udEZhbWlseU5hbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFRpbWVzIE5ldyBSb21hbiBhbmQgQXJpYWwgYXJlIG5vdCBwZXJmb3JtYW50IGVub3VnaCB0byB1
c2UuIDxyZGFyOi8vcHJvYmxlbS8yMTMzMzMyNj4KLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2Js
ZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBm
aXhlZC4KLSAgICByZXR1cm4gKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGltZXMgTmV3IFJvbWFu
IiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAgICAgICAgfHwg
KENGU3RyaW5nQ29tcGFyZShDRlNUUigiQXJpYWwiKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtD
RkNvbXBhcmVFcXVhbFRvKTsKLX0KLQotc3RhdGljIGNvbnN0IGZsb2F0IGtMaW5lSGVpZ2h0QWRq
dXN0bWVudCA9IDAuMTVmOwotCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VBZGp1c3RtZW50KENURm9u
dFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZSA9IGFk
b3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOwotCi0gICAgaWYgKCFmYW1pbHlOYW1l
IHx8ICFDRlN0cmluZ0dldExlbmd0aChmYW1pbHlOYW1lLmdldCgpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5n
ZXQoKSwgQ0ZTVFIoIlRpbWVzIikpCi0gICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
ZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhlbHZldGljYSIpKQotICAgICAgICB8fCBjYXNlSW5z
ZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCIuSGVsdmV0aWNhIE5ldWVV
SSIpKTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGJvb2wgbmVlZHNBc2NlbnRBZGp1c3RtZW50KENG
U3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJuIGZhbWlseU5hbWUgJiYgKGNhc2VJ
bnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIlRpbWVzIikpCi0gICAgICAgIHx8
IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIkhlbHZldGljYSIpKQot
ICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJDb3Vy
aWVyIikpKTsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGlzQWhlbUZvbnQoQ0ZTdHJpbmdS
ZWYgZmFtaWx5TmFtZSkKLXsKLSAgICByZXR1cm4gZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRp
dmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJBaGVtIikpOwotfQotCi1ib29sIGZvbnRIYXNU
YWJsZShDVEZvbnRSZWYgY3RGb250LCB1bnNpZ25lZCB0YWJsZVRhZykKLXsKLSAgICBhdXRvIHRh
YmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZv
bnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIGlmICghdGFibGVUYWdzKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFi
bGVUYWdzLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRh
YmxlczsgKytpbmRleCkgewotICAgICAgICBhdXRvIHRhZyA9IHN0YXRpY19jYXN0PENURm9udFRh
YmxlVGFnPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KSkpOwotICAgICAgICBpZiAodGFnID09IHRhYmxlVGFn
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBmb250SGFzRWl0aGVyVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFi
bGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpCi17Ci0gICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9w
dENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25O
b09wdGlvbnMpKTsKLSAgICBpZiAoIXRhYmxlVGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7
Ci0gICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgp
IHsKLSAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdl
dCgpLCBpbmRleCkpKTsKLSAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZzEgfHwgdGFnID09IHRh
YmxlVGFnMikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDI0LjBmKSA6IDAuZjsK
LSNlbHNlCi0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpID8gMS4wZiA6IDAuZjsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgdW5pdHNQZXJF
bSA9IENURm9udEdldFVuaXRzUGVyRW0obV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBmbG9h
dCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgQ0dGbG9hdCBjYXBIZWln
aHQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9ybURhdGEuZm9udCgp
KSA6IDA7Ci0gICAgQ0dGbG9hdCBsaW5lR2FwID0gcG9pbnRTaXplID8gQ1RGb250R2V0TGVhZGlu
ZyhtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLSAgICBDR0Zsb2F0IGFzY2VudCA9IHBvaW50
U2l6ZSA/IENURm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLSAgICBD
R0Zsb2F0IGRlc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXREZXNjZW50KG1fcGxhdGZvcm1E
YXRhLmZvbnQoKSkgOiAwOwotCi0gICAgLy8gVGhlIE9wZW4gRm9udCBGb3JtYXQgZGVzY3JpYmVz
IHRoZSBPUy8yIFVTRV9UWVBPX01FVFJJQ1MgZmxhZyBhcyBmb2xsb3dzOgotICAgIC8vICJJZiBz
ZXQsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSBPUy8yLnNUeXBvQXNjZW5kZXIg
LSBPUy8yLnNUeXBvRGVzY2VuZGVyKyBPUy8yLnNUeXBvTGluZUdhcCBhcyBhIHZhbHVlIGZvciBk
ZWZhdWx0IGxpbmUgc3BhY2luZyBmb3IgdGhpcyBmb250LiIKLSAgICAvLyBPbiBPUyBYLCB3ZSBv
bmx5IGFwcGx5IHRoaXMgcnVsZSBpbiB0aGUgaW1wb3J0YW50IGNhc2Ugb2YgZm9udHMgd2l0aCBh
IE1BVEggdGFibGUuCi0gICAgaWYgKGZvbnRIYXNUYWJsZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQo
KSwga0NURm9udFRhYmxlTUFUSCkpIHsKLSAgICAgICAgc2hvcnQgdHlwb0FzY2VudCwgdHlwb0Rl
c2NlbnQsIHR5cG9MaW5lR2FwOwotICAgICAgICBpZiAoT3BlblR5cGU6OnRyeUdldFR5cG9NZXRy
aWNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgdHlwb0FzY2VudCwgdHlwb0Rlc2NlbnQsIHR5cG9M
aW5lR2FwKSkgewotICAgICAgICAgICAgYXNjZW50ID0gc2NhbGVFbVRvVW5pdHModHlwb0FzY2Vu
dCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgICAgICBkZXNjZW50ID0gLXNjYWxl
RW1Ub1VuaXRzKHR5cG9EZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICAgICAg
ICAgIGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyh0eXBvTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGZhbWlseU5hbWUgPSBhZG9w
dENGKENURm9udENvcHlGYW1pbHlOYW1lKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwotCi0gICAg
Ly8gRGlzYWJsZSBhbnRpYWxpYXNpbmcgd2hlbiByZW5kZXJpbmcgd2l0aCBBaGVtIGJlY2F1c2Ug
bWFueSB0ZXN0cyByZXF1aXJlIHRoaXMuCi0gICAgaWYgKGlzQWhlbUZvbnQoZmFtaWx5TmFtZS5n
ZXQoKSkpCi0gICAgICAgIG1fYWxsb3dzQW50aWFsaWFzaW5nID0gZmFsc2U7Ci0KLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgVGltZXMsIEhlbHZldGljYSwgYW5k
IENvdXJpZXIgdG8gY2xvc2VseSBtYXRjaCB0aGUKLSAgICAvLyB2ZXJ0aWNhbCBtZXRyaWNzIG9m
IHRoZWlyIE1pY3Jvc29mdCBjb3VudGVycGFydHMgdGhhdCBhcmUgdGhlIGRlIGZhY3RvCi0gICAg
Ly8gd2ViIHN0YW5kYXJkLiBUaGUgQXBwS2l0IGFkanVzdG1lbnQgb2YgMjAlIGlzIHRvbyBiaWcg
YW5kIGlzCi0gICAgLy8gaW5jb3JyZWN0bHkgYWRkZWQgdG8gbGluZSBzcGFjaW5nLCBzbyB3ZSB1
c2UgYSAxNSUgYWRqdXN0bWVudCBpbnN0ZWFkCi0gICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgYXNj
ZW50LgotICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsICYmIG5lZWRzQXNjZW50QWRq
dXN0bWVudChmYW1pbHlOYW1lLmdldCgpKSkKLSAgICAgICAgYXNjZW50ICs9IHN0ZDo6cm91bmQo
KGFzY2VudCArIGRlc2NlbnQpICogMC4xNWYpOwotI2VuZGlmCi0KLSAgICAvLyBDb21wdXRlIGxp
bmUgc3BhY2luZyBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUgYXBwbGllZC4KLSAg
ICBmbG9hdCBsaW5lU3BhY2luZyA9IGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVzY2VudCkg
KyBscm91bmRmKGxpbmVHYXApOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIEhhY2sgSGly
YWdpbm8gbGluZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVybGlu
ZXMuCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+Ci0gICAgaWYgKGRlc2NlbnQgPCAz
ICYmIGxpbmVHYXAgPj0gMyAmJiBmYW1pbHlOYW1lICYmIENGU3RyaW5nSGFzUHJlZml4KGZhbWls
eU5hbWUuZ2V0KCksIENGU1RSKCJIaXJhZ2lubyIpKSkgewotICAgICAgICBsaW5lR2FwIC09IDMg
LSBkZXNjZW50OwotICAgICAgICBkZXNjZW50ID0gMzsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAg
ICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZl
cnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0gICAgICAgIG1faGFzVmVy
dGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250
KCkpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBDR0Zsb2F0IGFkanVzdG1lbnQg
PSBzaG91bGRVc2VBZGp1c3RtZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgPyBjZWlsKChhc2Nl
bnQgKyBkZXNjZW50KSAqIGtMaW5lSGVpZ2h0QWRqdXN0bWVudCkgOiAwOwotCi0gICAgbGluZUdh
cCA9IGNlaWxmKGxpbmVHYXApOwotICAgIGxpbmVTcGFjaW5nID0gY2VpbChhc2NlbnQpICsgYWRq
dXN0bWVudCArIGNlaWwoZGVzY2VudCkgKyBsaW5lR2FwOwotICAgIGFzY2VudCA9IGNlaWxmKGFz
Y2VudCArIGFkanVzdG1lbnQpOwotICAgIGRlc2NlbnQgPSBjZWlsZihkZXNjZW50KTsKLQotICAg
IG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZv
ckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKLSNlbmRpZgotCi0gICAgQ0dGbG9hdCB4SGVpZ2h0
ID0gMDsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7Ci0gICAgICAgIGlmIChwbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkg
ewotICAgICAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAieCIsIHNpbmNl
IGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxpbmUsIGFuZCB3
ZSBuZWVkIHRoZQotICAgICAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNs
dWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4K
LSAgICAgICAgICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVyKCd4Jyk7Ci0gICAg
ICAgICAgICBpZiAoeEdseXBoKQotICAgICAgICAgICAgICAgIHhIZWlnaHQgPSAtQ0dSZWN0R2V0
TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhHbHlwaCkpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHhIZWlnaHQgPSBDVEZvbnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeEhlaWdodCA9IHZlcnRpY2Fs
UmlnaHRPcmllbnRhdGlvbkZvbnQoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKLSAgICB9Ci0K
LSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci0gICAgbV9mb250
TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQo
ZGVzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoY2FwSGVpZ2h0KTsKLSAg
ICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5z
ZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobGlu
ZVNwYWNpbmcpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lUG9zaXRpb24oLUNURm9u
dEdldFVuZGVybGluZVBvc2l0aW9uKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwotICAgIG1fZm9u
dE1ldHJpY3Muc2V0VW5kZXJsaW5lVGhpY2tuZXNzKENURm9udEdldFVuZGVybGluZVRoaWNrbmVz
cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLX0KLQotdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJX
aWR0aEluaXQoKQotewotICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKLSAgICBtX21heENoYXJXaWR0
aCA9IDA7Ci0KLSAgICBhdXRvIG9zMlRhYmxlID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUobV9w
bGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250VGFibGVPUzIsIGtDVEZvbnRUYWJsZU9wdGlvbk5v
T3B0aW9ucykpOwotICAgIGlmIChvczJUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUu
Z2V0KCkpID49IDQpIHsKLSAgICAgICAgY29uc3QgVUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQ
dHIob3MyVGFibGUuZ2V0KCkpOwotICAgICAgICBTSW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3My
WzJdICogMjU2ICsgb3MyWzNdOwotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1Vu
aXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0
Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0KLQotICAgIGF1dG8gaGVhZFRhYmxlID0gYWRvcHRDRihD
VEZvbnRDb3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250VGFibGVIZWFkLCBr
Q1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoaGVhZFRhYmxlICYmIENGRGF0
YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7Ci0gICAgICAgIGNvbnN0IFVJbnQ4
KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkpOwotICAgICAgICB1c2hv
cnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOwotICAgICAgICB1c2hvcnQgdXhN
YXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOwotICAgICAgICBTSW50MTYgeE1pbiA9IHN0
YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOwotICAgICAgICBTSW50MTYgeE1heCA9IHN0YXRpY19j
YXN0PFNJbnQxNj4odXhNYXgpOwotICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHhNYXggLSB4TWluKTsKLSAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0
cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5zaXpl
KCk7Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0
ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0
aXZlLgotICAgIGluaXRDaGFyV2lkdGhzKCk7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1EZXN0
cm95KCkKLXsKLX0KLQotYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9y
U3ludGhlc2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENhcHMsIFVDaGFyMzIgY2hhcmFj
dGVyKSBjb25zdAotewotI2lmIChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9T
KSB8fCBQTEFURk9STShNQUMpCi0gICAgR2x5cGggZ2x5cGggPSBnbHlwaEZvckNoYXJhY3Rlcihj
aGFyYWN0ZXIpOwotICAgIGlmICghZ2x5cGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHN3aXRjaCAoZm9udFZhcmlhbnRDYXBzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNt
YWxsOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5U21hbGxD
YXBzKCk7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9y
dGVkLmdldChnbHlwaCk7Ci0gICAgfQotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6
IHsKLSAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBz
KCk7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVk
LmdldChnbHlwaCk7Ci0gICAgfQotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDog
ewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fw
cygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRl
ZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRl
OiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRl
Q2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBv
cnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBTeW50aGVz
aXMgb25seSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZhbHVlcyBsaXN0ZWQgYWJvdmUuCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNoYXJh
Y3Rlcik7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgewotICAgIGNhc2UgRm9udFZh
cmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgotICAg
IGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6QWxsUGV0aXRlOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlz
dGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotI2lm
IChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMp
Ci1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gc21hbGxDYXBzT3BlblR5cGVEaWN0
aW9uYXJ5KENGU3RyaW5nUmVmIGtleSwgaW50IHJhd1ZhbHVlKQotewotICAgIFJldGFpblB0cjxD
Rk51bWJlclJlZj4gdmFsdWUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdWYWx1ZSkpOwotICAgIENGVHlwZVJlZiBrZXlz
W10gPSB7IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVW
YWx1ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LCB2YWx1ZS5nZXQoKSB9Owot
ICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLX0KLQot
c3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlv
bmFyeShpbnQgcmF3S2V5LCBpbnQgcmF3VmFsdWUpCi17Ci0gICAgUmV0YWluUHRyPENGTnVtYmVy
UmVmPiBrZXkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckludFR5cGUsICZyYXdLZXkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZh
bHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKLSAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250
RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmll
cktleSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LmdldCgpLCB2YWx1ZS5nZXQo
KSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
LX0KLQotc3RhdGljIHZvaWQgdW5pb25CaXRWZWN0b3JzKEJpdFZlY3RvciYgcmVzdWx0LCBDRkJp
dFZlY3RvclJlZiBzb3VyY2UpCi17Ci0gICAgQ0ZJbmRleCBsZW5ndGggPSBDRkJpdFZlY3Rvckdl
dENvdW50KHNvdXJjZSk7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUobGVuZ3RoKTsKLSAgICBDRklu
ZGV4IG1pbiA9IDA7Ci0gICAgd2hpbGUgKG1pbiA8IGxlbmd0aCkgewotICAgICAgICBDRkluZGV4
IG5leHRJbmRleCA9IENGQml0VmVjdG9yR2V0Rmlyc3RJbmRleE9mQml0KHNvdXJjZSwgQ0ZSYW5n
ZU1ha2UobWluLCBsZW5ndGggLSBtaW4pLCAxKTsKLSAgICAgICAgaWYgKG5leHRJbmRleCA9PSBr
Q0ZOb3RGb3VuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByZXN1bHQuc2V0KG5leHRJ
bmRleCwgdHJ1ZSk7Ci0gICAgICAgIG1pbiA9IG5leHRJbmRleCArIDE7Ci0gICAgfQotfQotCi1z
dGF0aWMgdm9pZCBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU3RyaW5nUmVmIGZlYXR1cmUsIENU
Rm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZCaXRW
ZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0
dXJlKGZvbnQsIHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShmZWF0dXJlLCAxKS5nZXQoKSkp
OwotICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQoKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGluamVjdFRydWVUeXBlQ292ZXJhZ2UoaW50IHR5cGUsIGludCBzZWxlY3RvciwgQ1RG
b250UmVmIGZvbnQsIEJpdFZlY3RvciYgcmVzdWx0KQotewotICAgIFJldGFpblB0cjxDRkJpdFZl
Y3RvclJlZj4gc291cmNlID0gYWRvcHRDRihDVEZvbnRDb3B5R2x5cGhDb3ZlcmFnZUZvckZlYXR1
cmUoZm9udCwgc21hbGxDYXBzVHJ1ZVR5cGVEaWN0aW9uYXJ5KHR5cGUsIHNlbGVjdG9yKS5nZXQo
KSkpOwotICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQoKSk7Ci19Ci0KLWNv
bnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMoKSBjb25zdAot
ewotICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcykgewotICAgICAgICBtX2ds
eXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9w
ZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2ds
eXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlw
ZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IsIHBs
YXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUo
KTsKLX0KLQotY29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxs
Q2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBz
KSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMgPSBCaXRWZWN0b3Io
KTsKLSAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigic21jcCIpLCBwbGF0Zm9y
bURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7
Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMyc2MiKSwgcGxhdGZvcm1E
YXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOwot
ICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNl
U21hbGxDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0
ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFn
ZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURh
dGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7Ci0g
ICAgfQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCk7
Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBz
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKSB7Ci0g
ICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAg
ICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCku
Zm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAg
aW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNh
cHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0
aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlQ
ZXRpdGVDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3Vw
cG9ydGVkQnlBbGxQZXRpdGVDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9y
dGVkQnlBbGxQZXRpdGVDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRp
dGVDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZT
VFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxs
UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNU
UigiYzJwYyIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQ
ZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dl
ckNhc2VUeXBlLCBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5m
b250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgICAg
ICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtVcHBlckNhc2VUeXBlLCBrVXBwZXJDYXNlUGV0aXRl
Q2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlB
bGxQZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0
ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPEZv
bnQ+IGNyZWF0ZURlcml2YXRpdmVGb250KENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBGb250
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCi17Ci0gICAgaWYgKCFm
b250KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChzeW50aGV0aWNCb2xkKQot
ICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xkVHJhaXQ7Ci0gICAgaWYgKHN5bnRoZXRp
Y0l0YWxpYykKLSAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGljVHJhaXQ7Ci0KLSAg
ICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMoZm9udCk7Ci0KLSAgICBib29sIHVzZWRTeW50aGV0aWNCb2xkID0gKGZvbnRUcmFp
dHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJh
aXRCb2xkKTsKLSAgICBib29sIHVzZWRTeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBr
Q1RGb250SXRhbGljVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0
YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShmb250LCBzaXplLCB1
c2VkU3ludGhldGljQm9sZCwgdXNlZFN5bnRoZXRpY09ibGlxdWUsIG9yaWVudGF0aW9uKTsKLQot
ICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEpOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNPcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0g
ICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlw
ZUZlYXR1cmVUYWcpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRP
cGVuVHlwZUZlYXR1cmVWYWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1RydWVUeXBl
RmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKLXsKLSAgICByZXR1cm4gQ0ZEaWN0aW9u
YXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkg
JiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIE9wdGlvbmFsPENGU3RyaW5nUmVm
PiBvcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0gICAgQVNTRVJU
KGlzT3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpKTsKLSAgICBDRlN0cmluZ1JlZiB0YWcgPSBzdGF0
aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9u
dE9wZW5UeXBlRmVhdHVyZVRhZykpOwotICAgIGludCByYXdWYWx1ZTsKLSAgICBDRk51bWJlclJl
ZiB2YWx1ZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShm
ZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpKTsKLSAgICBhdXRvIHN1Y2Nlc3Mg
PSBDRk51bWJlckdldFZhbHVlKHZhbHVlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpOwot
ICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgcmV0dXJuIHJhd1ZhbHVl
ID8gT3B0aW9uYWw8Q0ZTdHJpbmdSZWY+KHRhZykgOiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgc3RkOjpwYWlyPGludCwgaW50PiB0cnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5
UmVmIGZlYXR1cmUpCi17Ci0gICAgQVNTRVJUKGlzVHJ1ZVR5cGVGZWF0dXJlKGZlYXR1cmUpKTsK
LSAgICBpbnQgcmF3VHlwZTsKLSAgICBDRk51bWJlclJlZiB0eXBlID0gc3RhdGljX2Nhc3Q8Q0ZO
dW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlw
ZUlkZW50aWZpZXJLZXkpKTsKLSAgICBhdXRvIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHR5
cGUsIGtDRk51bWJlckludFR5cGUsICZyYXdUeXBlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOwotICAgIGludCByYXdTZWxlY3RvcjsKLSAgICBDRk51bWJlclJlZiBzZWxl
Y3RvciA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0
dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgIHN1Y2Nlc3Mg
PSBDRk51bWJlckdldFZhbHVlKHNlbGVjdG9yLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3U2VsZWN0
b3IpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKHJhd1R5cGUsIHJhd1NlbGVjdG9yKTsKLX0KLQotc3RhdGljIGlubGluZSBD
Rk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoaW50IGtleSwgQ1RG
b250UmVmIGZvbnQpCi17Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZlYXR1cmVzID0gYWRv
cHRDRihDVEZvbnRDb3B5RmVhdHVyZXMoZm9udCkpOwotICAgIENGSW5kZXggZmVhdHVyZUNvdW50
ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaSA9
IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZmVh
dHVyZVR5cGUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgQ0ZOdW1iZXJSZWYgZmVhdHVyZUtl
eSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJl
VHlwZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAgICBpZiAoIWZl
YXR1cmVLZXkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW50IHJhd0ZlYXR1cmVL
ZXk7Ci0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUoZmVhdHVyZUtleSwga0NGTnVtYmVySW50VHlw
ZSwgJnJhd0ZlYXR1cmVLZXkpOwotICAgICAgICBpZiAocmF3RmVhdHVyZUtleSAhPSBrZXkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRkFycmF5UmVmIGZlYXR1cmVTZWxlY3Rv
cnMgPSBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJl
VHlwZSwga0NURm9udEZlYXR1cmVUeXBlU2VsZWN0b3JzS2V5KSk7Ci0gICAgICAgIGlmICghZmVh
dHVyZVNlbGVjdG9ycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBDRkluZGV4IHNl
bGVjdG9yc0NvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVTZWxlY3RvcnMpOwotICAgICAg
ICBmb3IgKENGSW5kZXggaiA9IDA7IGogPCBzZWxlY3RvcnNDb3VudDsgKytqKSB7Ci0gICAgICAg
ICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZVNlbGVjdG9yID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVTZWxlY3RvcnMsIGopKTsK
LSAgICAgICAgICAgIENGTnVtYmVyUmVmIGlzRGVmYXVsdCA9IHN0YXRpY19jYXN0PENGTnVtYmVy
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlU2VsZWN0b3IsIGtDVEZvbnRGZWF0dXJl
U2VsZWN0b3JEZWZhdWx0S2V5KSk7Ci0gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdCkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludCByYXdJc0RlZmF1bHQ7Ci0gICAg
ICAgICAgICBDRk51bWJlckdldFZhbHVlKGlzRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJh
d0lzRGVmYXVsdCk7Ci0gICAgICAgICAgICBpZiAoIXJhd0lzRGVmYXVsdCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRk51bWJlclJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNl
bGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1zdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHJlbW92
ZWRGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCkKLXsKLSAg
ICBib29sIGlzT3BlblR5cGUgPSBpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICBib29s
IGlzVHJ1ZVR5cGUgPSBpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICBpZiAoIWlzT3Bl
blR5cGUgJiYgIWlzVHJ1ZVR5cGUpCi0gICAgICAgIHJldHVybiBmZWF0dXJlOyAvLyBXZSBkb24n
dCB1bmRlcnN0YW5kIHRoaXMgZm9udCBmb3JtYXQuCi0gICAgUmV0YWluUHRyPENGTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IHJlc3VsdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgaWYgKGlzT3BlblR5cGUpIHsK
LSAgICAgICAgYXV0byBmZWF0dXJlVGFnID0gb3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpOwotICAg
ICAgICBpZiAoZmVhdHVyZVRhZyAmJiAoQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RS
KCJzbWNwIikpCi0gICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZT
VFIoImMyc2MiKSkKLSAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBD
RlNUUigicGNhcCIpKQotICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCks
IENGU1RSKCJjMnBjIikpKSkgewotICAgICAgICAgICAgaW50IHJhd1plcm8gPSAwOwotICAgICAg
ICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB6ZXJvID0gYWRvcHRDRihDRk51bWJlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3WmVybykpOwotICAg
ICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5
cGVGZWF0dXJlVGFnLCBmZWF0dXJlVGFnLnZhbHVlKCkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIHpl
cm8uZ2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRk
VmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBDRkRpY3Rpb25h
cnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSk7Ci0gICAgICAg
ICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVuVHlwZUZl
YXR1cmVWYWx1ZSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBl
RmVhdHVyZVZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGlzVHJ1ZVR5cGUpIHsK
LSAgICAgICAgYXV0byB0cnVlVHlwZUZlYXR1cmVQYWlyID0gdHJ1ZVR5cGVGZWF0dXJlKGZlYXR1
cmUpOwotICAgICAgICBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrTG93ZXJDYXNl
VHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga0xvd2VyQ2FzZVNtYWxsQ2Fw
c1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtMb3dlckNhc2VQZXRp
dGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1
bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdl
dFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAgICAg
ICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JG
b3JUcnVlVHlwZUZlYXR1cmUoa0xvd2VyQ2FzZVR5cGUsIGZvbnQpKQotICAgICAgICAgICAgICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVh
dHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwg
a0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh0cnVlVHlwZUZlYXR1cmVQYWlyLmZpcnN0ID09IGtVcHBlckNhc2VUeXBlICYmICh0cnVlVHlw
ZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrVXBwZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IgfHwgdHJ1
ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3Rvcikp
IHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9u
dEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwg
a0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAgICAgICAgaWYgKENGTnVt
YmVyUmVmIGRlZmF1bHRTZWxlY3RvciA9IGRlZmF1bHRTZWxlY3RvckZvclRydWVUeXBlRmVhdHVy
ZShrVXBwZXJDYXNlVHlwZSwgZm9udCkpCi0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRk
VmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwg
ZGVmYXVsdFNlbGVjdG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBDRkRp
Y3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVu
dGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNl
bGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlm
aWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJ
ZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQu
Z2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKENU
Rm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFk
b3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShmb250LCBr
Q1RGb250RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlKSkpOwotICAgIGlmICghZmVhdHVyZXMpCi0g
ICAgICAgIHJldHVybiBmb250OwotICAgIENGSW5kZXggZmVhdHVyZUNvdW50ID0gQ0ZBcnJheUdl
dENvdW50KGZlYXR1cmVzLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+
IG5ld0ZlYXR1cmVzID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBmZWF0dXJlQ291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLSAgICBmb3Ig
KENGSW5kZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewotICAgICAgICBDRkRpY3Rp
b25hcnlSZWYgZmVhdHVyZSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChmZWF0dXJlcy5nZXQoKSwgaSkpOwotICAgICAgICBDRkFycmF5QXBwZW5k
VmFsdWUobmV3RmVhdHVyZXMuZ2V0KCksIHJlbW92ZWRGZWF0dXJlKGZlYXR1cmUsIGZvbnQpLmdl
dCgpKTsKLSAgICB9Ci0gICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVTZXR0
aW5nc0F0dHJpYnV0ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsgbmV3RmVhdHVyZXMu
Z2V0KCkgfTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRv
cHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVz
LCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENURm9u
dERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JD
cmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0
Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnQsIENURm9udEdldFNpemUoZm9u
dCksIG51bGxwdHIsIG5ld0Rlc2NyaXB0b3IuZ2V0KCkpKTsKLX0KLQotUmVmUHRyPEZvbnQ+IEZv
bnQ6OmNyZWF0ZUZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKCkgY29uc3QKLXsKLSAg
ICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENURm9udFN5bWJvbGlj
VHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0
YS5mb250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGN0Rm9udCA9IGNyZWF0ZUNURm9u
dFdpdGhvdXRTeW50aGVzaXphYmxlRmVhdHVyZXMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAg
ICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoY3RGb250LmdldCgpLCBzaXplLCBtX3BsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0
aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Ci19Ci0KLVJlZlB0
cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgZmxvYXQgc2l6ZSA9IG1fcGxh
dGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAgIENURm9udFN5bWJvbGljVHJhaXRz
IGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250
KCkpOwotICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVz
Y3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250UmVm
PiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9u
dERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKLQotICAgIHJldHVybiBjcmVhdGVE
ZXJpdmF0aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5vcmll
bnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1f
cGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Ci19Ci0KLXZvaWQgRm9udDo6YXBwbHlU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5
cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2Vybmlu
ZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5n
VmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAgVU5V
U0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IEds
eXBoQnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KLSNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMpCi0g
ICAgYXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBoKiogbmV3R2x5cGhzUG9p
bnRlciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50KiogbmV3T2Zmc2V0c1Bv
aW50ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikgewotICAgICAgICByYW5nZS5sb2Nh
dGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHJhbmdlLmxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDRklu
ZGV4PigwKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KGdseXBoQnVmZmVyLnNpemUoKSkpOwotICAg
ICAgICBpZiAocmFuZ2UubGVuZ3RoIDwgMCkgewotICAgICAgICAgICAgcmFuZ2UubGVuZ3RoID0g
c3RkOjptaW4ocmFuZ2UubG9jYXRpb24sIC1yYW5nZS5sZW5ndGgpOwotICAgICAgICAgICAgcmFu
Z2UubG9jYXRpb24gPSByYW5nZS5sb2NhdGlvbiAtIHJhbmdlLmxlbmd0aDsKLSAgICAgICAgICAg
IGdseXBoQnVmZmVyLnJlbW92ZShiZWdpbm5pbmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24s
IHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ2x5cGhCdWZmZXIu
bWFrZUhvbGUoYmVnaW5uaW5nR2x5cGhJbmRleCArIHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5n
dGgsIHRoaXMpOwotCi0gICAgICAgICpuZXdHbHlwaHNQb2ludGVyID0gZ2x5cGhCdWZmZXIuZ2x5
cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpOwotICAgICAgICAqbmV3QWR2YW5jZXNQb2ludGVyID0g
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0gICAgICAgICpuZXdP
ZmZzZXRzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5uaW5nR2x5cGhJbmRleCk7
Ci0gICAgICAgICpuZXdJbmRpY2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmlu
ZyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICB9OwotCi0gICAgYXV0byBzdWJzdHJpbmcgPSB0
ZXh0LnN1YnN0cmluZyhiZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAgYXV0byB1cGNvbnZlcnRl
ZENoYXJhY3RlcnMgPSBzdWJzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgYXV0
byBsb2NhbGVTdHJpbmcgPSBMb2NhbGVDb2NvYTo6Y2Fub25pY2FsTGFuZ3VhZ2VJZGVudGlmaWVy
RnJvbVN0cmluZyhsb2NhbGUpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgQ1RGb250
U2hhcGVPcHRpb25zIG9wdGlvbnMgPSBrQ1RGb250U2hhcGVXaXRoQ2x1c3RlckNvbXBvc2l0aW9u
Ci0gICAgICAgIHwgKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250U2hhcGVXaXRoS2VybmluZyA6IDAp
Ci0gICAgICAgIHwgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMID8ga0NURm9u
dFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBn
bHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kpCi0gICAgICAgIGds
eXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KVtpXSAtPSBiZWdp
bm5pbmdTdHJpbmdJbmRleDsKLQotICAgIENURm9udFNoYXBlR2x5cGhzKAotICAgICAgICBtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmlu
Z0dseXBoSW5kZXgpLAotICAgICAgICByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVm
ZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwKLSAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxDR1BvaW50Kj4oZ2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlwaEluZGV4KSks
Ci0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4
KSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4odXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzLmdldCgpKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5n
R2x5cGhJbmRleCwKLSAgICAgICAgb3B0aW9ucywKLSAgICAgICAgbG9jYWxlU3RyaW5nLmdldCgp
LAotICAgICAgICBoYW5kbGVyKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnbHlw
aEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kpCi0gICAgICAgIGdseXBo
QnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KVtpXSArPSBiZWdpbm5p
bmdTdHJpbmdJbmRleDsKLQotI2Vsc2UKLQotICAgIFVOVVNFRF9QQVJBTShiZWdpbm5pbmdTdHJp
bmdJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2FsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRl
eHQpOwotCi0gICAgLy8gQ1RGb250VHJhbnNmb3JtR2x5cGhzKCkgb3BlcmF0ZXMgaW4gdmlzdWFs
IG9yZGVyLCBidXQgV2lkdGhJdGVyYXRvciBpdGVyYXRlcyBpbiBsb2dpY2FsIG9yZGVyLgotICAg
IC8vIFRlbXBvcmFyaWx5IHB1dCB1cyBpbiB2aXN1YWwgb3JkZXIganVzdCBmb3IgdGhlIGNhbGws
IHRoZW4gcHV0IHVzIGJhY2sgaW50byBsb2dpY2FsIG9yZGVyIHdoZW4KLSAgICAvLyB0aGUgY2Fs
bCBpcyBkb25lLgotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBnbG9iYWwgdmlldyBvZiB0aGUgZW50
aXJlIEdseXBoQnVmZmVyOyB3ZSdyZSBqdXN0IG9wZXJhdGluZyBvbiBhIHNpbmdsZSBjaHVuayBv
ZiBpdC4KLSAgICAvLyBXaWR0aEl0ZXJhdG9yIGVuY291bnRlcnMgdGhlIGNodW5rcyBvdXQgaW4g
bG9naWNhbCBvcmRlciwgc28gd2UgaGF2ZSB0byBtYWludGFpbiB0aGF0IGludmFyaWFudC4KLSAg
ICAvLyBFdmVudHVhbGx5LCBGb250Q2FzY2FkZTo6bGF5b3V0U2ltcGxlVGV4dCgpIHdpbGwgcmV2
ZXJzZSB0aGUgd2hvbGUgYnVmZmVyIHRvIHB1dCB0aGUgZW50aXJlIHRoaW5nCi0gICAgLy8gaW4g
dmlzdWFsIG9yZGVyLCBidXQgdGhhdCdzIG9rYXkgYmVjYXVzZSBpdCBoYXMgYSB2aWV3IG9mIHRo
ZSBlbnRpcmUgR2x5cGhCdWZmZXIuCi0gICAgLy8gT24gdGhlIG90aGVyIGhhbmQsIENURm9udFNo
YXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUgYnVmZmVyIGluIGxvZ2ljYWwgb3JkZXIgYnV0IHJldHVy
bnMgaXQgaW4gcGh5c2ljYWwKLSAgICAvLyBvcmRlciwgd2hpY2ggbWVhbnMgdGhlIHNlY29uZCBy
ZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlvbiBzdGlsbCBuZWVkcyB0byBleGVjdXRlIHdoZW4KLSAg
ICAvLyBDVEZvbnRTaGFwZUdseXBocygpIGlzIGJlaW5nIHVzZWQuCi0gICAgaWYgKHRleHREaXJl
Y3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNl
KGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBo
SW5kZXgpOwotCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKGVuYWJsZUtl
cm5pbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDApIHwga0NURm9udFRy
YW5zZm9ybUFwcGx5U2hhcGluZzsKLSAgICBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KSwg
cmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdH
bHlwaEluZGV4KSksIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgsIG9w
dGlvbnMpOwotI2VuZGlmCi0KLSAgICAvLyBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgaW4gdGhpcyBm
dW5jdGlvbiB3aGVyZSB0aGUgb3RoZXIgY2FsbCB0byByZXZlcnNlKCkgaXMuCi0gICAgaWYgKHRl
eHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICBnbHlwaEJ1ZmZlci5y
ZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmlu
Z0dseXBoSW5kZXgpOwotfQotCi1zdGF0aWMgaW50IGV4dHJhY3ROdW1iZXIoQ0ZOdW1iZXJSZWYg
bnVtYmVyKQotewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGlmIChudW1iZXIpCi0gICAgICAg
IENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmVzdWx0KTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKLXsKLSAg
ICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOwotICAgIEFTU0VSVChj
dEZvbnQpOwotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uCi0gICAgLy8gQWNjb3Jk
aW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5NDY3Piwgd2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1v
bm8gYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3Qg
cmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCi0KLSAgICAvLyBTcGVjaWFsIGNhc2Ug
TVMtUEdvdGhpYy4KLSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzQwMzI5Mzg+
LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8g
Tm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgot
Ci0gICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90eXBlQ29yc2l2YQotICAgIC8vIEFjY29yZGluZyB0
byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNob3VsZCBub3QgdHJlYXQgTW9ub3R5cGVD
b3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBv
cnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgYXV0byBmdWxsTmFtZSA9
IGFkb3B0Q0YoQ1RGb250Q29weUZ1bGxOYW1lKGN0Rm9udCkpOwotICAgIGF1dG8gZmFtaWx5TmFt
ZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7Ci0KLSAgICBpbnQgZml4
ZWRQaXRjaCA9IGV4dHJhY3ROdW1iZXIoYWRvcHRDRihzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4o
Q1RGb250Q29weUF0dHJpYnV0ZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRGaXhlZEFk
dmFuY2VBdHRyaWJ1dGUpKSkuZ2V0KCkpOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoQ1RG
b250R2V0U3ltYm9saWNUcmFpdHMoY3RGb250KSAmIGtDVEZvbnRNb25vU3BhY2VUcmFpdCkgfHwg
Zml4ZWRQaXRjaCB8fCAoY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZT
VFIoIk9zYWthLU1vbm8iKSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQo
KSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFt
ZS5nZXQoKSwgQ0ZTVFIoIk1vbm90eXBlQ29yc2l2YSIpKSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBpZiAoZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWls
eU5hbWUuZ2V0KCksIENGU1RSKCJDb3VyaWVyIE5ldyIpKSkgewotICAgICAgICAvLyBTcGVjaWFs
IGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRyZWF0ZWQgYXMgZml4ZWQgcGl0Y2gsIGFzIHRo
aXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBzcGFjZSB3aWR0aCB3aGljaCBpcyB1bmRlc2ly
ZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82MjY5NzgzKS4KLSAgICAgICAgbV90cmVhdEFz
Rml4ZWRQaXRjaCA9IGZhbHNlOwotICAgIH0KLSNlbmRpZgotfQotCi1GbG9hdFJlY3QgRm9udDo6
cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBGbG9hdFJl
Y3QgYm91bmRpbmdCb3g7Ci0gICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3Rz
Rm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgPyBrQ1RGb250T3JpZW50YXRpb25W
ZXJ0aWNhbCA6IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwsICZnbHlwaCwgMCwgMSk7Ci0g
ICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKLSAgICBpZiAobV9zeW50
aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0Jv
eC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJldHVybiBib3VuZGlu
Z0JveDsKLX0KLQotZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAotewotICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKLQotICAgIGlmIChw
bGF0Zm9ybURhdGEoKS5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBob3Jpem9udGFsID0gcGxhdGZv
cm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhvcml6b250YWw7Ci0g
ICAgICAgIENURm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gaG9yaXpvbnRhbCB8fCBtX2lz
QnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPyBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsIDog
a0NURm9udE9yaWVudGF0aW9uVmVydGljYWw7Ci0jaWYgVVNFKENURk9OVEdFVEFEVkFOQ0VTX1dP
UktBUk9VTkQpCi0gICAgICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJl
bmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQ
b3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwg
a0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKLSAgICAgICAgaWYgKCFDVEZvbnRJ
c0FwcGxlQ29sb3JFbW9qaShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSkgJiYgIW1fcGxhdGZvcm1E
YXRhLmhhc1ZhcmlhdGlvbnMoKSkKLSAgICAgICAgICAgIENURm9udEdldFVuc3VtbWVkQWR2YW5j
ZXNGb3JHbHlwaHNBbmRTdHlsZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgb3JpZW50YXRpb24s
IHN0eWxlLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKG1fcGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQ7Ci19Ci0KLVBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdENGKENURm9udENyZWF0ZVBhdGhGb3JHbHlw
aChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgZ2x5cGgsIG51bGxwdHIpKTsKLSAgICBhdXRvIHN5
bnRoZXRpY0JvbGRPZmZzZXQgPSB0aGlzLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgaWYg
KHN5bnRoZXRpY0JvbGRPZmZzZXQpIHsKLSAgICAgICAgYXV0byBuZXdQYXRoID0gYWRvcHRDRihD
R1BhdGhDcmVhdGVNdXRhYmxlKCkpOwotICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0
KCksIG51bGxwdHIsIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIGF1dG8gdHJhbnNsYXRpb24gPSBD
R0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbihzeW50aGV0aWNCb2xkT2Zmc2V0LCAwKTsK
LSAgICAgICAgQ0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCAmdHJhbnNsYXRpb24sIHJlc3Vs
dC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiB7IFdURk1vdmUobmV3UGF0aCkgfTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHsgYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShyZXN1bHQuZ2V0KCkp
KSB9OwotfQotCi1ib29sIEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBj
aGFyYWN0ZXIsIE9wdGlvbmFsPFVDaGFyMzI+IHZhcmlhdGlvbikgY29uc3QKLXsKLSAgICBpZiAo
dmFyaWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVbmlDaGFyIGNvZGVVbml0
c1syXTsKLSAgICBDR0dseXBoIGdseXBoc1syXTsKLSAgICBDRkluZGV4IGNvdW50ID0gMDsKLSAg
ICBVMTZfQVBQRU5EX1VOU0FGRShjb2RlVW5pdHMsIGNvdW50LCBjaGFyYWN0ZXIpOwotICAgIHJl
dHVybiBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgp
LCBjb2RlVW5pdHMsIGdseXBocywgY291bnQpOwotfQotCi1ib29sIEZvbnQ6OmlzUHJvYmFibHlP
bmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAotewotICAgIGF1dG8gcGxhdGZvcm1Gb250ID0g
cGxhdGZvcm1EYXRhKCkuZm9udCgpOwotICAgIGlmICghcGxhdGZvcm1Gb250KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBbGxvdyBtb3N0IG5vbi1pY29uIGZvbnRzIHRvIGJhaWwg
ZWFybHkgaGVyZSBieSB0ZXN0aW5nIGEgc2luZ2xlIGNoYXJhY3RlciAnYScsIHdpdGhvdXQgaXRl
cmF0aW5nIG92ZXIgYWxsIGJhc2ljIGxhdGluIGNoYXJhY3RlcnMuCi0gICAgVW5pQ2hhciBsb3dl
cmNhc2VBQ2hhcmFjdGVyID0gJ2EnOwotICAgIENHR2x5cGggbG93ZXJjYXNlQUdseXBoOwotICAg
IGlmIChDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3JtRm9udCwgJmxvd2VyY2Fz
ZUFDaGFyYWN0ZXIsICZsb3dlcmNhc2VBR2x5cGgsIDEpKSB7Ci0gICAgICAgIGlmICghQ0dSZWN0
SXNFbXB0eShDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwga0NU
Rm9udE9yaWVudGF0aW9uRGVmYXVsdCwgJmxvd2VyY2FzZUFHbHlwaCwgbnVsbHB0ciwgMSkpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGF1dG8gc3VwcG9ydGVkQ2hh
cmFjdGVycyA9IGFkb3B0Q0YoQ1RGb250Q29weUNoYXJhY3RlclNldChwbGF0Zm9ybUZvbnQpKTsK
LSAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBvcnRlZENoYXJhY3Rl
cnMuZ2V0KCksIDEpIHx8IENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVySW5QbGFuZShzdXBwb3J0ZWRD
aGFyYWN0ZXJzLmdldCgpLCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhp
cyBlbmNvbXBhc3NlcyBhbGwgYmFzaWMgTGF0aW4gbm9uLWNvbnRyb2wgY2hhcmFjdGVycy4KLSAg
ICBjb25zdGV4cHIgVW5pQ2hhciBmaXJzdENoYXJhY3RlclRvVGVzdCA9ICcgJzsKLSAgICBjb25z
dGV4cHIgVW5pQ2hhciBsYXN0Q2hhcmFjdGVyVG9UZXN0ID0gJ34nOwotICAgIGNvbnN0ZXhwciBh
dXRvIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCA9IGxhc3RDaGFyYWN0ZXJUb1Rlc3QgLSBmaXJz
dENoYXJhY3RlclRvVGVzdCArIDE7Ci0KLSAgICBWZWN0b3I8Q0dHbHlwaD4gZ2x5cGhzOwotICAg
IGdseXBocy5maWxsKDAsIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCk7Ci0gICAgQ1RGb250R2V0
R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UocGxhdGZvcm1Gb250LCBnbHlwaHMuYmVnaW4oKSwgQ0ZS
YW5nZU1ha2UoZmlyc3RDaGFyYWN0ZXJUb1Rlc3QsIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCkp
OwotICAgIGdseXBocy5yZW1vdmVBbGwoMCk7Ci0KLSAgICBpZiAoZ2x5cGhzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPENHUmVjdD4gYm91bmRpbmdSZWN0
czsKLSAgICBib3VuZGluZ1JlY3RzLmZpbGwoQ0dSZWN0WmVybywgZ2x5cGhzLnNpemUoKSk7Ci0g
ICAgQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhwbGF0Zm9ybUZvbnQsIGtDVEZvbnRP
cmllbnRhdGlvbkRlZmF1bHQsIGdseXBocy5iZWdpbigpLCBib3VuZGluZ1JlY3RzLmJlZ2luKCks
IGdseXBocy5zaXplKCkpOwotICAgIHJldHVybiBub3RGb3VuZCA9PSBib3VuZGluZ1JlY3RzLmZp
bmRNYXRjaGluZyhbXShhdXRvJiByZWN0KSB7Ci0gICAgICAgIHJldHVybiAhQ0dSZWN0SXNFbXB0
eShyZWN0KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0
YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBs
YXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IGRiMWI0ZmY0YTE2YTQyM2ZlODYzY2U3M2I1OGM2NjI4
YzFiMDhlNjQuLmM5N2Q1MGE1MjZhMmZkNzE4ZGI5Y2M2MjAxNmMzMjVlZDgxYjNiM2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTM1LDMzICszNSw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotYm9vbCBpc1N5c3RlbUZvbnQoQ1RGb250UmVmIGZvbnQpCi17Ci0jaWYg
SEFWRShDVEZPTlRJU1NZU1RFTVVJRk9OVCkKLSAgICByZXR1cm4gQ1RGb250SXNTeXN0ZW1VSUZv
bnQoZm9udCk7Ci0jZWxzZQotICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZv
bnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsKLSNlbmRp
ZgotfQotCi0vLyBUaGVzZSBDb3JlVGV4dCBUZXh0IFNwYWNpbmcgZmVhdHVyZSBzZWxlY3RvcnMg
YXJlIG5vdCBkZWZpbmVkIGluIENvcmVUZXh0LgotZW51bSBUZXh0U3BhY2luZ0NURmVhdHVyZVNl
bGVjdG9yIHsgVGV4dFNwYWNpbmdQcm9wb3J0aW9uYWwsIFRleHRTcGFjaW5nRnVsbFdpZHRoLCBU
ZXh0U3BhY2luZ0hhbGZXaWR0aCwgVGV4dFNwYWNpbmdUaGlyZFdpZHRoLCBUZXh0U3BhY2luZ1F1
YXJ0ZXJXaWR0aCB9OwotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENURm9u
dFJlZiBmb250LCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGlj
T2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdp
ZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUpCi0gICAgOiBG
b250UGxhdGZvcm1EYXRhKHNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUsIG9y
aWVudGF0aW9uLCB3aWR0aFZhcmlhbnQsIHRleHRSZW5kZXJpbmdNb2RlKQotewotICAgIEFTU0VS
VF9BUkcoZm9udCwgZm9udCk7Ci0gICAgbV9mb250ID0gZm9udDsKLSAgICBtX2lzQ29sb3JCaXRt
YXBGb250ID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgJiBrQ1RGb250VHJhaXRDb2xv
ckdseXBoczsKLSAgICBtX2lzU3lzdGVtRm9udCA9IFdlYkNvcmU6OmlzU3lzdGVtRm9udChtX2Zv
bnQuZ2V0KCkpOwotICAgIGF1dG8gdmFyaWF0aW9ucyA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZE
aWN0aW9uYXJ5UmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKGZvbnQsIGtDVEZvbnRWYXJpYXRpb25B
dHRyaWJ1dGUpKSk7Ci0gICAgbV9oYXNWYXJpYXRpb25zID0gdmFyaWF0aW9ucyAmJiBDRkRpY3Rp
b25hcnlHZXRDb3VudCh2YXJpYXRpb25zLmdldCgpKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgbV9pc0Vtb2ppID0gQ1RGb250SXNBcHBsZUNvbG9yRW1vamkobV9mb250LmdldCgp
KTsKLSNlbmRpZgotfQotCiB1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QK
IHsKICAgICB1aW50cHRyX3QgZmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3dpZHRoVmFyaWFudCkgPDwgNgpAQCAtNzEsNyArNDQsNyBAQCB1bnNp
Z25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKICAgICAgICAgfCBtX3N5bnRoZXRp
Y0JvbGQgPDwgMQogICAgICAgICB8IG1fc3ludGhldGljT2JsaXF1ZSk7CiAKLSAgICB1aW50cHRy
X3QgZm9udEhhc2ggPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9udC5n
ZXQoKSkpOworICAgIHVpbnRwdHJfdCBmb250SGFzaCA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Q0ZIYXNoKG1fZm9udC5nZXQoKSkpOwogICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbXSA9IHsgZm9u
dEhhc2gsIGZsYWdzIH07CiAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXpl
b2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKIH0KQEAgLTgzLDExOCArNTYsNCBAQCBib29sIEZv
bnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBv
dGhlcikgY29uc3QKICAgICByZXR1cm4gQ0ZFcXVhbChtX2ZvbnQuZ2V0KCksIG90aGVyLm1fZm9u
dC5nZXQoKSk7CiB9CiAKLUNURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpyZWdpc3RlcmVkRm9u
dCgpIGNvbnN0Ci17Ci0gICAgQ1RGb250UmVmIHBsYXRmb3JtRm9udCA9IGZvbnQoKTsKLSAgICBB
U1NFUlQocGxhdGZvcm1Gb250KTsKLSAgICBpZiAocGxhdGZvcm1Gb250ICYmIGFkb3B0Q0YoQ1RG
b250Q29weUF0dHJpYnV0ZShwbGF0Zm9ybUZvbnQsIGtDVEZvbnRVUkxBdHRyaWJ1dGUpKSkKLSAg
ICAgICAgcmV0dXJuIHBsYXRmb3JtRm9udDsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotaW5s
aW5lIGludCBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3RvcihGb250V2lkdGhW
YXJpYW50IHZhcmlhbnQpCi17Ci0gICAgc3dpdGNoKHZhcmlhbnQpIHsKLSAgICBjYXNlIEZvbnRX
aWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5nUHJv
cG9ydGlvbmFsOwotCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpIYWxmV2lkdGg6Ci0gICAg
ICAgIHJldHVybiBUZXh0U3BhY2luZ0hhbGZXaWR0aDsKLQotICAgIGNhc2UgRm9udFdpZHRoVmFy
aWFudDo6VGhpcmRXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5nVGhpcmRXaWR0aDsK
LQotICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoOgotICAgICAgICByZXR1
cm4gVGV4dFNwYWNpbmdRdWFydGVyV2lkdGg7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFRleHRTcGFjaW5nUHJvcG9ydGlvbmFsOwotfQotCi1zdGF0aWMg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY2FzY2FkZVRvTGFzdFJlc29ydEF0dHJpYnV0ZXNE
aWN0aW9uYXJ5KCkKLXsKLSAgICBhdXRvIGxhc3RSZXNvcnQgPSBhZG9wdENGKENURm9udERlc2Ny
aXB0b3JDcmVhdGVXaXRoTmFtZUFuZFNpemUoQ0ZTVFIoIkxhc3RSZXNvcnQiKSwgMCkpOwotCi0g
ICAgQ0ZUeXBlUmVmIGRlc2NyaXB0b3JzW10gPSB7IGxhc3RSZXNvcnQuZ2V0KCkgfTsKLSAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZGVzY3JpcHRvcnMsIFdURl9BUlJBWV9MRU5HVEgoZGVzY3JpcHRvcnMp
LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBDRlR5cGVSZWYga2V5c1tdID0geyBr
Q1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7
IGFycmF5LmdldCgpIH07Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcykpOwotfQotCi1zdGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBjYXNjYWRlVG9MYXN0
UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKCkKLXsKLSAgICBzdGF0aWMgQ1RGb250
RGVzY3JpcHRvclJlZiBkZXNjcmlwdG9yID0gQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRy
aWJ1dGVzKGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpLmdldCgpKTsK
LSAgICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6
OmN0Rm9udCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY3RGb250KQotICAgICAgICByZXR1cm4gbV9j
dEZvbnQuZ2V0KCk7Ci0KLSAgICBBU1NFUlQobV9mb250KTsKLSAgICBtX2N0Rm9udCA9IGFkb3B0
Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG1fZm9udC5nZXQoKSwgbV9zaXplLCBu
dWxscHRyLCBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKCkp
KTsKLQotICAgIGlmIChtX3dpZHRoVmFyaWFudCAhPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFy
V2lkdGgpIHsKLSAgICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUgPSBrVGV4dFNwYWNpbmdUeXBl
OwotICAgICAgICBpbnQgZmVhdHVyZVNlbGVjdG9yVmFsdWUgPSBtYXBGb250V2lkdGhWYXJpYW50
VG9DVEZlYXR1cmVTZWxlY3RvcihtX3dpZHRoVmFyaWFudCk7Ci0gICAgICAgIFJldGFpblB0cjxD
VEZvbnREZXNjcmlwdG9yUmVmPiBzb3VyY2VEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5
Rm9udERlc2NyaXB0b3IobV9jdEZvbnQuZ2V0KCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENGTnVt
YmVyUmVmPiBmZWF0dXJlVHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJmZlYXR1cmVUeXBlVmFsdWUpKTsKLSAgICAgICAg
UmV0YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlU2VsZWN0b3IgPSBhZG9wdENGKENGTnVtYmVy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJlU2Vs
ZWN0b3JWYWx1ZSkpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gbmV3
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoRmVhdHVy
ZShzb3VyY2VEZXNjcmlwdG9yLmdldCgpLCBmZWF0dXJlVHlwZS5nZXQoKSwgZmVhdHVyZVNlbGVj
dG9yLmdldCgpKSk7Ci0gICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG5ld0ZvbnQgPSBhZG9w
dENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihuZXdEZXNjcmlwdG9yLmdldCgpLCBt
X3NpemUsIDApKTsKLQotICAgICAgICBpZiAobmV3Rm9udCkKLSAgICAgICAgICAgIG1fY3RGb250
ID0gbmV3Rm9udDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9jdEZvbnQuZ2V0KCk7Ci19Ci0KLVJl
dGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hl
Y2soQ1RGb250UmVmIGN0Rm9udCkKLXsKLSAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoY3RGb250KSk7Ci0gICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg2ODMgVGhpcyBpcyBhIHNoYWxs
b3cgcG9pbnRlciBjb21wYXJlIGZvciB3ZWIgZm9udHMKLSAgICAvLyBiZWNhdXNlIHRoZSBVUkwg
Y29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZvbnQuIFRoaXMgbWVhbnMgd2UgbWlnaHQgZXJy
b25lb3VzbHkgZ2V0IGZhbHNlIG5lZ2F0aXZlcy4KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVy
bCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZVUkxSZWY+KENURm9udERlc2NyaXB0b3JDb3B5QXR0
cmlidXRlKGZvbnREZXNjcmlwdG9yLmdldCgpLCBrQ1RGb250UmVmZXJlbmNlVVJMQXR0cmlidXRl
KSkpOwotICAgIEFTU0VSVCghdXJsIHx8IENGR2V0VHlwZUlEKHVybC5nZXQoKSkgPT0gQ0ZVUkxH
ZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIHVybDsKLX0KLQotUmV0YWluUHRyPENGVHlwZVJlZj4g
Rm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG9iamVjdEZvckVxdWFsaXR5Q2hlY2soY3RGb250KCkpOwotfQotCi1SZWZQdHI8U2hh
cmVkQnVmZmVyPiBGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxl
KSBjb25zdAotewotICAgIGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihD
VEZvbnRDb3B5VGFibGUoZm9udCgpLCB0YWJsZSwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25z
KSkpCi0gICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLmdldCgpKTsKLSAg
ICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQKLQotU3RyaW5n
IEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBTdHJpbmcgZm9u
dERlc2NyaXB0aW9uIHsgYWRvcHRDRihDRkNvcHlEZXNjcmlwdGlvbihmb250KCkpKS5nZXQoKSB9
OwotICAgIHJldHVybiBtYWtlU3RyaW5nKGZvbnREZXNjcmlwdGlvbiwgJyAnLCBtX3NpemUsCi0g
ICAgICAgIChtX3N5bnRoZXRpY0JvbGQgPyAiIHN5bnRoZXRpYyBib2xkIiA6ICIiKSwKLSAgICAg
ICAgKG1fc3ludGhldGljT2JsaXF1ZSA/ICIgc3ludGhldGljIG9ibGlxdWUiIDogIiIpLAotICAg
ICAgICAobV9vcmllbnRhdGlvbiA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsID8gIiB2ZXJ0
aWNhbCBvcmllbnRhdGlvbiIgOiAiIikpOwotfQotCi0jZW5kaWYKLQotU3RyaW5nIEZvbnRQbGF0
Zm9ybURhdGE6OmZhbWlseU5hbWUoKSBjb25zdAotewotICAgIGlmIChhdXRvIHBsYXRmb3JtRm9u
dCA9IGZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUo
cGxhdGZvcm1Gb250KSkuZ2V0KCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAppbmRleCBkODE1NDhh
MzBiOWQyMmNhZmY4YWE3ODcwZGFiNGJlZmIyMzRiOTA0Li44YWVjMmVhM2Q0ZjE3NTlkZjdjZTY0
MjM2YzMyYjY4MTU2NDRkZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcApA
QCAtNTMsOSArNTMsNiBAQCBXVEZfV0VBS19MSU5LX0ZPUkNFX0lNUE9SVCh3ZWJtOjpzd2FwKTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBrQ01W
aWRlb0NvZGVjVHlwZV9WUDkgaXMgYWRkZWQgdG8gQ01Gb3JtYXREZXNjcmlwdGlvbi5oCi1jb25z
dGV4cHIgQ01WaWRlb0NvZGVjVHlwZSBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgeyAndnAwOScgfTsK
LQogdXNpbmcgbmFtZXNwYWNlIFBBTDsKIAogc3RhdGljIGJvb2wgaXNXZWJtUGFyc2VyQXZhaWxh
YmxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0Zv
bnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI4YjUxMjQzZTU3ODVhMDYy
ZGZlZWJiZTc2MzdlNTMwNjYwNDk2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0wLDAgKzEs
MzEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAyMCwgMjAxNiBBcHBsZSBJbmMuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisjaW5jbHVkZSAiQ29t
cGxleFRleHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCisjaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29h
L0NvcmVUZXh0U1BJLmg+CisjZWxzZQorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJ
V2luLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb25mdXNpbmdseSwg
ZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNhYmxlZCgpIHJldHVy
bnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGlsbCBpbXBhY3RzIHRl
eHQKKy8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgInN1
YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIgdGVybWlub2xvZ3ku
Citib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkKK3sK
KyNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElOR19ESVNBQkxFRCkK
KyAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBb
Jl0oKSB7CisgICAgICAgIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZCA9ICFDR0ZvbnRSZW5k
ZXJpbmdHZXRGb250U21vb3RoaW5nRGlzYWJsZWQoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gc3Vi
cGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkOworI2VsaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVy
biB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBmaWxs
VmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYg
cG9zaXRpb25zLCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywg
dW5zaWduZWQgY291bnQpCit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZp
bmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CisgICAg
cG9zaXRpb25zWzBdID0gQ0dQb2ludFplcm87CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmlu
ZVRyYW5zZm9ybShhZHZhbmNlc1tpIC0gMV0sIG1hdHJpeCk7CisgICAgICAgIHBvc2l0aW9uc1tp
XS54ID0gcG9zaXRpb25zW2kgLSAxXS54ICsgYWR2YW5jZS53aWR0aDsKKyAgICAgICAgcG9zaXRp
b25zW2ldLnkgPSBwb3NpdGlvbnNbaSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKKyAgICB9Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQorICAg
IHJldHVybiBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9k
ZTo6TGV0dGVycHJlc3MpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4
dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50KQoreworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybjsK
KworICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LCBwb2ludC54KCksIHBvaW50
LnkoKSk7CisKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250
LnBsYXRmb3JtRGF0YSgpOworICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3Vu
dCk7CisgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlv
bjo6VmVydGljYWwpIHsKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcm90YXRlTGVmdFRyYW5z
Zm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgwLCAtMSwgMSwgMCwgMCwgMCk7CisgICAgICAg
IENHQWZmaW5lVHJhbnNmb3JtIHRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNv
bnRleHQpOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBydW5NYXRyaXggPSBDR0FmZmluZVRy
YW5zZm9ybUNvbmNhdCh0ZXh0TWF0cml4LCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKKyAgICAgICAg
U2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChydW5NYXRyaXgsIGNvbnRleHQpOworCisgICAg
ICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsKKyAgICAgICAgQ1RG
b250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgp
LCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50KTsKKworICAgICAgICBDR0FmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRleHRH
ZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKKworICAgICAgICBDR1BvaW50IHBvc2l0aW9uID0gRmxv
YXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFz
Y2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2Vu
dCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgICAgIENHU2l6ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3Jt
KHRyYW5zbGF0aW9uc1tpXSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7CisgICAgICAgICAgICBwb3Np
dGlvbnNbaV0gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2ludE1ha2UocG9zaXRp
b24ueCAtIHRyYW5zbGF0aW9uLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNsYXRpb24uaGVpZ2h0
KSwgdHJhbnNmb3JtKTsKKyAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gYWR2YW5jZXNbaV0ud2lk
dGg7CisgICAgICAgICAgICBwb3NpdGlvbi55ICs9IGFkdmFuY2VzW2ldLmhlaWdodDsKKyAgICAg
ICAgfQorICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5
cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBj
b250ZXh0LCBhZHZhbmNlcywgY291bnQpOworICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRm
b3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4
dCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXNG
b250cyhjZ0NvbnRleHQsIHRydWUpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY29udGV4dFRy
YW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpOworICAgIGJvb2wgaXNUcmFuc2xh
dGlvbk9ySW50ZWdyYWxTY2FsZSA9IFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmEp
ICYmIFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmQpICYmIGNvbnRleHRUcmFuc2Zv
cm0uYiA9PSAwLmYgJiYgY29udGV4dFRyYW5zZm9ybS5jID09IDAuZjsKKyAgICBib29sIGlzUm90
YXRlZCA9ICgoY29udGV4dFRyYW5zZm9ybS5iIHx8IGNvbnRleHRUcmFuc2Zvcm0uYykgJiYgKGNv
bnRleHRUcmFuc2Zvcm0uYSB8fCBjb250ZXh0VHJhbnNmb3JtLmQpKTsKKyAgICBib29sIGRvU3Vi
cGl4ZWxRdWFudGl6YXRpb24gPSBpc1RyYW5zbGF0aW9uT3JJbnRlZ3JhbFNjYWxlIHx8ICghaXNS
b3RhdGVkICYmIGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkpOworCisgICAg
Q0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29udGV4dCwgdHJ1ZSk7
CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwg
ZG9TdWJwaXhlbFF1YW50aXphdGlvbik7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCit7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9u
dC5wbGF0Zm9ybURhdGEoKTsKKyAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpOworCisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOworICAgIGJvb2wg
c2hvdWxkU21vb3RoRm9udHMgPSB0cnVlOworCisgICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlh
c2luZygpKQorICAgICAgICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21v
b3RoaW5nOworCisgICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7CisgICAgY2FzZSBGb250U21v
b3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFs
c2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9v
dGhpbmc6CisgICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoK
KyAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6CisgICAgICAgIHNob3VsZEFudGlhbGlh
cyA9IGZhbHNlOworICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygpKQorICAgICAgICBz
aG91bGRTbW9vdGhGb250cyA9IGZhbHNlOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0NvbnRleHRHZXRTaG91
bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpOworICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBv
cmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCisgICAgICAgIENHQ29udGV4dFNldFNob3Vs
ZFNtb290aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOworI2VuZGlmCisKKyAg
ICBib29sIG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFs
aWFzKGNnQ29udGV4dCk7CisgICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3Vs
ZEFudGlhbGlhcykKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4
dCwgc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGJvb2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBz
aG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb250ZXh0KTsKKyAgICBVTlVTRURfVkFSSUFCTEUo
dXNlTGV0dGVycHJlc3NFZmZlY3QpOworICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBhbmNob3JQb2lu
dDsKKworICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSWRl
bnRpdHk7CisgICAgaWYgKCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkKKyAgICAg
ICAgbWF0cml4ID0gQ1RGb250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250KCkpOworICAgIG1h
dHJpeC5iID0gLW1hdHJpeC5iOworICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOworICAgIGlmIChw
bGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0YXRpYyBmbG9hdCBv
YmxpcXVlU2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgw
KTsKKyAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRh
dGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAgICAgIGlmIChmb250LmlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2soKSkKKyAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNv
bmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVlU2tldywgMCwgMSwg
MCwgMCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hdHJpeCA9IENHQWZm
aW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIC1vYmxp
cXVlU2tldywgMCwgMSwgMCwgMCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1hdHJp
eCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtl
KDEsIDAsIC1vYmxpcXVlU2tldywgMSwgMCwgMCkpOworICAgIH0KKyAgICBTY29wZWRUZXh0TWF0
cml4IHJlc3RvcmVyKG1hdHJpeCwgY2dDb250ZXh0KTsKKworICAgIHNldENHRm9udFJlbmRlcmlu
Z01vZGUoY29udGV4dCk7CisgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0
Zm9ybURhdGEuc2l6ZSgpKTsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxv
YXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBjb250ZXh0LmdldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIEFmZmlu
ZVRyYW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKKyAgICBmbG9hdCBzeW50
aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisgICAgaWYgKHN5
bnRoZXRpY0JvbGRPZmZzZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSkgeworICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZp
Y2VQaXhlbHMgPSBjb250ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDApKTsKKyAgICAgICAg
ZmxvYXQgaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNxcnRmKGhvcml6b250
YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRl
dmljZVBpeGVscy53aWR0aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVp
Z2h0KCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWlnaHQoKSk7CisgICAg
ICAgIGlmIChob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7CisgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29uJ3QgYmxvdyB1cCB0
aGUgZ2FwIGJldHdlZW4gdGhlIGdseXBocy4KKyAgICAgICAgICAgIHN5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBzdGQ6Om1pbihzeW50aGV0aWNCb2xkT2Zmc2V0LCBzeW50aGV0aWNCb2xkT2Zmc2V0IC8g
aG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09
IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRv
d0JsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNs
YXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7Cisg
ICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgeworICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93
cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxv
c2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCisgICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3co
KTsKKyAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKKyAgICAg
ICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKKyAgICAgICAgY29udGV4dC5zZXRG
aWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBw
b2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgLy8gSWYgc2hhZG93cyBh
cmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29v
cmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KKyAgICAgICAgZmxvYXQgc2hh
ZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNn
Q29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhm
cm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAg
ICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBz
eW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhC
dWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhz
KTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoTEVUVEVSUFJFU1MpCisgICAgaWYgKHVzZUxldHRlcnByZXNzRWZmZWN0KQorICAg
ICAgICBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29u
dGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSwgbnVtR2x5cGhzKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHNob3dHbHlw
aHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICB9CisK
KyAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50Lnko
KSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKworICAgIGlmIChoYXNTaW1wbGVTaGFkb3cp
CisgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hh
ZG93Q29sb3IpOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKHNob3VsZFNt
b290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKKyAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZFVzZUZv
bnRTbW9vdGhpbmcpOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkQW50aWFsaWFzICE9IG9yaWdp
bmFsU2hvdWxkQW50aWFsaWFzKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMo
Y2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyk7Cit9CisKK2Jvb2wgRm9udENhc2Nh
ZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKK3sKKyAgICBjb25zdCBhdXRvJiBm
b250RGF0YSA9IHByaW1hcnlGb250KCk7CisgICAgcmV0dXJuIGlzU3lzdGVtRm9udChmb250RGF0
YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7Cit9CisKKy8vIEZJWE1FOiBVc2UgdGhpcyBvbiBh
bGwgcG9ydHMuCitjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25z
dAoreworICAgIFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKKyAgICBzaXplX3QgYmFzZUNoYXJhY3Rl
ckxlbmd0aCA9IDA7CisgICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFzZUNoYXJhY3Rlckxlbmd0
aCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKKworICAgIEdseXBoRGF0YSBiYXNlQ2hhcmFjdGVy
R2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIsIGZhbHNlLCBO
b3JtYWxWYXJpYW50KTsKKworICAgIGlmICghYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0
ZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7CisK
KyAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3Rl
cihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAgICAgICAgY29udGlu
dWU7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGJhc2VDaGFyYWN0ZXIg
Pj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZvbnQtPnNob3VsZE5vdEJl
VXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAg
aWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9u
OjpWZXJ0aWNhbCkgeworICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFz
ZUNoYXJhY3RlcikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgICAgICAg
ICAgZm9udCA9ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7CisgICAgICAgICAgICBlbHNl
IGlmIChtX2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pL
R2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGb250JiB2
ZXJ0aWNhbFJpZ2h0Rm9udCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKTsK
KyAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0
Rm9udC5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBp
ZiAodmVydGljYWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisg
ICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdmVydGljYWxSaWdodEZvbnQ7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHVwcmlnaHRGb250ID0gZm9u
dC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpOworICAgICAgICAgICAgICAgIEdseXBoIHVwcmln
aHRHbHlwaCA9IHVwcmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwor
ICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJhY3RlckdseXBoRGF0
YS5nbHlwaCkKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ1cHJpZ2h0Rm9udDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb250ID09IGJhc2VDaGFyYWN0ZXJH
bHlwaERhdGEuZm9udCkKKyAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSB0cnVl
OworCisgICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAgfQor
CisgICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQtPmNhblJlbmRlckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7CisKKyAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFs
bGJhY2soKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3QvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWUyMjUxZDZhZGE5YTBlYTBjNDgx
MmY3YzU1NjM3ZjlmMDk0ODk4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKQEAgLTAsMCArMSw3NzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIk9wZW5UeXBlQ0cuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRl
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiTG9jYWxlQ29jb2EuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJ
Lmg+CisjZWxzZQorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGJvb2wgY2FzZUluc2Vu
c2l0aXZlQ29tcGFyZShDRlN0cmluZ1JlZiBhLCBDRlN0cmluZ1JlZiBiKQoreworICAgIHJldHVy
biBhICYmIENGU3RyaW5nQ29tcGFyZShhLCBiLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9
PSBrQ0ZDb21wYXJlRXF1YWxUbzsKK30KKworc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5
cGhzKENURm9udFJlZiBmb250KQoreworICAgIHJldHVybiBmb250SGFzRWl0aGVyVGFibGUoZm9u
dCwga0NURm9udFRhYmxlVmhlYSwga0NURm9udFRhYmxlVk9SRyk7Cit9CisKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorYm9vbCBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKENG
U3RyaW5nUmVmIGZvbnRGYW1pbHlOYW1lKQoreworICAgIGlmICghZm9udEZhbWlseU5hbWUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRpbWVzIE5ldyBSb21hbiBhbmQgQXJpYWwg
YXJlIG5vdCBwZXJmb3JtYW50IGVub3VnaCB0byB1c2UuIDxyZGFyOi8vcHJvYmxlbS8yMTMzMzMy
Nj4KKyAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1
bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZC4KKyAgICByZXR1cm4gKENGU3RyaW5n
Q29tcGFyZShDRlNUUigiVGltZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBr
Q0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiQXJp
YWwiKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKTsKK30KKworc3Rh
dGljIGNvbnN0IGZsb2F0IGtMaW5lSGVpZ2h0QWRqdXN0bWVudCA9IDAuMTVmOworCitzdGF0aWMg
Ym9vbCBzaG91bGRVc2VBZGp1c3RtZW50KENURm9udFJlZiBmb250KQoreworICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUo
Zm9udCkpOworCisgICAgaWYgKCFmYW1pbHlOYW1lIHx8ICFDRlN0cmluZ0dldExlbmd0aChmYW1p
bHlOYW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNhc2VJ
bnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIlRpbWVzIikpCisgICAg
ICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhl
bHZldGljYSIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUu
Z2V0KCksIENGU1RSKCIuSGVsdmV0aWNhIE5ldWVVSSIpKTsKK30KKworI2Vsc2UKKworc3RhdGlj
IGJvb2wgbmVlZHNBc2NlbnRBZGp1c3RtZW50KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCit7Cisg
ICAgcmV0dXJuIGZhbWlseU5hbWUgJiYgKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFt
ZSwgQ0ZTVFIoIlRpbWVzIikpCisgICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFt
aWx5TmFtZSwgQ0ZTVFIoIkhlbHZldGljYSIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJDb3VyaWVyIikpKTsKK30KKworI2VuZGlmCisKK3N0
YXRpYyBib29sIGlzQWhlbUZvbnQoQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZSkKK3sKKyAgICByZXR1
cm4gZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RS
KCJBaGVtIikpOworfQorCitib29sIGZvbnRIYXNUYWJsZShDVEZvbnRSZWYgY3RGb250LCB1bnNp
Z25lZCB0YWJsZVRhZykKK3sKKyAgICBhdXRvIHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29w
eUF2YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwor
ICAgIGlmICghdGFibGVUYWdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ0ZJbmRleCBu
dW1UYWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKKyAgICBmb3IgKENG
SW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgeworICAgICAgICBh
dXRvIHRhZyA9IHN0YXRpY19jYXN0PENURm9udFRhYmxlVGFnPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KSkp
OworICAgICAgICBpZiAodGFnID09IHRhYmxlVGFnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBmb250SGFzRWl0aGVyVGFibGUo
Q1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIp
Cit7CisgICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJs
ZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBpZiAoIXRhYmxl
VGFncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZB
cnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0g
MDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byB0YWcgPSBzdGF0
aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKKyAgICAgICAgaWYg
KHRhZyA9PSB0YWJsZVRhZzEgfHwgdGFnID09IHRhYmxlVGFnMikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRm9udDo6cGxhdGZv
cm1Jbml0KCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIG1fc3ludGhldGljQm9s
ZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IGNlaWxmKG1fcGxhdGZv
cm1EYXRhLnNpemUoKSAvIDI0LjBmKSA6IDAuZjsKKyNlbHNlCisgICAgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIG1fc2NyaXB0Q2FjaGUgPSAwOworICAgIG1f
c2NyaXB0Rm9udFByb3BlcnRpZXMgPSBudWxscHRyOworICAgIGlmIChtX3BsYXRmb3JtRGF0YS51
c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIGluaXRHRElGb250KCk7CisjZW5kaWYKKworICAgIHVu
c2lnbmVkIHVuaXRzUGVyRW0gPSBDVEZvbnRHZXRVbml0c1BlckVtKG1fcGxhdGZvcm1EYXRhLmZv
bnQoKSk7CisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAg
IENHRmxvYXQgY2FwSGVpZ2h0ID0gcG9pbnRTaXplID8gQ1RGb250R2V0Q2FwSGVpZ2h0KG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxvYXQgbGluZUdhcCA9IHBvaW50U2l6ZSA/
IENURm9udEdldExlYWRpbmcobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7CisgICAgQ0dGbG9h
dCBhc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuZm9u
dCgpKSA6IDA7CisgICAgQ0dGbG9hdCBkZXNjZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0RGVz
Y2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKKworICAgIC8vIFRoZSBPcGVuIEZvbnQg
Rm9ybWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBVU0VfVFlQT19NRVRSSUNTIGZsYWcgYXMgZm9sbG93
czoKKyAgICAvLyAiSWYgc2V0LCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2UgT1Mv
Mi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlwb0Rlc2NlbmRlcisgT1MvMi5zVHlwb0xpbmVHYXAg
YXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5lIHNwYWNpbmcgZm9yIHRoaXMgZm9udC4iCisgICAg
Ly8gT24gT1MgWCwgd2Ugb25seSBhcHBseSB0aGlzIHJ1bGUgaW4gdGhlIGltcG9ydGFudCBjYXNl
IG9mIGZvbnRzIHdpdGggYSBNQVRIIHRhYmxlLgorICAgIGlmIChmb250SGFzVGFibGUobV9wbGF0
Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRUYWJsZU1BVEgpKSB7CisgICAgICAgIHNob3J0IHR5
cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcDsKKyAgICAgICAgaWYgKE9wZW5UeXBl
Ojp0cnlHZXRUeXBvTWV0cmljcyhtX3BsYXRmb3JtRGF0YS5mb250KCksIHR5cG9Bc2NlbnQsIHR5
cG9EZXNjZW50LCB0eXBvTGluZUdhcCkpIHsKKyAgICAgICAgICAgIGFzY2VudCA9IHNjYWxlRW1U
b1VuaXRzKHR5cG9Bc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAgICAgICAg
ZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyh0eXBvRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2lu
dFNpemU7CisgICAgICAgICAgICBsaW5lR2FwID0gc2NhbGVFbVRvVW5pdHModHlwb0xpbmVHYXAs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBm
YW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShtX3BsYXRmb3JtRGF0YS5m
b250KCkpKTsKKworICAgIC8vIERpc2FibGUgYW50aWFsaWFzaW5nIHdoZW4gcmVuZGVyaW5nIHdp
dGggQWhlbSBiZWNhdXNlIG1hbnkgdGVzdHMgcmVxdWlyZSB0aGlzLgorICAgIGlmIChpc0FoZW1G
b250KGZhbWlseU5hbWUuZ2V0KCkpKQorICAgICAgICBtX2FsbG93c0FudGlhbGlhc2luZyA9IGZh
bHNlOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVz
LCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCisgICAgLy8gdmVy
dGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRoYXQgYXJlIHRo
ZSBkZSBmYWN0bworICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50IG9m
IDIwJSBpcyB0b28gYmlnIGFuZCBpcworICAgIC8vIGluY29ycmVjdGx5IGFkZGVkIHRvIGxpbmUg
c3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAorICAgIC8vIGFuZCBh
ZGQgaXQgdG8gdGhlIGFzY2VudC4KKyAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpMb2NhbCAm
JiBuZWVkc0FzY2VudEFkanVzdG1lbnQoZmFtaWx5TmFtZS5nZXQoKSkpCisgICAgICAgIGFzY2Vu
dCArPSBzdGQ6OnJvdW5kKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVmKTsKKyNlbmRpZgorCisg
ICAgLy8gQ29tcHV0ZSBsaW5lIHNwYWNpbmcgYmVmb3JlIHRoZSBsaW5lIG1ldHJpY3MgaGFja3Mg
YXJlIGFwcGxpZWQuCisgICAgZmxvYXQgbGluZVNwYWNpbmcgPSBscm91bmRmKGFzY2VudCkgKyBs
cm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKTsKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29tIGZvciBtYXJr
ZWQgdGV4dCB1bmRlcmxpbmVzLgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2MTgzPgorICAg
IGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgZmFtaWx5TmFtZSAmJiBDRlN0cmlu
Z0hhc1ByZWZpeChmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiSGlyYWdpbm8iKSkpIHsKKyAgICAg
ICAgbGluZUdhcCAtPSAzIC0gZGVzY2VudDsKKyAgICAgICAgZGVzY2VudCA9IDM7CisgICAgfQor
I2VuZGlmCisgICAgCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQor
ICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgQ0dG
bG9hdCBhZGp1c3RtZW50ID0gc2hvdWxkVXNlQWRqdXN0bWVudChtX3BsYXRmb3JtRGF0YS5mb250
KCkpID8gY2VpbCgoYXNjZW50ICsgZGVzY2VudCkgKiBrTGluZUhlaWdodEFkanVzdG1lbnQpIDog
MDsKKworICAgIGxpbmVHYXAgPSBjZWlsZihsaW5lR2FwKTsKKyAgICBsaW5lU3BhY2luZyA9IGNl
aWwoYXNjZW50KSArIGFkanVzdG1lbnQgKyBjZWlsKGRlc2NlbnQpICsgbGluZUdhcDsKKyAgICBh
c2NlbnQgPSBjZWlsZihhc2NlbnQgKyBhZGp1c3RtZW50KTsKKyAgICBkZXNjZW50ID0gY2VpbGYo
ZGVzY2VudCk7CisKKyAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9IGZvbnRGYW1pbHlT
aG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7CisjZW5kaWYKKworICAg
IENHRmxvYXQgeEhlaWdodCA9IDA7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnNpemUoKSkgewor
ICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRp
b246Okhvcml6b250YWwpIHsKKyAgICAgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFy
YWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhl
IGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKKyAgICAgICAgICAgIC8vIHJlcG9ydGVkIHgtaGVp
Z2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92
ZSB0aGUgYmFzZWxpbmUuCisgICAgICAgICAgICBHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJh
Y3RlcigneCcpOworICAgICAgICAgICAgaWYgKHhHbHlwaCkKKyAgICAgICAgICAgICAgICB4SGVp
Z2h0ID0gLUNHUmVjdEdldE1pblkocGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCh4R2x5cGgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB4SGVpZ2h0ID0gQ1RGb250R2V0WEhlaWdo
dChtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHhI
ZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZm9udE1ldHJpY3MoKS54SGVp
Z2h0KCk7CisgICAgfQorCisgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVy
RW0pOworICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CisgICAgbV9mb250TWV0
cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0
KGNhcEhlaWdodCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAg
IG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNl
dExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGlu
ZVBvc2l0aW9uKC1DVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihtX3BsYXRmb3JtRGF0YS5mb250
KCkpKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRHZXRV
bmRlcmxpbmVUaGlja25lc3MobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Cit9CisKK3ZvaWQgRm9u
dDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7Cisg
ICAgbV9tYXhDaGFyV2lkdGggPSAwOworCisgICAgYXV0byBvczJUYWJsZSA9IGFkb3B0Q0YoQ1RG
b250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udFRhYmxlT1MyLCBrQ1RG
b250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0
TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7CisgICAgICAgIGNvbnN0IFVJbnQ4KiBvczIg
PSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKKyAgICAgICAgU0ludDE2IG9zMkF2
Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKKyAgICAgICAgbV9hdmdDaGFyV2lk
dGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQ
ZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICBhdXRvIGhlYWRU
YWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NU
Rm9udFRhYmxlSGVhZCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgaWYgKGhl
YWRUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgeworICAg
ICAgICBjb25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgp
KTsKKyAgICAgICAgdW5zaWduZWQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOwor
ICAgICAgICB1bnNpZ25lZCB1eE1heCA9IGhlYWRbNDBdICogMjU2ICsgaGVhZFs0MV07CisgICAg
ICAgIFNJbnQxNiB4TWluID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1pbik7CisgICAgICAgIFNJ
bnQxNiB4TWF4ID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1heCk7CisgICAgICAgIGZsb2F0IGRp
ZmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeE1heCAtIHhNaW4pOworICAgICAgICBtX21heENoYXJX
aWR0aCA9IHNjYWxlRW1Ub1VuaXRzKGRpZmYsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAq
IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBGYWxsYmFjayB0byBhIGNy
b3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBp
ZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCisgICAgaW5pdENoYXJXaWR0aHMoKTsKK30KKworYm9v
bCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJp
YW50Q2FwcyBmb250VmFyaWFudENhcHMsIFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworI2lm
IChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMp
CisgICAgR2x5cGggZ2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIGlm
ICghZ2x5cGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoZm9udFZhcmlh
bnRDYXBzKSB7CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNtYWxsOiB7CisgICAgICAgIGF1
dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCk7CisgICAgICAgIHJl
dHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVkLmdldChnbHlwaCk7Cisg
ICAgfQorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6IHsKKyAgICAgICAgYXV0byYg
c3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKCk7CisgICAgICAgIHJldHVy
biBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVkLmdldChnbHlwaCk7CisgICAg
fQorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDogeworICAgICAgICBhdXRvJiBz
dXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcygpOworICAgICAgICByZXR1
cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAg
IH0KKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOiB7CisgICAgICAgIGF1dG8m
IHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpOworICAgICAgICBy
ZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0
aGUgdmFyaWFudC1jYXBzIHZhbHVlcyBsaXN0ZWQgYWJvdmUuCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNoYXJhY3Rlcik7CisKKyAgICBzd2l0
Y2ggKGZvbnRWYXJpYW50Q2FwcykgeworICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoK
KyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgorICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpBbGxTbWFsbDoKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU3ludGhlc2lzIG9u
bHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKK30KKworI2lmIChQTEFURk9STShJT1NfRkFN
SUxZKSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMpCitzdGF0aWMgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gc21hbGxDYXBzT3BlblR5cGVEaWN0aW9uYXJ5KENGU3RyaW5nUmVm
IGtleSwgaW50IHJhd1ZhbHVlKQoreworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gdmFsdWUg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlcklu
dFR5cGUsICZyYXdWYWx1ZSkpOworICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRPcGVu
VHlwZUZlYXR1cmVUYWcsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSB9OworICAgIENGVHlw
ZVJlZiB2YWx1ZXNbXSA9IHsga2V5LCB2YWx1ZS5nZXQoKSB9OworICAgIHJldHVybiBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdU
Rl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeShpbnQgcmF3S2V5LCBp
bnQgcmF3VmFsdWUpCit7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBrZXkgPSBhZG9wdENG
KENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZy
YXdLZXkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFs
dWUpKTsKKyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlm
aWVyS2V5LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSB9OworICAgIENGVHlw
ZVJlZiB2YWx1ZXNbXSA9IHsga2V5LmdldCgpLCB2YWx1ZS5nZXQoKSB9OworICAgIHJldHVybiBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1
ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGljIHZvaWQg
dW5pb25CaXRWZWN0b3JzKEJpdFZlY3RvciYgcmVzdWx0LCBDRkJpdFZlY3RvclJlZiBzb3VyY2Up
Cit7CisgICAgQ0ZJbmRleCBsZW5ndGggPSBDRkJpdFZlY3RvckdldENvdW50KHNvdXJjZSk7Cisg
ICAgcmVzdWx0LmVuc3VyZVNpemUobGVuZ3RoKTsKKyAgICBDRkluZGV4IG1pbiA9IDA7CisgICAg
d2hpbGUgKG1pbiA8IGxlbmd0aCkgeworICAgICAgICBDRkluZGV4IG5leHRJbmRleCA9IENGQml0
VmVjdG9yR2V0Rmlyc3RJbmRleE9mQml0KHNvdXJjZSwgQ0ZSYW5nZU1ha2UobWluLCBsZW5ndGgg
LSBtaW4pLCAxKTsKKyAgICAgICAgaWYgKG5leHRJbmRleCA9PSBrQ0ZOb3RGb3VuZCkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICByZXN1bHQuc2V0KG5leHRJbmRleCwgdHJ1ZSk7CisgICAg
ICAgIG1pbiA9IG5leHRJbmRleCArIDE7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBpbmplY3RP
cGVuVHlwZUNvdmVyYWdlKENGU3RyaW5nUmVmIGZlYXR1cmUsIENURm9udFJlZiBmb250LCBCaXRW
ZWN0b3ImIHJlc3VsdCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9
IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fw
c09wZW5UeXBlRGljdGlvbmFyeShmZWF0dXJlLCAxKS5nZXQoKSkpOworICAgIHVuaW9uQml0VmVj
dG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGluamVjdFRydWVU
eXBlQ292ZXJhZ2UoaW50IHR5cGUsIGludCBzZWxlY3RvciwgQ1RGb250UmVmIGZvbnQsIEJpdFZl
Y3RvciYgcmVzdWx0KQoreworICAgIFJldGFpblB0cjxDRkJpdFZlY3RvclJlZj4gc291cmNlID0g
YWRvcHRDRihDVEZvbnRDb3B5R2x5cGhDb3ZlcmFnZUZvckZlYXR1cmUoZm9udCwgc21hbGxDYXBz
VHJ1ZVR5cGVEaWN0aW9uYXJ5KHR5cGUsIHNlbGVjdG9yKS5nZXQoKSkpOworICAgIHVuaW9uQml0
VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQoKSk7Cit9CisKK2NvbnN0IEJpdFZlY3RvciYgRm9u
dDo6Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMoKSBjb25zdAoreworICAgIGlmICghbV9nbHlw
aHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5U21h
bGxDYXBzID0gQml0VmVjdG9yKCk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZT
VFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5U21h
bGxDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNh
c2VUeXBlLCBrTG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQo
KSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKTsKK30KKworY29uc3QgQml0
VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcygpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzKSB7CisgICAgICAgIG1fZ2x5
cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMgPSBCaXRWZWN0b3IoKTsKKyAgICAgICAgaW5qZWN0
T3BlblR5cGVDb3ZlcmFnZShDRlNUUigic21jcCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1f
Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdE9w
ZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMyc2MiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2ds
eXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RUcnVl
VHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0b3Is
IHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52
YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwg
a1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5
cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBt
X2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCk7Cit9CisKK2NvbnN0IEJpdFZl
Y3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKSB7CisgICAgICAgIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlQZXRpdGVDYXBzID0gQml0VmVjdG9yKCk7CisgICAgICAgIGluamVjdE9wZW5UeXBl
Q292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3Zl
cmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZv
cm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzLnZhbHVlKCk7
Cit9CisKK2NvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVD
YXBzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBz
KSB7CisgICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzID0gQml0VmVjdG9y
KCk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZv
cm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgp
KTsKKyAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigiYzJwYyIpLCBwbGF0Zm9y
bURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkp
OworICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJD
YXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RUcnVlVHlwZUNv
dmVyYWdlKGtVcHBlckNhc2VUeXBlLCBrVXBwZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0
Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVl
KCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMu
dmFsdWUoKTsKK30KKyNlbmRpZgorCitzdGF0aWMgUmVmUHRyPEZvbnQ+IGNyZWF0ZURlcml2YXRp
dmVGb250KENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBGb250T3JpZW50YXRpb24gb3JpZW50
YXRpb24sIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMsIGJvb2wgc3ludGhldGljQm9s
ZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCit7CisgICAgaWYgKCFmb250KQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmIChzeW50aGV0aWNCb2xkKQorICAgICAgICBmb250VHJhaXRz
IHw9IGtDVEZvbnRCb2xkVHJhaXQ7CisgICAgaWYgKHN5bnRoZXRpY0l0YWxpYykKKyAgICAgICAg
Zm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGljVHJhaXQ7CisKKyAgICBDVEZvbnRTeW1ib2xpY1Ry
YWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCk7CisK
KyAgICBib29sIHVzZWRTeW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRy
YWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKKyAgICBib29s
IHVzZWRTeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQp
ICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CisgICAgRm9udFBs
YXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShmb250LCBzaXplLCB1c2VkU3ludGhldGljQm9sZCwg
dXNlZFN5bnRoZXRpY09ibGlxdWUsIG9yaWVudGF0aW9uKTsKKworICAgIHJldHVybiBGb250Ojpj
cmVhdGUoc2NhbGVkRm9udERhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNPcGVuVHlw
ZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCit7CisgICAgcmV0dXJuIENGRGljdGlv
bmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpICYmIENG
RGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1
ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1RydWVUeXBlRmVhdHVyZShDRkRpY3Rpb25h
cnlSZWYgZmVhdHVyZSkKK3sKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVh
dHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkgJiYgQ0ZEaWN0aW9uYXJ5Q29u
dGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpOwor
fQorCitzdGF0aWMgaW5saW5lIE9wdGlvbmFsPENGU3RyaW5nUmVmPiBvcGVuVHlwZUZlYXR1cmUo
Q0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCit7CisgICAgQVNTRVJUKGlzT3BlblR5cGVGZWF0dXJl
KGZlYXR1cmUpKTsKKyAgICBDRlN0cmluZ1JlZiB0YWcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1Jl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRh
ZykpOworICAgIGludCByYXdWYWx1ZTsKKyAgICBDRk51bWJlclJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3Bl
blR5cGVGZWF0dXJlVmFsdWUpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVl
KHZhbHVlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpOworICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgcmV0dXJuIHJhd1ZhbHVlID8gT3B0aW9uYWw8Q0ZTdHJp
bmdSZWY+KHRhZykgOiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpwYWly
PGludCwgaW50PiB0cnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCit7Cisg
ICAgQVNTRVJUKGlzVHJ1ZVR5cGVGZWF0dXJlKGZlYXR1cmUpKTsKKyAgICBpbnQgcmF3VHlwZTsK
KyAgICBDRk51bWJlclJlZiB0eXBlID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsK
KyAgICBhdXRvIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHR5cGUsIGtDRk51bWJlckludFR5
cGUsICZyYXdUeXBlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAg
IGludCByYXdTZWxlY3RvcjsKKyAgICBDRk51bWJlclJlZiBzZWxlY3RvciA9IHN0YXRpY19jYXN0
PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVy
ZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOworICAgIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVl
KHNlbGVjdG9yLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3U2VsZWN0b3IpOworICAgIEFTU0VSVF9V
TlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJhd1R5
cGUsIHJhd1NlbGVjdG9yKTsKK30KKworc3RhdGljIGlubGluZSBDRk51bWJlclJlZiBkZWZhdWx0
U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoaW50IGtleSwgQ1RGb250UmVmIGZvbnQpCit7Cisg
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZlYXR1cmVzID0gYWRvcHRDRihDVEZvbnRDb3B5RmVh
dHVyZXMoZm9udCkpOworICAgIENGSW5kZXggZmVhdHVyZUNvdW50ID0gQ0ZBcnJheUdldENvdW50
KGZlYXR1cmVzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291
bnQ7ICsraSkgeworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZVR5cGUgPSBzdGF0aWNf
Y2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0
KCksIGkpKTsKKyAgICAgICAgQ0ZOdW1iZXJSZWYgZmVhdHVyZUtleSA9IHN0YXRpY19jYXN0PENG
TnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlVHlwZSwga0NURm9udEZlYXR1
cmVUeXBlSWRlbnRpZmllcktleSkpOworICAgICAgICBpZiAoIWZlYXR1cmVLZXkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaW50IHJhd0ZlYXR1cmVLZXk7CisgICAgICAgIENGTnVt
YmVyR2V0VmFsdWUoZmVhdHVyZUtleSwga0NGTnVtYmVySW50VHlwZSwgJnJhd0ZlYXR1cmVLZXkp
OworICAgICAgICBpZiAocmF3RmVhdHVyZUtleSAhPSBrZXkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBDRkFycmF5UmVmIGZlYXR1cmVTZWxlY3RvcnMgPSBzdGF0aWNfY2FzdDxD
RkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlVHlwZSwga0NURm9udEZlYXR1
cmVUeXBlU2VsZWN0b3JzS2V5KSk7CisgICAgICAgIGlmICghZmVhdHVyZVNlbGVjdG9ycykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBDRkluZGV4IHNlbGVjdG9yc0NvdW50ID0gQ0ZB
cnJheUdldENvdW50KGZlYXR1cmVTZWxlY3RvcnMpOworICAgICAgICBmb3IgKENGSW5kZXggaiA9
IDA7IGogPCBzZWxlY3RvcnNDb3VudDsgKytqKSB7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlS
ZWYgZmVhdHVyZVNlbGVjdG9yID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVTZWxlY3RvcnMsIGopKTsKKyAgICAgICAgICAgIENGTnVt
YmVyUmVmIGlzRGVmYXVsdCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlU2VsZWN0b3IsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JEZWZhdWx0S2V5
KSk7CisgICAgICAgICAgICBpZiAoIWlzRGVmYXVsdCkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGludCByYXdJc0RlZmF1bHQ7CisgICAgICAgICAgICBDRk51bWJlckdl
dFZhbHVlKGlzRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd0lzRGVmYXVsdCk7CisgICAg
ICAgICAgICBpZiAoIXJhd0lzRGVmYXVsdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktl
eSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMg
aW5saW5lIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHJlbW92ZWRGZWF0dXJlKENGRGljdGlv
bmFyeVJlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBib29sIGlzT3BlblR5cGUg
PSBpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICBib29sIGlzVHJ1ZVR5cGUgPSBpc1Ry
dWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICBpZiAoIWlzT3BlblR5cGUgJiYgIWlzVHJ1ZVR5
cGUpCisgICAgICAgIHJldHVybiBmZWF0dXJlOyAvLyBXZSBkb24ndCB1bmRlcnN0YW5kIHRoaXMg
Zm9udCBmb3JtYXQuCisgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJlc3Vs
dCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZh
bHVlQ2FsbEJhY2tzKSk7CisgICAgaWYgKGlzT3BlblR5cGUpIHsKKyAgICAgICAgYXV0byBmZWF0
dXJlVGFnID0gb3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpOworICAgICAgICBpZiAoZmVhdHVyZVRh
ZyAmJiAoQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJzbWNwIikpCisgICAgICAg
ICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoImMyc2MiKSkKKyAgICAg
ICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigicGNhcCIpKQorICAg
ICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnBjIikpKSkg
eworICAgICAgICAgICAgaW50IHJhd1plcm8gPSAwOworICAgICAgICAgICAgUmV0YWluUHRyPENG
TnVtYmVyUmVmPiB6ZXJvID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3WmVybykpOworICAgICAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBmZWF0
dXJlVGFnLnZhbHVlKCkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0
LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIHplcm8uZ2V0KCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJl
LCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSk7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSwgQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlzVHJ1ZVR5cGUpIHsKKyAgICAgICAgYXV0byB0cnVl
VHlwZUZlYXR1cmVQYWlyID0gdHJ1ZVR5cGVGZWF0dXJlKGZlYXR1cmUpOworICAgICAgICBpZiAo
dHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrTG93ZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVG
ZWF0dXJlUGFpci5zZWNvbmQgPT0ga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVU
eXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7
CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRG
ZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtD
VEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgICAgIGlmIChDRk51bWJl
clJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUo
a0xvd2VyQ2FzZVR5cGUsIGZvbnQpKQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZh
bHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRl
ZmF1bHRTZWxlY3Rvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRp
ZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxl
Y3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlVHlwZUZlYXR1cmVQ
YWlyLmZpcnN0ID09IGtVcHBlckNhc2VUeXBlICYmICh0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29u
ZCA9PSBrVXBwZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IgfHwgdHJ1ZVR5cGVGZWF0dXJlUGFpci5z
ZWNvbmQgPT0ga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvcikpIHsKKyAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRp
ZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBl
SWRlbnRpZmllcktleSkpOworICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIGRlZmF1bHRTZWxl
Y3RvciA9IGRlZmF1bHRTZWxlY3RvckZvclRydWVUeXBlRmVhdHVyZShrVXBwZXJDYXNlVHlwZSwg
Zm9udCkpCisgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgZGVmYXVsdFNlbGVjdG9yKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShy
ZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rp
b25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktl
eSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUo
cmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25h
cnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Cisg
ICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0
dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBr
Q1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVh
dGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKENURm9udFJlZiBmb250KQorewor
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8
Q0ZBcnJheVJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShmb250LCBrQ1RGb250RmVhdHVyZVNldHRp
bmdzQXR0cmlidXRlKSkpOworICAgIGlmICghZmVhdHVyZXMpCisgICAgICAgIHJldHVybiBmb250
OworICAgIENGSW5kZXggZmVhdHVyZUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzLmdl
dCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IG5ld0ZlYXR1cmVzID0gYWRv
cHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmZWF0dXJlQ291
bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkg
PCBmZWF0dXJlQ291bnQ7ICsraSkgeworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSA9
IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0
dXJlcy5nZXQoKSwgaSkpOworICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUobmV3RmVhdHVyZXMu
Z2V0KCksIHJlbW92ZWRGZWF0dXJlKGZlYXR1cmUsIGZvbnQpLmdldCgpKTsKKyAgICB9CisgICAg
Q0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSB9Owor
ICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsgbmV3RmVhdHVyZXMuZ2V0KCkgfTsKKyAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RI
KGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IG5l
d0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRl
cyhhdHRyaWJ1dGVzLmdldCgpKSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29w
eVdpdGhBdHRyaWJ1dGVzKGZvbnQsIENURm9udEdldFNpemUoZm9udCksIG51bGxwdHIsIG5ld0Rl
c2NyaXB0b3IuZ2V0KCkpKTsKK30KKworUmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZUZvbnRXaXRo
b3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKCkgY29uc3QKK3sKKyAgICBmbG9hdCBzaXplID0gbV9w
bGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMg
PSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgIFJl
dGFpblB0cjxDVEZvbnRSZWY+IGN0Rm9udCA9IGNyZWF0ZUNURm9udFdpdGhvdXRTeW50aGVzaXph
YmxlRmVhdHVyZXMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICByZXR1cm4gY3JlYXRlRGVy
aXZhdGl2ZUZvbnQoY3RGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlv
bigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Cit9CisKK1JlZlB0cjxGb250PiBGb250OjpwbGF0
Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0Cit7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAq
IHNjYWxlRmFjdG9yOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29w
eUZvbnREZXNjcmlwdG9yKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOworICAgIFJldGFpblB0cjxD
VEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3Jp
cHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cikpOworCisgICAgcmV0dXJu
IGNyZWF0ZURlcml2YXRpdmVGb250KHNjYWxlZEZvbnQuZ2V0KCksIHNpemUsIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCksIGZvbnRUcmFpdHMsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0Jv
bGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKTsKK30KKwordm9pZCBGb250
OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdp
bm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdTdHJpbmdJbmRleCwgYm9vbCBlbmFi
bGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxl
LCBTdHJpbmdWaWV3IHRleHQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikgY29uc3QKK3sK
KyAgICBVTlVTRURfUEFSQU0ocmVxdWlyZXNTaGFwaW5nKTsKKworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgR2x5cGhCdWZmZXIgaW5pdGlhbCBhZHZhbmNlLgorI2lmIFVTRShDVEZPTlRTSEFQRUdM
WVBIUykKKyAgICBhdXRvIGhhbmRsZXIgPSBeKENGUmFuZ2UgcmFuZ2UsIENHR2x5cGgqKiBuZXdH
bHlwaHNQb2ludGVyLCBDR1NpemUqKiBuZXdBZHZhbmNlc1BvaW50ZXIsIENHUG9pbnQqKiBuZXdP
ZmZzZXRzUG9pbnRlciwgQ0ZJbmRleCoqIG5ld0luZGljZXNQb2ludGVyKQorICAgIHsKKyAgICAg
ICAgcmFuZ2UubG9jYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChyYW5nZS5sb2NhdGlvbiwgc3Rh
dGljX2Nhc3Q8Q0ZJbmRleD4oMCkpLCBzdGF0aWNfY2FzdDxDRkluZGV4PihnbHlwaEJ1ZmZlci5z
aXplKCkpKTsKKyAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA8IDApIHsKKyAgICAgICAgICAgIHJh
bmdlLmxlbmd0aCA9IHN0ZDo6bWluKHJhbmdlLmxvY2F0aW9uLCAtcmFuZ2UubGVuZ3RoKTsKKyAg
ICAgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gcmFuZ2UubG9jYXRpb24gLSByYW5nZS5sZW5ndGg7
CisgICAgICAgICAgICBnbHlwaEJ1ZmZlci5yZW1vdmUoYmVnaW5uaW5nR2x5cGhJbmRleCArIHJh
bmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGdseXBoQnVmZmVyLm1ha2VIb2xlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5sb2NhdGlv
biwgcmFuZ2UubGVuZ3RoLCB0aGlzKTsKKworICAgICAgICAqbmV3R2x5cGhzUG9pbnRlciA9IGds
eXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAgICAgKm5ld0FkdmFu
Y2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpOwor
ICAgICAgICAqbmV3T2Zmc2V0c1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5vcmlnaW5zKGJlZ2lubmlu
Z0dseXBoSW5kZXgpOworICAgICAgICAqbmV3SW5kaWNlc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5v
ZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleCk7CisgICAgfTsKKworICAgIGF1dG8g
c3Vic3RyaW5nID0gdGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5nU3RyaW5nSW5kZXgpOworICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Vic3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOworICAgIGF1dG8gbG9jYWxlU3RyaW5nID0gTG9jYWxlQ29jb2E6OmNhbm9uaWNhbExhbmd1
YWdlSWRlbnRpZmllckZyb21TdHJpbmcobG9jYWxlKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygp
OworICAgIENURm9udFNoYXBlT3B0aW9ucyBvcHRpb25zID0ga0NURm9udFNoYXBlV2l0aENsdXN0
ZXJDb21wb3NpdGlvbgorICAgICAgICB8IChlbmFibGVLZXJuaW5nID8ga0NURm9udFNoYXBlV2l0
aEtlcm5pbmcgOiAwKQorICAgICAgICB8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OlJUTCA/IGtDVEZvbnRTaGFwZVJpZ2h0VG9MZWZ0IDogMCk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleDsgKytp
KQorICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRl
eClbaV0gLT0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7CisKKyAgICBDVEZvbnRTaGFwZUdseXBocygK
KyAgICAgICAgbV9wbGF0Zm9ybURhdGEuY3RGb250KCksCisgICAgICAgIGdseXBoQnVmZmVyLmds
eXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxDR1Np
emUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KSksCisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQb2ludCo+KGdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5uaW5n
R2x5cGhJbmRleCkpLAorICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5u
aW5nR2x5cGhJbmRleCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+
KHVwY29udmVydGVkQ2hhcmFjdGVycy5nZXQoKSksCisgICAgICAgIGdseXBoQnVmZmVyLnNpemUo
KSAtIGJlZ2lubmluZ0dseXBoSW5kZXgsCisgICAgICAgIG9wdGlvbnMsCisgICAgICAgIGxvY2Fs
ZVN0cmluZy5nZXQoKSwKKyAgICAgICAgaGFuZGxlcik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleDsgKytpKQor
ICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleClb
aV0gKz0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7CisKKyNlbHNlCisKKyAgICBVTlVTRURfUEFSQU0o
YmVnaW5uaW5nU3RyaW5nSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShsb2NhbGUpOworICAgIFVO
VVNFRF9QQVJBTSh0ZXh0KTsKKworICAgIC8vIENURm9udFRyYW5zZm9ybUdseXBocygpIG9wZXJh
dGVzIGluIHZpc3VhbCBvcmRlciwgYnV0IFdpZHRoSXRlcmF0b3IgaXRlcmF0ZXMgaW4gbG9naWNh
bCBvcmRlci4KKyAgICAvLyBUZW1wb3JhcmlseSBwdXQgdXMgaW4gdmlzdWFsIG9yZGVyIGp1c3Qg
Zm9yIHRoZSBjYWxsLCB0aGVuIHB1dCB1cyBiYWNrIGludG8gbG9naWNhbCBvcmRlciB3aGVuCisg
ICAgLy8gdGhlIGNhbGwgaXMgZG9uZS4KKyAgICAvLyBXZSBkb24ndCBoYXZlIGEgZ2xvYmFsIHZp
ZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlcjsgd2UncmUganVzdCBvcGVyYXRpbmcgb24gYSBz
aW5nbGUgY2h1bmsgb2YgaXQuCisgICAgLy8gV2lkdGhJdGVyYXRvciBlbmNvdW50ZXJzIHRoZSBj
aHVua3Mgb3V0IGluIGxvZ2ljYWwgb3JkZXIsIHNvIHdlIGhhdmUgdG8gbWFpbnRhaW4gdGhhdCBp
bnZhcmlhbnQuCisgICAgLy8gRXZlbnR1YWxseSwgRm9udENhc2NhZGU6OmxheW91dFNpbXBsZVRl
eHQoKSB3aWxsIHJldmVyc2UgdGhlIHdob2xlIGJ1ZmZlciB0byBwdXQgdGhlIGVudGlyZSB0aGlu
ZworICAgIC8vIGluIHZpc3VhbCBvcmRlciwgYnV0IHRoYXQncyBva2F5IGJlY2F1c2UgaXQgaGFz
IGEgdmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyLgorICAgIC8vIE9uIHRoZSBvdGhlciBo
YW5kLCBDVEZvbnRTaGFwZUdseXBocygpIGFjY2VwdHMgdGhlIGJ1ZmZlciBpbiBsb2dpY2FsIG9y
ZGVyIGJ1dCByZXR1cm5zIGl0IGluIHBoeXNpY2FsCisgICAgLy8gb3JkZXIsIHdoaWNoIG1lYW5z
IHRoZSBzZWNvbmQgcmV2ZXJzZSgpIGluIHRoaXMgZnVuY3Rpb24gc3RpbGwgbmVlZHMgdG8gZXhl
Y3V0ZSB3aGVuCisgICAgLy8gQ1RGb250U2hhcGVHbHlwaHMoKSBpcyBiZWluZyB1c2VkLgorICAg
IGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICAgICAgZ2x5cGhC
dWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBi
ZWdpbm5pbmdHbHlwaEluZGV4KTsKKworICAgIENURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9u
cyA9IChlbmFibGVLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAw
KSB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmc7CisgICAgQ1RGb250VHJhbnNmb3JtR2x5
cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5n
R2x5cGhJbmRleCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdH
bHlwaEluZGV4LCBvcHRpb25zKTsKKyNlbmRpZgorCisgICAgLy8gU2VlIHRoZSBjb21tZW50IGFi
b3ZlIGluIHRoaXMgZnVuY3Rpb24gd2hlcmUgdGhlIG90aGVyIGNhbGwgdG8gcmV2ZXJzZSgpIGlz
LgorICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICAgICAg
Z2x5cGhCdWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXpl
KCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4KTsKK30KKworc3RhdGljIGludCBleHRyYWN0TnVtYmVy
KENGTnVtYmVyUmVmIG51bWJlcikKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBpZiAobnVt
YmVyKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVySW50VHlwZSwg
JnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBGb250OjpkZXRlcm1pbmVQ
aXRjaCgpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsK
KyAgICBBU1NFUlQoY3RGb250KTsKKworICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgor
ICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0
cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgQXBw
S2l0IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8g
U3BlY2lhbCBjYXNlIE1TLVBHb3RoaWMuCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJv
YmxlbS80MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBp
dGNoLgorICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBm
aXhlZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEKKyAgICAv
LyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQgbm90IHRy
ZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgQXBw
S2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KKworICAgIGF1
dG8gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsKKyAgICBh
dXRvIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOwor
CisgICAgaW50IGZpeGVkUGl0Y2ggPSBleHRyYWN0TnVtYmVyKGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8
Q0ZOdW1iZXJSZWY+KENURm9udENvcHlBdHRyaWJ1dGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBr
Q1RGb250Rml4ZWRBZHZhbmNlQXR0cmlidXRlKSkpLmdldCgpKTsKKyAgICBtX3RyZWF0QXNGaXhl
ZFBpdGNoID0gKENURm9udEdldFN5bWJvbGljVHJhaXRzKGN0Rm9udCkgJiBrQ1RGb250TW9ub1Nw
YWNlVHJhaXQpIHx8IGZpeGVkUGl0Y2ggfHwgKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZnVsbE5h
bWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIikpIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
ZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIikpIHx8IGNhc2VJbnNlbnNpdGl2ZUNv
bXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNb25vdHlwZUNvcnNpdmEiKSkpOworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKGZhbWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiQ291cmllciBOZXciKSkpIHsKKyAgICAg
ICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBiZSB0cmVhdGVkIGFzIGZpeGVk
IHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNrZWQgc3BhY2Ugd2lkdGggd2hp
Y2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFyOi8vNjI2OTc4MykuCisgICAg
ICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKK30KKworRmxv
YXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7
CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OworICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0
Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1E
YXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsID8ga0NURm9u
dE9yaWVudGF0aW9uVmVydGljYWwgOiBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsLCAmZ2x5
cGgsIDAsIDEpOworICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7Cisg
ICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgYm91bmRpbmdCb3guc2V0V2lk
dGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7CisKKyAgICBy
ZXR1cm4gYm91bmRpbmdCb3g7Cit9CisKK2Zsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZVplcm87
CisKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkuc2l6ZSgpKSB7CisgICAgICAgIGJvb2wgaG9yaXpv
bnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpI
b3Jpem9udGFsOworICAgICAgICBDVEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IGhvcml6
b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrID8ga0NURm9udE9yaWVudGF0aW9u
SG9yaXpvbnRhbCA6IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsOworI2lmIFVTRShDVEZPTlRH
RVRBRFZBTkNFU19XT1JLQVJPVU5EKQorICAgICAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHls
ZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdT
dHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1
YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7CisgICAgICAg
IGlmICghQ1RGb250SXNBcHBsZUNvbG9yRW1vamkobV9wbGF0Zm9ybURhdGEuY3RGb250KCkpICYm
ICFtX3BsYXRmb3JtRGF0YS5oYXNWYXJpYXRpb25zKCkpCisgICAgICAgICAgICBDVEZvbnRHZXRV
bnN1bW1lZEFkdmFuY2VzRm9yR2x5cGhzQW5kU3R5bGUobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IG9yaWVudGF0aW9uLCBzdHlsZSwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisgICAgICAgIGVsc2UK
KyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBo
cyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgb3JpZW50YXRpb24sICZnbHlwaCwgJmFkdmFuY2Us
IDEpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0OworfQorCitQYXRoIEZvbnQ6OnBsYXRmb3JtUGF0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDVEZvbnRDcmVh
dGVQYXRoRm9yR2x5cGgocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGdseXBoLCBudWxscHRyKSk7
CisgICAgYXV0byBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gdGhpcy0+c3ludGhldGljQm9sZE9mZnNl
dCgpOworICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KSB7CisgICAgICAgIGF1dG8gbmV3UGF0
aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKKyAgICAgICAgQ0dQYXRoQWRkUGF0
aChuZXdQYXRoLmdldCgpLCBudWxscHRyLCByZXN1bHQuZ2V0KCkpOworICAgICAgICBhdXRvIHRy
YW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oc3ludGhldGljQm9s
ZE9mZnNldCwgMCk7CisgICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgJnRyYW5z
bGF0aW9uLCByZXN1bHQuZ2V0KCkpOworICAgICAgICByZXR1cm4geyBXVEZNb3ZlKG5ld1BhdGgp
IH07CisgICAgfQorICAgIHJldHVybiB7IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHko
cmVzdWx0LmdldCgpKSkgfTsKK30KKworYm9vbCBGb250OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBv
aW50KFVDaGFyMzIgY2hhcmFjdGVyLCBPcHRpb25hbDxVQ2hhcjMyPiB2YXJpYXRpb24pIGNvbnN0
Cit7CisgICAgaWYgKHZhcmlhdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVW5p
Q2hhciBjb2RlVW5pdHNbMl07CisgICAgQ0dHbHlwaCBnbHlwaHNbMl07CisgICAgQ0ZJbmRleCBj
b3VudCA9IDA7CisgICAgVTE2X0FQUEVORF9VTlNBRkUoY29kZVVuaXRzLCBjb3VudCwgY2hhcmFj
dGVyKTsKKyAgICByZXR1cm4gQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhwbGF0Zm9ybURh
dGEoKS5jdEZvbnQoKSwgY29kZVVuaXRzLCBnbHlwaHMsIGNvdW50KTsKK30KKworYm9vbCBGb250
Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QKK3sKKyAgICBhdXRvIHBs
YXRmb3JtRm9udCA9IHBsYXRmb3JtRGF0YSgpLmZvbnQoKTsKKyAgICBpZiAoIXBsYXRmb3JtRm9u
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQWxsb3cgbW9zdCBub24taWNvbiBm
b250cyB0byBiYWlsIGVhcmx5IGhlcmUgYnkgdGVzdGluZyBhIHNpbmdsZSBjaGFyYWN0ZXIgJ2En
LCB3aXRob3V0IGl0ZXJhdGluZyBvdmVyIGFsbCBiYXNpYyBsYXRpbiBjaGFyYWN0ZXJzLgorICAg
IFVuaUNoYXIgbG93ZXJjYXNlQUNoYXJhY3RlciA9ICdhJzsKKyAgICBDR0dseXBoIGxvd2VyY2Fz
ZUFHbHlwaDsKKyAgICBpZiAoQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhwbGF0Zm9ybUZv
bnQsICZsb3dlcmNhc2VBQ2hhcmFjdGVyLCAmbG93ZXJjYXNlQUdseXBoLCAxKSkgeworICAgICAg
ICBpZiAoIUNHUmVjdElzRW1wdHkoQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhwbGF0
Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsICZsb3dlcmNhc2VBR2x5cGgsIG51
bGxwdHIsIDEpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhdXRv
IHN1cHBvcnRlZENoYXJhY3RlcnMgPSBhZG9wdENGKENURm9udENvcHlDaGFyYWN0ZXJTZXQocGxh
dGZvcm1Gb250KSk7CisgICAgaWYgKENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVySW5QbGFuZShzdXBw
b3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAxKSB8fCBDRkNoYXJhY3RlclNldEhhc01lbWJlckluUGxh
bmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFRoaXMgZW5jb21wYXNzZXMgYWxsIGJhc2ljIExhdGluIG5vbi1jb250cm9sIGNo
YXJhY3RlcnMuCisgICAgY29uc3RleHByIFVuaUNoYXIgZmlyc3RDaGFyYWN0ZXJUb1Rlc3QgPSAn
ICc7CisgICAgY29uc3RleHByIFVuaUNoYXIgbGFzdENoYXJhY3RlclRvVGVzdCA9ICd+JzsKKyAg
ICBjb25zdGV4cHIgYXV0byBudW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3QgPSBsYXN0Q2hhcmFjdGVy
VG9UZXN0IC0gZmlyc3RDaGFyYWN0ZXJUb1Rlc3QgKyAxOworCisgICAgVmVjdG9yPENHR2x5cGg+
IGdseXBoczsKKyAgICBnbHlwaHMuZmlsbCgwLCBudW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3QpOwor
ICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlclJhbmdlKHBsYXRmb3JtRm9udCwgZ2x5cGhz
LmJlZ2luKCksIENGUmFuZ2VNYWtlKGZpcnN0Q2hhcmFjdGVyVG9UZXN0LCBudW1iZXJPZkNoYXJh
Y3RlcnNUb1Rlc3QpKTsKKyAgICBnbHlwaHMucmVtb3ZlQWxsKDApOworCisgICAgaWYgKGdseXBo
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxDR1JlY3Q+
IGJvdW5kaW5nUmVjdHM7CisgICAgYm91bmRpbmdSZWN0cy5maWxsKENHUmVjdFplcm8sIGdseXBo
cy5zaXplKCkpOworICAgIENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxhdGZvcm1G
b250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCBnbHlwaHMuYmVnaW4oKSwgYm91bmRpbmdS
ZWN0cy5iZWdpbigpLCBnbHlwaHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbm90Rm91bmQgPT0gYm91
bmRpbmdSZWN0cy5maW5kTWF0Y2hpbmcoW10oYXV0byYgcmVjdCkgeworICAgICAgICByZXR1cm4g
IUNHUmVjdElzRW1wdHkocmVjdCk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQ
bGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0NWIwZTg1MDEy
MTU5ZjYwMTNmZjUyMjlkYjI0MGEyN2U2MjgwY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3Bw
CkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVy
bmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8cGFs
L3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9D
b3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJp
bmdNb2RlIHRleHRSZW5kZXJpbmdNb2RlKQorICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50
LCB0ZXh0UmVuZGVyaW5nTW9kZSkKK3sKKyAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOworICAg
IG1fZm9udCA9IGZvbnQ7CisgICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IENURm9udEdldFN5bWJv
bGljVHJhaXRzKGZvbnQpICYga0NURm9udENvbG9yR2x5cGhzVHJhaXQ7CisgICAgbV9pc1N5c3Rl
bUZvbnQgPSBXZWJDb3JlOjppc1N5c3RlbUZvbnQobV9mb250LmdldCgpKTsKKyAgICBhdXRvIHZh
cmlhdGlvbnMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250Q29w
eUF0dHJpYnV0ZShmb250LCBrQ1RGb250VmFyaWF0aW9uQXR0cmlidXRlKSkpOworICAgIG1faGFz
VmFyaWF0aW9ucyA9IHZhcmlhdGlvbnMgJiYgQ0ZEaWN0aW9uYXJ5R2V0Q291bnQodmFyaWF0aW9u
cy5nZXQoKSk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIG1faXNFbW9qaSA9IENU
Rm9udElzQXBwbGVDb2xvckVtb2ppKG1fZm9udC5nZXQoKSk7CisjZW5kaWYKK30KKworYm9vbCBp
c1N5c3RlbUZvbnQoQ1RGb250UmVmIGZvbnQpCit7CisjaWYgSEFWRShDVEZPTlRJU1NZU1RFTVVJ
Rk9OVCkKKyAgICByZXR1cm4gQ1RGb250SXNTeXN0ZW1VSUZvbnQoZm9udCk7CisjZWxzZQorICAg
IHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5
Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsKKyNlbmRpZgorfQorCitDVEZvbnRSZWYgRm9u
dFBsYXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQoKSBjb25zdAoreworICAgIENURm9udFJlZiBw
bGF0Zm9ybUZvbnQgPSBmb250KCk7CisgICAgQVNTRVJUKHBsYXRmb3JtRm9udCk7CisgICAgaWYg
KHBsYXRmb3JtRm9udCAmJiBhZG9wdENGKENURm9udENvcHlBdHRyaWJ1dGUocGxhdGZvcm1Gb250
LCBrQ1RGb250VVJMQXR0cmlidXRlKSkpCisgICAgICAgIHJldHVybiBwbGF0Zm9ybUZvbnQ7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiBQTEFURk9STShDT0NPQSkKK2lubGluZSBpbnQg
bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IoRm9udFdpZHRoVmFyaWFudCB2
YXJpYW50KQoreworICAgIHN3aXRjaCAodmFyaWFudCkgeworICAgIGNhc2UgRm9udFdpZHRoVmFy
aWFudDo6UmVndWxhcldpZHRoOgorICAgICAgICByZXR1cm4ga1Byb3BvcnRpb25hbFRleHRTZWxl
Y3RvcjsKKworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6SGFsZldpZHRoOgorICAgICAgICBy
ZXR1cm4ga0hhbGZXaWR0aFRleHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFu
dDo6VGhpcmRXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtUaGlyZFdpZHRoVGV4dFNlbGVjdG9yOwor
CisgICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpRdWFydGVyV2lkdGg6CisgICAgICAgIHJldHVy
biBrUXVhcnRlcldpZHRoVGV4dFNlbGVjdG9yOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBrUHJvcG9ydGlvbmFsVGV4dFNlbGVjdG9yOworfQorCitzdGF0
aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY2FzY2FkZVRvTGFzdFJlc29ydEF0dHJpYnV0
ZXNEaWN0aW9uYXJ5KCkKK3sKKyAgICBhdXRvIGxhc3RSZXNvcnQgPSBhZG9wdENGKENURm9udERl
c2NyaXB0b3JDcmVhdGVXaXRoTmFtZUFuZFNpemUoQ0ZTVFIoIkxhc3RSZXNvcnQiKSwgMCkpOwor
CisgICAgQ0ZUeXBlUmVmIGRlc2NyaXB0b3JzW10gPSB7IGxhc3RSZXNvcnQuZ2V0KCkgfTsKKyAg
ICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgZGVzY3JpcHRvcnMsIFdURl9BUlJBWV9MRU5HVEgoZGVzY3JpcHRv
cnMpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisKKyAgICBDRlR5cGVSZWYga2V5c1tdID0g
eyBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10g
PSB7IGFycmF5LmdldCgpIH07CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlz
KSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOworfQorCitzdGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBjYXNjYWRlVG9M
YXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKCkKK3sKKyAgICBzdGF0aWMgQ1RG
b250RGVzY3JpcHRvclJlZiBkZXNjcmlwdG9yID0gQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhB
dHRyaWJ1dGVzKGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpLmdldCgp
KTsKKyAgICByZXR1cm4gZGVzY3JpcHRvcjsKK30KKworQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURh
dGE6OmN0Rm9udCgpIGNvbnN0Cit7CisgICAgaWYgKG1fY3RGb250KQorICAgICAgICByZXR1cm4g
bV9jdEZvbnQuZ2V0KCk7CisKKyAgICBBU1NFUlQobV9mb250KTsKKyAgICBtX2N0Rm9udCA9IGFk
b3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG1fZm9udC5nZXQoKSwgbV9zaXpl
LCBudWxscHRyLCBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9y
KCkpKTsKKworICAgIGlmIChtX3dpZHRoVmFyaWFudCAhPSBGb250V2lkdGhWYXJpYW50OjpSZWd1
bGFyV2lkdGgpIHsKKyAgICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUgPSBrVGV4dFNwYWNpbmdU
eXBlOworICAgICAgICBpbnQgZmVhdHVyZVNlbGVjdG9yVmFsdWUgPSBtYXBGb250V2lkdGhWYXJp
YW50VG9DVEZlYXR1cmVTZWxlY3RvcihtX3dpZHRoVmFyaWFudCk7CisgICAgICAgIFJldGFpblB0
cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBzb3VyY2VEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRD
b3B5Rm9udERlc2NyaXB0b3IobV9jdEZvbnQuZ2V0KCkpKTsKKyAgICAgICAgUmV0YWluUHRyPENG
TnVtYmVyUmVmPiBmZWF0dXJlVHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJmZlYXR1cmVUeXBlVmFsdWUpKTsKKyAgICAg
ICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlU2VsZWN0b3IgPSBhZG9wdENGKENGTnVt
YmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJl
U2VsZWN0b3JWYWx1ZSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4g
bmV3RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoRmVh
dHVyZShzb3VyY2VEZXNjcmlwdG9yLmdldCgpLCBmZWF0dXJlVHlwZS5nZXQoKSwgZmVhdHVyZVNl
bGVjdG9yLmdldCgpKSk7CisgICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG5ld0ZvbnQgPSBh
ZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihuZXdEZXNjcmlwdG9yLmdldCgp
LCBtX3NpemUsIDApKTsKKworICAgICAgICBpZiAobmV3Rm9udCkKKyAgICAgICAgICAgIG1fY3RG
b250ID0gbmV3Rm9udDsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jdEZvbnQuZ2V0KCk7Cit9Cisj
ZWxzZQorQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZvbnQoKTsKK30KKyNlbmRpZgorCitSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxh
dGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKENURm9udFJlZiBjdEZvbnQpCit7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9y
KGN0Rm9udCkpOworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM4NjgzIFRoaXMgaXMgYSBzaGFsbG93IHBvaW50ZXIgY29tcGFyZSBmb3Igd2Vi
IGZvbnRzCisgICAgLy8gYmVjYXVzZSB0aGUgVVJMIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRo
ZSBmb250LiBUaGlzIG1lYW5zIHdlIG1pZ2h0IGVycm9uZW91c2x5IGdldCBmYWxzZSBuZWdhdGl2
ZXMuCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmwgPSBhZG9wdENGKHN0YXRpY19jYXN0PENG
VVJMUmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRvci5nZXQo
KSwga0NURm9udFJlZmVyZW5jZVVSTEF0dHJpYnV0ZSkpKTsKKyAgICBBU1NFUlQoIXVybCB8fCBD
RkdldFR5cGVJRCh1cmwuZ2V0KCkpID09IENGVVJMR2V0VHlwZUlEKCkpOworICAgIHJldHVybiB1
cmw7Cit9CisKK1JldGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZv
ckVxdWFsaXR5Q2hlY2soKSBjb25zdAoreworICAgIHJldHVybiBvYmplY3RGb3JFcXVhbGl0eUNo
ZWNrKGN0Rm9udCgpKTsKK30KKworUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0
YTo6b3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKK3sKKyAgICBpZiAoUmV0YWlu
UHRyPENGRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKGZvbnQoKSwgdGFi
bGUsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpKQorICAgICAgICByZXR1cm4gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoZGF0YS5nZXQoKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
I2lmICFMT0dfRElTQUJMRUQKKworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9u
KCkgY29uc3QKK3sKKyAgICBTdHJpbmcgZm9udERlc2NyaXB0aW9uIHsgYWRvcHRDRihDRkNvcHlE
ZXNjcmlwdGlvbihmb250KCkpKS5nZXQoKSB9OworICAgIHJldHVybiBtYWtlU3RyaW5nKGZvbnRE
ZXNjcmlwdGlvbiwgJyAnLCBtX3NpemUsCisgICAgICAgIChtX3N5bnRoZXRpY0JvbGQgPyAiIHN5
bnRoZXRpYyBib2xkIiA6ICIiKSwKKyAgICAgICAgKG1fc3ludGhldGljT2JsaXF1ZSA/ICIgc3lu
dGhldGljIG9ibGlxdWUiIDogIiIpLAorICAgICAgICAobV9vcmllbnRhdGlvbiA9PSBGb250T3Jp
ZW50YXRpb246OlZlcnRpY2FsID8gIiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiIgOiAiIikpOworfQor
CisjZW5kaWYKKworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseU5hbWUoKSBjb25zdAor
eworICAgIGlmIChhdXRvIHBsYXRmb3JtRm9udCA9IGZvbnQoKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUocGxhdGZvcm1Gb250KSkuZ2V0KCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmIzOGVlMzZkYzZiODVjNDNhM2Q1YjljZDk1NGVjNGUxMzdiZWY0NDgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBh
Z2VDb3JlVGV4dC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHbHlwaFBhZ2UuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+CisjZWxz
ZQorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBzaG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5
cGhzKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9u
dCYgZm9udCkKK3sKKyAgICBpZiAoIWZvbnQuaGFzVmVydGljYWxHbHlwaHMoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7
ICsraSkgeworICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZmZXJb
aV0pKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBDR0dseXBoIGRlbGV0ZWRHbHlwaCA9IDB4RkZG
RjsKKworYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoKQoreworICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gR2x5cGhQYWdlOjpzaXplIHx8
IGJ1ZmZlckxlbmd0aCA9PSAyICogR2x5cGhQYWdlOjpzaXplKTsKKworICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSB0aGlzLT5mb250KCk7CisgICAgVmVjdG9yPENHR2x5cGgsIDUxMj4gZ2x5cGhzKGJ1
ZmZlckxlbmd0aCk7CisgICAgdW5zaWduZWQgZ2x5cGhTdGVwID0gYnVmZmVyTGVuZ3RoIC8gR2x5
cGhQYWdlOjpzaXplOworCisgICAgaWYgKHNob3VsZEZpbGxXaXRoVmVydGljYWxHbHlwaHMoYnVm
ZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpKQorICAgICAgICBDVEZvbnRHZXRWZXJ0aWNhbEdseXBo
c0ZvckNoYXJhY3RlcnMoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxVbmlDaGFyKj4oYnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKTsKKyAg
ICBlbHNlCisgICAgICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udC5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyKj4oYnVmZmVyKSwgZ2x5
cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKTsKKworICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNl
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkgewor
ICAgICAgICBhdXRvIHRoZUdseXBoID0gZ2x5cGhzW2kgKiBnbHlwaFN0ZXBdOworICAgICAgICBp
ZiAodGhlR2x5cGggJiYgdGhlR2x5cGggIT0gZGVsZXRlZEdseXBoKSB7CisgICAgICAgICAgICBz
ZXRHbHlwaEZvckluZGV4KGksIHRoZUdseXBoKTsKKyAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBoYXZlR2x5cGhzOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlM2E1MzVkYzQwM2U0MzI0M2FiODEzYzZjMTRmZGVjYWQ2N2U4ZGVlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0KLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQ29yZVRleHRT
UEkuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBzaG91bGRGaWxsV2l0
aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICBpZiAoIWZvbnQuaGFzVmVydGljYWxHbHlwaHMo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
dWZmZXJMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9n
cmFwaChidWZmZXJbaV0pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBDR0dseXBoIGRlbGV0ZWRH
bHlwaCA9IDB4RkZGRjsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoKQotewotICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gR2x5cGhQ
YWdlOjpzaXplIHx8IGJ1ZmZlckxlbmd0aCA9PSAyICogR2x5cGhQYWdlOjpzaXplKTsKLQotICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSB0aGlzLT5mb250KCk7Ci0gICAgVmVjdG9yPENHR2x5cGgsIDUx
Mj4gZ2x5cGhzKGJ1ZmZlckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgZ2x5cGhTdGVwID0gYnVmZmVy
TGVuZ3RoIC8gR2x5cGhQYWdlOjpzaXplOwotCi0gICAgaWYgKHNob3VsZEZpbGxXaXRoVmVydGlj
YWxHbHlwaHMoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpKQotICAgICAgICBDVEZvbnRHZXRW
ZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwg
cmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyKj4oYnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVy
TGVuZ3RoKTsKLSAgICBlbHNlCi0gICAgICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMo
Zm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyKj4o
YnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKTsKLQotICAgIGJvb2wgaGF2ZUds
eXBocyA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNp
emU7ICsraSkgewotICAgICAgICBhdXRvIHRoZUdseXBoID0gZ2x5cGhzW2kgKiBnbHlwaFN0ZXBd
OwotICAgICAgICBpZiAodGhlR2x5cGggJiYgdGhlR2x5cGggIT0gZGVsZXRlZEdseXBoKSB7Ci0g
ICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIHRoZUdseXBoKTsKLSAgICAgICAgICAgIGhh
dmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBoYXZlR2x5cGhz
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDhkYzNlYzEyMWNjMDIyMDdiOGNiMTY4MjcxM2Q2YmI4ZDlmNmQ1ZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNH
V2luLmNwcApAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5
LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVy
LmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0ZXhwciB1aW50
MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVNaW5pbXVtID0gKDEgPDwgNCk7Citjb25zdGV4cHIg
dWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTGlnaHQgPSAoMiA8PCA0KTsKK2NvbnN0ZXhw
ciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRpdW0gPSAoMyA8PCA0KTsKK2NvbnN0
ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVIZWF2eSA9ICg0IDw8IDQpOworCitj
b25zdGV4cHIgaW50IGZvbnRTbW9vdGhpbmdMZXZlbE1lZGl1bSA9IDI7Citjb25zdGV4cHIgQ0dG
bG9hdCBhbnRpYWxpYXNpbmdHYW1tYSA9IDIuMzsKKworZG91YmxlIEZvbnRDYXNjYWRlOjpzX2Zv
bnRTbW9vdGhpbmdDb250cmFzdCA9IDI7Cit1aW50MzJfdCBGb250Q2FzY2FkZTo6c19mb250U21v
b3RoaW5nVHlwZSA9IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bTsKK2ludCBGb250Q2FzY2Fk
ZTo6c19mb250U21vb3RoaW5nTGV2ZWwgPSBmb250U21vb3RoaW5nTGV2ZWxNZWRpdW07Citib29s
IEZvbnRDYXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkOwordWludDMyX3QgRm9u
dENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ1R5cGU7Citib29sIEZvbnRDYXNjYWRlOjpz
X3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQ7CisKK3ZvaWQgRm9udENhc2NhZGU6OnNldEZvbnRTbW9v
dGhpbmdMZXZlbChpbnQgbGV2ZWwpCit7CisgICAgY29uc3QgdWludDMyX3Qgc21vb3RoaW5nVHlw
ZVtdID0geyAKKyAgICAgICAgMCwgLy8gRm9udFNtb290aGluZ1R5cGVTdGFuZGFyZAorICAgICAg
ICBrQ0dGb250U21vb3RoaW5nU3R5bGVMaWdodCwgLy8gRm9udFNtb290aGluZ1R5cGVMaWdodAor
ICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRpdW0sIC8vIEZvbnRTbW9vdGhpbmdUeXBl
TWVkaXVtCisgICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5LCAvLyBGb250U21vb3Ro
aW5nVHlwZVN0cm9uZworICAgIH07CisKKyAgICBpZiAobGV2ZWwgPCAwIHx8IHN0YXRpY19jYXN0
PHNpemVfdD4obGV2ZWwpID4gQVJSQVlTSVpFKHNtb290aGluZ1R5cGUpKQorICAgICAgICByZXR1
cm47CisKKyAgICBzX2ZvbnRTbW9vdGhpbmdUeXBlID0gc21vb3RoaW5nVHlwZVtsZXZlbF07Cisg
ICAgc19mb250U21vb3RoaW5nTGV2ZWwgPSBsZXZlbDsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dG
b250U21vb3RoaW5nU3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgdWludDMyX3Qgc21vb3Ro
aW5nVHlwZSwgYm9vbCBmb250QWxsb3dzU21vb3RoaW5nID0gdHJ1ZSkKK3sKKyAgICBpZiAoc21v
b3RoaW5nVHlwZSkgeworICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0Nv
bnRleHQsIGZvbnRBbGxvd3NTbW9vdGhpbmcpOworICAgICAgICBDR0NvbnRleHRTZXRGb250U21v
b3RoaW5nU3R5bGUoY2dDb250ZXh0LCBzbW9vdGhpbmdUeXBlKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBmYWxzZSk7Cit9CisK
K3VpbnQzMl90IEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nU3R5bGUoQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCwgYm9vbCBmb250QWxsb3dzU21vb3RoaW5nKQoreworICAgIHVpbnQzMl90IG9s
ZEZvbnRTbW9vdGhpbmdTdHlsZSA9IDA7CisgICAgaWYgKENHQ29udGV4dEdldFNob3VsZFNtb290
aEZvbnRzKGNnQ29udGV4dCkpCisgICAgICAgIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSA9IENHQ29u
dGV4dEdldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQpOworICAgIHNldENHRm9udFNtb290
aGluZ1N0eWxlKGNnQ29udGV4dCwgc19mb250U21vb3RoaW5nVHlwZSwgZm9udEFsbG93c1Ntb290
aGluZyk7CisKKyAgICByZXR1cm4gb2xkRm9udFNtb290aGluZ1N0eWxlOworfQorCit2b2lkIEZv
bnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nQ29udHJhc3QoQ0dGbG9hdCBjb250cmFzdCkKK3sK
KyAgICBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9IGNvbnRyYXN0OworfQorCitzdGF0aWMgZmxv
YXQgY2xlYXJUeXBlQ29udHJhc3QoKQoreworICAgIGNvbnN0IFdDSEFSIHJlZmVyZW5jZUNoYXJh
Y3RlciA9ICdcXCc7CisgICAgc3RhdGljIFVJTlQgbGFzdENvbnRyYXN0ID0gMjAwMDsKKyAgICBz
dGF0aWMgZmxvYXQgZ2FtbWEgPSAyOworICAgIFVJTlQgY29udHJhc3Q7CisKKyAgICBpZiAoIVN5
c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HQ09OVFJBU1QsIDAsICZjb250
cmFzdCwgMCkgfHwgY29udHJhc3QgPT0gbGFzdENvbnRyYXN0KQorICAgICAgICByZXR1cm4gZ2Ft
bWE7CisKKyAgICBsYXN0Q29udHJhc3QgPSBjb250cmFzdDsKKworICAgIGF1dG8gZGMgPSBhZG9w
dEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7CisKKyAgICBIR0RJT0JKIG9sZEhG
T05UID0gOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJ
X0ZPTlQpKTsKKyAgICBHTFlQSE1FVFJJQ1MgZ2x5cGhNZXRyaWNzOworCisgICAgc3RhdGljIGNv
bnN0IE1BVDIgaWRlbnRpdHkgPSB7IDAsIDEsICAwLCAwLCAgMCwgMCwgIDAsIDEgfTsKKyAgICBp
ZiAoOjpHZXRHbHlwaE91dGxpbmUoZGMuZ2V0KCksIHJlZmVyZW5jZUNoYXJhY3RlciwgR0dPX01F
VFJJQ1MsICZnbHlwaE1ldHJpY3MsIDAsIDAsICZpZGVudGl0eSkgPT0gR0RJX0VSUk9SKQorICAg
ICAgICByZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOworCisgICAgQklUTUFQSU5GTyBiaXRtYXBJ
bmZvOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihCSVRNQVBJTkZP
SEVBREVSKTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7CisgICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKKyAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaVNpemVJbWFnZSA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlY
UGVsc1Blck1ldGVyID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxzUGVyTWV0
ZXIgPSAwOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50ID0gMDsKKyAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoID0gZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hY
OworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ID0gLXN0YXRpY19jYXN0PGludD4o
Z2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZKTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJp
dENvdW50ID0gMzI7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJVc2VkID0gMDsKKwor
ICAgIHVpbnQ4X3QqIHBpeGVscyA9IG51bGxwdHI7CisgICAgYXV0byBiaXRtYXAgPSBhZG9wdEdE
SU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JT
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnBpeGVscyksIDAsIDApKTsKKyAgICBpZiAoIWJp
dG1hcCkKKyAgICAgICAgcmV0dXJuIGNvbnRyYXN0IC8gMTAwMC4wZjsKKworICAgIEhHRElPQkog
b2xkQml0bWFwID0gOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIGJpdG1hcC5nZXQoKSk7CisKKyAg
ICBCSVRNQVAgYm1wSW5mbzsKKyAgICA6OkdldE9iamVjdChiaXRtYXAuZ2V0KCksIHNpemVvZihi
bXBJbmZvKSwgJmJtcEluZm8pOworICAgIG1lbXNldChwaXhlbHMsIDAsIGdseXBoTWV0cmljcy5n
bUJsYWNrQm94WSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVzKTsKKworICAgIDo6U2V0QmtNb2RlKGRj
LmdldCgpLCBPUEFRVUUpOworICAgIDo6U2V0VGV4dEFsaWduKGRjLmdldCgpLCBUQV9MRUZUIHwg
VEFfVE9QKTsKKworICAgIDo6U2V0VGV4dENvbG9yKGRjLmdldCgpLCBSR0IoMjU1LCAyNTUsIDI1
NSkpOworICAgIDo6U2V0QmtDb2xvcihkYy5nZXQoKSwgUkdCKDAsIDAsIDApKTsKKyAgICA6OkV4
dFRleHRPdXRXKGRjLmdldCgpLCAwLCAwLCAwLCAwLCAmcmVmZXJlbmNlQ2hhcmFjdGVyLCAxLCAw
KTsKKworICAgIHVpbnQ4X3QqIHJlZmVyZW5jZVBpeGVsID0gbnVsbHB0cjsKKyAgICB1aW50OF90
IHdoaXRlUmVmZXJlbmNlVmFsdWUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2x5
cGhNZXRyaWNzLmdtQmxhY2tCb3hZICYmICFyZWZlcmVuY2VQaXhlbDsgKytpKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNCAqIGdseXBoTWV0cmljcy5nbUJsYWNrQm94WDsgKytq
KSB7CisgICAgICAgICAgICB3aGl0ZVJlZmVyZW5jZVZhbHVlID0gcGl4ZWxzW2kgKiBibXBJbmZv
LmJtV2lkdGhCeXRlcyArIGpdOworICAgICAgICAgICAgLy8gTG9vayBmb3IgYSBwaXhlbCB2YWx1
ZSBpbiB0aGUgcmFuZ2UgdGhhdCBhbGxvd3MgdXMgdG8gZXN0aW1hdGUKKyAgICAgICAgICAgIC8v
IGdhbW1hIHdpdGhpbiAwLjEgd2l0aG91dCBhbiBlcnJvci4KKyAgICAgICAgICAgIGlmICh3aGl0
ZVJlZmVyZW5jZVZhbHVlID4gMzIgJiYgd2hpdGVSZWZlcmVuY2VWYWx1ZSA8IDI0MCkgeworICAg
ICAgICAgICAgICAgIHJlZmVyZW5jZVBpeGVsID0gcGl4ZWxzICsgaSAqIGJtcEluZm8uYm1XaWR0
aEJ5dGVzICsgajsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChyZWZlcmVuY2VQaXhlbCkgeworICAgICAgICA6OlNldFRl
eHRDb2xvcihkYy5nZXQoKSwgUkdCKDAsIDAsIDApKTsKKyAgICAgICAgOjpTZXRCa0NvbG9yKGRj
LmdldCgpLCBSR0IoMjU1LCAyNTUsIDI1NSkpOworICAgICAgICA6OkV4dFRleHRPdXRXKGRjLmdl
dCgpLCAwLCAwLCAwLCAwLCAmcmVmZXJlbmNlQ2hhcmFjdGVyLCAxLCAwKTsKKyAgICAgICAgdWlu
dDhfdCBibGFja1JlZmVyZW5jZVZhbHVlID0gKnJlZmVyZW5jZVBpeGVsOworCisgICAgICAgIGZs
b2F0IG1pbkRlbHRhID0gMTsKKyAgICAgICAgZm9yIChmbG9hdCBnID0gMTsgZyA8IDIuM2Y7IGcg
Kz0gMC4xZikgeworICAgICAgICAgICAgZmxvYXQgZGVsdGEgPSBmYWJzKHBvd2YoKHdoaXRlUmVm
ZXJlbmNlVmFsdWUgLyAyNTUuMGYpLCBnKSArIHBvd2YoKGJsYWNrUmVmZXJlbmNlVmFsdWUgLyAy
NTUuMGYpLCBnKSAtIDEpOworICAgICAgICAgICAgaWYgKGRlbHRhIDwgbWluRGVsdGEpIHsKKyAg
ICAgICAgICAgICAgICBtaW5EZWx0YSA9IGRlbHRhOworICAgICAgICAgICAgICAgIGdhbW1hID0g
ZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBnYW1tYSA9
IGNvbnRyYXN0IC8gMTAwMC4wZjsKKworICAgIDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBvbGRC
aXRtYXApOworICAgIDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBvbGRIRk9OVCk7CisKKyAgICBy
ZXR1cm4gZ2FtbWE7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OnN5c3RlbUZvbnRTbW9vdGhpbmdD
aGFuZ2VkKCkKK3sKKyAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RI
SU5HLCAwLCAmc19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZCwgMCk7CisgICAgOjpTeXN0ZW1Q
YXJhbWV0ZXJzSW5mbyhTUElfR0VURk9OVFNNT09USElOR1RZUEUsIDAsICZzX3N5c3RlbUZvbnRT
bW9vdGhpbmdUeXBlLCAwKTsKKyAgICBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9IGNsZWFyVHlw
ZUNvbnRyYXN0KCk7CisgICAgc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0ID0gdHJ1ZTsKK30KKwor
dm9pZCBGb250Q2FzY2FkZTo6c2V0Q0dDb250ZXh0Rm9udFJlbmRlcmluZ1N0eWxlKENHQ29udGV4
dFJlZiBjZ0NvbnRleHQsIGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIC8qaXNQcmludGVyRm9udCov
LCBib29sIHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKQoreworICAgIGJvb2wgc2hvdWxkQW50aWFs
aWFzID0gdHJ1ZTsKKyAgICBib29sIG1heVN1YnBpeGVsUG9zaXRpb24gPSB0cnVlOworICAgIENH
RmxvYXQgY29udHJhc3QgPSAyOworICAgIGlmICh1c2VQbGF0Zm9ybU5hdGl2ZUdseXBocykgewor
ICAgICAgICAvLyA8cmRhcjovLzY1NjQ1MDE+IEdESSBjYW4ndCBzdWJwaXhlbC1wb3NpdGlvbiwg
c28gZG9uJ3QgYm90aGVyIGFza2luZy4KKyAgICAgICAgbWF5U3VicGl4ZWxQb3NpdGlvbiA9IGZh
bHNlOworICAgICAgICBpZiAoIXNfc3lzdGVtRm9udFNtb290aGluZ1NldCkKKyAgICAgICAgICAg
IHN5c3RlbUZvbnRTbW9vdGhpbmdDaGFuZ2VkKCk7CisgICAgICAgIGNvbnRyYXN0ID0gc19mb250
U21vb3RoaW5nQ29udHJhc3Q7CisgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHNfc3lzdGVtRm9u
dFNtb290aGluZ0VuYWJsZWQ7CisgICAgICAgIGlmIChzX3N5c3RlbUZvbnRTbW9vdGhpbmdUeXBl
ID09IEZFX0ZPTlRTTU9PVEhJTkdTVEFOREFSRCkgeworICAgICAgICAgICAgQ0dDb250ZXh0U2V0
Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwga0NHRm9udFNtb290aGluZ1N0eWxlTWluaW11
bSk7CisgICAgICAgICAgICBjb250cmFzdCA9IGFudGlhbGlhc2luZ0dhbW1hOworICAgICAgICB9
CisgICAgfQorICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdDb250cmFzdChjZ0NvbnRleHQs
IGNvbnRyYXN0KTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRVc2VQbGF0Zm9ybU5hdGl2ZUdseXBo
cyhjZ0NvbnRleHQsIHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKTsKKyAgICBDR0NvbnRleHRTZXRT
aG91bGRBbnRpYWxpYXNGb250cyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gY29udGV4dFRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjZ0NvbnRl
eHQpOworICAgIGJvb2wgaXNQdXJlVHJhbnNsYXRpb24gPSBjb250ZXh0VHJhbnNmb3JtLmEgPT0g
MSAmJiAoY29udGV4dFRyYW5zZm9ybS5kID09IDEgfHwgY29udGV4dFRyYW5zZm9ybS5kID09IC0x
KSAmJiAhY29udGV4dFRyYW5zZm9ybS5iICYmICFjb250ZXh0VHJhbnNmb3JtLmM7CisgICAgQ0dD
b250ZXh0U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29udGV4dCwgbWF5U3VicGl4
ZWxQb3NpdGlvbiAmJiAoaXNTeXN0ZW1Gb250IHx8ICFpc1B1cmVUcmFuc2xhdGlvbikpOworICAg
IENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGlzUHVy
ZVRyYW5zbGF0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBy
ZW5kZXJpbmdTdHlsZUZvckZvbnQoYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgaXNQcmludGVyRm9u
dCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0IGEgbWluaW11bSBhbnRpYWxpYXNl
ZCBmb250IHNpemUuCisKKyAgICBpZiAoaXNTeXN0ZW1Gb250IHx8IGlzUHJpbnRlckZvbnQpCisg
ICAgICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250
UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxl
U3VicGl4ZWxRdWFudGl6YXRpb247CisKKyAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxl
QW50aWFsaWFzaW5nOworfQorCit2b2lkIEZvbnRDYXNjYWRlOjpnZXRQbGF0Zm9ybUdseXBoQWR2
YW5jZXMoQ0dGb250UmVmIGZvbnQsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiBtLCBib29sIGlz
U3lzdGVtRm9udCwgYm9vbCBpc1ByaW50ZXJGb250LCBDR0dseXBoIGdseXBoLCBDR1NpemUmIGFk
dmFuY2UpCit7CisgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSByZW5kZXJpbmdTdHls
ZUZvckZvbnQoaXNTeXN0ZW1Gb250LCBpc1ByaW50ZXJGb250KTsKKyAgICBDR0ZvbnRHZXRHbHlw
aEFkdmFuY2VzRm9yU3R5bGUoZm9udCwgJm0sIHN0eWxlLCAmZ2x5cGgsIDEsICZhZHZhbmNlKTsK
KworICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83NzYxMTY1PiBUaGUgR0RJIGJhY2sgZW5kIGluIENv
cmUgR3JhcGhpY3Mgc29tZXRpbWVzIHJldHVybnMgYWR2YW5jZXMgdGhhdAorICAgIC8vIGRpZmZl
ciBmcm9tIHdoYXQgdGhlIGZvbnQncyBobXR4IHRhYmxlIHNwZWNpZmllcy4gVGhlIGZvbGxvd2lu
ZyBjb2RlIGNvcnJlY3RzIHRoYXQuCisgICAgQ0ZEYXRhUmVmIGhtdHhUYWJsZSA9IENHRm9udENv
cHlUYWJsZUZvclRhZyhmb250LCAnaG10eCcpOworICAgIGlmICghaG10eFRhYmxlKQorICAgICAg
ICByZXR1cm47CisgICAgQ0ZEYXRhUmVmIGhoZWFUYWJsZSA9IENHRm9udENvcHlUYWJsZUZvclRh
Zyhmb250LCAnaGhlYScpOworICAgIGlmICghaGhlYVRhYmxlKSB7CisgICAgICAgIENGUmVsZWFz
ZShobXR4VGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQ0ZJbmRl
eCBoaGVhVGFibGVTaXplID0gMzY7CisgICAgY29uc3QgcHRyZGlmZl90IGhoZWFUYWJsZU51bWJl
ck9mSE1ldHJpY3NPZmZzZXQgPSAzNDsKKyAgICBpZiAoQ0ZEYXRhR2V0TGVuZ3RoKGhoZWFUYWJs
ZSkgPCBoaGVhVGFibGVTaXplKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOworICAg
ICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHVuc2lnbmVkIHNob3J0IG51bWJlck9mSE1ldHJpY3MgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KENGRGF0YUdldEJ5dGVQdHIoaGhlYVRhYmxlKSArIGhoZWFUYWJs
ZU51bWJlck9mSE1ldHJpY3NPZmZzZXQpOworICAgIG51bWJlck9mSE1ldHJpY3MgPSAoKG51bWJl
ck9mSE1ldHJpY3MgJiAweEZGKSA8PCA4KSB8IChudW1iZXJPZkhNZXRyaWNzID4+IDgpOworICAg
IGlmICghbnVtYmVyT2ZITWV0cmljcykgeworICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsK
KyAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoZ2x5cGggPj0gbnVtYmVyT2ZITWV0cmljcykKKyAgICAgICAgZ2x5cGggPSBudW1i
ZXJPZkhNZXRyaWNzIC0gMTsKKworICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaG10eFRhYmxlKSA8
IDQgKiAoZ2x5cGggKyAxKSkgeworICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKKyAgICAg
ICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBzaG9ydCBhZHZhbmNlSW5EZXNpZ25Vbml0cyA9ICpyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIHNob3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihobXR4VGFibGUpICsgNCAqIGds
eXBoKTsKKyAgICBhZHZhbmNlSW5EZXNpZ25Vbml0cyA9ICgoYWR2YW5jZUluRGVzaWduVW5pdHMg
JiAweEZGKSA8PCA4KSB8IChhZHZhbmNlSW5EZXNpZ25Vbml0cyA+PiA4KTsKKyAgICBDR1NpemUg
aG9yaXpvbnRhbEFkdmFuY2UgPSBDR1NpemVNYWtlKHN0YXRpY19jYXN0PENHRmxvYXQ+KGFkdmFu
Y2VJbkRlc2lnblVuaXRzKSAvIENHRm9udEdldFVuaXRzUGVyRW0oZm9udCksIDApOworICAgIGhv
cml6b250YWxBZHZhbmNlID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oaG9yaXpvbnRhbEFk
dmFuY2UsIG0pOworICAgIGFkdmFuY2Uud2lkdGggPSBob3Jpem9udGFsQWR2YW5jZS53aWR0aDsK
KyAgICBpZiAoIShzdHlsZSAmIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25p
bmcpKQorICAgICAgICBhZHZhbmNlLndpZHRoID0gcm91bmRmKGFkdmFuY2Uud2lkdGgpOworCisg
ICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7CisgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7Cit9CisK
K30KKworI2VuZGlmCg==
</data>
<flag name="review"
          id="423947"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>