<?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>116797</bug_id>
          
          <creation_ts>2013-05-26 15:48:37 -0700</creation_ts>
          <short_desc>Rename FontFallbackList to FontGlyphs</short_desc>
          <delta_ts>2013-05-27 02:01:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>d-r</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>mitz</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>893815</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 15:48:37 -0700</bug_when>
    <thetext>Maybe it was a fallback list once. Nowadays its purpose is to cache realized glyphs and related data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893818</commentid>
    <comment_count>1</comment_count>
      <attachid>202931</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 16:02:02 -0700</bug_when>
    <thetext>Created attachment 202931
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893821</commentid>
    <comment_count>2</comment_count>
      <attachid>202931</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-26 16:08:07 -0700</bug_when>
    <thetext>Comment on attachment 202931
patch

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

r=me, go go Antti go!

&gt; Source/WebCore/platform/graphics/FontFallbackList.cpp:2
&gt; - * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
&gt; + * Copyright (C) 2006, 2013 Apple Computer, Inc.  All rights reserved.

:D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893831</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 16:42:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/150727</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893870</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2013-05-26 18:38:25 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Maybe it was a fallback list once. Nowadays its purpose is to cache realized glyphs and related data.

I don’t think that’s a good characterization. This object caches realized FontData objects—which are used to key into the glyph cache—but I wouldn’t call them “glyphs and related data”. Even the accessors on this class return FontData instances!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893917</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-27 02:01:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #0)
&gt; &gt; Maybe it was a fallback list once. Nowadays its purpose is to cache realized glyphs and related data.
&gt; 
&gt; I don’t think that’s a good characterization. This object caches realized FontData objects—which are used to key into the glyph cache—but I wouldn’t call them “glyphs and related data”. Even the accessors on this class return FontData instances!

Suggestion welcome!

Note that the encapsulation and code moving in bug 116803 gave FontGlyphs a glyph API, significantly reducing need for direct FontData access. Also the vaguely named (Simple)FontData type is in fact largely about providing glyphs and information about glyphs.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202931</attachid>
            <date>2013-05-26 16:02:02 -0700</date>
            <delta_ts>2013-05-26 16:08:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rename-fontfallback-list.patch</filename>
            <type>text/plain</type>
            <size>22181</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEzLTA1LTI2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRm9udEZhbGxiYWNr
TGlzdCB0byBGb250R2x5cGhzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTY3OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNYXliZSBpdCB3YXMgYSBmYWxsYmFjayBsaXN0IG9uY2UuIE5vd2FkYXlzIGl0
cyBwdXJwb3NlIGlzIHRvIGNhY2hlIHJlYWxpemVkIGdseXBocyBhbmQgcmVsYXRlZCBkYXRhLgor
ICAgICAgICAKKyAgICAgICAgRmlsZSByZW5hbWluZyB3aWxsIGJlIGRvbmUgc2VwYXJhdGVseS4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIAorICAgICAgICAgICAgUmVmYWN0b3JlZCB0byBlYXJseSByZXR1cm4gc3R5
bGUuCisKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Ojp3aWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAg
ICAgICAoRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnbHlwaHMpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6bG9hZGluZ0N1c3RvbUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OnByaW1hcnlGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnREYXRhQXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6aXNGaXhlZFBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OmZvbnRTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmg6CisgICAgICAgIChGb250Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYWxsYmFja0xpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6Rm9u
dEdseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJlbGVhc2VGb250RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250R2x5cGhzOjpyZWFsaXplRm9udERhdGFBdCk6CisgICAgICAgIAorICAgICAgICAgICAgUmVu
YW1lZCBmb3IgY2xhcml0eSBhbG9uZyB3aXRoIG1fZm9udExpc3QgLT4gbV9yZWFsaXplZEZvbnRE
YXRhLgorCisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpzZXRQbGF0Zm9ybUZvbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaDoKKyAgICAgICAg
KEZvbnRHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6R2x5cGhQYWdlc1N0
YXRlU2F2ZXI6OkdseXBoUGFnZXNTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRH
bHlwaHM6OkdseXBoUGFnZXNTdGF0ZVNhdmVyOjp+R2x5cGhQYWdlc1N0YXRlU2F2ZXIpOgorICAg
ICAgICAoR2x5cGhQYWdlc1N0YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBo
czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6On5Gb250R2x5cGhzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnByaW1hcnlGb250RGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OmdseXBoRGF0YUFuZFBhZ2VGb3JDaGFyYWN0ZXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisKIDIw
MTMtMDUtMjYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
bW92ZSBFTkFCTEVfQ0FMRU5EQVJfUElDS0VSCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gMTUwNzI1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDYgKzc0LDcgQEAgX19aTjdXZWJDb3JlMTBDbGllbnRSZWN0QzFFdgogX19a
TjdXZWJDb3JlMTBDcmVkZW50aWFsQzFFUktOM1dURjZTdHJpbmdFUzRfTlNfMjFDcmVkZW50aWFs
UGVyc2lzdGVuY2VFCiBfX1pON1dlYkNvcmUxMENyZWRlbnRpYWxDMUV2CiBfX1pON1dlYkNvcmUx
MEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2ludEUKK19fWk43V2ViQ29yZTEwRm9udEdseXBoczE1
cmVsZWFzZUZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTEwSlNEb2N1bWVudDZzX2luZm9FCiBfX1pO
N1dlYkNvcmUxME1vdXNlRXZlbnQ2Y3JlYXRlRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VOUzFfMTBQ
YXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RWlOUzVf
SU5TXzROb2RlRUVFCiBfX1pON1dlYkNvcmUxME1vdXNlRXZlbnQ2Y3JlYXRlRVJLTjNXVEYxMkF0
b21pY1N0cmluZ0ViYk5TMV8xMFBhc3NSZWZQdHJJTlNfOURPTVdpbmRvd0VFRWlpaWlpYmJiYnRO
UzVfSU5TXzExRXZlbnRUYXJnZXRFRUVOUzVfSU5TXzlDbGlwYm9hcmRFRUViCkBAIC01MDksNyAr
NTEwLDYgQEAgX19aTjdXZWJDb3JlMTZEYXRhYmFzZVN0cmF0ZWd5MTdnZXREYXRhYgogX19aTjdX
ZWJDb3JlMTZEZXZpY2VNb3Rpb25EYXRhMTJBY2NlbGVyYXRpb242Y3JlYXRlRWJkYmRiZAogX19a
TjdXZWJDb3JlMTZEZXZpY2VNb3Rpb25EYXRhMTJSb3RhdGlvblJhdGU2Y3JlYXRlRWJkYmRiZAog
X19aTjdXZWJDb3JlMTZEZXZpY2VNb3Rpb25EYXRhNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklO
UzBfMTJBY2NlbGVyYXRpb25FRUVTNF9OUzJfSU5TMF8xMlJvdGF0aW9uUmF0ZUVFRWJkCi1fX1pO
N1dlYkNvcmUxNkZvbnRGYWxsYmFja0xpc3QxNXJlbGVhc2VGb250RGF0YUV2CiBfX1pON1dlYkNv
cmUxNkZvbnRQbGF0Zm9ybURhdGFEMUV2CiBfX1pON1dlYkNvcmUxNkZyYW1lTG9hZFJlcXVlc3RD
MUVQTlNfNUZyYW1lRVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU18xNFN1YnN0aXR1dGVEYXRh
RQogX19aTjdXZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MTNzZXRBdXRvZmlsbGVkRWIKQEAgLTEy
NzUsNiArMTI3NSw3IEBAIF9fWk5LN1dlYkNvcmUxMENyZWRlbnRpYWwxMXBlcnNpc3RlbmNlRXYK
IF9fWk5LN1dlYkNvcmUxMENyZWRlbnRpYWw0dXNlckV2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50
aWFsN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTEwQ3JlZGVudGlhbDhwYXNzd29yZEV2CitfX1pO
SzdXZWJDb3JlMTBGb250R2x5cGhzMTdyZWFsaXplRm9udERhdGFBdEVQS05TXzRGb250RWoKIF9f
Wk5LN1dlYkNvcmUxMFBsdWdpbkRhdGExNnN1cHBvcnRzTWltZVR5cGVFUktOM1dURjZTdHJpbmdF
TlMwXzE4QWxsb3dlZFBsdWdpblR5cGVzRQogX19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2bGlu
ZXNCb3VuZGluZ0JveEV2CiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0OWZpcnN0UnVuWEV2CkBA
IC0xNDUwLDcgKzE0NTEsNiBAQCBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb240NWxpbmVE
aXJlCiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb240bmV4dEVOU18yN0VkaXRpbmdCb3Vu
ZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjhwcmV2aW91
c0VOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmUxNkV2ZW50
TGlzdGVuZXJNYXA4Y29udGFpbnNFUktOM1dURjEyQXRvbWljU3RyaW5nRQotX19aTks3V2ViQ29y
ZTE2Rm9udEZhbGxiYWNrTGlzdDEwZm9udERhdGFBdEVQS05TXzRGb250RWoKIF9fWk5LN1dlYkNv
cmUxNkhUTUxJbnB1dEVsZW1lbnQxMWlzVGV4dEZpZWxkRXYKIF9fWk5LN1dlYkNvcmUxNkhUTUxJ
bnB1dEVsZW1lbnQxNHN1Z2dlc3RlZFZhbHVlRXYKIF9fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVs
ZW1lbnQxNWlzUGFzc3dvcmRGaWVsZEV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMTUwNzI1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAg
Rm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZkLCBzaAogfQogCiBGb250OjpGb250
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIDogbV9mb250RmFsbGJhY2tM
aXN0KEZvbnRGYWxsYmFja0xpc3Q6OmNyZWF0ZSgpKQorICAgIDogbV9nbHlwaHMoRm9udEdseXBo
czo6Y3JlYXRlKCkpCiAgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKICAgICAsIG1fd29yZFNwYWNp
bmcoMCkKICAgICAsIG1faXNQbGF0Zm9ybUZvbnQodHJ1ZSkKQEAgLTk4LDEyICs5OCwxMiBAQCBG
b250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRECiAgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVyRm9udCk7CiAgICAgbV9mb250RGVzY3Jp
cHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3RoaW5nTW9kZSk7CiAgICAgbV9uZWVkc1Ry
YW5zY29kaW5nID0gZm9udFRyYW5zY29kZXIoKS5uZWVkc1RyYW5zY29kaW5nKGZvbnREZXNjcmlw
dGlvbigpKTsKLSAgICBtX2ZvbnRGYWxsYmFja0xpc3QtPnNldFBsYXRmb3JtRm9udChmb250RGF0
YSk7CisgICAgbV9nbHlwaHMtPnNldFBsYXRmb3JtRm9udChmb250RGF0YSk7CiB9CiAKIEZvbnQ6
OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbikKLSAgICAsIG1fZm9udEZhbGxiYWNrTGlzdChvdGhlci5tX2ZvbnRG
YWxsYmFja0xpc3QpCisgICAgLCBtX2dseXBocyhvdGhlci5tX2dseXBocykKICAgICAsIG1fbGV0
dGVyU3BhY2luZyhvdGhlci5tX2xldHRlclNwYWNpbmcpCiAgICAgLCBtX3dvcmRTcGFjaW5nKG90
aGVyLm1fd29yZFNwYWNpbmcpCiAgICAgLCBtX2lzUGxhdGZvcm1Gb250KG90aGVyLm1faXNQbGF0
Zm9ybUZvbnQpCkBAIC0xMTUsNyArMTE1LDcgQEAgRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhl
cikKIEZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKIHsKICAgICBtX2Zv
bnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwotICAgIG1fZm9udEZhbGxi
YWNrTGlzdCA9IG90aGVyLm1fZm9udEZhbGxiYWNrTGlzdDsKKyAgICBtX2dseXBocyA9IG90aGVy
Lm1fZ2x5cGhzOwogICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsK
ICAgICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKICAgICBtX2lzUGxhdGZv
cm1Gb250ID0gb3RoZXIubV9pc1BsYXRmb3JtRm9udDsKQEAgLTEzMCwxNiArMTMwLDIxIEBAIGJv
b2wgRm9udDo6b3BlcmF0b3I9PShjb25zdCBGb250JiBvdGhlcikKICAgICAvLyBGSVhNRTogVGhp
cyBkb2VzIG5vdCB3b3JrIGlmIHRoZSBmb250IHdhcyBtYWRlIHdpdGggdGhlIEZvbnRQbGF0Zm9y
bURhdGEgY29uc3RydWN0b3IuCiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygpIHx8IG90aGVy
LmxvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
Rm9udFNlbGVjdG9yKiBmaXJzdCA9IG1fZm9udEZhbGxiYWNrTGlzdCA/IG1fZm9udEZhbGxiYWNr
TGlzdC0+Zm9udFNlbGVjdG9yKCkgOiAwOwotICAgIEZvbnRTZWxlY3Rvciogc2Vjb25kID0gb3Ro
ZXIubV9mb250RmFsbGJhY2tMaXN0ID8gb3RoZXIubV9mb250RmFsbGJhY2tMaXN0LT5mb250U2Vs
ZWN0b3IoKSA6IDA7CiAKLSAgICByZXR1cm4gZmlyc3QgPT0gc2Vjb25kCi0gICAgICAgICYmIG1f
Zm9udERlc2NyaXB0aW9uID09IG90aGVyLm1fZm9udERlc2NyaXB0aW9uCi0gICAgICAgICYmIG1f
bGV0dGVyU3BhY2luZyA9PSBvdGhlci5tX2xldHRlclNwYWNpbmcKLSAgICAgICAgJiYgbV93b3Jk
U3BhY2luZyA9PSBvdGhlci5tX3dvcmRTcGFjaW5nCi0gICAgICAgICYmIChtX2ZvbnRGYWxsYmFj
a0xpc3QgPyBtX2ZvbnRGYWxsYmFja0xpc3QtPmZvbnRTZWxlY3RvclZlcnNpb24oKSA6IDApID09
IChvdGhlci5tX2ZvbnRGYWxsYmFja0xpc3QgPyBvdGhlci5tX2ZvbnRGYWxsYmFja0xpc3QtPmZv
bnRTZWxlY3RvclZlcnNpb24oKSA6IDApCi0gICAgICAgICYmIChtX2ZvbnRGYWxsYmFja0xpc3Qg
PyBtX2ZvbnRGYWxsYmFja0xpc3QtPmdlbmVyYXRpb24oKSA6IDApID09IChvdGhlci5tX2ZvbnRG
YWxsYmFja0xpc3QgPyBvdGhlci5tX2ZvbnRGYWxsYmFja0xpc3QtPmdlbmVyYXRpb24oKSA6IDAp
OworICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbiAhPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbiB8
fCBtX2xldHRlclNwYWNpbmcgIT0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nIHx8IG1fd29yZFNwYWNp
bmcgIT0gb3RoZXIubV93b3JkU3BhY2luZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX2dseXBocyA9PSBvdGhlci5tX2dseXBocykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKCFtX2dseXBocyB8fCAhb3RoZXIubV9nbHlwaHMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV9nbHlwaHMtPmZvbnRTZWxlY3RvcigpICE9IG90aGVyLm1fZ2x5cGhzLT5mb250
U2VsZWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIENhbiB0aGVzZSBjYXNl
cyBhY3R1YWxseSBzb21laG93IG9jY3VyPyBBbGwgZm9udHMgc2hvdWxkIGdldCB3aXBlZCBvdXQg
YnkgZnVsbCBzdHlsZSByZWNhbGMuCisgICAgaWYgKG1fZ2x5cGhzLT5mb250U2VsZWN0b3JWZXJz
aW9uKCkgIT0gb3RoZXIubV9nbHlwaHMtPmZvbnRTZWxlY3RvclZlcnNpb24oKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX2dseXBocy0+Z2VuZXJhdGlvbigpICE9IG90aGVyLm1f
Z2x5cGhzLT5nZW5lcmF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+IGZv
bnRTZWxlY3RvcikgY29uc3QKQEAgLTE0OSw5ICsxNTQsOSBAQCB2b2lkIEZvbnQ6OnVwZGF0ZShQ
YXNzUmVmUHRyPEZvbnRTZWxlY3RvCiAgICAgLy8gc3R5bGUgYW55d2F5LiBPdGhlciBjb3BpZXMg
YXJlIHRyYW5zaWVudCwgZS5nLiwgdGhlIHN0YXRlIGluIHRoZSBHcmFwaGljc0NvbnRleHQsIGFu
ZAogICAgIC8vIHdvbid0IHN0aWNrIGFyb3VuZCBsb25nIGVub3VnaCB0byBnZXQgeW91IGluIHRy
b3VibGUpLiBTdGlsbCwgdGhpcyBpcyBwcmV0dHkgZGlzZ3VzdGluZywKICAgICAvLyBhbmQgY291
bGQgZXZlbnR1YWxseSBiZSByZWN0aWZpZWQgYnkgdXNpbmcgUmVmUHRycyBmb3IgRm9udHMgdGhl
bXNlbHZlcy4KLSAgICBpZiAoIW1fZm9udEZhbGxiYWNrTGlzdCkKLSAgICAgICAgbV9mb250RmFs
bGJhY2tMaXN0ID0gRm9udEZhbGxiYWNrTGlzdDo6Y3JlYXRlKCk7Ci0gICAgbV9mb250RmFsbGJh
Y2tMaXN0LT5pbnZhbGlkYXRlKGZvbnRTZWxlY3Rvcik7CisgICAgaWYgKCFtX2dseXBocykKKyAg
ICAgICAgbV9nbHlwaHMgPSBGb250R2x5cGhzOjpjcmVhdGUoKTsKKyAgICBtX2dseXBocy0+aW52
YWxpZGF0ZShmb250U2VsZWN0b3IpOwogICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IGNvbXB1
dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCk7CiB9CiAKQEAgLTIwOSw3ICsyMTQsNyBAQCBmbG9hdCBG
b250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhCiAKICAgICBib29sIGhhc0tlcm5pbmdP
ckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIChLZXJuaW5nIHwgTGlnYXR1cmVz
KTsKICAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nID0gd29yZFNwYWNpbmco
KSB8IGxldHRlclNwYWNpbmcoKTsKLSAgICBmbG9hdCogY2FjaGVFbnRyeSA9IG1fZm9udEZhbGxi
YWNrTGlzdC0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNXb3JkU3BhY2luZ09yTGV0
dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAgZmxvYXQqIGNhY2hlRW50cnkgPSBtX2ds
eXBocy0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpx
dWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNXb3JkU3BhY2luZ09yTGV0dGVy
U3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgaWYgKGNhY2hlRW50cnkgJiYgIXN0ZDo6aXNu
YW4oKmNhY2hlRW50cnkpKQogICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE1MDcyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDcgKzE0MCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNQbGF0Zm9ybUZvbnQoKSBj
b25zdCB7IHJldHVybiBtX2lzUGxhdGZvcm1Gb250OyB9CiAKLSAgICAvLyBNZXRyaWNzIHRoYXQg
d2UgcXVlcnkgdGhlIEZvbnRGYWxsYmFja0xpc3QgZm9yLgogICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlGb250KCktPmZvbnRNZXRyaWNz
KCk7IH0KICAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeUZvbnQo
KS0+c3BhY2VXaWR0aCgpICsgbV9sZXR0ZXJTcGFjaW5nOyB9CiAgICAgZmxvYXQgdGFiV2lkdGgo
Y29uc3QgU2ltcGxlRm9udERhdGEmLCB1bnNpZ25lZCB0YWJTaXplLCBmbG9hdCBwb3NpdGlvbikg
Y29uc3Q7CkBAIC0yNDcsMTIgKzI0NiwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBu
b3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgYm9v
bCBuZWVkc1RyYW5zY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1RyYW5zY29kaW5nOyB9
Ci0gICAgRm9udEZhbGxiYWNrTGlzdCogZm9udExpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRG
YWxsYmFja0xpc3QuZ2V0KCk7IH0KKyAgICBGb250R2x5cGhzKiBnbHlwaHMoKSBjb25zdCB7IHJl
dHVybiBtX2dseXBocy5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgbG9hZGluZ0N1c3Rv
bUZvbnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ZvbnRGYWxsYmFja0xpc3Qg
JiYgbV9mb250RmFsbGJhY2tMaXN0LT5sb2FkaW5nQ3VzdG9tRm9udHMoKTsKKyAgICAgICAgcmV0
dXJuIG1fZ2x5cGhzICYmIG1fZ2x5cGhzLT5sb2FkaW5nQ3VzdG9tRm9udHMoKTsKICAgICB9CiAK
ICAgICBUeXBlc2V0dGluZ0ZlYXR1cmVzIGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVzKCkgY29u
c3QKQEAgLTMwNCw3ICszMDMsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBUeXBlc2V0dGluZ0Zl
YXR1cmVzIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVyZXM7CiAKICAgICBGb250RGVzY3JpcHRp
b24gbV9mb250RGVzY3JpcHRpb247Ci0gICAgbXV0YWJsZSBSZWZQdHI8Rm9udEZhbGxiYWNrTGlz
dD4gbV9mb250RmFsbGJhY2tMaXN0OworICAgIG11dGFibGUgUmVmUHRyPEZvbnRHbHlwaHM+IG1f
Z2x5cGhzOwogICAgIHNob3J0IG1fbGV0dGVyU3BhY2luZzsKICAgICBzaG9ydCBtX3dvcmRTcGFj
aW5nOwogICAgIGJvb2wgbV9pc1BsYXRmb3JtRm9udDsKQEAgLTMxOCwyNSArMzE3LDI1IEBAIGlu
bGluZSBGb250Ojp+Rm9udCgpCiAKIGlubGluZSBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udDo6
cHJpbWFyeUZvbnQoKSBjb25zdAogewotICAgIEFTU0VSVChtX2ZvbnRGYWxsYmFja0xpc3QpOwot
ICAgIHJldHVybiBtX2ZvbnRGYWxsYmFja0xpc3QtPnByaW1hcnlTaW1wbGVGb250RGF0YSh0aGlz
KTsKKyAgICBBU1NFUlQobV9nbHlwaHMpOworICAgIHJldHVybiBtX2dseXBocy0+cHJpbWFyeVNp
bXBsZUZvbnREYXRhKHRoaXMpOwogfQogCiBpbmxpbmUgY29uc3QgRm9udERhdGEqIEZvbnQ6OmZv
bnREYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fZm9udEZhbGxi
YWNrTGlzdCk7Ci0gICAgcmV0dXJuIG1fZm9udEZhbGxiYWNrTGlzdC0+Zm9udERhdGFBdCh0aGlz
LCBpbmRleCk7CisgICAgQVNTRVJUKG1fZ2x5cGhzKTsKKyAgICByZXR1cm4gbV9nbHlwaHMtPnJl
YWxpemVGb250RGF0YUF0KHRoaXMsIGluZGV4KTsKIH0KIAogaW5saW5lIGJvb2wgRm9udDo6aXNG
aXhlZFBpdGNoKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9mb250RmFsbGJhY2tMaXN0KTsKLSAg
ICByZXR1cm4gbV9mb250RmFsbGJhY2tMaXN0LT5pc0ZpeGVkUGl0Y2godGhpcyk7CisgICAgQVNT
RVJUKG1fZ2x5cGhzKTsKKyAgICByZXR1cm4gbV9nbHlwaHMtPmlzRml4ZWRQaXRjaCh0aGlzKTsK
IH0KIAogaW5saW5lIEZvbnRTZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9mb250RmFsbGJhY2tMaXN0ID8gbV9mb250RmFsbGJhY2tMaXN0LT5mb250
U2VsZWN0b3IoKSA6IDA7CisgICAgcmV0dXJuIG1fZ2x5cGhzID8gbV9nbHlwaHMtPmZvbnRTZWxl
Y3RvcigpIDogMDsKIH0KIAogaW5saW5lIGZsb2F0IEZvbnQ6OnRhYldpZHRoKGNvbnN0IFNpbXBs
ZUZvbnREYXRhJiBmb250RGF0YSwgdW5zaWduZWQgdGFiU2l6ZSwgZmxvYXQgcG9zaXRpb24pIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aAkocmV2aXNpb24gMTUwNzI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CiAjZW5kaWYKICAgICBmcmll
bmQgY2xhc3MgU2ltcGxlRm9udERhdGE7IC8vIEZvciBnZXRDYWNoZWRGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhKikKLSAgICBmcmllbmQgY2xhc3MgRm9udEZhbGxiYWNrTGlzdDsKKyAg
ICBmcmllbmQgY2xhc3MgRm9udEdseXBoczsKIH07CiAKIC8vIEdldCB0aGUgZ2xvYmFsIGZvbnRD
YWNoZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFj
a0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYWxsYmFja0xpc3QuY3BwCShyZXZpc2lvbiAxNTA3MjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTMg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1Gb250RmFsbGJhY2tMaXN0OjpGb250RmFsbGJhY2tMaXN0KCkKK0ZvbnRHbHlwaHM6OkZv
bnRHbHlwaHMoKQogICAgIDogbV9wYWdlWmVybygwKQogICAgICwgbV9jYWNoZWRQcmltYXJ5U2lt
cGxlRm9udERhdGEoMCkKICAgICAsIG1fZm9udFNlbGVjdG9yKDApCkBAIC00NywxMCArNDcsMTAg
QEAgRm9udEZhbGxiYWNrTGlzdDo6Rm9udEZhbGxiYWNrTGlzdCgpCiB7CiB9CiAKLXZvaWQgRm9u
dEZhbGxiYWNrTGlzdDo6aW52YWxpZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNl
bGVjdG9yKQordm9pZCBGb250R2x5cGhzOjppbnZhbGlkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVj
dG9yPiBmb250U2VsZWN0b3IpCiB7CiAgICAgcmVsZWFzZUZvbnREYXRhKCk7Ci0gICAgbV9mb250
TGlzdC5jbGVhcigpOworICAgIG1fcmVhbGl6ZWRGb250RGF0YS5jbGVhcigpOwogICAgIG1fcGFn
ZVplcm8gPSAwOwogICAgIG1fcGFnZXMuY2xlYXIoKTsKICAgICBtX2NhY2hlZFByaW1hcnlTaW1w
bGVGb250RGF0YSA9IDA7CkBAIC02MywxOCArNjMsMTggQEAgdm9pZCBGb250RmFsbGJhY2tMaXN0
OjppbnZhbGlkYXRlKFBhc3NSZQogICAgIG1fd2lkdGhDYWNoZS5jbGVhcigpOwogfQogCi12b2lk
IEZvbnRGYWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0YSgpCit2b2lkIEZvbnRHbHlwaHM6OnJl
bGVhc2VGb250RGF0YSgpCiB7Ci0gICAgdW5zaWduZWQgbnVtRm9udHMgPSBtX2ZvbnRMaXN0LnNp
emUoKTsKKyAgICB1bnNpZ25lZCBudW1Gb250cyA9IG1fcmVhbGl6ZWRGb250RGF0YS5zaXplKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZvbnRzOyArK2kpIHsKLSAgICAgICAg
aWYgKCFtX2ZvbnRMaXN0W2ldLT5pc0N1c3RvbUZvbnQoKSkgewotICAgICAgICAgICAgQVNTRVJU
KCFtX2ZvbnRMaXN0W2ldLT5pc1NlZ21lbnRlZCgpKTsKLSAgICAgICAgICAgIGZvbnRDYWNoZSgp
LT5yZWxlYXNlRm9udERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2Zv
bnRMaXN0W2ldLmdldCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1fcmVhbGl6ZWRGb250
RGF0YVtpXS0+aXNDdXN0b21Gb250KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
QVNTRVJUKCFtX3JlYWxpemVkRm9udERhdGFbaV0tPmlzU2VnbWVudGVkKCkpOworICAgICAgICBm
b250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4obV9yZWFsaXplZEZvbnREYXRhW2ldLmdldCgpKSk7CiAgICAgfQogfQogCi12b2lkIEZv
bnRGYWxsYmFja0xpc3Q6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0Cit2
b2lkIEZvbnRHbHlwaHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0CiB7
CiAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRhKGZvbnQpOwog
ICAgIGlmICghZm9udERhdGEtPmlzU2VnbWVudGVkKCkpCkBAIC04OSwxMyArODksMTMgQEAgdm9p
ZCBGb250RmFsbGJhY2tMaXN0OjpkZXRlcm1pbmVQaXRjaChjbwogICAgIH0KIH0KIAotY29uc3Qg
Rm9udERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6OmZvbnREYXRhQXQoY29uc3QgRm9udCogZm9udCwg
dW5zaWduZWQgcmVhbGl6ZWRGb250SW5kZXgpIGNvbnN0Citjb25zdCBGb250RGF0YSogRm9udEds
eXBoczo6cmVhbGl6ZUZvbnREYXRhQXQoY29uc3QgRm9udCogZm9udCwgdW5zaWduZWQgcmVhbGl6
ZWRGb250SW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlYWxpemVkRm9udEluZGV4IDwgbV9mb250
TGlzdC5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX2ZvbnRMaXN0W3JlYWxpemVkRm9udEluZGV4
XS5nZXQoKTsgLy8gVGhpcyBmYWxsYmFjayBmb250IGlzIGFscmVhZHkgaW4gb3VyIGxpc3QuCisg
ICAgaWYgKHJlYWxpemVkRm9udEluZGV4IDwgbV9yZWFsaXplZEZvbnREYXRhLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGb250RGF0YVtyZWFsaXplZEZvbnRJbmRleF0uZ2V0KCk7
IC8vIFRoaXMgZmFsbGJhY2sgZm9udCBpcyBhbHJlYWR5IGluIG91ciBsaXN0LgogCiAgICAgLy8g
TWFrZSBzdXJlIHdlJ3JlIG5vdCBwYXNzaW5nIGluIHNvbWUgY3JhenkgdmFsdWUgaGVyZS4KLSAg
ICBBU1NFUlQocmVhbGl6ZWRGb250SW5kZXggPT0gbV9mb250TGlzdC5zaXplKCkpOworICAgIEFT
U0VSVChyZWFsaXplZEZvbnRJbmRleCA9PSBtX3JlYWxpemVkRm9udERhdGEuc2l6ZSgpKTsKIAog
ICAgIGlmIChtX2ZhbWlseUluZGV4ID09IGNBbGxGYW1pbGllc1NjYW5uZWQpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTA3LDE5ICsxMDcsMTkgQEAgY29uc3QgRm9udERhdGEqIEZvbnRGYWxsYmFj
a0xpc3Q6OmZvbnREYQogICAgIEFTU0VSVChmb250Q2FjaGUoKS0+Z2VuZXJhdGlvbigpID09IG1f
Z2VuZXJhdGlvbik7CiAgICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQgPSBmb250Q2FjaGUoKS0+
Z2V0Rm9udERhdGEoKmZvbnQsIG1fZmFtaWx5SW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsK
ICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIG1fZm9udExpc3QuYXBwZW5kKHJlc3VsdCk7Cisg
ICAgICAgIG1fcmVhbGl6ZWRGb250RGF0YS5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgaWYgKHJl
c3VsdC0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICBtX2xvYWRpbmdDdXN0b21Gb250cyA9IHRy
dWU7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKLXZvaWQgRm9udEZhbGxi
YWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKK3ZvaWQgRm9udEdseXBoczo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKICAgICBtX2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVz
U2Nhbm5lZDsKICAgICBBU1NFUlQoZm9udENhY2hlKCktPmdlbmVyYXRpb24oKSA9PSBtX2dlbmVy
YXRpb24pOwogICAgIFJlZlB0cjxGb250RGF0YT4gZm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0
Q2FjaGVkRm9udERhdGEoJnBsYXRmb3JtRGF0YSk7Ci0gICAgbV9mb250TGlzdC5hcHBlbmQoZm9u
dERhdGEpOworICAgIG1fcmVhbGl6ZWRGb250RGF0YS5hcHBlbmQoZm9udERhdGEpOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZh
bGxiYWNrTGlzdC5oCShyZXZpc2lvbiAxNTA3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM5LDM1ICszOSwz
NSBAQCBjbGFzcyBGb250U2VsZWN0b3I7CiAKIGNvbnN0IGludCBjQWxsRmFtaWxpZXNTY2FubmVk
ID0gLTE7CiAKLWNsYXNzIEZvbnRGYWxsYmFja0xpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250
RmFsbGJhY2tMaXN0PiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udEZhbGxiYWNrTGlz
dCk7CitjbGFzcyBGb250R2x5cGhzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udEdseXBocz4gewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRHbHlwaHMpOwogcHVibGljOgogICAgIHR5cGVk
ZWYgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFz
aD4gR2x5cGhQYWdlczsKIAogICAgIGNsYXNzIEdseXBoUGFnZXNTdGF0ZVNhdmVyIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIEdseXBoUGFnZXNTdGF0ZVNhdmVyKEZvbnRGYWxsYmFja0xpc3QmIGZh
bGxiYWNrTGlzdCkKLSAgICAgICAgICAgIDogbV9mYWxsYmFja0xpc3QoZmFsbGJhY2tMaXN0KQot
ICAgICAgICAgICAgLCBtX3BhZ2VzKGZhbGxiYWNrTGlzdC5tX3BhZ2VzKQotICAgICAgICAgICAg
LCBtX3BhZ2VaZXJvKGZhbGxiYWNrTGlzdC5tX3BhZ2VaZXJvKQorICAgICAgICBHbHlwaFBhZ2Vz
U3RhdGVTYXZlcihGb250R2x5cGhzJiBnbHlwaHMpCisgICAgICAgICAgICA6IG1fZ2x5cGhzKGds
eXBocykKKyAgICAgICAgICAgICwgbV9wYWdlcyhnbHlwaHMubV9wYWdlcykKKyAgICAgICAgICAg
ICwgbV9wYWdlWmVybyhnbHlwaHMubV9wYWdlWmVybykKICAgICAgICAgewogICAgICAgICB9CiAK
ICAgICAgICAgfkdseXBoUGFnZXNTdGF0ZVNhdmVyKCkKICAgICAgICAgewotICAgICAgICAgICAg
bV9mYWxsYmFja0xpc3QubV9wYWdlcyA9IG1fcGFnZXM7Ci0gICAgICAgICAgICBtX2ZhbGxiYWNr
TGlzdC5tX3BhZ2VaZXJvID0gbV9wYWdlWmVybzsKKyAgICAgICAgICAgIG1fZ2x5cGhzLm1fcGFn
ZXMgPSBtX3BhZ2VzOworICAgICAgICAgICAgbV9nbHlwaHMubV9wYWdlWmVybyA9IG1fcGFnZVpl
cm87CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZvbnRGYWxsYmFja0xpc3Qm
IG1fZmFsbGJhY2tMaXN0OworICAgICAgICBGb250R2x5cGhzJiBtX2dseXBoczsKICAgICAgICAg
R2x5cGhQYWdlcyYgbV9wYWdlczsKICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG1fcGFnZVpl
cm87CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvbnRGYWxsYmFja0xpc3Q+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBGb250RmFsbGJhY2tMaXN0KCkpOyB9CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Rm9udEdseXBocz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IEZvbnRHbHlwaHMoKSk7IH0KIAotICAgIH5Gb250RmFsbGJhY2tMaXN0KCkgeyByZWxlYXNl
Rm9udERhdGEoKTsgfQorICAgIH5Gb250R2x5cGhzKCkgeyByZWxlYXNlRm9udERhdGEoKTsgfQog
ICAgIHZvaWQgaW52YWxpZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pOwogICAgIAogICAg
IGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnQqIGYpIGNvbnN0IHsgaWYgKG1fcGl0Y2ggPT0g
VW5rbm93blBpdGNoKSBkZXRlcm1pbmVQaXRjaChmKTsgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQ
aXRjaDsgfTsKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIFdpZHRoQ2FjaGUmIHdpZHRo
Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KIAogcHJpdmF0ZToKLSAgICBG
b250RmFsbGJhY2tMaXN0KCk7CisgICAgRm9udEdseXBocygpOwogCiAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250KiBmKQogICAgIHsgCkBA
IC05MywxNCArOTMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fY2FjaGVkUHJpbWFy
eVNpbXBsZUZvbnREYXRhOwogICAgIH0KIAotICAgIGNvbnN0IEZvbnREYXRhKiBwcmltYXJ5Rm9u
dERhdGEoY29uc3QgRm9udCogZikgY29uc3QgeyByZXR1cm4gZm9udERhdGFBdChmLCAwKTsgfQot
ICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YUF0KGNvbnN0IEZvbnQqLCB1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CisgICAgY29uc3QgRm9udERhdGEqIHByaW1hcnlGb250RGF0YShjb25zdCBGb250
KiBmKSBjb25zdCB7IHJldHVybiByZWFsaXplRm9udERhdGFBdChmLCAwKTsgfQorICAgIGNvbnN0
IEZvbnREYXRhKiByZWFsaXplRm9udERhdGFBdChjb25zdCBGb250KiwgdW5zaWduZWQgaW5kZXgp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpOwogCiAgICAgdm9pZCByZWxlYXNlRm9udERhdGEoKTsKICAgICAKLSAgICBtdXRhYmxlIFZl
Y3RvcjxSZWZQdHI8Rm9udERhdGE+LCAxPiBtX2ZvbnRMaXN0OworICAgIG11dGFibGUgVmVjdG9y
PFJlZlB0cjxGb250RGF0YT4sIDE+IG1fcmVhbGl6ZWRGb250RGF0YTsKICAgICBtdXRhYmxlIEds
eXBoUGFnZXMgbV9wYWdlczsKICAgICBtdXRhYmxlIEdseXBoUGFnZVRyZWVOb2RlKiBtX3BhZ2Va
ZXJvOwogICAgIG11dGFibGUgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY2FjaGVkUHJpbWFyeVNp
bXBsZUZvbnREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxNTA3MjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODEsMTMgKzE4MSwxMyBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250Ojpn
CiAKICAgICB1bnNpZ25lZCBwYWdlTnVtYmVyID0gKGMgLyBHbHlwaFBhZ2U6OnNpemUpOwogCi0g
ICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBwYWdlTnVtYmVyID8gbV9mb250RmFsbGJhY2tM
aXN0LT5tX3BhZ2VzLmdldChwYWdlTnVtYmVyKSA6IG1fZm9udEZhbGxiYWNrTGlzdC0+bV9wYWdl
WmVybzsKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IHBhZ2VOdW1iZXIgPyBtX2dseXBo
cy0+bV9wYWdlcy5nZXQocGFnZU51bWJlcikgOiBtX2dseXBocy0+bV9wYWdlWmVybzsKICAgICBp
ZiAoIW5vZGUpIHsKICAgICAgICAgbm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hp
bGQoZm9udERhdGFBdCgwKSwgcGFnZU51bWJlcik7CiAgICAgICAgIGlmIChwYWdlTnVtYmVyKQot
ICAgICAgICAgICAgbV9mb250RmFsbGJhY2tMaXN0LT5tX3BhZ2VzLnNldChwYWdlTnVtYmVyLCBu
b2RlKTsKKyAgICAgICAgICAgIG1fZ2x5cGhzLT5tX3BhZ2VzLnNldChwYWdlTnVtYmVyLCBub2Rl
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9mb250RmFsbGJhY2tMaXN0LT5tX3BhZ2Va
ZXJvID0gbm9kZTsKKyAgICAgICAgICAgIG1fZ2x5cGhzLT5tX3BhZ2VaZXJvID0gbm9kZTsKICAg
ICB9CiAKICAgICBHbHlwaFBhZ2UqIHBhZ2UgPSAwOwpAQCAtMjE4LDEyICsyMTgsMTEgQEAgc3Rk
OjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udDo6ZwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gUHJvY2VlZCB3aXRoIHRo
ZSBmYWxsYmFjayBsaXN0LgogICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmdldENoaWxkKGZvbnRE
YXRhQXQobm9kZS0+bGV2ZWwoKSksIHBhZ2VOdW1iZXIpOwogICAgICAgICAgICAgaWYgKHBhZ2VO
dW1iZXIpCi0gICAgICAgICAgICAgICAgbV9mb250RmFsbGJhY2tMaXN0LT5tX3BhZ2VzLnNldChw
YWdlTnVtYmVyLCBub2RlKTsKKyAgICAgICAgICAgICAgICBtX2dseXBocy0+bV9wYWdlcy5zZXQo
cGFnZU51bWJlciwgbm9kZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9m
b250RmFsbGJhY2tMaXN0LT5tX3BhZ2VaZXJvID0gbm9kZTsKKyAgICAgICAgICAgICAgICBtX2ds
eXBocy0+bV9wYWdlWmVybyA9IG5vZGU7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHZhcmlh
bnQgIT0gTm9ybWFsVmFyaWFudCkgewpAQCAtMjU1LDEyICsyNTQsMTEgQEAgc3RkOjpwYWlyPEds
eXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udDo6ZwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gUHJvY2VlZCB3aXRoIHRoZSBmYWxsYmFj
ayBsaXN0LgogICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmdldENoaWxkKGZvbnREYXRhQXQobm9k
ZS0+bGV2ZWwoKSksIHBhZ2VOdW1iZXIpOwogICAgICAgICAgICAgaWYgKHBhZ2VOdW1iZXIpCi0g
ICAgICAgICAgICAgICAgbV9mb250RmFsbGJhY2tMaXN0LT5tX3BhZ2VzLnNldChwYWdlTnVtYmVy
LCBub2RlKTsKKyAgICAgICAgICAgICAgICBtX2dseXBocy0+bV9wYWdlcy5zZXQocGFnZU51bWJl
ciwgbm9kZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9mb250RmFsbGJh
Y2tMaXN0LT5tX3BhZ2VaZXJvID0gbm9kZTsKKyAgICAgICAgICAgICAgICBtX2dseXBocy0+bV9w
YWdlWmVybyA9IG5vZGU7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQuY3BwCShyZXZpc2lvbiAxNTA3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkg
KzE4Niw5IEBAIEdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2wKIAogICAg
IC8vIFNhdmUgZGF0YSBmcm9tdCBoZSBmb250IGZhbGxiYWNrIGxpc3QgYmVjYXVzZSB3ZSBtYXkg
bW9kaWZ5IGl0IGxhdGVyLiBEbyB0aGlzIGJlZm9yZSB0aGUKICAgICAvLyBwb3RlbnRpYWwgY2hh
bmdlIHRvIGdseXBoRGF0YS5mb250RGF0YSBiZWxvdy4KLSAgICBGb250RmFsbGJhY2tMaXN0KiBm
b250TGlzdCA9IGZvbnQuZm9udExpc3QoKTsKLSAgICBBU1NFUlQoZm9udExpc3QpOwotICAgIEZv
bnRGYWxsYmFja0xpc3Q6OkdseXBoUGFnZXNTdGF0ZVNhdmVyIGdseXBoUGFnZXNTYXZlcigqZm9u
dExpc3QpOworICAgIEZvbnRHbHlwaHMqIGdseXBoID0gZm9udC5nbHlwaHMoKTsKKyAgICBBU1NF
UlQoZ2x5cGgpOworICAgIEZvbnRHbHlwaHM6OkdseXBoUGFnZXNTdGF0ZVNhdmVyIGdseXBoUGFn
ZXNTYXZlcigqZ2x5cGgpOwogCiAgICAgLy8gQ2hhcmFjdGVycyBlbmNsb3NlZCBieSBhbiA8YWx0
R2x5cGg+IGVsZW1lbnQsIG1heSBub3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgR2x5cGhQYWdlLgog
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhID0gZ2x5cGhEYXRhLmZv
bnREYXRhOwo=
</data>
<flag name="review"
          id="224358"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>