<?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>140246</bug_id>
          
          <creation_ts>2015-01-08 07:57:20 -0800</creation_ts>
          <short_desc>Remove the concept of &quot;retained&quot; font</short_desc>
          <delta_ts>2015-01-08 15:58:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>mmaxfield</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1059809</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 07:57:20 -0800</bug_when>
    <thetext>FontCache currently maintains a secondary refcount for SimpleFontDatas. This is used to decide whether a font is considered inactive and is eligible for purging. This is confusing and complex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059829</commentid>
    <comment_count>1</comment_count>
      <attachid>244263</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 08:56:23 -0800</bug_when>
    <thetext>Created attachment 244263
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059833</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-08 09:01:00 -0800</bug_when>
    <thetext>Attachment 244263 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/FontCache.cpp:434:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059838</commentid>
    <comment_count>3</comment_count>
      <attachid>244263</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-08 09:14:00 -0800</bug_when>
    <thetext>Comment on attachment 244263
patch

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

Great change.

Build errors:

../../Source/WebCore/platform/graphics/FontCache.cpp: In member function &apos;void WebCore::FontCache::purgeInactiveFontData(int)&apos;:
../../Source/WebCore/platform/graphics/FontCache.cpp:459:47: error: &apos;gFontDataCache&apos; was not declared in this scope
../../Source/WebCore/platform/graphics/FontCache.cpp:461:100: error: &apos;class WTF::RefPtr&lt;WebCore::SimpleFontData&gt;&apos; has no member named &apos;first&apos;

&gt; Source/WebCore/css/CSSFontFaceSource.cpp:147
&gt; +        RefPtr&lt;SimpleFontData&gt; placeholderFont = fontCache().lastResortFallbackFont(fontDescription);

Why RefPtr instead of Ref? Also, normally I like to use auto for things like this. I’m kind of surprised that this function returns a smart pointer at all. Can it return a raw reference instead, or am I missing the point in some major way in asking that?

&gt; Source/WebCore/css/CSSFontFaceSource.cpp:149
&gt; +        RefPtr&lt;SimpleFontData&gt; placeholderFontCopyInLoadingState = SimpleFontData::create(placeholderFont-&gt;platformData(), true, true);
&gt; +        return placeholderFontCopyInLoadingState;

No need for this extra local variable. Just return it, I think.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:150
&gt; +    return cache.get();

I keep forgetting this in code I write myself, but we don’t need the &quot;.get()&quot; here!

&gt; Source/WebCore/platform/graphics/FontCache.cpp:151
&gt; +};

Stray semicolon here.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:367
&gt; +    return cache.get();

Same .get() comment.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:382
&gt; +PassRefPtr&lt;SimpleFontData&gt; FontCache::fontForFamily(const FontDescription&amp; fontDescription, const AtomicString&amp; family, bool checkingAlternateName)

Return type should be RefPtr&lt;SimpleFontData&gt;.

If we are touching a function like this we should be changing the return value from PassRefPtr to RefPtr. We don’t need the Pass types at all for return values or arguments. For arguments it should be Ref&lt;X&gt;&amp;&amp; or RefPtr&lt;X&gt;&amp;&amp;, and for return values, Ref&lt;X&gt; or RefPtr&lt;X&gt;.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:391
&gt; +PassRefPtr&lt;SimpleFontData&gt; FontCache::fontDataForPlatformData(const FontPlatformData&amp; platformData)

Return type should be Ref&lt;SimpleFontData&gt;.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:492
&gt; +PassRefPtr&lt;FontData&gt; FontCache::fontForFamilyAtIndex(const FontDescription&amp; description, int&amp; familyIndex, FontSelector* fontSelector)

Return type should be RefPtr&lt;FontData&gt;.

&gt; Source/WebCore/platform/graphics/FontGlyphs.h:51
&gt; -    ~FontGlyphs() { releaseFontData(); }
&gt; +    ~FontGlyphs();

Why do we have this explicitly defined? Can’t we just let the compiler generate this? Or maybe that creates unwanted inlining? Or a need to include more headers here? If it doesn’t, then I suggest deleting this completely.

&gt; Source/WebCore/platform/graphics/mac/FontCacheMac.mm:427
&gt; -PassRefPtr&lt;SimpleFontData&gt; FontCache::getLastResortFallbackFont(const FontDescription&amp; fontDescription, ShouldRetain shouldRetain)
&gt; +PassRefPtr&lt;SimpleFontData&gt; FontCache::lastResortFallbackFont(const FontDescription&amp; fontDescription)

Return type should be RefPtr&lt;SimpleFontData&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059843</commentid>
    <comment_count>4</comment_count>
      <attachid>244263</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 09:31:06 -0800</bug_when>
    <thetext>Comment on attachment 244263
patch

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

&gt;&gt; Source/WebCore/platform/graphics/FontGlyphs.h:51
&gt;&gt; +    ~FontGlyphs();
&gt; 
&gt; Why do we have this explicitly defined? Can’t we just let the compiler generate this? Or maybe that creates unwanted inlining? Or a need to include more headers here? If it doesn’t, then I suggest deleting this completely.

To make it possible clean up includes mostly though I didn&apos;t do any of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059897</commentid>
    <comment_count>5</comment_count>
      <attachid>244278</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 11:52:36 -0800</bug_when>
    <thetext>Created attachment 244278
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059900</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 11:59:17 -0800</bug_when>
    <thetext>&gt; I keep forgetting this in code I write myself, but we don’t need the
&gt; &quot;.get()&quot; here!

Maybe there shouldn&apos;t be get().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059908</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 12:11:15 -0800</bug_when>
    <thetext>&gt; Why RefPtr instead of Ref? Also, normally I like to use auto for things like
&gt; this. I’m kind of surprised that this function returns a smart pointer at
&gt; all. Can it return a raw reference instead, or am I missing the point in
&gt; some major way in asking that?

Yeah, made it Ref. From the lifetime management perspective I think it would better to head to direction where we don&apos;t rely on the &quot;cache&quot; keeping things alive and so shouldn&apos;t be handing out any raw pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059926</commentid>
    <comment_count>8</comment_count>
      <attachid>244287</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 13:05:23 -0800</bug_when>
    <thetext>Created attachment 244287
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059935</commentid>
    <comment_count>9</comment_count>
      <attachid>244289</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 13:23:28 -0800</bug_when>
    <thetext>Created attachment 244289
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059957</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 14:30:41 -0800</bug_when>
    <thetext>https://trac.webkit.org/r178133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059968</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-01-08 15:13:28 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; https://trac.webkit.org/r178133

It broke the Apple Windows build - https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/66379</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059994</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-08 15:58:41 -0800</bug_when>
    <thetext>https://trac.webkit.org/r178142 fixed windows</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244263</attachid>
            <date>2015-01-08 08:56:23 -0800</date>
            <delta_ts>2015-01-08 11:52:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>font-cache-purge-3.patch</filename>
            <type>text/plain</type>
            <size>44532</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODExMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE1LTAxLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIGNvbmNlcHQg
b2YgInJldGFpbmVkIiBmb250CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDAyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGb250Q2FjaGUgY3VycmVudGx5IG1haW50YWlucyBhIHNlY29uZGFyeSByZWZj
b3VudCBmb3IgU2ltcGxlRm9udERhdGFzLiBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIK
KyAgICAgICAgYSBmb250IGlzIGNvbnNpZGVyZWQgaW5hY3RpdmUgYW5kIGlzIGVsaWdpYmxlIGZv
ciBwdXJnaW5nLiBUaGlzIGlzIGNvbmZ1c2luZyBhbmQgY29tcGxleC4KKworICAgICAgICBUaGUg
bmV3IHNjaGVtZSBpbiB0aGlzIHBhdGNoIGNvbnNpZGVycyBmb250cyBpbiBmb250IGNhY2hlIGlu
YWN0aXZlIGlmIHRoZWlyIHJlZmNvdW50IGlzIDEgKHRoZXkgYXJlCisgICAgICAgIG93bmVkIGJ5
IHRoZSBjYWNoZSBvbmx5KS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlIGFuZCBnaXZlcyBzaW1p
bGFycyBiZWhhdmlvci4gVHlwZXMgdGhhdCAicmV0YWluZWQiIHRoZQorICAgICAgICBmb250IHRo
aXMgd2F5IGFsd2F5cyBhbHNvIHJlZiBpdC4KKworICAgICAgICBXZSBhbHNvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgcmVtb3ZpbmcgZm9udHMgdGhhdCB3b3VsZG4ndCBnZXQgZGVsZXRlZCBmcm9tIHRo
ZSBjYWNoZS4KKworICAgICAgICBBbHNvIG1vZGVybml6ZWQgc29tZSBuYW1lcyBhbmQgY29kZS4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERh
dGEpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250U2VsZWN0b3I6OmdldEZhbGxiYWNrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmb250UGxhdGZvcm1EYXRh
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZEZvbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmZvbnREYXRhRm9yUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpmb250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3Rp
dmVGb250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZh
bWlseUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZhbGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZWxl
YXNlRm9udERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRG
b250RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250R2x5cGhzOjpGb250R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRHbHlwaHM6On5Gb250R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJl
YWxpemVGb250RGF0YUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJlbGVhc2VG
b250RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6fkZvbnRHbHlwaHMpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW06CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21w
bGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1G
YWxsYmFja0ZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzaW1p
bGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKwogMjAxNS0wMS0wOCAg
R3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBTZXBl
cmF0ZSB1cGRhdGVCYWNraW5nU3RvcmUgZnJvbSBmbHVzaENvbXBvc2l0aW5nU3RhdGUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDggQEAgX19aTjdXZWJD
b3JlMTBDcmVkZW50aWFsMjhlbmNvZGluZ1JlcXVpcgogX19aTjdXZWJDb3JlMTBDcmVkZW50aWFs
QzFFUDE1TlNVUkxDcmVkZW50aWFsCiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSSzdDR1Bv
aW50CiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2ludEUKLV9fWk43V2Vi
Q29yZTEwRm9udEdseXBoczE1cmVsZWFzZUZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTEwRm9udEds
eXBoczE3cmVhbGl6ZUZvbnREYXRhQXRFUktOU18xNUZvbnREZXNjcmlwdGlvbkVqCitfX1pON1dl
YkNvcmUxMEZvbnRHbHlwaHNEMUV2CiBfX1pON1dlYkNvcmUxMEpTRG9jdW1lbnQ2c19pbmZvRQog
X19aTjdXZWJDb3JlMTBKU0RvY3VtZW50OXRvV3JhcHBlZEVOM0pTQzdKU1ZhbHVlRQogX19aTjdX
ZWJDb3JlMTBMYXlvdXRSZWN0NXNjYWxlRWYKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIF9fWk43V2Vi
Q29yZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05T
XzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2CiBfX1pON1dl
YkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKLV9fWk43V2ViQ29yZTlGb250Q2FjaGUx
N2dldENhY2hlZEZvbnREYXRhRVJLTlNfMTVGb250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWlj
U3RyaW5nRWJOUzBfMTJTaG91bGRSZXRhaW5FCitfX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250
Rm9yRmFtaWx5RVJLTlNfMTVGb250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWljU3RyaW5nRWIK
IF9fWk43V2ViQ29yZTlGb250Q2FjaGUyMWluYWN0aXZlRm9udERhdGFDb3VudEV2CiBfX1pON1dl
YkNvcmU5Rm9udENhY2hlMjFwdXJnZUluYWN0aXZlRm9udERhdGFFaQogX19aTjdXZWJDb3JlOUZv
bnRDYWNoZTI5cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWRFdgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDksNyArMTA5LDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2VTbwog
ICAgICkgewogICAgICAgICAvLyBXZSdyZSBsb2NhbC4gSnVzdCByZXR1cm4gYSBTaW1wbGVGb250
RGF0YSBmcm9tIHRoZSBub3JtYWwgY2FjaGUuCiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
Y2hlY2sgYWx0ZXJuYXRlIGZvbnQgZmFtaWx5IG5hbWVzIGhlcmUsIHNvIHBhc3MgdHJ1ZSBhcyB0
aGUgY2hlY2tpbmdBbHRlcm5hdGVOYW1lIHBhcmFtZXRlci4KLSAgICAgICAgcmV0dXJuIGZvbnRD
YWNoZSgpLmdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHRydWUp
OworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sIG1fc3RyaW5nLCB0cnVlKTsKICAgICB9CiAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIG1h
cHBpbmcgaW4gb3VyIEZvbnREYXRhIGNhY2hlLgpAQCAtMTQ0LDEwICsxNDQsOSBAQCBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgICAgIC8vIGFuZCB0aGUgbG9h
ZGVyIG1heSBpbnZva2UgYXJiaXRyYXJ5IGRlbGVnYXRlIG9yIGV2ZW50IGhhbmRsZXIgY29kZS4K
ICAgICAgICAgZm9udFNlbGVjdG9yLT5iZWdpbkxvYWRpbmdGb250U29vbihtX2ZvbnQuZ2V0KCkp
OwogCi0gICAgICAgIC8vIFRoaXMgdGVtcG9yYXJ5IGZvbnQgaXMgbm90IHJldGFpbmVkIGFuZCBz
aG91bGQgbm90IGJlIHJldHVybmVkLgotICAgICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBm
b250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLSAgICAgICAgU2ltcGxlRm9udERhdGEqIHRlbXBvcmFy
eUZvbnQgPSBmb250Q2FjaGUoKS5nZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQo
Zm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgZm9udERhdGEgPSBTaW1wbGVGb250RGF0YTo6Y3Jl
YXRlKHRlbXBvcmFyeUZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnQgPSBmb250Q2FjaGUoKS5sYXN0
UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gcGxhY2Vob2xkZXJGb250Q29weUluTG9hZGluZ1N0YXRlID0gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZShwbGFjZWhvbGRlckZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVl
KTsKKyAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyRm9udENvcHlJbkxvYWRpbmdTdGF0ZTsKICAg
ICB9CiAKICAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzgsNyArNDc4
LDcgQEAgUGFzc1JlZlB0cjxGb250RGF0YT4gQ1NTRm9udFNlbGVjdG9yOjpnZQogICAgIGlmICgh
ZmFjZSkgewogICAgICAgICBpZiAoIXJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QpCiAgICAgICAg
ICAgICBmYW1pbHlGb3JMb29rdXAgPSByZXNvbHZlR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBm
b250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwotICAgICAgICByZXR1cm4gZm9udENhY2hlKCku
Z2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlGb3JMb29rdXApOworICAg
ICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZh
bWlseUZvckxvb2t1cCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhY2UtPmdldEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbik7CkBAIC02MzQsNyArNjM0LDcgQEAgUGFzc1JlZlB0cjxGb250RGF0YT4g
Q1NTRm9udFNlbGVjdG9yOjpnZQogICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5mb250
RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBy
ZXR1cm4gZm9udENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzZXR0
aW5ncy0+cGljdG9ncmFwaEZvbnRGYW1pbHkoKSk7CisgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmZv
bnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBzZXR0aW5ncy0+cGljdG9ncmFwaEZvbnRGYW1p
bHkoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
VGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtMTQzLDcgKzE0NCwxMSBA
QCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzIDogCiAKIHR5cGVkZWYgSGFz
aE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZv
cm1EYXRhPiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5VHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2FjaGU7CiAKLXN0YXRpYyBGb250UGxhdGZv
cm1EYXRhQ2FjaGUqIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUgPSAwOworc3RhdGljIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZSYgZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Rm9udFBsYXRmb3JtRGF0YUNhY2hlPiBjYWNoZTsKKyAgICByZXR1cm4gY2Fj
aGUuZ2V0KCk7Cit9OwogCiBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lRXF1YWxJZ25vcmluZ0Nhc2Uo
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBjb25zdCBjaGFyKiByZWZlcmVuY2UsIHVu
c2lnbmVkIGxlbmd0aCkKIHsKQEAgLTIzNCwxNiArMjM5LDE3IEBAIEZvbnRQbGF0Zm9ybURhdGEq
IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm8KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5h
bWUgPSBwYXNzZWRGYW1pbHlOYW1lOwogI2VuZGlmCiAKLSAgICBpZiAoIWdGb250UGxhdGZvcm1E
YXRhQ2FjaGUpIHsKLSAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSA9IG5ldyBGb250UGxh
dGZvcm1EYXRhQ2FjaGU7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAgaWYgKCFp
bml0aWFsaXplZCkgewogICAgICAgICBwbGF0Zm9ybUluaXQoKTsKKyAgICAgICAgaW5pdGlhbGl6
ZWQgPSB0cnVlOwogICAgIH0KIAogICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZmFt
aWx5TmFtZSwgZm9udERlc2NyaXB0aW9uKTsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6
QWRkUmVzdWx0IHJlc3VsdCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmFkZChrZXksIG51bGxw
dHIpOwotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSByZXN1bHQuaXRl
cmF0b3I7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5hZGQoa2V5LCBudWxscHRyKTsKKyAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yOworICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBpdC0+dmFsdWUgPSBjcmVhdGVGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAKICAgICAgICAgaWYg
KCFpdC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJuYXRlTmFtZSkgewpAQCAtMjU0LDggKzI2MCw4
IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm8KICAgICAgICAgICAg
ICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9
IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBhbHRlcm5hdGVOYW1l
LCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0
YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKICAgICAgICAgICAg
ICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKCkuCi0gICAgICAgICAgICAgICAgaXQgPSBnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlLT5maW5kKGtleSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IGdGb250
UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpKTsKKyAgICAgICAgICAgICAgICBpdCA9IGZvbnRQbGF0
Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0g
Zm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZW5kKCkpOwogICAgICAgICAgICAgICAgIGlmIChmb250
UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSkKICAgICAgICAgICAgICAgICAgICAgaXQtPnZh
bHVlID0gc3RkOjptYWtlX3VuaXF1ZTxGb250UGxhdGZvcm1EYXRhPigqZm9udFBsYXRmb3JtRGF0
YUZvckFsdGVybmF0ZU5hbWUpOwogICAgICAgICAgICAgfQpAQCAtMzUzLDkgKzM1OSwxNCBAQCBz
dHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuCiAgICAgfQogfTsKIAotdHlw
ZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHN0ZDo6cGFpcjxSZWZQdHI8U2ltcGxlRm9u
dERhdGE+LCB1bnNpZ25lZD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5
VHJhaXRzPiBGb250RGF0YUNhY2hlOwordHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEs
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNh
Y2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOworCitzdGF0aWMgRm9udERhdGFDYWNoZSYgY2Fj
aGVkRm9udHMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGF0YUNhY2hlPiBj
YWNoZTsKKyAgICByZXR1cm4gY2FjaGUuZ2V0KCk7Cit9CiAKLXN0YXRpYyBGb250RGF0YUNhY2hl
KiBnRm9udERhdGFDYWNoZSA9IDA7CiAKICNpZiBQTEFURk9STShJT1MpCiBjb25zdCBpbnQgY01h
eEluYWN0aXZlRm9udERhdGEgPSAxMjA7CkBAIC0zNjgsMTQ1ICszNzksNzMgQEAgY29uc3QgaW50
IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogY29uc3QgaW50IGNNYXhVbmRlck1lbW9y
eVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwogY29uc3QgaW50IGNUYXJnZXRVbmRlck1l
bW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1zdGF0aWMgTGlzdEhhc2hTZXQ8
UmVmUHRyPFNpbXBsZUZvbnREYXRhPj4qIGdJbmFjdGl2ZUZvbnREYXRhID0gMDsKLQotUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWlu
KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAgICAgRm9udFBsYXRmb3Jt
RGF0YSogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3Jp
cHRpb24sIGZhbWlseSwgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKTsKICAgICBpZiAoIXBsYXRmb3Jt
RGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEo
cGxhdGZvcm1EYXRhLCBzaG91bGRSZXRhaW4pOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEq
IHBsYXRmb3JtRGF0YSwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKLXsKLSAgICBpZiAoIXBs
YXRmb3JtRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgaWYgKHNob3VsZFJldGFpbiA9PSBEb05vdFJldGFpbikKLSAgICAgICAgQVNTRVJUKG1fcHVy
Z2VQcmV2ZW50Q291bnQpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgRm9udExv
Y2tlciBmb250TG9ja2VyOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKCFnRm9udERhdGFDYWNoZSkg
ewotICAgICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAgICAgICBn
SW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+
PjsKLSAgICB9Ci0KLSAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnRm9udERh
dGFDYWNoZS0+ZmluZCgqcGxhdGZvcm1EYXRhKTsKLSAgICBpZiAocmVzdWx0ID09IGdGb250RGF0
YUNhY2hlLT5lbmQoKSkgewotICAgICAgICBzdGQ6OnBhaXI8UmVmUHRyPFNpbXBsZUZvbnREYXRh
PiwgdW5zaWduZWQ+IG5ld1ZhbHVlKFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnBsYXRmb3JtRGF0
YSksIHNob3VsZFJldGFpbiA9PSBSZXRhaW4gPyAxIDogMCk7Ci0gICAgICAgIGdGb250RGF0YUNh
Y2hlLT5zZXQoKnBsYXRmb3JtRGF0YSwgbmV3VmFsdWUpOwotICAgICAgICBpZiAoc2hvdWxkUmV0
YWluID09IERvTm90UmV0YWluKQotICAgICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChu
ZXdWYWx1ZS5maXJzdCk7Ci0gICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdC5yZWxlYXNlKCk7
Ci0gICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghcmVzdWx0LmdldCgp
LT52YWx1ZS5zZWNvbmQpIHsKLSAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRhLT5jb250
YWlucyhyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KSk7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhLT5yZW1vdmUocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7Ci0gICAgfQotCi0gICAgaWYg
KHNob3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vj
b25kKys7Ci0gICAgZWxzZSBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7Ci0gICAg
ICAgIC8vIElmIHNob3VsZFJldGFpbiBpcyBEb05vdFJldGFpbiBhbmQgY291bnQgaXMgMCwgd2Ug
d2FudCB0byByZW1vdmUgdGhlIGZvbnREYXRhIGZyb20gCi0gICAgICAgIC8vIGdJbmFjdGl2ZUZv
bnREYXRhIChhYm92ZSkgYW5kIHJlLWFkZCBoZXJlIHRvIHVwZGF0ZSBMUlUgcG9zaXRpb24uCi0g
ICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7CisgICAgcmV0
dXJuIGZvbnREYXRhRm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwogfQogCi1TaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCitQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnREYXRhRm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKLSAgICByZXR1cm4gZ2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChmb250RGVzY3JpcHRpb24sIERvTm90UmV0YWluKS5sZWFrUmVmKCk7Ci19Ci0K
LXZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQotewotICAgIEFTU0VSVChnRm9udERhdGFDYWNoZSk7Ci0gICAgQVNTRVJUKCFmb250
RGF0YS0+aXNDdXN0b21Gb250KCkpOwotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRMb2Nr
ZXIgZm9udExvY2tlcjsKICNlbmRpZgogICAgIAotICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9y
IGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKLSAg
ICBBU1NFUlQoaXQgIT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKLSAgICBpZiAoaXQgPT0gZ0Zv
bnREYXRhQ2FjaGUtPmVuZCgpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBhZGRSZXN1bHQg
PSBjYWNoZWRGb250cygpLmFkZChwbGF0Zm9ybURhdGEsIG51bGxwdHIpOworICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFNp
bXBsZUZvbnREYXRhOjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKIAotICAgIEFTU0VSVChpdC0+dmFs
dWUuc2Vjb25kKTsKLSAgICBpZiAoIS0taXQtPnZhbHVlLnNlY29uZCkKLSAgICAgICAgZ0luYWN0
aXZlRm9udERhdGEtPmFkZChpdC0+dmFsdWUuZmlyc3QpOworICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwogfQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhSWZOZWVkZWQoKQogewogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IG1lbW9yeVBy
ZXNzdXJlSGFuZGxlcigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpOwogICAgIGludCBpbmFjdGl2
ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01heFVuZGVyTWVtb3J5UHJl
c3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERhdGE7Ci0gICAgaW50IHRh
cmdldEZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY1RhcmdldFVuZGVyTWVt
b3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY1RhcmdldEluYWN0aXZlRm9udERhdGE7CiAK
LSAgICBpZiAoZ0luYWN0aXZlRm9udERhdGEgJiYgIW1fcHVyZ2VQcmV2ZW50Q291bnQgJiYgZ0lu
YWN0aXZlRm9udERhdGEtPnNpemUoKSA+IGluYWN0aXZlRm9udERhdGFMaW1pdCkKLSAgICAgICAg
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGdJbmFjdGl2ZUZvbnREYXRhLT5zaXplKCkgLSB0YXJnZXRG
b250RGF0YUxpbWl0KTsKKyAgICBpZiAoY2FjaGVkRm9udHMoKS5zaXplKCkgPCBpbmFjdGl2ZUZv
bnREYXRhTGltaXQpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQgaW5hY3RpdmVDb3VudCA9IGlu
YWN0aXZlRm9udERhdGFDb3VudCgpOworICAgIGlmIChpbmFjdGl2ZUNvdW50IDwgaW5hY3RpdmVG
b250RGF0YUxpbWl0KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgdGFyZ2V0Rm9udERhdGFM
aW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUlu
YWN0aXZlRm9udERhdGEgOiBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YTsKKyAgICBwdXJnZUluYWN0
aXZlRm9udERhdGEoaW5hY3RpdmVDb3VudCAtIHRhcmdldEZvbnREYXRhTGltaXQpOwogfQogCi12
b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCkKK3ZvaWQgRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IHB1cmdlQ291bnQpCiB7CiAgICAgcHJ1
bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRHbHlwaHNDYWNoZSgpOwogCi0gICAgaWYgKCFn
SW5hY3RpdmVGb250RGF0YSB8fCBtX3B1cmdlUHJldmVudENvdW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1B1cmdpbmc7ICAvLyBHdWFyZCBhZ2FpbnN0IHJlZW50cnkg
d2hlbiBlLmcuIGEgZGVsZXRlZCBGb250RGF0YSByZWxlYXNlcyBpdHMgc21hbGwgY2FwcyBGb250
RGF0YS4KLSAgICBpZiAoaXNQdXJnaW5nKQorICAgIGlmIChtX3B1cmdlUHJldmVudENvdW50KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpc1B1cmdpbmcgPSB0cnVlOwotCiAjaWYgUExBVEZPUk0o
SU9TKQogICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKICNlbmRpZgogCi0gICAgVmVjdG9yPFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4sIDIwPiBmb250RGF0YVRvRGVsZXRlOwotICAgIExpc3RIYXNo
U2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+OjppdGVyYXRvciBlbmQgPSBnSW5hY3RpdmVGb250
RGF0YS0+ZW5kKCk7Ci0gICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPj46Oml0
ZXJhdG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAmJiBpdCAhPSBlbmQ7ICsraXQsICsraSkgewotICAgICAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+JiBmb250RGF0YSA9ICppdC5nZXQoKTsKLSAgICAgICAgZ0ZvbnREYXRh
Q2FjaGUtPnJlbW92ZShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwotICAgICAgICAvLyBXZSBz
aG91bGQgbm90IGRlbGV0ZSBTaW1wbGVGb250RGF0YSBoZXJlIGJlY2F1c2UgZGVsZXRpb24gY2Fu
IG1vZGlmeSBnSW5hY3RpdmVGb250RGF0YS4gU2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hh
bmdlc2V0LzQ0MDExCi0gICAgICAgIGZvbnREYXRhVG9EZWxldGUuYXBwZW5kKGZvbnREYXRhKTsK
LSAgICB9Ci0KLSAgICBpZiAoaXQgPT0gZW5kKSB7Ci0gICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0
aGluZwotICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+Y2xlYXIoKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBnSW5h
Y3RpdmVGb250RGF0YS0+cmVtb3ZlKGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigpKTsKLSAgICB9
Ci0KLSAgICBmb250RGF0YVRvRGVsZXRlLmNsZWFyKCk7Ci0KLSAgICBpZiAoZ0ZvbnRQbGF0Zm9y
bURhdGFDYWNoZSkgewotICAgICAgICBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiBr
ZXlzVG9SZW1vdmU7Ci0gICAgICAgIGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPnNpemUoKSk7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhRW5kID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNo
ZS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBw
bGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5iZWdpbigpOyBwbGF0Zm9ybURh
dGEgIT0gcGxhdGZvcm1EYXRhRW5kOyArK3BsYXRmb3JtRGF0YSkgewotICAgICAgICAgICAgaWYg
KHBsYXRmb3JtRGF0YS0+dmFsdWUgJiYgIWdGb250RGF0YUNhY2hlLT5jb250YWlucygqcGxhdGZv
cm1EYXRhLT52YWx1ZSkpCi0gICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChwbGF0
Zm9ybURhdGEtPmtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBrZXlz
VG9SZW1vdmVDb3VudCA9IGtleXNUb1JlbW92ZS5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwga2V5c1RvUmVtb3ZlQ291bnQ7ICsraSkKLSAgICAgICAgICAgIGdGb250UGxh
dGZvcm1EYXRhQ2FjaGUtPnJlbW92ZShrZXlzVG9SZW1vdmVbaV0pOworICAgIFZlY3RvcjxSZWZQ
dHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udHNUb0RlbGV0ZTsKKyAgICBmb3IgKGF1dG8mIGZv
bnQgOiBjYWNoZWRGb250cygpLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghZm9udC0+aGFzT25l
UmVmKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9udHNUb0RlbGV0ZS5hcHBl
bmQoc3RkOjptb3ZlKGZvbnQpKTsKKyAgICAgICAgaWYgKCEtLXB1cmdlQ291bnQpCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZm9yIChhdXRvJiBmb250IDogZm9udHNUb0RlbGV0ZSkK
KyAgICAgICAgY2FjaGVkRm9udHMoKS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOworCisg
ICAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4ga2V5c1RvUmVtb3ZlOworICAgIGtl
eXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgp
LnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgp
KSB7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZSAmJiAhY2FjaGVkRm9udHMoKS5jb250YWlucygq
ZW50cnkudmFsdWUpKQorICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkp
OwogICAgIH0KKyAgICBmb3IgKGF1dG8ga2V5IDoga2V5c1RvUmVtb3ZlKQorICAgICAgICBmb250
UGxhdGZvcm1EYXRhQ2FjaGUoKS5yZW1vdmUoa2V5KTsKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKICAgICBGb250VmVydGljYWxEYXRhQ2FjaGUmIGZvbnRWZXJ0aWNhbERhdGFDYWNo
ZSA9IGZvbnRWZXJ0aWNhbERhdGFDYWNoZUluc3RhbmNlKCk7CkBAIC01MzMsMjUgKzQ3MiwyNCBA
QCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAgICAgICAgICAgICBm
b250VmVydGljYWxEYXRhQ2FjaGUudGFrZShrZXlzVG9SZW1vdmVbaV0pOwogICAgIH0KICNlbmRp
ZgotCi0gICAgaXNQdXJnaW5nID0gZmFsc2U7CiB9CiAKIHNpemVfdCBGb250Q2FjaGU6OmZvbnRE
YXRhQ291bnQoKQogewotICAgIGlmIChnRm9udERhdGFDYWNoZSkKLSAgICAgICAgcmV0dXJuIGdG
b250RGF0YUNhY2hlLT5zaXplKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNhY2hlZEZv
bnRzKCkuc2l6ZSgpOwogfQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnREYXRhQ291
bnQoKQogewotICAgIGlmIChnSW5hY3RpdmVGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIGdJbmFj
dGl2ZUZvbnREYXRhLT5zaXplKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgY291bnQg
PSAwOworICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKKyAg
ICAgICAgaWYgKGZvbnQtPmhhc09uZVJlZigpKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICB9
CisgICAgcmV0dXJuIGNvdW50OwogfQogCi1QYXNzUmVmUHRyPEZvbnREYXRhPiBGb250Q2FjaGU6
OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGludCYgZmFt
aWx5SW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQorUGFzc1JlZlB0cjxGb250RGF0
YT4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5QXRJbmRleChjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rv
cikKIHsKICAgICBBU1NFUlQoZmFtaWx5SW5kZXggIT0gY0FsbEZhbWlsaWVzU2Nhbm5lZCk7CiAg
ICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQ7CkBAIC01NjUsNyArNTAzLDcgQEAgUGFzc1JlZlB0
cjxGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RAogICAgICAgICBpZiAoZm9udFNlbGVjdG9y
KQogICAgICAgICAgICAgcmVzdWx0ID0gZm9udFNlbGVjdG9yLT5nZXRGb250RGF0YShkZXNjcmlw
dGlvbiwgZmFtaWx5KTsKICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXN1bHQg
PSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5KTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGZhbWlseSk7CiAgICAgfQogICAgIGlm
IChmYW1pbHlJbmRleCA9PSBmYW1pbHlDb3VudCkKICAgICAgICAgZmFtaWx5SW5kZXggPSBjQWxs
RmFtaWxpZXNTY2FubmVkOwpAQCAtNTg4LDcgKzUyNiw3IEBAIFBhc3NSZWZQdHI8Rm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0Rm9udEQKICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNl
KCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gU3RpbGwgbm8gcmVzdWx0LiAgSGFuZCBiYWNrIG91
ciBsYXN0IHJlc29ydCBmYWxsYmFjayBmb250LgotICAgICAgICByZXN1bHQgPSBnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0gbGFzdFJlc29y
dEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbik7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOwogfQpAQCAtNjIyLDEyICs1NjAsMTEgQEAgdW5zaWduZWQgc2hvcnQgRm9udENhY2hl
OjpnZW5lcmF0aW9uKCkKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKICAgICBpZiAo
IWdDbGllbnRzKSB7Ci0gICAgICAgIEFTU0VSVCghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSk7Cisg
ICAgICAgIEFTU0VSVChmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5pc0VtcHR5KCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGdGb250UGxhdGZvcm1EYXRhQ2FjaGUpCi0gICAg
ICAgIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmNsZWFyKCk7CisgICAgZm9udFBsYXRmb3JtRGF0
YUNhY2hlKCkuY2xlYXIoKTsKICAgICBpbnZhbGlkYXRlRm9udEdseXBoc0NhY2hlKCk7CiAKICAg
ICBnR2VuZXJhdGlvbisrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTAgKzExMSw3
IEBAIGNsYXNzIEZvbnRDYWNoZSB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIEZvbnRDYWNoZSYgZm9u
dENhY2hlKCk7CiAKLSAgICBlbnVtIFNob3VsZFJldGFpbiB7IFJldGFpbiwgRG9Ob3RSZXRhaW4g
fTsKLQotICAgIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciopOwotICAgIHZvaWQgcmVs
ZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAgUGFzc1JlZlB0cjxGb250
RGF0YT4gZm9udEZvckZhbWlseUF0SW5kZXgoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgaW50JiBm
YW1pbHlJbmRleCwgRm9udFNlbGVjdG9yKik7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBs
ZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCiAgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CkBAIC0xMzQsOSArMTMxLDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
LCBWZWN0b3I8dW5zaWduZWQ+Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlLCBT
aG91bGRSZXRhaW4gPSBSZXRhaW4pOwotICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKLSAgICBTaW1wbGVGb250RGF0YSogZ2V0Tm9u
UmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnRGb3JGYW1p
bHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVj
a2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKIAogICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciopOwogICAgIHZvaWQg
cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciopOwpAQCAtMTkxLDcgKzE4Nyw3IEBAIHByaXZhdGU6
CiAgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEqLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOworICAgIFdFQkNPUkVfRVhQT1JUIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhRm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKTsKIAogICAgIC8vIERvbid0IHB1cmdlIGlmIHRoaXMgY291bnQgaXMg
PiAwOwogICAgIGludCBtX3B1cmdlUHJldmVudENvdW50OwpAQCAtMTk5LDcgKzE5NSw3IEBAIHBy
aXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgZnJpZW5kIGNsYXNzIENvbXBsZXhUZXh0
Q29udHJvbGxlcjsKICNlbmRpZgotICAgIGZyaWVuZCBjbGFzcyBTaW1wbGVGb250RGF0YTsgLy8g
Rm9yIGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqKQorICAgIGZyaWVu
ZCBjbGFzcyBTaW1wbGVGb250RGF0YTsKICAgICBmcmllbmQgY2xhc3MgRm9udEdseXBoczsKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlw
aHMuY3BwCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250R2x5cGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTggKzU5LDEyIEBAIEZv
bnRHbHlwaHM6OkZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRmb3IKICAgICAsIG1fbG9hZGluZ0N1
c3RvbUZvbnRzKGZhbHNlKQogICAgICwgbV9pc0ZvclBsYXRmb3JtRm9udCh0cnVlKQogewotICAg
IFJlZlB0cjxGb250RGF0YT4gZm9udERhdGEgPSBmb250Q2FjaGUoKS5nZXRDYWNoZWRGb250RGF0
YSgmcGxhdGZvcm1EYXRhKTsKKyAgICBSZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhID0gZm9udENh
Y2hlKCkuZm9udERhdGFGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKTsKICAgICBtX3JlYWxp
emVkRm9udERhdGEuYXBwZW5kKGZvbnREYXRhLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgRm9udEds
eXBoczo6cmVsZWFzZUZvbnREYXRhKCkKK0ZvbnRHbHlwaHM6On5Gb250R2x5cGhzKCkKIHsKLSAg
ICB1bnNpZ25lZCBudW1Gb250cyA9IG1fcmVhbGl6ZWRGb250RGF0YS5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZvbnRzOyArK2kpIHsKLSAgICAgICAgaWYgKG1fcmVh
bGl6ZWRGb250RGF0YVtpXS0+aXNDdXN0b21Gb250KCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgZm9udENhY2hlKCkucmVsZWFzZUZvbnREYXRhKGRvd25jYXN0PFNpbXBsZUZvbnRE
YXRhPihtX3JlYWxpemVkRm9udERhdGFbaV0uZ2V0KCkpKTsKLSAgICB9CiB9CiAKIHZvaWQgRm9u
dEdseXBoczo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKQEAgLTExMywxMCArMTA3LDEwIEBAIGNvbnN0IEZvbnREYXRhKiBGb250R2x5cGhzOjpyZWFs
aXplRm9udEQKIAogICAgIC8vIEFzayB0aGUgZm9udCBjYWNoZSBmb3IgdGhlIGZvbnQgZGF0YS4K
ICAgICAvLyBXZSBhcmUgb2J0YWluaW5nIHRoaXMgZm9udCBmb3IgdGhlIGZpcnN0IHRpbWUuIFdl
IGtlZXAgdHJhY2sgb2YgdGhlIGZhbWlsaWVzIHdlJ3ZlIGxvb2tlZCBhdCBiZWZvcmUKLSAgICAv
LyBpbiB8bV9mYW1pbHlJbmRleHwsIHNvIHRoYXQgd2UgbmV2ZXIgc2NhbiB0aGUgc2FtZSBzcG90
IGluIHRoZSBsaXN0IHR3aWNlLiBnZXRGb250RGF0YSB3aWxsIGFkanVzdCBvdXIKKyAgICAvLyBp
biB8bV9mYW1pbHlJbmRleHwsIHNvIHRoYXQgd2UgbmV2ZXIgc2NhbiB0aGUgc2FtZSBzcG90IGlu
IHRoZSBsaXN0IHR3aWNlLiBmb250Rm9yRmFtaWx5QXRJbmRleCB3aWxsIGFkanVzdCBvdXIKICAg
ICAvLyB8bV9mYW1pbHlJbmRleHwgYXMgaXQgc2NhbnMgZm9yIHRoZSByaWdodCBmb250IHRvIG1h
a2UuCiAgICAgQVNTRVJUKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24p
OwotICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0ID0gZm9udENhY2hlKCkuZ2V0Rm9udERhdGEo
ZGVzY3JpcHRpb24sIG1fZmFtaWx5SW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICBS
ZWZQdHI8Rm9udERhdGE+IHJlc3VsdCA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1pbHlBdEluZGV4
KGRlc2NyaXB0aW9uLCBtX2ZhbWlseUluZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CiAgICAg
aWYgKHJlc3VsdCkgewogICAgICAgICBtX3JlYWxpemVkRm9udERhdGEuYXBwZW5kKHJlc3VsdCk7
CiAgICAgICAgIGlmIChyZXN1bHQtPmlzTG9hZGluZygpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAkocmV2aXNpb24gMTc4MDM1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEZvbnRHbHlwaHM+
IGNyZWF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMoZm9udFNlbGVjdG9yKSk7IH0KICAgICBzdGF0aWMgUmVm
PEZvbnRHbHlwaHM+IGNyZWF0ZUZvclBsYXRmb3JtRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBocyhwbGF0Zm9y
bURhdGEpKTsgfQogCi0gICAgfkZvbnRHbHlwaHMoKSB7IHJlbGVhc2VGb250RGF0YSgpOyB9Cisg
ICAgfkZvbnRHbHlwaHMoKTsKIAogICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzRm9yUGxhdGZvcm1Gb250OyB9CiAKQEAgLTc3LDggKzc3LDYgQEAgcHJpdmF0
ZToKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsKICAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsK
ICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBGb250RGF0YVZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrTGV2ZWwpOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWxlYXNlRm9udERhdGEoKTsKICAgICAKICAgICBWZWN0
b3I8UmVmUHRyPEZvbnREYXRhPiwgMT4gbV9yZWFsaXplZEZvbnREYXRhOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3Bw
CShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw5ICsxNTQsNiBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAKIFNpbXBsZUZvbnREYXRhOjp+
U2ltcGxlRm9udERhdGEoKQogewotICAgIGlmICghaXNTVkdGb250KCkpCi0gICAgICAgIHBsYXRm
b3JtRGVzdHJveSgpOwotCiAgICAgcmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwogICAgIHZvaWQgcGxhdGZvcm1H
bHlwaEluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAgIHZvaWQg
cGxhdGZvcm1EZXN0cm95KCk7CiAKICAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRh
RnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAxNzgwMzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDEwICsxMDEsNiBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluCiAgICAgaW5pdENoYXJXaWR0aHMo
KTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQog
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRl
U2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZs
b2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0YS5zY2Fs
ZWRGb250KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Zv
bnRDYWNoZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvRm9udENhY2hlSU9TLm1tCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC05NCw3ICs5NCw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6
Z2UKICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZvbnQoc3Vic3RpdHV0ZUZvbnQuZ2V0
KCksIHBsYXRmb3JtRGF0YS5zaXplKCksIHBsYXRmb3JtRGF0YS5pc1ByaW50ZXJGb250KCksIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YS5tX29yaWVudGF0aW9u
KTsKICAgICBhbHRlcm5hdGVGb250Lm1faXNFbW9qaSA9IENURm9udElzQXBwbGVDb2xvckVtb2pp
KHN1YnN0aXR1dGVGb250LmdldCgpKTsKIAotICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgm
YWx0ZXJuYXRlRm9udCwgRG9Ob3RSZXRhaW4pOworICAgIHJldHVybiBmb250RGF0YUZvclBsYXRm
b3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAogZW51bSBjbGFzcyBMYW5ndWFnZVNwZWNpZmlj
Rm9udCB7CkBAIC0xOTgsOCArMTk4LDEyIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c3kKIHsKICAgICAvLyBVbmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24g
aVBob25lIGlzIEFyaWFsIFVuaWNvZGUsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNw
ZWNpZmljIGdseXBocyBsaWtlIEY4RkYuCiAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBG
YWxsYmFjayBmb250IGluIHRoaXMgY2FzZS4KLSAgICBpZiAobGVuZ3RoID4gMCAmJiByZXF1aXJl
c0N1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycykpCi0gICAgICAgIHJldHVybiBnZXRDYWNo
ZWRGb250RGF0YShnZXRDdXN0b21GYWxsYmFja0ZvbnQoKmNoYXJhY3RlcnMsIGRlc2NyaXB0aW9u
KSwgRG9Ob3RSZXRhaW4pOworICAgIGlmIChsZW5ndGggPiAwICYmIHJlcXVpcmVzQ3VzdG9tRmFs
bGJhY2tGb250KCpjaGFyYWN0ZXJzKSkgeworICAgICAgICBhdXRvKiBmYWxsYmFjayA9IGdldEN1
c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycywgZGVzY3JpcHRpb24pOworICAgICAgICBpZiAo
IWZhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBm
b250RGF0YUZvclBsYXRmb3JtRGF0YSgqZmFsbGJhY2spOworICAgIH0KIAogICAgIFVDaGFyMzIg
YyA9ICpjaGFyYWN0ZXJzOwogICAgIGlmIChsZW5ndGggPiAxICYmIFUxNl9JU19MRUFEKGMpICYm
IFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzWzFdKSkKQEAgLTI5NCw3ICsyOTgsNyBAQCBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3By
ZWZlcnJlZENKS0ZvbnRdIDogKmNqa1BsYWluW3ByZWZlcnJlZENKS0ZvbnRdLCBmYWxzZSwgRG9O
b3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRb
cHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsK
ICAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250ID0gdHJ1ZTsKICAgICAgICAgaWYgKHNpbXBs
ZUZvbnREYXRhKSB7CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKQEAgLTMwNiwzMSAr
MzEwLDMxIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3kKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICh1c2VTZWNvbmRhcnlGb250KQotICAgICAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpj
amtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAg
ICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250
XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S29yZWFuOiB7CiAgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhblBsYWluKCJBcHBsZVNE
R290aGljTmVvLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwog
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3JlYW5Cb2xkKCJB
cHBsZVNER290aGljTmVvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3JlYW5Cb2xkIDog
a29yZWFuUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBrb3JlYW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkN5cmlsbGljOiB7
CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljUGxh
aW4oIkhlbHZldGljYU5ldWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
ICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxsaWNCb2xk
KCJIZWx2ZXRpY2FOZXVlLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlv
biwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQg
OiBjeXJpbGxpY1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250
RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3Jp
cHRpb24ud2VpZ2h0KCkpID8gY3lyaWxsaWNCb2xkIDogY3lyaWxsaWNQbGFpbiwgZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6QXJh
YmljOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFyYWJp
Y1BsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwog
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhcmFiaWNCb2xkKCJH
ZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAg
ICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9sZCA6IGFyYWJpY1Bs
YWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0
KCkpID8gYXJhYmljQm9sZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpIZWJyZXc6IHsKICAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gaGVicmV3UGxhaW4oIkFyaWFsSGVi
cmV3IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJld0JvbGQoIkFyaWFsSGVicmV3LUJv
bGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9s
ZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNl
LCBEb05vdFJldGFpbik7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJy
ZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkluZGljOiB7CkBAIC0zODYsMzYgKzM5MCwzNiBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5CiAgICAgICAgIGlmIChp
bmRpY1BhZ2VPcmRlckluZGV4IDwgKHNpemVvZihpbmRpY1VuaWNvZGVQYWdlRm9udHMpIC8gc2l6
ZW9mKEF0b21pY1N0cmluZyopKSkgewogICAgICAgICAgICAgQXRvbWljU3RyaW5nKiBpbmRpY0Zv
bnRTdHJpbmcgPSBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGluZGlj
VW5pY29kZVBhZ2VGb250c0JvbGRbaW5kaWNQYWdlT3JkZXJJbmRleF0gOiBpbmRpY1VuaWNvZGVQ
YWdlRm9udHNbaW5kaWNQYWdlT3JkZXJJbmRleF07CiAgICAgICAgICAgICBpZiAoaW5kaWNGb250
U3RyaW5nKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERh
dGEoZGVzY3JpcHRpb24sICppbmRpY0ZvbnRTdHJpbmcsIGZhbHNlLCBEb05vdFJldGFpbik7Cisg
ICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCAqaW5kaWNGb250U3RyaW5nLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRoYWk6IHsKICAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGhhaVBsYWluKCJUaG9uYnVyaSIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aGFpQm9sZCgiVGhvbmJ1cmktQm9sZCIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdl
dENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9u
LndlaWdodCgpKSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwor
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQgOiB0aGFpUGxhaW4s
IGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZp
Y0ZvbnQ6OlRpYmV0YW46IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gdGliZXRhblBsYWluKCJLYWlsYXNhIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRp
YmV0YW5Cb2xkKCJLYWlsYXNhLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlw
dGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9s
ZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgc2ltcGxlRm9u
dERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2Ny
aXB0aW9uLndlaWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDYW5h
ZGlhbkFib3JpZ2luYWxTeWxsYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGNhc0JvbGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERh
dGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8g
Y2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVG
b250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVz
Y3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpLaG1lcjogewog
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBraG1lcigiS2htZXJT
YW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBz
aW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBraG1lciwgZmFs
c2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBraG1lciwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6TGFvOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGxhbygiTGFvU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRG
b250RGF0YShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBz
aW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGxhbywgZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDogewpAQCAtNDI2LDExICs0MzAsMTEg
QEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeQogICAgICAgICAgICAg
ICAgIHVzZUVtb2ppRm9udCA9IENGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKGFw
cGxlQ29sb3JFbW9qaUNoYXJhY3RlclNldCgpLCBjKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
dXNlRW1vamlGb250KQotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250
RGF0YShkZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwor
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBh
cHBsZUNvbG9yRW1vamksIGZhbHNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBSZXRh
aW5QdHI8Q1RGb250UmVmPiBmYWxsYmFja0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvckNo
YXJhY3RlcnMob3JpZ2luYWxGb250RGF0YS0+Z2V0Q1RGb250KCksIGNoYXJhY3RlcnMsIGxlbmd0
aCwgbnVsbHB0cikpOwogICAgICAgICAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm91
bmRGb250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKGZhbGxiYWNrRm9u
dC5nZXQoKSkpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlLCBEb05vdFJldGFp
bik7CisgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBmb3VuZEZvbnROYW1lLmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDM5LDcgKzQ0Myw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6c3kKICAgICBpZiAoc2ltcGxlRm9udERhdGEpCiAgICAgICAgIHJldHVy
biBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CiAKLSAgICByZXR1cm4gZ2V0Tm9uUmV0YWluZWRM
YXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gbGFzdFJlc29y
dEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbik7CiB9CiAKIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbikKQEAgLTQ1Nyw3ICs0NjEsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OnNpCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVy
KCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2Fj
aGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGNvdXJpZXIpOworICAgICAgICAgICAgc2ltcGxlRm9u
dERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTQ2NSw3ICs0NjksNyBAQCBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lk
YUdyYW5kZSkpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERh
dGEoZGVzY3JpcHRpb24sIHZlcmRhbmEpOworICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCB2ZXJkYW5hKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAKQEAgLTQ3NywxNiArNDgxLDE2IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6c2kKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhc2ltcGxl
Rm9udERhdGE7ICsraikKICAgICAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMoKm1hdGNoV29y
ZHNbal0sIGZhbHNlKSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hl
ZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgICAgICAgICAgICAgIHNpbXBsZUZv
bnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKICAgICB9CiAKICAg
ICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4p
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZmFsbGJhY2tGb250RmFtaWx5KCIuUGhv
bmVGYWxsYmFjayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJl
dHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udEZhbWls
eSwgZmFsc2UsIHNob3VsZFJldGFpbik7CisgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZm9udERl
c2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRGYW1pbHksIGZhbHNlKTsKIH0KIAogRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDdXN0b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyIGMsIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1t
CShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIHNjYWxl
ZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFp
dCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7CiAgICAgICAgIHNj
YWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0
YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwog
Ci0gICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9u
dERhdGEpOworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udERhdGFGb3JQbGF0Zm9ybURh
dGEoc2NhbGVkRm9udERhdGEpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24gMTc4MDM1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsMTMgKzI3NiwxMyBAQCB2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZSht
X2ZvbnQucHJpbWFyeUZvbnREYXRhKCksIGNwLCBzdHJpbmdMb2NhdGlvbiArIHJ1blJhbmdlLmxv
Y2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKG1fZm9udC5m
b250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0KCksIGZhbHNlLCBGb250Q2FjaGU6OkRvTm90
UmV0YWluKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250Q2Fj
aGUoKS5mb250Rm9yRmFtaWx5KG1fZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0
KCksIGZhbHNlKS5nZXQoKTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgICAgICAg
ICAvLyBDb3JlIFRleHQgbWF5IGhhdmUgdXNlZCBhIGZvbnQgdGhhdCBpcyBub3Qga25vd24gdG8g
TlNGb250TWFuYWdlci4gSW4gdGhhdCBjYXNlLCBmYWxsIGJhY2sgb24KICAgICAgICAgICAgICAg
ICAgICAgLy8gdXNpbmcgdGhlIGZvbnQgYXMgcmV0dXJuZWQsIGV2ZW4gdGhvdWdoIGl0IG1heSBu
b3QgaGF2ZSB0aGUgYmVzdCBOU0ZvbnRSZW5kZXJpbmdNb2RlLgogICAgICAgICAgICAgICAgICAg
ICBpZiAoIXJ1bkZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBGb250UGxhdGZv
cm1EYXRhIHJ1bkZvbnRQbGF0Zm9ybURhdGEoKE5TRm9udCAqKXJ1bkZvbnQsIENURm9udEdldFNp
emUocnVuRm9udCksIG1fZm9udC5mb250RGVzY3JpcHRpb24oKS51c2VQcmludGVyRm9udCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9udENhY2hlKCkuZ2V0Q2Fj
aGVkRm9udERhdGEoJnJ1bkZvbnRQbGF0Zm9ybURhdGEsIEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4p
LmdldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250Q2FjaGUo
KS5mb250RGF0YUZvclBsYXRmb3JtRGF0YShydW5Gb250UGxhdGZvcm1EYXRhKS5nZXQoKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IEp1c3QgYXNzZXJ0IGZvciBub3csIHVudGlsIHdlIGNhbiBkZXZpc2UgYSBiZXR0ZXIgZml4IHRo
YXQgd29ya3Mgd2l0aCBpT1MuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE3ODAzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQwMiw3ICs0MDIsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OnN5CiAgICAgICAgICFpc1BsYXRmb3JtRm9udCAmJiAodHJhaXRzICYgTlNGb250
SXRhbGljVHJhaXQpICYmICEoc3Vic3RpdHV0ZUZvbnRUcmFpdHMgJiBOU0ZvbnRJdGFsaWNUcmFp
dCksCiAgICAgICAgIHBsYXRmb3JtRGF0YS5tX29yaWVudGF0aW9uKTsKIAotICAgIHJldHVybiBn
ZXRDYWNoZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udCwgRG9Ob3RSZXRhaW4pOworICAgIHJldHVy
biBmb250RGF0YUZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAogUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpAQCAtNDE5LDE4ICs0MTksMTggQEAgUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzaQogICAgICAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBnZWV6YVN0ciwgKCJHZWV6YSBQcm8i
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgMyAmJiAhc2ltcGxlRm9udERhdGE7ICsraikKICAgICAgICAgICAgIGlmIChm
YW1pbHkuY29udGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNlKSkKLSAgICAgICAgICAgICAgICBz
aW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBnZWV6YVN0cik7
CisgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0
aW9uLCBnZWV6YVN0cik7CiAgICAgfQogICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
U2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCB0aW1lc1N0ciwgKCJUaW1lcyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKTsKIAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21l
aG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNr
CiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFu
Z2luZyBhbnkgcHJlZnMuCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0
YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlLCBz
aG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEg
PSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlKTsKICAgICBp
ZiAoc2ltcGxlRm9udERhdGEpCiAgICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNl
KCk7CiAKQEAgLTQzOSw3ICs0MzksNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdlCiAgICAgLy8gZ3VhcmFudGVlZCB0byBiZSB0aGVyZSwgYWNjb3JkaW5nIHRvIE5h
dGhhbiBUYXlsb3IuIFRoaXMgaXMgZ29vZCBlbm91Z2gKICAgICAvLyB0byBhdm9pZCBhIGNyYXNo
IGF0IGxlYXN0LgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIGx1Y2lkYUdyYW5kZVN0ciwgKCJMdWNpZGEgR3JhbmRlIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIGx1Y2lkYUdyYW5kZVN0ciwgZmFsc2UsIHNob3VsZFJldGFpbik7CisgICAgcmV0
dXJuIGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBsdWNpZGFHcmFuZGVTdHIsIGZhbHNl
KTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI2MiwxOCArMjYyLDYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJ
bgogfQogI2VuZGlmIC8vIFVTRShBUFBLSVQpCiAKLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKCFpc0N1c3RvbUZvbnQoKSAmJiBtX2Rlcml2ZWRGb250
RGF0YSkgewotICAgICAgICAvLyBUaGVzZSBjb21lIGZyb20gdGhlIGNhY2hlLgotICAgICAgICBp
ZiAobV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgICAgIGZvbnRDYWNoZSgp
LnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpKTsKLQot
ICAgICAgICBpZiAobV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKLSAgICAgICAgICAg
IGZvbnRDYWNoZSgpLnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNN
YXJrLmdldCgpKTsKLSAgICB9Ci19Ci0KICNpZiAhUExBVEZPUk0oSU9TKQogUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFj
dG9yKSBjb25zdAogewpAQCAtMzA0LDggKzI5Miw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXQKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNCb2xk
ID0gKGZvbnRUcmFpdHMgJiBOU0JvbGRGb250TWFzaykgJiYgIShzY2FsZWRGb250VHJhaXRzICYg
TlNCb2xkRm9udE1hc2spOwogICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlx
dWUgPSAoZm9udFRyYWl0cyAmIE5TSXRhbGljRm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0
cyAmIE5TSXRhbGljRm9udE1hc2spOwogCi0gICAgICAgIC8vIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybURlc3Ryb3koKSB0YWtlcyBjYXJlIG9mIG5vdCBkZWxldGluZyB0aGUgY2FjaGVkIGZvbnQg
ZGF0YSB0d2ljZS4KLSAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRh
KCZzY2FsZWRGb250RGF0YSk7CisgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250RGF0YUZv
clBsYXRmb3JtRGF0YShzY2FsZWRGb250RGF0YSk7CiAgICAgfQogICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CiAK
</data>
<flag name="review"
          id="269193"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244278</attachid>
            <date>2015-01-08 11:52:36 -0800</date>
            <delta_ts>2015-01-08 13:05:23 -0800</delta_ts>
            <desc>patch2</desc>
            <filename>font-cache-purge-5.patch</filename>
            <type>text/plain</type>
            <size>51454</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODExMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE1LTAxLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIGNvbmNlcHQg
b2YgInJldGFpbmVkIiBmb250CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDAyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGb250Q2FjaGUgY3VycmVudGx5IG1haW50YWlucyBhIHNlY29uZGFyeSByZWZj
b3VudCBmb3IgU2ltcGxlRm9udERhdGFzLiBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIK
KyAgICAgICAgYSBmb250IGlzIGNvbnNpZGVyZWQgaW5hY3RpdmUgYW5kIGlzIGVsaWdpYmxlIGZv
ciBwdXJnaW5nLiBUaGlzIGlzIGNvbmZ1c2luZyBhbmQgY29tcGxleC4KKworICAgICAgICBUaGUg
bmV3IHNjaGVtZSBpbiB0aGlzIHBhdGNoIGNvbnNpZGVycyBmb250cyBpbiBmb250IGNhY2hlIGlu
YWN0aXZlIGlmIHRoZWlyIHJlZmNvdW50IGlzIDEgKHRoZXkgYXJlCisgICAgICAgIG93bmVkIGJ5
IHRoZSBjYWNoZSBvbmx5KS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlIGFuZCBnaXZlcyBzaW1p
bGFycyBiZWhhdmlvci4gVHlwZXMgdGhhdCAicmV0YWluZWQiIHRoZQorICAgICAgICBmb250IHRo
aXMgd2F5IGFsd2F5cyBhbHNvIHJlZiBpdC4KKworICAgICAgICBXZSBhbHNvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgcmVtb3ZpbmcgZm9udHMgdGhhdCB3b3VsZG4ndCBnZXQgZGVsZXRlZCBmcm9tIHRo
ZSBjYWNoZS4KKworICAgICAgICBBbHNvIG1vZGVybml6ZWQgc29tZSBuYW1lcyBhbmQgY29kZS4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERh
dGEpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250U2VsZWN0b3I6OmdldEZhbGxiYWNrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmb250UGxhdGZvcm1EYXRh
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZEZvbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmZvbnREYXRhRm9yUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpmb250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3Rp
dmVGb250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZh
bWlseUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZhbGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZWxl
YXNlRm9udERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRG
b250RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250R2x5cGhzOjpGb250R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRHbHlwaHM6On5Gb250R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJl
YWxpemVGb250RGF0YUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJlbGVhc2VG
b250RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6fkZvbnRHbHlwaHMpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW06CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21w
bGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1G
YWxsYmFja0ZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzaW1p
bGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKwogMjAxNS0wMS0wOCAg
R3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBTZXBl
cmF0ZSB1cGRhdGVCYWNraW5nU3RvcmUgZnJvbSBmbHVzaENvbXBvc2l0aW5nU3RhdGUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDggQEAgX19aTjdXZWJD
b3JlMTBDcmVkZW50aWFsMjhlbmNvZGluZ1JlcXVpcgogX19aTjdXZWJDb3JlMTBDcmVkZW50aWFs
QzFFUDE1TlNVUkxDcmVkZW50aWFsCiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSSzdDR1Bv
aW50CiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2ludEUKLV9fWk43V2Vi
Q29yZTEwRm9udEdseXBoczE1cmVsZWFzZUZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTEwRm9udEds
eXBoczE3cmVhbGl6ZUZvbnREYXRhQXRFUktOU18xNUZvbnREZXNjcmlwdGlvbkVqCitfX1pON1dl
YkNvcmUxMEZvbnRHbHlwaHNEMUV2CiBfX1pON1dlYkNvcmUxMEpTRG9jdW1lbnQ2c19pbmZvRQog
X19aTjdXZWJDb3JlMTBKU0RvY3VtZW50OXRvV3JhcHBlZEVOM0pTQzdKU1ZhbHVlRQogX19aTjdX
ZWJDb3JlMTBMYXlvdXRSZWN0NXNjYWxlRWYKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIF9fWk43V2Vi
Q29yZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05T
XzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2CiBfX1pON1dl
YkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKLV9fWk43V2ViQ29yZTlGb250Q2FjaGUx
N2dldENhY2hlZEZvbnREYXRhRVJLTlNfMTVGb250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWlj
U3RyaW5nRWJOUzBfMTJTaG91bGRSZXRhaW5FCitfX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250
Rm9yRmFtaWx5RVJLTlNfMTVGb250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWljU3RyaW5nRWIK
IF9fWk43V2ViQ29yZTlGb250Q2FjaGUyMWluYWN0aXZlRm9udERhdGFDb3VudEV2CiBfX1pON1dl
YkNvcmU5Rm9udENhY2hlMjFwdXJnZUluYWN0aXZlRm9udERhdGFFaQogX19aTjdXZWJDb3JlOUZv
bnRDYWNoZTI5cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWRFdgpAQCAtMjc5NSw3ICsyNzk1
LDYgQEAgX19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXROZXR3b3JrSW50ZXJmYQogX19aTjdXZWJD
b3JlOFNldHRpbmdzMzFzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlRWoKIF9fWk43V2Vi
Q29yZThTZXR0aW5nczM0c2V0TmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZEViCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MzOGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9u
RQotX19aTjdXZWJDb3JlOUZvbnRDYWNoZTI1Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udEVSS05T
XzE1Rm9udERlc2NyaXB0aW9uRU5TMF8xMlNob3VsZFJldGFpbkUKIF9fWk43V2ViQ29yZTlGcmFt
ZVZpZXcxN3NldFNjcm9sbFZlbG9jaXR5RWRkZGQKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMHNl
dFdhc1Njcm9sbGVkQnlVc2VyRWIKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNHJlbmRlcmVkQ2hh
cmFjdGVyc0V4Y2VlZEVqCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJj
ZS5jcHAJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgKSB7CiAgICAgICAgIC8vIFdlJ3Jl
IGxvY2FsLiBKdXN0IHJldHVybiBhIFNpbXBsZUZvbnREYXRhIGZyb20gdGhlIG5vcm1hbCBjYWNo
ZS4KICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjaGVjayBhbHRlcm5hdGUgZm9udCBmYW1p
bHkgbmFtZXMgaGVyZSwgc28gcGFzcyB0cnVlIGFzIHRoZSBjaGVja2luZ0FsdGVybmF0ZU5hbWUg
cGFyYW1ldGVyLgotICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgdHJ1ZSk7CisgICAgICAgIHJldHVybiBmb250Q2Fj
aGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHRydWUpOwogICAg
IH0KIAogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFwcGluZyBpbiBvdXIgRm9udERhdGEgY2Fj
aGUuCkBAIC0xNDQsMTAgKzE0NCw5IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0Zv
bnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBhcmJpdHJhcnkg
ZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2VsZWN0b3ItPmJl
Z2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgLy8gVGhpcyB0ZW1w
b3JhcnkgZm9udCBpcyBub3QgcmV0YWluZWQgYW5kIHNob3VsZCBub3QgYmUgcmV0dXJuZWQuCi0g
ICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwot
ICAgICAgICBTaW1wbGVGb250RGF0YSogdGVtcG9yYXJ5Rm9udCA9IGZvbnRDYWNoZSgpLmdldE5v
blJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwotICAgICAg
ICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUodGVtcG9yYXJ5Rm9udC0+cGxhdGZv
cm1EYXRhKCksIHRydWUsIHRydWUpOworICAgICAgICBSZWY8U2ltcGxlRm9udERhdGE+IHBsYWNl
aG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgUmVmPFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnRDb3B5
SW5Mb2FkaW5nU3RhdGUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYWNlaG9sZGVyRm9udC0+
cGxhdGZvcm1EYXRhKCksIHRydWUsIHRydWUpOworICAgICAgICByZXR1cm4gV1RGOjptb3ZlKHBs
YWNlaG9sZGVyRm9udENvcHlJbkxvYWRpbmdTdGF0ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZv
bnREYXRhLnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDcgKzQ3OCw3IEBAIFBhc3NSZWZQdHI8Rm9u
dERhdGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2UKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgaWYg
KCFyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQogICAgICAgICAgICAgZmFtaWx5Rm9yTG9va3Vw
ID0gcmVzb2x2ZUdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1p
bHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5Rm9yTG9va3VwKTsKKyAgICAgICAgcmV0dXJuIGZvbnRDYWNo
ZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlGb3JMb29rdXApOwogICAg
IH0KIAogICAgIHJldHVybiBmYWNlLT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24pOwpAQCAt
NjM0LDcgKzYzNCw3IEBAIFBhc3NSZWZQdHI8Rm9udERhdGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2UK
ICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+Zm9udEZhbGxiYWNrUHJlZmVyc1BpY3Rv
Z3JhcGhzKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLmdl
dENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250
RmFtaWx5KCkpOworICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJl
dmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDx3dGYv
TGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTg4LDcgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Rm9udENhY2hlJiBmb250Q2FjaGUoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250
Q2FjaGU+IGdsb2JhbEZvbnRDYWNoZTsKLSAgICByZXR1cm4gZ2xvYmFsRm9udENhY2hlLmdldCgp
OworICAgIHJldHVybiBnbG9iYWxGb250Q2FjaGU7CiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hl
KCkKQEAgLTE0Myw3ICsxNDQsMTEgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRy
YWl0cyA6IAogCiB0eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhh
c2gsIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cz4gRm9udFBsYXRmb3JtRGF0YUNhY2hl
OwogCi1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3JtRGF0YUNhY2hl
ID0gMDsKK3N0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFDYWNoZT4g
Y2FjaGU7CisgICAgcmV0dXJuIGNhY2hlOworfTsKIAogc3RhdGljIGJvb2wgZmFtaWx5TmFtZUVx
dWFsSWdub3JpbmdDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgY29uc3QgY2hh
ciogcmVmZXJlbmNlLCB1bnNpZ25lZCBsZW5ndGgpCiB7CkBAIC0yMzQsMTYgKzIzOSwxNyBAQCBG
b250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvCiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCi0gICAgaWYg
KCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlKSB7Ci0gICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2Fj
aGUgPSBuZXcgRm9udFBsYXRmb3JtRGF0YUNhY2hlOworICAgIHN0YXRpYyBib29sIGluaXRpYWxp
emVkOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgcGxhdGZvcm1Jbml0KCk7Cisg
ICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CiAKICAgICBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkga2V5KGZhbWlseU5hbWUsIGZvbnREZXNjcmlwdGlvbik7CiAKLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hl
LT5hZGQoa2V5LCBudWxscHRyKTsKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9y
IGl0ID0gcmVzdWx0Lml0ZXJhdG9yOwotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAg
IGF1dG8gYWRkUmVzdWx0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuYWRkKGtleSwgbnVsbHB0
cik7CisgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGFkZFJlc3VsdC5p
dGVyYXRvcjsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgaXQtPnZh
bHVlID0gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUp
OwogCiAgICAgICAgIGlmICghaXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5hbWUpIHsK
QEAgLTI1NCw4ICsyNjAsOCBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hl
ZEZvCiAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YUZv
ckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlv
biwgYWx0ZXJuYXRlTmFtZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRoZSBr
ZXkgaW4gdGhlIGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1heSBo
YXZlCiAgICAgICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJzaXZl
IGNhbGwgdG8gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgpLgotICAgICAgICAgICAgICAgIGl0
ID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+ZmluZChrZXkpOwotICAgICAgICAgICAgICAgIEFT
U0VSVChpdCAhPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQoKSk7CisgICAgICAgICAgICAg
ICAgaXQgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGl0ICE9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmVuZCgpKTsKICAgICAgICAg
ICAgICAgICBpZiAoZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUpCiAgICAgICAgICAg
ICAgICAgICAgIGl0LT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9udFBsYXRmb3JtRGF0YT4o
KmZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKTsKICAgICAgICAgICAgIH0KQEAgLTM1
Myw5ICszNTksMTQgQEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6Okdlbgog
ICAgIH0KIH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBzdGQ6OnBhaXI8
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiwgdW5zaWduZWQ+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwg
Rm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxG
b250UGxhdGZvcm1EYXRhLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+LCBGb250RGF0YUNhY2hlS2V5
SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKKworc3RhdGljIEZv
bnREYXRhQ2FjaGUmIGNhY2hlZEZvbnRzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Rm9udERhdGFDYWNoZT4gY2FjaGU7CisgICAgcmV0dXJuIGNhY2hlOworfQogCi1zdGF0aWMgRm9u
dERhdGFDYWNoZSogZ0ZvbnREYXRhQ2FjaGUgPSAwOwogCiAjaWYgUExBVEZPUk0oSU9TKQogY29u
c3QgaW50IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gMTIwOwpAQCAtMzY4LDE5MCArMzc5LDExNSBA
QCBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCBpbnQgY01h
eFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7CiBjb25zdCBpbnQgY1Rh
cmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gMzA7CiAKLXN0YXRpYyBM
aXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+PiogZ0luYWN0aXZlRm9udERhdGEgPSAw
OwotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUsIFNob3VsZFJldGFpbiBz
aG91bGRSZXRhaW4pCitSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewogICAgIEZvbnRQ
bGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9u
dERlc2NyaXB0aW9uLCBmYW1pbHksIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSk7CiAgICAgaWYgKCFw
bGF0Zm9ybURhdGEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShwbGF0Zm9ybURhdGEsIHNob3VsZFJldGFp
bik7CisgICAgcmV0dXJuIGZvbnREYXRhRm9yUGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURhdGEpOwog
fQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRE
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgU2hvdWxkUmV0YWluIHNo
b3VsZFJldGFpbikKK1JlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250RGF0YUZvclBs
YXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0gICAg
aWYgKCFwbGF0Zm9ybURhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIGlmIChzaG91bGRSZXRhaW4gPT0gRG9Ob3RSZXRhaW4pCi0gICAgICAgIEFTU0VS
VChtX3B1cmdlUHJldmVudENvdW50KTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IEZvbnRMb2NrZXIgZm9udExvY2tlcjsKICNlbmRpZgogICAgIAotICAgIGlmICghZ0ZvbnREYXRh
Q2FjaGUpIHsKLSAgICAgICAgZ0ZvbnREYXRhQ2FjaGUgPSBuZXcgRm9udERhdGFDYWNoZTsKLSAg
ICAgICAgZ0luYWN0aXZlRm9udERhdGEgPSBuZXcgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZv
bnREYXRhPj47Ci0gICAgfQorICAgIGF1dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5hZGQo
cGxhdGZvcm1EYXRhLCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KHBsYXRmb3JtRGF0YSk7CiAKLSAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBn
Rm9udERhdGFDYWNoZS0+ZmluZCgqcGxhdGZvcm1EYXRhKTsKLSAgICBpZiAocmVzdWx0ID09IGdG
b250RGF0YUNhY2hlLT5lbmQoKSkgewotICAgICAgICBzdGQ6OnBhaXI8UmVmUHRyPFNpbXBsZUZv
bnREYXRhPiwgdW5zaWduZWQ+IG5ld1ZhbHVlKFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnBsYXRm
b3JtRGF0YSksIHNob3VsZFJldGFpbiA9PSBSZXRhaW4gPyAxIDogMCk7Ci0gICAgICAgIGdGb250
RGF0YUNhY2hlLT5zZXQoKnBsYXRmb3JtRGF0YSwgbmV3VmFsdWUpOwotICAgICAgICBpZiAoc2hv
dWxkUmV0YWluID09IERvTm90UmV0YWluKQotICAgICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEt
PmFkZChuZXdWYWx1ZS5maXJzdCk7Ci0gICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdC5yZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgewot
ICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3VsdC5nZXQoKS0+
dmFsdWUuZmlyc3QpKTsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQu
Z2V0KCktPnZhbHVlLmZpcnN0KTsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkUmV0YWluID09IFJl
dGFpbikKLSAgICAgICAgcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQrKzsKLSAgICBlbHNlIGlm
ICghcmVzdWx0LmdldCgpLT52YWx1ZS5zZWNvbmQpIHsKLSAgICAgICAgLy8gSWYgc2hvdWxkUmV0
YWluIGlzIERvTm90UmV0YWluIGFuZCBjb3VudCBpcyAwLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUg
Zm9udERhdGEgZnJvbSAKLSAgICAgICAgLy8gZ0luYWN0aXZlRm9udERhdGEgKGFib3ZlKSBhbmQg
cmUtYWRkIGhlcmUgdG8gdXBkYXRlIExSVSBwb3NpdGlvbi4KLSAgICAgICAgZ0luYWN0aXZlRm9u
dERhdGEtPmFkZChyZXN1bHQuZ2V0KCktPnZhbHVlLmZpcnN0KTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0LmdldCgpLT52YWx1ZS5maXJzdDsKLX0KLQotU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQotewotICAgIHJldHVybiBnZXRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KGZvbnREZXNjcmlwdGlvbiwgRG9Ob3RSZXRhaW4pLmxlYWtSZWYoKTsKLX0KLQot
dm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEpCi17Ci0gICAgQVNTRVJUKGdGb250RGF0YUNhY2hlKTsKLSAgICBBU1NFUlQoIWZvbnRE
YXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgRm9udExvY2tl
ciBmb250TG9ja2VyOwotI2VuZGlmCi0gICAgCi0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3Ig
aXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwotICAg
IEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwotICAgIGlmIChpdCA9PSBnRm9u
dERhdGFDYWNoZS0+ZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChpdC0+dmFs
dWUuc2Vjb25kKTsKLSAgICBpZiAoIS0taXQtPnZhbHVlLnNlY29uZCkKLSAgICAgICAgZ0luYWN0
aXZlRm9udERhdGEtPmFkZChpdC0+dmFsdWUuZmlyc3QpOworICAgIHJldHVybiAqYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250
RGF0YUlmTmVlZGVkKCkKIHsKICAgICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBtZW1vcnlQ
cmVzc3VyZUhhbmRsZXIoKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICBpbnQgaW5hY3Rp
dmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVBy
ZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwotICAgIGludCB0
YXJnZXRGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNUYXJnZXRVbmRlck1l
bW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhOwog
Ci0gICAgaWYgKGdJbmFjdGl2ZUZvbnREYXRhICYmICFtX3B1cmdlUHJldmVudENvdW50ICYmIGdJ
bmFjdGl2ZUZvbnREYXRhLT5zaXplKCkgPiBpbmFjdGl2ZUZvbnREYXRhTGltaXQpCi0gICAgICAg
IHB1cmdlSW5hY3RpdmVGb250RGF0YShnSW5hY3RpdmVGb250RGF0YS0+c2l6ZSgpIC0gdGFyZ2V0
Rm9udERhdGFMaW1pdCk7CisgICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVG
b250RGF0YUxpbWl0KQorICAgICAgICByZXR1cm47CisgICAgaW50IGluYWN0aXZlQ291bnQgPSBp
bmFjdGl2ZUZvbnREYXRhQ291bnQoKTsKKyAgICBpZiAoaW5hY3RpdmVDb3VudCA8IGluYWN0aXZl
Rm9udERhdGFMaW1pdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHRhcmdldEZvbnREYXRh
TGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJ
bmFjdGl2ZUZvbnREYXRhIDogY1RhcmdldEluYWN0aXZlRm9udERhdGE7CisgICAgcHVyZ2VJbmFj
dGl2ZUZvbnREYXRhKGluYWN0aXZlQ291bnQgLSB0YXJnZXRGb250RGF0YUxpbWl0KTsKIH0KIAot
dm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCit2b2lkIEZv
bnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBwdXJnZUNvdW50KQogewogICAgIHBy
dW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250R2x5cGhzQ2FjaGUoKTsKIAotICAgIGlmICgh
Z0luYWN0aXZlRm9udERhdGEgfHwgbV9wdXJnZVByZXZlbnRDb3VudCkKKyAgICBpZiAobV9wdXJn
ZVByZXZlbnRDb3VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljIGJvb2wgaXNQdXJn
aW5nOyAgLy8gR3VhcmQgYWdhaW5zdCByZWVudHJ5IHdoZW4gZS5nLiBhIGRlbGV0ZWQgRm9udERh
dGEgcmVsZWFzZXMgaXRzIHNtYWxsIGNhcHMgRm9udERhdGEuCi0gICAgaWYgKGlzUHVyZ2luZykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaXNQdXJnaW5nID0gdHJ1ZTsKLQogI2lmIFBMQVRGT1JN
KElPUykKICAgICBGb250TG9ja2VyIGZvbnRMb2NrZXI7CiAjZW5kaWYKIAotICAgIFZlY3RvcjxS
ZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udERhdGFUb0RlbGV0ZTsKLSAgICBMaXN0SGFz
aFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+Pjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZlRm9u
dERhdGEtPmVuZCgpOwotICAgIExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+Ojpp
dGVyYXRvciBpdCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQgJiYgaXQgIT0gZW5kOyArK2l0LCArK2kpIHsKLSAgICAgICAgUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiYgZm9udERhdGEgPSAqaXQuZ2V0KCk7Ci0gICAgICAgIGdGb250RGF0
YUNhY2hlLT5yZW1vdmUoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKLSAgICAgICAgLy8gV2Ug
c2hvdWxkIG5vdCBkZWxldGUgU2ltcGxlRm9udERhdGEgaGVyZSBiZWNhdXNlIGRlbGV0aW9uIGNh
biBtb2RpZnkgZ0luYWN0aXZlRm9udERhdGEuIFNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC80NDAxMQotICAgICAgICBmb250RGF0YVRvRGVsZXRlLmFwcGVuZChmb250RGF0YSk7
Ci0gICAgfQotCi0gICAgaWYgKGl0ID09IGVuZCkgewotICAgICAgICAvLyBSZW1vdmVkIGV2ZXJ5
dGhpbmcKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmNsZWFyKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgZ0lu
YWN0aXZlRm9udERhdGEtPnJlbW92ZShnSW5hY3RpdmVGb250RGF0YS0+YmVnaW4oKSk7Ci0gICAg
fQotCi0gICAgZm9udERhdGFUb0RlbGV0ZS5jbGVhcigpOwotCi0gICAgaWYgKGdGb250UGxhdGZv
cm1EYXRhQ2FjaGUpIHsKLSAgICAgICAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4g
a2V5c1RvUmVtb3ZlOwotICAgICAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5zaXplKCkpOwotICAgICAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3JtRGF0YUVuZCA9IGdGb250UGxhdGZvcm1EYXRhQ2Fj
aGUtPmVuZCgpOwotICAgICAgICBmb3IgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3Ig
cGxhdGZvcm1EYXRhID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1E
YXRhICE9IHBsYXRmb3JtRGF0YUVuZDsgKytwbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgICAgIGlm
IChwbGF0Zm9ybURhdGEtPnZhbHVlICYmICFnRm9udERhdGFDYWNoZS0+Y29udGFpbnMoKnBsYXRm
b3JtRGF0YS0+dmFsdWUpKQotICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQocGxh
dGZvcm1EYXRhLT5rZXkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qga2V5
c1RvUmVtb3ZlQ291bnQgPSBrZXlzVG9SZW1vdmUuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtleXNUb1JlbW92ZUNvdW50OyArK2kpCi0gICAgICAgICAgICBnRm9udFBs
YXRmb3JtRGF0YUNhY2hlLT5yZW1vdmUoa2V5c1RvUmVtb3ZlW2ldKTsKKyAgICBWZWN0b3I8UmVm
UHRyPFNpbXBsZUZvbnREYXRhPiwgMjA+IGZvbnRzVG9EZWxldGU7CisgICAgZm9yIChhdXRvJiBm
b250IDogY2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgeworICAgICAgICBpZiAoIWZvbnQtPmhhc09u
ZVJlZigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvbnRzVG9EZWxldGUuYXBw
ZW5kKFdURjo6bW92ZShmb250KSk7CisgICAgICAgIGlmICghLS1wdXJnZUNvdW50KQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGZvciAoYXV0byYgZm9udCA6IGZvbnRzVG9EZWxldGUp
CisgICAgICAgIGNhY2hlZEZvbnRzKCkucmVtb3ZlKGZvbnQtPnBsYXRmb3JtRGF0YSgpKTsKKwor
ICAgIFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1JlbW92ZTsKKyAgICBr
ZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250UGxhdGZvcm1EYXRhQ2FjaGUo
KS5zaXplKCkpOworICAgIGZvciAoYXV0byYgZW50cnkgOiBmb250UGxhdGZvcm1EYXRhQ2FjaGUo
KSkgeworICAgICAgICBpZiAoZW50cnkudmFsdWUgJiYgIWNhY2hlZEZvbnRzKCkuY29udGFpbnMo
KmVudHJ5LnZhbHVlKSkKKyAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQoZW50cnkua2V5
KTsKICAgICB9CisgICAgZm9yIChhdXRvIGtleSA6IGtleXNUb1JlbW92ZSkKKyAgICAgICAgZm9u
dFBsYXRmb3JtRGF0YUNhY2hlKCkucmVtb3ZlKGtleSk7CiAKICNpZiBFTkFCTEUoT1BFTlRZUEVf
VkVSVElDQUwpCiAgICAgRm9udFZlcnRpY2FsRGF0YUNhY2hlJiBmb250VmVydGljYWxEYXRhQ2Fj
aGUgPSBmb250VmVydGljYWxEYXRhQ2FjaGVJbnN0YW5jZSgpOwogICAgIGlmICghZm9udFZlcnRp
Y2FsRGF0YUNhY2hlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBNYXJrICYgc3dlZXAgdW51c2Vk
IHZlcnRpY2FsRGF0YQotICAgICAgICBGb250VmVydGljYWxEYXRhQ2FjaGU6Oml0ZXJhdG9yIHZl
cnRpY2FsRGF0YUVuZCA9IGZvbnRWZXJ0aWNhbERhdGFDYWNoZS5lbmQoKTsKLSAgICAgICAgZm9y
IChGb250VmVydGljYWxEYXRhQ2FjaGU6Oml0ZXJhdG9yIHZlcnRpY2FsRGF0YSA9IGZvbnRWZXJ0
aWNhbERhdGFDYWNoZS5iZWdpbigpOyB2ZXJ0aWNhbERhdGEgIT0gdmVydGljYWxEYXRhRW5kOyAr
K3ZlcnRpY2FsRGF0YSkgewotICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGF0YS0+dmFsdWUpCi0g
ICAgICAgICAgICAgICAgdmVydGljYWxEYXRhLT52YWx1ZS0+bV9pbkZvbnRDYWNoZSA9IGZhbHNl
OworICAgICAgICBmb3IgKGF1dG8mIHZlcnRpY2FsRGF0YSA6IGZvbnRWZXJ0aWNhbERhdGFDYWNo
ZS52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGF0YSkKKyAgICAgICAgICAg
ICAgICB2ZXJ0aWNhbERhdGEtPm1faW5Gb250Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgfQotICAg
ICAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciBmb250RGF0YUVuZCA9IGdGb250RGF0YUNhY2hl
LT5lbmQoKTsKLSAgICAgICAgZm9yIChGb250RGF0YUNhY2hlOjppdGVyYXRvciBmb250RGF0YSA9
IGdGb250RGF0YUNhY2hlLT5iZWdpbigpOyBmb250RGF0YSAhPSBmb250RGF0YUVuZDsgKytmb250
RGF0YSkgewotICAgICAgICAgICAgT3BlblR5cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSA9
IGNvbnN0X2Nhc3Q8T3BlblR5cGVWZXJ0aWNhbERhdGEqPihmb250RGF0YS0+dmFsdWUuZmlyc3Qt
PnZlcnRpY2FsRGF0YSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBmb250RGF0YSA6IGNhY2hlZEZv
bnRzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGF1dXRvKiB2ZXJ0aWNhbERhdGEgPSBjb25z
dF9jYXN0PE9wZW5UeXBlVmVydGljYWxEYXRhKj4oZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpKTsK
ICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbERhdGEpCiAgICAgICAgICAgICAgICAgdmVydGljYWxE
YXRhLT5tX2luRm9udENhY2hlID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBWZWN0b3I8Rm9u
dEZpbGVLZXk+IGtleXNUb1JlbW92ZTsKICAgICAgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoZm9udFZlcnRpY2FsRGF0YUNhY2hlLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
Rm9udFZlcnRpY2FsRGF0YUNhY2hlOjppdGVyYXRvciB2ZXJ0aWNhbERhdGEgPSBmb250VmVydGlj
YWxEYXRhQ2FjaGUuYmVnaW4oKTsgdmVydGljYWxEYXRhICE9IHZlcnRpY2FsRGF0YUVuZDsgKyt2
ZXJ0aWNhbERhdGEpIHsKLSAgICAgICAgICAgIGlmICghdmVydGljYWxEYXRhLT52YWx1ZSB8fCAh
dmVydGljYWxEYXRhLT52YWx1ZS0+bV9pbkZvbnRDYWNoZSkKLSAgICAgICAgICAgICAgICBrZXlz
VG9SZW1vdmUuYXBwZW5kKHZlcnRpY2FsRGF0YS0+a2V5KTsKKyAgICAgICAgZm9yIChhdXRvJiBp
dCA6IGZvbnRWZXJ0aWNhbERhdGFDYWNoZSkgeworICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUg
fHwgIWl0LT52YWx1ZS0+bV9pbkZvbnRDYWNoZSkKKyAgICAgICAgICAgICAgICBrZXlzVG9SZW1v
dmUuYXBwZW5kKGl0LT5rZXkpOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
LCBjb3VudCA9IGtleXNUb1JlbW92ZS5zaXplKCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAg
ICAgZm9udFZlcnRpY2FsRGF0YUNhY2hlLnRha2Uoa2V5c1RvUmVtb3ZlW2ldKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBrZXkgOiBrZXlzVG9SZW1vdmUpCisgICAgICAgICAgICBmb250VmVydGljYWxE
YXRhQ2FjaGUucmVtb3ZlKGtleSk7CiAgICAgfQogI2VuZGlmCi0KLSAgICBpc1B1cmdpbmcgPSBm
YWxzZTsKIH0KIAogc2l6ZV90IEZvbnRDYWNoZTo6Zm9udERhdGFDb3VudCgpCiB7Ci0gICAgaWYg
KGdGb250RGF0YUNhY2hlKQotICAgICAgICByZXR1cm4gZ0ZvbnREYXRhQ2FjaGUtPnNpemUoKTsK
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2FjaGVkRm9udHMoKS5zaXplKCk7CiB9CiAKIHNp
emVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9udERhdGFDb3VudCgpCiB7Ci0gICAgaWYgKGdJbmFj
dGl2ZUZvbnREYXRhKQotICAgICAgICByZXR1cm4gZ0luYWN0aXZlRm9udERhdGEtPnNpemUoKTsK
LSAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgZm9yIChhdXRvJiBm
b250IDogY2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgeworICAgICAgICBpZiAoZm9udC0+aGFzT25l
UmVmKCkpCisgICAgICAgICAgICArK2NvdW50OworICAgIH0KKyAgICByZXR1cm4gY291bnQ7CiB9
CiAKLVBhc3NSZWZQdHI8Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgaW50JiBmYW1pbHlJbmRleCwgRm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IpCitSZWZQdHI8Rm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWls
eUF0SW5kZXgoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgaW50JiBmYW1pbHlJ
bmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CiAgICAgQVNTRVJUKGZhbWlseUlu
ZGV4ICE9IGNBbGxGYW1pbGllc1NjYW5uZWQpOwogICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0
OwpAQCAtNTY1LDcgKzUwMSw3IEBAIFBhc3NSZWZQdHI8Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
Rm9udEQKICAgICAgICAgaWYgKGZvbnRTZWxlY3RvcikKICAgICAgICAgICAgIHJlc3VsdCA9IGZv
bnRTZWxlY3Rvci0+Z2V0Rm9udERhdGEoZGVzY3JpcHRpb24sIGZhbWlseSk7CiAgICAgICAgIGlm
ICghcmVzdWx0KQotICAgICAgICAgICAgcmVzdWx0ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3Jp
cHRpb24sIGZhbWlseSk7CisgICAgICAgICAgICByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBmYW1pbHkpOwogICAgIH0KICAgICBpZiAoZmFtaWx5SW5kZXggPT0gZmFtaWx5Q291
bnQpCiAgICAgICAgIGZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsKQEAgLTU4OCw3
ICs1MjQsNyBAQCBQYXNzUmVmUHRyPEZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnRECiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIC8v
IFN0aWxsIG5vIHJlc3VsdC4gIEhhbmQgYmFjayBvdXIgbGFzdCByZXNvcnQgZmFsbGJhY2sgZm9u
dC4KLSAgICAgICAgcmVzdWx0ID0gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlv
bik7CisgICAgICAgIHJlc3VsdCA9IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24p
OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KQEAgLTYyMiwxMiArNTU4
LDExIEBAIHVuc2lnbmVkIHNob3J0IEZvbnRDYWNoZTo6Z2VuZXJhdGlvbigpCiB2b2lkIEZvbnRD
YWNoZTo6aW52YWxpZGF0ZSgpCiB7CiAgICAgaWYgKCFnQ2xpZW50cykgewotICAgICAgICBBU1NF
UlQoIWdGb250UGxhdGZvcm1EYXRhQ2FjaGUpOworICAgICAgICBBU1NFUlQoZm9udFBsYXRmb3Jt
RGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChnRm9udFBsYXRmb3JtRGF0YUNhY2hlKQotICAgICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hl
LT5jbGVhcigpOworICAgIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmNsZWFyKCk7CiAgICAgaW52
YWxpZGF0ZUZvbnRHbHlwaHNDYWNoZSgpOwogCiAgICAgZ0dlbmVyYXRpb24rKzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAx
NzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTExLDEzICsxMTEsMTAgQEAgY2xhc3MgRm9udENhY2hlIHsKIHB1
YmxpYzoKICAgICBmcmllbmQgRm9udENhY2hlJiBmb250Q2FjaGUoKTsKIAotICAgIGVudW0gU2hv
dWxkUmV0YWluIHsgUmV0YWluLCBEb05vdFJldGFpbiB9OwotCi0gICAgUGFzc1JlZlB0cjxGb250
RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgaW50JiBmYW1pbHlJbmRl
eCwgRm9udFNlbGVjdG9yKik7Ci0gICAgdm9pZCByZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxl
Rm9udERhdGEqKTsKKyAgICBSZWZQdHI8Rm9udERhdGE+IGZvbnRGb3JGYW1pbHlBdEluZGV4KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciopOwog
CiAgICAgLy8gVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgotICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250
RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgpOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmln
aW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCk7CiAKICAgICAvLyBBbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9y
bS4KICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwpAQCAtMTM0LDkgKzEzMSw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZ2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9y
PHVuc2lnbmVkPiYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bWljU3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSwgU2hvdWxkUmV0
YWluID0gUmV0YWluKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNo
b3VsZFJldGFpbiA9IFJldGFpbik7Ci0gICAgU2ltcGxlRm9udERhdGEqIGdldE5vblJldGFpbmVk
TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUgPSBmYWxzZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBs
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwogCiAgICAgdm9p
ZCBhZGRDbGllbnQoRm9udFNlbGVjdG9yKik7CiAgICAgdm9pZCByZW1vdmVDbGllbnQoRm9udFNl
bGVjdG9yKik7CkBAIC0xOTEsNyArMTg3LDcgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBzaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mKTsKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSosIFNob3VsZFJl
dGFpbiA9IFJldGFpbik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmPFNpbXBsZUZvbnREYXRhPiBm
b250RGF0YUZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKICAgICAv
LyBEb24ndCBwdXJnZSBpZiB0aGlzIGNvdW50IGlzID4gMDsKICAgICBpbnQgbV9wdXJnZVByZXZl
bnRDb3VudDsKQEAgLTE5OSw3ICsxOTUsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CiAjZW5kaWYKLSAgICBm
cmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7IC8vIEZvciBnZXRDYWNoZWRGb250RGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhKikKKyAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CiAg
ICAgZnJpZW5kIGNsYXNzIEZvbnRHbHlwaHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4MDM1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDE4ICs1OSwxMiBAQCBGb250R2x5cGhzOjpGb250R2x5cGhzKGNvbnN0
IEZvbnRQbGF0Zm9yCiAgICAgLCBtX2xvYWRpbmdDdXN0b21Gb250cyhmYWxzZSkKICAgICAsIG1f
aXNGb3JQbGF0Zm9ybUZvbnQodHJ1ZSkKIHsKLSAgICBSZWZQdHI8Rm9udERhdGE+IGZvbnREYXRh
ID0gZm9udENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEoJnBsYXRmb3JtRGF0YSk7CisgICAgUmVm
UHRyPEZvbnREYXRhPiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnREYXRhRm9yUGxhdGZvcm1E
YXRhKHBsYXRmb3JtRGF0YSk7CiAgICAgbV9yZWFsaXplZEZvbnREYXRhLmFwcGVuZChmb250RGF0
YS5yZWxlYXNlKCkpOwogfQogCi12b2lkIEZvbnRHbHlwaHM6OnJlbGVhc2VGb250RGF0YSgpCitG
b250R2x5cGhzOjp+Rm9udEdseXBocygpCiB7Ci0gICAgdW5zaWduZWQgbnVtRm9udHMgPSBtX3Jl
YWxpemVkRm9udERhdGEuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1G
b250czsgKytpKSB7Ci0gICAgICAgIGlmIChtX3JlYWxpemVkRm9udERhdGFbaV0tPmlzQ3VzdG9t
Rm9udCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvbnRDYWNoZSgpLnJlbGVh
c2VGb250RGF0YShkb3duY2FzdDxTaW1wbGVGb250RGF0YT4obV9yZWFsaXplZEZvbnREYXRhW2ld
LmdldCgpKSk7Ci0gICAgfQogfQogCiB2b2lkIEZvbnRHbHlwaHM6OmRldGVybWluZVBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xMTMsMTAgKzEwNywxMCBAQCBj
b25zdCBGb250RGF0YSogRm9udEdseXBoczo6cmVhbGl6ZUZvbnRECiAKICAgICAvLyBBc2sgdGhl
IGZvbnQgY2FjaGUgZm9yIHRoZSBmb250IGRhdGEuCiAgICAgLy8gV2UgYXJlIG9idGFpbmluZyB0
aGlzIGZvbnQgZm9yIHRoZSBmaXJzdCB0aW1lLiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBmYW1pbGll
cyB3ZSd2ZSBsb29rZWQgYXQgYmVmb3JlCi0gICAgLy8gaW4gfG1fZmFtaWx5SW5kZXh8LCBzbyB0
aGF0IHdlIG5ldmVyIHNjYW4gdGhlIHNhbWUgc3BvdCBpbiB0aGUgbGlzdCB0d2ljZS4gZ2V0Rm9u
dERhdGEgd2lsbCBhZGp1c3Qgb3VyCisgICAgLy8gaW4gfG1fZmFtaWx5SW5kZXh8LCBzbyB0aGF0
IHdlIG5ldmVyIHNjYW4gdGhlIHNhbWUgc3BvdCBpbiB0aGUgbGlzdCB0d2ljZS4gZm9udEZvckZh
bWlseUF0SW5kZXggd2lsbCBhZGp1c3Qgb3VyCiAgICAgLy8gfG1fZmFtaWx5SW5kZXh8IGFzIGl0
IHNjYW5zIGZvciB0aGUgcmlnaHQgZm9udCB0byBtYWtlLgogICAgIEFTU0VSVChmb250Q2FjaGUo
KS5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKLSAgICBSZWZQdHI8Rm9udERhdGE+IHJl
c3VsdCA9IGZvbnRDYWNoZSgpLmdldEZvbnREYXRhKGRlc2NyaXB0aW9uLCBtX2ZhbWlseUluZGV4
LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQgPSBm
b250Q2FjaGUoKS5mb250Rm9yRmFtaWx5QXRJbmRleChkZXNjcmlwdGlvbiwgbV9mYW1pbHlJbmRl
eCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgbV9y
ZWFsaXplZEZvbnREYXRhLmFwcGVuZChyZXN1bHQpOwogICAgICAgICBpZiAocmVzdWx0LT5pc0xv
YWRpbmcoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlw
aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmgJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRHbHlwaHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxGb250R2x5cGhzPiBjcmVhdGUoUGFzc1JlZlB0cjxGb250U2Vs
ZWN0b3I+IGZvbnRTZWxlY3RvcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250R2x5cGhzKGZv
bnRTZWxlY3RvcikpOyB9CiAgICAgc3RhdGljIFJlZjxGb250R2x5cGhzPiBjcmVhdGVGb3JQbGF0
Zm9ybUZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMocGxhdGZvcm1EYXRhKSk7IH0KIAotICAgIH5Gb250R2x5
cGhzKCkgeyByZWxlYXNlRm9udERhdGEoKTsgfQorICAgIH5Gb250R2x5cGhzKCk7CiAKICAgICBi
b29sIGlzRm9yUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvclBsYXRmb3JtRm9u
dDsgfQogCkBAIC03Nyw4ICs3Nyw2IEBAIHByaXZhdGU6CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0
YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRE
YXRhVmFyaWFudCk7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNo
YXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZv
clZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50
LCB1bnNpZ25lZCBmYWxsYmFja0xldmVsKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVs
ZWFzZUZvbnREYXRhKCk7CiAgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxGb250RGF0YT4sIDE+IG1f
cmVhbGl6ZWRGb250RGF0YTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gMTc4MDM1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTQsOSArMTU0LDYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1H
bHlwaEluaXQoKQogCiBTaW1wbGVGb250RGF0YTo6flNpbXBsZUZvbnREYXRhKCkKIHsKLSAgICBp
ZiAoIWlzU1ZHRm9udCgpKQotICAgICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLQogICAgIHJlbW92
ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNpb24gMTc4MDM1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtODEsMTUgKzgxLDE1IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAg
Ly8gVXNlZCB0byBjcmVhdGUgcGxhdGZvcm0gZm9udHMuCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJv
b2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQorICAgIHN0YXRpYyBSZWY8U2lt
cGxlRm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEs
IGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wg
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTaW1wbGVGb250RGF0YShwbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCwg
aXNMb2FkaW5nLCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250LCBp
c0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKICAgICB9CiAKICAgICAvLyBV
c2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9u
dFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCisgICAgc3Rh
dGljIFJlZjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdEYXRhPiBz
dmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRp
Y0l0YWxpYykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltcGxlRm9udERh
dGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNpbXBsZUZvbnREYXRhKFdU
Rjo6bW92ZShzdmdEYXRhKSwgZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxp
YykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgflNpbXBsZUZvbnREYXRhKCk7CkBAIC0yMjIsNyAr
MjIyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwogICAgIHZvaWQgcGxh
dGZvcm1HbHlwaEluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwotICAg
IHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKICAgICB2b2lkIGluaXRDaGFyV2lkdGhzKCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZv
bnREYXRhRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAx
NzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1w
bGVGb250RGF0YUZyZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDEwICsxMDEsNiBA
QCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluCiAgICAgaW5pdENoYXJX
aWR0aHMoKTsKIH0KIAotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsK
LX0KLQogUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEFTU0VSVChtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRDYWNoZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2UKICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZvbnQoc3Vic3RpdHV0ZUZv
bnQuZ2V0KCksIHBsYXRmb3JtRGF0YS5zaXplKCksIHBsYXRmb3JtRGF0YS5pc1ByaW50ZXJGb250
KCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YS5tX29yaWVu
dGF0aW9uKTsKICAgICBhbHRlcm5hdGVGb250Lm1faXNFbW9qaSA9IENURm9udElzQXBwbGVDb2xv
ckVtb2ppKHN1YnN0aXR1dGVGb250LmdldCgpKTsKIAotICAgIHJldHVybiBnZXRDYWNoZWRGb250
RGF0YSgmYWx0ZXJuYXRlRm9udCwgRG9Ob3RSZXRhaW4pOworICAgIHJldHVybiBmb250RGF0YUZv
clBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAogZW51bSBjbGFzcyBMYW5ndWFnZVNw
ZWNpZmljRm9udCB7CkBAIC0xOTQsMTIgKzE5NCwxNiBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZp
Y0ZvbnQgbGFuZ3VhZ2VTcGVjCiAgICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25l
OwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZhbGxi
YWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25z
dCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6
c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICAvLyBVbmxpa2UgT1MgWCwg
b3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUsIHdoaWNoIGRvZXNu
J3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYuCiAgICAgLy8gRmFs
bCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2FzZS4KLSAgICBpZiAo
bGVuZ3RoID4gMCAmJiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycykpCi0g
ICAgICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShnZXRDdXN0b21GYWxsYmFja0ZvbnQoKmNo
YXJhY3RlcnMsIGRlc2NyaXB0aW9uKSwgRG9Ob3RSZXRhaW4pOworICAgIGlmIChsZW5ndGggPiAw
ICYmIHJlcXVpcmVzQ3VzdG9tRmFsbGJhY2tGb250KCpjaGFyYWN0ZXJzKSkgeworICAgICAgICBh
dXRvKiBmYWxsYmFjayA9IGdldEN1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycywgZGVzY3Jp
cHRpb24pOworICAgICAgICBpZiAoIWZhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBmb250RGF0YUZvclBsYXRmb3JtRGF0YSgqZmFsbGJhY2spOwor
ICAgIH0KIAogICAgIFVDaGFyMzIgYyA9ICpjaGFyYWN0ZXJzOwogICAgIGlmIChsZW5ndGggPiAx
ICYmIFUxNl9JU19MRUFEKGMpICYmIFUxNl9JU19UUkFJTChjaGFyYWN0ZXJzWzFdKSkKQEAgLTI5
NCw3ICsyOTgsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENh
Y2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/ICpjamtCb2xkW3ByZWZlcnJlZENKS0ZvbnRdIDogKmNqa1BsYWluW3ByZWZlcnJl
ZENKS0ZvbnRdLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9
IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24u
d2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pLRm9udF0gOiAqY2prUGxhaW5bcHJlZmVy
cmVkQ0pLRm9udF0sIGZhbHNlKTsKICAgICAgICAgYm9vbCB1c2VTZWNvbmRhcnlGb250ID0gdHJ1
ZTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7CiAgICAgICAgICAgICBDR0dseXBoIGds
eXBoc1syXTsKQEAgLTMwNiwzMSArMzEwLDMxIEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6c3kKICAgICAgICAgfQogCiAgICAgICAgIGlmICh1c2VTZWNvbmRhcnlGb250
KQotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlw
dGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtz
ZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UsIERv
Tm90UmV0YWluKTsKKyAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2pr
Qm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltzZWNvbmRhcnlDSktGb250XSwgZmFs
c2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9u
dDo6S29yZWFuOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IGtvcmVhblBsYWluKCJBcHBsZVNER290aGljTmVvLU1lZGl1bSIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBrb3JlYW5Cb2xkKCJBcHBsZVNER290aGljTmVvLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNo
ZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyBrb3JlYW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7Cisg
ICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3JlYW5Cb2xkIDoga29yZWFuUGxh
aW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVj
aWZpY0ZvbnQ6OkN5cmlsbGljOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGN5cmlsbGljUGxhaW4oIkhlbHZldGljYU5ldWUiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gY3lyaWxsaWNCb2xkKCJIZWx2ZXRpY2FOZXVlLUJvbGQiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNo
ZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4p
OworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY3lyaWxsaWNCb2xkIDogY3ly
aWxsaWNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5n
dWFnZVNwZWNpZmljRm9udDo6QXJhYmljOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGFyYWJpY1BsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBhcmFiaWNCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERh
dGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8g
YXJhYmljQm9sZCA6IGFyYWJpY1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBz
aW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJv
bGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9sZCA6IGFyYWJpY1BsYWluLCBmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250
OjpIZWJyZXc6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
aGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlYnJl
d0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlw
dGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xk
IDogaGVicmV3UGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgIHNpbXBsZUZvbnRE
YXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlw
dGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkluZGljOiB7
CkBAIC0zODYsMzYgKzM5MCwzNiBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OnN5CiAgICAgICAgIGlmIChpbmRpY1BhZ2VPcmRlckluZGV4IDwgKHNpemVvZihpbmRpY1Vu
aWNvZGVQYWdlRm9udHMpIC8gc2l6ZW9mKEF0b21pY1N0cmluZyopKSkgewogICAgICAgICAgICAg
QXRvbWljU3RyaW5nKiBpbmRpY0ZvbnRTdHJpbmcgPSBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0
aW9uLndlaWdodCgpKSA/IGluZGljVW5pY29kZVBhZ2VGb250c0JvbGRbaW5kaWNQYWdlT3JkZXJJ
bmRleF0gOiBpbmRpY1VuaWNvZGVQYWdlRm9udHNbaW5kaWNQYWdlT3JkZXJJbmRleF07CiAgICAg
ICAgICAgICBpZiAoaW5kaWNGb250U3RyaW5nKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnRE
YXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sICppbmRpY0ZvbnRTdHJpbmcsIGZh
bHNlLCBEb05vdFJldGFpbik7CisgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAqaW5kaWNGb250U3RyaW5nLCBmYWxzZSk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6
OlRoYWk6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGhh
aVBsYWluKCJUaG9uYnVyaSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwog
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aGFpQm9sZCgiVGhv
bmJ1cmktQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAg
ICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRX
ZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRoYWlCb2xkIDogdGhhaVBsYWluLCBm
YWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8g
dGhhaUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRpYmV0YW46IHsKICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhblBsYWluKCJLYWlsYXNhIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5Cb2xkKCJLYWlsYXNhLUJvbGQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53
ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5QbGFpbiwgZmFsc2UsIERvTm90UmV0YWlu
KTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGli
ZXRhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1
YWdlU3BlY2lmaWNGb250OjpDYW5hZGlhbkFib3JpZ2luYWxTeWxsYWJpYzogewogICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FT
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNhc0JvbGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnRE
YXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVz
Y3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRh
aW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24s
IGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNhc1Bs
YWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3Bl
Y2lmaWNGb250OjpLaG1lcjogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBraG1lcigiS2htZXJTYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRl
c2NyaXB0aW9uLCBraG1lciwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgc2ltcGxlRm9u
dERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBraG1lciwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6TGFvOiB7CiAg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGxhbygiTGFvU2FuZ2Ft
TU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSwgRG9O
b3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGxhbywgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDog
ewpAQCAtNDI2LDExICs0MzAsMTEgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpzeQogICAgICAgICAgICAgICAgIHVzZUVtb2ppRm9udCA9IENGQ2hhcmFjdGVyU2V0SXNM
b25nQ2hhcmFjdGVyTWVtYmVyKGFwcGxlQ29sb3JFbW9qaUNoYXJhY3RlclNldCgpLCBjKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAodXNlRW1vamlGb250KQotICAgICAgICAgICAgc2ltcGxlRm9u
dERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2ppLCBm
YWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamksIGZhbHNlKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmYWxsYmFja0ZvbnQgPSBhZG9w
dENGKENURm9udENyZWF0ZUZvckNoYXJhY3RlcnMob3JpZ2luYWxGb250RGF0YS0+Z2V0Q1RGb250
KCksIGNoYXJhY3RlcnMsIGxlbmd0aCwgbnVsbHB0cikpOwogICAgICAgICAgICAgaWYgKFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gZm91bmRGb250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RT
Y3JpcHROYW1lKGZhbGxiYWNrRm9udC5nZXQoKSkpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZv
bnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0
KCksIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEg
PSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmb3VuZEZvbnROYW1lLmdldCgpLCBmYWxzZSk7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDM5LDcgKzQ0Myw3IEBAIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3kKICAgICBpZiAoc2ltcGxlRm9u
dERhdGEpCiAgICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CiAKLSAgICBy
ZXR1cm4gZ2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsK
KyAgICByZXR1cm4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbik7CiB9CiAKIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKQEAgLTQ1Nyw3ICs0NjEsNyBA
QCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpCiAgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFj
bykgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwor
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBj
b3VyaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTQ2NSw3ICs0
NjksNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpCiAgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRh
IGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnRE
YXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIHZlcmRhbmEpOworICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCB2ZXJkYW5hKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTQ3NywxNiArNDgxLDE2IEBA
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2kKICAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgMyAmJiAhc2ltcGxlRm9udERhdGE7ICsraikKICAgICAgICAgICAgIGlmIChmYW1p
bHkuY29udGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNlKSkKLSAgICAgICAgICAgICAgICBzaW1w
bGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRC
b2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAg
ICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
aXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6
YVBsYWluKTsKICAgICB9CiAKICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3Vs
ZFJldGFpbiBzaG91bGRSZXRhaW4pCitSZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFz
dFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBmYWxsYmFja0Zv
bnRGYW1pbHkoIi5QaG9uZUZhbGxiYWNrIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFs
bGJhY2tGb250RmFtaWx5LCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKKyAgICByZXR1cm4gKmZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRGYW1pbHksIGZhbHNlKTsKIH0K
IAogRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDdXN0b21GYWxsYmFja0ZvbnQoY29u
c3QgVUludDMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBs
ZUZvbnREYXRhSU9TLm1tCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE2MSw3ICsxNjEsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYg
a0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9s
ZCk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJh
aXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250
VHJhaXRJdGFsaWMpOwogCi0gICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5nZXRDYWNoZWRGb250
RGF0YSgmc2NhbGVkRm9udERhdGEpOworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9udERh
dGFGb3JQbGF0Zm9ybURhdGEoc2NhbGVkRm9udERhdGEpOwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQko
cmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYs
MTMgKzI3NiwxMyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRl
eHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnREYXRhKCksIGNwLCBzdHJpbmdMb2NhdGlv
biArIHJ1blJhbmdlLmxvY2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLmdldENhY2hlZEZv
bnREYXRhKG1fZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0KCksIGZhbHNlLCBG
b250Q2FjaGU6OkRvTm90UmV0YWluKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgcnVuRm9u
dERhdGEgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KG1fZm9udC5mb250RGVzY3JpcHRpb24o
KSwgZm9udE5hbWUuZ2V0KCksIGZhbHNlKS5nZXQoKTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAg
ICAgICAgICAgICAgICAgICAvLyBDb3JlIFRleHQgbWF5IGhhdmUgdXNlZCBhIGZvbnQgdGhhdCBp
cyBub3Qga25vd24gdG8gTlNGb250TWFuYWdlci4gSW4gdGhhdCBjYXNlLCBmYWxsIGJhY2sgb24K
ICAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIGZvbnQgYXMgcmV0dXJuZWQsIGV2ZW4g
dGhvdWdoIGl0IG1heSBub3QgaGF2ZSB0aGUgYmVzdCBOU0ZvbnRSZW5kZXJpbmdNb2RlLgogICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBGb250UGxhdGZvcm1EYXRhIHJ1bkZvbnRQbGF0Zm9ybURhdGEoKE5TRm9udCAqKXJ1bkZv
bnQsIENURm9udEdldFNpemUocnVuRm9udCksIG1fZm9udC5mb250RGVzY3JpcHRpb24oKS51c2VQ
cmludGVyRm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9u
dENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEoJnJ1bkZvbnRQbGF0Zm9ybURhdGEsIEZvbnRDYWNo
ZTo6RG9Ob3RSZXRhaW4pLmdldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcnVuRm9udERh
dGEgPSAmZm9udENhY2hlKCkuZm9udERhdGFGb3JQbGF0Zm9ybURhdGEocnVuRm9udFBsYXRmb3Jt
RGF0YSkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICNlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBKdXN0IGFzc2VydCBmb3Igbm93LCB1bnRpbCB3ZSBjYW4gZGV2aXNl
IGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggaU9TLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZpc2lv
biAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENh
Y2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNyArMzM3LDcgQEAgc3RhdGljIGJvb2wg
c2hvdWxkQXV0b0FjdGl2YXRlRm9udElmTmVlZAogICAgIHJldHVybiBrbm93bkZhbWlsaWVzLmdl
dCgpLmFkZChmYW1pbHkpLmlzTmV3RW50cnk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnRE
YXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKK1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0Zv
ckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2lt
cGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFVDaGFyMzIgY2hhcmFjdGVy
OwogICAgIFUxNl9HRVQoY2hhcmFjdGVycywgMCwgMCwgbGVuZ3RoLCBjaGFyYWN0ZXIpOwpAQCAt
NDAyLDcgKzQwMiw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3kK
ICAgICAgICAgIWlzUGxhdGZvcm1Gb250ICYmICh0cmFpdHMgJiBOU0ZvbnRJdGFsaWNUcmFpdCkg
JiYgIShzdWJzdGl0dXRlRm9udFRyYWl0cyAmIE5TRm9udEl0YWxpY1RyYWl0KSwKICAgICAgICAg
cGxhdGZvcm1EYXRhLm1fb3JpZW50YXRpb24pOwogCi0gICAgcmV0dXJuIGdldENhY2hlZEZvbnRE
YXRhKCZhbHRlcm5hdGVGb250LCBEb05vdFJldGFpbik7CisgICAgcmV0dXJuIGZvbnREYXRhRm9y
UGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCiBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCkBAIC00MTksMjcgKzQxOSwyNyBAQCBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpCiAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGdlZXphU3RyLCAoIkdlZXphIFBybyIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAz
ICYmICFzaW1wbGVGb250RGF0YTsgKytqKQogICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlu
cygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRh
ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGdlZXphU3RyKTsKKyAgICAgICAgICAg
ICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGdlZXphU3Ry
KTsKICAgICB9CiAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAotUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQorUmVmPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6Omxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CiAg
ICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgdGltZXNTdHIs
ICgiVGltZXMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAKICAgICAv
LyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBk
ZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0
IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0
YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKKyAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShmb250
RGVzY3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSk7CiAgICAgaWYgKHNpbXBsZUZvbnREYXRhKQot
ICAgICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOworICAgICAgICByZXR1cm4g
KnNpbXBsZUZvbnREYXRhOwogCiAgICAgLy8gVGhlIFRpbWVzIGZhbGxiYWNrIHdpbGwgYWxtb3N0
IGFsd2F5cyB3b3JrLCBidXQgaW4gdGhlIGhpZ2hseSB1bnVzdWFsIGNhc2Ugd2hlcmUKICAgICAv
LyB0aGUgdXNlciBkb2Vzbid0IGhhdmUgaXQsIHdlIGZhbGwgYmFjayBvbiBMdWNpZGEgR3JhbmRl
IGJlY2F1c2UgdGhhdCdzCiAgICAgLy8gZ3VhcmFudGVlZCB0byBiZSB0aGVyZSwgYWNjb3JkaW5n
IHRvIE5hdGhhbiBUYXlsb3IuIFRoaXMgaXMgZ29vZCBlbm91Z2gKICAgICAvLyB0byBhdm9pZCBh
IGNyYXNoIGF0IGxlYXN0LgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIGx1Y2lkYUdyYW5kZVN0ciwgKCJMdWNpZGEgR3JhbmRlIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShm
b250RGVzY3JpcHRpb24sIGx1Y2lkYUdyYW5kZVN0ciwgZmFsc2UsIHNob3VsZFJldGFpbik7Cisg
ICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgbHVjaWRhR3JhbmRlU3Ry
LCBmYWxzZSk7CiB9CiAKIHZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjIsMTggKzI2Miw2IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hh
cldpZHRoSW4KIH0KICNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCi12b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybURlc3Ryb3koKQotewotICAgIGlmICghaXNDdXN0b21Gb250KCkgJiYgbV9kZXJp
dmVkRm9udERhdGEpIHsKLSAgICAgICAgLy8gVGhlc2UgY29tZSBmcm9tIHRoZSBjYWNoZS4KLSAg
ICAgICAgaWYgKG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgICAgICBmb250
Q2FjaGUoKS5yZWxlYXNlRm9udERhdGEobV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQo
KSk7Ci0KLSAgICAgICAgaWYgKG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCi0gICAg
ICAgICAgICBmb250Q2FjaGUoKS5yZWxlYXNlRm9udERhdGEobV9kZXJpdmVkRm9udERhdGEtPmVt
cGhhc2lzTWFyay5nZXQoKSk7Ci0gICAgfQotfQotCiAjaWYgIVBMQVRGT1JNKElPUykKIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxl
ZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBz
Y2FsZUZhY3RvcikgY29uc3QKIHsKQEAgLTMwNCw4ICsyOTIsNyBAQCBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhl
dGljQm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xkRm9udE1hc2spICYmICEoc2NhbGVkRm9udFRy
YWl0cyAmIE5TQm9sZEZvbnRNYXNrKTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0
aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZv
bnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsKIAotICAgICAgICAvLyBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KCkgdGFrZXMgY2FyZSBvZiBub3QgZGVsZXRpbmcgdGhlIGNhY2hl
ZCBmb250IGRhdGEgdHdpY2UuCi0gICAgICAgIHJldHVybiBmb250Q2FjaGUoKS5nZXRDYWNoZWRG
b250RGF0YSgmc2NhbGVkRm9udERhdGEpOworICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZm9u
dERhdGFGb3JQbGF0Zm9ybURhdGEoc2NhbGVkRm9udERhdGEpOwogICAgIH0KICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2pp
RmFsbGJhY2tGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9z
L01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDE3ODAzNSkKKysr
IFNvdXJjZS9XZWJLaXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDEwICszNywxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IFBhc3NSZWZQdHI8Rm9udERhdGE+IEVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3I6OmdldEZhbGxi
YWNrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIHNpemVf
dCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBh
cHBsZUNvbG9yRW1vamksICgiQXBwbGUgQ29sb3IgRW1vamkiKSk7Ci0gICAgUmVmUHRyPEZvbnRE
YXRhPiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlw
dGlvbiwgYXBwbGVDb2xvckVtb2ppKTsKKyAgICBSZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhID0g
Zm9udENhY2hlKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGFwcGxlQ29sb3JFbW9q
aSk7CiAgICAgaWYgKCFmb250RGF0YSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBn
ZXQgXCJBcHBsZSBDb2xvciBFbW9qaVwiIGZyb20gdGhlIGZvbnQgY2FjaGUuIFVzaW5nIHRoZSBs
YXN0IHJlc29ydCBmYWxsYmFjayBmb250IGluc3RlYWQuIik7Ci0gICAgICAgIGZvbnREYXRhID0g
Zm9udENhY2hlKCkuZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwor
ICAgICAgICBmb250RGF0YSA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9u
dERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAx
NzgwMzUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODc5LDcgKzQ4NzksNyBAQCBzdGF0aWMgTlNTdHJpbmcgKmZvbnROYW1l
Rm9yRGVzY3JpcHRpb24oCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChib2xkID8gRm9u
dFdlaWdodDkwMCA6IEZvbnRXZWlnaHQ1MDApOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKHBvaW50U2l6ZSk7CiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgcHVyZ2VQ
cmV2ZW50ZXI7Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZv
bnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwg
ZmFsc2UsIFdlYkNvcmU6OkZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pOworICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgcmV0dXJuIFtzaW1wbGVGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkubnNGb250KCkgZm9udE5hbWVdOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244287</attachid>
            <date>2015-01-08 13:05:23 -0800</date>
            <delta_ts>2015-01-08 13:23:28 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-cache-purge-6.patch</filename>
            <type>text/plain</type>
            <size>53856</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODExMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE1LTAxLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIGNvbmNlcHQg
b2YgInJldGFpbmVkIiBmb250CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDAyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGb250Q2FjaGUgY3VycmVudGx5IG1haW50YWlucyBhIHNlY29uZGFyeSByZWZj
b3VudCBmb3IgU2ltcGxlRm9udERhdGFzLiBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIK
KyAgICAgICAgYSBmb250IGlzIGNvbnNpZGVyZWQgaW5hY3RpdmUgYW5kIGlzIGVsaWdpYmxlIGZv
ciBwdXJnaW5nLiBUaGlzIGlzIGNvbmZ1c2luZyBhbmQgY29tcGxleC4KKworICAgICAgICBUaGUg
bmV3IHNjaGVtZSBpbiB0aGlzIHBhdGNoIGNvbnNpZGVycyBmb250cyBpbiBmb250IGNhY2hlIGlu
YWN0aXZlIGlmIHRoZWlyIHJlZmNvdW50IGlzIDEgKHRoZXkgYXJlCisgICAgICAgIG93bmVkIGJ5
IHRoZSBjYWNoZSBvbmx5KS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlIGFuZCBnaXZlcyBzaW1p
bGFycyBiZWhhdmlvci4gVHlwZXMgdGhhdCAicmV0YWluZWQiIHRoZQorICAgICAgICBmb250IHRo
aXMgd2F5IGFsd2F5cyBhbHNvIHJlZiBpdC4KKworICAgICAgICBXZSBhbHNvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgcmVtb3ZpbmcgZm9udHMgdGhhdCB3b3VsZG4ndCBnZXQgZGVsZXRlZCBmcm9tIHRo
ZSBjYWNoZS4KKworICAgICAgICBBbHNvIG1vZGVybml6ZWQgc29tZSBuYW1lcyBhbmQgY29kZS4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERh
dGEpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250U2VsZWN0b3I6OmdldEZhbGxiYWNrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmb250UGxhdGZvcm1EYXRh
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZEZvbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmZvbnREYXRhRm9yUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpmb250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3Rp
dmVGb250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZh
bWlseUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZhbGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZWxl
YXNlRm9udERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRG
b250RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250R2x5cGhzOjpGb250R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRHbHlwaHM6On5Gb250R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJl
YWxpemVGb250RGF0YUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJlbGVhc2VG
b250RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBo
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6fkZvbnRHbHlwaHMpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW06CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21w
bGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1G
YWxsYmFja0ZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzaW1p
bGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKwogMjAxNS0wMS0wOCAg
R3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBTZXBl
cmF0ZSB1cGRhdGVCYWNraW5nU3RvcmUgZnJvbSBmbHVzaENvbXBvc2l0aW5nU3RhdGUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDggQEAgX19aTjdXZWJD
b3JlMTBDcmVkZW50aWFsMjhlbmNvZGluZ1JlcXVpcgogX19aTjdXZWJDb3JlMTBDcmVkZW50aWFs
QzFFUDE1TlNVUkxDcmVkZW50aWFsCiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSSzdDR1Bv
aW50CiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2ludEUKLV9fWk43V2Vi
Q29yZTEwRm9udEdseXBoczE1cmVsZWFzZUZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTEwRm9udEds
eXBoczE3cmVhbGl6ZUZvbnREYXRhQXRFUktOU18xNUZvbnREZXNjcmlwdGlvbkVqCitfX1pON1dl
YkNvcmUxMEZvbnRHbHlwaHNEMUV2CiBfX1pON1dlYkNvcmUxMEpTRG9jdW1lbnQ2c19pbmZvRQog
X19aTjdXZWJDb3JlMTBKU0RvY3VtZW50OXRvV3JhcHBlZEVOM0pTQzdKU1ZhbHVlRQogX19aTjdX
ZWJDb3JlMTBMYXlvdXRSZWN0NXNjYWxlRWYKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIF9fWk43V2Vi
Q29yZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05T
XzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2CiBfX1pON1dl
YkNvcmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKLV9fWk43V2ViQ29yZTlGb250Q2FjaGUx
N2dldENhY2hlZEZvbnREYXRhRVJLTlNfMTVGb250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWlj
U3RyaW5nRWJOUzBfMTJTaG91bGRSZXRhaW5FCitfX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250
Rm9yRmFtaWx5RVJLTlNfMTVGb250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWljU3RyaW5nRWIK
IF9fWk43V2ViQ29yZTlGb250Q2FjaGUyMWluYWN0aXZlRm9udERhdGFDb3VudEV2CiBfX1pON1dl
YkNvcmU5Rm9udENhY2hlMjFwdXJnZUluYWN0aXZlRm9udERhdGFFaQogX19aTjdXZWJDb3JlOUZv
bnRDYWNoZTI5cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWRFdgpAQCAtMjc5NSw3ICsyNzk1
LDYgQEAgX19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXROZXR3b3JrSW50ZXJmYQogX19aTjdXZWJD
b3JlOFNldHRpbmdzMzFzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlRWoKIF9fWk43V2Vi
Q29yZThTZXR0aW5nczM0c2V0TmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZEViCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MzOGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9u
RQotX19aTjdXZWJDb3JlOUZvbnRDYWNoZTI1Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udEVSS05T
XzE1Rm9udERlc2NyaXB0aW9uRU5TMF8xMlNob3VsZFJldGFpbkUKIF9fWk43V2ViQ29yZTlGcmFt
ZVZpZXcxN3NldFNjcm9sbFZlbG9jaXR5RWRkZGQKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMHNl
dFdhc1Njcm9sbGVkQnlVc2VyRWIKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNHJlbmRlcmVkQ2hh
cmFjdGVyc0V4Y2VlZEVqCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJj
ZS5jcHAJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgKSB7CiAgICAgICAgIC8vIFdlJ3Jl
IGxvY2FsLiBKdXN0IHJldHVybiBhIFNpbXBsZUZvbnREYXRhIGZyb20gdGhlIG5vcm1hbCBjYWNo
ZS4KICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjaGVjayBhbHRlcm5hdGUgZm9udCBmYW1p
bHkgbmFtZXMgaGVyZSwgc28gcGFzcyB0cnVlIGFzIHRoZSBjaGVja2luZ0FsdGVybmF0ZU5hbWUg
cGFyYW1ldGVyLgotICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBtX3N0cmluZywgdHJ1ZSk7CisgICAgICAgIHJldHVybiBmb250Q2Fj
aGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHRydWUpOwogICAg
IH0KIAogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFwcGluZyBpbiBvdXIgRm9udERhdGEgY2Fj
aGUuCkBAIC0xNDQsMTAgKzE0NCw5IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0Zv
bnRGYWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBhcmJpdHJhcnkg
ZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2VsZWN0b3ItPmJl
Z2luTG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgLy8gVGhpcyB0ZW1w
b3JhcnkgZm9udCBpcyBub3QgcmV0YWluZWQgYW5kIHNob3VsZCBub3QgYmUgcmV0dXJuZWQuCi0g
ICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwot
ICAgICAgICBTaW1wbGVGb250RGF0YSogdGVtcG9yYXJ5Rm9udCA9IGZvbnRDYWNoZSgpLmdldE5v
blJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwotICAgICAg
ICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUodGVtcG9yYXJ5Rm9udC0+cGxhdGZv
cm1EYXRhKCksIHRydWUsIHRydWUpOworICAgICAgICBSZWY8U2ltcGxlRm9udERhdGE+IHBsYWNl
aG9sZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERlc2Ny
aXB0aW9uKTsKKyAgICAgICAgUmVmPFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnRDb3B5
SW5Mb2FkaW5nU3RhdGUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYWNlaG9sZGVyRm9udC0+
cGxhdGZvcm1EYXRhKCksIHRydWUsIHRydWUpOworICAgICAgICByZXR1cm4gV1RGOjptb3ZlKHBs
YWNlaG9sZGVyRm9udENvcHlJbkxvYWRpbmdTdGF0ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZv
bnREYXRhLnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDcgKzQ3OCw3IEBAIFBhc3NSZWZQdHI8Rm9u
dERhdGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2UKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgaWYg
KCFyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQogICAgICAgICAgICAgZmFtaWx5Rm9yTG9va3Vw
ID0gcmVzb2x2ZUdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1p
bHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5Rm9yTG9va3VwKTsKKyAgICAgICAgcmV0dXJuIGZvbnRDYWNo
ZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlGb3JMb29rdXApOwogICAg
IH0KIAogICAgIHJldHVybiBmYWNlLT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24pOwpAQCAt
NjM0LDcgKzYzNCw3IEBAIFBhc3NSZWZQdHI8Rm9udERhdGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2UK
ICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+Zm9udEZhbGxiYWNrUHJlZmVyc1BpY3Rv
Z3JhcGhzKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLmdl
dENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250
RmFtaWx5KCkpOworICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJl
dmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDx3dGYv
TGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTg4LDcgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Rm9udENhY2hlJiBmb250Q2FjaGUoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250
Q2FjaGU+IGdsb2JhbEZvbnRDYWNoZTsKLSAgICByZXR1cm4gZ2xvYmFsRm9udENhY2hlLmdldCgp
OworICAgIHJldHVybiBnbG9iYWxGb250Q2FjaGU7CiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hl
KCkKQEAgLTE0Myw3ICsxNDQsMTEgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRy
YWl0cyA6IAogCiB0eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhh
c2gsIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cz4gRm9udFBsYXRmb3JtRGF0YUNhY2hl
OwogCi1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3JtRGF0YUNhY2hl
ID0gMDsKK3N0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFDYWNoZT4g
Y2FjaGU7CisgICAgcmV0dXJuIGNhY2hlOworfQogCiBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lRXF1
YWxJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBjb25zdCBjaGFy
KiByZWZlcmVuY2UsIHVuc2lnbmVkIGxlbmd0aCkKIHsKQEAgLTIzNCwxNiArMjM5LDE3IEBAIEZv
bnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm8KICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOwogI2VuZGlmCiAKLSAgICBpZiAo
IWdGb250UGxhdGZvcm1EYXRhQ2FjaGUpIHsKLSAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSA9IG5ldyBGb250UGxhdGZvcm1EYXRhQ2FjaGU7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWQ7CisgICAgaWYgKCFpbml0aWFsaXplZCkgewogICAgICAgICBwbGF0Zm9ybUluaXQoKTsKKyAg
ICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIAogICAgIEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSBrZXkoZmFtaWx5TmFtZSwgZm9udERlc2NyaXB0aW9uKTsKIAotICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUt
PmFkZChrZXksIG51bGxwdHIpOwotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3Ig
aXQgPSByZXN1bHQuaXRlcmF0b3I7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5hZGQoa2V5LCBudWxscHRy
KTsKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0
ZXJhdG9yOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBpdC0+dmFs
dWUgPSBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7
CiAKICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJuYXRlTmFtZSkgewpA
QCAtMjU0LDggKzI2MCw4IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm8KICAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9y
QWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9u
LCBhbHRlcm5hdGVOYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtl
eSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhh
dmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUg
Y2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCi0gICAgICAgICAgICAgICAgaXQg
PSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5maW5kKGtleSk7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKGl0ICE9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpKTsKKyAgICAgICAgICAgICAg
ICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaXQgIT0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZW5kKCkpOwogICAgICAgICAg
ICAgICAgIGlmIChmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSkKICAgICAgICAgICAg
ICAgICAgICAgaXQtPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxGb250UGxhdGZvcm1EYXRhPigq
Zm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUpOwogICAgICAgICAgICAgfQpAQCAtMzUz
LDkgKzM1OSwxNCBAQCBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuCiAg
ICAgfQogfTsKIAotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHN0ZDo6cGFpcjxS
ZWZQdHI8U2ltcGxlRm9udERhdGE+LCB1bnNpZ25lZD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBG
b250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwordHlwZWRlZiBIYXNoTWFwPEZv
bnRQbGF0Zm9ybURhdGEsIFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIEZvbnREYXRhQ2FjaGVLZXlI
YXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOworCitzdGF0aWMgRm9u
dERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxG
b250RGF0YUNhY2hlPiBjYWNoZTsKKyAgICByZXR1cm4gY2FjaGU7Cit9CiAKLXN0YXRpYyBGb250
RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7CiAKICNpZiBQTEFURk9STShJT1MpCiBjb25z
dCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSAxMjA7CkBAIC0zNjgsMTkwICszNzksMTE4IEBA
IGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IGludCBjTWF4
VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IGludCBjVGFy
Z2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAotc3RhdGljIExp
c3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+KiBnSW5hY3RpdmVGb250RGF0YSA9IDA7
Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSwgU2hvdWxkUmV0YWluIHNo
b3VsZFJldGFpbikKK1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAgICAgRm9udFBs
YXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24sIGZhbWlseSwgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKTsKICAgICBpZiAoIXBs
YXRmb3JtRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9u
dERhdGEocGxhdGZvcm1EYXRhLCBzaG91bGRSZXRhaW4pOwotfQotCi1QYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEqIHBsYXRmb3JtRGF0YSwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKLXsKLSAgICBp
ZiAoIXBsYXRmb3JtRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgaWYgKHNob3VsZFJldGFpbiA9PSBEb05vdFJldGFpbikKLSAgICAgICAgQVNTRVJU
KG1fcHVyZ2VQcmV2ZW50Q291bnQpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAg
Rm9udExvY2tlciBmb250TG9ja2VyOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKCFnRm9udERhdGFD
YWNoZSkgewotICAgICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAg
ICAgICBnSW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9u
dERhdGE+PjsKLSAgICB9Ci0KLSAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBn
Rm9udERhdGFDYWNoZS0+ZmluZCgqcGxhdGZvcm1EYXRhKTsKLSAgICBpZiAocmVzdWx0ID09IGdG
b250RGF0YUNhY2hlLT5lbmQoKSkgewotICAgICAgICBzdGQ6OnBhaXI8UmVmUHRyPFNpbXBsZUZv
bnREYXRhPiwgdW5zaWduZWQ+IG5ld1ZhbHVlKFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnBsYXRm
b3JtRGF0YSksIHNob3VsZFJldGFpbiA9PSBSZXRhaW4gPyAxIDogMCk7Ci0gICAgICAgIGdGb250
RGF0YUNhY2hlLT5zZXQoKnBsYXRmb3JtRGF0YSwgbmV3VmFsdWUpOwotICAgICAgICBpZiAoc2hv
dWxkUmV0YWluID09IERvTm90UmV0YWluKQotICAgICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEt
PmFkZChuZXdWYWx1ZS5maXJzdCk7Ci0gICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdC5yZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgewot
ICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3VsdC5nZXQoKS0+
dmFsdWUuZmlyc3QpKTsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQu
Z2V0KCktPnZhbHVlLmZpcnN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgaWYgKHNob3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+dmFs
dWUuc2Vjb25kKys7Ci0gICAgZWxzZSBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7
Ci0gICAgICAgIC8vIElmIHNob3VsZFJldGFpbiBpcyBEb05vdFJldGFpbiBhbmQgY291bnQgaXMg
MCwgd2Ugd2FudCB0byByZW1vdmUgdGhlIGZvbnREYXRhIGZyb20gCi0gICAgICAgIC8vIGdJbmFj
dGl2ZUZvbnREYXRhIChhYm92ZSkgYW5kIHJlLWFkZCBoZXJlIHRvIHVwZGF0ZSBMUlUgcG9zaXRp
b24uCi0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT52YWx1ZS5m
aXJzdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7Ci19
Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKLXsKLSAg
ICByZXR1cm4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24sIERvTm90
UmV0YWluKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoKnBsYXRm
b3JtRGF0YSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhKQorUmVmPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZv
bnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQog
ewotICAgIEFTU0VSVChnRm9udERhdGFDYWNoZSk7Ci0gICAgQVNTRVJUKCFmb250RGF0YS0+aXND
dXN0b21Gb250KCkpOwotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRMb2NrZXIgZm9udExv
Y2tlcjsKICNlbmRpZgogICAgIAotICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0Zv
bnREYXRhQ2FjaGUtPmZpbmQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKLSAgICBBU1NFUlQo
aXQgIT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKLSAgICBpZiAoaXQgPT0gZ0ZvbnREYXRhQ2Fj
aGUtPmVuZCgpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBhZGRSZXN1bHQgPSBjYWNoZWRG
b250cygpLmFkZChwbGF0Zm9ybURhdGEsIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFNpbXBsZUZvbnRE
YXRhOjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKIAotICAgIEFTU0VSVChpdC0+dmFsdWUuc2Vjb25k
KTsKLSAgICBpZiAoIS0taXQtPnZhbHVlLnNlY29uZCkKLSAgICAgICAgZ0luYWN0aXZlRm9udERh
dGEtPmFkZChpdC0+dmFsdWUuZmlyc3QpOworICAgIHJldHVybiAqYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVl
ZGVkKCkKIHsKICAgICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBtZW1vcnlQcmVzc3VyZUhh
bmRsZXIoKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICBpbnQgaW5hY3RpdmVGb250RGF0
YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5h
Y3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwotICAgIGludCB0YXJnZXRGb250
RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNUYXJnZXRVbmRlck1lbW9yeVByZXNz
dXJlSW5hY3RpdmVGb250RGF0YSA6IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhOwogCi0gICAgaWYg
KGdJbmFjdGl2ZUZvbnREYXRhICYmICFtX3B1cmdlUHJldmVudENvdW50ICYmIGdJbmFjdGl2ZUZv
bnREYXRhLT5zaXplKCkgPiBpbmFjdGl2ZUZvbnREYXRhTGltaXQpCi0gICAgICAgIHB1cmdlSW5h
Y3RpdmVGb250RGF0YShnSW5hY3RpdmVGb250RGF0YS0+c2l6ZSgpIC0gdGFyZ2V0Rm9udERhdGFM
aW1pdCk7CisgICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxp
bWl0KQorICAgICAgICByZXR1cm47CisgICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZv
bnREYXRhQ291bnQoKTsKKyAgICBpZiAoaW5hY3RpdmVDb3VudCA8PSBpbmFjdGl2ZUZvbnREYXRh
TGltaXQpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB0YXJnZXRGb250RGF0YUxpbWl0ID0g
dW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVG
b250RGF0YSA6IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhOworICAgIHB1cmdlSW5hY3RpdmVGb250
RGF0YShpbmFjdGl2ZUNvdW50IC0gdGFyZ2V0Rm9udERhdGFMaW1pdCk7CiB9CiAKLXZvaWQgRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQordm9pZCBGb250Q2FjaGU6
OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgcHVyZ2VDb3VudCkKIHsKICAgICBwcnVuZVVucmVm
ZXJlbmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7CiAKLSAgICBpZiAoIWdJbmFjdGl2
ZUZvbnREYXRhIHx8IG1fcHVyZ2VQcmV2ZW50Q291bnQpCisgICAgaWYgKG1fcHVyZ2VQcmV2ZW50
Q291bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpYyBib29sIGlzUHVyZ2luZzsgIC8v
IEd1YXJkIGFnYWluc3QgcmVlbnRyeSB3aGVuIGUuZy4gYSBkZWxldGVkIEZvbnREYXRhIHJlbGVh
c2VzIGl0cyBzbWFsbCBjYXBzIEZvbnREYXRhLgotICAgIGlmIChpc1B1cmdpbmcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlzUHVyZ2luZyA9IHRydWU7Ci0KICNpZiBQTEFURk9STShJT1MpCiAg
ICAgRm9udExvY2tlciBmb250TG9ja2VyOwogI2VuZGlmCiAKLSAgICBWZWN0b3I8UmVmUHRyPFNp
bXBsZUZvbnREYXRhPiwgMjA+IGZvbnREYXRhVG9EZWxldGU7Ci0gICAgTGlzdEhhc2hTZXQ8UmVm
UHRyPFNpbXBsZUZvbnREYXRhPj46Oml0ZXJhdG9yIGVuZCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5l
bmQoKTsKLSAgICBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+Pjo6aXRlcmF0b3Ig
aXQgPSBnSW5hY3RpdmVGb250RGF0YS0+YmVnaW4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50ICYmIGl0ICE9IGVuZDsgKytpdCwgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4mIGZvbnREYXRhID0gKml0LmdldCgpOwotICAgICAgICBnRm9udERhdGFDYWNoZS0+
cmVtb3ZlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgICAgIC8vIFdlIHNob3VsZCBu
b3QgZGVsZXRlIFNpbXBsZUZvbnREYXRhIGhlcmUgYmVjYXVzZSBkZWxldGlvbiBjYW4gbW9kaWZ5
IGdJbmFjdGl2ZUZvbnREYXRhLiBTZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQv
NDQwMTEKLSAgICAgICAgZm9udERhdGFUb0RlbGV0ZS5hcHBlbmQoZm9udERhdGEpOwotICAgIH0K
LQotICAgIGlmIChpdCA9PSBlbmQpIHsKLSAgICAgICAgLy8gUmVtb3ZlZCBldmVyeXRoaW5nCi0g
ICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5jbGVhcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIGdJbmFjdGl2ZUZv
bnREYXRhLT5yZW1vdmUoZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCkpOwotICAgIH0KLQotICAg
IGZvbnREYXRhVG9EZWxldGUuY2xlYXIoKTsKLQotICAgIGlmIChnRm9udFBsYXRmb3JtRGF0YUNh
Y2hlKSB7Ci0gICAgICAgIFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1Jl
bW92ZTsKLSAgICAgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZ0ZvbnRQ
bGF0Zm9ybURhdGFDYWNoZS0+c2l6ZSgpKTsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hl
OjppdGVyYXRvciBwbGF0Zm9ybURhdGFFbmQgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQo
KTsKLSAgICAgICAgZm9yIChGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3Jt
RGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmJlZ2luKCk7IHBsYXRmb3JtRGF0YSAhPSBw
bGF0Zm9ybURhdGFFbmQ7ICsrcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgICAgICBpZiAocGxhdGZv
cm1EYXRhLT52YWx1ZSAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEt
PnZhbHVlKSkKLSAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHBsYXRmb3JtRGF0
YS0+a2V5KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2l6ZV90IGtleXNUb1JlbW92
ZUNvdW50ID0ga2V5c1RvUmVtb3ZlLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzVG9SZW1vdmVDb3VudDsgKytpKQotICAgICAgICAgICAgZ0ZvbnRQbGF0Zm9ybURh
dGFDYWNoZS0+cmVtb3ZlKGtleXNUb1JlbW92ZVtpXSk7CisgICAgVmVjdG9yPFJlZlB0cjxTaW1w
bGVGb250RGF0YT4sIDIwPiBmb250c1RvRGVsZXRlOworICAgIGZvciAoYXV0byYgZm9udCA6IGNh
Y2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFmb250LT5oYXNPbmVSZWYoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb250c1RvRGVsZXRlLmFwcGVuZChXVEY6
Om1vdmUoZm9udCkpOworICAgICAgICBpZiAoIS0tcHVyZ2VDb3VudCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGZvbnQgOiBmb250c1RvRGVsZXRlKQorICAgICAg
ICBjYWNoZWRGb250cygpLnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEoKSk7CisKKyAgICBWZWN0
b3I8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiBrZXlzVG9SZW1vdmU7CisgICAga2V5c1RvUmVt
b3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuc2l6ZSgp
KTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkpIHsKKyAg
ICAgICAgaWYgKGVudHJ5LnZhbHVlICYmICFjYWNoZWRGb250cygpLmNvbnRhaW5zKCplbnRyeS52
YWx1ZSkpCisgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7CiAgICAg
fQorICAgIGZvciAoYXV0byBrZXkgOiBrZXlzVG9SZW1vdmUpCisgICAgICAgIGZvbnRQbGF0Zm9y
bURhdGFDYWNoZSgpLnJlbW92ZShrZXkpOwogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FM
KQogICAgIEZvbnRWZXJ0aWNhbERhdGFDYWNoZSYgZm9udFZlcnRpY2FsRGF0YUNhY2hlID0gZm9u
dFZlcnRpY2FsRGF0YUNhY2hlSW5zdGFuY2UoKTsKICAgICBpZiAoIWZvbnRWZXJ0aWNhbERhdGFD
YWNoZS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gTWFyayAmIHN3ZWVwIHVudXNlZCB2ZXJ0aWNh
bERhdGEKLSAgICAgICAgRm9udFZlcnRpY2FsRGF0YUNhY2hlOjppdGVyYXRvciB2ZXJ0aWNhbERh
dGFFbmQgPSBmb250VmVydGljYWxEYXRhQ2FjaGUuZW5kKCk7Ci0gICAgICAgIGZvciAoRm9udFZl
cnRpY2FsRGF0YUNhY2hlOjppdGVyYXRvciB2ZXJ0aWNhbERhdGEgPSBmb250VmVydGljYWxEYXRh
Q2FjaGUuYmVnaW4oKTsgdmVydGljYWxEYXRhICE9IHZlcnRpY2FsRGF0YUVuZDsgKyt2ZXJ0aWNh
bERhdGEpIHsKLSAgICAgICAgICAgIGlmICh2ZXJ0aWNhbERhdGEtPnZhbHVlKQotICAgICAgICAg
ICAgICAgIHZlcnRpY2FsRGF0YS0+dmFsdWUtPm1faW5Gb250Q2FjaGUgPSBmYWxzZTsKKyAgICAg
ICAgZm9yIChhdXRvJiB2ZXJ0aWNhbERhdGEgOiBmb250VmVydGljYWxEYXRhQ2FjaGUudmFsdWVz
KCkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNhbERhdGEpCisgICAgICAgICAgICAgICAgdmVy
dGljYWxEYXRhLT5tX2luRm9udENhY2hlID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgRm9u
dERhdGFDYWNoZTo6aXRlcmF0b3IgZm9udERhdGFFbmQgPSBnRm9udERhdGFDYWNoZS0+ZW5kKCk7
Ci0gICAgICAgIGZvciAoRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgZm9udERhdGEgPSBnRm9udERh
dGFDYWNoZS0+YmVnaW4oKTsgZm9udERhdGEgIT0gZm9udERhdGFFbmQ7ICsrZm9udERhdGEpIHsK
LSAgICAgICAgICAgIE9wZW5UeXBlVmVydGljYWxEYXRhKiB2ZXJ0aWNhbERhdGEgPSBjb25zdF9j
YXN0PE9wZW5UeXBlVmVydGljYWxEYXRhKj4oZm9udERhdGEtPnZhbHVlLmZpcnN0LT52ZXJ0aWNh
bERhdGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udERhdGEgOiBjYWNoZWRGb250cygpLnZh
bHVlcygpKSB7CisgICAgICAgICAgICBhdXV0byogdmVydGljYWxEYXRhID0gY29uc3RfY2FzdDxP
cGVuVHlwZVZlcnRpY2FsRGF0YSo+KGZvbnREYXRhLT52ZXJ0aWNhbERhdGEoKSk7CiAgICAgICAg
ICAgICBpZiAodmVydGljYWxEYXRhKQogICAgICAgICAgICAgICAgIHZlcnRpY2FsRGF0YS0+bV9p
bkZvbnRDYWNoZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgVmVjdG9yPEZvbnRGaWxlS2V5
PiBrZXlzVG9SZW1vdmU7CiAgICAgICAgIGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGZvbnRWZXJ0aWNhbERhdGFDYWNoZS5zaXplKCkpOwotICAgICAgICBmb3IgKEZvbnRWZXJ0
aWNhbERhdGFDYWNoZTo6aXRlcmF0b3IgdmVydGljYWxEYXRhID0gZm9udFZlcnRpY2FsRGF0YUNh
Y2hlLmJlZ2luKCk7IHZlcnRpY2FsRGF0YSAhPSB2ZXJ0aWNhbERhdGFFbmQ7ICsrdmVydGljYWxE
YXRhKSB7Ci0gICAgICAgICAgICBpZiAoIXZlcnRpY2FsRGF0YS0+dmFsdWUgfHwgIXZlcnRpY2Fs
RGF0YS0+dmFsdWUtPm1faW5Gb250Q2FjaGUpCi0gICAgICAgICAgICAgICAga2V5c1RvUmVtb3Zl
LmFwcGVuZCh2ZXJ0aWNhbERhdGEtPmtleSk7CisgICAgICAgIGZvciAoYXV0byYgaXQgOiBmb250
VmVydGljYWxEYXRhQ2FjaGUpIHsKKyAgICAgICAgICAgIGlmICghaXQudmFsdWUgfHwgIWl0LnZh
bHVlLT5tX2luRm9udENhY2hlKQorICAgICAgICAgICAgICAgIGtleXNUb1JlbW92ZS5hcHBlbmQo
aXQua2V5KTsKICAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBr
ZXlzVG9SZW1vdmUuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIGZvbnRWZXJ0
aWNhbERhdGFDYWNoZS50YWtlKGtleXNUb1JlbW92ZVtpXSk7CisgICAgICAgIGZvciAoYXV0byYg
a2V5IDoga2V5c1RvUmVtb3ZlKQorICAgICAgICAgICAgZm9udFZlcnRpY2FsRGF0YUNhY2hlLnJl
bW92ZShrZXkpOwogICAgIH0KICNlbmRpZgotCi0gICAgaXNQdXJnaW5nID0gZmFsc2U7CiB9CiAK
IHNpemVfdCBGb250Q2FjaGU6OmZvbnREYXRhQ291bnQoKQogewotICAgIGlmIChnRm9udERhdGFD
YWNoZSkKLSAgICAgICAgcmV0dXJuIGdGb250RGF0YUNhY2hlLT5zaXplKCk7Ci0gICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGNhY2hlZEZvbnRzKCkuc2l6ZSgpOwogfQogCiBzaXplX3QgRm9udENh
Y2hlOjppbmFjdGl2ZUZvbnREYXRhQ291bnQoKQogewotICAgIGlmIChnSW5hY3RpdmVGb250RGF0
YSkKLSAgICAgICAgcmV0dXJuIGdJbmFjdGl2ZUZvbnREYXRhLT5zaXplKCk7Ci0gICAgcmV0dXJu
IDA7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZvbnRMb2NrZXIgZm9udExvY2tlcjsKKyNlbmRp
ZgorICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRG
b250cygpLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYoKSkKKyAgICAg
ICAgICAgICsrY291bnQ7CisgICAgfQorICAgIHJldHVybiBjb3VudDsKIH0KIAotUGFzc1JlZlB0
cjxGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rv
cikKK1JlZlB0cjxGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5QXRJbmRleChjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBpbnQmIGZhbWlseUluZGV4LCBGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAgICBBU1NFUlQoZmFtaWx5SW5kZXggIT0gY0FsbEZh
bWlsaWVzU2Nhbm5lZCk7CiAgICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQ7CkBAIC01NjUsNyAr
NTA0LDcgQEAgUGFzc1JlZlB0cjxGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RAogICAgICAg
ICBpZiAoZm9udFNlbGVjdG9yKQogICAgICAgICAgICAgcmVzdWx0ID0gZm9udFNlbGVjdG9yLT5n
ZXRGb250RGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5KTsKICAgICAgICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgICAgICByZXN1bHQgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGZhbWls
eSk7CiAgICAgfQogICAgIGlmIChmYW1pbHlJbmRleCA9PSBmYW1pbHlDb3VudCkKICAgICAgICAg
ZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxpZXNTY2FubmVkOwpAQCAtNTg4LDcgKzUyNyw3IEBAIFBh
c3NSZWZQdHI8Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udEQKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZGF0YS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gU3RpbGwgbm8gcmVz
dWx0LiAgSGFuZCBiYWNrIG91ciBsYXN0IHJlc29ydCBmYWxsYmFjayBmb250LgotICAgICAgICBy
ZXN1bHQgPSBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKKyAgICAgICAg
cmVzdWx0ID0gbGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbik7CiAgICAgfQogICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQpAQCAtNjIyLDEyICs1NjEsMTEgQEAgdW5zaWdu
ZWQgc2hvcnQgRm9udENhY2hlOjpnZW5lcmF0aW9uKCkKIHZvaWQgRm9udENhY2hlOjppbnZhbGlk
YXRlKCkKIHsKICAgICBpZiAoIWdDbGllbnRzKSB7Ci0gICAgICAgIEFTU0VSVCghZ0ZvbnRQbGF0
Zm9ybURhdGFDYWNoZSk7CisgICAgICAgIEFTU0VSVChmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5p
c0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGdGb250UGxhdGZv
cm1EYXRhQ2FjaGUpCi0gICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmNsZWFyKCk7Cisg
ICAgZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuY2xlYXIoKTsKICAgICBpbnZhbGlkYXRlRm9udEds
eXBoc0NhY2hlKCk7CiAKICAgICBnR2VuZXJhdGlvbisrOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTEsMTMgKzExMSwxMCBAQCBjbGFzcyBGb250Q2FjaGUgewogcHVibGljOgogICAgIGZy
aWVuZCBGb250Q2FjaGUmIGZvbnRDYWNoZSgpOwogCi0gICAgZW51bSBTaG91bGRSZXRhaW4geyBS
ZXRhaW4sIERvTm90UmV0YWluIH07Ci0KLSAgICBQYXNzUmVmUHRyPEZvbnREYXRhPiBnZXRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0
b3IqKTsKLSAgICB2b2lkIHJlbGVhc2VGb250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSopOwor
ICAgIFJlZlB0cjxGb250RGF0YT4gZm9udEZvckZhbWlseUF0SW5kZXgoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgaW50JiBmYW1pbHlJbmRleCwgRm9udFNlbGVjdG9yKik7CiAKICAgICAvLyBUaGlz
IG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlz
UGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CisgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEs
IGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQg
cGxhdGZvcm1Jbml0KCk7CkBAIC0xMzQsOSArMTMxLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBn
ZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+Jik7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRDYWNo
ZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4p
OwotICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0YWluID0g
UmV0YWluKTsKLSAgICBTaW1wbGVGb250RGF0YSogZ2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNl
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2ltcGxlRm9udERhdGE+IGxhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIGFkZENsaWVudChG
b250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3IqKTsKQEAg
LTE5MSw3ICsxODcsNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwogI2VuZGlm
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRDYWNo
ZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhKiwgU2hvdWxkUmV0YWluID0gUmV0YWlu
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2ltcGxlRm9udERhdGE+IGZvbnRGb3JQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCiAgICAgLy8gRG9uJ3QgcHVyZ2UgaWYg
dGhpcyBjb3VudCBpcyA+IDA7CiAgICAgaW50IG1fcHVyZ2VQcmV2ZW50Q291bnQ7CkBAIC0xOTks
NyArMTk1LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBmcmllbmQgY2xh
c3MgQ29tcGxleFRleHRDb250cm9sbGVyOwogI2VuZGlmCi0gICAgZnJpZW5kIGNsYXNzIFNpbXBs
ZUZvbnREYXRhOyAvLyBGb3IgZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSopCisgICAgZnJpZW5kIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogICAgIGZyaWVuZCBjbGFzcyBG
b250R2x5cGhzOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEdseXBocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEdseXBocy5jcHAJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwx
OCArNTksMTEgQEAgRm9udEdseXBoczo6Rm9udEdseXBocyhjb25zdCBGb250UGxhdGZvcgogICAg
ICwgbV9sb2FkaW5nQ3VzdG9tRm9udHMoZmFsc2UpCiAgICAgLCBtX2lzRm9yUGxhdGZvcm1Gb250
KHRydWUpCiB7Ci0gICAgUmVmUHRyPEZvbnREYXRhPiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLmdl
dENhY2hlZEZvbnREYXRhKCZwbGF0Zm9ybURhdGEpOwotICAgIG1fcmVhbGl6ZWRGb250RGF0YS5h
cHBlbmQoZm9udERhdGEucmVsZWFzZSgpKTsKKyAgICBtX3JlYWxpemVkRm9udERhdGEuYXBwZW5k
KGZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKSk7CiB9CiAKLXZv
aWQgRm9udEdseXBoczo6cmVsZWFzZUZvbnREYXRhKCkKK0ZvbnRHbHlwaHM6On5Gb250R2x5cGhz
KCkKIHsKLSAgICB1bnNpZ25lZCBudW1Gb250cyA9IG1fcmVhbGl6ZWRGb250RGF0YS5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZvbnRzOyArK2kpIHsKLSAgICAgICAg
aWYgKG1fcmVhbGl6ZWRGb250RGF0YVtpXS0+aXNDdXN0b21Gb250KCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgZm9udENhY2hlKCkucmVsZWFzZUZvbnREYXRhKGRvd25jYXN0PFNp
bXBsZUZvbnREYXRhPihtX3JlYWxpemVkRm9udERhdGFbaV0uZ2V0KCkpKTsKLSAgICB9CiB9CiAK
IHZvaWQgRm9udEdseXBoczo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKQEAgLTExMywxMCArMTA2LDEwIEBAIGNvbnN0IEZvbnREYXRhKiBGb250R2x5
cGhzOjpyZWFsaXplRm9udEQKIAogICAgIC8vIEFzayB0aGUgZm9udCBjYWNoZSBmb3IgdGhlIGZv
bnQgZGF0YS4KICAgICAvLyBXZSBhcmUgb2J0YWluaW5nIHRoaXMgZm9udCBmb3IgdGhlIGZpcnN0
IHRpbWUuIFdlIGtlZXAgdHJhY2sgb2YgdGhlIGZhbWlsaWVzIHdlJ3ZlIGxvb2tlZCBhdCBiZWZv
cmUKLSAgICAvLyBpbiB8bV9mYW1pbHlJbmRleHwsIHNvIHRoYXQgd2UgbmV2ZXIgc2NhbiB0aGUg
c2FtZSBzcG90IGluIHRoZSBsaXN0IHR3aWNlLiBnZXRGb250RGF0YSB3aWxsIGFkanVzdCBvdXIK
KyAgICAvLyBpbiB8bV9mYW1pbHlJbmRleHwsIHNvIHRoYXQgd2UgbmV2ZXIgc2NhbiB0aGUgc2Ft
ZSBzcG90IGluIHRoZSBsaXN0IHR3aWNlLiBmb250Rm9yRmFtaWx5QXRJbmRleCB3aWxsIGFkanVz
dCBvdXIKICAgICAvLyB8bV9mYW1pbHlJbmRleHwgYXMgaXQgc2NhbnMgZm9yIHRoZSByaWdodCBm
b250IHRvIG1ha2UuCiAgICAgQVNTRVJUKGZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSA9PSBtX2dl
bmVyYXRpb24pOwotICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0ID0gZm9udENhY2hlKCkuZ2V0
Rm9udERhdGEoZGVzY3JpcHRpb24sIG1fZmFtaWx5SW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgp
KTsKKyAgICBSZWZQdHI8Rm9udERhdGE+IHJlc3VsdCA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1p
bHlBdEluZGV4KGRlc2NyaXB0aW9uLCBtX2ZhbWlseUluZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQo
KSk7CiAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICBtX3JlYWxpemVkRm9udERhdGEuYXBwZW5k
KHJlc3VsdCk7CiAgICAgICAgIGlmIChyZXN1bHQtPmlzTG9hZGluZygpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHbHlwaHMuaAkocmV2aXNpb24gMTc4
MDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEZv
bnRHbHlwaHM+IGNyZWF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRHbHlwaHMoZm9udFNlbGVjdG9yKSk7IH0KICAgICBz
dGF0aWMgUmVmPEZvbnRHbHlwaHM+IGNyZWF0ZUZvclBsYXRmb3JtRm9udChjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBo
cyhwbGF0Zm9ybURhdGEpKTsgfQogCi0gICAgfkZvbnRHbHlwaHMoKSB7IHJlbGVhc2VGb250RGF0
YSgpOyB9CisgICAgfkZvbnRHbHlwaHMoKTsKIAogICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2lzRm9yUGxhdGZvcm1Gb250OyB9CiAKQEAgLTc3LDggKzc3LDYg
QEAgcHJpdmF0ZToKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNo
YXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9udERhdGFWYXJpYW50KTsKICAgICBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBjb25z
dCBGb250RGVzY3JpcHRpb24mLCBGb250RGF0YVZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrTGV2
ZWwpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWxlYXNlRm9udERhdGEoKTsKICAgICAK
ICAgICBWZWN0b3I8UmVmUHRyPEZvbnREYXRhPiwgMT4gbV9yZWFsaXplZEZvbnREYXRhOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuY3BwCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw5ICsxNTQs
NiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAKIFNpbXBsZUZv
bnREYXRhOjp+U2ltcGxlRm9udERhdGEoKQogewotICAgIGlmICghaXNTVkdGb250KCkpCi0gICAg
ICAgIHBsYXRmb3JtRGVzdHJveSgpOwotCiAgICAgcmVtb3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2Fj
aGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwx
NSArODEsMTUgQEAgcHVibGljOgogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0
Zm9ybSBmb250cy4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRl
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgYm9vbCBpc0N1c3RvbUZvbnQg
PSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZh
bGxiYWNrID0gZmFsc2UpCisgICAgc3RhdGljIFJlZjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgYm9vbCBpc0N1c3RvbUZvbnQgPSBm
YWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrID0gZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNpbXBsZUZv
bnREYXRhKHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9u
dERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50
YXRpb25GYWxsYmFjaykpOwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBGb250
cy4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKHN0ZDo6dW5p
cXVlX3B0cjxTVkdEYXRhPiBzdmdEYXRhLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRh
PiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXpl
LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaW1wbGVGb250RGF0YShXVEY6Om1vdmUoc3ZnRGF0YSks
IGZvbnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2ltcGxlRm9udERhdGEoV1RGOjptb3ZlKHN2Z0RhdGEpLCBmb250
U2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+U2ltcGxlRm9udERhdGEoKTsKQEAgLTIyMiw3ICsyMjIsNiBAQCBwcml2YXRlOgogICAg
IHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAgICAgdm9pZCBwbGF0Zm9ybUdseXBoSW5pdCgpOwogICAg
IHZvaWQgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3ko
KTsKIAogICAgIHZvaWQgaW5pdENoYXJXaWR0aHMoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MSw3ICs4MSw3IEBAIEZjUGF0dGVybiogZmluZEJlc3RGb250R2l2ZW5GYWxsYmFja3Mo
Y28KICAgICByZXR1cm4gRmNGb250U2V0TWF0Y2goMCwgc2V0cywgMSwgcGF0dGVybiwgJmZvbnRD
b25maWdSZXN1bHQpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRh
LCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBSZWZQ
dHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRSZWYoY3JlYXRlRm9udENvbmZpZ1BhdHRlcm5G
b3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnREYXRhID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRhKCk7CkBAIC04
OSw3ICs4OSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3kKICAg
ICBSZWZQdHI8RmNQYXR0ZXJuPiBmYWxsYmFja1BhdHRlcm4gPSBhZG9wdFJlZihmaW5kQmVzdEZv
bnRHaXZlbkZhbGxiYWNrcyhmb250RGF0YSwgcGF0dGVybi5nZXQoKSkpOwogICAgIGlmIChmYWxs
YmFja1BhdHRlcm4pIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250RGF0
YShmYWxsYmFja1BhdHRlcm4uZ2V0KCksIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIGdl
dENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250RGF0YSwgRG9Ob3RSZXRhaW4pOworICAgICAg
ICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250RGF0YSk7CiAgICAgfQog
CiAgICAgRmNSZXN1bHQgZm9udENvbmZpZ1Jlc3VsdDsKQEAgLTk3LDE1ICs5NywxNSBAQCBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5CiAgICAgaWYgKCFyZXN1bHRQYXR0
ZXJuKQogICAgICAgICByZXR1cm4gMDsKICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZv
bnREYXRhKHJlc3VsdFBhdHRlcm4uZ2V0KCksIGRlc2NyaXB0aW9uKTsKLSAgICByZXR1cm4gZ2V0
Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnREYXRhLCBEb05vdFJldGFpbik7CisgICAgcmV0
dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udERhdGEpOwogfQogCi1QYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91
bGRSZXRhaW4pCitSZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICAv
LyBXZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBs
b2dpYyBwcmV2ZW50aW5nIEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJh
Y2sgZm9udHMgbWlnaHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCiAgICAg
c3RhdGljIEF0b21pY1N0cmluZyB0aW1lc1N0cigic2VyaWYiKTsKLSAgICByZXR1cm4gZ2V0Q2Fj
aGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2UsIHNob3VsZFJldGFp
bik7CisgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIs
IGZhbHNlKTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxl
Rm9udERhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSw2IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQ2hhcldpZHRoSW4KICAgICBpbml0Q2hhcldpZHRocygpOwogfQogCi12b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQotewotfQotCiBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJ
T1MubW0JKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZQogICAgIEZvbnRQbGF0Zm9y
bURhdGEgYWx0ZXJuYXRlRm9udChzdWJzdGl0dXRlRm9udC5nZXQoKSwgcGxhdGZvcm1EYXRhLnNp
emUoKSwgcGxhdGZvcm1EYXRhLmlzUHJpbnRlckZvbnQoKSwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljT2JsaXF1ZSwgcGxhdGZvcm1EYXRhLm1fb3JpZW50YXRpb24pOwogICAgIGFsdGVybmF0ZUZv
bnQubV9pc0Vtb2ppID0gQ1RGb250SXNBcHBsZUNvbG9yRW1vamkoc3Vic3RpdHV0ZUZvbnQuZ2V0
KCkpOwogCi0gICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250LCBEb05v
dFJldGFpbik7CisgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7
CiB9CiAKIGVudW0gY2xhc3MgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgewpAQCAtMTk0LDEyICsxOTQs
MTYgQEAgc3RhdGljIExhbmd1YWdlU3BlY2lmaWNGb250IGxhbmd1YWdlU3BlYwogICAgIHJldHVy
biBMYW5ndWFnZVNwZWNpZmljRm9udDo6Tm9uZTsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9u
dERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSog
b3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpCiB7CiAgICAgLy8gVW5saWtlIE9TIFgsIG91ciBmYWxsYmFjayBmb250IG9uIGlQaG9uZSBp
cyBBcmlhbCBVbmljb2RlLCB3aGljaCBkb2Vzbid0IGhhdmUgc29tZSBhcHBsZS1zcGVjaWZpYyBn
bHlwaHMgbGlrZSBGOEZGLgogICAgIC8vIEZhbGwgYmFjayB0byB0aGUgQXBwbGUgRmFsbGJhY2sg
Zm9udCBpbiB0aGlzIGNhc2UuCi0gICAgaWYgKGxlbmd0aCA+IDAgJiYgcmVxdWlyZXNDdXN0b21G
YWxsYmFja0ZvbnQoKmNoYXJhY3RlcnMpKQotICAgICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERh
dGEoZ2V0Q3VzdG9tRmFsbGJhY2tGb250KCpjaGFyYWN0ZXJzLCBkZXNjcmlwdGlvbiksIERvTm90
UmV0YWluKTsKKyAgICBpZiAobGVuZ3RoID4gMCAmJiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9u
dCgqY2hhcmFjdGVycykpIHsKKyAgICAgICAgYXV0byogZmFsbGJhY2sgPSBnZXRDdXN0b21GYWxs
YmFja0ZvbnQoKmNoYXJhY3RlcnMsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgaWYgKCFmYWxsYmFj
aykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZm9udEZvclBs
YXRmb3JtRGF0YSgqZmFsbGJhY2spOworICAgIH0KIAogICAgIFVDaGFyMzIgYyA9ICpjaGFyYWN0
ZXJzOwogICAgIGlmIChsZW5ndGggPiAxICYmIFUxNl9JU19MRUFEKGMpICYmIFUxNl9JU19UUkFJ
TChjaGFyYWN0ZXJzWzFdKSkKQEAgLTI5NCw3ICsyOTgsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OnN5CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRX
ZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3ByZWZlcnJlZENKS0Zv
bnRdIDogKmNqa1BsYWluW3ByZWZlcnJlZENKS0ZvbnRdLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwor
ICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pL
Rm9udF0gOiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlKTsKICAgICAgICAgYm9v
bCB1c2VTZWNvbmRhcnlGb250ID0gdHJ1ZTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnREYXRhKSB7
CiAgICAgICAgICAgICBDR0dseXBoIGdseXBoc1syXTsKQEAgLTMwNiwzMSArMzEwLDMxIEBAIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3kKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICh1c2VTZWNvbmRhcnlGb250KQotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBn
ZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFpbltzZWNv
bmRhcnlDSktGb250XSwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgICAgIHNpbXBsZUZv
bnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtzZWNvbmRhcnlDSktGb250XSA6ICpjamtQbGFp
bltzZWNvbmRhcnlDSktGb250XSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6S29yZWFuOiB7CiAgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhblBsYWluKCJBcHBsZVNER290aGljTmVvLU1l
ZGl1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBrb3JlYW5Cb2xkKCJBcHBsZVNER290aGlj
TmVvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAg
c2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBrb3JlYW5Cb2xkIDoga29yZWFuUGxhaW4s
IGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkg
PyBrb3JlYW5Cb2xkIDoga29yZWFuUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkN5cmlsbGljOiB7CiAgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGN5cmlsbGljUGxhaW4oIkhlbHZldGlj
YU5ldWUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxsaWNCb2xkKCJIZWx2ZXRpY2FO
ZXVlLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAg
c2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1Bs
YWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0
KCkpID8gY3lyaWxsaWNCb2xkIDogY3lyaWxsaWNQbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6QXJhYmljOiB7CiAgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFyYWJpY1BsYWluKCJHZWV6
YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBhcmFiaWNCb2xkKCJHZWV6YVByby1Cb2xk
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZv
bnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQo
ZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmljQm9sZCA6IGFyYWJpY1BsYWluLCBmYWxzZSwg
RG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gYXJhYmlj
Qm9sZCA6IGFyYWJpY1BsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpIZWJyZXc6IHsKICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gaGVicmV3UGxhaW4oIkFyaWFsSGVicmV3IiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGhlYnJld0JvbGQoIkFyaWFsSGVicmV3LUJvbGQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBn
ZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVicmV3UGxhaW4sIGZhbHNlLCBEb05vdFJldGFp
bik7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
aXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBoZWJyZXdCb2xkIDogaGVi
cmV3UGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3Vh
Z2VTcGVjaWZpY0ZvbnQ6OkluZGljOiB7CkBAIC0zODYsMzYgKzM5MCwzNiBAQCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5CiAgICAgICAgIGlmIChpbmRpY1BhZ2VPcmRl
ckluZGV4IDwgKHNpemVvZihpbmRpY1VuaWNvZGVQYWdlRm9udHMpIC8gc2l6ZW9mKEF0b21pY1N0
cmluZyopKSkgewogICAgICAgICAgICAgQXRvbWljU3RyaW5nKiBpbmRpY0ZvbnRTdHJpbmcgPSBp
c0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGluZGljVW5pY29kZVBhZ2VG
b250c0JvbGRbaW5kaWNQYWdlT3JkZXJJbmRleF0gOiBpbmRpY1VuaWNvZGVQYWdlRm9udHNbaW5k
aWNQYWdlT3JkZXJJbmRleF07CiAgICAgICAgICAgICBpZiAoaW5kaWNGb250U3RyaW5nKQotICAg
ICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRp
b24sICppbmRpY0ZvbnRTdHJpbmcsIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAqaW5kaWNGb250
U3RyaW5nLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRoYWk6IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gdGhhaVBsYWluKCJUaG9uYnVyaSIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiB0aGFpQm9sZCgiVGhvbmJ1cmktQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnRE
YXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
IHRoYWlCb2xkIDogdGhhaVBsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1w
bGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQo
ZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhhaUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OlRpYmV0
YW46IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRh
blBsYWluKCJLYWlsYXNhIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHRpYmV0YW5Cb2xkKCJL
YWlsYXNhLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250
V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyB0aWJldGFuQm9sZCA6IHRpYmV0YW5Q
bGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpDYW5hZGlhbkFib3JpZ2lu
YWxTeWxsYWJpYzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjYXNQbGFpbigiRXVwaGVtaWFVQ0FTIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNhc0Jv
bGQoIkV1cGhlbWlhVUNBUy1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRp
b24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gY2FzQm9sZCA6IGNh
c1BsYWluLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZv
bnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpID8gY2FzQm9sZCA6IGNhc1BsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpLaG1lcjogewogICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBraG1lcigiS2htZXJTYW5nYW1NTiIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0
YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBraG1lciwgZmFsc2UsIERvTm90UmV0
YWluKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBraG1lciwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFn
ZVNwZWNpZmljRm9udDo6TGFvOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGxhbygiTGFvU2FuZ2FtTU4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNj
cmlwdGlvbiwgbGFvLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0
YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGxhbywgZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgZGVmYXVsdDogewpAQCAtNDI2LDExICs0MzAsMTEgQEAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeQogICAgICAgICAgICAgICAgIHVzZUVtb2pp
Rm9udCA9IENGQ2hhcmFjdGVyU2V0SXNMb25nQ2hhcmFjdGVyTWVtYmVyKGFwcGxlQ29sb3JFbW9q
aUNoYXJhY3RlclNldCgpLCBjKTsKICAgICAgICAgfQogICAgICAgICBpZiAodXNlRW1vamlGb250
KQotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlw
dGlvbiwgYXBwbGVDb2xvckVtb2ppLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICAgICAg
c2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1v
amksIGZhbHNlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiBmYWxsYmFja0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvckNoYXJhY3RlcnMob3Jp
Z2luYWxGb250RGF0YS0+Z2V0Q1RGb250KCksIGNoYXJhY3RlcnMsIGxlbmd0aCwgbnVsbHB0cikp
OwogICAgICAgICAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZm91bmRGb250TmFtZSA9
IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKGZhbGxiYWNrRm9udC5nZXQoKSkpKQot
ICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3Jp
cHRpb24sIGZvdW5kRm9udE5hbWUuZ2V0KCksIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAg
ICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBmb3Vu
ZEZvbnROYW1lLmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtNDM5LDcgKzQ0Myw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6c3kKICAgICBpZiAoc2ltcGxlRm9udERhdGEpCiAgICAgICAgIHJldHVybiBzaW1wbGVGb250
RGF0YS5yZWxlYXNlKCk7CiAKLSAgICByZXR1cm4gZ2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KGRlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gbGFzdFJlc29ydEZhbGxiYWNrRm9u
dChkZXNjcmlwdGlvbik7CiB9CiAKIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKQEAgLTQ1Nyw3ICs0NjEsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OnNpCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1l
bmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBt
ZW5sbykpIHsKLSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEo
ZGVzY3JpcHRpb24sIGNvdXJpZXIpOworICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKQEAgLTQ2NSw3ICs0NjksNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6OnNpCiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsK
LSAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRp
b24sIHZlcmRhbmEpOworICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCB2ZXJkYW5hKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKQEAgLTQ3NywxNiArNDgxLDE2IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6c2kKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2Vl
emFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhc2ltcGxlRm9udERhdGE7ICsr
aikKICAgICAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNl
KSkKLSAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRl
c2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXph
Qm9sZCA6IGdlZXphUGxhaW4pOworICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWln
aHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKICAgICB9CiAKICAgICByZXR1cm4gc2lt
cGxlRm9udERhdGEucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitSZWY8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBmYWxsYmFja0ZvbnRGYW1pbHkoIi5QaG9uZUZhbGxiYWNrIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGdldENhY2hlZEZvbnRE
YXRhKGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250RmFtaWx5LCBmYWxzZSwgc2hvdWxkUmV0
YWluKTsKKyAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFj
a0ZvbnRGYW1pbHksIGZhbHNlKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpn
ZXRDdXN0b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvU2ltcGxlRm9udERhdGFJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL1NpbXBsZUZvbnREYXRhSU9TLm1tCShyZXZpc2lvbiAxNzgwMzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhl
dGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250
VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3lu
dGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNj
YWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwogCi0gICAgICAgIHJldHVybiBm
b250Q2FjaGUoKS5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9udERhdGEpOworICAgICAgICBy
ZXR1cm4gZm9udENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRGb250RGF0YSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI3NiwxMyArMjc2LDEzIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGwKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxleFRleHRS
dW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udERhdGEo
KSwgY3AsIHN0cmluZ0xvY2F0aW9uICsgcnVuUmFuZ2UubG9jYXRpb24sIHJ1blJhbmdlLmxlbmd0
aCwgbV9ydW4ubHRyKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9u
dENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250
TmFtZS5nZXQoKSwgZmFsc2UsIEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pLmdldCgpOworICAgICAg
ICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkobV9m
b250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2UpLmdldCgpOwogI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgICAgICAgICAgICAgIC8vIENvcmUgVGV4dCBtYXkgaGF2
ZSB1c2VkIGEgZm9udCB0aGF0IGlzIG5vdCBrbm93biB0byBOU0ZvbnRNYW5hZ2VyLiBJbiB0aGF0
IGNhc2UsIGZhbGwgYmFjayBvbgogICAgICAgICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgZm9u
dCBhcyByZXR1cm5lZCwgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdCBoYXZlIHRoZSBiZXN0IE5TRm9u
dFJlbmRlcmluZ01vZGUuCiAgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVuRm9udFBsYXRmb3Jt
RGF0YSgoTlNGb250ICopcnVuRm9udCwgQ1RGb250R2V0U2l6ZShydW5Gb250KSwgbV9mb250LmZv
bnREZXNjcmlwdGlvbigpLnVzZVByaW50ZXJGb250KCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcnVuRm9udERhdGEgPSBmb250Q2FjaGUoKS5nZXRDYWNoZWRGb250RGF0YSgmcnVuRm9udFBs
YXRmb3JtRGF0YSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBydW5Gb250RGF0YSA9ICZmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRh
KHJ1bkZvbnRQbGF0Zm9ybURhdGEpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAjZWxz
ZQogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSnVzdCBhc3NlcnQgZm9yIG5vdywgdW50
aWwgd2UgY2FuIGRldmlzZSBhIGJldHRlciBmaXggdGhhdCB3b3JrcyB3aXRoIGlPUy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNo
ZU1hYy5tbQkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNyw3
IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9BY3RpdmF0ZUZvbnRJZk5lZWQKICAgICByZXR1cm4g
a25vd25GYW1pbGllcy5nZXQoKS5hZGQoZmFtaWx5KS5pc05ld0VudHJ5OwogfQogCi1QYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0
YSogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6
c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxh
dGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBV
Q2hhcjMyIGNoYXJhY3RlcjsKICAgICBVMTZfR0VUKGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwg
Y2hhcmFjdGVyKTsKQEAgLTQwMiw3ICs0MDIsNyBAQCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6OnN5CiAgICAgICAgICFpc1BsYXRmb3JtRm9udCAmJiAodHJhaXRzICYgTlNG
b250SXRhbGljVHJhaXQpICYmICEoc3Vic3RpdHV0ZUZvbnRUcmFpdHMgJiBOU0ZvbnRJdGFsaWNU
cmFpdCksCiAgICAgICAgIHBsYXRmb3JtRGF0YS5tX29yaWVudGF0aW9uKTsKIAotICAgIHJldHVy
biBnZXRDYWNoZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udCwgRG9Ob3RSZXRhaW4pOworICAgIHJl
dHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCiBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC00MTksMjcgKzQxOSwyNyBAQCBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnNpCiAgICAgICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGdlZXphU3RyLCAoIkdlZXphIFBybyIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250RGF0YTsgKytqKQogICAgICAgICAgICAgaWYgKGZh
bWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGdlZXphU3RyKTsK
KyAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRp
b24sIGdlZXphU3RyKTsKICAgICB9CiAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2Uo
KTsKIH0KIAotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBT
aG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUmVmPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgdGltZXNTdHIsICgiVGltZXMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CiAKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQg
dGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8v
IHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55
IHByZWZzLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSwgc2hvdWxkUmV0
YWluKTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gZm9udEZv
ckZhbWlseShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSk7CiAgICAgaWYgKHNpbXBs
ZUZvbnREYXRhKQotICAgICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOworICAg
ICAgICByZXR1cm4gKnNpbXBsZUZvbnREYXRhOwogCiAgICAgLy8gVGhlIFRpbWVzIGZhbGxiYWNr
IHdpbGwgYWxtb3N0IGFsd2F5cyB3b3JrLCBidXQgaW4gdGhlIGhpZ2hseSB1bnVzdWFsIGNhc2Ug
d2hlcmUKICAgICAvLyB0aGUgdXNlciBkb2Vzbid0IGhhdmUgaXQsIHdlIGZhbGwgYmFjayBvbiBM
dWNpZGEgR3JhbmRlIGJlY2F1c2UgdGhhdCdzCiAgICAgLy8gZ3VhcmFudGVlZCB0byBiZSB0aGVy
ZSwgYWNjb3JkaW5nIHRvIE5hdGhhbiBUYXlsb3IuIFRoaXMgaXMgZ29vZCBlbm91Z2gKICAgICAv
LyB0byBhdm9pZCBhIGNyYXNoIGF0IGxlYXN0LgogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGx1Y2lkYUdyYW5kZVN0ciwgKCJMdWNpZGEgR3JhbmRlIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBnZXRDYWNo
ZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGx1Y2lkYUdyYW5kZVN0ciwgZmFsc2UsIHNob3Vs
ZFJldGFpbik7CisgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgbHVj
aWRhR3JhbmRlU3RyLCBmYWxzZSk7CiB9CiAKIHZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZh
bWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lZD4mIHRy
YWl0c01hc2tzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTc4MDM1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsMTggKzI2Miw2IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQ2hhcldpZHRoSW4KIH0KICNlbmRpZiAvLyBVU0UoQVBQS0lUKQogCi12b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQotewotICAgIGlmICghaXNDdXN0b21Gb250
KCkgJiYgbV9kZXJpdmVkRm9udERhdGEpIHsKLSAgICAgICAgLy8gVGhlc2UgY29tZSBmcm9tIHRo
ZSBjYWNoZS4KLSAgICAgICAgaWYgKG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCi0gICAg
ICAgICAgICBmb250Q2FjaGUoKS5yZWxlYXNlRm9udERhdGEobV9kZXJpdmVkRm9udERhdGEtPnNt
YWxsQ2Fwcy5nZXQoKSk7Ci0KLSAgICAgICAgaWYgKG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcmspCi0gICAgICAgICAgICBmb250Q2FjaGUoKS5yZWxlYXNlRm9udERhdGEobV9kZXJpdmVk
Rm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKSk7Ci0gICAgfQotfQotCiAjaWYgIVBMQVRGT1JN
KElPUykKIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKQEAgLTMwNCw4ICsyOTIsNyBAQCBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIHNjYWxlZEZvbnRE
YXRhLm1fc3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYgTlNCb2xkRm9udE1hc2spICYmICEo
c2NhbGVkRm9udFRyYWl0cyAmIE5TQm9sZEZvbnRNYXNrKTsKICAgICAgICAgc2NhbGVkRm9udERh
dGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKSAm
JiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNrKTsKIAotICAgICAgICAvLyBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkgdGFrZXMgY2FyZSBvZiBub3QgZGVsZXRp
bmcgdGhlIGNhY2hlZCBmb250IGRhdGEgdHdpY2UuCi0gICAgICAgIHJldHVybiBmb250Q2FjaGUo
KS5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9udERhdGEpOworICAgICAgICByZXR1cm4gZm9u
dENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShzY2FsZWRGb250RGF0YSk7CiAgICAgfQogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL01p
c2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTc4
MDM1KQorKysgU291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogUGFzc1JlZlB0cjxGb250RGF0YT4gRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvcjo6
Z2V0RmFsbGJhY2tGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgc2l6ZV90KQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNT
dHJpbmcsIGFwcGxlQ29sb3JFbW9qaSwgKCJBcHBsZSBDb2xvciBFbW9qaSIpKTsKLSAgICBSZWZQ
dHI8Rm9udERhdGE+IGZvbnREYXRhID0gZm9udENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBhcHBsZUNvbG9yRW1vamkpOworICAgIFJlZlB0cjxGb250RGF0YT4gZm9u
dERhdGEgPSBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgYXBwbGVD
b2xvckVtb2ppKTsKICAgICBpZiAoIWZvbnREYXRhKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGdldCBcIkFwcGxlIENvbG9yIEVtb2ppXCIgZnJvbSB0aGUgZm9udCBjYWNoZS4gVXNp
bmcgdGhlIGxhc3QgcmVzb3J0IGZhbGxiYWNrIGZvbnQgaW5zdGVhZC4iKTsKLSAgICAgICAgZm9u
dERhdGEgPSBmb250Q2FjaGUoKS5nZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlw
dGlvbik7CisgICAgICAgIGZvbnREYXRhID0gZm9udENhY2hlKCkubGFzdFJlc29ydEZhbGxiYWNr
Rm9udChmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAogICAgIHJldHVybiBmb250RGF0YS5yZWxl
YXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJl
dmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4NzksNyArNDg3OSw3IEBAIHN0YXRpYyBOU1N0cmluZyAq
Zm9udE5hbWVGb3JEZXNjcmlwdGlvbigKICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KGJv
bGQgPyBGb250V2VpZ2h0OTAwIDogRm9udFdlaWdodDUwMCk7CiAgICAgZm9udERlc2NyaXB0aW9u
LnNldFNwZWNpZmllZFNpemUocG9pbnRTaXplKTsKICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRl
ciBwdXJnZVByZXZlbnRlcjsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnRE
YXRhID0gZm9udENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1p
bHlOYW1lLCBmYWxzZSwgV2ViQ29yZTo6Rm9udENhY2hlOjpEb05vdFJldGFpbik7CisgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICByZXR1cm4gW3NpbXBsZUZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244289</attachid>
            <date>2015-01-08 13:23:28 -0800</date>
            <delta_ts>2015-01-08 13:23:28 -0800</delta_ts>
            <desc>another</desc>
            <filename>font-cache-purge-7.patch</filename>
            <type>text/plain</type>
            <size>53852</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODExMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE1LTAxLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIGNvbmNlcHQg
b2YgInJldGFpbmVkIiBmb250CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDAyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICBGb250Q2FjaGUgY3VycmVudGx5IG1haW50YWlucyBhIHNlY29uZGFyeSByZWZjb3Vu
dCBmb3IgU2ltcGxlRm9udERhdGFzLiBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIKKyAg
ICAgICAgYSBmb250IGlzIGNvbnNpZGVyZWQgaW5hY3RpdmUgYW5kIGlzIGVsaWdpYmxlIGZvciBw
dXJnaW5nLiBUaGlzIGlzIGNvbmZ1c2luZyBhbmQgY29tcGxleC4KKworICAgICAgICBUaGUgbmV3
IHNjaGVtZSBpbiB0aGlzIHBhdGNoIGNvbnNpZGVycyBmb250cyBpbiBmb250IGNhY2hlIGluYWN0
aXZlIGlmIHRoZWlyIHJlZmNvdW50IGlzIDEgKHRoZXkgYXJlCisgICAgICAgIG93bmVkIGJ5IHRo
ZSBjYWNoZSBvbmx5KS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlIGFuZCBnaXZlcyBzaW1pbGFy
cyBiZWhhdmlvci4gVHlwZXMgdGhhdCAicmV0YWluZWQiIHRoZQorICAgICAgICBmb250IHRoaXMg
d2F5IGFsd2F5cyBhbHNvIHJlZiBpdC4KKworICAgICAgICBXZSBhbHNvIGF2b2lkIHVubmVjZXNz
YXJpbHkgcmVtb3ZpbmcgZm9udHMgdGhhdCB3b3VsZG4ndCBnZXQgZGVsZXRlZCBmcm9tIHRoZSBj
YWNoZS4KKworICAgICAgICBBbHNvIG1vZGVybml6ZWQgc29tZSBuYW1lcyBhbmQgY29kZS4KKwor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJj
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEp
OgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
U2VsZWN0b3I6OmdldEZhbGxiYWNrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmb250UGxhdGZvcm1EYXRhQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmZvbnREYXRhRm9yUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
Ojpmb250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3RpdmVG
b250RGF0YUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWls
eUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZWxlYXNl
Rm9udERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250R2x5cGhzOjpGb250R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRH
bHlwaHM6On5Gb250R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJlYWxp
emVGb250RGF0YUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRHbHlwaHM6OnJlbGVhc2VGb250
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5o
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6fkZvbnRHbHlwaHMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9udERhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW06
CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4
VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzaW1pbGFy
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omxhc3RSZXNv
cnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKwogMjAxNS0wMS0wOCAgR3dh
bmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBTZXBlcmF0
ZSB1cGRhdGVCYWNraW5nU3RvcmUgZnJvbSBmbHVzaENvbXBvc2l0aW5nU3RhdGUuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDggQEAgX19aTjdXZWJDb3Jl
MTBDcmVkZW50aWFsMjhlbmNvZGluZ1JlcXVpcgogX19aTjdXZWJDb3JlMTBDcmVkZW50aWFsQzFF
UDE1TlNVUkxDcmVkZW50aWFsCiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSSzdDR1BvaW50
CiBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2ludEUKLV9fWk43V2ViQ29y
ZTEwRm9udEdseXBoczE1cmVsZWFzZUZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTEwRm9udEdseXBo
czE3cmVhbGl6ZUZvbnREYXRhQXRFUktOU18xNUZvbnREZXNjcmlwdGlvbkVqCitfX1pON1dlYkNv
cmUxMEZvbnRHbHlwaHNEMUV2CiBfX1pON1dlYkNvcmUxMEpTRG9jdW1lbnQ2c19pbmZvRQogX19a
TjdXZWJDb3JlMTBKU0RvY3VtZW50OXRvV3JhcHBlZEVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJD
b3JlMTBMYXlvdXRSZWN0NXNjYWxlRWYKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIF9fWk43V2ViQ29y
ZTlGbG9hdFNpemVDMUVSSzZDR1NpemUKIF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzdJ
bnRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEwaW52YWxpZGF0ZUV2CiBfX1pON1dlYkNv
cmU5Rm9udENhY2hlMTNmb250RGF0YUNvdW50RXYKLV9fWk43V2ViQ29yZTlGb250Q2FjaGUxN2dl
dENhY2hlZEZvbnREYXRhRVJLTlNfMTVGb250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWljU3Ry
aW5nRWJOUzBfMTJTaG91bGRSZXRhaW5FCitfX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250Rm9y
RmFtaWx5RVJLTlNfMTVGb250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWljU3RyaW5nRWIKIF9f
Wk43V2ViQ29yZTlGb250Q2FjaGUyMWluYWN0aXZlRm9udERhdGFDb3VudEV2CiBfX1pON1dlYkNv
cmU5Rm9udENhY2hlMjFwdXJnZUluYWN0aXZlRm9udERhdGFFaQogX19aTjdXZWJDb3JlOUZvbnRD
YWNoZTI5cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWRFdgpAQCAtMjc5NSw3ICsyNzk1LDYg
QEAgX19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXROZXR3b3JrSW50ZXJmYQogX19aTjdXZWJDb3Jl
OFNldHRpbmdzMzFzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlRWoKIF9fWk43V2ViQ29y
ZThTZXR0aW5nczM0c2V0TmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZEViCiBfX1pON1dl
YkNvcmU4U2V0dGluZ3MzOGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uRQot
X19aTjdXZWJDb3JlOUZvbnRDYWNoZTI1Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udEVSS05TXzE1
Rm9udERlc2NyaXB0aW9uRU5TMF8xMlNob3VsZFJldGFpbkUKIF9fWk43V2ViQ29yZTlGcmFtZVZp
ZXcxN3NldFNjcm9sbFZlbG9jaXR5RWRkZGQKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMHNldFdh
c1Njcm9sbGVkQnlVc2VyRWIKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNHJlbmRlcmVkQ2hhcmFj
dGVyc0V4Y2VlZEVqCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5j
cHAJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBDU1NGb250RmFjZVNvCiAgICAgKSB7CiAgICAgICAgIC8vIFdlJ3JlIGxv
Y2FsLiBKdXN0IHJldHVybiBhIFNpbXBsZUZvbnREYXRhIGZyb20gdGhlIG5vcm1hbCBjYWNoZS4K
ICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjaGVjayBhbHRlcm5hdGUgZm9udCBmYW1pbHkg
bmFtZXMgaGVyZSwgc28gcGFzcyB0cnVlIGFzIHRoZSBjaGVja2luZ0FsdGVybmF0ZU5hbWUgcGFy
YW1ldGVyLgotICAgICAgICByZXR1cm4gZm9udENhY2hlKCkuZ2V0Q2FjaGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCBtX3N0cmluZywgdHJ1ZSk7CisgICAgICAgIHJldHVybiBmb250Q2FjaGUo
KS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgbV9zdHJpbmcsIHRydWUpOwogICAgIH0K
IAogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgbWFwcGluZyBpbiBvdXIgRm9udERhdGEgY2FjaGUu
CkBAIC0xNDQsMTAgKzE0NCw5IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRG
YWNlU28KICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBhcmJpdHJhcnkgZGVs
ZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgogICAgICAgICBmb250U2VsZWN0b3ItPmJlZ2lu
TG9hZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKLSAgICAgICAgLy8gVGhpcyB0ZW1wb3Jh
cnkgZm9udCBpcyBub3QgcmV0YWluZWQgYW5kIHNob3VsZCBub3QgYmUgcmV0dXJuZWQuCi0gICAg
ICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotICAg
ICAgICBTaW1wbGVGb250RGF0YSogdGVtcG9yYXJ5Rm9udCA9IGZvbnRDYWNoZSgpLmdldE5vblJl
dGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwotICAgICAgICBm
b250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUodGVtcG9yYXJ5Rm9udC0+cGxhdGZvcm1E
YXRhKCksIHRydWUsIHRydWUpOworICAgICAgICBSZWY8U2ltcGxlRm9udERhdGE+IHBsYWNlaG9s
ZGVyRm9udCA9IGZvbnRDYWNoZSgpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERlc2NyaXB0
aW9uKTsKKyAgICAgICAgUmVmPFNpbXBsZUZvbnREYXRhPiBwbGFjZWhvbGRlckZvbnRDb3B5SW5M
b2FkaW5nU3RhdGUgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYWNlaG9sZGVyRm9udC0+cGxh
dGZvcm1EYXRhKCksIHRydWUsIHRydWUpOworICAgICAgICByZXR1cm4gV1RGOjptb3ZlKHBsYWNl
aG9sZGVyRm9udENvcHlJbkxvYWRpbmdTdGF0ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnRE
YXRhLnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3Bw
CShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDcgKzQ3OCw3IEBAIFBhc3NSZWZQdHI8Rm9udERh
dGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2UKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgaWYgKCFy
ZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQogICAgICAgICAgICAgZmFtaWx5Rm9yTG9va3VwID0g
cmVzb2x2ZUdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlO
YW1lKTsKLSAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5Rm9yTG9va3VwKTsKKyAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgp
LmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlGb3JMb29rdXApOwogICAgIH0K
IAogICAgIHJldHVybiBmYWNlLT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24pOwpAQCAtNjM0
LDcgKzYzNCw3IEBAIFBhc3NSZWZQdHI8Rm9udERhdGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2UKICAg
ICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+Zm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3Jh
cGhzKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLmdldENh
Y2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFt
aWx5KCkpOworICAgIHJldHVybiBmb250Q2FjaGUoKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlz
aW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAKQEAgLTg4LDcgKzg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRm9u
dENhY2hlJiBmb250Q2FjaGUoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2Fj
aGU+IGdsb2JhbEZvbnRDYWNoZTsKLSAgICByZXR1cm4gZ2xvYmFsRm9udENhY2hlLmdldCgpOwor
ICAgIHJldHVybiBnbG9iYWxGb250Q2FjaGU7CiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkK
QEAgLTE0Myw3ICsxNDQsMTEgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0
cyA6IAogCiB0eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gs
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cz4gRm9udFBsYXRmb3JtRGF0YUNhY2hlOwog
Ci1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0g
MDsKK3N0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFDYWNoZT4gY2Fj
aGU7CisgICAgcmV0dXJuIGNhY2hlOworfQogCiBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lRXF1YWxJ
Z25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBjb25zdCBjaGFyKiBy
ZWZlcmVuY2UsIHVuc2lnbmVkIGxlbmd0aCkKIHsKQEAgLTIzNCwxNiArMjM5LDE3IEBAIEZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm8KICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOwogI2VuZGlmCiAKLSAgICBpZiAoIWdG
b250UGxhdGZvcm1EYXRhQ2FjaGUpIHsKLSAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSA9
IG5ldyBGb250UGxhdGZvcm1EYXRhQ2FjaGU7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7
CisgICAgaWYgKCFpbml0aWFsaXplZCkgewogICAgICAgICBwbGF0Zm9ybUluaXQoKTsKKyAgICAg
ICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIAogICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSBrZXkoZmFtaWx5TmFtZSwgZm9udERlc2NyaXB0aW9uKTsKIAotICAgIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmFk
ZChrZXksIG51bGxwdHIpOwotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgaXQg
PSByZXN1bHQuaXRlcmF0b3I7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgYXV0
byBhZGRSZXN1bHQgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5hZGQoa2V5LCBudWxscHRyKTsK
KyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0ZXJh
dG9yOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBpdC0+dmFsdWUg
PSBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAK
ICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJuYXRlTmFtZSkgewpAQCAt
MjU0LDggKzI2MCw4IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm8K
ICAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0
ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBh
bHRlcm5hdGVOYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBp
biB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUK
ICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2Fs
bCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCi0gICAgICAgICAgICAgICAgaXQgPSBn
Rm9udFBsYXRmb3JtRGF0YUNhY2hlLT5maW5kKGtleSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGl0ICE9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpKTsKKyAgICAgICAgICAgICAgICBp
dCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaXQgIT0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZW5kKCkpOwogICAgICAgICAgICAg
ICAgIGlmIChmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSkKICAgICAgICAgICAgICAg
ICAgICAgaXQtPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxGb250UGxhdGZvcm1EYXRhPigqZm9u
dFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUpOwogICAgICAgICAgICAgfQpAQCAtMzUzLDkg
KzM1OSwxNCBAQCBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuCiAgICAg
fQogfTsKIAotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHN0ZDo6cGFpcjxSZWZQ
dHI8U2ltcGxlRm9udERhdGE+LCB1bnNpZ25lZD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250
RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwordHlwZWRlZiBIYXNoTWFwPEZvbnRQ
bGF0Zm9ybURhdGEsIFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIEZvbnREYXRhQ2FjaGVLZXlIYXNo
LCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOworCitzdGF0aWMgRm9udERh
dGFDYWNoZSYgY2FjaGVkRm9udHMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250
RGF0YUNhY2hlPiBjYWNoZTsKKyAgICByZXR1cm4gY2FjaGU7Cit9CiAKLXN0YXRpYyBGb250RGF0
YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7CiAKICNpZiBQTEFURk9STShJT1MpCiBjb25zdCBp
bnQgY01heEluYWN0aXZlRm9udERhdGEgPSAxMjA7CkBAIC0zNjgsMTkwICszNzksMTE4IEBAIGNv
bnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IGludCBjTWF4VW5k
ZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IGludCBjVGFyZ2V0
VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAotc3RhdGljIExpc3RI
YXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4+KiBnSW5hY3RpdmVGb250RGF0YSA9IDA7Ci0K
LVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSwgU2hvdWxkUmV0YWluIHNob3Vs
ZFJldGFpbikKK1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAgICAgRm9udFBsYXRm
b3JtRGF0YSogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVz
Y3JpcHRpb24sIGZhbWlseSwgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKTsKICAgICBpZiAoIXBsYXRm
b3JtRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERh
dGEocGxhdGZvcm1EYXRhLCBzaG91bGRSZXRhaW4pOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEqIHBsYXRmb3JtRGF0YSwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKLXsKLSAgICBpZiAo
IXBsYXRmb3JtRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgaWYgKHNob3VsZFJldGFpbiA9PSBEb05vdFJldGFpbikKLSAgICAgICAgQVNTRVJUKG1f
cHVyZ2VQcmV2ZW50Q291bnQpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgRm9u
dExvY2tlciBmb250TG9ja2VyOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKCFnRm9udERhdGFDYWNo
ZSkgewotICAgICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAgICAg
ICBnSW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERh
dGE+PjsKLSAgICB9Ci0KLSAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnRm9u
dERhdGFDYWNoZS0+ZmluZCgqcGxhdGZvcm1EYXRhKTsKLSAgICBpZiAocmVzdWx0ID09IGdGb250
RGF0YUNhY2hlLT5lbmQoKSkgewotICAgICAgICBzdGQ6OnBhaXI8UmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiwgdW5zaWduZWQ+IG5ld1ZhbHVlKFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnBsYXRmb3Jt
RGF0YSksIHNob3VsZFJldGFpbiA9PSBSZXRhaW4gPyAxIDogMCk7Ci0gICAgICAgIGdGb250RGF0
YUNhY2hlLT5zZXQoKnBsYXRmb3JtRGF0YSwgbmV3VmFsdWUpOwotICAgICAgICBpZiAoc2hvdWxk
UmV0YWluID09IERvTm90UmV0YWluKQotICAgICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFk
ZChuZXdWYWx1ZS5maXJzdCk7Ci0gICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdC5yZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXN1bHQuZ2V0KCktPnZhbHVlLnNlY29uZCkgewotICAg
ICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGEtPmNvbnRhaW5zKHJlc3VsdC5nZXQoKS0+dmFs
dWUuZmlyc3QpKTsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShyZXN1bHQuZ2V0
KCktPnZhbHVlLmZpcnN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
aWYgKHNob3VsZFJldGFpbiA9PSBSZXRhaW4pCi0gICAgICAgIHJlc3VsdC5nZXQoKS0+dmFsdWUu
c2Vjb25kKys7Ci0gICAgZWxzZSBpZiAoIXJlc3VsdC5nZXQoKS0+dmFsdWUuc2Vjb25kKSB7Ci0g
ICAgICAgIC8vIElmIHNob3VsZFJldGFpbiBpcyBEb05vdFJldGFpbiBhbmQgY291bnQgaXMgMCwg
d2Ugd2FudCB0byByZW1vdmUgdGhlIGZvbnREYXRhIGZyb20gCi0gICAgICAgIC8vIGdJbmFjdGl2
ZUZvbnREYXRhIChhYm92ZSkgYW5kIHJlLWFkZCBoZXJlIHRvIHVwZGF0ZSBMUlUgcG9zaXRpb24u
Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQocmVzdWx0LmdldCgpLT52YWx1ZS5maXJz
dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+dmFsdWUuZmlyc3Q7Ci19Ci0K
LVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKLXsKLSAgICBy
ZXR1cm4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24sIERvTm90UmV0
YWluKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoKnBsYXRmb3Jt
RGF0YSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhKQorUmVmPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRG
b3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewot
ICAgIEFTU0VSVChnRm9udERhdGFDYWNoZSk7Ci0gICAgQVNTRVJUKCFmb250RGF0YS0+aXNDdXN0
b21Gb250KCkpOwotCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRMb2NrZXIgZm9udExvY2tl
cjsKICNlbmRpZgogICAgIAotICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnRE
YXRhQ2FjaGUtPmZpbmQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKLSAgICBBU1NFUlQoaXQg
IT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKLSAgICBpZiAoaXQgPT0gZ0ZvbnREYXRhQ2FjaGUt
PmVuZCgpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBhZGRSZXN1bHQgPSBjYWNoZWRGb250
cygpLmFkZChwbGF0Zm9ybURhdGEsIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFNpbXBsZUZvbnREYXRh
OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKIAotICAgIEFTU0VSVChpdC0+dmFsdWUuc2Vjb25kKTsK
LSAgICBpZiAoIS0taXQtPnZhbHVlLnNlY29uZCkKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEt
PmFkZChpdC0+dmFsdWUuZmlyc3QpOworICAgIHJldHVybiAqYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVk
KCkKIHsKICAgICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBtZW1vcnlQcmVzc3VyZUhhbmRs
ZXIoKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICBpbnQgaW5hY3RpdmVGb250RGF0YUxp
bWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3Rp
dmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwotICAgIGludCB0YXJnZXRGb250RGF0
YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJl
SW5hY3RpdmVGb250RGF0YSA6IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhOwogCi0gICAgaWYgKGdJ
bmFjdGl2ZUZvbnREYXRhICYmICFtX3B1cmdlUHJldmVudENvdW50ICYmIGdJbmFjdGl2ZUZvbnRE
YXRhLT5zaXplKCkgPiBpbmFjdGl2ZUZvbnREYXRhTGltaXQpCi0gICAgICAgIHB1cmdlSW5hY3Rp
dmVGb250RGF0YShnSW5hY3RpdmVGb250RGF0YS0+c2l6ZSgpIC0gdGFyZ2V0Rm9udERhdGFMaW1p
dCk7CisgICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0
KQorICAgICAgICByZXR1cm47CisgICAgaW50IGluYWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnRE
YXRhQ291bnQoKTsKKyAgICBpZiAoaW5hY3RpdmVDb3VudCA8PSBpbmFjdGl2ZUZvbnREYXRhTGlt
aXQpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB0YXJnZXRGb250RGF0YUxpbWl0ID0gdW5k
ZXJNZW1vcnlQcmVzc3VyZSA/IGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250
RGF0YSA6IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhOworICAgIHB1cmdlSW5hY3RpdmVGb250RGF0
YShpbmFjdGl2ZUNvdW50IC0gdGFyZ2V0Rm9udERhdGFMaW1pdCk7CiB9CiAKLXZvaWQgRm9udENh
Y2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQordm9pZCBGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YShpbnQgcHVyZ2VDb3VudCkKIHsKICAgICBwcnVuZVVucmVmZXJl
bmNlZEVudHJpZXNGcm9tRm9udEdseXBoc0NhY2hlKCk7CiAKLSAgICBpZiAoIWdJbmFjdGl2ZUZv
bnREYXRhIHx8IG1fcHVyZ2VQcmV2ZW50Q291bnQpCisgICAgaWYgKG1fcHVyZ2VQcmV2ZW50Q291
bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpYyBib29sIGlzUHVyZ2luZzsgIC8vIEd1
YXJkIGFnYWluc3QgcmVlbnRyeSB3aGVuIGUuZy4gYSBkZWxldGVkIEZvbnREYXRhIHJlbGVhc2Vz
IGl0cyBzbWFsbCBjYXBzIEZvbnREYXRhLgotICAgIGlmIChpc1B1cmdpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlzUHVyZ2luZyA9IHRydWU7Ci0KICNpZiBQTEFURk9STShJT1MpCiAgICAg
Rm9udExvY2tlciBmb250TG9ja2VyOwogI2VuZGlmCiAKLSAgICBWZWN0b3I8UmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiwgMjA+IGZvbnREYXRhVG9EZWxldGU7Ci0gICAgTGlzdEhhc2hTZXQ8UmVmUHRy
PFNpbXBsZUZvbnREYXRhPj46Oml0ZXJhdG9yIGVuZCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5lbmQo
KTsKLSAgICBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+Pjo6aXRlcmF0b3IgaXQg
PSBnSW5hY3RpdmVGb250RGF0YS0+YmVnaW4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICYmIGl0ICE9IGVuZDsgKytpdCwgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4mIGZvbnREYXRhID0gKml0LmdldCgpOwotICAgICAgICBnRm9udERhdGFDYWNoZS0+cmVt
b3ZlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgICAgIC8vIFdlIHNob3VsZCBub3Qg
ZGVsZXRlIFNpbXBsZUZvbnREYXRhIGhlcmUgYmVjYXVzZSBkZWxldGlvbiBjYW4gbW9kaWZ5IGdJ
bmFjdGl2ZUZvbnREYXRhLiBTZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNDQw
MTEKLSAgICAgICAgZm9udERhdGFUb0RlbGV0ZS5hcHBlbmQoZm9udERhdGEpOwotICAgIH0KLQot
ICAgIGlmIChpdCA9PSBlbmQpIHsKLSAgICAgICAgLy8gUmVtb3ZlZCBldmVyeXRoaW5nCi0gICAg
ICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5jbGVhcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhLT5yZW1vdmUoZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCkpOwotICAgIH0KLQotICAgIGZv
bnREYXRhVG9EZWxldGUuY2xlYXIoKTsKLQotICAgIGlmIChnRm9udFBsYXRmb3JtRGF0YUNhY2hl
KSB7Ci0gICAgICAgIFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1JlbW92
ZTsKLSAgICAgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZ0ZvbnRQbGF0
Zm9ybURhdGFDYWNoZS0+c2l6ZSgpKTsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjpp
dGVyYXRvciBwbGF0Zm9ybURhdGFFbmQgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQoKTsK
LSAgICAgICAgZm9yIChGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIHBsYXRmb3JtRGF0
YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmJlZ2luKCk7IHBsYXRmb3JtRGF0YSAhPSBwbGF0
Zm9ybURhdGFFbmQ7ICsrcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm1E
YXRhLT52YWx1ZSAmJiAhZ0ZvbnREYXRhQ2FjaGUtPmNvbnRhaW5zKCpwbGF0Zm9ybURhdGEtPnZh
bHVlKSkKLSAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKHBsYXRmb3JtRGF0YS0+
a2V5KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2l6ZV90IGtleXNUb1JlbW92ZUNv
dW50ID0ga2V5c1RvUmVtb3ZlLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrZXlzVG9SZW1vdmVDb3VudDsgKytpKQotICAgICAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFD
YWNoZS0+cmVtb3ZlKGtleXNUb1JlbW92ZVtpXSk7CisgICAgVmVjdG9yPFJlZlB0cjxTaW1wbGVG
b250RGF0YT4sIDIwPiBmb250c1RvRGVsZXRlOworICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hl
ZEZvbnRzKCkudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFmb250LT5oYXNPbmVSZWYoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb250c1RvRGVsZXRlLmFwcGVuZChXVEY6Om1v
dmUoZm9udCkpOworICAgICAgICBpZiAoIS0tcHVyZ2VDb3VudCkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBmb3IgKGF1dG8mIGZvbnQgOiBmb250c1RvRGVsZXRlKQorICAgICAgICBj
YWNoZWRGb250cygpLnJlbW92ZShmb250LT5wbGF0Zm9ybURhdGEoKSk7CisKKyAgICBWZWN0b3I8
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiBrZXlzVG9SZW1vdmU7CisgICAga2V5c1RvUmVtb3Zl
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkpIHsKKyAgICAg
ICAgaWYgKGVudHJ5LnZhbHVlICYmICFjYWNoZWRGb250cygpLmNvbnRhaW5zKCplbnRyeS52YWx1
ZSkpCisgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7CiAgICAgfQor
ICAgIGZvciAoYXV0byBrZXkgOiBrZXlzVG9SZW1vdmUpCisgICAgICAgIGZvbnRQbGF0Zm9ybURh
dGFDYWNoZSgpLnJlbW92ZShrZXkpOwogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQog
ICAgIEZvbnRWZXJ0aWNhbERhdGFDYWNoZSYgZm9udFZlcnRpY2FsRGF0YUNhY2hlID0gZm9udFZl
cnRpY2FsRGF0YUNhY2hlSW5zdGFuY2UoKTsKICAgICBpZiAoIWZvbnRWZXJ0aWNhbERhdGFDYWNo
ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gTWFyayAmIHN3ZWVwIHVudXNlZCB2ZXJ0aWNhbERh
dGEKLSAgICAgICAgRm9udFZlcnRpY2FsRGF0YUNhY2hlOjppdGVyYXRvciB2ZXJ0aWNhbERhdGFF
bmQgPSBmb250VmVydGljYWxEYXRhQ2FjaGUuZW5kKCk7Ci0gICAgICAgIGZvciAoRm9udFZlcnRp
Y2FsRGF0YUNhY2hlOjppdGVyYXRvciB2ZXJ0aWNhbERhdGEgPSBmb250VmVydGljYWxEYXRhQ2Fj
aGUuYmVnaW4oKTsgdmVydGljYWxEYXRhICE9IHZlcnRpY2FsRGF0YUVuZDsgKyt2ZXJ0aWNhbERh
dGEpIHsKLSAgICAgICAgICAgIGlmICh2ZXJ0aWNhbERhdGEtPnZhbHVlKQotICAgICAgICAgICAg
ICAgIHZlcnRpY2FsRGF0YS0+dmFsdWUtPm1faW5Gb250Q2FjaGUgPSBmYWxzZTsKKyAgICAgICAg
Zm9yIChhdXRvJiB2ZXJ0aWNhbERhdGEgOiBmb250VmVydGljYWxEYXRhQ2FjaGUudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNhbERhdGEpCisgICAgICAgICAgICAgICAgdmVydGlj
YWxEYXRhLT5tX2luRm9udENhY2hlID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgRm9udERh
dGFDYWNoZTo6aXRlcmF0b3IgZm9udERhdGFFbmQgPSBnRm9udERhdGFDYWNoZS0+ZW5kKCk7Ci0g
ICAgICAgIGZvciAoRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgZm9udERhdGEgPSBnRm9udERhdGFD
YWNoZS0+YmVnaW4oKTsgZm9udERhdGEgIT0gZm9udERhdGFFbmQ7ICsrZm9udERhdGEpIHsKLSAg
ICAgICAgICAgIE9wZW5UeXBlVmVydGljYWxEYXRhKiB2ZXJ0aWNhbERhdGEgPSBjb25zdF9jYXN0
PE9wZW5UeXBlVmVydGljYWxEYXRhKj4oZm9udERhdGEtPnZhbHVlLmZpcnN0LT52ZXJ0aWNhbERh
dGEoKSk7CisgICAgICAgIGZvciAoYXV0byYgZm9udERhdGEgOiBjYWNoZWRGb250cygpLnZhbHVl
cygpKSB7CisgICAgICAgICAgICBhdXRvKiB2ZXJ0aWNhbERhdGEgPSBjb25zdF9jYXN0PE9wZW5U
eXBlVmVydGljYWxEYXRhKj4oZm9udERhdGEtPnZlcnRpY2FsRGF0YSgpKTsKICAgICAgICAgICAg
IGlmICh2ZXJ0aWNhbERhdGEpCiAgICAgICAgICAgICAgICAgdmVydGljYWxEYXRhLT5tX2luRm9u
dENhY2hlID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBWZWN0b3I8Rm9udEZpbGVLZXk+IGtl
eXNUb1JlbW92ZTsKICAgICAgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Zm9udFZlcnRpY2FsRGF0YUNhY2hlLnNpemUoKSk7Ci0gICAgICAgIGZvciAoRm9udFZlcnRpY2Fs
RGF0YUNhY2hlOjppdGVyYXRvciB2ZXJ0aWNhbERhdGEgPSBmb250VmVydGljYWxEYXRhQ2FjaGUu
YmVnaW4oKTsgdmVydGljYWxEYXRhICE9IHZlcnRpY2FsRGF0YUVuZDsgKyt2ZXJ0aWNhbERhdGEp
IHsKLSAgICAgICAgICAgIGlmICghdmVydGljYWxEYXRhLT52YWx1ZSB8fCAhdmVydGljYWxEYXRh
LT52YWx1ZS0+bV9pbkZvbnRDYWNoZSkKLSAgICAgICAgICAgICAgICBrZXlzVG9SZW1vdmUuYXBw
ZW5kKHZlcnRpY2FsRGF0YS0+a2V5KTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IGZvbnRWZXJ0
aWNhbERhdGFDYWNoZSkgeworICAgICAgICAgICAgaWYgKCFpdC52YWx1ZSB8fCAhaXQudmFsdWUt
Pm1faW5Gb250Q2FjaGUpCisgICAgICAgICAgICAgICAga2V5c1RvUmVtb3ZlLmFwcGVuZChpdC5r
ZXkpOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IGtleXNU
b1JlbW92ZS5zaXplKCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgZm9udFZlcnRpY2Fs
RGF0YUNhY2hlLnRha2Uoa2V5c1RvUmVtb3ZlW2ldKTsKKyAgICAgICAgZm9yIChhdXRvJiBrZXkg
OiBrZXlzVG9SZW1vdmUpCisgICAgICAgICAgICBmb250VmVydGljYWxEYXRhQ2FjaGUucmVtb3Zl
KGtleSk7CiAgICAgfQogI2VuZGlmCi0KLSAgICBpc1B1cmdpbmcgPSBmYWxzZTsKIH0KIAogc2l6
ZV90IEZvbnRDYWNoZTo6Zm9udERhdGFDb3VudCgpCiB7Ci0gICAgaWYgKGdGb250RGF0YUNhY2hl
KQotICAgICAgICByZXR1cm4gZ0ZvbnREYXRhQ2FjaGUtPnNpemUoKTsKLSAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gY2FjaGVkRm9udHMoKS5zaXplKCk7CiB9CiAKIHNpemVfdCBGb250Q2FjaGU6
OmluYWN0aXZlRm9udERhdGFDb3VudCgpCiB7Ci0gICAgaWYgKGdJbmFjdGl2ZUZvbnREYXRhKQot
ICAgICAgICByZXR1cm4gZ0luYWN0aXZlRm9udERhdGEtPnNpemUoKTsKLSAgICByZXR1cm4gMDsK
KyNpZiBQTEFURk9STShJT1MpCisgICAgRm9udExvY2tlciBmb250TG9ja2VyOworI2VuZGlmCisg
ICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRz
KCkudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGZvbnQtPmhhc09uZVJlZigpKQorICAgICAgICAg
ICAgKytjb3VudDsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50OwogfQogCi1QYXNzUmVmUHRyPEZv
bnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQor
UmVmUHRyPEZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHlBdEluZGV4KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3Rv
ciogZm9udFNlbGVjdG9yKQogewogICAgIEFTU0VSVChmYW1pbHlJbmRleCAhPSBjQWxsRmFtaWxp
ZXNTY2FubmVkKTsKICAgICBSZWZQdHI8Rm9udERhdGE+IHJlc3VsdDsKQEAgLTU2NSw3ICs1MDQs
NyBAQCBQYXNzUmVmUHRyPEZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnRECiAgICAgICAgIGlm
IChmb250U2VsZWN0b3IpCiAgICAgICAgICAgICByZXN1bHQgPSBmb250U2VsZWN0b3ItPmdldEZv
bnREYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHkpOwogICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHkpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZmFtaWx5KTsK
ICAgICB9CiAgICAgaWYgKGZhbWlseUluZGV4ID09IGZhbWlseUNvdW50KQogICAgICAgICBmYW1p
bHlJbmRleCA9IGNBbGxGYW1pbGllc1NjYW5uZWQ7CkBAIC01ODgsNyArNTI3LDcgQEAgUGFzc1Jl
ZlB0cjxGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RAogICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhLnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICAvLyBTdGlsbCBubyByZXN1bHQu
ICBIYW5kIGJhY2sgb3VyIGxhc3QgcmVzb3J0IGZhbGxiYWNrIGZvbnQuCi0gICAgICAgIHJlc3Vs
dCA9IGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pOworICAgICAgICByZXN1
bHQgPSBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKTsKICAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CkBAIC02MjIsMTIgKzU2MSwxMSBAQCB1bnNpZ25lZCBz
aG9ydCBGb250Q2FjaGU6OmdlbmVyYXRpb24oKQogdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUo
KQogewogICAgIGlmICghZ0NsaWVudHMpIHsKLSAgICAgICAgQVNTRVJUKCFnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlKTsKKyAgICAgICAgQVNTRVJUKGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmlzRW1w
dHkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZ0ZvbnRQbGF0Zm9ybURh
dGFDYWNoZSkKLSAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+Y2xlYXIoKTsKKyAgICBm
b250UGxhdGZvcm1EYXRhQ2FjaGUoKS5jbGVhcigpOwogICAgIGludmFsaWRhdGVGb250R2x5cGhz
Q2FjaGUoKTsKIAogICAgIGdHZW5lcmF0aW9uKys7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMSwxMyArMTExLDEwIEBAIGNsYXNzIEZvbnRDYWNoZSB7CiBwdWJsaWM6CiAgICAgZnJpZW5k
IEZvbnRDYWNoZSYgZm9udENhY2hlKCk7CiAKLSAgICBlbnVtIFNob3VsZFJldGFpbiB7IFJldGFp
biwgRG9Ob3RSZXRhaW4gfTsKLQotICAgIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3Rvciop
OwotICAgIHZvaWQgcmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CisgICAg
UmVmUHRyPEZvbnREYXRhPiBmb250Rm9yRmFtaWx5QXRJbmRleChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0b3IqKTsKIAogICAgIC8vIFRoaXMgbWV0
aG9kIGlzIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KLSAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0
Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsKKyAgICBSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
RGVzY3JpcHRpb24mLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0YSwgYm9v
bCBpc1BsYXRmb3JtRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOwog
CiAgICAgLy8gQWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCiAgICAgdm9pZCBwbGF0
Zm9ybUluaXQoKTsKQEAgLTEzNCw5ICsxMzEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldFRy
YWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldENhY2hlZEZv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wg
Y2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UsIFNob3VsZFJldGFpbiA9IFJldGFpbik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4gPSBSZXRh
aW4pOwotICAgIFNpbXBsZUZvbnREYXRhKiBnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxTaW1wbGVGb250RGF0YT4gbGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKIAogICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRT
ZWxlY3RvciopOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciopOwpAQCAtMTkx
LDcgKzE4Nyw3IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc2lt
aWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAjZW5kaWYKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldENhY2hlZEZv
bnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxTaW1wbGVGb250RGF0YT4gZm9udEZvclBsYXRmb3JtRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKICAgICAvLyBEb24ndCBwdXJnZSBpZiB0aGlz
IGNvdW50IGlzID4gMDsKICAgICBpbnQgbV9wdXJnZVByZXZlbnRDb3VudDsKQEAgLTE5OSw3ICsx
OTUsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBD
b21wbGV4VGV4dENvbnRyb2xsZXI7CiAjZW5kaWYKLSAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9u
dERhdGE7IC8vIEZvciBnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhKikK
KyAgICBmcmllbmQgY2xhc3MgU2ltcGxlRm9udERhdGE7CiAgICAgZnJpZW5kIGNsYXNzIEZvbnRH
bHlwaHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
R2x5cGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2x5cGhzLmNwcAkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE4ICs1
OSwxMSBAQCBGb250R2x5cGhzOjpGb250R2x5cGhzKGNvbnN0IEZvbnRQbGF0Zm9yCiAgICAgLCBt
X2xvYWRpbmdDdXN0b21Gb250cyhmYWxzZSkKICAgICAsIG1faXNGb3JQbGF0Zm9ybUZvbnQodHJ1
ZSkKIHsKLSAgICBSZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhID0gZm9udENhY2hlKCkuZ2V0Q2Fj
aGVkRm9udERhdGEoJnBsYXRmb3JtRGF0YSk7Ci0gICAgbV9yZWFsaXplZEZvbnREYXRhLmFwcGVu
ZChmb250RGF0YS5yZWxlYXNlKCkpOworICAgIG1fcmVhbGl6ZWRGb250RGF0YS5hcHBlbmQoZm9u
dENhY2hlKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKTsKIH0KIAotdm9pZCBG
b250R2x5cGhzOjpyZWxlYXNlRm9udERhdGEoKQorRm9udEdseXBoczo6fkZvbnRHbHlwaHMoKQog
ewotICAgIHVuc2lnbmVkIG51bUZvbnRzID0gbV9yZWFsaXplZEZvbnREYXRhLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRm9udHM7ICsraSkgewotICAgICAgICBpZiAo
bV9yZWFsaXplZEZvbnREYXRhW2ldLT5pc0N1c3RvbUZvbnQoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBmb250Q2FjaGUoKS5yZWxlYXNlRm9udERhdGEoZG93bmNhc3Q8U2ltcGxl
Rm9udERhdGE+KG1fcmVhbGl6ZWRGb250RGF0YVtpXS5nZXQoKSkpOwotICAgIH0KIH0KIAogdm9p
ZCBGb250R2x5cGhzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQpAQCAtMTEzLDEwICsxMDYsMTAgQEAgY29uc3QgRm9udERhdGEqIEZvbnRHbHlwaHM6
OnJlYWxpemVGb250RAogCiAgICAgLy8gQXNrIHRoZSBmb250IGNhY2hlIGZvciB0aGUgZm9udCBk
YXRhLgogICAgIC8vIFdlIGFyZSBvYnRhaW5pbmcgdGhpcyBmb250IGZvciB0aGUgZmlyc3QgdGlt
ZS4gV2Uga2VlcCB0cmFjayBvZiB0aGUgZmFtaWxpZXMgd2UndmUgbG9va2VkIGF0IGJlZm9yZQot
ICAgIC8vIGluIHxtX2ZhbWlseUluZGV4fCwgc28gdGhhdCB3ZSBuZXZlciBzY2FuIHRoZSBzYW1l
IHNwb3QgaW4gdGhlIGxpc3QgdHdpY2UuIGdldEZvbnREYXRhIHdpbGwgYWRqdXN0IG91cgorICAg
IC8vIGluIHxtX2ZhbWlseUluZGV4fCwgc28gdGhhdCB3ZSBuZXZlciBzY2FuIHRoZSBzYW1lIHNw
b3QgaW4gdGhlIGxpc3QgdHdpY2UuIGZvbnRGb3JGYW1pbHlBdEluZGV4IHdpbGwgYWRqdXN0IG91
cgogICAgIC8vIHxtX2ZhbWlseUluZGV4fCBhcyBpdCBzY2FucyBmb3IgdGhlIHJpZ2h0IGZvbnQg
dG8gbWFrZS4KICAgICBBU1NFUlQoZm9udENhY2hlKCkuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJh
dGlvbik7Ci0gICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQgPSBmb250Q2FjaGUoKS5nZXRGb250
RGF0YShkZXNjcmlwdGlvbiwgbV9mYW1pbHlJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOwor
ICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0ID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseUF0
SW5kZXgoZGVzY3JpcHRpb24sIG1fZmFtaWx5SW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsK
ICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIG1fcmVhbGl6ZWRGb250RGF0YS5hcHBlbmQocmVz
dWx0KTsKICAgICAgICAgaWYgKHJlc3VsdC0+aXNMb2FkaW5nKCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdseXBocy5oCShyZXZpc2lvbiAxNzgwMzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2x5cGhzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8Rm9udEds
eXBocz4gY3JlYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRm9udEdseXBocyhmb250U2VsZWN0b3IpKTsgfQogICAgIHN0YXRp
YyBSZWY8Rm9udEdseXBocz4gY3JlYXRlRm9yUGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250R2x5cGhzKHBs
YXRmb3JtRGF0YSkpOyB9CiAKLSAgICB+Rm9udEdseXBocygpIHsgcmVsZWFzZUZvbnREYXRhKCk7
IH0KKyAgICB+Rm9udEdseXBocygpOwogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIApAQCAtNzcsOCArNzcsNiBAQCBw
cml2YXRlOgogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMy
LCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250RGF0YVZhcmlhbnQpOwogICAgIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYpOwogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIEZvbnREYXRhVmFyaWFudCwgdW5zaWduZWQgZmFsbGJhY2tMZXZlbCk7
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbGVhc2VGb250RGF0YSgpOwogICAgIAogICAg
IFZlY3RvcjxSZWZQdHI8Rm9udERhdGE+LCAxPiBtX3JlYWxpemVkRm9udERhdGE7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5jcHAJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDkgKzE1NCw2IEBA
IHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKIAogU2ltcGxlRm9udERh
dGE6On5TaW1wbGVGb250RGF0YSgpCiB7Ci0gICAgaWYgKCFpc1NWR0ZvbnQoKSkKLSAgICAgICAg
cGxhdGZvcm1EZXN0cm95KCk7Ci0KICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmgJKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE1ICs4
MSwxNSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3Jt
IGZvbnRzLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9IGZh
bHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJh
Y2sgPSBmYWxzZSkKKyAgICBzdGF0aWMgUmVmPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNl
LCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sg
PSBmYWxzZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltcGxlRm9udERh
dGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0
YShwbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCwgaXNMb2FkaW5nLCBpc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgLy8gVXNlZCB0byBjcmVhdGUgU1ZHIEZvbnRzLgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUoc3RkOjp1bmlxdWVf
cHRyPFNWR0RhdGE+IHN2Z0RhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIHN0YXRpYyBSZWY8U2ltcGxlRm9udERhdGE+IGNy
ZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8U1ZHRGF0YT4gc3ZnRGF0YSwgZmxvYXQgZm9udFNpemUsIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNpbXBsZUZvbnREYXRhKFdURjo6bW92ZShzdmdEYXRhKSwgZm9u
dFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTaW1wbGVGb250RGF0YShXVEY6Om1vdmUoc3ZnRGF0YSksIGZvbnRTaXpl
LCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IH5TaW1wbGVGb250RGF0YSgpOwpAQCAtMjIyLDcgKzIyMiw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CiAgICAgdm9p
ZCBwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKTsKLSAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwog
CiAgICAgdm9pZCBpbml0Q2hhcldpZHRocygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJl
ZVR5cGUuY3BwCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDcgQEAgRmNQYXR0ZXJuKiBmaW5kQmVzdEZvbnRHaXZlbkZhbGxiYWNrcyhjbwog
ICAgIHJldHVybiBGY0ZvbnRTZXRNYXRjaCgwLCBzZXRzLCAxLCBwYXR0ZXJuLCAmZm9udENvbmZp
Z1Jlc3VsdCk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lz
dGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9u
dENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJv
b2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFJlZlB0cjxG
Y1BhdHRlcm4+IHBhdHRlcm4gPSBhZG9wdFJlZihjcmVhdGVGb250Q29uZmlnUGF0dGVybkZvckNo
YXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgZm9udERhdGEgPSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKQEAgLTg5LDcg
Kzg5LDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeQogICAgIFJl
ZlB0cjxGY1BhdHRlcm4+IGZhbGxiYWNrUGF0dGVybiA9IGFkb3B0UmVmKGZpbmRCZXN0Rm9udEdp
dmVuRmFsbGJhY2tzKGZvbnREYXRhLCBwYXR0ZXJuLmdldCgpKSk7CiAgICAgaWYgKGZhbGxiYWNr
UGF0dGVybikgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZvbnREYXRhKGZh
bGxiYWNrUGF0dGVybi5nZXQoKSwgZGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm4gZ2V0Q2Fj
aGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnREYXRhLCBEb05vdFJldGFpbik7CisgICAgICAgIHJl
dHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnREYXRhKTsKICAgICB9CiAKICAg
ICBGY1Jlc3VsdCBmb250Q29uZmlnUmVzdWx0OwpAQCAtOTcsMTUgKzk3LDE1IEBAIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3kKICAgICBpZiAoIXJlc3VsdFBhdHRlcm4p
CiAgICAgICAgIHJldHVybiAwOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgYWx0ZXJuYXRlRm9udERh
dGEocmVzdWx0UGF0dGVybi5nZXQoKSwgZGVzY3JpcHRpb24pOwotICAgIHJldHVybiBnZXRDYWNo
ZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udERhdGEsIERvTm90UmV0YWluKTsKKyAgICByZXR1cm4g
Zm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250RGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJl
dGFpbikKK1JlZjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewogICAgIC8vIFdl
IHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sgZm9udCBoZXJlLCBvdGhlcndpc2UgdGhlIGxvZ2lj
IHByZXZlbnRpbmcgRm9udENvbmZpZwogICAgIC8vIG1hdGNoZXMgZm9yIG5vbi1mYWxsYmFjayBm
b250cyBtaWdodCByZXR1cm4gMC4gU2VlIGlzRmFsbGJhY2tGb250QWxsb3dlZC4KICAgICBzdGF0
aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIHJldHVybiBnZXRDYWNoZWRG
b250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsK
KyAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFs
c2UpOwogfQogCiB2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWlj
U3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMSwxMCArMTAxLDYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1DaGFyV2lkdGhJbgogICAgIGluaXRDaGFyV2lkdGhzKCk7CiB9CiAKLXZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QK
IHsKICAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlPUy5t
bQkocmV2aXNpb24gMTc4MDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdlCiAgICAgRm9udFBsYXRmb3JtRGF0
YSBhbHRlcm5hdGVGb250KHN1YnN0aXR1dGVGb250LmdldCgpLCBwbGF0Zm9ybURhdGEuc2l6ZSgp
LCBwbGF0Zm9ybURhdGEuaXNQcmludGVyRm9udCgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNP
YmxpcXVlLCBwbGF0Zm9ybURhdGEubV9vcmllbnRhdGlvbik7CiAgICAgYWx0ZXJuYXRlRm9udC5t
X2lzRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShzdWJzdGl0dXRlRm9udC5nZXQoKSk7
CiAKLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0
YWluKTsKKyAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0K
IAogZW51bSBjbGFzcyBMYW5ndWFnZVNwZWNpZmljRm9udCB7CkBAIC0xOTQsMTIgKzE5NCwxNiBA
QCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjCiAgICAgcmV0dXJuIExh
bmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTaW1wbGVGb250RGF0YSogb3JpZ2luYWxGb250RGF0
YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvcmln
aW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkK
IHsKICAgICAvLyBVbmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFy
aWFsIFVuaWNvZGUsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBo
cyBsaWtlIEY4RkYuCiAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250
IGluIHRoaXMgY2FzZS4KLSAgICBpZiAobGVuZ3RoID4gMCAmJiByZXF1aXJlc0N1c3RvbUZhbGxi
YWNrRm9udCgqY2hhcmFjdGVycykpCi0gICAgICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShn
ZXRDdXN0b21GYWxsYmFja0ZvbnQoKmNoYXJhY3RlcnMsIGRlc2NyaXB0aW9uKSwgRG9Ob3RSZXRh
aW4pOworICAgIGlmIChsZW5ndGggPiAwICYmIHJlcXVpcmVzQ3VzdG9tRmFsbGJhY2tGb250KCpj
aGFyYWN0ZXJzKSkgeworICAgICAgICBhdXRvKiBmYWxsYmFjayA9IGdldEN1c3RvbUZhbGxiYWNr
Rm9udCgqY2hhcmFjdGVycywgZGVzY3JpcHRpb24pOworICAgICAgICBpZiAoIWZhbGxiYWNrKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBmb250Rm9yUGxhdGZv
cm1EYXRhKCpmYWxsYmFjayk7CisgICAgfQogCiAgICAgVUNoYXIzMiBjID0gKmNoYXJhY3RlcnM7
CiAgICAgaWYgKGxlbmd0aCA+IDEgJiYgVTE2X0lTX0xFQUQoYykgJiYgVTE2X0lTX1RSQUlMKGNo
YXJhY3RlcnNbMV0pKQpAQCAtMjk0LDcgKzI5OCw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6c3kKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHNp
bXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdo
dEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gKmNqa0JvbGRbcHJlZmVycmVkQ0pLRm9udF0g
OiAqY2prUGxhaW5bcHJlZmVycmVkQ0pLRm9udF0sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAg
ICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyAqY2prQm9sZFtwcmVmZXJyZWRDSktGb250
XSA6ICpjamtQbGFpbltwcmVmZXJyZWRDSktGb250XSwgZmFsc2UpOwogICAgICAgICBib29sIHVz
ZVNlY29uZGFyeUZvbnQgPSB0cnVlOwogICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEpIHsKICAg
ICAgICAgICAgIENHR2x5cGggZ2x5cGhzWzJdOwpAQCAtMzA2LDMxICszMTAsMzEgQEAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKHVzZVNlY29uZGFyeUZvbnQpCi0gICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENh
Y2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/ICpjamtCb2xkW3NlY29uZGFyeUNKS0ZvbnRdIDogKmNqa1BsYWluW3NlY29uZGFy
eUNKS0ZvbnRdLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICAgICAgc2ltcGxlRm9udERh
dGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0
aW9uLndlaWdodCgpKSA/ICpjamtCb2xkW3NlY29uZGFyeUNKS0ZvbnRdIDogKmNqa1BsYWluW3Nl
Y29uZGFyeUNKS0ZvbnRdLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IExhbmd1YWdlU3BlY2lmaWNGb250OjpLb3JlYW46IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4ga29yZWFuUGxhaW4oIkFwcGxlU0RHb3RoaWNOZW8tTWVkaXVt
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtvcmVhbkJvbGQoIkFwcGxlU0RHb3RoaWNOZW8t
Qm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1w
bGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRC
b2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGtvcmVhbkJvbGQgOiBrb3JlYW5QbGFpbiwgZmFs
c2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGtv
cmVhbkJvbGQgOiBrb3JlYW5QbGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6Q3lyaWxsaWM6IHsKICAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY3lyaWxsaWNQbGFpbigiSGVsdmV0aWNhTmV1
ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjeXJpbGxpY0JvbGQoIkhlbHZldGljYU5ldWUt
Qm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1w
bGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRC
b2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGN5cmlsbGljQm9sZCA6IGN5cmlsbGljUGxhaW4s
IGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkg
PyBjeXJpbGxpY0JvbGQgOiBjeXJpbGxpY1BsYWluLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3BlY2lmaWNGb250OjpBcmFiaWM6IHsKICAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gYXJhYmljUGxhaW4oIkdlZXphUHJv
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGFyYWJpY0JvbGQoIkdlZXphUHJvLUJvbGQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc2ltcGxlRm9udERh
dGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkgPyBhcmFiaWNCb2xkIDogYXJhYmljUGxhaW4sIGZhbHNlLCBEb05v
dFJldGFpbik7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBhcmFiaWNCb2xk
IDogYXJhYmljUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
TGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkhlYnJldzogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBoZWJyZXdQbGFpbigiQXJpYWxIZWJyZXciLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gaGVicmV3Qm9sZCgiQXJpYWxIZWJyZXctQm9sZCIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENh
Y2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/IGhlYnJld0JvbGQgOiBoZWJyZXdQbGFpbiwgZmFsc2UsIERvTm90UmV0YWluKTsK
KyAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0Zv
bnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGhlYnJld0JvbGQgOiBoZWJyZXdQ
bGFpbiwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNw
ZWNpZmljRm9udDo6SW5kaWM6IHsKQEAgLTM4NiwzNiArMzkwLDM2IEBAIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3kKICAgICAgICAgaWYgKGluZGljUGFnZU9yZGVySW5k
ZXggPCAoc2l6ZW9mKGluZGljVW5pY29kZVBhZ2VGb250cykgLyBzaXplb2YoQXRvbWljU3RyaW5n
KikpKSB7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcqIGluZGljRm9udFN0cmluZyA9IGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gaW5kaWNVbmljb2RlUGFnZUZvbnRz
Qm9sZFtpbmRpY1BhZ2VPcmRlckluZGV4XSA6IGluZGljVW5pY29kZVBhZ2VGb250c1tpbmRpY1Bh
Z2VPcmRlckluZGV4XTsKICAgICAgICAgICAgIGlmIChpbmRpY0ZvbnRTdHJpbmcpCi0gICAgICAg
ICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwg
KmluZGljRm9udFN0cmluZywgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgICAgICAgICBz
aW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICppbmRpY0ZvbnRTdHJp
bmcsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBM
YW5ndWFnZVNwZWNpZmljRm9udDo6VGhhaTogewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiB0aGFpUGxhaW4oIlRob25idXJpIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHRoYWlCb2xkKCJUaG9uYnVyaS1Cb2xkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEo
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gdGhh
aUJvbGQgOiB0aGFpUGxhaW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgIHNpbXBsZUZv
bnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkgPyB0aGFpQm9sZCA6IHRoYWlQbGFpbiwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYW5ndWFnZVNwZWNpZmljRm9udDo6VGliZXRhbjog
ewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB0aWJldGFuUGxh
aW4oIkthaWxhc2EiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdGliZXRhbkJvbGQoIkthaWxh
c2EtQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBz
aW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWln
aHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IHRpYmV0YW5Cb2xkIDogdGliZXRhblBsYWlu
LCBmYWxzZSwgRG9Ob3RSZXRhaW4pOworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8gdGliZXRhbkJvbGQgOiB0aWJldGFuUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OkNhbmFkaWFuQWJvcmlnaW5hbFN5
bGxhYmljOiB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNh
c1BsYWluKCJFdXBoZW1pYVVDQVMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY2FzQm9sZCgi
RXVwaGVtaWFVQ0FTLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwg
aXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBjYXNCb2xkIDogY2FzUGxh
aW4sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQo
KSkgPyBjYXNCb2xkIDogY2FzUGxhaW4sIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6OktobWVyOiB7CiAgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGtobWVyKCJLaG1lclNhbmdhbU1OIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Z2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGtobWVyLCBmYWxzZSwgRG9Ob3RSZXRhaW4p
OworICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGto
bWVyLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhbmd1YWdlU3Bl
Y2lmaWNGb250OjpMYW86IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gbGFvKCJMYW9TYW5nYW1NTiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0
aW9uLCBsYW8sIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgIHNpbXBsZUZvbnREYXRhID0g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgbGFvLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBkZWZhdWx0OiB7CkBAIC00MjYsMTEgKzQzMCwxMSBAQCBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OnN5CiAgICAgICAgICAgICAgICAgdXNlRW1vamlGb250
ID0gQ0ZDaGFyYWN0ZXJTZXRJc0xvbmdDaGFyYWN0ZXJNZW1iZXIoYXBwbGVDb2xvckVtb2ppQ2hh
cmFjdGVyU2V0KCksIGMpOwogICAgICAgICB9CiAgICAgICAgIGlmICh1c2VFbW9qaUZvbnQpCi0g
ICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9u
LCBhcHBsZUNvbG9yRW1vamksIGZhbHNlLCBEb05vdFJldGFpbik7CisgICAgICAgICAgICBzaW1w
bGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGFwcGxlQ29sb3JFbW9qaSwg
ZmFsc2UpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+
IGZhbGxiYWNrRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlRm9yQ2hhcmFjdGVycyhvcmlnaW5h
bEZvbnREYXRhLT5nZXRDVEZvbnQoKSwgY2hhcmFjdGVycywgbGVuZ3RoLCBudWxscHRyKSk7CiAg
ICAgICAgICAgICBpZiAoUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmb3VuZEZvbnROYW1lID0gYWRv
cHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoZmFsbGJhY2tGb250LmdldCgpKSkpCi0gICAg
ICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlv
biwgZm91bmRGb250TmFtZS5nZXQoKSwgZmFsc2UsIERvTm90UmV0YWluKTsKKyAgICAgICAgICAg
ICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGZvdW5kRm9u
dE5hbWUuZ2V0KCksIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBA
IC00MzksNyArNDQzLDcgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpz
eQogICAgIGlmIChzaW1wbGVGb250RGF0YSkKICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRh
LnJlbGVhc2UoKTsKIAotICAgIHJldHVybiBnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoZGVzY3JpcHRpb24pOworICAgIHJldHVybiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGRl
c2NyaXB0aW9uKTsKIH0KIAogUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpz
aW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQpAQCAtNDU3LDcgKzQ2MSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6c2kKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWVubG8o
Im1lbmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNvdXJpZXIiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1lbmxv
KSkgewotICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNj
cmlwdGlvbiwgY291cmllcik7CisgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIApAQCAtNDY1LDcgKzQ2OSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c2kKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
bHVjaWRhR3JhbmRlKCJsdWNpZGEgZ3JhbmRlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZl
cmRhbmEoInZlcmRhbmEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbHVjaWRhR3JhbmRlKSkgewotICAg
ICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwg
dmVyZGFuYSk7CisgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIHZlcmRhbmEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApA
QCAtNDc3LDE2ICs0ODEsMTYgQEAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpzaQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YUJv
bGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzICYmICFzaW1wbGVGb250RGF0YTsgKytqKQog
ICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jkc1tqXSwgZmFsc2UpKQot
ICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3Jp
cHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gZ2VlemFCb2xk
IDogZ2VlemFQbGFpbik7CisgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgp
KSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOwogICAgIH0KIAogICAgIHJldHVybiBzaW1wbGVG
b250RGF0YS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1JlZjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGZhbGxiYWNrRm9udEZhbWlseSgiLlBob25lRmFsbGJhY2siLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRGYW1pbHksIGZhbHNlLCBzaG91bGRSZXRhaW4p
OworICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9u
dEZhbWlseSwgZmFsc2UpOwogfQogCiBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldEN1
c3RvbUZhbGxiYWNrRm9udChjb25zdCBVSW50MzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9T
aW1wbGVGb250RGF0YUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvU2ltcGxlRm9udERhdGFJT1MubW0JKHJldmlzaW9uIDE3ODAzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9TaW1wbGVGb250RGF0YUlPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXQKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNC
b2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFp
dHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0
aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYmICEoc2NhbGVk
Rm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7CiAKLSAgICAgICAgcmV0dXJuIGZvbnRD
YWNoZSgpLmdldENhY2hlZEZvbnREYXRhKCZzY2FsZWRGb250RGF0YSk7CisgICAgICAgIHJldHVy
biBmb250Q2FjaGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHNjYWxlZEZvbnREYXRhKTsKICAgICB9
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyQ29yZVRleHQubW0JKHJldmlzaW9uIDE3ODAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjc2LDEzICsyNzYsMTMgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmNvbGxlY3RDb21wbAogICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMu
YXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250RGF0YSgpLCBj
cCwgc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBt
X3J1bi5sdHIoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250Q2Fj
aGUoKS5nZXRDYWNoZWRGb250RGF0YShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1l
LmdldCgpLCBmYWxzZSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9udENhY2hlKCkuZm9udEZvckZhbWlseShtX2ZvbnQu
Zm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSkuZ2V0KCk7CiAjaWYgIVBM
QVRGT1JNKElPUykKICAgICAgICAgICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1heSBoYXZlIHVz
ZWQgYSBmb250IHRoYXQgaXMgbm90IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIEluIHRoYXQgY2Fz
ZSwgZmFsbCBiYWNrIG9uCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBmb250IGFz
IHJldHVybmVkLCBldmVuIHRob3VnaCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3QgTlNGb250UmVu
ZGVyaW5nTW9kZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZvcm1EYXRh
KChOU0ZvbnQgKilydW5Gb250LCBDVEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2ZvbnQuZm9udERl
c2NyaXB0aW9uKCkudXNlUHJpbnRlckZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
dW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLmdldENhY2hlZEZvbnREYXRhKCZydW5Gb250UGxhdGZv
cm1EYXRhLCBGb250Q2FjaGU6OkRvTm90UmV0YWluKS5nZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJ1bkZvbnREYXRhID0gJmZvbnRDYWNoZSgpLmZvbnRGb3JQbGF0Zm9ybURhdGEocnVu
Rm9udFBsYXRmb3JtRGF0YSkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICNlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBKdXN0IGFzc2VydCBmb3Igbm93LCB1bnRpbCB3
ZSBjYW4gZGV2aXNlIGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggaU9TLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFj
Lm1tCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNyArMzM3LDcgQEAg
c3RhdGljIGJvb2wgc2hvdWxkQXV0b0FjdGl2YXRlRm9udElmTmVlZAogICAgIHJldHVybiBrbm93
bkZhbWlsaWVzLmdldCgpLmFkZChmYW1pbHkpLmlzTmV3RW50cnk7CiB9CiAKLVBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBv
cmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkKK1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpzeXN0
ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgY29uc3QgU2ltcGxlRm9udERhdGEqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9y
bUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFVDaGFy
MzIgY2hhcmFjdGVyOwogICAgIFUxNl9HRVQoY2hhcmFjdGVycywgMCwgMCwgbGVuZ3RoLCBjaGFy
YWN0ZXIpOwpAQCAtNDAyLDcgKzQwMiw3IEBAIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6c3kKICAgICAgICAgIWlzUGxhdGZvcm1Gb250ICYmICh0cmFpdHMgJiBOU0ZvbnRJ
dGFsaWNUcmFpdCkgJiYgIShzdWJzdGl0dXRlRm9udFRyYWl0cyAmIE5TRm9udEl0YWxpY1RyYWl0
KSwKICAgICAgICAgcGxhdGZvcm1EYXRhLm1fb3JpZW50YXRpb24pOwogCi0gICAgcmV0dXJuIGdl
dENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250LCBEb05vdFJldGFpbik7CisgICAgcmV0dXJu
IGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7CiB9CiAKIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKQEAgLTQxOSwyNyArNDE5LDI3IEBAIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6c2kKICAgICAgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZ2VlemFTdHIsICgiR2VlemEgUHJvIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCiAgICAgICAgICAgICBpZiAoZmFtaWx5
LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgZ2VlemFTdHIpOworICAg
ICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
Z2VlemFTdHIpOwogICAgIH0KICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3Vs
ZFJldGFpbiBzaG91bGRSZXRhaW4pCitSZWY8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6bGFz
dFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCB0
aW1lc1N0ciwgKCJUaW1lcyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
IAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUg
dXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhl
IGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJl
ZnMuCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IGdldENhY2hl
ZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4p
OworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBmb250Rm9yRmFt
aWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlKTsKICAgICBpZiAoc2ltcGxlRm9u
dERhdGEpCi0gICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7CisgICAgICAg
IHJldHVybiAqc2ltcGxlRm9udERhdGE7CiAKICAgICAvLyBUaGUgVGltZXMgZmFsbGJhY2sgd2ls
bCBhbG1vc3QgYWx3YXlzIHdvcmssIGJ1dCBpbiB0aGUgaGlnaGx5IHVudXN1YWwgY2FzZSB3aGVy
ZQogICAgIC8vIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBpdCwgd2UgZmFsbCBiYWNrIG9uIEx1Y2lk
YSBHcmFuZGUgYmVjYXVzZSB0aGF0J3MKICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHRoZXJlLCBh
Y2NvcmRpbmcgdG8gTmF0aGFuIFRheWxvci4gVGhpcyBpcyBnb29kIGVub3VnaAogICAgIC8vIHRv
IGF2b2lkIGEgY3Jhc2ggYXQgbGVhc3QuCiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgbHVjaWRhR3JhbmRlU3RyLCAoIkx1Y2lkYSBHcmFuZGUiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgcmV0dXJuIGdldENhY2hlZEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgbHVjaWRhR3JhbmRlU3RyLCBmYWxzZSwgc2hvdWxkUmV0
YWluKTsKKyAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBsdWNpZGFH
cmFuZGVTdHIsIGZhbHNlKTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5
KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRz
TWFza3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAxNzgwMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI2MiwxOCArMjYyLDYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1DaGFyV2lkdGhJbgogfQogI2VuZGlmIC8vIFVTRShBUFBLSVQpCiAKLXZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKCFpc0N1c3RvbUZvbnQoKSAm
JiBtX2Rlcml2ZWRGb250RGF0YSkgewotICAgICAgICAvLyBUaGVzZSBjb21lIGZyb20gdGhlIGNh
Y2hlLgotICAgICAgICBpZiAobV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAg
ICAgIGZvbnRDYWNoZSgpLnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzLmdldCgpKTsKLQotICAgICAgICBpZiAobV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFy
aykKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250
RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpKTsKLSAgICB9Ci19Ci0KICNpZiAhUExBVEZPUk0oSU9T
KQogUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ3Jl
YXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewpAQCAtMzA0LDggKzI5Miw3IEBAIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICAgICAgc2NhbGVkRm9udERhdGEu
bV9zeW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBOU0JvbGRGb250TWFzaykgJiYgIShzY2Fs
ZWRGb250VHJhaXRzICYgTlNCb2xkRm9udE1hc2spOwogICAgICAgICBzY2FsZWRGb250RGF0YS5t
X3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIE5TSXRhbGljRm9udE1hc2spICYmICEo
c2NhbGVkRm9udFRyYWl0cyAmIE5TSXRhbGljRm9udE1hc2spOwogCi0gICAgICAgIC8vIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKSB0YWtlcyBjYXJlIG9mIG5vdCBkZWxldGluZyB0
aGUgY2FjaGVkIGZvbnQgZGF0YSB0d2ljZS4KLSAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLmdl
dENhY2hlZEZvbnREYXRhKCZzY2FsZWRGb250RGF0YSk7CisgICAgICAgIHJldHVybiBmb250Q2Fj
aGUoKS5mb250Rm9yUGxhdGZvcm1EYXRhKHNjYWxlZEZvbnREYXRhKTsKICAgICB9CiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApJbmRleDogU291cmNlL1dlYktpdC9pb3MvTWlzYy9F
bW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxNzgwMzUp
CisrKyBTb3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiBQYXNzUmVmUHRyPEZvbnREYXRhPiBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yOjpnZXRG
YWxsYmFja0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBz
aXplX3QpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgYXBwbGVDb2xvckVtb2ppLCAoIkFwcGxlIENvbG9yIEVtb2ppIikpOwotICAgIFJlZlB0cjxG
b250RGF0YT4gZm9udERhdGEgPSBmb250Q2FjaGUoKS5nZXRDYWNoZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIGFwcGxlQ29sb3JFbW9qaSk7CisgICAgUmVmUHRyPEZvbnREYXRhPiBmb250RGF0
YSA9IGZvbnRDYWNoZSgpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBhcHBsZUNvbG9y
RW1vamkpOwogICAgIGlmICghZm9udERhdGEpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gZ2V0IFwiQXBwbGUgQ29sb3IgRW1vamlcIiBmcm9tIHRoZSBmb250IGNhY2hlLiBVc2luZyB0
aGUgbGFzdCByZXNvcnQgZmFsbGJhY2sgZm9udCBpbnN0ZWFkLiIpOwotICAgICAgICBmb250RGF0
YSA9IGZvbnRDYWNoZSgpLmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgZm9udERhdGEgPSBmb250Q2FjaGUoKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250
KGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCiAgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNp
b24gMTc4MDM1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDg3OSw3ICs0ODc5LDcgQEAgc3RhdGljIE5TU3RyaW5nICpmb250
TmFtZUZvckRlc2NyaXB0aW9uKAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoYm9sZCA/
IEZvbnRXZWlnaHQ5MDAgOiBGb250V2VpZ2h0NTAwKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShwb2ludFNpemUpOwogICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIHB1
cmdlUHJldmVudGVyOwotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEg
PSBmb250Q2FjaGUoKS5nZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5h
bWUsIGZhbHNlLCBXZWJDb3JlOjpGb250Q2FjaGU6OkRvTm90UmV0YWluKTsKKyAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gZm9udENhY2hlKCkuZm9udEZvckZhbWls
eShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAgIHJldHVybiBbc2ltcGxlRm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm5zRm9udCgpIGZvbnROYW1lXTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>