<?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>41148</bug_id>
          
          <creation_ts>2010-06-24 04:27:22 -0700</creation_ts>
          <short_desc>[Chromium] Add support for OOP Font loading</short_desc>
          <delta_ts>2010-08-31 02:37:23 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41398</blocked>
    
    <blocked>44937</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Moskovich">playmobil</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>avi</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>mark</cc>
    
    <cc>mitz</cc>
    
    <cc>paulirish</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242431</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Moskovich">playmobil</who>
    <bug_when>2010-06-24 04:27:22 -0700</bug_when>
    <thetext>http://crbug.com/29729

On OS X, with font management software installed. Fonts can reside in an arbitrary path on disk which is blocked by Chromium&apos;s Sandbox.

We need hooks in the Mac version of FontPlatformData that allow us to fall back to loading a font x-process if blocked by the Sandbox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242441</commentid>
    <comment_count>1</comment_count>
      <attachid>59637</attachid>
    <who name="Jeremy Moskovich">playmobil</who>
    <bug_when>2010-06-24 04:36:24 -0700</bug_when>
    <thetext>Created attachment 59637
Fork FontPlatformFontDataMac.mm to enable x-process font loading

Fork platform/graphics/mac/FontPlatformFontDataMac.mm to platform/graphics/chromium/FontPlatformDataChromiumMac.mm and add functionality for x-process font loading.

* We need to use the header from platform/graphics/mac since the class is used by a bunch of code in there.
* I&apos;d prefer not to fork the code, suggestions would be much appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243527</commentid>
    <comment_count>2</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2010-06-27 17:59:40 -0700</bug_when>
    <thetext>In the ChangeLog, you can edit out spurious function entries like &quot;(WebCore::):&quot;. Otherwise, SLGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243725</commentid>
    <comment_count>3</comment_count>
      <attachid>59637</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-28 09:12:27 -0700</bug_when>
    <thetext>Comment on attachment 59637
Fork FontPlatformFontDataMac.mm to enable x-process font loading

Please update the change log and then it&apos;ll be ready to land. Also, we need a plan to unfork this. File a bug and block it on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243853</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-28 13:17:53 -0700</bug_when>
    <thetext>I don&apos;t like the word &quot;fork&quot;... chromium is too old of a project with too many webkit reviewers to have any excuse to &quot;fork&quot; files in WebKit anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243862</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-28 13:27:18 -0700</bug_when>
    <thetext>(That said, that&apos;s just a drive-by comment, and I&apos;d be the first to admit I don&apos;t actually know what&apos;s going on here.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243863</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-28 13:29:04 -0700</bug_when>
    <thetext>As an example of &quot;forks&quot; eating away at the WebKit project.  Both V8 and QtXML nonsense have cost me at least a day of work in the last 2 weeks.  0 value to me.  Huge time sinks when trying to refactor other parts of the code.  Chromium certainly shouldn&apos;t be adding to forks these days now that we&apos;re big enough to just develop things right in webkit.org and refactor as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243870</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Moskovich">playmobil</who>
    <bug_when>2010-06-28 13:36:17 -0700</bug_when>
    <thetext>Eric: I think we all whole-heartedly agree with you.

The thinking here was to land this, then immediately submit a cl to merge this with the other Mac code. (If you look, this CL is already structured to make this easy).

The reasoning for having a Chromium codepath in this code isn&apos;t obvious, and having this code in the tree will mean that on one hand we can merge with a small patch and on the other it will be easier for reviewers of that patch to understand the context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243873</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-28 13:38:42 -0700</bug_when>
    <thetext>It would be possible to add sandbox support for DRT.  It would probably require a fork (ha ha) of DRT though, since I doubt that the general AppKit APIs it uses are sandbox safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244741</commentid>
    <comment_count>9</comment_count>
      <attachid>60113</attachid>
    <who name="Jeremy Moskovich">playmobil</who>
    <bug_when>2010-06-30 05:41:49 -0700</bug_when>
    <thetext>Created attachment 60113
Fork FontPlatformFontDataMac.mm to enable x-process font loading</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244790</commentid>
    <comment_count>10</comment_count>
      <attachid>60113</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-30 08:38:50 -0700</bug_when>
    <thetext>Comment on attachment 60113
Fork FontPlatformFontDataMac.mm to enable x-process font loading

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244794</commentid>
    <comment_count>11</comment_count>
      <attachid>60113</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-30 08:53:10 -0700</bug_when>
    <thetext>Comment on attachment 60113
Fork FontPlatformFontDataMac.mm to enable x-process font loading

Clearing flags on attachment: 60113

Committed r62187: &lt;http://trac.webkit.org/changeset/62187&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244795</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-30 08:53:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59637</attachid>
            <date>2010-06-24 04:36:24 -0700</date>
            <delta_ts>2010-06-30 05:41:49 -0700</delta_ts>
            <desc>Fork FontPlatformFontDataMac.mm to enable x-process font loading</desc>
            <filename>oop.patch</filename>
            <type>text/plain</type>
            <size>19592</size>
            <attacher name="Jeremy Moskovich">playmobil</attacher>
            
              <data encoding="base64">Y29tbWl0IDUwZGM4MTY0MzlmZjkxMzY1N2ZhOTI1OTdiODdkMTI0ZWNjYjI5ZWEKQXV0aG9yOiBK
ZXJlbXkgTW9za292aWNoIDxqZXJlbXlAY2hyb21pdW0ub3JnPgpEYXRlOiAgIFN1biBKdW4gMjAg
MDc6NDQ6NTMgMjAxMCArMDMwMAoKICAgIE1hYzogV2ViS2l0LXNpZGUgb2YgT09QIEZvbnQgbG9h
ZGluZwogICAgCiAgICBGb3JrIEZvbnRQbGF0Zm9ybURhdGFNYWMgYW5kIGFkZCBjYWxscyB0byBs
b2FkIGZvbnRzIGNyb3NzLXByb2Nlc3MgYW5kIGNhY2hlIHRoZSByZXN1bHQuCgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMTRlMTA0Li5h
ZTU0N2JkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEwLTA2LTI0ICBKZXJlbXkgTW9za292aWNoICA8amVy
ZW15QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbQ2hyb21pdW1dIEFkZCBPT1AgZm9udCBsb2FkaW5nIHRvIEZvbnRQbGF0Zm9y
bURhdGFDaHJvbWl1bU1hYy4KKworICAgICAgICBPbiBPUyBYLCB3aXRoIGZvbnQgbWFuYWdlbWVu
dCBzb2Z0d2FyZSBpbnN0YWxsZWQuIEZvbnRzCisgICAgICAgIGNhbiByZXNpZGUgaW4gYW4gYXJi
aXRyYXJ5IHBhdGggb24gZGlzayB3aGljaCBpcyBibG9ja2VkIGJ5CisgICAgICAgIENocm9taXVt
J3Mgc2FuZGJveC4KKworICAgICAgICBUaGlzIGNoYW5nZSBhZGRzIGhvb2tzIHRvIEZvbnRQbGFm
b3JtRGF0YSB3aGljaCBhbGxvdyBjcm9zcy1wcm9jZXNzCisgICAgICAgIGZvbnQgbG9hZGluZyBp
biBjYXNlIG9mIG5lZWQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQxMTQ4CisKKyAgICAgICAgTm90IHBvc3NpYmxlIHRvIHRlc3QgLSByZXF1aXJl
cyBzYW5kYm94aW5nIHdoaWNoIERSVCBkb2Vzbid0IHN1cHBvcnQuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRm
b3JtRGF0YUNocm9taXVtTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OnJvdW5kc0dseXBoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6YWxsb3dzTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKToKKwogMjAxMC0wNi0wMyAgRGltaXRyaSBHbGF6a292
ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCA5MTVkYWFlLi4zZTdjMjg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjExMSw2ICsyMTExLDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51
eC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0
Zm9ybURhdGEuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFBsYXRmb3JtRGF0YUNocm9taXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1X
aW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRm
b3JtRGF0YUxpbnV4LmNwcCcsCkBAIC0yMTk1LDcgKzIxOTYsNiBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udFBsYXRmb3JtRGF0YS5oJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udFBsYXRmb3JtRGF0YU1hYy5tbScsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbScsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oJywKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0
YUNocm9taXVtTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
UGxhdGZvcm1EYXRhQ2hyb21pdW1NYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDFmNjg0ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtTWFjLm1tCkBAIC0wLDAgKzEsNDQ3
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVt
ZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworLy8gVGhpcyBmaWxlIGlzIGEg
Y2xvbmUgb2YgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRQbGF0Zm9ybURhdGFNYWMubW0uCisv
LyBCZWNhdXNlIHdlIHdhbnQgdG8gc3VwcG9ydCBsb2FkaW5nIGZvbnRzIGJldHdlZW4gcHJvY2Vz
c2VzIGluIHRoZSBmYWNlIG9mCisvLyBmb250IGxvYWRpbmcgYmVpbmcgYmxvY2tlZCBieSB0aGUg
c2FuZGJveCwgd2UgbXVzdCBtYWludGFpbiBhIGZvcmsuCisvLyBQbGVhc2UgbWFpbnRhaW4gdGhp
cyBmaWxlIGJ5IHBlcmZvcm1pbmcgcGFyYWxsZWwgY2hhbmdlcyB0byBpdC4KKy8vCisvLyBUaGUg
b25seSBjaGFuZ2VzIGZyb20gRm9udFBsYXRmb3JtRGF0YU1hYyBzaG91bGQgYmU6CisvLyAtIFRo
ZSBmdW5jdGlvbnMgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUgZm9yIGxvYWRpbmcgYW5kIGNhY2hp
bmcgZm9udHMKKy8vICAgY3Jvc3MtcHJvY2Vzcy4KKy8vIC0gQ2hhbmdlcyB0byBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKE5TRm9udCxib29sLGJvb2wpCisvLyAtIENoYW5nZXMg
dG8gRm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udCgpCisvLyAtIENoYW5nZXMgdG8gRm9udFBsYXRm
b3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQorLy8gLSBDYWxscyB0byByZWZNZW1vcnlGb250
KCkgaW4gRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9IGFuZCBjb3B5CisvLyBjb25zdHJ1Y3Rv
ci4KKy8vCisvLyBBbGwgY2hhbmdlcyBhcmUgbWFya2VkIHdpdGggIlN0YXJ0L0VuZCBDaHJvbWl1
bSBDaGFuZ2UiCisvLworLy8gRm9yIGFsbCBvdGhlciBkaWZmZXJlbmNlcywgaWYgaXQgd2FzIGlu
dHJvZHVjZWQgaW4gdGhpcyBmaWxlLCB0aGVuIHRoZQorLy8gbWFpbnRhaW5lciBmb3Jnb3QgdG8g
aW5jbHVkZSBpdCBpbiB0aGUgbGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFuIHVwZGF0ZSB0aGF0Cisv
LyBzaG91bGQgaGF2ZSBiZWVuIGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1dCB3YXMgbm90LgorCisK
Ky8vIFN0YXJ0IENocm9taXVtIENoYW5nZQorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICIu
Li9ncmFwaGljcy9tYWMvRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW1wb3J0ICJDaHJvbWl1bUJy
aWRnZS5oIgorI2ltcG9ydCAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgPEFwcEtpdC9OU0ZvbnQuaD4KKyNpbXBvcnQgPHd0Zi9I
YXNoTWFwLmg+CisjaW1wb3J0IDx3dGYvUmVmQ291bnRlZC5oPgorI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIE1lbW9yeUFjdGl2YXRlZEZvbnQ7Cit0eXBlZGVmIEhhc2hN
YXA8QVRTRm9udFJlZiwgTWVtb3J5QWN0aXZhdGVkRm9udCo+IEZvbnRSZWZNZW1vcnlGb250SGFz
aDsKK3R5cGVkZWYgSGFzaE1hcDxBVFNGb250Q29udGFpbmVyUmVmLCBNZW1vcnlBY3RpdmF0ZWRG
b250Kj4gRm9udENvbnRhaW5lclJlZk1lbW9yeUZvbnRIYXNoOworCisvLyBPbiAxMC41LCBmb250
IGxvYWRpbmcgaXMgbm90IGJsb2NrZWQgYnkgdGhlIHNhbmRib3ggYW5kIHRodXMgdGhlcmUgaXMg
bm8KKy8vIG5lZWQgZm9yIHRoZSBjcm9zcy1wcm9jZXNzIGZvbnQgbG9hZGluZyBtZWNoYW5pbS4K
Ky8vIE9uIHN5c3RlbSB2ZXJzaW9ucyA+PTEwLjYgY3Jvc3MtcHJvY2VzcyBmb250IGxvYWRpbmcg
aXMgcmVxdWlyZWQuCitib29sIE91dE9mUHJvY2Vzc0ZvbnRMb2FkaW5nRW5hYmxlZCgpCit7Cisg
ICAgc3RhdGljIFNJbnQzMiBzeXN0ZW1WZXJzaW9uID0gMDsKKyAgICBpZiAoIXN5c3RlbVZlcnNp
b24pIHsKKyAgICAgICAgaWYgKEdlc3RhbHQoZ2VzdGFsdFN5c3RlbVZlcnNpb24sICZzeXN0ZW1W
ZXJzaW9uKSAhPSBub0VycikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3lzdGVtVmVyc2lvbiA+PSAweDEwNjA7Cit9CisKK0ZvbnRDb250YWluZXJSZWZN
ZW1vcnlGb250SGFzaCYgZm9udENhY2hlQnlTcmNGb250Q29udGFpbmVyUmVmKCkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRDb250YWluZXJSZWZNZW1vcnlGb250SGFzaCwgc3JjRm9u
dFJlZkNhY2hlLCAoKSk7CisgICAgcmV0dXJuIHNyY0ZvbnRSZWZDYWNoZTsKK30KKworRm9udFJl
Zk1lbW9yeUZvbnRIYXNoJiBmb250Q2FjaGVCeUFjdHVhbEZvbnRSZWYoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoRm9udFJlZk1lbW9yeUZvbnRIYXNoLCByZWFsRm9udFJlZkNhY2hlLCAo
KSk7CisgICAgcmV0dXJuIHJlYWxGb250UmVmQ2FjaGU7Cit9CisKK0FUU0ZvbnRDb250YWluZXJS
ZWYgZm9udENvbnRhaW5lclJlZkZyb21OU0ZvbnQoTlNGb250KiBzcmNGb250KQoreworICAgIEFU
U0ZvbnRSZWYgZm9udFJlZiA9IENURm9udEdldFBsYXRmb3JtRm9udCh0b0NURm9udFJlZihzcmNG
b250KSwgMCk7CisgICAgaWYgKCFmb250UmVmKQorICAgICAgICByZXR1cm4ga0FUU0ZvbnRDb250
YWluZXJSZWZVbnNwZWNpZmllZDsKKyAgICBBVFNGb250Q29udGFpbmVyUmVmIGZvbnRDb250YWlu
ZXIgPSBrQVRTRm9udENvbnRhaW5lclJlZlVuc3BlY2lmaWVkOworICAgIGlmIChBVFNGb250R2V0
Q29udGFpbmVyKGZvbnRSZWYsIDAsICZmb250Q29udGFpbmVyKSAhPSBub0VycikKKyAgICAgICAg
cmV0dXJuIGtBVFNGb250Q29udGFpbmVyUmVmVW5zcGVjaWZpZWQ7CisgICAgcmV0dXJuIGZvbnRD
b250YWluZXI7Cit9CisKKy8vIE1lbW9yeUFjdGl2YXRlZEZvbnQgZW5jYXBzdWxhdGVzIGEgZm9u
dCBsb2FkZWQgZnJvbSBhbm90aGVyIHByb2Nlc3MgYW5kCisvLyBhY3RpdmF0ZWQgZnJvbSBtZW1v
cnkuCisvLworLy8gUmVzcG9uc2liaWxpdGllczoKKy8vICogSG9sZGVyIGZvciB0aGUgQ0dGb250
UmVmICYgQVRTRm9udFJlZiBiZWxvbmdpbmcgdG8gdGhlIGFjdGl2YXRlZCBmb250LgorLy8gKiBS
ZXNwb25zaWJsZSBmb3IgdW5sb2FkaW5nIHRoZSBmb250IGNvbnRhaW5lciB3aGVuIGRvbmUuCisv
LworLy8gTWVtb3J5IE1hbmFnZW1lbnQ6CisvLyBUaGUgY2xhc3MgaXMgcmVmZXJlbmNlIGNvdW50
ZWQsIHdpdGggZWFjaCBpbnN0YW5jZSBvZiBGb250UGxhdGZvcm1EYXRhIHRoYXQKKy8vIHVzZXMg
dGhpcyBjbGFzcyBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGl0LgorLy8gRW50cmllcyBpbiAyIGhh
c2hlcyBhcmUgbWFpbnRhaW5lZCBpbnRlcm5hbGx5IHRvIGFsbG93IHF1aWNrIGxvb2t1cAorLy8g
b2YgZXhpc3RpbmcgaW5zdGFuY2VzIGZvciByZXVzZToKKy8vIC0gZm9udENhY2hlQnlTcmNGb250
Q29udGFpbmVyUmVmKCkgLSBrZXkgaXMgdGhlIEFUU0ZvbnRDb250YWluZXJSZWYKKy8vICAgY29y
cmVzcG9uZGluZyB0byB0aGUgKm9yaWdpbmFsIGluLXByb2Nlc3MgTlNGb250KiB3aG9zZSBsb2Fk
aW5nIHdhcyBibG9ja2VkCisvLyAgIGJ5IHRoZSBzYW5kYm94LgorLy8gICBUaGlzIGlzIG5lZWRl
ZCB0byBhbGxvdyBsb29rdXAgb2YgYSBwcmUtZXhpc3RpbmcgTWVtb3J5QWN0aXZhdGVkRm9udCB3
aGVuCisvLyAgIGNyZWF0aW5nIGEgbmV3IEZvbnRQbGF0Zm9ybURhdGEgb2JqZWN0LgorLy8gLSBm
b250Q2FjaGVCeUFjdHVhbEZvbnRSZWYoKSAtIGtleSBpcyB0aGUgQVRTRm9udFJlZiBjb3JyZXNw
b25kaW5nIHRvIHRoZQorLy8gICAqbmV3IGluLW1lbW9yeSBmb250KiB0aGF0IHdlIGdvdCBmcm9t
IHRoZSBicm93c2VyIHByb2Nlc3MuCisvLyAgIFRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgYSBGb250
UGxhdGZvcm1EYXRhIG9iamVjdCBjYW4gcmVmZXIgYmFjayB0byB0aGUKKy8vICAgTWVtb3J5QWN0
aXZhdGVkRm9udCBpdCdzIHVzaW5nLiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IG5lZWRlZCB0byBy
ZWxlYXNlCisvLyAgIHRoZSBmb250IG9uIEZvbnRQbGF0Zm9ybURhdGEgZGVzdHJ1Y3Rpb24uCisv
LworLy8gQXNzdW1wdGlvbnM6CisvLyBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGFuIEFUU0ZvbnRS
ZWYgaXMgYSB1bmlxdWUgaWRlbnRpZmllciB0aWVkIHRvIGFuCisvLyBhY3RpdmF0ZWQgZm9udC4g
IGkuZS4gQWZ0ZXIgd2UgYWN0aXZhdGUgYSBmb250LCBpdHMgQVRTRm9udFJlZiBkb2Vzbid0Cisv
LyBjaGFuZ2UuCisvLyBJdCBhbHNvIGFzc3VtZXMgdGhhdCB0aGUgQVRTRm9uY29udGFpbmVyUmVm
IGZvciB0d28gaW4tbWVtb3J5IE5TRm9udHMgdGhhdAorLy8gY29ycmVzcG9uZCB0byB0aGUgc2Ft
ZSBvbi1kaXNrIGZvbnQgZmlsZSBhcmUgYWx3YXlzIHRoZSBzYW1lIGFuZCBkb24ndCBjaGFuZ2UK
Ky8vIHdpdGggdGltZS4KKy8vCisvLyBGbHVzaGluZyBjYWNoZXM6CisvLyBXaGVuIHRoZSBzeXN0
ZW0gbm90aWZpZXMgdXMgb2YgYSBzeXN0ZW0gZm9udCBjYWNoZSBmbHVzaCwgYWxsIEZvbnREYXRh
Q2FjaGUKKy8vIG9iamVjdHMgYXJlIGRlc3Ryb3llZC4gIFRoaXMgc2hvdWxkIGluIHR1cm4gZGVy
ZWZlcmVuY2UgYWxsCisvLyBNZW1vcnlBY3RpdmF0ZWRGb250cyBhbmQgdGh1cyB1bmxvYWQgYWxs
IGluLW1lbW9yeSBmb250cy4KK2NsYXNzIE1lbW9yeUFjdGl2YXRlZEZvbnQgOiBwdWJsaWMgUmVm
Q291bnRlZDxNZW1vcnlBY3RpdmF0ZWRGb250PiB7CitwdWJsaWM6CisgICAgLy8gc3JjRm9udFJl
ZiAtIEFUU0ZvbnRSZWYgYmVsb25naW5nIHRvIHRoZSBOU0ZvbnQgb2JqZWN0IHRoYXQgZmFpbGVk
IHRvCisgICAgLy8gbG9hZCBpbi1wcm9jZXNzLgorICAgIC8vIGNvbnRhaW5lciAtIGEgZm9udCBj
b250YWluZXIgY29ycmVzcG9uZGluZyB0byBhbiBpZGVudGljYWwgZm9udCB0aGF0CisgICAgLy8g
d2UgbG9hZGVkIGNyb3NzLXByb2Nlc3MuCisgICAgTWVtb3J5QWN0aXZhdGVkRm9udChBVFNGb250
Q29udGFpbmVyUmVmIHNyY0ZvbnRDb250YWluZXJSZWYsIEFUU0ZvbnRDb250YWluZXJSZWYgY29u
dGFpbmVyKQorICAgICAgICA6IG1fZm9udENvbnRhaW5lcihjb250YWluZXIpCisgICAgICAgICwg
bV9hdHNGb250UmVmKGtBVFNGb250UmVmVW5zcGVjaWZpZWQpCisgICAgICAgICwgbV9zcmNGb250
Q29udGFpbmVyUmVmKHNyY0ZvbnRDb250YWluZXJSZWYpCisgICAgeworICAgICAgICBpZiAoIWNv
bnRhaW5lcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENvdW50
IHRoZSBudW1iZXIgb2YgZm9udHMgaW4gdGhlIGNvbnRhaW5lci4KKyAgICAgICAgSXRlbUNvdW50
IGZvbnRDb3VudCA9IDA7CisgICAgICAgIE9TU3RhdHVzIGVyciA9IEFUU0ZvbnRGaW5kRnJvbUNv
bnRhaW5lcihjb250YWluZXIsIGtBVFNPcHRpb25GbGFnc0RlZmF1bHQsIDAsIDAsICZmb250Q291
bnQpOworICAgICAgICBpZiAoZXJyICE9IG5vRXJyIHx8IGZvbnRDb3VudCA8IDEpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRm9yIG5vdyBhbHdheXMgYXNzdW1lIHRoYXQgd2Ug
d2FudCB0aGUgZmlyc3QgZm9udCBpbiB0aGUgY29udGFpbmVyLgorICAgICAgICBBVFNGb250Rmlu
ZEZyb21Db250YWluZXIoY29udGFpbmVyLCBrQVRTT3B0aW9uRmxhZ3NEZWZhdWx0LCAxLCAmbV9h
dHNGb250UmVmLCAwKTsKKworICAgICAgICBpZiAoIW1fYXRzRm9udFJlZikKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAvLyBDYWNoZSBDR0ZvbnQgcmVwcmVzZW50YXRpb24gb2YgdGhl
IGZvbnQuCisgICAgICAgIG1fY2dGb250LmFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBsYXRmb3Jt
Rm9udCgmbV9hdHNGb250UmVmKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY2dGb250Lmdl
dCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQWRkIG91cnNl
bHZlcyB0byBjYWNoZXMuCisgICAgICAgIGZvbnRDYWNoZUJ5U3JjRm9udENvbnRhaW5lclJlZigp
LmFkZChtX3NyY0ZvbnRDb250YWluZXJSZWYsIHRoaXMpOworICAgICAgICBmb250Q2FjaGVCeUFj
dHVhbEZvbnRSZWYoKS5hZGQobV9hdHNGb250UmVmLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAg
Ly8gR2V0IGNhY2hlZCBDR0ZvbnRSZWYgY29ycmVzcG9uZGluZyB0byB0aGUgaW4tbWVtb3J5IGZv
bnQuCisgICAgQ0dGb250UmVmIGNnRm9udCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jZ0Zv
bnQuZ2V0KCk7CisgICAgfQorICAgIAorICAgIC8vIEdldCBjYWNoZWQgQVRTRm9udFJlZiBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBpbi1tZW1vcnkgZm9udC4KKyAgICBBVFNGb250UmVmIGF0c0ZvbnRS
ZWYoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXRzRm9udFJlZjsKKyAgICB9CisgICAgCisg
ICAgLy8gRGVzdHJ1Y3RvciAtIFVubG9hZCBmb250IGNvbnRhaW5lciBmcm9tIG1lbW9yeSBhbmQg
cmVtb3ZlIG91cnNlbHZlcworICAgIC8vIGZyb20gaGFzaGVzLgorICAgIH5NZW1vcnlBY3RpdmF0
ZWRGb250KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NnRm9udC5nZXQoKSkgeyAgLy8gT2JqZWN0
IGNvbnN0cnVjdGlvbiBzdWNjZWVkZWQuCisgICAgICAgICAgICAvLyBGaXJzdCByZW1vdmUgb3Vy
c2VsdmVzIGZyb20gdGhlIGNhY2hlcy4KKyAgICAgICAgICAgIEFTU0VSVChmb250Q2FjaGVCeVNy
Y0ZvbnRDb250YWluZXJSZWYoKS5jb250YWlucyhtX3NyY0ZvbnRDb250YWluZXJSZWYpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChmb250Q2FjaGVCeUFjdHVhbEZvbnRSZWYoKS5jb250YWlucyhtX2F0
c0ZvbnRSZWYpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9udENhY2hlQnlTcmNGb250
Q29udGFpbmVyUmVmKCkucmVtb3ZlKG1fc3JjRm9udENvbnRhaW5lclJlZik7CisgICAgICAgICAg
ICBmb250Q2FjaGVCeUFjdHVhbEZvbnRSZWYoKS5yZW1vdmUobV9hdHNGb250UmVmKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBDR0ZvbnQgaXMgZGVzdHJveWVk
IGJlZm9yZSBpdHMgZm9udCBjb250YWluZXIuCisgICAgICAgICAgICBtX2NnRm9udC5yZWxlYXNl
UmVmKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2ZvbnRDb250YWluZXIg
IT0ga0FUU0ZvbnRDb250YWluZXJSZWZVbnNwZWNpZmllZCkKKyAgICAgICAgICAgIEFUU0ZvbnRE
ZWFjdGl2YXRlKG1fZm9udENvbnRhaW5lciwgMCwga0FUU09wdGlvbkZsYWdzRGVmYXVsdCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEFUU0ZvbnRDb250YWluZXJSZWYgbV9mb250Q29udGFpbmVy
OworICAgIFdURjo6UmV0YWluUHRyPENHRm9udFJlZj4gbV9jZ0ZvbnQ7CisgICAgQVRTRm9udFJl
ZiBtX2F0c0ZvbnRSZWY7CisgICAgQVRTRm9udENvbnRhaW5lclJlZiBtX3NyY0ZvbnRDb250YWlu
ZXJSZWY7Cit9OworCisvLyBUaGUgb25seSB3YXkgd2UgY2FuIHRlbGwgdGhhdCBhbiBpbi1wcm9j
ZXNzIGZvbnQgaGFzIGZhaWxlZCB0byBsb2FkCisvLyBpcyBpZiBDVEZvbnRDb3B5R3JhcGhpY3NG
b250KCkgcmV0dXJucyB0aGUgTGFzdFJlc29ydCBmb250LgorYm9vbCBpc0xhc3RSZXNvcnRGb250
KENHRm9udFJlZiBjZ0ZvbnQpCit7CisgICAgTlNTdHJpbmcqIGZvbnROYW1lID0gKE5TU3RyaW5n
KilDR0ZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoY2dGb250KTsKKyAgICByZXR1cm4gW2ZvbnROYW1l
IGlzRXF1YWxUb1N0cmluZzpAIkxhc3RSZXNvcnQiXTsKK30KKworLy8gR2l2ZW4gYW4gaW4tcHJv
Y2VzcyBmb250IHdoaWNoIGhhcyBmYWlsZWQgdG8gbG9hZCwgcmV0dXJuIGEKKy8vIE1lbW9yeUFj
dGl2YXRlZEZvbnQqIGNvcnJlc3BvbmRpbmcgdG8gYW4gaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9u
IG9mIHRoZQorLy8gc2FtZSBmb250IGxvYWRlZCBmcm9tIHRoZSBicm93c2VyIHByb2Nlc3MuCisv
LyBUaGUgY2FsbGVyIGlzIHJlc3BvbnNiaWxlIGZvciBjYWxsaW5nIGRlcmVmTWVtb3J5Rm9udCgp
IG9uIHRoZSBBVFNGb250UmVmCisvLyBvZiB0aGUgcmV0dXJuZWQgZm9udC4KKy8vIE9uIGZhaWx1
cmUgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAsIGluIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBkb2Vz
bid0IG5lZWQKKy8vIHRvIHBlcmZvcm0gYW55IGFkZGl0aW9uYWwgY2xlYW51cC4KK01lbW9yeUFj
dGl2YXRlZEZvbnQqIGxvYWRGb250RnJvbUJyb3dzZXJQcm9jZXNzKE5TRm9udCogbnNGb250KQor
eworICAgIEFUU0ZvbnRDb250YWluZXJSZWYgY29udGFpbmVyOworICAgIC8vIFNlbmQgY3Jvc3Mt
cHJvY2VzcyByZXF1ZXN0IHRvIGxvYWQgZm9udC4KKyAgICBpZiAoIUNocm9taXVtQnJpZGdlOjps
b2FkRm9udChuc0ZvbnQsICZjb250YWluZXIpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBBVFNGb250Q29udGFpbmVyUmVmIHNyY0ZvbnRDb250YWluZXJSZWYgPSBmb250Q29udGFpbmVy
UmVmRnJvbU5TRm9udChuc0ZvbnQpOworICAgIGlmICghc3JjRm9udENvbnRhaW5lclJlZikgewor
ICAgICAgICBBVFNGb250RGVhY3RpdmF0ZShjb250YWluZXIsIDAsIGtBVFNPcHRpb25GbGFnc0Rl
ZmF1bHQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgICAKKyAgICBNZW1vcnlBY3Rp
dmF0ZWRGb250KiBmb250ID0gZm9udENhY2hlQnlTcmNGb250Q29udGFpbmVyUmVmKCkuZ2V0KHNy
Y0ZvbnRDb250YWluZXJSZWYpOworICAgIGlmICghZm9udCkgeworICAgICAgICBmb250ID0gbmV3
IE1lbW9yeUFjdGl2YXRlZEZvbnQoc3JjRm9udENvbnRhaW5lclJlZiwgY29udGFpbmVyKTsKKyAg
ICAgICAgaWYgKCFmb250LT5jZ0ZvbnQoKSkgeworICAgICAgICAgICAgZGVsZXRlIGZvbnQ7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZv
bnQtPnJlZigpOworICAgIH0KKworICAgIHJldHVybiBmb250OworfQorCisvLyBkZXJlZigpIHRo
ZSBNZW1vcnlBY3RpdmF0ZWRGb250IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIEFUU0ZvbnRS
ZWYuICBJZiBubworLy8gY29ycmVzcG9uZGluZyBNZW1vcnlBY3RpdmF0ZWRGb250IG9iamVjdCBl
eGlzdHMsIG5vIGFjdGlvbiBpcyBwZXJmb3JtZWQuCit2b2lkIGRlcmVmTWVtb3J5Rm9udChBVFNG
b250UmVmIGZvbnRSZWYpCit7CisgICAgaWYgKGZvbnRSZWYgPT0ga0FUU0ZvbnRSZWZVbnNwZWNp
ZmllZCkKKyAgICAgICAgcmV0dXJuOworICAgIE1lbW9yeUFjdGl2YXRlZEZvbnQqIGZvbnQgPSBm
b250Q2FjaGVCeUFjdHVhbEZvbnRSZWYoKS5nZXQoZm9udFJlZik7CisgICAgaWYgKGZvbnQpCisg
ICAgICAgIGZvbnQtPmRlcmVmKCk7Cit9CisKKy8vIHJlZigpIHRoZSBNZW1vcnlBY3RpdmF0ZWRG
b250IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIEFUU0ZvbnRSZWYuICBJZiBubworLy8gY29y
cmVzcG9uZGluZyBNZW1vcnlBY3RpdmF0ZWRGb250IG9iamVjdCBleGlzdHMsIG5vIGFjdGlvbiBp
cyBwZXJmb3JtZWQuCit2b2lkIHJlZk1lbW9yeUZvbnQoQVRTRm9udFJlZiBmb250UmVmKQorewor
ICAgIGlmIChmb250UmVmID09IGtBVFNGb250UmVmVW5zcGVjaWZpZWQpCisgICAgICAgIHJldHVy
bjsKKyAgICBNZW1vcnlBY3RpdmF0ZWRGb250KiBmb250ID0gZm9udENhY2hlQnlBY3R1YWxGb250
UmVmKCkuZ2V0KGZvbnRSZWYpOworICAgIGlmIChmb250KQorICAgICAgICBmb250LT5yZWYoKTsK
K30KKworLy8gR2l2ZW4gYW4gTlNGb250LCB0cnkgdG8gbG9hZCBhIHJlcHJlc2VudGF0aW9uIG9m
IHRoYXQgZm9udCBpbnRvIHRoZSBjZ0ZvbnQKKy8vIHBhcmFtZXRlci4gIElmIGxvYWRpbmcgaXMg
YmxvY2tlZCBieSB0aGUgc2FuZGJveCwgdGhlIGZvbnQgbWF5IGJlIGxvYWRlZAorLy8gY3Jvc3Mt
cHJvY2Vzcy4KKy8vIElmIHNhbmRib3ggbG9hZGluZyBhbHNvIGZhaWxzLCBhIGZhbGxiYWNrIGZv
bnQgaXMgbG9hZGVkLgorLy8KKy8vIENvbnNpZGVyYXRpb25zOgorLy8gKiBjZ0ZvbnQgbXVzdCBi
ZSBDRlJlbGVhcygpZWQgYnkgdGhlIGNhbGxlciB3aGVuIGRvbmUuCisvLyAKKy8vIFBhcmFtZXRl
cnM6CisvLyAqIG5zRm9udCAtIFRoZSBmb250IHdlIHdpc2ggdG8gbG9hZC4KKy8vICogZm9udFNp
emUgLSBwb2ludCBzaXplIG9mIHRoZSBmb250IHdlIHdpc2ggdG8gbG9hZC4KKy8vICogb3V0TlNG
b250IC0gVGhlIGZvbnQgdGhhdCB3YXMgYWN0dWFsbHkgbG9hZGVkLCBtYXkgYmUgZGlmZmVyZW50
IGZyb20gbnNGb250CisvLyAgIGlmIGEgZmFsbGJhY2sgZm9udCB3YXMgdXNlZC4KKy8vICogY2dG
b250IC0gb24gb3V0cHV0IHRoaXMgY29udGFpbnMgdGhlIENHRm9udFJlZiBjb3JyZXNwb25kaW5n
IHRvIHRoZSBOU0ZvbnQKKy8vICAgdGhhdCB3YXMgcGlja2VkIGluIHRoZSBlbmQuICBUaGUgY2Fs
bGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCisvLyAgIENGUmVsZWFzZSgpIG9uIHRoaXMg
cGFyYW1ldGVyIHdoZW4gZG9uZSB3aXRoIGl0LgorLy8gKiBmb250SUQgLSBvbiBvdXRwdXQsIHRo
ZSBJRCBjb3JyZXNwb25kaW5nIHRvIG5zRm9udC4KK3ZvaWQgbG9hZEZvbnQoTlNGb250KiBuc0Zv
bnQsIGZsb2F0IGZvbnRTaXplLCBOU0ZvbnQqJiBvdXROU0ZvbnQsIENHRm9udFJlZiYgY2dGb250
LCBBVFNVRm9udElEJiBmb250SUQpCit7CisgICAgb3V0TlNGb250ID0gbnNGb250OworICAgIGNn
Rm9udCA9IENURm9udENvcHlHcmFwaGljc0ZvbnQodG9DVEZvbnRSZWYob3V0TlNGb250KSwgMCk7
CisgICAgTWVtb3J5QWN0aXZhdGVkRm9udCogbWVtRm9udCA9IDA7CisgICAgaWYgKE91dE9mUHJv
Y2Vzc0ZvbnRMb2FkaW5nRW5hYmxlZCgpICYmIG91dE5TRm9udCAmJiBjZ0ZvbnQgJiYgaXNMYXN0
UmVzb3J0Rm9udChjZ0ZvbnQpKSB7CisgICAgICAgIC8vIFJlbGVhc2Ugb2xkIENHRm9udFJlZiBz
aW5jZSBpdCBwb2ludHMgYXQgdGhlIExhc3RSZXNvcnQgZm9udCB3aGljaCB3ZSBkb24ndCB3YW50
LgorICAgICAgICBDRlJlbGVhc2UoY2dGb250KTsKKyAgICAgICAgY2dGb250ID0gMDsKKyAgICAg
ICAgCisgICAgICAgIC8vIEZvbnQgbG9hZGluZyB3YXMgYmxvY2tlZCBieSB0aGUgU2FuZGJveC4K
KyAgICAgICAgbWVtRm9udCA9IGxvYWRGb250RnJvbUJyb3dzZXJQcm9jZXNzKG91dE5TRm9udCk7
CisgICAgICAgIGlmIChtZW1Gb250KSB7CisgICAgICAgICAgICBjZ0ZvbnQgPSBtZW1Gb250LT5j
Z0ZvbnQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTmVlZCB0byBhZGQgYW4gZXh0
cmEgcmV0YWluIHNvIG91dHB1dCBzZW1hbnRpY3Mgb2YgdGhpcyBmdW5jdGlvbgorICAgICAgICAg
ICAgLy8gYXJlIGNvbnNpc3RlbnQuCisgICAgICAgICAgICBDRlJldGFpbihjZ0ZvbnQpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgd2Ugc3RpbGwgY2FuJ3QgbG9hZCB0aGUg
Zm9udCwgdGhlbiByZXR1cm4gVGltZXMsCisgICAgICAgICAgICAvLyByYXRoZXIgdGhhbiB0aGUg
TGFzdFJlc29ydCBmb250LgorICAgICAgICAgICAgb3V0TlNGb250ID0gW05TRm9udCBmb250V2l0
aE5hbWU6QCJUaW1lcyIgc2l6ZTpmb250U2l6ZV07CisgICAgICAgICAgICBjZ0ZvbnQgPSBDVEZv
bnRDb3B5R3JhcGhpY3NGb250KHRvQ1RGb250UmVmKG91dE5TRm9udCksIDApOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGlmIChtZW1Gb250KSB7CisgICAgICAgIGZvbnRJRCA9IG1lbUZv
bnQtPmF0c0ZvbnRSZWYoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb250SUQgPSBDVEZvbnRH
ZXRQbGF0Zm9ybUZvbnQodG9DVEZvbnRSZWYob3V0TlNGb250KSwgMCk7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZQorLy8gRW5kIENocm9taXVtIENoYW5nZQorCitGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKE5TRm9udCAqbnNGb250LCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljT2JsaXF1ZSkKKyAgICA6IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xk
KQorICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKHN5bnRoZXRpY09ibGlxdWUpCisgICAgLCBtX2Zv
bnQobnNGb250KQorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
CisgICAgLCBtX2lzQ29sb3JCaXRtYXBGb250KENURm9udEdldFN5bWJvbGljVHJhaXRzKHRvQ1RG
b250UmVmKG5zRm9udCkpICYga0NURm9udENvbG9yR2x5cGhzVHJhaXQpCisjZWxzZQorICAgICwg
bV9pc0NvbG9yQml0bWFwRm9udChmYWxzZSkKKyNlbmRpZgoreworLy8gU3RhcnQgQ2hyb21pdW0g
Q2hhbmdlCisgICAgbV9zaXplID0gbnNGb250ID8gW25zRm9udCBwb2ludFNpemVdIDogMC4wZjsK
KyAgICBDR0ZvbnRSZWYgY2dGb250ID0gMDsKKyAgICBOU0ZvbnQqIGxvYWRlZEZvbnQgPSAwOwor
ICAgIGxvYWRGb250KG5zRm9udCwgbV9zaXplLCBsb2FkZWRGb250LCBjZ0ZvbnQsIG1fYXRzdUZv
bnRJRCk7CisgICAgbV9mb250ID0gbG9hZGVkRm9udDsKKyAgICBpZiAobV9mb250KQorICAgICAg
ICBDRlJldGFpbihtX2ZvbnQpOworICAgIG1fY2dGb250LmFkb3B0Q0YoY2dGb250KTsKKy8vIEVu
ZCBDaHJvbWl1bSBDaGFuZ2UKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQoreworICAgIG1fZm9udCA9IGYubV9mb250ICYm
IGYubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSA/IGNvbnN0X2Nhc3Q8
TlNGb250ICo+KHN0YXRpY19jYXN0PGNvbnN0IE5TRm9udCAqPihDRlJldGFpbihmLm1fZm9udCkp
KSA6IGYubV9mb250OworCisgICAgbV9zeW50aGV0aWNCb2xkID0gZi5tX3N5bnRoZXRpY0JvbGQ7
CisgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gZi5tX3N5bnRoZXRpY09ibGlxdWU7CisgICAgbV9z
aXplID0gZi5tX3NpemU7CisgICAgbV9jZ0ZvbnQgPSBmLm1fY2dGb250OworICAgIG1fYXRzdUZv
bnRJRCA9IGYubV9hdHN1Rm9udElEOworICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBmLm1faXND
b2xvckJpdG1hcEZvbnQ7CisgICAgLy8gU3RhcnQgQ2hyb21pdW0gQ2hhbmdlCisgICAgcmVmTWVt
b3J5Rm9udChtX2F0c3VGb250SUQpOworICAgIC8vIEVuZCBDaHJvbWl1bSBDaGFuZ2UKK30KKwor
Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAgIGlmIChtX2ZvbnQg
JiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKKyAgICAgICAgQ0ZS
ZWxlYXNlKG1fZm9udCk7CisKKyAgICAvLyBTdGFydCBDaHJvbWl1bSBDaGFuZ2UKKyAgICBkZXJl
Zk1lbW9yeUZvbnQobV9hdHN1Rm9udElEKTsKKyAgICAvLyBFbmQgQ2hyb21pdW0gQ2hhbmdlCit9
CisKK2NvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBmKQoreworICAgIG1fc3ludGhldGljQm9sZCA9IGYubV9z
eW50aGV0aWNCb2xkOworICAgIG1fc3ludGhldGljT2JsaXF1ZSA9IGYubV9zeW50aGV0aWNPYmxp
cXVlOworICAgIG1fc2l6ZSA9IGYubV9zaXplOworICAgIG1fY2dGb250ID0gZi5tX2NnRm9udDsK
KyAgICBtX2F0c3VGb250SUQgPSBmLm1fYXRzdUZvbnRJRDsKKyAgICBpZiAobV9mb250ID09IGYu
bV9mb250KQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgaWYgKGYubV9mb250ICYmIGYubV9m
b250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKKyAgICAgICAgQ0ZSZXRhaW4o
Zi5tX2ZvbnQpOworICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8
TlNGb250ICo+KC0xKSkKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisgICAgbV9mb250ID0g
Zi5tX2ZvbnQ7CisgICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IGYubV9pc0NvbG9yQml0bWFwRm9u
dDsKKyAgICAvLyBTdGFydCBDaHJvbWl1bSBDaGFuZ2UKKyAgICByZWZNZW1vcnlGb250KG1fYXRz
dUZvbnRJRCk7CisgICAgLy8gRW5kIENocm9taXVtIENoYW5nZQorICAgIHJldHVybiAqdGhpczsK
K30KKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KE5TRm9udCAqZm9udCkKK3sKKyAg
ICBpZiAobV9mb250ID09IGZvbnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZm9udCkKKyAg
ICAgICAgQ0ZSZXRhaW4oZm9udCk7CisgICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRl
cnByZXRfY2FzdDxOU0ZvbnQgKj4oLTEpKQorICAgICAgICBDRlJlbGVhc2UobV9mb250KTsKKyAg
ICBtX2ZvbnQgPSBmb250OworICAgIG1fc2l6ZSA9IGZvbnQgPyBbZm9udCBwb2ludFNpemVdIDog
MC4wZjsKKyAgICAKKyAgICAvLyBTdGFydCBDaHJvbWl1bSBDaGFuZ2UKKyAgICBDR0ZvbnRSZWYg
Y2dGb250ID0gMDsKKyAgICBOU0ZvbnQqIGxvYWRlZEZvbnQgPSAwOworICAgIGxvYWRGb250KG1f
Zm9udCwgbV9zaXplLCBsb2FkZWRGb250LCBjZ0ZvbnQsIG1fYXRzdUZvbnRJRCk7CisgICAgCisg
ICAgLy8gSWYgbG9hZEZvbnQgcmVwbGFjZWQgbV9mb250IHdpdGggYSBmYWxsYmFjayBmb250LCB0
aGVuIHJlbGVhc2UgdGhlCisgICAgLy8gcHJldmlvdXMgZm9udCB0byBjb3VudGVyIHRoZSByZXRh
aW4gYWJvdmUuIFRoZW4gcmV0YWluIHRoZSBuZXcgZm9udC4KKyAgICBpZiAobG9hZGVkRm9udCAh
PSBtX2ZvbnQpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisgICAgICAgIG1fZm9udCA9
IGxvYWRlZEZvbnQ7CisgICAgICAgIENGUmV0YWluKG1fZm9udCk7CisgICAgfQorICAgIG1fY2dG
b250LmFkb3B0Q0YoY2dGb250KTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQorICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBDVEZvbnRHZXRTeW1ib2xpY1Ry
YWl0cyh0b0NURm9udFJlZihtX2ZvbnQpKSAmIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0OworI2Vu
ZGlmCisgICAgLy8gRW5kIENocm9taXVtIENoYW5nZQorfQorCitib29sIEZvbnRQbGF0Zm9ybURh
dGE6OnJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25zdAoreworICAgIHJldHVybiBbbV9mb250IHJl
bmRlcmluZ01vZGVdID09IE5TRm9udEFudGlhbGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1JlbmRl
cmluZ01vZGU7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6YWxsb3dzTGlnYXR1cmVzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIVtbbV9mb250IGNvdmVyZWRDaGFyYWN0ZXJTZXRdIGNoYXJh
Y3RlcklzTWVtYmVyOidhJ107Cit9CisKKyNpZm5kZWYgTkRFQlVHCitTdHJpbmcgRm9udFBsYXRm
b3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gY2dGb250RGVzY3JpcHRpb24oQWRvcHRDRiwgQ0ZDb3B5RGVzY3JpcHRpb24oY2dGb250KCkp
KTsKKyAgICByZXR1cm4gU3RyaW5nKGNnRm9udERlc2NyaXB0aW9uLmdldCgpKSArICIgIiArIFN0
cmluZzo6bnVtYmVyKG1fc2l6ZSkgKyAobV9zeW50aGV0aWNCb2xkID8gIiBzeW50aGV0aWMgYm9s
ZCIgOiAiIikgKyAobV9zeW50aGV0aWNPYmxpcXVlID8gIiBzeW50aGV0aWMgb2JsaXF1ZSIgOiAi
Iik7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="46606"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="46607"
          type_id="3"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60113</attachid>
            <date>2010-06-30 05:41:49 -0700</date>
            <delta_ts>2010-06-30 08:53:10 -0700</delta_ts>
            <desc>Fork FontPlatformFontDataMac.mm to enable x-process font loading</desc>
            <filename>oop.patch</filename>
            <type>text/plain</type>
            <size>19463</size>
            <attacher name="Jeremy Moskovich">playmobil</attacher>
            
              <data encoding="base64">Y29tbWl0IDRjMTMwMDlmZDdhM2Q2ZDhmM2ExODA3ZDA2YmFiY2Y5OGExZDQwZGYKQXV0aG9yOiBK
ZXJlbXkgTW9za292aWNoIDxwbGF5bW9iaWxAem9hbC50bHYuY29ycC5nb29nbGUuY29tPgpEYXRl
OiAgIFdlZCBKdW4gMzAgMTU6MjY6MjQgMjAxMCArMDMwMAoKICAgIE9PUCBGb250IExvYWRpbmcg
cGF0Y2guCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA0ZWE4NmU3Li40OTFkZWQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEwLTA2LTI0ICBKZXJl
bXkgTW9za292aWNoICA8amVyZW15QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIEFkZCBPT1AgZm9udCBsb2Fk
aW5nIHRvIEZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bU1hYy4KKworICAgICAgICBPbiBPUyBYLCB3
aXRoIGZvbnQgbWFuYWdlbWVudCBzb2Z0d2FyZSBpbnN0YWxsZWQuIEZvbnRzCisgICAgICAgIGNh
biByZXNpZGUgaW4gYW4gYXJiaXRyYXJ5IHBhdGggb24gZGlzayB3aGljaCBpcyBibG9ja2VkIGJ5
CisgICAgICAgIENocm9taXVtJ3Mgc2FuZGJveC4KKworICAgICAgICBUaGlzIGNoYW5nZSBhZGRz
IGhvb2tzIHRvIEZvbnRQbGFmb3JtRGF0YSB3aGljaCBhbGxvdyBjcm9zcy1wcm9jZXNzCisgICAg
ICAgIGZvbnQgbG9hZGluZyBpbiBjYXNlIG9mIG5lZWQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTQ4CisKKyAgICAgICAgTm90IHBvc3NpYmxl
IHRvIHRlc3QgLSByZXF1aXJlcyBzYW5kYm94aW5nIHdoaWNoIERSVCBkb2Vzbid0IHN1cHBvcnQu
CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtTWFjLm1tOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6cm91bmRzR2x5cGhBZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjphbGxvd3NMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6ZGVzY3JpcHRpb24pOgorCiAyMDEwLTA2LTMwICBFcmljIFNlaWRlbCAgPGVyaWNA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3ZDE4
NTMyLi5kYjBiZTg5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjEzOCw2ICsyMTM4LDcgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNo
cm9taXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNw
cCcsCkBAIC0yMjI4LDcgKzIyMjksNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Gb250TWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udFBsYXRmb3JtRGF0YS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udFBsYXRmb3JtRGF0YU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtTWFjLm1t
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hy
b21pdW1NYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmNjg0ZQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFBsYXRmb3JtRGF0YUNocm9taXVtTWFjLm1tCkBAIC0wLDAgKzEsNDQ3IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworLy8gVGhpcyBmaWxlIGlzIGEgY2xvbmUgb2YgcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRQbGF0Zm9ybURhdGFNYWMubW0uCisvLyBCZWNhdXNlIHdlIHdh
bnQgdG8gc3VwcG9ydCBsb2FkaW5nIGZvbnRzIGJldHdlZW4gcHJvY2Vzc2VzIGluIHRoZSBmYWNl
IG9mCisvLyBmb250IGxvYWRpbmcgYmVpbmcgYmxvY2tlZCBieSB0aGUgc2FuZGJveCwgd2UgbXVz
dCBtYWludGFpbiBhIGZvcmsuCisvLyBQbGVhc2UgbWFpbnRhaW4gdGhpcyBmaWxlIGJ5IHBlcmZv
cm1pbmcgcGFyYWxsZWwgY2hhbmdlcyB0byBpdC4KKy8vCisvLyBUaGUgb25seSBjaGFuZ2VzIGZy
b20gRm9udFBsYXRmb3JtRGF0YU1hYyBzaG91bGQgYmU6CisvLyAtIFRoZSBmdW5jdGlvbnMgYXQg
dGhlIHRvcCBvZiB0aGlzIGZpbGUgZm9yIGxvYWRpbmcgYW5kIGNhY2hpbmcgZm9udHMKKy8vICAg
Y3Jvc3MtcHJvY2Vzcy4KKy8vIC0gQ2hhbmdlcyB0byBGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKE5TRm9udCxib29sLGJvb2wpCisvLyAtIENoYW5nZXMgdG8gRm9udFBsYXRmb3Jt
RGF0YTo6c2V0Rm9udCgpCisvLyAtIENoYW5nZXMgdG8gRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQ
bGF0Zm9ybURhdGEoKQorLy8gLSBDYWxscyB0byByZWZNZW1vcnlGb250KCkgaW4gRm9udFBsYXRm
b3JtRGF0YTo6b3BlcmF0b3I9IGFuZCBjb3B5CisvLyBjb25zdHJ1Y3Rvci4KKy8vCisvLyBBbGwg
Y2hhbmdlcyBhcmUgbWFya2VkIHdpdGggIlN0YXJ0L0VuZCBDaHJvbWl1bSBDaGFuZ2UiCisvLwor
Ly8gRm9yIGFsbCBvdGhlciBkaWZmZXJlbmNlcywgaWYgaXQgd2FzIGludHJvZHVjZWQgaW4gdGhp
cyBmaWxlLCB0aGVuIHRoZQorLy8gbWFpbnRhaW5lciBmb3Jnb3QgdG8gaW5jbHVkZSBpdCBpbiB0
aGUgbGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFuIHVwZGF0ZSB0aGF0CisvLyBzaG91bGQgaGF2ZSBi
ZWVuIGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1dCB3YXMgbm90LgorCisKKy8vIFN0YXJ0IENocm9t
aXVtIENoYW5nZQorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICIuLi9ncmFwaGljcy9tYWMv
Rm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW1wb3J0ICJDaHJvbWl1bUJyaWRnZS5oIgorI2ltcG9y
dCAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
KyNpbXBvcnQgPEFwcEtpdC9OU0ZvbnQuaD4KKyNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CisjaW1w
b3J0IDx3dGYvUmVmQ291bnRlZC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9y
dCA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisK
K2NsYXNzIE1lbW9yeUFjdGl2YXRlZEZvbnQ7Cit0eXBlZGVmIEhhc2hNYXA8QVRTRm9udFJlZiwg
TWVtb3J5QWN0aXZhdGVkRm9udCo+IEZvbnRSZWZNZW1vcnlGb250SGFzaDsKK3R5cGVkZWYgSGFz
aE1hcDxBVFNGb250Q29udGFpbmVyUmVmLCBNZW1vcnlBY3RpdmF0ZWRGb250Kj4gRm9udENvbnRh
aW5lclJlZk1lbW9yeUZvbnRIYXNoOworCisvLyBPbiAxMC41LCBmb250IGxvYWRpbmcgaXMgbm90
IGJsb2NrZWQgYnkgdGhlIHNhbmRib3ggYW5kIHRodXMgdGhlcmUgaXMgbm8KKy8vIG5lZWQgZm9y
IHRoZSBjcm9zcy1wcm9jZXNzIGZvbnQgbG9hZGluZyBtZWNoYW5pbS4KKy8vIE9uIHN5c3RlbSB2
ZXJzaW9ucyA+PTEwLjYgY3Jvc3MtcHJvY2VzcyBmb250IGxvYWRpbmcgaXMgcmVxdWlyZWQuCiti
b29sIE91dE9mUHJvY2Vzc0ZvbnRMb2FkaW5nRW5hYmxlZCgpCit7CisgICAgc3RhdGljIFNJbnQz
MiBzeXN0ZW1WZXJzaW9uID0gMDsKKyAgICBpZiAoIXN5c3RlbVZlcnNpb24pIHsKKyAgICAgICAg
aWYgKEdlc3RhbHQoZ2VzdGFsdFN5c3RlbVZlcnNpb24sICZzeXN0ZW1WZXJzaW9uKSAhPSBub0Vy
cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3lzdGVt
VmVyc2lvbiA+PSAweDEwNjA7Cit9CisKK0ZvbnRDb250YWluZXJSZWZNZW1vcnlGb250SGFzaCYg
Zm9udENhY2hlQnlTcmNGb250Q29udGFpbmVyUmVmKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEZvbnRDb250YWluZXJSZWZNZW1vcnlGb250SGFzaCwgc3JjRm9udFJlZkNhY2hlLCAoKSk7
CisgICAgcmV0dXJuIHNyY0ZvbnRSZWZDYWNoZTsKK30KKworRm9udFJlZk1lbW9yeUZvbnRIYXNo
JiBmb250Q2FjaGVCeUFjdHVhbEZvbnRSZWYoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Rm9udFJlZk1lbW9yeUZvbnRIYXNoLCByZWFsRm9udFJlZkNhY2hlLCAoKSk7CisgICAgcmV0dXJu
IHJlYWxGb250UmVmQ2FjaGU7Cit9CisKK0FUU0ZvbnRDb250YWluZXJSZWYgZm9udENvbnRhaW5l
clJlZkZyb21OU0ZvbnQoTlNGb250KiBzcmNGb250KQoreworICAgIEFUU0ZvbnRSZWYgZm9udFJl
ZiA9IENURm9udEdldFBsYXRmb3JtRm9udCh0b0NURm9udFJlZihzcmNGb250KSwgMCk7CisgICAg
aWYgKCFmb250UmVmKQorICAgICAgICByZXR1cm4ga0FUU0ZvbnRDb250YWluZXJSZWZVbnNwZWNp
ZmllZDsKKyAgICBBVFNGb250Q29udGFpbmVyUmVmIGZvbnRDb250YWluZXIgPSBrQVRTRm9udENv
bnRhaW5lclJlZlVuc3BlY2lmaWVkOworICAgIGlmIChBVFNGb250R2V0Q29udGFpbmVyKGZvbnRS
ZWYsIDAsICZmb250Q29udGFpbmVyKSAhPSBub0VycikKKyAgICAgICAgcmV0dXJuIGtBVFNGb250
Q29udGFpbmVyUmVmVW5zcGVjaWZpZWQ7CisgICAgcmV0dXJuIGZvbnRDb250YWluZXI7Cit9CisK
Ky8vIE1lbW9yeUFjdGl2YXRlZEZvbnQgZW5jYXBzdWxhdGVzIGEgZm9udCBsb2FkZWQgZnJvbSBh
bm90aGVyIHByb2Nlc3MgYW5kCisvLyBhY3RpdmF0ZWQgZnJvbSBtZW1vcnkuCisvLworLy8gUmVz
cG9uc2liaWxpdGllczoKKy8vICogSG9sZGVyIGZvciB0aGUgQ0dGb250UmVmICYgQVRTRm9udFJl
ZiBiZWxvbmdpbmcgdG8gdGhlIGFjdGl2YXRlZCBmb250LgorLy8gKiBSZXNwb25zaWJsZSBmb3Ig
dW5sb2FkaW5nIHRoZSBmb250IGNvbnRhaW5lciB3aGVuIGRvbmUuCisvLworLy8gTWVtb3J5IE1h
bmFnZW1lbnQ6CisvLyBUaGUgY2xhc3MgaXMgcmVmZXJlbmNlIGNvdW50ZWQsIHdpdGggZWFjaCBp
bnN0YW5jZSBvZiBGb250UGxhdGZvcm1EYXRhIHRoYXQKKy8vIHVzZXMgdGhpcyBjbGFzcyBob2xk
aW5nIGEgcmVmZXJlbmNlIHRvIGl0LgorLy8gRW50cmllcyBpbiAyIGhhc2hlcyBhcmUgbWFpbnRh
aW5lZCBpbnRlcm5hbGx5IHRvIGFsbG93IHF1aWNrIGxvb2t1cAorLy8gb2YgZXhpc3RpbmcgaW5z
dGFuY2VzIGZvciByZXVzZToKKy8vIC0gZm9udENhY2hlQnlTcmNGb250Q29udGFpbmVyUmVmKCkg
LSBrZXkgaXMgdGhlIEFUU0ZvbnRDb250YWluZXJSZWYKKy8vICAgY29ycmVzcG9uZGluZyB0byB0
aGUgKm9yaWdpbmFsIGluLXByb2Nlc3MgTlNGb250KiB3aG9zZSBsb2FkaW5nIHdhcyBibG9ja2Vk
CisvLyAgIGJ5IHRoZSBzYW5kYm94LgorLy8gICBUaGlzIGlzIG5lZWRlZCB0byBhbGxvdyBsb29r
dXAgb2YgYSBwcmUtZXhpc3RpbmcgTWVtb3J5QWN0aXZhdGVkRm9udCB3aGVuCisvLyAgIGNyZWF0
aW5nIGEgbmV3IEZvbnRQbGF0Zm9ybURhdGEgb2JqZWN0LgorLy8gLSBmb250Q2FjaGVCeUFjdHVh
bEZvbnRSZWYoKSAtIGtleSBpcyB0aGUgQVRTRm9udFJlZiBjb3JyZXNwb25kaW5nIHRvIHRoZQor
Ly8gICAqbmV3IGluLW1lbW9yeSBmb250KiB0aGF0IHdlIGdvdCBmcm9tIHRoZSBicm93c2VyIHBy
b2Nlc3MuCisvLyAgIFRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgYSBGb250UGxhdGZvcm1EYXRhIG9i
amVjdCBjYW4gcmVmZXIgYmFjayB0byB0aGUKKy8vICAgTWVtb3J5QWN0aXZhdGVkRm9udCBpdCdz
IHVzaW5nLiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IG5lZWRlZCB0byByZWxlYXNlCisvLyAgIHRo
ZSBmb250IG9uIEZvbnRQbGF0Zm9ybURhdGEgZGVzdHJ1Y3Rpb24uCisvLworLy8gQXNzdW1wdGlv
bnM6CisvLyBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGFuIEFUU0ZvbnRSZWYgaXMgYSB1bmlxdWUg
aWRlbnRpZmllciB0aWVkIHRvIGFuCisvLyBhY3RpdmF0ZWQgZm9udC4gIGkuZS4gQWZ0ZXIgd2Ug
YWN0aXZhdGUgYSBmb250LCBpdHMgQVRTRm9udFJlZiBkb2Vzbid0CisvLyBjaGFuZ2UuCisvLyBJ
dCBhbHNvIGFzc3VtZXMgdGhhdCB0aGUgQVRTRm9uY29udGFpbmVyUmVmIGZvciB0d28gaW4tbWVt
b3J5IE5TRm9udHMgdGhhdAorLy8gY29ycmVzcG9uZCB0byB0aGUgc2FtZSBvbi1kaXNrIGZvbnQg
ZmlsZSBhcmUgYWx3YXlzIHRoZSBzYW1lIGFuZCBkb24ndCBjaGFuZ2UKKy8vIHdpdGggdGltZS4K
Ky8vCisvLyBGbHVzaGluZyBjYWNoZXM6CisvLyBXaGVuIHRoZSBzeXN0ZW0gbm90aWZpZXMgdXMg
b2YgYSBzeXN0ZW0gZm9udCBjYWNoZSBmbHVzaCwgYWxsIEZvbnREYXRhQ2FjaGUKKy8vIG9iamVj
dHMgYXJlIGRlc3Ryb3llZC4gIFRoaXMgc2hvdWxkIGluIHR1cm4gZGVyZWZlcmVuY2UgYWxsCisv
LyBNZW1vcnlBY3RpdmF0ZWRGb250cyBhbmQgdGh1cyB1bmxvYWQgYWxsIGluLW1lbW9yeSBmb250
cy4KK2NsYXNzIE1lbW9yeUFjdGl2YXRlZEZvbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZW1vcnlB
Y3RpdmF0ZWRGb250PiB7CitwdWJsaWM6CisgICAgLy8gc3JjRm9udFJlZiAtIEFUU0ZvbnRSZWYg
YmVsb25naW5nIHRvIHRoZSBOU0ZvbnQgb2JqZWN0IHRoYXQgZmFpbGVkIHRvCisgICAgLy8gbG9h
ZCBpbi1wcm9jZXNzLgorICAgIC8vIGNvbnRhaW5lciAtIGEgZm9udCBjb250YWluZXIgY29ycmVz
cG9uZGluZyB0byBhbiBpZGVudGljYWwgZm9udCB0aGF0CisgICAgLy8gd2UgbG9hZGVkIGNyb3Nz
LXByb2Nlc3MuCisgICAgTWVtb3J5QWN0aXZhdGVkRm9udChBVFNGb250Q29udGFpbmVyUmVmIHNy
Y0ZvbnRDb250YWluZXJSZWYsIEFUU0ZvbnRDb250YWluZXJSZWYgY29udGFpbmVyKQorICAgICAg
ICA6IG1fZm9udENvbnRhaW5lcihjb250YWluZXIpCisgICAgICAgICwgbV9hdHNGb250UmVmKGtB
VFNGb250UmVmVW5zcGVjaWZpZWQpCisgICAgICAgICwgbV9zcmNGb250Q29udGFpbmVyUmVmKHNy
Y0ZvbnRDb250YWluZXJSZWYpCisgICAgeworICAgICAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2Yg
Zm9udHMgaW4gdGhlIGNvbnRhaW5lci4KKyAgICAgICAgSXRlbUNvdW50IGZvbnRDb3VudCA9IDA7
CisgICAgICAgIE9TU3RhdHVzIGVyciA9IEFUU0ZvbnRGaW5kRnJvbUNvbnRhaW5lcihjb250YWlu
ZXIsIGtBVFNPcHRpb25GbGFnc0RlZmF1bHQsIDAsIDAsICZmb250Q291bnQpOworICAgICAgICBp
ZiAoZXJyICE9IG5vRXJyIHx8IGZvbnRDb3VudCA8IDEpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgLy8gRm9yIG5vdyBhbHdheXMgYXNzdW1lIHRoYXQgd2Ugd2FudCB0aGUgZmlyc3Qg
Zm9udCBpbiB0aGUgY29udGFpbmVyLgorICAgICAgICBBVFNGb250RmluZEZyb21Db250YWluZXIo
Y29udGFpbmVyLCBrQVRTT3B0aW9uRmxhZ3NEZWZhdWx0LCAxLCAmbV9hdHNGb250UmVmLCAwKTsK
KworICAgICAgICBpZiAoIW1fYXRzRm9udFJlZikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBDYWNoZSBDR0ZvbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZvbnQuCisgICAgICAg
IG1fY2dGb250LmFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBsYXRmb3JtRm9udCgmbV9hdHNGb250
UmVmKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fY2dGb250LmdldCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQWRkIG91cnNlbHZlcyB0byBjYWNoZXMu
CisgICAgICAgIGZvbnRDYWNoZUJ5U3JjRm9udENvbnRhaW5lclJlZigpLmFkZChtX3NyY0ZvbnRD
b250YWluZXJSZWYsIHRoaXMpOworICAgICAgICBmb250Q2FjaGVCeUFjdHVhbEZvbnRSZWYoKS5h
ZGQobV9hdHNGb250UmVmLCB0aGlzKTsKKyAgICB9CisgICAgCisgICAgLy8gR2V0IGNhY2hlZCBD
R0ZvbnRSZWYgY29ycmVzcG9uZGluZyB0byB0aGUgaW4tbWVtb3J5IGZvbnQuCisgICAgQ0dGb250
UmVmIGNnRm9udCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jZ0ZvbnQuZ2V0KCk7CisgICAg
fQorICAgIAorICAgIC8vIEdldCBjYWNoZWQgQVRTRm9udFJlZiBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBpbi1tZW1vcnkgZm9udC4KKyAgICBBVFNGb250UmVmIGF0c0ZvbnRSZWYoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYXRzRm9udFJlZjsKKyAgICB9CisgICAgCisgICAgLy8gRGVzdHJ1Y3Rv
ciAtIFVubG9hZCBmb250IGNvbnRhaW5lciBmcm9tIG1lbW9yeSBhbmQgcmVtb3ZlIG91cnNlbHZl
cworICAgIC8vIGZyb20gaGFzaGVzLgorICAgIH5NZW1vcnlBY3RpdmF0ZWRGb250KCkKKyAgICB7
CisgICAgICAgIGlmIChtX2NnRm9udC5nZXQoKSkgeyAgLy8gT2JqZWN0IGNvbnN0cnVjdGlvbiBz
dWNjZWVkZWQuCisgICAgICAgICAgICAvLyBGaXJzdCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhl
IGNhY2hlcy4KKyAgICAgICAgICAgIEFTU0VSVChmb250Q2FjaGVCeVNyY0ZvbnRDb250YWluZXJS
ZWYoKS5jb250YWlucyhtX3NyY0ZvbnRDb250YWluZXJSZWYpKTsKKyAgICAgICAgICAgIEFTU0VS
VChmb250Q2FjaGVCeUFjdHVhbEZvbnRSZWYoKS5jb250YWlucyhtX2F0c0ZvbnRSZWYpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9udENhY2hlQnlTcmNGb250Q29udGFpbmVyUmVmKCku
cmVtb3ZlKG1fc3JjRm9udENvbnRhaW5lclJlZik7CisgICAgICAgICAgICBmb250Q2FjaGVCeUFj
dHVhbEZvbnRSZWYoKS5yZW1vdmUobV9hdHNGb250UmVmKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBDR0ZvbnQgaXMgZGVzdHJveWVkIGJlZm9yZSBpdHMgZm9u
dCBjb250YWluZXIuCisgICAgICAgICAgICBtX2NnRm9udC5yZWxlYXNlUmVmKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2ZvbnRDb250YWluZXIgIT0ga0FUU0ZvbnRDb250
YWluZXJSZWZVbnNwZWNpZmllZCkKKyAgICAgICAgICAgIEFUU0ZvbnREZWFjdGl2YXRlKG1fZm9u
dENvbnRhaW5lciwgMCwga0FUU09wdGlvbkZsYWdzRGVmYXVsdCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEFUU0ZvbnRDb250YWluZXJSZWYgbV9mb250Q29udGFpbmVyOworICAgIFdURjo6UmV0
YWluUHRyPENHRm9udFJlZj4gbV9jZ0ZvbnQ7CisgICAgQVRTRm9udFJlZiBtX2F0c0ZvbnRSZWY7
CisgICAgQVRTRm9udENvbnRhaW5lclJlZiBtX3NyY0ZvbnRDb250YWluZXJSZWY7Cit9OworCisv
LyBUaGUgb25seSB3YXkgd2UgY2FuIHRlbGwgdGhhdCBhbiBpbi1wcm9jZXNzIGZvbnQgaGFzIGZh
aWxlZCB0byBsb2FkCisvLyBpcyBpZiBDVEZvbnRDb3B5R3JhcGhpY3NGb250KCkgcmV0dXJucyB0
aGUgTGFzdFJlc29ydCBmb250LgorYm9vbCBpc0xhc3RSZXNvcnRGb250KENHRm9udFJlZiBjZ0Zv
bnQpCit7CisgICAgTlNTdHJpbmcqIGZvbnROYW1lID0gKE5TU3RyaW5nKilDR0ZvbnRDb3B5UG9z
dFNjcmlwdE5hbWUoY2dGb250KTsKKyAgICByZXR1cm4gW2ZvbnROYW1lIGlzRXF1YWxUb1N0cmlu
ZzpAIkxhc3RSZXNvcnQiXTsKK30KKworLy8gR2l2ZW4gYW4gaW4tcHJvY2VzcyBmb250IHdoaWNo
IGhhcyBmYWlsZWQgdG8gbG9hZCwgcmV0dXJuIGEKKy8vIE1lbW9yeUFjdGl2YXRlZEZvbnQqIGNv
cnJlc3BvbmRpbmcgdG8gYW4gaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZQorLy8gc2Ft
ZSBmb250IGxvYWRlZCBmcm9tIHRoZSBicm93c2VyIHByb2Nlc3MuCisvLyBUaGUgY2FsbGVyIGlz
IHJlc3BvbnNiaWxlIGZvciBjYWxsaW5nIGRlcmVmTWVtb3J5Rm9udCgpIG9uIHRoZSBBVFNGb250
UmVmCisvLyBvZiB0aGUgcmV0dXJuZWQgZm9udC4KKy8vIE9uIGZhaWx1cmUgdGhpcyBmdW5jdGlv
biByZXR1cm5zIDAsIGluIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBkb2Vzbid0IG5lZWQKKy8vIHRv
IHBlcmZvcm0gYW55IGFkZGl0aW9uYWwgY2xlYW51cC4KK01lbW9yeUFjdGl2YXRlZEZvbnQqIGxv
YWRGb250RnJvbUJyb3dzZXJQcm9jZXNzKE5TRm9udCogbnNGb250KQoreworICAgIEFUU0ZvbnRD
b250YWluZXJSZWYgY29udGFpbmVyOworICAgIC8vIFNlbmQgY3Jvc3MtcHJvY2VzcyByZXF1ZXN0
IHRvIGxvYWQgZm9udC4KKyAgICBpZiAoIUNocm9taXVtQnJpZGdlOjpsb2FkRm9udChuc0ZvbnQs
ICZjb250YWluZXIpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBBVFNGb250Q29udGFp
bmVyUmVmIHNyY0ZvbnRDb250YWluZXJSZWYgPSBmb250Q29udGFpbmVyUmVmRnJvbU5TRm9udChu
c0ZvbnQpOworICAgIGlmICghc3JjRm9udENvbnRhaW5lclJlZikgeworICAgICAgICBBVFNGb250
RGVhY3RpdmF0ZShjb250YWluZXIsIDAsIGtBVFNPcHRpb25GbGFnc0RlZmF1bHQpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgICAKKyAgICBNZW1vcnlBY3RpdmF0ZWRGb250KiBmb250
ID0gZm9udENhY2hlQnlTcmNGb250Q29udGFpbmVyUmVmKCkuZ2V0KHNyY0ZvbnRDb250YWluZXJS
ZWYpOworICAgIGlmICghZm9udCkgeworICAgICAgICBmb250ID0gbmV3IE1lbW9yeUFjdGl2YXRl
ZEZvbnQoc3JjRm9udENvbnRhaW5lclJlZiwgY29udGFpbmVyKTsKKyAgICAgICAgaWYgKCFmb250
LT5jZ0ZvbnQoKSkgeworICAgICAgICAgICAgZGVsZXRlIGZvbnQ7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvbnQtPnJlZigpOworICAg
IH0KKworICAgIHJldHVybiBmb250OworfQorCisvLyBkZXJlZigpIHRoZSBNZW1vcnlBY3RpdmF0
ZWRGb250IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIEFUU0ZvbnRSZWYuICBJZiBubworLy8g
Y29ycmVzcG9uZGluZyBNZW1vcnlBY3RpdmF0ZWRGb250IG9iamVjdCBleGlzdHMsIG5vIGFjdGlv
biBpcyBwZXJmb3JtZWQuCit2b2lkIGRlcmVmTWVtb3J5Rm9udChBVFNGb250UmVmIGZvbnRSZWYp
Cit7CisgICAgaWYgKGZvbnRSZWYgPT0ga0FUU0ZvbnRSZWZVbnNwZWNpZmllZCkKKyAgICAgICAg
cmV0dXJuOworICAgIE1lbW9yeUFjdGl2YXRlZEZvbnQqIGZvbnQgPSBmb250Q2FjaGVCeUFjdHVh
bEZvbnRSZWYoKS5nZXQoZm9udFJlZik7CisgICAgaWYgKGZvbnQpCisgICAgICAgIGZvbnQtPmRl
cmVmKCk7Cit9CisKKy8vIHJlZigpIHRoZSBNZW1vcnlBY3RpdmF0ZWRGb250IGNvcnJlc3BvbmRp
bmcgdG8gdGhlIGdpdmVuIEFUU0ZvbnRSZWYuICBJZiBubworLy8gY29ycmVzcG9uZGluZyBNZW1v
cnlBY3RpdmF0ZWRGb250IG9iamVjdCBleGlzdHMsIG5vIGFjdGlvbiBpcyBwZXJmb3JtZWQuCit2
b2lkIHJlZk1lbW9yeUZvbnQoQVRTRm9udFJlZiBmb250UmVmKQoreworICAgIGlmIChmb250UmVm
ID09IGtBVFNGb250UmVmVW5zcGVjaWZpZWQpCisgICAgICAgIHJldHVybjsKKyAgICBNZW1vcnlB
Y3RpdmF0ZWRGb250KiBmb250ID0gZm9udENhY2hlQnlBY3R1YWxGb250UmVmKCkuZ2V0KGZvbnRS
ZWYpOworICAgIGlmIChmb250KQorICAgICAgICBmb250LT5yZWYoKTsKK30KKworLy8gR2l2ZW4g
YW4gTlNGb250LCB0cnkgdG8gbG9hZCBhIHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgZm9udCBpbnRv
IHRoZSBjZ0ZvbnQKKy8vIHBhcmFtZXRlci4gIElmIGxvYWRpbmcgaXMgYmxvY2tlZCBieSB0aGUg
c2FuZGJveCwgdGhlIGZvbnQgbWF5IGJlIGxvYWRlZAorLy8gY3Jvc3MtcHJvY2Vzcy4KKy8vIElm
IHNhbmRib3ggbG9hZGluZyBhbHNvIGZhaWxzLCBhIGZhbGxiYWNrIGZvbnQgaXMgbG9hZGVkLgor
Ly8KKy8vIENvbnNpZGVyYXRpb25zOgorLy8gKiBjZ0ZvbnQgbXVzdCBiZSBDRlJlbGVhcygpZWQg
YnkgdGhlIGNhbGxlciB3aGVuIGRvbmUuCisvLyAKKy8vIFBhcmFtZXRlcnM6CisvLyAqIG5zRm9u
dCAtIFRoZSBmb250IHdlIHdpc2ggdG8gbG9hZC4KKy8vICogZm9udFNpemUgLSBwb2ludCBzaXpl
IG9mIHRoZSBmb250IHdlIHdpc2ggdG8gbG9hZC4KKy8vICogb3V0TlNGb250IC0gVGhlIGZvbnQg
dGhhdCB3YXMgYWN0dWFsbHkgbG9hZGVkLCBtYXkgYmUgZGlmZmVyZW50IGZyb20gbnNGb250Cisv
LyAgIGlmIGEgZmFsbGJhY2sgZm9udCB3YXMgdXNlZC4KKy8vICogY2dGb250IC0gb24gb3V0cHV0
IHRoaXMgY29udGFpbnMgdGhlIENHRm9udFJlZiBjb3JyZXNwb25kaW5nIHRvIHRoZSBOU0ZvbnQK
Ky8vICAgdGhhdCB3YXMgcGlja2VkIGluIHRoZSBlbmQuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNp
YmxlIGZvciBjYWxsaW5nCisvLyAgIENGUmVsZWFzZSgpIG9uIHRoaXMgcGFyYW1ldGVyIHdoZW4g
ZG9uZSB3aXRoIGl0LgorLy8gKiBmb250SUQgLSBvbiBvdXRwdXQsIHRoZSBJRCBjb3JyZXNwb25k
aW5nIHRvIG5zRm9udC4KK3ZvaWQgbG9hZEZvbnQoTlNGb250KiBuc0ZvbnQsIGZsb2F0IGZvbnRT
aXplLCBOU0ZvbnQqJiBvdXROU0ZvbnQsIENHRm9udFJlZiYgY2dGb250LCBBVFNVRm9udElEJiBm
b250SUQpCit7CisgICAgb3V0TlNGb250ID0gbnNGb250OworICAgIGNnRm9udCA9IENURm9udENv
cHlHcmFwaGljc0ZvbnQodG9DVEZvbnRSZWYob3V0TlNGb250KSwgMCk7CisgICAgTWVtb3J5QWN0
aXZhdGVkRm9udCogbWVtRm9udCA9IDA7CisgICAgaWYgKE91dE9mUHJvY2Vzc0ZvbnRMb2FkaW5n
RW5hYmxlZCgpICYmIG91dE5TRm9udCAmJiBjZ0ZvbnQgJiYgaXNMYXN0UmVzb3J0Rm9udChjZ0Zv
bnQpKSB7CisgICAgICAgIC8vIFJlbGVhc2Ugb2xkIENHRm9udFJlZiBzaW5jZSBpdCBwb2ludHMg
YXQgdGhlIExhc3RSZXNvcnQgZm9udCB3aGljaCB3ZSBkb24ndCB3YW50LgorICAgICAgICBDRlJl
bGVhc2UoY2dGb250KTsKKyAgICAgICAgY2dGb250ID0gMDsKKyAgICAgICAgCisgICAgICAgIC8v
IEZvbnQgbG9hZGluZyB3YXMgYmxvY2tlZCBieSB0aGUgU2FuZGJveC4KKyAgICAgICAgbWVtRm9u
dCA9IGxvYWRGb250RnJvbUJyb3dzZXJQcm9jZXNzKG91dE5TRm9udCk7CisgICAgICAgIGlmICht
ZW1Gb250KSB7CisgICAgICAgICAgICBjZ0ZvbnQgPSBtZW1Gb250LT5jZ0ZvbnQoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gTmVlZCB0byBhZGQgYW4gZXh0cmEgcmV0YWluIHNvIG91
dHB1dCBzZW1hbnRpY3Mgb2YgdGhpcyBmdW5jdGlvbgorICAgICAgICAgICAgLy8gYXJlIGNvbnNp
c3RlbnQuCisgICAgICAgICAgICBDRlJldGFpbihjZ0ZvbnQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gSWYgd2Ugc3RpbGwgY2FuJ3QgbG9hZCB0aGUgZm9udCwgdGhlbiByZXR1
cm4gVGltZXMsCisgICAgICAgICAgICAvLyByYXRoZXIgdGhhbiB0aGUgTGFzdFJlc29ydCBmb250
LgorICAgICAgICAgICAgb3V0TlNGb250ID0gW05TRm9udCBmb250V2l0aE5hbWU6QCJUaW1lcyIg
c2l6ZTpmb250U2l6ZV07CisgICAgICAgICAgICBjZ0ZvbnQgPSBDVEZvbnRDb3B5R3JhcGhpY3NG
b250KHRvQ1RGb250UmVmKG91dE5TRm9udCksIDApOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIGlmIChtZW1Gb250KSB7CisgICAgICAgIGZvbnRJRCA9IG1lbUZvbnQtPmF0c0ZvbnRSZWYo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb250SUQgPSBDVEZvbnRHZXRQbGF0Zm9ybUZvbnQo
dG9DVEZvbnRSZWYob3V0TlNGb250KSwgMCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZQor
Ly8gRW5kIENocm9taXVtIENoYW5nZQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKE5TRm9udCAqbnNGb250LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2Js
aXF1ZSkKKyAgICA6IG1fc3ludGhldGljQm9sZChzeW50aGV0aWNCb2xkKQorICAgICwgbV9zeW50
aGV0aWNPYmxpcXVlKHN5bnRoZXRpY09ibGlxdWUpCisgICAgLCBtX2ZvbnQobnNGb250KQorI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCisgICAgLCBtX2lzQ29s
b3JCaXRtYXBGb250KENURm9udEdldFN5bWJvbGljVHJhaXRzKHRvQ1RGb250UmVmKG5zRm9udCkp
ICYga0NURm9udENvbG9yR2x5cGhzVHJhaXQpCisjZWxzZQorICAgICwgbV9pc0NvbG9yQml0bWFw
Rm9udChmYWxzZSkKKyNlbmRpZgoreworLy8gU3RhcnQgQ2hyb21pdW0gQ2hhbmdlCisgICAgbV9z
aXplID0gbnNGb250ID8gW25zRm9udCBwb2ludFNpemVdIDogMC4wZjsKKyAgICBDR0ZvbnRSZWYg
Y2dGb250ID0gMDsKKyAgICBOU0ZvbnQqIGxvYWRlZEZvbnQgPSAwOworICAgIGxvYWRGb250KG5z
Rm9udCwgbV9zaXplLCBsb2FkZWRGb250LCBjZ0ZvbnQsIG1fYXRzdUZvbnRJRCk7CisgICAgbV9m
b250ID0gbG9hZGVkRm9udDsKKyAgICBpZiAobV9mb250KQorICAgICAgICBDRlJldGFpbihtX2Zv
bnQpOworICAgIG1fY2dGb250LmFkb3B0Q0YoY2dGb250KTsKKy8vIEVuZCBDaHJvbWl1bSBDaGFu
Z2UKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBmKQoreworICAgIG1fZm9udCA9IGYubV9mb250ICYmIGYubV9mb250ICE9IHJl
aW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSA/IGNvbnN0X2Nhc3Q8TlNGb250ICo+KHN0YXRp
Y19jYXN0PGNvbnN0IE5TRm9udCAqPihDRlJldGFpbihmLm1fZm9udCkpKSA6IGYubV9mb250Owor
CisgICAgbV9zeW50aGV0aWNCb2xkID0gZi5tX3N5bnRoZXRpY0JvbGQ7CisgICAgbV9zeW50aGV0
aWNPYmxpcXVlID0gZi5tX3N5bnRoZXRpY09ibGlxdWU7CisgICAgbV9zaXplID0gZi5tX3NpemU7
CisgICAgbV9jZ0ZvbnQgPSBmLm1fY2dGb250OworICAgIG1fYXRzdUZvbnRJRCA9IGYubV9hdHN1
Rm9udElEOworICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBmLm1faXNDb2xvckJpdG1hcEZvbnQ7
CisgICAgLy8gU3RhcnQgQ2hyb21pdW0gQ2hhbmdlCisgICAgcmVmTWVtb3J5Rm9udChtX2F0c3VG
b250SUQpOworICAgIC8vIEVuZCBDaHJvbWl1bSBDaGFuZ2UKK30KKworRm9udFBsYXRmb3JtRGF0
YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJl
aW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKKyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7
CisKKyAgICAvLyBTdGFydCBDaHJvbWl1bSBDaGFuZ2UKKyAgICBkZXJlZk1lbW9yeUZvbnQobV9h
dHN1Rm9udElEKTsKKyAgICAvLyBFbmQgQ2hyb21pdW0gQ2hhbmdlCit9CisKK2NvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBmKQoreworICAgIG1fc3ludGhldGljQm9sZCA9IGYubV9zeW50aGV0aWNCb2xkOwor
ICAgIG1fc3ludGhldGljT2JsaXF1ZSA9IGYubV9zeW50aGV0aWNPYmxpcXVlOworICAgIG1fc2l6
ZSA9IGYubV9zaXplOworICAgIG1fY2dGb250ID0gZi5tX2NnRm9udDsKKyAgICBtX2F0c3VGb250
SUQgPSBmLm1fYXRzdUZvbnRJRDsKKyAgICBpZiAobV9mb250ID09IGYubV9mb250KQorICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgaWYgKGYubV9mb250ICYmIGYubV9mb250ICE9IHJlaW50ZXJw
cmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkKKyAgICAgICAgQ0ZSZXRhaW4oZi5tX2ZvbnQpOworICAg
IGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8TlNGb250ICo+KC0xKSkK
KyAgICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisgICAgbV9mb250ID0gZi5tX2ZvbnQ7CisgICAg
bV9pc0NvbG9yQml0bWFwRm9udCA9IGYubV9pc0NvbG9yQml0bWFwRm9udDsKKyAgICAvLyBTdGFy
dCBDaHJvbWl1bSBDaGFuZ2UKKyAgICByZWZNZW1vcnlGb250KG1fYXRzdUZvbnRJRCk7CisgICAg
Ly8gRW5kIENocm9taXVtIENoYW5nZQorICAgIHJldHVybiAqdGhpczsKK30KKwordm9pZCBGb250
UGxhdGZvcm1EYXRhOjpzZXRGb250KE5TRm9udCAqZm9udCkKK3sKKyAgICBpZiAobV9mb250ID09
IGZvbnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZm9udCkKKyAgICAgICAgQ0ZSZXRhaW4o
Zm9udCk7CisgICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxOU0Zv
bnQgKj4oLTEpKQorICAgICAgICBDRlJlbGVhc2UobV9mb250KTsKKyAgICBtX2ZvbnQgPSBmb250
OworICAgIG1fc2l6ZSA9IGZvbnQgPyBbZm9udCBwb2ludFNpemVdIDogMC4wZjsKKyAgICAKKyAg
ICAvLyBTdGFydCBDaHJvbWl1bSBDaGFuZ2UKKyAgICBDR0ZvbnRSZWYgY2dGb250ID0gMDsKKyAg
ICBOU0ZvbnQqIGxvYWRlZEZvbnQgPSAwOworICAgIGxvYWRGb250KG1fZm9udCwgbV9zaXplLCBs
b2FkZWRGb250LCBjZ0ZvbnQsIG1fYXRzdUZvbnRJRCk7CisgICAgCisgICAgLy8gSWYgbG9hZEZv
bnQgcmVwbGFjZWQgbV9mb250IHdpdGggYSBmYWxsYmFjayBmb250LCB0aGVuIHJlbGVhc2UgdGhl
CisgICAgLy8gcHJldmlvdXMgZm9udCB0byBjb3VudGVyIHRoZSByZXRhaW4gYWJvdmUuIFRoZW4g
cmV0YWluIHRoZSBuZXcgZm9udC4KKyAgICBpZiAobG9hZGVkRm9udCAhPSBtX2ZvbnQpIHsKKyAg
ICAgICAgQ0ZSZWxlYXNlKG1fZm9udCk7CisgICAgICAgIG1fZm9udCA9IGxvYWRlZEZvbnQ7Cisg
ICAgICAgIENGUmV0YWluKG1fZm9udCk7CisgICAgfQorICAgIG1fY2dGb250LmFkb3B0Q0YoY2dG
b250KTsKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorICAg
IG1faXNDb2xvckJpdG1hcEZvbnQgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyh0b0NURm9udFJl
ZihtX2ZvbnQpKSAmIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0OworI2VuZGlmCisgICAgLy8gRW5k
IENocm9taXVtIENoYW5nZQorfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OnJvdW5kc0dseXBo
QWR2YW5jZXMoKSBjb25zdAoreworICAgIHJldHVybiBbbV9mb250IHJlbmRlcmluZ01vZGVdID09
IE5TRm9udEFudGlhbGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU7Cit9CisK
K2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6YWxsb3dzTGlnYXR1cmVzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIVtbbV9mb250IGNvdmVyZWRDaGFyYWN0ZXJTZXRdIGNoYXJhY3RlcklzTWVtYmVyOidh
J107Cit9CisKKyNpZm5kZWYgTkRFQlVHCitTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2dGb250RGVzY3Jp
cHRpb24oQWRvcHRDRiwgQ0ZDb3B5RGVzY3JpcHRpb24oY2dGb250KCkpKTsKKyAgICByZXR1cm4g
U3RyaW5nKGNnRm9udERlc2NyaXB0aW9uLmdldCgpKSArICIgIiArIFN0cmluZzo6bnVtYmVyKG1f
c2l6ZSkgKyAobV9zeW50aGV0aWNCb2xkID8gIiBzeW50aGV0aWMgYm9sZCIgOiAiIikgKyAobV9z
eW50aGV0aWNPYmxpcXVlID8gIiBzeW50aGV0aWMgb2JsaXF1ZSIgOiAiIik7Cit9CisjZW5kaWYK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>