<?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>76155</bug_id>
          
          <creation_ts>2012-01-12 01:19:54 -0800</creation_ts>
          <short_desc>Move SimpleFontDataSkia.cpp to Source/WebCore/platform/graphics/skia</short_desc>
          <delta_ts>2012-01-12 21:50:35 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>bashi</cc>
    
    <cc>dbates</cc>
    
    <cc>efidler</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>534643</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-12 01:19:54 -0800</bug_when>
    <thetext>SimpleFontDataSkia.cpp doesn&apos;t contain Harfbuzz specific code so it should be located in Source/WebCore/platform/graphics/skia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534645</commentid>
    <comment_count>1</comment_count>
      <attachid>122187</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-12 01:23:29 -0800</bug_when>
    <thetext>Created attachment 122187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534938</commentid>
    <comment_count>2</comment_count>
      <attachid>122187</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-01-12 10:11:45 -0800</bug_when>
    <thetext>Comment on attachment 122187
Patch

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

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1710
&gt; -            [&apos;include&apos;, &apos;platform/graphics/harfbuzz/SimpleFontDataSkia\\.cpp$&apos;],
&gt; +            [&apos;include&apos;, &apos;platform/graphics/skia/SimpleFontDataSkia\\.cpp$&apos;],

I think you also need to exclude the file on mac and win.  The mac code is around line 1661 and the win code is around line 1692.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535231</commentid>
    <comment_count>3</comment_count>
      <attachid>122324</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-12 15:43:37 -0800</bug_when>
    <thetext>Created attachment 122324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535234</commentid>
    <comment_count>4</comment_count>
      <attachid>122187</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-12 15:44:20 -0800</bug_when>
    <thetext>Comment on attachment 122187
Patch

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

Thank you for review!

&gt;&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1710
&gt;&gt; +            [&apos;include&apos;, &apos;platform/graphics/skia/SimpleFontDataSkia\\.cpp$&apos;],
&gt; 
&gt; I think you also need to exclude the file on mac and win.  The mac code is around line 1661 and the win code is around line 1692.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535253</commentid>
    <comment_count>5</comment_count>
      <attachid>122324</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-01-12 16:02:09 -0800</bug_when>
    <thetext>Comment on attachment 122324
Patch

Please watch the chromium bots when you land.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535261</commentid>
    <comment_count>6</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-12 16:10:53 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 122324 [details])
&gt; Please watch the chromium bots when you land.  Thanks!

I see. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535284</commentid>
    <comment_count>7</comment_count>
      <attachid>122324</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 16:28:06 -0800</bug_when>
    <thetext>Comment on attachment 122324
Patch

Clearing flags on attachment: 122324

Committed r104876: &lt;http://trac.webkit.org/changeset/104876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535285</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 16:28:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122187</attachid>
            <date>2012-01-12 01:23:29 -0800</date>
            <delta_ts>2012-01-12 15:44:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76155-20120112182328.patch</filename>
            <type>text/plain</type>
            <size>22046</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0Nzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E0YjgyMzIyNWI0MDMx
MGZjZmQ1YmU4OThjMGRjNjI1NzAwZGIwYS4uMmFhNjg1MjhhYzM0NDNjY2Y0MTQzZjI2Njg3OGYw
NmU4N2FiNjEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTAxLTEyICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIFNpbXBs
ZUZvbnREYXRhU2tpYS5jcHAgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJy
eS5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250
RGF0YVNraWEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovU2ltcGxlRm9udERhdGFTa2lhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorCiAyMDEyLTAxLTExICBLd2FuZ0h5dWsgS2ltICA8
aHl1a2kua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJlbmFtZSBwYXJhbWV0ZXIg
YW5kIHZhcmlhYmxlIG5hbWUgJ3InIHRvICdyZWN0JyBpbiBJbnRSZWN0RWZsLmNwcC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCA2OGNkM2NjYzQwYTk0YTI1NjQ0
MTBmMTZmNjQ3NzA2OWJiOThmZmM1Li5jZWM3ODFhNDJiYzc0ZTYwZmE4MTk0ZWU2YTEwZGJjOTZh
Y2Q3NWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCkBAIC00Niw5
ICs0Niw5IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L1NpbXBsZUZvbnREYXRhSGFyZkJ1enouY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
b250Q2FjaGVTa2lhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJl
ZU5vZGVTa2lhLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFT
a2lhLmNwcAogKQogCiAjIE90aGVyIHNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAKaW5kZXggNWQyYjk1Yzc4MzFmMDgxZTYwNDUzNjM1YTk3MTc5ZmQ4ODEyYjhhMy4u
MDk0OTcyYjE2M2ZkZjUyMzAxYjYzNjRiNDBlOGExNzdhNjk1NDlkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTE0OTMsNyArMTQ5Myw3IEBACiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6XFwu
Y3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0ZvbnRQbGF0Zm9ybURhdGFIYXJmQnV6elxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNraWFcXC5jcHAkJ10s
Ci0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovU2lt
cGxlRm9udERhdGFTa2lhXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhXFwuY3BwJCddLAogICAgICAgICAg
IF0sCiAgICAgICAgIH0sIHsgIyB1c2VfeDExPT0wCiAgICAgICAgICAgJ3NvdXJjZXMvJzogWwpA
QCAtMTcwNyw3ICsxNzA3LDcgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enpcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udFBsYXRmb3JtRGF0YUhhcmZC
dXp6XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2tpYVxcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9TaW1wbGVGb250RGF0YVNraWFcXC5jcHAkJ10s
CisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVG
b250RGF0YVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSwgeyAjIE9TIT0i
YW5kcm9pZCIKICAgICAgICAgICAnc291cmNlcy8nOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWZi
NWQwZjc0MGMzOGMwZjhkNDcyYjJmN2NjYzRhZjA5NjlmYWJmYi4uYjA4Y2ZhOGQwODhlZGY1ZGE3
NjQ3ZmQ1N2I5NWIzYWMxYTA4ZDZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzgwNiw3ICszODA2
LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250UGxhdGZv
cm1EYXRhSGFyZkJ1enouaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpTa2lhLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db2xvck1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCcsCkBAIC0zOTMyLDYgKzM5MzEsNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
R3JhcGhpY3MuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVG
b250RGF0YVNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFGb250V2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lh
Rm9udFdpbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGls
cy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovU2ltcGxlRm9udERhdGFTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc4MmIwMmZhOTMyN2I3YmY2Nzg4NzA3MGUwMTRlOTM5MWJiZTcxZTEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovU2ltcGxlRm9udERhdGFTa2lhLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAy
MDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTa0ZvbnRIb3N0
LmgiCi0jaW5jbHVkZSAiU2tQYWludC5oIgotI2luY2x1ZGUgIlNrVGltZS5oIgotI2luY2x1ZGUg
IlNrVHlwZWZhY2UuaCIKLSNpbmNsdWRlICJTa1R5cGVzLmgiCi0jaW5jbHVkZSAiVkRNWFBhcnNl
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFNtYWxsY2FwcyB2ZXJzaW9ucyBvZiBm
b250cyBhcmUgNzAlIHRoZSBzaXplIG9mIHRoZSBub3JtYWwgZm9udC4KLXN0YXRpYyBjb25zdCBm
bG9hdCBzbWFsbENhcHNGcmFjdGlvbiA9IDAuN2Y7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZW1waGFz
aXNNYXJrRnJhY3Rpb24gPSAuNTsKLS8vIFRoaXMgaXMgdGhlIGxhcmdlc3QgVkRNWCB0YWJsZSB3
aGljaCB3ZSdsbCB0cnkgdG8gbG9hZCBhbmQgcGFyc2UuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IG1h
eFZETVhUYWJsZVNpemUgPSAxMDI0ICogMTAyNDsgLy8gMSBNQgotCi12b2lkIFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGlmICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7
Ci0gICAgICAgIG1fZm9udE1ldHJpY3MucmVzZXQoKTsKLSAgICAgICAgbV9hdmdDaGFyV2lkdGgg
PSAwOwotICAgICAgICBtX21heENoYXJXaWR0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBTa1BhaW50IHBhaW50OwotICAgIFNrUGFpbnQ6OkZvbnRNZXRyaWNzIG1ldHJpY3M7
Ci0KLSAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgcGFpbnQuZ2V0
Rm9udE1ldHJpY3MoJm1ldHJpY3MpOwotICAgIGNvbnN0IFNrRm9udElEIGZvbnRJRCA9IG1fcGxh
dGZvcm1EYXRhLnVuaXF1ZUlEKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdmRteFRh
ZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ1YnLCAnRCcsICdNJywgJ1gnKTsKLSAgICBpbnQgcGl4ZWxT
aXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMC41OwotICAgIGludCB2ZG14QXNjZW50LCB2
ZG14RGVzY2VudDsKLSAgICBib29sIGlzVkRNWFZhbGlkID0gZmFsc2U7Ci0KLSAgICBzaXplX3Qg
dmRteFNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2ZG14VGFnKTsKLSAg
ICBpZiAodmRteFNpemUgJiYgdmRteFNpemUgPCBtYXhWRE1YVGFibGVTaXplKSB7Ci0gICAgICAg
IHVpbnQ4X3QqIHZkbXhUYWJsZSA9ICh1aW50OF90KikgZmFzdE1hbGxvYyh2ZG14U2l6ZSk7Ci0g
ICAgICAgIGlmICh2ZG14VGFibGUKLSAgICAgICAgICAgICYmIFNrRm9udEhvc3Q6OkdldFRhYmxl
RGF0YShmb250SUQsIHZkbXhUYWcsIDAsIHZkbXhTaXplLCB2ZG14VGFibGUpID09IHZkbXhTaXpl
Ci0gICAgICAgICAgICAmJiBwYXJzZVZETVgoJnZkbXhBc2NlbnQsICZ2ZG14RGVzY2VudCwgdmRt
eFRhYmxlLCB2ZG14U2l6ZSwgcGl4ZWxTaXplKSkKLSAgICAgICAgICAgIGlzVkRNWFZhbGlkID0g
dHJ1ZTsKLSAgICAgICAgZmFzdEZyZWUodmRteFRhYmxlKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBh
c2NlbnQ7Ci0gICAgZmxvYXQgZGVzY2VudDsKLQotICAgIC8vIEJld2FyZSB0aG9zZSB3aG8gc3Rl
cCBoZXJlOiBUaGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gbWF0Y2ggV2luMzIgZm9udAotICAgIC8v
IG1ldHJpY3MgKmV4YWN0bHkqLgotICAgIGlmIChpc1ZETVhWYWxpZCkgewotICAgICAgICBhc2Nl
bnQgPSB2ZG14QXNjZW50OwotICAgICAgICBkZXNjZW50ID0gLXZkbXhEZXNjZW50OwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFNrU2NhbGFyIGhlaWdodCA9IC1tZXRyaWNzLmZBc2NlbnQgKyBtZXRy
aWNzLmZEZXNjZW50ICsgbWV0cmljcy5mTGVhZGluZzsKLSAgICAgICAgYXNjZW50ID0gU2tTY2Fs
YXJSb3VuZCgtbWV0cmljcy5mQXNjZW50KTsKLSAgICAgICAgZGVzY2VudCA9IFNrU2NhbGFyUm91
bmQoaGVpZ2h0KSAtIGFzY2VudDsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2Vu
dChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKLQotICAg
IGZsb2F0IHhIZWlnaHQ7Ci0gICAgaWYgKG1ldHJpY3MuZlhIZWlnaHQpCi0gICAgICAgIHhIZWln
aHQgPSBtZXRyaWNzLmZYSGVpZ2h0OwotICAgIGVsc2UgewotICAgICAgICAvLyBoYWNrIHRha2Vu
IGZyb20gdGhlIFdpbmRvd3MgcG9ydAotICAgICAgICB4SGVpZ2h0ID0gYXNjZW50ICogMC41NmY7
Ci0gICAgfQotCi0gICAgZmxvYXQgbGluZUdhcCA9IFNrU2NhbGFyVG9GbG9hdChtZXRyaWNzLmZM
ZWFkaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZVNwYWNpbmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGlu
ZUdhcCkpOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkgewotICAgICAgICBzdGF0aWMgY29u
c3QgdWludDMyX3QgdmhlYVRhZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ3YnLCAnaCcsICdlJywgJ2En
KTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHZvcmdUYWcgPSBTa1NldEZvdXJCeXRl
VGFnKCdWJywgJ08nLCAnUicsICdHJyk7Ci0gICAgICAgIHNpemVfdCB2aGVhU2l6ZSA9IFNrRm9u
dEhvc3Q6OkdldFRhYmxlU2l6ZShmb250SUQsIHZoZWFUYWcpOwotICAgICAgICBzaXplX3Qgdm9y
Z1NpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2b3JnVGFnKTsKLSAgICAg
ICAgaWYgKCh2aGVhU2l6ZSA+IDApIHx8ICh2b3JnU2l6ZSA+IDApKQotICAgICAgICAgICAgbV9o
YXNWZXJ0aWNhbEdseXBocyA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gSW4gV2ViS2l0L1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwLCBtX3NwYWNlV2lkdGggaXMK
LSAgICAvLyBjYWxjdWxhdGVkIGZvciB1cywgYnV0IHdlIG5lZWQgdG8gY2FsY3VsYXRlIG1fbWF4
Q2hhcldpZHRoIGFuZAotICAgIC8vIG1fYXZnQ2hhcldpZHRoIGluIG9yZGVyIGZvciB0ZXh0IGVu
dHJ5IHdpZGdldHMgdG8gYmUgc2l6ZWQgY29ycmVjdGx5LgotCi0gICAgU2tTY2FsYXIgeFJhbmdl
ID0gbWV0cmljcy5mWE1heCAtIG1ldHJpY3MuZlhNaW47Ci0gICAgbV9tYXhDaGFyV2lkdGggPSBT
a1NjYWxhclJvdW5kKHhSYW5nZSAqIFNrU2NhbGFyUm91bmQobV9wbGF0Zm9ybURhdGEuc2l6ZSgp
KSk7Ci0KLSAgICBpZiAobWV0cmljcy5mQXZnQ2hhcldpZHRoKQotICAgICAgICBtX2F2Z0NoYXJX
aWR0aCA9IFNrU2NhbGFyUm91bmQobWV0cmljcy5mQXZnQ2hhcldpZHRoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSB4SGVpZ2h0OwotCi0gICAgICAgIEdseXBoUGFnZSog
Z2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodGhpcywgMCkt
PnBhZ2UoKTsKLQotICAgICAgICBpZiAoZ2x5cGhQYWdlWmVybykgewotICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IFVDaGFyMzIgeENoYXIgPSAneCc7Ci0gICAgICAgICAgICBjb25zdCBHbHlwaCB4
R2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoeENoYXIpLmdseXBo
OwotCi0gICAgICAgICAgICBpZiAoeEdseXBoKQotICAgICAgICAgICAgICAgIG1fYXZnQ2hhcldp
ZHRoID0gd2lkdGhGb3JHbHlwaCh4R2x5cGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQotewotICAgIC8vIGNoYXJ3
aWR0aHMgYXJlIHNldCBpbiBwbGF0Zm9ybUluaXQuCi19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
ZmxvYXQgc2NhbGVkU2l6ZSA9IGxyb3VuZGYoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
ICogc2NhbGVGYWN0b3IpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEo
Rm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwgc2NhbGVkU2l6ZSksIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSkpOwotfQotCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxs
Q2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAotewotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0gICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwotICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEt
PnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc21hbGxD
YXBzRnJhY3Rpb24pOwotCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMu
Z2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEg
PSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7Ci0gICAgaWYgKCFtX2Rl
cml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBo
YXNpc01hcmtGcmFjdGlvbik7Ci0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhh
c2lzTWFyay5nZXQoKTsKLX0KLQotYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAotewotICAgIFNr
UGFpbnQgcGFpbnQ7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEJ1ZmZlckNvdW50ID0g
NjQ7Ci0gICAgdWludDE2X3QgZ2x5cGhzW21heEJ1ZmZlckNvdW50XTsKLQotICAgIG1fcGxhdGZv
cm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKLSAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQ
YWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7Ci0KLSAgICB3aGlsZSAobGVuZ3RoID4gMCkgewot
ICAgICAgICBpbnQgbiA9IFNrTWluMzIobGVuZ3RoLCBTS19BUlJBWV9DT1VOVChnbHlwaHMpKTsK
LQotICAgICAgICAvLyB0ZXh0VG9HbHlwaHMgdGFrZXMgYSBieXRlIGNvdW50IHNvIHdlIGRvdWJs
ZSB0aGUgY2hhcmFjdGVyIGNvdW50LgotICAgICAgICBpbnQgY291bnQgPSBwYWludC50ZXh0VG9H
bHlwaHMoY2hhcmFjdGVycywgbiAqIDIsIGdseXBocyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKCFnbHlwaHNbaV0pCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBtaXNzaW5nIGdseXBoCi0gICAgICAgIH0KLQotICAg
ICAgICBjaGFyYWN0ZXJzICs9IG47Ci0gICAgICAgIGxlbmd0aCAtPSBuOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgp
Ci17Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IHBsYXRmb3JtRGF0YSgpLmlzRml4ZWRQaXRj
aCgpOwotfQotCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5
cGgoR2x5cGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotICAgIAotZmxv
YXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBTa0FTU0VSVChzaXplb2YoZ2x5cGgpID09IDIpOyAvLyBjb21waWxlLXRpbWUgYXNz
ZXJ0Ci0KLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQYWlu
dCgmcGFpbnQpOwotCi0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElE
X1RleHRFbmNvZGluZyk7Ci0gICAgU2tTY2FsYXIgd2lkdGggPSBwYWludC5tZWFzdXJlVGV4dCgm
Z2x5cGgsIDIpOwotCi0gICAgLy8gVGhvdWdoIFdlYktpdCBzdXBwb3J0cyBub24taW50ZWdyYWwg
YWR2YW5jZXMsIFNraWEgb25seSBzdXBwb3J0cyB0aGVtCi0gICAgLy8gZm9yICJzdWJwaXhlbCIg
KGRpc3RpbmN0IGZyb20gTENEIHN1YnBpeGVsIGFudGlhbGlhc2luZykgdGV4dCwgd2hpY2gKLSAg
ICAvLyB3ZSBkb24ndCB1c2UuCi0gICAgcmV0dXJuIHJvdW5kKFNrU2NhbGFyVG9GbG9hdCh3aWR0
aCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzgyYjAyZmE5MzI3YjdiZjY3ODg3MDcwZTAxNGU5MzkxYmJlNzFlMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2lt
cGxlRm9udERhdGFTa2lhLmNwcApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
U2tGb250SG9zdC5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1RpbWUuaCIK
KyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAiU2tUeXBlcy5oIgorI2luY2x1ZGUg
IlZETVhQYXJzZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTbWFsbGNhcHMgdmVy
c2lvbnMgb2YgZm9udHMgYXJlIDcwJSB0aGUgc2l6ZSBvZiB0aGUgbm9ybWFsIGZvbnQuCitzdGF0
aWMgY29uc3QgZmxvYXQgc21hbGxDYXBzRnJhY3Rpb24gPSAwLjdmOworc3RhdGljIGNvbnN0IGZs
b2F0IGVtcGhhc2lzTWFya0ZyYWN0aW9uID0gLjU7CisvLyBUaGlzIGlzIHRoZSBsYXJnZXN0IFZE
TVggdGFibGUgd2hpY2ggd2UnbGwgdHJ5IHRvIGxvYWQgYW5kIHBhcnNlLgorc3RhdGljIGNvbnN0
IHNpemVfdCBtYXhWRE1YVGFibGVTaXplID0gMTAyNCAqIDEwMjQ7IC8vIDEgTUIKKwordm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1EYXRh
LnNpemUoKSkgeworICAgICAgICBtX2ZvbnRNZXRyaWNzLnJlc2V0KCk7CisgICAgICAgIG1fYXZn
Q2hhcldpZHRoID0gMDsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGggPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgU2tQYWludCBwYWludDsKKyAgICBTa1BhaW50OjpGb250TWV0cmlj
cyBtZXRyaWNzOworCisgICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOworICAg
IHBhaW50LmdldEZvbnRNZXRyaWNzKCZtZXRyaWNzKTsKKyAgICBjb25zdCBTa0ZvbnRJRCBmb250
SUQgPSBtX3BsYXRmb3JtRGF0YS51bmlxdWVJRCgpOworCisgICAgc3RhdGljIGNvbnN0IHVpbnQz
Ml90IHZkbXhUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywgJ0QnLCAnTScsICdYJyk7CisgICAg
aW50IHBpeGVsU2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSArIDAuNTsKKyAgICBpbnQgdmRt
eEFzY2VudCwgdmRteERlc2NlbnQ7CisgICAgYm9vbCBpc1ZETVhWYWxpZCA9IGZhbHNlOworCisg
ICAgc2l6ZV90IHZkbXhTaXplID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKGZvbnRJRCwgdmRt
eFRhZyk7CisgICAgaWYgKHZkbXhTaXplICYmIHZkbXhTaXplIDwgbWF4VkRNWFRhYmxlU2l6ZSkg
eworICAgICAgICB1aW50OF90KiB2ZG14VGFibGUgPSAodWludDhfdCopIGZhc3RNYWxsb2ModmRt
eFNpemUpOworICAgICAgICBpZiAodmRteFRhYmxlCisgICAgICAgICAgICAmJiBTa0ZvbnRIb3N0
OjpHZXRUYWJsZURhdGEoZm9udElELCB2ZG14VGFnLCAwLCB2ZG14U2l6ZSwgdmRteFRhYmxlKSA9
PSB2ZG14U2l6ZQorICAgICAgICAgICAgJiYgcGFyc2VWRE1YKCZ2ZG14QXNjZW50LCAmdmRteERl
c2NlbnQsIHZkbXhUYWJsZSwgdmRteFNpemUsIHBpeGVsU2l6ZSkpCisgICAgICAgICAgICBpc1ZE
TVhWYWxpZCA9IHRydWU7CisgICAgICAgIGZhc3RGcmVlKHZkbXhUYWJsZSk7CisgICAgfQorCisg
ICAgZmxvYXQgYXNjZW50OworICAgIGZsb2F0IGRlc2NlbnQ7CisKKyAgICAvLyBCZXdhcmUgdGhv
c2Ugd2hvIHN0ZXAgaGVyZTogVGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIG1hdGNoIFdpbjMyIGZv
bnQKKyAgICAvLyBtZXRyaWNzICpleGFjdGx5Ki4KKyAgICBpZiAoaXNWRE1YVmFsaWQpIHsKKyAg
ICAgICAgYXNjZW50ID0gdmRteEFzY2VudDsKKyAgICAgICAgZGVzY2VudCA9IC12ZG14RGVzY2Vu
dDsKKyAgICB9IGVsc2UgeworICAgICAgICBTa1NjYWxhciBoZWlnaHQgPSAtbWV0cmljcy5mQXNj
ZW50ICsgbWV0cmljcy5mRGVzY2VudCArIG1ldHJpY3MuZkxlYWRpbmc7CisgICAgICAgIGFzY2Vu
dCA9IFNrU2NhbGFyUm91bmQoLW1ldHJpY3MuZkFzY2VudCk7CisgICAgICAgIGRlc2NlbnQgPSBT
a1NjYWxhclJvdW5kKGhlaWdodCkgLSBhc2NlbnQ7CisgICAgfQorCisgICAgbV9mb250TWV0cmlj
cy5zZXRBc2NlbnQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2Vu
dCk7CisKKyAgICBmbG9hdCB4SGVpZ2h0OworICAgIGlmIChtZXRyaWNzLmZYSGVpZ2h0KQorICAg
ICAgICB4SGVpZ2h0ID0gbWV0cmljcy5mWEhlaWdodDsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8g
aGFjayB0YWtlbiBmcm9tIHRoZSBXaW5kb3dzIHBvcnQKKyAgICAgICAgeEhlaWdodCA9IGFzY2Vu
dCAqIDAuNTZmOworICAgIH0KKworICAgIGZsb2F0IGxpbmVHYXAgPSBTa1NjYWxhclRvRmxvYXQo
bWV0cmljcy5mTGVhZGluZyk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXAp
OworICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKKyAgICBtX2ZvbnRNZXRy
aWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYoZGVzY2VudCkgKyBs
cm91bmRmKGxpbmVHYXApKTsKKworICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IHZoZWFUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCd2JywgJ2gn
LCAnZScsICdhJyk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB2b3JnVGFnID0gU2tT
ZXRGb3VyQnl0ZVRhZygnVicsICdPJywgJ1InLCAnRycpOworICAgICAgICBzaXplX3QgdmhlYVNp
emUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElELCB2aGVhVGFnKTsKKyAgICAgICAg
c2l6ZV90IHZvcmdTaXplID0gU2tGb250SG9zdDo6R2V0VGFibGVTaXplKGZvbnRJRCwgdm9yZ1Rh
Zyk7CisgICAgICAgIGlmICgodmhlYVNpemUgPiAwKSB8fCAodm9yZ1NpemUgPiAwKSkKKyAgICAg
ICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSB0cnVlOworICAgIH0KKworICAgIC8vIEluIFdl
YktpdC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCwgbV9zcGFj
ZVdpZHRoIGlzCisgICAgLy8gY2FsY3VsYXRlZCBmb3IgdXMsIGJ1dCB3ZSBuZWVkIHRvIGNhbGN1
bGF0ZSBtX21heENoYXJXaWR0aCBhbmQKKyAgICAvLyBtX2F2Z0NoYXJXaWR0aCBpbiBvcmRlciBm
b3IgdGV4dCBlbnRyeSB3aWRnZXRzIHRvIGJlIHNpemVkIGNvcnJlY3RseS4KKworICAgIFNrU2Nh
bGFyIHhSYW5nZSA9IG1ldHJpY3MuZlhNYXggLSBtZXRyaWNzLmZYTWluOworICAgIG1fbWF4Q2hh
cldpZHRoID0gU2tTY2FsYXJSb3VuZCh4UmFuZ2UgKiBTa1NjYWxhclJvdW5kKG1fcGxhdGZvcm1E
YXRhLnNpemUoKSkpOworCisgICAgaWYgKG1ldHJpY3MuZkF2Z0NoYXJXaWR0aCkKKyAgICAgICAg
bV9hdmdDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKG1ldHJpY3MuZkF2Z0NoYXJXaWR0aCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0geEhlaWdodDsKKworICAgICAgICBH
bHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxk
KHRoaXMsIDApLT5wYWdlKCk7CisKKyAgICAgICAgaWYgKGdseXBoUGFnZVplcm8pIHsKKyAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIHhDaGFyID0gJ3gnOworICAgICAgICAgICAgY29u
c3QgR2x5cGggeEdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHhD
aGFyKS5nbHlwaDsKKworICAgICAgICAgICAgaWYgKHhHbHlwaCkKKyAgICAgICAgICAgICAgICBt
X2F2Z0NoYXJXaWR0aCA9IHdpZHRoRm9yR2x5cGgoeEdseXBoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAg
ICAvLyBjaGFyd2lkdGhzIGFyZSBzZXQgaW4gcGxhdGZvcm1Jbml0LgorfQorCit2b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCitQYXNzT3duUHRyPFNpbXBsZUZv
bnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorewor
ICAgIGNvbnN0IGZsb2F0IHNjYWxlZFNpemUgPSBscm91bmRmKGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFNpemUoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBs
ZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEsIHNjYWxlZFNpemUpLCBp
c0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQorICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsK
KyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCisgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKKworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzLmdldCgpOworfQorCitTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVt
cGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCisgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOworICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKKyAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlw
dGlvbiwgZW1waGFzaXNNYXJrRnJhY3Rpb24pOworCisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7Cit9CisKK2Jvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRh
aW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QK
K3sKKyAgICBTa1BhaW50IHBhaW50OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhCdWZm
ZXJDb3VudCA9IDY0OworICAgIHVpbnQxNl90IGdseXBoc1ttYXhCdWZmZXJDb3VudF07CisKKyAg
ICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7CisgICAgcGFpbnQuc2V0VGV4dEVu
Y29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOworCisgICAgd2hpbGUgKGxlbmd0
aCA+IDApIHsKKyAgICAgICAgaW50IG4gPSBTa01pbjMyKGxlbmd0aCwgU0tfQVJSQVlfQ09VTlQo
Z2x5cGhzKSk7CisKKyAgICAgICAgLy8gdGV4dFRvR2x5cGhzIHRha2VzIGEgYnl0ZSBjb3VudCBz
byB3ZSBkb3VibGUgdGhlIGNoYXJhY3RlciBjb3VudC4KKyAgICAgICAgaW50IGNvdW50ID0gcGFp
bnQudGV4dFRvR2x5cGhzKGNoYXJhY3RlcnMsIG4gKiAyLCBnbHlwaHMpOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGlmICghZ2x5cGhzW2ld
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gbWlzc2luZyBnbHlwaAorICAgICAg
ICB9CisKKyAgICAgICAgY2hhcmFjdGVycyArPSBuOworICAgICAgICBsZW5ndGggLT0gbjsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJt
aW5lUGl0Y2goKQoreworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBwbGF0Zm9ybURhdGEoKS5p
c0ZpeGVkUGl0Y2goKTsKK30KKworRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30K
KyAgICAKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsYXRmb3JtRGF0YS5zaXplKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgU2tBU1NFUlQoc2l6ZW9mKGdseXBoKSA9PSAyKTsgLy8gY29tcGls
ZS10aW1lIGFzc2VydAorCisgICAgU2tQYWludCBwYWludDsKKworICAgIG1fcGxhdGZvcm1EYXRh
LnNldHVwUGFpbnQoJnBhaW50KTsKKworICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50
OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworICAgIFNrU2NhbGFyIHdpZHRoID0gcGFpbnQubWVh
c3VyZVRleHQoJmdseXBoLCAyKTsKKworICAgIC8vIFRob3VnaCBXZWJLaXQgc3VwcG9ydHMgbm9u
LWludGVncmFsIGFkdmFuY2VzLCBTa2lhIG9ubHkgc3VwcG9ydHMgdGhlbQorICAgIC8vIGZvciAi
c3VicGl4ZWwiIChkaXN0aW5jdCBmcm9tIExDRCBzdWJwaXhlbCBhbnRpYWxpYXNpbmcpIHRleHQs
IHdoaWNoCisgICAgLy8gd2UgZG9uJ3QgdXNlLgorICAgIHJldHVybiByb3VuZChTa1NjYWxhclRv
RmxvYXQod2lkdGgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122324</attachid>
            <date>2012-01-12 15:43:37 -0800</date>
            <delta_ts>2012-01-12 16:28:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76155-20120113084336.patch</filename>
            <type>text/plain</type>
            <size>22979</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0ODY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRkMTA0NzVhNzhkYTMw
Yjg5M2IxZWU4Y2UxNDE2NjFkMDUyMWQyMC4uZDAzNzU3NGU4N2VmZDhjOGU1YTQ2NmFmMjA4YmUy
NTg2M2IzZDk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTAxLTEyICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIFNpbXBs
ZUZvbnREYXRhU2tpYS5jcHAgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJy
eS5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250
RGF0YVNraWEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovU2ltcGxlRm9udERhdGFTa2lhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorCiAyMDEyLTAxLTEyICBBZGFtIEJhcnRoICA8YWJh
cnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTm9kZUl0ZXJhdG9yIGxvc2VzIHRyYWNrIG9mIHRo
ZSByZWZlcmVuY2Ugbm9kZSB3aGVuIHRoZSByZWZlcmVuY2Ugbm9kZSBpcyByZW1vdmVkIGZyb20g
dGhlIGRvY3VtZW50IChJRVRDIG5pX3JlbW92ZVJlZmVyZW5jZU5vZGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNjhjZDNjY2M0MGE5NGEyNTY0NDEwZjE2ZjY0
NzcwNjliYjk4ZmZjNS4uY2VjNzgxYTQyYmM3NGU2MGZhODE5NGVlNmExMGRiYzk2YWNkNzVlZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtNDYsOSArNDYsOSBA
QCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Gb250SGFyZkJ1enouY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9u
dFBsYXRmb3JtRGF0YUhhcmZCdXp6LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6U2tpYS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9TaW1wbGVG
b250RGF0YUhhcmZCdXp6LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hl
U2tpYS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tp
YS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAK
ICkKIAogIyBPdGhlciBzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CmluZGV4IDVkMmI5NWM3ODMxZjA4MWU2MDQ1MzYzNWE5NzE3OWZkODgxMmI4YTMuLjc0OTdjYjhm
YmMwYjY0YjI1YzkyMzhhM2Y1NDE0MDZjNTEwYjgyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6elxcLmNwcCQnXSwK
ICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250
UGxhdGZvcm1EYXRhSGFyZkJ1enpcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhXFwuY3BwJCddLAotICAgICAg
ICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L1NpbXBsZUZvbnRE
YXRhU2tpYVxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYVxcLmNwcCQnXSwKICAgICAgICAgICBdLAogICAg
ICAgICB9LCB7ICMgdXNlX3gxMT09MAogICAgICAgICAgICdzb3VyY2VzLyc6IFsKQEAgLTE2NjAs
NiArMTY2MCw3IEBACiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWFcXC5jcHAk
J10sCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1w
bGVGb250RGF0YVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZv
cm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1NYWNcXC5jcHAkJ10sCiAgICAgICAgICAgXSwK
ICAgICAgICAgfV0sCkBAIC0xNjkxLDYgKzE2OTIsNyBAQAogICAgICAgICAgICAgIyBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bSwgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGluc3RlYWQuCiAg
ICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVT
a2lhXFwuY3BwJCddLAogICAgICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhXFwuY3BwJCddLAorICAgICAgICAgICAgWydleGNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhXFwuY3BwJCdd
LAogCiAgICAgICAgICAgICAjIFN5c3RlbUluZm8uY3BwIGlzIHVzZWZ1bCBhbmQgd2UgZG9uJ3Qg
d2FudCB0byBjb3B5IGl0LgogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL3dpbi9T
eXN0ZW1JbmZvXFwuY3BwJCddLApAQCAtMTcwNyw3ICsxNzA5LDcgQEAKICAgICAgICAgICAgIFsn
aW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enpcXC5jcHAk
J10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
Rm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2tpYVxcLmNwcCQnXSwKLSAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9TaW1wbGVG
b250RGF0YVNraWFcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWFcXC5jcHAkJ10sCiAgICAgICAgICAgXSwK
ICAgICAgICAgfSwgeyAjIE9TIT0iYW5kcm9pZCIKICAgICAgICAgICAnc291cmNlcy8nOiBbCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggYzdkMGZjN2Y2ZDE4YzQ5ZDYwMTQwODU1NDFmZWVmMTg4NGFiY2Yz
ZC4uMjM4YTViYTYxYWRkYzVkZTliMjM2ZDE3NjE2NzE4ODllOWRhYmYwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzgwNyw3ICszODA3LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9Gb250UGxhdGZvcm1EYXRhSGFyZkJ1enouaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTa2lhLmgnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbScsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCcs
CkBAIC0zOTM1LDYgKzM5MzQsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtR3JhcGhpY3MuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovU2ltcGxlRm9udERhdGFTa2lhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L1NpbXBsZUZvbnREYXRhU2tpYS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MmIwMmZhOTMyN2I3YmY2Nzg4NzA3
MGUwMTRlOTM5MWJiZTcxZTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovU2ltcGxl
Rm9udERhdGFTa2lhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCi0jaW5jbHVkZSAiU2tQYWludC5oIgotI2luY2x1ZGUg
IlNrVGltZS5oIgotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNpbmNsdWRlICJTa1R5cGVzLmgi
Ci0jaW5jbHVkZSAiVkRNWFBhcnNlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFNt
YWxsY2FwcyB2ZXJzaW9ucyBvZiBmb250cyBhcmUgNzAlIHRoZSBzaXplIG9mIHRoZSBub3JtYWwg
Zm9udC4KLXN0YXRpYyBjb25zdCBmbG9hdCBzbWFsbENhcHNGcmFjdGlvbiA9IDAuN2Y7Ci1zdGF0
aWMgY29uc3QgZmxvYXQgZW1waGFzaXNNYXJrRnJhY3Rpb24gPSAuNTsKLS8vIFRoaXMgaXMgdGhl
IGxhcmdlc3QgVkRNWCB0YWJsZSB3aGljaCB3ZSdsbCB0cnkgdG8gbG9hZCBhbmQgcGFyc2UuCi1z
dGF0aWMgY29uc3Qgc2l6ZV90IG1heFZETVhUYWJsZVNpemUgPSAxMDI0ICogMTAyNDsgLy8gMSBN
QgotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGlmICghbV9w
bGF0Zm9ybURhdGEuc2l6ZSgpKSB7Ci0gICAgICAgIG1fZm9udE1ldHJpY3MucmVzZXQoKTsKLSAg
ICAgICAgbV9hdmdDaGFyV2lkdGggPSAwOwotICAgICAgICBtX21heENoYXJXaWR0aCA9IDA7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTa1BhaW50IHBhaW50OwotICAgIFNrUGFpbnQ6
OkZvbnRNZXRyaWNzIG1ldHJpY3M7Ci0KLSAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZw
YWludCk7Ci0gICAgcGFpbnQuZ2V0Rm9udE1ldHJpY3MoJm1ldHJpY3MpOwotICAgIGNvbnN0IFNr
Rm9udElEIGZvbnRJRCA9IG1fcGxhdGZvcm1EYXRhLnVuaXF1ZUlEKCk7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgdWludDMyX3QgdmRteFRhZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ1YnLCAnRCcsICdNJywg
J1gnKTsKLSAgICBpbnQgcGl4ZWxTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpICsgMC41Owot
ICAgIGludCB2ZG14QXNjZW50LCB2ZG14RGVzY2VudDsKLSAgICBib29sIGlzVkRNWFZhbGlkID0g
ZmFsc2U7Ci0KLSAgICBzaXplX3QgdmRteFNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUo
Zm9udElELCB2ZG14VGFnKTsKLSAgICBpZiAodmRteFNpemUgJiYgdmRteFNpemUgPCBtYXhWRE1Y
VGFibGVTaXplKSB7Ci0gICAgICAgIHVpbnQ4X3QqIHZkbXhUYWJsZSA9ICh1aW50OF90KikgZmFz
dE1hbGxvYyh2ZG14U2l6ZSk7Ci0gICAgICAgIGlmICh2ZG14VGFibGUKLSAgICAgICAgICAgICYm
IFNrRm9udEhvc3Q6OkdldFRhYmxlRGF0YShmb250SUQsIHZkbXhUYWcsIDAsIHZkbXhTaXplLCB2
ZG14VGFibGUpID09IHZkbXhTaXplCi0gICAgICAgICAgICAmJiBwYXJzZVZETVgoJnZkbXhBc2Nl
bnQsICZ2ZG14RGVzY2VudCwgdmRteFRhYmxlLCB2ZG14U2l6ZSwgcGl4ZWxTaXplKSkKLSAgICAg
ICAgICAgIGlzVkRNWFZhbGlkID0gdHJ1ZTsKLSAgICAgICAgZmFzdEZyZWUodmRteFRhYmxlKTsK
LSAgICB9Ci0KLSAgICBmbG9hdCBhc2NlbnQ7Ci0gICAgZmxvYXQgZGVzY2VudDsKLQotICAgIC8v
IEJld2FyZSB0aG9zZSB3aG8gc3RlcCBoZXJlOiBUaGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gbWF0
Y2ggV2luMzIgZm9udAotICAgIC8vIG1ldHJpY3MgKmV4YWN0bHkqLgotICAgIGlmIChpc1ZETVhW
YWxpZCkgewotICAgICAgICBhc2NlbnQgPSB2ZG14QXNjZW50OwotICAgICAgICBkZXNjZW50ID0g
LXZkbXhEZXNjZW50OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNrU2NhbGFyIGhlaWdodCA9IC1t
ZXRyaWNzLmZBc2NlbnQgKyBtZXRyaWNzLmZEZXNjZW50ICsgbWV0cmljcy5mTGVhZGluZzsKLSAg
ICAgICAgYXNjZW50ID0gU2tTY2FsYXJSb3VuZCgtbWV0cmljcy5mQXNjZW50KTsKLSAgICAgICAg
ZGVzY2VudCA9IFNrU2NhbGFyUm91bmQoaGVpZ2h0KSAtIGFzY2VudDsKLSAgICB9Ci0KLSAgICBt
X2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVz
Y2VudChkZXNjZW50KTsKLQotICAgIGZsb2F0IHhIZWlnaHQ7Ci0gICAgaWYgKG1ldHJpY3MuZlhI
ZWlnaHQpCi0gICAgICAgIHhIZWlnaHQgPSBtZXRyaWNzLmZYSGVpZ2h0OwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBoYWNrIHRha2VuIGZyb20gdGhlIFdpbmRvd3MgcG9ydAotICAgICAgICB4SGVp
Z2h0ID0gYXNjZW50ICogMC41NmY7Ci0gICAgfQotCi0gICAgZmxvYXQgbGluZUdhcCA9IFNrU2Nh
bGFyVG9GbG9hdChtZXRyaWNzLmZMZWFkaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVH
YXAobGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAg
IG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihk
ZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCkpOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkg
ewotICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdmhlYVRhZyA9IFNrU2V0Rm91ckJ5dGVU
YWcoJ3YnLCAnaCcsICdlJywgJ2EnKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHZv
cmdUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywgJ08nLCAnUicsICdHJyk7Ci0gICAgICAgIHNp
emVfdCB2aGVhU2l6ZSA9IFNrRm9udEhvc3Q6OkdldFRhYmxlU2l6ZShmb250SUQsIHZoZWFUYWcp
OwotICAgICAgICBzaXplX3Qgdm9yZ1NpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9u
dElELCB2b3JnVGFnKTsKLSAgICAgICAgaWYgKCh2aGVhU2l6ZSA+IDApIHx8ICh2b3JnU2l6ZSA+
IDApKQotICAgICAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IHRydWU7Ci0gICAgfQotCi0g
ICAgLy8gSW4gV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
Y3BwLCBtX3NwYWNlV2lkdGggaXMKLSAgICAvLyBjYWxjdWxhdGVkIGZvciB1cywgYnV0IHdlIG5l
ZWQgdG8gY2FsY3VsYXRlIG1fbWF4Q2hhcldpZHRoIGFuZAotICAgIC8vIG1fYXZnQ2hhcldpZHRo
IGluIG9yZGVyIGZvciB0ZXh0IGVudHJ5IHdpZGdldHMgdG8gYmUgc2l6ZWQgY29ycmVjdGx5Lgot
Ci0gICAgU2tTY2FsYXIgeFJhbmdlID0gbWV0cmljcy5mWE1heCAtIG1ldHJpY3MuZlhNaW47Ci0g
ICAgbV9tYXhDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKHhSYW5nZSAqIFNrU2NhbGFyUm91bmQo
bV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSk7Ci0KLSAgICBpZiAobWV0cmljcy5mQXZnQ2hhcldpZHRo
KQotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IFNrU2NhbGFyUm91bmQobWV0cmljcy5mQXZnQ2hh
cldpZHRoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSB4SGVpZ2h0Owot
Ci0gICAgICAgIEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2RlOjpn
ZXRSb290Q2hpbGQodGhpcywgMCktPnBhZ2UoKTsKLQotICAgICAgICBpZiAoZ2x5cGhQYWdlWmVy
bykgewotICAgICAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgeENoYXIgPSAneCc7Ci0gICAg
ICAgICAgICBjb25zdCBHbHlwaCB4R2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoeENoYXIpLmdseXBoOwotCi0gICAgICAgICAgICBpZiAoeEdseXBoKQotICAgICAg
ICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaCh4R2x5cGgpOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aElu
aXQoKQotewotICAgIC8vIGNoYXJ3aWR0aHMgYXJlIHNldCBpbiBwbGF0Zm9ybUluaXQuCi19Ci0K
LXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLVBhc3NPd25Q
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3Ip
IGNvbnN0Ci17Ci0gICAgY29uc3QgZmxvYXQgc2NhbGVkU2l6ZSA9IGxyb3VuZGYoZm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwgc2Nh
bGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOwotfQotCi1TaW1wbGVGb250RGF0YSog
U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAotewotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCi0g
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0
b21Gb250KCkpOwotICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRnJhY3Rpb24pOwotCi0gICAgcmV0dXJuIG1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7Ci19Ci0KLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVG
b250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKLSAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZv
bnQoKSk7Ci0gICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQotICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBlbXBoYXNpc01hcmtGcmFjdGlvbik7Ci0KLSAgICByZXR1cm4gbV9k
ZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKLX0KLQotYm9vbCBTaW1wbGVGb250
RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKSBjb25zdAotewotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1heEJ1ZmZlckNvdW50ID0gNjQ7Ci0gICAgdWludDE2X3QgZ2x5cGhzW21heEJ1ZmZlckNv
dW50XTsKLQotICAgIG1fcGxhdGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKLSAgICBwYWlu
dC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7Ci0KLSAgICB3
aGlsZSAobGVuZ3RoID4gMCkgewotICAgICAgICBpbnQgbiA9IFNrTWluMzIobGVuZ3RoLCBTS19B
UlJBWV9DT1VOVChnbHlwaHMpKTsKLQotICAgICAgICAvLyB0ZXh0VG9HbHlwaHMgdGFrZXMgYSBi
eXRlIGNvdW50IHNvIHdlIGRvdWJsZSB0aGUgY2hhcmFjdGVyIGNvdW50LgotICAgICAgICBpbnQg
Y291bnQgPSBwYWludC50ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbiAqIDIsIGdseXBocyk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYg
KCFnbHlwaHNbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBtaXNzaW5nIGds
eXBoCi0gICAgICAgIH0KLQotICAgICAgICBjaGFyYWN0ZXJzICs9IG47Ci0gICAgICAgIGxlbmd0
aCAtPSBuOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNpbXBsZUZvbnRE
YXRhOjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IHBsYXRm
b3JtRGF0YSgpLmlzRml4ZWRQaXRjaCgpOwotfQotCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0
UmVjdCgpOwotfQotICAgIAotZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTa0FTU0VSVChzaXplb2YoZ2x5cGgpID09IDIp
OyAvLyBjb21waWxlLXRpbWUgYXNzZXJ0Ci0KLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgbV9w
bGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOwotCi0gICAgcGFpbnQuc2V0VGV4dEVuY29k
aW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0gICAgU2tTY2FsYXIgd2lkdGgg
PSBwYWludC5tZWFzdXJlVGV4dCgmZ2x5cGgsIDIpOwotCi0gICAgLy8gVGhvdWdoIFdlYktpdCBz
dXBwb3J0cyBub24taW50ZWdyYWwgYWR2YW5jZXMsIFNraWEgb25seSBzdXBwb3J0cyB0aGVtCi0g
ICAgLy8gZm9yICJzdWJwaXhlbCIgKGRpc3RpbmN0IGZyb20gTENEIHN1YnBpeGVsIGFudGlhbGlh
c2luZykgdGV4dCwgd2hpY2gKLSAgICAvLyB3ZSBkb24ndCB1c2UuCi0gICAgcmV0dXJuIHJvdW5k
KFNrU2NhbGFyVG9GbG9hdCh3aWR0aCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZv
bnREYXRhU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Np
bXBsZUZvbnREYXRhU2tpYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzgyYjAyZmE5MzI3YjdiZjY3ODg3MDcw
ZTAxNGU5MzkxYmJlNzFlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcApAQCAtMCwwICsxLDIzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiU2tGb250SG9zdC5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIK
KyNpbmNsdWRlICJTa1RpbWUuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAi
U2tUeXBlcy5oIgorI2luY2x1ZGUgIlZETVhQYXJzZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBTbWFsbGNhcHMgdmVyc2lvbnMgb2YgZm9udHMgYXJlIDcwJSB0aGUgc2l6ZSBvZiB0
aGUgbm9ybWFsIGZvbnQuCitzdGF0aWMgY29uc3QgZmxvYXQgc21hbGxDYXBzRnJhY3Rpb24gPSAw
LjdmOworc3RhdGljIGNvbnN0IGZsb2F0IGVtcGhhc2lzTWFya0ZyYWN0aW9uID0gLjU7CisvLyBU
aGlzIGlzIHRoZSBsYXJnZXN0IFZETVggdGFibGUgd2hpY2ggd2UnbGwgdHJ5IHRvIGxvYWQgYW5k
IHBhcnNlLgorc3RhdGljIGNvbnN0IHNpemVfdCBtYXhWRE1YVGFibGVTaXplID0gMTAyNCAqIDEw
MjQ7IC8vIDEgTUIKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAg
ICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkgeworICAgICAgICBtX2ZvbnRNZXRyaWNzLnJl
c2V0KCk7CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICAgICAgbV9tYXhDaGFyV2lk
dGggPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2tQYWludCBwYWludDsKKyAg
ICBTa1BhaW50OjpGb250TWV0cmljcyBtZXRyaWNzOworCisgICAgbV9wbGF0Zm9ybURhdGEuc2V0
dXBQYWludCgmcGFpbnQpOworICAgIHBhaW50LmdldEZvbnRNZXRyaWNzKCZtZXRyaWNzKTsKKyAg
ICBjb25zdCBTa0ZvbnRJRCBmb250SUQgPSBtX3BsYXRmb3JtRGF0YS51bmlxdWVJRCgpOworCisg
ICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHZkbXhUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywg
J0QnLCAnTScsICdYJyk7CisgICAgaW50IHBpeGVsU2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUo
KSArIDAuNTsKKyAgICBpbnQgdmRteEFzY2VudCwgdmRteERlc2NlbnQ7CisgICAgYm9vbCBpc1ZE
TVhWYWxpZCA9IGZhbHNlOworCisgICAgc2l6ZV90IHZkbXhTaXplID0gU2tGb250SG9zdDo6R2V0
VGFibGVTaXplKGZvbnRJRCwgdmRteFRhZyk7CisgICAgaWYgKHZkbXhTaXplICYmIHZkbXhTaXpl
IDwgbWF4VkRNWFRhYmxlU2l6ZSkgeworICAgICAgICB1aW50OF90KiB2ZG14VGFibGUgPSAodWlu
dDhfdCopIGZhc3RNYWxsb2ModmRteFNpemUpOworICAgICAgICBpZiAodmRteFRhYmxlCisgICAg
ICAgICAgICAmJiBTa0ZvbnRIb3N0OjpHZXRUYWJsZURhdGEoZm9udElELCB2ZG14VGFnLCAwLCB2
ZG14U2l6ZSwgdmRteFRhYmxlKSA9PSB2ZG14U2l6ZQorICAgICAgICAgICAgJiYgcGFyc2VWRE1Y
KCZ2ZG14QXNjZW50LCAmdmRteERlc2NlbnQsIHZkbXhUYWJsZSwgdmRteFNpemUsIHBpeGVsU2l6
ZSkpCisgICAgICAgICAgICBpc1ZETVhWYWxpZCA9IHRydWU7CisgICAgICAgIGZhc3RGcmVlKHZk
bXhUYWJsZSk7CisgICAgfQorCisgICAgZmxvYXQgYXNjZW50OworICAgIGZsb2F0IGRlc2NlbnQ7
CisKKyAgICAvLyBCZXdhcmUgdGhvc2Ugd2hvIHN0ZXAgaGVyZTogVGhpcyBjb2RlIGlzIGRlc2ln
bmVkIHRvIG1hdGNoIFdpbjMyIGZvbnQKKyAgICAvLyBtZXRyaWNzICpleGFjdGx5Ki4KKyAgICBp
ZiAoaXNWRE1YVmFsaWQpIHsKKyAgICAgICAgYXNjZW50ID0gdmRteEFzY2VudDsKKyAgICAgICAg
ZGVzY2VudCA9IC12ZG14RGVzY2VudDsKKyAgICB9IGVsc2UgeworICAgICAgICBTa1NjYWxhciBo
ZWlnaHQgPSAtbWV0cmljcy5mQXNjZW50ICsgbWV0cmljcy5mRGVzY2VudCArIG1ldHJpY3MuZkxl
YWRpbmc7CisgICAgICAgIGFzY2VudCA9IFNrU2NhbGFyUm91bmQoLW1ldHJpY3MuZkFzY2VudCk7
CisgICAgICAgIGRlc2NlbnQgPSBTa1NjYWxhclJvdW5kKGhlaWdodCkgLSBhc2NlbnQ7CisgICAg
fQorCisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRy
aWNzLnNldERlc2NlbnQoZGVzY2VudCk7CisKKyAgICBmbG9hdCB4SGVpZ2h0OworICAgIGlmICht
ZXRyaWNzLmZYSGVpZ2h0KQorICAgICAgICB4SGVpZ2h0ID0gbWV0cmljcy5mWEhlaWdodDsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gaGFjayB0YWtlbiBmcm9tIHRoZSBXaW5kb3dzIHBvcnQKKyAg
ICAgICAgeEhlaWdodCA9IGFzY2VudCAqIDAuNTZmOworICAgIH0KKworICAgIGZsb2F0IGxpbmVH
YXAgPSBTa1NjYWxhclRvRmxvYXQobWV0cmljcy5mTGVhZGluZyk7CisgICAgbV9mb250TWV0cmlj
cy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVp
Z2h0KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoYXNjZW50KSAr
IGxyb3VuZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApKTsKKworICAgIGlmIChwbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZh
bGxiYWNrKCkpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHZoZWFUYWcgPSBTa1Nl
dEZvdXJCeXRlVGFnKCd2JywgJ2gnLCAnZScsICdhJyk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCB2b3JnVGFnID0gU2tTZXRGb3VyQnl0ZVRhZygnVicsICdPJywgJ1InLCAnRycpOwor
ICAgICAgICBzaXplX3QgdmhlYVNpemUgPSBTa0ZvbnRIb3N0OjpHZXRUYWJsZVNpemUoZm9udElE
LCB2aGVhVGFnKTsKKyAgICAgICAgc2l6ZV90IHZvcmdTaXplID0gU2tGb250SG9zdDo6R2V0VGFi
bGVTaXplKGZvbnRJRCwgdm9yZ1RhZyk7CisgICAgICAgIGlmICgodmhlYVNpemUgPiAwKSB8fCAo
dm9yZ1NpemUgPiAwKSkKKyAgICAgICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSB0cnVlOwor
ICAgIH0KKworICAgIC8vIEluIFdlYktpdC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUZvbnREYXRhLmNwcCwgbV9zcGFjZVdpZHRoIGlzCisgICAgLy8gY2FsY3VsYXRlZCBmb3IgdXMs
IGJ1dCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBtX21heENoYXJXaWR0aCBhbmQKKyAgICAvLyBtX2F2
Z0NoYXJXaWR0aCBpbiBvcmRlciBmb3IgdGV4dCBlbnRyeSB3aWRnZXRzIHRvIGJlIHNpemVkIGNv
cnJlY3RseS4KKworICAgIFNrU2NhbGFyIHhSYW5nZSA9IG1ldHJpY3MuZlhNYXggLSBtZXRyaWNz
LmZYTWluOworICAgIG1fbWF4Q2hhcldpZHRoID0gU2tTY2FsYXJSb3VuZCh4UmFuZ2UgKiBTa1Nj
YWxhclJvdW5kKG1fcGxhdGZvcm1EYXRhLnNpemUoKSkpOworCisgICAgaWYgKG1ldHJpY3MuZkF2
Z0NoYXJXaWR0aCkKKyAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKG1ldHJp
Y3MuZkF2Z0NoYXJXaWR0aCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0g
eEhlaWdodDsKKworICAgICAgICBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VU
cmVlTm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCk7CisKKyAgICAgICAgaWYgKGds
eXBoUGFnZVplcm8pIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIHhDaGFyID0g
J3gnOworICAgICAgICAgICAgY29uc3QgR2x5cGggeEdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKHhDaGFyKS5nbHlwaDsKKworICAgICAgICAgICAgaWYgKHhHbHlw
aCkKKyAgICAgICAgICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHdpZHRoRm9yR2x5cGgoeEdseXBo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1D
aGFyV2lkdGhJbml0KCkKK3sKKyAgICAvLyBjaGFyd2lkdGhzIGFyZSBzZXQgaW4gcGxhdGZvcm1J
bml0LgorfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQor
CitQYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVk
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdAoreworICAgIGNvbnN0IGZsb2F0IHNjYWxlZFNpemUgPSBscm91bmRm
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9y
bURhdGEsIHNjYWxlZFNpemUpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKK30KKworU2ltcGxl
Rm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhKQorICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3Jl
YXRlKGlzQ3VzdG9tRm9udCgpKTsKKyAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHMpCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRG
b250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKKworICAgIHJldHVy
biBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworfQorCitTaW1wbGVGb250RGF0
YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUo
aXNDdXN0b21Gb250KCkpOworICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFy
aykKKyAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxl
ZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRnJhY3Rpb24pOworCisgICAg
cmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7Cit9CisKK2Jvb2wg
U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICBTa1BhaW50IHBhaW50OworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBtYXhCdWZmZXJDb3VudCA9IDY0OworICAgIHVpbnQxNl90IGdseXBoc1tt
YXhCdWZmZXJDb3VudF07CisKKyAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7
CisgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2Rpbmcp
OworCisgICAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgaW50IG4gPSBTa01pbjMyKGxl
bmd0aCwgU0tfQVJSQVlfQ09VTlQoZ2x5cGhzKSk7CisKKyAgICAgICAgLy8gdGV4dFRvR2x5cGhz
IHRha2VzIGEgYnl0ZSBjb3VudCBzbyB3ZSBkb3VibGUgdGhlIGNoYXJhY3RlciBjb3VudC4KKyAg
ICAgICAgaW50IGNvdW50ID0gcGFpbnQudGV4dFRvR2x5cGhzKGNoYXJhY3RlcnMsIG4gKiAyLCBn
bHlwaHMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAg
ICAgICAgIGlmICghZ2x5cGhzW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
bWlzc2luZyBnbHlwaAorICAgICAgICB9CisKKyAgICAgICAgY2hhcmFjdGVycyArPSBuOworICAg
ICAgICBsZW5ndGggLT0gbjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBT
aW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIG1fdHJlYXRBc0ZpeGVkUGl0
Y2ggPSBwbGF0Zm9ybURhdGEoKS5pc0ZpeGVkUGl0Y2goKTsKK30KKworRmxvYXRSZWN0IFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKK30KKyAgICAKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsYXRmb3Jt
RGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU2tBU1NFUlQoc2l6ZW9mKGds
eXBoKSA9PSAyKTsgLy8gY29tcGlsZS10aW1lIGFzc2VydAorCisgICAgU2tQYWludCBwYWludDsK
KworICAgIG1fcGxhdGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKKworICAgIHBhaW50LnNl
dFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworICAgIFNrU2Nh
bGFyIHdpZHRoID0gcGFpbnQubWVhc3VyZVRleHQoJmdseXBoLCAyKTsKKworICAgIC8vIFRob3Vn
aCBXZWJLaXQgc3VwcG9ydHMgbm9uLWludGVncmFsIGFkdmFuY2VzLCBTa2lhIG9ubHkgc3VwcG9y
dHMgdGhlbQorICAgIC8vIGZvciAic3VicGl4ZWwiIChkaXN0aW5jdCBmcm9tIExDRCBzdWJwaXhl
bCBhbnRpYWxpYXNpbmcpIHRleHQsIHdoaWNoCisgICAgLy8gd2UgZG9uJ3QgdXNlLgorICAgIHJl
dHVybiByb3VuZChTa1NjYWxhclRvRmxvYXQod2lkdGgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>