<?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>108170</bug_id>
          
          <creation_ts>2013-01-29 01:44:54 -0800</creation_ts>
          <short_desc>[HarfBuzz] Naming fixes after removing old HarfBuzz code</short_desc>
          <delta_ts>2013-01-30 11:41:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>108077</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominik Röttsches (drott)">d-r</reporter>
          <assigned_to name="Dominik Röttsches (drott)">d-r</assigned_to>
          <cc>benjamin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rakuco</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>818725</commentid>
    <comment_count>0</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-29 01:44:54 -0800</bug_when>
    <thetext>HarfBuzzNGFace should become HarfBuzzFace,
harfbuzzFace() should be harfBuzzFace(),
m_harfbuzzFace should be m_harfBuzzFace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819167</commentid>
    <comment_count>1</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-01-29 12:04:07 -0800</bug_when>
    <thetext>Ah, sorry, just said the same thing on the dependant bug.  Sounds great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819249</commentid>
    <comment_count>2</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-29 13:05:29 -0800</bug_when>
    <thetext>Yep, also, let&apos;s move the files out of the NG folder - as discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820151</commentid>
    <comment_count>3</comment_count>
      <attachid>185486</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-30 06:22:46 -0800</bug_when>
    <thetext>Created attachment 185486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820166</commentid>
    <comment_count>4</comment_count>
      <attachid>185494</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-30 06:50:10 -0800</bug_when>
    <thetext>Created attachment 185494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820192</commentid>
    <comment_count>5</comment_count>
      <attachid>185494</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 07:27:17 -0800</bug_when>
    <thetext>Comment on attachment 185494
Patch

Attachment 185494 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16202719</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820198</commentid>
    <comment_count>6</comment_count>
      <attachid>185494</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-30 07:37:45 -0800</bug_when>
    <thetext>Comment on attachment 185494
Patch

Attachment 185494 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16115795</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820200</commentid>
    <comment_count>7</comment_count>
      <attachid>185503</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-30 07:40:17 -0800</bug_when>
    <thetext>Created attachment 185503
Patch v3, Chromium buildfix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820335</commentid>
    <comment_count>8</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-30 11:13:59 -0800</bug_when>
    <thetext>Thanks for the review, Tony.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820363</commentid>
    <comment_count>9</comment_count>
      <attachid>185503</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 11:41:09 -0800</bug_when>
    <thetext>Comment on attachment 185503
Patch v3, Chromium buildfix.

Clearing flags on attachment: 185503

Committed r141291: &lt;http://trac.webkit.org/changeset/141291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820364</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 11:41:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185486</attachid>
            <date>2013-01-30 06:22:46 -0800</date>
            <delta_ts>2013-01-30 06:50:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108170-20130130161929.patch</filename>
            <type>text/plain</type>
            <size>143740</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjNiN2IzMDkyNjZiNzAw
ZTI5YzRkMTUyYWIwZWNiYjhmYmIyNmU1Ny4uNGQ0M2U2ZTkyMjM4ZThkOThjYWMyMGI5NmQ0NmQw
NmY2OWRkNDM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1NyBAQAogMjAxMy0wMS0zMCAgRG9t
aW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5yb3R0c2NoZXNAaW50ZWwuY29tPgogCisgICAgICAg
IFtIYXJmQnV6el0gTmFtaW5nIGZpeGVzIGFmdGVyIHJlbW92aW5nIG9sZCBIYXJmQnV6eiBjb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxNzAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSB0
aGUgb2xkIGhhcmZidXp6IGNvZGUgaXMgZ29uZSBpbiByMTQxMjQxLCBpdCBtYWtlcyBzZW5zZSB0
byBnZXQgcmlkCisgICAgICAgIG9mIHRoZSBub3cgdW5uZWNlc3NyYXkgTkcgc3VmZml4IGluIGEg
bnVtYmVyIG9mIHBsYWNlcy4gV2hpbGUgYXQgaXQsCisgICAgICAgIEkgYW0gYWxzbyBmaXhpbmcg
c29tZSBuYW1pbmcgaW5jb3Npc3RlbmNpZXMuCisKKyAgICAgICAgUmVuYW1lZCBhbGwgb2NjdXJl
bmNlcyBvZiBIYXJmQnV6ek5HKiB0byBIYXJmQnV6eiosCisgICAgICAgIHJlbmFtZWQgbG93ZXJj
YXNlIHZhcmlhbnRzIG9mIGhhcmZidXp6KiBpbiB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMg
dG8gY2FtZWwtY2FzZSBoYXJmQnV6eiosCisgICAgICAgIG1vdmVkIGZpbGVzIGluIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nLyogb25lIGxldmVsIHVwIGFuZCByZW1vdmVkIG5nIGZvbGRl
ci4KKyAgICAgICAgVXBkYXRlZCBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gQ2hyb21pdW0sIEdU
SyBhbmQgRUZMIGJ1aWxkIHN5c3RlbSBmaWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5v
IGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRm9udFBsYXRm
b3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3Jt
RGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZv
cm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9y
bURhdGFBc3NpZ24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFyZkJ1
enpGYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZv
cm1EYXRhLmg6CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFyZkJ1enpGYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YTo6aGFyZkJ1enpGYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRmFjZUNhY2hlRW50cnkpOgorICAgICAgICAoV2Vi
Q29yZTo6RmFjZUNhY2hlRW50cnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGYWNlQ2Fj
aGVFbnRyeTo6fkZhY2VDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkZhY2VDYWNoZUVu
dHJ5OjpmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZhY2VDYWNoZUVudHJ5OjpnbHlwaENhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZhY2VDYWNoZUVudHJ5OjpGYWNlQ2FjaGVFbnRyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekZhY2VDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpI
YXJmQnV6ekZhY2U6OkhhcmZCdXp6RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZh
Y2U6On5IYXJmQnV6ekZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNjcmlwdEZvclZlcnRp
Y2FsR2x5cGhTdWJzdGl0dXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpz
ZXRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhhcmZCdXp6RmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpGYWNlQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENhaXJvRnRGYWNlTG9ja2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhaXJvRnRGYWNlTG9ja2VyOjpDYWlyb0Z0RmFjZUxvY2tlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlyb0Z0RmFjZUxvY2tlcjo6bG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlyb0Z0RmFjZUxvY2tlcjo6fkNhaXJvRnRGYWNlTG9ja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OmZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZVRv
SGFyZkJ1enpQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYWlyb0dldEdseXBoV2lkdGhB
bmRFeHRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6R2V0R2x5cGgpOgorICAgICAg
ICAoV2ViQ29yZTo6aGFyZkJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmhhcmZCdXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OmhhcmZCdXp6R2V0R2x5cGhFeHRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZC
dXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6Q2Fp
cm9HZXRUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZUZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L25nL0hhcmZCdXp6TkdGYWNlQ29yZVRleHQuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxBZHZhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEdseXBoSG9yaXpvbnRhbE9yaWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpnZXRHbHlwaEV4dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpD
b3JlVGV4dEdldEZvbnRGdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlVGFibGVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6Q29yZVRleHRHZXRUYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZUZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hh
cGVyOjpjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZVNraWEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGb250RGF0
YTo6SGFyZkJ1enpGb250RGF0YSk6CisgICAgICAgIChIYXJmQnV6ekZvbnREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNraWFTY2FsYXJUb0hhcmZCdXp6UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2tpYUdldEdseXBoV2lkdGhBbmRFeHRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Omhh
cmZCdXp6R2V0R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZkJ1enpHZXRHbHlwaEhvcml6
b250YWxBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6R2V0R2x5cGhIb3Jpem9u
dGFsT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6R2V0R2x5cGhFeHRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6U2tpYUdldEZvbnRGdW5jcyk6CisgICAgICAgIChX
ZWJDb3JlOjpoYXJmQnV6elNraWFHZXRUYWJsZSk6IEFsc28gZml4ZWQgc3R5bGUgY2hlY2tlciB3
aGl0ZXNwYWNlIGNvbXBsYWludCAvIGluZGVudGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6ZGVz
dHJveUhhcmZCdXp6Rm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpj
cmVhdGVGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZh
bmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBl
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KEhhcmZCdXp6U2NvcGVkUHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2NvcGVkUHRy
OjpIYXJmQnV6elNjb3BlZFB0cik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNjb3BlZFB0
cjo6fkhhcmZCdXp6U2NvcGVkUHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2NvcGVk
UHRyOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZkJ1enpQb3NpdGlvblRvRmxvYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpIYXJmQnV6elJ1
bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFwcGx5
U2hhcGVSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6eFBvc2l0aW9uRm9yT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZUNoYXJhY3RlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkhhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpTaGFwZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGFy
ZkJ1enpTaGFwZXI6OnNldERyYXdSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6c2V0Rm9udEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVy
OjpzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6YWRqdXN0U3RhcnRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6
UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1
bnMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25z
Rm9ySGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmZpbGxH
bHlwaEJ1ZmZlckZyb21IYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6ZmlsbEdseXBoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVy
OjpvZmZzZXRGb3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
c2VsZWN0aW9uUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpTaGFwZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmguCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEhhcmZCdXp6U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVy
Ojp0b3RhbFdpZHRoKToKKyAgICAgICAgKEhhcmZCdXp6UnVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpmb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnN0YXJ0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpudW1DaGFyYWN0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6bnVtR2x5cGhzKToK
KyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Z2x5cGhzKToK
KyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6YWR2YW5jZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpvZmZzZXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Z2x5cGhU
b0NoYXJhY3RlckluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OnJ0bCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1
enpSdW46OnNjcmlwdCk6CisKKzIwMTMtMDEtMzAgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWlu
aWsucm90dHNjaGVzQGludGVsLmNvbT4KKwogICAgICAgICBbSGFyZkJ1enpdIFJlbW92ZSB0aGUg
SGFyZkJ1enotb2xkIGNvZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODA3NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAwZmJh
NmNkZDMzYWVlY2I2NTBmMDFhZjBhNDVkNzQyMzIzZTIwMTA5Li5mZWRiNmY0ZWUzMWM0MDE1ODA3
ZjY4ODk3YTYzNjZhZjU5YzhhMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTQyMzgsMTEgKzQyMzgsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9VVEYxNlVDaGFyMzJJdGVyYXRvci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJh
c2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNoYXBlckJhc2UuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNhaXJvLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFw
ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6elNoYXBlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6ekZhY2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ2Fpcm8uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9u
cHJ1bnRpbWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucHR5cGVzLmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmNTE3OWM2MDE1YzFlMDMwY2U1NzQ0MWUyNjhjYmNiMDkw
MDJiOTYyLi4zNDMyMTVlOWRkMGVlOGQ2ZGEwZTk0MzhhMDc4YWI0OTgzNDU4NTk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTI3LDkgKzEyNyw5IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6
elNoYXBlckJhc2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpOR0ZhY2VDYWlyby5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6ek5HRmFjZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
elNoYXBlci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VD
YWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCiAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggZjFjYmUzZjBlYzE2NmUxNzE2Yjk5NWNhNWMyOTdj
ZTdlMjI0MjU2MC4uMDkwNGVhZWZiYmU4ODBiYjIxM2RjNjFhMTQyM2IwNTYzY2I0Y2ExOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTE3MTUsMTAgKzE3MTUsMTAg
QEAKICAgICAgICAgICAgICMgQ2hlcnJ5LXBpY2sgZmlsZXMgZXhjbHVkZWQgYnkgdGhlIGJyb2Fk
ZXIgcmVndWxhciBleHByZXNzaW9ucyBhYm92ZS4KICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enpcXC5jcHAkJ10sCiAgICAgICAg
ICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3Jt
RGF0YUhhcmZCdXp6XFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZVxcLihjcHB8aCkkJ10sCisgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlU2tp
YVxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6elNoYXBlclxcLihjcHB8aCkkJ10sCiAgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlXFwuKGNw
cHxoKSQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6ek5HRmFjZVxcLihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhXFwu
Y3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6U2hhcGVyXFwuKGNwcHxoKSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVk
ZScsICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVR5cGVzXFwuaCQnXSwKICAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVZlcnRpY2FsRGF0YVxcLihjcHB8aCkkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWFcXC5jcHAkJ10sCkBAIC0xODU2
LDExICsxODU2LDExIEBACiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4
Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWFcXC5jcHAk
J10sCiAKLSAgICAgICAgICAgICMgTWFjIHVzZXMgSGFyZmJ1enotbmcuCisgICAgICAgICAgICAj
IE1hYyB1c2VzIEhhcmZidXp6LgorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0XFwuY3BwJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZVxc
LihjcHB8aCkkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpTaGFwZXJcXC4oY3BwfGgpJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZVxcLihj
cHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDb3JlVGV4dFxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsn
aW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVxc
LihjcHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXJcXC4oY3BwfGgpJCddLAogICAgICAgICAgIF0sCiAg
ICAgICAgIH0seyAjIE9TIT0ibWFjIgogICAgICAgICAgICdzb3VyY2VzLyc6IFsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCAzMmJkZjliYWYzYmZjZTYyN2UyZThlM2NkNDljZWQ1MTRkZmRlZTQ3Li5mNDBm
YzgwMjI3ZGE4MmFlMWQ4NGZhYWZiYzQwM2U4YjIzMGIyNjZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC00MDQzLDE0ICs0MDQzLDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRm9udEhhcmZCdXp6LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpG
YWNlU2tpYS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6RmFjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6RmFjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6U2hhcGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5oJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0LmNwcCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0Zh
Y2VTa2lhLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcv
SGFyZkJ1enpOR0ZhY2UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCmlu
ZGV4IDRiYTc5ZWNhMzNiN2RlNzVlMzNkYjY3MTAzN2RkZDFiNTc4NDgyNDIuLjk1YWJkYWQ1MmRk
ZDY1ZGE5NTliYzhiNjJjZDg1NGQ1NzFmMWQxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShDSFJP
TUlVTSkgJiYgT1MoREFSV0lOKQotI2luY2x1ZGUgIkhhcmZCdXp6TkdGYWNlLmgiCisjaW5jbHVk
ZSAiSGFyZkJ1enpGYWNlLmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApp
bmRleCA4MjI0NDkyMzBhNDA2ZjZjN2I1MWI0YTEwMjFmZGYyMDM2ZTk2YjZjLi4yODg0MWU3NWMz
MDdiY2MyYzQ4ZjY3NjJiYjE0NjE2OWM2MWQ2NmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC05MCw3ICs5MCw3IEBA
IGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIFBMQVRG
T1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCi1jbGFzcyBIYXJmQnV6ek5HRmFjZTsKK2NsYXNz
IEhhcmZCdXp6RmFjZTsKICNlbmRpZgogCiAjaWYgT1MoREFSV0lOKQpAQCAtMTY0LDcgKzE2NCw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJ
TikKLSAgICBIYXJmQnV6ek5HRmFjZSogaGFyZmJ1enpGYWNlKCk7CisgICAgSGFyZkJ1enpGYWNl
KiBoYXJmQnV6ekZhY2UoKTsKICNlbmRpZgogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CkBA
IC0yNjgsNyArMjY4LDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBP
UyhEQVJXSU4pCiAgICAgUmVmUHRyPE1lbW9yeUFjdGl2YXRlZEZvbnQ+IG1faW5NZW1vcnlGb250
OwotICAgIFJlZlB0cjxIYXJmQnV6ek5HRmFjZT4gbV9oYXJmYnV6ekZhY2U7CisgICAgUmVmUHRy
PEhhcmZCdXp6RmFjZT4gbV9oYXJmQnV6ekZhY2U7CiAjZW5kaWYKIAogICAgIGJvb2wgbV9pc0Nv
bG9yQml0bWFwRm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCAzODE1MTZl
YjY5NDE5Yjc5NGFhYmRkNTFmNzFlOTIzMmI0Y2U5MzlmLi5jZTM2MmJiYjEyMWI0MDVjYzIyYTcz
MTVmMWE3YmQ3MDVkMDdiNTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRG
T1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCi0jaW1wb3J0ICJIYXJmQnV6ek5HRmFjZS5oIgor
I2ltcG9ydCAiSGFyZkJ1enpGYWNlLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtOTQsNyArOTQsNyBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZikKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBP
UyhEQVJXSU4pCiAgICAgbV9pbk1lbW9yeUZvbnQgPSBmLm1faW5NZW1vcnlGb250OwotICAgIG1f
aGFyZmJ1enpGYWNlID0gZi5tX2hhcmZidXp6RmFjZTsKKyAgICBtX2hhcmZCdXp6RmFjZSA9IGYu
bV9oYXJmQnV6ekZhY2U7CiAjZW5kaWYKIH0KIApAQCAtMTExLDcgKzExMSw3IEBAIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUFzc2lnbihjb25z
dCBGb250UGxhdGZvcm1ECiAgICAgbV9DVEZvbnQgPSBmLm1fQ1RGb250OwogI2lmIFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCiAgICAgbV9pbk1lbW9yeUZvbnQgPSBmLm1faW5NZW1v
cnlGb250OwotICAgIG1faGFyZmJ1enpGYWNlID0gZi5tX2hhcmZidXp6RmFjZTsKKyAgICBtX2hh
cmZCdXp6RmFjZSA9IGYubV9oYXJmQnV6ekZhY2U7CiAjZW5kaWYKICAgICByZXR1cm4gKnRoaXM7
CiB9CkBAIC0zMDksMTggKzMwOSwxOCBAQCBzdGF0aWMgYm9vbCBpc0FBVEZvbnQoQ1RGb250UmVm
IGN0Rm9udCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhhcmZCdXp6TkdGYWNlKiBGb250UGxh
dGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKQorSGFyZkJ1enpGYWNlKiBGb250UGxhdGZvcm1EYXRh
OjpoYXJmQnV6ekZhY2UoKQogewogICAgIENURm9udFJlZiBmb250ID0gY3RGb250KCk7CiAgICAg
Ly8gSGFyZkJ1enogY2FuJ3QgaGFuZGxlIEFBVCBmb250CiAgICAgaWYgKGlzQUFURm9udChmb250
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIW1faGFyZmJ1enpGYWNlKSB7CisgICAg
aWYgKCFtX2hhcmZCdXp6RmFjZSkgewogICAgICAgICB1aW50NjRfdCB1bmlxdWVJRCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihmb250KTsKLSAgICAgICAgbV9oYXJmYnV6ekZhY2UgPSBI
YXJmQnV6ek5HRmFjZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMp
LCB1bmlxdWVJRCk7CisgICAgICAgIG1faGFyZkJ1enpGYWNlID0gSGFyZkJ1enpGYWNlOjpjcmVh
dGUoY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odGhpcyksIHVuaXF1ZUlEKTsKICAgICB9
Ci0gICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOworICAgIHJldHVybiBtX2hhcmZCdXp6
RmFjZS5nZXQoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggOGZl
NzA2MTI0ODk3ZjMwZDc3YjZmOWI0ZGZkNjM4ZjYyNjRlZmQ0Yi4uZDhlY2YwYTQzMWYyM2RjMjJi
ODdhZDVjZDI1OWUyYTEyMDJlN2VkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMjks
MTMgKzI5LDEzIEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9u
dE9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJIYXJm
QnV6ek5HRmFjZS5oIgorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIlJlZlB0
ckNhaXJvLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1
bmN0aW9ucy5oPgogCiB0eXBlZGVmIHN0cnVjdCBfRmNGb250U2V0IEZjRm9udFNldDsKLWNsYXNz
IEhhcmZCdXp6TkdGYWNlOworY2xhc3MgSGFyZkJ1enpGYWNlOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgfkZvbnRQbGF0Zm9ybURhdGEo
KTsKIAotICAgIEhhcmZCdXp6TkdGYWNlKiBoYXJmYnV6ekZhY2UoKSBjb25zdDsKKyAgICBIYXJm
QnV6ekZhY2UqIGhhcmZCdXp6RmFjZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2go
KTsKICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CkBAIC0xMDIsNyAr
MTAyLDcgQEAgcHVibGljOgogICAgIGJvb2wgbV9zeW50aGV0aWNPYmxpcXVlOwogICAgIGJvb2wg
bV9maXhlZFdpZHRoOwogICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKLSAg
ICBtdXRhYmxlIFJlZlB0cjxIYXJmQnV6ek5HRmFjZT4gbV9oYXJmYnV6ekZhY2U7CisgICAgbXV0
YWJsZSBSZWZQdHI8SGFyZkJ1enpGYWNlPiBtX2hhcmZCdXp6RmFjZTsKIAogcHJpdmF0ZToKICAg
ICB2b2lkIGluaXRpYWxpemVXaXRoRm9udEZhY2UoY2Fpcm9fZm9udF9mYWNlX3QqLCBjb25zdCBG
b250RGVzY3JpcHRpb24mID0gRm9udERlc2NyaXB0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVU
eXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQ
bGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKaW5kZXggZjcyZDljMGJiNjBjZDIwNGM5MjQ0NTBlOWM4
OTJkOTBjY2VhODFkNS4uYTJkNTkxYmE3NTU5ZTdmMzkyMjMzYzZkNjBlMGU4ZGY3ZTg4MGQxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCkBAIC0xOTEsNyAr
MTkxLDcgQEAgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQogICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9k
ZXN0cm95KG1fc2NhbGVkRm9udCk7CiAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2Zv
bnRfcmVmZXJlbmNlKG90aGVyLm1fc2NhbGVkRm9udCk7CiAKLSAgICBtX2hhcmZidXp6RmFjZSA9
IG90aGVyLm1faGFyZmJ1enpGYWNlOworICAgIG1faGFyZkJ1enpGYWNlID0gb3RoZXIubV9oYXJm
QnV6ekZhY2U7CiAKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC0xOTksMTMgKzE5OSwxMyBAQCBG
b250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQogICAgIDogbV9mYWxsYmFja3MoMCkKICAgICAs
IG1fc2NhbGVkRm9udCgwKQotICAgICwgbV9oYXJmYnV6ekZhY2Uob3RoZXIubV9oYXJmYnV6ekZh
Y2UpCisgICAgLCBtX2hhcmZCdXp6RmFjZShvdGhlci5tX2hhcmZCdXp6RmFjZSkKIHsKICAgICAq
dGhpcyA9IG90aGVyOwogfQogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyLCBmbG9hdCBzaXplKQotICAgIDogbV9oYXJmYnV6
ekZhY2Uob3RoZXIubV9oYXJmYnV6ekZhY2UpCisgICAgOiBtX2hhcmZCdXp6RmFjZShvdGhlci5t
X2hhcmZCdXp6RmFjZSkKIHsKICAgICAqdGhpcyA9IG90aGVyOwogCkBAIC0yMjYsMTIgKzIyNiwx
MiBAQCBGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCiAgICAgICAgIGNhaXJv
X3NjYWxlZF9mb250X2Rlc3Ryb3kobV9zY2FsZWRGb250KTsKIH0KIAotSGFyZkJ1enpOR0ZhY2Uq
IEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CitIYXJmQnV6ekZhY2UqIEZv
bnRQbGF0Zm9ybURhdGE6OmhhcmZCdXp6RmFjZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hhcmZi
dXp6RmFjZSkKLSAgICAgICAgbV9oYXJmYnV6ekZhY2UgPSBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRl
KGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCBoYXNoKCkpOworICAgIGlmICgh
bV9oYXJmQnV6ekZhY2UpCisgICAgICAgIG1faGFyZkJ1enpGYWNlID0gSGFyZkJ1enpGYWNlOjpj
cmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odGhpcyksIGhhc2goKSk7CiAKLSAg
ICByZXR1cm4gbV9oYXJmYnV6ekZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIG1faGFyZkJ1enpGYWNl
LmdldCgpOwogfQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxh
dGZvcm1EYXRhSGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcAppbmRleCA0MGU1NjUyNzI4ZDY1
ODcwYmFmODI1NzZmYmU5OGRlNmYyMTUwNTFhLi42ZmQ3YjI1OGJhNmM1NGVhYzdmMGNmNDVmMDk1
ODZkYzlhYzJjODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhSGFyZkJ1enou
aCIKIAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkhhcmZCdXp6TkdGYWNlLmgi
CisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJTa0FkdmFuY2VkVHlwZWZhY2VNZXRyaWNzLmgiCiAjaW5jbHVkZSAiU2tGb250
SG9zdC5oIgpAQCAtMTI0LDcgKzEyNCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3JjKQogICAgICwgbV9mYWtlSXRhbGljKHNy
Yy5tX2Zha2VJdGFsaWMpCiAgICAgLCBtX29yaWVudGF0aW9uKHNyYy5tX29yaWVudGF0aW9uKQog
ICAgICwgbV9zdHlsZShzcmMubV9zdHlsZSkKLSAgICAsIG1faGFyZmJ1enpGYWNlKHNyYy5tX2hh
cmZidXp6RmFjZSkKKyAgICAsIG1faGFyZkJ1enpGYWNlKHNyYy5tX2hhcmZCdXp6RmFjZSkKIHsK
ICAgICBTa1NhZmVSZWYobV90eXBlZmFjZSk7CiB9CkBAIC0xNTAsNyArMTUwLDcgQEAgRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMs
IGZsb2F0IHRleHRTaXplKQogICAgICwgbV9mYWtlQm9sZChzcmMubV9mYWtlQm9sZCkKICAgICAs
IG1fZmFrZUl0YWxpYyhzcmMubV9mYWtlSXRhbGljKQogICAgICwgbV9vcmllbnRhdGlvbihzcmMu
bV9vcmllbnRhdGlvbikKLSAgICAsIG1faGFyZmJ1enpGYWNlKHNyYy5tX2hhcmZidXp6RmFjZSkK
KyAgICAsIG1faGFyZkJ1enpGYWNlKHNyYy5tX2hhcmZCdXp6RmFjZSkKIHsKICAgICBTa1NhZmVS
ZWYobV90eXBlZmFjZSk7CiAgICAgcXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpOwpAQCAtMTg4
LDcgKzE4OCw3IEBAIEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9y
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCiAgICAgbV90ZXh0U2l6ZSA9IHNyYy5tX3Rl
eHRTaXplOwogICAgIG1fZmFrZUJvbGQgPSBzcmMubV9mYWtlQm9sZDsKICAgICBtX2Zha2VJdGFs
aWMgPSBzcmMubV9mYWtlSXRhbGljOwotICAgIG1faGFyZmJ1enpGYWNlID0gc3JjLm1faGFyZmJ1
enpGYWNlOworICAgIG1faGFyZkJ1enpGYWNlID0gc3JjLm1faGFyZkJ1enpGYWNlOwogICAgIG1f
b3JpZW50YXRpb24gPSBzcmMubV9vcmllbnRhdGlvbjsKICAgICBtX3N0eWxlID0gc3JjLm1fc3R5
bGU7CiAgICAgbV9lbVNpemVJbkZvbnRVbml0cyA9IHNyYy5tX2VtU2l6ZUluRm9udFVuaXRzOwpA
QCAtMjY4LDEyICsyNjgsMTIgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2go
KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSGFyZkJ1enpOR0ZhY2UqIEZvbnRQbGF0
Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CitIYXJmQnV6ekZhY2UqIEZvbnRQbGF0Zm9y
bURhdGE6OmhhcmZCdXp6RmFjZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hhcmZidXp6RmFjZSkK
LSAgICAgICAgbV9oYXJmYnV6ekZhY2UgPSBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlKGNvbnN0X2Nh
c3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCB1bmlxdWVJRCgpKTsKKyAgICBpZiAoIW1faGFy
ZkJ1enpGYWNlKQorICAgICAgICBtX2hhcmZCdXp6RmFjZSA9IEhhcmZCdXp6RmFjZTo6Y3JlYXRl
KGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCB1bmlxdWVJRCgpKTsKIAotICAg
IHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQoKTsKKyAgICByZXR1cm4gbV9oYXJmQnV6ekZhY2Uu
Z2V0KCk7CiB9CiAKIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJp
a2UoY29uc3QgY2hhciogZm9udCwgaW50IHNpemVBbmRTdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJm
QnV6ei5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBs
YXRmb3JtRGF0YUhhcmZCdXp6LmgKaW5kZXggOGZlYTE1NGRhZjViMWEyMDJjZDBiMDBlOGUxZGNi
ZDAzOTYyOGU1YS4uMDMyYjNmNjdkOTQ5Njg5ZDEyZmI4OTFhOTEwNWJmN2ZjODg4M2RhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBs
YXRmb3JtRGF0YUhhcmZCdXp6LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
dHlwZWRlZiB1aW50MzJfdCBTa0ZvbnRJRDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Rm9udERlc2NyaXB0aW9uOwotY2xhc3MgSGFyZkJ1enpOR0ZhY2U7CitjbGFzcyBIYXJmQnV6ekZh
Y2U7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBGb250UGxhdGZvcm1EYXRhIGlzIHRo
ZSBoYW5kbGUgd2hpY2ggV2ViS2l0IGhhcyBvbiBhIHNwZWNpZmljIGZhY2UuIEEgZmFjZQpAQCAt
MTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsK
ICNlbmRpZgogCi0gICAgSGFyZkJ1enpOR0ZhY2UqIGhhcmZidXp6RmFjZSgpIGNvbnN0OworICAg
IEhhcmZCdXp6RmFjZSogaGFyZkJ1enpGYWNlKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgcmV0dXJu
ZWQgc3R5bGVzIGFyZSBhbGwgYWN0dWFsIHN0eWxlcyB3aXRob3V0IEZvbnRSZW5kZXJTdHlsZTo6
Tm9QcmVmZXJlbmNlLgogICAgIGNvbnN0IEZvbnRSZW5kZXJTdHlsZSYgZm9udFJlbmRlclN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2Zha2VJdGFsaWM7CiAgICAgRm9udE9yaWVudGF0aW9uIG1fb3JpZW50YXRp
b247CiAgICAgRm9udFJlbmRlclN0eWxlIG1fc3R5bGU7Ci0gICAgbXV0YWJsZSBSZWZQdHI8SGFy
ZkJ1enpOR0ZhY2U+IG1faGFyZmJ1enpGYWNlOworICAgIG11dGFibGUgUmVmUHRyPEhhcmZCdXp6
RmFjZT4gbV9oYXJmQnV6ekZhY2U7CiAKICAgICBTa1R5cGVmYWNlKiBoYXNoVGFibGVEZWxldGVk
Rm9udFZhbHVlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTa1R5cGVmYWNlKj4o
LTEpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWFiNDgxY2Y5NDMwOWIy
Y2QyNzNjNTBhODQyYTVkNmE2MDNiZGE0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHAKQEAgLTAsMCAr
MSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCisK
KyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiaGItb3QuaCIKKyNpbmNs
dWRlICJoYi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGhiX3RhZ190IEhhcmZC
dXp6RmFjZTo6dmVydFRhZyA9IEhCX1RBRygndicsICdlJywgJ3InLCAndCcpOworY29uc3QgaGJf
dGFnX3QgSGFyZkJ1enpGYWNlOjp2cnQyVGFnID0gSEJfVEFHKCd2JywgJ3InLCAndCcsICcyJyk7
CisKKy8vIFRob3VnaCB3ZSBoYXZlIEZvbnRDYWNoZSBjbGFzcywgd2hpY2ggcHJvdmlkZXMgdGhl
IGNhY2hlIG1lY2hhbmlzbSBmb3IKKy8vIFdlYktpdCdzIGZvbnQgb2JqZWN0cywgd2UgYWxzbyBu
ZWVkIGFkZGl0aW9uYWwgY2FjaGluZyBsYXllciBmb3IgSGFyZkJ1enoKKy8vIHRvIHJlZHVjZSB0
aGUgbWVtb3J5IGNvbnN1bXB0aW9uIGJlY2F1c2UgaGJfZmFjZV90IHNob3VsZCBiZSBhc3NvY2lh
dGVkIHdpdGgKKy8vIHVuZGVybGluZyBmb250IGRhdGEgKGUuZy4gQ1RGb250UmVmLCBGVEZhY2Up
LgorCitjbGFzcyBGYWNlQ2FjaGVFbnRyeSA6IHB1YmxpYyBSZWZDb3VudGVkPEZhY2VDYWNoZUVu
dHJ5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmFjZUNhY2hlRW50cnk+IGNy
ZWF0ZShoYl9mYWNlX3QqIGZhY2UpCisgICAgeworICAgICAgICBBU1NFUlQoZmFjZSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmFjZUNhY2hlRW50cnkoZmFjZSkpOworICAgIH0KKyAg
ICB+RmFjZUNhY2hlRW50cnkoKQorICAgIHsKKyAgICAgICAgaGJfZmFjZV9kZXN0cm95KG1fZmFj
ZSk7CisgICAgfQorCisgICAgaGJfZmFjZV90KiBmYWNlKCkgeyByZXR1cm4gbV9mYWNlOyB9Cisg
ICAgSGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+KiBnbHlwaENhY2hlKCkgeyByZXR1cm4gJm1f
Z2x5cGhDYWNoZTsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEZhY2VDYWNoZUVudHJ5KGhi
X2ZhY2VfdCogZmFjZSkKKyAgICAgICAgOiBtX2ZhY2UoZmFjZSkKKyAgICB7IH0KKworICAgIGhi
X2ZhY2VfdCogbV9mYWNlOworICAgIEhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiBtX2dseXBo
Q2FjaGU7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxGYWNlQ2FjaGVF
bnRyeT4sIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8dWludDY0X3Q+ID4gSGFyZkJ1enpGYWNlQ2FjaGU7CisKK3N0YXRpYyBIYXJmQnV6
ekZhY2VDYWNoZSogaGFyZkJ1enpGYWNlQ2FjaGUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFyZkJ1enpGYWNlQ2FjaGUsIHNfaGFyZkJ1enpGYWNlQ2FjaGUsICgpKTsKKyAgICByZXR1
cm4gJnNfaGFyZkJ1enpGYWNlQ2FjaGU7Cit9CisKK0hhcmZCdXp6RmFjZTo6SGFyZkJ1enpGYWNl
KEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgdWludDY0X3QgdW5pcXVlSUQpCisgICAg
OiBtX3BsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpCisgICAgLCBtX3VuaXF1ZUlEKHVuaXF1ZUlE
KQorICAgICwgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQoSEJfU0NSSVBUX0lOVkFMSUQpCit7Cisg
ICAgSGFyZkJ1enpGYWNlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBoYXJmQnV6ekZhY2VDYWNo
ZSgpLT5hZGQobV91bmlxdWVJRCwgMCk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRmFjZUNhY2hlRW50cnk6OmNyZWF0ZShjcmVh
dGVGYWNlKCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnJlZigpOworICAgIG1fZmFj
ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmZhY2UoKTsKKyAgICBtX2dseXBoQ2FjaGVGb3JG
YWNlQ2FjaGVFbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBoQ2FjaGUoKTsKK30K
KworSGFyZkJ1enpGYWNlOjp+SGFyZkJ1enpGYWNlKCkKK3sKKyAgICBIYXJmQnV6ekZhY2VDYWNo
ZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZkJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlE
KTsKKyAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZCdXp6RmFjZUNhY2hlKCktPmVuZCgpKTsKKyAg
ICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS0+cmVmQ291bnQoKSA+IDEpOworICAgIHJlc3Vs
dC5nZXQoKS0+dmFsdWUtPmRlcmVmKCk7CisgICAgaWYgKHJlc3VsdC5nZXQoKS0+dmFsdWUtPnJl
ZkNvdW50KCkgPT0gMSkKKyAgICAgICAgaGFyZkJ1enpGYWNlQ2FjaGUoKS0+cmVtb3ZlKG1fdW5p
cXVlSUQpOworfQorCitzdGF0aWMgaGJfc2NyaXB0X3QgZmluZFNjcmlwdEZvclZlcnRpY2FsR2x5
cGhTdWJzdGl0dXRpb24oaGJfZmFjZV90KiBmYWNlKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYXhDb3VudCA9IDMyOworCisgICAgdW5zaWduZWQgc2NyaXB0Q291bnQgPSBtYXhDb3Vu
dDsKKyAgICBoYl90YWdfdCBzY3JpcHRUYWdzW21heENvdW50XTsKKyAgICBoYl9vdF9sYXlvdXRf
dGFibGVfZ2V0X3NjcmlwdF90YWdzKGZhY2UsIEhCX09UX1RBR19HU1VCLCAwLCAmc2NyaXB0Q291
bnQsIHNjcmlwdFRhZ3MpOworICAgIGZvciAodW5zaWduZWQgc2NyaXB0SW5kZXggPSAwOyBzY3Jp
cHRJbmRleCA8IHNjcmlwdENvdW50OyArK3NjcmlwdEluZGV4KSB7CisgICAgICAgIHVuc2lnbmVk
IGxhbmd1YWdlQ291bnQgPSBtYXhDb3VudDsKKyAgICAgICAgaGJfdGFnX3QgbGFuZ3VhZ2VUYWdz
W21heENvdW50XTsKKyAgICAgICAgaGJfb3RfbGF5b3V0X3NjcmlwdF9nZXRfbGFuZ3VhZ2VfdGFn
cyhmYWNlLCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0SW5kZXgsIDAsICZsYW5ndWFnZUNvdW50LCBs
YW5ndWFnZVRhZ3MpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxhbmd1YWdlSW5kZXggPSAwOyBs
YW5ndWFnZUluZGV4IDwgbGFuZ3VhZ2VDb3VudDsgKytsYW5ndWFnZUluZGV4KSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBmZWF0dXJlSW5kZXg7CisgICAgICAgICAgICBpZiAoaGJfb3RfbGF5b3V0
X2xhbmd1YWdlX2ZpbmRfZmVhdHVyZShmYWNlLCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0SW5kZXgs
IGxhbmd1YWdlSW5kZXgsIEhhcmZCdXp6RmFjZTo6dmVydFRhZywgJmZlYXR1cmVJbmRleCkKKyAg
ICAgICAgICAgICAgICB8fCBoYl9vdF9sYXlvdXRfbGFuZ3VhZ2VfZmluZF9mZWF0dXJlKGZhY2Us
IEhCX09UX1RBR19HU1VCLCBzY3JpcHRJbmRleCwgbGFuZ3VhZ2VJbmRleCwgSGFyZkJ1enpGYWNl
Ojp2cnQyVGFnLCAmZmVhdHVyZUluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaGJfb3Rf
dGFnX3RvX3NjcmlwdChzY3JpcHRUYWdzW3NjcmlwdEluZGV4XSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIEhCX1NDUklQVF9JTlZBTElEOworfQorCit2b2lkIEhhcmZCdXp6RmFjZTo6
c2V0U2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihoYl9idWZmZXJfdCogYnVmZmVy
KQoreworICAgIGlmIChtX3NjcmlwdEZvclZlcnRpY2FsVGV4dCA9PSBIQl9TQ1JJUFRfSU5WQUxJ
RCkKKyAgICAgICAgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQgPSBmaW5kU2NyaXB0Rm9yVmVydGlj
YWxHbHlwaFN1YnN0aXR1dGlvbihtX2ZhY2UpOworICAgIGhiX2J1ZmZlcl9zZXRfc2NyaXB0KGJ1
ZmZlciwgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6ekZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6RmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzNzc2ZGMwN2E3OGMwMDZmZWM5MDI3MWQ1
ODI4NTljZGQwOGMyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuaApAQCAtMCwwICsxLDc1IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBIYXJmQnV6ekZhY2VfaAorI2RlZmluZSBIYXJmQnV6ekZhY2VfaAorCisjaW5jbHVkZSA8aGIu
aD4KKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworCitjbGFz
cyBIYXJmQnV6ekZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxIYXJmQnV6ekZhY2U+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3QgaGJfdGFnX3QgdmVydFRhZzsKKyAgICBzdGF0aWMgY29uc3Qg
aGJfdGFnX3QgdnJ0MlRhZzsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZCdXp6RmFjZT4g
Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgdWludDY0X3QgdW5pcXVlSUQp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhhcmZCdXp6RmFjZShwbGF0Zm9y
bURhdGEsIHVuaXF1ZUlEKSk7CisgICAgfQorICAgIH5IYXJmQnV6ekZhY2UoKTsKKworICAgIGhi
X2ZvbnRfdCogY3JlYXRlRm9udCgpOworCisgICAgdm9pZCBzZXRTY3JpcHRGb3JWZXJ0aWNhbEds
eXBoU3Vic3RpdHV0aW9uKGhiX2J1ZmZlcl90Kik7CisKK3ByaXZhdGU6CisgICAgSGFyZkJ1enpG
YWNlKEZvbnRQbGF0Zm9ybURhdGEqLCB1aW50NjRfdCk7CisKKyAgICBoYl9mYWNlX3QqIGNyZWF0
ZUZhY2UoKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEqIG1fcGxhdGZvcm1EYXRhOworICAgIHVp
bnQ2NF90IG1fdW5pcXVlSUQ7CisgICAgaGJfZmFjZV90KiBtX2ZhY2U7CisgICAgV1RGOjpIYXNo
TWFwPHVpbnQzMl90LCB1aW50MTZfdD4qIG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5Owor
CisgICAgaGJfc2NyaXB0X3QgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQ7Cit9OworCit9CisKKyNl
bmRpZiAvLyBIYXJmQnV6ekZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ2Fpcm8uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjJlYWEwOTI4N2U0MWZiNTMxZGEyOGY2OWM3NzNjMWY3OGI1ZTNjOWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6ekZhY2VDYWlyby5jcHAKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXJmQnV6
ekZhY2UuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDxjYWlyby1m
dC5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4K
KyNpbmNsdWRlIDxmcmVldHlwZS90dHRhYmxlcy5oPgorI2luY2x1ZGUgPGhiLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENh
aXJvRnRGYWNlTG9ja2VyIHsKK3B1YmxpYzoKKyAgICBDYWlyb0Z0RmFjZUxvY2tlcihjYWlyb19z
Y2FsZWRfZm9udF90KiBjYWlyb1NjYWxlZEZvbnQpIDogbV9zY2FsZWRGb250KGNhaXJvU2NhbGVk
Rm9udCkgeyB9OworICAgIEZUX0ZhY2UgbG9jaygpCisgICAgeworICAgICAgICByZXR1cm4gY2Fp
cm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1fc2NhbGVkRm9udCk7CisgICAgfTsKKyAgICB+
Q2Fpcm9GdEZhY2VMb2NrZXIoKQorICAgIHsKKyAgICAgICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRf
dW5sb2NrX2ZhY2UobV9zY2FsZWRGb250KTsKKyAgICB9Citwcml2YXRlOgorICAgIGNhaXJvX3Nj
YWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKK307CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGZs
b2F0VG9IYXJmQnV6elBvc2l0aW9uKGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2KSk7Cit9CisKK3N0YXRpYyBoYl9w
b3NpdGlvbl90IGRvdWJsZVRvSGFyZkJ1enpQb3NpdGlvbihkb3VibGUgdmFsdWUpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEgPDwgMTYpKTsKK30K
Kworc3RhdGljIHZvaWQgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhjYWlyb19zY2FsZWRf
Zm9udF90KiBzY2FsZWRGb250LCBoYl9jb2RlcG9pbnRfdCBjb2RlcG9pbnQsIGhiX3Bvc2l0aW9u
X3QqIGFkdmFuY2UsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cykKK3sKKyAgICBjYWlyb190
ZXh0X2V4dGVudHNfdCBnbHlwaEV4dGVudHM7CisgICAgY2Fpcm9fZ2x5cGhfdCBnbHlwaDsKKyAg
ICBnbHlwaC5pbmRleCA9IGNvZGVwb2ludDsKKyAgICBnbHlwaC54ID0gMDsKKyAgICBnbHlwaC55
ID0gMDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKHNjYWxlZEZvbnQsICZn
bHlwaCwgMSwgJmdseXBoRXh0ZW50cyk7CisKKyAgICBpZiAoYWR2YW5jZSkKKyAgICAgICAgKmFk
dmFuY2UgPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZ2x5cGhFeHRlbnRzLnhfYWR2YW5jZSk7
CisgICAgaWYgKGV4dGVudHMpIHsKKyAgICAgICAgZXh0ZW50cy0+eF9iZWFyaW5nID0gZG91Ymxl
VG9IYXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50cy54X2JlYXJpbmcpOworICAgICAgICBleHRl
bnRzLT55X2JlYXJpbmcgPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZ2x5cGhFeHRlbnRzLnlf
YmVhcmluZyk7CisgICAgICAgIGV4dGVudHMtPndpZHRoID0gZG91YmxlVG9IYXJmQnV6elBvc2l0
aW9uKGdseXBoRXh0ZW50cy53aWR0aCk7CisgICAgICAgIGV4dGVudHMtPmhlaWdodCA9IGRvdWJs
ZVRvSGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMuaGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0
YXRpYyBoYl9ib29sX3QgaGFyZkJ1enpHZXRHbHlwaChoYl9mb250X3QqLCB2b2lkKiBmb250RGF0
YSwgaGJfY29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QsIGhiX2NvZGVwb2ludF90
KiBnbHlwaCwgdm9pZCopCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0g
cmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpOworICAgIGNhaXJv
X3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKTsK
KyAgICBBU1NFUlQoc2NhbGVkRm9udCk7CisKKyAgICBjYWlyb19nbHlwaF90KiBnbHlwaHMgPSAw
OworICAgIGludCBudW1HbHlwaHMgPSAwOworICAgIENTdHJpbmcgdXRmOENvZGVwb2ludCA9IFVU
RjhFbmNvZGluZygpLmVuY29kZShyZWludGVycHJldF9jYXN0PFVDaGFyKj4oJnVuaWNvZGUpLCAx
LCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBpZiAoQ0FJUk9fU1RBVFVTX1NV
Q0NFU1MgIT0gY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF90b19nbHlwaHMoc2NhbGVkRm9udCwgMCwg
MCwgdXRmOENvZGVwb2ludC5kYXRhKCksIHV0ZjhDb2RlcG9pbnQubGVuZ3RoKCksICZnbHlwaHMs
ICZudW1HbHlwaHMsIDAsIDAsIDApKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFu
dW1HbHlwaHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqZ2x5cGggPSBnbHlwaHNbMF0u
aW5kZXg7CisgICAgY2Fpcm9fZ2x5cGhfZnJlZShnbHlwaHMpOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgaGJfcG9zaXRpb25fdCBoYXJmQnV6ekdldEdseXBoSG9yaXpvbnRhbEFkdmFu
Y2UoaGJfZm9udF90Kiwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lk
KikKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSByZWludGVycHJldF9j
YXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
dCogc2NhbGVkRm9udCA9IHBsYXRmb3JtRGF0YS0+c2NhbGVkRm9udCgpOworICAgIEFTU0VSVChz
Y2FsZWRGb250KTsKKworICAgIGhiX3Bvc2l0aW9uX3QgYWR2YW5jZSA9IDA7CisgICAgQ2Fpcm9H
ZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhzY2FsZWRGb250LCBnbHlwaCwgJmFkdmFuY2UsIDApOwor
ICAgIHJldHVybiBhZHZhbmNlOworfQorCitzdGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0R2x5
cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCosIHZvaWQqLCBoYl9jb2RlcG9pbnRfdCwgaGJf
cG9zaXRpb25fdCosIGhiX3Bvc2l0aW9uX3QqLCB2b2lkKikKK3sKKyAgICAvLyBKdXN0IHJldHVy
biB0cnVlLCBmb2xsb3dpbmcgdGhlIHdheSB0aGF0IEhhcmZidXp6LUZyZWVUeXBlCisgICAgLy8g
aW1wbGVtZW50YXRpb24gZG9lcy4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2Jv
b2xfdCBoYXJmQnV6ekdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqLCB2b2lkKiBmb250RGF0YSwg
aGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cywgdm9pZCop
Cit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpOworICAgIGNhaXJvX3NjYWxlZF9mb250X3Qq
IHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKTsKKyAgICBBU1NFUlQoc2Nh
bGVkRm9udCk7CisKKyAgICBDYWlyb0dldEdseXBoV2lkdGhBbmRFeHRlbnRzKHNjYWxlZEZvbnQs
IGdseXBoLCAwLCBleHRlbnRzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2Zv
bnRfZnVuY3NfdCogaGFyZkJ1enpDYWlyb1RleHRHZXRGb250RnVuY3MoKQoreworICAgIHN0YXRp
YyBoYl9mb250X2Z1bmNzX3QqIGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MgPSAwOworCisgICAgLy8g
V2UgZG9uJ3Qgc2V0IGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCB3ZSBjYW4ndCBzdXBwb3J0Lgor
ICAgIC8vIEhhcmZidXp6IHdpbGwgdXNlIHRoZSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpZiB0
aGV5IGFyZW4ndCBzZXQuCisgICAgaWYgKCFoYXJmQnV6ekNhaXJvRm9udEZ1bmNzKSB7CisgICAg
ICAgIGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MgPSBoYl9mb250X2Z1bmNzX2NyZWF0ZSgpOworICAg
ICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3Ms
IGhhcmZCdXp6R2V0R2x5cGgsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlw
aF9oX2FkdmFuY2VfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJmQnV6ekdldEdseXBo
SG9yaXpvbnRhbEFkdmFuY2UsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlw
aF9oX29yaWdpbl9mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MsIGhhcmZCdXp6R2V0R2x5cGhI
b3Jpem9udGFsT3JpZ2luLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhf
ZXh0ZW50c19mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MsIGhhcmZCdXp6R2V0R2x5cGhFeHRl
bnRzLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJsZShoYXJmQnV6
ekNhaXJvRm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZCdXp6Q2Fpcm9Gb250RnVu
Y3M7Cit9CisKK3N0YXRpYyBoYl9ibG9iX3QqIGhhcmZCdXp6Q2Fpcm9HZXRUYWJsZShoYl9mYWNl
X3QqLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIGNhaXJvX3NjYWxlZF9m
b250X3QqIHNjYWxlZEZvbnQgPSByZWludGVycHJldF9jYXN0PGNhaXJvX3NjYWxlZF9mb250X3Qq
Pih1c2VyRGF0YSk7CisgICAgaWYgKCFzY2FsZWRGb250KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIENhaXJvRnRGYWNlTG9ja2VyIGNhaXJvRnRGYWNlTG9ja2VyKHNjYWxlZEZvbnQpOworICAg
IEZUX0ZhY2UgZnRGb250ID0gY2Fpcm9GdEZhY2VMb2NrZXIubG9jaygpOworICAgIGlmICghZnRG
b250KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZUX1VMb25nIHRhYmxlU2l6ZSA9IDA7Cisg
ICAgRlRfRXJyb3IgZXJyb3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUoZnRGb250LCB0YWcsIDAsIDAs
ICZ0YWJsZVNpemUpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBG
VF9CeXRlKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PEZUX0J5dGUqPihmYXN0TWFsbG9jKHRh
YmxlU2l6ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBGVF9V
TG9uZyBleHBlY3RlZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZTsKKyAgICBlcnJvciA9IEZUX0xvYWRf
U2ZudF9UYWJsZShmdEZvbnQsIHRhZywgMCwgYnVmZmVyLCAmdGFibGVTaXplKTsKKyAgICBpZiAo
ZXJyb3IgfHwgdGFibGVTaXplICE9IGV4cGVjdGVkVGFibGVTaXplKSB7CisgICAgICAgIGZhc3RG
cmVlKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBoYl9i
bG9iX2NyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCB0YWJsZVNp
emUsIEhCX01FTU9SWV9NT0RFX1dSSVRBQkxFLCBidWZmZXIsIGZhc3RGcmVlKTsKK30KKworaGJf
ZmFjZV90KiBIYXJmQnV6ekZhY2U6OmNyZWF0ZUZhY2UoKQoreworICAgIGhiX2ZhY2VfdCogZmFj
ZSA9IGhiX2ZhY2VfY3JlYXRlX2Zvcl90YWJsZXMoaGFyZkJ1enpDYWlyb0dldFRhYmxlLCBtX3Bs
YXRmb3JtRGF0YS0+c2NhbGVkRm9udCgpLCAwKTsKKyAgICBBU1NFUlQoZmFjZSk7CisgICAgcmV0
dXJuIGZhY2U7Cit9CisKK2hiX2ZvbnRfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KCkKK3sK
KyAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOworICAgIGhiX2Zv
bnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZCdXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKCksIG1fcGxh
dGZvcm1EYXRhLCAwKTsKKyAgICBjb25zdCBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEtPnNp
emUoKTsKKyAgICBpZiAoZmxvb3JmKHNpemUpID09IHNpemUpCisgICAgICAgIGhiX2ZvbnRfc2V0
X3BwZW0oZm9udCwgc2l6ZSwgc2l6ZSk7CisgICAgaW50IHNjYWxlID0gZmxvYXRUb0hhcmZCdXp6
UG9zaXRpb24oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUsIHNjYWxl
KTsKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAgIHJldHVybiBmb250Owor
fQorCitHbHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVy
QWR2YW5jZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJldHVybiBHbHlwaEJ1
ZmZlckFkdmFuY2Uod2lkdGgsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6RmFjZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OGRiZGI3MTBj
MmYxYTE0NTkwN2VhZGFmMmUwN2M1YjQ0ODU0ZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ29yZVRleHQu
Y3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZC
dXp6RmFjZS5oIgorCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIkhh
cmZCdXp6U2hhcGVyLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUg
ImhiLmgiCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2Vz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgZmxvYXRU
b0hhcmZCdXp6UG9zaXRpb24oQ0dGbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aGJfcG9zaXRpb25fdD4odmFsdWUgKiAoMSA8PCAxNikpOworfQorCitzdGF0aWMgaGJfYm9v
bF90IGdldEdseXBoKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBv
aW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QgdmFyaWF0aW9uU2VsZWN0b3IsIGhiX2NvZGVw
b2ludF90KiBnbHlwaCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7
CisgICAgVW5pQ2hhciBjaGFyYWN0ZXJzWzRdOworICAgIENHR2x5cGggY2dHbHlwaHNbNF07Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IDA7CisgICAgVTE2X0FQUEVORF9VTlNBRkUoY2hhcmFjdGVycywg
bGVuZ3RoLCB1bmljb2RlKTsKKyAgICBpZiAoIUNURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMo
Y3RGb250LCBjaGFyYWN0ZXJzLCBjZ0dseXBocywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICpnbHlwaCA9IGNnR2x5cGhzWzBdOworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgaGJfcG9zaXRpb25fdCBnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCog
aGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIHZvaWQqIHVzZXJE
YXRhKQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0
Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgpOworICAgIENHR2x5cGggY2dHbHlwaCA9IGds
eXBoOworICAgIENHRmxvYXQgYWR2YW5jZSA9IENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKGN0
Rm9udCwga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmNnR2x5cGgsIDAsIDEpOworICAg
IHJldHVybiBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihhZHZhbmNlKTsKK30KKworc3RhdGljIGhi
X2Jvb2xfdCBnZXRHbHlwaEhvcml6b250YWxPcmlnaW4oaGJfZm9udF90KiBoYkZvbnQsIHZvaWQq
IGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJfcG9zaXRpb25fdCogeCwgaGJfcG9z
aXRpb25fdCogeSwgdm9pZCogdXNlckRhdGEpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBm
b250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50
cywgdm9pZCogdXNlckRhdGEpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKS0+Y3RGb250KCk7CisgICAgQ0dSZWN0
IGNnUmVjdDsKKyAgICBDR0dseXBoIGNnR2x5cGggPSBnbHlwaDsKKyAgICBpZiAoQ1RGb250R2V0
Qm91bmRpbmdSZWN0c0ZvckdseXBocyhjdEZvbnQsIGtDVEZvbnREZWZhdWx0T3JpZW50YXRpb24s
ICZjZ0dseXBoLCAmY2dSZWN0LCAxKSA9PSBDR1JlY3ROdWxsKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZXh0ZW50cy0+eF9iZWFyaW5nID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dS
ZWN0Lm9yaWdpbi54KTsKKyAgICBleHRlbnRzLT55X2JlYXJpbmcgPSAtZmxvYXRUb0hhcmZCdXp6
UG9zaXRpb24oY2dSZWN0Lm9yaWdpbi55KTsKKyAgICBleHRlbnRzLT53aWR0aCA9IGZsb2F0VG9I
YXJmQnV6elBvc2l0aW9uKGNnUmVjdC5zaXplLndpZHRoKTsKKyAgICBleHRlbnRzLT5oZWlnaHQg
PSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS5oZWlnaHQpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNvcmVUZXh0R2V0
Rm9udEZ1bmNzKCkKK3sKKyAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmQnV6ekNvcmVU
ZXh0Rm9udEZ1bmNzID0gMDsKKworICAgIGlmICghaGFyZkJ1enpDb3JlVGV4dEZvbnRGdW5jcykg
eworICAgICAgICBoYXJmQnV6ekNvcmVUZXh0Rm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19jcmVh
dGUoKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmQnV6ekNvcmVU
ZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaCwgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0
X2dseXBoX2hfYWR2YW5jZV9mdW5jKGhhcmZCdXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBo
SG9yaXpvbnRhbEFkdmFuY2UsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlw
aF9oX29yaWdpbl9mdW5jKGhhcmZCdXp6Q29yZVRleHRGb250RnVuY3MsIGdldEdseXBoSG9yaXpv
bnRhbE9yaWdpbiwgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2V4dGVu
dHNfZnVuYyhoYXJmQnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEV4dGVudHMsIDAsIDAp
OworICAgICAgICBoYl9mb250X2Z1bmNzX21ha2VfaW1tdXRhYmxlKGhhcmZCdXp6Q29yZVRleHRG
b250RnVuY3MpOworICAgIH0KKyAgICByZXR1cm4gaGFyZkJ1enpDb3JlVGV4dEZvbnRGdW5jczsK
K30KKworc3RhdGljIHZvaWQgcmVsZWFzZVRhYmxlRGF0YSh2b2lkKiB1c2VyRGF0YSkKK3sKKyAg
ICBDRkRhdGFSZWYgY2ZEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KHVzZXJEYXRh
KTsKKyAgICBDRlJlbGVhc2UoY2ZEYXRhKTsKK30KKworc3RhdGljIGhiX2Jsb2JfdCogaGFyZkJ1
enpDb3JlVGV4dEdldFRhYmxlKGhiX2ZhY2VfdCogZmFjZSwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1
c2VyRGF0YSkKK3sKKyAgICBDR0ZvbnRSZWYgY2dGb250ID0gcmVpbnRlcnByZXRfY2FzdDxDR0Zv
bnRSZWY+KHVzZXJEYXRhKTsKKyAgICBDRkRhdGFSZWYgY2ZEYXRhID0gQ0dGb250Q29weVRhYmxl
Rm9yVGFnKGNnRm9udCwgdGFnKTsKKyAgICBpZiAoIWNmRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
Q0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpKTsKKyAgICBjb25zdCBzaXplX3QgbGVuZ3RoID0gQ0ZE
YXRhR2V0TGVuZ3RoKGNmRGF0YSk7CisgICAgaWYgKCFkYXRhIHx8ICFsZW5ndGgpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBoYl9ibG9iX2NyZWF0ZShkYXRhLCBsZW5ndGgsIEhCX01F
TU9SWV9NT0RFX1JFQURPTkxZLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb25zdF9jYXN0PF9f
Q0ZEYXRhKj4oY2ZEYXRhKSksIHJlbGVhc2VUYWJsZURhdGEpOworfQorCitoYl9mYWNlX3QqIEhh
cmZCdXp6RmFjZTo6Y3JlYXRlRmFjZSgpCit7CisgICAgLy8gSXQgc2VlbXMgdGhhdCBDVEZvbnRD
b3B5VGFibGUgb2YgTWFjT1NYMTAuNSBzZGsgZG9lc24ndCB3b3JrIGZvcgorICAgIC8vIE9wZW5U
eXBlIGxheW91dCB0YWJsZXMoR0RFRiwgR1NVQiwgR1BPUykuIFVzZSBDR0ZvbnRDb3B5VGFibGVG
b3JUYWcgaW5zdGVhZC4KKyAgICBoYl9mYWNlX3QqIGZhY2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3Jf
dGFibGVzKGhhcmZCdXp6Q29yZVRleHRHZXRUYWJsZSwgbV9wbGF0Zm9ybURhdGEtPmNnRm9udCgp
LCAwKTsKKyAgICBBU1NFUlQoZmFjZSk7CisgICAgcmV0dXJuIGZhY2U7Cit9CisKK2hiX2ZvbnRf
dCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KCkKK3sKKyAgICBoYl9mb250X3QqIGZvbnQgPSBo
Yl9mb250X2NyZWF0ZShtX2ZhY2UpOworICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZC
dXp6Q29yZVRleHRHZXRGb250RnVuY3MoKSwgbV9wbGF0Zm9ybURhdGEsIDApOworICAgIGNvbnN0
IGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS0+bV9zaXplOworICAgIGhiX2ZvbnRfc2V0X3Bw
ZW0oZm9udCwgc2l6ZSwgc2l6ZSk7CisgICAgY29uc3QgaW50IHNjYWxlID0gKDEgPDwgMTYpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplKTsKKyAgICBoYl9mb250X3NldF9zY2FsZShmb250LCBzY2Fs
ZSwgc2NhbGUpOworICAgIGhiX2ZvbnRfbWFrZV9pbW11dGFibGUoZm9udCk7CisgICAgcmV0dXJu
IGZvbnQ7Cit9CisKK0dseXBoQnVmZmVyQWR2YW5jZSBIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5
cGhCdWZmZXJBZHZhbmNlKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7CisgICAgcmV0dXJu
IENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6RmFjZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpGYWNlU2tpYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzNhZDZhYTQxODQ1ZWU5Y2Jk
ZmE4YzQ5YjgxNWNmNzZmZWZmNjM0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZVNraWEuY3BwCkBAIC0wLDAg
KzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgor
CisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CisjaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgorI2luY2x1ZGUgIlNrRm9udEhvc3QuaCIKKyNpbmNsdWRlICJTa1BhaW50LmgiCisjaW5jbHVk
ZSAiU2tQYXRoLmgiCisjaW5jbHVkZSAiU2tQb2ludC5oIgorI2luY2x1ZGUgIlNrUmVjdC5oIgor
I2luY2x1ZGUgIlNrVXRpbHMuaCIKKworI2luY2x1ZGUgImhiLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBPdXIgaW1wbGVtZW50YXRpb24g
b2YgdGhlIGNhbGxiYWNrcyB3aGljaCBIYXJmYnV6eiByZXF1aXJlcyBieSB1c2luZyBTa2lhCisv
LyBjYWxscy4gU2VlIHRoZSBIYXJmYnV6eiBzb3VyY2UgZm9yIHJlZmVyZW5jZXMgYWJvdXQgd2hh
dCB0aGVzZSBjYWxsYmFja3MgZG8uCisKK3N0cnVjdCBIYXJmQnV6ekZvbnREYXRhIHsKKyAgICBI
YXJmQnV6ekZvbnREYXRhKFdURjo6SGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+KiBnbHlwaENh
Y2hlRm9yRmFjZUNhY2hlRW50cnkpCisgICAgICAgIDogbV9nbHlwaENhY2hlRm9yRmFjZUNhY2hl
RW50cnkoZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5KQorICAgIHsgfQorICAgIFNrUGFpbnQg
bV9wYWludDsKKyAgICBXVEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogbV9nbHlwaENh
Y2hlRm9yRmFjZUNhY2hlRW50cnk7Cit9OworCitzdGF0aWMgaGJfcG9zaXRpb25fdCBTa2lhU2Nh
bGFyVG9IYXJmQnV6elBvc2l0aW9uKFNrU2NhbGFyIHZhbHVlKQoreworICAgIHJldHVybiBTa1Nj
YWxhclRvRml4ZWQodmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBTa2lhR2V0R2x5cGhXaWR0aEFu
ZEV4dGVudHMoU2tQYWludCogcGFpbnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2ludCwgaGJfcG9z
aXRpb25fdCogd2lkdGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cykKK3sKKyAgICBBU1NF
UlQoY29kZXBvaW50IDw9IDB4RkZGRik7CisgICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1Bh
aW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworCisgICAgU2tTY2FsYXIgc2tXaWR0aDsKKyAg
ICBTa1JlY3Qgc2tCb3VuZHM7CisgICAgdWludDE2X3QgZ2x5cGggPSBjb2RlcG9pbnQ7CisKKyAg
ICBwYWludC0+Z2V0VGV4dFdpZHRocygmZ2x5cGgsIHNpemVvZihnbHlwaCksICZza1dpZHRoLCAm
c2tCb3VuZHMpOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gU2tpYVNjYWxhclRv
SGFyZkJ1enpQb3NpdGlvbihza1dpZHRoKTsKKyAgICBpZiAoZXh0ZW50cykgeworICAgICAgICAv
LyBJbnZlcnQgeS1heGlzIGJlY2F1c2UgU2tpYSBpcyB5LWdyb3dzLWRvd24gYnV0IHdlIHNldCB1
cCBIYXJmQnV6eiB0byBiZSB5LWdyb3dzLXVwLgorICAgICAgICBleHRlbnRzLT54X2JlYXJpbmcg
PSBTa2lhU2NhbGFyVG9IYXJmQnV6elBvc2l0aW9uKHNrQm91bmRzLmZMZWZ0KTsKKyAgICAgICAg
ZXh0ZW50cy0+eV9iZWFyaW5nID0gU2tpYVNjYWxhclRvSGFyZkJ1enpQb3NpdGlvbigtc2tCb3Vu
ZHMuZlRvcCk7CisgICAgICAgIGV4dGVudHMtPndpZHRoID0gU2tpYVNjYWxhclRvSGFyZkJ1enpQ
b3NpdGlvbihza0JvdW5kcy53aWR0aCgpKTsKKyAgICAgICAgZXh0ZW50cy0+aGVpZ2h0ID0gU2tp
YVNjYWxhclRvSGFyZkJ1enpQb3NpdGlvbigtc2tCb3VuZHMuaGVpZ2h0KCkpOworICAgIH0KK30K
Kworc3RhdGljIGhiX2Jvb2xfdCBoYXJmQnV6ekdldEdseXBoKGhiX2ZvbnRfdCogaGJGb250LCB2
b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QgdmFy
aWF0aW9uU2VsZWN0b3IsIGhiX2NvZGVwb2ludF90KiBnbHlwaCwgdm9pZCogdXNlckRhdGEpCit7
CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFy
ZkJ1enpGb250RGF0YSo+KGZvbnREYXRhKTsKKworICAgIFdURjo6SGFzaE1hcDx1aW50MzJfdCwg
dWludDE2X3Q+OjpBZGRSZXN1bHQgcmVzdWx0ID0gaGJGb250RGF0YS0+bV9nbHlwaENhY2hlRm9y
RmFjZUNhY2hlRW50cnktPmFkZCh1bmljb2RlLCAwKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKKyAgICAgICAgU2tQYWludCogcGFpbnQgPSAmaGJGb250RGF0YS0+bV9wYWludDsKKyAg
ICAgICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMzJfVGV4dEVuY29kaW5n
KTsKKyAgICAgICAgdWludDE2X3QgZ2x5cGgxNjsKKyAgICAgICAgcGFpbnQtPnRleHRUb0dseXBo
cygmdW5pY29kZSwgc2l6ZW9mKGhiX2NvZGVwb2ludF90KSwgJmdseXBoMTYpOworICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZ2x5cGgxNjsKKyAgICAgICAgKmdseXBoID0gZ2x5cGgx
NjsKKyAgICB9CisgICAgKmdseXBoID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICByZXR1
cm4gISEqZ2x5cGg7Cit9CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGhhcmZCdXp6R2V0R2x5cGhI
b3Jpem9udGFsQWR2YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2Nv
ZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBIYXJmQnV6ekZvbnREYXRh
KiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4oZm9udERh
dGEpOworICAgIGhiX3Bvc2l0aW9uX3QgYWR2YW5jZSA9IDA7CisKKyAgICBTa2lhR2V0R2x5cGhX
aWR0aEFuZEV4dGVudHMoJmhiRm9udERhdGEtPm1fcGFpbnQsIGdseXBoLCAmYWR2YW5jZSwgMCk7
CisgICAgcmV0dXJuIGFkdmFuY2U7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QgaGFyZkJ1enpHZXRH
bHlwaEhvcml6b250YWxPcmlnaW4oaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBo
Yl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJfcG9zaXRpb25fdCogeCwgaGJfcG9zaXRpb25fdCogeSwg
dm9pZCogdXNlckRhdGEpCit7CisgICAgLy8gSnVzdCByZXR1cm4gdHJ1ZSwgZm9sbG93aW5nIHRo
ZSB3YXkgdGhhdCBIYXJmYnV6ei1GcmVlVHlwZQorICAgIC8vIGltcGxlbWVudGF0aW9uIGRvZXMu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QgaGFyZkJ1enpHZXRHbHlw
aEV4dGVudHMoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRf
dCBnbHlwaCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzLCB2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJm
QnV6ekZvbnREYXRhKj4oZm9udERhdGEpOworCisgICAgU2tpYUdldEdseXBoV2lkdGhBbmRFeHRl
bnRzKCZoYkZvbnREYXRhLT5tX3BhaW50LCBnbHlwaCwgMCwgZXh0ZW50cyk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZCdXp6U2tpYUdldEZvbnRG
dW5jcygpCit7CisgICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZkJ1enpTa2lhRm9udEZ1
bmNzID0gMDsKKworICAgIC8vIFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2gg
d2UgY2FuJ3Qgc3VwcG9ydC4KKyAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFsbGJhY2sg
aW1wbGVtZW50YXRpb24gaWYgdGhleSBhcmVuJ3Qgc2V0LgorICAgIGlmICghaGFyZkJ1enpTa2lh
Rm9udEZ1bmNzKSB7CisgICAgICAgIGhhcmZCdXp6U2tpYUZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVu
Y3NfY3JlYXRlKCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMoaGFyZkJ1
enpTa2lhRm9udEZ1bmNzLCBoYXJmQnV6ekdldEdseXBoLCAwLCAwKTsKKyAgICAgICAgaGJfZm9u
dF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZkJ1enpTa2lhRm9udEZ1bmNzLCBo
YXJmQnV6ekdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UsIDAsIDApOworICAgICAgICBoYl9mb250
X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9mdW5jKGhhcmZCdXp6U2tpYUZvbnRGdW5jcywgaGFy
ZkJ1enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICBoYl9mb250X2Z1
bmNzX3NldF9nbHlwaF9leHRlbnRzX2Z1bmMoaGFyZkJ1enpTa2lhRm9udEZ1bmNzLCBoYXJmQnV6
ekdldEdseXBoRXh0ZW50cywgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11
dGFibGUoaGFyZkJ1enpTa2lhRm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZCdXp6
U2tpYUZvbnRGdW5jczsKK30KKworc3RhdGljIGhiX2Jsb2JfdCogaGFyZkJ1enpTa2lhR2V0VGFi
bGUoaGJfZmFjZV90KiBmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQoreworICAg
IFNrRm9udElEIHVuaXF1ZUlEID0gc3RhdGljX2Nhc3Q8U2tGb250SUQ+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDY0X3Q+KHVzZXJEYXRhKSk7CisKKyAgICBjb25zdCBzaXplX3QgdGFibGVTaXplID0g
U2tGb250SG9zdDo6R2V0VGFibGVTaXplKHVuaXF1ZUlELCB0YWcpOworICAgIGlmICghdGFibGVT
aXplKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNoYXIqIGJ1ZmZlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2ModGFibGVTaXplKSk7CisgICAgaWYgKCFidWZmZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHNpemVfdCBhY3R1YWxTaXplID0gU2tGb250SG9zdDo6R2V0
VGFibGVEYXRhKHVuaXF1ZUlELCB0YWcsIDAsIHRhYmxlU2l6ZSwgYnVmZmVyKTsKKyAgICBpZiAo
dGFibGVTaXplICE9IGFjdHVhbFNpemUpIHsKKyAgICAgICAgZmFzdEZyZWUoYnVmZmVyKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIGhiX2Jsb2JfY3JlYXRlKGNvbnN0
X2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIHRhYmxlU2l6ZSwgSEJfTUVNT1JZX01PREVfV1JJVEFCTEUs
IGJ1ZmZlciwgZmFzdEZyZWUpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95SGFyZkJ1enpGb250
RGF0YSh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4odXNlckRhdGEpOworICAgIGRl
bGV0ZSBoYkZvbnREYXRhOworfQorCitoYl9mYWNlX3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRmFj
ZSgpCit7CisgICAgaGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyho
YXJmQnV6elNraWFHZXRUYWJsZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9wbGF0Zm9ybURh
dGEtPnVuaXF1ZUlEKCkpLCAwKTsKKyAgICBBU1NFUlQoZmFjZSk7CisgICAgcmV0dXJuIGZhY2U7
Cit9CisKK2hiX2ZvbnRfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KCkKK3sKKyAgICBIYXJm
QnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gbmV3IEhhcmZCdXp6Rm9udERhdGEobV9nbHlwaENh
Y2hlRm9yRmFjZUNhY2hlRW50cnkpOworICAgIG1fcGxhdGZvcm1EYXRhLT5zZXR1cFBhaW50KCZo
YkZvbnREYXRhLT5tX3BhaW50KTsKKyAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0
ZShtX2ZhY2UpOworICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZCdXp6U2tpYUdldEZv
bnRGdW5jcygpLCBoYkZvbnREYXRhLCBkZXN0cm95SGFyZkJ1enpGb250RGF0YSk7CisgICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLT5zaXplKCk7CisgICAgaW50IHNjYWxlID0gU2tpYVNj
YWxhclRvSGFyZmJ1enpQb3NpdGlvbihzaXplKTsKKyAgICBoYl9mb250X3NldF9zY2FsZShmb250
LCBzY2FsZSwgc2NhbGUpOworICAgIGhiX2ZvbnRfbWFrZV9pbW11dGFibGUoZm9udCk7CisgICAg
cmV0dXJuIGZvbnQ7Cit9CisKK0dseXBoQnVmZmVyQWR2YW5jZSBIYXJmQnV6elNoYXBlcjo6Y3Jl
YXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7CisgICAg
cmV0dXJuIEdseXBoQnVmZmVyQWR2YW5jZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2ZDEzZjE0
NjQ1NTQyZWE2MzkyZjRjNjM2ZGVhY2RhN2I5YmRkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAK
QEAgLTAsMCArMSw1NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1enpT
aGFwZXIuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIK
KyNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJU
ZXh0UnVuLmgiCisjaW5jbHVkZSAiaGItaWN1LmgiCisjaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpy
Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNv
ZGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgSGFyZkJ1enpTY29wZWRQdHIgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoKkRlc3Ry
b3lGdW5jdGlvbikoVCopOworCisgICAgSGFyZkJ1enpTY29wZWRQdHIoVCogcHRyLCBEZXN0cm95
RnVuY3Rpb24gZGVzdHJveSkKKyAgICAgICAgOiBtX3B0cihwdHIpCisgICAgICAgICwgbV9kZXN0
cm95KGRlc3Ryb3kpCisgICAgeworICAgICAgICBBU1NFUlQobV9kZXN0cm95KTsKKyAgICB9Cisg
ICAgfkhhcmZCdXp6U2NvcGVkUHRyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3B0cikKKyAgICAg
ICAgICAgICgqbV9kZXN0cm95KShtX3B0cik7CisgICAgfQorCisgICAgVCogZ2V0KCkgeyByZXR1
cm4gbV9wdHI7IH0KK3ByaXZhdGU6CisgICAgVCogbV9wdHI7CisgICAgRGVzdHJveUZ1bmN0aW9u
IG1fZGVzdHJveTsKK307CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgaGFyZkJ1enpQb3NpdGlvblRv
RmxvYXQoaGJfcG9zaXRpb25fdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHZhbHVlKSAvICgxIDw8IDE2KTsKK30KKworSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVu
OjpIYXJmQnV6elJ1bihjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIHN0
YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
LCBoYl9zY3JpcHRfdCBzY3JpcHQpCisgICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQorICAgICwg
bV9zdGFydEluZGV4KHN0YXJ0SW5kZXgpCisgICAgLCBtX251bUNoYXJhY3RlcnMobnVtQ2hhcmFj
dGVycykKKyAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKKyAgICAsIG1fc2NyaXB0KHNjcmlw
dCkKK3sKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFwcGx5U2hhcGVS
ZXN1bHQoaGJfYnVmZmVyX3QqIGhhcmZCdXp6QnVmZmVyKQoreworICAgIG1fbnVtR2x5cGhzID0g
aGJfYnVmZmVyX2dldF9sZW5ndGgoaGFyZkJ1enpCdWZmZXIpOworICAgIG1fZ2x5cGhzLnJlc2l6
ZShtX251bUdseXBocyk7CisgICAgbV9hZHZhbmNlcy5yZXNpemUobV9udW1HbHlwaHMpOworICAg
IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMucmVzaXplKG1fbnVtR2x5cGhzKTsKKyAgICBtX29m
ZnNldHMucmVzaXplKG1fbnVtR2x5cGhzKTsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGluZGV4LCB1aW50MTZfdCBn
bHlwaElkLCBmbG9hdCBhZHZhbmNlLCBmbG9hdCBvZmZzZXRYLCBmbG9hdCBvZmZzZXRZKQorewor
ICAgIG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoSWQ7CisgICAgbV9hZHZhbmNlc1tpbmRleF0gPSBh
ZHZhbmNlOworICAgIG1fb2Zmc2V0c1tpbmRleF0gPSBGbG9hdFBvaW50KG9mZnNldFgsIG9mZnNl
dFkpOworfQorCitpbnQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRl
eEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKQoreworICAgIEFTU0VSVCh0YXJnZXRYIDw9IG1f
d2lkdGgpOworICAgIGZsb2F0IGN1cnJlbnRYID0gMDsKKyAgICBmbG9hdCBjdXJyZW50QWR2YW5j
ZSA9IG1fYWR2YW5jZXNbMF07CisgICAgdW5zaWduZWQgZ2x5cGhJbmRleCA9IDA7CisKKyAgICAv
LyBTdW0gdXAgYWR2YW5jZXMgdGhhdCBiZWxvbmcgdG8gYSBjaGFyYWN0ZXIuCisgICAgd2hpbGUg
KGdseXBoSW5kZXggPCBtX251bUdseXBocyAtIDEgJiYgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhl
c1tnbHlwaEluZGV4XSA9PSBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXggKyAx
XSkKKyAgICAgICAgY3VycmVudEFkdmFuY2UgKz0gbV9hZHZhbmNlc1srK2dseXBoSW5kZXhdOwor
ICAgIGN1cnJlbnRBZHZhbmNlID0gY3VycmVudEFkdmFuY2UgLyAyLjA7CisgICAgaWYgKHRhcmdl
dFggPD0gY3VycmVudEFkdmFuY2UpCisgICAgICAgIHJldHVybiBydGwoKSA/IG1fbnVtQ2hhcmFj
dGVycyA6IDA7CisKKyAgICArK2dseXBoSW5kZXg7CisgICAgd2hpbGUgKGdseXBoSW5kZXggPCBt
X251bUdseXBocykgeworICAgICAgICB1bnNpZ25lZCBwcmV2Q2hhcmFjdGVySW5kZXggPSBtX2ds
eXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXggLSAxXTsKKyAgICAgICAgZmxvYXQgcHJl
dkFkdmFuY2UgPSBjdXJyZW50QWR2YW5jZTsKKyAgICAgICAgY3VycmVudEFkdmFuY2UgPSBtX2Fk
dmFuY2VzW2dseXBoSW5kZXhdOworICAgICAgICB3aGlsZSAoZ2x5cGhJbmRleCA8IG1fbnVtR2x5
cGhzIC0gMSAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXhdID09IG1fZ2x5
cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRleCArIDFdKQorICAgICAgICAgICAgY3VycmVu
dEFkdmFuY2UgKz0gbV9hZHZhbmNlc1srK2dseXBoSW5kZXhdOworICAgICAgICBjdXJyZW50QWR2
YW5jZSA9IGN1cnJlbnRBZHZhbmNlIC8gMi4wOworICAgICAgICBmbG9hdCBuZXh0WCA9IGN1cnJl
bnRYICsgcHJldkFkdmFuY2UgKyBjdXJyZW50QWR2YW5jZTsKKyAgICAgICAgaWYgKGN1cnJlbnRY
IDw9IHRhcmdldFggJiYgdGFyZ2V0WCA8PSBuZXh0WCkKKyAgICAgICAgICAgIHJldHVybiBydGwo
KSA/IHByZXZDaGFyYWN0ZXJJbmRleCA6IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJ
bmRleF07CisgICAgICAgIGN1cnJlbnRYID0gbmV4dFg7CisgICAgICAgIHByZXZBZHZhbmNlID0g
Y3VycmVudEFkdmFuY2U7CisgICAgICAgICsrZ2x5cGhJbmRleDsKKyAgICB9CisKKyAgICByZXR1
cm4gcnRsKCkgPyAwIDogbV9udW1DaGFyYWN0ZXJzOworfQorCitmbG9hdCBIYXJmQnV6elNoYXBl
cjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCit7Cisg
ICAgQVNTRVJUKG9mZnNldCA8IG1fbnVtQ2hhcmFjdGVycyk7CisgICAgdW5zaWduZWQgZ2x5cGhJ
bmRleCA9IDA7CisgICAgZmxvYXQgcG9zaXRpb24gPSAwOworICAgIGlmIChydGwoKSkgeworICAg
ICAgICB3aGlsZSAoZ2x5cGhJbmRleCA8IG1fbnVtR2x5cGhzICYmIG1fZ2x5cGhUb0NoYXJhY3Rl
ckluZGV4ZXNbZ2x5cGhJbmRleF0gPiBvZmZzZXQpIHsKKyAgICAgICAgICAgIHBvc2l0aW9uICs9
IG1fYWR2YW5jZXNbZ2x5cGhJbmRleF07CisgICAgICAgICAgICArK2dseXBoSW5kZXg7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRm9yIFJUTCwgd2UgbmVlZCB0byByZXR1cm4gdGhlIHJpZ2h0IHNp
ZGUgYm91bmRhcnkgb2YgdGhlIGNoYXJhY3Rlci4KKyAgICAgICAgLy8gQWRkIGFkdmFuY2Ugb2Yg
Z2x5cGhzIHdoaWNoIGFyZSBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgIHdoaWxlIChn
bHlwaEluZGV4IDwgbV9udW1HbHlwaHMgLSAxICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNb
Z2x5cGhJbmRleF0gPT0gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4ICsgMV0p
IHsKKyAgICAgICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5jZXNbZ2x5cGhJbmRleF07CisgICAg
ICAgICAgICArK2dseXBoSW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgcG9zaXRpb24gKz0gbV9h
ZHZhbmNlc1tnbHlwaEluZGV4XTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAoZ2x5cGhJ
bmRleCA8IG1fbnVtR2x5cGhzICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRl
eF0gPCBvZmZzZXQpIHsKKyAgICAgICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5jZXNbZ2x5cGhJ
bmRleF07CisgICAgICAgICAgICArK2dseXBoSW5kZXg7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHBvc2l0aW9uOworfQorCitzdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNv
bnN0IFVDaGFyKiBzb3VyY2UsIFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCkKK3sKKyAg
ICBpbnQgcG9zaXRpb24gPSAwOworICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICB3aGlsZSAo
cG9zaXRpb24gPCBsZW5ndGgpIHsKKyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgICAg
IGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgVTE2X05FWFQoc291cmNlLCBu
ZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKKyAgICAgICAgLy8gRG9uJ3Qgbm9ybWFs
aXplIHRhYnMgYXMgdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMgc3BhY2VzIGZvciB3b3JkLWVuZC4K
KyAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpICYmIGNoYXJhY3RlciAh
PSAnXHQnKQorICAgICAgICAgICAgY2hhcmFjdGVyID0gJyAnOworICAgICAgICBlbHNlIGlmIChG
b250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoY2hhcmFjdGVyKSkKKyAg
ICAgICAgICAgIGNoYXJhY3RlciA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICBVMTZfQVBQRU5E
KGRlc3RpbmF0aW9uLCBwb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIsIGVycm9yKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKKyAgICAgICAgcG9zaXRpb24gPSBuZXh0
UG9zaXRpb247CisgICAgfQorfQorCitIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpTaGFwZXIoY29u
c3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKQorICAgIDogSGFyZkJ1enpTaGFwZXJC
YXNlKGZvbnQsIHJ1bikKKyAgICAsIG1fZnJvbUluZGV4KDApCisgICAgLCBtX3RvSW5kZXgobV9y
dW4ubGVuZ3RoKCkpCit7CisgICAgbV9ub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihu
ZXcgVUNoYXJbbV9ydW4ubGVuZ3RoKCkgKyAxXSk7CisgICAgbV9ub3JtYWxpemVkQnVmZmVyTGVu
Z3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtX3J1bi5jaGFy
YWN0ZXJzMTYoKSwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXJM
ZW5ndGgpOworICAgIHNldFBhZGRpbmcobV9ydW4uZXhwYW5zaW9uKCkpOworICAgIHNldEZvbnRG
ZWF0dXJlcygpOworfQorCitIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hhcGVyKCkKK3sKK30K
Kwordm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0RHJhd1JhbmdlKGludCBmcm9tLCBpbnQgdG8pCit7
CisgICAgQVNTRVJUKGZyb20gPj0gMCk7CisgICAgQVNTRVJUKHRvIDw9IG1fcnVuLmxlbmd0aCgp
KTsKKyAgICBtX2Zyb21JbmRleCA9IGZyb207CisgICAgbV90b0luZGV4ID0gdG87Cit9CisKK3Zv
aWQgSGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJlcygpCit7CisgICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiA9IG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKKyAgICAgICAgc3Rh
dGljIGhiX2ZlYXR1cmVfdCB2ZXJ0ID0geyBIYXJmQnV6ekZhY2U6OnZlcnRUYWcsIDEsIDAsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPigtMSkgfTsKKyAgICAgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCB2
cnQyID0geyBIYXJmQnV6ekZhY2U6OnZydDJUYWcsIDEsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PigtMSkgfTsKKyAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQodmVydCk7CisgICAgICAgIG1fZmVh
dHVyZXMuYXBwZW5kKHZydDIpOworICAgIH0KKworICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MqIHNl
dHRpbmdzID0gZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5n
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgbnVtRmVhdHVyZXMgPSBzZXR0aW5n
cy0+c2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GZWF0dXJlczsgKytp
KSB7CisgICAgICAgIGhiX2ZlYXR1cmVfdCBmZWF0dXJlOworICAgICAgICBjb25zdCBVQ2hhciog
dGFnID0gc2V0dGluZ3MtPmF0KGkpLnRhZygpLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgZmVhdHVy
ZS50YWcgPSBIQl9UQUcodGFnWzBdLCB0YWdbMV0sIHRhZ1syXSwgdGFnWzNdKTsKKyAgICAgICAg
ZmVhdHVyZS52YWx1ZSA9IHNldHRpbmdzLT5hdChpKS52YWx1ZSgpOworICAgICAgICBmZWF0dXJl
LnN0YXJ0ID0gMDsKKyAgICAgICAgZmVhdHVyZS5lbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
LTEpOworICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZChmZWF0dXJlKTsKKyAgICB9Cit9CisKK2Jv
b2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3sKKyAg
ICBpZiAoIWNvbGxlY3RIYXJmQnV6elJ1bnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV90b3RhbFdpZHRoID0gMDsKKyAgICAvLyBXZWJLaXQgZG9lc24ndCBzZXQgZGlyZWN0aW9u
IHdoZW4gY2FsdWxhdGluZyB3aWR0aHMuIExlYXZlIHRoZSBkaXJlY3Rpb24gc2V0dGluZyB0bwor
ICAgIC8vIEhhcmZCdXp6IHdoZW4gd2UgYXJlIGNhbGN1bGF0aW5nIHdpZHRocyAoZXhjZXB0IHdo
ZW4gZGlyZWN0aW9uYWxPdmVycmlkZSgpIGlzIHNldCkuCisgICAgaWYgKCFzaGFwZUhhcmZCdXp6
UnVucyhnbHlwaEJ1ZmZlciB8fCBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgbV90b3RhbFdpZHRoID0gcm91bmRmKG1fdG90YWxXaWR0aCk7
CisKKyAgICBpZiAoZ2x5cGhCdWZmZXIgJiYgIWZpbGxHbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitGbG9hdFBv
aW50IEhhcmZCdXp6U2hhcGVyOjphZGp1c3RTdGFydFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQoreworICAgIHJldHVybiBwb2ludCArIG1fc3RhcnRPZmZzZXQ7Cit9CisKK2Jvb2wgSGFy
ZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMoKQoreworICAgIGNvbnN0IFVDaGFyKiBu
b3JtYWxpemVkQnVmZmVyRW5kID0gbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9ub3JtYWxp
emVkQnVmZmVyTGVuZ3RoOworICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciBpdGVy
YXRvcihtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCksIDAsIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0
aCwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKKyAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAg
ICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBzdGFydEluZGV4T2ZD
dXJyZW50UnVuID0gMDsKKyAgICBpZiAoIWl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVz
dGVyTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3RlciwgZmFsc2UpLmZvbnREYXRhOworICAgIFVFcnJvckNvZGUgZXJyb3JDb2RlID0gVV9aRVJP
X0VSUk9SOworICAgIFVTY3JpcHRDb2RlIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChj
aGFyYWN0ZXIsICZlcnJvckNvZGUpOworICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JDb2RlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8geworICAgICAgICBjb25zdCBVQ2hhciogY3Vy
cmVudENoYXJhY3RlclBvc2l0aW9uID0gaXRlcmF0b3IuY2hhcmFjdGVycygpOworICAgICAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogY3VycmVudEZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAg
ICAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gbmV4dFNjcmlwdDsKKworICAgICAgICBm
b3IgKGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmNvbnN1bWUoY2hh
cmFjdGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKSkg
eworICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoVV9HRVRfR0Nf
TUFTSyhjaGFyYWN0ZXIpICYgVV9HQ19NX01BU0spIHsKKyAgICAgICAgICAgICAgICBpbnQgbWFy
a0xlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CisgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIG1h
cmtDaGFyYWN0ZXJzRW5kID0gaXRlcmF0b3IuY2hhcmFjdGVycygpICsgY2x1c3Rlckxlbmd0aDsK
KyAgICAgICAgICAgICAgICB3aGlsZSAobWFya0NoYXJhY3RlcnNFbmQgPCBub3JtYWxpemVkQnVm
ZmVyRW5kKSB7CisgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgbmV4dENoYXJhY3RlcjsKKyAg
ICAgICAgICAgICAgICAgICAgaW50IG5leHRDaGFyYWN0ZXJMZW5ndGggPSAwOworICAgICAgICAg
ICAgICAgICAgICBVMTZfTkVYVChtYXJrQ2hhcmFjdGVyc0VuZCwgbmV4dENoYXJhY3Rlckxlbmd0
aCwgbm9ybWFsaXplZEJ1ZmZlckVuZCAtIG1hcmtDaGFyYWN0ZXJzRW5kLCBuZXh0Q2hhcmFjdGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoVV9HRVRfR0NfTUFTSyhuZXh0Q2hhcmFjdGVy
KSAmIFVfR0NfTV9NQVNLKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBtYXJrTGVuZ3RoICs9IG5leHRDaGFyYWN0ZXJMZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgIG1hcmtDaGFyYWN0ZXJzRW5kICs9IG5leHRDaGFyYWN0ZXJMZW5ndGg7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3VycmVudENoYXJhY3RlclBvc2l0
aW9uLCBtYXJrQ2hhcmFjdGVyc0VuZCAtIGN1cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2x1c3Rlckxlbmd0aCA9IG1hcmtMZW5ndGg7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBu
ZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZh
bHNlKS5mb250RGF0YTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG5leHRG
b250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2Up
LmZvbnREYXRhOworCisgICAgICAgICAgICBuZXh0U2NyaXB0ID0gdXNjcmlwdF9nZXRTY3JpcHQo
Y2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JD
b2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoKG5l
eHRGb250RGF0YSAhPSBjdXJyZW50Rm9udERhdGEpIHx8ICgoY3VycmVudFNjcmlwdCAhPSBuZXh0
U2NyaXB0KSAmJiAobmV4dFNjcmlwdCAhPSBVU0NSSVBUX0lOSEVSSVRFRCkgJiYgKCF1c2NyaXB0
X2hhc1NjcmlwdChjaGFyYWN0ZXIsIGN1cnJlbnRTY3JpcHQpKSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAobmV4dFNjcmlwdCA9PSBVU0NSSVBUX0lOSEVSSVRFRCkK
KyAgICAgICAgICAgICAgICBuZXh0U2NyaXB0ID0gY3VycmVudFNjcmlwdDsKKyAgICAgICAgICAg
IGN1cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbiA9IGl0ZXJhdG9yLmNoYXJhY3RlcnMoKTsKKyAgICAg
ICAgfQorICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuID0gaXRlcmF0
b3IuY3VycmVudENoYXJhY3RlcigpIC0gc3RhcnRJbmRleE9mQ3VycmVudFJ1bjsKKyAgICAgICAg
aGJfc2NyaXB0X3Qgc2NyaXB0ID0gaGJfaWN1X3NjcmlwdF90b19zY3JpcHQoY3VycmVudFNjcmlw
dCk7CisgICAgICAgIG1faGFyZkJ1enpSdW5zLmFwcGVuZChIYXJmQnV6elJ1bjo6Y3JlYXRlKGN1
cnJlbnRGb250RGF0YSwgc3RhcnRJbmRleE9mQ3VycmVudFJ1biwgbnVtQ2hhcmFjdGVyc09mQ3Vy
cmVudFJ1biwgbV9ydW4uZGlyZWN0aW9uKCksIHNjcmlwdCkpOworICAgICAgICBjdXJyZW50Rm9u
dERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4gPSBp
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgfSB3aGlsZSAoaXRlcmF0b3IuY29uc3Vt
ZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKTsKKworICAgIHJldHVybiAhbV9oYXJmQnV6elJ1
bnMuaXNFbXB0eSgpOworfQorCitib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVu
cyhib29sIHNob3VsZFNldERpcmVjdGlvbikKK3sKKyAgICBIYXJmQnV6elNjb3BlZFB0cjxoYl9i
dWZmZXJfdD4gaGFyZkJ1enpCdWZmZXIoaGJfYnVmZmVyX2NyZWF0ZSgpLCBoYl9idWZmZXJfZGVz
dHJveSk7CisKKyAgICBoYl9idWZmZXJfc2V0X3VuaWNvZGVfZnVuY3MoaGFyZkJ1enpCdWZmZXIu
Z2V0KCksIGhiX2ljdV9nZXRfdW5pY29kZV9mdW5jcygpKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2hhcmZCdXp6UnVucy5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25l
ZCBydW5JbmRleCA9IG1fcnVuLnJ0bCgpID8gbV9oYXJmQnV6elJ1bnMuc2l6ZSgpIC0gaSAtIDEg
OiBpOworICAgICAgICBIYXJmQnV6elJ1biogY3VycmVudFJ1biA9IG1faGFyZkJ1enpSdW5zW3J1
bkluZGV4XS5nZXQoKTsKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGN1cnJlbnRGb250
RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CisKKyAgICAgICAgaGJfYnVmZmVyX3NldF9z
Y3JpcHQoaGFyZkJ1enpCdWZmZXIuZ2V0KCksIGN1cnJlbnRSdW4tPnNjcmlwdCgpKTsKKyAgICAg
ICAgaWYgKHNob3VsZFNldERpcmVjdGlvbikKKyAgICAgICAgICAgIGhiX2J1ZmZlcl9zZXRfZGly
ZWN0aW9uKGhhcmZCdXp6QnVmZmVyLmdldCgpLCBjdXJyZW50UnVuLT5ydGwoKSA/IEhCX0RJUkVD
VElPTl9SVEwgOiBIQl9ESVJFQ1RJT05fTFRSKTsKKworICAgICAgICAvLyBBZGQgYSBzcGFjZSBh
cyBwcmUtY29udGV4dCB0byB0aGUgYnVmZmVyLiBUaGlzIHByZXZlbnRzIHNob3dpbmcgZG90dGVk
LWNpcmNsZQorICAgICAgICAvLyBmb3IgY29tYmluaW5nIG1hcmtzIGF0IHRoZSBiZWdpbm5pbmcg
b2YgcnVucy4KKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHByZUNvbnRleHQgPSAnICc7
CisgICAgICAgIGhiX2J1ZmZlcl9hZGRfdXRmMTYoaGFyZkJ1enpCdWZmZXIuZ2V0KCksICZwcmVD
b250ZXh0LCAxLCAxLCAwKTsKKworICAgICAgICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYm
IHVfaXNsb3dlcihtX25vcm1hbGl6ZWRCdWZmZXJbY3VycmVudFJ1bi0+c3RhcnRJbmRleCgpXSkp
IHsKKyAgICAgICAgICAgIFN0cmluZyB1cHBlclRleHQgPSBTdHJpbmcobV9ub3JtYWxpemVkQnVm
ZmVyLmdldCgpICsgY3VycmVudFJ1bi0+c3RhcnRJbmRleCgpLCBjdXJyZW50UnVuLT5udW1DaGFy
YWN0ZXJzKCkpOworICAgICAgICAgICAgdXBwZXJUZXh0Lm1ha2VVcHBlcigpOworICAgICAgICAg
ICAgY3VycmVudEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodXBwZXJU
ZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFyaWFudCkuZm9udERhdGE7CisgICAgICAgICAgICBo
Yl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZCdXp6QnVmZmVyLmdldCgpLCB1cHBlclRleHQuY2hhcmFj
dGVycygpLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCksIDAsIGN1cnJlbnRSdW4tPm51bUNo
YXJhY3RlcnMoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaGJfYnVmZmVyX2FkZF91
dGYxNihoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgY3Vy
cmVudFJ1bi0+c3RhcnRJbmRleCgpLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCksIDAsIGN1
cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSk7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSog
cGxhdGZvcm1EYXRhID0gY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJmN1cnJlbnRGb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkpOworICAgICAgICBIYXJmQnV6ekZhY2UqIGZhY2UgPSBwbGF0
Zm9ybURhdGEtPmhhcmZCdXp6RmFjZSgpOworICAgICAgICBpZiAoIWZhY2UpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCku
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkKKyAgICAgICAgICAgIGZhY2UtPnNldFNjcmlwdEZv
clZlcnRpY2FsR2x5cGhTdWJzdGl0dXRpb24oaGFyZkJ1enpCdWZmZXIuZ2V0KCkpOworCisgICAg
ICAgIEhhcmZCdXp6U2NvcGVkUHRyPGhiX2ZvbnRfdD4gaGFyZkJ1enpGb250KGZhY2UtPmNyZWF0
ZUZvbnQoKSwgaGJfZm9udF9kZXN0cm95KTsKKworICAgICAgICBoYl9zaGFwZShoYXJmQnV6ekZv
bnQuZ2V0KCksIGhhcmZCdXp6QnVmZmVyLmdldCgpLCBtX2ZlYXR1cmVzLmlzRW1wdHkoKSA/IDAg
OiBtX2ZlYXR1cmVzLmRhdGEoKSwgbV9mZWF0dXJlcy5zaXplKCkpOworCisgICAgICAgIGN1cnJl
bnRSdW4tPmFwcGx5U2hhcGVSZXN1bHQoaGFyZkJ1enpCdWZmZXIuZ2V0KCkpOworICAgICAgICBz
ZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKGN1cnJlbnRSdW4sIGhhcmZCdXp6QnVmZmVy
LmdldCgpKTsKKworICAgICAgICBoYl9idWZmZXJfcmVzZXQoaGFyZkJ1enpCdWZmZXIuZ2V0KCkp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEhhcmZCdXp6U2hhcGVyOjpz
ZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuLCBo
Yl9idWZmZXJfdCogaGFyZkJ1enpCdWZmZXIpCit7CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGN1cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CisgICAgaGJfZ2x5cGhf
aW5mb190KiBnbHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmQnV6ekJ1
ZmZlciwgMCk7CisgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCogZ2x5cGhQb3NpdGlvbnMgPSBoYl9i
dWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhoYXJmQnV6ekJ1ZmZlciwgMCk7CisKKyAgICB1bnNp
Z25lZCBudW1HbHlwaHMgPSBjdXJyZW50UnVuLT5udW1HbHlwaHMoKTsKKyAgICB1aW50MTZfdCog
Z2x5cGhUb0NoYXJhY3RlckluZGV4ZXMgPSBjdXJyZW50UnVuLT5nbHlwaFRvQ2hhcmFjdGVySW5k
ZXhlcygpOworICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7CisKKyAgICAvLyBIYXJmQnV6eiBy
ZXR1cm5zIHRoZSBzaGFwaW5nIHJlc3VsdCBpbiB2aXN1YWwgb3JkZXIuIFdlIG5lZWQgbm90IHRv
IGZsaXAgZm9yIFJUTC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7CisgICAgICAgIGJvb2wgcnVuRW5kID0gaSArIDEgPT0gbnVtR2x5cGhzOworICAgICAgICB1
aW50MTZfdCBnbHlwaCA9IGdseXBoSW5mb3NbaV0uY29kZXBvaW50OworICAgICAgICBmbG9hdCBv
ZmZzZXRYID0gaGFyZkJ1enpQb3NpdGlvblRvRmxvYXQoZ2x5cGhQb3NpdGlvbnNbaV0ueF9vZmZz
ZXQpOworICAgICAgICBmbG9hdCBvZmZzZXRZID0gLWhhcmZCdXp6UG9zaXRpb25Ub0Zsb2F0KGds
eXBoUG9zaXRpb25zW2ldLnlfb2Zmc2V0KTsKKyAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGhhcmZC
dXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfYWR2YW5jZSk7CisKKyAgICAg
ICAgdW5zaWduZWQgY3VycmVudENoYXJhY3RlckluZGV4ID0gY3VycmVudFJ1bi0+c3RhcnRJbmRl
eCgpICsgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyOworICAgICAgICBib29sIGlzQ2x1c3RlckVuZCA9
IHJ1bkVuZCB8fCBnbHlwaEluZm9zW2ldLmNsdXN0ZXIgIT0gZ2x5cGhJbmZvc1tpICsgMV0uY2x1
c3RlcjsKKyAgICAgICAgZmxvYXQgc3BhY2luZyA9IDA7CisKKyAgICAgICAgZ2x5cGhUb0NoYXJh
Y3RlckluZGV4ZXNbaV0gPSBnbHlwaEluZm9zW2ldLmNsdXN0ZXI7CisKKyAgICAgICAgaWYgKGlz
Q2x1c3RlckVuZCAmJiAhRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKG1fbm9ybWFsaXplZEJ1
ZmZlcltjdXJyZW50Q2hhcmFjdGVySW5kZXhdKSkKKyAgICAgICAgICAgIHNwYWNpbmcgKz0gbV9s
ZXR0ZXJTcGFjaW5nOworCisgICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgaXNXb3JkRW5kKGN1
cnJlbnRDaGFyYWN0ZXJJbmRleCkpCisgICAgICAgICAgICBzcGFjaW5nICs9IGRldGVybWluZVdv
cmRCcmVha1NwYWNpbmcoKTsKKworICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhLT5pc1plcm9X
aWR0aFNwYWNlR2x5cGgoZ2x5cGgpKSB7CisgICAgICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlw
aEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgMCwgMCwgMCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGFkdmFuY2UgKz0gc3BhY2luZzsKKyAgICAgICAgaWYgKG1f
cnVuLnJ0bCgpKSB7CisgICAgICAgICAgICAvLyBJbiBSVEwsIHNwYWNpbmcgc2hvdWxkIGJlIGFk
ZGVkIHRvIGxlZnQgc2lkZSBvZiBnbHlwaHMuCisgICAgICAgICAgICBvZmZzZXRYICs9IHNwYWNp
bmc7CisgICAgICAgICAgICBpZiAoIWlzQ2x1c3RlckVuZCkKKyAgICAgICAgICAgICAgICBvZmZz
ZXRYICs9IG1fbGV0dGVyU3BhY2luZzsKKyAgICAgICAgfQorCisgICAgICAgIGN1cnJlbnRSdW4t
PnNldEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCBhZHZhbmNlLCBvZmZzZXRYLCBvZmZzZXRZ
KTsKKworICAgICAgICB0b3RhbEFkdmFuY2UgKz0gYWR2YW5jZTsKKyAgICB9CisgICAgY3VycmVu
dFJ1bi0+c2V0V2lkdGgodG90YWxBZHZhbmNlID4gMC4wID8gdG90YWxBZHZhbmNlIDogMC4wKTsK
KyAgICBtX3RvdGFsV2lkdGggKz0gY3VycmVudFJ1bi0+d2lkdGgoKTsKK30KKwordm9pZCBIYXJm
QnV6elNoYXBlcjo6ZmlsbEdseXBoQnVmZmVyRnJvbUhhcmZCdXp6UnVuKEdseXBoQnVmZmVyKiBn
bHlwaEJ1ZmZlciwgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4sIEZsb2F0UG9pbnQmIGZpcnN0T2Zm
c2V0T2ZOZXh0UnVuKQoreworICAgIEZsb2F0UG9pbnQqIG9mZnNldHMgPSBjdXJyZW50UnVuLT5v
ZmZzZXRzKCk7CisgICAgdWludDE2X3QqIGdseXBocyA9IGN1cnJlbnRSdW4tPmdseXBocygpOwor
ICAgIGZsb2F0KiBhZHZhbmNlcyA9IGN1cnJlbnRSdW4tPmFkdmFuY2VzKCk7CisgICAgdW5zaWdu
ZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7CisgICAgdWludDE2X3QqIGds
eXBoVG9DaGFyYWN0ZXJJbmRleGVzID0gY3VycmVudFJ1bi0+Z2x5cGhUb0NoYXJhY3RlckluZGV4
ZXMoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewor
ICAgICAgICB1aW50MTZfdCBjdXJyZW50Q2hhcmFjdGVySW5kZXggPSBjdXJyZW50UnVuLT5zdGFy
dEluZGV4KCkgKyBnbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tpXTsKKyAgICAgICAgRmxvYXRQb2lu
dCYgY3VycmVudE9mZnNldCA9IG9mZnNldHNbaV07CisgICAgICAgIEZsb2F0UG9pbnQmIG5leHRP
ZmZzZXQgPSAoaSA9PSBudW1HbHlwaHMgLSAxKSA/IGZpcnN0T2Zmc2V0T2ZOZXh0UnVuIDogb2Zm
c2V0c1tpICsgMV07CisgICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZVggPSBhZHZhbmNlc1tpXSAr
IG5leHRPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCk7CisgICAgICAgIGZsb2F0IGdseXBo
QWR2YW5jZVkgPSBuZXh0T2Zmc2V0LnkoKSAtIGN1cnJlbnRPZmZzZXQueSgpOworICAgICAgICBp
ZiAobV9ydW4ucnRsKCkpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXgg
PiBtX3RvSW5kZXgpCisgICAgICAgICAgICAgICAgbV9zdGFydE9mZnNldC5tb3ZlKGdseXBoQWR2
YW5jZVgsIGdseXBoQWR2YW5jZVkpOworICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudENoYXJh
Y3RlckluZGV4ID49IG1fZnJvbUluZGV4KQorICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5h
ZGQoZ2x5cGhzW2ldLCBjdXJyZW50UnVuLT5mb250RGF0YSgpLCBjcmVhdGVHbHlwaEJ1ZmZlckFk
dmFuY2UoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZhbmNlWSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA8IG1fZnJvbUluZGV4KQorICAg
ICAgICAgICAgICAgIG1fc3RhcnRPZmZzZXQubW92ZShnbHlwaEFkdmFuY2VYLCBnbHlwaEFkdmFu
Y2VZKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA8IG1fdG9J
bmRleCkKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoc1tpXSwgY3VycmVu
dFJ1bi0+Zm9udERhdGEoKSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGdseXBoQWR2YW5jZVgs
IGdseXBoQWR2YW5jZVkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBIYXJmQnV6elNo
YXBlcjo6ZmlsbEdseXBoQnVmZmVyKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3sKKyAgICB1
bnNpZ25lZCBudW1SdW5zID0gbV9oYXJmQnV6elJ1bnMuc2l6ZSgpOworICAgIGlmIChtX3J1bi5y
dGwoKSkgeworICAgICAgICBtX3N0YXJ0T2Zmc2V0ID0gbV9oYXJmQnV6elJ1bnMubGFzdCgpLT5v
ZmZzZXRzKClbMF07CisgICAgICAgIGZvciAoaW50IHJ1bkluZGV4ID0gbnVtUnVucyAtIDE7IHJ1
bkluZGV4ID49IDA7IC0tcnVuSW5kZXgpIHsKKyAgICAgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJy
ZW50UnVuID0gbV9oYXJmQnV6elJ1bnNbcnVuSW5kZXhdLmdldCgpOworICAgICAgICAgICAgRmxv
YXRQb2ludCBmaXJzdE9mZnNldE9mTmV4dFJ1biA9ICFydW5JbmRleCA/IEZsb2F0UG9pbnQoKSA6
IG1faGFyZkJ1enpSdW5zW3J1bkluZGV4IC0gMV0tPm9mZnNldHMoKVswXTsKKyAgICAgICAgICAg
IGZpbGxHbHlwaEJ1ZmZlckZyb21IYXJmQnV6elJ1bihnbHlwaEJ1ZmZlciwgY3VycmVudFJ1biwg
Zmlyc3RPZmZzZXRPZk5leHRSdW4pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9zdGFydE9mZnNldCA9IG1faGFyZkJ1enpSdW5zLmZpcnN0KCktPm9mZnNldHMoKVswXTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBydW5JbmRleCA9IDA7IHJ1bkluZGV4IDwgbnVtUnVuczsgKyty
dW5JbmRleCkgeworICAgICAgICAgICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZC
dXp6UnVuc1tydW5JbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGZpcnN0T2Zm
c2V0T2ZOZXh0UnVuID0gcnVuSW5kZXggPT0gbnVtUnVucyAtIDEgPyBGbG9hdFBvaW50KCkgOiBt
X2hhcmZCdXp6UnVuc1tydW5JbmRleCArIDFdLT5vZmZzZXRzKClbMF07CisgICAgICAgICAgICBm
aWxsR2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIsIGN1cnJlbnRSdW4sIGZp
cnN0T2Zmc2V0T2ZOZXh0UnVuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZ2x5cGhC
dWZmZXItPnNpemUoKTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3NpdGlv
bihmbG9hdCB0YXJnZXRYKQoreworICAgIGludCBjaGFyYWN0ZXJzU29GYXIgPSAwOworICAgIGZs
b2F0IGN1cnJlbnRYID0gMDsKKworICAgIGlmIChtX3J1bi5ydGwoKSkgeworICAgICAgICBjaGFy
YWN0ZXJzU29GYXIgPSBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7CisgICAgICAgIGZvciAoaW50
IGkgPSBtX2hhcmZCdXp6UnVucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAg
ICAgY2hhcmFjdGVyc1NvRmFyIC09IG1faGFyZkJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7
CisgICAgICAgICAgICBmbG9hdCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJmQnV6elJ1bnNbaV0t
PndpZHRoKCk7CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRGb3JSdW4gPSB0YXJnZXRYIC0gY3Vy
cmVudFg7CisgICAgICAgICAgICBpZiAob2Zmc2V0Rm9yUnVuID49IDAgJiYgb2Zmc2V0Rm9yUnVu
IDw9IG1faGFyZkJ1enpSdW5zW2ldLT53aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhl
IHggdmFsdWUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4KKyAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IG1faGFyZkJ1enpSdW5zW2ldLT5jaGFyYWN0
ZXJJbmRleEZvclhQb3NpdGlvbihvZmZzZXRGb3JSdW4pOworICAgICAgICAgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJzU29GYXIgKyBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1
cnJlbnRYID0gbmV4dFg7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmQnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGZsb2F0IG5leHRYID0gY3VycmVudFggKyBtX2hhcmZCdXp6UnVuc1tpXS0+d2lkdGgoKTsK
KyAgICAgICAgICAgIGZsb2F0IG9mZnNldEZvclJ1biA9IHRhcmdldFggLSBjdXJyZW50WDsKKyAg
ICAgICAgICAgIGlmIChvZmZzZXRGb3JSdW4gPj0gMCAmJiBvZmZzZXRGb3JSdW4gPD0gbV9oYXJm
QnV6elJ1bnNbaV0tPndpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bmRleCA9IG1faGFyZkJ1enpSdW5zW2ldLT5jaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihvZmZz
ZXRGb3JSdW4pOworICAgICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzU29GYXIgKyBpbmRl
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXJhY3RlcnNTb0ZhciArPSBtX2hhcmZC
dXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOworICAgICAgICAgICAgY3VycmVudFggPSBuZXh0
WDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjaGFyYWN0ZXJzU29GYXI7Cit9CisK
K0Zsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykKK3sKKyAgICBmbG9hdCBjdXJy
ZW50WCA9IDA7CisgICAgZmxvYXQgZnJvbVggPSAwOworICAgIGZsb2F0IHRvWCA9IDA7CisgICAg
Ym9vbCBmb3VuZEZyb21YID0gZmFsc2U7CisgICAgYm9vbCBmb3VuZFRvWCA9IGZhbHNlOworCisg
ICAgaWYgKG1fcnVuLnJ0bCgpKQorICAgICAgICBjdXJyZW50WCA9IG1fdG90YWxXaWR0aDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmQnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKG1fcnVuLnJ0bCgpKQorICAgICAgICAgICAgY3VycmVudFggLT0gbV9oYXJm
QnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgICAgIGludCBudW1DaGFyYWN0ZXJzID0gbV9oYXJm
QnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAgaWYgKCFmb3VuZEZyb21YICYm
IGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVycykgeworICAgICAgICAgICAgZnJvbVgg
PSBtX2hhcmZCdXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KGZyb20pICsgY3VycmVudFg7
CisgICAgICAgICAgICBmb3VuZEZyb21YID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBmcm9tIC09IG51bUNoYXJhY3RlcnM7CisKKyAgICAgICAgaWYgKCFmb3VuZFRvWCAmJiB0
byA+PSAwICYmIHRvIDwgbnVtQ2hhcmFjdGVycykgeworICAgICAgICAgICAgdG9YID0gbV9oYXJm
QnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldCh0bykgKyBjdXJyZW50WDsKKyAgICAgICAg
ICAgIGZvdW5kVG9YID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0byAtPSBu
dW1DaGFyYWN0ZXJzOworCisgICAgICAgIGlmIChmb3VuZEZyb21YICYmIGZvdW5kVG9YKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghbV9ydW4ucnRsKCkpCisgICAgICAgICAgICBj
dXJyZW50WCArPSBtX2hhcmZCdXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICB9CisKKyAgICAvLyBU
aGUgcG9zaXRpb24gaW4gcXVlc3Rpb24gbWlnaHQgYmUganVzdCBhZnRlciB0aGUgdGV4dC4KKyAg
ICBpZiAoIWZvdW5kRnJvbVgpCisgICAgICAgIGZyb21YID0gMDsKKyAgICBpZiAoIWZvdW5kVG9Y
KQorICAgICAgICB0b1ggPSBtX3J1bi5ydGwoKSA/IDAgOiBtX3RvdGFsV2lkdGg7CisKKyAgICAv
LyBVc2luZyBmbG9vcmYoKSBhbmQgcm91bmRmKCkgYXMgdGhlIHNhbWUgYXMgbWFjIHBvcnQuCisg
ICAgaWYgKGZyb21YIDwgdG9YKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KGZsb29yZihwb2lu
dC54KCkgKyBmcm9tWCksIHBvaW50LnkoKSwgcm91bmRmKHRvWCAtIGZyb21YKSwgaGVpZ2h0KTsK
KyAgICByZXR1cm4gRmxvYXRSZWN0KGZsb29yZihwb2ludC54KCkgKyB0b1gpLCBwb2ludC55KCks
IHJvdW5kZihmcm9tWCAtIHRvWCksIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNoYXBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlZmFlZTNmMGQxMzU1YjRkMzgyMjVj
ODk3ZmNhNzUwYmE1ZDhjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCkBAIC0wLDAgKzEsMTI3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBIYXJmQnV6elNoYXBlcl9oCisjZGVmaW5lIEhhcmZCdXp6U2hhcGVyX2gKKworI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUg
IkhhcmZCdXp6U2hhcGVyQmFzZS5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJo
Yi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFzcyBTaW1wbGVGb250RGF0YTsK
KworY2xhc3MgSGFyZkJ1enpTaGFwZXIgOiBwdWJsaWMgSGFyZkJ1enpTaGFwZXJCYXNlIHsKK3B1
YmxpYzoKKyAgICBIYXJmQnV6elNoYXBlcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYpOwor
ICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CisKKyAgICB2b2lkIHNldERyYXdSYW5nZShp
bnQgZnJvbSwgaW50IHRvKTsKKyAgICBib29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOworICAg
IEZsb2F0UG9pbnQgYWRqdXN0U3RhcnRQb2ludChjb25zdCBGbG9hdFBvaW50Jik7CisgICAgZmxv
YXQgdG90YWxXaWR0aCgpIHsgcmV0dXJuIG1fdG90YWxXaWR0aDsgfQorICAgIGludCBvZmZzZXRG
b3JQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChj
b25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0byk7CisKK3ByaXZh
dGU6CisgICAgY2xhc3MgSGFyZkJ1enpSdW4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8SGFyZkJ1enpSdW4+IGNyZWF0ZShjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9zY3JpcHRfdCBzY3JpcHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4oZm9udERhdGEsIHN0YXJ0SW5k
ZXgsIG51bUNoYXJhY3RlcnMsIGRpcmVjdGlvbiwgc2NyaXB0KSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFwcGx5U2hhcGVSZXN1bHQoaGJfYnVmZmVyX3QqKTsKKyAgICAgICAgdm9pZCBz
ZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxv
YXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSk7CisgICAgICAgIHZvaWQg
c2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CisKKyAgICAgICAgaW50
IGNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKGZsb2F0IHRhcmdldFgpOworICAgICAgICBmbG9h
dCB4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KTsKKworICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEoKSB7IHJldHVybiBtX2ZvbnREYXRhOyB9CisgICAgICAg
IHVuc2lnbmVkIHN0YXJ0SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0SW5kZXg7IH0KKyAg
ICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2hhcmFj
dGVyczsgfQorICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX251
bUdseXBoczsgfQorICAgICAgICB1aW50MTZfdCogZ2x5cGhzKCkgeyByZXR1cm4gJm1fZ2x5cGhz
WzBdOyB9CisgICAgICAgIGZsb2F0KiBhZHZhbmNlcygpIHsgcmV0dXJuICZtX2FkdmFuY2VzWzBd
OyB9CisgICAgICAgIEZsb2F0UG9pbnQqIG9mZnNldHMoKSB7IHJldHVybiAmbV9vZmZzZXRzWzBd
OyB9CisgICAgICAgIHVpbnQxNl90KiBnbHlwaFRvQ2hhcmFjdGVySW5kZXhlcygpIHsgcmV0dXJu
ICZtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzWzBdOyB9CisgICAgICAgIGZsb2F0IHdpZHRoKCkg
eyByZXR1cm4gbV93aWR0aDsgfQorICAgICAgICBib29sIHJ0bCgpIHsgcmV0dXJuIG1fZGlyZWN0
aW9uID09IFJUTDsgfQorICAgICAgICBoYl9zY3JpcHRfdCBzY3JpcHQoKSB7IHJldHVybiBtX3Nj
cmlwdDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFyZkJ1enpSdW4oY29uc3QgU2ltcGxl
Rm9udERhdGEqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBU
ZXh0RGlyZWN0aW9uLCBoYl9zY3JpcHRfdCk7CisKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIG1fZm9udERhdGE7CisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRJbmRleDsKKyAgICAgICAg
c2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKKyAgICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7Cisg
ICAgICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CisgICAgICAgIGhiX3NjcmlwdF90IG1f
c2NyaXB0OworICAgICAgICBWZWN0b3I8dWludDE2X3QsIDI1Nj4gbV9nbHlwaHM7CisgICAgICAg
IFZlY3RvcjxmbG9hdCwgMjU2PiBtX2FkdmFuY2VzOworICAgICAgICBWZWN0b3I8dWludDE2X3Qs
IDI1Nj4gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlczsKKyAgICAgICAgVmVjdG9yPEZsb2F0UG9p
bnQsIDI1Nj4gbV9vZmZzZXRzOworICAgICAgICBmbG9hdCBtX3dpZHRoOworICAgIH07CisKKyAg
ICB2b2lkIHNldEZvbnRGZWF0dXJlcygpOworCisgICAgYm9vbCBjb2xsZWN0SGFyZkJ1enpSdW5z
KCk7CisgICAgYm9vbCBzaGFwZUhhcmZCdXp6UnVucyhib29sIHNob3VsZFNldERpcmVjdGlvbik7
CisgICAgYm9vbCBmaWxsR2x5cGhCdWZmZXIoR2x5cGhCdWZmZXIqKTsKKyAgICB2b2lkIGZpbGxH
bHlwaEJ1ZmZlckZyb21IYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciosIEhhcmZCdXp6UnVuKiwgRmxv
YXRQb2ludCYgZmlyc3RPZmZzZXRPZk5leHRSdW4pOworICAgIHZvaWQgc2V0R2x5cGhQb3NpdGlv
bnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biosIGhiX2J1ZmZlcl90Kik7CisKKyAgICBHbHlw
aEJ1ZmZlckFkdmFuY2UgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0LCBmbG9hdCk7CisK
KyAgICBWZWN0b3I8aGJfZmVhdHVyZV90LCA0PiBtX2ZlYXR1cmVzOworICAgIFZlY3RvcjxPd25Q
dHI8SGFyZkJ1enpSdW4+LCAxNj4gbV9oYXJmQnV6elJ1bnM7CisKKyAgICBGbG9hdFBvaW50IG1f
c3RhcnRPZmZzZXQ7CisKKyAgICBpbnQgbV9mcm9tSW5kZXg7CisgICAgaW50IG1fdG9JbmRleDsK
KworICAgIGZsb2F0IG1fdG90YWxXaWR0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEhhcmZCdXp6U2hhcGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBkYmQ4MWJkMzc1MWU2NzdmZDBhYWEz
M2RkMWFhMDVhMmVmZDU5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6ek5HRmFjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJIYXJmQnV6ek5HRmFjZS5oIgotCi0jaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgImhiLW90LmgiCi0jaW5jbHVkZSAiaGIuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBoYl90YWdfdCBIYXJmQnV6ek5HRmFjZTo6dmVydFRh
ZyA9IEhCX1RBRygndicsICdlJywgJ3InLCAndCcpOwotY29uc3QgaGJfdGFnX3QgSGFyZkJ1enpO
R0ZhY2U6OnZydDJUYWcgPSBIQl9UQUcoJ3YnLCAncicsICd0JywgJzInKTsKLQotLy8gVGhvdWdo
IHdlIGhhdmUgRm9udENhY2hlIGNsYXNzLCB3aGljaCBwcm92aWRlcyB0aGUgY2FjaGUgbWVjaGFu
aXNtIGZvcgotLy8gV2ViS2l0J3MgZm9udCBvYmplY3RzLCB3ZSBhbHNvIG5lZWQgYWRkaXRpb25h
bCBjYWNoaW5nIGxheWVyIGZvciBIYXJmQnV6egotLy8gdG8gcmVkdWNlIHRoZSBtZW1vcnkgY29u
c3VtcHRpb24gYmVjYXVzZSBoYl9mYWNlX3Qgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAotLy8g
dW5kZXJsaW5nIGZvbnQgZGF0YSAoZS5nLiBDVEZvbnRSZWYsIEZURmFjZSkuCi0KLWNsYXNzIEZh
Y2VDYWNoZUVudHJ5IDogcHVibGljIFJlZkNvdW50ZWQ8RmFjZUNhY2hlRW50cnk+IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGYWNlQ2FjaGVFbnRyeT4gY3JlYXRlKGhiX2ZhY2Vf
dCogZmFjZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWNlKTsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGYWNlQ2FjaGVFbnRyeShmYWNlKSk7Ci0gICAgfQotICAgIH5GYWNlQ2FjaGVF
bnRyeSgpCi0gICAgewotICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kobV9mYWNlKTsKLSAgICB9Ci0K
LSAgICBoYl9mYWNlX3QqIGZhY2UoKSB7IHJldHVybiBtX2ZhY2U7IH0KLSAgICBIYXNoTWFwPHVp
bnQzMl90LCB1aW50MTZfdD4qIGdseXBoQ2FjaGUoKSB7IHJldHVybiAmbV9nbHlwaENhY2hlOyB9
Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgRmFjZUNhY2hlRW50cnkoaGJfZmFjZV90KiBmYWNl
KQotICAgICAgICA6IG1fZmFjZShmYWNlKQotICAgIHsgfQotCi0gICAgaGJfZmFjZV90KiBtX2Zh
Y2U7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+IG1fZ2x5cGhDYWNoZTsKLX07Ci0K
LXR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEZhY2VDYWNoZUVudHJ5PiwgV1RGOjpJ
bnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
NjRfdD4gPiBIYXJmQnV6ek5HRmFjZUNhY2hlOwotCi1zdGF0aWMgSGFyZkJ1enpOR0ZhY2VDYWNo
ZSogaGFyZmJ1enpGYWNlQ2FjaGUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFyZkJ1
enpOR0ZhY2VDYWNoZSwgc19oYXJmYnV6ekZhY2VDYWNoZSwgKCkpOwotICAgIHJldHVybiAmc19o
YXJmYnV6ekZhY2VDYWNoZTsKLX0KLQotSGFyZkJ1enpOR0ZhY2U6OkhhcmZCdXp6TkdGYWNlKEZv
bnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgdWludDY0X3QgdW5pcXVlSUQpCi0gICAgOiBt
X3BsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpCi0gICAgLCBtX3VuaXF1ZUlEKHVuaXF1ZUlEKQot
ICAgICwgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQoSEJfU0NSSVBUX0lOVkFMSUQpCi17Ci0gICAg
SGFyZkJ1enpOR0ZhY2VDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGhhcmZidXp6RmFjZUNhY2hl
KCktPmFkZChtX3VuaXF1ZUlELCAwKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBGYWNlQ2FjaGVFbnRyeTo6Y3JlYXRlKGNyZWF0
ZUZhY2UoKSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+cmVmKCk7Ci0gICAgbV9mYWNl
ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+ZmFjZSgpOwotICAgIG1fZ2x5cGhDYWNoZUZvckZh
Y2VDYWNoZUVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Z2x5cGhDYWNoZSgpOwotfQot
Ci1IYXJmQnV6ek5HRmFjZTo6fkhhcmZCdXp6TkdGYWNlKCkKLXsKLSAgICBIYXJmQnV6ek5HRmFj
ZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5p
cXVlSUQpOwotICAgIEFTU0VSVChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkp
OwotICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnZhbHVlLT5yZWZDb3VudCgpID4gMSk7Ci0gICAg
cmVzdWx0LmdldCgpLT52YWx1ZS0+ZGVyZWYoKTsKLSAgICBpZiAocmVzdWx0LmdldCgpLT52YWx1
ZS0+cmVmQ291bnQoKSA9PSAxKQotICAgICAgICBoYXJmYnV6ekZhY2VDYWNoZSgpLT5yZW1vdmUo
bV91bmlxdWVJRCk7Ci19Ci0KLXN0YXRpYyBoYl9zY3JpcHRfdCBmaW5kU2NyaXB0Rm9yVmVydGlj
YWxHbHlwaFN1YnN0aXR1dGlvbihoYl9mYWNlX3QqIGZhY2UpCi17Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heENvdW50ID0gMzI7Ci0KLSAgICB1bnNpZ25lZCBzY3JpcHRDb3VudCA9IG1h
eENvdW50OwotICAgIGhiX3RhZ190IHNjcmlwdFRhZ3NbbWF4Q291bnRdOwotICAgIGhiX290X2xh
eW91dF90YWJsZV9nZXRfc2NyaXB0X3RhZ3MoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIDAsICZzY3Jp
cHRDb3VudCwgc2NyaXB0VGFncyk7Ci0gICAgZm9yICh1bnNpZ25lZCBzY3JpcHRJbmRleCA9IDA7
IHNjcmlwdEluZGV4IDwgc2NyaXB0Q291bnQ7ICsrc2NyaXB0SW5kZXgpIHsKLSAgICAgICAgdW5z
aWduZWQgbGFuZ3VhZ2VDb3VudCA9IG1heENvdW50OwotICAgICAgICBoYl90YWdfdCBsYW5ndWFn
ZVRhZ3NbbWF4Q291bnRdOwotICAgICAgICBoYl9vdF9sYXlvdXRfc2NyaXB0X2dldF9sYW5ndWFn
ZV90YWdzKGZhY2UsIEhCX09UX1RBR19HU1VCLCBzY3JpcHRJbmRleCwgMCwgJmxhbmd1YWdlQ291
bnQsIGxhbmd1YWdlVGFncyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGFuZ3VhZ2VJbmRleCA9
IDA7IGxhbmd1YWdlSW5kZXggPCBsYW5ndWFnZUNvdW50OyArK2xhbmd1YWdlSW5kZXgpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGZlYXR1cmVJbmRleDsKLSAgICAgICAgICAgIGlmIChoYl9vdF9s
YXlvdXRfbGFuZ3VhZ2VfZmluZF9mZWF0dXJlKGZhY2UsIEhCX09UX1RBR19HU1VCLCBzY3JpcHRJ
bmRleCwgbGFuZ3VhZ2VJbmRleCwgSGFyZkJ1enpOR0ZhY2U6OnZlcnRUYWcsICZmZWF0dXJlSW5k
ZXgpCi0gICAgICAgICAgICAgICAgfHwgaGJfb3RfbGF5b3V0X2xhbmd1YWdlX2ZpbmRfZmVhdHVy
ZShmYWNlLCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0SW5kZXgsIGxhbmd1YWdlSW5kZXgsIEhhcmZC
dXp6TkdGYWNlOjp2cnQyVGFnLCAmZmVhdHVyZUluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gaGJfb3RfdGFnX3RvX3NjcmlwdChzY3JpcHRUYWdzW3NjcmlwdEluZGV4XSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIEhCX1NDUklQVF9JTlZBTElEOwotfQotCi12b2lkIEhhcmZC
dXp6TkdGYWNlOjpzZXRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhiX2J1ZmZl
cl90KiBidWZmZXIpCi17Ci0gICAgaWYgKG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0ID09IEhCX1ND
UklQVF9JTlZBTElEKQotICAgICAgICBtX3NjcmlwdEZvclZlcnRpY2FsVGV4dCA9IGZpbmRTY3Jp
cHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKG1fZmFjZSk7Ci0gICAgaGJfYnVmZmVyX3Nl
dF9zY3JpcHQoYnVmZmVyLCBtX3NjcmlwdEZvclZlcnRpY2FsVGV4dCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzNjBkYWY5Y2YxMjIwZjk3Yjg2NzZjYTlmMmU3MzQ4NTM2ZTI4YjkwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBIYXJmQnV6ek5HRmFjZV9oCi0jZGVmaW5l
IEhhcmZCdXp6TkdGYWNlX2gKLQotI2luY2x1ZGUgPGhiLmg+Ci0KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKLQotY2xhc3MgSGFyZkJ1enpOR0ZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxIYXJmQnV6ek5HRmFjZT4gewotcHVibGljOgotICAgIHN0YXRpYyBjb25z
dCBoYl90YWdfdCB2ZXJ0VGFnOwotICAgIHN0YXRpYyBjb25zdCBoYl90YWdfdCB2cnQyVGFnOwot
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SGFyZkJ1enpOR0ZhY2U+IGNyZWF0ZShGb250UGxhdGZv
cm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmQnV6ek5HRmFjZShwbGF0Zm9ybURhdGEsIHVuaXF1ZUlE
KSk7Ci0gICAgfQotICAgIH5IYXJmQnV6ek5HRmFjZSgpOwotCi0gICAgaGJfZm9udF90KiBjcmVh
dGVGb250KCk7Ci0KLSAgICB2b2lkIHNldFNjcmlwdEZvclZlcnRpY2FsR2x5cGhTdWJzdGl0dXRp
b24oaGJfYnVmZmVyX3QqKTsKLQotcHJpdmF0ZToKLSAgICBIYXJmQnV6ek5HRmFjZShGb250UGxh
dGZvcm1EYXRhKiwgdWludDY0X3QpOwotCi0gICAgaGJfZmFjZV90KiBjcmVhdGVGYWNlKCk7Ci0K
LSAgICBGb250UGxhdGZvcm1EYXRhKiBtX3BsYXRmb3JtRGF0YTsKLSAgICB1aW50NjRfdCBtX3Vu
aXF1ZUlEOwotICAgIGhiX2ZhY2VfdCogbV9mYWNlOwotICAgIFdURjo6SGFzaE1hcDx1aW50MzJf
dCwgdWludDE2X3Q+KiBtX2dseXBoQ2FjaGVGb3JGYWNlQ2FjaGVFbnRyeTsKLQotICAgIGhiX3Nj
cmlwdF90IG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0OwotfTsKLQotfQotCi0jZW5kaWYgLy8gSGFy
ZkJ1enpOR0ZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNhaXJvLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRiM2QyNzgwNDFlYWE1ODFiZDkyMDdlYTM4ZDhk
ZjJiZjI4ZDlkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5H
RmFjZUNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSGFyZkJ1enpOR0ZhY2UuaCIKLQotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCi0jaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNs
dWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8ZnJlZXR5cGUv
ZnJlZXR5cGUuaD4KLSNpbmNsdWRlIDxmcmVldHlwZS90dHRhYmxlcy5oPgotI2luY2x1ZGUgPGhi
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIENhaXJvRnRGYWNlTG9ja2VyIHsKLXB1YmxpYzoKLSAgICBDYWlyb0Z0RmFjZUxv
Y2tlcihjYWlyb19zY2FsZWRfZm9udF90KiBjYWlyb1NjYWxlZEZvbnQpIDogbV9zY2FsZWRGb250
KGNhaXJvU2NhbGVkRm9udCkgeyB9OwotICAgIEZUX0ZhY2UgbG9jaygpCi0gICAgewotICAgICAg
ICByZXR1cm4gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1fc2NhbGVkRm9udCk7Ci0g
ICAgfTsKLSAgICB+Q2Fpcm9GdEZhY2VMb2NrZXIoKQotICAgIHsKLSAgICAgICAgY2Fpcm9fZnRf
c2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9zY2FsZWRGb250KTsKLSAgICB9Ci1wcml2YXRlOgot
ICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKLX07Ci0KLXN0YXRpYyBoYl9w
b3NpdGlvbl90IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGZsb2F0IHZhbHVlKQotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2KSk7Ci19Ci0K
LXN0YXRpYyBoYl9wb3NpdGlvbl90IGRvdWJsZVRvSGFyZkJ1enpQb3NpdGlvbihkb3VibGUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEg
PDwgMTYpKTsKLX0KLQotc3RhdGljIHZvaWQgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250LCBoYl9jb2RlcG9pbnRfdCBjb2RlcG9pbnQs
IGhiX3Bvc2l0aW9uX3QqIGFkdmFuY2UsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cykKLXsK
LSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBnbHlwaEV4dGVudHM7Ci0gICAgY2Fpcm9fZ2x5cGhf
dCBnbHlwaDsKLSAgICBnbHlwaC5pbmRleCA9IGNvZGVwb2ludDsKLSAgICBnbHlwaC54ID0gMDsK
LSAgICBnbHlwaC55ID0gMDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKHNj
YWxlZEZvbnQsICZnbHlwaCwgMSwgJmdseXBoRXh0ZW50cyk7Ci0KLSAgICBpZiAoYWR2YW5jZSkK
LSAgICAgICAgKmFkdmFuY2UgPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZ2x5cGhFeHRlbnRz
LnhfYWR2YW5jZSk7Ci0gICAgaWYgKGV4dGVudHMpIHsKLSAgICAgICAgZXh0ZW50cy0+eF9iZWFy
aW5nID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50cy54X2JlYXJpbmcpOwot
ICAgICAgICBleHRlbnRzLT55X2JlYXJpbmcgPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZ2x5
cGhFeHRlbnRzLnlfYmVhcmluZyk7Ci0gICAgICAgIGV4dGVudHMtPndpZHRoID0gZG91YmxlVG9I
YXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50cy53aWR0aCk7Ci0gICAgICAgIGV4dGVudHMtPmhl
aWdodCA9IGRvdWJsZVRvSGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMuaGVpZ2h0KTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgaGFyZmJ1enpHZXRHbHlwaChoYl9mb250X3QqLCB2
b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QsIGhi
X2NvZGVwb2ludF90KiBnbHlwaCwgdm9pZCopCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcGxh
dGZvcm1EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEp
OwotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEtPnNj
YWxlZEZvbnQoKTsKLSAgICBBU1NFUlQoc2NhbGVkRm9udCk7Ci0KLSAgICBjYWlyb19nbHlwaF90
KiBnbHlwaHMgPSAwOwotICAgIGludCBudW1HbHlwaHMgPSAwOwotICAgIENTdHJpbmcgdXRmOENv
ZGVwb2ludCA9IFVURjhFbmNvZGluZygpLmVuY29kZShyZWludGVycHJldF9jYXN0PFVDaGFyKj4o
JnVuaWNvZGUpLCAxLCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKTsKLSAgICBpZiAoQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1MgIT0gY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF90b19nbHlwaHMoc2Nh
bGVkRm9udCwgMCwgMCwgdXRmOENvZGVwb2ludC5kYXRhKCksIHV0ZjhDb2RlcG9pbnQubGVuZ3Ro
KCksICZnbHlwaHMsICZudW1HbHlwaHMsIDAsIDAsIDApKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKCFudW1HbHlwaHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqZ2x5cGgg
PSBnbHlwaHNbMF0uaW5kZXg7Ci0gICAgY2Fpcm9fZ2x5cGhfZnJlZShnbHlwaHMpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgaGJfcG9zaXRpb25fdCBoYXJmYnV6ekdldEdseXBoSG9y
aXpvbnRhbEFkdmFuY2UoaGJfZm9udF90Kiwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90
IGdseXBoLCB2b2lkKikKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBy
ZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSk7Ci0gICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IHBsYXRmb3JtRGF0YS0+c2NhbGVkRm9udCgpOwot
ICAgIEFTU0VSVChzY2FsZWRGb250KTsKLQotICAgIGhiX3Bvc2l0aW9uX3QgYWR2YW5jZSA9IDA7
Ci0gICAgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhzY2FsZWRGb250LCBnbHlwaCwgJmFk
dmFuY2UsIDApOwotICAgIHJldHVybiBhZHZhbmNlOwotfQotCi1zdGF0aWMgaGJfYm9vbF90IGhh
cmZidXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCosIHZvaWQqLCBoYl9jb2Rl
cG9pbnRfdCwgaGJfcG9zaXRpb25fdCosIGhiX3Bvc2l0aW9uX3QqLCB2b2lkKikKLXsKLSAgICAv
LyBKdXN0IHJldHVybiB0cnVlLCBmb2xsb3dpbmcgdGhlIHdheSB0aGF0IEhhcmZidXp6LUZyZWVU
eXBlCi0gICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcy4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqLCB2b2lk
KiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0
ZW50cywgdm9pZCopCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpOwotICAgIGNhaXJvX3Nj
YWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKTsKLSAg
ICBBU1NFUlQoc2NhbGVkRm9udCk7Ci0KLSAgICBDYWlyb0dldEdseXBoV2lkdGhBbmRFeHRlbnRz
KHNjYWxlZEZvbnQsIGdseXBoLCAwLCBleHRlbnRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDYWlyb1RleHRHZXRGb250RnVuY3MoKQot
ewotICAgIHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q2Fpcm9Gb250RnVuY3MgPSAw
OwotCi0gICAgLy8gV2UgZG9uJ3Qgc2V0IGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCB3ZSBjYW4n
dCBzdXBwb3J0LgotICAgIC8vIEhhcmZidXp6IHdpbGwgdXNlIHRoZSBmYWxsYmFjayBpbXBsZW1l
bnRhdGlvbiBpZiB0aGV5IGFyZW4ndCBzZXQuCi0gICAgaWYgKCFoYXJmYnV6ekNhaXJvRm9udEZ1
bmNzKSB7Ci0gICAgICAgIGhhcmZidXp6Q2Fpcm9Gb250RnVuY3MgPSBoYl9mb250X2Z1bmNzX2Ny
ZWF0ZSgpOwotICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGhhcmZidXp6Q2Fp
cm9Gb250RnVuY3MsIGhhcmZidXp6R2V0R2x5cGgsIDAsIDApOwotICAgICAgICBoYl9mb250X2Z1
bmNzX3NldF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmYnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJm
YnV6ekdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UsIDAsIDApOwotICAgICAgICBoYl9mb250X2Z1
bmNzX3NldF9nbHlwaF9oX29yaWdpbl9mdW5jKGhhcmZidXp6Q2Fpcm9Gb250RnVuY3MsIGhhcmZi
dXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5j
c19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGhhcmZidXp6Q2Fpcm9Gb250RnVuY3MsIGhhcmZidXp6
R2V0R2x5cGhFeHRlbnRzLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0
YWJsZShoYXJmYnV6ekNhaXJvRm9udEZ1bmNzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhcmZidXp6
Q2Fpcm9Gb250RnVuY3M7Ci19Ci0KLXN0YXRpYyBoYl9ibG9iX3QqIGhhcmZidXp6Q2Fpcm9HZXRU
YWJsZShoYl9mYWNlX3QqLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIGNh
aXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSByZWludGVycHJldF9jYXN0PGNhaXJvX3Nj
YWxlZF9mb250X3QqPih1c2VyRGF0YSk7Ci0gICAgaWYgKCFzY2FsZWRGb250KQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIENhaXJvRnRGYWNlTG9ja2VyIGNhaXJvRnRGYWNlTG9ja2VyKHNjYWxl
ZEZvbnQpOwotICAgIEZUX0ZhY2UgZnRGb250ID0gY2Fpcm9GdEZhY2VMb2NrZXIubG9jaygpOwot
ICAgIGlmICghZnRGb250KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEZUX1VMb25nIHRhYmxl
U2l6ZSA9IDA7Ci0gICAgRlRfRXJyb3IgZXJyb3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUoZnRGb250
LCB0YWcsIDAsIDAsICZ0YWJsZVNpemUpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBGVF9CeXRlKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PEZUX0J5dGUqPihm
YXN0TWFsbG9jKHRhYmxlU2l6ZSkpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBGVF9VTG9uZyBleHBlY3RlZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZTsKLSAgICBlcnJv
ciA9IEZUX0xvYWRfU2ZudF9UYWJsZShmdEZvbnQsIHRhZywgMCwgYnVmZmVyLCAmdGFibGVTaXpl
KTsKLSAgICBpZiAoZXJyb3IgfHwgdGFibGVTaXplICE9IGV4cGVjdGVkVGFibGVTaXplKSB7Ci0g
ICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHJldHVybiBoYl9ibG9iX2NyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihidWZm
ZXIpLCB0YWJsZVNpemUsIEhCX01FTU9SWV9NT0RFX1dSSVRBQkxFLCBidWZmZXIsIGZhc3RGcmVl
KTsKLX0KLQotaGJfZmFjZV90KiBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlRmFjZSgpCi17Ci0gICAg
aGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6ekNhaXJv
R2V0VGFibGUsIG1fcGxhdGZvcm1EYXRhLT5zY2FsZWRGb250KCksIDApOwotICAgIEFTU0VSVChm
YWNlKTsKLSAgICByZXR1cm4gZmFjZTsKLX0KLQotaGJfZm9udF90KiBIYXJmQnV6ek5HRmFjZTo6
Y3JlYXRlRm9udCgpCi17Ci0gICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUobV9m
YWNlKTsKLSAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6ekNhaXJvVGV4dEdldEZv
bnRGdW5jcygpLCBtX3BsYXRmb3JtRGF0YSwgMCk7Ci0gICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1f
cGxhdGZvcm1EYXRhLT5zaXplKCk7Ci0gICAgaWYgKGZsb29yZihzaXplKSA9PSBzaXplKQotICAg
ICAgICBoYl9mb250X3NldF9wcGVtKGZvbnQsIHNpemUsIHNpemUpOwotICAgIGludCBzY2FsZSA9
IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKHNpemUpOwotICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZv
bnQsIHNjYWxlLCBzY2FsZSk7Ci0gICAgaGJfZm9udF9tYWtlX2ltbXV0YWJsZShmb250KTsKLSAg
ICByZXR1cm4gZm9udDsKLX0KLQotR2x5cGhCdWZmZXJBZHZhbmNlIEhhcmZCdXp6U2hhcGVyOjpj
cmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKLXsKLSAg
ICByZXR1cm4gR2x5cGhCdWZmZXJBZHZhbmNlKHdpZHRoLCBoZWlnaHQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ29yZVRleHQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGM2NWNkNDFlMGVjMzA0NGViNTk5
YjVkNTRlMTY3ODQ1NmMxNDkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hh
cmZCdXp6TkdGYWNlQ29yZVRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKLQotI2luY2x1
ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJoYi5oIgotI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKENH
RmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGhiX3Bvc2l0aW9uX3Q+KHZh
bHVlICogKDEgPDwgMTYpKTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBnZXRHbHlwaChoYl9mb250
X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2Nv
ZGVwb2ludF90IHZhcmlhdGlvblNlbGVjdG9yLCBoYl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQq
IHVzZXJEYXRhKQotewotICAgIENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgpOwotICAgIFVuaUNoYXIgY2hhcmFj
dGVyc1s0XTsKLSAgICBDR0dseXBoIGNnR2x5cGhzWzRdOwotICAgIHNpemVfdCBsZW5ndGggPSAw
OwotICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNoYXJhY3RlcnMsIGxlbmd0aCwgdW5pY29kZSk7Ci0g
ICAgaWYgKCFDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGN0Rm9udCwgY2hhcmFjdGVycywg
Y2dHbHlwaHMsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqZ2x5cGggPSBj
Z0dseXBoc1swXTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX3Bvc2l0aW9uX3Qg
Z2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERh
dGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBDVEZvbnRS
ZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEp
LT5jdEZvbnQoKTsKLSAgICBDR0dseXBoIGNnR2x5cGggPSBnbHlwaDsKLSAgICBDR0Zsb2F0IGFk
dmFuY2UgPSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhjdEZvbnQsIGtDVEZvbnRIb3Jpem9u
dGFsT3JpZW50YXRpb24sICZjZ0dseXBoLCAwLCAxKTsKLSAgICByZXR1cm4gZmxvYXRUb0hhcmZC
dXp6UG9zaXRpb24oYWR2YW5jZSk7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGhIb3Jp
em9udGFsT3JpZ2luKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBv
aW50X3QgZ2x5cGgsIGhiX3Bvc2l0aW9uX3QqIHgsIGhiX3Bvc2l0aW9uX3QqIHksIHZvaWQqIHVz
ZXJEYXRhKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaGJfYm9vbF90IGdldEds
eXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2lu
dF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMsIHZvaWQqIHVzZXJEYXRhKQot
ewotICAgIENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURh
dGEqPihmb250RGF0YSktPmN0Rm9udCgpOwotICAgIENHUmVjdCBjZ1JlY3Q7Ci0gICAgQ0dHbHlw
aCBjZ0dseXBoID0gZ2x5cGg7Ci0gICAgaWYgKENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlw
aHMoY3RGb250LCBrQ1RGb250RGVmYXVsdE9yaWVudGF0aW9uLCAmY2dHbHlwaCwgJmNnUmVjdCwg
MSkgPT0gQ0dSZWN0TnVsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGV4dGVudHMtPnhf
YmVhcmluZyA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueCk7Ci0gICAg
ZXh0ZW50cy0+eV9iZWFyaW5nID0gLWZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNnUmVjdC5vcmln
aW4ueSk7Ci0gICAgZXh0ZW50cy0+d2lkdGggPSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1Jl
Y3Quc2l6ZS53aWR0aCk7Ci0gICAgZXh0ZW50cy0+aGVpZ2h0ID0gZmxvYXRUb0hhcmZCdXp6UG9z
aXRpb24oY2dSZWN0LnNpemUuaGVpZ2h0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcygpCi17Ci0gICAg
c3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IDA7Ci0K
LSAgICBpZiAoIWhhcmZidXp6Q29yZVRleHRGb250RnVuY3MpIHsKLSAgICAgICAgaGFyZmJ1enpD
b3JlVGV4dEZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVuY3NfY3JlYXRlKCk7Ci0gICAgICAgIGhiX2Zv
bnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5
cGgsIDAsIDApOwotICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2FkdmFuY2VfZnVu
YyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlLCAw
LCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJm
YnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDApOwot
ICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9leHRlbnRzX2Z1bmMoaGFyZmJ1enpDb3Jl
VGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhFeHRlbnRzLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9m
dW5jc19tYWtlX2ltbXV0YWJsZShoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGhhcmZidXp6Q29yZVRleHRGb250RnVuY3M7Ci19Ci0KLXN0YXRpYyB2b2lkIHJl
bGVhc2VUYWJsZURhdGEodm9pZCogdXNlckRhdGEpCi17Ci0gICAgQ0ZEYXRhUmVmIGNmRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPih1c2VyRGF0YSk7Ci0gICAgQ0ZSZWxlYXNlKGNm
RGF0YSk7Ci19Ci0KLXN0YXRpYyBoYl9ibG9iX3QqIGhhcmZidXp6Q29yZVRleHRHZXRUYWJsZSho
Yl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgQ0dG
b250UmVmIGNnRm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0dGb250UmVmPih1c2VyRGF0YSk7Ci0g
ICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENHRm9udENvcHlUYWJsZUZvclRhZyhjZ0ZvbnQsIHRhZyk7
Ci0gICAgaWYgKCFjZkRhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgY2hhciog
ZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KENGRGF0YUdldEJ5dGVQdHIoY2ZE
YXRhKSk7Ci0gICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChjZkRhdGEp
OwotICAgIGlmICghZGF0YSB8fCAhbGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gaGJfYmxvYl9jcmVhdGUoZGF0YSwgbGVuZ3RoLCBIQl9NRU1PUllfTU9ERV9SRUFET05MWSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxfX0NGRGF0YSo+KGNmRGF0YSkpLCBy
ZWxlYXNlVGFibGVEYXRhKTsKLX0KLQotaGJfZmFjZV90KiBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRl
RmFjZSgpCi17Ci0gICAgLy8gSXQgc2VlbXMgdGhhdCBDVEZvbnRDb3B5VGFibGUgb2YgTWFjT1NY
MTAuNSBzZGsgZG9lc24ndCB3b3JrIGZvcgotICAgIC8vIE9wZW5UeXBlIGxheW91dCB0YWJsZXMo
R0RFRiwgR1NVQiwgR1BPUykuIFVzZSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcgaW5zdGVhZC4KLSAg
ICBoYl9mYWNlX3QqIGZhY2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzKGhhcmZidXp6Q29y
ZVRleHRHZXRUYWJsZSwgbV9wbGF0Zm9ybURhdGEtPmNnRm9udCgpLCAwKTsKLSAgICBBU1NFUlQo
ZmFjZSk7Ci0gICAgcmV0dXJuIGZhY2U7Ci19Ci0KLWhiX2ZvbnRfdCogSGFyZkJ1enpOR0ZhY2U6
OmNyZWF0ZUZvbnQoKQotewotICAgIGhiX2ZvbnRfdCogZm9udCA9IGhiX2ZvbnRfY3JlYXRlKG1f
ZmFjZSk7Ci0gICAgaGJfZm9udF9zZXRfZnVuY3MoZm9udCwgaGFyZmJ1enpDb3JlVGV4dEdldEZv
bnRGdW5jcygpLCBtX3BsYXRmb3JtRGF0YSwgMCk7Ci0gICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1f
cGxhdGZvcm1EYXRhLT5tX3NpemU7Ci0gICAgaGJfZm9udF9zZXRfcHBlbShmb250LCBzaXplLCBz
aXplKTsKLSAgICBjb25zdCBpbnQgc2NhbGUgPSAoMSA8PCAxNikgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemUpOwotICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZvbnQsIHNjYWxlLCBzY2FsZSk7Ci0gICAg
aGJfZm9udF9tYWtlX2ltbXV0YWJsZShmb250KTsKLSAgICByZXR1cm4gZm9udDsKLX0KLQotR2x5
cGhCdWZmZXJBZHZhbmNlIEhhcmZCdXp6U2hhcGVyOjpjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2Uo
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKLXsKLSAgICByZXR1cm4gQ0dTaXplTWFrZSh3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VT
a2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hh
cmZCdXp6TkdGYWNlU2tpYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMzll
ZmE3MzcxM2I4ZGE1YzVmZGQ2MzVlYWUwODVmNzI5OTZlNjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhhcmZCdXp6TkdGYWNl
LmgiCi0KLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCi0jaW5jbHVkZSAiU2tGb250SG9zdC5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNp
bmNsdWRlICJTa1BhdGguaCIKLSNpbmNsdWRlICJTa1BvaW50LmgiCi0jaW5jbHVkZSAiU2tSZWN0
LmgiCi0jaW5jbHVkZSAiU2tVdGlscy5oIgotCi0jaW5jbHVkZSAiaGIuaCIKLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIE91ciBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgY2FsbGJhY2tzIHdoaWNoIEhhcmZidXp6IHJlcXVpcmVzIGJ5IHVzaW5nIFNr
aWEKLS8vIGNhbGxzLiBTZWUgdGhlIEhhcmZidXp6IHNvdXJjZSBmb3IgcmVmZXJlbmNlcyBhYm91
dCB3aGF0IHRoZXNlIGNhbGxiYWNrcyBkby4KLQotc3RydWN0IEhhcmZCdXp6Rm9udERhdGEgewot
ICAgIEhhcmZCdXp6Rm9udERhdGEoV1RGOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4qIGds
eXBoQ2FjaGVGb3JGYWNlQ2FjaGVFbnRyeSkKLSAgICAgICAgOiBtX2dseXBoQ2FjaGVGb3JGYWNl
Q2FjaGVFbnRyeShnbHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnkpCi0gICAgeyB9Ci0gICAgU2tQ
YWludCBtX3BhaW50OwotICAgIFdURjo6SGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+KiBtX2ds
eXBoQ2FjaGVGb3JGYWNlQ2FjaGVFbnRyeTsKLX07Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90IFNr
aWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oU2tTY2FsYXIgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IFNrU2NhbGFyVG9GaXhlZCh2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFNraWFHZXRHbHlwaFdp
ZHRoQW5kRXh0ZW50cyhTa1BhaW50KiBwYWludCwgaGJfY29kZXBvaW50X3QgY29kZXBvaW50LCBo
Yl9wb3NpdGlvbl90KiB3aWR0aCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzKQotewotICAg
IEFTU0VSVChjb2RlcG9pbnQgPD0gMHhGRkZGKTsKLSAgICBwYWludC0+c2V0VGV4dEVuY29kaW5n
KFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0KLSAgICBTa1NjYWxhciBza1dpZHRo
OwotICAgIFNrUmVjdCBza0JvdW5kczsKLSAgICB1aW50MTZfdCBnbHlwaCA9IGNvZGVwb2ludDsK
LQotICAgIHBhaW50LT5nZXRUZXh0V2lkdGhzKCZnbHlwaCwgc2l6ZW9mKGdseXBoKSwgJnNrV2lk
dGgsICZza0JvdW5kcyk7Ci0gICAgaWYgKHdpZHRoKQotICAgICAgICAqd2lkdGggPSBTa2lhU2Nh
bGFyVG9IYXJmYnV6elBvc2l0aW9uKHNrV2lkdGgpOwotICAgIGlmIChleHRlbnRzKSB7Ci0gICAg
ICAgIC8vIEludmVydCB5LWF4aXMgYmVjYXVzZSBTa2lhIGlzIHktZ3Jvd3MtZG93biBidXQgd2Ug
c2V0IHVwIGhhcmZidXp6IHRvIGJlIHktZ3Jvd3MtdXAuCi0gICAgICAgIGV4dGVudHMtPnhfYmVh
cmluZyA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2tCb3VuZHMuZkxlZnQpOwotICAg
ICAgICBleHRlbnRzLT55X2JlYXJpbmcgPSBTa2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKC1z
a0JvdW5kcy5mVG9wKTsKLSAgICAgICAgZXh0ZW50cy0+d2lkdGggPSBTa2lhU2NhbGFyVG9IYXJm
YnV6elBvc2l0aW9uKHNrQm91bmRzLndpZHRoKCkpOwotICAgICAgICBleHRlbnRzLT5oZWlnaHQg
PSBTa2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKC1za0JvdW5kcy5oZWlnaHQoKSk7Ci0gICAg
fQotfQotCi1zdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGgoaGJfZm9udF90KiBoYkZv
bnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRf
dCB2YXJpYXRpb25TZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lkKiB1c2VyRGF0
YSkKLXsKLSAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxIYXJmQnV6ekZvbnREYXRhKj4oZm9udERhdGEpOwotCi0gICAgV1RGOjpIYXNoTWFwPHVpbnQz
Ml90LCB1aW50MTZfdD46OkFkZFJlc3VsdCByZXN1bHQgPSBoYkZvbnREYXRhLT5tX2dseXBoQ2Fj
aGVGb3JGYWNlQ2FjaGVFbnRyeS0+YWRkKHVuaWNvZGUsIDApOwotICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkgewotICAgICAgICBTa1BhaW50KiBwYWludCA9ICZoYkZvbnREYXRhLT5tX3BhaW50
OwotICAgICAgICBwYWludC0+c2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYzMl9UZXh0RW5j
b2RpbmcpOwotICAgICAgICB1aW50MTZfdCBnbHlwaDE2OwotICAgICAgICBwYWludC0+dGV4dFRv
R2x5cGhzKCZ1bmljb2RlLCBzaXplb2YoaGJfY29kZXBvaW50X3QpLCAmZ2x5cGgxNik7Ci0gICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBnbHlwaDE2OwotICAgICAgICAqZ2x5cGggPSBn
bHlwaDE2OwotICAgIH0KLSAgICAqZ2x5cGggPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAg
IHJldHVybiAhISpnbHlwaDsKLX0KLQotc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRH
bHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwg
aGJfY29kZXBvaW50X3QgZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIEhhcmZCdXp6Rm9u
dERhdGEqIGhiRm9udERhdGEgPSByZWludGVycHJldF9jYXN0PEhhcmZCdXp6Rm9udERhdGEqPihm
b250RGF0YSk7Ci0gICAgaGJfcG9zaXRpb25fdCBhZHZhbmNlID0gMDsKLQotICAgIFNraWFHZXRH
bHlwaFdpZHRoQW5kRXh0ZW50cygmaGJGb250RGF0YS0+bV9wYWludCwgZ2x5cGgsICZhZHZhbmNl
LCAwKTsKLSAgICByZXR1cm4gYWR2YW5jZTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6
ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbihoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERh
dGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9wb3NpdGlvbl90KiB4LCBoYl9wb3NpdGlvbl90
KiB5LCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICAvLyBKdXN0IHJldHVybiB0cnVlLCBmb2xsb3dp
bmcgdGhlIHdheSB0aGF0IEhhcmZidXp6LUZyZWVUeXBlCi0gICAgLy8gaW1wbGVtZW50YXRpb24g
ZG9lcy4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdl
dEdseXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVw
b2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMsIHZvaWQqIHVzZXJEYXRh
KQotewotICAgIEhhcmZCdXp6Rm9udERhdGEqIGhiRm9udERhdGEgPSByZWludGVycHJldF9jYXN0
PEhhcmZCdXp6Rm9udERhdGEqPihmb250RGF0YSk7Ci0KLSAgICBTa2lhR2V0R2x5cGhXaWR0aEFu
ZEV4dGVudHMoJmhiRm9udERhdGEtPm1fcGFpbnQsIGdseXBoLCAwLCBleHRlbnRzKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpTa2lhR2V0
Rm9udEZ1bmNzKCkKLXsKLSAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6elNraWFG
b250RnVuY3MgPSAwOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2V0IGNhbGxiYWNrIGZ1bmN0aW9ucyB3
aGljaCB3ZSBjYW4ndCBzdXBwb3J0LgotICAgIC8vIEhhcmZidXp6IHdpbGwgdXNlIHRoZSBmYWxs
YmFjayBpbXBsZW1lbnRhdGlvbiBpZiB0aGV5IGFyZW4ndCBzZXQuCi0gICAgaWYgKCFoYXJmYnV6
elNraWFGb250RnVuY3MpIHsKLSAgICAgICAgaGFyZmJ1enpTa2lhRm9udEZ1bmNzID0gaGJfZm9u
dF9mdW5jc19jcmVhdGUoKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyho
YXJmYnV6elNraWFGb250RnVuY3MsIGhhcmZidXp6R2V0R2x5cGgsIDAsIDApOwotICAgICAgICBo
Yl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmYnV6elNraWFGb250RnVu
Y3MsIGhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwgMCwgMCk7Ci0gICAgICAgIGhi
X2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfb3JpZ2luX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNz
LCBoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwgMCwgMCk7Ci0gICAgICAgIGhiX2Zv
bnRfZnVuY3Nfc2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJmYnV6elNraWFGb250RnVuY3MsIGhh
cmZidXp6R2V0R2x5cGhFeHRlbnRzLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19tYWtl
X2ltbXV0YWJsZShoYXJmYnV6elNraWFGb250RnVuY3MpOwotICAgIH0KLSAgICByZXR1cm4gaGFy
ZmJ1enpTa2lhRm9udEZ1bmNzOwotfQotCi1zdGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6elNraWFH
ZXRUYWJsZShoYl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9pZCogdXNlckRhdGEpCi17
Ci0gICAgU2tGb250SUQgdW5pcXVlSUQgPSBzdGF0aWNfY2FzdDxTa0ZvbnRJRD4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50NjRfdD4odXNlckRhdGEpKTsKLQotICAgIGNvbnN0IHNpemVfdCB0YWJsZVNp
emUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUodW5pcXVlSUQsIHRhZyk7Ci0gICAgaWYgKCF0
YWJsZVNpemUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY2hhciogYnVmZmVyID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyh0YWJsZVNpemUpKTsKLSAgICBpZiAoIWJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc2l6ZV90IGFjdHVhbFNpemUgPSBTa0ZvbnRIb3N0
OjpHZXRUYWJsZURhdGEodW5pcXVlSUQsIHRhZywgMCwgdGFibGVTaXplLCBidWZmZXIpOwotICAg
IGlmICh0YWJsZVNpemUgIT0gYWN0dWFsU2l6ZSkgewotICAgICAgICBmYXN0RnJlZShidWZmZXIp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGJfYmxvYl9jcmVhdGUo
Y29uc3RfY2FzdDxjaGFyKj4oYnVmZmVyKSwgdGFibGVTaXplLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBIQl9NRU1PUllfTU9ERV9XUklUQUJMRSwgYnVmZmVyLCBmYXN0RnJlZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGRlc3Ryb3lIYXJmQnV6ekZvbnREYXRhKHZvaWQqIHVzZXJEYXRhKQotewot
ICAgIEhhcmZCdXp6Rm9udERhdGEqIGhiRm9udERhdGEgPSByZWludGVycHJldF9jYXN0PEhhcmZC
dXp6Rm9udERhdGEqPih1c2VyRGF0YSk7Ci0gICAgZGVsZXRlIGhiRm9udERhdGE7Ci19Ci0KLWhi
X2ZhY2VfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZhY2UoKQotewotICAgIGhiX2ZhY2VfdCog
ZmFjZSA9IGhiX2ZhY2VfY3JlYXRlX2Zvcl90YWJsZXMoaGFyZmJ1enpTa2lhR2V0VGFibGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcGxhdGZvcm1EYXRhLT51bmlxdWVJRCgpKSwgMCk7Ci0g
ICAgQVNTRVJUKGZhY2UpOwotICAgIHJldHVybiBmYWNlOwotfQotCi1oYl9mb250X3QqIEhhcmZC
dXp6TkdGYWNlOjpjcmVhdGVGb250KCkKLXsKLSAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnRE
YXRhID0gbmV3IEhhcmZCdXp6Rm9udERhdGEobV9nbHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnkp
OwotICAgIG1fcGxhdGZvcm1EYXRhLT5zZXR1cFBhaW50KCZoYkZvbnREYXRhLT5tX3BhaW50KTsK
LSAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOwotICAgIGhiX2Zv
bnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6U2tpYUdldEZvbnRGdW5jcygpLCBoYkZvbnREYXRh
LCBkZXN0cm95SGFyZkJ1enpGb250RGF0YSk7Ci0gICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1E
YXRhLT5zaXplKCk7Ci0gICAgaW50IHNjYWxlID0gU2tpYVNjYWxhclRvSGFyZmJ1enpQb3NpdGlv
bihzaXplKTsKLSAgICBoYl9mb250X3NldF9zY2FsZShmb250LCBzY2FsZSwgc2NhbGUpOwotICAg
IGhiX2ZvbnRfbWFrZV9pbW11dGFibGUoZm9udCk7Ci0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLUds
eXBoQnVmZmVyQWR2YW5jZSBIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNl
KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCi17Ci0gICAgcmV0dXJuIEdseXBoQnVmZmVyQWR2
YW5jZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpTaGFwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmVm
NDVlZTdjNTFlYTk1ZTgwOWNkMmZkMmQ3MTU5MDNmNzhmMmIzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgi
Ci0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKLSNpbmNs
dWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJUZXh0UnVu
LmgiCi0jaW5jbHVkZSAiaGItaWN1LmgiCi0jaW5jbHVkZSA8dW5pY29kZS9ub3JtbHpyLmg+Ci0j
aW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgSGFy
ZkJ1enpTY29wZWRQdHIgewotcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKkRlc3Ryb3lGdW5j
dGlvbikoVCopOwotCi0gICAgSGFyZkJ1enpTY29wZWRQdHIoVCogcHRyLCBEZXN0cm95RnVuY3Rp
b24gZGVzdHJveSkKLSAgICAgICAgOiBtX3B0cihwdHIpCi0gICAgICAgICwgbV9kZXN0cm95KGRl
c3Ryb3kpCi0gICAgewotICAgICAgICBBU1NFUlQobV9kZXN0cm95KTsKLSAgICB9Ci0gICAgfkhh
cmZCdXp6U2NvcGVkUHRyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3B0cikKLSAgICAgICAgICAg
ICgqbV9kZXN0cm95KShtX3B0cik7Ci0gICAgfQotCi0gICAgVCogZ2V0KCkgeyByZXR1cm4gbV9w
dHI7IH0KLXByaXZhdGU6Ci0gICAgVCogbV9wdHI7Ci0gICAgRGVzdHJveUZ1bmN0aW9uIG1fZGVz
dHJveTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQo
aGJfcG9zaXRpb25fdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZh
bHVlKSAvICgxIDw8IDE2KTsKLX0KLQotSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpIYXJm
QnV6elJ1bihjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIHN0YXJ0SW5k
ZXgsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9z
Y3JpcHRfdCBzY3JpcHQpCi0gICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQotICAgICwgbV9zdGFy
dEluZGV4KHN0YXJ0SW5kZXgpCi0gICAgLCBtX251bUNoYXJhY3RlcnMobnVtQ2hhcmFjdGVycykK
LSAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fc2NyaXB0KHNjcmlwdCkKLXsK
LX0KLQotdm9pZCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFwcGx5U2hhcGVSZXN1bHQo
aGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQotewotICAgIG1fbnVtR2x5cGhzID0gaGJfYnVm
ZmVyX2dldF9sZW5ndGgoaGFyZmJ1enpCdWZmZXIpOwotICAgIG1fZ2x5cGhzLnJlc2l6ZShtX251
bUdseXBocyk7Ci0gICAgbV9hZHZhbmNlcy5yZXNpemUobV9udW1HbHlwaHMpOwotICAgIG1fZ2x5
cGhUb0NoYXJhY3RlckluZGV4ZXMucmVzaXplKG1fbnVtR2x5cGhzKTsKLSAgICBtX29mZnNldHMu
cmVzaXplKG1fbnVtR2x5cGhzKTsKLX0KLQotdm9pZCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OnNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGluZGV4LCB1aW50MTZfdCBnbHlwaElk
LCBmbG9hdCBhZHZhbmNlLCBmbG9hdCBvZmZzZXRYLCBmbG9hdCBvZmZzZXRZKQotewotICAgIG1f
Z2x5cGhzW2luZGV4XSA9IGdseXBoSWQ7Ci0gICAgbV9hZHZhbmNlc1tpbmRleF0gPSBhZHZhbmNl
OwotICAgIG1fb2Zmc2V0c1tpbmRleF0gPSBGbG9hdFBvaW50KG9mZnNldFgsIG9mZnNldFkpOwot
fQotCi1pbnQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRleEZvclhQ
b3NpdGlvbihmbG9hdCB0YXJnZXRYKQotewotICAgIEFTU0VSVCh0YXJnZXRYIDw9IG1fd2lkdGgp
OwotICAgIGZsb2F0IGN1cnJlbnRYID0gMDsKLSAgICBmbG9hdCBjdXJyZW50QWR2YW5jZSA9IG1f
YWR2YW5jZXNbMF07Ci0gICAgdW5zaWduZWQgZ2x5cGhJbmRleCA9IDA7Ci0KLSAgICAvLyBTdW0g
dXAgYWR2YW5jZXMgdGhhdCBiZWxvbmcgdG8gYSBjaGFyYWN0ZXIuCi0gICAgd2hpbGUgKGdseXBo
SW5kZXggPCBtX251bUdseXBocyAtIDEgJiYgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlw
aEluZGV4XSA9PSBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXggKyAxXSkKLSAg
ICAgICAgY3VycmVudEFkdmFuY2UgKz0gbV9hZHZhbmNlc1srK2dseXBoSW5kZXhdOwotICAgIGN1
cnJlbnRBZHZhbmNlID0gY3VycmVudEFkdmFuY2UgLyAyLjA7Ci0gICAgaWYgKHRhcmdldFggPD0g
Y3VycmVudEFkdmFuY2UpCi0gICAgICAgIHJldHVybiBydGwoKSA/IG1fbnVtQ2hhcmFjdGVycyA6
IDA7Ci0KLSAgICArK2dseXBoSW5kZXg7Ci0gICAgd2hpbGUgKGdseXBoSW5kZXggPCBtX251bUds
eXBocykgewotICAgICAgICB1bnNpZ25lZCBwcmV2Q2hhcmFjdGVySW5kZXggPSBtX2dseXBoVG9D
aGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXggLSAxXTsKLSAgICAgICAgZmxvYXQgcHJldkFkdmFu
Y2UgPSBjdXJyZW50QWR2YW5jZTsKLSAgICAgICAgY3VycmVudEFkdmFuY2UgPSBtX2FkdmFuY2Vz
W2dseXBoSW5kZXhdOwotICAgICAgICB3aGlsZSAoZ2x5cGhJbmRleCA8IG1fbnVtR2x5cGhzIC0g
MSAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXhdID09IG1fZ2x5cGhUb0No
YXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRleCArIDFdKQotICAgICAgICAgICAgY3VycmVudEFkdmFu
Y2UgKz0gbV9hZHZhbmNlc1srK2dseXBoSW5kZXhdOwotICAgICAgICBjdXJyZW50QWR2YW5jZSA9
IGN1cnJlbnRBZHZhbmNlIC8gMi4wOwotICAgICAgICBmbG9hdCBuZXh0WCA9IGN1cnJlbnRYICsg
cHJldkFkdmFuY2UgKyBjdXJyZW50QWR2YW5jZTsKLSAgICAgICAgaWYgKGN1cnJlbnRYIDw9IHRh
cmdldFggJiYgdGFyZ2V0WCA8PSBuZXh0WCkKLSAgICAgICAgICAgIHJldHVybiBydGwoKSA/IHBy
ZXZDaGFyYWN0ZXJJbmRleCA6IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRleF07
Ci0gICAgICAgIGN1cnJlbnRYID0gbmV4dFg7Ci0gICAgICAgIHByZXZBZHZhbmNlID0gY3VycmVu
dEFkdmFuY2U7Ci0gICAgICAgICsrZ2x5cGhJbmRleDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcnRs
KCkgPyAwIDogbV9udW1DaGFyYWN0ZXJzOwotfQotCi1mbG9hdCBIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgQVNT
RVJUKG9mZnNldCA8IG1fbnVtQ2hhcmFjdGVycyk7Ci0gICAgdW5zaWduZWQgZ2x5cGhJbmRleCA9
IDA7Ci0gICAgZmxvYXQgcG9zaXRpb24gPSAwOwotICAgIGlmIChydGwoKSkgewotICAgICAgICB3
aGlsZSAoZ2x5cGhJbmRleCA8IG1fbnVtR2x5cGhzICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4
ZXNbZ2x5cGhJbmRleF0gPiBvZmZzZXQpIHsKLSAgICAgICAgICAgIHBvc2l0aW9uICs9IG1fYWR2
YW5jZXNbZ2x5cGhJbmRleF07Ci0gICAgICAgICAgICArK2dseXBoSW5kZXg7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gRm9yIFJUTCwgd2UgbmVlZCB0byByZXR1cm4gdGhlIHJpZ2h0IHNpZGUgYm91
bmRhcnkgb2YgdGhlIGNoYXJhY3Rlci4KLSAgICAgICAgLy8gQWRkIGFkdmFuY2Ugb2YgZ2x5cGhz
IHdoaWNoIGFyZSBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIuCi0gICAgICAgIHdoaWxlIChnbHlwaElu
ZGV4IDwgbV9udW1HbHlwaHMgLSAxICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJ
bmRleF0gPT0gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4ICsgMV0pIHsKLSAg
ICAgICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5jZXNbZ2x5cGhJbmRleF07Ci0gICAgICAgICAg
ICArK2dseXBoSW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcG9zaXRpb24gKz0gbV9hZHZhbmNl
c1tnbHlwaEluZGV4XTsKLSAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAoZ2x5cGhJbmRleCA8
IG1fbnVtR2x5cGhzICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRleF0gPCBv
ZmZzZXQpIHsKLSAgICAgICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5jZXNbZ2x5cGhJbmRleF07
Ci0gICAgICAgICAgICArK2dseXBoSW5kZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHBvc2l0aW9uOwotfQotCi1zdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBzb3VyY2UsIFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCkKLXsKLSAgICBpbnQg
cG9zaXRpb24gPSAwOwotICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKLSAgICB3aGlsZSAocG9zaXRp
b24gPCBsZW5ndGgpIHsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAgIGludCBu
ZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICAgICAgVTE2X05FWFQoc291cmNlLCBuZXh0UG9z
aXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKLSAgICAgICAgLy8gRG9uJ3Qgbm9ybWFsaXplIHRh
YnMgYXMgdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMgc3BhY2VzIGZvciB3b3JkLWVuZC4KLSAgICAg
ICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpICYmIGNoYXJhY3RlciAhPSAnXHQn
KQotICAgICAgICAgICAgY2hhcmFjdGVyID0gJyAnOwotICAgICAgICBlbHNlIGlmIChGb250Ojp0
cmVhdEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoY2hhcmFjdGVyKSkKLSAgICAgICAg
ICAgIGNoYXJhY3RlciA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICBVMTZfQVBQRU5EKGRlc3Rp
bmF0aW9uLCBwb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIsIGVycm9yKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChlcnJvciwgIWVycm9yKTsKLSAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRp
b247Ci0gICAgfQotfQotCi1IYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpTaGFwZXIoY29uc3QgRm9u
dCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKQotICAgIDogSGFyZkJ1enpTaGFwZXJCYXNlKGZv
bnQsIHJ1bikKLSAgICAsIG1fZnJvbUluZGV4KDApCi0gICAgLCBtX3RvSW5kZXgobV9ydW4ubGVu
Z3RoKCkpCi17Ci0gICAgbV9ub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgVUNo
YXJbbV9ydW4ubGVuZ3RoKCkgKyAxXSk7Ci0gICAgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoID0g
bV9ydW4ubGVuZ3RoKCk7Ci0gICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtX3J1bi5jaGFyYWN0ZXJz
MTYoKSwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgp
OwotICAgIHNldFBhZGRpbmcobV9ydW4uZXhwYW5zaW9uKCkpOwotICAgIHNldEZvbnRGZWF0dXJl
cygpOwotfQotCi1IYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hhcGVyKCkKLXsKLX0KLQotdm9p
ZCBIYXJmQnV6elNoYXBlcjo6c2V0RHJhd1JhbmdlKGludCBmcm9tLCBpbnQgdG8pCi17Ci0gICAg
QVNTRVJUKGZyb20gPj0gMCk7Ci0gICAgQVNTRVJUKHRvIDw9IG1fcnVuLmxlbmd0aCgpKTsKLSAg
ICBtX2Zyb21JbmRleCA9IGZyb207Ci0gICAgbV90b0luZGV4ID0gdG87Ci19Ci0KLXZvaWQgSGFy
ZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJlcygpCi17Ci0gICAgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiA9IG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKGRl
c2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKLSAgICAgICAgc3RhdGljIGhi
X2ZlYXR1cmVfdCB2ZXJ0ID0geyBIYXJmQnV6ek5HRmFjZTo6dmVydFRhZywgMSwgMCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KC0xKSB9OwotICAgICAgICBzdGF0aWMgaGJfZmVhdHVyZV90IHZydDIg
PSB7IEhhcmZCdXp6TkdGYWNlOjp2cnQyVGFnLCAxLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
LTEpIH07Ci0gICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKHZlcnQpOwotICAgICAgICBtX2ZlYXR1
cmVzLmFwcGVuZCh2cnQyKTsKLSAgICB9Ci0KLSAgICBGb250RmVhdHVyZVNldHRpbmdzKiBzZXR0
aW5ncyA9IGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3Mp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIG51bUZlYXR1cmVzID0gc2V0dGluZ3Mt
PnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmVhdHVyZXM7ICsraSkg
ewotICAgICAgICBoYl9mZWF0dXJlX3QgZmVhdHVyZTsKLSAgICAgICAgY29uc3QgVUNoYXIqIHRh
ZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGZlYXR1cmUu
dGFnID0gSEJfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1szXSk7Ci0gICAgICAgIGZl
YXR1cmUudmFsdWUgPSBzZXR0aW5ncy0+YXQoaSkudmFsdWUoKTsKLSAgICAgICAgZmVhdHVyZS5z
dGFydCA9IDA7Ci0gICAgICAgIGZlYXR1cmUuZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0x
KTsKLSAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQoZmVhdHVyZSk7Ci0gICAgfQotfQotCi1ib29s
IEhhcmZCdXp6U2hhcGVyOjpzaGFwZShHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAg
aWYgKCFjb2xsZWN0SGFyZkJ1enpSdW5zKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fdG90YWxXaWR0aCA9IDA7Ci0gICAgLy8gV2ViS2l0IGRvZXNuJ3Qgc2V0IGRpcmVjdGlvbiB3
aGVuIGNhbHVsYXRpbmcgd2lkdGhzLiBMZWF2ZSB0aGUgZGlyZWN0aW9uIHNldHRpbmcgdG8KLSAg
ICAvLyBIYXJmQnV6eiB3aGVuIHdlIGFyZSBjYWxjdWxhdGluZyB3aWR0aHMgKGV4Y2VwdCB3aGVu
IGRpcmVjdGlvbmFsT3ZlcnJpZGUoKSBpcyBzZXQpLgotICAgIGlmICghc2hhcGVIYXJmQnV6elJ1
bnMoZ2x5cGhCdWZmZXIgfHwgbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1fdG90YWxXaWR0aCA9IHJvdW5kZihtX3RvdGFsV2lkdGgpOwot
Ci0gICAgaWYgKGdseXBoQnVmZmVyICYmICFmaWxsR2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRmxvYXRQb2lu
dCBIYXJmQnV6elNoYXBlcjo6YWRqdXN0U3RhcnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkKLXsKLSAgICByZXR1cm4gcG9pbnQgKyBtX3N0YXJ0T2Zmc2V0OwotfQotCi1ib29sIEhhcmZC
dXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKCkKLXsKLSAgICBjb25zdCBVQ2hhciogbm9y
bWFsaXplZEJ1ZmZlckVuZCA9IG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fbm9ybWFsaXpl
ZEJ1ZmZlckxlbmd0aDsKLSAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgaXRlcmF0
b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCAwLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgs
IG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7Ci0gICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAg
dW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7Ci0gICAgdW5zaWduZWQgc3RhcnRJbmRleE9mQ3Vy
cmVudFJ1biA9IDA7Ci0gICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rl
ckxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0
ZXIsIGZhbHNlKS5mb250RGF0YTsKLSAgICBVRXJyb3JDb2RlIGVycm9yQ29kZSA9IFVfWkVST19F
UlJPUjsKLSAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlwdF9nZXRTY3JpcHQoY2hh
cmFjdGVyLCAmZXJyb3JDb2RlKTsKLSAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29kZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRvIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJl
bnRDaGFyYWN0ZXJQb3NpdGlvbiA9IGl0ZXJhdG9yLmNoYXJhY3RlcnMoKTsKLSAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIGN1cnJlbnRGb250RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAg
ICAgVVNjcmlwdENvZGUgY3VycmVudFNjcmlwdCA9IG5leHRTY3JpcHQ7Ci0KLSAgICAgICAgZm9y
IChpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5jb25zdW1lKGNoYXJh
Y3RlciwgY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCkpIHsK
LSAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFjdGVyKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKFVfR0VUX0dDX01B
U0soY2hhcmFjdGVyKSAmIFVfR0NfTV9NQVNLKSB7Ci0gICAgICAgICAgICAgICAgaW50IG1hcmtM
ZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBtYXJr
Q2hhcmFjdGVyc0VuZCA9IGl0ZXJhdG9yLmNoYXJhY3RlcnMoKSArIGNsdXN0ZXJMZW5ndGg7Ci0g
ICAgICAgICAgICAgICAgd2hpbGUgKG1hcmtDaGFyYWN0ZXJzRW5kIDwgbm9ybWFsaXplZEJ1ZmZl
ckVuZCkgewotICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIG5leHRDaGFyYWN0ZXI7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCBuZXh0Q2hhcmFjdGVyTGVuZ3RoID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgVTE2X05FWFQobWFya0NoYXJhY3RlcnNFbmQsIG5leHRDaGFyYWN0ZXJMZW5ndGgs
IG5vcm1hbGl6ZWRCdWZmZXJFbmQgLSBtYXJrQ2hhcmFjdGVyc0VuZCwgbmV4dENoYXJhY3Rlcik7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKFVfR0VUX0dDX01BU0sobmV4dENoYXJhY3Rlcikg
JiBVX0dDX01fTUFTSykpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgbWFya0xlbmd0aCArPSBuZXh0Q2hhcmFjdGVyTGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICBtYXJrQ2hhcmFjdGVyc0VuZCArPSBuZXh0Q2hhcmFjdGVyTGVuZ3RoOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9udERhdGEtPmNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGN1cnJlbnRDaGFyYWN0ZXJQb3NpdGlv
biwgbWFya0NoYXJhY3RlcnNFbmQgLSBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNsdXN0ZXJMZW5ndGggPSBtYXJrTGVuZ3RoOwotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmV4
dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxz
ZSkuZm9udERhdGE7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0Rm9u
dERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5m
b250RGF0YTsKLQotICAgICAgICAgICAgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNo
YXJhY3RlciwgJmVycm9yQ29kZSk7Ci0gICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29k
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKChuZXh0
Rm9udERhdGEgIT0gY3VycmVudEZvbnREYXRhKSB8fCAoKGN1cnJlbnRTY3JpcHQgIT0gbmV4dFNj
cmlwdCkgJiYgKG5leHRTY3JpcHQgIT0gVVNDUklQVF9JTkhFUklURUQpICYmICghdXNjcmlwdF9o
YXNTY3JpcHQoY2hhcmFjdGVyLCBjdXJyZW50U2NyaXB0KSkpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKG5leHRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklURUQpCi0g
ICAgICAgICAgICAgICAgbmV4dFNjcmlwdCA9IGN1cnJlbnRTY3JpcHQ7Ci0gICAgICAgICAgICBj
dXJyZW50Q2hhcmFjdGVyUG9zaXRpb24gPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biA9IGl0ZXJhdG9y
LmN1cnJlbnRDaGFyYWN0ZXIoKSAtIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW47Ci0gICAgICAgIGhi
X3NjcmlwdF90IHNjcmlwdCA9IGhiX2ljdV9zY3JpcHRfdG9fc2NyaXB0KGN1cnJlbnRTY3JpcHQp
OwotICAgICAgICBtX2hhcmZidXp6UnVucy5hcHBlbmQoSGFyZkJ1enpSdW46OmNyZWF0ZShjdXJy
ZW50Rm9udERhdGEsIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4sIG51bUNoYXJhY3RlcnNPZkN1cnJl
bnRSdW4sIG1fcnVuLmRpcmVjdGlvbigpLCBzY3JpcHQpKTsKLSAgICAgICAgY3VycmVudEZvbnRE
YXRhID0gbmV4dEZvbnREYXRhOwotICAgICAgICBzdGFydEluZGV4T2ZDdXJyZW50UnVuID0gaXRl
cmF0b3IuY3VycmVudENoYXJhY3RlcigpOwotICAgIH0gd2hpbGUgKGl0ZXJhdG9yLmNvbnN1bWUo
Y2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSk7Ci0KLSAgICByZXR1cm4gIW1faGFyZmJ1enpSdW5z
LmlzRW1wdHkoKTsKLX0KLQotYm9vbCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bnMo
Ym9vbCBzaG91bGRTZXREaXJlY3Rpb24pCi17Ci0gICAgSGFyZkJ1enpTY29wZWRQdHI8aGJfYnVm
ZmVyX3Q+IGhhcmZidXp6QnVmZmVyKGhiX2J1ZmZlcl9jcmVhdGUoKSwgaGJfYnVmZmVyX2Rlc3Ry
b3kpOwotCi0gICAgaGJfYnVmZmVyX3NldF91bmljb2RlX2Z1bmNzKGhhcmZidXp6QnVmZmVyLmdl
dCgpLCBoYl9pY3VfZ2V0X3VuaWNvZGVfZnVuY3MoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQg
cnVuSW5kZXggPSBtX3J1bi5ydGwoKSA/IG1faGFyZmJ1enpSdW5zLnNpemUoKSAtIGkgLSAxIDog
aTsKLSAgICAgICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZidXp6UnVuc1tydW5J
bmRleF0uZ2V0KCk7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERh
dGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOwotCi0gICAgICAgIGhiX2J1ZmZlcl9zZXRfc2Ny
aXB0KGhhcmZidXp6QnVmZmVyLmdldCgpLCBjdXJyZW50UnVuLT5zY3JpcHQoKSk7Ci0gICAgICAg
IGlmIChzaG91bGRTZXREaXJlY3Rpb24pCi0gICAgICAgICAgICBoYl9idWZmZXJfc2V0X2RpcmVj
dGlvbihoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgY3VycmVudFJ1bi0+cnRsKCkgPyBIQl9ESVJFQ1RJ
T05fUlRMIDogSEJfRElSRUNUSU9OX0xUUik7Ci0KLSAgICAgICAgLy8gQWRkIGEgc3BhY2UgYXMg
cHJlLWNvbnRleHQgdG8gdGhlIGJ1ZmZlci4gVGhpcyBwcmV2ZW50cyBzaG93aW5nIGRvdHRlZC1j
aXJjbGUKLSAgICAgICAgLy8gZm9yIGNvbWJpbmluZyBtYXJrcyBhdCB0aGUgYmVnaW5uaW5nIG9m
IHJ1bnMuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBwcmVDb250ZXh0ID0gJyAnOwot
ICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZidXp6QnVmZmVyLmdldCgpLCAmcHJlQ29u
dGV4dCwgMSwgMSwgMCk7Ci0KLSAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAmJiB1
X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVyW2N1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKV0pKSB7
Ci0gICAgICAgICAgICBTdHJpbmcgdXBwZXJUZXh0ID0gU3RyaW5nKG1fbm9ybWFsaXplZEJ1ZmZl
ci5nZXQoKSArIGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFj
dGVycygpKTsKLSAgICAgICAgICAgIHVwcGVyVGV4dC5tYWtlVXBwZXIoKTsKLSAgICAgICAgICAg
IGN1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVwcGVyVGV4
dFswXSwgZmFsc2UsIFNtYWxsQ2Fwc1ZhcmlhbnQpLmZvbnREYXRhOwotICAgICAgICAgICAgaGJf
YnVmZmVyX2FkZF91dGYxNihoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgdXBwZXJUZXh0LmNoYXJhY3Rl
cnMoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpLCAwLCBjdXJyZW50UnVuLT5udW1DaGFy
YWN0ZXJzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhiX2J1ZmZlcl9hZGRfdXRm
MTYoaGFyZmJ1enpCdWZmZXIuZ2V0KCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIGN1cnJl
bnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpLCAwLCBjdXJy
ZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpOwotCi0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBs
YXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZjdXJyZW50Rm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpKTsKLSAgICAgICAgSGFyZkJ1enpOR0ZhY2UqIGZhY2UgPSBwbGF0
Zm9ybURhdGEtPmhhcmZidXp6RmFjZSgpOwotICAgICAgICBpZiAoIWZhY2UpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCku
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkKLSAgICAgICAgICAgIGZhY2UtPnNldFNjcmlwdEZv
clZlcnRpY2FsR2x5cGhTdWJzdGl0dXRpb24oaGFyZmJ1enpCdWZmZXIuZ2V0KCkpOwotCi0gICAg
ICAgIEhhcmZCdXp6U2NvcGVkUHRyPGhiX2ZvbnRfdD4gaGFyZmJ1enpGb250KGZhY2UtPmNyZWF0
ZUZvbnQoKSwgaGJfZm9udF9kZXN0cm95KTsKLQotICAgICAgICBoYl9zaGFwZShoYXJmYnV6ekZv
bnQuZ2V0KCksIGhhcmZidXp6QnVmZmVyLmdldCgpLCBtX2ZlYXR1cmVzLmlzRW1wdHkoKSA/IDAg
OiBtX2ZlYXR1cmVzLmRhdGEoKSwgbV9mZWF0dXJlcy5zaXplKCkpOwotCi0gICAgICAgIGN1cnJl
bnRSdW4tPmFwcGx5U2hhcGVSZXN1bHQoaGFyZmJ1enpCdWZmZXIuZ2V0KCkpOwotICAgICAgICBz
ZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKGN1cnJlbnRSdW4sIGhhcmZidXp6QnVmZmVy
LmdldCgpKTsKLQotICAgICAgICBoYl9idWZmZXJfcmVzZXQoaGFyZmJ1enpCdWZmZXIuZ2V0KCkp
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEhhcmZCdXp6U2hhcGVyOjpz
ZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuLCBo
Yl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCi17Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGN1cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7Ci0gICAgaGJfZ2x5cGhf
aW5mb190KiBnbHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmYnV6ekJ1
ZmZlciwgMCk7Ci0gICAgaGJfZ2x5cGhfcG9zaXRpb25fdCogZ2x5cGhQb3NpdGlvbnMgPSBoYl9i
dWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhoYXJmYnV6ekJ1ZmZlciwgMCk7Ci0KLSAgICB1bnNp
Z25lZCBudW1HbHlwaHMgPSBjdXJyZW50UnVuLT5udW1HbHlwaHMoKTsKLSAgICB1aW50MTZfdCog
Z2x5cGhUb0NoYXJhY3RlckluZGV4ZXMgPSBjdXJyZW50UnVuLT5nbHlwaFRvQ2hhcmFjdGVySW5k
ZXhlcygpOwotICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7Ci0KLSAgICAvLyBIYXJmQnV6eiBy
ZXR1cm5zIHRoZSBzaGFwaW5nIHJlc3VsdCBpbiB2aXN1YWwgb3JkZXIuIFdlIG5lZWQgbm90IHRv
IGZsaXAgZm9yIFJUTC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7Ci0gICAgICAgIGJvb2wgcnVuRW5kID0gaSArIDEgPT0gbnVtR2x5cGhzOwotICAgICAgICB1
aW50MTZfdCBnbHlwaCA9IGdseXBoSW5mb3NbaV0uY29kZXBvaW50OwotICAgICAgICBmbG9hdCBv
ZmZzZXRYID0gaGFyZmJ1enpQb3NpdGlvblRvRmxvYXQoZ2x5cGhQb3NpdGlvbnNbaV0ueF9vZmZz
ZXQpOwotICAgICAgICBmbG9hdCBvZmZzZXRZID0gLWhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGds
eXBoUG9zaXRpb25zW2ldLnlfb2Zmc2V0KTsKLSAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGhhcmZi
dXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfYWR2YW5jZSk7Ci0KLSAgICAg
ICAgdW5zaWduZWQgY3VycmVudENoYXJhY3RlckluZGV4ID0gY3VycmVudFJ1bi0+c3RhcnRJbmRl
eCgpICsgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyOwotICAgICAgICBib29sIGlzQ2x1c3RlckVuZCA9
IHJ1bkVuZCB8fCBnbHlwaEluZm9zW2ldLmNsdXN0ZXIgIT0gZ2x5cGhJbmZvc1tpICsgMV0uY2x1
c3RlcjsKLSAgICAgICAgZmxvYXQgc3BhY2luZyA9IDA7Ci0KLSAgICAgICAgZ2x5cGhUb0NoYXJh
Y3RlckluZGV4ZXNbaV0gPSBnbHlwaEluZm9zW2ldLmNsdXN0ZXI7Ci0KLSAgICAgICAgaWYgKGlz
Q2x1c3RlckVuZCAmJiAhRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKG1fbm9ybWFsaXplZEJ1
ZmZlcltjdXJyZW50Q2hhcmFjdGVySW5kZXhdKSkKLSAgICAgICAgICAgIHNwYWNpbmcgKz0gbV9s
ZXR0ZXJTcGFjaW5nOwotCi0gICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgaXNXb3JkRW5kKGN1
cnJlbnRDaGFyYWN0ZXJJbmRleCkpCi0gICAgICAgICAgICBzcGFjaW5nICs9IGRldGVybWluZVdv
cmRCcmVha1NwYWNpbmcoKTsKLQotICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhLT5pc1plcm9X
aWR0aFNwYWNlR2x5cGgoZ2x5cGgpKSB7Ci0gICAgICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlw
aEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGFkdmFuY2UgKz0gc3BhY2luZzsKLSAgICAgICAgaWYgKG1f
cnVuLnJ0bCgpKSB7Ci0gICAgICAgICAgICAvLyBJbiBSVEwsIHNwYWNpbmcgc2hvdWxkIGJlIGFk
ZGVkIHRvIGxlZnQgc2lkZSBvZiBnbHlwaHMuCi0gICAgICAgICAgICBvZmZzZXRYICs9IHNwYWNp
bmc7Ci0gICAgICAgICAgICBpZiAoIWlzQ2x1c3RlckVuZCkKLSAgICAgICAgICAgICAgICBvZmZz
ZXRYICs9IG1fbGV0dGVyU3BhY2luZzsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRSdW4t
PnNldEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCBhZHZhbmNlLCBvZmZzZXRYLCBvZmZzZXRZ
KTsKLQotICAgICAgICB0b3RhbEFkdmFuY2UgKz0gYWR2YW5jZTsKLSAgICB9Ci0gICAgY3VycmVu
dFJ1bi0+c2V0V2lkdGgodG90YWxBZHZhbmNlID4gMC4wID8gdG90YWxBZHZhbmNlIDogMC4wKTsK
LSAgICBtX3RvdGFsV2lkdGggKz0gY3VycmVudFJ1bi0+d2lkdGgoKTsKLX0KLQotdm9pZCBIYXJm
QnV6elNoYXBlcjo6ZmlsbEdseXBoQnVmZmVyRnJvbUhhcmZCdXp6UnVuKEdseXBoQnVmZmVyKiBn
bHlwaEJ1ZmZlciwgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4sIEZsb2F0UG9pbnQmIGZpcnN0T2Zm
c2V0T2ZOZXh0UnVuKQotewotICAgIEZsb2F0UG9pbnQqIG9mZnNldHMgPSBjdXJyZW50UnVuLT5v
ZmZzZXRzKCk7Ci0gICAgdWludDE2X3QqIGdseXBocyA9IGN1cnJlbnRSdW4tPmdseXBocygpOwot
ICAgIGZsb2F0KiBhZHZhbmNlcyA9IGN1cnJlbnRSdW4tPmFkdmFuY2VzKCk7Ci0gICAgdW5zaWdu
ZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7Ci0gICAgdWludDE2X3QqIGds
eXBoVG9DaGFyYWN0ZXJJbmRleGVzID0gY3VycmVudFJ1bi0+Z2x5cGhUb0NoYXJhY3RlckluZGV4
ZXMoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewot
ICAgICAgICB1aW50MTZfdCBjdXJyZW50Q2hhcmFjdGVySW5kZXggPSBjdXJyZW50UnVuLT5zdGFy
dEluZGV4KCkgKyBnbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tpXTsKLSAgICAgICAgRmxvYXRQb2lu
dCYgY3VycmVudE9mZnNldCA9IG9mZnNldHNbaV07Ci0gICAgICAgIEZsb2F0UG9pbnQmIG5leHRP
ZmZzZXQgPSAoaSA9PSBudW1HbHlwaHMgLSAxKSA/IGZpcnN0T2Zmc2V0T2ZOZXh0UnVuIDogb2Zm
c2V0c1tpICsgMV07Ci0gICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZVggPSBhZHZhbmNlc1tpXSAr
IG5leHRPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCk7Ci0gICAgICAgIGZsb2F0IGdseXBo
QWR2YW5jZVkgPSBuZXh0T2Zmc2V0LnkoKSAtIGN1cnJlbnRPZmZzZXQueSgpOwotICAgICAgICBp
ZiAobV9ydW4ucnRsKCkpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXgg
PiBtX3RvSW5kZXgpCi0gICAgICAgICAgICAgICAgbV9zdGFydE9mZnNldC5tb3ZlKGdseXBoQWR2
YW5jZVgsIGdseXBoQWR2YW5jZVkpOwotICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudENoYXJh
Y3RlckluZGV4ID49IG1fZnJvbUluZGV4KQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5h
ZGQoZ2x5cGhzW2ldLCBjdXJyZW50UnVuLT5mb250RGF0YSgpLCBjcmVhdGVHbHlwaEJ1ZmZlckFk
dmFuY2UoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZhbmNlWSkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA8IG1fZnJvbUluZGV4KQotICAg
ICAgICAgICAgICAgIG1fc3RhcnRPZmZzZXQubW92ZShnbHlwaEFkdmFuY2VYLCBnbHlwaEFkdmFu
Y2VZKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA8IG1fdG9J
bmRleCkKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoc1tpXSwgY3VycmVu
dFJ1bi0+Zm9udERhdGEoKSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGdseXBoQWR2YW5jZVgs
IGdseXBoQWR2YW5jZVkpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBIYXJmQnV6elNo
YXBlcjo6ZmlsbEdseXBoQnVmZmVyKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICB1
bnNpZ25lZCBudW1SdW5zID0gbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOwotICAgIGlmIChtX3J1bi5y
dGwoKSkgewotICAgICAgICBtX3N0YXJ0T2Zmc2V0ID0gbV9oYXJmYnV6elJ1bnMubGFzdCgpLT5v
ZmZzZXRzKClbMF07Ci0gICAgICAgIGZvciAoaW50IHJ1bkluZGV4ID0gbnVtUnVucyAtIDE7IHJ1
bkluZGV4ID49IDA7IC0tcnVuSW5kZXgpIHsKLSAgICAgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJy
ZW50UnVuID0gbV9oYXJmYnV6elJ1bnNbcnVuSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgRmxv
YXRQb2ludCBmaXJzdE9mZnNldE9mTmV4dFJ1biA9ICFydW5JbmRleCA/IEZsb2F0UG9pbnQoKSA6
IG1faGFyZmJ1enpSdW5zW3J1bkluZGV4IC0gMV0tPm9mZnNldHMoKVswXTsKLSAgICAgICAgICAg
IGZpbGxHbHlwaEJ1ZmZlckZyb21IYXJmQnV6elJ1bihnbHlwaEJ1ZmZlciwgY3VycmVudFJ1biwg
Zmlyc3RPZmZzZXRPZk5leHRSdW4pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9zdGFydE9mZnNldCA9IG1faGFyZmJ1enpSdW5zLmZpcnN0KCktPm9mZnNldHMoKVswXTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBydW5JbmRleCA9IDA7IHJ1bkluZGV4IDwgbnVtUnVuczsgKyty
dW5JbmRleCkgewotICAgICAgICAgICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZi
dXp6UnVuc1tydW5JbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGZpcnN0T2Zm
c2V0T2ZOZXh0UnVuID0gcnVuSW5kZXggPT0gbnVtUnVucyAtIDEgPyBGbG9hdFBvaW50KCkgOiBt
X2hhcmZidXp6UnVuc1tydW5JbmRleCArIDFdLT5vZmZzZXRzKClbMF07Ci0gICAgICAgICAgICBm
aWxsR2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIsIGN1cnJlbnRSdW4sIGZp
cnN0T2Zmc2V0T2ZOZXh0UnVuKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZ2x5cGhC
dWZmZXItPnNpemUoKTsKLX0KLQotaW50IEhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3NpdGlv
bihmbG9hdCB0YXJnZXRYKQotewotICAgIGludCBjaGFyYWN0ZXJzU29GYXIgPSAwOwotICAgIGZs
b2F0IGN1cnJlbnRYID0gMDsKLQotICAgIGlmIChtX3J1bi5ydGwoKSkgewotICAgICAgICBjaGFy
YWN0ZXJzU29GYXIgPSBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGg7Ci0gICAgICAgIGZvciAoaW50
IGkgPSBtX2hhcmZidXp6UnVucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAg
ICAgY2hhcmFjdGVyc1NvRmFyIC09IG1faGFyZmJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7
Ci0gICAgICAgICAgICBmbG9hdCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJmYnV6elJ1bnNbaV0t
PndpZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCBvZmZzZXRGb3JSdW4gPSB0YXJnZXRYIC0gY3Vy
cmVudFg7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0Rm9yUnVuID49IDAgJiYgb2Zmc2V0Rm9yUnVu
IDw9IG1faGFyZmJ1enpSdW5zW2ldLT53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhl
IHggdmFsdWUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4KLSAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IG1faGFyZmJ1enpSdW5zW2ldLT5jaGFyYWN0
ZXJJbmRleEZvclhQb3NpdGlvbihvZmZzZXRGb3JSdW4pOwotICAgICAgICAgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJzU29GYXIgKyBpbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1
cnJlbnRYID0gbmV4dFg7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGZsb2F0IG5leHRYID0gY3VycmVudFggKyBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsK
LSAgICAgICAgICAgIGZsb2F0IG9mZnNldEZvclJ1biA9IHRhcmdldFggLSBjdXJyZW50WDsKLSAg
ICAgICAgICAgIGlmIChvZmZzZXRGb3JSdW4gPj0gMCAmJiBvZmZzZXRGb3JSdW4gPD0gbV9oYXJm
YnV6elJ1bnNbaV0tPndpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bmRleCA9IG1faGFyZmJ1enpSdW5zW2ldLT5jaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihvZmZz
ZXRGb3JSdW4pOwotICAgICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzU29GYXIgKyBpbmRl
eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoYXJhY3RlcnNTb0ZhciArPSBtX2hhcmZi
dXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOwotICAgICAgICAgICAgY3VycmVudFggPSBuZXh0
WDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjaGFyYWN0ZXJzU29GYXI7Ci19Ci0K
LUZsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykKLXsKLSAgICBmbG9hdCBjdXJy
ZW50WCA9IDA7Ci0gICAgZmxvYXQgZnJvbVggPSAwOwotICAgIGZsb2F0IHRvWCA9IDA7Ci0gICAg
Ym9vbCBmb3VuZEZyb21YID0gZmFsc2U7Ci0gICAgYm9vbCBmb3VuZFRvWCA9IGZhbHNlOwotCi0g
ICAgaWYgKG1fcnVuLnJ0bCgpKQotICAgICAgICBjdXJyZW50WCA9IG1fdG90YWxXaWR0aDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fcnVuLnJ0bCgpKQotICAgICAgICAgICAgY3VycmVudFggLT0gbV9oYXJm
YnV6elJ1bnNbaV0tPndpZHRoKCk7Ci0gICAgICAgIGludCBudW1DaGFyYWN0ZXJzID0gbV9oYXJm
YnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKLSAgICAgICAgaWYgKCFmb3VuZEZyb21YICYm
IGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVycykgewotICAgICAgICAgICAgZnJvbVgg
PSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KGZyb20pICsgY3VycmVudFg7
Ci0gICAgICAgICAgICBmb3VuZEZyb21YID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBmcm9tIC09IG51bUNoYXJhY3RlcnM7Ci0KLSAgICAgICAgaWYgKCFmb3VuZFRvWCAmJiB0
byA+PSAwICYmIHRvIDwgbnVtQ2hhcmFjdGVycykgewotICAgICAgICAgICAgdG9YID0gbV9oYXJm
YnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldCh0bykgKyBjdXJyZW50WDsKLSAgICAgICAg
ICAgIGZvdW5kVG9YID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0byAtPSBu
dW1DaGFyYWN0ZXJzOwotCi0gICAgICAgIGlmIChmb3VuZEZyb21YICYmIGZvdW5kVG9YKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICghbV9ydW4ucnRsKCkpCi0gICAgICAgICAgICBj
dXJyZW50WCArPSBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKLSAgICB9Ci0KLSAgICAvLyBU
aGUgcG9zaXRpb24gaW4gcXVlc3Rpb24gbWlnaHQgYmUganVzdCBhZnRlciB0aGUgdGV4dC4KLSAg
ICBpZiAoIWZvdW5kRnJvbVgpCi0gICAgICAgIGZyb21YID0gMDsKLSAgICBpZiAoIWZvdW5kVG9Y
KQotICAgICAgICB0b1ggPSBtX3J1bi5ydGwoKSA/IDAgOiBtX3RvdGFsV2lkdGg7Ci0KLSAgICAv
LyBVc2luZyBmbG9vcmYoKSBhbmQgcm91bmRmKCkgYXMgdGhlIHNhbWUgYXMgbWFjIHBvcnQuCi0g
ICAgaWYgKGZyb21YIDwgdG9YKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KGZsb29yZihwb2lu
dC54KCkgKyBmcm9tWCksIHBvaW50LnkoKSwgcm91bmRmKHRvWCAtIGZyb21YKSwgaGVpZ2h0KTsK
LSAgICByZXR1cm4gRmxvYXRSZWN0KGZsb29yZihwb2ludC54KCkgKyB0b1gpLCBwb2ludC55KCks
IHJvdW5kZihmcm9tWCAtIHRvWCksIGhlaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L25nL0hhcmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MmVkMTkxMWQ4OWI3MmJmN2QxMGMzNmU2MWI4ZjhhMWZlYTc1YzMxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSGFyZkJ1enpTaGFwZXJfaAotI2RlZmluZSBIYXJmQnV6elNo
YXBlcl9oCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKLSNpbmNsdWRlICJIYXJmQnV6elNoYXBlckJhc2UuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgi
Ci0jaW5jbHVkZSAiaGIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250OwotY2xhc3MgU2lt
cGxlRm9udERhdGE7Ci0KLWNsYXNzIEhhcmZCdXp6U2hhcGVyIDogcHVibGljIEhhcmZCdXp6U2hh
cGVyQmFzZSB7Ci1wdWJsaWM6Ci0gICAgSGFyZkJ1enpTaGFwZXIoY29uc3QgRm9udCosIGNvbnN0
IFRleHRSdW4mKTsKLSAgICB2aXJ0dWFsIH5IYXJmQnV6elNoYXBlcigpOwotCi0gICAgdm9pZCBz
ZXREcmF3UmFuZ2UoaW50IGZyb20sIGludCB0byk7Ci0gICAgYm9vbCBzaGFwZShHbHlwaEJ1ZmZl
ciogPSAwKTsKLSAgICBGbG9hdFBvaW50IGFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgIGZsb2F0IHRvdGFsV2lkdGgoKSB7IHJldHVybiBtX3RvdGFsV2lkdGg7IH0KLSAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7Ci0gICAgRmxvYXRSZWN0IHNl
bGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQg
dG8pOwotCi1wcml2YXRlOgotICAgIGNsYXNzIEhhcmZCdXp6UnVuIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEhhcmZCdXp6UnVuPiBjcmVhdGUoY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFy
YWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfc2NyaXB0X3Qgc2NyaXB0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhhcmZCdXp6UnVuKGZvbnRE
YXRhLCBzdGFydEluZGV4LCBudW1DaGFyYWN0ZXJzLCBkaXJlY3Rpb24sIHNjcmlwdCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBseVNoYXBlUmVzdWx0KGhiX2J1ZmZlcl90Kik7Ci0g
ICAgICAgIHZvaWQgc2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWduZWQgaW5kZXgsIHVpbnQxNl90
IGdseXBoSWQsIGZsb2F0IGFkdmFuY2UsIGZsb2F0IG9mZnNldFgsIGZsb2F0IG9mZnNldFkpOwot
ICAgICAgICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQot
Ci0gICAgICAgIGludCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsK
LSAgICAgICAgZmxvYXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7Ci0KLSAg
ICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgeyByZXR1cm4gbV9mb250RGF0
YTsgfQotICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dEluZGV4OyB9Ci0gICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVy
biBtX251bUNoYXJhY3RlcnM7IH0KLSAgICAgICAgdW5zaWduZWQgbnVtR2x5cGhzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1HbHlwaHM7IH0KLSAgICAgICAgdWludDE2X3QqIGdseXBocygpIHsgcmV0
dXJuICZtX2dseXBoc1swXTsgfQotICAgICAgICBmbG9hdCogYWR2YW5jZXMoKSB7IHJldHVybiAm
bV9hZHZhbmNlc1swXTsgfQotICAgICAgICBGbG9hdFBvaW50KiBvZmZzZXRzKCkgeyByZXR1cm4g
Jm1fb2Zmc2V0c1swXTsgfQotICAgICAgICB1aW50MTZfdCogZ2x5cGhUb0NoYXJhY3RlckluZGV4
ZXMoKSB7IHJldHVybiAmbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1swXTsgfQotICAgICAgICBm
bG9hdCB3aWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICAgICAgYm9vbCBydGwoKSB7IHJl
dHVybiBtX2RpcmVjdGlvbiA9PSBSVEw7IH0KLSAgICAgICAgaGJfc2NyaXB0X3Qgc2NyaXB0KCkg
eyByZXR1cm4gbV9zY3JpcHQ7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEhhcmZCdXp6UnVu
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVt
Q2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiwgaGJfc2NyaXB0X3QpOwotCi0gICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnREYXRhOwotICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0SW5k
ZXg7Ci0gICAgICAgIHNpemVfdCBtX251bUNoYXJhY3RlcnM7Ci0gICAgICAgIHVuc2lnbmVkIG1f
bnVtR2x5cGhzOwotICAgICAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOwotICAgICAgICBo
Yl9zY3JpcHRfdCBtX3NjcmlwdDsKLSAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fZ2x5
cGhzOwotICAgICAgICBWZWN0b3I8ZmxvYXQsIDI1Nj4gbV9hZHZhbmNlczsKLSAgICAgICAgVmVj
dG9yPHVpbnQxNl90LCAyNTY+IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXM7Ci0gICAgICAgIFZl
Y3RvcjxGbG9hdFBvaW50LCAyNTY+IG1fb2Zmc2V0czsKLSAgICAgICAgZmxvYXQgbV93aWR0aDsK
LSAgICB9OwotCi0gICAgdm9pZCBzZXRGb250RmVhdHVyZXMoKTsKLQotICAgIGJvb2wgY29sbGVj
dEhhcmZCdXp6UnVucygpOwotICAgIGJvb2wgc2hhcGVIYXJmQnV6elJ1bnMoYm9vbCBzaG91bGRT
ZXREaXJlY3Rpb24pOwotICAgIGJvb2wgZmlsbEdseXBoQnVmZmVyKEdseXBoQnVmZmVyKik7Ci0g
ICAgdm9pZCBmaWxsR2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIqLCBIYXJm
QnV6elJ1biosIEZsb2F0UG9pbnQmIGZpcnN0T2Zmc2V0T2ZOZXh0UnVuKTsKLSAgICB2b2lkIHNl
dEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oSGFyZkJ1enpSdW4qLCBoYl9idWZmZXJfdCop
OwotCi0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShmbG9h
dCwgZmxvYXQpOwotCi0gICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwgND4gbV9mZWF0dXJlczsKLSAg
ICBWZWN0b3I8T3duUHRyPEhhcmZCdXp6UnVuPiwgMTY+IG1faGFyZmJ1enpSdW5zOwotCi0gICAg
RmxvYXRQb2ludCBtX3N0YXJ0T2Zmc2V0OwotCi0gICAgaW50IG1fZnJvbUluZGV4OwotICAgIGlu
dCBtX3RvSW5kZXg7Ci0KLSAgICBmbG9hdCBtX3RvdGFsV2lkdGg7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIYXJmQnV6elNoYXBlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185494</attachid>
            <date>2013-01-30 06:50:10 -0800</date>
            <delta_ts>2013-01-30 07:40:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108170-20130130164653.patch</filename>
            <type>text/plain</type>
            <size>143741</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjNiN2IzMDkyNjZiNzAw
ZTI5YzRkMTUyYWIwZWNiYjhmYmIyNmU1Ny4uNTMzZjc1OTQ0ZGU3ODZkZDk1MDZkODJkMjI2OTIz
ZjhiNTdlMzVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1NyBAQAogMjAxMy0wMS0zMCAgRG9t
aW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5yb3R0c2NoZXNAaW50ZWwuY29tPgogCisgICAgICAg
IFtIYXJmQnV6el0gTmFtaW5nIGZpeGVzIGFmdGVyIHJlbW92aW5nIG9sZCBIYXJmQnV6eiBjb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxNzAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSB0
aGUgb2xkIGhhcmZidXp6IGNvZGUgaXMgZ29uZSBpbiByMTQxMjQxLCBpdCBtYWtlcyBzZW5zZSB0
byBnZXQgcmlkCisgICAgICAgIG9mIHRoZSBub3cgdW5uZWNlc3NyYXkgTkcgc3VmZml4IGluIGEg
bnVtYmVyIG9mIHBsYWNlcy4gV2hpbGUgYXQgaXQsCisgICAgICAgIEkgYW0gYWxzbyBmaXhpbmcg
c29tZSBuYW1pbmcgaW5jb25zaXN0ZW5jaWVzLgorCisgICAgICAgIFJlbmFtZWQgYWxsIG9jY3Vy
ZW5jZXMgb2YgSGFyZkJ1enpORyogdG8gSGFyZkJ1enoqLAorICAgICAgICByZW5hbWVkIGxvd2Vy
Y2FzZSB2YXJpYW50cyBvZiBoYXJmYnV6eiogaW4gdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVz
IHRvIGNhbWVsLWNhc2UgaGFyZkJ1enoqLAorICAgICAgICBtb3ZlZCBmaWxlcyBpbiBwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy8qIG9uZSBsZXZlbCB1cCBhbmQgcmVtb3ZlZCBuZyBmb2xk
ZXIuCisgICAgICAgIFVwZGF0ZWQgY29ycmVzcG9uZGluZyBlbnRyaWVzIGluIENocm9taXVtLCBH
VEsgYW5kIEVGTCBidWlsZCBzeXN0ZW0gZmlsZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBu
byBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZv
cm1EYXRhQXNzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZC
dXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRm
b3JtRGF0YS5oOgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZCdXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZCdXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6Lmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZhY2VDYWNoZUVudHJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZhY2VDYWNoZUVudHJ5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmFjZUNh
Y2hlRW50cnk6On5GYWNlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGYWNlQ2FjaGVF
bnRyeTo6ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGYWNlQ2FjaGVFbnRyeTo6Z2x5cGhDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGYWNlQ2FjaGVFbnRyeTo6RmFjZUNhY2hlRW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6aGFyZkJ1enpGYWNlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6
SGFyZkJ1enpGYWNlOjpIYXJmQnV6ekZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpG
YWNlOjp+SGFyZkJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRTY3JpcHRGb3JWZXJ0
aWNhbEdseXBoU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6
c2V0U2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIYXJmQnV6ekZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ2Fpcm8uY3Bw
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDYWlyb0Z0RmFjZUxvY2tlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlyb0Z0RmFjZUxvY2tlcjo6Q2Fpcm9GdEZhY2VMb2NrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2Fpcm9GdEZhY2VMb2NrZXI6OmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6Q2Fpcm9GdEZhY2VMb2NrZXI6On5DYWlyb0Z0RmFjZUxvY2tlcik6CisgICAgICAgIChXZWJD
b3JlOjpmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpkb3VibGVU
b0hhcmZCdXp6UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm9HZXRHbHlwaFdpZHRo
QW5kRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoKToKKyAgICAg
ICAgKFdlYkNvcmU6OmhhcmZCdXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpoYXJm
QnV6ekNhaXJvVGV4dEdldEZvbnRGdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekNh
aXJvR2V0VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3JlVGV4dC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGhIb3Jpem9udGFsQWR2YW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0R2x5cGhFeHRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZidXp6
Q29yZVRleHRHZXRGb250RnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZVRhYmxlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekNvcmVUZXh0R2V0VGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VTa2lhLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5j
cHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6Rm9udERh
dGE6OkhhcmZCdXp6Rm9udERhdGEpOgorICAgICAgICAoSGFyZkJ1enpGb250RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTa2lhU2NhbGFyVG9IYXJmQnV6elBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpo
YXJmQnV6ekdldEdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6R2V0R2x5cGhIb3Jp
em9udGFsQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoSG9yaXpv
bnRhbE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoRXh0ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6elNraWFHZXRGb250RnVuY3MpOgorICAgICAgICAo
V2ViQ29yZTo6aGFyZkJ1enpTa2lhR2V0VGFibGUpOiBBbHNvIGZpeGVkIHN0eWxlIGNoZWNrZXIg
d2hpdGVzcGFjZSBjb21wbGFpbnQgLyBpbmRlbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmRl
c3Ryb3lIYXJmQnV6ekZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6
Y3JlYXRlRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2
YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChIYXJmQnV6elNjb3BlZFB0cik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNjb3BlZFB0
cjo6SGFyZkJ1enpTY29wZWRQdHIpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTY29wZWRQ
dHI6On5IYXJmQnV6elNjb3BlZFB0cik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNjb3Bl
ZFB0cjo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6UG9zaXRpb25Ub0Zsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFyZkJ1enpS
dW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphcHBs
eVNoYXBlUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elJ1bjo6c2V0R2x5cGhBbmRQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpT
aGFwZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okhh
cmZCdXp6U2hhcGVyOjpzZXREcmF3UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpT
aGFwZXI6OnNldEZvbnRGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmFkanVzdFN0YXJ0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6
elJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpS
dW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9u
c0ZvckhhcmZCdXp6UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpmaWxs
R2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpT
aGFwZXI6OmZpbGxHbHlwaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6b2Zmc2V0Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChIYXJmQnV6elNoYXBlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6dG90YWxXaWR0aCk6CisgICAgICAgIChIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Zm9udERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzdGFydEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6bnVtQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46Om51bUdseXBocyk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmdseXBocyk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFkdmFuY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6b2Zmc2V0
cyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmdseXBo
VG9DaGFyYWN0ZXJJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpI
YXJmQnV6elJ1bjo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjpydGwpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpzY3JpcHQpOgorCisyMDEzLTAxLTMwICBEb21pbmlrIFLDtnR0c2NoZXMgIDxkb21p
bmlrLnJvdHRzY2hlc0BpbnRlbC5jb20+CisKICAgICAgICAgW0hhcmZCdXp6XSBSZW1vdmUgdGhl
IEhhcmZCdXp6LW9sZCBjb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDgwNzcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMGZi
YTZjZGQzM2FlZWNiNjUwZjAxYWYwYTQ1ZDc0MjMyM2UyMDEwOS4uZmVkYjZmNGVlMzFjNDAxNTgw
N2Y2ODg5N2E2MzY2YWY1OWM4YTFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC00MjM4LDExICs0MjM4LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvVVRGMTZVQ2hhcjMySXRlcmF0b3IuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJC
YXNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpTaGFwZXJCYXNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hh
cGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcv
SGFyZkJ1enpTaGFwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpGYWNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
bnBydW50aW1lLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnB0eXBlcy5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZjUxNzljNjAxNWMxZTAzMGNlNTc0NDFlMjY4Y2JjYjA5
MDAyYjk2Mi4uMzQzMjE1ZTlkZDBlZThkNmRhMGU5NDM4YTA3OGFiNDk4MzQ1ODU5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEyNyw5ICsxMjcsOSBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291
cmNlR1N0cmVhbWVyLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTaGFwZXJCYXNlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6TkdGYWNlQ2Fpcm8uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpTaGFwZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNl
Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAogCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGYxY2JlM2YwZWMxNjZlMTcxNmI5OTVjYTVjMjk3
Y2U3ZTIyNDI1NjAuLjA5MDRlYWVmYmJlODgwYmIyMTNkYzYxYTE0MjNiMDU2M2NiNGNhMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xNzE1LDEwICsxNzE1LDEw
IEBACiAgICAgICAgICAgICAjIENoZXJyeS1waWNrIGZpbGVzIGV4Y2x1ZGVkIGJ5IHRoZSBicm9h
ZGVyIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYWJvdmUuCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6XFwuY3BwJCddLAogICAgICAg
ICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9y
bURhdGFIYXJmQnV6elxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VcXC4oY3BwfGgpJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZVNr
aWFcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpTaGFwZXJcXC4oY3BwfGgpJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZVxcLihj
cHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYVxc
LmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6elNoYXBlclxcLihjcHB8aCkkJ10sCiAgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlc1xcLmgkJ10sCiAg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVWZXJ0aWNhbERhdGFcXC4oY3BwfGgpJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhXFwuY3BwJCddLApAQCAtMTg1
NiwxMSArMTg1NiwxMSBAQAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhXFwuY3BwJCddLAogICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhXFwuY3Bw
JCddLAogCi0gICAgICAgICAgICAjIE1hYyB1c2VzIEhhcmZidXp6LW5nLgorICAgICAgICAgICAg
IyBNYWMgdXNlcyBIYXJmYnV6ei4KKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3JlVGV4dFxcLmNwcCQnXSwKKyAgICAgICAg
ICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2Vc
XC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyXFwuKGNwcHxoKSQnXSwKICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2VcXC4o
Y3BwfGgpJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ29yZVRleHRcXC5jcHAkJ10sCi0gICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2Vc
XC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyXFwuKGNwcHxoKSQnXSwKICAgICAgICAgICBdLAog
ICAgICAgICB9LHsgIyBPUyE9Im1hYyIKICAgICAgICAgICAnc291cmNlcy8nOiBbCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggMzJiZGY5YmFmM2JmY2U2MjdlMmU4ZTNjZDQ5Y2VkNTE0ZGZkZWU0Ny4uZjQw
ZmM4MDIyN2RhODJhZTFkODRmYWFmYmM0MDNlOGIyMzBiMjY2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNDA0MywxNCArNDA0MywxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3JlVGV4
dC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
RmFjZVNraWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6ekZhY2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6ekZhY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6elNoYXBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuaCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDb3JlVGV4dC5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdG
YWNlU2tpYS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6TkdGYWNlLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApp
bmRleCA0YmE3OWVjYTMzYjdkZTc1ZTMzZGI2NzEwMzdkZGQxYjU3ODQ4MjQyLi45NWFiZGFkNTJk
ZGQ2NWRhOTU5YmM4YjYyY2Q4NTRkNTcxZjFkMTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pICYmIE9TKERBUldJTikKLSNpbmNsdWRlICJIYXJmQnV6ek5HRmFjZS5oIgorI2luY2x1
ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgK
aW5kZXggODIyNDQ5MjMwYTQwNmY2YzdiNTFiNGExMDIxZmRmMjAzNmU5NmI2Yy4uMjg4NDFlNzVj
MzA3YmNjMmM0OGY2NzYyYmIxNDYxNjljNjFkNjZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtOTAsNyArOTAsNyBA
QCBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICNpZiBQTEFU
Rk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQotY2xhc3MgSGFyZkJ1enpOR0ZhY2U7CitjbGFz
cyBIYXJmQnV6ekZhY2U7CiAjZW5kaWYKIAogI2lmIE9TKERBUldJTikKQEAgLTE2NCw3ICsxNjQs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJX
SU4pCi0gICAgSGFyZkJ1enpOR0ZhY2UqIGhhcmZidXp6RmFjZSgpOworICAgIEhhcmZCdXp6RmFj
ZSogaGFyZkJ1enpGYWNlKCk7CiAjZW5kaWYKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdApA
QCAtMjY4LDcgKzI2OCw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYg
T1MoREFSV0lOKQogICAgIFJlZlB0cjxNZW1vcnlBY3RpdmF0ZWRGb250PiBtX2luTWVtb3J5Rm9u
dDsKLSAgICBSZWZQdHI8SGFyZkJ1enpOR0ZhY2U+IG1faGFyZmJ1enpGYWNlOworICAgIFJlZlB0
cjxIYXJmQnV6ekZhY2U+IG1faGFyZkJ1enpGYWNlOwogI2VuZGlmCiAKICAgICBib29sIG1faXND
b2xvckJpdG1hcEZvbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggMzgxNTE2
ZWI2OTQxOWI3OTRhYWJkZDUxZjcxZTkyMzJiNGNlOTM5Zi4uY2UzNjJiYmIxMjFiNDA1Y2MyMmE3
MzE1ZjFhN2JkNzA1ZDA3YjU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAt
MjksNyArMjksNyBAQAogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFU
Rk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQotI2ltcG9ydCAiSGFyZkJ1enpOR0ZhY2UuaCIK
KyNpbXBvcnQgIkhhcmZCdXp6RmFjZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYg
T1MoREFSV0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2luTWVtb3J5Rm9udDsKLSAgICBt
X2hhcmZidXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CisgICAgbV9oYXJmQnV6ekZhY2UgPSBm
Lm1faGFyZkJ1enpGYWNlOwogI2VuZGlmCiB9CiAKQEAgLTExMSw3ICsxMTEsNyBAQCBjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24oY29u
c3QgRm9udFBsYXRmb3JtRAogICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKICNpZiBQTEFURk9S
TShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2luTWVt
b3J5Rm9udDsKLSAgICBtX2hhcmZidXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CisgICAgbV9o
YXJmQnV6ekZhY2UgPSBmLm1faGFyZkJ1enpGYWNlOwogI2VuZGlmCiAgICAgcmV0dXJuICp0aGlz
OwogfQpAQCAtMzA5LDE4ICszMDksMTggQEAgc3RhdGljIGJvb2wgaXNBQVRGb250KENURm9udFJl
ZiBjdEZvbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IYXJmQnV6ek5HRmFjZSogRm9udFBs
YXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkKK0hhcmZCdXp6RmFjZSogRm9udFBsYXRmb3JtRGF0
YTo6aGFyZkJ1enpGYWNlKCkKIHsKICAgICBDVEZvbnRSZWYgZm9udCA9IGN0Rm9udCgpOwogICAg
IC8vIEhhcmZCdXp6IGNhbid0IGhhbmRsZSBBQVQgZm9udAogICAgIGlmIChpc0FBVEZvbnQoZm9u
dCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFtX2hhcmZidXp6RmFjZSkgeworICAg
IGlmICghbV9oYXJmQnV6ekZhY2UpIHsKICAgICAgICAgdWludDY0X3QgdW5pcXVlSUQgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZm9udCk7Ci0gICAgICAgIG1faGFyZmJ1enpGYWNlID0g
SGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlz
KSwgdW5pcXVlSUQpOworICAgICAgICBtX2hhcmZCdXp6RmFjZSA9IEhhcmZCdXp6RmFjZTo6Y3Jl
YXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCB1bmlxdWVJRCk7CiAgICAg
fQotICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQoKTsKKyAgICByZXR1cm4gbV9oYXJmQnV6
ekZhY2UuZ2V0KCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDhm
ZTcwNjEyNDg5N2YzMGQ3N2I2ZjliNGRmZDYzOGY2MjY0ZWZkNGIuLmQ4ZWNmMGE0MzFmMjNkYzIy
Yjg3YWQ1Y2QyNTllMmExMjAyZTdlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTI5
LDEzICsyOSwxMyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZv
bnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiSGFy
ZkJ1enpOR0ZhY2UuaCIKKyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKICNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hG
dW5jdGlvbnMuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0ZjRm9udFNldCBGY0ZvbnRTZXQ7Ci1jbGFz
cyBIYXJmQnV6ek5HRmFjZTsKK2NsYXNzIEhhcmZCdXp6RmFjZTsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIH5Gb250UGxhdGZvcm1EYXRh
KCk7CiAKLSAgICBIYXJmQnV6ek5HRmFjZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7CisgICAgSGFy
ZkJ1enpGYWNlKiBoYXJmQnV6ekZhY2UoKSBjb25zdDsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNo
KCk7CiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpAQCAtMTAyLDcg
KzEwMiw3IEBAIHB1YmxpYzoKICAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKICAgICBib29s
IG1fZml4ZWRXaWR0aDsKICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Ci0g
ICAgbXV0YWJsZSBSZWZQdHI8SGFyZkJ1enpOR0ZhY2U+IG1faGFyZmJ1enpGYWNlOworICAgIG11
dGFibGUgUmVmUHRyPEhhcmZCdXp6RmFjZT4gbV9oYXJmQnV6ekZhY2U7CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJvX2ZvbnRfZmFjZV90KiwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiA9IEZvbnREZXNjcmlwdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVl
VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCmluZGV4IGY3MmQ5YzBiYjYwY2QyMDRjOTI0NDUwZTlj
ODkyZDkwY2NlYTgxZDUuLmEyZDU5MWJhNzU1OWU3ZjM5MjIzM2M2ZDYwZTBlOGRmN2U4ODBkMTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAtMTkxLDcg
KzE5MSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
ZGVzdHJveShtX3NjYWxlZEZvbnQpOwogICAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9m
b250X3JlZmVyZW5jZShvdGhlci5tX3NjYWxlZEZvbnQpOwogCi0gICAgbV9oYXJmYnV6ekZhY2Ug
PSBvdGhlci5tX2hhcmZidXp6RmFjZTsKKyAgICBtX2hhcmZCdXp6RmFjZSA9IG90aGVyLm1faGFy
ZkJ1enpGYWNlOwogCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTk5LDEzICsxOTksMTMgQEAg
Rm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIG90aGVyKQogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKICAgICA6IG1fZmFsbGJhY2tzKDApCiAgICAg
LCBtX3NjYWxlZEZvbnQoMCkKLSAgICAsIG1faGFyZmJ1enpGYWNlKG90aGVyLm1faGFyZmJ1enpG
YWNlKQorICAgICwgbV9oYXJmQnV6ekZhY2Uob3RoZXIubV9oYXJmQnV6ekZhY2UpCiB7CiAgICAg
KnRoaXMgPSBvdGhlcjsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlciwgZmxvYXQgc2l6ZSkKLSAgICA6IG1faGFyZmJ1
enpGYWNlKG90aGVyLm1faGFyZmJ1enpGYWNlKQorICAgIDogbV9oYXJmQnV6ekZhY2Uob3RoZXIu
bV9oYXJmQnV6ekZhY2UpCiB7CiAgICAgKnRoaXMgPSBvdGhlcjsKIApAQCAtMjI2LDEyICsyMjYs
MTIgQEAgRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQogICAgICAgICBjYWly
b19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CiB9CiAKLUhhcmZCdXp6TkdGYWNl
KiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAorSGFyZkJ1enpGYWNlKiBG
b250UGxhdGZvcm1EYXRhOjpoYXJmQnV6ekZhY2UoKSBjb25zdAogewotICAgIGlmICghbV9oYXJm
YnV6ekZhY2UpCi0gICAgICAgIG1faGFyZmJ1enpGYWNlID0gSGFyZkJ1enpOR0ZhY2U6OmNyZWF0
ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgaGFzaCgpKTsKKyAgICBpZiAo
IW1faGFyZkJ1enpGYWNlKQorICAgICAgICBtX2hhcmZCdXp6RmFjZSA9IEhhcmZCdXp6RmFjZTo6
Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCBoYXNoKCkpOwogCi0g
ICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOworICAgIHJldHVybiBtX2hhcmZCdXp6RmFj
ZS5nZXQoKTsKIH0KIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBs
YXRmb3JtRGF0YUhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAKaW5kZXggNDBlNTY1MjcyOGQ2
NTg3MGJhZjgyNTc2ZmJlOThkZTZmMjE1MDUxYS4uNmZkN2IyNThiYTZjNTRlYWM3ZjBjZjQ1ZjA5
NTg2ZGM5YWMyYzgxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enou
Y3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
LmgiCiAKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJIYXJmQnV6ek5HRmFjZS5o
IgorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiU2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljcy5oIgogI2luY2x1ZGUgIlNrRm9u
dEhvc3QuaCIKQEAgLTEyNCw3ICsxMjQsNyBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKICAgICAsIG1fZmFrZUl0YWxpYyhz
cmMubV9mYWtlSXRhbGljKQogICAgICwgbV9vcmllbnRhdGlvbihzcmMubV9vcmllbnRhdGlvbikK
ICAgICAsIG1fc3R5bGUoc3JjLm1fc3R5bGUpCi0gICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9o
YXJmYnV6ekZhY2UpCisgICAgLCBtX2hhcmZCdXp6RmFjZShzcmMubV9oYXJmQnV6ekZhY2UpCiB7
CiAgICAgU2tTYWZlUmVmKG1fdHlwZWZhY2UpOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBAIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3Jj
LCBmbG9hdCB0ZXh0U2l6ZSkKICAgICAsIG1fZmFrZUJvbGQoc3JjLm1fZmFrZUJvbGQpCiAgICAg
LCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKICAgICAsIG1fb3JpZW50YXRpb24oc3Jj
Lm1fb3JpZW50YXRpb24pCi0gICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2Up
CisgICAgLCBtX2hhcmZCdXp6RmFjZShzcmMubV9oYXJmQnV6ekZhY2UpCiB7CiAgICAgU2tTYWZl
UmVmKG1fdHlwZWZhY2UpOwogICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKQEAgLTE4
OCw3ICsxODgsNyBAQCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRv
cj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3JjKQogICAgIG1fdGV4dFNpemUgPSBzcmMubV90
ZXh0U2l6ZTsKICAgICBtX2Zha2VCb2xkID0gc3JjLm1fZmFrZUJvbGQ7CiAgICAgbV9mYWtlSXRh
bGljID0gc3JjLm1fZmFrZUl0YWxpYzsKLSAgICBtX2hhcmZidXp6RmFjZSA9IHNyYy5tX2hhcmZi
dXp6RmFjZTsKKyAgICBtX2hhcmZCdXp6RmFjZSA9IHNyYy5tX2hhcmZCdXp6RmFjZTsKICAgICBt
X29yaWVudGF0aW9uID0gc3JjLm1fb3JpZW50YXRpb247CiAgICAgbV9zdHlsZSA9IHNyYy5tX3N0
eWxlOwogICAgIG1fZW1TaXplSW5Gb250VW5pdHMgPSBzcmMubV9lbVNpemVJbkZvbnRVbml0czsK
QEAgLTI2OCwxMiArMjY4LDEyIEBAIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNo
KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhhcmZCdXp6TkdGYWNlKiBGb250UGxh
dGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAorSGFyZkJ1enpGYWNlKiBGb250UGxhdGZv
cm1EYXRhOjpoYXJmQnV6ekZhY2UoKSBjb25zdAogewotICAgIGlmICghbV9oYXJmYnV6ekZhY2Up
Ci0gICAgICAgIG1faGFyZmJ1enpGYWNlID0gSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZShjb25zdF9j
YXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgdW5pcXVlSUQoKSk7CisgICAgaWYgKCFtX2hh
cmZCdXp6RmFjZSkKKyAgICAgICAgbV9oYXJmQnV6ekZhY2UgPSBIYXJmQnV6ekZhY2U6OmNyZWF0
ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgdW5pcXVlSUQoKSk7CiAKLSAg
ICByZXR1cm4gbV9oYXJmYnV6ekZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIG1faGFyZkJ1enpGYWNl
LmdldCgpOwogfQogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OmdldFJlbmRlclN0eWxlRm9yU3Ry
aWtlKGNvbnN0IGNoYXIqIGZvbnQsIGludCBzaXplQW5kU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFy
ZkJ1enouaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQ
bGF0Zm9ybURhdGFIYXJmQnV6ei5oCmluZGV4IDhmZWExNTRkYWY1YjFhMjAyY2QwYjAwZThlMWRj
YmQwMzk2MjhlNWEuLjAzMmIzZjY3ZDk0OTY4OWQxMmZiODkxYTkxMDViZjdmYzg4ODNkYWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQ
bGF0Zm9ybURhdGFIYXJmQnV6ei5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oCkBAIC00Nyw3ICs0Nyw3IEBA
IHR5cGVkZWYgdWludDMyX3QgU2tGb250SUQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIEhhcmZCdXp6TkdGYWNlOworY2xhc3MgSGFyZkJ1enpG
YWNlOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRm9udFBsYXRmb3JtRGF0YSBpcyB0
aGUgaGFuZGxlIHdoaWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZpYyBmYWNlLiBBIGZhY2UKQEAg
LTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7
CiAjZW5kaWYKIAotICAgIEhhcmZCdXp6TkdGYWNlKiBoYXJmYnV6ekZhY2UoKSBjb25zdDsKKyAg
ICBIYXJmQnV6ekZhY2UqIGhhcmZCdXp6RmFjZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIHJldHVy
bmVkIHN0eWxlcyBhcmUgYWxsIGFjdHVhbCBzdHlsZXMgd2l0aG91dCBGb250UmVuZGVyU3R5bGU6
Ok5vUHJlZmVyZW5jZS4KICAgICBjb25zdCBGb250UmVuZGVyU3R5bGUmIGZvbnRSZW5kZXJTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9mYWtlSXRhbGljOwogICAgIEZvbnRPcmllbnRhdGlvbiBtX29yaWVudGF0
aW9uOwogICAgIEZvbnRSZW5kZXJTdHlsZSBtX3N0eWxlOwotICAgIG11dGFibGUgUmVmUHRyPEhh
cmZCdXp6TkdGYWNlPiBtX2hhcmZidXp6RmFjZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxIYXJmQnV6
ekZhY2U+IG1faGFyZkJ1enpGYWNlOwogCiAgICAgU2tUeXBlZmFjZSogaGFzaFRhYmxlRGVsZXRl
ZEZvbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2tUeXBlZmFjZSo+
KC0xKTsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYjQ4MWNmOTQzMDli
MmNkMjczYzUwYTg0MmE1ZDZhNjAzYmRhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3BwCkBAIC0wLDAg
KzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgor
CisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgImhiLW90LmgiCisjaW5j
bHVkZSAiaGIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBoYl90YWdfdCBIYXJm
QnV6ekZhY2U6OnZlcnRUYWcgPSBIQl9UQUcoJ3YnLCAnZScsICdyJywgJ3QnKTsKK2NvbnN0IGhi
X3RhZ190IEhhcmZCdXp6RmFjZTo6dnJ0MlRhZyA9IEhCX1RBRygndicsICdyJywgJ3QnLCAnMicp
OworCisvLyBUaG91Z2ggd2UgaGF2ZSBGb250Q2FjaGUgY2xhc3MsIHdoaWNoIHByb3ZpZGVzIHRo
ZSBjYWNoZSBtZWNoYW5pc20gZm9yCisvLyBXZWJLaXQncyBmb250IG9iamVjdHMsIHdlIGFsc28g
bmVlZCBhZGRpdGlvbmFsIGNhY2hpbmcgbGF5ZXIgZm9yIEhhcmZCdXp6CisvLyB0byByZWR1Y2Ug
dGhlIG1lbW9yeSBjb25zdW1wdGlvbiBiZWNhdXNlIGhiX2ZhY2VfdCBzaG91bGQgYmUgYXNzb2Np
YXRlZCB3aXRoCisvLyB1bmRlcmxpbmcgZm9udCBkYXRhIChlLmcuIENURm9udFJlZiwgRlRGYWNl
KS4KKworY2xhc3MgRmFjZUNhY2hlRW50cnkgOiBwdWJsaWMgUmVmQ291bnRlZDxGYWNlQ2FjaGVF
bnRyeT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZhY2VDYWNoZUVudHJ5PiBj
cmVhdGUoaGJfZmFjZV90KiBmYWNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZhY2UpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZhY2VDYWNoZUVudHJ5KGZhY2UpKTsKKyAgICB9Cisg
ICAgfkZhY2VDYWNoZUVudHJ5KCkKKyAgICB7CisgICAgICAgIGhiX2ZhY2VfZGVzdHJveShtX2Zh
Y2UpOworICAgIH0KKworICAgIGhiX2ZhY2VfdCogZmFjZSgpIHsgcmV0dXJuIG1fZmFjZTsgfQor
ICAgIEhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogZ2x5cGhDYWNoZSgpIHsgcmV0dXJuICZt
X2dseXBoQ2FjaGU7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBGYWNlQ2FjaGVFbnRyeSho
Yl9mYWNlX3QqIGZhY2UpCisgICAgICAgIDogbV9mYWNlKGZhY2UpCisgICAgeyB9CisKKyAgICBo
Yl9mYWNlX3QqIG1fZmFjZTsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4gbV9nbHlw
aENhY2hlOworfTsKKwordHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RmFjZUNhY2hl
RW50cnk+LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVpbnQ2NF90PiA+IEhhcmZCdXp6RmFjZUNhY2hlOworCitzdGF0aWMgSGFyZkJ1
enpGYWNlQ2FjaGUqIGhhcmZCdXp6RmFjZUNhY2hlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhcmZCdXp6RmFjZUNhY2hlLCBzX2hhcmZCdXp6RmFjZUNhY2hlLCAoKSk7CisgICAgcmV0
dXJuICZzX2hhcmZCdXp6RmFjZUNhY2hlOworfQorCitIYXJmQnV6ekZhY2U6OkhhcmZCdXp6RmFj
ZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQorICAg
IDogbV9wbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKQorICAgICwgbV91bmlxdWVJRCh1bmlxdWVJ
RCkKKyAgICAsIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0KEhCX1NDUklQVF9JTlZBTElEKQorewor
ICAgIEhhcmZCdXp6RmFjZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gaGFyZkJ1enpGYWNlQ2Fj
aGUoKS0+YWRkKG1fdW5pcXVlSUQsIDApOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZhY2VDYWNoZUVudHJ5OjpjcmVhdGUoY3Jl
YXRlRmFjZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5yZWYoKTsKKyAgICBtX2Zh
Y2UgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5mYWNlKCk7CisgICAgbV9nbHlwaENhY2hlRm9y
RmFjZUNhY2hlRW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5nbHlwaENhY2hlKCk7Cit9
CisKK0hhcmZCdXp6RmFjZTo6fkhhcmZCdXp6RmFjZSgpCit7CisgICAgSGFyZkJ1enpGYWNlQ2Fj
aGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhhcmZCdXp6RmFjZUNhY2hlKCktPmZpbmQobV91bmlxdWVJ
RCk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSBoYXJmQnV6ekZhY2VDYWNoZSgpLT5lbmQoKSk7Cisg
ICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUtPnJlZkNvdW50KCkgPiAxKTsKKyAgICByZXN1
bHQuZ2V0KCktPnZhbHVlLT5kZXJlZigpOworICAgIGlmIChyZXN1bHQuZ2V0KCktPnZhbHVlLT5y
ZWZDb3VudCgpID09IDEpCisgICAgICAgIGhhcmZCdXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3Vu
aXF1ZUlEKTsKK30KKworc3RhdGljIGhiX3NjcmlwdF90IGZpbmRTY3JpcHRGb3JWZXJ0aWNhbEds
eXBoU3Vic3RpdHV0aW9uKGhiX2ZhY2VfdCogZmFjZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWF4Q291bnQgPSAzMjsKKworICAgIHVuc2lnbmVkIHNjcmlwdENvdW50ID0gbWF4Q291
bnQ7CisgICAgaGJfdGFnX3Qgc2NyaXB0VGFnc1ttYXhDb3VudF07CisgICAgaGJfb3RfbGF5b3V0
X3RhYmxlX2dldF9zY3JpcHRfdGFncyhmYWNlLCBIQl9PVF9UQUdfR1NVQiwgMCwgJnNjcmlwdENv
dW50LCBzY3JpcHRUYWdzKTsKKyAgICBmb3IgKHVuc2lnbmVkIHNjcmlwdEluZGV4ID0gMDsgc2Ny
aXB0SW5kZXggPCBzY3JpcHRDb3VudDsgKytzY3JpcHRJbmRleCkgeworICAgICAgICB1bnNpZ25l
ZCBsYW5ndWFnZUNvdW50ID0gbWF4Q291bnQ7CisgICAgICAgIGhiX3RhZ190IGxhbmd1YWdlVGFn
c1ttYXhDb3VudF07CisgICAgICAgIGhiX290X2xheW91dF9zY3JpcHRfZ2V0X2xhbmd1YWdlX3Rh
Z3MoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4LCAwLCAmbGFuZ3VhZ2VDb3VudCwg
bGFuZ3VhZ2VUYWdzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYW5ndWFnZUluZGV4ID0gMDsg
bGFuZ3VhZ2VJbmRleCA8IGxhbmd1YWdlQ291bnQ7ICsrbGFuZ3VhZ2VJbmRleCkgeworICAgICAg
ICAgICAgdW5zaWduZWQgZmVhdHVyZUluZGV4OworICAgICAgICAgICAgaWYgKGhiX290X2xheW91
dF9sYW5ndWFnZV9maW5kX2ZlYXR1cmUoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4
LCBsYW5ndWFnZUluZGV4LCBIYXJmQnV6ekZhY2U6OnZlcnRUYWcsICZmZWF0dXJlSW5kZXgpCisg
ICAgICAgICAgICAgICAgfHwgaGJfb3RfbGF5b3V0X2xhbmd1YWdlX2ZpbmRfZmVhdHVyZShmYWNl
LCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0SW5kZXgsIGxhbmd1YWdlSW5kZXgsIEhhcmZCdXp6RmFj
ZTo6dnJ0MlRhZywgJmZlYXR1cmVJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhiX290
X3RhZ190b19zY3JpcHQoc2NyaXB0VGFnc1tzY3JpcHRJbmRleF0pOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBIQl9TQ1JJUFRfSU5WQUxJRDsKK30KKwordm9pZCBIYXJmQnV6ekZhY2U6
OnNldFNjcmlwdEZvclZlcnRpY2FsR2x5cGhTdWJzdGl0dXRpb24oaGJfYnVmZmVyX3QqIGJ1ZmZl
cikKK3sKKyAgICBpZiAobV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQgPT0gSEJfU0NSSVBUX0lOVkFM
SUQpCisgICAgICAgIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0ID0gZmluZFNjcmlwdEZvclZlcnRp
Y2FsR2x5cGhTdWJzdGl0dXRpb24obV9mYWNlKTsKKyAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChi
dWZmZXIsIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6ekZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzc3NmRjMDdhNzhjMDA2ZmVjOTAyNzFk
NTgyODU5Y2RkMDhjMmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSGFyZkJ1enpGYWNlX2gKKyNkZWZpbmUgSGFyZkJ1enpGYWNlX2gKKworI2luY2x1ZGUgPGhi
Lmg+CisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKKworY2xh
c3MgSGFyZkJ1enpGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SGFyZkJ1enpGYWNlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGhiX3RhZ190IHZlcnRUYWc7CisgICAgc3RhdGljIGNvbnN0
IGhiX3RhZ190IHZydDJUYWc7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYXJmQnV6ekZhY2U+
IGNyZWF0ZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlE
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmQnV6ekZhY2UocGxhdGZv
cm1EYXRhLCB1bmlxdWVJRCkpOworICAgIH0KKyAgICB+SGFyZkJ1enpGYWNlKCk7CisKKyAgICBo
Yl9mb250X3QqIGNyZWF0ZUZvbnQoKTsKKworICAgIHZvaWQgc2V0U2NyaXB0Rm9yVmVydGljYWxH
bHlwaFN1YnN0aXR1dGlvbihoYl9idWZmZXJfdCopOworCitwcml2YXRlOgorICAgIEhhcmZCdXp6
RmFjZShGb250UGxhdGZvcm1EYXRhKiwgdWludDY0X3QpOworCisgICAgaGJfZmFjZV90KiBjcmVh
dGVGYWNlKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBtX3BsYXRmb3JtRGF0YTsKKyAgICB1
aW50NjRfdCBtX3VuaXF1ZUlEOworICAgIGhiX2ZhY2VfdCogbV9mYWNlOworICAgIFdURjo6SGFz
aE1hcDx1aW50MzJfdCwgdWludDE2X3Q+KiBtX2dseXBoQ2FjaGVGb3JGYWNlQ2FjaGVFbnRyeTsK
KworICAgIGhiX3NjcmlwdF90IG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0OworfTsKKworfQorCisj
ZW5kaWYgLy8gSGFyZkJ1enpGYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZWFhMDkyODdlNDFmYjUzMWRhMjhmNjljNzczYzFmNzhiNWUzYzliCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpGYWNlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1
enpGYWNlLmgiCisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgorI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8Y2Fpcm8t
ZnQuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+
CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KKyNpbmNsdWRlIDxoYi5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
YWlyb0Z0RmFjZUxvY2tlciB7CitwdWJsaWM6CisgICAgQ2Fpcm9GdEZhY2VMb2NrZXIoY2Fpcm9f
c2NhbGVkX2ZvbnRfdCogY2Fpcm9TY2FsZWRGb250KSA6IG1fc2NhbGVkRm9udChjYWlyb1NjYWxl
ZEZvbnQpIHsgfTsKKyAgICBGVF9GYWNlIGxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNh
aXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX3NjYWxlZEZvbnQpOworICAgIH07CisgICAg
fkNhaXJvRnRGYWNlTG9ja2VyKCkKKyAgICB7CisgICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250
X3VubG9ja19mYWNlKG1fc2NhbGVkRm9udCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjYWlyb19z
Y2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Cit9OworCitzdGF0aWMgaGJfcG9zaXRpb25fdCBm
bG9hdFRvSGFyZkJ1enpQb3NpdGlvbihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aGJfcG9zaXRpb25fdD4odmFsdWUgKiAoMSA8PCAxNikpOworfQorCitzdGF0aWMgaGJf
cG9zaXRpb25fdCBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZG91YmxlIHZhbHVlKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2KSk7Cit9
CisKK3N0YXRpYyB2b2lkIENhaXJvR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMoY2Fpcm9fc2NhbGVk
X2ZvbnRfdCogc2NhbGVkRm9udCwgaGJfY29kZXBvaW50X3QgY29kZXBvaW50LCBoYl9wb3NpdGlv
bl90KiBhZHZhbmNlLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMpCit7CisgICAgY2Fpcm9f
dGV4dF9leHRlbnRzX3QgZ2x5cGhFeHRlbnRzOworICAgIGNhaXJvX2dseXBoX3QgZ2x5cGg7Cisg
ICAgZ2x5cGguaW5kZXggPSBjb2RlcG9pbnQ7CisgICAgZ2x5cGgueCA9IDA7CisgICAgZ2x5cGgu
eSA9IDA7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhzY2FsZWRGb250LCAm
Z2x5cGgsIDEsICZnbHlwaEV4dGVudHMpOworCisgICAgaWYgKGFkdmFuY2UpCisgICAgICAgICph
ZHZhbmNlID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50cy54X2FkdmFuY2Up
OworICAgIGlmIChleHRlbnRzKSB7CisgICAgICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IGRvdWJs
ZVRvSGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMueF9iZWFyaW5nKTsKKyAgICAgICAgZXh0
ZW50cy0+eV9iZWFyaW5nID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50cy55
X2JlYXJpbmcpOworICAgICAgICBleHRlbnRzLT53aWR0aCA9IGRvdWJsZVRvSGFyZkJ1enpQb3Np
dGlvbihnbHlwaEV4dGVudHMud2lkdGgpOworICAgICAgICBleHRlbnRzLT5oZWlnaHQgPSBkb3Vi
bGVUb0hhcmZCdXp6UG9zaXRpb24oZ2x5cGhFeHRlbnRzLmhlaWdodCk7CisgICAgfQorfQorCitz
dGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0R2x5cGgoaGJfZm9udF90Kiwgdm9pZCogZm9udERh
dGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90LCBoYl9jb2RlcG9pbnRf
dCogZ2x5cGgsIHZvaWQqKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKTsKKyAgICBjYWly
b19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gcGxhdGZvcm1EYXRhLT5zY2FsZWRGb250KCk7
CisgICAgQVNTRVJUKHNjYWxlZEZvbnQpOworCisgICAgY2Fpcm9fZ2x5cGhfdCogZ2x5cGhzID0g
MDsKKyAgICBpbnQgbnVtR2x5cGhzID0gMDsKKyAgICBDU3RyaW5nIHV0ZjhDb2RlcG9pbnQgPSBV
VEY4RW5jb2RpbmcoKS5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KCZ1bmljb2RlKSwg
MSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgaWYgKENBSVJPX1NUQVRVU19T
VUNDRVNTICE9IGNhaXJvX3NjYWxlZF9mb250X3RleHRfdG9fZ2x5cGhzKHNjYWxlZEZvbnQsIDAs
IDAsIHV0ZjhDb2RlcG9pbnQuZGF0YSgpLCB1dGY4Q29kZXBvaW50Lmxlbmd0aCgpLCAmZ2x5cGhz
LCAmbnVtR2x5cGhzLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
bnVtR2x5cGhzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmdseXBoID0gZ2x5cGhzWzBd
LmluZGV4OworICAgIGNhaXJvX2dseXBoX2ZyZWUoZ2x5cGhzKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZkJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZh
bmNlKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgdm9p
ZCopCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpOworICAgIGNhaXJvX3NjYWxlZF9mb250
X3QqIHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKTsKKyAgICBBU1NFUlQo
c2NhbGVkRm9udCk7CisKKyAgICBoYl9wb3NpdGlvbl90IGFkdmFuY2UgPSAwOworICAgIENhaXJv
R2V0R2x5cGhXaWR0aEFuZEV4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGgsICZhZHZhbmNlLCAwKTsK
KyAgICByZXR1cm4gYWR2YW5jZTsKK30KKworc3RhdGljIGhiX2Jvb2xfdCBoYXJmQnV6ekdldEds
eXBoSG9yaXpvbnRhbE9yaWdpbihoYl9mb250X3QqLCB2b2lkKiwgaGJfY29kZXBvaW50X3QsIGhi
X3Bvc2l0aW9uX3QqLCBoYl9wb3NpdGlvbl90Kiwgdm9pZCopCit7CisgICAgLy8gSnVzdCByZXR1
cm4gdHJ1ZSwgZm9sbG93aW5nIHRoZSB3YXkgdGhhdCBIYXJmYnV6ei1GcmVlVHlwZQorICAgIC8v
IGltcGxlbWVudGF0aW9uIGRvZXMuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9i
b29sX3QgaGFyZkJ1enpHZXRHbHlwaEV4dGVudHMoaGJfZm9udF90Kiwgdm9pZCogZm9udERhdGEs
IGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMsIHZvaWQq
KQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKTsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90
KiBzY2FsZWRGb250ID0gcGxhdGZvcm1EYXRhLT5zY2FsZWRGb250KCk7CisgICAgQVNTRVJUKHNj
YWxlZEZvbnQpOworCisgICAgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhzY2FsZWRGb250
LCBnbHlwaCwgMCwgZXh0ZW50cyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9m
b250X2Z1bmNzX3QqIGhhcmZCdXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKCkKK3sKKyAgICBzdGF0
aWMgaGJfZm9udF9mdW5jc190KiBoYXJmQnV6ekNhaXJvRm9udEZ1bmNzID0gMDsKKworICAgIC8v
IFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggd2UgY2FuJ3Qgc3VwcG9ydC4K
KyAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaWYg
dGhleSBhcmVuJ3Qgc2V0LgorICAgIGlmICghaGFyZkJ1enpDYWlyb0ZvbnRGdW5jcykgeworICAg
ICAgICBoYXJmQnV6ekNhaXJvRm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19jcmVhdGUoKTsKKyAg
ICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNz
LCBoYXJmQnV6ekdldEdseXBoLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZkJ1enpDYWlyb0ZvbnRGdW5jcywgaGFyZkJ1enpHZXRHbHlw
aEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9vcmlnaW5fZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJmQnV6ekdldEdseXBo
SG9yaXpvbnRhbE9yaWdpbiwgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBo
X2V4dGVudHNfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJmQnV6ekdldEdseXBoRXh0
ZW50cywgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11dGFibGUoaGFyZkJ1
enpDYWlyb0ZvbnRGdW5jcyk7CisgICAgfQorICAgIHJldHVybiBoYXJmQnV6ekNhaXJvRm9udEZ1
bmNzOworfQorCitzdGF0aWMgaGJfYmxvYl90KiBoYXJmQnV6ekNhaXJvR2V0VGFibGUoaGJfZmFj
ZV90KiwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBjYWlyb19zY2FsZWRf
Zm9udF90KiBzY2FsZWRGb250ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19zY2FsZWRfZm9udF90
Kj4odXNlckRhdGEpOworICAgIGlmICghc2NhbGVkRm9udCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBDYWlyb0Z0RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihzY2FsZWRGb250KTsKKyAg
ICBGVF9GYWNlIGZ0Rm9udCA9IGNhaXJvRnRGYWNlTG9ja2VyLmxvY2soKTsKKyAgICBpZiAoIWZ0
Rm9udCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGVF9VTG9uZyB0YWJsZVNpemUgPSAwOwor
ICAgIEZUX0Vycm9yIGVycm9yID0gRlRfTG9hZF9TZm50X1RhYmxlKGZ0Rm9udCwgdGFnLCAwLCAw
LCAmdGFibGVTaXplKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiAwOworCisgICAg
RlRfQnl0ZSogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxGVF9CeXRlKj4oZmFzdE1hbGxvYyh0
YWJsZVNpemUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRlRf
VUxvbmcgZXhwZWN0ZWRUYWJsZVNpemUgPSB0YWJsZVNpemU7CisgICAgZXJyb3IgPSBGVF9Mb2Fk
X1NmbnRfVGFibGUoZnRGb250LCB0YWcsIDAsIGJ1ZmZlciwgJnRhYmxlU2l6ZSk7CisgICAgaWYg
KGVycm9yIHx8IHRhYmxlU2l6ZSAhPSBleHBlY3RlZFRhYmxlU2l6ZSkgeworICAgICAgICBmYXN0
RnJlZShidWZmZXIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gaGJf
YmxvYl9jcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSwgdGFibGVT
aXplLCBIQl9NRU1PUllfTU9ERV9XUklUQUJMRSwgYnVmZmVyLCBmYXN0RnJlZSk7Cit9CisKK2hi
X2ZhY2VfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNlKCkKK3sKKyAgICBoYl9mYWNlX3QqIGZh
Y2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzKGhhcmZCdXp6Q2Fpcm9HZXRUYWJsZSwgbV9w
bGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKSwgMCk7CisgICAgQVNTRVJUKGZhY2UpOworICAgIHJl
dHVybiBmYWNlOworfQorCitoYl9mb250X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCit7
CisgICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUobV9mYWNlKTsKKyAgICBoYl9m
b250X3NldF9mdW5jcyhmb250LCBoYXJmQnV6ekNhaXJvVGV4dEdldEZvbnRGdW5jcygpLCBtX3Bs
YXRmb3JtRGF0YSwgMCk7CisgICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLT5z
aXplKCk7CisgICAgaWYgKGZsb29yZihzaXplKSA9PSBzaXplKQorICAgICAgICBoYl9mb250X3Nl
dF9wcGVtKGZvbnQsIHNpemUsIHNpemUpOworICAgIGludCBzY2FsZSA9IGZsb2F0VG9IYXJmQnV6
elBvc2l0aW9uKHNpemUpOworICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZvbnQsIHNjYWxlLCBzY2Fs
ZSk7CisgICAgaGJfZm9udF9tYWtlX2ltbXV0YWJsZShmb250KTsKKyAgICByZXR1cm4gZm9udDsK
K30KKworR2x5cGhCdWZmZXJBZHZhbmNlIEhhcmZCdXp6U2hhcGVyOjpjcmVhdGVHbHlwaEJ1ZmZl
ckFkdmFuY2UoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKK3sKKyAgICByZXR1cm4gR2x5cGhC
dWZmZXJBZHZhbmNlKHdpZHRoLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOThkYmRiNzEw
YzJmMWExNDU5MDdlYWRhZjJlMDdjNWI0NDg1NGVmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0
LmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXJm
QnV6ekZhY2UuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJI
YXJmQnV6elNoYXBlci5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRl
ICJoYi5oIgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNl
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGZsb2F0
VG9IYXJmQnV6elBvc2l0aW9uKENHRmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEgPDwgMTYpKTsKK30KKworc3RhdGljIGhiX2Jv
b2xfdCBnZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVw
b2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZhcmlhdGlvblNlbGVjdG9yLCBoYl9jb2Rl
cG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZvbnQg
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgp
OworICAgIFVuaUNoYXIgY2hhcmFjdGVyc1s0XTsKKyAgICBDR0dseXBoIGNnR2x5cGhzWzRdOwor
ICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNoYXJhY3RlcnMs
IGxlbmd0aCwgdW5pY29kZSk7CisgICAgaWYgKCFDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJz
KGN0Rm9udCwgY2hhcmFjdGVycywgY2dHbHlwaHMsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAqZ2x5cGggPSBjZ0dseXBoc1swXTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIGhiX3Bvc2l0aW9uX3QgZ2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250X3Qq
IGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2Vy
RGF0YSkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxh
dGZvcm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKKyAgICBDR0dseXBoIGNnR2x5cGggPSBn
bHlwaDsKKyAgICBDR0Zsb2F0IGFkdmFuY2UgPSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhj
dEZvbnQsIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZjZ0dseXBoLCAwLCAxKTsKKyAg
ICByZXR1cm4gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oYWR2YW5jZSk7Cit9CisKK3N0YXRpYyBo
Yl9ib29sX3QgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCogaGJGb250LCB2b2lk
KiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bvc2l0aW9uX3QqIHgsIGhiX3Bv
c2l0aW9uX3QqIHksIHZvaWQqIHVzZXJEYXRhKQoreworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgaGJfYm9vbF90IGdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCog
Zm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVu
dHMsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJl
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgpOworICAgIENHUmVj
dCBjZ1JlY3Q7CisgICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7CisgICAgaWYgKENURm9udEdl
dEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250RGVmYXVsdE9yaWVudGF0aW9u
LCAmY2dHbHlwaCwgJmNnUmVjdCwgMSkgPT0gQ0dSZWN0TnVsbCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNn
UmVjdC5vcmlnaW4ueCk7CisgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gLWZsb2F0VG9IYXJmQnV6
elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueSk7CisgICAgZXh0ZW50cy0+d2lkdGggPSBmbG9hdFRv
SGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS53aWR0aCk7CisgICAgZXh0ZW50cy0+aGVpZ2h0
ID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDb3JlVGV4dEdl
dEZvbnRGdW5jcygpCit7CisgICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZkJ1enpDb3Jl
VGV4dEZvbnRGdW5jcyA9IDA7CisKKyAgICBpZiAoIWhhcmZCdXp6Q29yZVRleHRGb250RnVuY3Mp
IHsKKyAgICAgICAgaGFyZkJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVuY3NfY3Jl
YXRlKCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMoaGFyZkJ1enpDb3Jl
VGV4dEZvbnRGdW5jcywgZ2V0R2x5cGgsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3Nl
dF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmQnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlw
aEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9vcmlnaW5fZnVuYyhoYXJmQnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEhvcml6
b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9leHRl
bnRzX2Z1bmMoaGFyZkJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhFeHRlbnRzLCAwLCAw
KTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJsZShoYXJmQnV6ekNvcmVUZXh0
Rm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZCdXp6Q29yZVRleHRGb250RnVuY3M7
Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VUYWJsZURhdGEodm9pZCogdXNlckRhdGEpCit7Cisg
ICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPih1c2VyRGF0
YSk7CisgICAgQ0ZSZWxlYXNlKGNmRGF0YSk7Cit9CisKK3N0YXRpYyBoYl9ibG9iX3QqIGhhcmZC
dXp6Q29yZVRleHRHZXRUYWJsZShoYl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9pZCog
dXNlckRhdGEpCit7CisgICAgQ0dGb250UmVmIGNnRm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0dG
b250UmVmPih1c2VyRGF0YSk7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENHRm9udENvcHlUYWJs
ZUZvclRhZyhjZ0ZvbnQsIHRhZyk7CisgICAgaWYgKCFjZkRhdGEpCisgICAgICAgIHJldHVybiAw
OworCisgICAgY29uc3QgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSk7CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IENG
RGF0YUdldExlbmd0aChjZkRhdGEpOworICAgIGlmICghZGF0YSB8fCAhbGVuZ3RoKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gaGJfYmxvYl9jcmVhdGUoZGF0YSwgbGVuZ3RoLCBIQl9N
RU1PUllfTU9ERV9SRUFET05MWSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxf
X0NGRGF0YSo+KGNmRGF0YSkpLCByZWxlYXNlVGFibGVEYXRhKTsKK30KKworaGJfZmFjZV90KiBI
YXJmQnV6ekZhY2U6OmNyZWF0ZUZhY2UoKQoreworICAgIC8vIEl0IHNlZW1zIHRoYXQgQ1RGb250
Q29weVRhYmxlIG9mIE1hY09TWDEwLjUgc2RrIGRvZXNuJ3Qgd29yayBmb3IKKyAgICAvLyBPcGVu
VHlwZSBsYXlvdXQgdGFibGVzKEdERUYsIEdTVUIsIEdQT1MpLiBVc2UgQ0dGb250Q29weVRhYmxl
Rm9yVGFnIGluc3RlYWQuCisgICAgaGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9y
X3RhYmxlcyhoYXJmQnV6ekNvcmVUZXh0R2V0VGFibGUsIG1fcGxhdGZvcm1EYXRhLT5jZ0ZvbnQo
KSwgMCk7CisgICAgQVNTRVJUKGZhY2UpOworICAgIHJldHVybiBmYWNlOworfQorCitoYl9mb250
X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCit7CisgICAgaGJfZm9udF90KiBmb250ID0g
aGJfZm9udF9jcmVhdGUobV9mYWNlKTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJm
QnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKCksIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAgICBjb25z
dCBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEtPm1fc2l6ZTsKKyAgICBoYl9mb250X3NldF9w
cGVtKGZvbnQsIHNpemUsIHNpemUpOworICAgIGNvbnN0IGludCBzY2FsZSA9ICgxIDw8IDE2KSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2Nh
bGUsIHNjYWxlKTsKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAgIHJldHVy
biBmb250OworfQorCitHbHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUds
eXBoQnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJldHVy
biBDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6ekZhY2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6RmFjZVNraWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczYWQ2YWE0MTg0NWVlOWNi
ZGZhOGM0OWI4MTVjZjc2ZmVmZjYzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VTa2lhLmNwcApAQCAtMCww
ICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIK
KworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKKyNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCisjaW5jbHVkZSAiU2tQYWludC5oIgorI2luY2x1
ZGUgIlNrUGF0aC5oIgorI2luY2x1ZGUgIlNrUG9pbnQuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIK
KyNpbmNsdWRlICJTa1V0aWxzLmgiCisKKyNpbmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gT3VyIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBjYWxsYmFja3Mgd2hpY2ggSGFyZmJ1enogcmVxdWlyZXMgYnkgdXNpbmcgU2tpYQor
Ly8gY2FsbHMuIFNlZSB0aGUgSGFyZmJ1enogc291cmNlIGZvciByZWZlcmVuY2VzIGFib3V0IHdo
YXQgdGhlc2UgY2FsbGJhY2tzIGRvLgorCitzdHJ1Y3QgSGFyZkJ1enpGb250RGF0YSB7CisgICAg
SGFyZkJ1enpGb250RGF0YShXVEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogZ2x5cGhD
YWNoZUZvckZhY2VDYWNoZUVudHJ5KQorICAgICAgICA6IG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNo
ZUVudHJ5KGdseXBoQ2FjaGVGb3JGYWNlQ2FjaGVFbnRyeSkKKyAgICB7IH0KKyAgICBTa1BhaW50
IG1fcGFpbnQ7CisgICAgV1RGOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4qIG1fZ2x5cGhD
YWNoZUZvckZhY2VDYWNoZUVudHJ5OworfTsKKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgU2tpYVNj
YWxhclRvSGFyZkJ1enpQb3NpdGlvbihTa1NjYWxhciB2YWx1ZSkKK3sKKyAgICByZXR1cm4gU2tT
Y2FsYXJUb0ZpeGVkKHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgU2tpYUdldEdseXBoV2lkdGhB
bmRFeHRlbnRzKFNrUGFpbnQqIHBhaW50LCBoYl9jb2RlcG9pbnRfdCBjb2RlcG9pbnQsIGhiX3Bv
c2l0aW9uX3QqIHdpZHRoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMpCit7CisgICAgQVNT
RVJUKGNvZGVwb2ludCA8PSAweEZGRkYpOworICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQ
YWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKKworICAgIFNrU2NhbGFyIHNrV2lkdGg7Cisg
ICAgU2tSZWN0IHNrQm91bmRzOworICAgIHVpbnQxNl90IGdseXBoID0gY29kZXBvaW50OworCisg
ICAgcGFpbnQtPmdldFRleHRXaWR0aHMoJmdseXBoLCBzaXplb2YoZ2x5cGgpLCAmc2tXaWR0aCwg
JnNrQm91bmRzKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IFNraWFTY2FsYXJU
b0hhcmZCdXp6UG9zaXRpb24oc2tXaWR0aCk7CisgICAgaWYgKGV4dGVudHMpIHsKKyAgICAgICAg
Ly8gSW52ZXJ0IHktYXhpcyBiZWNhdXNlIFNraWEgaXMgeS1ncm93cy1kb3duIGJ1dCB3ZSBzZXQg
dXAgSGFyZkJ1enogdG8gYmUgeS1ncm93cy11cC4KKyAgICAgICAgZXh0ZW50cy0+eF9iZWFyaW5n
ID0gU2tpYVNjYWxhclRvSGFyZkJ1enpQb3NpdGlvbihza0JvdW5kcy5mTGVmdCk7CisgICAgICAg
IGV4dGVudHMtPnlfYmVhcmluZyA9IFNraWFTY2FsYXJUb0hhcmZCdXp6UG9zaXRpb24oLXNrQm91
bmRzLmZUb3ApOworICAgICAgICBleHRlbnRzLT53aWR0aCA9IFNraWFTY2FsYXJUb0hhcmZCdXp6
UG9zaXRpb24oc2tCb3VuZHMud2lkdGgoKSk7CisgICAgICAgIGV4dGVudHMtPmhlaWdodCA9IFNr
aWFTY2FsYXJUb0hhcmZCdXp6UG9zaXRpb24oLXNrQm91bmRzLmhlaWdodCgpKTsKKyAgICB9Cit9
CisKK3N0YXRpYyBoYl9ib29sX3QgaGFyZkJ1enpHZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwg
dm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZh
cmlhdGlvblNlbGVjdG9yLCBoYl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQor
eworICAgIEhhcmZCdXp6Rm9udERhdGEqIGhiRm9udERhdGEgPSByZWludGVycHJldF9jYXN0PEhh
cmZCdXp6Rm9udERhdGEqPihmb250RGF0YSk7CisKKyAgICBXVEY6Okhhc2hNYXA8dWludDMyX3Qs
IHVpbnQxNl90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IGhiRm9udERhdGEtPm1fZ2x5cGhDYWNoZUZv
ckZhY2VDYWNoZUVudHJ5LT5hZGQodW5pY29kZSwgMCk7CisgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7CisgICAgICAgIFNrUGFpbnQqIHBhaW50ID0gJmhiRm9udERhdGEtPm1fcGFpbnQ7Cisg
ICAgICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjMyX1RleHRFbmNvZGlu
Zyk7CisgICAgICAgIHVpbnQxNl90IGdseXBoMTY7CisgICAgICAgIHBhaW50LT50ZXh0VG9HbHlw
aHMoJnVuaWNvZGUsIHNpemVvZihoYl9jb2RlcG9pbnRfdCksICZnbHlwaDE2KTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdseXBoMTY7CisgICAgICAgICpnbHlwaCA9IGdseXBo
MTY7CisgICAgfQorICAgICpnbHlwaCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgcmV0
dXJuICEhKmdseXBoOworfQorCitzdGF0aWMgaGJfcG9zaXRpb25fdCBoYXJmQnV6ekdldEdseXBo
SG9yaXpvbnRhbEFkdmFuY2UoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9j
b2RlcG9pbnRfdCBnbHlwaCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgSGFyZkJ1enpGb250RGF0
YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFyZkJ1enpGb250RGF0YSo+KGZvbnRE
YXRhKTsKKyAgICBoYl9wb3NpdGlvbl90IGFkdmFuY2UgPSAwOworCisgICAgU2tpYUdldEdseXBo
V2lkdGhBbmRFeHRlbnRzKCZoYkZvbnREYXRhLT5tX3BhaW50LCBnbHlwaCwgJmFkdmFuY2UsIDAp
OworICAgIHJldHVybiBhZHZhbmNlOworfQorCitzdGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0
R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwg
aGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bvc2l0aW9uX3QqIHgsIGhiX3Bvc2l0aW9uX3QqIHks
IHZvaWQqIHVzZXJEYXRhKQoreworICAgIC8vIEp1c3QgcmV0dXJuIHRydWUsIGZvbGxvd2luZyB0
aGUgd2F5IHRoYXQgSGFyZmJ1enotRnJlZVR5cGUKKyAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2Vz
LgorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0R2x5
cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50
X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cywgdm9pZCogdXNlckRhdGEpCit7
CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFy
ZkJ1enpGb250RGF0YSo+KGZvbnREYXRhKTsKKworICAgIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0
ZW50cygmaGJGb250RGF0YS0+bV9wYWludCwgZ2x5cGgsIDAsIGV4dGVudHMpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmQnV6elNraWFHZXRGb250
RnVuY3MoKQoreworICAgIHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZCdXp6U2tpYUZvbnRG
dW5jcyA9IDA7CisKKyAgICAvLyBXZSBkb24ndCBzZXQgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNo
IHdlIGNhbid0IHN1cHBvcnQuCisgICAgLy8gSGFyZmJ1enogd2lsbCB1c2UgdGhlIGZhbGxiYWNr
IGltcGxlbWVudGF0aW9uIGlmIHRoZXkgYXJlbid0IHNldC4KKyAgICBpZiAoIWhhcmZCdXp6U2tp
YUZvbnRGdW5jcykgeworICAgICAgICBoYXJmQnV6elNraWFGb250RnVuY3MgPSBoYl9mb250X2Z1
bmNzX2NyZWF0ZSgpOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGhhcmZC
dXp6U2tpYUZvbnRGdW5jcywgaGFyZkJ1enpHZXRHbHlwaCwgMCwgMCk7CisgICAgICAgIGhiX2Zv
bnRfZnVuY3Nfc2V0X2dseXBoX2hfYWR2YW5jZV9mdW5jKGhhcmZCdXp6U2tpYUZvbnRGdW5jcywg
aGFyZkJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9u
dF9mdW5jc19zZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmQnV6elNraWFGb250RnVuY3MsIGhh
cmZCdXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9m
dW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGhhcmZCdXp6U2tpYUZvbnRGdW5jcywgaGFyZkJ1
enpHZXRHbHlwaEV4dGVudHMsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX21ha2VfaW1t
dXRhYmxlKGhhcmZCdXp6U2tpYUZvbnRGdW5jcyk7CisgICAgfQorICAgIHJldHVybiBoYXJmQnV6
elNraWFGb250RnVuY3M7Cit9CisKK3N0YXRpYyBoYl9ibG9iX3QqIGhhcmZCdXp6U2tpYUdldFRh
YmxlKGhiX2ZhY2VfdCogZmFjZSwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAg
ICBTa0ZvbnRJRCB1bmlxdWVJRCA9IHN0YXRpY19jYXN0PFNrRm9udElEPihyZWludGVycHJldF9j
YXN0PHVpbnQ2NF90Pih1c2VyRGF0YSkpOworCisgICAgY29uc3Qgc2l6ZV90IHRhYmxlU2l6ZSA9
IFNrRm9udEhvc3Q6OkdldFRhYmxlU2l6ZSh1bmlxdWVJRCwgdGFnKTsKKyAgICBpZiAoIXRhYmxl
U2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjaGFyKiBidWZmZXIgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihmYXN0TWFsbG9jKHRhYmxlU2l6ZSkpOworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IFNrRm9udEhvc3Q6Okdl
dFRhYmxlRGF0YSh1bmlxdWVJRCwgdGFnLCAwLCB0YWJsZVNpemUsIGJ1ZmZlcik7CisgICAgaWYg
KHRhYmxlU2l6ZSAhPSBhY3R1YWxTaXplKSB7CisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBoYl9ibG9iX2NyZWF0ZShjb25z
dF9jYXN0PGNoYXIqPihidWZmZXIpLCB0YWJsZVNpemUsIEhCX01FTU9SWV9NT0RFX1dSSVRBQkxF
LCBidWZmZXIsIGZhc3RGcmVlKTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveUhhcmZCdXp6Rm9u
dERhdGEodm9pZCogdXNlckRhdGEpCit7CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFyZkJ1enpGb250RGF0YSo+KHVzZXJEYXRhKTsKKyAgICBk
ZWxldGUgaGJGb250RGF0YTsKK30KKworaGJfZmFjZV90KiBIYXJmQnV6ekZhY2U6OmNyZWF0ZUZh
Y2UoKQoreworICAgIGhiX2ZhY2VfdCogZmFjZSA9IGhiX2ZhY2VfY3JlYXRlX2Zvcl90YWJsZXMo
aGFyZkJ1enpTa2lhR2V0VGFibGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcGxhdGZvcm1E
YXRhLT51bmlxdWVJRCgpKSwgMCk7CisgICAgQVNTRVJUKGZhY2UpOworICAgIHJldHVybiBmYWNl
OworfQorCitoYl9mb250X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCit7CisgICAgSGFy
ZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IG5ldyBIYXJmQnV6ekZvbnREYXRhKG1fZ2x5cGhD
YWNoZUZvckZhY2VDYWNoZUVudHJ5KTsKKyAgICBtX3BsYXRmb3JtRGF0YS0+c2V0dXBQYWludCgm
aGJGb250RGF0YS0+bV9wYWludCk7CisgICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVh
dGUobV9mYWNlKTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmQnV6elNraWFHZXRG
b250RnVuY3MoKSwgaGJGb250RGF0YSwgZGVzdHJveUhhcmZCdXp6Rm9udERhdGEpOworICAgIGZs
b2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS0+c2l6ZSgpOworICAgIGludCBzY2FsZSA9IFNraWFT
Y2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9u
dCwgc2NhbGUsIHNjYWxlKTsKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAg
IHJldHVybiBmb250OworfQorCitHbHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNy
ZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAg
IHJldHVybiBHbHlwaEJ1ZmZlckFkdmFuY2Uod2lkdGgsIGhlaWdodCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmQxM2Yx
NDY0NTU0MmVhNjM5MmY0YzYzNmRlYWNkYTdiOWJkZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3Bw
CkBAIC0wLDAgKzEsNTQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6
U2hhcGVyLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgi
CisjaW5jbHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
VGV4dFJ1bi5oIgorI2luY2x1ZGUgImhiLWljdS5oIgorI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6
ci5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEhhcmZCdXp6U2NvcGVkUHRyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKCpEZXN0
cm95RnVuY3Rpb24pKFQqKTsKKworICAgIEhhcmZCdXp6U2NvcGVkUHRyKFQqIHB0ciwgRGVzdHJv
eUZ1bmN0aW9uIGRlc3Ryb3kpCisgICAgICAgIDogbV9wdHIocHRyKQorICAgICAgICAsIG1fZGVz
dHJveShkZXN0cm95KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZGVzdHJveSk7CisgICAgfQor
ICAgIH5IYXJmQnV6elNjb3BlZFB0cigpCisgICAgeworICAgICAgICBpZiAobV9wdHIpCisgICAg
ICAgICAgICAoKm1fZGVzdHJveSkobV9wdHIpOworICAgIH0KKworICAgIFQqIGdldCgpIHsgcmV0
dXJuIG1fcHRyOyB9Citwcml2YXRlOgorICAgIFQqIG1fcHRyOworICAgIERlc3Ryb3lGdW5jdGlv
biBtX2Rlc3Ryb3k7Cit9OworCitzdGF0aWMgaW5saW5lIGZsb2F0IGhhcmZCdXp6UG9zaXRpb25U
b0Zsb2F0KGhiX3Bvc2l0aW9uX3QgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0Pih2YWx1ZSkgLyAoMSA8PCAxNik7Cit9CisKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1
bjo6SGFyZkJ1enpSdW4oY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biwgaGJfc2NyaXB0X3Qgc2NyaXB0KQorICAgIDogbV9mb250RGF0YShmb250RGF0YSkKKyAgICAs
IG1fc3RhcnRJbmRleChzdGFydEluZGV4KQorICAgICwgbV9udW1DaGFyYWN0ZXJzKG51bUNoYXJh
Y3RlcnMpCisgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgLCBtX3NjcmlwdChzY3Jp
cHQpCit7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphcHBseVNoYXBl
UmVzdWx0KGhiX2J1ZmZlcl90KiBoYXJmQnV6ekJ1ZmZlcikKK3sKKyAgICBtX251bUdseXBocyA9
IGhiX2J1ZmZlcl9nZXRfbGVuZ3RoKGhhcmZCdXp6QnVmZmVyKTsKKyAgICBtX2dseXBocy5yZXNp
emUobV9udW1HbHlwaHMpOworICAgIG1fYWR2YW5jZXMucmVzaXplKG1fbnVtR2x5cGhzKTsKKyAg
ICBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzLnJlc2l6ZShtX251bUdseXBocyk7CisgICAgbV9v
ZmZzZXRzLnJlc2l6ZShtX251bUdseXBocyk7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3Qg
Z2x5cGhJZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSkKK3sK
KyAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaElkOworICAgIG1fYWR2YW5jZXNbaW5kZXhdID0g
YWR2YW5jZTsKKyAgICBtX29mZnNldHNbaW5kZXhdID0gRmxvYXRQb2ludChvZmZzZXRYLCBvZmZz
ZXRZKTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5k
ZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0WCA8PSBt
X3dpZHRoKTsKKyAgICBmbG9hdCBjdXJyZW50WCA9IDA7CisgICAgZmxvYXQgY3VycmVudEFkdmFu
Y2UgPSBtX2FkdmFuY2VzWzBdOworICAgIHVuc2lnbmVkIGdseXBoSW5kZXggPSAwOworCisgICAg
Ly8gU3VtIHVwIGFkdmFuY2VzIHRoYXQgYmVsb25nIHRvIGEgY2hhcmFjdGVyLgorICAgIHdoaWxl
IChnbHlwaEluZGV4IDwgbV9udW1HbHlwaHMgLSAxICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4
ZXNbZ2x5cGhJbmRleF0gPT0gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4ICsg
MV0pCisgICAgICAgIGN1cnJlbnRBZHZhbmNlICs9IG1fYWR2YW5jZXNbKytnbHlwaEluZGV4XTsK
KyAgICBjdXJyZW50QWR2YW5jZSA9IGN1cnJlbnRBZHZhbmNlIC8gMi4wOworICAgIGlmICh0YXJn
ZXRYIDw9IGN1cnJlbnRBZHZhbmNlKQorICAgICAgICByZXR1cm4gcnRsKCkgPyBtX251bUNoYXJh
Y3RlcnMgOiAwOworCisgICAgKytnbHlwaEluZGV4OworICAgIHdoaWxlIChnbHlwaEluZGV4IDwg
bV9udW1HbHlwaHMpIHsKKyAgICAgICAgdW5zaWduZWQgcHJldkNoYXJhY3RlckluZGV4ID0gbV9n
bHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4IC0gMV07CisgICAgICAgIGZsb2F0IHBy
ZXZBZHZhbmNlID0gY3VycmVudEFkdmFuY2U7CisgICAgICAgIGN1cnJlbnRBZHZhbmNlID0gbV9h
ZHZhbmNlc1tnbHlwaEluZGV4XTsKKyAgICAgICAgd2hpbGUgKGdseXBoSW5kZXggPCBtX251bUds
eXBocyAtIDEgJiYgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4XSA9PSBtX2ds
eXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXggKyAxXSkKKyAgICAgICAgICAgIGN1cnJl
bnRBZHZhbmNlICs9IG1fYWR2YW5jZXNbKytnbHlwaEluZGV4XTsKKyAgICAgICAgY3VycmVudEFk
dmFuY2UgPSBjdXJyZW50QWR2YW5jZSAvIDIuMDsKKyAgICAgICAgZmxvYXQgbmV4dFggPSBjdXJy
ZW50WCArIHByZXZBZHZhbmNlICsgY3VycmVudEFkdmFuY2U7CisgICAgICAgIGlmIChjdXJyZW50
WCA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgpCisgICAgICAgICAgICByZXR1cm4gcnRs
KCkgPyBwcmV2Q2hhcmFjdGVySW5kZXggOiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBo
SW5kZXhdOworICAgICAgICBjdXJyZW50WCA9IG5leHRYOworICAgICAgICBwcmV2QWR2YW5jZSA9
IGN1cnJlbnRBZHZhbmNlOworICAgICAgICArK2dseXBoSW5kZXg7CisgICAgfQorCisgICAgcmV0
dXJuIHJ0bCgpID8gMCA6IG1fbnVtQ2hhcmFjdGVyczsKK30KKworZmxvYXQgSGFyZkJ1enpTaGFw
ZXI6OkhhcmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorewor
ICAgIEFTU0VSVChvZmZzZXQgPCBtX251bUNoYXJhY3RlcnMpOworICAgIHVuc2lnbmVkIGdseXBo
SW5kZXggPSAwOworICAgIGZsb2F0IHBvc2l0aW9uID0gMDsKKyAgICBpZiAocnRsKCkpIHsKKyAg
ICAgICAgd2hpbGUgKGdseXBoSW5kZXggPCBtX251bUdseXBocyAmJiBtX2dseXBoVG9DaGFyYWN0
ZXJJbmRleGVzW2dseXBoSW5kZXhdID4gb2Zmc2V0KSB7CisgICAgICAgICAgICBwb3NpdGlvbiAr
PSBtX2FkdmFuY2VzW2dseXBoSW5kZXhdOworICAgICAgICAgICAgKytnbHlwaEluZGV4OworICAg
ICAgICB9CisgICAgICAgIC8vIEZvciBSVEwsIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSByaWdodCBz
aWRlIGJvdW5kYXJ5IG9mIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgIC8vIEFkZCBhZHZhbmNlIG9m
IGdseXBocyB3aGljaCBhcmUgcGFydCBvZiB0aGUgY2hhcmFjdGVyLgorICAgICAgICB3aGlsZSAo
Z2x5cGhJbmRleCA8IG1fbnVtR2x5cGhzIC0gMSAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVz
W2dseXBoSW5kZXhdID09IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRleCArIDFd
KSB7CisgICAgICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2dseXBoSW5kZXhdOworICAg
ICAgICAgICAgKytnbHlwaEluZGV4OworICAgICAgICB9CisgICAgICAgIHBvc2l0aW9uICs9IG1f
YWR2YW5jZXNbZ2x5cGhJbmRleF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKGdseXBo
SW5kZXggPCBtX251bUdseXBocyAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5k
ZXhdIDwgb2Zmc2V0KSB7CisgICAgICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2dseXBo
SW5kZXhdOworICAgICAgICAgICAgKytnbHlwaEluZGV4OworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBwb3NpdGlvbjsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhj
b25zdCBVQ2hhciogc291cmNlLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpCit7Cisg
ICAgaW50IHBvc2l0aW9uID0gMDsKKyAgICBib29sIGVycm9yID0gZmFsc2U7CisgICAgd2hpbGUg
KHBvc2l0aW9uIDwgbGVuZ3RoKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgICAg
ICBpbnQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIFUxNl9ORVhUKHNvdXJjZSwg
bmV4dFBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7CisgICAgICAgIC8vIERvbid0IG5vcm1h
bGl6ZSB0YWJzIGFzIHRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzIHNwYWNlcyBmb3Igd29yZC1lbmQu
CisgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSAmJiBjaGFyYWN0ZXIg
IT0gJ1x0JykKKyAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsKKyAgICAgICAgZWxzZSBpZiAo
Rm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGNoYXJhY3RlcikpCisg
ICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgVTE2X0FQUEVO
RChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyLCBlcnJvcik7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsICFlcnJvcik7CisgICAgICAgIHBvc2l0aW9uID0gbmV4
dFBvc2l0aW9uOworICAgIH0KK30KKworSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNv
bnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1bikKKyAgICA6IEhhcmZCdXp6U2hhcGVy
QmFzZShmb250LCBydW4pCisgICAgLCBtX2Zyb21JbmRleCgwKQorICAgICwgbV90b0luZGV4KG1f
cnVuLmxlbmd0aCgpKQoreworICAgIG1fbm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIo
bmV3IFVDaGFyW21fcnVuLmxlbmd0aCgpICsgMV0pOworICAgIG1fbm9ybWFsaXplZEJ1ZmZlckxl
bmd0aCA9IG1fcnVuLmxlbmd0aCgpOworICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobV9ydW4uY2hh
cmFjdGVyczE2KCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVy
TGVuZ3RoKTsKKyAgICBzZXRQYWRkaW5nKG1fcnVuLmV4cGFuc2lvbigpKTsKKyAgICBzZXRGb250
RmVhdHVyZXMoKTsKK30KKworSGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNoYXBlcigpCit7Cit9
CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldERyYXdSYW5nZShpbnQgZnJvbSwgaW50IHRvKQor
eworICAgIEFTU0VSVChmcm9tID49IDApOworICAgIEFTU0VSVCh0byA8PSBtX3J1bi5sZW5ndGgo
KSk7CisgICAgbV9mcm9tSW5kZXggPSBmcm9tOworICAgIG1fdG9JbmRleCA9IHRvOworfQorCit2
b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVyZXMoKQoreworICAgIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGlmIChkZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7CisgICAgICAgIHN0
YXRpYyBoYl9mZWF0dXJlX3QgdmVydCA9IHsgSGFyZkJ1enpGYWNlOjp2ZXJ0VGFnLCAxLCAwLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CisgICAgICAgIHN0YXRpYyBoYl9mZWF0dXJlX3Qg
dnJ0MiA9IHsgSGFyZkJ1enpGYWNlOjp2cnQyVGFnLCAxLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oLTEpIH07CisgICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKHZlcnQpOworICAgICAgICBtX2Zl
YXR1cmVzLmFwcGVuZCh2cnQyKTsKKyAgICB9CisKKyAgICBGb250RmVhdHVyZVNldHRpbmdzKiBz
ZXR0aW5ncyA9IGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpOworICAgIGlmICghc2V0dGlu
Z3MpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bUZlYXR1cmVzID0gc2V0dGlu
Z3MtPnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmVhdHVyZXM7ICsr
aSkgeworICAgICAgICBoYl9mZWF0dXJlX3QgZmVhdHVyZTsKKyAgICAgICAgY29uc3QgVUNoYXIq
IHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0ZXJzKCk7CisgICAgICAgIGZlYXR1
cmUudGFnID0gSEJfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1szXSk7CisgICAgICAg
IGZlYXR1cmUudmFsdWUgPSBzZXR0aW5ncy0+YXQoaSkudmFsdWUoKTsKKyAgICAgICAgZmVhdHVy
ZS5zdGFydCA9IDA7CisgICAgICAgIGZlYXR1cmUuZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KC0xKTsKKyAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQoZmVhdHVyZSk7CisgICAgfQorfQorCiti
b29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZShHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7Cisg
ICAgaWYgKCFjb2xsZWN0SGFyZkJ1enpSdW5zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1fdG90YWxXaWR0aCA9IDA7CisgICAgLy8gV2ViS2l0IGRvZXNuJ3Qgc2V0IGRpcmVjdGlv
biB3aGVuIGNhbHVsYXRpbmcgd2lkdGhzLiBMZWF2ZSB0aGUgZGlyZWN0aW9uIHNldHRpbmcgdG8K
KyAgICAvLyBIYXJmQnV6eiB3aGVuIHdlIGFyZSBjYWxjdWxhdGluZyB3aWR0aHMgKGV4Y2VwdCB3
aGVuIGRpcmVjdGlvbmFsT3ZlcnJpZGUoKSBpcyBzZXQpLgorICAgIGlmICghc2hhcGVIYXJmQnV6
elJ1bnMoZ2x5cGhCdWZmZXIgfHwgbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fdG90YWxXaWR0aCA9IHJvdW5kZihtX3RvdGFsV2lkdGgp
OworCisgICAgaWYgKGdseXBoQnVmZmVyICYmICFmaWxsR2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRmxvYXRQ
b2ludCBIYXJmQnV6elNoYXBlcjo6YWRqdXN0U3RhcnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQgKyBtX3N0YXJ0T2Zmc2V0OworfQorCitib29sIEhh
cmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKCkKK3sKKyAgICBjb25zdCBVQ2hhciog
bm9ybWFsaXplZEJ1ZmZlckVuZCA9IG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fbm9ybWFs
aXplZEJ1ZmZlckxlbmd0aDsKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgaXRl
cmF0b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCAwLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5n
dGgsIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7CisgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Cisg
ICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgc3RhcnRJbmRleE9m
Q3VycmVudFJ1biA9IDA7CisgICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1
c3Rlckxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICBVRXJyb3JDb2RlIGVycm9yQ29kZSA9IFVfWkVS
T19FUlJPUjsKKyAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlwdF9nZXRTY3JpcHQo
Y2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29kZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGN1
cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbiA9IGl0ZXJhdG9yLmNoYXJhY3RlcnMoKTsKKyAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGN1cnJlbnRGb250RGF0YSA9IG5leHRGb250RGF0YTsKKyAg
ICAgICAgVVNjcmlwdENvZGUgY3VycmVudFNjcmlwdCA9IG5leHRTY3JpcHQ7CisKKyAgICAgICAg
Zm9yIChpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5jb25zdW1lKGNo
YXJhY3RlciwgY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCkp
IHsKKyAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFjdGVy
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKFVfR0VUX0dD
X01BU0soY2hhcmFjdGVyKSAmIFVfR0NfTV9NQVNLKSB7CisgICAgICAgICAgICAgICAgaW50IG1h
cmtMZW5ndGggPSBjbHVzdGVyTGVuZ3RoOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBt
YXJrQ2hhcmFjdGVyc0VuZCA9IGl0ZXJhdG9yLmNoYXJhY3RlcnMoKSArIGNsdXN0ZXJMZW5ndGg7
CisgICAgICAgICAgICAgICAgd2hpbGUgKG1hcmtDaGFyYWN0ZXJzRW5kIDwgbm9ybWFsaXplZEJ1
ZmZlckVuZCkgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIG5leHRDaGFyYWN0ZXI7Cisg
ICAgICAgICAgICAgICAgICAgIGludCBuZXh0Q2hhcmFjdGVyTGVuZ3RoID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgVTE2X05FWFQobWFya0NoYXJhY3RlcnNFbmQsIG5leHRDaGFyYWN0ZXJMZW5n
dGgsIG5vcm1hbGl6ZWRCdWZmZXJFbmQgLSBtYXJrQ2hhcmFjdGVyc0VuZCwgbmV4dENoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgICAgIGlmICghKFVfR0VUX0dDX01BU0sobmV4dENoYXJhY3Rl
cikgJiBVX0dDX01fTUFTSykpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgbWFya0xlbmd0aCArPSBuZXh0Q2hhcmFjdGVyTGVuZ3RoOworICAgICAg
ICAgICAgICAgICAgICBtYXJrQ2hhcmFjdGVyc0VuZCArPSBuZXh0Q2hhcmFjdGVyTGVuZ3RoOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9udERhdGEt
PmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGN1cnJlbnRDaGFyYWN0ZXJQb3Np
dGlvbiwgbWFya0NoYXJhY3RlcnNFbmQgLSBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJMZW5ndGggPSBtYXJrTGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBm
YWxzZSkuZm9udERhdGE7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0
Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNl
KS5mb250RGF0YTsKKworICAgICAgICAgICAgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0
KGNoYXJhY3RlciwgJmVycm9yQ29kZSk7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9y
Q29kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKChu
ZXh0Rm9udERhdGEgIT0gY3VycmVudEZvbnREYXRhKSB8fCAoKGN1cnJlbnRTY3JpcHQgIT0gbmV4
dFNjcmlwdCkgJiYgKG5leHRTY3JpcHQgIT0gVVNDUklQVF9JTkhFUklURUQpICYmICghdXNjcmlw
dF9oYXNTY3JpcHQoY2hhcmFjdGVyLCBjdXJyZW50U2NyaXB0KSkpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKG5leHRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklURUQp
CisgICAgICAgICAgICAgICAgbmV4dFNjcmlwdCA9IGN1cnJlbnRTY3JpcHQ7CisgICAgICAgICAg
ICBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24gPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCk7CisgICAg
ICAgIH0KKyAgICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biA9IGl0ZXJh
dG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSAtIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW47CisgICAgICAg
IGhiX3NjcmlwdF90IHNjcmlwdCA9IGhiX2ljdV9zY3JpcHRfdG9fc2NyaXB0KGN1cnJlbnRTY3Jp
cHQpOworICAgICAgICBtX2hhcmZCdXp6UnVucy5hcHBlbmQoSGFyZkJ1enpSdW46OmNyZWF0ZShj
dXJyZW50Rm9udERhdGEsIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4sIG51bUNoYXJhY3RlcnNPZkN1
cnJlbnRSdW4sIG1fcnVuLmRpcmVjdGlvbigpLCBzY3JpcHQpKTsKKyAgICAgICAgY3VycmVudEZv
bnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBzdGFydEluZGV4T2ZDdXJyZW50UnVuID0g
aXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOworICAgIH0gd2hpbGUgKGl0ZXJhdG9yLmNvbnN1
bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSk7CisKKyAgICByZXR1cm4gIW1faGFyZkJ1enpS
dW5zLmlzRW1wdHkoKTsKK30KKworYm9vbCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1
bnMoYm9vbCBzaG91bGRTZXREaXJlY3Rpb24pCit7CisgICAgSGFyZkJ1enpTY29wZWRQdHI8aGJf
YnVmZmVyX3Q+IGhhcmZCdXp6QnVmZmVyKGhiX2J1ZmZlcl9jcmVhdGUoKSwgaGJfYnVmZmVyX2Rl
c3Ryb3kpOworCisgICAgaGJfYnVmZmVyX3NldF91bmljb2RlX2Z1bmNzKGhhcmZCdXp6QnVmZmVy
LmdldCgpLCBoYl9pY3VfZ2V0X3VuaWNvZGVfZnVuY3MoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9oYXJmQnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWdu
ZWQgcnVuSW5kZXggPSBtX3J1bi5ydGwoKSA/IG1faGFyZkJ1enpSdW5zLnNpemUoKSAtIGkgLSAx
IDogaTsKKyAgICAgICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZCdXp6UnVuc1ty
dW5JbmRleF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9u
dERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOworCisgICAgICAgIGhiX2J1ZmZlcl9zZXRf
c2NyaXB0KGhhcmZCdXp6QnVmZmVyLmdldCgpLCBjdXJyZW50UnVuLT5zY3JpcHQoKSk7CisgICAg
ICAgIGlmIChzaG91bGRTZXREaXJlY3Rpb24pCisgICAgICAgICAgICBoYl9idWZmZXJfc2V0X2Rp
cmVjdGlvbihoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgY3VycmVudFJ1bi0+cnRsKCkgPyBIQl9ESVJF
Q1RJT05fUlRMIDogSEJfRElSRUNUSU9OX0xUUik7CisKKyAgICAgICAgLy8gQWRkIGEgc3BhY2Ug
YXMgcHJlLWNvbnRleHQgdG8gdGhlIGJ1ZmZlci4gVGhpcyBwcmV2ZW50cyBzaG93aW5nIGRvdHRl
ZC1jaXJjbGUKKyAgICAgICAgLy8gZm9yIGNvbWJpbmluZyBtYXJrcyBhdCB0aGUgYmVnaW5uaW5n
IG9mIHJ1bnMuCisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBwcmVDb250ZXh0ID0gJyAn
OworICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZCdXp6QnVmZmVyLmdldCgpLCAmcHJl
Q29udGV4dCwgMSwgMSwgMCk7CisKKyAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAm
JiB1X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVyW2N1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKV0p
KSB7CisgICAgICAgICAgICBTdHJpbmcgdXBwZXJUZXh0ID0gU3RyaW5nKG1fbm9ybWFsaXplZEJ1
ZmZlci5nZXQoKSArIGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hh
cmFjdGVycygpKTsKKyAgICAgICAgICAgIHVwcGVyVGV4dC5tYWtlVXBwZXIoKTsKKyAgICAgICAg
ICAgIGN1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVwcGVy
VGV4dFswXSwgZmFsc2UsIFNtYWxsQ2Fwc1ZhcmlhbnQpLmZvbnREYXRhOworICAgICAgICAgICAg
aGJfYnVmZmVyX2FkZF91dGYxNihoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgdXBwZXJUZXh0LmNoYXJh
Y3RlcnMoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpLCAwLCBjdXJyZW50UnVuLT5udW1D
aGFyYWN0ZXJzKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGhiX2J1ZmZlcl9hZGRf
dXRmMTYoaGFyZkJ1enpCdWZmZXIuZ2V0KCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIGN1
cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpLCAwLCBj
dXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEq
IHBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZjdXJyZW50Rm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKKyAgICAgICAgSGFyZkJ1enpGYWNlKiBmYWNlID0gcGxh
dGZvcm1EYXRhLT5oYXJmQnV6ekZhY2UoKTsKKyAgICAgICAgaWYgKCFmYWNlKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpCisgICAgICAgICAgICBmYWNlLT5zZXRTY3JpcHRG
b3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhhcmZCdXp6QnVmZmVyLmdldCgpKTsKKworICAg
ICAgICBIYXJmQnV6elNjb3BlZFB0cjxoYl9mb250X3Q+IGhhcmZCdXp6Rm9udChmYWNlLT5jcmVh
dGVGb250KCksIGhiX2ZvbnRfZGVzdHJveSk7CisKKyAgICAgICAgaGJfc2hhcGUoaGFyZkJ1enpG
b250LmdldCgpLCBoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgbV9mZWF0dXJlcy5pc0VtcHR5KCkgPyAw
IDogbV9mZWF0dXJlcy5kYXRhKCksIG1fZmVhdHVyZXMuc2l6ZSgpKTsKKworICAgICAgICBjdXJy
ZW50UnVuLT5hcHBseVNoYXBlUmVzdWx0KGhhcmZCdXp6QnVmZmVyLmdldCgpKTsKKyAgICAgICAg
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihjdXJyZW50UnVuLCBoYXJmQnV6ekJ1ZmZl
ci5nZXQoKSk7CisKKyAgICAgICAgaGJfYnVmZmVyX3Jlc2V0KGhhcmZCdXp6QnVmZmVyLmdldCgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3VycmVudFJ1biwg
aGJfYnVmZmVyX3QqIGhhcmZCdXp6QnVmZmVyKQoreworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOworICAgIGhiX2dseXBo
X2luZm9fdCogZ2x5cGhJbmZvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5mb3MoaGFyZkJ1enpC
dWZmZXIsIDApOworICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QqIGdseXBoUG9zaXRpb25zID0gaGJf
YnVmZmVyX2dldF9nbHlwaF9wb3NpdGlvbnMoaGFyZkJ1enpCdWZmZXIsIDApOworCisgICAgdW5z
aWduZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7CisgICAgdWludDE2X3Qq
IGdseXBoVG9DaGFyYWN0ZXJJbmRleGVzID0gY3VycmVudFJ1bi0+Z2x5cGhUb0NoYXJhY3Rlcklu
ZGV4ZXMoKTsKKyAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOworCisgICAgLy8gSGFyZkJ1enog
cmV0dXJucyB0aGUgc2hhcGluZyByZXN1bHQgaW4gdmlzdWFsIG9yZGVyLiBXZSBuZWVkIG5vdCB0
byBmbGlwIGZvciBSVEwuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgeworICAgICAgICBib29sIHJ1bkVuZCA9IGkgKyAxID09IG51bUdseXBoczsKKyAgICAgICAg
dWludDE2X3QgZ2x5cGggPSBnbHlwaEluZm9zW2ldLmNvZGVwb2ludDsKKyAgICAgICAgZmxvYXQg
b2Zmc2V0WCA9IGhhcmZCdXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfb2Zm
c2V0KTsKKyAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IC1oYXJmQnV6elBvc2l0aW9uVG9GbG9hdChn
bHlwaFBvc2l0aW9uc1tpXS55X29mZnNldCk7CisgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBoYXJm
QnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpXS54X2FkdmFuY2UpOworCisgICAg
ICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IGN1cnJlbnRSdW4tPnN0YXJ0SW5k
ZXgoKSArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKKyAgICAgICAgYm9vbCBpc0NsdXN0ZXJFbmQg
PSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5mb3NbaSArIDFdLmNs
dXN0ZXI7CisgICAgICAgIGZsb2F0IHNwYWNpbmcgPSAwOworCisgICAgICAgIGdseXBoVG9DaGFy
YWN0ZXJJbmRleGVzW2ldID0gZ2x5cGhJbmZvc1tpXS5jbHVzdGVyOworCisgICAgICAgIGlmIChp
c0NsdXN0ZXJFbmQgJiYgIUZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShtX25vcm1hbGl6ZWRC
dWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4XSkpCisgICAgICAgICAgICBzcGFjaW5nICs9IG1f
bGV0dGVyU3BhY2luZzsKKworICAgICAgICBpZiAoaXNDbHVzdGVyRW5kICYmIGlzV29yZEVuZChj
dXJyZW50Q2hhcmFjdGVySW5kZXgpKQorICAgICAgICAgICAgc3BhY2luZyArPSBkZXRlcm1pbmVX
b3JkQnJlYWtTcGFjaW5nKCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+aXNaZXJv
V2lkdGhTcGFjZUdseXBoKGdseXBoKSkgeworICAgICAgICAgICAgY3VycmVudFJ1bi0+c2V0R2x5
cGhBbmRQb3NpdGlvbnMoaSwgZ2x5cGgsIDAsIDAsIDApOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBhZHZhbmNlICs9IHNwYWNpbmc7CisgICAgICAgIGlmICht
X3J1bi5ydGwoKSkgeworICAgICAgICAgICAgLy8gSW4gUlRMLCBzcGFjaW5nIHNob3VsZCBiZSBh
ZGRlZCB0byBsZWZ0IHNpZGUgb2YgZ2x5cGhzLgorICAgICAgICAgICAgb2Zmc2V0WCArPSBzcGFj
aW5nOworICAgICAgICAgICAgaWYgKCFpc0NsdXN0ZXJFbmQpCisgICAgICAgICAgICAgICAgb2Zm
c2V0WCArPSBtX2xldHRlclNwYWNpbmc7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50UnVu
LT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgYWR2YW5jZSwgb2Zmc2V0WCwgb2Zmc2V0
WSk7CisKKyAgICAgICAgdG90YWxBZHZhbmNlICs9IGFkdmFuY2U7CisgICAgfQorICAgIGN1cnJl
bnRSdW4tPnNldFdpZHRoKHRvdGFsQWR2YW5jZSA+IDAuMCA/IHRvdGFsQWR2YW5jZSA6IDAuMCk7
CisgICAgbV90b3RhbFdpZHRoICs9IGN1cnJlbnRSdW4tPndpZHRoKCk7Cit9CisKK3ZvaWQgSGFy
ZkJ1enpTaGFwZXI6OmZpbGxHbHlwaEJ1ZmZlckZyb21IYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIsIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuLCBGbG9hdFBvaW50JiBmaXJzdE9m
ZnNldE9mTmV4dFJ1bikKK3sKKyAgICBGbG9hdFBvaW50KiBvZmZzZXRzID0gY3VycmVudFJ1bi0+
b2Zmc2V0cygpOworICAgIHVpbnQxNl90KiBnbHlwaHMgPSBjdXJyZW50UnVuLT5nbHlwaHMoKTsK
KyAgICBmbG9hdCogYWR2YW5jZXMgPSBjdXJyZW50UnVuLT5hZHZhbmNlcygpOworICAgIHVuc2ln
bmVkIG51bUdseXBocyA9IGN1cnJlbnRSdW4tPm51bUdseXBocygpOworICAgIHVpbnQxNl90KiBn
bHlwaFRvQ2hhcmFjdGVySW5kZXhlcyA9IGN1cnJlbnRSdW4tPmdseXBoVG9DaGFyYWN0ZXJJbmRl
eGVzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
KyAgICAgICAgdWludDE2X3QgY3VycmVudENoYXJhY3RlckluZGV4ID0gY3VycmVudFJ1bi0+c3Rh
cnRJbmRleCgpICsgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV07CisgICAgICAgIEZsb2F0UG9p
bnQmIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXRzW2ldOworICAgICAgICBGbG9hdFBvaW50JiBuZXh0
T2Zmc2V0ID0gKGkgPT0gbnVtR2x5cGhzIC0gMSkgPyBmaXJzdE9mZnNldE9mTmV4dFJ1biA6IG9m
ZnNldHNbaSArIDFdOworICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VYID0gYWR2YW5jZXNbaV0g
KyBuZXh0T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpOworICAgICAgICBmbG9hdCBnbHlw
aEFkdmFuY2VZID0gbmV4dE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKTsKKyAgICAgICAg
aWYgKG1fcnVuLnJ0bCgpKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlckluZGV4
ID4gbV90b0luZGV4KQorICAgICAgICAgICAgICAgIG1fc3RhcnRPZmZzZXQubW92ZShnbHlwaEFk
dmFuY2VYLCBnbHlwaEFkdmFuY2VZKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFy
YWN0ZXJJbmRleCA+PSBtX2Zyb21JbmRleCkKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGdseXBoc1tpXSwgY3VycmVudFJ1bi0+Zm9udERhdGEoKSwgY3JlYXRlR2x5cGhCdWZmZXJB
ZHZhbmNlKGdseXBoQWR2YW5jZVgsIGdseXBoQWR2YW5jZVkpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXggPCBtX2Zyb21JbmRleCkKKyAg
ICAgICAgICAgICAgICBtX3N0YXJ0T2Zmc2V0Lm1vdmUoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZh
bmNlWSk7CisgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXggPCBtX3Rv
SW5kZXgpCisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaHNbaV0sIGN1cnJl
bnRSdW4tPmZvbnREYXRhKCksIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShnbHlwaEFkdmFuY2VY
LCBnbHlwaEFkdmFuY2VZKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgSGFyZkJ1enpT
aGFwZXI6OmZpbGxHbHlwaEJ1ZmZlcihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAg
dW5zaWduZWQgbnVtUnVucyA9IG1faGFyZkJ1enpSdW5zLnNpemUoKTsKKyAgICBpZiAobV9ydW4u
cnRsKCkpIHsKKyAgICAgICAgbV9zdGFydE9mZnNldCA9IG1faGFyZkJ1enpSdW5zLmxhc3QoKS0+
b2Zmc2V0cygpWzBdOworICAgICAgICBmb3IgKGludCBydW5JbmRleCA9IG51bVJ1bnMgLSAxOyBy
dW5JbmRleCA+PSAwOyAtLXJ1bkluZGV4KSB7CisgICAgICAgICAgICBIYXJmQnV6elJ1biogY3Vy
cmVudFJ1biA9IG1faGFyZkJ1enpSdW5zW3J1bkluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIEZs
b2F0UG9pbnQgZmlyc3RPZmZzZXRPZk5leHRSdW4gPSAhcnVuSW5kZXggPyBGbG9hdFBvaW50KCkg
OiBtX2hhcmZCdXp6UnVuc1tydW5JbmRleCAtIDFdLT5vZmZzZXRzKClbMF07CisgICAgICAgICAg
ICBmaWxsR2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIsIGN1cnJlbnRSdW4s
IGZpcnN0T2Zmc2V0T2ZOZXh0UnVuKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IG1fc3RhcnRPZmZzZXQgPSBtX2hhcmZCdXp6UnVucy5maXJzdCgpLT5vZmZzZXRzKClbMF07Cisg
ICAgICAgIGZvciAodW5zaWduZWQgcnVuSW5kZXggPSAwOyBydW5JbmRleCA8IG51bVJ1bnM7ICsr
cnVuSW5kZXgpIHsKKyAgICAgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJm
QnV6elJ1bnNbcnVuSW5kZXhdLmdldCgpOworICAgICAgICAgICAgRmxvYXRQb2ludCBmaXJzdE9m
ZnNldE9mTmV4dFJ1biA9IHJ1bkluZGV4ID09IG51bVJ1bnMgLSAxID8gRmxvYXRQb2ludCgpIDog
bV9oYXJmQnV6elJ1bnNbcnVuSW5kZXggKyAxXS0+b2Zmc2V0cygpWzBdOworICAgICAgICAgICAg
ZmlsbEdseXBoQnVmZmVyRnJvbUhhcmZCdXp6UnVuKGdseXBoQnVmZmVyLCBjdXJyZW50UnVuLCBm
aXJzdE9mZnNldE9mTmV4dFJ1bik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGdseXBo
QnVmZmVyLT5zaXplKCk7Cit9CisKK2ludCBIYXJmQnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRp
b24oZmxvYXQgdGFyZ2V0WCkKK3sKKyAgICBpbnQgY2hhcmFjdGVyc1NvRmFyID0gMDsKKyAgICBm
bG9hdCBjdXJyZW50WCA9IDA7CisKKyAgICBpZiAobV9ydW4ucnRsKCkpIHsKKyAgICAgICAgY2hh
cmFjdGVyc1NvRmFyID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOworICAgICAgICBmb3IgKGlu
dCBpID0gbV9oYXJmQnV6elJ1bnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
ICAgIGNoYXJhY3RlcnNTb0ZhciAtPSBtX2hhcmZCdXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygp
OworICAgICAgICAgICAgZmxvYXQgbmV4dFggPSBjdXJyZW50WCArIG1faGFyZkJ1enpSdW5zW2ld
LT53aWR0aCgpOworICAgICAgICAgICAgZmxvYXQgb2Zmc2V0Rm9yUnVuID0gdGFyZ2V0WCAtIGN1
cnJlbnRYOworICAgICAgICAgICAgaWYgKG9mZnNldEZvclJ1biA+PSAwICYmIG9mZnNldEZvclJ1
biA8PSBtX2hhcmZCdXp6UnVuc1tpXS0+d2lkdGgoKSkgeworICAgICAgICAgICAgICAgIC8vIFRo
ZSB4IHZhbHVlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiB0aGlzIHNjcmlwdCBydW4uCisgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW5kZXggPSBtX2hhcmZCdXp6UnVuc1tpXS0+Y2hhcmFj
dGVySW5kZXhGb3JYUG9zaXRpb24ob2Zmc2V0Rm9yUnVuKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
dXJyZW50WCA9IG5leHRYOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZkJ1enpSdW5zLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBmbG9hdCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJmQnV6elJ1bnNbaV0tPndpZHRoKCk7
CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRGb3JSdW4gPSB0YXJnZXRYIC0gY3VycmVudFg7Cisg
ICAgICAgICAgICBpZiAob2Zmc2V0Rm9yUnVuID49IDAgJiYgb2Zmc2V0Rm9yUnVuIDw9IG1faGFy
ZkJ1enpSdW5zW2ldLT53aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW5kZXggPSBtX2hhcmZCdXp6UnVuc1tpXS0+Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24ob2Zm
c2V0Rm9yUnVuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5k
ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyYWN0ZXJzU29GYXIgKz0gbV9oYXJm
QnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGN1cnJlbnRYID0gbmV4
dFg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyOworfQor
CitGbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pCit7CisgICAgZmxvYXQgY3Vy
cmVudFggPSAwOworICAgIGZsb2F0IGZyb21YID0gMDsKKyAgICBmbG9hdCB0b1ggPSAwOworICAg
IGJvb2wgZm91bmRGcm9tWCA9IGZhbHNlOworICAgIGJvb2wgZm91bmRUb1ggPSBmYWxzZTsKKwor
ICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgY3VycmVudFggPSBtX3RvdGFsV2lkdGg7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZkJ1enpSdW5zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgICAgIGN1cnJlbnRYIC09IG1faGFy
ZkJ1enpSdW5zW2ldLT53aWR0aCgpOworICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFy
ZkJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7CisgICAgICAgIGlmICghZm91bmRGcm9tWCAm
JiBmcm9tID49IDAgJiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpIHsKKyAgICAgICAgICAgIGZyb21Y
ID0gbV9oYXJmQnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldChmcm9tKSArIGN1cnJlbnRY
OworICAgICAgICAgICAgZm91bmRGcm9tWCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAgIGlmICghZm91bmRUb1ggJiYg
dG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpIHsKKyAgICAgICAgICAgIHRvWCA9IG1faGFy
ZkJ1enpSdW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQodG8pICsgY3VycmVudFg7CisgICAgICAg
ICAgICBmb3VuZFRvWCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG8gLT0g
bnVtQ2hhcmFjdGVyczsKKworICAgICAgICBpZiAoZm91bmRGcm9tWCAmJiBmb3VuZFRvWCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIW1fcnVuLnJ0bCgpKQorICAgICAgICAgICAg
Y3VycmVudFggKz0gbV9oYXJmQnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgfQorCisgICAgLy8g
VGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQuCisg
ICAgaWYgKCFmb3VuZEZyb21YKQorICAgICAgICBmcm9tWCA9IDA7CisgICAgaWYgKCFmb3VuZFRv
WCkKKyAgICAgICAgdG9YID0gbV9ydW4ucnRsKCkgPyAwIDogbV90b3RhbFdpZHRoOworCisgICAg
Ly8gVXNpbmcgZmxvb3JmKCkgYW5kIHJvdW5kZigpIGFzIHRoZSBzYW1lIGFzIG1hYyBwb3J0Lgor
ICAgIGlmIChmcm9tWCA8IHRvWCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9p
bnQueCgpICsgZnJvbVgpLCBwb2ludC55KCksIHJvdW5kZih0b1ggLSBmcm9tWCksIGhlaWdodCk7
CisgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgdG9YKSwgcG9pbnQueSgp
LCByb3VuZGYoZnJvbVggLSB0b1gpLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpTaGFwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZWZhZWUzZjBkMTM1NWI0ZDM4MjI1
Yzg5N2ZjYTc1MGJhNWQ4YzQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaApAQCAtMCwwICsxLDEyNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSGFyZkJ1enpTaGFwZXJfaAorI2RlZmluZSBIYXJmQnV6elNoYXBlcl9oCisKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRl
ICJIYXJmQnV6elNoYXBlckJhc2UuaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAi
aGIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250OworY2xhc3MgU2ltcGxlRm9udERhdGE7
CisKK2NsYXNzIEhhcmZCdXp6U2hhcGVyIDogcHVibGljIEhhcmZCdXp6U2hhcGVyQmFzZSB7Citw
dWJsaWM6CisgICAgSGFyZkJ1enpTaGFwZXIoY29uc3QgRm9udCosIGNvbnN0IFRleHRSdW4mKTsK
KyAgICB2aXJ0dWFsIH5IYXJmQnV6elNoYXBlcigpOworCisgICAgdm9pZCBzZXREcmF3UmFuZ2Uo
aW50IGZyb20sIGludCB0byk7CisgICAgYm9vbCBzaGFwZShHbHlwaEJ1ZmZlciogPSAwKTsKKyAg
ICBGbG9hdFBvaW50IGFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYpOworICAgIGZs
b2F0IHRvdGFsV2lkdGgoKSB7IHJldHVybiBtX3RvdGFsV2lkdGg7IH0KKyAgICBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3Qo
Y29uc3QgRmxvYXRQb2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pOworCitwcml2
YXRlOgorICAgIGNsYXNzIEhhcmZCdXp6UnVuIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzT3duUHRyPEhhcmZCdXp6UnVuPiBjcmVhdGUoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfc2NyaXB0X3Qgc2NyaXB0KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhhcmZCdXp6UnVuKGZvbnREYXRhLCBzdGFydElu
ZGV4LCBudW1DaGFyYWN0ZXJzLCBkaXJlY3Rpb24sIHNjcmlwdCkpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhcHBseVNoYXBlUmVzdWx0KGhiX2J1ZmZlcl90Kik7CisgICAgICAgIHZvaWQg
c2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZs
b2F0IGFkdmFuY2UsIGZsb2F0IG9mZnNldFgsIGZsb2F0IG9mZnNldFkpOworICAgICAgICB2b2lk
IHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorCisgICAgICAgIGlu
dCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKKyAgICAgICAgZmxv
YXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CisKKyAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgeyByZXR1cm4gbV9mb250RGF0YTsgfQorICAgICAg
ICB1bnNpZ25lZCBzdGFydEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydEluZGV4OyB9Cisg
ICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX251bUNoYXJh
Y3RlcnM7IH0KKyAgICAgICAgdW5zaWduZWQgbnVtR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1HbHlwaHM7IH0KKyAgICAgICAgdWludDE2X3QqIGdseXBocygpIHsgcmV0dXJuICZtX2dseXBo
c1swXTsgfQorICAgICAgICBmbG9hdCogYWR2YW5jZXMoKSB7IHJldHVybiAmbV9hZHZhbmNlc1sw
XTsgfQorICAgICAgICBGbG9hdFBvaW50KiBvZmZzZXRzKCkgeyByZXR1cm4gJm1fb2Zmc2V0c1sw
XTsgfQorICAgICAgICB1aW50MTZfdCogZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMoKSB7IHJldHVy
biAmbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1swXTsgfQorICAgICAgICBmbG9hdCB3aWR0aCgp
IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICAgICAgYm9vbCBydGwoKSB7IHJldHVybiBtX2RpcmVj
dGlvbiA9PSBSVEw7IH0KKyAgICAgICAgaGJfc2NyaXB0X3Qgc2NyaXB0KCkgeyByZXR1cm4gbV9z
Y3JpcHQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhcmZCdXp6UnVuKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycywg
VGV4dERpcmVjdGlvbiwgaGJfc2NyaXB0X3QpOworCisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBtX2ZvbnREYXRhOworICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0SW5kZXg7CisgICAgICAg
IHNpemVfdCBtX251bUNoYXJhY3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzOwor
ICAgICAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgICAgICBoYl9zY3JpcHRfdCBt
X3NjcmlwdDsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fZ2x5cGhzOworICAgICAg
ICBWZWN0b3I8ZmxvYXQsIDI1Nj4gbV9hZHZhbmNlczsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90
LCAyNTY+IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXM7CisgICAgICAgIFZlY3RvcjxGbG9hdFBv
aW50LCAyNTY+IG1fb2Zmc2V0czsKKyAgICAgICAgZmxvYXQgbV93aWR0aDsKKyAgICB9OworCisg
ICAgdm9pZCBzZXRGb250RmVhdHVyZXMoKTsKKworICAgIGJvb2wgY29sbGVjdEhhcmZCdXp6UnVu
cygpOworICAgIGJvb2wgc2hhcGVIYXJmQnV6elJ1bnMoYm9vbCBzaG91bGRTZXREaXJlY3Rpb24p
OworICAgIGJvb2wgZmlsbEdseXBoQnVmZmVyKEdseXBoQnVmZmVyKik7CisgICAgdm9pZCBmaWxs
R2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIqLCBIYXJmQnV6elJ1biosIEZs
b2F0UG9pbnQmIGZpcnN0T2Zmc2V0T2ZOZXh0UnVuKTsKKyAgICB2b2lkIHNldEdseXBoUG9zaXRp
b25zRm9ySGFyZkJ1enpSdW4oSGFyZkJ1enpSdW4qLCBoYl9idWZmZXJfdCopOworCisgICAgR2x5
cGhCdWZmZXJBZHZhbmNlIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCwgZmxvYXQpOwor
CisgICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwgND4gbV9mZWF0dXJlczsKKyAgICBWZWN0b3I8T3du
UHRyPEhhcmZCdXp6UnVuPiwgMTY+IG1faGFyZkJ1enpSdW5zOworCisgICAgRmxvYXRQb2ludCBt
X3N0YXJ0T2Zmc2V0OworCisgICAgaW50IG1fZnJvbUluZGV4OworICAgIGludCBtX3RvSW5kZXg7
CisKKyAgICBmbG9hdCBtX3RvdGFsV2lkdGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBIYXJmQnV6elNoYXBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZGJkODFiZDM3NTFlNjc3ZmQwYWFh
MzNkZDFhYTA1YTJlZmQ1OTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKLQotI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJoYi1vdC5oIgotI2luY2x1ZGUgImhiLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgaGJfdGFnX3QgSGFyZkJ1enpOR0ZhY2U6OnZlcnRU
YWcgPSBIQl9UQUcoJ3YnLCAnZScsICdyJywgJ3QnKTsKLWNvbnN0IGhiX3RhZ190IEhhcmZCdXp6
TkdGYWNlOjp2cnQyVGFnID0gSEJfVEFHKCd2JywgJ3InLCAndCcsICcyJyk7Ci0KLS8vIFRob3Vn
aCB3ZSBoYXZlIEZvbnRDYWNoZSBjbGFzcywgd2hpY2ggcHJvdmlkZXMgdGhlIGNhY2hlIG1lY2hh
bmlzbSBmb3IKLS8vIFdlYktpdCdzIGZvbnQgb2JqZWN0cywgd2UgYWxzbyBuZWVkIGFkZGl0aW9u
YWwgY2FjaGluZyBsYXllciBmb3IgSGFyZkJ1enoKLS8vIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGNv
bnN1bXB0aW9uIGJlY2F1c2UgaGJfZmFjZV90IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKLS8v
IHVuZGVybGluZyBmb250IGRhdGEgKGUuZy4gQ1RGb250UmVmLCBGVEZhY2UpLgotCi1jbGFzcyBG
YWNlQ2FjaGVFbnRyeSA6IHB1YmxpYyBSZWZDb3VudGVkPEZhY2VDYWNoZUVudHJ5PiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmFjZUNhY2hlRW50cnk+IGNyZWF0ZShoYl9mYWNl
X3QqIGZhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQoZmFjZSk7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRmFjZUNhY2hlRW50cnkoZmFjZSkpOwotICAgIH0KLSAgICB+RmFjZUNhY2hl
RW50cnkoKQotICAgIHsKLSAgICAgICAgaGJfZmFjZV9kZXN0cm95KG1fZmFjZSk7Ci0gICAgfQot
Ci0gICAgaGJfZmFjZV90KiBmYWNlKCkgeyByZXR1cm4gbV9mYWNlOyB9Ci0gICAgSGFzaE1hcDx1
aW50MzJfdCwgdWludDE2X3Q+KiBnbHlwaENhY2hlKCkgeyByZXR1cm4gJm1fZ2x5cGhDYWNoZTsg
fQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEZhY2VDYWNoZUVudHJ5KGhiX2ZhY2VfdCogZmFj
ZSkKLSAgICAgICAgOiBtX2ZhY2UoZmFjZSkKLSAgICB7IH0KLQotICAgIGhiX2ZhY2VfdCogbV9m
YWNlOwotICAgIEhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiBtX2dseXBoQ2FjaGU7Ci19Owot
Ci10eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxGYWNlQ2FjaGVFbnRyeT4sIFdURjo6
SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWlu
dDY0X3Q+ID4gSGFyZkJ1enpOR0ZhY2VDYWNoZTsKLQotc3RhdGljIEhhcmZCdXp6TkdGYWNlQ2Fj
aGUqIGhhcmZidXp6RmFjZUNhY2hlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhcmZC
dXp6TkdGYWNlQ2FjaGUsIHNfaGFyZmJ1enpGYWNlQ2FjaGUsICgpKTsKLSAgICByZXR1cm4gJnNf
aGFyZmJ1enpGYWNlQ2FjaGU7Ci19Ci0KLUhhcmZCdXp6TkdGYWNlOjpIYXJmQnV6ek5HRmFjZShG
b250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQotICAgIDog
bV9wbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKQotICAgICwgbV91bmlxdWVJRCh1bmlxdWVJRCkK
LSAgICAsIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0KEhCX1NDUklQVF9JTlZBTElEKQotewotICAg
IEhhcmZCdXp6TkdGYWNlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNo
ZSgpLT5hZGQobV91bmlxdWVJRCwgMCk7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRmFjZUNhY2hlRW50cnk6OmNyZWF0ZShjcmVh
dGVGYWNlKCkpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnJlZigpOwotICAgIG1fZmFj
ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmZhY2UoKTsKLSAgICBtX2dseXBoQ2FjaGVGb3JG
YWNlQ2FjaGVFbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBoQ2FjaGUoKTsKLX0K
LQotSGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSgpCi17Ci0gICAgSGFyZkJ1enpOR0Zh
Y2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3Vu
aXF1ZUlEKTsKLSAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgp
KTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS0+cmVmQ291bnQoKSA+IDEpOwotICAg
IHJlc3VsdC5nZXQoKS0+dmFsdWUtPmRlcmVmKCk7Ci0gICAgaWYgKHJlc3VsdC5nZXQoKS0+dmFs
dWUtPnJlZkNvdW50KCkgPT0gMSkKLSAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVtb3Zl
KG1fdW5pcXVlSUQpOwotfQotCi1zdGF0aWMgaGJfc2NyaXB0X3QgZmluZFNjcmlwdEZvclZlcnRp
Y2FsR2x5cGhTdWJzdGl0dXRpb24oaGJfZmFjZV90KiBmYWNlKQotewotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhDb3VudCA9IDMyOwotCi0gICAgdW5zaWduZWQgc2NyaXB0Q291bnQgPSBt
YXhDb3VudDsKLSAgICBoYl90YWdfdCBzY3JpcHRUYWdzW21heENvdW50XTsKLSAgICBoYl9vdF9s
YXlvdXRfdGFibGVfZ2V0X3NjcmlwdF90YWdzKGZhY2UsIEhCX09UX1RBR19HU1VCLCAwLCAmc2Ny
aXB0Q291bnQsIHNjcmlwdFRhZ3MpOwotICAgIGZvciAodW5zaWduZWQgc2NyaXB0SW5kZXggPSAw
OyBzY3JpcHRJbmRleCA8IHNjcmlwdENvdW50OyArK3NjcmlwdEluZGV4KSB7Ci0gICAgICAgIHVu
c2lnbmVkIGxhbmd1YWdlQ291bnQgPSBtYXhDb3VudDsKLSAgICAgICAgaGJfdGFnX3QgbGFuZ3Vh
Z2VUYWdzW21heENvdW50XTsKLSAgICAgICAgaGJfb3RfbGF5b3V0X3NjcmlwdF9nZXRfbGFuZ3Vh
Z2VfdGFncyhmYWNlLCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0SW5kZXgsIDAsICZsYW5ndWFnZUNv
dW50LCBsYW5ndWFnZVRhZ3MpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxhbmd1YWdlSW5kZXgg
PSAwOyBsYW5ndWFnZUluZGV4IDwgbGFuZ3VhZ2VDb3VudDsgKytsYW5ndWFnZUluZGV4KSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBmZWF0dXJlSW5kZXg7Ci0gICAgICAgICAgICBpZiAoaGJfb3Rf
bGF5b3V0X2xhbmd1YWdlX2ZpbmRfZmVhdHVyZShmYWNlLCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0
SW5kZXgsIGxhbmd1YWdlSW5kZXgsIEhhcmZCdXp6TkdGYWNlOjp2ZXJ0VGFnLCAmZmVhdHVyZUlu
ZGV4KQotICAgICAgICAgICAgICAgIHx8IGhiX290X2xheW91dF9sYW5ndWFnZV9maW5kX2ZlYXR1
cmUoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4LCBsYW5ndWFnZUluZGV4LCBIYXJm
QnV6ek5HRmFjZTo6dnJ0MlRhZywgJmZlYXR1cmVJbmRleCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGhiX290X3RhZ190b19zY3JpcHQoc2NyaXB0VGFnc1tzY3JpcHRJbmRleF0pOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBIQl9TQ1JJUFRfSU5WQUxJRDsKLX0KLQotdm9pZCBIYXJm
QnV6ek5HRmFjZTo6c2V0U2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihoYl9idWZm
ZXJfdCogYnVmZmVyKQotewotICAgIGlmIChtX3NjcmlwdEZvclZlcnRpY2FsVGV4dCA9PSBIQl9T
Q1JJUFRfSU5WQUxJRCkKLSAgICAgICAgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQgPSBmaW5kU2Ny
aXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihtX2ZhY2UpOwotICAgIGhiX2J1ZmZlcl9z
ZXRfc2NyaXB0KGJ1ZmZlciwgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzYwZGFmOWNmMTIyMGY5N2I4Njc2Y2E5ZjJlNzM0ODUzNmUyOGI5MC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSGFyZkJ1enpOR0ZhY2VfaAotI2RlZmlu
ZSBIYXJmQnV6ek5HRmFjZV9oCi0KLSNpbmNsdWRlIDxoYi5oPgotCi0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci0KLWNsYXNzIEhhcmZCdXp6TkdGYWNlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SGFyZkJ1enpOR0ZhY2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3QgaGJfdGFnX3QgdmVydFRhZzsKLSAgICBzdGF0aWMgY29uc3QgaGJfdGFnX3QgdnJ0MlRhZzsK
LQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZCdXp6TkdGYWNlPiBjcmVhdGUoRm9udFBsYXRm
b3JtRGF0YSogcGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSGFyZkJ1enpOR0ZhY2UocGxhdGZvcm1EYXRhLCB1bmlxdWVJ
RCkpOwotICAgIH0KLSAgICB+SGFyZkJ1enpOR0ZhY2UoKTsKLQotICAgIGhiX2ZvbnRfdCogY3Jl
YXRlRm9udCgpOwotCi0gICAgdm9pZCBzZXRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0
aW9uKGhiX2J1ZmZlcl90Kik7Ci0KLXByaXZhdGU6Ci0gICAgSGFyZkJ1enpOR0ZhY2UoRm9udFBs
YXRmb3JtRGF0YSosIHVpbnQ2NF90KTsKLQotICAgIGhiX2ZhY2VfdCogY3JlYXRlRmFjZSgpOwot
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogbV9wbGF0Zm9ybURhdGE7Ci0gICAgdWludDY0X3QgbV91
bmlxdWVJRDsKLSAgICBoYl9mYWNlX3QqIG1fZmFjZTsKLSAgICBXVEY6Okhhc2hNYXA8dWludDMy
X3QsIHVpbnQxNl90PiogbV9nbHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnk7Ci0KLSAgICBoYl9z
Y3JpcHRfdCBtX3NjcmlwdEZvclZlcnRpY2FsVGV4dDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEhh
cmZCdXp6TkdGYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYjNkMjc4MDQxZWFhNTgxYmQ5MjA3ZWEzOGQ4
ZGYyYmYyOGQ5ZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpO
R0ZhY2VDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkhhcmZCdXp6TkdGYWNlLmgiCi0KLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0j
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5j
bHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGZyZWV0eXBl
L2ZyZWV0eXBlLmg+Ci0jaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KLSNpbmNsdWRlIDxo
Yi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBDYWlyb0Z0RmFjZUxvY2tlciB7Ci1wdWJsaWM6Ci0gICAgQ2Fpcm9GdEZhY2VM
b2NrZXIoY2Fpcm9fc2NhbGVkX2ZvbnRfdCogY2Fpcm9TY2FsZWRGb250KSA6IG1fc2NhbGVkRm9u
dChjYWlyb1NjYWxlZEZvbnQpIHsgfTsKLSAgICBGVF9GYWNlIGxvY2soKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX3NjYWxlZEZvbnQpOwot
ICAgIH07Ci0gICAgfkNhaXJvRnRGYWNlTG9ja2VyKCkKLSAgICB7Ci0gICAgICAgIGNhaXJvX2Z0
X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fc2NhbGVkRm9udCk7Ci0gICAgfQotcHJpdmF0ZToK
LSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Ci19OwotCi1zdGF0aWMgaGJf
cG9zaXRpb25fdCBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihmbG9hdCB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aGJfcG9zaXRpb25fdD4odmFsdWUgKiAoMSA8PCAxNikpOwotfQot
Ci1zdGF0aWMgaGJfcG9zaXRpb25fdCBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZG91YmxlIHZh
bHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgx
IDw8IDE2KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIENhaXJvR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMo
Y2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCwgaGJfY29kZXBvaW50X3QgY29kZXBvaW50
LCBoYl9wb3NpdGlvbl90KiBhZHZhbmNlLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMpCi17
Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZ2x5cGhFeHRlbnRzOwotICAgIGNhaXJvX2dseXBo
X3QgZ2x5cGg7Ci0gICAgZ2x5cGguaW5kZXggPSBjb2RlcG9pbnQ7Ci0gICAgZ2x5cGgueCA9IDA7
Ci0gICAgZ2x5cGgueSA9IDA7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhz
Y2FsZWRGb250LCAmZ2x5cGgsIDEsICZnbHlwaEV4dGVudHMpOwotCi0gICAgaWYgKGFkdmFuY2Up
Ci0gICAgICAgICphZHZhbmNlID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50
cy54X2FkdmFuY2UpOwotICAgIGlmIChleHRlbnRzKSB7Ci0gICAgICAgIGV4dGVudHMtPnhfYmVh
cmluZyA9IGRvdWJsZVRvSGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMueF9iZWFyaW5nKTsK
LSAgICAgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGds
eXBoRXh0ZW50cy55X2JlYXJpbmcpOwotICAgICAgICBleHRlbnRzLT53aWR0aCA9IGRvdWJsZVRv
SGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMud2lkdGgpOwotICAgICAgICBleHRlbnRzLT5o
ZWlnaHQgPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZ2x5cGhFeHRlbnRzLmhlaWdodCk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGgoaGJfZm9udF90Kiwg
dm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90LCBo
Yl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBs
YXRmb3JtRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRh
KTsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gcGxhdGZvcm1EYXRhLT5z
Y2FsZWRGb250KCk7Ci0gICAgQVNTRVJUKHNjYWxlZEZvbnQpOwotCi0gICAgY2Fpcm9fZ2x5cGhf
dCogZ2x5cGhzID0gMDsKLSAgICBpbnQgbnVtR2x5cGhzID0gMDsKLSAgICBDU3RyaW5nIHV0ZjhD
b2RlcG9pbnQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+
KCZ1bmljb2RlKSwgMSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgaWYgKENB
SVJPX1NUQVRVU19TVUNDRVNTICE9IGNhaXJvX3NjYWxlZF9mb250X3RleHRfdG9fZ2x5cGhzKHNj
YWxlZEZvbnQsIDAsIDAsIHV0ZjhDb2RlcG9pbnQuZGF0YSgpLCB1dGY4Q29kZXBvaW50Lmxlbmd0
aCgpLCAmZ2x5cGhzLCAmbnVtR2x5cGhzLCAwLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghbnVtR2x5cGhzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKmdseXBo
ID0gZ2x5cGhzWzBdLmluZGV4OwotICAgIGNhaXJvX2dseXBoX2ZyZWUoZ2x5cGhzKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlwaEhv
cml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRf
dCBnbHlwaCwgdm9pZCopCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0g
cmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpOwotICAgIGNhaXJv
X3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKTsK
LSAgICBBU1NFUlQoc2NhbGVkRm9udCk7Ci0KLSAgICBoYl9wb3NpdGlvbl90IGFkdmFuY2UgPSAw
OwotICAgIENhaXJvR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGgsICZh
ZHZhbmNlLCAwKTsKLSAgICByZXR1cm4gYWR2YW5jZTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBo
YXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbihoYl9mb250X3QqLCB2b2lkKiwgaGJfY29k
ZXBvaW50X3QsIGhiX3Bvc2l0aW9uX3QqLCBoYl9wb3NpdGlvbl90Kiwgdm9pZCopCi17Ci0gICAg
Ly8gSnVzdCByZXR1cm4gdHJ1ZSwgZm9sbG93aW5nIHRoZSB3YXkgdGhhdCBIYXJmYnV6ei1GcmVl
VHlwZQotICAgIC8vIGltcGxlbWVudGF0aW9uIGRvZXMuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBoYl9ib29sX3QgaGFyZmJ1enpHZXRHbHlwaEV4dGVudHMoaGJfZm9udF90Kiwgdm9p
ZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4
dGVudHMsIHZvaWQqKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKTsKLSAgICBjYWlyb19z
Y2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gcGxhdGZvcm1EYXRhLT5zY2FsZWRGb250KCk7Ci0g
ICAgQVNTRVJUKHNjYWxlZEZvbnQpOwotCi0gICAgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50
cyhzY2FsZWRGb250LCBnbHlwaCwgMCwgZXh0ZW50cyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKCkK
LXsKLSAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNhaXJvRm9udEZ1bmNzID0g
MDsKLQotICAgIC8vIFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggd2UgY2Fu
J3Qgc3VwcG9ydC4KLSAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFsbGJhY2sgaW1wbGVt
ZW50YXRpb24gaWYgdGhleSBhcmVuJ3Qgc2V0LgotICAgIGlmICghaGFyZmJ1enpDYWlyb0ZvbnRG
dW5jcykgewotICAgICAgICBoYXJmYnV6ekNhaXJvRm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19j
cmVhdGUoKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmYnV6ekNh
aXJvRm9udEZ1bmNzLCBoYXJmYnV6ekdldEdseXBoLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9m
dW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZmJ1enpDYWlyb0ZvbnRGdW5jcywgaGFy
ZmJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9m
dW5jc19zZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmYnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJm
YnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVu
Y3Nfc2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJmYnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJmYnV6
ekdldEdseXBoRXh0ZW50cywgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11
dGFibGUoaGFyZmJ1enpDYWlyb0ZvbnRGdW5jcyk7Ci0gICAgfQotICAgIHJldHVybiBoYXJmYnV6
ekNhaXJvRm9udEZ1bmNzOwotfQotCi1zdGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6ekNhaXJvR2V0
VGFibGUoaGJfZmFjZV90KiwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19z
Y2FsZWRfZm9udF90Kj4odXNlckRhdGEpOwotICAgIGlmICghc2NhbGVkRm9udCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBDYWlyb0Z0RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihzY2Fs
ZWRGb250KTsKLSAgICBGVF9GYWNlIGZ0Rm9udCA9IGNhaXJvRnRGYWNlTG9ja2VyLmxvY2soKTsK
LSAgICBpZiAoIWZ0Rm9udCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGVF9VTG9uZyB0YWJs
ZVNpemUgPSAwOwotICAgIEZUX0Vycm9yIGVycm9yID0gRlRfTG9hZF9TZm50X1RhYmxlKGZ0Rm9u
dCwgdGFnLCAwLCAwLCAmdGFibGVTaXplKTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgRlRfQnl0ZSogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxGVF9CeXRlKj4o
ZmFzdE1hbGxvYyh0YWJsZVNpemUpKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgRlRfVUxvbmcgZXhwZWN0ZWRUYWJsZVNpemUgPSB0YWJsZVNpemU7Ci0gICAgZXJy
b3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUoZnRGb250LCB0YWcsIDAsIGJ1ZmZlciwgJnRhYmxlU2l6
ZSk7Ci0gICAgaWYgKGVycm9yIHx8IHRhYmxlU2l6ZSAhPSBleHBlY3RlZFRhYmxlU2l6ZSkgewot
ICAgICAgICBmYXN0RnJlZShidWZmZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gaGJfYmxvYl9jcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVm
ZmVyKSwgdGFibGVTaXplLCBIQl9NRU1PUllfTU9ERV9XUklUQUJMRSwgYnVmZmVyLCBmYXN0RnJl
ZSk7Ci19Ci0KLWhiX2ZhY2VfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZhY2UoKQotewotICAg
IGhiX2ZhY2VfdCogZmFjZSA9IGhiX2ZhY2VfY3JlYXRlX2Zvcl90YWJsZXMoaGFyZmJ1enpDYWly
b0dldFRhYmxlLCBtX3BsYXRmb3JtRGF0YS0+c2NhbGVkRm9udCgpLCAwKTsKLSAgICBBU1NFUlQo
ZmFjZSk7Ci0gICAgcmV0dXJuIGZhY2U7Ci19Ci0KLWhiX2ZvbnRfdCogSGFyZkJ1enpOR0ZhY2U6
OmNyZWF0ZUZvbnQoKQotewotICAgIGhiX2ZvbnRfdCogZm9udCA9IGhiX2ZvbnRfY3JlYXRlKG1f
ZmFjZSk7Ci0gICAgaGJfZm9udF9zZXRfZnVuY3MoZm9udCwgaGFyZmJ1enpDYWlyb1RleHRHZXRG
b250RnVuY3MoKSwgbV9wbGF0Zm9ybURhdGEsIDApOwotICAgIGNvbnN0IGZsb2F0IHNpemUgPSBt
X3BsYXRmb3JtRGF0YS0+c2l6ZSgpOwotICAgIGlmIChmbG9vcmYoc2l6ZSkgPT0gc2l6ZSkKLSAg
ICAgICAgaGJfZm9udF9zZXRfcHBlbShmb250LCBzaXplLCBzaXplKTsKLSAgICBpbnQgc2NhbGUg
PSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihzaXplKTsKLSAgICBoYl9mb250X3NldF9zY2FsZShm
b250LCBzY2FsZSwgc2NhbGUpOwotICAgIGhiX2ZvbnRfbWFrZV9pbW11dGFibGUoZm9udCk7Ci0g
ICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLUdseXBoQnVmZmVyQWR2YW5jZSBIYXJmQnV6elNoYXBlcjo6
Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCi17Ci0g
ICAgcmV0dXJuIEdseXBoQnVmZmVyQWR2YW5jZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRjNjVjZDQxZTBlYzMwNDRlYjU5
OWI1ZDU0ZTE2Nzg0NTZjMTQ5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6ek5HRmFjZUNvcmVUZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhhcmZCdXp6TkdGYWNlLmgiCi0KLSNpbmNs
dWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiaGIuaCIKLSNpbmNsdWRlIDxB
cHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgaGJfcG9zaXRpb25fdCBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihD
R0Zsb2F0IHZhbHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2
YWx1ZSAqICgxIDw8IDE2KSk7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGgoaGJfZm9u
dF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9j
b2RlcG9pbnRfdCB2YXJpYXRpb25TZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lk
KiB1c2VyRGF0YSkKLXsKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxG
b250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKLSAgICBVbmlDaGFyIGNoYXJh
Y3RlcnNbNF07Ci0gICAgQ0dHbHlwaCBjZ0dseXBoc1s0XTsKLSAgICBzaXplX3QgbGVuZ3RoID0g
MDsKLSAgICBVMTZfQVBQRU5EX1VOU0FGRShjaGFyYWN0ZXJzLCBsZW5ndGgsIHVuaWNvZGUpOwot
ICAgIGlmICghQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhjdEZvbnQsIGNoYXJhY3RlcnMs
IGNnR2x5cGhzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKmdseXBoID0g
Y2dHbHlwaHNbMF07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90
IGdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnRE
YXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgQ1RGb250
UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRh
KS0+Y3RGb250KCk7Ci0gICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7Ci0gICAgQ0dGbG9hdCBh
ZHZhbmNlID0gQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250SG9yaXpv
bnRhbE9yaWVudGF0aW9uLCAmY2dHbHlwaCwgMCwgMSk7Ci0gICAgcmV0dXJuIGZsb2F0VG9IYXJm
QnV6elBvc2l0aW9uKGFkdmFuY2UpOwotfQotCi1zdGF0aWMgaGJfYm9vbF90IGdldEdseXBoSG9y
aXpvbnRhbE9yaWdpbihoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVw
b2ludF90IGdseXBoLCBoYl9wb3NpdGlvbl90KiB4LCBoYl9wb3NpdGlvbl90KiB5LCB2b2lkKiB1
c2VyRGF0YSkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBnZXRH
bHlwaEV4dGVudHMoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9p
bnRfdCBnbHlwaCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzLCB2b2lkKiB1c2VyRGF0YSkK
LXsKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1E
YXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKLSAgICBDR1JlY3QgY2dSZWN0OwotICAgIENHR2x5
cGggY2dHbHlwaCA9IGdseXBoOwotICAgIGlmIChDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5
cGhzKGN0Rm9udCwga0NURm9udERlZmF1bHRPcmllbnRhdGlvbiwgJmNnR2x5cGgsICZjZ1JlY3Qs
IDEpID09IENHUmVjdE51bGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBleHRlbnRzLT54
X2JlYXJpbmcgPSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Qub3JpZ2luLngpOwotICAg
IGV4dGVudHMtPnlfYmVhcmluZyA9IC1mbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Qub3Jp
Z2luLnkpOwotICAgIGV4dGVudHMtPndpZHRoID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dS
ZWN0LnNpemUud2lkdGgpOwotICAgIGV4dGVudHMtPmhlaWdodCA9IGZsb2F0VG9IYXJmQnV6elBv
c2l0aW9uKGNnUmVjdC5zaXplLmhlaWdodCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MoKQotewotICAg
IHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MgPSAwOwot
Ci0gICAgaWYgKCFoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzKSB7Ci0gICAgICAgIGhhcmZidXp6
Q29yZVRleHRGb250RnVuY3MgPSBoYl9mb250X2Z1bmNzX2NyZWF0ZSgpOwotICAgICAgICBoYl9m
b250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEds
eXBoLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1
bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwg
MCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfb3JpZ2luX2Z1bmMoaGFy
ZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luLCAwLCAwKTsK
LSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGhhcmZidXp6Q29y
ZVRleHRGb250RnVuY3MsIGdldEdseXBoRXh0ZW50cywgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRf
ZnVuY3NfbWFrZV9pbW11dGFibGUoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyk7Ci0gICAgfQot
ICAgIHJldHVybiBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzOwotfQotCi1zdGF0aWMgdm9pZCBy
ZWxlYXNlVGFibGVEYXRhKHZvaWQqIHVzZXJEYXRhKQotewotICAgIENGRGF0YVJlZiBjZkRhdGEg
PSByZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4odXNlckRhdGEpOwotICAgIENGUmVsZWFzZShj
ZkRhdGEpOwotfQotCi1zdGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6ekNvcmVUZXh0R2V0VGFibGUo
aGJfZmFjZV90KiBmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIENH
Rm9udFJlZiBjZ0ZvbnQgPSByZWludGVycHJldF9jYXN0PENHRm9udFJlZj4odXNlckRhdGEpOwot
ICAgIENGRGF0YVJlZiBjZkRhdGEgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoY2dGb250LCB0YWcp
OwotICAgIGlmICghY2ZEYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IGNoYXIq
IGRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGNm
RGF0YSkpOwotICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRh
KTsKLSAgICBpZiAoIWRhdGEgfHwgIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGhiX2Jsb2JfY3JlYXRlKGRhdGEsIGxlbmd0aCwgSEJfTUVNT1JZX01PREVfUkVBRE9OTFks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8X19DRkRhdGEqPihjZkRhdGEpKSwg
cmVsZWFzZVRhYmxlRGF0YSk7Ci19Ci0KLWhiX2ZhY2VfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0
ZUZhY2UoKQotewotICAgIC8vIEl0IHNlZW1zIHRoYXQgQ1RGb250Q29weVRhYmxlIG9mIE1hY09T
WDEwLjUgc2RrIGRvZXNuJ3Qgd29yayBmb3IKLSAgICAvLyBPcGVuVHlwZSBsYXlvdXQgdGFibGVz
KEdERUYsIEdTVUIsIEdQT1MpLiBVc2UgQ0dGb250Q29weVRhYmxlRm9yVGFnIGluc3RlYWQuCi0g
ICAgaGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6ekNv
cmVUZXh0R2V0VGFibGUsIG1fcGxhdGZvcm1EYXRhLT5jZ0ZvbnQoKSwgMCk7Ci0gICAgQVNTRVJU
KGZhY2UpOwotICAgIHJldHVybiBmYWNlOwotfQotCi1oYl9mb250X3QqIEhhcmZCdXp6TkdGYWNl
OjpjcmVhdGVGb250KCkKLXsKLSAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZSht
X2ZhY2UpOwotICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6Q29yZVRleHRHZXRG
b250RnVuY3MoKSwgbV9wbGF0Zm9ybURhdGEsIDApOwotICAgIGNvbnN0IGZsb2F0IHNpemUgPSBt
X3BsYXRmb3JtRGF0YS0+bV9zaXplOwotICAgIGhiX2ZvbnRfc2V0X3BwZW0oZm9udCwgc2l6ZSwg
c2l6ZSk7Ci0gICAgY29uc3QgaW50IHNjYWxlID0gKDEgPDwgMTYpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplKTsKLSAgICBoYl9mb250X3NldF9zY2FsZShmb250LCBzY2FsZSwgc2NhbGUpOwotICAg
IGhiX2ZvbnRfbWFrZV9pbW11dGFibGUoZm9udCk7Ci0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLUds
eXBoQnVmZmVyQWR2YW5jZSBIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNl
KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCi17Ci0gICAgcmV0dXJuIENHU2l6ZU1ha2Uod2lk
dGgsIGhlaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNl
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6ek5HRmFjZVNraWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDM5
ZWZhNzM3MTNiOGRhNWM1ZmRkNjM1ZWFlMDg1ZjcyOTk2ZTYyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIYXJmQnV6ek5HRmFj
ZS5oIgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgotI2luY2x1ZGUgIlNrRm9udEhvc3QuaCIKLSNpbmNsdWRlICJTa1BhaW50LmgiCi0j
aW5jbHVkZSAiU2tQYXRoLmgiCi0jaW5jbHVkZSAiU2tQb2ludC5oIgotI2luY2x1ZGUgIlNrUmVj
dC5oIgotI2luY2x1ZGUgIlNrVXRpbHMuaCIKLQotI2luY2x1ZGUgImhiLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBPdXIgaW1wbGVtZW50
YXRpb24gb2YgdGhlIGNhbGxiYWNrcyB3aGljaCBIYXJmYnV6eiByZXF1aXJlcyBieSB1c2luZyBT
a2lhCi0vLyBjYWxscy4gU2VlIHRoZSBIYXJmYnV6eiBzb3VyY2UgZm9yIHJlZmVyZW5jZXMgYWJv
dXQgd2hhdCB0aGVzZSBjYWxsYmFja3MgZG8uCi0KLXN0cnVjdCBIYXJmQnV6ekZvbnREYXRhIHsK
LSAgICBIYXJmQnV6ekZvbnREYXRhKFdURjo6SGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+KiBn
bHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnkpCi0gICAgICAgIDogbV9nbHlwaENhY2hlRm9yRmFj
ZUNhY2hlRW50cnkoZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5KQotICAgIHsgfQotICAgIFNr
UGFpbnQgbV9wYWludDsKLSAgICBXVEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogbV9n
bHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnk7Ci19OwotCi1zdGF0aWMgaGJfcG9zaXRpb25fdCBT
a2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKFNrU2NhbGFyIHZhbHVlKQotewotICAgIHJldHVy
biBTa1NjYWxhclRvRml4ZWQodmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBTa2lhR2V0R2x5cGhX
aWR0aEFuZEV4dGVudHMoU2tQYWludCogcGFpbnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2ludCwg
aGJfcG9zaXRpb25fdCogd2lkdGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cykKLXsKLSAg
ICBBU1NFUlQoY29kZXBvaW50IDw9IDB4RkZGRik7Ci0gICAgcGFpbnQtPnNldFRleHRFbmNvZGlu
ZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotCi0gICAgU2tTY2FsYXIgc2tXaWR0
aDsKLSAgICBTa1JlY3Qgc2tCb3VuZHM7Ci0gICAgdWludDE2X3QgZ2x5cGggPSBjb2RlcG9pbnQ7
Ci0KLSAgICBwYWludC0+Z2V0VGV4dFdpZHRocygmZ2x5cGgsIHNpemVvZihnbHlwaCksICZza1dp
ZHRoLCAmc2tCb3VuZHMpOwotICAgIGlmICh3aWR0aCkKLSAgICAgICAgKndpZHRoID0gU2tpYVNj
YWxhclRvSGFyZmJ1enpQb3NpdGlvbihza1dpZHRoKTsKLSAgICBpZiAoZXh0ZW50cykgewotICAg
ICAgICAvLyBJbnZlcnQgeS1heGlzIGJlY2F1c2UgU2tpYSBpcyB5LWdyb3dzLWRvd24gYnV0IHdl
IHNldCB1cCBoYXJmYnV6eiB0byBiZSB5LWdyb3dzLXVwLgotICAgICAgICBleHRlbnRzLT54X2Jl
YXJpbmcgPSBTa2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKHNrQm91bmRzLmZMZWZ0KTsKLSAg
ICAgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gU2tpYVNjYWxhclRvSGFyZmJ1enpQb3NpdGlvbigt
c2tCb3VuZHMuZlRvcCk7Ci0gICAgICAgIGV4dGVudHMtPndpZHRoID0gU2tpYVNjYWxhclRvSGFy
ZmJ1enpQb3NpdGlvbihza0JvdW5kcy53aWR0aCgpKTsKLSAgICAgICAgZXh0ZW50cy0+aGVpZ2h0
ID0gU2tpYVNjYWxhclRvSGFyZmJ1enpQb3NpdGlvbigtc2tCb3VuZHMuaGVpZ2h0KCkpOwotICAg
IH0KLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoKGhiX2ZvbnRfdCogaGJG
b250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50
X3QgdmFyaWF0aW9uU2VsZWN0b3IsIGhiX2NvZGVwb2ludF90KiBnbHlwaCwgdm9pZCogdXNlckRh
dGEpCi17Ci0gICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SGFyZkJ1enpGb250RGF0YSo+KGZvbnREYXRhKTsKLQotICAgIFdURjo6SGFzaE1hcDx1aW50
MzJfdCwgdWludDE2X3Q+OjpBZGRSZXN1bHQgcmVzdWx0ID0gaGJGb250RGF0YS0+bV9nbHlwaENh
Y2hlRm9yRmFjZUNhY2hlRW50cnktPmFkZCh1bmljb2RlLCAwKTsKLSAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgU2tQYWludCogcGFpbnQgPSAmaGJGb250RGF0YS0+bV9wYWlu
dDsKLSAgICAgICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMzJfVGV4dEVu
Y29kaW5nKTsKLSAgICAgICAgdWludDE2X3QgZ2x5cGgxNjsKLSAgICAgICAgcGFpbnQtPnRleHRU
b0dseXBocygmdW5pY29kZSwgc2l6ZW9mKGhiX2NvZGVwb2ludF90KSwgJmdseXBoMTYpOwotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZ2x5cGgxNjsKLSAgICAgICAgKmdseXBoID0g
Z2x5cGgxNjsKLSAgICB9Ci0gICAgKmdseXBoID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICByZXR1cm4gISEqZ2x5cGg7Ci19Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90IGhhcmZidXp6R2V0
R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEs
IGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBIYXJmQnV6ekZv
bnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4o
Zm9udERhdGEpOwotICAgIGhiX3Bvc2l0aW9uX3QgYWR2YW5jZSA9IDA7Ci0KLSAgICBTa2lhR2V0
R2x5cGhXaWR0aEFuZEV4dGVudHMoJmhiRm9udERhdGEtPm1fcGFpbnQsIGdseXBoLCAmYWR2YW5j
ZSwgMCk7Ci0gICAgcmV0dXJuIGFkdmFuY2U7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgaGFyZmJ1
enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4oaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnRE
YXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJfcG9zaXRpb25fdCogeCwgaGJfcG9zaXRpb25f
dCogeSwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgLy8gSnVzdCByZXR1cm4gdHJ1ZSwgZm9sbG93
aW5nIHRoZSB3YXkgdGhhdCBIYXJmYnV6ei1GcmVlVHlwZQotICAgIC8vIGltcGxlbWVudGF0aW9u
IGRvZXMuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgaGFyZmJ1enpH
ZXRHbHlwaEV4dGVudHMoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2Rl
cG9pbnRfdCBnbHlwaCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzLCB2b2lkKiB1c2VyRGF0
YSkKLXsKLSAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxIYXJmQnV6ekZvbnREYXRhKj4oZm9udERhdGEpOwotCi0gICAgU2tpYUdldEdseXBoV2lkdGhB
bmRFeHRlbnRzKCZoYkZvbnREYXRhLT5tX3BhaW50LCBnbHlwaCwgMCwgZXh0ZW50cyk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6U2tpYUdl
dEZvbnRGdW5jcygpCi17Ci0gICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpTa2lh
Rm9udEZ1bmNzID0gMDsKLQotICAgIC8vIFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMg
d2hpY2ggd2UgY2FuJ3Qgc3VwcG9ydC4KLSAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFs
bGJhY2sgaW1wbGVtZW50YXRpb24gaWYgdGhleSBhcmVuJ3Qgc2V0LgotICAgIGlmICghaGFyZmJ1
enpTa2lhRm9udEZ1bmNzKSB7Ci0gICAgICAgIGhhcmZidXp6U2tpYUZvbnRGdW5jcyA9IGhiX2Zv
bnRfZnVuY3NfY3JlYXRlKCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMo
aGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBoYXJmYnV6ekdldEdseXBoLCAwLCAwKTsKLSAgICAgICAg
aGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1
bmNzLCBoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UsIDAsIDApOwotICAgICAgICBo
Yl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9mdW5jKGhhcmZidXp6U2tpYUZvbnRGdW5j
cywgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDApOwotICAgICAgICBoYl9m
b250X2Z1bmNzX3NldF9nbHlwaF9leHRlbnRzX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBo
YXJmYnV6ekdldEdseXBoRXh0ZW50cywgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFr
ZV9pbW11dGFibGUoaGFyZmJ1enpTa2lhRm9udEZ1bmNzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhh
cmZidXp6U2tpYUZvbnRGdW5jczsKLX0KLQotc3RhdGljIGhiX2Jsb2JfdCogaGFyZmJ1enpTa2lh
R2V0VGFibGUoaGJfZmFjZV90KiBmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQot
ewotICAgIFNrRm9udElEIHVuaXF1ZUlEID0gc3RhdGljX2Nhc3Q8U2tGb250SUQ+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDY0X3Q+KHVzZXJEYXRhKSk7Ci0KLSAgICBjb25zdCBzaXplX3QgdGFibGVT
aXplID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKHVuaXF1ZUlELCB0YWcpOwotICAgIGlmICgh
dGFibGVTaXplKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNoYXIqIGJ1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2ModGFibGVTaXplKSk7Ci0gICAgaWYgKCFidWZm
ZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHNpemVfdCBhY3R1YWxTaXplID0gU2tGb250SG9z
dDo6R2V0VGFibGVEYXRhKHVuaXF1ZUlELCB0YWcsIDAsIHRhYmxlU2l6ZSwgYnVmZmVyKTsKLSAg
ICBpZiAodGFibGVTaXplICE9IGFjdHVhbFNpemUpIHsKLSAgICAgICAgZmFzdEZyZWUoYnVmZmVy
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhiX2Jsb2JfY3JlYXRl
KGNvbnN0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIHRhYmxlU2l6ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgSEJfTUVNT1JZX01PREVfV1JJVEFCTEUsIGJ1ZmZlciwgZmFzdEZyZWUpOwotfQot
Ci1zdGF0aWMgdm9pZCBkZXN0cm95SGFyZkJ1enpGb250RGF0YSh2b2lkKiB1c2VyRGF0YSkKLXsK
LSAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJm
QnV6ekZvbnREYXRhKj4odXNlckRhdGEpOwotICAgIGRlbGV0ZSBoYkZvbnREYXRhOwotfQotCi1o
Yl9mYWNlX3QqIEhhcmZCdXp6TkdGYWNlOjpjcmVhdGVGYWNlKCkKLXsKLSAgICBoYl9mYWNlX3Qq
IGZhY2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzKGhhcmZidXp6U2tpYUdldFRhYmxlLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihtX3BsYXRmb3JtRGF0YS0+dW5pcXVlSUQoKSksIDApOwot
ICAgIEFTU0VSVChmYWNlKTsKLSAgICByZXR1cm4gZmFjZTsKLX0KLQotaGJfZm9udF90KiBIYXJm
QnV6ek5HRmFjZTo6Y3JlYXRlRm9udCgpCi17Ci0gICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250
RGF0YSA9IG5ldyBIYXJmQnV6ekZvbnREYXRhKG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5
KTsKLSAgICBtX3BsYXRmb3JtRGF0YS0+c2V0dXBQYWludCgmaGJGb250RGF0YS0+bV9wYWludCk7
Ci0gICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUobV9mYWNlKTsKLSAgICBoYl9m
b250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6elNraWFHZXRGb250RnVuY3MoKSwgaGJGb250RGF0
YSwgZGVzdHJveUhhcmZCdXp6Rm9udERhdGEpOwotICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3Jt
RGF0YS0+c2l6ZSgpOwotICAgIGludCBzY2FsZSA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRp
b24oc2l6ZSk7Ci0gICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUsIHNjYWxlKTsKLSAg
ICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOwotICAgIHJldHVybiBmb250OwotfQotCi1H
bHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2YW5j
ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQotewotICAgIHJldHVybiBHbHlwaEJ1ZmZlckFk
dmFuY2Uod2lkdGgsIGhlaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L25nL0hhcmZCdXp6U2hhcGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZl
ZjQ1ZWU3YzUxZWE5NWU4MDljZDJmZDJkNzE1OTAzZjc4ZjJiMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
NDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5o
IgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkhhcmZCdXp6TkdGYWNlLmgiCi0jaW5j
bHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dFJ1
bi5oIgotI2luY2x1ZGUgImhiLWljdS5oIgotI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6ci5oPgot
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEhh
cmZCdXp6U2NvcGVkUHRyIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpEZXN0cm95RnVu
Y3Rpb24pKFQqKTsKLQotICAgIEhhcmZCdXp6U2NvcGVkUHRyKFQqIHB0ciwgRGVzdHJveUZ1bmN0
aW9uIGRlc3Ryb3kpCi0gICAgICAgIDogbV9wdHIocHRyKQotICAgICAgICAsIG1fZGVzdHJveShk
ZXN0cm95KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZGVzdHJveSk7Ci0gICAgfQotICAgIH5I
YXJmQnV6elNjb3BlZFB0cigpCi0gICAgewotICAgICAgICBpZiAobV9wdHIpCi0gICAgICAgICAg
ICAoKm1fZGVzdHJveSkobV9wdHIpOwotICAgIH0KLQotICAgIFQqIGdldCgpIHsgcmV0dXJuIG1f
cHRyOyB9Ci1wcml2YXRlOgotICAgIFQqIG1fcHRyOwotICAgIERlc3Ryb3lGdW5jdGlvbiBtX2Rl
c3Ryb3k7Ci19OwotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0
KGhiX3Bvc2l0aW9uX3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2
YWx1ZSkgLyAoMSA8PCAxNik7Ci19Ci0KLUhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFy
ZkJ1enpSdW4oY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBzdGFydElu
ZGV4LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJf
c2NyaXB0X3Qgc2NyaXB0KQotICAgIDogbV9mb250RGF0YShmb250RGF0YSkKLSAgICAsIG1fc3Rh
cnRJbmRleChzdGFydEluZGV4KQotICAgICwgbV9udW1DaGFyYWN0ZXJzKG51bUNoYXJhY3RlcnMp
Ci0gICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgLCBtX3NjcmlwdChzY3JpcHQpCi17
Ci19Ci0KLXZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphcHBseVNoYXBlUmVzdWx0
KGhiX2J1ZmZlcl90KiBoYXJmYnV6ekJ1ZmZlcikKLXsKLSAgICBtX251bUdseXBocyA9IGhiX2J1
ZmZlcl9nZXRfbGVuZ3RoKGhhcmZidXp6QnVmZmVyKTsKLSAgICBtX2dseXBocy5yZXNpemUobV9u
dW1HbHlwaHMpOwotICAgIG1fYWR2YW5jZXMucmVzaXplKG1fbnVtR2x5cGhzKTsKLSAgICBtX2ds
eXBoVG9DaGFyYWN0ZXJJbmRleGVzLnJlc2l6ZShtX251bUdseXBocyk7Ci0gICAgbV9vZmZzZXRz
LnJlc2l6ZShtX251bUdseXBocyk7Ci19Ci0KLXZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJ
ZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSkKLXsKLSAgICBt
X2dseXBoc1tpbmRleF0gPSBnbHlwaElkOwotICAgIG1fYWR2YW5jZXNbaW5kZXhdID0gYWR2YW5j
ZTsKLSAgICBtX29mZnNldHNbaW5kZXhdID0gRmxvYXRQb2ludChvZmZzZXRYLCBvZmZzZXRZKTsK
LX0KLQotaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5kZXhGb3JY
UG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0WCA8PSBtX3dpZHRo
KTsKLSAgICBmbG9hdCBjdXJyZW50WCA9IDA7Ci0gICAgZmxvYXQgY3VycmVudEFkdmFuY2UgPSBt
X2FkdmFuY2VzWzBdOwotICAgIHVuc2lnbmVkIGdseXBoSW5kZXggPSAwOwotCi0gICAgLy8gU3Vt
IHVwIGFkdmFuY2VzIHRoYXQgYmVsb25nIHRvIGEgY2hhcmFjdGVyLgotICAgIHdoaWxlIChnbHlw
aEluZGV4IDwgbV9udW1HbHlwaHMgLSAxICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5
cGhJbmRleF0gPT0gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4ICsgMV0pCi0g
ICAgICAgIGN1cnJlbnRBZHZhbmNlICs9IG1fYWR2YW5jZXNbKytnbHlwaEluZGV4XTsKLSAgICBj
dXJyZW50QWR2YW5jZSA9IGN1cnJlbnRBZHZhbmNlIC8gMi4wOwotICAgIGlmICh0YXJnZXRYIDw9
IGN1cnJlbnRBZHZhbmNlKQotICAgICAgICByZXR1cm4gcnRsKCkgPyBtX251bUNoYXJhY3RlcnMg
OiAwOwotCi0gICAgKytnbHlwaEluZGV4OwotICAgIHdoaWxlIChnbHlwaEluZGV4IDwgbV9udW1H
bHlwaHMpIHsKLSAgICAgICAgdW5zaWduZWQgcHJldkNoYXJhY3RlckluZGV4ID0gbV9nbHlwaFRv
Q2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4IC0gMV07Ci0gICAgICAgIGZsb2F0IHByZXZBZHZh
bmNlID0gY3VycmVudEFkdmFuY2U7Ci0gICAgICAgIGN1cnJlbnRBZHZhbmNlID0gbV9hZHZhbmNl
c1tnbHlwaEluZGV4XTsKLSAgICAgICAgd2hpbGUgKGdseXBoSW5kZXggPCBtX251bUdseXBocyAt
IDEgJiYgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4XSA9PSBtX2dseXBoVG9D
aGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXggKyAxXSkKLSAgICAgICAgICAgIGN1cnJlbnRBZHZh
bmNlICs9IG1fYWR2YW5jZXNbKytnbHlwaEluZGV4XTsKLSAgICAgICAgY3VycmVudEFkdmFuY2Ug
PSBjdXJyZW50QWR2YW5jZSAvIDIuMDsKLSAgICAgICAgZmxvYXQgbmV4dFggPSBjdXJyZW50WCAr
IHByZXZBZHZhbmNlICsgY3VycmVudEFkdmFuY2U7Ci0gICAgICAgIGlmIChjdXJyZW50WCA8PSB0
YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgpCi0gICAgICAgICAgICByZXR1cm4gcnRsKCkgPyBw
cmV2Q2hhcmFjdGVySW5kZXggOiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXhd
OwotICAgICAgICBjdXJyZW50WCA9IG5leHRYOwotICAgICAgICBwcmV2QWR2YW5jZSA9IGN1cnJl
bnRBZHZhbmNlOwotICAgICAgICArK2dseXBoSW5kZXg7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJ0
bCgpID8gMCA6IG1fbnVtQ2hhcmFjdGVyczsKLX0KLQotZmxvYXQgSGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQotewotICAgIEFT
U0VSVChvZmZzZXQgPCBtX251bUNoYXJhY3RlcnMpOwotICAgIHVuc2lnbmVkIGdseXBoSW5kZXgg
PSAwOwotICAgIGZsb2F0IHBvc2l0aW9uID0gMDsKLSAgICBpZiAocnRsKCkpIHsKLSAgICAgICAg
d2hpbGUgKGdseXBoSW5kZXggPCBtX251bUdseXBocyAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRl
eGVzW2dseXBoSW5kZXhdID4gb2Zmc2V0KSB7Ci0gICAgICAgICAgICBwb3NpdGlvbiArPSBtX2Fk
dmFuY2VzW2dseXBoSW5kZXhdOwotICAgICAgICAgICAgKytnbHlwaEluZGV4OwotICAgICAgICB9
Ci0gICAgICAgIC8vIEZvciBSVEwsIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSByaWdodCBzaWRlIGJv
dW5kYXJ5IG9mIHRoZSBjaGFyYWN0ZXIuCi0gICAgICAgIC8vIEFkZCBhZHZhbmNlIG9mIGdseXBo
cyB3aGljaCBhcmUgcGFydCBvZiB0aGUgY2hhcmFjdGVyLgotICAgICAgICB3aGlsZSAoZ2x5cGhJ
bmRleCA8IG1fbnVtR2x5cGhzIC0gMSAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBo
SW5kZXhdID09IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRleCArIDFdKSB7Ci0g
ICAgICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2dseXBoSW5kZXhdOwotICAgICAgICAg
ICAgKytnbHlwaEluZGV4OwotICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5j
ZXNbZ2x5cGhJbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKGdseXBoSW5kZXgg
PCBtX251bUdseXBocyAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXhdIDwg
b2Zmc2V0KSB7Ci0gICAgICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2dseXBoSW5kZXhd
OwotICAgICAgICAgICAgKytnbHlwaEluZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBwb3NpdGlvbjsKLX0KLQotc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhjb25zdCBV
Q2hhciogc291cmNlLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpCi17Ci0gICAgaW50
IHBvc2l0aW9uID0gMDsKLSAgICBib29sIGVycm9yID0gZmFsc2U7Ci0gICAgd2hpbGUgKHBvc2l0
aW9uIDwgbGVuZ3RoKSB7Ci0gICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAgICAgICBpbnQg
bmV4dFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAgIFUxNl9ORVhUKHNvdXJjZSwgbmV4dFBv
c2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7Ci0gICAgICAgIC8vIERvbid0IG5vcm1hbGl6ZSB0
YWJzIGFzIHRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzIHNwYWNlcyBmb3Igd29yZC1lbmQuCi0gICAg
ICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSAmJiBjaGFyYWN0ZXIgIT0gJ1x0
JykKLSAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsKLSAgICAgICAgZWxzZSBpZiAoRm9udDo6
dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGNoYXJhY3RlcikpCi0gICAgICAg
ICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgVTE2X0FQUEVORChkZXN0
aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyLCBlcnJvcik7Ci0gICAgICAgIEFT
U0VSVF9VTlVTRUQoZXJyb3IsICFlcnJvcik7Ci0gICAgICAgIHBvc2l0aW9uID0gbmV4dFBvc2l0
aW9uOwotICAgIH0KLX0KLQotSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNvbnN0IEZv
bnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1bikKLSAgICA6IEhhcmZCdXp6U2hhcGVyQmFzZShm
b250LCBydW4pCi0gICAgLCBtX2Zyb21JbmRleCgwKQotICAgICwgbV90b0luZGV4KG1fcnVuLmxl
bmd0aCgpKQotewotICAgIG1fbm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVD
aGFyW21fcnVuLmxlbmd0aCgpICsgMV0pOwotICAgIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCA9
IG1fcnVuLmxlbmd0aCgpOwotICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobV9ydW4uY2hhcmFjdGVy
czE2KCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3Ro
KTsKLSAgICBzZXRQYWRkaW5nKG1fcnVuLmV4cGFuc2lvbigpKTsKLSAgICBzZXRGb250RmVhdHVy
ZXMoKTsKLX0KLQotSGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNoYXBlcigpCi17Ci19Ci0KLXZv
aWQgSGFyZkJ1enpTaGFwZXI6OnNldERyYXdSYW5nZShpbnQgZnJvbSwgaW50IHRvKQotewotICAg
IEFTU0VSVChmcm9tID49IDApOwotICAgIEFTU0VSVCh0byA8PSBtX3J1bi5sZW5ndGgoKSk7Ci0g
ICAgbV9mcm9tSW5kZXggPSBmcm9tOwotICAgIG1fdG9JbmRleCA9IHRvOwotfQotCi12b2lkIEhh
cmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVyZXMoKQotewotICAgIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24gPSBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChk
ZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7Ci0gICAgICAgIHN0YXRpYyBo
Yl9mZWF0dXJlX3QgdmVydCA9IHsgSGFyZkJ1enpOR0ZhY2U6OnZlcnRUYWcsIDEsIDAsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPigtMSkgfTsKLSAgICAgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCB2cnQy
ID0geyBIYXJmQnV6ek5HRmFjZTo6dnJ0MlRhZywgMSwgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KC0xKSB9OwotICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZCh2ZXJ0KTsKLSAgICAgICAgbV9mZWF0
dXJlcy5hcHBlbmQodnJ0Mik7Ci0gICAgfQotCi0gICAgRm9udEZlYXR1cmVTZXR0aW5ncyogc2V0
dGluZ3MgPSBkZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBudW1GZWF0dXJlcyA9IHNldHRpbmdz
LT5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyArK2kp
IHsKLSAgICAgICAgaGJfZmVhdHVyZV90IGZlYXR1cmU7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiB0
YWcgPSBzZXR0aW5ncy0+YXQoaSkudGFnKCkuY2hhcmFjdGVycygpOwotICAgICAgICBmZWF0dXJl
LnRhZyA9IEhCX1RBRyh0YWdbMF0sIHRhZ1sxXSwgdGFnWzJdLCB0YWdbM10pOwotICAgICAgICBm
ZWF0dXJlLnZhbHVlID0gc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCk7Ci0gICAgICAgIGZlYXR1cmUu
c3RhcnQgPSAwOwotICAgICAgICBmZWF0dXJlLmVuZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigt
MSk7Ci0gICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmUpOwotICAgIH0KLX0KLQotYm9v
bCBIYXJmQnV6elNoYXBlcjo6c2hhcGUoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewotICAg
IGlmICghY29sbGVjdEhhcmZCdXp6UnVucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBtX3RvdGFsV2lkdGggPSAwOwotICAgIC8vIFdlYktpdCBkb2Vzbid0IHNldCBkaXJlY3Rpb24g
d2hlbiBjYWx1bGF0aW5nIHdpZHRocy4gTGVhdmUgdGhlIGRpcmVjdGlvbiBzZXR0aW5nIHRvCi0g
ICAgLy8gSGFyZkJ1enogd2hlbiB3ZSBhcmUgY2FsY3VsYXRpbmcgd2lkdGhzIChleGNlcHQgd2hl
biBkaXJlY3Rpb25hbE92ZXJyaWRlKCkgaXMgc2V0KS4KLSAgICBpZiAoIXNoYXBlSGFyZkJ1enpS
dW5zKGdseXBoQnVmZmVyIHx8IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3RvdGFsV2lkdGggPSByb3VuZGYobV90b3RhbFdpZHRoKTsK
LQotICAgIGlmIChnbHlwaEJ1ZmZlciAmJiAhZmlsbEdseXBoQnVmZmVyKGdseXBoQnVmZmVyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZsb2F0UG9p
bnQgSGFyZkJ1enpTaGFwZXI6OmFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpCi17Ci0gICAgcmV0dXJuIHBvaW50ICsgbV9zdGFydE9mZnNldDsKLX0KLQotYm9vbCBIYXJm
QnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucygpCi17Ci0gICAgY29uc3QgVUNoYXIqIG5v
cm1hbGl6ZWRCdWZmZXJFbmQgPSBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX25vcm1hbGl6
ZWRCdWZmZXJMZW5ndGg7Ci0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJh
dG9yKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgMCwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3Ro
LCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgpOwotICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAg
IHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXhPZkN1
cnJlbnRSdW4gPSAwOwotICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0
ZXJMZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCBmYWxzZSkuZm9udERhdGE7Ci0gICAgVUVycm9yQ29kZSBlcnJvckNvZGUgPSBVX1pFUk9f
RVJST1I7Ci0gICAgVVNjcmlwdENvZGUgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNo
YXJhY3RlciwgJmVycm9yQ29kZSk7Ci0gICAgaWYgKFVfRkFJTFVSRShlcnJvckNvZGUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjdXJy
ZW50Q2hhcmFjdGVyUG9zaXRpb24gPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAg
ICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2NyaXB0OwotCi0gICAgICAgIGZv
ciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuY29uc3VtZShjaGFy
YWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpKSB7
Ci0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3Rlcikp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChVX0dFVF9HQ19N
QVNLKGNoYXJhY3RlcikgJiBVX0dDX01fTUFTSykgewotICAgICAgICAgICAgICAgIGludCBtYXJr
TGVuZ3RoID0gY2x1c3Rlckxlbmd0aDsKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogbWFy
a0NoYXJhY3RlcnNFbmQgPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCkgKyBjbHVzdGVyTGVuZ3RoOwot
ICAgICAgICAgICAgICAgIHdoaWxlIChtYXJrQ2hhcmFjdGVyc0VuZCA8IG5vcm1hbGl6ZWRCdWZm
ZXJFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOwotICAg
ICAgICAgICAgICAgICAgICBpbnQgbmV4dENoYXJhY3Rlckxlbmd0aCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIFUxNl9ORVhUKG1hcmtDaGFyYWN0ZXJzRW5kLCBuZXh0Q2hhcmFjdGVyTGVuZ3Ro
LCBub3JtYWxpemVkQnVmZmVyRW5kIC0gbWFya0NoYXJhY3RlcnNFbmQsIG5leHRDaGFyYWN0ZXIp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIShVX0dFVF9HQ19NQVNLKG5leHRDaGFyYWN0ZXIp
ICYgVV9HQ19NX01BU0spKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIG1hcmtMZW5ndGggKz0gbmV4dENoYXJhY3Rlckxlbmd0aDsKLSAgICAgICAg
ICAgICAgICAgICAgbWFya0NoYXJhY3RlcnNFbmQgKz0gbmV4dENoYXJhY3Rlckxlbmd0aDsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhLT5j
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjdXJyZW50Q2hhcmFjdGVyUG9zaXRp
b24sIG1hcmtDaGFyYWN0ZXJzRW5kIC0gY3VycmVudENoYXJhY3RlclBvc2l0aW9uKSkgewotICAg
ICAgICAgICAgICAgICAgICBjbHVzdGVyTGVuZ3RoID0gbWFya0xlbmd0aDsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5l
eHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFs
c2UpLmZvbnREYXRhOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbmV4dEZv
bnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSku
Zm9udERhdGE7Ci0KLSAgICAgICAgICAgIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChj
aGFyYWN0ZXIsICZlcnJvckNvZGUpOwotICAgICAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvckNv
ZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICgobmV4
dEZvbnREYXRhICE9IGN1cnJlbnRGb250RGF0YSkgfHwgKChjdXJyZW50U2NyaXB0ICE9IG5leHRT
Y3JpcHQpICYmIChuZXh0U2NyaXB0ICE9IFVTQ1JJUFRfSU5IRVJJVEVEKSAmJiAoIXVzY3JpcHRf
aGFzU2NyaXB0KGNoYXJhY3RlciwgY3VycmVudFNjcmlwdCkpKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChuZXh0U2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVEKQot
ICAgICAgICAgICAgICAgIG5leHRTY3JpcHQgPSBjdXJyZW50U2NyaXB0OwotICAgICAgICAgICAg
Y3VycmVudENoYXJhY3RlclBvc2l0aW9uID0gaXRlcmF0b3IuY2hhcmFjdGVycygpOwotICAgICAg
ICB9Ci0gICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4gPSBpdGVyYXRv
ci5jdXJyZW50Q2hhcmFjdGVyKCkgLSBzdGFydEluZGV4T2ZDdXJyZW50UnVuOwotICAgICAgICBo
Yl9zY3JpcHRfdCBzY3JpcHQgPSBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdChjdXJyZW50U2NyaXB0
KTsKLSAgICAgICAgbV9oYXJmYnV6elJ1bnMuYXBwZW5kKEhhcmZCdXp6UnVuOjpjcmVhdGUoY3Vy
cmVudEZvbnREYXRhLCBzdGFydEluZGV4T2ZDdXJyZW50UnVuLCBudW1DaGFyYWN0ZXJzT2ZDdXJy
ZW50UnVuLCBtX3J1bi5kaXJlY3Rpb24oKSwgc2NyaXB0KSk7Ci0gICAgICAgIGN1cnJlbnRGb250
RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAgICAgc3RhcnRJbmRleE9mQ3VycmVudFJ1biA9IGl0
ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsKLSAgICB9IHdoaWxlIChpdGVyYXRvci5jb25zdW1l
KGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpOwotCi0gICAgcmV0dXJuICFtX2hhcmZidXp6UnVu
cy5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5z
KGJvb2wgc2hvdWxkU2V0RGlyZWN0aW9uKQotewotICAgIEhhcmZCdXp6U2NvcGVkUHRyPGhiX2J1
ZmZlcl90PiBoYXJmYnV6ekJ1ZmZlcihoYl9idWZmZXJfY3JlYXRlKCksIGhiX2J1ZmZlcl9kZXN0
cm95KTsKLQotICAgIGhiX2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyhoYXJmYnV6ekJ1ZmZlci5n
ZXQoKSwgaGJfaWN1X2dldF91bmljb2RlX2Z1bmNzKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1faGFyZmJ1enpSdW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IHJ1bkluZGV4ID0gbV9ydW4ucnRsKCkgPyBtX2hhcmZidXp6UnVucy5zaXplKCkgLSBpIC0gMSA6
IGk7Ci0gICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJmYnV6elJ1bnNbcnVu
SW5kZXhdLmdldCgpOwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogY3VycmVudEZvbnRE
YXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKLQotICAgICAgICBoYl9idWZmZXJfc2V0X3Nj
cmlwdChoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgY3VycmVudFJ1bi0+c2NyaXB0KCkpOwotICAgICAg
ICBpZiAoc2hvdWxkU2V0RGlyZWN0aW9uKQotICAgICAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJl
Y3Rpb24oaGFyZmJ1enpCdWZmZXIuZ2V0KCksIGN1cnJlbnRSdW4tPnJ0bCgpID8gSEJfRElSRUNU
SU9OX1JUTCA6IEhCX0RJUkVDVElPTl9MVFIpOwotCi0gICAgICAgIC8vIEFkZCBhIHNwYWNlIGFz
IHByZS1jb250ZXh0IHRvIHRoZSBidWZmZXIuIFRoaXMgcHJldmVudHMgc2hvd2luZyBkb3R0ZWQt
Y2lyY2xlCi0gICAgICAgIC8vIGZvciBjb21iaW5pbmcgbWFya3MgYXQgdGhlIGJlZ2lubmluZyBv
ZiBydW5zLgotICAgICAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgcHJlQ29udGV4dCA9ICcgJzsK
LSAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgJnByZUNv
bnRleHQsIDEsIDEsIDApOwotCi0gICAgICAgIGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYg
dV9pc2xvd2VyKG1fbm9ybWFsaXplZEJ1ZmZlcltjdXJyZW50UnVuLT5zdGFydEluZGV4KCldKSkg
ewotICAgICAgICAgICAgU3RyaW5nIHVwcGVyVGV4dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZm
ZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5zdGFydEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJh
Y3RlcnMoKSk7Ci0gICAgICAgICAgICB1cHBlclRleHQubWFrZVVwcGVyKCk7Ci0gICAgICAgICAg
ICBjdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcih1cHBlclRl
eHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250RGF0YTsKLSAgICAgICAgICAgIGhi
X2J1ZmZlcl9hZGRfdXRmMTYoaGFyZmJ1enpCdWZmZXIuZ2V0KCksIHVwcGVyVGV4dC5jaGFyYWN0
ZXJzKCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVtQ2hh
cmFjdGVycygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBoYl9idWZmZXJfYWRkX3V0
ZjE2KGhhcmZidXp6QnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJy
ZW50UnVuLT5zdGFydEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3Vy
cmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKTsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBw
bGF0Zm9ybURhdGEgPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmY3VycmVudEZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgICAgIEhhcmZCdXp6TkdGYWNlKiBmYWNlID0gcGxh
dGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKTsKLSAgICAgICAgaWYgKCFmYWNlKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpCi0gICAgICAgICAgICBmYWNlLT5zZXRTY3JpcHRG
b3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhhcmZidXp6QnVmZmVyLmdldCgpKTsKLQotICAg
ICAgICBIYXJmQnV6elNjb3BlZFB0cjxoYl9mb250X3Q+IGhhcmZidXp6Rm9udChmYWNlLT5jcmVh
dGVGb250KCksIGhiX2ZvbnRfZGVzdHJveSk7Ci0KLSAgICAgICAgaGJfc2hhcGUoaGFyZmJ1enpG
b250LmdldCgpLCBoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgbV9mZWF0dXJlcy5pc0VtcHR5KCkgPyAw
IDogbV9mZWF0dXJlcy5kYXRhKCksIG1fZmVhdHVyZXMuc2l6ZSgpKTsKLQotICAgICAgICBjdXJy
ZW50UnVuLT5hcHBseVNoYXBlUmVzdWx0KGhhcmZidXp6QnVmZmVyLmdldCgpKTsKLSAgICAgICAg
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihjdXJyZW50UnVuLCBoYXJmYnV6ekJ1ZmZl
ci5nZXQoKSk7Ci0KLSAgICAgICAgaGJfYnVmZmVyX3Jlc2V0KGhhcmZidXp6QnVmZmVyLmdldCgp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBIYXJmQnV6elNoYXBlcjo6
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3VycmVudFJ1biwg
aGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQotewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOwotICAgIGhiX2dseXBo
X2luZm9fdCogZ2x5cGhJbmZvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5mb3MoaGFyZmJ1enpC
dWZmZXIsIDApOwotICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QqIGdseXBoUG9zaXRpb25zID0gaGJf
YnVmZmVyX2dldF9nbHlwaF9wb3NpdGlvbnMoaGFyZmJ1enpCdWZmZXIsIDApOwotCi0gICAgdW5z
aWduZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7Ci0gICAgdWludDE2X3Qq
IGdseXBoVG9DaGFyYWN0ZXJJbmRleGVzID0gY3VycmVudFJ1bi0+Z2x5cGhUb0NoYXJhY3Rlcklu
ZGV4ZXMoKTsKLSAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOwotCi0gICAgLy8gSGFyZkJ1enog
cmV0dXJucyB0aGUgc2hhcGluZyByZXN1bHQgaW4gdmlzdWFsIG9yZGVyLiBXZSBuZWVkIG5vdCB0
byBmbGlwIGZvciBSVEwuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgewotICAgICAgICBib29sIHJ1bkVuZCA9IGkgKyAxID09IG51bUdseXBoczsKLSAgICAgICAg
dWludDE2X3QgZ2x5cGggPSBnbHlwaEluZm9zW2ldLmNvZGVwb2ludDsKLSAgICAgICAgZmxvYXQg
b2Zmc2V0WCA9IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfb2Zm
c2V0KTsKLSAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IC1oYXJmYnV6elBvc2l0aW9uVG9GbG9hdChn
bHlwaFBvc2l0aW9uc1tpXS55X29mZnNldCk7Ci0gICAgICAgIGZsb2F0IGFkdmFuY2UgPSBoYXJm
YnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpXS54X2FkdmFuY2UpOwotCi0gICAg
ICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IGN1cnJlbnRSdW4tPnN0YXJ0SW5k
ZXgoKSArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKLSAgICAgICAgYm9vbCBpc0NsdXN0ZXJFbmQg
PSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5mb3NbaSArIDFdLmNs
dXN0ZXI7Ci0gICAgICAgIGZsb2F0IHNwYWNpbmcgPSAwOwotCi0gICAgICAgIGdseXBoVG9DaGFy
YWN0ZXJJbmRleGVzW2ldID0gZ2x5cGhJbmZvc1tpXS5jbHVzdGVyOwotCi0gICAgICAgIGlmIChp
c0NsdXN0ZXJFbmQgJiYgIUZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShtX25vcm1hbGl6ZWRC
dWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4XSkpCi0gICAgICAgICAgICBzcGFjaW5nICs9IG1f
bGV0dGVyU3BhY2luZzsKLQotICAgICAgICBpZiAoaXNDbHVzdGVyRW5kICYmIGlzV29yZEVuZChj
dXJyZW50Q2hhcmFjdGVySW5kZXgpKQotICAgICAgICAgICAgc3BhY2luZyArPSBkZXRlcm1pbmVX
b3JkQnJlYWtTcGFjaW5nKCk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+aXNaZXJv
V2lkdGhTcGFjZUdseXBoKGdseXBoKSkgewotICAgICAgICAgICAgY3VycmVudFJ1bi0+c2V0R2x5
cGhBbmRQb3NpdGlvbnMoaSwgZ2x5cGgsIDAsIDAsIDApOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBhZHZhbmNlICs9IHNwYWNpbmc7Ci0gICAgICAgIGlmICht
X3J1bi5ydGwoKSkgewotICAgICAgICAgICAgLy8gSW4gUlRMLCBzcGFjaW5nIHNob3VsZCBiZSBh
ZGRlZCB0byBsZWZ0IHNpZGUgb2YgZ2x5cGhzLgotICAgICAgICAgICAgb2Zmc2V0WCArPSBzcGFj
aW5nOwotICAgICAgICAgICAgaWYgKCFpc0NsdXN0ZXJFbmQpCi0gICAgICAgICAgICAgICAgb2Zm
c2V0WCArPSBtX2xldHRlclNwYWNpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50UnVu
LT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgYWR2YW5jZSwgb2Zmc2V0WCwgb2Zmc2V0
WSk7Ci0KLSAgICAgICAgdG90YWxBZHZhbmNlICs9IGFkdmFuY2U7Ci0gICAgfQotICAgIGN1cnJl
bnRSdW4tPnNldFdpZHRoKHRvdGFsQWR2YW5jZSA+IDAuMCA/IHRvdGFsQWR2YW5jZSA6IDAuMCk7
Ci0gICAgbV90b3RhbFdpZHRoICs9IGN1cnJlbnRSdW4tPndpZHRoKCk7Ci19Ci0KLXZvaWQgSGFy
ZkJ1enpTaGFwZXI6OmZpbGxHbHlwaEJ1ZmZlckZyb21IYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIsIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuLCBGbG9hdFBvaW50JiBmaXJzdE9m
ZnNldE9mTmV4dFJ1bikKLXsKLSAgICBGbG9hdFBvaW50KiBvZmZzZXRzID0gY3VycmVudFJ1bi0+
b2Zmc2V0cygpOwotICAgIHVpbnQxNl90KiBnbHlwaHMgPSBjdXJyZW50UnVuLT5nbHlwaHMoKTsK
LSAgICBmbG9hdCogYWR2YW5jZXMgPSBjdXJyZW50UnVuLT5hZHZhbmNlcygpOwotICAgIHVuc2ln
bmVkIG51bUdseXBocyA9IGN1cnJlbnRSdW4tPm51bUdseXBocygpOwotICAgIHVpbnQxNl90KiBn
bHlwaFRvQ2hhcmFjdGVySW5kZXhlcyA9IGN1cnJlbnRSdW4tPmdseXBoVG9DaGFyYWN0ZXJJbmRl
eGVzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
LSAgICAgICAgdWludDE2X3QgY3VycmVudENoYXJhY3RlckluZGV4ID0gY3VycmVudFJ1bi0+c3Rh
cnRJbmRleCgpICsgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV07Ci0gICAgICAgIEZsb2F0UG9p
bnQmIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXRzW2ldOwotICAgICAgICBGbG9hdFBvaW50JiBuZXh0
T2Zmc2V0ID0gKGkgPT0gbnVtR2x5cGhzIC0gMSkgPyBmaXJzdE9mZnNldE9mTmV4dFJ1biA6IG9m
ZnNldHNbaSArIDFdOwotICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VYID0gYWR2YW5jZXNbaV0g
KyBuZXh0T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpOwotICAgICAgICBmbG9hdCBnbHlw
aEFkdmFuY2VZID0gbmV4dE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKTsKLSAgICAgICAg
aWYgKG1fcnVuLnJ0bCgpKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlckluZGV4
ID4gbV90b0luZGV4KQotICAgICAgICAgICAgICAgIG1fc3RhcnRPZmZzZXQubW92ZShnbHlwaEFk
dmFuY2VYLCBnbHlwaEFkdmFuY2VZKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFy
YWN0ZXJJbmRleCA+PSBtX2Zyb21JbmRleCkKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGdseXBoc1tpXSwgY3VycmVudFJ1bi0+Zm9udERhdGEoKSwgY3JlYXRlR2x5cGhCdWZmZXJB
ZHZhbmNlKGdseXBoQWR2YW5jZVgsIGdseXBoQWR2YW5jZVkpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXggPCBtX2Zyb21JbmRleCkKLSAg
ICAgICAgICAgICAgICBtX3N0YXJ0T2Zmc2V0Lm1vdmUoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZh
bmNlWSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXggPCBtX3Rv
SW5kZXgpCi0gICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaHNbaV0sIGN1cnJl
bnRSdW4tPmZvbnREYXRhKCksIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShnbHlwaEFkdmFuY2VY
LCBnbHlwaEFkdmFuY2VZKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgSGFyZkJ1enpT
aGFwZXI6OmZpbGxHbHlwaEJ1ZmZlcihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAg
dW5zaWduZWQgbnVtUnVucyA9IG1faGFyZmJ1enpSdW5zLnNpemUoKTsKLSAgICBpZiAobV9ydW4u
cnRsKCkpIHsKLSAgICAgICAgbV9zdGFydE9mZnNldCA9IG1faGFyZmJ1enpSdW5zLmxhc3QoKS0+
b2Zmc2V0cygpWzBdOwotICAgICAgICBmb3IgKGludCBydW5JbmRleCA9IG51bVJ1bnMgLSAxOyBy
dW5JbmRleCA+PSAwOyAtLXJ1bkluZGV4KSB7Ci0gICAgICAgICAgICBIYXJmQnV6elJ1biogY3Vy
cmVudFJ1biA9IG1faGFyZmJ1enpSdW5zW3J1bkluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEZs
b2F0UG9pbnQgZmlyc3RPZmZzZXRPZk5leHRSdW4gPSAhcnVuSW5kZXggPyBGbG9hdFBvaW50KCkg
OiBtX2hhcmZidXp6UnVuc1tydW5JbmRleCAtIDFdLT5vZmZzZXRzKClbMF07Ci0gICAgICAgICAg
ICBmaWxsR2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIsIGN1cnJlbnRSdW4s
IGZpcnN0T2Zmc2V0T2ZOZXh0UnVuKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fc3RhcnRPZmZzZXQgPSBtX2hhcmZidXp6UnVucy5maXJzdCgpLT5vZmZzZXRzKClbMF07Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgcnVuSW5kZXggPSAwOyBydW5JbmRleCA8IG51bVJ1bnM7ICsr
cnVuSW5kZXgpIHsKLSAgICAgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJm
YnV6elJ1bnNbcnVuSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBmaXJzdE9m
ZnNldE9mTmV4dFJ1biA9IHJ1bkluZGV4ID09IG51bVJ1bnMgLSAxID8gRmxvYXRQb2ludCgpIDog
bV9oYXJmYnV6elJ1bnNbcnVuSW5kZXggKyAxXS0+b2Zmc2V0cygpWzBdOwotICAgICAgICAgICAg
ZmlsbEdseXBoQnVmZmVyRnJvbUhhcmZCdXp6UnVuKGdseXBoQnVmZmVyLCBjdXJyZW50UnVuLCBm
aXJzdE9mZnNldE9mTmV4dFJ1bik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGdseXBo
QnVmZmVyLT5zaXplKCk7Ci19Ci0KLWludCBIYXJmQnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRp
b24oZmxvYXQgdGFyZ2V0WCkKLXsKLSAgICBpbnQgY2hhcmFjdGVyc1NvRmFyID0gMDsKLSAgICBm
bG9hdCBjdXJyZW50WCA9IDA7Ci0KLSAgICBpZiAobV9ydW4ucnRsKCkpIHsKLSAgICAgICAgY2hh
cmFjdGVyc1NvRmFyID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOwotICAgICAgICBmb3IgKGlu
dCBpID0gbV9oYXJmYnV6elJ1bnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
ICAgIGNoYXJhY3RlcnNTb0ZhciAtPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygp
OwotICAgICAgICAgICAgZmxvYXQgbmV4dFggPSBjdXJyZW50WCArIG1faGFyZmJ1enpSdW5zW2ld
LT53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgb2Zmc2V0Rm9yUnVuID0gdGFyZ2V0WCAtIGN1
cnJlbnRYOwotICAgICAgICAgICAgaWYgKG9mZnNldEZvclJ1biA+PSAwICYmIG9mZnNldEZvclJ1
biA8PSBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKSkgewotICAgICAgICAgICAgICAgIC8vIFRo
ZSB4IHZhbHVlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiB0aGlzIHNjcmlwdCBydW4uCi0gICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW5kZXggPSBtX2hhcmZidXp6UnVuc1tpXS0+Y2hhcmFj
dGVySW5kZXhGb3JYUG9zaXRpb24ob2Zmc2V0Rm9yUnVuKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
dXJyZW50WCA9IG5leHRYOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZmJ1enpSdW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBmbG9hdCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7
Ci0gICAgICAgICAgICBmbG9hdCBvZmZzZXRGb3JSdW4gPSB0YXJnZXRYIC0gY3VycmVudFg7Ci0g
ICAgICAgICAgICBpZiAob2Zmc2V0Rm9yUnVuID49IDAgJiYgb2Zmc2V0Rm9yUnVuIDw9IG1faGFy
ZmJ1enpSdW5zW2ldLT53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW5kZXggPSBtX2hhcmZidXp6UnVuc1tpXS0+Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24ob2Zm
c2V0Rm9yUnVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5k
ZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzU29GYXIgKz0gbV9oYXJm
YnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGN1cnJlbnRYID0gbmV4
dFg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyOwotfQot
Ci1GbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pCi17Ci0gICAgZmxvYXQgY3Vy
cmVudFggPSAwOwotICAgIGZsb2F0IGZyb21YID0gMDsKLSAgICBmbG9hdCB0b1ggPSAwOwotICAg
IGJvb2wgZm91bmRGcm9tWCA9IGZhbHNlOwotICAgIGJvb2wgZm91bmRUb1ggPSBmYWxzZTsKLQot
ICAgIGlmIChtX3J1bi5ydGwoKSkKLSAgICAgICAgY3VycmVudFggPSBtX3RvdGFsV2lkdGg7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZmJ1enpSdW5zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX3J1bi5ydGwoKSkKLSAgICAgICAgICAgIGN1cnJlbnRYIC09IG1faGFy
ZmJ1enpSdW5zW2ldLT53aWR0aCgpOwotICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFy
ZmJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGlmICghZm91bmRGcm9tWCAm
JiBmcm9tID49IDAgJiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpIHsKLSAgICAgICAgICAgIGZyb21Y
ID0gbV9oYXJmYnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldChmcm9tKSArIGN1cnJlbnRY
OwotICAgICAgICAgICAgZm91bmRGcm9tWCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOwotCi0gICAgICAgIGlmICghZm91bmRUb1ggJiYg
dG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpIHsKLSAgICAgICAgICAgIHRvWCA9IG1faGFy
ZmJ1enpSdW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQodG8pICsgY3VycmVudFg7Ci0gICAgICAg
ICAgICBmb3VuZFRvWCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdG8gLT0g
bnVtQ2hhcmFjdGVyczsKLQotICAgICAgICBpZiAoZm91bmRGcm9tWCAmJiBmb3VuZFRvWCkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIW1fcnVuLnJ0bCgpKQotICAgICAgICAgICAg
Y3VycmVudFggKz0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7Ci0gICAgfQotCi0gICAgLy8g
VGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQuCi0g
ICAgaWYgKCFmb3VuZEZyb21YKQotICAgICAgICBmcm9tWCA9IDA7Ci0gICAgaWYgKCFmb3VuZFRv
WCkKLSAgICAgICAgdG9YID0gbV9ydW4ucnRsKCkgPyAwIDogbV90b3RhbFdpZHRoOwotCi0gICAg
Ly8gVXNpbmcgZmxvb3JmKCkgYW5kIHJvdW5kZigpIGFzIHRoZSBzYW1lIGFzIG1hYyBwb3J0Lgot
ICAgIGlmIChmcm9tWCA8IHRvWCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9p
bnQueCgpICsgZnJvbVgpLCBwb2ludC55KCksIHJvdW5kZih0b1ggLSBmcm9tWCksIGhlaWdodCk7
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgdG9YKSwgcG9pbnQueSgp
LCByb3VuZGYoZnJvbVggLSB0b1gpLCBoZWlnaHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6elNoYXBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTJlZDE5MTFkODliNzJiZjdkMTBjMzZlNjFiOGY4YTFmZWE3NWMzMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEhhcmZCdXp6U2hhcGVyX2gKLSNkZWZpbmUgSGFyZkJ1enpT
aGFwZXJfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXJCYXNlLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5o
IgotI2luY2x1ZGUgImhiLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udDsKLWNsYXNzIFNp
bXBsZUZvbnREYXRhOwotCi1jbGFzcyBIYXJmQnV6elNoYXBlciA6IHB1YmxpYyBIYXJmQnV6elNo
YXBlckJhc2UgewotcHVibGljOgotICAgIEhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnQqLCBjb25z
dCBUZXh0UnVuJik7Ci0gICAgdmlydHVhbCB+SGFyZkJ1enpTaGFwZXIoKTsKLQotICAgIHZvaWQg
c2V0RHJhd1JhbmdlKGludCBmcm9tLCBpbnQgdG8pOwotICAgIGJvb2wgc2hhcGUoR2x5cGhCdWZm
ZXIqID0gMCk7Ci0gICAgRmxvYXRQb2ludCBhZGp1c3RTdGFydFBvaW50KGNvbnN0IEZsb2F0UG9p
bnQmKTsKLSAgICBmbG9hdCB0b3RhbFdpZHRoKCkgeyByZXR1cm4gbV90b3RhbFdpZHRoOyB9Ci0g
ICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdldFgpOwotICAgIEZsb2F0UmVjdCBz
ZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50
IHRvKTsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBIYXJmQnV6elJ1biB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRlKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hh
cmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGhiX3NjcmlwdF90IHNjcmlwdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIYXJmQnV6elJ1bihmb250
RGF0YSwgc3RhcnRJbmRleCwgbnVtQ2hhcmFjdGVycywgZGlyZWN0aW9uLCBzY3JpcHQpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlTaGFwZVJlc3VsdChoYl9idWZmZXJfdCopOwot
ICAgICAgICB2b2lkIHNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGluZGV4LCB1aW50MTZf
dCBnbHlwaElkLCBmbG9hdCBhZHZhbmNlLCBmbG9hdCBvZmZzZXRYLCBmbG9hdCBvZmZzZXRZKTsK
LSAgICAgICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0K
LQotICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7
Ci0gICAgICAgIGZsb2F0IHhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpOwotCi0g
ICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERh
dGE7IH0KLSAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnRJbmRleDsgfQotICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1DaGFyYWN0ZXJzOyB9Ci0gICAgICAgIHVuc2lnbmVkIG51bUdseXBocygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtR2x5cGhzOyB9Ci0gICAgICAgIHVpbnQxNl90KiBnbHlwaHMoKSB7IHJl
dHVybiAmbV9nbHlwaHNbMF07IH0KLSAgICAgICAgZmxvYXQqIGFkdmFuY2VzKCkgeyByZXR1cm4g
Jm1fYWR2YW5jZXNbMF07IH0KLSAgICAgICAgRmxvYXRQb2ludCogb2Zmc2V0cygpIHsgcmV0dXJu
ICZtX29mZnNldHNbMF07IH0KLSAgICAgICAgdWludDE2X3QqIGdseXBoVG9DaGFyYWN0ZXJJbmRl
eGVzKCkgeyByZXR1cm4gJm1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbMF07IH0KLSAgICAgICAg
ZmxvYXQgd2lkdGgoKSB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgICAgIGJvb2wgcnRsKCkgeyBy
ZXR1cm4gbV9kaXJlY3Rpb24gPT0gUlRMOyB9Ci0gICAgICAgIGhiX3NjcmlwdF90IHNjcmlwdCgp
IHsgcmV0dXJuIG1fc2NyaXB0OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBIYXJmQnV6elJ1
bihjb25zdCBTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51
bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24sIGhiX3NjcmlwdF90KTsKLQotICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YTsKLSAgICAgICAgdW5zaWduZWQgbV9zdGFydElu
ZGV4OwotICAgICAgICBzaXplX3QgbV9udW1DaGFyYWN0ZXJzOwotICAgICAgICB1bnNpZ25lZCBt
X251bUdseXBoczsKLSAgICAgICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICAgICAg
aGJfc2NyaXB0X3QgbV9zY3JpcHQ7Ci0gICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2ds
eXBoczsKLSAgICAgICAgVmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7Ci0gICAgICAgIFZl
Y3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzOwotICAgICAgICBW
ZWN0b3I8RmxvYXRQb2ludCwgMjU2PiBtX29mZnNldHM7Ci0gICAgICAgIGZsb2F0IG1fd2lkdGg7
Ci0gICAgfTsKLQotICAgIHZvaWQgc2V0Rm9udEZlYXR1cmVzKCk7Ci0KLSAgICBib29sIGNvbGxl
Y3RIYXJmQnV6elJ1bnMoKTsKLSAgICBib29sIHNoYXBlSGFyZkJ1enpSdW5zKGJvb2wgc2hvdWxk
U2V0RGlyZWN0aW9uKTsKLSAgICBib29sIGZpbGxHbHlwaEJ1ZmZlcihHbHlwaEJ1ZmZlciopOwot
ICAgIHZvaWQgZmlsbEdseXBoQnVmZmVyRnJvbUhhcmZCdXp6UnVuKEdseXBoQnVmZmVyKiwgSGFy
ZkJ1enpSdW4qLCBGbG9hdFBvaW50JiBmaXJzdE9mZnNldE9mTmV4dFJ1bik7Ci0gICAgdm9pZCBz
ZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEhhcmZCdXp6UnVuKiwgaGJfYnVmZmVyX3Qq
KTsKLQotICAgIEdseXBoQnVmZmVyQWR2YW5jZSBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxv
YXQsIGZsb2F0KTsKLQotICAgIFZlY3RvcjxoYl9mZWF0dXJlX3QsIDQ+IG1fZmVhdHVyZXM7Ci0g
ICAgVmVjdG9yPE93blB0cjxIYXJmQnV6elJ1bj4sIDE2PiBtX2hhcmZidXp6UnVuczsKLQotICAg
IEZsb2F0UG9pbnQgbV9zdGFydE9mZnNldDsKLQotICAgIGludCBtX2Zyb21JbmRleDsKLSAgICBp
bnQgbV90b0luZGV4OwotCi0gICAgZmxvYXQgbV90b3RhbFdpZHRoOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSGFyZkJ1enpTaGFwZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185503</attachid>
            <date>2013-01-30 07:40:17 -0800</date>
            <delta_ts>2013-01-30 11:41:09 -0800</delta_ts>
            <desc>Patch v3, Chromium buildfix.</desc>
            <filename>bug-108170-20130130173700.patch</filename>
            <type>text/plain</type>
            <size>143741</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjNiN2IzMDkyNjZiNzAw
ZTI5YzRkMTUyYWIwZWNiYjhmYmIyNmU1Ny4uNTMzZjc1OTQ0ZGU3ODZkZDk1MDZkODJkMjI2OTIz
ZjhiNTdlMzVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1NyBAQAogMjAxMy0wMS0zMCAgRG9t
aW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5yb3R0c2NoZXNAaW50ZWwuY29tPgogCisgICAgICAg
IFtIYXJmQnV6el0gTmFtaW5nIGZpeGVzIGFmdGVyIHJlbW92aW5nIG9sZCBIYXJmQnV6eiBjb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgxNzAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSB0
aGUgb2xkIGhhcmZidXp6IGNvZGUgaXMgZ29uZSBpbiByMTQxMjQxLCBpdCBtYWtlcyBzZW5zZSB0
byBnZXQgcmlkCisgICAgICAgIG9mIHRoZSBub3cgdW5uZWNlc3NyYXkgTkcgc3VmZml4IGluIGEg
bnVtYmVyIG9mIHBsYWNlcy4gV2hpbGUgYXQgaXQsCisgICAgICAgIEkgYW0gYWxzbyBmaXhpbmcg
c29tZSBuYW1pbmcgaW5jb25zaXN0ZW5jaWVzLgorCisgICAgICAgIFJlbmFtZWQgYWxsIG9jY3Vy
ZW5jZXMgb2YgSGFyZkJ1enpORyogdG8gSGFyZkJ1enoqLAorICAgICAgICByZW5hbWVkIGxvd2Vy
Y2FzZSB2YXJpYW50cyBvZiBoYXJmYnV6eiogaW4gdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVz
IHRvIGNhbWVsLWNhc2UgaGFyZkJ1enoqLAorICAgICAgICBtb3ZlZCBmaWxlcyBpbiBwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy8qIG9uZSBsZXZlbCB1cCBhbmQgcmVtb3ZlZCBuZyBmb2xk
ZXIuCisgICAgICAgIFVwZGF0ZWQgY29ycmVzcG9uZGluZyBlbnRyaWVzIGluIENocm9taXVtLCBH
VEsgYW5kIEVGTCBidWlsZCBzeXN0ZW0gZmlsZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBu
byBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnBsYXRm
b3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZv
cm1EYXRhQXNzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZC
dXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRm
b3JtRGF0YS5oOgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZCdXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZCdXp6RmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6Lmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZhY2VDYWNoZUVudHJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZhY2VDYWNoZUVudHJ5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmFjZUNh
Y2hlRW50cnk6On5GYWNlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGYWNlQ2FjaGVF
bnRyeTo6ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGYWNlQ2FjaGVFbnRyeTo6Z2x5cGhDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGYWNlQ2FjaGVFbnRyeTo6RmFjZUNhY2hlRW50cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6aGFyZkJ1enpGYWNlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6
SGFyZkJ1enpGYWNlOjpIYXJmQnV6ekZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpG
YWNlOjp+SGFyZkJ1enpGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRTY3JpcHRGb3JWZXJ0
aWNhbEdseXBoU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6
c2V0U2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIYXJmQnV6ekZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ2Fpcm8uY3Bw
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDYWlyb0Z0RmFjZUxvY2tlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlyb0Z0RmFjZUxvY2tlcjo6Q2Fpcm9GdEZhY2VMb2NrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2Fpcm9GdEZhY2VMb2NrZXI6OmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6Q2Fpcm9GdEZhY2VMb2NrZXI6On5DYWlyb0Z0RmFjZUxvY2tlcik6CisgICAgICAgIChXZWJD
b3JlOjpmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpkb3VibGVU
b0hhcmZCdXp6UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm9HZXRHbHlwaFdpZHRo
QW5kRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoKToKKyAgICAg
ICAgKFdlYkNvcmU6OmhhcmZCdXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpoYXJm
QnV6ekNhaXJvVGV4dEdldEZvbnRGdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekNh
aXJvR2V0VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3JlVGV4dC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGhIb3Jpem9udGFsQWR2YW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0R2x5cGhFeHRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZidXp6
Q29yZVRleHRHZXRGb250RnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZVRhYmxlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekNvcmVUZXh0R2V0VGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VTa2lhLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5j
cHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6Rm9udERh
dGE6OkhhcmZCdXp6Rm9udERhdGEpOgorICAgICAgICAoSGFyZkJ1enpGb250RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTa2lhU2NhbGFyVG9IYXJmQnV6elBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpo
YXJmQnV6ekdldEdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6R2V0R2x5cGhIb3Jp
em9udGFsQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoSG9yaXpv
bnRhbE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoRXh0ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6elNraWFHZXRGb250RnVuY3MpOgorICAgICAgICAo
V2ViQ29yZTo6aGFyZkJ1enpTa2lhR2V0VGFibGUpOiBBbHNvIGZpeGVkIHN0eWxlIGNoZWNrZXIg
d2hpdGVzcGFjZSBjb21wbGFpbnQgLyBpbmRlbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmRl
c3Ryb3lIYXJmQnV6ekZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6RmFjZTo6
Y3JlYXRlRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2
YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChIYXJmQnV6elNjb3BlZFB0cik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNjb3BlZFB0
cjo6SGFyZkJ1enpTY29wZWRQdHIpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTY29wZWRQ
dHI6On5IYXJmQnV6elNjb3BlZFB0cik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNjb3Bl
ZFB0cjo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZCdXp6UG9zaXRpb25Ub0Zsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFyZkJ1enpS
dW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphcHBs
eVNoYXBlUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elJ1bjo6c2V0R2x5cGhBbmRQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpT
aGFwZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hhcGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okhh
cmZCdXp6U2hhcGVyOjpzZXREcmF3UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpT
aGFwZXI6OnNldEZvbnRGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmFkanVzdFN0YXJ0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6
elJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpS
dW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9u
c0ZvckhhcmZCdXp6UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpmaWxs
R2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpT
aGFwZXI6OmZpbGxHbHlwaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6b2Zmc2V0Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChIYXJmQnV6elNoYXBlcik6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6dG90YWxXaWR0aCk6CisgICAgICAgIChIYXJmQnV6elJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldFdpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Zm9udERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzdGFydEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6bnVtQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46Om51bUdseXBocyk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmdseXBocyk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFkdmFuY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6b2Zmc2V0
cyk6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmdseXBo
VG9DaGFyYWN0ZXJJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpI
YXJmQnV6elJ1bjo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjpydGwpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpzY3JpcHQpOgorCisyMDEzLTAxLTMwICBEb21pbmlrIFLDtnR0c2NoZXMgIDxkb21p
bmlrLnJvdHRzY2hlc0BpbnRlbC5jb20+CisKICAgICAgICAgW0hhcmZCdXp6XSBSZW1vdmUgdGhl
IEhhcmZCdXp6LW9sZCBjb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDgwNzcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMGZi
YTZjZGQzM2FlZWNiNjUwZjAxYWYwYTQ1ZDc0MjMyM2UyMDEwOS4uZmVkYjZmNGVlMzFjNDAxNTgw
N2Y2ODg5N2E2MzY2YWY1OWM4YTFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC00MjM4LDExICs0MjM4LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvVVRGMTZVQ2hhcjMySXRlcmF0b3IuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJC
YXNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpTaGFwZXJCYXNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hh
cGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcv
SGFyZkJ1enpTaGFwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpGYWNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
bnBydW50aW1lLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnB0eXBlcy5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZjUxNzljNjAxNWMxZTAzMGNlNTc0NDFlMjY4Y2JjYjA5
MDAyYjk2Mi4uMzQzMjE1ZTlkZDBlZThkNmRhMGU5NDM4YTA3OGFiNDk4MzQ1ODU5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEyNyw5ICsxMjcsOSBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291
cmNlR1N0cmVhbWVyLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTaGFwZXJCYXNlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6TkdGYWNlQ2Fpcm8uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2UuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpTaGFwZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNl
Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAogCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGYxY2JlM2YwZWMxNjZlMTcxNmI5OTVjYTVjMjk3
Y2U3ZTIyNDI1NjAuLjA5MDRlYWVmYmJlODgwYmIyMTNkYzYxYTE0MjNiMDU2M2NiNGNhMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xNzE1LDEwICsxNzE1LDEw
IEBACiAgICAgICAgICAgICAjIENoZXJyeS1waWNrIGZpbGVzIGV4Y2x1ZGVkIGJ5IHRoZSBicm9h
ZGVyIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYWJvdmUuCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6XFwuY3BwJCddLAogICAgICAg
ICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9y
bURhdGFIYXJmQnV6elxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VcXC4oY3BwfGgpJCddLAorICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZVNr
aWFcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpTaGFwZXJcXC4oY3BwfGgpJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZVxcLihj
cHB8aCkkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VcXC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYVxc
LmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6elNoYXBlclxcLihjcHB8aCkkJ10sCiAgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlc1xcLmgkJ10sCiAg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVWZXJ0aWNhbERhdGFcXC4oY3BwfGgpJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhXFwuY3BwJCddLApAQCAtMTg1
NiwxMSArMTg1NiwxMSBAQAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhXFwuY3BwJCddLAogICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhXFwuY3Bw
JCddLAogCi0gICAgICAgICAgICAjIE1hYyB1c2VzIEhhcmZidXp6LW5nLgorICAgICAgICAgICAg
IyBNYWMgdXNlcyBIYXJmYnV6ei4KKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3JlVGV4dFxcLmNwcCQnXSwKKyAgICAgICAg
ICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2Vc
XC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyXFwuKGNwcHxoKSQnXSwKICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2VcXC4o
Y3BwfGgpJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ29yZVRleHRcXC5jcHAkJ10sCi0gICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2Vc
XC4oY3BwfGgpJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyXFwuKGNwcHxoKSQnXSwKICAgICAgICAgICBdLAog
ICAgICAgICB9LHsgIyBPUyE9Im1hYyIKICAgICAgICAgICAnc291cmNlcy8nOiBbCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggMzJiZGY5YmFmM2JmY2U2MjdlMmU4ZTNjZDQ5Y2VkNTE0ZGZkZWU0Ny4uZjQw
ZmM4MDIyN2RhODJhZTFkODRmYWFmYmM0MDNlOGIyMzBiMjY2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNDA0MywxNCArNDA0MywxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3JlVGV4
dC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
RmFjZVNraWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6ekZhY2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6ekZhY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6elNoYXBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuaCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDb3JlVGV4dC5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdG
YWNlU2tpYS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6TkdGYWNlLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApp
bmRleCA0YmE3OWVjYTMzYjdkZTc1ZTMzZGI2NzEwMzdkZGQxYjU3ODQ4MjQyLi45NWFiZGFkNTJk
ZGQ2NWRhOTU5YmM4YjYyY2Q4NTRkNTcxZjFkMTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pICYmIE9TKERBUldJTikKLSNpbmNsdWRlICJIYXJmQnV6ek5HRmFjZS5oIgorI2luY2x1
ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgK
aW5kZXggODIyNDQ5MjMwYTQwNmY2YzdiNTFiNGExMDIxZmRmMjAzNmU5NmI2Yy4uMjg4NDFlNzVj
MzA3YmNjMmM0OGY2NzYyYmIxNDYxNjljNjFkNjZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtOTAsNyArOTAsNyBA
QCBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICNpZiBQTEFU
Rk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQotY2xhc3MgSGFyZkJ1enpOR0ZhY2U7CitjbGFz
cyBIYXJmQnV6ekZhY2U7CiAjZW5kaWYKIAogI2lmIE9TKERBUldJTikKQEAgLTE2NCw3ICsxNjQs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJX
SU4pCi0gICAgSGFyZkJ1enpOR0ZhY2UqIGhhcmZidXp6RmFjZSgpOworICAgIEhhcmZCdXp6RmFj
ZSogaGFyZkJ1enpGYWNlKCk7CiAjZW5kaWYKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdApA
QCAtMjY4LDcgKzI2OCw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYg
T1MoREFSV0lOKQogICAgIFJlZlB0cjxNZW1vcnlBY3RpdmF0ZWRGb250PiBtX2luTWVtb3J5Rm9u
dDsKLSAgICBSZWZQdHI8SGFyZkJ1enpOR0ZhY2U+IG1faGFyZmJ1enpGYWNlOworICAgIFJlZlB0
cjxIYXJmQnV6ekZhY2U+IG1faGFyZkJ1enpGYWNlOwogI2VuZGlmCiAKICAgICBib29sIG1faXND
b2xvckJpdG1hcEZvbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggMzgxNTE2
ZWI2OTQxOWI3OTRhYWJkZDUxZjcxZTkyMzJiNGNlOTM5Zi4uY2UzNjJiYmIxMjFiNDA1Y2MyMmE3
MzE1ZjFhN2JkNzA1ZDA3YjU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAt
MjksNyArMjksNyBAQAogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFU
Rk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQotI2ltcG9ydCAiSGFyZkJ1enpOR0ZhY2UuaCIK
KyNpbXBvcnQgIkhhcmZCdXp6RmFjZS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGYpCiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYg
T1MoREFSV0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2luTWVtb3J5Rm9udDsKLSAgICBt
X2hhcmZidXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CisgICAgbV9oYXJmQnV6ekZhY2UgPSBm
Lm1faGFyZkJ1enpGYWNlOwogI2VuZGlmCiB9CiAKQEAgLTExMSw3ICsxMTEsNyBAQCBjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFBc3NpZ24oY29u
c3QgRm9udFBsYXRmb3JtRAogICAgIG1fQ1RGb250ID0gZi5tX0NURm9udDsKICNpZiBQTEFURk9S
TShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQogICAgIG1faW5NZW1vcnlGb250ID0gZi5tX2luTWVt
b3J5Rm9udDsKLSAgICBtX2hhcmZidXp6RmFjZSA9IGYubV9oYXJmYnV6ekZhY2U7CisgICAgbV9o
YXJmQnV6ekZhY2UgPSBmLm1faGFyZkJ1enpGYWNlOwogI2VuZGlmCiAgICAgcmV0dXJuICp0aGlz
OwogfQpAQCAtMzA5LDE4ICszMDksMTggQEAgc3RhdGljIGJvb2wgaXNBQVRGb250KENURm9udFJl
ZiBjdEZvbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IYXJmQnV6ek5HRmFjZSogRm9udFBs
YXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkKK0hhcmZCdXp6RmFjZSogRm9udFBsYXRmb3JtRGF0
YTo6aGFyZkJ1enpGYWNlKCkKIHsKICAgICBDVEZvbnRSZWYgZm9udCA9IGN0Rm9udCgpOwogICAg
IC8vIEhhcmZCdXp6IGNhbid0IGhhbmRsZSBBQVQgZm9udAogICAgIGlmIChpc0FBVEZvbnQoZm9u
dCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFtX2hhcmZidXp6RmFjZSkgeworICAg
IGlmICghbV9oYXJmQnV6ekZhY2UpIHsKICAgICAgICAgdWludDY0X3QgdW5pcXVlSUQgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZm9udCk7Ci0gICAgICAgIG1faGFyZmJ1enpGYWNlID0g
SGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlz
KSwgdW5pcXVlSUQpOworICAgICAgICBtX2hhcmZCdXp6RmFjZSA9IEhhcmZCdXp6RmFjZTo6Y3Jl
YXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCB1bmlxdWVJRCk7CiAgICAg
fQotICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQoKTsKKyAgICByZXR1cm4gbV9oYXJmQnV6
ekZhY2UuZ2V0KCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDhm
ZTcwNjEyNDg5N2YzMGQ3N2I2ZjliNGRmZDYzOGY2MjY0ZWZkNGIuLmQ4ZWNmMGE0MzFmMjNkYzIy
Yjg3YWQ1Y2QyNTllMmExMjAyZTdlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTI5
LDEzICsyOSwxMyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZv
bnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiSGFy
ZkJ1enpOR0ZhY2UuaCIKKyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIKICNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hG
dW5jdGlvbnMuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0ZjRm9udFNldCBGY0ZvbnRTZXQ7Ci1jbGFz
cyBIYXJmQnV6ek5HRmFjZTsKK2NsYXNzIEhhcmZCdXp6RmFjZTsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIH5Gb250UGxhdGZvcm1EYXRh
KCk7CiAKLSAgICBIYXJmQnV6ek5HRmFjZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7CisgICAgSGFy
ZkJ1enpGYWNlKiBoYXJmQnV6ekZhY2UoKSBjb25zdDsKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNo
KCk7CiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpAQCAtMTAyLDcg
KzEwMiw3IEBAIHB1YmxpYzoKICAgICBib29sIG1fc3ludGhldGljT2JsaXF1ZTsKICAgICBib29s
IG1fZml4ZWRXaWR0aDsKICAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Ci0g
ICAgbXV0YWJsZSBSZWZQdHI8SGFyZkJ1enpOR0ZhY2U+IG1faGFyZmJ1enpGYWNlOworICAgIG11
dGFibGUgUmVmUHRyPEhhcmZCdXp6RmFjZT4gbV9oYXJmQnV6ekZhY2U7CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBpbml0aWFsaXplV2l0aEZvbnRGYWNlKGNhaXJvX2ZvbnRfZmFjZV90KiwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiA9IEZvbnREZXNjcmlwdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVl
VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCmluZGV4IGY3MmQ5YzBiYjYwY2QyMDRjOTI0NDUwZTlj
ODkyZDkwY2NlYTgxZDUuLmEyZDU5MWJhNzU1OWU3ZjM5MjIzM2M2ZDYwZTBlOGRmN2U4ODBkMTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAtMTkxLDcg
KzE5MSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
ZGVzdHJveShtX3NjYWxlZEZvbnQpOwogICAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9m
b250X3JlZmVyZW5jZShvdGhlci5tX3NjYWxlZEZvbnQpOwogCi0gICAgbV9oYXJmYnV6ekZhY2Ug
PSBvdGhlci5tX2hhcmZidXp6RmFjZTsKKyAgICBtX2hhcmZCdXp6RmFjZSA9IG90aGVyLm1faGFy
ZkJ1enpGYWNlOwogCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTk5LDEzICsxOTksMTMgQEAg
Rm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIG90aGVyKQogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKICAgICA6IG1fZmFsbGJhY2tzKDApCiAgICAg
LCBtX3NjYWxlZEZvbnQoMCkKLSAgICAsIG1faGFyZmJ1enpGYWNlKG90aGVyLm1faGFyZmJ1enpG
YWNlKQorICAgICwgbV9oYXJmQnV6ekZhY2Uob3RoZXIubV9oYXJmQnV6ekZhY2UpCiB7CiAgICAg
KnRoaXMgPSBvdGhlcjsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlciwgZmxvYXQgc2l6ZSkKLSAgICA6IG1faGFyZmJ1
enpGYWNlKG90aGVyLm1faGFyZmJ1enpGYWNlKQorICAgIDogbV9oYXJmQnV6ekZhY2Uob3RoZXIu
bV9oYXJmQnV6ekZhY2UpCiB7CiAgICAgKnRoaXMgPSBvdGhlcjsKIApAQCAtMjI2LDEyICsyMjYs
MTIgQEAgRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQogICAgICAgICBjYWly
b19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CiB9CiAKLUhhcmZCdXp6TkdGYWNl
KiBGb250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAorSGFyZkJ1enpGYWNlKiBG
b250UGxhdGZvcm1EYXRhOjpoYXJmQnV6ekZhY2UoKSBjb25zdAogewotICAgIGlmICghbV9oYXJm
YnV6ekZhY2UpCi0gICAgICAgIG1faGFyZmJ1enpGYWNlID0gSGFyZkJ1enpOR0ZhY2U6OmNyZWF0
ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgaGFzaCgpKTsKKyAgICBpZiAo
IW1faGFyZkJ1enpGYWNlKQorICAgICAgICBtX2hhcmZCdXp6RmFjZSA9IEhhcmZCdXp6RmFjZTo6
Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCBoYXNoKCkpOwogCi0g
ICAgcmV0dXJuIG1faGFyZmJ1enpGYWNlLmdldCgpOworICAgIHJldHVybiBtX2hhcmZCdXp6RmFj
ZS5nZXQoKTsKIH0KIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBs
YXRmb3JtRGF0YUhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5jcHAKaW5kZXggNDBlNTY1MjcyOGQ2
NTg3MGJhZjgyNTc2ZmJlOThkZTZmMjE1MDUxYS4uNmZkN2IyNThiYTZjNTRlYWM3ZjBjZjQ1ZjA5
NTg2ZGM5YWMyYzgxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enou
Y3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
LmgiCiAKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJIYXJmQnV6ek5HRmFjZS5o
IgorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiU2tBZHZhbmNlZFR5cGVmYWNlTWV0cmljcy5oIgogI2luY2x1ZGUgIlNrRm9u
dEhvc3QuaCIKQEAgLTEyNCw3ICsxMjQsNyBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKICAgICAsIG1fZmFrZUl0YWxpYyhz
cmMubV9mYWtlSXRhbGljKQogICAgICwgbV9vcmllbnRhdGlvbihzcmMubV9vcmllbnRhdGlvbikK
ICAgICAsIG1fc3R5bGUoc3JjLm1fc3R5bGUpCi0gICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9o
YXJmYnV6ekZhY2UpCisgICAgLCBtX2hhcmZCdXp6RmFjZShzcmMubV9oYXJmQnV6ekZhY2UpCiB7
CiAgICAgU2tTYWZlUmVmKG1fdHlwZWZhY2UpOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBAIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3Jj
LCBmbG9hdCB0ZXh0U2l6ZSkKICAgICAsIG1fZmFrZUJvbGQoc3JjLm1fZmFrZUJvbGQpCiAgICAg
LCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKICAgICAsIG1fb3JpZW50YXRpb24oc3Jj
Lm1fb3JpZW50YXRpb24pCi0gICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2Up
CisgICAgLCBtX2hhcmZCdXp6RmFjZShzcmMubV9oYXJmQnV6ekZhY2UpCiB7CiAgICAgU2tTYWZl
UmVmKG1fdHlwZWZhY2UpOwogICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKQEAgLTE4
OCw3ICsxODgsNyBAQCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRv
cj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3JjKQogICAgIG1fdGV4dFNpemUgPSBzcmMubV90
ZXh0U2l6ZTsKICAgICBtX2Zha2VCb2xkID0gc3JjLm1fZmFrZUJvbGQ7CiAgICAgbV9mYWtlSXRh
bGljID0gc3JjLm1fZmFrZUl0YWxpYzsKLSAgICBtX2hhcmZidXp6RmFjZSA9IHNyYy5tX2hhcmZi
dXp6RmFjZTsKKyAgICBtX2hhcmZCdXp6RmFjZSA9IHNyYy5tX2hhcmZCdXp6RmFjZTsKICAgICBt
X29yaWVudGF0aW9uID0gc3JjLm1fb3JpZW50YXRpb247CiAgICAgbV9zdHlsZSA9IHNyYy5tX3N0
eWxlOwogICAgIG1fZW1TaXplSW5Gb250VW5pdHMgPSBzcmMubV9lbVNpemVJbkZvbnRVbml0czsK
QEAgLTI2OCwxMiArMjY4LDEyIEBAIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNo
KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhhcmZCdXp6TkdGYWNlKiBGb250UGxh
dGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAorSGFyZkJ1enpGYWNlKiBGb250UGxhdGZv
cm1EYXRhOjpoYXJmQnV6ekZhY2UoKSBjb25zdAogewotICAgIGlmICghbV9oYXJmYnV6ekZhY2Up
Ci0gICAgICAgIG1faGFyZmJ1enpGYWNlID0gSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZShjb25zdF9j
YXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgdW5pcXVlSUQoKSk7CisgICAgaWYgKCFtX2hh
cmZCdXp6RmFjZSkKKyAgICAgICAgbV9oYXJmQnV6ekZhY2UgPSBIYXJmQnV6ekZhY2U6OmNyZWF0
ZShjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPih0aGlzKSwgdW5pcXVlSUQoKSk7CiAKLSAg
ICByZXR1cm4gbV9oYXJmYnV6ekZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIG1faGFyZkJ1enpGYWNl
LmdldCgpOwogfQogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OmdldFJlbmRlclN0eWxlRm9yU3Ry
aWtlKGNvbnN0IGNoYXIqIGZvbnQsIGludCBzaXplQW5kU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFy
ZkJ1enouaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQ
bGF0Zm9ybURhdGFIYXJmQnV6ei5oCmluZGV4IDhmZWExNTRkYWY1YjFhMjAyY2QwYjAwZThlMWRj
YmQwMzk2MjhlNWEuLjAzMmIzZjY3ZDk0OTY4OWQxMmZiODkxYTkxMDViZjdmYzg4ODNkYWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRQ
bGF0Zm9ybURhdGFIYXJmQnV6ei5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6ei5oCkBAIC00Nyw3ICs0Nyw3IEBA
IHR5cGVkZWYgdWludDMyX3QgU2tGb250SUQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZvbnREZXNjcmlwdGlvbjsKLWNsYXNzIEhhcmZCdXp6TkdGYWNlOworY2xhc3MgSGFyZkJ1enpG
YWNlOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRm9udFBsYXRmb3JtRGF0YSBpcyB0
aGUgaGFuZGxlIHdoaWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZpYyBmYWNlLiBBIGZhY2UKQEAg
LTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7
CiAjZW5kaWYKIAotICAgIEhhcmZCdXp6TkdGYWNlKiBoYXJmYnV6ekZhY2UoKSBjb25zdDsKKyAg
ICBIYXJmQnV6ekZhY2UqIGhhcmZCdXp6RmFjZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIHJldHVy
bmVkIHN0eWxlcyBhcmUgYWxsIGFjdHVhbCBzdHlsZXMgd2l0aG91dCBGb250UmVuZGVyU3R5bGU6
Ok5vUHJlZmVyZW5jZS4KICAgICBjb25zdCBGb250UmVuZGVyU3R5bGUmIGZvbnRSZW5kZXJTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9mYWtlSXRhbGljOwogICAgIEZvbnRPcmllbnRhdGlvbiBtX29yaWVudGF0
aW9uOwogICAgIEZvbnRSZW5kZXJTdHlsZSBtX3N0eWxlOwotICAgIG11dGFibGUgUmVmUHRyPEhh
cmZCdXp6TkdGYWNlPiBtX2hhcmZidXp6RmFjZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxIYXJmQnV6
ekZhY2U+IG1faGFyZkJ1enpGYWNlOwogCiAgICAgU2tUeXBlZmFjZSogaGFzaFRhYmxlRGVsZXRl
ZEZvbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2tUeXBlZmFjZSo+
KC0xKTsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYjQ4MWNmOTQzMDli
MmNkMjczYzUwYTg0MmE1ZDZhNjAzYmRhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3BwCkBAIC0wLDAg
KzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgor
CisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgImhiLW90LmgiCisjaW5j
bHVkZSAiaGIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBoYl90YWdfdCBIYXJm
QnV6ekZhY2U6OnZlcnRUYWcgPSBIQl9UQUcoJ3YnLCAnZScsICdyJywgJ3QnKTsKK2NvbnN0IGhi
X3RhZ190IEhhcmZCdXp6RmFjZTo6dnJ0MlRhZyA9IEhCX1RBRygndicsICdyJywgJ3QnLCAnMicp
OworCisvLyBUaG91Z2ggd2UgaGF2ZSBGb250Q2FjaGUgY2xhc3MsIHdoaWNoIHByb3ZpZGVzIHRo
ZSBjYWNoZSBtZWNoYW5pc20gZm9yCisvLyBXZWJLaXQncyBmb250IG9iamVjdHMsIHdlIGFsc28g
bmVlZCBhZGRpdGlvbmFsIGNhY2hpbmcgbGF5ZXIgZm9yIEhhcmZCdXp6CisvLyB0byByZWR1Y2Ug
dGhlIG1lbW9yeSBjb25zdW1wdGlvbiBiZWNhdXNlIGhiX2ZhY2VfdCBzaG91bGQgYmUgYXNzb2Np
YXRlZCB3aXRoCisvLyB1bmRlcmxpbmcgZm9udCBkYXRhIChlLmcuIENURm9udFJlZiwgRlRGYWNl
KS4KKworY2xhc3MgRmFjZUNhY2hlRW50cnkgOiBwdWJsaWMgUmVmQ291bnRlZDxGYWNlQ2FjaGVF
bnRyeT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZhY2VDYWNoZUVudHJ5PiBj
cmVhdGUoaGJfZmFjZV90KiBmYWNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZhY2UpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZhY2VDYWNoZUVudHJ5KGZhY2UpKTsKKyAgICB9Cisg
ICAgfkZhY2VDYWNoZUVudHJ5KCkKKyAgICB7CisgICAgICAgIGhiX2ZhY2VfZGVzdHJveShtX2Zh
Y2UpOworICAgIH0KKworICAgIGhiX2ZhY2VfdCogZmFjZSgpIHsgcmV0dXJuIG1fZmFjZTsgfQor
ICAgIEhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogZ2x5cGhDYWNoZSgpIHsgcmV0dXJuICZt
X2dseXBoQ2FjaGU7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBGYWNlQ2FjaGVFbnRyeSho
Yl9mYWNlX3QqIGZhY2UpCisgICAgICAgIDogbV9mYWNlKGZhY2UpCisgICAgeyB9CisKKyAgICBo
Yl9mYWNlX3QqIG1fZmFjZTsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4gbV9nbHlw
aENhY2hlOworfTsKKwordHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RmFjZUNhY2hl
RW50cnk+LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVpbnQ2NF90PiA+IEhhcmZCdXp6RmFjZUNhY2hlOworCitzdGF0aWMgSGFyZkJ1
enpGYWNlQ2FjaGUqIGhhcmZCdXp6RmFjZUNhY2hlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhcmZCdXp6RmFjZUNhY2hlLCBzX2hhcmZCdXp6RmFjZUNhY2hlLCAoKSk7CisgICAgcmV0
dXJuICZzX2hhcmZCdXp6RmFjZUNhY2hlOworfQorCitIYXJmQnV6ekZhY2U6OkhhcmZCdXp6RmFj
ZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQorICAg
IDogbV9wbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKQorICAgICwgbV91bmlxdWVJRCh1bmlxdWVJ
RCkKKyAgICAsIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0KEhCX1NDUklQVF9JTlZBTElEKQorewor
ICAgIEhhcmZCdXp6RmFjZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gaGFyZkJ1enpGYWNlQ2Fj
aGUoKS0+YWRkKG1fdW5pcXVlSUQsIDApOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IEZhY2VDYWNoZUVudHJ5OjpjcmVhdGUoY3Jl
YXRlRmFjZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5yZWYoKTsKKyAgICBtX2Zh
Y2UgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5mYWNlKCk7CisgICAgbV9nbHlwaENhY2hlRm9y
RmFjZUNhY2hlRW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5nbHlwaENhY2hlKCk7Cit9
CisKK0hhcmZCdXp6RmFjZTo6fkhhcmZCdXp6RmFjZSgpCit7CisgICAgSGFyZkJ1enpGYWNlQ2Fj
aGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhhcmZCdXp6RmFjZUNhY2hlKCktPmZpbmQobV91bmlxdWVJ
RCk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSBoYXJmQnV6ekZhY2VDYWNoZSgpLT5lbmQoKSk7Cisg
ICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+dmFsdWUtPnJlZkNvdW50KCkgPiAxKTsKKyAgICByZXN1
bHQuZ2V0KCktPnZhbHVlLT5kZXJlZigpOworICAgIGlmIChyZXN1bHQuZ2V0KCktPnZhbHVlLT5y
ZWZDb3VudCgpID09IDEpCisgICAgICAgIGhhcmZCdXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3Vu
aXF1ZUlEKTsKK30KKworc3RhdGljIGhiX3NjcmlwdF90IGZpbmRTY3JpcHRGb3JWZXJ0aWNhbEds
eXBoU3Vic3RpdHV0aW9uKGhiX2ZhY2VfdCogZmFjZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWF4Q291bnQgPSAzMjsKKworICAgIHVuc2lnbmVkIHNjcmlwdENvdW50ID0gbWF4Q291
bnQ7CisgICAgaGJfdGFnX3Qgc2NyaXB0VGFnc1ttYXhDb3VudF07CisgICAgaGJfb3RfbGF5b3V0
X3RhYmxlX2dldF9zY3JpcHRfdGFncyhmYWNlLCBIQl9PVF9UQUdfR1NVQiwgMCwgJnNjcmlwdENv
dW50LCBzY3JpcHRUYWdzKTsKKyAgICBmb3IgKHVuc2lnbmVkIHNjcmlwdEluZGV4ID0gMDsgc2Ny
aXB0SW5kZXggPCBzY3JpcHRDb3VudDsgKytzY3JpcHRJbmRleCkgeworICAgICAgICB1bnNpZ25l
ZCBsYW5ndWFnZUNvdW50ID0gbWF4Q291bnQ7CisgICAgICAgIGhiX3RhZ190IGxhbmd1YWdlVGFn
c1ttYXhDb3VudF07CisgICAgICAgIGhiX290X2xheW91dF9zY3JpcHRfZ2V0X2xhbmd1YWdlX3Rh
Z3MoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4LCAwLCAmbGFuZ3VhZ2VDb3VudCwg
bGFuZ3VhZ2VUYWdzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYW5ndWFnZUluZGV4ID0gMDsg
bGFuZ3VhZ2VJbmRleCA8IGxhbmd1YWdlQ291bnQ7ICsrbGFuZ3VhZ2VJbmRleCkgeworICAgICAg
ICAgICAgdW5zaWduZWQgZmVhdHVyZUluZGV4OworICAgICAgICAgICAgaWYgKGhiX290X2xheW91
dF9sYW5ndWFnZV9maW5kX2ZlYXR1cmUoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4
LCBsYW5ndWFnZUluZGV4LCBIYXJmQnV6ekZhY2U6OnZlcnRUYWcsICZmZWF0dXJlSW5kZXgpCisg
ICAgICAgICAgICAgICAgfHwgaGJfb3RfbGF5b3V0X2xhbmd1YWdlX2ZpbmRfZmVhdHVyZShmYWNl
LCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0SW5kZXgsIGxhbmd1YWdlSW5kZXgsIEhhcmZCdXp6RmFj
ZTo6dnJ0MlRhZywgJmZlYXR1cmVJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhiX290
X3RhZ190b19zY3JpcHQoc2NyaXB0VGFnc1tzY3JpcHRJbmRleF0pOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBIQl9TQ1JJUFRfSU5WQUxJRDsKK30KKwordm9pZCBIYXJmQnV6ekZhY2U6
OnNldFNjcmlwdEZvclZlcnRpY2FsR2x5cGhTdWJzdGl0dXRpb24oaGJfYnVmZmVyX3QqIGJ1ZmZl
cikKK3sKKyAgICBpZiAobV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQgPT0gSEJfU0NSSVBUX0lOVkFM
SUQpCisgICAgICAgIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0ID0gZmluZFNjcmlwdEZvclZlcnRp
Y2FsR2x5cGhTdWJzdGl0dXRpb24obV9mYWNlKTsKKyAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChi
dWZmZXIsIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6ekZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzc3NmRjMDdhNzhjMDA2ZmVjOTAyNzFk
NTgyODU5Y2RkMDhjMmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmgKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSGFyZkJ1enpGYWNlX2gKKyNkZWZpbmUgSGFyZkJ1enpGYWNlX2gKKworI2luY2x1ZGUgPGhi
Lmg+CisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKKworY2xh
c3MgSGFyZkJ1enpGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SGFyZkJ1enpGYWNlPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGhiX3RhZ190IHZlcnRUYWc7CisgICAgc3RhdGljIGNvbnN0
IGhiX3RhZ190IHZydDJUYWc7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYXJmQnV6ekZhY2U+
IGNyZWF0ZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlE
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmQnV6ekZhY2UocGxhdGZv
cm1EYXRhLCB1bmlxdWVJRCkpOworICAgIH0KKyAgICB+SGFyZkJ1enpGYWNlKCk7CisKKyAgICBo
Yl9mb250X3QqIGNyZWF0ZUZvbnQoKTsKKworICAgIHZvaWQgc2V0U2NyaXB0Rm9yVmVydGljYWxH
bHlwaFN1YnN0aXR1dGlvbihoYl9idWZmZXJfdCopOworCitwcml2YXRlOgorICAgIEhhcmZCdXp6
RmFjZShGb250UGxhdGZvcm1EYXRhKiwgdWludDY0X3QpOworCisgICAgaGJfZmFjZV90KiBjcmVh
dGVGYWNlKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBtX3BsYXRmb3JtRGF0YTsKKyAgICB1
aW50NjRfdCBtX3VuaXF1ZUlEOworICAgIGhiX2ZhY2VfdCogbV9mYWNlOworICAgIFdURjo6SGFz
aE1hcDx1aW50MzJfdCwgdWludDE2X3Q+KiBtX2dseXBoQ2FjaGVGb3JGYWNlQ2FjaGVFbnRyeTsK
KworICAgIGhiX3NjcmlwdF90IG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0OworfTsKKworfQorCisj
ZW5kaWYgLy8gSGFyZkJ1enpGYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZWFhMDkyODdlNDFmYjUzMWRhMjhmNjljNzczYzFmNzhiNWUzYzliCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFy
ZkJ1enpGYWNlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZkJ1
enpGYWNlLmgiCisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgorI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8Y2Fpcm8t
ZnQuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGZyZWV0eXBlL2ZyZWV0eXBlLmg+
CisjaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KKyNpbmNsdWRlIDxoYi5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
YWlyb0Z0RmFjZUxvY2tlciB7CitwdWJsaWM6CisgICAgQ2Fpcm9GdEZhY2VMb2NrZXIoY2Fpcm9f
c2NhbGVkX2ZvbnRfdCogY2Fpcm9TY2FsZWRGb250KSA6IG1fc2NhbGVkRm9udChjYWlyb1NjYWxl
ZEZvbnQpIHsgfTsKKyAgICBGVF9GYWNlIGxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNh
aXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX3NjYWxlZEZvbnQpOworICAgIH07CisgICAg
fkNhaXJvRnRGYWNlTG9ja2VyKCkKKyAgICB7CisgICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250
X3VubG9ja19mYWNlKG1fc2NhbGVkRm9udCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjYWlyb19z
Y2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Cit9OworCitzdGF0aWMgaGJfcG9zaXRpb25fdCBm
bG9hdFRvSGFyZkJ1enpQb3NpdGlvbihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aGJfcG9zaXRpb25fdD4odmFsdWUgKiAoMSA8PCAxNikpOworfQorCitzdGF0aWMgaGJf
cG9zaXRpb25fdCBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZG91YmxlIHZhbHVlKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2KSk7Cit9
CisKK3N0YXRpYyB2b2lkIENhaXJvR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMoY2Fpcm9fc2NhbGVk
X2ZvbnRfdCogc2NhbGVkRm9udCwgaGJfY29kZXBvaW50X3QgY29kZXBvaW50LCBoYl9wb3NpdGlv
bl90KiBhZHZhbmNlLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMpCit7CisgICAgY2Fpcm9f
dGV4dF9leHRlbnRzX3QgZ2x5cGhFeHRlbnRzOworICAgIGNhaXJvX2dseXBoX3QgZ2x5cGg7Cisg
ICAgZ2x5cGguaW5kZXggPSBjb2RlcG9pbnQ7CisgICAgZ2x5cGgueCA9IDA7CisgICAgZ2x5cGgu
eSA9IDA7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhzY2FsZWRGb250LCAm
Z2x5cGgsIDEsICZnbHlwaEV4dGVudHMpOworCisgICAgaWYgKGFkdmFuY2UpCisgICAgICAgICph
ZHZhbmNlID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50cy54X2FkdmFuY2Up
OworICAgIGlmIChleHRlbnRzKSB7CisgICAgICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IGRvdWJs
ZVRvSGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMueF9iZWFyaW5nKTsKKyAgICAgICAgZXh0
ZW50cy0+eV9iZWFyaW5nID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50cy55
X2JlYXJpbmcpOworICAgICAgICBleHRlbnRzLT53aWR0aCA9IGRvdWJsZVRvSGFyZkJ1enpQb3Np
dGlvbihnbHlwaEV4dGVudHMud2lkdGgpOworICAgICAgICBleHRlbnRzLT5oZWlnaHQgPSBkb3Vi
bGVUb0hhcmZCdXp6UG9zaXRpb24oZ2x5cGhFeHRlbnRzLmhlaWdodCk7CisgICAgfQorfQorCitz
dGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0R2x5cGgoaGJfZm9udF90Kiwgdm9pZCogZm9udERh
dGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90LCBoYl9jb2RlcG9pbnRf
dCogZ2x5cGgsIHZvaWQqKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKTsKKyAgICBjYWly
b19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gcGxhdGZvcm1EYXRhLT5zY2FsZWRGb250KCk7
CisgICAgQVNTRVJUKHNjYWxlZEZvbnQpOworCisgICAgY2Fpcm9fZ2x5cGhfdCogZ2x5cGhzID0g
MDsKKyAgICBpbnQgbnVtR2x5cGhzID0gMDsKKyAgICBDU3RyaW5nIHV0ZjhDb2RlcG9pbnQgPSBV
VEY4RW5jb2RpbmcoKS5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KCZ1bmljb2RlKSwg
MSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgaWYgKENBSVJPX1NUQVRVU19T
VUNDRVNTICE9IGNhaXJvX3NjYWxlZF9mb250X3RleHRfdG9fZ2x5cGhzKHNjYWxlZEZvbnQsIDAs
IDAsIHV0ZjhDb2RlcG9pbnQuZGF0YSgpLCB1dGY4Q29kZXBvaW50Lmxlbmd0aCgpLCAmZ2x5cGhz
LCAmbnVtR2x5cGhzLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
bnVtR2x5cGhzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmdseXBoID0gZ2x5cGhzWzBd
LmluZGV4OworICAgIGNhaXJvX2dseXBoX2ZyZWUoZ2x5cGhzKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZkJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZh
bmNlKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgdm9p
ZCopCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpOworICAgIGNhaXJvX3NjYWxlZF9mb250
X3QqIHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKTsKKyAgICBBU1NFUlQo
c2NhbGVkRm9udCk7CisKKyAgICBoYl9wb3NpdGlvbl90IGFkdmFuY2UgPSAwOworICAgIENhaXJv
R2V0R2x5cGhXaWR0aEFuZEV4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGgsICZhZHZhbmNlLCAwKTsK
KyAgICByZXR1cm4gYWR2YW5jZTsKK30KKworc3RhdGljIGhiX2Jvb2xfdCBoYXJmQnV6ekdldEds
eXBoSG9yaXpvbnRhbE9yaWdpbihoYl9mb250X3QqLCB2b2lkKiwgaGJfY29kZXBvaW50X3QsIGhi
X3Bvc2l0aW9uX3QqLCBoYl9wb3NpdGlvbl90Kiwgdm9pZCopCit7CisgICAgLy8gSnVzdCByZXR1
cm4gdHJ1ZSwgZm9sbG93aW5nIHRoZSB3YXkgdGhhdCBIYXJmYnV6ei1GcmVlVHlwZQorICAgIC8v
IGltcGxlbWVudGF0aW9uIGRvZXMuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9i
b29sX3QgaGFyZkJ1enpHZXRHbHlwaEV4dGVudHMoaGJfZm9udF90Kiwgdm9pZCogZm9udERhdGEs
IGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMsIHZvaWQq
KQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKTsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90
KiBzY2FsZWRGb250ID0gcGxhdGZvcm1EYXRhLT5zY2FsZWRGb250KCk7CisgICAgQVNTRVJUKHNj
YWxlZEZvbnQpOworCisgICAgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhzY2FsZWRGb250
LCBnbHlwaCwgMCwgZXh0ZW50cyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBoYl9m
b250X2Z1bmNzX3QqIGhhcmZCdXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKCkKK3sKKyAgICBzdGF0
aWMgaGJfZm9udF9mdW5jc190KiBoYXJmQnV6ekNhaXJvRm9udEZ1bmNzID0gMDsKKworICAgIC8v
IFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggd2UgY2FuJ3Qgc3VwcG9ydC4K
KyAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaWYg
dGhleSBhcmVuJ3Qgc2V0LgorICAgIGlmICghaGFyZkJ1enpDYWlyb0ZvbnRGdW5jcykgeworICAg
ICAgICBoYXJmQnV6ekNhaXJvRm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19jcmVhdGUoKTsKKyAg
ICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNz
LCBoYXJmQnV6ekdldEdseXBoLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZkJ1enpDYWlyb0ZvbnRGdW5jcywgaGFyZkJ1enpHZXRHbHlw
aEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9vcmlnaW5fZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJmQnV6ekdldEdseXBo
SG9yaXpvbnRhbE9yaWdpbiwgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBo
X2V4dGVudHNfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJmQnV6ekdldEdseXBoRXh0
ZW50cywgMCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11dGFibGUoaGFyZkJ1
enpDYWlyb0ZvbnRGdW5jcyk7CisgICAgfQorICAgIHJldHVybiBoYXJmQnV6ekNhaXJvRm9udEZ1
bmNzOworfQorCitzdGF0aWMgaGJfYmxvYl90KiBoYXJmQnV6ekNhaXJvR2V0VGFibGUoaGJfZmFj
ZV90KiwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBjYWlyb19zY2FsZWRf
Zm9udF90KiBzY2FsZWRGb250ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19zY2FsZWRfZm9udF90
Kj4odXNlckRhdGEpOworICAgIGlmICghc2NhbGVkRm9udCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBDYWlyb0Z0RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihzY2FsZWRGb250KTsKKyAg
ICBGVF9GYWNlIGZ0Rm9udCA9IGNhaXJvRnRGYWNlTG9ja2VyLmxvY2soKTsKKyAgICBpZiAoIWZ0
Rm9udCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGVF9VTG9uZyB0YWJsZVNpemUgPSAwOwor
ICAgIEZUX0Vycm9yIGVycm9yID0gRlRfTG9hZF9TZm50X1RhYmxlKGZ0Rm9udCwgdGFnLCAwLCAw
LCAmdGFibGVTaXplKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiAwOworCisgICAg
RlRfQnl0ZSogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxGVF9CeXRlKj4oZmFzdE1hbGxvYyh0
YWJsZVNpemUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRlRf
VUxvbmcgZXhwZWN0ZWRUYWJsZVNpemUgPSB0YWJsZVNpemU7CisgICAgZXJyb3IgPSBGVF9Mb2Fk
X1NmbnRfVGFibGUoZnRGb250LCB0YWcsIDAsIGJ1ZmZlciwgJnRhYmxlU2l6ZSk7CisgICAgaWYg
KGVycm9yIHx8IHRhYmxlU2l6ZSAhPSBleHBlY3RlZFRhYmxlU2l6ZSkgeworICAgICAgICBmYXN0
RnJlZShidWZmZXIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gaGJf
YmxvYl9jcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSwgdGFibGVT
aXplLCBIQl9NRU1PUllfTU9ERV9XUklUQUJMRSwgYnVmZmVyLCBmYXN0RnJlZSk7Cit9CisKK2hi
X2ZhY2VfdCogSGFyZkJ1enpGYWNlOjpjcmVhdGVGYWNlKCkKK3sKKyAgICBoYl9mYWNlX3QqIGZh
Y2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzKGhhcmZCdXp6Q2Fpcm9HZXRUYWJsZSwgbV9w
bGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKSwgMCk7CisgICAgQVNTRVJUKGZhY2UpOworICAgIHJl
dHVybiBmYWNlOworfQorCitoYl9mb250X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCit7
CisgICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUobV9mYWNlKTsKKyAgICBoYl9m
b250X3NldF9mdW5jcyhmb250LCBoYXJmQnV6ekNhaXJvVGV4dEdldEZvbnRGdW5jcygpLCBtX3Bs
YXRmb3JtRGF0YSwgMCk7CisgICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLT5z
aXplKCk7CisgICAgaWYgKGZsb29yZihzaXplKSA9PSBzaXplKQorICAgICAgICBoYl9mb250X3Nl
dF9wcGVtKGZvbnQsIHNpemUsIHNpemUpOworICAgIGludCBzY2FsZSA9IGZsb2F0VG9IYXJmQnV6
elBvc2l0aW9uKHNpemUpOworICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZvbnQsIHNjYWxlLCBzY2Fs
ZSk7CisgICAgaGJfZm9udF9tYWtlX2ltbXV0YWJsZShmb250KTsKKyAgICByZXR1cm4gZm9udDsK
K30KKworR2x5cGhCdWZmZXJBZHZhbmNlIEhhcmZCdXp6U2hhcGVyOjpjcmVhdGVHbHlwaEJ1ZmZl
ckFkdmFuY2UoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKK3sKKyAgICByZXR1cm4gR2x5cGhC
dWZmZXJBZHZhbmNlKHdpZHRoLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOThkYmRiNzEw
YzJmMWExNDU5MDdlYWRhZjJlMDdjNWI0NDg1NGVmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0
LmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXJm
QnV6ekZhY2UuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJI
YXJmQnV6elNoYXBlci5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRl
ICJoYi5oIgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNl
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGZsb2F0
VG9IYXJmQnV6elBvc2l0aW9uKENHRmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGhiX3Bvc2l0aW9uX3Q+KHZhbHVlICogKDEgPDwgMTYpKTsKK30KKworc3RhdGljIGhiX2Jv
b2xfdCBnZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVw
b2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZhcmlhdGlvblNlbGVjdG9yLCBoYl9jb2Rl
cG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZvbnQg
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgp
OworICAgIFVuaUNoYXIgY2hhcmFjdGVyc1s0XTsKKyAgICBDR0dseXBoIGNnR2x5cGhzWzRdOwor
ICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNoYXJhY3RlcnMs
IGxlbmd0aCwgdW5pY29kZSk7CisgICAgaWYgKCFDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJz
KGN0Rm9udCwgY2hhcmFjdGVycywgY2dHbHlwaHMsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAqZ2x5cGggPSBjZ0dseXBoc1swXTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIGhiX3Bvc2l0aW9uX3QgZ2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250X3Qq
IGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2Vy
RGF0YSkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxh
dGZvcm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKKyAgICBDR0dseXBoIGNnR2x5cGggPSBn
bHlwaDsKKyAgICBDR0Zsb2F0IGFkdmFuY2UgPSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhj
dEZvbnQsIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZjZ0dseXBoLCAwLCAxKTsKKyAg
ICByZXR1cm4gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oYWR2YW5jZSk7Cit9CisKK3N0YXRpYyBo
Yl9ib29sX3QgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCogaGJGb250LCB2b2lk
KiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bvc2l0aW9uX3QqIHgsIGhiX3Bv
c2l0aW9uX3QqIHksIHZvaWQqIHVzZXJEYXRhKQoreworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgaGJfYm9vbF90IGdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCog
Zm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVu
dHMsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSByZWludGVycHJl
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSktPmN0Rm9udCgpOworICAgIENHUmVj
dCBjZ1JlY3Q7CisgICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7CisgICAgaWYgKENURm9udEdl
dEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250RGVmYXVsdE9yaWVudGF0aW9u
LCAmY2dHbHlwaCwgJmNnUmVjdCwgMSkgPT0gQ0dSZWN0TnVsbCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IGZsb2F0VG9IYXJmQnV6elBvc2l0aW9uKGNn
UmVjdC5vcmlnaW4ueCk7CisgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gLWZsb2F0VG9IYXJmQnV6
elBvc2l0aW9uKGNnUmVjdC5vcmlnaW4ueSk7CisgICAgZXh0ZW50cy0+d2lkdGggPSBmbG9hdFRv
SGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Quc2l6ZS53aWR0aCk7CisgICAgZXh0ZW50cy0+aGVpZ2h0
ID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDb3JlVGV4dEdl
dEZvbnRGdW5jcygpCit7CisgICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZkJ1enpDb3Jl
VGV4dEZvbnRGdW5jcyA9IDA7CisKKyAgICBpZiAoIWhhcmZCdXp6Q29yZVRleHRGb250RnVuY3Mp
IHsKKyAgICAgICAgaGFyZkJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVuY3NfY3Jl
YXRlKCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMoaGFyZkJ1enpDb3Jl
VGV4dEZvbnRGdW5jcywgZ2V0R2x5cGgsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3Nl
dF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmQnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlw
aEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9vcmlnaW5fZnVuYyhoYXJmQnV6ekNvcmVUZXh0Rm9udEZ1bmNzLCBnZXRHbHlwaEhvcml6
b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9leHRl
bnRzX2Z1bmMoaGFyZkJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhFeHRlbnRzLCAwLCAw
KTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19tYWtlX2ltbXV0YWJsZShoYXJmQnV6ekNvcmVUZXh0
Rm9udEZ1bmNzKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZCdXp6Q29yZVRleHRGb250RnVuY3M7
Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VUYWJsZURhdGEodm9pZCogdXNlckRhdGEpCit7Cisg
ICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPih1c2VyRGF0
YSk7CisgICAgQ0ZSZWxlYXNlKGNmRGF0YSk7Cit9CisKK3N0YXRpYyBoYl9ibG9iX3QqIGhhcmZC
dXp6Q29yZVRleHRHZXRUYWJsZShoYl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9pZCog
dXNlckRhdGEpCit7CisgICAgQ0dGb250UmVmIGNnRm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0dG
b250UmVmPih1c2VyRGF0YSk7CisgICAgQ0ZEYXRhUmVmIGNmRGF0YSA9IENHRm9udENvcHlUYWJs
ZUZvclRhZyhjZ0ZvbnQsIHRhZyk7CisgICAgaWYgKCFjZkRhdGEpCisgICAgICAgIHJldHVybiAw
OworCisgICAgY29uc3QgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSk7CisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IENG
RGF0YUdldExlbmd0aChjZkRhdGEpOworICAgIGlmICghZGF0YSB8fCAhbGVuZ3RoKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gaGJfYmxvYl9jcmVhdGUoZGF0YSwgbGVuZ3RoLCBIQl9N
RU1PUllfTU9ERV9SRUFET05MWSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxf
X0NGRGF0YSo+KGNmRGF0YSkpLCByZWxlYXNlVGFibGVEYXRhKTsKK30KKworaGJfZmFjZV90KiBI
YXJmQnV6ekZhY2U6OmNyZWF0ZUZhY2UoKQoreworICAgIC8vIEl0IHNlZW1zIHRoYXQgQ1RGb250
Q29weVRhYmxlIG9mIE1hY09TWDEwLjUgc2RrIGRvZXNuJ3Qgd29yayBmb3IKKyAgICAvLyBPcGVu
VHlwZSBsYXlvdXQgdGFibGVzKEdERUYsIEdTVUIsIEdQT1MpLiBVc2UgQ0dGb250Q29weVRhYmxl
Rm9yVGFnIGluc3RlYWQuCisgICAgaGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9y
X3RhYmxlcyhoYXJmQnV6ekNvcmVUZXh0R2V0VGFibGUsIG1fcGxhdGZvcm1EYXRhLT5jZ0ZvbnQo
KSwgMCk7CisgICAgQVNTRVJUKGZhY2UpOworICAgIHJldHVybiBmYWNlOworfQorCitoYl9mb250
X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCit7CisgICAgaGJfZm9udF90KiBmb250ID0g
aGJfZm9udF9jcmVhdGUobV9mYWNlKTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJm
QnV6ekNvcmVUZXh0R2V0Rm9udEZ1bmNzKCksIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAgICBjb25z
dCBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEtPm1fc2l6ZTsKKyAgICBoYl9mb250X3NldF9w
cGVtKGZvbnQsIHNpemUsIHNpemUpOworICAgIGNvbnN0IGludCBzY2FsZSA9ICgxIDw8IDE2KSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2Nh
bGUsIHNjYWxlKTsKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAgIHJldHVy
biBmb250OworfQorCitHbHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUds
eXBoQnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJldHVy
biBDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6ekZhY2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6RmFjZVNraWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxMDkzMGQ0ZTE3ODcyZTYx
NjE3OTMzMTM0ZTg3NTk0OWNhMGYxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VTa2lhLmNwcApAQCAtMCww
ICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXJmQnV6ekZhY2UuaCIK
KworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKKyNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCisjaW5jbHVkZSAiU2tQYWludC5oIgorI2luY2x1
ZGUgIlNrUGF0aC5oIgorI2luY2x1ZGUgIlNrUG9pbnQuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIK
KyNpbmNsdWRlICJTa1V0aWxzLmgiCisKKyNpbmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gT3VyIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBjYWxsYmFja3Mgd2hpY2ggSGFyZkJ1enogcmVxdWlyZXMgYnkgdXNpbmcgU2tpYQor
Ly8gY2FsbHMuIFNlZSB0aGUgSGFyZkJ1enogc291cmNlIGZvciByZWZlcmVuY2VzIGFib3V0IHdo
YXQgdGhlc2UgY2FsbGJhY2tzIGRvLgorCitzdHJ1Y3QgSGFyZkJ1enpGb250RGF0YSB7CisgICAg
SGFyZkJ1enpGb250RGF0YShXVEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogZ2x5cGhD
YWNoZUZvckZhY2VDYWNoZUVudHJ5KQorICAgICAgICA6IG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNo
ZUVudHJ5KGdseXBoQ2FjaGVGb3JGYWNlQ2FjaGVFbnRyeSkKKyAgICB7IH0KKyAgICBTa1BhaW50
IG1fcGFpbnQ7CisgICAgV1RGOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4qIG1fZ2x5cGhD
YWNoZUZvckZhY2VDYWNoZUVudHJ5OworfTsKKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgU2tpYVNj
YWxhclRvSGFyZkJ1enpQb3NpdGlvbihTa1NjYWxhciB2YWx1ZSkKK3sKKyAgICByZXR1cm4gU2tT
Y2FsYXJUb0ZpeGVkKHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgU2tpYUdldEdseXBoV2lkdGhB
bmRFeHRlbnRzKFNrUGFpbnQqIHBhaW50LCBoYl9jb2RlcG9pbnRfdCBjb2RlcG9pbnQsIGhiX3Bv
c2l0aW9uX3QqIHdpZHRoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMpCit7CisgICAgQVNT
RVJUKGNvZGVwb2ludCA8PSAweEZGRkYpOworICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQ
YWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKKworICAgIFNrU2NhbGFyIHNrV2lkdGg7Cisg
ICAgU2tSZWN0IHNrQm91bmRzOworICAgIHVpbnQxNl90IGdseXBoID0gY29kZXBvaW50OworCisg
ICAgcGFpbnQtPmdldFRleHRXaWR0aHMoJmdseXBoLCBzaXplb2YoZ2x5cGgpLCAmc2tXaWR0aCwg
JnNrQm91bmRzKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IFNraWFTY2FsYXJU
b0hhcmZCdXp6UG9zaXRpb24oc2tXaWR0aCk7CisgICAgaWYgKGV4dGVudHMpIHsKKyAgICAgICAg
Ly8gSW52ZXJ0IHktYXhpcyBiZWNhdXNlIFNraWEgaXMgeS1ncm93cy1kb3duIGJ1dCB3ZSBzZXQg
dXAgSGFyZkJ1enogdG8gYmUgeS1ncm93cy11cC4KKyAgICAgICAgZXh0ZW50cy0+eF9iZWFyaW5n
ID0gU2tpYVNjYWxhclRvSGFyZkJ1enpQb3NpdGlvbihza0JvdW5kcy5mTGVmdCk7CisgICAgICAg
IGV4dGVudHMtPnlfYmVhcmluZyA9IFNraWFTY2FsYXJUb0hhcmZCdXp6UG9zaXRpb24oLXNrQm91
bmRzLmZUb3ApOworICAgICAgICBleHRlbnRzLT53aWR0aCA9IFNraWFTY2FsYXJUb0hhcmZCdXp6
UG9zaXRpb24oc2tCb3VuZHMud2lkdGgoKSk7CisgICAgICAgIGV4dGVudHMtPmhlaWdodCA9IFNr
aWFTY2FsYXJUb0hhcmZCdXp6UG9zaXRpb24oLXNrQm91bmRzLmhlaWdodCgpKTsKKyAgICB9Cit9
CisKK3N0YXRpYyBoYl9ib29sX3QgaGFyZkJ1enpHZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwg
dm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZh
cmlhdGlvblNlbGVjdG9yLCBoYl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQor
eworICAgIEhhcmZCdXp6Rm9udERhdGEqIGhiRm9udERhdGEgPSByZWludGVycHJldF9jYXN0PEhh
cmZCdXp6Rm9udERhdGEqPihmb250RGF0YSk7CisKKyAgICBXVEY6Okhhc2hNYXA8dWludDMyX3Qs
IHVpbnQxNl90Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IGhiRm9udERhdGEtPm1fZ2x5cGhDYWNoZUZv
ckZhY2VDYWNoZUVudHJ5LT5hZGQodW5pY29kZSwgMCk7CisgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7CisgICAgICAgIFNrUGFpbnQqIHBhaW50ID0gJmhiRm9udERhdGEtPm1fcGFpbnQ7Cisg
ICAgICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjMyX1RleHRFbmNvZGlu
Zyk7CisgICAgICAgIHVpbnQxNl90IGdseXBoMTY7CisgICAgICAgIHBhaW50LT50ZXh0VG9HbHlw
aHMoJnVuaWNvZGUsIHNpemVvZihoYl9jb2RlcG9pbnRfdCksICZnbHlwaDE2KTsKKyAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdseXBoMTY7CisgICAgICAgICpnbHlwaCA9IGdseXBo
MTY7CisgICAgfQorICAgICpnbHlwaCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgcmV0
dXJuICEhKmdseXBoOworfQorCitzdGF0aWMgaGJfcG9zaXRpb25fdCBoYXJmQnV6ekdldEdseXBo
SG9yaXpvbnRhbEFkdmFuY2UoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9j
b2RlcG9pbnRfdCBnbHlwaCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgSGFyZkJ1enpGb250RGF0
YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFyZkJ1enpGb250RGF0YSo+KGZvbnRE
YXRhKTsKKyAgICBoYl9wb3NpdGlvbl90IGFkdmFuY2UgPSAwOworCisgICAgU2tpYUdldEdseXBo
V2lkdGhBbmRFeHRlbnRzKCZoYkZvbnREYXRhLT5tX3BhaW50LCBnbHlwaCwgJmFkdmFuY2UsIDAp
OworICAgIHJldHVybiBhZHZhbmNlOworfQorCitzdGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0
R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwg
aGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bvc2l0aW9uX3QqIHgsIGhiX3Bvc2l0aW9uX3QqIHks
IHZvaWQqIHVzZXJEYXRhKQoreworICAgIC8vIEp1c3QgcmV0dXJuIHRydWUsIGZvbGxvd2luZyB0
aGUgd2F5IHRoYXQgSGFyZkJ1enotRnJlZVR5cGUKKyAgICAvLyBpbXBsZW1lbnRhdGlvbiBkb2Vz
LgorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0R2x5
cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50
X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cywgdm9pZCogdXNlckRhdGEpCit7
CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFy
ZkJ1enpGb250RGF0YSo+KGZvbnREYXRhKTsKKworICAgIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0
ZW50cygmaGJGb250RGF0YS0+bV9wYWludCwgZ2x5cGgsIDAsIGV4dGVudHMpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmQnV6elNraWFHZXRGb250
RnVuY3MoKQoreworICAgIHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZCdXp6U2tpYUZvbnRG
dW5jcyA9IDA7CisKKyAgICAvLyBXZSBkb24ndCBzZXQgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNo
IHdlIGNhbid0IHN1cHBvcnQuCisgICAgLy8gSGFyZkJ1enogd2lsbCB1c2UgdGhlIGZhbGxiYWNr
IGltcGxlbWVudGF0aW9uIGlmIHRoZXkgYXJlbid0IHNldC4KKyAgICBpZiAoIWhhcmZCdXp6U2tp
YUZvbnRGdW5jcykgeworICAgICAgICBoYXJmQnV6elNraWFGb250RnVuY3MgPSBoYl9mb250X2Z1
bmNzX2NyZWF0ZSgpOworICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGhhcmZC
dXp6U2tpYUZvbnRGdW5jcywgaGFyZkJ1enpHZXRHbHlwaCwgMCwgMCk7CisgICAgICAgIGhiX2Zv
bnRfZnVuY3Nfc2V0X2dseXBoX2hfYWR2YW5jZV9mdW5jKGhhcmZCdXp6U2tpYUZvbnRGdW5jcywg
aGFyZkJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKKyAgICAgICAgaGJfZm9u
dF9mdW5jc19zZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmQnV6elNraWFGb250RnVuY3MsIGhh
cmZCdXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luLCAwLCAwKTsKKyAgICAgICAgaGJfZm9udF9m
dW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGhhcmZCdXp6U2tpYUZvbnRGdW5jcywgaGFyZkJ1
enpHZXRHbHlwaEV4dGVudHMsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNzX21ha2VfaW1t
dXRhYmxlKGhhcmZCdXp6U2tpYUZvbnRGdW5jcyk7CisgICAgfQorICAgIHJldHVybiBoYXJmQnV6
elNraWFGb250RnVuY3M7Cit9CisKK3N0YXRpYyBoYl9ibG9iX3QqIGhhcmZCdXp6U2tpYUdldFRh
YmxlKGhiX2ZhY2VfdCogZmFjZSwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAg
ICBTa0ZvbnRJRCB1bmlxdWVJRCA9IHN0YXRpY19jYXN0PFNrRm9udElEPihyZWludGVycHJldF9j
YXN0PHVpbnQ2NF90Pih1c2VyRGF0YSkpOworCisgICAgY29uc3Qgc2l6ZV90IHRhYmxlU2l6ZSA9
IFNrRm9udEhvc3Q6OkdldFRhYmxlU2l6ZSh1bmlxdWVJRCwgdGFnKTsKKyAgICBpZiAoIXRhYmxl
U2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjaGFyKiBidWZmZXIgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihmYXN0TWFsbG9jKHRhYmxlU2l6ZSkpOworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IFNrRm9udEhvc3Q6Okdl
dFRhYmxlRGF0YSh1bmlxdWVJRCwgdGFnLCAwLCB0YWJsZVNpemUsIGJ1ZmZlcik7CisgICAgaWYg
KHRhYmxlU2l6ZSAhPSBhY3R1YWxTaXplKSB7CisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBoYl9ibG9iX2NyZWF0ZShjb25z
dF9jYXN0PGNoYXIqPihidWZmZXIpLCB0YWJsZVNpemUsIEhCX01FTU9SWV9NT0RFX1dSSVRBQkxF
LCBidWZmZXIsIGZhc3RGcmVlKTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveUhhcmZCdXp6Rm9u
dERhdGEodm9pZCogdXNlckRhdGEpCit7CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFyZkJ1enpGb250RGF0YSo+KHVzZXJEYXRhKTsKKyAgICBk
ZWxldGUgaGJGb250RGF0YTsKK30KKworaGJfZmFjZV90KiBIYXJmQnV6ekZhY2U6OmNyZWF0ZUZh
Y2UoKQoreworICAgIGhiX2ZhY2VfdCogZmFjZSA9IGhiX2ZhY2VfY3JlYXRlX2Zvcl90YWJsZXMo
aGFyZkJ1enpTa2lhR2V0VGFibGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcGxhdGZvcm1E
YXRhLT51bmlxdWVJRCgpKSwgMCk7CisgICAgQVNTRVJUKGZhY2UpOworICAgIHJldHVybiBmYWNl
OworfQorCitoYl9mb250X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCit7CisgICAgSGFy
ZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IG5ldyBIYXJmQnV6ekZvbnREYXRhKG1fZ2x5cGhD
YWNoZUZvckZhY2VDYWNoZUVudHJ5KTsKKyAgICBtX3BsYXRmb3JtRGF0YS0+c2V0dXBQYWludCgm
aGJGb250RGF0YS0+bV9wYWludCk7CisgICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVh
dGUobV9mYWNlKTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmQnV6elNraWFHZXRG
b250RnVuY3MoKSwgaGJGb250RGF0YSwgZGVzdHJveUhhcmZCdXp6Rm9udERhdGEpOworICAgIGZs
b2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS0+c2l6ZSgpOworICAgIGludCBzY2FsZSA9IFNraWFT
Y2FsYXJUb0hhcmZCdXp6UG9zaXRpb24oc2l6ZSk7CisgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9u
dCwgc2NhbGUsIHNjYWxlKTsKKyAgICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOworICAg
IHJldHVybiBmb250OworfQorCitHbHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNy
ZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAg
IHJldHVybiBHbHlwaEJ1ZmZlckFkdmFuY2Uod2lkdGgsIGhlaWdodCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmQxM2Yx
NDY0NTU0MmVhNjM5MmY0YzYzNmRlYWNkYTdiOWJkZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3Bw
CkBAIC0wLDAgKzEsNTQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZCdXp6
U2hhcGVyLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgi
CisjaW5jbHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
VGV4dFJ1bi5oIgorI2luY2x1ZGUgImhiLWljdS5oIgorI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6
ci5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEhhcmZCdXp6U2NvcGVkUHRyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKCpEZXN0
cm95RnVuY3Rpb24pKFQqKTsKKworICAgIEhhcmZCdXp6U2NvcGVkUHRyKFQqIHB0ciwgRGVzdHJv
eUZ1bmN0aW9uIGRlc3Ryb3kpCisgICAgICAgIDogbV9wdHIocHRyKQorICAgICAgICAsIG1fZGVz
dHJveShkZXN0cm95KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZGVzdHJveSk7CisgICAgfQor
ICAgIH5IYXJmQnV6elNjb3BlZFB0cigpCisgICAgeworICAgICAgICBpZiAobV9wdHIpCisgICAg
ICAgICAgICAoKm1fZGVzdHJveSkobV9wdHIpOworICAgIH0KKworICAgIFQqIGdldCgpIHsgcmV0
dXJuIG1fcHRyOyB9Citwcml2YXRlOgorICAgIFQqIG1fcHRyOworICAgIERlc3Ryb3lGdW5jdGlv
biBtX2Rlc3Ryb3k7Cit9OworCitzdGF0aWMgaW5saW5lIGZsb2F0IGhhcmZCdXp6UG9zaXRpb25U
b0Zsb2F0KGhiX3Bvc2l0aW9uX3QgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0Pih2YWx1ZSkgLyAoMSA8PCAxNik7Cit9CisKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1
bjo6SGFyZkJ1enpSdW4oY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biwgaGJfc2NyaXB0X3Qgc2NyaXB0KQorICAgIDogbV9mb250RGF0YShmb250RGF0YSkKKyAgICAs
IG1fc3RhcnRJbmRleChzdGFydEluZGV4KQorICAgICwgbV9udW1DaGFyYWN0ZXJzKG51bUNoYXJh
Y3RlcnMpCisgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgLCBtX3NjcmlwdChzY3Jp
cHQpCit7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphcHBseVNoYXBl
UmVzdWx0KGhiX2J1ZmZlcl90KiBoYXJmQnV6ekJ1ZmZlcikKK3sKKyAgICBtX251bUdseXBocyA9
IGhiX2J1ZmZlcl9nZXRfbGVuZ3RoKGhhcmZCdXp6QnVmZmVyKTsKKyAgICBtX2dseXBocy5yZXNp
emUobV9udW1HbHlwaHMpOworICAgIG1fYWR2YW5jZXMucmVzaXplKG1fbnVtR2x5cGhzKTsKKyAg
ICBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzLnJlc2l6ZShtX251bUdseXBocyk7CisgICAgbV9v
ZmZzZXRzLnJlc2l6ZShtX251bUdseXBocyk7Cit9CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3Qg
Z2x5cGhJZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSkKK3sK
KyAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaElkOworICAgIG1fYWR2YW5jZXNbaW5kZXhdID0g
YWR2YW5jZTsKKyAgICBtX29mZnNldHNbaW5kZXhdID0gRmxvYXRQb2ludChvZmZzZXRYLCBvZmZz
ZXRZKTsKK30KKworaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5k
ZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0WCA8PSBt
X3dpZHRoKTsKKyAgICBmbG9hdCBjdXJyZW50WCA9IDA7CisgICAgZmxvYXQgY3VycmVudEFkdmFu
Y2UgPSBtX2FkdmFuY2VzWzBdOworICAgIHVuc2lnbmVkIGdseXBoSW5kZXggPSAwOworCisgICAg
Ly8gU3VtIHVwIGFkdmFuY2VzIHRoYXQgYmVsb25nIHRvIGEgY2hhcmFjdGVyLgorICAgIHdoaWxl
IChnbHlwaEluZGV4IDwgbV9udW1HbHlwaHMgLSAxICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4
ZXNbZ2x5cGhJbmRleF0gPT0gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4ICsg
MV0pCisgICAgICAgIGN1cnJlbnRBZHZhbmNlICs9IG1fYWR2YW5jZXNbKytnbHlwaEluZGV4XTsK
KyAgICBjdXJyZW50QWR2YW5jZSA9IGN1cnJlbnRBZHZhbmNlIC8gMi4wOworICAgIGlmICh0YXJn
ZXRYIDw9IGN1cnJlbnRBZHZhbmNlKQorICAgICAgICByZXR1cm4gcnRsKCkgPyBtX251bUNoYXJh
Y3RlcnMgOiAwOworCisgICAgKytnbHlwaEluZGV4OworICAgIHdoaWxlIChnbHlwaEluZGV4IDwg
bV9udW1HbHlwaHMpIHsKKyAgICAgICAgdW5zaWduZWQgcHJldkNoYXJhY3RlckluZGV4ID0gbV9n
bHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4IC0gMV07CisgICAgICAgIGZsb2F0IHBy
ZXZBZHZhbmNlID0gY3VycmVudEFkdmFuY2U7CisgICAgICAgIGN1cnJlbnRBZHZhbmNlID0gbV9h
ZHZhbmNlc1tnbHlwaEluZGV4XTsKKyAgICAgICAgd2hpbGUgKGdseXBoSW5kZXggPCBtX251bUds
eXBocyAtIDEgJiYgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4XSA9PSBtX2ds
eXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXggKyAxXSkKKyAgICAgICAgICAgIGN1cnJl
bnRBZHZhbmNlICs9IG1fYWR2YW5jZXNbKytnbHlwaEluZGV4XTsKKyAgICAgICAgY3VycmVudEFk
dmFuY2UgPSBjdXJyZW50QWR2YW5jZSAvIDIuMDsKKyAgICAgICAgZmxvYXQgbmV4dFggPSBjdXJy
ZW50WCArIHByZXZBZHZhbmNlICsgY3VycmVudEFkdmFuY2U7CisgICAgICAgIGlmIChjdXJyZW50
WCA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgpCisgICAgICAgICAgICByZXR1cm4gcnRs
KCkgPyBwcmV2Q2hhcmFjdGVySW5kZXggOiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBo
SW5kZXhdOworICAgICAgICBjdXJyZW50WCA9IG5leHRYOworICAgICAgICBwcmV2QWR2YW5jZSA9
IGN1cnJlbnRBZHZhbmNlOworICAgICAgICArK2dseXBoSW5kZXg7CisgICAgfQorCisgICAgcmV0
dXJuIHJ0bCgpID8gMCA6IG1fbnVtQ2hhcmFjdGVyczsKK30KKworZmxvYXQgSGFyZkJ1enpTaGFw
ZXI6OkhhcmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorewor
ICAgIEFTU0VSVChvZmZzZXQgPCBtX251bUNoYXJhY3RlcnMpOworICAgIHVuc2lnbmVkIGdseXBo
SW5kZXggPSAwOworICAgIGZsb2F0IHBvc2l0aW9uID0gMDsKKyAgICBpZiAocnRsKCkpIHsKKyAg
ICAgICAgd2hpbGUgKGdseXBoSW5kZXggPCBtX251bUdseXBocyAmJiBtX2dseXBoVG9DaGFyYWN0
ZXJJbmRleGVzW2dseXBoSW5kZXhdID4gb2Zmc2V0KSB7CisgICAgICAgICAgICBwb3NpdGlvbiAr
PSBtX2FkdmFuY2VzW2dseXBoSW5kZXhdOworICAgICAgICAgICAgKytnbHlwaEluZGV4OworICAg
ICAgICB9CisgICAgICAgIC8vIEZvciBSVEwsIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSByaWdodCBz
aWRlIGJvdW5kYXJ5IG9mIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgIC8vIEFkZCBhZHZhbmNlIG9m
IGdseXBocyB3aGljaCBhcmUgcGFydCBvZiB0aGUgY2hhcmFjdGVyLgorICAgICAgICB3aGlsZSAo
Z2x5cGhJbmRleCA8IG1fbnVtR2x5cGhzIC0gMSAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVz
W2dseXBoSW5kZXhdID09IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRleCArIDFd
KSB7CisgICAgICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2dseXBoSW5kZXhdOworICAg
ICAgICAgICAgKytnbHlwaEluZGV4OworICAgICAgICB9CisgICAgICAgIHBvc2l0aW9uICs9IG1f
YWR2YW5jZXNbZ2x5cGhJbmRleF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKGdseXBo
SW5kZXggPCBtX251bUdseXBocyAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5k
ZXhdIDwgb2Zmc2V0KSB7CisgICAgICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2dseXBo
SW5kZXhdOworICAgICAgICAgICAgKytnbHlwaEluZGV4OworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBwb3NpdGlvbjsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhj
b25zdCBVQ2hhciogc291cmNlLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpCit7Cisg
ICAgaW50IHBvc2l0aW9uID0gMDsKKyAgICBib29sIGVycm9yID0gZmFsc2U7CisgICAgd2hpbGUg
KHBvc2l0aW9uIDwgbGVuZ3RoKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgICAg
ICBpbnQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIFUxNl9ORVhUKHNvdXJjZSwg
bmV4dFBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7CisgICAgICAgIC8vIERvbid0IG5vcm1h
bGl6ZSB0YWJzIGFzIHRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzIHNwYWNlcyBmb3Igd29yZC1lbmQu
CisgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSAmJiBjaGFyYWN0ZXIg
IT0gJ1x0JykKKyAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsKKyAgICAgICAgZWxzZSBpZiAo
Rm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGNoYXJhY3RlcikpCisg
ICAgICAgICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgVTE2X0FQUEVO
RChkZXN0aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyLCBlcnJvcik7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsICFlcnJvcik7CisgICAgICAgIHBvc2l0aW9uID0gbmV4
dFBvc2l0aW9uOworICAgIH0KK30KKworSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNv
bnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1bikKKyAgICA6IEhhcmZCdXp6U2hhcGVy
QmFzZShmb250LCBydW4pCisgICAgLCBtX2Zyb21JbmRleCgwKQorICAgICwgbV90b0luZGV4KG1f
cnVuLmxlbmd0aCgpKQoreworICAgIG1fbm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIo
bmV3IFVDaGFyW21fcnVuLmxlbmd0aCgpICsgMV0pOworICAgIG1fbm9ybWFsaXplZEJ1ZmZlckxl
bmd0aCA9IG1fcnVuLmxlbmd0aCgpOworICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobV9ydW4uY2hh
cmFjdGVyczE2KCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVy
TGVuZ3RoKTsKKyAgICBzZXRQYWRkaW5nKG1fcnVuLmV4cGFuc2lvbigpKTsKKyAgICBzZXRGb250
RmVhdHVyZXMoKTsKK30KKworSGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNoYXBlcigpCit7Cit9
CisKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldERyYXdSYW5nZShpbnQgZnJvbSwgaW50IHRvKQor
eworICAgIEFTU0VSVChmcm9tID49IDApOworICAgIEFTU0VSVCh0byA8PSBtX3J1bi5sZW5ndGgo
KSk7CisgICAgbV9mcm9tSW5kZXggPSBmcm9tOworICAgIG1fdG9JbmRleCA9IHRvOworfQorCit2
b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVyZXMoKQoreworICAgIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGlmIChkZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7CisgICAgICAgIHN0
YXRpYyBoYl9mZWF0dXJlX3QgdmVydCA9IHsgSGFyZkJ1enpGYWNlOjp2ZXJ0VGFnLCAxLCAwLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CisgICAgICAgIHN0YXRpYyBoYl9mZWF0dXJlX3Qg
dnJ0MiA9IHsgSGFyZkJ1enpGYWNlOjp2cnQyVGFnLCAxLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oLTEpIH07CisgICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKHZlcnQpOworICAgICAgICBtX2Zl
YXR1cmVzLmFwcGVuZCh2cnQyKTsKKyAgICB9CisKKyAgICBGb250RmVhdHVyZVNldHRpbmdzKiBz
ZXR0aW5ncyA9IGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpOworICAgIGlmICghc2V0dGlu
Z3MpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bUZlYXR1cmVzID0gc2V0dGlu
Z3MtPnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmVhdHVyZXM7ICsr
aSkgeworICAgICAgICBoYl9mZWF0dXJlX3QgZmVhdHVyZTsKKyAgICAgICAgY29uc3QgVUNoYXIq
IHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0ZXJzKCk7CisgICAgICAgIGZlYXR1
cmUudGFnID0gSEJfVEFHKHRhZ1swXSwgdGFnWzFdLCB0YWdbMl0sIHRhZ1szXSk7CisgICAgICAg
IGZlYXR1cmUudmFsdWUgPSBzZXR0aW5ncy0+YXQoaSkudmFsdWUoKTsKKyAgICAgICAgZmVhdHVy
ZS5zdGFydCA9IDA7CisgICAgICAgIGZlYXR1cmUuZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KC0xKTsKKyAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQoZmVhdHVyZSk7CisgICAgfQorfQorCiti
b29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZShHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7Cisg
ICAgaWYgKCFjb2xsZWN0SGFyZkJ1enpSdW5zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1fdG90YWxXaWR0aCA9IDA7CisgICAgLy8gV2ViS2l0IGRvZXNuJ3Qgc2V0IGRpcmVjdGlv
biB3aGVuIGNhbHVsYXRpbmcgd2lkdGhzLiBMZWF2ZSB0aGUgZGlyZWN0aW9uIHNldHRpbmcgdG8K
KyAgICAvLyBIYXJmQnV6eiB3aGVuIHdlIGFyZSBjYWxjdWxhdGluZyB3aWR0aHMgKGV4Y2VwdCB3
aGVuIGRpcmVjdGlvbmFsT3ZlcnJpZGUoKSBpcyBzZXQpLgorICAgIGlmICghc2hhcGVIYXJmQnV6
elJ1bnMoZ2x5cGhCdWZmZXIgfHwgbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fdG90YWxXaWR0aCA9IHJvdW5kZihtX3RvdGFsV2lkdGgp
OworCisgICAgaWYgKGdseXBoQnVmZmVyICYmICFmaWxsR2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRmxvYXRQ
b2ludCBIYXJmQnV6elNoYXBlcjo6YWRqdXN0U3RhcnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQgKyBtX3N0YXJ0T2Zmc2V0OworfQorCitib29sIEhh
cmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKCkKK3sKKyAgICBjb25zdCBVQ2hhciog
bm9ybWFsaXplZEJ1ZmZlckVuZCA9IG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fbm9ybWFs
aXplZEJ1ZmZlckxlbmd0aDsKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgaXRl
cmF0b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCAwLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5n
dGgsIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7CisgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Cisg
ICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgc3RhcnRJbmRleE9m
Q3VycmVudFJ1biA9IDA7CisgICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1
c3Rlckxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICBVRXJyb3JDb2RlIGVycm9yQ29kZSA9IFVfWkVS
T19FUlJPUjsKKyAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlwdF9nZXRTY3JpcHQo
Y2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29kZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGN1
cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbiA9IGl0ZXJhdG9yLmNoYXJhY3RlcnMoKTsKKyAgICAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGN1cnJlbnRGb250RGF0YSA9IG5leHRGb250RGF0YTsKKyAg
ICAgICAgVVNjcmlwdENvZGUgY3VycmVudFNjcmlwdCA9IG5leHRTY3JpcHQ7CisKKyAgICAgICAg
Zm9yIChpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5jb25zdW1lKGNo
YXJhY3RlciwgY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCkp
IHsKKyAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hhcmFjdGVy
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKFVfR0VUX0dD
X01BU0soY2hhcmFjdGVyKSAmIFVfR0NfTV9NQVNLKSB7CisgICAgICAgICAgICAgICAgaW50IG1h
cmtMZW5ndGggPSBjbHVzdGVyTGVuZ3RoOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBt
YXJrQ2hhcmFjdGVyc0VuZCA9IGl0ZXJhdG9yLmNoYXJhY3RlcnMoKSArIGNsdXN0ZXJMZW5ndGg7
CisgICAgICAgICAgICAgICAgd2hpbGUgKG1hcmtDaGFyYWN0ZXJzRW5kIDwgbm9ybWFsaXplZEJ1
ZmZlckVuZCkgeworICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIG5leHRDaGFyYWN0ZXI7Cisg
ICAgICAgICAgICAgICAgICAgIGludCBuZXh0Q2hhcmFjdGVyTGVuZ3RoID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgVTE2X05FWFQobWFya0NoYXJhY3RlcnNFbmQsIG5leHRDaGFyYWN0ZXJMZW5n
dGgsIG5vcm1hbGl6ZWRCdWZmZXJFbmQgLSBtYXJrQ2hhcmFjdGVyc0VuZCwgbmV4dENoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgICAgIGlmICghKFVfR0VUX0dDX01BU0sobmV4dENoYXJhY3Rl
cikgJiBVX0dDX01fTUFTSykpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgbWFya0xlbmd0aCArPSBuZXh0Q2hhcmFjdGVyTGVuZ3RoOworICAgICAg
ICAgICAgICAgICAgICBtYXJrQ2hhcmFjdGVyc0VuZCArPSBuZXh0Q2hhcmFjdGVyTGVuZ3RoOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9udERhdGEt
PmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGN1cnJlbnRDaGFyYWN0ZXJQb3Np
dGlvbiwgbWFya0NoYXJhY3RlcnNFbmQgLSBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJMZW5ndGggPSBtYXJrTGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBm
YWxzZSkuZm9udERhdGE7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0
Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNl
KS5mb250RGF0YTsKKworICAgICAgICAgICAgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0
KGNoYXJhY3RlciwgJmVycm9yQ29kZSk7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9y
Q29kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKChu
ZXh0Rm9udERhdGEgIT0gY3VycmVudEZvbnREYXRhKSB8fCAoKGN1cnJlbnRTY3JpcHQgIT0gbmV4
dFNjcmlwdCkgJiYgKG5leHRTY3JpcHQgIT0gVVNDUklQVF9JTkhFUklURUQpICYmICghdXNjcmlw
dF9oYXNTY3JpcHQoY2hhcmFjdGVyLCBjdXJyZW50U2NyaXB0KSkpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKG5leHRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklURUQp
CisgICAgICAgICAgICAgICAgbmV4dFNjcmlwdCA9IGN1cnJlbnRTY3JpcHQ7CisgICAgICAgICAg
ICBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24gPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCk7CisgICAg
ICAgIH0KKyAgICAgICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biA9IGl0ZXJh
dG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSAtIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW47CisgICAgICAg
IGhiX3NjcmlwdF90IHNjcmlwdCA9IGhiX2ljdV9zY3JpcHRfdG9fc2NyaXB0KGN1cnJlbnRTY3Jp
cHQpOworICAgICAgICBtX2hhcmZCdXp6UnVucy5hcHBlbmQoSGFyZkJ1enpSdW46OmNyZWF0ZShj
dXJyZW50Rm9udERhdGEsIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4sIG51bUNoYXJhY3RlcnNPZkN1
cnJlbnRSdW4sIG1fcnVuLmRpcmVjdGlvbigpLCBzY3JpcHQpKTsKKyAgICAgICAgY3VycmVudEZv
bnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBzdGFydEluZGV4T2ZDdXJyZW50UnVuID0g
aXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOworICAgIH0gd2hpbGUgKGl0ZXJhdG9yLmNvbnN1
bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSk7CisKKyAgICByZXR1cm4gIW1faGFyZkJ1enpS
dW5zLmlzRW1wdHkoKTsKK30KKworYm9vbCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1
bnMoYm9vbCBzaG91bGRTZXREaXJlY3Rpb24pCit7CisgICAgSGFyZkJ1enpTY29wZWRQdHI8aGJf
YnVmZmVyX3Q+IGhhcmZCdXp6QnVmZmVyKGhiX2J1ZmZlcl9jcmVhdGUoKSwgaGJfYnVmZmVyX2Rl
c3Ryb3kpOworCisgICAgaGJfYnVmZmVyX3NldF91bmljb2RlX2Z1bmNzKGhhcmZCdXp6QnVmZmVy
LmdldCgpLCBoYl9pY3VfZ2V0X3VuaWNvZGVfZnVuY3MoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9oYXJmQnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWdu
ZWQgcnVuSW5kZXggPSBtX3J1bi5ydGwoKSA/IG1faGFyZkJ1enpSdW5zLnNpemUoKSAtIGkgLSAx
IDogaTsKKyAgICAgICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZCdXp6UnVuc1ty
dW5JbmRleF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9u
dERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOworCisgICAgICAgIGhiX2J1ZmZlcl9zZXRf
c2NyaXB0KGhhcmZCdXp6QnVmZmVyLmdldCgpLCBjdXJyZW50UnVuLT5zY3JpcHQoKSk7CisgICAg
ICAgIGlmIChzaG91bGRTZXREaXJlY3Rpb24pCisgICAgICAgICAgICBoYl9idWZmZXJfc2V0X2Rp
cmVjdGlvbihoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgY3VycmVudFJ1bi0+cnRsKCkgPyBIQl9ESVJF
Q1RJT05fUlRMIDogSEJfRElSRUNUSU9OX0xUUik7CisKKyAgICAgICAgLy8gQWRkIGEgc3BhY2Ug
YXMgcHJlLWNvbnRleHQgdG8gdGhlIGJ1ZmZlci4gVGhpcyBwcmV2ZW50cyBzaG93aW5nIGRvdHRl
ZC1jaXJjbGUKKyAgICAgICAgLy8gZm9yIGNvbWJpbmluZyBtYXJrcyBhdCB0aGUgYmVnaW5uaW5n
IG9mIHJ1bnMuCisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBwcmVDb250ZXh0ID0gJyAn
OworICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZCdXp6QnVmZmVyLmdldCgpLCAmcHJl
Q29udGV4dCwgMSwgMSwgMCk7CisKKyAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAm
JiB1X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVyW2N1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKV0p
KSB7CisgICAgICAgICAgICBTdHJpbmcgdXBwZXJUZXh0ID0gU3RyaW5nKG1fbm9ybWFsaXplZEJ1
ZmZlci5nZXQoKSArIGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hh
cmFjdGVycygpKTsKKyAgICAgICAgICAgIHVwcGVyVGV4dC5tYWtlVXBwZXIoKTsKKyAgICAgICAg
ICAgIGN1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVwcGVy
VGV4dFswXSwgZmFsc2UsIFNtYWxsQ2Fwc1ZhcmlhbnQpLmZvbnREYXRhOworICAgICAgICAgICAg
aGJfYnVmZmVyX2FkZF91dGYxNihoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgdXBwZXJUZXh0LmNoYXJh
Y3RlcnMoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpLCAwLCBjdXJyZW50UnVuLT5udW1D
aGFyYWN0ZXJzKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGhiX2J1ZmZlcl9hZGRf
dXRmMTYoaGFyZkJ1enpCdWZmZXIuZ2V0KCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIGN1
cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpLCAwLCBj
dXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEq
IHBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZjdXJyZW50Rm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKKyAgICAgICAgSGFyZkJ1enpGYWNlKiBmYWNlID0gcGxh
dGZvcm1EYXRhLT5oYXJmQnV6ekZhY2UoKTsKKyAgICAgICAgaWYgKCFmYWNlKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpCisgICAgICAgICAgICBmYWNlLT5zZXRTY3JpcHRG
b3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhhcmZCdXp6QnVmZmVyLmdldCgpKTsKKworICAg
ICAgICBIYXJmQnV6elNjb3BlZFB0cjxoYl9mb250X3Q+IGhhcmZCdXp6Rm9udChmYWNlLT5jcmVh
dGVGb250KCksIGhiX2ZvbnRfZGVzdHJveSk7CisKKyAgICAgICAgaGJfc2hhcGUoaGFyZkJ1enpG
b250LmdldCgpLCBoYXJmQnV6ekJ1ZmZlci5nZXQoKSwgbV9mZWF0dXJlcy5pc0VtcHR5KCkgPyAw
IDogbV9mZWF0dXJlcy5kYXRhKCksIG1fZmVhdHVyZXMuc2l6ZSgpKTsKKworICAgICAgICBjdXJy
ZW50UnVuLT5hcHBseVNoYXBlUmVzdWx0KGhhcmZCdXp6QnVmZmVyLmdldCgpKTsKKyAgICAgICAg
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihjdXJyZW50UnVuLCBoYXJmQnV6ekJ1ZmZl
ci5nZXQoKSk7CisKKyAgICAgICAgaGJfYnVmZmVyX3Jlc2V0KGhhcmZCdXp6QnVmZmVyLmdldCgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3VycmVudFJ1biwg
aGJfYnVmZmVyX3QqIGhhcmZCdXp6QnVmZmVyKQoreworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOworICAgIGhiX2dseXBo
X2luZm9fdCogZ2x5cGhJbmZvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5mb3MoaGFyZkJ1enpC
dWZmZXIsIDApOworICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QqIGdseXBoUG9zaXRpb25zID0gaGJf
YnVmZmVyX2dldF9nbHlwaF9wb3NpdGlvbnMoaGFyZkJ1enpCdWZmZXIsIDApOworCisgICAgdW5z
aWduZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7CisgICAgdWludDE2X3Qq
IGdseXBoVG9DaGFyYWN0ZXJJbmRleGVzID0gY3VycmVudFJ1bi0+Z2x5cGhUb0NoYXJhY3Rlcklu
ZGV4ZXMoKTsKKyAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOworCisgICAgLy8gSGFyZkJ1enog
cmV0dXJucyB0aGUgc2hhcGluZyByZXN1bHQgaW4gdmlzdWFsIG9yZGVyLiBXZSBuZWVkIG5vdCB0
byBmbGlwIGZvciBSVEwuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgeworICAgICAgICBib29sIHJ1bkVuZCA9IGkgKyAxID09IG51bUdseXBoczsKKyAgICAgICAg
dWludDE2X3QgZ2x5cGggPSBnbHlwaEluZm9zW2ldLmNvZGVwb2ludDsKKyAgICAgICAgZmxvYXQg
b2Zmc2V0WCA9IGhhcmZCdXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfb2Zm
c2V0KTsKKyAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IC1oYXJmQnV6elBvc2l0aW9uVG9GbG9hdChn
bHlwaFBvc2l0aW9uc1tpXS55X29mZnNldCk7CisgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBoYXJm
QnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpXS54X2FkdmFuY2UpOworCisgICAg
ICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IGN1cnJlbnRSdW4tPnN0YXJ0SW5k
ZXgoKSArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKKyAgICAgICAgYm9vbCBpc0NsdXN0ZXJFbmQg
PSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5mb3NbaSArIDFdLmNs
dXN0ZXI7CisgICAgICAgIGZsb2F0IHNwYWNpbmcgPSAwOworCisgICAgICAgIGdseXBoVG9DaGFy
YWN0ZXJJbmRleGVzW2ldID0gZ2x5cGhJbmZvc1tpXS5jbHVzdGVyOworCisgICAgICAgIGlmIChp
c0NsdXN0ZXJFbmQgJiYgIUZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShtX25vcm1hbGl6ZWRC
dWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4XSkpCisgICAgICAgICAgICBzcGFjaW5nICs9IG1f
bGV0dGVyU3BhY2luZzsKKworICAgICAgICBpZiAoaXNDbHVzdGVyRW5kICYmIGlzV29yZEVuZChj
dXJyZW50Q2hhcmFjdGVySW5kZXgpKQorICAgICAgICAgICAgc3BhY2luZyArPSBkZXRlcm1pbmVX
b3JkQnJlYWtTcGFjaW5nKCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+aXNaZXJv
V2lkdGhTcGFjZUdseXBoKGdseXBoKSkgeworICAgICAgICAgICAgY3VycmVudFJ1bi0+c2V0R2x5
cGhBbmRQb3NpdGlvbnMoaSwgZ2x5cGgsIDAsIDAsIDApOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBhZHZhbmNlICs9IHNwYWNpbmc7CisgICAgICAgIGlmICht
X3J1bi5ydGwoKSkgeworICAgICAgICAgICAgLy8gSW4gUlRMLCBzcGFjaW5nIHNob3VsZCBiZSBh
ZGRlZCB0byBsZWZ0IHNpZGUgb2YgZ2x5cGhzLgorICAgICAgICAgICAgb2Zmc2V0WCArPSBzcGFj
aW5nOworICAgICAgICAgICAgaWYgKCFpc0NsdXN0ZXJFbmQpCisgICAgICAgICAgICAgICAgb2Zm
c2V0WCArPSBtX2xldHRlclNwYWNpbmc7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50UnVu
LT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgYWR2YW5jZSwgb2Zmc2V0WCwgb2Zmc2V0
WSk7CisKKyAgICAgICAgdG90YWxBZHZhbmNlICs9IGFkdmFuY2U7CisgICAgfQorICAgIGN1cnJl
bnRSdW4tPnNldFdpZHRoKHRvdGFsQWR2YW5jZSA+IDAuMCA/IHRvdGFsQWR2YW5jZSA6IDAuMCk7
CisgICAgbV90b3RhbFdpZHRoICs9IGN1cnJlbnRSdW4tPndpZHRoKCk7Cit9CisKK3ZvaWQgSGFy
ZkJ1enpTaGFwZXI6OmZpbGxHbHlwaEJ1ZmZlckZyb21IYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIsIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuLCBGbG9hdFBvaW50JiBmaXJzdE9m
ZnNldE9mTmV4dFJ1bikKK3sKKyAgICBGbG9hdFBvaW50KiBvZmZzZXRzID0gY3VycmVudFJ1bi0+
b2Zmc2V0cygpOworICAgIHVpbnQxNl90KiBnbHlwaHMgPSBjdXJyZW50UnVuLT5nbHlwaHMoKTsK
KyAgICBmbG9hdCogYWR2YW5jZXMgPSBjdXJyZW50UnVuLT5hZHZhbmNlcygpOworICAgIHVuc2ln
bmVkIG51bUdseXBocyA9IGN1cnJlbnRSdW4tPm51bUdseXBocygpOworICAgIHVpbnQxNl90KiBn
bHlwaFRvQ2hhcmFjdGVySW5kZXhlcyA9IGN1cnJlbnRSdW4tPmdseXBoVG9DaGFyYWN0ZXJJbmRl
eGVzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
KyAgICAgICAgdWludDE2X3QgY3VycmVudENoYXJhY3RlckluZGV4ID0gY3VycmVudFJ1bi0+c3Rh
cnRJbmRleCgpICsgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV07CisgICAgICAgIEZsb2F0UG9p
bnQmIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXRzW2ldOworICAgICAgICBGbG9hdFBvaW50JiBuZXh0
T2Zmc2V0ID0gKGkgPT0gbnVtR2x5cGhzIC0gMSkgPyBmaXJzdE9mZnNldE9mTmV4dFJ1biA6IG9m
ZnNldHNbaSArIDFdOworICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VYID0gYWR2YW5jZXNbaV0g
KyBuZXh0T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpOworICAgICAgICBmbG9hdCBnbHlw
aEFkdmFuY2VZID0gbmV4dE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKTsKKyAgICAgICAg
aWYgKG1fcnVuLnJ0bCgpKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlckluZGV4
ID4gbV90b0luZGV4KQorICAgICAgICAgICAgICAgIG1fc3RhcnRPZmZzZXQubW92ZShnbHlwaEFk
dmFuY2VYLCBnbHlwaEFkdmFuY2VZKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFy
YWN0ZXJJbmRleCA+PSBtX2Zyb21JbmRleCkKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGdseXBoc1tpXSwgY3VycmVudFJ1bi0+Zm9udERhdGEoKSwgY3JlYXRlR2x5cGhCdWZmZXJB
ZHZhbmNlKGdseXBoQWR2YW5jZVgsIGdseXBoQWR2YW5jZVkpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXggPCBtX2Zyb21JbmRleCkKKyAg
ICAgICAgICAgICAgICBtX3N0YXJ0T2Zmc2V0Lm1vdmUoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZh
bmNlWSk7CisgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXggPCBtX3Rv
SW5kZXgpCisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaHNbaV0sIGN1cnJl
bnRSdW4tPmZvbnREYXRhKCksIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShnbHlwaEFkdmFuY2VY
LCBnbHlwaEFkdmFuY2VZKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgSGFyZkJ1enpT
aGFwZXI6OmZpbGxHbHlwaEJ1ZmZlcihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAg
dW5zaWduZWQgbnVtUnVucyA9IG1faGFyZkJ1enpSdW5zLnNpemUoKTsKKyAgICBpZiAobV9ydW4u
cnRsKCkpIHsKKyAgICAgICAgbV9zdGFydE9mZnNldCA9IG1faGFyZkJ1enpSdW5zLmxhc3QoKS0+
b2Zmc2V0cygpWzBdOworICAgICAgICBmb3IgKGludCBydW5JbmRleCA9IG51bVJ1bnMgLSAxOyBy
dW5JbmRleCA+PSAwOyAtLXJ1bkluZGV4KSB7CisgICAgICAgICAgICBIYXJmQnV6elJ1biogY3Vy
cmVudFJ1biA9IG1faGFyZkJ1enpSdW5zW3J1bkluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIEZs
b2F0UG9pbnQgZmlyc3RPZmZzZXRPZk5leHRSdW4gPSAhcnVuSW5kZXggPyBGbG9hdFBvaW50KCkg
OiBtX2hhcmZCdXp6UnVuc1tydW5JbmRleCAtIDFdLT5vZmZzZXRzKClbMF07CisgICAgICAgICAg
ICBmaWxsR2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIsIGN1cnJlbnRSdW4s
IGZpcnN0T2Zmc2V0T2ZOZXh0UnVuKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IG1fc3RhcnRPZmZzZXQgPSBtX2hhcmZCdXp6UnVucy5maXJzdCgpLT5vZmZzZXRzKClbMF07Cisg
ICAgICAgIGZvciAodW5zaWduZWQgcnVuSW5kZXggPSAwOyBydW5JbmRleCA8IG51bVJ1bnM7ICsr
cnVuSW5kZXgpIHsKKyAgICAgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJm
QnV6elJ1bnNbcnVuSW5kZXhdLmdldCgpOworICAgICAgICAgICAgRmxvYXRQb2ludCBmaXJzdE9m
ZnNldE9mTmV4dFJ1biA9IHJ1bkluZGV4ID09IG51bVJ1bnMgLSAxID8gRmxvYXRQb2ludCgpIDog
bV9oYXJmQnV6elJ1bnNbcnVuSW5kZXggKyAxXS0+b2Zmc2V0cygpWzBdOworICAgICAgICAgICAg
ZmlsbEdseXBoQnVmZmVyRnJvbUhhcmZCdXp6UnVuKGdseXBoQnVmZmVyLCBjdXJyZW50UnVuLCBm
aXJzdE9mZnNldE9mTmV4dFJ1bik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGdseXBo
QnVmZmVyLT5zaXplKCk7Cit9CisKK2ludCBIYXJmQnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRp
b24oZmxvYXQgdGFyZ2V0WCkKK3sKKyAgICBpbnQgY2hhcmFjdGVyc1NvRmFyID0gMDsKKyAgICBm
bG9hdCBjdXJyZW50WCA9IDA7CisKKyAgICBpZiAobV9ydW4ucnRsKCkpIHsKKyAgICAgICAgY2hh
cmFjdGVyc1NvRmFyID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOworICAgICAgICBmb3IgKGlu
dCBpID0gbV9oYXJmQnV6elJ1bnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
ICAgIGNoYXJhY3RlcnNTb0ZhciAtPSBtX2hhcmZCdXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygp
OworICAgICAgICAgICAgZmxvYXQgbmV4dFggPSBjdXJyZW50WCArIG1faGFyZkJ1enpSdW5zW2ld
LT53aWR0aCgpOworICAgICAgICAgICAgZmxvYXQgb2Zmc2V0Rm9yUnVuID0gdGFyZ2V0WCAtIGN1
cnJlbnRYOworICAgICAgICAgICAgaWYgKG9mZnNldEZvclJ1biA+PSAwICYmIG9mZnNldEZvclJ1
biA8PSBtX2hhcmZCdXp6UnVuc1tpXS0+d2lkdGgoKSkgeworICAgICAgICAgICAgICAgIC8vIFRo
ZSB4IHZhbHVlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiB0aGlzIHNjcmlwdCBydW4uCisgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW5kZXggPSBtX2hhcmZCdXp6UnVuc1tpXS0+Y2hhcmFj
dGVySW5kZXhGb3JYUG9zaXRpb24ob2Zmc2V0Rm9yUnVuKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
dXJyZW50WCA9IG5leHRYOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZkJ1enpSdW5zLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBmbG9hdCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJmQnV6elJ1bnNbaV0tPndpZHRoKCk7
CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRGb3JSdW4gPSB0YXJnZXRYIC0gY3VycmVudFg7Cisg
ICAgICAgICAgICBpZiAob2Zmc2V0Rm9yUnVuID49IDAgJiYgb2Zmc2V0Rm9yUnVuIDw9IG1faGFy
ZkJ1enpSdW5zW2ldLT53aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW5kZXggPSBtX2hhcmZCdXp6UnVuc1tpXS0+Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24ob2Zm
c2V0Rm9yUnVuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5k
ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyYWN0ZXJzU29GYXIgKz0gbV9oYXJm
QnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGN1cnJlbnRYID0gbmV4
dFg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyOworfQor
CitGbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pCit7CisgICAgZmxvYXQgY3Vy
cmVudFggPSAwOworICAgIGZsb2F0IGZyb21YID0gMDsKKyAgICBmbG9hdCB0b1ggPSAwOworICAg
IGJvb2wgZm91bmRGcm9tWCA9IGZhbHNlOworICAgIGJvb2wgZm91bmRUb1ggPSBmYWxzZTsKKwor
ICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgY3VycmVudFggPSBtX3RvdGFsV2lkdGg7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZkJ1enpSdW5zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgICAgIGN1cnJlbnRYIC09IG1faGFy
ZkJ1enpSdW5zW2ldLT53aWR0aCgpOworICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFy
ZkJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7CisgICAgICAgIGlmICghZm91bmRGcm9tWCAm
JiBmcm9tID49IDAgJiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpIHsKKyAgICAgICAgICAgIGZyb21Y
ID0gbV9oYXJmQnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldChmcm9tKSArIGN1cnJlbnRY
OworICAgICAgICAgICAgZm91bmRGcm9tWCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworCisgICAgICAgIGlmICghZm91bmRUb1ggJiYg
dG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpIHsKKyAgICAgICAgICAgIHRvWCA9IG1faGFy
ZkJ1enpSdW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQodG8pICsgY3VycmVudFg7CisgICAgICAg
ICAgICBmb3VuZFRvWCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG8gLT0g
bnVtQ2hhcmFjdGVyczsKKworICAgICAgICBpZiAoZm91bmRGcm9tWCAmJiBmb3VuZFRvWCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIW1fcnVuLnJ0bCgpKQorICAgICAgICAgICAg
Y3VycmVudFggKz0gbV9oYXJmQnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgfQorCisgICAgLy8g
VGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQuCisg
ICAgaWYgKCFmb3VuZEZyb21YKQorICAgICAgICBmcm9tWCA9IDA7CisgICAgaWYgKCFmb3VuZFRv
WCkKKyAgICAgICAgdG9YID0gbV9ydW4ucnRsKCkgPyAwIDogbV90b3RhbFdpZHRoOworCisgICAg
Ly8gVXNpbmcgZmxvb3JmKCkgYW5kIHJvdW5kZigpIGFzIHRoZSBzYW1lIGFzIG1hYyBwb3J0Lgor
ICAgIGlmIChmcm9tWCA8IHRvWCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9p
bnQueCgpICsgZnJvbVgpLCBwb2ludC55KCksIHJvdW5kZih0b1ggLSBmcm9tWCksIGhlaWdodCk7
CisgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgdG9YKSwgcG9pbnQueSgp
LCByb3VuZGYoZnJvbVggLSB0b1gpLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpTaGFwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZWZhZWUzZjBkMTM1NWI0ZDM4MjI1
Yzg5N2ZjYTc1MGJhNWQ4YzQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaApAQCAtMCwwICsxLDEyNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSGFyZkJ1enpTaGFwZXJfaAorI2RlZmluZSBIYXJmQnV6elNoYXBlcl9oCisKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRl
ICJIYXJmQnV6elNoYXBlckJhc2UuaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAi
aGIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250OworY2xhc3MgU2ltcGxlRm9udERhdGE7
CisKK2NsYXNzIEhhcmZCdXp6U2hhcGVyIDogcHVibGljIEhhcmZCdXp6U2hhcGVyQmFzZSB7Citw
dWJsaWM6CisgICAgSGFyZkJ1enpTaGFwZXIoY29uc3QgRm9udCosIGNvbnN0IFRleHRSdW4mKTsK
KyAgICB2aXJ0dWFsIH5IYXJmQnV6elNoYXBlcigpOworCisgICAgdm9pZCBzZXREcmF3UmFuZ2Uo
aW50IGZyb20sIGludCB0byk7CisgICAgYm9vbCBzaGFwZShHbHlwaEJ1ZmZlciogPSAwKTsKKyAg
ICBGbG9hdFBvaW50IGFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYpOworICAgIGZs
b2F0IHRvdGFsV2lkdGgoKSB7IHJldHVybiBtX3RvdGFsV2lkdGg7IH0KKyAgICBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3Qo
Y29uc3QgRmxvYXRQb2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pOworCitwcml2
YXRlOgorICAgIGNsYXNzIEhhcmZCdXp6UnVuIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzT3duUHRyPEhhcmZCdXp6UnVuPiBjcmVhdGUoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfc2NyaXB0X3Qgc2NyaXB0KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhhcmZCdXp6UnVuKGZvbnREYXRhLCBzdGFydElu
ZGV4LCBudW1DaGFyYWN0ZXJzLCBkaXJlY3Rpb24sIHNjcmlwdCkpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhcHBseVNoYXBlUmVzdWx0KGhiX2J1ZmZlcl90Kik7CisgICAgICAgIHZvaWQg
c2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZs
b2F0IGFkdmFuY2UsIGZsb2F0IG9mZnNldFgsIGZsb2F0IG9mZnNldFkpOworICAgICAgICB2b2lk
IHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorCisgICAgICAgIGlu
dCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKKyAgICAgICAgZmxv
YXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CisKKyAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgeyByZXR1cm4gbV9mb250RGF0YTsgfQorICAgICAg
ICB1bnNpZ25lZCBzdGFydEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydEluZGV4OyB9Cisg
ICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX251bUNoYXJh
Y3RlcnM7IH0KKyAgICAgICAgdW5zaWduZWQgbnVtR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1HbHlwaHM7IH0KKyAgICAgICAgdWludDE2X3QqIGdseXBocygpIHsgcmV0dXJuICZtX2dseXBo
c1swXTsgfQorICAgICAgICBmbG9hdCogYWR2YW5jZXMoKSB7IHJldHVybiAmbV9hZHZhbmNlc1sw
XTsgfQorICAgICAgICBGbG9hdFBvaW50KiBvZmZzZXRzKCkgeyByZXR1cm4gJm1fb2Zmc2V0c1sw
XTsgfQorICAgICAgICB1aW50MTZfdCogZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMoKSB7IHJldHVy
biAmbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1swXTsgfQorICAgICAgICBmbG9hdCB3aWR0aCgp
IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICAgICAgYm9vbCBydGwoKSB7IHJldHVybiBtX2RpcmVj
dGlvbiA9PSBSVEw7IH0KKyAgICAgICAgaGJfc2NyaXB0X3Qgc2NyaXB0KCkgeyByZXR1cm4gbV9z
Y3JpcHQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhcmZCdXp6UnVuKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycywg
VGV4dERpcmVjdGlvbiwgaGJfc2NyaXB0X3QpOworCisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBtX2ZvbnREYXRhOworICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0SW5kZXg7CisgICAgICAg
IHNpemVfdCBtX251bUNoYXJhY3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzOwor
ICAgICAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgICAgICBoYl9zY3JpcHRfdCBt
X3NjcmlwdDsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fZ2x5cGhzOworICAgICAg
ICBWZWN0b3I8ZmxvYXQsIDI1Nj4gbV9hZHZhbmNlczsKKyAgICAgICAgVmVjdG9yPHVpbnQxNl90
LCAyNTY+IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXM7CisgICAgICAgIFZlY3RvcjxGbG9hdFBv
aW50LCAyNTY+IG1fb2Zmc2V0czsKKyAgICAgICAgZmxvYXQgbV93aWR0aDsKKyAgICB9OworCisg
ICAgdm9pZCBzZXRGb250RmVhdHVyZXMoKTsKKworICAgIGJvb2wgY29sbGVjdEhhcmZCdXp6UnVu
cygpOworICAgIGJvb2wgc2hhcGVIYXJmQnV6elJ1bnMoYm9vbCBzaG91bGRTZXREaXJlY3Rpb24p
OworICAgIGJvb2wgZmlsbEdseXBoQnVmZmVyKEdseXBoQnVmZmVyKik7CisgICAgdm9pZCBmaWxs
R2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIqLCBIYXJmQnV6elJ1biosIEZs
b2F0UG9pbnQmIGZpcnN0T2Zmc2V0T2ZOZXh0UnVuKTsKKyAgICB2b2lkIHNldEdseXBoUG9zaXRp
b25zRm9ySGFyZkJ1enpSdW4oSGFyZkJ1enpSdW4qLCBoYl9idWZmZXJfdCopOworCisgICAgR2x5
cGhCdWZmZXJBZHZhbmNlIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShmbG9hdCwgZmxvYXQpOwor
CisgICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwgND4gbV9mZWF0dXJlczsKKyAgICBWZWN0b3I8T3du
UHRyPEhhcmZCdXp6UnVuPiwgMTY+IG1faGFyZkJ1enpSdW5zOworCisgICAgRmxvYXRQb2ludCBt
X3N0YXJ0T2Zmc2V0OworCisgICAgaW50IG1fZnJvbUluZGV4OworICAgIGludCBtX3RvSW5kZXg7
CisKKyAgICBmbG9hdCBtX3RvdGFsV2lkdGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBIYXJmQnV6elNoYXBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZGJkODFiZDM3NTFlNjc3ZmQwYWFh
MzNkZDFhYTA1YTJlZmQ1OTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpOR0ZhY2UuaCIKLQotI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJoYi1vdC5oIgotI2luY2x1ZGUgImhiLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgaGJfdGFnX3QgSGFyZkJ1enpOR0ZhY2U6OnZlcnRU
YWcgPSBIQl9UQUcoJ3YnLCAnZScsICdyJywgJ3QnKTsKLWNvbnN0IGhiX3RhZ190IEhhcmZCdXp6
TkdGYWNlOjp2cnQyVGFnID0gSEJfVEFHKCd2JywgJ3InLCAndCcsICcyJyk7Ci0KLS8vIFRob3Vn
aCB3ZSBoYXZlIEZvbnRDYWNoZSBjbGFzcywgd2hpY2ggcHJvdmlkZXMgdGhlIGNhY2hlIG1lY2hh
bmlzbSBmb3IKLS8vIFdlYktpdCdzIGZvbnQgb2JqZWN0cywgd2UgYWxzbyBuZWVkIGFkZGl0aW9u
YWwgY2FjaGluZyBsYXllciBmb3IgSGFyZkJ1enoKLS8vIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGNv
bnN1bXB0aW9uIGJlY2F1c2UgaGJfZmFjZV90IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKLS8v
IHVuZGVybGluZyBmb250IGRhdGEgKGUuZy4gQ1RGb250UmVmLCBGVEZhY2UpLgotCi1jbGFzcyBG
YWNlQ2FjaGVFbnRyeSA6IHB1YmxpYyBSZWZDb3VudGVkPEZhY2VDYWNoZUVudHJ5PiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmFjZUNhY2hlRW50cnk+IGNyZWF0ZShoYl9mYWNl
X3QqIGZhY2UpCi0gICAgewotICAgICAgICBBU1NFUlQoZmFjZSk7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRmFjZUNhY2hlRW50cnkoZmFjZSkpOwotICAgIH0KLSAgICB+RmFjZUNhY2hl
RW50cnkoKQotICAgIHsKLSAgICAgICAgaGJfZmFjZV9kZXN0cm95KG1fZmFjZSk7Ci0gICAgfQot
Ci0gICAgaGJfZmFjZV90KiBmYWNlKCkgeyByZXR1cm4gbV9mYWNlOyB9Ci0gICAgSGFzaE1hcDx1
aW50MzJfdCwgdWludDE2X3Q+KiBnbHlwaENhY2hlKCkgeyByZXR1cm4gJm1fZ2x5cGhDYWNoZTsg
fQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEZhY2VDYWNoZUVudHJ5KGhiX2ZhY2VfdCogZmFj
ZSkKLSAgICAgICAgOiBtX2ZhY2UoZmFjZSkKLSAgICB7IH0KLQotICAgIGhiX2ZhY2VfdCogbV9m
YWNlOwotICAgIEhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiBtX2dseXBoQ2FjaGU7Ci19Owot
Ci10eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxGYWNlQ2FjaGVFbnRyeT4sIFdURjo6
SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWlu
dDY0X3Q+ID4gSGFyZkJ1enpOR0ZhY2VDYWNoZTsKLQotc3RhdGljIEhhcmZCdXp6TkdGYWNlQ2Fj
aGUqIGhhcmZidXp6RmFjZUNhY2hlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhcmZC
dXp6TkdGYWNlQ2FjaGUsIHNfaGFyZmJ1enpGYWNlQ2FjaGUsICgpKTsKLSAgICByZXR1cm4gJnNf
aGFyZmJ1enpGYWNlQ2FjaGU7Ci19Ci0KLUhhcmZCdXp6TkdGYWNlOjpIYXJmQnV6ek5HRmFjZShG
b250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIHVpbnQ2NF90IHVuaXF1ZUlEKQotICAgIDog
bV9wbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKQotICAgICwgbV91bmlxdWVJRCh1bmlxdWVJRCkK
LSAgICAsIG1fc2NyaXB0Rm9yVmVydGljYWxUZXh0KEhCX1NDUklQVF9JTlZBTElEKQotewotICAg
IEhhcmZCdXp6TkdGYWNlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNo
ZSgpLT5hZGQobV91bmlxdWVJRCwgMCk7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gRmFjZUNhY2hlRW50cnk6OmNyZWF0ZShjcmVh
dGVGYWNlKCkpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnJlZigpOwotICAgIG1fZmFj
ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmZhY2UoKTsKLSAgICBtX2dseXBoQ2FjaGVGb3JG
YWNlQ2FjaGVFbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmdseXBoQ2FjaGUoKTsKLX0K
LQotSGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSgpCi17Ci0gICAgSGFyZkJ1enpOR0Zh
Y2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3Vu
aXF1ZUlEKTsKLSAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgp
KTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT52YWx1ZS0+cmVmQ291bnQoKSA+IDEpOwotICAg
IHJlc3VsdC5nZXQoKS0+dmFsdWUtPmRlcmVmKCk7Ci0gICAgaWYgKHJlc3VsdC5nZXQoKS0+dmFs
dWUtPnJlZkNvdW50KCkgPT0gMSkKLSAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVtb3Zl
KG1fdW5pcXVlSUQpOwotfQotCi1zdGF0aWMgaGJfc2NyaXB0X3QgZmluZFNjcmlwdEZvclZlcnRp
Y2FsR2x5cGhTdWJzdGl0dXRpb24oaGJfZmFjZV90KiBmYWNlKQotewotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhDb3VudCA9IDMyOwotCi0gICAgdW5zaWduZWQgc2NyaXB0Q291bnQgPSBt
YXhDb3VudDsKLSAgICBoYl90YWdfdCBzY3JpcHRUYWdzW21heENvdW50XTsKLSAgICBoYl9vdF9s
YXlvdXRfdGFibGVfZ2V0X3NjcmlwdF90YWdzKGZhY2UsIEhCX09UX1RBR19HU1VCLCAwLCAmc2Ny
aXB0Q291bnQsIHNjcmlwdFRhZ3MpOwotICAgIGZvciAodW5zaWduZWQgc2NyaXB0SW5kZXggPSAw
OyBzY3JpcHRJbmRleCA8IHNjcmlwdENvdW50OyArK3NjcmlwdEluZGV4KSB7Ci0gICAgICAgIHVu
c2lnbmVkIGxhbmd1YWdlQ291bnQgPSBtYXhDb3VudDsKLSAgICAgICAgaGJfdGFnX3QgbGFuZ3Vh
Z2VUYWdzW21heENvdW50XTsKLSAgICAgICAgaGJfb3RfbGF5b3V0X3NjcmlwdF9nZXRfbGFuZ3Vh
Z2VfdGFncyhmYWNlLCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0SW5kZXgsIDAsICZsYW5ndWFnZUNv
dW50LCBsYW5ndWFnZVRhZ3MpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxhbmd1YWdlSW5kZXgg
PSAwOyBsYW5ndWFnZUluZGV4IDwgbGFuZ3VhZ2VDb3VudDsgKytsYW5ndWFnZUluZGV4KSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBmZWF0dXJlSW5kZXg7Ci0gICAgICAgICAgICBpZiAoaGJfb3Rf
bGF5b3V0X2xhbmd1YWdlX2ZpbmRfZmVhdHVyZShmYWNlLCBIQl9PVF9UQUdfR1NVQiwgc2NyaXB0
SW5kZXgsIGxhbmd1YWdlSW5kZXgsIEhhcmZCdXp6TkdGYWNlOjp2ZXJ0VGFnLCAmZmVhdHVyZUlu
ZGV4KQotICAgICAgICAgICAgICAgIHx8IGhiX290X2xheW91dF9sYW5ndWFnZV9maW5kX2ZlYXR1
cmUoZmFjZSwgSEJfT1RfVEFHX0dTVUIsIHNjcmlwdEluZGV4LCBsYW5ndWFnZUluZGV4LCBIYXJm
QnV6ek5HRmFjZTo6dnJ0MlRhZywgJmZlYXR1cmVJbmRleCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGhiX290X3RhZ190b19zY3JpcHQoc2NyaXB0VGFnc1tzY3JpcHRJbmRleF0pOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBIQl9TQ1JJUFRfSU5WQUxJRDsKLX0KLQotdm9pZCBIYXJm
QnV6ek5HRmFjZTo6c2V0U2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihoYl9idWZm
ZXJfdCogYnVmZmVyKQotewotICAgIGlmIChtX3NjcmlwdEZvclZlcnRpY2FsVGV4dCA9PSBIQl9T
Q1JJUFRfSU5WQUxJRCkKLSAgICAgICAgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQgPSBmaW5kU2Ny
aXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihtX2ZhY2UpOwotICAgIGhiX2J1ZmZlcl9z
ZXRfc2NyaXB0KGJ1ZmZlciwgbV9zY3JpcHRGb3JWZXJ0aWNhbFRleHQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzYwZGFmOWNmMTIyMGY5N2I4Njc2Y2E5ZjJlNzM0ODUzNmUyOGI5MC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSGFyZkJ1enpOR0ZhY2VfaAotI2RlZmlu
ZSBIYXJmQnV6ek5HRmFjZV9oCi0KLSNpbmNsdWRlIDxoYi5oPgotCi0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci0KLWNsYXNzIEhhcmZCdXp6TkdGYWNlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SGFyZkJ1enpOR0ZhY2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3QgaGJfdGFnX3QgdmVydFRhZzsKLSAgICBzdGF0aWMgY29uc3QgaGJfdGFnX3QgdnJ0MlRhZzsK
LQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZCdXp6TkdGYWNlPiBjcmVhdGUoRm9udFBsYXRm
b3JtRGF0YSogcGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSGFyZkJ1enpOR0ZhY2UocGxhdGZvcm1EYXRhLCB1bmlxdWVJ
RCkpOwotICAgIH0KLSAgICB+SGFyZkJ1enpOR0ZhY2UoKTsKLQotICAgIGhiX2ZvbnRfdCogY3Jl
YXRlRm9udCgpOwotCi0gICAgdm9pZCBzZXRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0
aW9uKGhiX2J1ZmZlcl90Kik7Ci0KLXByaXZhdGU6Ci0gICAgSGFyZkJ1enpOR0ZhY2UoRm9udFBs
YXRmb3JtRGF0YSosIHVpbnQ2NF90KTsKLQotICAgIGhiX2ZhY2VfdCogY3JlYXRlRmFjZSgpOwot
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogbV9wbGF0Zm9ybURhdGE7Ci0gICAgdWludDY0X3QgbV91
bmlxdWVJRDsKLSAgICBoYl9mYWNlX3QqIG1fZmFjZTsKLSAgICBXVEY6Okhhc2hNYXA8dWludDMy
X3QsIHVpbnQxNl90PiogbV9nbHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnk7Ci0KLSAgICBoYl9z
Y3JpcHRfdCBtX3NjcmlwdEZvclZlcnRpY2FsVGV4dDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEhh
cmZCdXp6TkdGYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYjNkMjc4MDQxZWFhNTgxYmQ5MjA3ZWEzOGQ4
ZGYyYmYyOGQ5ZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpO
R0ZhY2VDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkhhcmZCdXp6TkdGYWNlLmgiCi0KLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0j
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5j
bHVkZSA8Y2Fpcm8tZnQuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGZyZWV0eXBl
L2ZyZWV0eXBlLmg+Ci0jaW5jbHVkZSA8ZnJlZXR5cGUvdHR0YWJsZXMuaD4KLSNpbmNsdWRlIDxo
Yi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBDYWlyb0Z0RmFjZUxvY2tlciB7Ci1wdWJsaWM6Ci0gICAgQ2Fpcm9GdEZhY2VM
b2NrZXIoY2Fpcm9fc2NhbGVkX2ZvbnRfdCogY2Fpcm9TY2FsZWRGb250KSA6IG1fc2NhbGVkRm9u
dChjYWlyb1NjYWxlZEZvbnQpIHsgfTsKLSAgICBGVF9GYWNlIGxvY2soKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX3NjYWxlZEZvbnQpOwot
ICAgIH07Ci0gICAgfkNhaXJvRnRGYWNlTG9ja2VyKCkKLSAgICB7Ci0gICAgICAgIGNhaXJvX2Z0
X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fc2NhbGVkRm9udCk7Ci0gICAgfQotcHJpdmF0ZToK
LSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7Ci19OwotCi1zdGF0aWMgaGJf
cG9zaXRpb25fdCBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihmbG9hdCB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aGJfcG9zaXRpb25fdD4odmFsdWUgKiAoMSA8PCAxNikpOwotfQot
Ci1zdGF0aWMgaGJfcG9zaXRpb25fdCBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZG91YmxlIHZh
bHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2YWx1ZSAqICgx
IDw8IDE2KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIENhaXJvR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMo
Y2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCwgaGJfY29kZXBvaW50X3QgY29kZXBvaW50
LCBoYl9wb3NpdGlvbl90KiBhZHZhbmNlLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMpCi17
Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZ2x5cGhFeHRlbnRzOwotICAgIGNhaXJvX2dseXBo
X3QgZ2x5cGg7Ci0gICAgZ2x5cGguaW5kZXggPSBjb2RlcG9pbnQ7Ci0gICAgZ2x5cGgueCA9IDA7
Ci0gICAgZ2x5cGgueSA9IDA7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhz
Y2FsZWRGb250LCAmZ2x5cGgsIDEsICZnbHlwaEV4dGVudHMpOwotCi0gICAgaWYgKGFkdmFuY2Up
Ci0gICAgICAgICphZHZhbmNlID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGdseXBoRXh0ZW50
cy54X2FkdmFuY2UpOwotICAgIGlmIChleHRlbnRzKSB7Ci0gICAgICAgIGV4dGVudHMtPnhfYmVh
cmluZyA9IGRvdWJsZVRvSGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMueF9iZWFyaW5nKTsK
LSAgICAgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gZG91YmxlVG9IYXJmQnV6elBvc2l0aW9uKGds
eXBoRXh0ZW50cy55X2JlYXJpbmcpOwotICAgICAgICBleHRlbnRzLT53aWR0aCA9IGRvdWJsZVRv
SGFyZkJ1enpQb3NpdGlvbihnbHlwaEV4dGVudHMud2lkdGgpOwotICAgICAgICBleHRlbnRzLT5o
ZWlnaHQgPSBkb3VibGVUb0hhcmZCdXp6UG9zaXRpb24oZ2x5cGhFeHRlbnRzLmhlaWdodCk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGgoaGJfZm9udF90Kiwg
dm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90LCBo
Yl9jb2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBs
YXRmb3JtRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRh
KTsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gcGxhdGZvcm1EYXRhLT5z
Y2FsZWRGb250KCk7Ci0gICAgQVNTRVJUKHNjYWxlZEZvbnQpOwotCi0gICAgY2Fpcm9fZ2x5cGhf
dCogZ2x5cGhzID0gMDsKLSAgICBpbnQgbnVtR2x5cGhzID0gMDsKLSAgICBDU3RyaW5nIHV0ZjhD
b2RlcG9pbnQgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+
KCZ1bmljb2RlKSwgMSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgaWYgKENB
SVJPX1NUQVRVU19TVUNDRVNTICE9IGNhaXJvX3NjYWxlZF9mb250X3RleHRfdG9fZ2x5cGhzKHNj
YWxlZEZvbnQsIDAsIDAsIHV0ZjhDb2RlcG9pbnQuZGF0YSgpLCB1dGY4Q29kZXBvaW50Lmxlbmd0
aCgpLCAmZ2x5cGhzLCAmbnVtR2x5cGhzLCAwLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghbnVtR2x5cGhzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKmdseXBo
ID0gZ2x5cGhzWzBdLmluZGV4OwotICAgIGNhaXJvX2dseXBoX2ZyZWUoZ2x5cGhzKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlwaEhv
cml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRf
dCBnbHlwaCwgdm9pZCopCi17Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0g
cmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpOwotICAgIGNhaXJv
X3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKTsK
LSAgICBBU1NFUlQoc2NhbGVkRm9udCk7Ci0KLSAgICBoYl9wb3NpdGlvbl90IGFkdmFuY2UgPSAw
OwotICAgIENhaXJvR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGgsICZh
ZHZhbmNlLCAwKTsKLSAgICByZXR1cm4gYWR2YW5jZTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBo
YXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbihoYl9mb250X3QqLCB2b2lkKiwgaGJfY29k
ZXBvaW50X3QsIGhiX3Bvc2l0aW9uX3QqLCBoYl9wb3NpdGlvbl90Kiwgdm9pZCopCi17Ci0gICAg
Ly8gSnVzdCByZXR1cm4gdHJ1ZSwgZm9sbG93aW5nIHRoZSB3YXkgdGhhdCBIYXJmYnV6ei1GcmVl
VHlwZQotICAgIC8vIGltcGxlbWVudGF0aW9uIGRvZXMuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBoYl9ib29sX3QgaGFyZmJ1enpHZXRHbHlwaEV4dGVudHMoaGJfZm9udF90Kiwgdm9p
ZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4
dGVudHMsIHZvaWQqKQotewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRhKTsKLSAgICBjYWlyb19z
Y2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gcGxhdGZvcm1EYXRhLT5zY2FsZWRGb250KCk7Ci0g
ICAgQVNTRVJUKHNjYWxlZEZvbnQpOwotCi0gICAgQ2Fpcm9HZXRHbHlwaFdpZHRoQW5kRXh0ZW50
cyhzY2FsZWRGb250LCBnbHlwaCwgMCwgZXh0ZW50cyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKCkK
LXsKLSAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6ekNhaXJvRm9udEZ1bmNzID0g
MDsKLQotICAgIC8vIFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggd2UgY2Fu
J3Qgc3VwcG9ydC4KLSAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFsbGJhY2sgaW1wbGVt
ZW50YXRpb24gaWYgdGhleSBhcmVuJ3Qgc2V0LgotICAgIGlmICghaGFyZmJ1enpDYWlyb0ZvbnRG
dW5jcykgewotICAgICAgICBoYXJmYnV6ekNhaXJvRm9udEZ1bmNzID0gaGJfZm9udF9mdW5jc19j
cmVhdGUoKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZnVuYyhoYXJmYnV6ekNh
aXJvRm9udEZ1bmNzLCBoYXJmYnV6ekdldEdseXBoLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9m
dW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZmJ1enpDYWlyb0ZvbnRGdW5jcywgaGFy
ZmJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9m
dW5jc19zZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmYnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJm
YnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVu
Y3Nfc2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJmYnV6ekNhaXJvRm9udEZ1bmNzLCBoYXJmYnV6
ekdldEdseXBoRXh0ZW50cywgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11
dGFibGUoaGFyZmJ1enpDYWlyb0ZvbnRGdW5jcyk7Ci0gICAgfQotICAgIHJldHVybiBoYXJmYnV6
ekNhaXJvRm9udEZ1bmNzOwotfQotCi1zdGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6ekNhaXJvR2V0
VGFibGUoaGJfZmFjZV90KiwgaGJfdGFnX3QgdGFnLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19z
Y2FsZWRfZm9udF90Kj4odXNlckRhdGEpOwotICAgIGlmICghc2NhbGVkRm9udCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBDYWlyb0Z0RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihzY2Fs
ZWRGb250KTsKLSAgICBGVF9GYWNlIGZ0Rm9udCA9IGNhaXJvRnRGYWNlTG9ja2VyLmxvY2soKTsK
LSAgICBpZiAoIWZ0Rm9udCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGVF9VTG9uZyB0YWJs
ZVNpemUgPSAwOwotICAgIEZUX0Vycm9yIGVycm9yID0gRlRfTG9hZF9TZm50X1RhYmxlKGZ0Rm9u
dCwgdGFnLCAwLCAwLCAmdGFibGVTaXplKTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgRlRfQnl0ZSogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxGVF9CeXRlKj4o
ZmFzdE1hbGxvYyh0YWJsZVNpemUpKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgRlRfVUxvbmcgZXhwZWN0ZWRUYWJsZVNpemUgPSB0YWJsZVNpemU7Ci0gICAgZXJy
b3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUoZnRGb250LCB0YWcsIDAsIGJ1ZmZlciwgJnRhYmxlU2l6
ZSk7Ci0gICAgaWYgKGVycm9yIHx8IHRhYmxlU2l6ZSAhPSBleHBlY3RlZFRhYmxlU2l6ZSkgewot
ICAgICAgICBmYXN0RnJlZShidWZmZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gaGJfYmxvYl9jcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVm
ZmVyKSwgdGFibGVTaXplLCBIQl9NRU1PUllfTU9ERV9XUklUQUJMRSwgYnVmZmVyLCBmYXN0RnJl
ZSk7Ci19Ci0KLWhiX2ZhY2VfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZhY2UoKQotewotICAg
IGhiX2ZhY2VfdCogZmFjZSA9IGhiX2ZhY2VfY3JlYXRlX2Zvcl90YWJsZXMoaGFyZmJ1enpDYWly
b0dldFRhYmxlLCBtX3BsYXRmb3JtRGF0YS0+c2NhbGVkRm9udCgpLCAwKTsKLSAgICBBU1NFUlQo
ZmFjZSk7Ci0gICAgcmV0dXJuIGZhY2U7Ci19Ci0KLWhiX2ZvbnRfdCogSGFyZkJ1enpOR0ZhY2U6
OmNyZWF0ZUZvbnQoKQotewotICAgIGhiX2ZvbnRfdCogZm9udCA9IGhiX2ZvbnRfY3JlYXRlKG1f
ZmFjZSk7Ci0gICAgaGJfZm9udF9zZXRfZnVuY3MoZm9udCwgaGFyZmJ1enpDYWlyb1RleHRHZXRG
b250RnVuY3MoKSwgbV9wbGF0Zm9ybURhdGEsIDApOwotICAgIGNvbnN0IGZsb2F0IHNpemUgPSBt
X3BsYXRmb3JtRGF0YS0+c2l6ZSgpOwotICAgIGlmIChmbG9vcmYoc2l6ZSkgPT0gc2l6ZSkKLSAg
ICAgICAgaGJfZm9udF9zZXRfcHBlbShmb250LCBzaXplLCBzaXplKTsKLSAgICBpbnQgc2NhbGUg
PSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihzaXplKTsKLSAgICBoYl9mb250X3NldF9zY2FsZShm
b250LCBzY2FsZSwgc2NhbGUpOwotICAgIGhiX2ZvbnRfbWFrZV9pbW11dGFibGUoZm9udCk7Ci0g
ICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLUdseXBoQnVmZmVyQWR2YW5jZSBIYXJmQnV6elNoYXBlcjo6
Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCi17Ci0g
ICAgcmV0dXJuIEdseXBoQnVmZmVyQWR2YW5jZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRjNjVjZDQxZTBlYzMwNDRlYjU5
OWI1ZDU0ZTE2Nzg0NTZjMTQ5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6ek5HRmFjZUNvcmVUZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhhcmZCdXp6TkdGYWNlLmgiCi0KLSNpbmNs
dWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiaGIuaCIKLSNpbmNsdWRlIDxB
cHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgaGJfcG9zaXRpb25fdCBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihD
R0Zsb2F0IHZhbHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9wb3NpdGlvbl90Pih2
YWx1ZSAqICgxIDw8IDE2KSk7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGgoaGJfZm9u
dF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9j
b2RlcG9pbnRfdCB2YXJpYXRpb25TZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lk
KiB1c2VyRGF0YSkKLXsKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxG
b250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKLSAgICBVbmlDaGFyIGNoYXJh
Y3RlcnNbNF07Ci0gICAgQ0dHbHlwaCBjZ0dseXBoc1s0XTsKLSAgICBzaXplX3QgbGVuZ3RoID0g
MDsKLSAgICBVMTZfQVBQRU5EX1VOU0FGRShjaGFyYWN0ZXJzLCBsZW5ndGgsIHVuaWNvZGUpOwot
ICAgIGlmICghQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhjdEZvbnQsIGNoYXJhY3RlcnMs
IGNnR2x5cGhzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKmdseXBoID0g
Y2dHbHlwaHNbMF07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90
IGdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnRE
YXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgQ1RGb250
UmVmIGN0Rm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KGZvbnREYXRh
KS0+Y3RGb250KCk7Ci0gICAgQ0dHbHlwaCBjZ0dseXBoID0gZ2x5cGg7Ci0gICAgQ0dGbG9hdCBh
ZHZhbmNlID0gQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMoY3RGb250LCBrQ1RGb250SG9yaXpv
bnRhbE9yaWVudGF0aW9uLCAmY2dHbHlwaCwgMCwgMSk7Ci0gICAgcmV0dXJuIGZsb2F0VG9IYXJm
QnV6elBvc2l0aW9uKGFkdmFuY2UpOwotfQotCi1zdGF0aWMgaGJfYm9vbF90IGdldEdseXBoSG9y
aXpvbnRhbE9yaWdpbihoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVw
b2ludF90IGdseXBoLCBoYl9wb3NpdGlvbl90KiB4LCBoYl9wb3NpdGlvbl90KiB5LCB2b2lkKiB1
c2VyRGF0YSkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBnZXRH
bHlwaEV4dGVudHMoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9p
bnRfdCBnbHlwaCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzLCB2b2lkKiB1c2VyRGF0YSkK
LXsKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1E
YXRhKj4oZm9udERhdGEpLT5jdEZvbnQoKTsKLSAgICBDR1JlY3QgY2dSZWN0OwotICAgIENHR2x5
cGggY2dHbHlwaCA9IGdseXBoOwotICAgIGlmIChDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5
cGhzKGN0Rm9udCwga0NURm9udERlZmF1bHRPcmllbnRhdGlvbiwgJmNnR2x5cGgsICZjZ1JlY3Qs
IDEpID09IENHUmVjdE51bGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBleHRlbnRzLT54
X2JlYXJpbmcgPSBmbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Qub3JpZ2luLngpOwotICAg
IGV4dGVudHMtPnlfYmVhcmluZyA9IC1mbG9hdFRvSGFyZkJ1enpQb3NpdGlvbihjZ1JlY3Qub3Jp
Z2luLnkpOwotICAgIGV4dGVudHMtPndpZHRoID0gZmxvYXRUb0hhcmZCdXp6UG9zaXRpb24oY2dS
ZWN0LnNpemUud2lkdGgpOwotICAgIGV4dGVudHMtPmhlaWdodCA9IGZsb2F0VG9IYXJmQnV6elBv
c2l0aW9uKGNnUmVjdC5zaXplLmhlaWdodCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MoKQotewotICAg
IHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MgPSAwOwot
Ci0gICAgaWYgKCFoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzKSB7Ci0gICAgICAgIGhhcmZidXp6
Q29yZVRleHRGb250RnVuY3MgPSBoYl9mb250X2Z1bmNzX2NyZWF0ZSgpOwotICAgICAgICBoYl9m
b250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3MsIGdldEds
eXBoLCAwLCAwKTsKLSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1
bmMoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwg
MCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfb3JpZ2luX2Z1bmMoaGFy
ZmJ1enpDb3JlVGV4dEZvbnRGdW5jcywgZ2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luLCAwLCAwKTsK
LSAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGhhcmZidXp6Q29y
ZVRleHRGb250RnVuY3MsIGdldEdseXBoRXh0ZW50cywgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRf
ZnVuY3NfbWFrZV9pbW11dGFibGUoaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyk7Ci0gICAgfQot
ICAgIHJldHVybiBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzOwotfQotCi1zdGF0aWMgdm9pZCBy
ZWxlYXNlVGFibGVEYXRhKHZvaWQqIHVzZXJEYXRhKQotewotICAgIENGRGF0YVJlZiBjZkRhdGEg
PSByZWludGVycHJldF9jYXN0PENGRGF0YVJlZj4odXNlckRhdGEpOwotICAgIENGUmVsZWFzZShj
ZkRhdGEpOwotfQotCi1zdGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6ekNvcmVUZXh0R2V0VGFibGUo
aGJfZmFjZV90KiBmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIENH
Rm9udFJlZiBjZ0ZvbnQgPSByZWludGVycHJldF9jYXN0PENHRm9udFJlZj4odXNlckRhdGEpOwot
ICAgIENGRGF0YVJlZiBjZkRhdGEgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoY2dGb250LCB0YWcp
OwotICAgIGlmICghY2ZEYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IGNoYXIq
IGRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKGNm
RGF0YSkpOwotICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRh
KTsKLSAgICBpZiAoIWRhdGEgfHwgIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGhiX2Jsb2JfY3JlYXRlKGRhdGEsIGxlbmd0aCwgSEJfTUVNT1JZX01PREVfUkVBRE9OTFks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8X19DRkRhdGEqPihjZkRhdGEpKSwg
cmVsZWFzZVRhYmxlRGF0YSk7Ci19Ci0KLWhiX2ZhY2VfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0
ZUZhY2UoKQotewotICAgIC8vIEl0IHNlZW1zIHRoYXQgQ1RGb250Q29weVRhYmxlIG9mIE1hY09T
WDEwLjUgc2RrIGRvZXNuJ3Qgd29yayBmb3IKLSAgICAvLyBPcGVuVHlwZSBsYXlvdXQgdGFibGVz
KEdERUYsIEdTVUIsIEdQT1MpLiBVc2UgQ0dGb250Q29weVRhYmxlRm9yVGFnIGluc3RlYWQuCi0g
ICAgaGJfZmFjZV90KiBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyhoYXJmYnV6ekNv
cmVUZXh0R2V0VGFibGUsIG1fcGxhdGZvcm1EYXRhLT5jZ0ZvbnQoKSwgMCk7Ci0gICAgQVNTRVJU
KGZhY2UpOwotICAgIHJldHVybiBmYWNlOwotfQotCi1oYl9mb250X3QqIEhhcmZCdXp6TkdGYWNl
OjpjcmVhdGVGb250KCkKLXsKLSAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZSht
X2ZhY2UpOwotICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6Q29yZVRleHRHZXRG
b250RnVuY3MoKSwgbV9wbGF0Zm9ybURhdGEsIDApOwotICAgIGNvbnN0IGZsb2F0IHNpemUgPSBt
X3BsYXRmb3JtRGF0YS0+bV9zaXplOwotICAgIGhiX2ZvbnRfc2V0X3BwZW0oZm9udCwgc2l6ZSwg
c2l6ZSk7Ci0gICAgY29uc3QgaW50IHNjYWxlID0gKDEgPDwgMTYpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplKTsKLSAgICBoYl9mb250X3NldF9zY2FsZShmb250LCBzY2FsZSwgc2NhbGUpOwotICAg
IGhiX2ZvbnRfbWFrZV9pbW11dGFibGUoZm9udCk7Ci0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KLUds
eXBoQnVmZmVyQWR2YW5jZSBIYXJmQnV6elNoYXBlcjo6Y3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNl
KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCi17Ci0gICAgcmV0dXJuIENHU2l6ZU1ha2Uod2lk
dGgsIGhlaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNl
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6ek5HRmFjZVNraWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDM5
ZWZhNzM3MTNiOGRhNWM1ZmRkNjM1ZWFlMDg1ZjcyOTk2ZTYyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIYXJmQnV6ek5HRmFj
ZS5oIgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgotI2luY2x1ZGUgIlNrRm9udEhvc3QuaCIKLSNpbmNsdWRlICJTa1BhaW50LmgiCi0j
aW5jbHVkZSAiU2tQYXRoLmgiCi0jaW5jbHVkZSAiU2tQb2ludC5oIgotI2luY2x1ZGUgIlNrUmVj
dC5oIgotI2luY2x1ZGUgIlNrVXRpbHMuaCIKLQotI2luY2x1ZGUgImhiLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBPdXIgaW1wbGVtZW50
YXRpb24gb2YgdGhlIGNhbGxiYWNrcyB3aGljaCBIYXJmYnV6eiByZXF1aXJlcyBieSB1c2luZyBT
a2lhCi0vLyBjYWxscy4gU2VlIHRoZSBIYXJmYnV6eiBzb3VyY2UgZm9yIHJlZmVyZW5jZXMgYWJv
dXQgd2hhdCB0aGVzZSBjYWxsYmFja3MgZG8uCi0KLXN0cnVjdCBIYXJmQnV6ekZvbnREYXRhIHsK
LSAgICBIYXJmQnV6ekZvbnREYXRhKFdURjo6SGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+KiBn
bHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnkpCi0gICAgICAgIDogbV9nbHlwaENhY2hlRm9yRmFj
ZUNhY2hlRW50cnkoZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5KQotICAgIHsgfQotICAgIFNr
UGFpbnQgbV9wYWludDsKLSAgICBXVEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogbV9n
bHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnk7Ci19OwotCi1zdGF0aWMgaGJfcG9zaXRpb25fdCBT
a2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKFNrU2NhbGFyIHZhbHVlKQotewotICAgIHJldHVy
biBTa1NjYWxhclRvRml4ZWQodmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBTa2lhR2V0R2x5cGhX
aWR0aEFuZEV4dGVudHMoU2tQYWludCogcGFpbnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2ludCwg
aGJfcG9zaXRpb25fdCogd2lkdGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cykKLXsKLSAg
ICBBU1NFUlQoY29kZXBvaW50IDw9IDB4RkZGRik7Ci0gICAgcGFpbnQtPnNldFRleHRFbmNvZGlu
ZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotCi0gICAgU2tTY2FsYXIgc2tXaWR0
aDsKLSAgICBTa1JlY3Qgc2tCb3VuZHM7Ci0gICAgdWludDE2X3QgZ2x5cGggPSBjb2RlcG9pbnQ7
Ci0KLSAgICBwYWludC0+Z2V0VGV4dFdpZHRocygmZ2x5cGgsIHNpemVvZihnbHlwaCksICZza1dp
ZHRoLCAmc2tCb3VuZHMpOwotICAgIGlmICh3aWR0aCkKLSAgICAgICAgKndpZHRoID0gU2tpYVNj
YWxhclRvSGFyZmJ1enpQb3NpdGlvbihza1dpZHRoKTsKLSAgICBpZiAoZXh0ZW50cykgewotICAg
ICAgICAvLyBJbnZlcnQgeS1heGlzIGJlY2F1c2UgU2tpYSBpcyB5LWdyb3dzLWRvd24gYnV0IHdl
IHNldCB1cCBoYXJmYnV6eiB0byBiZSB5LWdyb3dzLXVwLgotICAgICAgICBleHRlbnRzLT54X2Jl
YXJpbmcgPSBTa2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKHNrQm91bmRzLmZMZWZ0KTsKLSAg
ICAgICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gU2tpYVNjYWxhclRvSGFyZmJ1enpQb3NpdGlvbigt
c2tCb3VuZHMuZlRvcCk7Ci0gICAgICAgIGV4dGVudHMtPndpZHRoID0gU2tpYVNjYWxhclRvSGFy
ZmJ1enpQb3NpdGlvbihza0JvdW5kcy53aWR0aCgpKTsKLSAgICAgICAgZXh0ZW50cy0+aGVpZ2h0
ID0gU2tpYVNjYWxhclRvSGFyZmJ1enpQb3NpdGlvbigtc2tCb3VuZHMuaGVpZ2h0KCkpOwotICAg
IH0KLX0KLQotc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoKGhiX2ZvbnRfdCogaGJG
b250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50
X3QgdmFyaWF0aW9uU2VsZWN0b3IsIGhiX2NvZGVwb2ludF90KiBnbHlwaCwgdm9pZCogdXNlckRh
dGEpCi17Ci0gICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SGFyZkJ1enpGb250RGF0YSo+KGZvbnREYXRhKTsKLQotICAgIFdURjo6SGFzaE1hcDx1aW50
MzJfdCwgdWludDE2X3Q+OjpBZGRSZXN1bHQgcmVzdWx0ID0gaGJGb250RGF0YS0+bV9nbHlwaENh
Y2hlRm9yRmFjZUNhY2hlRW50cnktPmFkZCh1bmljb2RlLCAwKTsKLSAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgU2tQYWludCogcGFpbnQgPSAmaGJGb250RGF0YS0+bV9wYWlu
dDsKLSAgICAgICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMzJfVGV4dEVu
Y29kaW5nKTsKLSAgICAgICAgdWludDE2X3QgZ2x5cGgxNjsKLSAgICAgICAgcGFpbnQtPnRleHRU
b0dseXBocygmdW5pY29kZSwgc2l6ZW9mKGhiX2NvZGVwb2ludF90KSwgJmdseXBoMTYpOwotICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZ2x5cGgxNjsKLSAgICAgICAgKmdseXBoID0g
Z2x5cGgxNjsKLSAgICB9Ci0gICAgKmdseXBoID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICByZXR1cm4gISEqZ2x5cGg7Ci19Ci0KLXN0YXRpYyBoYl9wb3NpdGlvbl90IGhhcmZidXp6R2V0
R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEs
IGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBIYXJmQnV6ekZv
bnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4o
Zm9udERhdGEpOwotICAgIGhiX3Bvc2l0aW9uX3QgYWR2YW5jZSA9IDA7Ci0KLSAgICBTa2lhR2V0
R2x5cGhXaWR0aEFuZEV4dGVudHMoJmhiRm9udERhdGEtPm1fcGFpbnQsIGdseXBoLCAmYWR2YW5j
ZSwgMCk7Ci0gICAgcmV0dXJuIGFkdmFuY2U7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgaGFyZmJ1
enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4oaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnRE
YXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJfcG9zaXRpb25fdCogeCwgaGJfcG9zaXRpb25f
dCogeSwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgLy8gSnVzdCByZXR1cm4gdHJ1ZSwgZm9sbG93
aW5nIHRoZSB3YXkgdGhhdCBIYXJmYnV6ei1GcmVlVHlwZQotICAgIC8vIGltcGxlbWVudGF0aW9u
IGRvZXMuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QgaGFyZmJ1enpH
ZXRHbHlwaEV4dGVudHMoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2Rl
cG9pbnRfdCBnbHlwaCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzLCB2b2lkKiB1c2VyRGF0
YSkKLXsKLSAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxIYXJmQnV6ekZvbnREYXRhKj4oZm9udERhdGEpOwotCi0gICAgU2tpYUdldEdseXBoV2lkdGhB
bmRFeHRlbnRzKCZoYkZvbnREYXRhLT5tX3BhaW50LCBnbHlwaCwgMCwgZXh0ZW50cyk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6U2tpYUdl
dEZvbnRGdW5jcygpCi17Ci0gICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpTa2lh
Rm9udEZ1bmNzID0gMDsKLQotICAgIC8vIFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMg
d2hpY2ggd2UgY2FuJ3Qgc3VwcG9ydC4KLSAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFs
bGJhY2sgaW1wbGVtZW50YXRpb24gaWYgdGhleSBhcmVuJ3Qgc2V0LgotICAgIGlmICghaGFyZmJ1
enpTa2lhRm9udEZ1bmNzKSB7Ci0gICAgICAgIGhhcmZidXp6U2tpYUZvbnRGdW5jcyA9IGhiX2Zv
bnRfZnVuY3NfY3JlYXRlKCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMo
aGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBoYXJmYnV6ekdldEdseXBoLCAwLCAwKTsKLSAgICAgICAg
aGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1
bmNzLCBoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UsIDAsIDApOwotICAgICAgICBo
Yl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9mdW5jKGhhcmZidXp6U2tpYUZvbnRGdW5j
cywgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDApOwotICAgICAgICBoYl9m
b250X2Z1bmNzX3NldF9nbHlwaF9leHRlbnRzX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBo
YXJmYnV6ekdldEdseXBoRXh0ZW50cywgMCwgMCk7Ci0gICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFr
ZV9pbW11dGFibGUoaGFyZmJ1enpTa2lhRm9udEZ1bmNzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhh
cmZidXp6U2tpYUZvbnRGdW5jczsKLX0KLQotc3RhdGljIGhiX2Jsb2JfdCogaGFyZmJ1enpTa2lh
R2V0VGFibGUoaGJfZmFjZV90KiBmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQot
ewotICAgIFNrRm9udElEIHVuaXF1ZUlEID0gc3RhdGljX2Nhc3Q8U2tGb250SUQ+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDY0X3Q+KHVzZXJEYXRhKSk7Ci0KLSAgICBjb25zdCBzaXplX3QgdGFibGVT
aXplID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKHVuaXF1ZUlELCB0YWcpOwotICAgIGlmICgh
dGFibGVTaXplKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNoYXIqIGJ1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2ModGFibGVTaXplKSk7Ci0gICAgaWYgKCFidWZm
ZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHNpemVfdCBhY3R1YWxTaXplID0gU2tGb250SG9z
dDo6R2V0VGFibGVEYXRhKHVuaXF1ZUlELCB0YWcsIDAsIHRhYmxlU2l6ZSwgYnVmZmVyKTsKLSAg
ICBpZiAodGFibGVTaXplICE9IGFjdHVhbFNpemUpIHsKLSAgICAgICAgZmFzdEZyZWUoYnVmZmVy
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhiX2Jsb2JfY3JlYXRl
KGNvbnN0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIHRhYmxlU2l6ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgSEJfTUVNT1JZX01PREVfV1JJVEFCTEUsIGJ1ZmZlciwgZmFzdEZyZWUpOwotfQot
Ci1zdGF0aWMgdm9pZCBkZXN0cm95SGFyZkJ1enpGb250RGF0YSh2b2lkKiB1c2VyRGF0YSkKLXsK
LSAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJm
QnV6ekZvbnREYXRhKj4odXNlckRhdGEpOwotICAgIGRlbGV0ZSBoYkZvbnREYXRhOwotfQotCi1o
Yl9mYWNlX3QqIEhhcmZCdXp6TkdGYWNlOjpjcmVhdGVGYWNlKCkKLXsKLSAgICBoYl9mYWNlX3Qq
IGZhY2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzKGhhcmZidXp6U2tpYUdldFRhYmxlLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihtX3BsYXRmb3JtRGF0YS0+dW5pcXVlSUQoKSksIDApOwot
ICAgIEFTU0VSVChmYWNlKTsKLSAgICByZXR1cm4gZmFjZTsKLX0KLQotaGJfZm9udF90KiBIYXJm
QnV6ek5HRmFjZTo6Y3JlYXRlRm9udCgpCi17Ci0gICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250
RGF0YSA9IG5ldyBIYXJmQnV6ekZvbnREYXRhKG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5
KTsKLSAgICBtX3BsYXRmb3JtRGF0YS0+c2V0dXBQYWludCgmaGJGb250RGF0YS0+bV9wYWludCk7
Ci0gICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUobV9mYWNlKTsKLSAgICBoYl9m
b250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6elNraWFHZXRGb250RnVuY3MoKSwgaGJGb250RGF0
YSwgZGVzdHJveUhhcmZCdXp6Rm9udERhdGEpOwotICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3Jt
RGF0YS0+c2l6ZSgpOwotICAgIGludCBzY2FsZSA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRp
b24oc2l6ZSk7Ci0gICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUsIHNjYWxlKTsKLSAg
ICBoYl9mb250X21ha2VfaW1tdXRhYmxlKGZvbnQpOwotICAgIHJldHVybiBmb250OwotfQotCi1H
bHlwaEJ1ZmZlckFkdmFuY2UgSGFyZkJ1enpTaGFwZXI6OmNyZWF0ZUdseXBoQnVmZmVyQWR2YW5j
ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQotewotICAgIHJldHVybiBHbHlwaEJ1ZmZlckFk
dmFuY2Uod2lkdGgsIGhlaWdodCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L25nL0hhcmZCdXp6U2hhcGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZl
ZjQ1ZWU3YzUxZWE5NWU4MDljZDJmZDJkNzE1OTAzZjc4ZjJiMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
NDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5o
IgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkhhcmZCdXp6TkdGYWNlLmgiCi0jaW5j
bHVkZSAiU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dFJ1
bi5oIgotI2luY2x1ZGUgImhiLWljdS5oIgotI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6ci5oPgot
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEhh
cmZCdXp6U2NvcGVkUHRyIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpEZXN0cm95RnVu
Y3Rpb24pKFQqKTsKLQotICAgIEhhcmZCdXp6U2NvcGVkUHRyKFQqIHB0ciwgRGVzdHJveUZ1bmN0
aW9uIGRlc3Ryb3kpCi0gICAgICAgIDogbV9wdHIocHRyKQotICAgICAgICAsIG1fZGVzdHJveShk
ZXN0cm95KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZGVzdHJveSk7Ci0gICAgfQotICAgIH5I
YXJmQnV6elNjb3BlZFB0cigpCi0gICAgewotICAgICAgICBpZiAobV9wdHIpCi0gICAgICAgICAg
ICAoKm1fZGVzdHJveSkobV9wdHIpOwotICAgIH0KLQotICAgIFQqIGdldCgpIHsgcmV0dXJuIG1f
cHRyOyB9Ci1wcml2YXRlOgotICAgIFQqIG1fcHRyOwotICAgIERlc3Ryb3lGdW5jdGlvbiBtX2Rl
c3Ryb3k7Ci19OwotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0
KGhiX3Bvc2l0aW9uX3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2
YWx1ZSkgLyAoMSA8PCAxNik7Ci19Ci0KLUhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFy
ZkJ1enpSdW4oY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBzdGFydElu
ZGV4LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJf
c2NyaXB0X3Qgc2NyaXB0KQotICAgIDogbV9mb250RGF0YShmb250RGF0YSkKLSAgICAsIG1fc3Rh
cnRJbmRleChzdGFydEluZGV4KQotICAgICwgbV9udW1DaGFyYWN0ZXJzKG51bUNoYXJhY3RlcnMp
Ci0gICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgLCBtX3NjcmlwdChzY3JpcHQpCi17
Ci19Ci0KLXZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphcHBseVNoYXBlUmVzdWx0
KGhiX2J1ZmZlcl90KiBoYXJmYnV6ekJ1ZmZlcikKLXsKLSAgICBtX251bUdseXBocyA9IGhiX2J1
ZmZlcl9nZXRfbGVuZ3RoKGhhcmZidXp6QnVmZmVyKTsKLSAgICBtX2dseXBocy5yZXNpemUobV9u
dW1HbHlwaHMpOwotICAgIG1fYWR2YW5jZXMucmVzaXplKG1fbnVtR2x5cGhzKTsKLSAgICBtX2ds
eXBoVG9DaGFyYWN0ZXJJbmRleGVzLnJlc2l6ZShtX251bUdseXBocyk7Ci0gICAgbV9vZmZzZXRz
LnJlc2l6ZShtX251bUdseXBocyk7Ci19Ci0KLXZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJ
ZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSkKLXsKLSAgICBt
X2dseXBoc1tpbmRleF0gPSBnbHlwaElkOwotICAgIG1fYWR2YW5jZXNbaW5kZXhdID0gYWR2YW5j
ZTsKLSAgICBtX29mZnNldHNbaW5kZXhdID0gRmxvYXRQb2ludChvZmZzZXRYLCBvZmZzZXRZKTsK
LX0KLQotaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5kZXhGb3JY
UG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkKLXsKLSAgICBBU1NFUlQodGFyZ2V0WCA8PSBtX3dpZHRo
KTsKLSAgICBmbG9hdCBjdXJyZW50WCA9IDA7Ci0gICAgZmxvYXQgY3VycmVudEFkdmFuY2UgPSBt
X2FkdmFuY2VzWzBdOwotICAgIHVuc2lnbmVkIGdseXBoSW5kZXggPSAwOwotCi0gICAgLy8gU3Vt
IHVwIGFkdmFuY2VzIHRoYXQgYmVsb25nIHRvIGEgY2hhcmFjdGVyLgotICAgIHdoaWxlIChnbHlw
aEluZGV4IDwgbV9udW1HbHlwaHMgLSAxICYmIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5
cGhJbmRleF0gPT0gbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4ICsgMV0pCi0g
ICAgICAgIGN1cnJlbnRBZHZhbmNlICs9IG1fYWR2YW5jZXNbKytnbHlwaEluZGV4XTsKLSAgICBj
dXJyZW50QWR2YW5jZSA9IGN1cnJlbnRBZHZhbmNlIC8gMi4wOwotICAgIGlmICh0YXJnZXRYIDw9
IGN1cnJlbnRBZHZhbmNlKQotICAgICAgICByZXR1cm4gcnRsKCkgPyBtX251bUNoYXJhY3RlcnMg
OiAwOwotCi0gICAgKytnbHlwaEluZGV4OwotICAgIHdoaWxlIChnbHlwaEluZGV4IDwgbV9udW1H
bHlwaHMpIHsKLSAgICAgICAgdW5zaWduZWQgcHJldkNoYXJhY3RlckluZGV4ID0gbV9nbHlwaFRv
Q2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4IC0gMV07Ci0gICAgICAgIGZsb2F0IHByZXZBZHZh
bmNlID0gY3VycmVudEFkdmFuY2U7Ci0gICAgICAgIGN1cnJlbnRBZHZhbmNlID0gbV9hZHZhbmNl
c1tnbHlwaEluZGV4XTsKLSAgICAgICAgd2hpbGUgKGdseXBoSW5kZXggPCBtX251bUdseXBocyAt
IDEgJiYgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tnbHlwaEluZGV4XSA9PSBtX2dseXBoVG9D
aGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXggKyAxXSkKLSAgICAgICAgICAgIGN1cnJlbnRBZHZh
bmNlICs9IG1fYWR2YW5jZXNbKytnbHlwaEluZGV4XTsKLSAgICAgICAgY3VycmVudEFkdmFuY2Ug
PSBjdXJyZW50QWR2YW5jZSAvIDIuMDsKLSAgICAgICAgZmxvYXQgbmV4dFggPSBjdXJyZW50WCAr
IHByZXZBZHZhbmNlICsgY3VycmVudEFkdmFuY2U7Ci0gICAgICAgIGlmIChjdXJyZW50WCA8PSB0
YXJnZXRYICYmIHRhcmdldFggPD0gbmV4dFgpCi0gICAgICAgICAgICByZXR1cm4gcnRsKCkgPyBw
cmV2Q2hhcmFjdGVySW5kZXggOiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXhd
OwotICAgICAgICBjdXJyZW50WCA9IG5leHRYOwotICAgICAgICBwcmV2QWR2YW5jZSA9IGN1cnJl
bnRBZHZhbmNlOwotICAgICAgICArK2dseXBoSW5kZXg7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJ0
bCgpID8gMCA6IG1fbnVtQ2hhcmFjdGVyczsKLX0KLQotZmxvYXQgSGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQotewotICAgIEFT
U0VSVChvZmZzZXQgPCBtX251bUNoYXJhY3RlcnMpOwotICAgIHVuc2lnbmVkIGdseXBoSW5kZXgg
PSAwOwotICAgIGZsb2F0IHBvc2l0aW9uID0gMDsKLSAgICBpZiAocnRsKCkpIHsKLSAgICAgICAg
d2hpbGUgKGdseXBoSW5kZXggPCBtX251bUdseXBocyAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRl
eGVzW2dseXBoSW5kZXhdID4gb2Zmc2V0KSB7Ci0gICAgICAgICAgICBwb3NpdGlvbiArPSBtX2Fk
dmFuY2VzW2dseXBoSW5kZXhdOwotICAgICAgICAgICAgKytnbHlwaEluZGV4OwotICAgICAgICB9
Ci0gICAgICAgIC8vIEZvciBSVEwsIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSByaWdodCBzaWRlIGJv
dW5kYXJ5IG9mIHRoZSBjaGFyYWN0ZXIuCi0gICAgICAgIC8vIEFkZCBhZHZhbmNlIG9mIGdseXBo
cyB3aGljaCBhcmUgcGFydCBvZiB0aGUgY2hhcmFjdGVyLgotICAgICAgICB3aGlsZSAoZ2x5cGhJ
bmRleCA8IG1fbnVtR2x5cGhzIC0gMSAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBo
SW5kZXhdID09IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbZ2x5cGhJbmRleCArIDFdKSB7Ci0g
ICAgICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2dseXBoSW5kZXhdOwotICAgICAgICAg
ICAgKytnbHlwaEluZGV4OwotICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5j
ZXNbZ2x5cGhJbmRleF07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKGdseXBoSW5kZXgg
PCBtX251bUdseXBocyAmJiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2dseXBoSW5kZXhdIDwg
b2Zmc2V0KSB7Ci0gICAgICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2dseXBoSW5kZXhd
OwotICAgICAgICAgICAgKytnbHlwaEluZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBwb3NpdGlvbjsKLX0KLQotc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhjb25zdCBV
Q2hhciogc291cmNlLCBVQ2hhciogZGVzdGluYXRpb24sIGludCBsZW5ndGgpCi17Ci0gICAgaW50
IHBvc2l0aW9uID0gMDsKLSAgICBib29sIGVycm9yID0gZmFsc2U7Ci0gICAgd2hpbGUgKHBvc2l0
aW9uIDwgbGVuZ3RoKSB7Ci0gICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAgICAgICBpbnQg
bmV4dFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAgIFUxNl9ORVhUKHNvdXJjZSwgbmV4dFBv
c2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7Ci0gICAgICAgIC8vIERvbid0IG5vcm1hbGl6ZSB0
YWJzIGFzIHRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzIHNwYWNlcyBmb3Igd29yZC1lbmQuCi0gICAg
ICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSAmJiBjaGFyYWN0ZXIgIT0gJ1x0
JykKLSAgICAgICAgICAgIGNoYXJhY3RlciA9ICcgJzsKLSAgICAgICAgZWxzZSBpZiAoRm9udDo6
dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KGNoYXJhY3RlcikpCi0gICAgICAg
ICAgICBjaGFyYWN0ZXIgPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgVTE2X0FQUEVORChkZXN0
aW5hdGlvbiwgcG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyLCBlcnJvcik7Ci0gICAgICAgIEFT
U0VSVF9VTlVTRUQoZXJyb3IsICFlcnJvcik7Ci0gICAgICAgIHBvc2l0aW9uID0gbmV4dFBvc2l0
aW9uOwotICAgIH0KLX0KLQotSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKGNvbnN0IEZv
bnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1bikKLSAgICA6IEhhcmZCdXp6U2hhcGVyQmFzZShm
b250LCBydW4pCi0gICAgLCBtX2Zyb21JbmRleCgwKQotICAgICwgbV90b0luZGV4KG1fcnVuLmxl
bmd0aCgpKQotewotICAgIG1fbm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IFVD
aGFyW21fcnVuLmxlbmd0aCgpICsgMV0pOwotICAgIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCA9
IG1fcnVuLmxlbmd0aCgpOwotICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobV9ydW4uY2hhcmFjdGVy
czE2KCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3Ro
KTsKLSAgICBzZXRQYWRkaW5nKG1fcnVuLmV4cGFuc2lvbigpKTsKLSAgICBzZXRGb250RmVhdHVy
ZXMoKTsKLX0KLQotSGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNoYXBlcigpCi17Ci19Ci0KLXZv
aWQgSGFyZkJ1enpTaGFwZXI6OnNldERyYXdSYW5nZShpbnQgZnJvbSwgaW50IHRvKQotewotICAg
IEFTU0VSVChmcm9tID49IDApOwotICAgIEFTU0VSVCh0byA8PSBtX3J1bi5sZW5ndGgoKSk7Ci0g
ICAgbV9mcm9tSW5kZXggPSBmcm9tOwotICAgIG1fdG9JbmRleCA9IHRvOwotfQotCi12b2lkIEhh
cmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVyZXMoKQotewotICAgIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24gPSBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChk
ZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7Ci0gICAgICAgIHN0YXRpYyBo
Yl9mZWF0dXJlX3QgdmVydCA9IHsgSGFyZkJ1enpOR0ZhY2U6OnZlcnRUYWcsIDEsIDAsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPigtMSkgfTsKLSAgICAgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCB2cnQy
ID0geyBIYXJmQnV6ek5HRmFjZTo6dnJ0MlRhZywgMSwgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KC0xKSB9OwotICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZCh2ZXJ0KTsKLSAgICAgICAgbV9mZWF0
dXJlcy5hcHBlbmQodnJ0Mik7Ci0gICAgfQotCi0gICAgRm9udEZlYXR1cmVTZXR0aW5ncyogc2V0
dGluZ3MgPSBkZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBudW1GZWF0dXJlcyA9IHNldHRpbmdz
LT5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyArK2kp
IHsKLSAgICAgICAgaGJfZmVhdHVyZV90IGZlYXR1cmU7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiB0
YWcgPSBzZXR0aW5ncy0+YXQoaSkudGFnKCkuY2hhcmFjdGVycygpOwotICAgICAgICBmZWF0dXJl
LnRhZyA9IEhCX1RBRyh0YWdbMF0sIHRhZ1sxXSwgdGFnWzJdLCB0YWdbM10pOwotICAgICAgICBm
ZWF0dXJlLnZhbHVlID0gc2V0dGluZ3MtPmF0KGkpLnZhbHVlKCk7Ci0gICAgICAgIGZlYXR1cmUu
c3RhcnQgPSAwOwotICAgICAgICBmZWF0dXJlLmVuZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigt
MSk7Ci0gICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmUpOwotICAgIH0KLX0KLQotYm9v
bCBIYXJmQnV6elNoYXBlcjo6c2hhcGUoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewotICAg
IGlmICghY29sbGVjdEhhcmZCdXp6UnVucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBtX3RvdGFsV2lkdGggPSAwOwotICAgIC8vIFdlYktpdCBkb2Vzbid0IHNldCBkaXJlY3Rpb24g
d2hlbiBjYWx1bGF0aW5nIHdpZHRocy4gTGVhdmUgdGhlIGRpcmVjdGlvbiBzZXR0aW5nIHRvCi0g
ICAgLy8gSGFyZkJ1enogd2hlbiB3ZSBhcmUgY2FsY3VsYXRpbmcgd2lkdGhzIChleGNlcHQgd2hl
biBkaXJlY3Rpb25hbE92ZXJyaWRlKCkgaXMgc2V0KS4KLSAgICBpZiAoIXNoYXBlSGFyZkJ1enpS
dW5zKGdseXBoQnVmZmVyIHx8IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3RvdGFsV2lkdGggPSByb3VuZGYobV90b3RhbFdpZHRoKTsK
LQotICAgIGlmIChnbHlwaEJ1ZmZlciAmJiAhZmlsbEdseXBoQnVmZmVyKGdseXBoQnVmZmVyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZsb2F0UG9p
bnQgSGFyZkJ1enpTaGFwZXI6OmFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpCi17Ci0gICAgcmV0dXJuIHBvaW50ICsgbV9zdGFydE9mZnNldDsKLX0KLQotYm9vbCBIYXJm
QnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucygpCi17Ci0gICAgY29uc3QgVUNoYXIqIG5v
cm1hbGl6ZWRCdWZmZXJFbmQgPSBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX25vcm1hbGl6
ZWRCdWZmZXJMZW5ndGg7Ci0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJh
dG9yKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgMCwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3Ro
LCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgpOwotICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAg
IHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXhPZkN1
cnJlbnRSdW4gPSAwOwotICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0
ZXJMZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyLCBmYWxzZSkuZm9udERhdGE7Ci0gICAgVUVycm9yQ29kZSBlcnJvckNvZGUgPSBVX1pFUk9f
RVJST1I7Ci0gICAgVVNjcmlwdENvZGUgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNo
YXJhY3RlciwgJmVycm9yQ29kZSk7Ci0gICAgaWYgKFVfRkFJTFVSRShlcnJvckNvZGUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjdXJy
ZW50Q2hhcmFjdGVyUG9zaXRpb24gPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAg
ICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2NyaXB0OwotCi0gICAgICAgIGZv
ciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuY29uc3VtZShjaGFy
YWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpKSB7
Ci0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoYXJhY3Rlcikp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChVX0dFVF9HQ19N
QVNLKGNoYXJhY3RlcikgJiBVX0dDX01fTUFTSykgewotICAgICAgICAgICAgICAgIGludCBtYXJr
TGVuZ3RoID0gY2x1c3Rlckxlbmd0aDsKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogbWFy
a0NoYXJhY3RlcnNFbmQgPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCkgKyBjbHVzdGVyTGVuZ3RoOwot
ICAgICAgICAgICAgICAgIHdoaWxlIChtYXJrQ2hhcmFjdGVyc0VuZCA8IG5vcm1hbGl6ZWRCdWZm
ZXJFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOwotICAg
ICAgICAgICAgICAgICAgICBpbnQgbmV4dENoYXJhY3Rlckxlbmd0aCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIFUxNl9ORVhUKG1hcmtDaGFyYWN0ZXJzRW5kLCBuZXh0Q2hhcmFjdGVyTGVuZ3Ro
LCBub3JtYWxpemVkQnVmZmVyRW5kIC0gbWFya0NoYXJhY3RlcnNFbmQsIG5leHRDaGFyYWN0ZXIp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIShVX0dFVF9HQ19NQVNLKG5leHRDaGFyYWN0ZXIp
ICYgVV9HQ19NX01BU0spKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIG1hcmtMZW5ndGggKz0gbmV4dENoYXJhY3Rlckxlbmd0aDsKLSAgICAgICAg
ICAgICAgICAgICAgbWFya0NoYXJhY3RlcnNFbmQgKz0gbmV4dENoYXJhY3Rlckxlbmd0aDsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhLT5j
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjdXJyZW50Q2hhcmFjdGVyUG9zaXRp
b24sIG1hcmtDaGFyYWN0ZXJzRW5kIC0gY3VycmVudENoYXJhY3RlclBvc2l0aW9uKSkgewotICAg
ICAgICAgICAgICAgICAgICBjbHVzdGVyTGVuZ3RoID0gbWFya0xlbmd0aDsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5l
eHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFs
c2UpLmZvbnREYXRhOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbmV4dEZv
bnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSku
Zm9udERhdGE7Ci0KLSAgICAgICAgICAgIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChj
aGFyYWN0ZXIsICZlcnJvckNvZGUpOwotICAgICAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvckNv
ZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICgobmV4
dEZvbnREYXRhICE9IGN1cnJlbnRGb250RGF0YSkgfHwgKChjdXJyZW50U2NyaXB0ICE9IG5leHRT
Y3JpcHQpICYmIChuZXh0U2NyaXB0ICE9IFVTQ1JJUFRfSU5IRVJJVEVEKSAmJiAoIXVzY3JpcHRf
aGFzU2NyaXB0KGNoYXJhY3RlciwgY3VycmVudFNjcmlwdCkpKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChuZXh0U2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVEKQot
ICAgICAgICAgICAgICAgIG5leHRTY3JpcHQgPSBjdXJyZW50U2NyaXB0OwotICAgICAgICAgICAg
Y3VycmVudENoYXJhY3RlclBvc2l0aW9uID0gaXRlcmF0b3IuY2hhcmFjdGVycygpOwotICAgICAg
ICB9Ci0gICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4gPSBpdGVyYXRv
ci5jdXJyZW50Q2hhcmFjdGVyKCkgLSBzdGFydEluZGV4T2ZDdXJyZW50UnVuOwotICAgICAgICBo
Yl9zY3JpcHRfdCBzY3JpcHQgPSBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdChjdXJyZW50U2NyaXB0
KTsKLSAgICAgICAgbV9oYXJmYnV6elJ1bnMuYXBwZW5kKEhhcmZCdXp6UnVuOjpjcmVhdGUoY3Vy
cmVudEZvbnREYXRhLCBzdGFydEluZGV4T2ZDdXJyZW50UnVuLCBudW1DaGFyYWN0ZXJzT2ZDdXJy
ZW50UnVuLCBtX3J1bi5kaXJlY3Rpb24oKSwgc2NyaXB0KSk7Ci0gICAgICAgIGN1cnJlbnRGb250
RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAgICAgc3RhcnRJbmRleE9mQ3VycmVudFJ1biA9IGl0
ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsKLSAgICB9IHdoaWxlIChpdGVyYXRvci5jb25zdW1l
KGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpOwotCi0gICAgcmV0dXJuICFtX2hhcmZidXp6UnVu
cy5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5z
KGJvb2wgc2hvdWxkU2V0RGlyZWN0aW9uKQotewotICAgIEhhcmZCdXp6U2NvcGVkUHRyPGhiX2J1
ZmZlcl90PiBoYXJmYnV6ekJ1ZmZlcihoYl9idWZmZXJfY3JlYXRlKCksIGhiX2J1ZmZlcl9kZXN0
cm95KTsKLQotICAgIGhiX2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyhoYXJmYnV6ekJ1ZmZlci5n
ZXQoKSwgaGJfaWN1X2dldF91bmljb2RlX2Z1bmNzKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1faGFyZmJ1enpSdW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IHJ1bkluZGV4ID0gbV9ydW4ucnRsKCkgPyBtX2hhcmZidXp6UnVucy5zaXplKCkgLSBpIC0gMSA6
IGk7Ci0gICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJmYnV6elJ1bnNbcnVu
SW5kZXhdLmdldCgpOwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogY3VycmVudEZvbnRE
YXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKLQotICAgICAgICBoYl9idWZmZXJfc2V0X3Nj
cmlwdChoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgY3VycmVudFJ1bi0+c2NyaXB0KCkpOwotICAgICAg
ICBpZiAoc2hvdWxkU2V0RGlyZWN0aW9uKQotICAgICAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJl
Y3Rpb24oaGFyZmJ1enpCdWZmZXIuZ2V0KCksIGN1cnJlbnRSdW4tPnJ0bCgpID8gSEJfRElSRUNU
SU9OX1JUTCA6IEhCX0RJUkVDVElPTl9MVFIpOwotCi0gICAgICAgIC8vIEFkZCBhIHNwYWNlIGFz
IHByZS1jb250ZXh0IHRvIHRoZSBidWZmZXIuIFRoaXMgcHJldmVudHMgc2hvd2luZyBkb3R0ZWQt
Y2lyY2xlCi0gICAgICAgIC8vIGZvciBjb21iaW5pbmcgbWFya3MgYXQgdGhlIGJlZ2lubmluZyBv
ZiBydW5zLgotICAgICAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgcHJlQ29udGV4dCA9ICcgJzsK
LSAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgJnByZUNv
bnRleHQsIDEsIDEsIDApOwotCi0gICAgICAgIGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYg
dV9pc2xvd2VyKG1fbm9ybWFsaXplZEJ1ZmZlcltjdXJyZW50UnVuLT5zdGFydEluZGV4KCldKSkg
ewotICAgICAgICAgICAgU3RyaW5nIHVwcGVyVGV4dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZm
ZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5zdGFydEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJh
Y3RlcnMoKSk7Ci0gICAgICAgICAgICB1cHBlclRleHQubWFrZVVwcGVyKCk7Ci0gICAgICAgICAg
ICBjdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcih1cHBlclRl
eHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250RGF0YTsKLSAgICAgICAgICAgIGhi
X2J1ZmZlcl9hZGRfdXRmMTYoaGFyZmJ1enpCdWZmZXIuZ2V0KCksIHVwcGVyVGV4dC5jaGFyYWN0
ZXJzKCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVtQ2hh
cmFjdGVycygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBoYl9idWZmZXJfYWRkX3V0
ZjE2KGhhcmZidXp6QnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJy
ZW50UnVuLT5zdGFydEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3Vy
cmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKTsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBw
bGF0Zm9ybURhdGEgPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmY3VycmVudEZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgICAgIEhhcmZCdXp6TkdGYWNlKiBmYWNlID0gcGxh
dGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKTsKLSAgICAgICAgaWYgKCFmYWNlKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpCi0gICAgICAgICAgICBmYWNlLT5zZXRTY3JpcHRG
b3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhhcmZidXp6QnVmZmVyLmdldCgpKTsKLQotICAg
ICAgICBIYXJmQnV6elNjb3BlZFB0cjxoYl9mb250X3Q+IGhhcmZidXp6Rm9udChmYWNlLT5jcmVh
dGVGb250KCksIGhiX2ZvbnRfZGVzdHJveSk7Ci0KLSAgICAgICAgaGJfc2hhcGUoaGFyZmJ1enpG
b250LmdldCgpLCBoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgbV9mZWF0dXJlcy5pc0VtcHR5KCkgPyAw
IDogbV9mZWF0dXJlcy5kYXRhKCksIG1fZmVhdHVyZXMuc2l6ZSgpKTsKLQotICAgICAgICBjdXJy
ZW50UnVuLT5hcHBseVNoYXBlUmVzdWx0KGhhcmZidXp6QnVmZmVyLmdldCgpKTsKLSAgICAgICAg
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihjdXJyZW50UnVuLCBoYXJmYnV6ekJ1ZmZl
ci5nZXQoKSk7Ci0KLSAgICAgICAgaGJfYnVmZmVyX3Jlc2V0KGhhcmZidXp6QnVmZmVyLmdldCgp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBIYXJmQnV6elNoYXBlcjo6
c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3VycmVudFJ1biwg
aGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQotewotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOwotICAgIGhiX2dseXBo
X2luZm9fdCogZ2x5cGhJbmZvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5mb3MoaGFyZmJ1enpC
dWZmZXIsIDApOwotICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QqIGdseXBoUG9zaXRpb25zID0gaGJf
YnVmZmVyX2dldF9nbHlwaF9wb3NpdGlvbnMoaGFyZmJ1enpCdWZmZXIsIDApOwotCi0gICAgdW5z
aWduZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+bnVtR2x5cGhzKCk7Ci0gICAgdWludDE2X3Qq
IGdseXBoVG9DaGFyYWN0ZXJJbmRleGVzID0gY3VycmVudFJ1bi0+Z2x5cGhUb0NoYXJhY3Rlcklu
ZGV4ZXMoKTsKLSAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOwotCi0gICAgLy8gSGFyZkJ1enog
cmV0dXJucyB0aGUgc2hhcGluZyByZXN1bHQgaW4gdmlzdWFsIG9yZGVyLiBXZSBuZWVkIG5vdCB0
byBmbGlwIGZvciBSVEwuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgewotICAgICAgICBib29sIHJ1bkVuZCA9IGkgKyAxID09IG51bUdseXBoczsKLSAgICAgICAg
dWludDE2X3QgZ2x5cGggPSBnbHlwaEluZm9zW2ldLmNvZGVwb2ludDsKLSAgICAgICAgZmxvYXQg
b2Zmc2V0WCA9IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2ldLnhfb2Zm
c2V0KTsKLSAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IC1oYXJmYnV6elBvc2l0aW9uVG9GbG9hdChn
bHlwaFBvc2l0aW9uc1tpXS55X29mZnNldCk7Ci0gICAgICAgIGZsb2F0IGFkdmFuY2UgPSBoYXJm
YnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpXS54X2FkdmFuY2UpOwotCi0gICAg
ICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IGN1cnJlbnRSdW4tPnN0YXJ0SW5k
ZXgoKSArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKLSAgICAgICAgYm9vbCBpc0NsdXN0ZXJFbmQg
PSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5mb3NbaSArIDFdLmNs
dXN0ZXI7Ci0gICAgICAgIGZsb2F0IHNwYWNpbmcgPSAwOwotCi0gICAgICAgIGdseXBoVG9DaGFy
YWN0ZXJJbmRleGVzW2ldID0gZ2x5cGhJbmZvc1tpXS5jbHVzdGVyOwotCi0gICAgICAgIGlmIChp
c0NsdXN0ZXJFbmQgJiYgIUZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShtX25vcm1hbGl6ZWRC
dWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4XSkpCi0gICAgICAgICAgICBzcGFjaW5nICs9IG1f
bGV0dGVyU3BhY2luZzsKLQotICAgICAgICBpZiAoaXNDbHVzdGVyRW5kICYmIGlzV29yZEVuZChj
dXJyZW50Q2hhcmFjdGVySW5kZXgpKQotICAgICAgICAgICAgc3BhY2luZyArPSBkZXRlcm1pbmVX
b3JkQnJlYWtTcGFjaW5nKCk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+aXNaZXJv
V2lkdGhTcGFjZUdseXBoKGdseXBoKSkgewotICAgICAgICAgICAgY3VycmVudFJ1bi0+c2V0R2x5
cGhBbmRQb3NpdGlvbnMoaSwgZ2x5cGgsIDAsIDAsIDApOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBhZHZhbmNlICs9IHNwYWNpbmc7Ci0gICAgICAgIGlmICht
X3J1bi5ydGwoKSkgewotICAgICAgICAgICAgLy8gSW4gUlRMLCBzcGFjaW5nIHNob3VsZCBiZSBh
ZGRlZCB0byBsZWZ0IHNpZGUgb2YgZ2x5cGhzLgotICAgICAgICAgICAgb2Zmc2V0WCArPSBzcGFj
aW5nOwotICAgICAgICAgICAgaWYgKCFpc0NsdXN0ZXJFbmQpCi0gICAgICAgICAgICAgICAgb2Zm
c2V0WCArPSBtX2xldHRlclNwYWNpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50UnVu
LT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgYWR2YW5jZSwgb2Zmc2V0WCwgb2Zmc2V0
WSk7Ci0KLSAgICAgICAgdG90YWxBZHZhbmNlICs9IGFkdmFuY2U7Ci0gICAgfQotICAgIGN1cnJl
bnRSdW4tPnNldFdpZHRoKHRvdGFsQWR2YW5jZSA+IDAuMCA/IHRvdGFsQWR2YW5jZSA6IDAuMCk7
Ci0gICAgbV90b3RhbFdpZHRoICs9IGN1cnJlbnRSdW4tPndpZHRoKCk7Ci19Ci0KLXZvaWQgSGFy
ZkJ1enpTaGFwZXI6OmZpbGxHbHlwaEJ1ZmZlckZyb21IYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIsIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuLCBGbG9hdFBvaW50JiBmaXJzdE9m
ZnNldE9mTmV4dFJ1bikKLXsKLSAgICBGbG9hdFBvaW50KiBvZmZzZXRzID0gY3VycmVudFJ1bi0+
b2Zmc2V0cygpOwotICAgIHVpbnQxNl90KiBnbHlwaHMgPSBjdXJyZW50UnVuLT5nbHlwaHMoKTsK
LSAgICBmbG9hdCogYWR2YW5jZXMgPSBjdXJyZW50UnVuLT5hZHZhbmNlcygpOwotICAgIHVuc2ln
bmVkIG51bUdseXBocyA9IGN1cnJlbnRSdW4tPm51bUdseXBocygpOwotICAgIHVpbnQxNl90KiBn
bHlwaFRvQ2hhcmFjdGVySW5kZXhlcyA9IGN1cnJlbnRSdW4tPmdseXBoVG9DaGFyYWN0ZXJJbmRl
eGVzKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
LSAgICAgICAgdWludDE2X3QgY3VycmVudENoYXJhY3RlckluZGV4ID0gY3VycmVudFJ1bi0+c3Rh
cnRJbmRleCgpICsgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV07Ci0gICAgICAgIEZsb2F0UG9p
bnQmIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXRzW2ldOwotICAgICAgICBGbG9hdFBvaW50JiBuZXh0
T2Zmc2V0ID0gKGkgPT0gbnVtR2x5cGhzIC0gMSkgPyBmaXJzdE9mZnNldE9mTmV4dFJ1biA6IG9m
ZnNldHNbaSArIDFdOwotICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VYID0gYWR2YW5jZXNbaV0g
KyBuZXh0T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpOwotICAgICAgICBmbG9hdCBnbHlw
aEFkdmFuY2VZID0gbmV4dE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKTsKLSAgICAgICAg
aWYgKG1fcnVuLnJ0bCgpKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlckluZGV4
ID4gbV90b0luZGV4KQotICAgICAgICAgICAgICAgIG1fc3RhcnRPZmZzZXQubW92ZShnbHlwaEFk
dmFuY2VYLCBnbHlwaEFkdmFuY2VZKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDaGFy
YWN0ZXJJbmRleCA+PSBtX2Zyb21JbmRleCkKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGdseXBoc1tpXSwgY3VycmVudFJ1bi0+Zm9udERhdGEoKSwgY3JlYXRlR2x5cGhCdWZmZXJB
ZHZhbmNlKGdseXBoQWR2YW5jZVgsIGdseXBoQWR2YW5jZVkpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXggPCBtX2Zyb21JbmRleCkKLSAg
ICAgICAgICAgICAgICBtX3N0YXJ0T2Zmc2V0Lm1vdmUoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZh
bmNlWSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVySW5kZXggPCBtX3Rv
SW5kZXgpCi0gICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaHNbaV0sIGN1cnJl
bnRSdW4tPmZvbnREYXRhKCksIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZShnbHlwaEFkdmFuY2VY
LCBnbHlwaEFkdmFuY2VZKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgSGFyZkJ1enpT
aGFwZXI6OmZpbGxHbHlwaEJ1ZmZlcihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAg
dW5zaWduZWQgbnVtUnVucyA9IG1faGFyZmJ1enpSdW5zLnNpemUoKTsKLSAgICBpZiAobV9ydW4u
cnRsKCkpIHsKLSAgICAgICAgbV9zdGFydE9mZnNldCA9IG1faGFyZmJ1enpSdW5zLmxhc3QoKS0+
b2Zmc2V0cygpWzBdOwotICAgICAgICBmb3IgKGludCBydW5JbmRleCA9IG51bVJ1bnMgLSAxOyBy
dW5JbmRleCA+PSAwOyAtLXJ1bkluZGV4KSB7Ci0gICAgICAgICAgICBIYXJmQnV6elJ1biogY3Vy
cmVudFJ1biA9IG1faGFyZmJ1enpSdW5zW3J1bkluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEZs
b2F0UG9pbnQgZmlyc3RPZmZzZXRPZk5leHRSdW4gPSAhcnVuSW5kZXggPyBGbG9hdFBvaW50KCkg
OiBtX2hhcmZidXp6UnVuc1tydW5JbmRleCAtIDFdLT5vZmZzZXRzKClbMF07Ci0gICAgICAgICAg
ICBmaWxsR2x5cGhCdWZmZXJGcm9tSGFyZkJ1enpSdW4oZ2x5cGhCdWZmZXIsIGN1cnJlbnRSdW4s
IGZpcnN0T2Zmc2V0T2ZOZXh0UnVuKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fc3RhcnRPZmZzZXQgPSBtX2hhcmZidXp6UnVucy5maXJzdCgpLT5vZmZzZXRzKClbMF07Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgcnVuSW5kZXggPSAwOyBydW5JbmRleCA8IG51bVJ1bnM7ICsr
cnVuSW5kZXgpIHsKLSAgICAgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJm
YnV6elJ1bnNbcnVuSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBmaXJzdE9m
ZnNldE9mTmV4dFJ1biA9IHJ1bkluZGV4ID09IG51bVJ1bnMgLSAxID8gRmxvYXRQb2ludCgpIDog
bV9oYXJmYnV6elJ1bnNbcnVuSW5kZXggKyAxXS0+b2Zmc2V0cygpWzBdOwotICAgICAgICAgICAg
ZmlsbEdseXBoQnVmZmVyRnJvbUhhcmZCdXp6UnVuKGdseXBoQnVmZmVyLCBjdXJyZW50UnVuLCBm
aXJzdE9mZnNldE9mTmV4dFJ1bik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGdseXBo
QnVmZmVyLT5zaXplKCk7Ci19Ci0KLWludCBIYXJmQnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRp
b24oZmxvYXQgdGFyZ2V0WCkKLXsKLSAgICBpbnQgY2hhcmFjdGVyc1NvRmFyID0gMDsKLSAgICBm
bG9hdCBjdXJyZW50WCA9IDA7Ci0KLSAgICBpZiAobV9ydW4ucnRsKCkpIHsKLSAgICAgICAgY2hh
cmFjdGVyc1NvRmFyID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOwotICAgICAgICBmb3IgKGlu
dCBpID0gbV9oYXJmYnV6elJ1bnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
ICAgIGNoYXJhY3RlcnNTb0ZhciAtPSBtX2hhcmZidXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygp
OwotICAgICAgICAgICAgZmxvYXQgbmV4dFggPSBjdXJyZW50WCArIG1faGFyZmJ1enpSdW5zW2ld
LT53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgb2Zmc2V0Rm9yUnVuID0gdGFyZ2V0WCAtIGN1
cnJlbnRYOwotICAgICAgICAgICAgaWYgKG9mZnNldEZvclJ1biA+PSAwICYmIG9mZnNldEZvclJ1
biA8PSBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKSkgewotICAgICAgICAgICAgICAgIC8vIFRo
ZSB4IHZhbHVlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiB0aGlzIHNjcmlwdCBydW4uCi0gICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW5kZXggPSBtX2hhcmZidXp6UnVuc1tpXS0+Y2hhcmFj
dGVySW5kZXhGb3JYUG9zaXRpb24ob2Zmc2V0Rm9yUnVuKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
dXJyZW50WCA9IG5leHRYOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZmJ1enpSdW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBmbG9hdCBuZXh0WCA9IGN1cnJlbnRYICsgbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7
Ci0gICAgICAgICAgICBmbG9hdCBvZmZzZXRGb3JSdW4gPSB0YXJnZXRYIC0gY3VycmVudFg7Ci0g
ICAgICAgICAgICBpZiAob2Zmc2V0Rm9yUnVuID49IDAgJiYgb2Zmc2V0Rm9yUnVuIDw9IG1faGFy
ZmJ1enpSdW5zW2ldLT53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW5kZXggPSBtX2hhcmZidXp6UnVuc1tpXS0+Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24ob2Zm
c2V0Rm9yUnVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyICsgaW5k
ZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzU29GYXIgKz0gbV9oYXJm
YnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGN1cnJlbnRYID0gbmV4
dFg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyOwotfQot
Ci1GbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pCi17Ci0gICAgZmxvYXQgY3Vy
cmVudFggPSAwOwotICAgIGZsb2F0IGZyb21YID0gMDsKLSAgICBmbG9hdCB0b1ggPSAwOwotICAg
IGJvb2wgZm91bmRGcm9tWCA9IGZhbHNlOwotICAgIGJvb2wgZm91bmRUb1ggPSBmYWxzZTsKLQot
ICAgIGlmIChtX3J1bi5ydGwoKSkKLSAgICAgICAgY3VycmVudFggPSBtX3RvdGFsV2lkdGg7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZmJ1enpSdW5zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX3J1bi5ydGwoKSkKLSAgICAgICAgICAgIGN1cnJlbnRYIC09IG1faGFy
ZmJ1enpSdW5zW2ldLT53aWR0aCgpOwotICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFy
ZmJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGlmICghZm91bmRGcm9tWCAm
JiBmcm9tID49IDAgJiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpIHsKLSAgICAgICAgICAgIGZyb21Y
ID0gbV9oYXJmYnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldChmcm9tKSArIGN1cnJlbnRY
OwotICAgICAgICAgICAgZm91bmRGcm9tWCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOwotCi0gICAgICAgIGlmICghZm91bmRUb1ggJiYg
dG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpIHsKLSAgICAgICAgICAgIHRvWCA9IG1faGFy
ZmJ1enpSdW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQodG8pICsgY3VycmVudFg7Ci0gICAgICAg
ICAgICBmb3VuZFRvWCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdG8gLT0g
bnVtQ2hhcmFjdGVyczsKLQotICAgICAgICBpZiAoZm91bmRGcm9tWCAmJiBmb3VuZFRvWCkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIW1fcnVuLnJ0bCgpKQotICAgICAgICAgICAg
Y3VycmVudFggKz0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7Ci0gICAgfQotCi0gICAgLy8g
VGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQuCi0g
ICAgaWYgKCFmb3VuZEZyb21YKQotICAgICAgICBmcm9tWCA9IDA7Ci0gICAgaWYgKCFmb3VuZFRv
WCkKLSAgICAgICAgdG9YID0gbV9ydW4ucnRsKCkgPyAwIDogbV90b3RhbFdpZHRoOwotCi0gICAg
Ly8gVXNpbmcgZmxvb3JmKCkgYW5kIHJvdW5kZigpIGFzIHRoZSBzYW1lIGFzIG1hYyBwb3J0Lgot
ICAgIGlmIChmcm9tWCA8IHRvWCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9p
bnQueCgpICsgZnJvbVgpLCBwb2ludC55KCksIHJvdW5kZih0b1ggLSBmcm9tWCksIGhlaWdodCk7
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgdG9YKSwgcG9pbnQueSgp
LCByb3VuZGYoZnJvbVggLSB0b1gpLCBoZWlnaHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6elNoYXBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTJlZDE5MTFkODliNzJiZjdkMTBjMzZlNjFiOGY4YTFmZWE3NWMzMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEhhcmZCdXp6U2hhcGVyX2gKLSNkZWZpbmUgSGFyZkJ1enpT
aGFwZXJfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCi0jaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXJCYXNlLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5o
IgotI2luY2x1ZGUgImhiLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udDsKLWNsYXNzIFNp
bXBsZUZvbnREYXRhOwotCi1jbGFzcyBIYXJmQnV6elNoYXBlciA6IHB1YmxpYyBIYXJmQnV6elNo
YXBlckJhc2UgewotcHVibGljOgotICAgIEhhcmZCdXp6U2hhcGVyKGNvbnN0IEZvbnQqLCBjb25z
dCBUZXh0UnVuJik7Ci0gICAgdmlydHVhbCB+SGFyZkJ1enpTaGFwZXIoKTsKLQotICAgIHZvaWQg
c2V0RHJhd1JhbmdlKGludCBmcm9tLCBpbnQgdG8pOwotICAgIGJvb2wgc2hhcGUoR2x5cGhCdWZm
ZXIqID0gMCk7Ci0gICAgRmxvYXRQb2ludCBhZGp1c3RTdGFydFBvaW50KGNvbnN0IEZsb2F0UG9p
bnQmKTsKLSAgICBmbG9hdCB0b3RhbFdpZHRoKCkgeyByZXR1cm4gbV90b3RhbFdpZHRoOyB9Ci0g
ICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdldFgpOwotICAgIEZsb2F0UmVjdCBz
ZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50
IHRvKTsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBIYXJmQnV6elJ1biB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRlKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hh
cmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGhiX3NjcmlwdF90IHNjcmlwdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIYXJmQnV6elJ1bihmb250
RGF0YSwgc3RhcnRJbmRleCwgbnVtQ2hhcmFjdGVycywgZGlyZWN0aW9uLCBzY3JpcHQpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgYXBwbHlTaGFwZVJlc3VsdChoYl9idWZmZXJfdCopOwot
ICAgICAgICB2b2lkIHNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGluZGV4LCB1aW50MTZf
dCBnbHlwaElkLCBmbG9hdCBhZHZhbmNlLCBmbG9hdCBvZmZzZXRYLCBmbG9hdCBvZmZzZXRZKTsK
LSAgICAgICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0K
LQotICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7
Ci0gICAgICAgIGZsb2F0IHhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpOwotCi0g
ICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERh
dGE7IH0KLSAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnRJbmRleDsgfQotICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1DaGFyYWN0ZXJzOyB9Ci0gICAgICAgIHVuc2lnbmVkIG51bUdseXBocygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtR2x5cGhzOyB9Ci0gICAgICAgIHVpbnQxNl90KiBnbHlwaHMoKSB7IHJl
dHVybiAmbV9nbHlwaHNbMF07IH0KLSAgICAgICAgZmxvYXQqIGFkdmFuY2VzKCkgeyByZXR1cm4g
Jm1fYWR2YW5jZXNbMF07IH0KLSAgICAgICAgRmxvYXRQb2ludCogb2Zmc2V0cygpIHsgcmV0dXJu
ICZtX29mZnNldHNbMF07IH0KLSAgICAgICAgdWludDE2X3QqIGdseXBoVG9DaGFyYWN0ZXJJbmRl
eGVzKCkgeyByZXR1cm4gJm1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbMF07IH0KLSAgICAgICAg
ZmxvYXQgd2lkdGgoKSB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgICAgIGJvb2wgcnRsKCkgeyBy
ZXR1cm4gbV9kaXJlY3Rpb24gPT0gUlRMOyB9Ci0gICAgICAgIGhiX3NjcmlwdF90IHNjcmlwdCgp
IHsgcmV0dXJuIG1fc2NyaXB0OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBIYXJmQnV6elJ1
bihjb25zdCBTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51
bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24sIGhiX3NjcmlwdF90KTsKLQotICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YTsKLSAgICAgICAgdW5zaWduZWQgbV9zdGFydElu
ZGV4OwotICAgICAgICBzaXplX3QgbV9udW1DaGFyYWN0ZXJzOwotICAgICAgICB1bnNpZ25lZCBt
X251bUdseXBoczsKLSAgICAgICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICAgICAg
aGJfc2NyaXB0X3QgbV9zY3JpcHQ7Ci0gICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2ds
eXBoczsKLSAgICAgICAgVmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7Ci0gICAgICAgIFZl
Y3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzOwotICAgICAgICBW
ZWN0b3I8RmxvYXRQb2ludCwgMjU2PiBtX29mZnNldHM7Ci0gICAgICAgIGZsb2F0IG1fd2lkdGg7
Ci0gICAgfTsKLQotICAgIHZvaWQgc2V0Rm9udEZlYXR1cmVzKCk7Ci0KLSAgICBib29sIGNvbGxl
Y3RIYXJmQnV6elJ1bnMoKTsKLSAgICBib29sIHNoYXBlSGFyZkJ1enpSdW5zKGJvb2wgc2hvdWxk
U2V0RGlyZWN0aW9uKTsKLSAgICBib29sIGZpbGxHbHlwaEJ1ZmZlcihHbHlwaEJ1ZmZlciopOwot
ICAgIHZvaWQgZmlsbEdseXBoQnVmZmVyRnJvbUhhcmZCdXp6UnVuKEdseXBoQnVmZmVyKiwgSGFy
ZkJ1enpSdW4qLCBGbG9hdFBvaW50JiBmaXJzdE9mZnNldE9mTmV4dFJ1bik7Ci0gICAgdm9pZCBz
ZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEhhcmZCdXp6UnVuKiwgaGJfYnVmZmVyX3Qq
KTsKLQotICAgIEdseXBoQnVmZmVyQWR2YW5jZSBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxv
YXQsIGZsb2F0KTsKLQotICAgIFZlY3RvcjxoYl9mZWF0dXJlX3QsIDQ+IG1fZmVhdHVyZXM7Ci0g
ICAgVmVjdG9yPE93blB0cjxIYXJmQnV6elJ1bj4sIDE2PiBtX2hhcmZidXp6UnVuczsKLQotICAg
IEZsb2F0UG9pbnQgbV9zdGFydE9mZnNldDsKLQotICAgIGludCBtX2Zyb21JbmRleDsKLSAgICBp
bnQgbV90b0luZGV4OwotCi0gICAgZmxvYXQgbV90b3RhbFdpZHRoOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSGFyZkJ1enpTaGFwZXJfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>