<?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>95866</bug_id>
          
          <creation_ts>2012-09-05 10:27:40 -0700</creation_ts>
          <short_desc>Refactor WebCore::FontData handling to clarify pointer ownership</short_desc>
          <delta_ts>2012-10-02 07:36:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>98158</dependson>
          <blocked>93640</blocked>
    
    <blocked>95867</blocked>
    
    <blocked>97245</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen Chenney">schenney</reporter>
          <assigned_to name="Stephen Chenney">schenney</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>inferno</cc>
    
    <cc>jamesr</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mitz</cc>
    
    <cc>noam</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>712208</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-05 10:27:40 -0700</bug_when>
    <thetext>Right now, FontData objects are created in CSSSegmentedFontFace and CSSFontFaceSource and then passed all over the code as raw pointers. Custom FontData is ultimately owned and deleted by FontFallbackList (as of the patch for 93640). But the ownership of regular FontData is not so clear cut, and indeed we might be leaking it. This bug is to cover refactoring of FontData ownership to reduce the change of security problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712458</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-05 13:12:34 -0700</bug_when>
    <thetext>I believe Hyatt wrote most of this and likely could explain his intent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712461</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-05 13:14:50 -0700</bug_when>
    <thetext>I should note that all of this code was written before the existence of OwnPtr or PassOwnPtr. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713304</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-06 08:17:37 -0700</bug_when>
    <thetext>Here&apos;s my analysis of FontData ownership and other class that hold pointers to it:

FontData allocated in CSSFontFaceSource either comes from the cache or is only custom.

All SegmentedFontData are custom fonts.

FontCache.cpp has a hash table with SimpleFontData in the value field. Note that this rules out SegmentedFontData from storage in the cache. If the font is retained, it adds it to the cache and will not remove it unless it&apos;s use count goes to zero. Otherwise, it puts it in the cache but also adds it to the inactive font list. The inactive font list is not cleared until purgeInactiveFontDataIfNeeded or purgeInactiveFontData, at which point the SimpleFontData is deleted. The FontCachePurgeProtector triggers font cache purging upon destruction.

However, FontCache::getFontData only puts FontData in the cache when the FontSelector::getFontData method returns 0. But, the CSSFontSelector code uses FontCache::getCachedFontData for all non-custom fonts. FontCache::getCachedFontData always adds the FontData to the cache and it&apos;s never custom data.

From this we infer that FontCache owns non-custom FontData, and FontFallbackList owns custom FontData that DOES NOT COME FROM FontSelector. The &quot;retains&quot; flag seems consistent in this context.

CSSSegmentedFontFace has a HashMap where the values are SegmentedFontData*. These are not deleted by CSSSegmentedFontFace, which is good, but it is not clear that this table is always cleared when FontFallbackList prunes its tree. That would require calling CSSSegmentedFontFace::~CSSSegmentedFontFace(), CSSSegmentedFontFace::fontLoaded(CSSFontFace*) or CSSSegmentedFontFace::appendFontFace(PassRefPtr&lt;CSSFontFace&gt; fontFace). CSSFontFaceSource has identical issues to CSSSegmentedFontFace.

Who clears the HashMap in CSSSegmentedFontFace and CSSFontFaceSource when FontData is deleted? It must be the case that these objects must always destructed when the FontData is cleared. Otherwise we would see problems all over tha place that we do not see now.

GlyphPage holds an array of SimpleFontData*. This is cleared when fonts are purged from the GlyphPageTreeNode.

GlyphPageTreeNode holds a HashMap keyed on FontData*. Cleared in destructor and when font is purged.

SimpleFontData owns its derived font data and deletes it.

Are the SimpleFontData DerivedData members ever cached? No, allocated directly in platform layers, held in RefPtrs, and never held by anything else.

InlineFlowBox has a hash map of SimpleFontData (rendering). But this is only ever stack allocated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713387</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-06 09:56:26 -0700</bug_when>
    <thetext>It sounds like FontCache owns all non-custom FontData, which is easy, because that FontData is global (shared between pages), correct?

custom FontData is more tricky, because theoretically it is not shared between pages, but rather per-document, except in the case of seamless, where it can be inherited across document boundaries.

From your description, it sounds like some of the custom FontData are owned by FontFallbackList, but it&apos;s not clear to me from your description who deletes the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713474</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-06 11:05:03 -0700</bug_when>
    <thetext>Some FontData is owned by SimpleFontData, but that is all correctly accounted for so we can ignore it for the purposes of this discussion.

All other FontData is requested via FontFallbackList::getFontData:
  FontFallbackList::getFontData calls
    FontCache::getFontData calls
      CSSFontSelector::getFontData calls
        CSSFontFace::getFontData calls
          CSSFontFaceSelector::getFontData which allocates FontData
      or
        CSSSegmentedFontFace::getFontData which allocates FontData

On the return path, FontCache caches and owns non-custom FontData, while FontFallbackList owns custom FontData. There is no way, as far as I can tell, to get a custom FontData object without going through FontFallbackList and FontFallbackList always caches that custom font for removal when no longer used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714901</commentid>
    <comment_count>6</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-07 13:22:28 -0700</bug_when>
    <thetext>When modifying the code to use RefPtr we should modify the m_fontList member in FontFallbackList to use a custom class for the pair in

mutable Vector&lt;pair&lt;const FontData*, IsCustomFontOrNot&gt;, 1&gt; m_fontList;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721967</commentid>
    <comment_count>7</comment_count>
      <attachid>164403</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-17 08:49:01 -0700</bug_when>
    <thetext>Created attachment 164403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721968</commentid>
    <comment_count>8</comment_count>
      <attachid>164403</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-17 08:51:43 -0700</bug_when>
    <thetext>Comment on attachment 164403
Patch

This patch is not for submission because more testing and performance testing is required. I think the code is right, however, so review pending test results would be very welcome.

Because many platform files are touched by this patch, and I can&apos;t build most of them, I promise to be available for an extended period when it lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722031</commentid>
    <comment_count>9</comment_count>
      <attachid>164403</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-17 10:34:32 -0700</bug_when>
    <thetext>Comment on attachment 164403
Patch

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

I think this great.  But we need to be very careful not to ref-churn FontData&apos;s too much.  It&apos;s not clear to me that all these cases need PRP.  I&apos;m happy to talk more about this via VC or chat if that&apos;s helpful.  I&apos;m technically on vacation this week, but since in many ways you&apos;re doing me a favor here by cleaning up my seamless mess, I&apos;m happy to set up a time to chat if that&apos;s helpful. :)

&gt; Source/WebCore/css/CSSFontFaceSource.cpp:119
&gt; +        return fontData;

.release() presumably.

&gt; Source/WebCore/css/CSSFontFaceSource.cpp:191
&gt; +        fontData = 0;

.clear() is fine too.

&gt; Source/WebCore/css/CSSFontFaceSource.cpp:193
&gt; +    return fontData;

.release()

&gt; Source/WebCore/css/CSSFontFaceSource.h:62
&gt; +    PassRefPtr&lt;SimpleFontData&gt; getFontData(const FontDescription&amp;, bool syntheticBold, bool syntheticItalic, CSSFontSelector*);

Does CSSFontFaceSource own the FontData?  Can it just return a raw pointer here?  Do any clients need to hold the FontData longer than local?  Or it could return RefPtr&lt;FontData&gt;&amp; to indicate it requires a ref, but local callers don&apos;t have to bother taking one.  That&apos;s kinda an advanced pattern reserved for perf-sensitive places (and really should be documented better).

&gt; Source/WebCore/css/CSSFontSelector.cpp:468
&gt; +PassRefPtr&lt;FontData&gt; CSSFontSelector::getFontData(const FontDescription&amp; fontDescription, const AtomicString&amp; familyName)

Unclear to me if this is creating a FontData or not?  Do callers need to ref it?

&gt; Source/WebCore/platform/graphics/FontCache.cpp:353
&gt; -    return getLastResortFallbackFont(fontDescription, DoNotRetain);
&gt; +    return getLastResortFallbackFont(fontDescription, DoNotRetain).leakRef();

Does DoNotRetain even make sense anymore?  That was in a model where the Cache kept its own separate refcount, right?

&gt; Source/WebCore/platform/graphics/FontCache.cpp:390
&gt; +        RefPtr&lt;SimpleFontData&gt; fontData = *it.get();

Might want to use const RefPtr&lt;SimpleFontData&gt;&amp; fontData here.

&gt; Source/WebCore/platform/graphics/FontFallbackList.h:87
&gt; -    mutable Vector&lt;pair&lt;const FontData*, bool&gt;, 1&gt; m_fontList;
&gt; +    mutable Vector&lt;pair&lt;RefPtr&lt;FontData&gt;, bool&gt;, 1&gt; m_fontList;

Why is the bool still needed if we always take a ref to the FontData now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722034</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-17 10:38:09 -0700</bug_when>
    <thetext>I don&apos;t know if we have any microbenchmarks in PerformanceTests which cover font lookup very well.  We obviously could write one.  Otherwise the PLT is probably our best proxy.  I&apos;m not sure the process for testing with the PLT these days, or if it&apos;s even possible pre-commit.  Ryosuke, James and Tony G have been following the Chromium performance story more closely and would know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722067</commentid>
    <comment_count>11</comment_count>
      <attachid>164403</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-17 11:02:34 -0700</bug_when>
    <thetext>Comment on attachment 164403
Patch

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

I also want to try to do something about the horrible code duplication in all of the platform-specific methods. The Skia code for SVG filters manages to avoid all this duplication, and I think we can apply the same principles here. It will have to be another bug.

&gt;&gt; Source/WebCore/css/CSSFontFaceSource.cpp:119
&gt;&gt; +        return fontData;
&gt; 
&gt; .release() presumably.

No release I think. We have a reference to the RefPtr, so the ref-count was not incremented in the =. We want to increment the ref count for the return, because the RefPtr is still in the m_fontDataTable. So we construct a return value from the RefPtr&amp; and get the behavior we want. I believe, and I&apos;ll verify, that if we release we will zero out the m_ptr in the m_fontDataTable.

&gt;&gt; Source/WebCore/css/CSSFontFaceSource.cpp:191
&gt;&gt; +        fontData = 0;
&gt; 
&gt; .clear() is fine too.

OK. Didn&apos;t know about that.

&gt;&gt; Source/WebCore/css/CSSFontFaceSource.cpp:193
&gt;&gt; +    return fontData;
&gt; 
&gt; .release()

Same argument as above. We have a RefPtr&amp; and we do not want to release that ref.

&gt;&gt; Source/WebCore/css/CSSFontFaceSource.h:62
&gt;&gt; +    PassRefPtr&lt;SimpleFontData&gt; getFontData(const FontDescription&amp;, bool syntheticBold, bool syntheticItalic, CSSFontSelector*);
&gt; 
&gt; Does CSSFontFaceSource own the FontData?  Can it just return a raw pointer here?  Do any clients need to hold the FontData longer than local?  Or it could return RefPtr&lt;FontData&gt;&amp; to indicate it requires a ref, but local callers don&apos;t have to bother taking one.  That&apos;s kinda an advanced pattern reserved for perf-sensitive places (and really should be documented better).

CSSFontFaceSource maintains a list of FontData that it know it has created previously. I should look into whether or not this is double caching, but I am pretty sure that it saves work. In particular, for some reason the FontCache code checks for the FontData in the CSSFontSelector, and hence here, before it looks in it&apos;s own cache.

I think there are places where a reference to a RefPtr would work fine. That is, any of these cases where we are returning something that is definitely in a cache. I&apos;ll look into it.

&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:468
&gt;&gt; +PassRefPtr&lt;FontData&gt; CSSFontSelector::getFontData(const FontDescription&amp; fontDescription, const AtomicString&amp; familyName)
&gt; 
&gt; Unclear to me if this is creating a FontData or not?  Do callers need to ref it?

I think callers do need a ref, because FontCache definitely needs a ref and it calls this method to find FontData.

I built this patch up by started at the cache code, adding RefPtr in those locations, and then through search, compilation and testing finding all of the places where the FontData came from to fill those caches.

&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:353
&gt;&gt; +    return getLastResortFallbackFont(fontDescription, DoNotRetain).leakRef();
&gt; 
&gt; Does DoNotRetain even make sense anymore?  That was in a model where the Cache kept its own separate refcount, right?

DoNotRetain prevents custom fonts from ending up in this cache. I don&apos;t know for sure why that&apos;s the case, but I believe it is because this cache is not cleared on document destruction, which is when we really want any custom fonts for the page to be purged. Hence the separate cache, effectively in FontFallbackList, for custom fonts, with purging managed by the document (for now). I am loath to mess with this right now, particularly given the method name seems to imply that this must be non-retained FontData.

&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:390
&gt;&gt; +        RefPtr&lt;SimpleFontData&gt; fontData = *it.get();
&gt; 
&gt; Might want to use const RefPtr&lt;SimpleFontData&gt;&amp; fontData here.

Yep.

&gt;&gt; Source/WebCore/platform/graphics/FontFallbackList.h:87
&gt;&gt; +    mutable Vector&lt;pair&lt;RefPtr&lt;FontData&gt;, bool&gt;, 1&gt; m_fontList;
&gt; 
&gt; Why is the bool still needed if we always take a ref to the FontData now?

I don&apos;t think it is. I was leaving it until this afternoon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722070</commentid>
    <comment_count>12</comment_count>
      <attachid>164419</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-17 11:04:27 -0700</bug_when>
    <thetext>Created attachment 164419
Patch

This patch should apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722098</commentid>
    <comment_count>13</comment_count>
      <attachid>164403</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-17 11:24:43 -0700</bug_when>
    <thetext>Comment on attachment 164403
Patch

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

&gt;&gt;&gt; Source/WebCore/css/CSSFontFaceSource.cpp:119
&gt;&gt;&gt; +        return fontData;
&gt;&gt; 
&gt;&gt; .release() presumably.
&gt; 
&gt; No release I think. We have a reference to the RefPtr, so the ref-count was not incremented in the =. We want to increment the ref count for the return, because the RefPtr is still in the m_fontDataTable. So we construct a return value from the RefPtr&amp; and get the behavior we want. I believe, and I&apos;ll verify, that if we release we will zero out the m_ptr in the m_fontDataTable.

I see, tricky.  Would .release() be a compile error?  if so, then no comment is probably necessary, as anyone who tried to add .release() woudl hit it.  (I think it would be, since I expect .release() must not be const.)

&gt;&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:353
&gt;&gt;&gt; +    return getLastResortFallbackFont(fontDescription, DoNotRetain).leakRef();
&gt;&gt; 
&gt;&gt; Does DoNotRetain even make sense anymore?  That was in a model where the Cache kept its own separate refcount, right?
&gt; 
&gt; DoNotRetain prevents custom fonts from ending up in this cache. I don&apos;t know for sure why that&apos;s the case, but I believe it is because this cache is not cleared on document destruction, which is when we really want any custom fonts for the page to be purged. Hence the separate cache, effectively in FontFallbackList, for custom fonts, with purging managed by the document (for now). I am loath to mess with this right now, particularly given the method name seems to imply that this must be non-retained FontData.

I see.  So it&apos;s basically DoNotCache now. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722164</commentid>
    <comment_count>14</comment_count>
      <attachid>164419</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-17 12:29:33 -0700</bug_when>
    <thetext>Comment on attachment 164419
Patch

Attachment 164419 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13870525</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722371</commentid>
    <comment_count>15</comment_count>
      <attachid>164475</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-17 16:47:38 -0700</bug_when>
    <thetext>Created attachment 164475
Patch

This should fix the mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722374</commentid>
    <comment_count>16</comment_count>
      <attachid>164475</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-17 16:57:34 -0700</bug_when>
    <thetext>Comment on attachment 164475
Patch

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

&gt; Source/WebCore/ChangeLog:-41
&gt; -&lt;&lt;&lt;&lt;&lt;&lt;&lt; .mine

Do you know about resolve-ChangeLogs?  It&apos;s a nifty little script for dealing with this sort of update problem.  Similarly if you&apos;re a git user, check out http://trac.webkit.org/wiki/UsingGitWithWebKit, which shows you how to setup resolve-ChangeLogs as a merge-driver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722378</commentid>
    <comment_count>17</comment_count>
      <attachid>164475</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-17 17:13:19 -0700</bug_when>
    <thetext>Comment on attachment 164475
Patch

Attachment 164475 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13879387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722392</commentid>
    <comment_count>18</comment_count>
      <attachid>164475</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-09-17 17:48:30 -0700</bug_when>
    <thetext>Comment on attachment 164475
Patch

Attachment 164475 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13890028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722760</commentid>
    <comment_count>19</comment_count>
      <attachid>164557</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-18 07:26:55 -0700</bug_when>
    <thetext>Created attachment 164557
Patch

This should fix the builds, and it addresses the coding issues. Still need performance numbers and some sanity checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722761</commentid>
    <comment_count>20</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-18 07:27:47 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 164475 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=164475&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:-41
&gt; &gt; -&lt;&lt;&lt;&lt;&lt;&lt;&lt; .mine
&gt; 
&gt; Do you know about resolve-ChangeLogs?  It&apos;s a nifty little script for dealing with this sort of update problem.  Similarly if you&apos;re a git user, check out http://trac.webkit.org/wiki/UsingGitWithWebKit, which shows you how to setup resolve-ChangeLogs as a merge-driver.

Yes, I now about it. But this wasn&apos;t me. :-) Someone has fixed the issue now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722801</commentid>
    <comment_count>21</comment_count>
      <attachid>164557</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-09-18 08:20:03 -0700</bug_when>
    <thetext>Comment on attachment 164557
Patch

Attachment 164557 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13901216</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722821</commentid>
    <comment_count>22</comment_count>
      <attachid>164567</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-18 08:34:04 -0700</bug_when>
    <thetext>Created attachment 164567
Patch

Fix the GTK build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722829</commentid>
    <comment_count>23</comment_count>
      <attachid>164567</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-18 08:58:21 -0700</bug_when>
    <thetext>Comment on attachment 164567
Patch

Attachment 164567 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13905125</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722960</commentid>
    <comment_count>24</comment_count>
      <attachid>164600</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-18 12:01:13 -0700</bug_when>
    <thetext>Created attachment 164600
Patch

Fix the Debug build, and perf info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723104</commentid>
    <comment_count>25</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-18 15:40:47 -0700</bug_when>
    <thetext>I sanity checked with a debug chrome for an afternoon. FontData does get deleted, but only when it&apos;s intended to. Once the cache warms up, almost every call avoids the long chain of PassRefPtr, so performance really is not much of an issue.

Angry Birds still crashes, but that&apos;s expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723116</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-18 16:02:37 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; I sanity checked with a debug chrome for an afternoon. FontData does get deleted, but only when it&apos;s intended to. Once the cache warms up, almost every call avoids the long chain of PassRefPtr, so performance really is not much of an issue.
&gt; 
&gt; Angry Birds still crashes, but that&apos;s expected.

Why is that expected?  Don&apos;t the custom fonts still get held in the FontFallbackList with a ref now instead of a raw pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723125</commentid>
    <comment_count>27</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-18 16:28:02 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; I sanity checked with a debug chrome for an afternoon. FontData does get deleted, but only when it&apos;s intended to. Once the cache warms up, almost every call avoids the long chain of PassRefPtr, so performance really is not much of an issue.
&gt; &gt; 
&gt; &gt; Angry Birds still crashes, but that&apos;s expected.
&gt; 
&gt; Why is that expected?  Don&apos;t the custom fonts still get held in the FontFallbackList with a ref now instead of a raw pointer?

The FontFallbackList is still asked to purge data by the Document, which means it removes the FontData from its hash map and all of the GlyphPageTreeNodes associated with it. It&apos;s the deleted GlyphPageTreeNode object that other code gets hold of and tries to access, pulling bad pointers from that. So while the FontData lives on, the FontFallbackList that was using it is a source of crashes.

We started down the road of this patch so that we could be confident that, if we held FontData in FontFallbackList as a RefPtr, we do not need to be concerned with explicitly deleting it when we were not sure who else might be holding on (such as the FontCache, CSSFontFaceSource and SegmentedFontFace objects that also hold non-transient pointers to FontData objects).

With the patch that will follow this one we&apos;ll move control of the data in FontFallbackList to the FontFallbackList itself. That&apos;s the original patch that lit up the debug tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728012</commentid>
    <comment_count>28</comment_count>
      <attachid>164600</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-25 15:22:07 -0700</bug_when>
    <thetext>Comment on attachment 164600
Patch

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

&gt; Source/WebCore/css/CSSFontSelector.h:58
&gt; +    virtual PassRefPtr&lt;FontData&gt; getFontData(const FontDescription&amp;, const AtomicString&amp;);

I suspect familyName is still useful as an arg name. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728018</commentid>
    <comment_count>29</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-25 15:29:45 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; I sanity checked with a debug chrome for an afternoon. FontData does get deleted, but only when it&apos;s intended to. Once the cache warms up, almost every call avoids the long chain of PassRefPtr, so performance really is not much of an issue.
&gt; &gt; &gt; 
&gt; &gt; &gt; Angry Birds still crashes, but that&apos;s expected.
&gt; &gt; 
&gt; &gt; Why is that expected?  Don&apos;t the custom fonts still get held in the FontFallbackList with a ref now instead of a raw pointer?
&gt; 
&gt; The FontFallbackList is still asked to purge data by the Document, which means it removes the FontData from its hash map and all of the GlyphPageTreeNodes associated with it. It&apos;s the deleted GlyphPageTreeNode object that other code gets hold of and tries to access, pulling bad pointers from that. So while the FontData lives on, the FontFallbackList that was using it is a source of crashes.

I&apos;m curious how the code is getting hold of the GlyphPageTreeNodes except through lookup via the FontFallbackList.

&gt; We started down the road of this patch so that we could be confident that, if we held FontData in FontFallbackList as a RefPtr, we do not need to be concerned with explicitly deleting it when we were not sure who else might be holding on (such as the FontCache, CSSFontFaceSource and SegmentedFontFace objects that also hold non-transient pointers to FontData objects).
&gt;
&gt; With the patch that will follow this one we&apos;ll move control of the data in FontFallbackList to the FontFallbackList itself. That&apos;s the original patch that lit up the debug tests.

OK.

This patch itself looks fine.  My only concern is understanding the grand plan.  One way to fix the seamless issue is to make the inner document never clear the fonts and make the outer document always mange them.  You&apos;ve started down a path of allowing cleaner sharing of FontData, which is great.  My concern would be if we&apos;ve learned from this that FontData can&apos;t ever really be shared and we&apos;re just making a half-solution here.

Regardless, you know what&apos;s up here, I&apos;m sure, and I&apos;ll get it from the horse&apos;s mouth tomorrow, and we can move forward with this then.

Thanks again, sorry for the slowness of my replies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728799</commentid>
    <comment_count>30</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-09-26 11:39:24 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; I&apos;m curious how the code is getting hold of the GlyphPageTreeNodes except through lookup via the FontFallbackList.

The primary means is through lookup via FontFallbackList. Some FontData subclasses get GlyphPageTreeNodes directly from GlyphPageTreeNode::getRootChild(this, ...), where &quot;this&quot; is FontData. In that case the object doing the getting (the FontData) is still in existence and the GlyphPageTreeNode is created if it does not already exist.

When we fix the other bug, FontFalbackList will not have caches of bad data as it does now.


&gt; This patch itself looks fine.  My only concern is understanding the grand plan.  One way to fix the seamless issue is to make the inner document never clear the fonts and make the outer document always mange them.  You&apos;ve started down a path of allowing cleaner sharing of FontData, which is great.  My concern would be if we&apos;ve learned from this that FontData can&apos;t ever really be shared and we&apos;re just making a half-solution here.
&gt; 
&gt; Regardless, you know what&apos;s up here, I&apos;m sure, and I&apos;ll get it from the horse&apos;s mouth tomorrow, and we can move forward with this then.

FontData can definitely be shared between FontFallbackLists. It is encouraged, in fact, by the FontCache. FontFallbackLists can also be shared by Font objects. It is designed that way.

The only issue is whether Font objects can be copy-constructed from one document to another. What really matters is whether Font contains per-document information. It shouldn&apos;t, but it does due to the custom font data caching behavior in Document. If we move that code to FontFallbackList, which is owned by Font, and not tied to Document, then I think it becomes safe to share Font across documents.

There is a FIXME in there somewhere about how Font should be ref counted. A precondition to doing so is that we deal with the custom font caching. Even than, I am not entirely sure that it is safe to do. I would be willing to give it a shot however, as it would dramatically reduce allocations of Font objects.

&gt; Thanks again, sorry for the slowness of my replies.

No problem at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731933</commentid>
    <comment_count>31</comment_count>
      <attachid>164600</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-01 13:23:41 -0700</bug_when>
    <thetext>Comment on attachment 164600
Patch

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731941</commentid>
    <comment_count>32</comment_count>
      <attachid>166533</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-10-01 13:48:24 -0700</bug_when>
    <thetext>Created attachment 166533
Patch

Revised Changelog and update to accomodate recent patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731961</commentid>
    <comment_count>33</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-10-01 14:01:38 -0700</bug_when>
    <thetext>r=eric. Eric R+&apos;d the previous patch. The current one that I am about to commit just fixes merge conflicts and updates the Changelog with some additional info, once it clears EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731991</commentid>
    <comment_count>34</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-10-01 14:31:20 -0700</bug_when>
    <thetext>Committed r130079: &lt;http://trac.webkit.org/changeset/130079&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732161</commentid>
    <comment_count>35</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-10-01 17:28:14 -0700</bug_when>
    <thetext>Reverted r130079 for reason:

Broke the chomium windows compile.

Committed r130105: &lt;http://trac.webkit.org/changeset/130105&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732162</commentid>
    <comment_count>36</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-10-01 17:29:12 -0700</bug_when>
    <thetext>Broke the chromium windows compile: http://build.chromium.org/p/chromium.webkit/builders/Win%20Builder/builds/28909/steps/compile/logs/stdio

553&gt;..\platform\graphics\chromium\SimpleFontDataChromiumWin.cpp(123): error C2556: &apos;WTF::PassOwnPtr&lt;T&gt; WebCore::SimpleFontData::smallCapsFontData(const WebCore::FontDescription &amp;) const&apos; : overloaded function differs only by return type from &apos;WTF::PassRefPtr&lt;T&gt; WebCore::SimpleFontData::smallCapsFontData(const WebCore::FontDescription &amp;) const&apos;
553&gt;          with
553&gt;          [
553&gt;              T=WebCore::SimpleFontData
553&gt;          ]
553&gt;          c:\b\build\slave\win-latest-rel\build\src\third_party\webkit\source\webcore\platform\graphics\SimpleFontData.h(100) : see declaration of &apos;WebCore::SimpleFontData::smallCapsFontData&apos;
553&gt;..\platform\graphics\chromium\SimpleFontDataChromiumWin.cpp(123): error C2371: &apos;WebCore::SimpleFontData::smallCapsFontData&apos; : redefinition; different basic types
553&gt;          c:\b\build\slave\win-latest-rel\build\src\third_party\webkit\source\webcore\platform\graphics\SimpleFontData.h(100) : see declaration of &apos;WebCore::SimpleFontData::smallCapsFontData&apos;
553&gt;..\platform\graphics\chromium\SimpleFontDataChromiumWin.cpp(133): error C2556: &apos;WTF::PassOwnPtr&lt;T&gt; WebCore::SimpleFontData::emphasisMarkFontData(const WebCore::FontDescription &amp;) const&apos; : overloaded function differs only by return type from &apos;WTF::PassRefPtr&lt;T&gt; WebCore::SimpleFontData::emphasisMarkFontData(const WebCore::FontDescription &amp;) const&apos;
553&gt;          with
553&gt;          [
553&gt;              T=WebCore::SimpleFontData
553&gt;          ]
553&gt;          c:\b\build\slave\win-latest-rel\build\src\third_party\webkit\source\webcore\platform\graphics\SimpleFontData.h(101) : see declaration of &apos;WebCore::SimpleFontData::emphasisMarkFontData&apos;
553&gt;..\platform\graphics\chromium\SimpleFontDataChromiumWin.cpp(133): error C2371: &apos;WebCore::SimpleFontData::emphasisMarkFontData&apos; : redefinition; different basic types
553&gt;          c:\b\build\slave\win-latest-rel\build\src\third_party\webkit\source\webcore\platform\graphics\SimpleFontData.h(101) : see declaration of &apos;WebCore::SimpleFontData::emphasisMarkFontData&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732594</commentid>
    <comment_count>37</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-10-02 06:03:19 -0700</bug_when>
    <thetext>Committed r130160: &lt;http://trac.webkit.org/changeset/130160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732642</commentid>
    <comment_count>38</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-02 07:36:32 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; Committed r130160: &lt;http://trac.webkit.org/changeset/130160&gt;

It made 2 tests crash on Qt - https://bugs.webkit.org/show_bug.cgi?id=98158</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164403</attachid>
            <date>2012-09-17 08:49:01 -0700</date>
            <delta_ts>2012-09-17 11:24:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95866-20120917114842.patch</filename>
            <type>text/plain</type>
            <size>98488</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODc2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2OSBAQAorMjAxMi0wOS0xNyAgU3RlcGhl
biBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkNvcmU6OkZvbnREYXRhIGhhbmRsaW5nIHRvIGNsYXJpZnkgcG9pbnRlciBvd25lcnNoaXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBhbGwgRm9udERhdGEgYW5kIGRlcml2ZWQgY2xhc3NlcyByZWYtY291bnRlZCBpbiBhbGwK
KyAgICAgICAgY29kZSBwYXRocyB0aGF0IGxlYWQgdG8gY2FjaGluZyBvciBvdGhlciByZXRlbnRp
b24gb2YgYSBwb2ludGVyLiBUaGUKKyAgICAgICAgZ29hbCBpcyB0byBhdmVydCBjcmFzaGVzIGFu
ZCBtZW1vcnkgbGVha3MsIGFuZCB0byBicmluZyB0aGUgY29kZSBtb3JlIGluCisgICAgICAgIGxp
bmUgd2l0aCBjdXJyZW50IFdlYktpdCBwcmFjdGljZXMuCisKKyAgICAgICAgQWxsIEZvbnREYXRh
IGRlcml2ZWQgY2xhc3NlcyBoYXZlIGJlZW4gc3dpdGNoZWQgdG8gdXNlIHN0YXRpYyBjcmVhdGUK
KyAgICAgICAgbWV0aG9kcyB3aXRoIHByaXZhdGUgY29uc3RydWN0b3JzLgorCisgICAgICAgIEFs
bCBjYWNoZXMgdGhhdCBob2xkIEZvbnREYXRhIG5vdyB1c2UgUmVmUHRycy4KKworICAgICAgICBB
bGwgbWV0aG9kcyB0aGF0IGNvbnN0cnVjdCBuZXcgZm9udCBkYXRhIG5vdyByZXR1cm4gUGFzc1Jl
ZlB0ciwgd2l0aAorICAgICAgICB0aGUgZXhjZXB0aW9uIG9mIGNvZGUgb25seSB1c2VkIHRvIGdl
bmVyYXRlIHRlbXBvcmFyeSBkYXRhIGZvciB0ZXh0CisgICAgICAgIHJ1biBsYXlvdXQuCisKKyAg
ICAgICAgQWxsIG1ldGhvZHMgdGhhdCBoYW5kbGUgRm9udERhdGEgaW4gYSBjYWxsIHN0YWNrIHRo
YXQgcGFzc2VzIHRocm91Z2gKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCBy
ZXR1cm4gUGFzc1JlZlB0ci4KKworICAgICAgICBQZXJmb3JtYW5jZSB0ZXN0aW5nIHdpbGwgYmUg
ZG9uZSBiZWZvcmUgY29tbWl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIHJl
ZmFjdG9yaW5nIGNvZGUgb25seSBhbmQgaGFzIG5vIGltcGFjdCBvbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAg
ICAgIChDU1NGb250RmFjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAgIChDU1NGb250RmFjZVNvdXJj
ZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250RGF0YUZvckdlbmVyaWNGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNl
bGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgor
ICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAg
ICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmg6CisgICAgICAgIChDU1NTZWdtZW50ZWRGb250
RmFjZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZWdpc3RlckN1c3RvbUZvbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgor
ICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25S
ZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJn
ZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAg
IChGb250Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFsbGJhY2tMaXN0OjpzZXRQbGF0Zm9ybUZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaDoKKyAgICAgICAgKEZvbnRGYWxsYmFja0xpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDoKKyAgICAgICAgKEZvbnRTZWxlY3Rv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb250RGF0YVJhbmdlOjpGb250RGF0YVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhUmFuZ2U6OmZvbnREYXRhKToKKyAgICAgICAgKEZvbnREYXRhUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNyZWF0ZSk6CisgICAgICAgIChTZWdt
ZW50ZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6U2Vn
bWVudGVkRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChTaW1wbGVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6dmFyaWFudEZvbnREYXRhKToKKyAgICAgICAgKERlcml2ZWRGb250RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9p
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoR2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udFByb2NEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93eC9Gb250Q2FjaGVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisKIDIwMTItMDktMTcgIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IE5NSTogbm93IHdoZW4gd2UgY2FuIGRldGVjdCBpbnN0cnVtZW50ZWQgY2xhc3NlcyB3ZSBjYW4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTI4Mzc0KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NyArOTEsNyBAQCB2b2lkIENTU0ZvbnRGYWNlOjpmb250TG9hZGVkKENTU0ZvbnRGYWNlCiAgICAg
Zm9udFNlbGVjdG9yLT5mb250TG9hZGVkKCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBDU1NGb250
RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBDU1NGb250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJ
dGFsaWMpCiB7CiAgICAgbV9hY3RpdmVTb3VyY2UgPSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpA
QCAtMTAyLDkgKzEwMiw5IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZTo6Z2V0Rm9udERh
dGEKIAogICAgIHNpemVfdCBzaXplID0gbV9zb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoU2ltcGxlRm9udERhdGEqIHJl
c3VsdCA9IG1fc291cmNlc1tpXS0+Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnRTZWxlY3RvcikpIHsKKyAgICAgICAgaWYgKFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gcmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5nZXRGb250RGF0YShm
b250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udFNlbGVj
dG9yKSkgewogICAgICAgICAgICAgbV9hY3RpdmVTb3VyY2UgPSBtX3NvdXJjZXNbaV0uZ2V0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZS5oCShyZXZpc2lvbiAxMjgzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZv
bnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKTsKIAogICAgIHN0cnVjdCBVbmljb2RlUmFuZ2UgewogICAgICAgICBVbmlj
b2RlUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvKQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZpc2lvbiAxMjgzNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5
NSw3IEBAIHZvaWQgQ1NTRm9udEZhY2VTb3VyY2U6OmZvbnRMb2FkZWQoQ2FjaGUKICAgICAgICAg
bV9mYWNlLT5mb250TG9hZGVkKHRoaXMpOwogfQogCi1TaW1wbGVGb250RGF0YSogQ1NTRm9udEZh
Y2VTb3VyY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBDU1NGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvcikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRG
YWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNl
bGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CiAgICAgLy8gSWYgdGhlIGZvbnQgaGFzbid0IGxvYWRl
ZCBvciBhbiBlcnJvciBvY2N1cnJlZCwgdGhlbiB3ZSd2ZSBnb3Qgbm90aGluZy4KICAgICBpZiAo
IWlzVmFsaWQoKSkKQEAgLTExNCwxMSArMTE0LDkgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRG
YWNlU291cmNlOjpnZXRGbwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAoZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCA2IHwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFy
aWFudCgpIDw8IDQKICAgICAgICAgICAgICAgICAgICAgICAgfCAoZm9udERlc2NyaXB0aW9uLnRl
eHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblVwcmlnaHQgPyA4IDogMCkgfCAoZm9u
dERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyA0IDogMCkgfCAoc3ludGhl
dGljQm9sZCA/IDIgOiAwKSB8IChzeW50aGV0aWNJdGFsaWMgPyAxIDogMCk7CiAKLSAgICBTaW1w
bGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDAp
Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgaWYgKGNhY2hlZERhdGEpCi0gICAgICAgIHJldHVybiBj
YWNoZWREYXRhOwotCi0gICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YTsKKyAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+JiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFz
aEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBpZiAoZm9udERhdGEpCisgICAgICAgIHJl
dHVybiBmb250RGF0YTsKIAogICAgIC8vIElmIHdlIGFyZSBzdGlsbCBsb2FkaW5nLCB0aGVuIHdl
IGxldCB0aGUgc3lzdGVtIHBpY2sgYSBmb250LgogICAgIGlmIChpc0xvYWRlZCgpKSB7CkBAIC0x
NTcsNyArMTU1LDcgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9zdmdGb250RmFjZUVsZW1lbnQgPSBmb250RmFjZUVs
ZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmb250
RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShTVkdGb250RGF0YTo6Y3JlYXRlKGZv
bnRGYWNlRWxlbWVudCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50
aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERh
dGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKFNWR0ZvbnREYXRhOjpjcmVhdGUoZm9udEZhY2VF
bGVtZW50KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0Jv
bGQsIHN5bnRoZXRpY0l0YWxpYyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBl
bHNlCiAjZW5kaWYKQEAgLTE2NiwxNCArMTY0LDE0IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250
RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgICAgICAgICBpZiAoIW1fZm9udC0+ZW5zdXJlQ3Vz
dG9tRm9udERhdGEoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAg
ICAgICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShtX2ZvbnQtPnBs
YXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlvbi5vcmll
bnRhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24udGV4
dE9yaWVudGF0aW9uKCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2Ny
aXB0aW9uLnJlbmRlcmluZ01vZGUoKSksIHRydWUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAg
Zm9udERhdGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJv
bUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRp
Y0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24o
KSwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVy
aW5nTW9kZSgpKSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcg
Rm9udHMKICAgICAgICAgICAgIGlmIChtX3N2Z0ZvbnRGYWNlRWxlbWVudCkKLSAgICAgICAgICAg
ICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShTVkdGb250RGF0YTo6
Y3JlYXRlKG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgICAg
ICAgICAgICAgIGZvbnREYXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShTVkdGb250RGF0YTo6
Y3JlYXRlKG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CiAjZW5kaWYK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0xODQsMTUgKzE4MiwxNSBAQCBTaW1wbGVGb250
RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAgICAgICAgIC8vIFRoaXMgdGVtcG9yYXJ5
IGZvbnQgaXMgbm90IHJldGFpbmVkIGFuZCBzaG91bGQgbm90IGJlIHJldHVybmVkLgogICAgICAg
ICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKICAgICAg
ICAgU2ltcGxlRm9udERhdGEqIHRlbXBvcmFyeUZvbnQgPSBmb250Q2FjaGUoKS0+Z2V0Tm9uUmV0
YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIGZv
bnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKHRlbXBvcmFyeUZvbnQtPnBsYXRm
b3JtRGF0YSgpLCB0cnVlLCB0cnVlKSk7CisgICAgICAgIGZvbnREYXRhID0gU2ltcGxlRm9udERh
dGE6OmNyZWF0ZSh0ZW1wb3JhcnlGb250LT5wbGF0Zm9ybURhdGEoKSwgdHJ1ZSwgdHJ1ZSk7CiAg
ICAgfQogCi0gICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZvbnRTZWxlY3Rvci0+ZG9jdW1l
bnQoKSkgewotICAgICAgICBjYWNoZWREYXRhID0gZm9udERhdGEuZ2V0KCk7Ci0gICAgICAgIGRv
Y3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQoZm9udERhdGEucmVsZWFzZSgpKTsKLSAgICB9Cisg
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZvbnRTZWxlY3Rvci0+ZG9jdW1lbnQoKSkKKyAg
ICAgICAgZG9jdW1lbnQtPnJlZ2lzdGVyQ3VzdG9tRm9udChmb250RGF0YSk7CisgICAgZWxzZQor
ICAgICAgICBmb250RGF0YSA9IDA7CiAKLSAgICByZXR1cm4gY2FjaGVkRGF0YTsKKyAgICByZXR1
cm4gZm9udERhdGE7CiB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHJldmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmb250TG9hZGVkKENhY2hlZEZvbnQq
KTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBDU1NGb250U2Vs
ZWN0b3IqKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljLCBDU1NGb250U2VsZWN0b3IqKTsKIAogICAgIHZvaWQgcHJ1bmVUYWJsZSgpOwogCkBAIC03
Niw3ICs3Niw3IEBAIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1fc3RyaW5nOyAvLyBVUkkg
Zm9yIHJlbW90ZSwgYnVpbHQtaW4gZm9udCBuYW1lIGZvciBsb2NhbC4KICAgICBDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRGb250PiBtX2ZvbnQ7IC8vIEZvciByZW1vdGUgZm9udHMsIGEgcG9p
bnRlciB0byBvdXIgY2FjaGVkIHJlc291cmNlLgogICAgIENTU0ZvbnRGYWNlKiBtX2ZhY2U7IC8v
IE91ciBvd25pbmcgZm9udCBmYWNlLgotICAgIEhhc2hNYXA8dW5zaWduZWQsIFNpbXBsZUZvbnRE
YXRhKj4gbV9mb250RGF0YVRhYmxlOyAvLyBUaGUgaGFzaCBrZXkgaXMgY29tcG9zZWQgb2Ygc2l6
ZSBzeW50aGV0aWMgc3R5bGVzLgorICAgIEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gPiBtX2ZvbnREYXRhVGFibGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBv
ZiBzaXplIHN5bnRoZXRpYyBzdHlsZXMuCiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIFJl
ZlB0cjxTVkdGb250RmFjZUVsZW1lbnQ+IG1fc3ZnRm9udEZhY2VFbGVtZW50OwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDEyODM3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTAsNyArMzUwLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRDYWNoZUludmFsaWRhdAog
ICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7CiB9CiAKLXN0YXRpYyBGb250RGF0
YSogZm9udERhdGFGb3JHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
TmFtZSkKK3N0YXRpYyBQYXNzUmVmUHRyPEZvbnREYXRhPiBmb250RGF0YUZvckdlbmVyaWNGYW1p
bHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQ2NSw3ICs0
NjUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUZvbnRGYWNlcyhDU1NGCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1Gb250RGF0YSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5n
JiBmYW1pbHlOYW1lKQorUGFzc1JlZlB0cjxGb250RGF0YT4gQ1NTRm9udFNlbGVjdG9yOjpnZXRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIGlmIChtX2ZvbnRGYWNlcy5pc0VtcHR5KCkp
IHsKICAgICAgICAgaWYgKGZhbWlseU5hbWUuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHJldmlzaW9uIDEyODM3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB1bnNpZ25lZCB2ZXJzaW9uKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJzaW9uOyB9CiAKLSAgICB2aXJ0dWFsIEZvbnRE
YXRhKiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Rm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogCiAgICAgdm9pZCBjbGVhckRvY3VtZW50KCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMTI4Mzc0KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEsOCArODEsOSBAQCB2b2lkIENTU1NlZ21lbnRlZEZvbnRGYWNlOjphcHBlbmRG
b250RmFjCiAgICAgbV9mb250RmFjZXMuYXBwZW5kKGZvbnRGYWNlKTsKIH0KIAotc3RhdGljIHZv
aWQgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhTZWdtZW50
ZWRGb250RGF0YSogbmV3Rm9udERhdGEsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmYWNlRm9udERh
dGEsIGNvbnN0IFZlY3RvcjxDU1NGb250RmFjZTo6VW5pY29kZVJhbmdlPiYgcmFuZ2VzKQorc3Rh
dGljIHZvaWQgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhT
ZWdtZW50ZWRGb250RGF0YSogbmV3Rm9udERhdGEsIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHBycEZhY2VGb250RGF0YSwgY29uc3QgVmVjdG9yPENTU0ZvbnRGYWNlOjpVbmljb2RlUmFuZ2U+
JiByYW5nZXMpCiB7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmYWNlRm9udERhdGEgPSBw
cnBGYWNlRm9udERhdGE7CiAgICAgaWYgKGZhY2VGb250RGF0YS0+aXNMb2FkaW5nKCkpIHsKICAg
ICAgICAgbmV3Rm9udERhdGEtPmFwcGVuZFJhbmdlKEZvbnREYXRhUmFuZ2UoMCwgMCwgZmFjZUZv
bnREYXRhKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTk4LDcgKzk5LDcgQEAgc3RhdGljIHZvaWQg
YXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaQogICAgICAgICBuZXdGb250RGF0YS0+YXBwZW5k
UmFuZ2UoRm9udERhdGFSYW5nZShyYW5nZXNbal0uZnJvbSgpLCByYW5nZXNbal0udG8oKSwgZmFj
ZUZvbnREYXRhKSk7CiB9CiAKLUZvbnREYXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCitQYXNzUmVmUHRy
PEZvbnREYXRhPiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMTA2LDExICsxMDcsMTEgQEAgRm9udERhdGEqIENTU1NlZ21lbnRl
ZEZvbnRGYWNlOjpnZXRGb250RAogICAgIEZvbnRUcmFpdHNNYXNrIGRlc2lyZWRUcmFpdHNNYXNr
ID0gZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsKICAgICB1bnNpZ25lZCBoYXNoS2V5ID0g
KChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IChGb250VHJhaXRz
TWFza1dpZHRoICsgMSkpIHwgKChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbCA/IDEgOiAwKSA8PCBGb250VHJhaXRzTWFza1dpZHRoKSB8IGRlc2lyZWRUcmFpdHNNYXNr
OwogCi0gICAgU2VnbWVudGVkRm9udERhdGEqJiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5h
ZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8U2VnbWVudGVkRm9u
dERhdGE+JiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0
b3ItPnNlY29uZDsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIHJldHVybiBmb250RGF0YTsK
IAotICAgIE93blB0cjxTZWdtZW50ZWRGb250RGF0YT4gbmV3Rm9udERhdGEgPSBhZG9wdFB0cihu
ZXcgU2VnbWVudGVkRm9udERhdGEpOworICAgIGZvbnREYXRhID0gU2VnbWVudGVkRm9udERhdGE6
OmNyZWF0ZSgpOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZm9udEZhY2VzLnNpemUoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CkBAIC0xMTksMTkgKzEyMCwx
OSBAQCBGb250RGF0YSogQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnRECiAgICAgICAgIEZv
bnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBtX2ZvbnRGYWNlc1tpXS0+dHJhaXRzTWFzaygpOwog
ICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQgPSAhKHRyYWl0c01hc2sgJiAoRm9udFdlaWdodDYw
ME1hc2sgfCBGb250V2VpZ2h0NzAwTWFzayB8IEZvbnRXZWlnaHQ4MDBNYXNrIHwgRm9udFdlaWdo
dDkwME1hc2spKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiAoRm9udFdlaWdodDYwME1hc2sgfCBG
b250V2VpZ2h0NzAwTWFzayB8IEZvbnRXZWlnaHQ4MDBNYXNrIHwgRm9udFdlaWdodDkwME1hc2sp
KTsKICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0c01hc2sgJiBGb250U3R5
bGVJdGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNr
KTsKLSAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmYWNlRm9udERhdGEgPSBtX2Zv
bnRGYWNlc1tpXS0+Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNJdGFsaWMpKSB7CisgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZh
Y2VGb250RGF0YSA9IG1fZm9udEZhY2VzW2ldLT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24s
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpIHsKICAgICAgICAgICAgIEFTU0VSVCgh
ZmFjZUZvbnREYXRhLT5pc1NlZ21lbnRlZCgpKTsKLSAgICAgICAgICAgIGFwcGVuZEZvbnREYXRh
V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcobmV3Rm9udERhdGEuZ2V0KCksIGZhY2VG
b250RGF0YSwgbV9mb250RmFjZXNbaV0tPnJhbmdlcygpKTsKKyAgICAgICAgICAgIGFwcGVuZEZv
bnREYXRhV2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoZm9udERhdGEuZ2V0KCksIGZh
Y2VGb250RGF0YS5yZWxlYXNlKCksIG1fZm9udEZhY2VzW2ldLT5yYW5nZXMoKSk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgaWYgKG5ld0ZvbnREYXRhLT5udW1SYW5nZXMoKSkgeworICAgIGlmIChm
b250RGF0YS0+bnVtUmFuZ2VzKCkpIHsKICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9
IG1fZm9udFNlbGVjdG9yLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBmb250RGF0YSA9IG5l
d0ZvbnREYXRhLmdldCgpOwotICAgICAgICAgICAgZG9jdW1lbnQtPnJlZ2lzdGVyQ3VzdG9tRm9u
dChuZXdGb250RGF0YS5yZWxlYXNlKCkpOworICAgICAgICAgICAgZG9jdW1lbnQtPnJlZ2lzdGVy
Q3VzdG9tRm9udChmb250RGF0YSk7CisgICAgICAgICAgICByZXR1cm4gZm9udERhdGE7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gZm9udERhdGE7CisgICAgcmV0dXJuIDA7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCShyZXZp
c2lvbiAxMjgzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFw
cGVuZEZvbnRGYWNlKFBhc3NSZWZQdHI8Q1NTRm9udEZhY2U+KTsKIAotICAgIEZvbnREYXRhKiBn
ZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBQYXNzUmVmUHRyPEZvbnRE
YXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKTsKIAogcHJpdmF0ZToKICAg
ICBDU1NTZWdtZW50ZWRGb250RmFjZShDU1NGb250U2VsZWN0b3IqKTsKQEAgLTYwLDcgKzYwLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKIAogICAgIENTU0ZvbnRTZWxl
Y3RvciogbV9mb250U2VsZWN0b3I7Ci0gICAgSGFzaE1hcDx1bnNpZ25lZCwgU2VnbWVudGVkRm9u
dERhdGEqPiBtX2ZvbnREYXRhVGFibGU7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPFNl
Z21lbnRlZEZvbnREYXRhPiA+IG1fZm9udERhdGFUYWJsZTsKICAgICBWZWN0b3I8UmVmUHRyPENT
U0ZvbnRGYWNlPiwgMT4gbV9mb250RmFjZXM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NzgsNyArMTk3OCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IERvY3VtZW50OjpzdHlsZUYKICAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQog
Ci12b2lkIERvY3VtZW50OjpyZWdpc3RlckN1c3RvbUZvbnQoUGFzc093blB0cjxGb250RGF0YT4g
Zm9udERhdGEpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckN1c3RvbUZvbnQoUGFzc1JlZlB0cjxG
b250RGF0YT4gZm9udERhdGEpCiB7CiAgICAgbV9jdXN0b21Gb250cy5hcHBlbmQoZm9udERhdGEp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEyODM3NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjksNyArNTY5LDcg
QEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudEln
bm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQqKTsKICAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVy
Q3VzdG9tRm9udChQYXNzT3duUHRyPEZvbnREYXRhPik7CisgICAgdm9pZCByZWdpc3RlckN1c3Rv
bUZvbnQoUGFzc1JlZlB0cjxGb250RGF0YT4pOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHBh
Z2UgYm94IChtYXJnaW4gYm94ZXMgYW5kIHBhZ2UgYm9yZGVycykgaXMgdmlzaWJsZS4KICAgICBi
b29sIGlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCk7CkBAIC0xMjgzLDcgKzEyODMsNyBA
QCBwcml2YXRlOgogICAgIE93blB0cjxTdHlsZVJlc29sdmVyPiBtX3N0eWxlUmVzb2x2ZXI7CiAg
ICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlUmVzb2x2ZXI7CiAgICAgYm9vbCBtX2hhc0RpcnR5
U3R5bGVSZXNvbHZlcjsKLSAgICBWZWN0b3I8T3duUHRyPEZvbnREYXRhPiA+IG1fY3VzdG9tRm9u
dHM7CisgICAgVmVjdG9yPFJlZlB0cjxGb250RGF0YT4gPiBtX2N1c3RvbUZvbnRzOwogCiAgICAg
RnJhbWUqIG1fZnJhbWU7CiAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV9kb21XaW5kb3c7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJl
dmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw3ICsyODYsNyBAQCBzdHJ1Y3QgRm9udERh
dGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuCiAgICAgfQogfTsKIAotdHlwZWRlZiBIYXNoTWFw
PEZvbnRQbGF0Zm9ybURhdGEsIHBhaXI8U2ltcGxlRm9udERhdGEqLCB1bnNpZ25lZD4sIEZvbnRE
YXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwor
dHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHBhaXI8UmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiwgdW5zaWduZWQ+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRy
YWl0cz4gRm9udERhdGFDYWNoZTsKIAogc3RhdGljIEZvbnREYXRhQ2FjaGUqIGdGb250RGF0YUNh
Y2hlID0gMDsKIApAQCAtMjk3LDkgKzI5Nyw5IEBAIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVG
b250RGF0YSA9IDIwMDsKIGNvbnN0IGludCBjTWF4SW5hY3RpdmVGb250RGF0YSA9IDUwOyAvLyBQ
cmV0dHkgTG93IFRocmVzaG9sZAogY29uc3QgaW50IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0g
MzA7CiAjZW5kaWYKLXN0YXRpYyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBn
SW5hY3RpdmVGb250RGF0YSA9IDA7CitzdGF0aWMgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZv
bnREYXRhPiA+KiBnSW5hY3RpdmVGb250RGF0YSA9IDA7CiAKLVNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2lu
Z0FsdGVybmF0ZU5hbWUsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgRm9udFBs
YXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24sIGZhbWlseSwgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKTsKICAgICBpZiAoIXBs
YXRmb3JtRGF0YSkKQEAgLTMwOCw3ICszMDgsNyBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRDYWNoZWRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKHBsYXRmb3JtRGF0
YSwgc2hvdWxkUmV0YWluKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2Fj
aGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCBTaG91bGRS
ZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEs
IFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMzIwLDE2ICszMjAsMTYgQEAgU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0Q2FjaGVkRm9udAogCiAgICAgaWYgKCFnRm9udERhdGFDYWNoZSkgewogICAg
ICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAgICAgICBnSW5hY3Rp
dmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OworICAg
ICAgICBnSW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9u
dERhdGE+ID47CiAgICAgfQogCiAgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0g
Z0ZvbnREYXRhQ2FjaGUtPmZpbmQoKnBsYXRmb3JtRGF0YSk7CiAgICAgaWYgKHJlc3VsdCA9PSBn
Rm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKLSAgICAgICAgcGFpcjxTaW1wbGVGb250RGF0YSosIHVu
c2lnbmVkPiBuZXdWYWx1ZShuZXcgU2ltcGxlRm9udERhdGEoKnBsYXRmb3JtRGF0YSksIHNob3Vs
ZFJldGFpbiA9PSBSZXRhaW4gPyAxIDogMCk7CisgICAgICAgIHBhaXI8UmVmUHRyPFNpbXBsZUZv
bnREYXRhPiwgdW5zaWduZWQ+IG5ld1ZhbHVlKFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnBsYXRm
b3JtRGF0YSksIHNob3VsZFJldGFpbiA9PSBSZXRhaW4gPyAxIDogMCk7CiAgICAgICAgIGdGb250
RGF0YUNhY2hlLT5zZXQoKnBsYXRmb3JtRGF0YSwgbmV3VmFsdWUpOwogICAgICAgICBpZiAoc2hv
dWxkUmV0YWluID09IERvTm90UmV0YWluKQogICAgICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEt
PmFkZChuZXdWYWx1ZS5maXJzdCk7Ci0gICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdDsKKyAg
ICAgICAgcmV0dXJuIG5ld1ZhbHVlLmZpcnN0LnJlbGVhc2UoKTsKICAgICB9CiAKICAgICBpZiAo
IXJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkgewpAQCAtMzUwLDcgKzM1MCw3IEBAIFNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnQKIAogU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHJldHVybiBnZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbiwgRG9Ob3RSZXRhaW4pOworICAgIHJldHVybiBn
ZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbiwgRG9Ob3RSZXRhaW4pLmxl
YWtSZWYoKTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udERhdGEpCkBAIC0zNjMsNyArMzYzLDcgQEAgdm9pZCBGb250Q2FjaGU6
OnJlbGVhc2VGb250RGF0YShjb25zdCBTaQogCiAgICAgQVNTRVJUKGl0LT5zZWNvbmQuc2Vjb25k
KTsKICAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCi0gICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhLT5hZGQoZm9udERhdGEpOworICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKGl0LT5z
ZWNvbmQuZmlyc3QpOwogfQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
SWZOZWVkZWQoKQpAQCAtMzgzLDExICszODMsMTEgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YShpbgogCiAgICAgaXNQdXJnaW5nID0gdHJ1ZTsKIAotICAgIFZlY3Rvcjxj
b25zdCBTaW1wbGVGb250RGF0YSosIDIwPiBmb250RGF0YVRvRGVsZXRlOwotICAgIExpc3RIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46Oml0ZXJhdG9yIGVuZCA9IGdJbmFjdGl2ZUZvbnRE
YXRhLT5lbmQoKTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVy
YXRvciBpdCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigpOworICAgIFZlY3RvcjxSZWZQdHI8
U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udERhdGFUb0RlbGV0ZTsKKyAgICBMaXN0SGFzaFNldDxS
ZWZQdHI8U2ltcGxlRm9udERhdGE+ID46Oml0ZXJhdG9yIGVuZCA9IGdJbmFjdGl2ZUZvbnREYXRh
LT5lbmQoKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+ID46Oml0ZXJh
dG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudCAmJiBpdCAhPSBlbmQ7ICsraXQsICsraSkgewotICAgICAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udERhdGEgPSAqaXQuZ2V0KCk7CisgICAgICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gZm9udERhdGEgPSAqaXQuZ2V0KCk7CiAgICAgICAgIGdGb250RGF0YUNhY2hlLT5y
ZW1vdmUoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5v
dCBkZWxldGUgU2ltcGxlRm9udERhdGEgaGVyZSBiZWNhdXNlIGRlbGV0aW9uIGNhbiBtb2RpZnkg
Z0luYWN0aXZlRm9udERhdGEuIFNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC80
NDAxMQogICAgICAgICBmb250RGF0YVRvRGVsZXRlLmFwcGVuZChmb250RGF0YSk7CkBAIC00MDEs
OSArNDAxLDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAg
ICAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPnJlbW92ZShnSW5hY3RpdmVGb250RGF0YS0+YmVn
aW4oKSk7CiAgICAgfQogCi0gICAgc2l6ZV90IGZvbnREYXRhVG9EZWxldGVDb3VudCA9IGZvbnRE
YXRhVG9EZWxldGUuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9udERhdGFU
b0RlbGV0ZUNvdW50OyArK2kpCi0gICAgICAgIGRlbGV0ZSBmb250RGF0YVRvRGVsZXRlW2ldOwor
ICAgIGZvbnREYXRhVG9EZWxldGUuY2xlYXIoKTsKIAogICAgIGlmIChnRm9udFBsYXRmb3JtRGF0
YUNhY2hlKSB7CiAgICAgICAgIFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNU
b1JlbW92ZTsKQEAgLTQ2Miw5ICs0NjAsOSBAQCBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZv
bnREYXRhQ291bnQoCiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IEZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldEZvbnREYXRhKGNvbnN0IEZvbnQmIGZvbnQsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKQorUGFzc1JlZlB0cjxGb250RGF0YT4gRm9udENhY2hlOjpn
ZXRGb250RGF0YShjb25zdCBGb250JiBmb250LCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0
b3IqIGZvbnRTZWxlY3RvcikKIHsKLSAgICBGb250RGF0YSogcmVzdWx0ID0gMDsKKyAgICBSZWZQ
dHI8Rm9udERhdGE+IHJlc3VsdDsKIAogICAgIGludCBzdGFydEluZGV4ID0gZmFtaWx5SW5kZXg7
CiAgICAgY29uc3QgRm9udEZhbWlseSogc3RhcnRGYW1pbHkgPSAmZm9udC5mb250RGVzY3JpcHRp
b24oKS5mYW1pbHkoKTsKQEAgLTQ5OCwxNCArNDk2LDE0IEBAIGNvbnN0IEZvbnREYXRhKiBGb250
Q2FjaGU6OmdldEZvbnREYXRhKGMKIAogICAgICAgICBpZiAoZm9udFNlbGVjdG9yKSB7CiAgICAg
ICAgICAgICAvLyBUcnkgdGhlIHVzZXIncyBwcmVmZXJyZWQgc3RhbmRhcmQgZm9udC4KLSAgICAg
ICAgICAgIGlmIChGb250RGF0YSogZGF0YSA9IGZvbnRTZWxlY3Rvci0+Z2V0Rm9udERhdGEoZm9u
dC5mb250RGVzY3JpcHRpb24oKSwgc3RhbmRhcmRGYW1pbHkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBkYXRhOworICAgICAgICAgICAgaWYgKFJlZlB0cjxGb250RGF0YT4gZGF0YSA9IGZvbnRT
ZWxlY3Rvci0+Z2V0Rm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgc3RhbmRhcmRGYW1p
bHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIFN0aWxsIG5vIHJlc3VsdC4gIEhhbmQgYmFjayBvdXIgbGFzdCByZXNvcnQg
ZmFsbGJhY2sgZm9udC4KICAgICAgICAgcmVzdWx0ID0gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dChmb250LmZvbnREZXNjcmlwdGlvbigpKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVj
dG9yKj4qIGdDbGllbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBA
CiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKQEAgLTYw
LDExICs2MiwxMSBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFNob3VsZFJldGFpbiB7IFJldGFpbiwg
RG9Ob3RSZXRhaW4gfTsKIAotICAgIGNvbnN0IEZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBG
b250JiwgaW50JiBmYW1pbHlJbmRleCwgRm9udFNlbGVjdG9yKik7CisgICAgUGFzc1JlZlB0cjxG
b250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udCYsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRT
ZWxlY3RvciopOwogICAgIHZvaWQgcmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRh
Kik7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0u
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25z
dCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOworICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOwogCiAgICAgLy8gQWxzbyBp
bXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCiAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKQEAg
LTg0LDggKzg2LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBnZXRUcmFpdHNJbkZhbWlseShjb25z
dCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+Jik7CiAKLSAgICBTaW1wbGVGb250RGF0
YSogZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSwgU2hvdWxkUmV0YWlu
ID0gUmV0YWluKTsKLSAgICBTaW1wbGVGb250RGF0YSogZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOworICAgIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
ID0gZmFsc2UsIFNob3VsZFJldGFpbiA9IFJldGFpbik7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
LCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOwogICAgIFNpbXBsZUZvbnREYXRhKiBnZXROb25SZXRh
aW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAg
ICB2b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKQEAgLTk5LDkgKzEwMSw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQgPSBJTlRfTUFYKTsK
IAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGFGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwg
Y29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7Cisg
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRM
b2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9O
VCYsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOwogI2VsaWYgUExBVEZPUk0oQ0hS
T01JVU0pICYmIE9TKFdJTkRPV1MpCi0gICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRnJvbURl
c2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4s
IGNvbnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiwg
d2NoYXJfdCogb3V0Rm9udEZhbWlseU5hbWUpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCkBAIC0xMzEsMTAgKzEzMywxMCBAQCBwcml2YXRlOgogICAgIEZvbnRQbGF0
Zm9ybURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
ID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFj
aCBwbGF0Zm9ybS4KLSAgICBTaW1wbGVGb250RGF0YSogZ2V0U2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udCYpOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmKTsKICAgICBGb250UGxhdGZvcm1EYXRhKiBj
cmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5KTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRDYWNoZWRGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhKiwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKKyAgICBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhKiwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKIAogICAgIC8vIERvbid0IHB1cmdl
IGlmIHRoaXMgY291bnQgaXMgPiAwOwogICAgIGludCBtX3B1cmdlUHJldmVudENvdW50OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCShyZXZpc2lv
biAxMjgzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTUgQEAKICNpbmNsdWRlIDx3dGYvRmFzdEFs
bG9jQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBTaW1wbGVGb250RGF0YTsKIAotY2xhc3MgRm9udERhdGEgewor
Y2xhc3MgRm9udERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250RGF0YT4gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEZvbnREYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgRm9udERhdGEoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhbGxiYWNrTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHAJKHJldmlzaW9uIDEyODM3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgRm9udEZhbGxiYWNrTGlzdDo6cmVs
ZWFzZUZvbnREYXRhKCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRm9udHM7ICsr
aSkgewogICAgICAgICBpZiAoIW1fZm9udExpc3RbaV0uc2Vjb25kKSB7CiAgICAgICAgICAgICBB
U1NFUlQoIW1fZm9udExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVkKCkpOwotICAgICAgICAgICAg
Zm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KG1fZm9udExpc3RbaV0uZmlyc3QpKTsKKyAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5y
ZWxlYXNlRm9udERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2ZvbnRM
aXN0W2ldLmZpcnN0LmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgRm9udEZhbGxiYWNrTGlzdDo6ZGV0ZXJtaW5lUGl0Y2goY28KIGNvbnN0IEZvbnRE
YXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KGNvbnN0IEZvbnQqIGZvbnQsIHVuc2ln
bmVkIHJlYWxpemVkRm9udEluZGV4KSBjb25zdAogewogICAgIGlmIChyZWFsaXplZEZvbnRJbmRl
eCA8IG1fZm9udExpc3Quc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9mb250TGlzdFtyZWFsaXpl
ZEZvbnRJbmRleF0uZmlyc3Q7IC8vIFRoaXMgZmFsbGJhY2sgZm9udCBpcyBhbHJlYWR5IGluIG91
ciBsaXN0LgorICAgICAgICByZXR1cm4gbV9mb250TGlzdFtyZWFsaXplZEZvbnRJbmRleF0uZmly
c3QuZ2V0KCk7IC8vIFRoaXMgZmFsbGJhY2sgZm9udCBpcyBhbHJlYWR5IGluIG91ciBsaXN0Lgog
CiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBwYXNzaW5nIGluIHNvbWUgY3JhenkgdmFsdWUg
aGVyZS4KICAgICBBU1NFUlQocmVhbGl6ZWRGb250SW5kZXggPT0gbV9mb250TGlzdC5zaXplKCkp
OwpAQCAtMTA0LDIxICsxMDQsMjEgQEAgY29uc3QgRm9udERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6
OmZvbnREYQogICAgIC8vIGluIHxtX2ZhbWlseUluZGV4fCwgc28gdGhhdCB3ZSBuZXZlciBzY2Fu
IHRoZSBzYW1lIHNwb3QgaW4gdGhlIGxpc3QgdHdpY2UuICBnZXRGb250RGF0YSB3aWxsIGFkanVz
dCBvdXIKICAgICAvLyB8bV9mYW1pbHlJbmRleHwgYXMgaXQgc2NhbnMgZm9yIHRoZSByaWdodCBm
b250IHRvIG1ha2UuCiAgICAgQVNTRVJUKGZvbnRDYWNoZSgpLT5nZW5lcmF0aW9uKCkgPT0gbV9n
ZW5lcmF0aW9uKTsKLSAgICBjb25zdCBGb250RGF0YSogcmVzdWx0ID0gZm9udENhY2hlKCktPmdl
dEZvbnREYXRhKCpmb250LCBtX2ZhbWlseUluZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7Cisg
ICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQgPSBmb250Q2FjaGUoKS0+Z2V0Rm9udERhdGEoKmZv
bnQsIG1fZmFtaWx5SW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKICAgICBpZiAocmVzdWx0
KSB7Ci0gICAgICAgIG1fZm9udExpc3QuYXBwZW5kKHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29s
PihyZXN1bHQsIHJlc3VsdC0+aXNDdXN0b21Gb250KCkpKTsKKyAgICAgICAgbV9mb250TGlzdC5h
cHBlbmQocGFpcjxSZWZQdHI8Rm9udERhdGE+LCBib29sPihyZXN1bHQsIHJlc3VsdC0+aXNDdXN0
b21Gb250KCkpKTsKICAgICAgICAgaWYgKHJlc3VsdC0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAg
ICBtX2xvYWRpbmdDdXN0b21Gb250cyA9IHRydWU7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKIH0KIAogdm9pZCBGb250RmFsbGJhY2tMaXN0Ojpz
ZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewog
ICAgIG1fZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxpZXNTY2FubmVkOwogICAgIEFTU0VSVChmb250
Q2FjaGUoKS0+Z2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7Ci0gICAgY29uc3QgRm9udERh
dGEqIGZvbnREYXRhID0gZm9udENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZwbGF0Zm9ybURh
dGEpOwotICAgIG1fZm9udExpc3QuYXBwZW5kKHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPihm
b250RGF0YSwgZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKSk7CisgICAgUmVmUHRyPEZvbnREYXRh
PiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmcGxhdGZvcm1EYXRh
KTsKKyAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPFJlZlB0cjxGb250RGF0YT4sIGJvb2w+KGZv
bnREYXRhLCBmb250RGF0YS0+aXNDdXN0b21Gb250KCkpKTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaAko
cmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhbGxiYWNrTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHJlbGVhc2VGb250RGF0YSgpOwogCi0gICAgbXV0YWJsZSBWZWN0b3I8cGFp
cjxjb25zdCBGb250RGF0YSosIGJvb2w+LCAxPiBtX2ZvbnRMaXN0OworICAgIG11dGFibGUgVmVj
dG9yPHBhaXI8UmVmUHRyPEZvbnREYXRhPiwgYm9vbD4sIDE+IG1fZm9udExpc3Q7CiAgICAgbXV0
YWJsZSBHbHlwaFBhZ2VzIG1fcGFnZXM7CiAgICAgbXV0YWJsZSBHbHlwaFBhZ2VUcmVlTm9kZSog
bV9wYWdlWmVybzsKICAgICBtdXRhYmxlIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2NhY2hlZFBy
aW1hcnlTaW1wbGVGb250RGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYXN0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkocmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsOCArOTcsOCBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250
OjpnCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9mb250RGVzY3JpcHRpb24udGV4dE9y
aWVudGF0aW9uKCkgPT0gVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2ZXJ0aWNhbFJpZ2h0Rm9u
dERhdGEgPSBkYXRhLmZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiB2ZXJ0aWNh
bFJpZ2h0Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodmVydGljYWxSaWdo
dEZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRGb250RGF0YSA9IGRhdGEuZm9udERhdGEt
PnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHZlcnRpY2FsUmlnaHROb2RlID0gR2x5cGhQYWdl
VHJlZU5vZGU6OmdldFJvb3RDaGlsZCh2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEuZ2V0KCksIHBhZ2VO
dW1iZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZSogdmVydGljYWxS
aWdodFBhZ2UgPSB2ZXJ0aWNhbFJpZ2h0Tm9kZS0+cGFnZSgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0UGFnZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHbHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSB2ZXJ0aWNhbFJpZ2h0UGFn
ZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwpAQCAtMTExLDggKzExMSw4IEBAIHN0ZDo6cGFp
cjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IEZvbnQ6OmcKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlX3BhaXIodmVydGljYWxSaWdodERhdGEsIHZlcnRpY2Fs
UmlnaHRQYWdlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fZm9udERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigp
ID09IFRleHRPcmllbnRhdGlvblVwcmlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSogdXByaWdodEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHbHlwaFBhZ2VUcmVlTm9kZSogdXByaWdodE5vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0
Um9vdENoaWxkKHVwcmlnaHRGb250RGF0YSwgcGFnZU51bWJlcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0Rm9udERhdGEgPSBkYXRh
LmZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiB1cHJpZ2h0Tm9kZSA9IEdseXBoUGFnZVRy
ZWVOb2RlOjpnZXRSb290Q2hpbGQodXByaWdodEZvbnREYXRhLmdldCgpLCBwYWdlTnVtYmVyKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaFBhZ2UqIHVwcmlnaHRQYWdlID0gdXBy
aWdodE5vZGUtPnBhZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXByaWdo
dFBhZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhEYXRhIHVwcmln
aHREYXRhID0gdXByaWdodFBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKQEAgLTE1Miwx
MSArMTUyLDExIEBAIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IEZvbnQ6OmcKICAg
ICAgICAgICAgICAgICBpZiAoZGF0YS5mb250RGF0YSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgdmFyaWFudEZvbnREYXRhIGZ1bmN0aW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgcmV0dXJu
IDAuCiAgICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBpdCBkb2VzLCB3ZSB3aWxsIGp1c3Qg
cmVuZGVyIHRoZSBjYXBpdGFsIGxldHRlciBiaWcuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT52YXJpYW50
Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpOworICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZhcmlhbnRGb250RGF0YSA9IGRhdGEuZm9udERhdGEt
PnZhcmlhbnRGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghdmFyaWFudEZvbnREYXRhKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VfcGFpcihkYXRhLCBwYWdlKTsKIAotICAgICAgICAgICAgICAgICAgICBHbHlw
aFBhZ2VUcmVlTm9kZSogdmFyaWFudE5vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENo
aWxkKHZhcmlhbnRGb250RGF0YSwgcGFnZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIEds
eXBoUGFnZVRyZWVOb2RlKiB2YXJpYW50Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290
Q2hpbGQodmFyaWFudEZvbnREYXRhLmdldCgpLCBwYWdlTnVtYmVyKTsKICAgICAgICAgICAgICAg
ICAgICAgR2x5cGhQYWdlKiB2YXJpYW50UGFnZSA9IHZhcmlhbnROb2RlLT5wYWdlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYW50UGFnZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgR2x5cGhEYXRhIGRhdGEgPSB2YXJpYW50UGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMp
OwpAQCAtMTk4LDcgKzE5OCw3IEBAIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IEZv
bnQ6OmcKICAgICAgICAgY29kZVVuaXRzWzFdID0gVTE2X1RSQUlMKGMpOwogICAgICAgICBjb2Rl
VW5pdHNMZW5ndGggPSAyOwogICAgIH0KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogY2hhcmFj
dGVyRm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKCp0aGlz
LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCk7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBjaGFyYWN0ZXJGb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRGb250RGF0YUZvckNoYXJhY3Rl
cnMoKnRoaXMsIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKTsKICAgICBpZiAoY2hhcmFjdGVy
Rm9udERhdGEpIHsKICAgICAgICAgaWYgKGNoYXJhY3RlckZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFjaGFyYWN0ZXJGb250RGF0YS0+aGFzVmVy
dGljYWxHbHlwaHMoKSAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICAgICAg
dmFyaWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7CkBAIC0yMDcsNyArMjA3LDcgQEAgc3Rk
OjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udDo6ZwogICAgIH0KICAgICBpZiAoY2hh
cmFjdGVyRm9udERhdGEpIHsKICAgICAgICAgLy8gR290IHRoZSBmYWxsYmFjayBnbHlwaCBhbmQg
Zm9udC4KLSAgICAgICAgR2x5cGhQYWdlKiBmYWxsYmFja1BhZ2UgPSBHbHlwaFBhZ2VUcmVlTm9k
ZTo6Z2V0Um9vdENoaWxkKGNoYXJhY3RlckZvbnREYXRhLCBwYWdlTnVtYmVyKS0+cGFnZSgpOwor
ICAgICAgICBHbHlwaFBhZ2UqIGZhbGxiYWNrUGFnZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRS
b290Q2hpbGQoY2hhcmFjdGVyRm9udERhdGEuZ2V0KCksIHBhZ2VOdW1iZXIpLT5wYWdlKCk7CiAg
ICAgICAgIEdseXBoRGF0YSBkYXRhID0gZmFsbGJhY2tQYWdlICYmIGZhbGxiYWNrUGFnZS0+Zm9u
dERhdGFGb3JDaGFyYWN0ZXIoYykgPyBmYWxsYmFja1BhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjKSA6IGNoYXJhY3RlckZvbnREYXRhLT5taXNzaW5nR2x5cGhEYXRhKCk7CiAgICAgICAgIC8v
IENhY2hlIGl0IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gc3lzdGVtIGZhbGxiYWNrIGFnYWluIG5l
eHQgdGltZS4KICAgICAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJKHJl
dmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRT
ZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEZvbnRT
ZWxlY3Rvcl9oCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzgsNyArMzksNyBAQCBjbGFzcyBGb250U2VsZWN0b3JDbGllbnQ7CiBjbGFzcyBG
b250U2VsZWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5Gb250U2VsZWN0b3IoKSB7IH0KLSAgICB2aXJ0dWFsIEZvbnREYXRhKiBn
ZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFt
ZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFsaWRhdGVkKCkgeyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFBhZ2VUcmVlTm9kZS5jcHAJKHJldmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQyLDcgKzI0Miw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGMK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgemVyb0ZpbGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBoYXZlR2x5cGhzIHw9IGZpbGwocGFnZVRvRmlsbCwgZnJvbSwgdG8g
LSBmcm9tLCBidWZmZXIgKyBmcm9tICogKHN0YXJ0IDwgMHgxMDAwMCA/IDEgOiAyKSwgKHRvIC0g
ZnJvbSkgKiAoc3RhcnQgPCAweDEwMDAwID8gMSA6IDIpLCByYW5nZS5mb250RGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgfD0gZmlsbChwYWdlVG9GaWxsLCBmcm9t
LCB0byAtIGZyb20sIGJ1ZmZlciArIGZyb20gKiAoc3RhcnQgPCAweDEwMDAwID8gMSA6IDIpLCAo
dG8gLSBmcm9tKSAqIChzdGFydCA8IDB4MTAwMDAgPyAxIDogMiksIHJhbmdlLmZvbnREYXRhKCku
Z2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmF0Y2hQYWdlKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRvIDw9ICBzdGF0aWNfY2FzdDxpbnQ+KEds
eXBoUGFnZTo6c2l6ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGog
PSBmcm9tOyBqIDwgdG87IGorKykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcAkocmV2aXNpb24gMTI4Mzc0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw5IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBTZWdtZW50ZWRGb250RGF0YToKICAgICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFu
Z2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBpZiAoaXQtPmZyb20oKSA8PSBjICYmIGl0LT50bygpID49IGMpCi0gICAg
ICAgICAgICByZXR1cm4gaXQtPmZvbnREYXRhKCk7CisgICAgICAgICAgICByZXR1cm4gaXQtPmZv
bnREYXRhKCkuZ2V0KCk7CiAgICAgfQotICAgIHJldHVybiBtX3Jhbmdlc1swXS5mb250RGF0YSgp
OworICAgIHJldHVybiBtX3Jhbmdlc1swXS5mb250RGF0YSgpLmdldCgpOwogfQogCiBib29sIFNl
Z21lbnRlZEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZv
bnREYXRhLmgJKHJldmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIHN0cnVjdCBG
b250RGF0YVJhbmdlIHsKLSAgICBGb250RGF0YVJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0
bywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQorICAgIEZvbnREYXRhUmFuZ2UoVUNo
YXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0
YSkKICAgICAgICAgOiBtX2Zyb20oZnJvbSkKICAgICAgICAgLCBtX3RvKHRvKQogICAgICAgICAs
IG1fZm9udERhdGEoZm9udERhdGEpCkBAIC00MywxNiArNDMsMTggQEAgc3RydWN0IEZvbnREYXRh
UmFuZ2UgewogCiAgICAgVUNoYXIzMiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAg
ICAgVUNoYXIzMiB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KLSAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREYXRhOyB9CisgICAgUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
YXRhOyB9CiAKIHByaXZhdGU6CiAgICAgVUNoYXIzMiBtX2Zyb207CiAgICAgVUNoYXIzMiBtX3Rv
OwotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gbV9mb250RGF0YTsKIH07CiAKIGNsYXNzIFNlZ21lbnRlZEZvbnREYXRhIDog
cHVibGljIEZvbnREYXRhIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWdtZW50
ZWRGb250RGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNlZ21lbnRlZEZvbnRE
YXRhKTsgfQorIAogICAgIHZpcnR1YWwgflNlZ21lbnRlZEZvbnREYXRhKCk7CiAKICAgICB2b2lk
IGFwcGVuZFJhbmdlKGNvbnN0IEZvbnREYXRhUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2VzLmFwcGVu
ZChyYW5nZSk7IH0KQEAgLTY0LDYgKzY2LDggQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6
CisgICAgU2VnbWVudGVkRm9udERhdGEoKSB7IH0KKwogICAgIHZpcnR1YWwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAs
MzYgKzE3MCwzNiBAQCBib29sIFNpbXBsZUZvbnREYXRhOjppc1NlZ21lbnRlZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnZl
cnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uKSB7CiAg
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YShtX3BsYXRm
b3JtRGF0YSk7CiAgICAgICAgIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEuc2V0T3JpZW50YXRp
b24oSG9yaXpvbnRhbCk7Ci0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb24gPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEodmVydGljYWxSaWdodFBs
YXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlLCB0cnVlKSk7CisgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUodmVydGljYWxS
aWdodFBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlLCB0cnVlKTsKICAgICB9Ci0g
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24uZ2V0
KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRp
b247CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0
aW9uRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250
RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb24gPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEobV9wbGF0Zm9ybURhdGEs
IGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSkpOwotICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+dXByaWdodE9yaWVudGF0aW9uLmdldCgpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+dXByaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZv
bnQoKSwgZmFsc2UsIHRydWUpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dXByaWdo
dE9yaWVudGF0aW9uOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmJyb2tl
bklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVk
Rm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YS0+YnJva2VuSWRlb2dyYXBoKSB7Ci0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5icm9r
ZW5JZGVvZ3JhcGggPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEobV9wbGF0Zm9ybURhdGEs
IGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJv
a2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFs
c2UpOwogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJv
a2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVk
Rm9udERhdGEtPmJyb2tlbklkZW9ncmFwaC5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9u
dERhdGEtPmJyb2tlbklkZW9ncmFwaDsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2
aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTAgKzc5LDE2IEBAIHB1YmxpYzoKICAg
ICB9OwogCiAgICAgLy8gVXNlZCB0byBjcmVhdGUgcGxhdGZvcm0gZm9udHMuCi0gICAgU2ltcGxl
Rm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFs
c2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
ayA9IGZhbHNlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRl
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgYm9vbCBpc0N1c3RvbUZvbnQg
PSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZh
bGxiYWNrID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNpbXBs
ZUZvbnREYXRhKHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9y
aWVudGF0aW9uRmFsbGJhY2spKTsKKyAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcg
Rm9udHMuCi0gICAgU2ltcGxlRm9udERhdGEoUGFzc093blB0cjxBZGRpdGlvbmFsRm9udERhdGE+
LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxp
Yyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGNyZWF0ZShQYXNzT3du
UHRyPEFkZGl0aW9uYWxGb250RGF0YT4gZm9udERhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTaW1wbGVGb250RGF0YShmb250RGF0YSwgZm9udFNpemUsIHN5bnRoZXRp
Y0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgIH0KIAogICAgIHZpcnR1YWwgflNpbXBsZUZv
bnREYXRhKCk7CiAKQEAgLTkxLDExICs5NywxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgT3BlblR5
cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxE
YXRhOyB9CiAjZW5kaWYKIAotICAgIFNpbXBsZUZvbnREYXRhKiBzbWFsbENhcHNGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBTaW1wbGVGb250RGF0YSogZW1waGFz
aXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgU2ltcGxl
Rm9udERhdGEqIGJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKIAotICAgIFNpbXBs
ZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAogICAgIHsKICAgICAgICAgc3dp
dGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFyaWFudDoKQEAgLTExMiw4
ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFNpbXBsZUZvbnRE
YXRhKj4odGhpcyk7CiAgICAgfQogCi0gICAgU2ltcGxlRm9udERhdGEqIHZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0gICAgU2ltcGxlRm9udERhdGEqIHVwcmlnaHRP
cmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0Owog
CiAgICAgYm9vbCBoYXNWZXJ0aWNhbEdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmVydGlj
YWxHbHlwaHM7IH0KICAgICBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSBjb25zdCB7
IHJldHVybiBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7IH0KQEAgLTIwMSw2ICsyMDcsMTAg
QEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgU2ltcGxlRm9udERhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2Fk
aW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKTsKKwor
ICAgIFNpbXBsZUZvbnREYXRhKFBhc3NPd25QdHI8QWRkaXRpb25hbEZvbnREYXRhPiAsIGZsb2F0
IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKKwog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAgICAgdm9pZCBwbGF0Zm9ybUdseXBoSW5pdCgpOwog
ICAgIHZvaWQgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CkBAIC0yMTAsNyArMjIwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY29tbW9uSW5pdCgpOwogCi0gICAgUGFzc093blB0cjxTaW1wbGVG
b250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGNy
ZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFj
dG9yKSBjb25zdDsKIAogI2lmIChQTEFURk9STShXSU4pICYmICFPUyhXSU5DRSkpIFwKICAgICB8
fCAoT1MoV0lORE9XUykgJiYgUExBVEZPUk0oV1gpKQpAQCAtMjU0LDExICsyNjQsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgfkRlcml2ZWRGb250RGF0YSgpOwogCiAgICAgICAgIGJvb2wgZm9yQ3Vz
dG9tRm9udDsKLSAgICAgICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHM7Ci0gICAg
ICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrOwotICAgICAgICBPd25QdHI8
U2ltcGxlRm9udERhdGE+IGJyb2tlbklkZW9ncmFwaDsKLSAgICAgICAgT3duUHRyPFNpbXBsZUZv
bnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAgIE93blB0cjxTaW1wbGVG
b250RGF0YT4gdXByaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHNtYWxsQ2FwczsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01h
cms7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOworICAg
ICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKKyAg
ICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247CiAjaWYgUExB
VEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCiAgICAgICAg
IG11dGFibGUgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNvbXBvc2l0ZUZvbnRS
ZWZlcmVuY2VzOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAkocmV2
aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udENhY2hlQW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAg
dm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiB7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIGljdTo6
TG9jYWxlIGxvY2FsZSA9IGljdTo6TG9jYWxlOjpnZXREZWZhdWx0KCk7CiAgICAgUGxhdGZvcm1T
dXBwb3J0OjpGb250RmFtaWx5IGZhbWlseTsKQEAgLTExMCwxMiArMTEwLDEyIEBAIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9u
dERhdGEoZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBh
dG9taWNGYW1pbHksIERvTm90UmV0YWluKSwgRG9Ob3RSZXRhaW4pOwogfQogCi1TaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBm
b250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAgIHJldHVybiAwOwogfQogCi1T
aW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4p
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWlu
IHNob3VsZFJldGFpbikKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgc2VyaWYsICgiU2VyaWYiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIG1vbm9zcGFjZSwgKCJNb25vc3BhY2UiKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udENhY2hlQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiAxMjgzNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxOCwxMiArMzE4LDEyIEBAIHN0YXRpYyBib29sIGZvbnRDb250
YWluc0NoYXJhY3Rlcihjb25zdAogfQogCiAvLyBUcmllcyB0aGUgZ2l2ZW4gZm9udCBhbmQgc2F2
ZSBpdCB8b3V0Rm9udEZhbWlseU5hbWV8IGlmIGl0IHN1Y2NlZWRzLgotU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluLCBj
b25zdCBMT0dGT05UJiBmb250LCB3Y2hhcl90KiBvdXRGb250RmFtaWx5TmFtZSkKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRM
b2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRh
aW4gc2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiBmb250LCB3Y2hhcl90KiBvdXRGb250RmFt
aWx5TmFtZSkKIHsKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnZXRDYWNoZWRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIGZvbnQubGZGYWNlTmFtZSwgZmFsc2UsIHNob3VsZFJldGFp
bik7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGdldENhY2hlZEZvbnRE
YXRhKGZvbnREZXNjcmlwdGlvbiwgZm9udC5sZkZhY2VOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWlu
KTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG1lbWNweShvdXRGb250RmFtaWx5TmFtZSwg
Zm9udC5sZkZhY2VOYW1lLCBzaXplb2YoZm9udC5sZkZhY2VOYW1lKSk7Ci0gICAgcmV0dXJuIGZv
bnREYXRhOworICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBMT05H
IHRvR0RJRm9udFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCkBAIC00MDYsNyArNDA2LDcg
QEAgc3RydWN0IEdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnRQcm9jRGF0YQogICAgIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiogbV9mb250RGVzY3JpcHRpb247CiAgICAgRm9udENhY2hlOjpTaG91bGRS
ZXRhaW4gbV9zaG91bGRSZXRhaW47CiAgICAgd2NoYXJfdCogbV9mb250TmFtZTsKLSAgICBTaW1w
bGVGb250RGF0YSogbV9mb250RGF0YTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9u
dERhdGE7CiB9OwogCiBzdGF0aWMgaW50IENBTExCQUNLIGdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnRQcm9jKGNvbnN0IExPR0ZPTlQqIGxvZ0ZvbnQsIGNvbnN0IFRFWFRNRVRSSUMqIG1ldHJpY3Ms
IERXT1JEIGZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQg
Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogCiAvLyBHaXZlbiB0aGUgZGVzaXJlZCBiYXNlIGZv
bnQsIHRoaXMgd2lsbCBjcmVhdGUgYSBTaW1wbGVGb250RGF0YSBmb3IgYSBzcGVjaWZpYwogLy8g
Zm9udCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgY2hhcmFj
dGVycy4KLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKQogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciBwYXNzaW5nIGZvbnREZXNjcmlw
dGlvbi5kb21pbmFudFNjcmlwdCgpCiAgICAgLy8gdG8gR2V0RmFsbGJhY2tGYW1pbHkgaGVyZS4K
QEAgLTUwOCwxMiArNTA4LDEyIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dEZvbnQKIAogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQog
ewogICAgIHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBGb250RGVzY3Jp
cHRpb246OkdlbmVyaWNGYW1pbHlUeXBlIGdlbmVyaWMgPSBkZXNjcmlwdGlvbi5nZW5lcmljRmFt
aWx5KCk7CiAKQEAgLTUzMCw5ICs1MzAsOSBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRMYXN0UmVzb3J0CiAgICAgZWxzZSBpZiAoZ2VuZXJpYyA9PSBGb250RGVzY3JpcHRpb246Ok1v
bm9zcGFjZUZhbWlseSkKICAgICAgICAgZm9udFN0ciA9IGNvdXJpZXJTdHI7CiAKLSAgICBTaW1w
bGVGb250RGF0YSogc2ltcGxlRm9udCA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBm
b250U3RyLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHNpbXBsZUZvbnQgPSBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgZm9udFN0ciwgZmFs
c2UsIHNob3VsZFJldGFpbik7CiAgICAgaWYgKHNpbXBsZUZvbnQpCi0gICAgICAgIHJldHVybiBz
aW1wbGVGb250OworICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAKICAgICAv
LyBGYWxsIGJhY2sgdG8gc3lzdGVtIGZvbnRzIGFzIFdpbiBTYWZhcmkgZG9lcyBiZWNhdXNlIHRo
aXMgZnVuY3Rpb24gbXVzdAogICAgIC8vIHJldHVybiBhIHZhbGlkIGZvbnQuIE9uY2Ugd2UgZmlu
ZCBhIHZhbGlkIHN5c3RlbSBmb250LCB3ZSBzYXZlIGl0cyBuYW1lCkBAIC01NDYsNyArNTQ2LDcg
QEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgICAgICBMT0dG
T05UIGRlZmF1bHRHVUlMb2dGb250OwogICAgICAgICBHZXRPYmplY3QoZGVmYXVsdEdVSUZvbnQs
IHNpemVvZihkZWZhdWx0R1VJTG9nRm9udCksICZkZWZhdWx0R1VJTG9nRm9udCk7CiAgICAgICAg
IGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGRlc2Ny
aXB0aW9uLCBzaG91bGRSZXRhaW4sIGRlZmF1bHRHVUlMb2dGb250LCBmYWxsYmFja0ZvbnROYW1l
KSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNp
bXBsZUZvbnQucmVsZWFzZSgpOwogICAgIH0KIAogICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xp
ZW50IG1ldHJpY3MgZm9udHMuCkBAIC01NTQsMTUgKzU1NCwxNSBAQCBTaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgbm9uQ2xpZW50TWV0cmljcy5jYlNpemUgPSBz
aXplb2Yobm9uQ2xpZW50TWV0cmljcyk7CiAgICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQ
SV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGll
bnRNZXRyaWNzLCAwKSkgewogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURl
c2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRN
ZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0
dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7
CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dG
b250KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZNZW51Rm9u
dCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAg
ICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBs
ZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNo
b3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNrRm9udE5h
bWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4g
c2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNs
aWVudE1ldHJpY3MubGZDYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAg
ICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVh
c2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFu
ZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZlNt
Q2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBs
ZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQog
CiAgICAgLy8gRmFsbCBiYWNrIHRvIGFsbCB0aGUgZm9udHMgaW5zdGFsbGVkIGluIHRoaXMgUEMu
IFdoZW4gYSBmb250IGhhcyBhCkBAIC01NzYsNyArNTc2LDcgQEAgU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgICAgICBFbnVtRm9udEZhbWlsaWVzKGRjLCAwLCBn
ZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250UHJvYywgcmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KCZw
cm9jRGF0YSkpOwogCiAgICAgICAgIGlmIChwcm9jRGF0YS5tX2ZvbnREYXRhKQotICAgICAgICAg
ICAgcmV0dXJuIHByb2NEYXRhLm1fZm9udERhdGE7CisgICAgICAgICAgICByZXR1cm4gcHJvY0Rh
dGEubV9mb250RGF0YS5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1w
bGVGb250RGF0YUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAko
cmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OSwzNCArMTA5LDM0IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7
CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVT
Y2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIExPR0ZPTlQgd2lu
Rm9udDsKICAgICBHZXRPYmplY3QobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSwgc2l6ZW9mKExPR0ZP
TlQpLCAmd2luRm9udCk7CiAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHNjYWxlRmFjdG9yICogZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpOwogICAgIHdpbkZvbnQubGZIZWlnaHQgPSAtbHJv
dW5kZihzY2FsZWRTaXplKTsKICAgICBIRk9OVCBoZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgm
d2luRm9udCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxh
dGZvcm1EYXRhKGhmb250LCBzY2FsZWRTaXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigp
KSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpj
cmVhdGUoRm9udFBsYXRmb3JtRGF0YShoZm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEu
b3JpZW50YXRpb24oKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnRE
YXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3Rv
bUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCAuNyk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxs
Q2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0K
IAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NPd25QdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250
RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
LT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsg
PSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAotICAgIHJldHVy
biBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rl
cml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpj
b250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAxMjgzNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgRmNQYXR0ZXJuKiBm
aW5kQmVzdEZvbnRHaXZlbkZhbGxiYWNrcyhjbwogICAgIHJldHVybiBGY0ZvbnRTZXRNYXRjaCgw
LCBzZXRzLCAxLCBwYXR0ZXJuLCAmZm9udENvbmZpZ1Jlc3VsdCk7CiB9CiAKLWNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAg
IFJlZlB0cjxGY1BhdHRlcm4+IHBhdHRlcm4gPSBhZG9wdFJlZihjcmVhdGVGb250Q29uZmlnUGF0
dGVybkZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKSk7CiAgICAgY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZm9udERhdGEgPSBmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgp
OwpAQCAtMTAwLDEyICsxMDAsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6
Z2V0Rm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udERhdGEs
IERvTm90UmV0YWluKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxh
ckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYg
Zm9udCkKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6
Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsK
ICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNl
IHRoZSBsb2dpYyBwcmV2ZW50aW5nIEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24t
ZmFsbGJhY2sgZm9udHMgbWlnaHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVG
b250RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24g
MTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2lt
cGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE3ICs4NywxNyBA
QCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1QYXNzT3du
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEuc2Nh
bGVkRm9udCgpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQ
bGF0Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpLAorICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQ
bGF0Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNp
emUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zeW50
aGV0aWNPYmxpcXVlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKQEAg
LTEwNSwxNyArMTA1LDE3IEBAIFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxD
YXAKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdl
dCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1w
bGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpj
cmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhh
c2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0
ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
YWNoZU1hYy5tbQkocmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTks
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBcHBLaXRGb250V2VpZ2h0Qm9sCiAgICAgcmV0dXJu
IGFwcEtpdEZvbnRXZWlnaHQgPj0gNzsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNoYXIzMiBjaGFyYWN0
ZXI7CiAgICAgVTE2X0dFVChjaGFyYWN0ZXJzLCAwLCAwLCBsZW5ndGgsIGNoYXJhY3Rlcik7CkBA
IC0xNjYsMTIgKzE2NiwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRG
b250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250LCBEb05vdFJl
dGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7
CiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRj
aCBiYXNlZCBvbiAKICAgICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhlIHRoZSBy
ZXF1ZXN0ZWQgbmFtZXMuICBGb3IgZXhhbXBsZSwgd2UnbGwKICAgICAvLyBtYXRjaCBhbnkgbmFt
ZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAgICBTaW1wbGVGb250RGF0
YSogc2ltcGxlRm9udERhdGEgPSAwOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxl
Rm9udERhdGE7CiAgICAgY29uc3QgRm9udEZhbWlseSogY3VyckZhbWlseSA9ICZmb250LmZvbnRE
ZXNjcmlwdGlvbigpLmZhbWlseSgpOwogICAgIHdoaWxlIChjdXJyRmFtaWx5ICYmICFzaW1wbGVG
b250RGF0YSkgewogICAgICAgICBpZiAoY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3RoKCkpIHsK
QEAgLTE4NCwxOCArMTg0LDE4IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWls
YXJGb24KICAgICAgICAgY3VyckZhbWlseSA9IGN1cnJGYW1pbHktPm5leHQoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gc2ltcGxlRm9udERhdGE7CisgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJl
bGVhc2UoKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxk
UmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgdGltZXNTdHIsICgiVGltZXMiKSk7CiAKICAgICAvLyBG
SVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZh
dWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRo
YXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIFNp
bXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNj
cmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIHRpbWVzU3RyLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoc2ltcGxlRm9u
dERhdGEpCi0gICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YTsKKyAgICAgICAgcmV0dXJuIHNp
bXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKIAogICAgIC8vIFRoZSBUaW1lcyBmYWxsYmFjayB3aWxs
IGFsbW9zdCBhbHdheXMgd29yaywgYnV0IGluIHRoZSBoaWdobHkgdW51c3VhbCBjYXNlIHdoZXJl
CiAgICAgLy8gdGhlIHVzZXIgZG9lc24ndCBoYXZlIGl0LCB3ZSBmYWxsIGJhY2sgb24gTHVjaWRh
IEdyYW5kZSBiZWNhdXNlIHRoYXQncwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24g
MTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTIgKzMxNSwxMiBAQCB2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogICAgIH0KIH0KIAotUGFzc093blB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29u
c3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2Fs
ZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQg
c2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAg
IEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOwogICAgICAg
ICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZh
Y3RvcjsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShzY2FsZWRG
b250RGF0YSwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpj
cmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CkBAIC0zNDUsMzEgKzM0NSwzMSBAQCBQYXNzT3duUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3lu
dGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzaykgJiYgIShzY2Fs
ZWRGb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7CiAKICAgICAgICAgLy8gU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtRGVzdHJveSgpIHRha2VzIGNhcmUgb2Ygbm90IGRlbGV0aW5nIHRoZSBj
YWNoZWQgZm9udCBkYXRhIHR3aWNlLgotICAgICAgICByZXR1cm4gYWRvcHRQdHIoZm9udENhY2hl
KCktPmdldENhY2hlZEZvbnREYXRhKCZzY2FsZWRGb250RGF0YSkpOworICAgICAgICByZXR1cm4g
Zm9udENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZzY2FsZWRGb250RGF0YSk7CiAgICAgfQog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENh
cHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERl
cml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRT
aXplTXVsdGlwbGllcik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fw
cy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAot
U2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0
YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5l
bXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBj
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41Zik7CiAKLSAgICByZXR1cm4g
bV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJp
dmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29u
dGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hl
UGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAkocmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxNyArMzUsMTcgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgp
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAg
ICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hv
dWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICAvLyBGSVhN
RTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0
IGZvbnQgaGVyZS4KICAgICAvLyBGb3Igbm93IHdlJ2xsIHBpY2sgdGhlIGRlZmF1bHQgdGhhdCB0
aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9T
aW1wbGVGb250RGF0YVBhbmdvLmNwcAkocmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDMyICs4NCwzMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bURlc3Ryb3koKQogewogfQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAg
ICBGb250RGVzY3JpcHRpb24gZGVzYyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwogICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZShzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoZGVz
YywgZGVzYy5mYW1pbHkoKS5mYW1pbHkoKSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1w
bGVGb250RGF0YShwbGF0Zm9ybURhdGEpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShwbGF0Zm9ybURhdGEpOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6
OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxs
Q2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEt
PnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjcpOwog
Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBT
aW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3Rv
bUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCAuNSk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhh
c2lzTWFyazsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAkocmV2
aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dENhY2hlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBRUmF3
Rm9udCByYXdGb250Rm9yQ2hhcmFjdGVycyhjb24KICAgICByZXR1cm4gZ2x5cGhzLnJhd0ZvbnQo
KTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0
YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgpCiB7CiAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZzo6ZnJvbVJhd0Rh
dGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOwog
ICAgIFFSYXdGb250IGNvbXB1dGVkRm9udCA9IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKHFzdHJpbmcs
IGZvbnQucmF3Rm9udCgpKTsKQEAgLTczLDEyICs3MywxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRl
cm5hdGVGb250LCBEb05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRS
ZXRhaW4pCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nIGZhbGxiYWNrRmFtaWx5ID0gUUZvbnQo
Zm9udERlc2NyaXB0aW9uLmZhbWlseSgpLmZhbWlseSgpKS5sYXN0UmVzb3J0RmFtaWx5KCk7CiAg
ICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNj
cmlwdGlvbiwgZmFsbGJhY2tGYW1pbHkpLCBzaG91bGRSZXRhaW4pOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFR
dC5jcHAJKHJldmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwzMCArNjEs
MzAgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbAogICAgIHJldHVy
biBhZHZhbmNlcy5hdCgwKS54KCk7CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25z
dAogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlZFNpemUgPSBscm91bmRmKGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSAqIHNjYWxlRmFjdG9yKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEsIHNjYWxlZFNp
emUpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgaXND
dXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRh
OjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFs
bENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxs
Q2Fwc0ZyYWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
LmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1T
aW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRh
OjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVt
cGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNy
ZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRnJhY3Rpb24p
OwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7Cisg
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIEZsb2F0UmVj
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
b250Q2FjaGVTa2lhLmNwcAkocmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsOSArNTQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIHsKIH0KIAotY29u
c3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnQmIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQogewogICAgIGljdTo6TG9jYWxlIGxvY2FsZSA9IGljdTo6TG9jYWxlOjpnZXREZWZhdWx0
KCk7CiAgICAgUGxhdGZvcm1TdXBwb3J0OjpGb250RmFtaWx5IGZhbWlseTsKQEAgLTkzLDEyICs5
MSwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgcmV0
dXJuIGdldENhY2hlZEZvbnREYXRhKCZwbGF0Zm9ybURhdGEsIERvTm90UmV0YWluKTsKIH0KIAot
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hv
dWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIHNhbnNTdHIsICgiU2FucyIpKTsKICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2VyaWZTdHIsICgiU2VyaWYiKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1w
bGVGb250RGF0YVNraWEuY3BwCShyZXZpc2lvbiAxMjgzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MCwzMCArMTcwLDMwIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVz
dHJveSgpCiB7CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGNv
bnN0IGZsb2F0IHNjYWxlZFNpemUgPSBscm91bmRmKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNp
emUoKSAqIHNjYWxlRmFjdG9yKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnRE
YXRhKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEsIHNjYWxlZFNpemUpLCBpc0N1c3Rv
bUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250
UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCks
IGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2
ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMg
PSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZyYWN0aW9u
KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAg
IHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0
YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEp
CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXND
dXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykK
ICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRnJhY3Rpb24pOwogCi0gICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6
OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiAxMjgzNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg2LDEwICsxODYsMTAgQEAgc3RhdGljIEhGT05UIGNyZWF0ZU1MYW5nRm9udChJTUxhbmdG
b250TAogICAgIHJldHVybiBoZm9udDsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNoYXIgY2hhcmFjdGVy
ID0gY2hhcmFjdGVyc1swXTsKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSAwOworICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGE7CiAgICAgSFduZERDIGhkYygwKTsKICAg
ICBIRk9OVCBwcmltYXJ5Rm9udCA9IGZvbnQucHJpbWFyeUZvbnQoKS0+Zm9udERhdGFGb3JDaGFy
YWN0ZXIoY2hhcmFjdGVyKS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKICAgICBIR0RJT0JKIG9s
ZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBwcmltYXJ5Rm9udCk7CkBAIC0yOTMsMjQgKzI5Mywy
NCBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgICAgIERl
bGV0ZU9iamVjdChoZm9udCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJl
dHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbiwgY29u
c3QgTE9HRk9OVCYgZm9udCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRS
ZXRhaW4gc2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiBmb250LCBBdG9taWNTdHJpbmcmIG91
dEZvbnRGYW1pbHlOYW1lKQogewogICAgIEF0b21pY1N0cmluZyBmYW1pbHlOYW1lID0gU3RyaW5n
KGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7
Ci0gICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKKyAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHlOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoZm9udERhdGEp
CiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5TmFtZTsKLSAgICByZXR1cm4gZm9u
dERhdGE7CisgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAotU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNo
b3VsZFJldGFpbikKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZmFs
bGJhY2tGb250TmFtZSwgKCkpOwogICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5pc0VtcHR5KCkp
CkBAIC0zMjksMTEgKzMyOSwxMSBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0CiAgICAgICAgIEF0b21pY1N0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIpLAogICAg
ICAgICBBdG9taWNTdHJpbmcoIkFyaWFsIikKICAgICB9OwotICAgIFNpbXBsZUZvbnREYXRhKiBz
aW1wbGVGb250OworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udDsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsr
aSkgewogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNj
cmlwdGlvbiwgZmFsbGJhY2tGb250c1tpXSwgZmFsc2UsIHNob3VsZFJldGFpbikpIHsKICAgICAg
ICAgICAgIGZhbGxiYWNrRm9udE5hbWUgPSBmYWxsYmFja0ZvbnRzW2ldOwotICAgICAgICAgICAg
cmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNl
KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM0Miw3ICszNDIsNyBAQCBTaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIExPR0ZPTlQgZGVmYXVsdEdVSUxv
Z0ZvbnQ7CiAgICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRlZmF1bHRH
VUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQg
PSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91
bGRSZXRhaW4sIGRlZmF1bHRHVUlMb2dGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAg
ICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVs
ZWFzZSgpOwogICAgIH0KIAogICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50IG1ldHJpY3Mg
Zm9udHMuCkBAIC0zNTAsMTUgKzM1MCwxNSBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRMYXN0UmVzb3J0CiAgICAgbm9uQ2xpZW50TWV0cmljcy5jYlNpemUgPSBzaXplb2Yobm9uQ2xp
ZW50TWV0cmljcyk7CiAgICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElF
TlRNRVRSSUNTLCBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAw
KSkgewogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5k
TG9nRm9udChmb250RGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5s
Zk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1w
bGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAg
ICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250
RGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lbnVGb250LCBm
YWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAg
ICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9u
dCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIHNo
b3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNrRm9udE5h
bWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4g
c2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBu
b25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAg
ICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5y
ZWxlYXNlKCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRp
b25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRy
aWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1
cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsK
ICAgICB9CiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YVdpbi5jcHAJKHJldmlzaW9uIDEyODM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw0
MCArMTMyLDQwIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAg
ZGVsZXRlIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFj
dG9yKSBjb25zdAogewogICAgIGZsb2F0IHNjYWxlZFNpemUgPSBzY2FsZUZhY3RvciAqIG1fcGxh
dGZvcm1EYXRhLnNpemUoKTsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKICAgICAgICAgRm9u
dFBsYXRmb3JtRGF0YSBzY2FsZWRGb250KG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAgc2NhbGVk
Rm9udC5zZXRTaXplKHNjYWxlZFNpemUpOwotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNp
bXBsZUZvbnREYXRhKHNjYWxlZEZvbnQsIHRydWUsIGZhbHNlKSk7CisgICAgICAgIHJldHVybiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnQsIHRydWUsIGZhbHNlKTsKICAgICB9CiAK
ICAgICBMT0dGT05UIHdpbmZvbnQ7CiAgICAgR2V0T2JqZWN0KG1fcGxhdGZvcm1EYXRhLmhmb250
KCksIHNpemVvZihMT0dGT05UKSwgJndpbmZvbnQpOwogICAgIHdpbmZvbnQubGZIZWlnaHQgPSAt
bHJvdW5kZihzY2FsZWRTaXplICogKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpID8gMSA6IDMyKSk7
CiAgICAgSEZPTlQgaGZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QoJndpbmZvbnQpOwotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShoZm9udCwg
c2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0
YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSwgaXNDdXN0b21G
b250KCksIGZhbHNlKSk7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBs
YXRmb3JtRGF0YShoZm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9s
ZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1EYXRhLnVz
ZUdESSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgp
KTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIGNTbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwogCi0gICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1w
aGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFz
aXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9u
LCAuNSk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQo
KTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogYm9v
bCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvRm9udENhY2hlV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcAkocmV2aXNpb24g
MTI4Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENh
Y2hlV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBGb250
Q2FjaGU6OmNvbVVuaW5pdGlhbGl6ZSgpCiAgICAgfQogfQogCi1jb25zdCBTaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBTdHJpbmcg
ZmFtaWx5TmFtZTsKICAgICBXQ0hBUiBuYW1lW0xGX0ZBQ0VTSVpFXTsKQEAgLTIzNSwxMCArMjM1
LDExIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICB1bnNp
Z25lZCB1bmljb2RlUmFuZ2UgPSBmaW5kQ2hhclVuaWNvZGVSYW5nZShjaGFyYWN0ZXIpOwogCiAj
aWYgZGVmaW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9PSAyKQot
ICAgIGlmIChJTUxhbmdGb250TGluazIqIGxhbmdGb250TGluayA9IGdldEZvbnRMaW5rSW50ZXJm
YWNlKCkpIHsKKyAgICBpZiAoSU1MYW5nRm9udExpbmsyKiBsYW5nRm9udExpbmsgPSBnZXRGb250
TGlua0ludGVyZmFjZSgpKQogI2Vsc2UKLSAgICBpZiAoSU1MYW5nRm9udExpbmsqIGxhbmdGb250
TGluayA9IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpIHsKKyAgICBpZiAoSU1MYW5nRm9udExpbmsq
IGxhbmdGb250TGluayA9IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpCiAjZW5kaWYKKyAgICB7CiAg
ICAgICAgIEhHRElPQkogb2xkRm9udCA9IEdldEN1cnJlbnRPYmplY3QoZ19zY3JlZW5EQywgT0JK
X0ZPTlQpOwogICAgICAgICBIRk9OVCBoZm9udCA9IDA7CiAgICAgICAgIERXT1JEIGNvZGVQYWdl
cyA9IDA7CkBAIC0yNjcsMTAgKzI2OCwxMSBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRGb250CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFza2VkIGFib3V0IGEgY29k
ZSBwYWdlIHRoYXQgaXMgbm90IG9uZSBvZiB0aGUgY29kZSBwYWdlcwogICAgICAgICAgICAgICAg
ICAgICAvLyByZXR1cm5lZCBieSBNTGFuZywgc28gdGhlIGZvbnQgbWlnaHQgbm90IGNvbnRhaW4g
dGhlIGNoYXJhY3Rlci4KICNpZiBkZWZpbmVkKElNTEFOR19GT05UX0xJTkspICYmIChJTUxBTkdf
Rk9OVF9MSU5LID09IDIpCi0gICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvbnRDb250
YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGNoYXJhY3RlcikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFjdGVyKGxhbmdG
b250TGluaywgZ19zY3JlZW5EQywgY2hhcmFjdGVyKSkKICNlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghY3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2Ny
ZWVuREMsIGhmb250LCBjaGFyYWN0ZXIsIG5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghY3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMs
IGhmb250LCBjaGFyYWN0ZXIsIG5hbWUpKQogI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBvbGRGb250
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdGb250TGluay0+UmVsZWFzZUZvbnQoaGZv
bnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaGZvbnQgPSAwOwpAQCAtMzA4LDIwICszMTAs
MjAgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogCiAgICAgICAg
IEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9u
dERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQt
Pmhhc2goKSAhPSBvcmlnRm9udC5oYXNoKCkpIHsKLSAgICAgICAgICAgIGlmIChTaW1wbGVGb250
RGF0YSogZm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShyZXN1bHQsIERvTm90UmV0YWluKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZm9udERhdGE7CisgICAgICAgICAgICBpZiAoUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKHJlc3VsdCwgRG9O
b3RSZXRhaW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udCYpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzYywgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewog
ICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNl
cidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRl
ZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250
RGF0YVdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcAkocmV2aXNpb24gMTI4Mzc0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5D
RS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4g
U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNv
bnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjKGZvbnREZXNjcmlwdGlvbik7CiAg
ICAgZm9udERlc2Muc2V0Q29tcHV0ZWRTaXplKGxyb3VuZGYoc2NhbGVGYWN0b3IgKiBmb250RGVz
Yy5jb21wdXRlZFNpemUoKSkpOwpAQCAtNzEsMjggKzcxLDI4IEBAIFBhc3NPd25QdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICBmb250RGVzYy5zZXRLZXl3b3JkU2l6ZShscm91
bmRmKHNjYWxlRmFjdG9yICogZm9udERlc2Mua2V5d29yZFNpemUoKSkpOwogICAgIEZvbnRQbGF0
Zm9ybURhdGEqIHJlc3VsdCA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjLCBtX3BsYXRmb3JtRGF0YS5mYW1pbHkoKSk7CiAgICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9u
dERhdGEoKnJlc3VsdCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZSgqcmVzdWx0KTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpz
bWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC43
KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAg
IHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0
YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEp
CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXND
dXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykK
ICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5l
bXBoYXNpc01hcms7CiB9CiAKIERXT1JEIGdldEtub3duRm9udENvZGVQYWdlcyhjb25zdCB3Y2hh
cl90KiBmYW1pbHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
Rm9udENhY2hlV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcAkocmV2aXNpb24gMTI4Mzc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udENhY2hlV3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw5ICs0Myw5IEBAIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogewogfQog
Ci1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3Rl
cnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgp
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKIHsKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSAwOworICAgIFJlZlB0cjxT
aW1wbGVGb250RGF0YT4gZm9udERhdGEgPSAwOwogICAgIGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSwgZmFs
c2UsIERvTm90UmV0YWluKTsKICAgICBpZiAoIWZvbnREYXRhLT5jb250YWluc0NoYXJhY3RlcnMo
Y2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAgICAgZm9udERhdGEgPSBnZXRTaW1pbGFyRm9udFBs
YXRmb3JtRGF0YShmb250KTsKQEAgLTUzLDEyICs1MywxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgICAgIGZvbnREYXRhID0gZ2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChmb250LmZvbnREZXNjcmlwdGlvbigpKTsKIAogICAgIEFTU0VSVChmb250RGF0
YSk7Ci0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7
CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0gICAg
U2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnREYXRhID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHNpbXBsZUZvbnREYXRhID0gMDsKICNpZiBPUyhEQVJXSU4pCiAgICAgLy8gQXR0ZW1w
dCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiAKICAg
ICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhlIHRoZSByZXF1ZXN0ZWQgbmFtZXMu
ICBGb3IgZXhhbXBsZSwgd2UnbGwKQEAgLTc4LDE0ICs3OCwxNCBAQCBTaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9uCiAgICAgaWYgKCFzaW1wbGVGb250RGF0YSkKICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlv
bigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKTsKIAotICAgIHJldHVybiBzaW1wbGVGb250RGF0
YTsKKyAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOwogfQogCi1TaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQogewogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBz
b21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBw
aWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBj
aGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgU2ltcGxlRm9udERhdGEqIGZhbGxiYWNrID0gMDsKKyAg
ICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhbGxiYWNrID0gMDsKICNpZiBPUyhXSU5ET1dTKQog
ICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZmFsbGJhY2tOYW1lKCJBcmlhbCBVbmljb2RlIE1TIik7
CiAjZWxzZQpAQCAtOTQsNyArOTQsNyBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRM
YXN0UmVzb3J0CiAgICAgZmFsbGJhY2sgPSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIGZhbGxiYWNrTmFtZSwgZmFsc2UsIHNob3VsZFJldGFpbik7CiAgICAgQVNTRVJUKGZhbGxi
YWNrKTsKICAgICAKLSAgICByZXR1cm4gZmFsbGJhY2s7CisgICAgcmV0dXJuIGZhbGxiYWNrLnJl
bGVhc2UoKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwCShyZXZpc2lvbiAxMjgz
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0
YVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMzIgKzkwLDMyIEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiAjZW5kaWYKIH0KIAotUGFzc093blB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKTsKICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoc2NhbGVGYWN0
b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwogICAgIEZvbnRQbGF0Zm9ybURh
dGEgcGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOwotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQo
KSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURh
dGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9u
LCAuNyk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsK
KyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9u
dERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRl
KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01h
cmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2Fs
ZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJh
Y3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164419</attachid>
            <date>2012-09-17 11:04:27 -0700</date>
            <delta_ts>2012-09-17 16:47:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95866-20120917140408.patch</filename>
            <type>text/plain</type>
            <size>98437</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2OSBAQAorMjAxMi0wOS0xNyAgU3RlcGhl
biBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkNvcmU6OkZvbnREYXRhIGhhbmRsaW5nIHRvIGNsYXJpZnkgcG9pbnRlciBvd25lcnNoaXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBhbGwgRm9udERhdGEgYW5kIGRlcml2ZWQgY2xhc3NlcyByZWYtY291bnRlZCBpbiBhbGwK
KyAgICAgICAgY29kZSBwYXRocyB0aGF0IGxlYWQgdG8gY2FjaGluZyBvciBvdGhlciByZXRlbnRp
b24gb2YgYSBwb2ludGVyLiBUaGUKKyAgICAgICAgZ29hbCBpcyB0byBhdmVydCBjcmFzaGVzIGFu
ZCBtZW1vcnkgbGVha3MsIGFuZCB0byBicmluZyB0aGUgY29kZSBtb3JlIGluCisgICAgICAgIGxp
bmUgd2l0aCBjdXJyZW50IFdlYktpdCBwcmFjdGljZXMuCisKKyAgICAgICAgQWxsIEZvbnREYXRh
IGRlcml2ZWQgY2xhc3NlcyBoYXZlIGJlZW4gc3dpdGNoZWQgdG8gdXNlIHN0YXRpYyBjcmVhdGUK
KyAgICAgICAgbWV0aG9kcyB3aXRoIHByaXZhdGUgY29uc3RydWN0b3JzLgorCisgICAgICAgIEFs
bCBjYWNoZXMgdGhhdCBob2xkIEZvbnREYXRhIG5vdyB1c2UgUmVmUHRycy4KKworICAgICAgICBB
bGwgbWV0aG9kcyB0aGF0IGNvbnN0cnVjdCBuZXcgZm9udCBkYXRhIG5vdyByZXR1cm4gUGFzc1Jl
ZlB0ciwgd2l0aAorICAgICAgICB0aGUgZXhjZXB0aW9uIG9mIGNvZGUgb25seSB1c2VkIHRvIGdl
bmVyYXRlIHRlbXBvcmFyeSBkYXRhIGZvciB0ZXh0CisgICAgICAgIHJ1biBsYXlvdXQuCisKKyAg
ICAgICAgQWxsIG1ldGhvZHMgdGhhdCBoYW5kbGUgRm9udERhdGEgaW4gYSBjYWxsIHN0YWNrIHRo
YXQgcGFzc2VzIHRocm91Z2gKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCBy
ZXR1cm4gUGFzc1JlZlB0ci4KKworICAgICAgICBQZXJmb3JtYW5jZSB0ZXN0aW5nIHdpbGwgYmUg
ZG9uZSBiZWZvcmUgY29tbWl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIHJl
ZmFjdG9yaW5nIGNvZGUgb25seSBhbmQgaGFzIG5vIGltcGFjdCBvbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAg
ICAgIChDU1NGb250RmFjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAgIChDU1NGb250RmFjZVNvdXJj
ZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250RGF0YUZvckdlbmVyaWNGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNl
bGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgor
ICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAg
ICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmg6CisgICAgICAgIChDU1NTZWdtZW50ZWRGb250
RmFjZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZWdpc3RlckN1c3RvbUZvbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgor
ICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25S
ZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJn
ZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAg
IChGb250Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFsbGJhY2tMaXN0OjpzZXRQbGF0Zm9ybUZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaDoKKyAgICAgICAgKEZvbnRGYWxsYmFja0xpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDoKKyAgICAgICAgKEZvbnRTZWxlY3Rv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb250RGF0YVJhbmdlOjpGb250RGF0YVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhUmFuZ2U6OmZvbnREYXRhKToKKyAgICAgICAgKEZvbnREYXRhUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNyZWF0ZSk6CisgICAgICAgIChTZWdt
ZW50ZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6U2Vn
bWVudGVkRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChTaW1wbGVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6dmFyaWFudEZvbnREYXRhKToKKyAgICAgICAgKERlcml2ZWRGb250RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9p
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoR2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udFByb2NEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93eC9Gb250Q2FjaGVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisKIDIwMTItMDktMTcgIExhdXJvIE5l
dG8gIDxsYXVyby5uZXRvQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgVXBkYXRlcyB0byB0aGUg
dXNlcmFnZW50IHBhdGNoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHJldmlz
aW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBDU1NGb250RmFjZTo6Zm9udExvYWRlZChD
U1NGb250RmFjZQogICAgIGZvbnRTZWxlY3Rvci0+Zm9udExvYWRlZCgpOwogfQogCi1TaW1wbGVG
b250RGF0YSogQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGlj
KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljSXRhbGljKQogewogICAgIG1fYWN0aXZlU291cmNlID0gMDsKICAgICBp
ZiAoIWlzVmFsaWQoKSkKQEAgLTEwMiw5ICsxMDIsOSBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9u
dEZhY2U6OmdldEZvbnREYXRhCiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fc291cmNlcy5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKFNp
bXBsZUZvbnREYXRhKiByZXN1bHQgPSBtX3NvdXJjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNj
cmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7
CisgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IHJlc3VsdCA9IG1fc291cmNlc1tp
XS0+Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJ
dGFsaWMsIGZvbnRTZWxlY3RvcikpIHsKICAgICAgICAgICAgIG1fYWN0aXZlU291cmNlID0gbV9z
b3VyY2VzW2ldLmdldCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2UuaAkocmV2aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlU291cmNlKik7CiAKLSAgICBTaW1w
bGVGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0
aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CiAKICAgICBzdHJ1Y3QgVW5pY29kZVJhbmdl
IHsKICAgICAgICAgVW5pY29kZVJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkocmV2aXNpb24gMTI4Nzc0
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENTU0ZvbnRGYWNlU291cmNlOjpmb250TG9hZGVk
KENhY2hlCiAgICAgICAgIG1fZmFjZS0+Zm9udExvYWRlZCh0aGlzKTsKIH0KIAotU2ltcGxlRm9u
dERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJ
dGFsaWMsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBm
b250IGhhc24ndCBsb2FkZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5v
dGhpbmcuCiAgICAgaWYgKCFpc1ZhbGlkKCkpCkBAIC0xMTQsMTEgKzExNCw5IEBAIFNpbXBsZUZv
bnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICB1bnNpZ25lZCBoYXNoS2V5ID0g
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgNiB8IGZvbnREZXNj
cmlwdGlvbi53aWR0aFZhcmlhbnQoKSA8PCA0CiAgICAgICAgICAgICAgICAgICAgICAgIHwgKGZv
bnREZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0
ID8gOCA6IDApIHwgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8g
NCA6IDApIHwgKHN5bnRoZXRpY0JvbGQgPyAyIDogMCkgfCAoc3ludGhldGljSXRhbGljID8gMSA6
IDApOwogCi0gICAgU2ltcGxlRm9udERhdGEqJiBjYWNoZWREYXRhID0gbV9mb250RGF0YVRhYmxl
LmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOwotICAgIGlmIChjYWNoZWREYXRhKQot
ICAgICAgICByZXR1cm4gY2FjaGVkRGF0YTsKLQotICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4g
Zm9udERhdGE7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiYgZm9udERhdGEgPSBtX2ZvbnRE
YXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgaWYgKGZvbnRE
YXRhKQorICAgICAgICByZXR1cm4gZm9udERhdGE7CiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwg
bG9hZGluZywgdGhlbiB3ZSBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNM
b2FkZWQoKSkgewpAQCAtMTU3LDcgKzE1NSw3IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFj
ZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3ZnRm9udEZhY2VFbGVt
ZW50ID0gZm9udEZhY2VFbGVtZW50OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoU1ZHRm9u
dERhdGE6OmNyZWF0ZShmb250RmFjZUVsZW1lbnQpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQ
aXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgICAgICAg
ICAgICAgICAgIGZvbnREYXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShTVkdGb250RGF0YTo6
Y3JlYXRlKGZvbnRGYWNlRWxlbWVudCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0gZWxzZQogI2VuZGlmCkBAIC0xNjYsMTQgKzE2NCwxNCBAQCBTaW1wbGVG
b250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAgICAgICAgICAgICAgICAgaWYgKCFt
X2ZvbnQtPmVuc3VyZUN1c3RvbUZvbnREYXRhKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwogCi0gICAgICAgICAgICAgICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9u
dERhdGEobV9mb250LT5wbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250
RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJp
YW50KCksIGZvbnREZXNjcmlwdGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSkpOwor
ICAgICAgICAgICAgICAgIGZvbnREYXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShtX2ZvbnQt
PnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVs
U2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlvbi5v
cmllbnRhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
dGV4dE9yaWVudGF0aW9uKCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERl
c2NyaXB0aW9uLnJlbmRlcmluZ01vZGUoKSksIHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAgICAgLy8g
SW4tRG9jdW1lbnQgU1ZHIEZvbnRzCiAgICAgICAgICAgICBpZiAobV9zdmdGb250RmFjZUVsZW1l
bnQpCi0gICAgICAgICAgICAgICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERh
dGEoU1ZHRm9udERhdGE6OmNyZWF0ZShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJ
dGFsaWMpKTsKKyAgICAgICAgICAgICAgICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVh
dGUoU1ZHRm9udERhdGE6OmNyZWF0ZShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJ
dGFsaWMpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTg0LDE1ICsxODIs
MTUgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgICAgICAv
LyBUaGlzIHRlbXBvcmFyeSBmb250IGlzIG5vdCByZXRhaW5lZCBhbmQgc2hvdWxkIG5vdCBiZSBy
ZXR1cm5lZC4KICAgICAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQ
cmV2ZW50ZXI7CiAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB0ZW1wb3JhcnlGb250ID0gZm9udENh
Y2hlKCktPmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRp
b24pOwotICAgICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YSh0ZW1w
b3JhcnlGb250LT5wbGF0Zm9ybURhdGEoKSwgdHJ1ZSwgdHJ1ZSkpOworICAgICAgICBmb250RGF0
YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUodGVtcG9yYXJ5Rm9udC0+cGxhdGZvcm1EYXRhKCks
IHRydWUsIHRydWUpOwogICAgIH0KIAotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmb250
U2VsZWN0b3ItPmRvY3VtZW50KCkpIHsKLSAgICAgICAgY2FjaGVkRGF0YSA9IGZvbnREYXRhLmdl
dCgpOwotICAgICAgICBkb2N1bWVudC0+cmVnaXN0ZXJDdXN0b21Gb250KGZvbnREYXRhLnJlbGVh
c2UoKSk7Ci0gICAgfQorICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmb250U2VsZWN0b3It
PmRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQoZm9udERh
dGEpOworICAgIGVsc2UKKyAgICAgICAgZm9udERhdGEgPSAwOwogCi0gICAgcmV0dXJuIGNhY2hl
ZERhdGE7CisgICAgcmV0dXJuIGZvbnREYXRhOwogfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAxMjg3
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9udExv
YWRlZChDYWNoZWRGb250Kik7CiAKLSAgICBTaW1wbGVGb250RGF0YSogZ2V0Rm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgQ1NTRm9udFNlbGVjdG9yKik7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKik7CiAKICAgICB2b2lkIHBydW5l
VGFibGUoKTsKIApAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBt
X3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0LWluIGZvbnQgbmFtZSBmb3IgbG9jYWwu
CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4gbV9mb250OyAvLyBGb3IgcmVt
b3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hlZCByZXNvdXJjZS4KICAgICBDU1NGb250
RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQgZmFjZS4KLSAgICBIYXNoTWFwPHVuc2ln
bmVkLCBTaW1wbGVGb250RGF0YSo+IG1fZm9udERhdGFUYWJsZTsgLy8gVGhlIGhhc2gga2V5IGlz
IGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4KKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCBSZWZQdHI8U2ltcGxlRm9udERhdGE+ID4gbV9mb250RGF0YVRhYmxlOyAvLyBUaGUgaGFzaCBr
ZXkgaXMgY29tcG9zZWQgb2Ygc2l6ZSBzeW50aGV0aWMgc3R5bGVzLgogCiAjaWYgRU5BQkxFKFNW
R19GT05UUykKICAgICBSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBtX3N2Z0ZvbnRGYWNlRWxl
bWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lv
biAxMjg3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUwLDcgKzM1MCw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpmb250
Q2FjaGVJbnZhbGlkYXQKICAgICBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwogfQog
Ci1zdGF0aWMgRm9udERhdGEqIGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseShEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseU5hbWUpCitzdGF0aWMgUGFzc1JlZlB0cjxGb250RGF0YT4gZm9udERh
dGFGb3JHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsK
ICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC00NjUsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVGb250RmFj
ZXMoQ1NTRgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRm9udERhdGEqIENTU0ZvbnRTZWxlY3Rv
cjo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKK1Bhc3NSZWZQdHI8Rm9udERhdGE+IENTU0Zv
bnRTZWxlY3Rvcjo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBpZiAobV9mb250
RmFjZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChmYW1pbHlOYW1lLnN0YXJ0c1dpdGgoIi13
ZWJraXQtIikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lv
biAxMjg3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdW5z
aWduZWQgdmVyc2lvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQogCi0g
ICAgdmlydHVhbCBGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSk7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIHZvaWQgY2xlYXJEb2N1bWVudCgpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAJKHJl
dmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDkgQEAgdm9pZCBDU1NTZWdtZW50ZWRG
b250RmFjZTo6YXBwZW5kRm9udEZhYwogICAgIG1fZm9udEZhY2VzLmFwcGVuZChmb250RmFjZSk7
CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGVuZEZvbnREYXRhV2l0aEludmFsaWRVbmljb2RlUmFuZ2VJ
ZkxvYWRpbmcoU2VnbWVudGVkRm9udERhdGEqIG5ld0ZvbnREYXRhLCBjb25zdCBTaW1wbGVGb250
RGF0YSogZmFjZUZvbnREYXRhLCBjb25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5n
ZT4mIHJhbmdlcykKK3N0YXRpYyB2b2lkIGFwcGVuZEZvbnREYXRhV2l0aEludmFsaWRVbmljb2Rl
UmFuZ2VJZkxvYWRpbmcoU2VnbWVudGVkRm9udERhdGEqIG5ld0ZvbnREYXRhLCBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBwcnBGYWNlRm9udERhdGEsIGNvbnN0IFZlY3RvcjxDU1NGb250RmFj
ZTo6VW5pY29kZVJhbmdlPiYgcmFuZ2VzKQogeworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
ZmFjZUZvbnREYXRhID0gcHJwRmFjZUZvbnREYXRhOwogICAgIGlmIChmYWNlRm9udERhdGEtPmlz
TG9hZGluZygpKSB7CiAgICAgICAgIG5ld0ZvbnREYXRhLT5hcHBlbmRSYW5nZShGb250RGF0YVJh
bmdlKDAsIDAsIGZhY2VGb250RGF0YSkpOwogICAgICAgICByZXR1cm47CkBAIC05OCw3ICs5OSw3
IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEZvbnREYXRhV2l0aEludmFsaWRVbmkKICAgICAgICAgbmV3
Rm9udERhdGEtPmFwcGVuZFJhbmdlKEZvbnREYXRhUmFuZ2UocmFuZ2VzW2pdLmZyb20oKSwgcmFu
Z2VzW2pdLnRvKCksIGZhY2VGb250RGF0YSkpOwogfQogCi1Gb250RGF0YSogQ1NTU2VnbWVudGVk
Rm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQorUGFzc1JlZlB0cjxGb250RGF0YT4gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewogICAgIGlmICgh
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEwNiwxMSArMTA3LDExIEBAIEZvbnRE
YXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udEQKICAgICBGb250VHJhaXRzTWFzayBk
ZXNpcmVkVHJhaXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAgICAgdW5z
aWduZWQgaGFzaEtleSA9ICgoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAx
KSA8PCAoRm9udFRyYWl0c01hc2tXaWR0aCArIDEpKSB8ICgoZm9udERlc2NyaXB0aW9uLm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWwgPyAxIDogMCkgPDwgRm9udFRyYWl0c01hc2tXaWR0aCkgfCBk
ZXNpcmVkVHJhaXRzTWFzazsKIAotICAgIFNlZ21lbnRlZEZvbnREYXRhKiYgZm9udERhdGEgPSBt
X2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVm
UHRyPFNlZ21lbnRlZEZvbnREYXRhPiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhh
c2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAgICBy
ZXR1cm4gZm9udERhdGE7CiAKLSAgICBPd25QdHI8U2VnbWVudGVkRm9udERhdGE+IG5ld0ZvbnRE
YXRhID0gYWRvcHRQdHIobmV3IFNlZ21lbnRlZEZvbnREYXRhKTsKKyAgICBmb250RGF0YSA9IFNl
Z21lbnRlZEZvbnREYXRhOjpjcmVhdGUoKTsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBtX2ZvbnRG
YWNlcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewpA
QCAtMTE5LDE5ICsxMjAsMTkgQEAgRm9udERhdGEqIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRG
b250RAogICAgICAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrID0gbV9mb250RmFjZXNbaV0t
PnRyYWl0c01hc2soKTsKICAgICAgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gISh0cmFpdHNNYXNr
ICYgKEZvbnRXZWlnaHQ2MDBNYXNrIHwgRm9udFdlaWdodDcwME1hc2sgfCBGb250V2VpZ2h0ODAw
TWFzayB8IEZvbnRXZWlnaHQ5MDBNYXNrKSkgJiYgKGRlc2lyZWRUcmFpdHNNYXNrICYgKEZvbnRX
ZWlnaHQ2MDBNYXNrIHwgRm9udFdlaWdodDcwME1hc2sgfCBGb250V2VpZ2h0ODAwTWFzayB8IEZv
bnRXZWlnaHQ5MDBNYXNrKSk7CiAgICAgICAgIGJvb2wgc3ludGhldGljSXRhbGljID0gISh0cmFp
dHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgKGRlc2lyZWRUcmFpdHNNYXNrICYgRm9u
dFN0eWxlSXRhbGljTWFzayk7Ci0gICAgICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogZmFj
ZUZvbnREYXRhID0gbV9mb250RmFjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwg
c3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSkgeworICAgICAgICBpZiAoUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBmYWNlRm9udERhdGEgPSBtX2ZvbnRGYWNlc1tpXS0+Z2V0Rm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoIWZhY2VGb250RGF0YS0+aXNTZWdtZW50ZWQoKSk7Ci0gICAgICAgICAg
ICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKG5ld0ZvbnRE
YXRhLmdldCgpLCBmYWNlRm9udERhdGEsIG1fZm9udEZhY2VzW2ldLT5yYW5nZXMoKSk7CisgICAg
ICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKGZv
bnREYXRhLmdldCgpLCBmYWNlRm9udERhdGEucmVsZWFzZSgpLCBtX2ZvbnRGYWNlc1tpXS0+cmFu
Z2VzKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChuZXdGb250RGF0YS0+bnVtUmFuZ2Vz
KCkpIHsKKyAgICBpZiAoZm9udERhdGEtPm51bVJhbmdlcygpKSB7CiAgICAgICAgIGlmIChEb2N1
bWVudCogZG9jdW1lbnQgPSBtX2ZvbnRTZWxlY3Rvci0+ZG9jdW1lbnQoKSkgewotICAgICAgICAg
ICAgZm9udERhdGEgPSBuZXdGb250RGF0YS5nZXQoKTsKLSAgICAgICAgICAgIGRvY3VtZW50LT5y
ZWdpc3RlckN1c3RvbUZvbnQobmV3Rm9udERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGRv
Y3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQoZm9udERhdGEpOworICAgICAgICAgICAgcmV0dXJu
IGZvbnREYXRhOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGZvbnREYXRhOworICAg
IHJldHVybiAwOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuaAkocmV2aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
Z21lbnRlZEZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBhcHBlbmRGb250RmFjZShQYXNzUmVmUHRyPENTU0ZvbnRGYWNlPik7CiAK
LSAgICBGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAg
UGFzc1JlZlB0cjxGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJik7
CiAKIHByaXZhdGU6CiAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKik7
CkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAK
ICAgICBDU1NGb250U2VsZWN0b3IqIG1fZm9udFNlbGVjdG9yOwotICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIFNlZ21lbnRlZEZvbnREYXRhKj4gbV9mb250RGF0YVRhYmxlOworICAgIEhhc2hNYXA8dW5z
aWduZWQsIFJlZlB0cjxTZWdtZW50ZWRGb250RGF0YT4gPiBtX2ZvbnREYXRhVGFibGU7CiAgICAg
VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4sIDE+IG1fZm9udEZhY2VzOwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMjg3NzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTkyLDcgKzE5OTIsNyBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBEb2N1bWVudDo6c3R5bGVGCiAgICAgcmV0dXJuIHN0eWxl
LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJDdXN0b21Gb250KFBhc3NP
d25QdHI8Rm9udERhdGE+IGZvbnREYXRhKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJDdXN0b21G
b250KFBhc3NSZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhKQogewogICAgIG1fY3VzdG9tRm9udHMu
YXBwZW5kKGZvbnREYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAx
Mjg3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcxLDcgKzU3MSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyhFbGVtZW50Kik7CiAgICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpOwogCi0g
ICAgdm9pZCByZWdpc3RlckN1c3RvbUZvbnQoUGFzc093blB0cjxGb250RGF0YT4pOworICAgIHZv
aWQgcmVnaXN0ZXJDdXN0b21Gb250KFBhc3NSZWZQdHI8Rm9udERhdGE+KTsKIAogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiBwYWdlIGJveCAobWFyZ2luIGJveGVzIGFuZCBwYWdlIGJvcmRlcnMpIGlz
IHZpc2libGUuCiAgICAgYm9vbCBpc1BhZ2VCb3hWaXNpYmxlKGludCBwYWdlSW5kZXgpOwpAQCAt
MTI5MCw3ICsxMjkwLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8U3R5bGVSZXNvbHZlcj4gbV9z
dHlsZVJlc29sdmVyOwogICAgIGJvb2wgbV9kaWRDYWxjdWxhdGVTdHlsZVJlc29sdmVyOwogICAg
IGJvb2wgbV9oYXNEaXJ0eVN0eWxlUmVzb2x2ZXI7Ci0gICAgVmVjdG9yPE93blB0cjxGb250RGF0
YT4gPiBtX2N1c3RvbUZvbnRzOworICAgIFZlY3RvcjxSZWZQdHI8Rm9udERhdGE+ID4gbV9jdXN0
b21Gb250czsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIFJlZlB0cjxET01XaW5kb3c+IG1f
ZG9tV2luZG93OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwCShyZXZpc2lvbiAxMjg3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNyArMjg2LDcg
QEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0KIH07CiAK
LXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBwYWlyPFNpbXBsZUZvbnREYXRhKiwg
dW5zaWduZWQ+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4g
Rm9udERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBwYWlyPFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4sIHVuc2lnbmVkPiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZv
bnREYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7CiAKIHN0YXRpYyBGb250RGF0YUNh
Y2hlKiBnRm9udERhdGFDYWNoZSA9IDA7CiAKQEAgLTI5Nyw5ICsyOTcsOSBAQCBjb25zdCBpbnQg
Y1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCBpbnQgY01heEluYWN0aXZlRm9u
dERhdGEgPSA1MDsgLy8gUHJldHR5IExvdyBUaHJlc2hvbGQKIGNvbnN0IGludCBjVGFyZ2V0SW5h
Y3RpdmVGb250RGF0YSA9IDMwOwogI2VuZGlmCi1zdGF0aWMgTGlzdEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZ0luYWN0aXZlRm9udERhdGEgPSAwOworc3RhdGljIExpc3RIYXNoU2V0
PFJlZlB0cjxTaW1wbGVGb250RGF0YT4gPiogZ0luYWN0aXZlRm9udERhdGEgPSAwOwogCi1TaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wg
Y2hlY2tpbmdBbHRlcm5hdGVOYW1lLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWlu
KQogewogICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIGNoZWNraW5nQWx0ZXJuYXRlTmFt
ZSk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEpCkBAIC0zMDgsNyArMzA4LDcgQEAgU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250
RGF0YShwbGF0Zm9ybURhdGEsIHNob3VsZFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRm
b3JtRGF0YSwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSogcGxhdGZvcm1EYXRhLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIGlmICgh
cGxhdGZvcm1EYXRhKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMyMCwxNiArMzIwLDE2IEBAIFNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnQKIAogICAgIGlmICghZ0ZvbnRE
YXRhQ2FjaGUpIHsKICAgICAgICAgZ0ZvbnREYXRhQ2FjaGUgPSBuZXcgRm9udERhdGFDYWNoZTsK
LSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEgPSBuZXcgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPjsKKyAgICAgICAgZ0luYWN0aXZlRm9udERhdGEgPSBuZXcgTGlzdEhhc2hTZXQ8
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiA+OwogICAgIH0KIAogICAgIEZvbnREYXRhQ2FjaGU6Oml0
ZXJhdG9yIHJlc3VsdCA9IGdGb250RGF0YUNhY2hlLT5maW5kKCpwbGF0Zm9ybURhdGEpOwogICAg
IGlmIChyZXN1bHQgPT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKSB7Ci0gICAgICAgIHBhaXI8U2lt
cGxlRm9udERhdGEqLCB1bnNpZ25lZD4gbmV3VmFsdWUobmV3IFNpbXBsZUZvbnREYXRhKCpwbGF0
Zm9ybURhdGEpLCBzaG91bGRSZXRhaW4gPT0gUmV0YWluID8gMSA6IDApOworICAgICAgICBwYWly
PFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIHVuc2lnbmVkPiBuZXdWYWx1ZShTaW1wbGVGb250RGF0
YTo6Y3JlYXRlKCpwbGF0Zm9ybURhdGEpLCBzaG91bGRSZXRhaW4gPT0gUmV0YWluID8gMSA6IDAp
OwogICAgICAgICBnRm9udERhdGFDYWNoZS0+c2V0KCpwbGF0Zm9ybURhdGEsIG5ld1ZhbHVlKTsK
ICAgICAgICAgaWYgKHNob3VsZFJldGFpbiA9PSBEb05vdFJldGFpbikKICAgICAgICAgICAgIGdJ
bmFjdGl2ZUZvbnREYXRhLT5hZGQobmV3VmFsdWUuZmlyc3QpOwotICAgICAgICByZXR1cm4gbmV3
VmFsdWUuZmlyc3Q7CisgICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdC5yZWxlYXNlKCk7CiAg
ICAgfQogCiAgICAgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKQEAgLTM1MCw3
ICszNTAsNyBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250CiAKIFNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKLSAgICByZXR1
cm4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24sIERvTm90UmV0YWlu
KTsKKyAgICByZXR1cm4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24s
IERvTm90UmV0YWluKS5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9u
dERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQpAQCAtMzYzLDcgKzM2Myw3IEBA
IHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2kKIAogICAgIEFTU0VSVChp
dC0+c2Vjb25kLnNlY29uZCk7CiAgICAgaWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKQotICAgICAg
ICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKGZvbnREYXRhKTsKKyAgICAgICAgZ0luYWN0aXZlRm9u
dERhdGEtPmFkZChpdC0+c2Vjb25kLmZpcnN0KTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OnB1cmdl
SW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKQEAgLTM4MywxMSArMzgzLDExIEBAIHZvaWQgRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW4KIAogICAgIGlzUHVyZ2luZyA9IHRydWU7
CiAKLSAgICBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqLCAyMD4gZm9udERhdGFUb0RlbGV0
ZTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBlbmQg
PSBnSW5hY3RpdmVGb250RGF0YS0+ZW5kKCk7Ci0gICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0YS0+YmVnaW4oKTsKKyAg
ICBWZWN0b3I8UmVmUHRyPFNpbXBsZUZvbnREYXRhPiwgMjA+IGZvbnREYXRhVG9EZWxldGU7Cisg
ICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPiA+OjppdGVyYXRvciBlbmQgPSBn
SW5hY3RpdmVGb250RGF0YS0+ZW5kKCk7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZv
bnREYXRhPiA+OjppdGVyYXRvciBpdCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigpOwogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgJiYgaXQgIT0gZW5kOyArK2l0LCArK2kpIHsKLSAg
ICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gKml0LmdldCgpOworICAgICAg
ICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gKml0LmdldCgpOwogICAgICAgICBn
Rm9udERhdGFDYWNoZS0+cmVtb3ZlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7CiAgICAgICAg
IC8vIFdlIHNob3VsZCBub3QgZGVsZXRlIFNpbXBsZUZvbnREYXRhIGhlcmUgYmVjYXVzZSBkZWxl
dGlvbiBjYW4gbW9kaWZ5IGdJbmFjdGl2ZUZvbnREYXRhLiBTZWUgaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQvNDQwMTEKICAgICAgICAgZm9udERhdGFUb0RlbGV0ZS5hcHBlbmQoZm9u
dERhdGEpOwpAQCAtNDAxLDkgKzQwMSw3IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEoaW4KICAgICAgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5yZW1vdmUoZ0luYWN0
aXZlRm9udERhdGEtPmJlZ2luKCkpOwogICAgIH0KIAotICAgIHNpemVfdCBmb250RGF0YVRvRGVs
ZXRlQ291bnQgPSBmb250RGF0YVRvRGVsZXRlLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZvbnREYXRhVG9EZWxldGVDb3VudDsgKytpKQotICAgICAgICBkZWxldGUgZm9udERh
dGFUb0RlbGV0ZVtpXTsKKyAgICBmb250RGF0YVRvRGVsZXRlLmNsZWFyKCk7CiAKICAgICBpZiAo
Z0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSkgewogICAgICAgICBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5PiBrZXlzVG9SZW1vdmU7CkBAIC00NjIsOSArNDYwLDkgQEAgc2l6ZV90IEZvbnRD
YWNoZTo6aW5hY3RpdmVGb250RGF0YUNvdW50KAogICAgIHJldHVybiAwOwogfQogCi1jb25zdCBG
b250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YShjb25zdCBGb250JiBmb250LCBpbnQmIGZh
bWlseUluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKK1Bhc3NSZWZQdHI8Rm9udERh
dGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udCYgZm9udCwgaW50JiBmYW1pbHlJ
bmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7Ci0gICAgRm9udERhdGEqIHJlc3Vs
dCA9IDA7CisgICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQ7CiAKICAgICBpbnQgc3RhcnRJbmRl
eCA9IGZhbWlseUluZGV4OwogICAgIGNvbnN0IEZvbnRGYW1pbHkqIHN0YXJ0RmFtaWx5ID0gJmZv
bnQuZm9udERlc2NyaXB0aW9uKCkuZmFtaWx5KCk7CkBAIC00OTgsMTQgKzQ5NiwxNCBAQCBjb25z
dCBGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YShjCiAKICAgICAgICAgaWYgKGZvbnRT
ZWxlY3RvcikgewogICAgICAgICAgICAgLy8gVHJ5IHRoZSB1c2VyJ3MgcHJlZmVycmVkIHN0YW5k
YXJkIGZvbnQuCi0gICAgICAgICAgICBpZiAoRm9udERhdGEqIGRhdGEgPSBmb250U2VsZWN0b3It
PmdldEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIHN0YW5kYXJkRmFtaWx5KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8Rm9udERh
dGE+IGRhdGEgPSBmb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9u
KCksIHN0YW5kYXJkRmFtaWx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNl
KCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdGlsbCBubyByZXN1bHQuICBIYW5kIGJhY2sg
b3VyIGxhc3QgcmVzb3J0IGZhbGxiYWNrIGZvbnQuCiAgICAgICAgIHJlc3VsdCA9IGdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoZm9udC5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgfQotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBI
YXNoU2V0PEZvbnRTZWxlY3Rvcio+KiBnQ2xpZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAxMjg3NzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsOCBAQAogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgogCkBAIC02MCwxMSArNjIsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBTaG91bGRS
ZXRhaW4geyBSZXRhaW4sIERvTm90UmV0YWluIH07CiAKLSAgICBjb25zdCBGb250RGF0YSogZ2V0
Rm9udERhdGEoY29uc3QgRm9udCYsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciopOwor
ICAgIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnQmLCBpbnQmIGZh
bWlseUluZGV4LCBGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbGVhc2VGb250RGF0YShjb25z
dCBTaW1wbGVGb250RGF0YSopOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQg
YnkgdGhlIHBsYXRmb3JtLgotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMoY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YUZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsK
IAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQgcGxh
dGZvcm1Jbml0KCk7CkBAIC04NCw4ICs4Niw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0VHJh
aXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpOwogCi0g
ICAgU2ltcGxlRm9udERhdGEqIGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFs
c2UsIFNob3VsZFJldGFpbiA9IFJldGFpbik7Ci0gICAgU2ltcGxlRm9udERhdGEqIGdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0YWluID0g
UmV0YWluKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRDYWNoZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOworICAgIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKICAgICBTaW1wbGVGb250
RGF0YSogZ2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpOwogCiAgICAgdm9pZCBhZGRDbGllbnQoRm9udFNlbGVjdG9yKik7CkBAIC05OSw5
ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNv
dW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
LCBTaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9u
dEZhbWlseU5hbWUpOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhRnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRh
aW4sIGNvbnN0IExPR0ZPTlQmLCBBdG9taWNTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNl
bGlmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhXSU5ET1dTKQotICAgIFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgU2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiBmb250LCB3Y2hhcl90KiBvdXRGb250RmFt
aWx5TmFtZSk7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGFGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwg
Y29uc3QgTE9HRk9OVCYsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQpAQCAtMTMxLDEwICsxMzMsMTAgQEAgcHJpdmF0
ZToKICAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGlt
cGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCi0gICAgU2ltcGxlRm9udERhdGEqIGdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250Jik7CiAgICAgRm9u
dFBsYXRmb3JtRGF0YSogY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKLSAgICBTaW1wbGVGb250RGF0YSog
Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSosIFNob3VsZFJldGFpbiA9
IFJldGFpbik7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Q2FjaGVkRm9udERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSosIFNob3VsZFJldGFpbiA9IFJldGFpbik7CiAKICAg
ICAvLyBEb24ndCBwdXJnZSBpZiB0aGlzIGNvdW50IGlzID4gMDsKICAgICBpbnQgbV9wdXJnZVBy
ZXZlbnRDb3VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERhdGEuaAkocmV2aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE1IEBACiAjaW5j
bHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2Rl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKLWNs
YXNzIEZvbnREYXRhIHsKK2NsYXNzIEZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udERh
dGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250RGF0YSk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIEZvbnREYXRhKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCShyZXZp
c2lvbiAxMjg3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFs
bGJhY2tMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEZvbnRG
YWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0YSgpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUZvbnRzOyArK2kpIHsKICAgICAgICAgaWYgKCFtX2ZvbnRMaXN0W2ldLnNlY29uZCkg
ewogICAgICAgICAgICAgQVNTRVJUKCFtX2ZvbnRMaXN0W2ldLmZpcnN0LT5pc1NlZ21lbnRlZCgp
KTsKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEoc3RhdGljX2Nhc3Q8
Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2ZvbnRMaXN0W2ldLmZpcnN0KSk7CisgICAgICAgICAg
ICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4obV9mb250TGlzdFtpXS5maXJzdC5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQog
fQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmRldGVybWluZVBpdGNo
KGNvCiBjb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdChjb25zdCBG
b250KiBmb250LCB1bnNpZ25lZCByZWFsaXplZEZvbnRJbmRleCkgY29uc3QKIHsKICAgICBpZiAo
cmVhbGl6ZWRGb250SW5kZXggPCBtX2ZvbnRMaXN0LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1f
Zm9udExpc3RbcmVhbGl6ZWRGb250SW5kZXhdLmZpcnN0OyAvLyBUaGlzIGZhbGxiYWNrIGZvbnQg
aXMgYWxyZWFkeSBpbiBvdXIgbGlzdC4KKyAgICAgICAgcmV0dXJuIG1fZm9udExpc3RbcmVhbGl6
ZWRGb250SW5kZXhdLmZpcnN0LmdldCgpOyAvLyBUaGlzIGZhbGxiYWNrIGZvbnQgaXMgYWxyZWFk
eSBpbiBvdXIgbGlzdC4KIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgcGFzc2luZyBpbiBz
b21lIGNyYXp5IHZhbHVlIGhlcmUuCiAgICAgQVNTRVJUKHJlYWxpemVkRm9udEluZGV4ID09IG1f
Zm9udExpc3Quc2l6ZSgpKTsKQEAgLTEwNCwyMSArMTA0LDIxIEBAIGNvbnN0IEZvbnREYXRhKiBG
b250RmFsbGJhY2tMaXN0Ojpmb250RGEKICAgICAvLyBpbiB8bV9mYW1pbHlJbmRleHwsIHNvIHRo
YXQgd2UgbmV2ZXIgc2NhbiB0aGUgc2FtZSBzcG90IGluIHRoZSBsaXN0IHR3aWNlLiAgZ2V0Rm9u
dERhdGEgd2lsbCBhZGp1c3Qgb3VyCiAgICAgLy8gfG1fZmFtaWx5SW5kZXh8IGFzIGl0IHNjYW5z
IGZvciB0aGUgcmlnaHQgZm9udCB0byBtYWtlLgogICAgIEFTU0VSVChmb250Q2FjaGUoKS0+Z2Vu
ZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7Ci0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9
IGZvbnRDYWNoZSgpLT5nZXRGb250RGF0YSgqZm9udCwgbV9mYW1pbHlJbmRleCwgbV9mb250U2Vs
ZWN0b3IuZ2V0KCkpOworICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0ID0gZm9udENhY2hlKCkt
PmdldEZvbnREYXRhKCpmb250LCBtX2ZhbWlseUluZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7
CiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0
IEZvbnREYXRhKiwgYm9vbD4ocmVzdWx0LCByZXN1bHQtPmlzQ3VzdG9tRm9udCgpKSk7CisgICAg
ICAgIG1fZm9udExpc3QuYXBwZW5kKHBhaXI8UmVmUHRyPEZvbnREYXRhPiwgYm9vbD4ocmVzdWx0
LCByZXN1bHQtPmlzQ3VzdG9tRm9udCgpKSk7CiAgICAgICAgIGlmIChyZXN1bHQtPmlzTG9hZGlu
ZygpKQogICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwogICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKIHZvaWQgRm9u
dEZhbGxiYWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSkKIHsKICAgICBtX2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsK
ICAgICBBU1NFUlQoZm9udENhY2hlKCktPmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwot
ICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250
RGF0YSgmcGxhdGZvcm1EYXRhKTsKLSAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZv
bnREYXRhKiwgYm9vbD4oZm9udERhdGEsIGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSkpOworICAg
IFJlZlB0cjxGb250RGF0YT4gZm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERh
dGEoJnBsYXRmb3JtRGF0YSk7CisgICAgbV9mb250TGlzdC5hcHBlbmQocGFpcjxSZWZQdHI8Rm9u
dERhdGE+LCBib29sPihmb250RGF0YSwgZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKSk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
RmFsbGJhY2tMaXN0LmgJKHJldmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyAr
ODQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZWxlYXNlRm9udERhdGEoKTsKIAotICAgIG11
dGFibGUgVmVjdG9yPHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPiwgMT4gbV9mb250TGlzdDsK
KyAgICBtdXRhYmxlIFZlY3RvcjxwYWlyPFJlZlB0cjxGb250RGF0YT4sIGJvb2w+LCAxPiBtX2Zv
bnRMaXN0OwogICAgIG11dGFibGUgR2x5cGhQYWdlcyBtX3BhZ2VzOwogICAgIG11dGFibGUgR2x5
cGhQYWdlVHJlZU5vZGUqIG1fcGFnZVplcm87CiAgICAgbXV0YWJsZSBjb25zdCBTaW1wbGVGb250
RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHJldmlzaW9uIDEy
ODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDggQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwg
R2x5cGhQYWdlKj4gRm9udDo6ZwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZm9udERl
c2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmln
aHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
dmVydGljYWxSaWdodEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVu
dGF0aW9uRm9udERhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaFBhZ2VU
cmVlTm9kZSogdmVydGljYWxSaWdodE5vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENo
aWxkKHZlcnRpY2FsUmlnaHRGb250RGF0YSwgcGFnZU51bWJlcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEg
PSBkYXRhLmZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiB2ZXJ0aWNhbFJpZ2h0
Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodmVydGljYWxSaWdodEZvbnRE
YXRhLmdldCgpLCBwYWdlTnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlw
aFBhZ2UqIHZlcnRpY2FsUmlnaHRQYWdlID0gdmVydGljYWxSaWdodE5vZGUtPnBhZ2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodFBhZ2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhEYXRhIHZlcnRpY2FsUmlnaHREYXRhID0g
dmVydGljYWxSaWdodFBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKQEAgLTExMSw4ICsx
MTEsOCBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250OjpnCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9wYWlyKHZlcnRpY2FsUmln
aHREYXRhLCB2ZXJ0aWNhbFJpZ2h0UGFnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi50
ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHVwcmlnaHRGb250RGF0YSA9
IGRhdGEuZm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHVwcmlnaHROb2RlID0gR2x5cGhQ
YWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh1cHJpZ2h0Rm9udERhdGEsIHBhZ2VOdW1iZXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdXByaWdo
dEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdXByaWdodE5v
ZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHVwcmlnaHRGb250RGF0YS5nZXQo
KSwgcGFnZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlKiB1
cHJpZ2h0UGFnZSA9IHVwcmlnaHROb2RlLT5wYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHVwcmlnaHRQYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdseXBoRGF0YSB1cHJpZ2h0RGF0YSA9IHVwcmlnaHRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoYyk7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBh
Z2UqPiBGb250OjpnCiAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIHZhcmlhbnRGb250RGF0YSBmdW5jdGlvbiBzaG91bGQgbm90
IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgICAgICAgICAvLyBCdXQgaWYgaXQgZG9l
cywgd2Ugd2lsbCBqdXN0IHJlbmRlciB0aGUgY2FwaXRhbCBsZXR0ZXIgYmlnLgotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogdmFyaWFudEZvbnREYXRhID0gZGF0YS5m
b250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEg
PSBkYXRhLmZvbnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlh
bnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250RGF0YSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX3BhaXIoZGF0YSwgcGFnZSk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHZhcmlhbnROb2RlID0gR2x5cGhQYWdlVHJl
ZU5vZGU6OmdldFJvb3RDaGlsZCh2YXJpYW50Rm9udERhdGEsIHBhZ2VOdW1iZXIpOworICAgICAg
ICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdmFyaWFudE5vZGUgPSBHbHlwaFBhZ2VU
cmVlTm9kZTo6Z2V0Um9vdENoaWxkKHZhcmlhbnRGb250RGF0YS5nZXQoKSwgcGFnZU51bWJlcik7
CiAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZSogdmFyaWFudFBhZ2UgPSB2YXJpYW50Tm9k
ZS0+cGFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudFBhZ2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gdmFyaWFudFBhZ2UtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRh
LCBHbHlwaFBhZ2UqPiBGb250OjpnCiAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChj
KTsKICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKICAgICB9Ci0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGNoYXJhY3RlckZvbnREYXRhID0gZm9udENhY2hlKCktPmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycygqdGhpcywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpOworICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gY2hhcmFjdGVyRm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Rm9u
dERhdGFGb3JDaGFyYWN0ZXJzKCp0aGlzLCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCk7CiAg
ICAgaWYgKGNoYXJhY3RlckZvbnREYXRhKSB7CiAgICAgICAgIGlmIChjaGFyYWN0ZXJGb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhY2hhcmFjdGVy
Rm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChj
KSkKICAgICAgICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwpAQCAtMjA3
LDcgKzIwNyw3IEBAIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IEZvbnQ6OmcKICAg
ICB9CiAgICAgaWYgKGNoYXJhY3RlckZvbnREYXRhKSB7CiAgICAgICAgIC8vIEdvdCB0aGUgZmFs
bGJhY2sgZ2x5cGggYW5kIGZvbnQuCi0gICAgICAgIEdseXBoUGFnZSogZmFsbGJhY2tQYWdlID0g
R2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZChjaGFyYWN0ZXJGb250RGF0YSwgcGFnZU51
bWJlciktPnBhZ2UoKTsKKyAgICAgICAgR2x5cGhQYWdlKiBmYWxsYmFja1BhZ2UgPSBHbHlwaFBh
Z2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKGNoYXJhY3RlckZvbnREYXRhLmdldCgpLCBwYWdlTnVt
YmVyKS0+cGFnZSgpOwogICAgICAgICBHbHlwaERhdGEgZGF0YSA9IGZhbGxiYWNrUGFnZSAmJiBm
YWxsYmFja1BhZ2UtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKGMpID8gZmFsbGJhY2tQYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYykgOiBjaGFyYWN0ZXJGb250RGF0YS0+bWlzc2luZ0dseXBoRGF0
YSgpOwogICAgICAgICAvLyBDYWNoZSBpdCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHN5c3RlbSBm
YWxsYmFjayBhZ2FpbiBuZXh0IHRpbWUuCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZh
cmlhbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxl
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRTZWxlY3Rvci5oCShyZXZpc2lvbiAxMjg3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2RlZmluZSBGb250U2VsZWN0b3JfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM5LDcgQEAgY2xhc3MgRm9udFNlbGVjdG9y
Q2xpZW50OwogY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVj
dG9yPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgeyB9Ci0gICAgdmly
dHVhbCBGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZv
bnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZh
bGlkYXRlZCgpIHsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaFBhZ2VUcmVlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiAxMjg3NzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpp
bml0aWFsaXplUGFnZShjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHplcm9GaWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyB8PSBmaWxsKHBhZ2VU
b0ZpbGwsIGZyb20sIHRvIC0gZnJvbSwgYnVmZmVyICsgZnJvbSAqIChzdGFydCA8IDB4MTAwMDAg
PyAxIDogMiksICh0byAtIGZyb20pICogKHN0YXJ0IDwgMHgxMDAwMCA/IDEgOiAyKSwgcmFuZ2Uu
Zm9udERhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlR2x5cGhzIHw9IGZpbGwo
cGFnZVRvRmlsbCwgZnJvbSwgdG8gLSBmcm9tLCBidWZmZXIgKyBmcm9tICogKHN0YXJ0IDwgMHgx
MDAwMCA/IDEgOiAyKSwgKHRvIC0gZnJvbSkgKiAoc3RhcnQgPCAweDEwMDAwID8gMSA6IDIpLCBy
YW5nZS5mb250RGF0YSgpLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3Jh
dGNoUGFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0byA8PSAgc3Rh
dGljX2Nhc3Q8aW50PihHbHlwaFBhZ2U6OnNpemUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBqID0gZnJvbTsgaiA8IHRvOyBqKyspIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAJ
KHJldmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nl
Z21lbnRlZEZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCBjb25z
dCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6CiAgICAgVmVjdG9yPEZvbnREYXRh
UmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKICAgICBmb3IgKFZl
Y3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT5mcm9tKCkgPD0gYyAmJiBpdC0+
dG8oKSA+PSBjKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5mb250RGF0YSgpOworICAgICAgICAg
ICAgcmV0dXJuIGl0LT5mb250RGF0YSgpLmdldCgpOwogICAgIH0KLSAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udERhdGEoKS5nZXQo
KTsKIH0KIAogYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXIoVUNoYXIz
MiBjKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVu
dGVkRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TZWdtZW50ZWRGb250RGF0YS5oCShyZXZpc2lvbiAxMjg3NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNpbXBsZUZvbnRE
YXRhOwogCiBzdHJ1Y3QgRm9udERhdGFSYW5nZSB7Ci0gICAgRm9udERhdGFSYW5nZShVQ2hhcjMy
IGZyb20sIFVDaGFyMzIgdG8sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICBG
b250RGF0YVJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gZm9udERhdGEpCiAgICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICwgbV90
byh0bykKICAgICAgICAgLCBtX2ZvbnREYXRhKGZvbnREYXRhKQpAQCAtNDMsMTYgKzQzLDE4IEBA
IHN0cnVjdCBGb250RGF0YVJhbmdlIHsKIAogICAgIFVDaGFyMzIgZnJvbSgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJvbTsgfQogICAgIFVDaGFyMzIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250
RGF0YTsgfQorICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGF0YTsgfQogCiBwcml2YXRlOgogICAgIFVDaGFyMzIgbV9mcm9tOwog
ICAgIFVDaGFyMzIgbV90bzsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YTsK
KyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CiB9OwogCiBjbGFzcyBTZWdt
ZW50ZWRGb250RGF0YSA6IHB1YmxpYyBGb250RGF0YSB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U2VnbWVudGVkRm9udERhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTZWdtZW50ZWRGb250RGF0YSk7IH0KKyAKICAgICB2aXJ0dWFsIH5TZWdtZW50ZWRGb250RGF0
YSgpOwogCiAgICAgdm9pZCBhcHBlbmRSYW5nZShjb25zdCBGb250RGF0YVJhbmdlJiByYW5nZSkg
eyBtX3Jhbmdlcy5hcHBlbmQocmFuZ2UpOyB9CkBAIC02NCw2ICs2Niw4IEBAIHB1YmxpYzoKICNl
bmRpZgogCiBwcml2YXRlOgorICAgIFNlZ21lbnRlZEZvbnREYXRhKCkgeyB9CisKICAgICB2aXJ0
dWFsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwg
aW50IGxlbmd0aCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHJldmlzaW9uIDEyODc3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcwLDM2ICsxNzAsMzYgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6aXNTZWdt
ZW50ZWQoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNp
bXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6dmVydGljYWxSaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEp
CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXND
dXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbikgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHZlcnRpY2FsUmlnaHRQbGF0
Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEpOwogICAgICAgICB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1E
YXRhLnNldE9yaWVudGF0aW9uKEhvcml6b250YWwpOwotICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRh
KHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSkp
OworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uID0g
Y3JlYXRlKHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwg
dHJ1ZSk7CiAgICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdo
dE9yaWVudGF0aW9uLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dmVydGlj
YWxSaWdodE9yaWVudGF0aW9uOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6
OnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERh
dGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uKQotICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRh
KG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpKTsKLSAgICByZXR1
cm4gbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbi5nZXQoKTsKKyAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbiA9IGNyZWF0ZShtX3BsYXRmb3Jt
RGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlLCB0cnVlKTsKKyAgICByZXR1cm4gbV9kZXJpdmVk
Rm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbjsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBs
ZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6YnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBj
b25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlm
ICghbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCkgewotICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRh
KG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaCA9IGNyZWF0ZShtX3BsYXRmb3JtRGF0YSwgaXND
dXN0b21Gb250KCksIGZhbHNlKTsKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklk
ZW9ncmFwaC0+bV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrID0gdHJ1ZTsKICAgICB9Ci0gICAg
cmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGguZ2V0KCk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGg7CiB9CiAKICNpZm5kZWYgTkRF
QlVHCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUZvbnREYXRhLmgJKHJldmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3OSwx
NiBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgotICAgIFNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlz
Q3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9y
aWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGNyZWF0ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIGJv
b2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNU
ZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTaW1wbGVGb250RGF0YShwbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCwgaXNM
b2FkaW5nLCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKSk7CisgICAgfQogCiAgICAgLy8gVXNl
ZCB0byBjcmVhdGUgU1ZHIEZvbnRzLgotICAgIFNpbXBsZUZvbnREYXRhKFBhc3NPd25QdHI8QWRk
aXRpb25hbEZvbnREYXRhPiwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBjcmVhdGUoUGFzc093blB0cjxBZGRpdGlvbmFsRm9udERhdGE+IGZvbnREYXRhLCBmbG9hdCBm
b250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltcGxlRm9udERhdGEoZm9udERhdGEsIGZv
bnRTaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICB9CiAKICAgICB2
aXJ0dWFsIH5TaW1wbGVGb250RGF0YSgpOwogCkBAIC05MSwxMSArOTcsMTEgQEAgcHVibGljOgog
ICAgIGNvbnN0IE9wZW5UeXBlVmVydGljYWxEYXRhKiB2ZXJ0aWNhbERhdGEoKSBjb25zdCB7IHJl
dHVybiBtX3ZlcnRpY2FsRGF0YTsgfQogI2VuZGlmCiAKLSAgICBTaW1wbGVGb250RGF0YSogc21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgU2ltcGxl
Rm9udERhdGEqIGVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNv
bnN0OwotICAgIFNpbXBsZUZvbnREYXRhKiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29u
c3Q7CiAKLSAgICBTaW1wbGVGb250RGF0YSogdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZhcmlhbnRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAodmFyaWFudCkgewogICAgICAgICBjYXNlIFNtYWxsQ2Fwc1Zh
cmlhbnQ6CkBAIC0xMTIsOCArMTE4LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxTaW1wbGVGb250RGF0YSo+KHRoaXMpOwogICAgIH0KIAotICAgIFNpbXBsZUZvbnREYXRh
KiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwotICAgIFNpbXBsZUZv
bnREYXRhKiB1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdXByaWdodE9yaWVudGF0aW9uRm9u
dERhdGEoKSBjb25zdDsKIAogICAgIGJvb2wgaGFzVmVydGljYWxHbHlwaHMoKSBjb25zdCB7IHJl
dHVybiBtX2hhc1ZlcnRpY2FsR2x5cGhzOyB9CiAgICAgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZh
bGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrOyB9CkBA
IC0yMDEsNiArMjA3LDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgorICAgIFNpbXBs
ZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9udCA9IGZh
bHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJh
Y2sgPSBmYWxzZSk7CisKKyAgICBTaW1wbGVGb250RGF0YShQYXNzT3duUHRyPEFkZGl0aW9uYWxG
b250RGF0YT4gLCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY0l0YWxpYyk7CisKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwogICAgIHZvaWQgcGxhdGZv
cm1HbHlwaEluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpOwpAQCAtMjEw
LDcgKzIyMCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbW1vbkluaXQoKTsKIAotICAgIFBh
c3NPd25QdHI8U2ltcGxlRm9udERhdGE+IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7CiAKICNpZiAoUExBVEZPUk0oV0lOKSAmJiAhT1Mo
V0lOQ0UpKSBcCiAgICAgfHwgKE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKFdYKSkKQEAgLTI1NCwx
MSArMjY0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIH5EZXJpdmVkRm9udERhdGEoKTsKIAogICAg
ICAgICBib29sIGZvckN1c3RvbUZvbnQ7Ci0gICAgICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4g
c21hbGxDYXBzOwotICAgICAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFyazsK
LSAgICAgICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7Ci0gICAgICAg
IE93blB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOwotICAgICAg
ICBPd25QdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKKyAgICAgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHM7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250
RGF0YT4gZW1waGFzaXNNYXJrOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGJyb2tl
bklkZW9ncmFwaDsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb247CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdXByaWdodE9yaWVu
dGF0aW9uOwogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhE
QVJXSU4pKQogICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVm
PiBjb21wb3NpdGVGb250UmVmZXJlbmNlczsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OCw3ICs5OCw3IEBAIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogewogfQogCi1j
b25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCkKIHsKICAgICBpY3U6OkxvY2FsZSBsb2NhbGUgPSBpY3U6OkxvY2FsZTo6Z2V0RGVmYXVsdCgp
OwogICAgIFBsYXRmb3JtU3VwcG9ydDo6Rm9udEZhbWlseSBmYW1pbHk7CkBAIC0xMTAsMTIgKzEx
MCwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgcmV0
dXJuIGdldENhY2hlZEZvbnREYXRhKGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250
RGVzY3JpcHRpb24oKSwgYXRvbWljRmFtaWx5LCBEb05vdFJldGFpbiksIERvTm90UmV0YWluKTsK
IH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICBy
ZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRh
aW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpn
ZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIHNlcmlmLCAoIlNlcmlmIikpOwogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBtb25vc3BhY2UsICgiTW9ub3NwYWNlIikpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMTI4Nzc0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsMTIgKzMxOCwxMiBAQCBzdGF0
aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0ZXIoY29uc3QKIH0KIAogLy8gVHJpZXMgdGhlIGdp
dmVuIGZvbnQgYW5kIHNhdmUgaXQgfG91dEZvbnRGYW1pbHlOYW1lfCBpZiBpdCBzdWNjZWVkcy4K
LVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWlu
IHNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgd2NoYXJfdCogb3V0Rm9udEZhbWls
eU5hbWUpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnREYXRhRnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgd2No
YXJfdCogb3V0Rm9udEZhbWlseU5hbWUpCiB7Ci0gICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
ID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmb250LmxmRmFjZU5hbWUsIGZh
bHNlLCBzaG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEg
PSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZvbnQubGZGYWNlTmFtZSwgZmFs
c2UsIHNob3VsZFJldGFpbik7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAgICBtZW1jcHkob3V0
Rm9udEZhbWlseU5hbWUsIGZvbnQubGZGYWNlTmFtZSwgc2l6ZW9mKGZvbnQubGZGYWNlTmFtZSkp
OwotICAgIHJldHVybiBmb250RGF0YTsKKyAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwog
fQogCiBzdGF0aWMgTE9ORyB0b0dESUZvbnRXZWlnaHQoRm9udFdlaWdodCBmb250V2VpZ2h0KQpA
QCAtNDA2LDcgKzQwNiw3IEBAIHN0cnVjdCBHZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250UHJvY0Rh
dGEKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24qIG1fZm9udERlc2NyaXB0aW9uOwogICAgIEZv
bnRDYWNoZTo6U2hvdWxkUmV0YWluIG1fc2hvdWxkUmV0YWluOwogICAgIHdjaGFyX3QqIG1fZm9u
dE5hbWU7Ci0gICAgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBtX2ZvbnREYXRhOwogfTsKIAogc3RhdGljIGludCBDQUxMQkFDSyBnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250UHJvYyhjb25zdCBMT0dGT05UKiBsb2dGb250LCBjb25zdCBURVhU
TUVUUklDKiBtZXRyaWNzLCBEV09SRCBmb250VHlwZSwgTFBBUkFNIGxQYXJhbSkKQEAgLTQyMyw3
ICs0MjMsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIAogLy8gR2l2ZW4gdGhl
IGRlc2lyZWQgYmFzZSBmb250LCB0aGlzIHdpbGwgY3JlYXRlIGEgU2ltcGxlRm9udERhdGEgZm9y
IGEgc3BlY2lmaWMKIC8vIGZvbnQgdGhhdCBjYW4gYmUgdXNlZCB0byByZW5kZXIgdGhlIGdpdmVu
IHJhbmdlIG9mIGNoYXJhY3RlcnMuCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgcGFz
c2luZyBmb250RGVzY3JpcHRpb24uZG9taW5hbnRTY3JpcHQoKQogICAgIC8vIHRvIEdldEZhbGxi
YWNrRmFtaWx5IGhlcmUuCkBAIC01MDgsMTIgKzUwOCwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRGb250CiAKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6
Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udCYgZm9udCkKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7
CiAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSBnZW5lcmljID0gZGVzY3Jp
cHRpb24uZ2VuZXJpY0ZhbWlseSgpOwogCkBAIC01MzAsOSArNTMwLDkgQEAgU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgIGVsc2UgaWYgKGdlbmVyaWMgPT0gRm9u
dERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCiAgICAgICAgIGZvbnRTdHIgPSBjb3VyaWVy
U3RyOwogCi0gICAgU2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnQgPSBnZXRDYWNoZWRGb250RGF0
YShkZXNjcmlwdGlvbiwgZm9udFN0ciwgZmFsc2UsIHNob3VsZFJldGFpbik7CisgICAgUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRp
b24sIGZvbnRTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOwogICAgIGlmIChzaW1wbGVGb250KQot
ICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVs
ZWFzZSgpOwogCiAgICAgLy8gRmFsbCBiYWNrIHRvIHN5c3RlbSBmb250cyBhcyBXaW4gU2FmYXJp
IGRvZXMgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgICAvLyByZXR1cm4gYSB2YWxpZCBm
b250LiBPbmNlIHdlIGZpbmQgYSB2YWxpZCBzeXN0ZW0gZm9udCwgd2Ugc2F2ZSBpdHMgbmFtZQpA
QCAtNTQ2LDcgKzU0Niw3IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNv
cnQKICAgICAgICAgTE9HRk9OVCBkZWZhdWx0R1VJTG9nRm9udDsKICAgICAgICAgR2V0T2JqZWN0
KGRlZmF1bHRHVUlGb250LCBzaXplb2YoZGVmYXVsdEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxv
Z0ZvbnQpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9u
QW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBkZWZhdWx0R1VJTG9nRm9udCwg
ZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAg
ICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICB9CiAKICAgICAvLyBGYWxs
IGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRzLgpAQCAtNTU0LDE1ICs1NTQsMTUgQEAg
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgIG5vbkNsaWVudE1l
dHJpY3MuY2JTaXplID0gc2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpOwogICAgIGlmIChTeXN0ZW1Q
YXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mKG5vbkNsaWVudE1l
dHJpY3MpLCAmbm9uQ2xpZW50TWV0cmljcywgMCkpIHsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQg
PSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNob3VsZFJl
dGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkK
LSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBs
ZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURl
c2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRN
ZXRyaWNzLmxmTWVudUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJu
IHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAg
ICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250
KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZTdGF0dXNGb250
LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAg
ICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxl
Rm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hv
dWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5h
bWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4g
c2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNs
aWVudE1ldHJpY3MubGZTbUNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAg
ICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVs
ZWFzZSgpOwogICAgIH0KIAogICAgIC8vIEZhbGwgYmFjayB0byBhbGwgdGhlIGZvbnRzIGluc3Rh
bGxlZCBpbiB0aGlzIFBDLiBXaGVuIGEgZm9udCBoYXMgYQpAQCAtNTc2LDcgKzU3Niw3IEBAIFNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICAgICAgRW51bUZvbnRG
YW1pbGllcyhkYywgMCwgZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udFByb2MsIHJlaW50ZXJwcmV0
X2Nhc3Q8TFBBUkFNPigmcHJvY0RhdGEpKTsKIAogICAgICAgICBpZiAocHJvY0RhdGEubV9mb250
RGF0YSkKLSAgICAgICAgICAgIHJldHVybiBwcm9jRGF0YS5tX2ZvbnREYXRhOworICAgICAgICAg
ICAgcmV0dXJuIHByb2NEYXRhLm1fZm9udERhdGEucmVsZWFzZSgpOwogICAgIH0KIAogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFD
aHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksMzQgKzEwOSwzNCBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybURlc3Ryb3koKQogewogfQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsK
ICAgICBMT0dGT05UIHdpbkZvbnQ7CiAgICAgR2V0T2JqZWN0KG1fcGxhdGZvcm1EYXRhLmhmb250
KCksIHNpemVvZihMT0dGT05UKSwgJndpbkZvbnQpOwogICAgIGZsb2F0IHNjYWxlZFNpemUgPSBz
Y2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKTsKICAgICB3aW5Gb250
LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2NhbGVkU2l6ZSk7CiAgICAgSEZPTlQgaGZvbnQgPSBDcmVh
dGVGb250SW5kaXJlY3QoJndpbkZvbnQpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxl
Rm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShoZm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURh
dGEub3JpZW50YXRpb24oKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgIHJldHVybiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUs
IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwog
fQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc093blB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRh
OjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNt
YWxsQ2FwcykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjcpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFz
aXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0CitQYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNN
YXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERh
dGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAu
NSk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsK
KyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogYm9vbCBT
aW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAko
cmV2aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3
IEBAIEZjUGF0dGVybiogZmluZEJlc3RGb250R2l2ZW5GYWxsYmFja3MoY28KICAgICByZXR1cm4g
RmNGb250U2V0TWF0Y2goMCwgc2V0cywgMSwgcGF0dGVybiwgJmZvbnRDb25maWdSZXN1bHQpOwog
fQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKIHsKICAgICBSZWZQdHI8RmNQYXR0ZXJuPiBwYXR0ZXJuID0gYWRvcHRSZWYoY3Jl
YXRlRm9udENvbmZpZ1BhdHRlcm5Gb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpOwog
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhID0gZm9udC5wcmltYXJ5Rm9udCgp
LT5wbGF0Zm9ybURhdGEoKTsKQEAgLTEwMCwxMiArMTAwLDEyIEBAIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmFs
dGVybmF0ZUZvbnREYXRhLCBEb05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmKQorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250JikKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFp
bikKIHsKICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3Ro
ZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5nIEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZv
ciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFs
bG93ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9T
aW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2
aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE3ICs4
NywxNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1Q
YXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9ybURh
dGEuc2NhbGVkRm9udCgpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRh
KEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRm
b3JtRGF0YS5zY2FsZWRGb250KCkpLAorICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KEZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRm
b3JtRGF0YS5zY2FsZWRGb250KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BsYXRmb3JtRGF0
YS5zeW50aGV0aWNPYmxpcXVlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgp
KTsKQEAgLTEwNSwxNyArMTA1LDE3IEBAIFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6
c21hbGxDYXAKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250
RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQog
Ci1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnRE
YXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9
IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDYWNoZU1hYy5tbQkocmV2aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTks
NyArOTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBcHBLaXRGb250V2VpZ2h0Qm9sCiAgICAg
cmV0dXJuIGFwcEtpdEZvbnRXZWlnaHQgPj0gNzsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNoYXIzMiBj
aGFyYWN0ZXI7CiAgICAgVTE2X0dFVChjaGFyYWN0ZXJzLCAwLCAwLCBsZW5ndGgsIGNoYXJhY3Rl
cik7CkBAIC0xNjYsMTIgKzE2NiwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250LCBE
b05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZv
bnQpCiB7CiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcg
YSBtYXRjaCBiYXNlZCBvbiAKICAgICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhl
IHRoZSByZXF1ZXN0ZWQgbmFtZXMuICBGb3IgZXhhbXBsZSwgd2UnbGwKICAgICAvLyBtYXRjaCBh
bnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAgICBTaW1wbGVG
b250RGF0YSogc2ltcGxlRm9udERhdGEgPSAwOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
c2ltcGxlRm9udERhdGE7CiAgICAgY29uc3QgRm9udEZhbWlseSogY3VyckZhbWlseSA9ICZmb250
LmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpOwogICAgIHdoaWxlIChjdXJyRmFtaWx5ICYmICFz
aW1wbGVGb250RGF0YSkgewogICAgICAgICBpZiAoY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3Ro
KCkpIHsKQEAgLTE4NCwxOCArMTg0LDE4IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dFNpbWlsYXJGb24KICAgICAgICAgY3VyckZhbWlseSA9IGN1cnJGYW1pbHktPm5leHQoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gc2ltcGxlRm9udERhdGE7CisgICAgcmV0dXJuIHNpbXBsZUZvbnRE
YXRhLnJlbGVhc2UoKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
U2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgdGltZXNTdHIsICgiVGltZXMiKSk7CiAKICAg
ICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIn
cyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZh
dWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgot
ICAgIFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOworICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShmb250
RGVzY3JpcHRpb24sIHRpbWVzU3RyLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoc2lt
cGxlRm9udERhdGEpCi0gICAgICAgIHJldHVybiBzaW1wbGVGb250RGF0YTsKKyAgICAgICAgcmV0
dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKIAogICAgIC8vIFRoZSBUaW1lcyBmYWxsYmFj
ayB3aWxsIGFsbW9zdCBhbHdheXMgd29yaywgYnV0IGluIHRoZSBoaWdobHkgdW51c3VhbCBjYXNl
IHdoZXJlCiAgICAgLy8gdGhlIHVzZXIgZG9lc24ndCBoYXZlIGl0LCB3ZSBmYWxsIGJhY2sgb24g
THVjaWRhIEdyYW5kZSBiZWNhdXNlIHRoYXQncwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2
aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTIgKzMxNSwxMiBAQCB2
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogICAgIH0KIH0KIAotUGFzc093
blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3Rv
cikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVh
dGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAg
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOwog
ICAgICAgICBzY2FsZWRGb250RGF0YS5tX3NpemUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBz
Y2FsZUZhY3RvcjsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShz
Y2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnRE
YXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CkBAIC0zNDUsMzEgKzM0NSwzMSBAQCBQYXNzT3du
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgICAgIHNjYWxlZEZvbnREYXRh
Lm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzaykgJiYg
IShzY2FsZWRGb250VHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7CiAKICAgICAgICAgLy8gU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpIHRha2VzIGNhcmUgb2Ygbm90IGRlbGV0aW5n
IHRoZSBjYWNoZWQgZm9udCBkYXRhIHR3aWNlLgotICAgICAgICByZXR1cm4gYWRvcHRQdHIoZm9u
dENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZzY2FsZWRGb250RGF0YSkpOworICAgICAgICBy
ZXR1cm4gZm9udENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZzY2FsZWRGb250RGF0YSk7CiAg
ICAgfQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpz
bWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENh
cHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
IHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5z
bWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fw
c0ZvbnRTaXplTXVsdGlwbGllcik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNt
YWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsK
IH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRG
b250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01h
cmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41Zik7CiAKLSAgICBy
ZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4g
bV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0
YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9u
dENhY2hlUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAkocmV2aXNpb24gMTI4Nzc0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxNyArMzUsMTcgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3Jt
SW5pdCgpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1jb25zdCBTaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBy
ZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkK
IHsKICAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFz
dFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICAv
LyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBk
ZWZhdWx0IGZvbnQgaGVyZS4KICAgICAvLyBGb3Igbm93IHdlJ2xsIHBpY2sgdGhlIGRlZmF1bHQg
dGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBh
bmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9w
YW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAkocmV2aXNpb24gMTI4Nzc0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDMyICs4NCwzMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QK
IHsKICAgICBGb250RGVzY3JpcHRpb24gZGVzYyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZShzY2FsZUZhY3RvciAqIGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURh
dGEoZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1pbHkoKSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBTaW1wbGVGb250RGF0YShwbGF0Zm9ybURhdGEpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERh
dGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9u
dERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6
OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwg
LjcpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7Cisg
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnRE
YXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShp
c0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
KQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVk
Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNSk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9u
dERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyazsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cAkocmV2aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udENhY2hlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHN0YXRp
YyBRUmF3Rm9udCByYXdGb250Rm9yQ2hhcmFjdGVycyhjb24KICAgICByZXR1cm4gZ2x5cGhzLnJh
d0ZvbnQoKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERh
dGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRG
b250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZzo6ZnJv
bVJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5n
dGgpOwogICAgIFFSYXdGb250IGNvbXB1dGVkRm9udCA9IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKHFz
dHJpbmcsIGZvbnQucmF3Rm9udCgpKTsKQEAgLTczLDEyICs3MywxMiBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRh
KCZhbHRlcm5hdGVGb250LCBEb05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBz
aG91bGRSZXRhaW4pCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nIGZhbGxiYWNrRmFtaWx5ID0g
UUZvbnQoZm9udERlc2NyaXB0aW9uLmZhbWlseSgpLmZhbWlseSgpKS5sYXN0UmVzb3J0RmFtaWx5
KCk7CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKG5ldyBGb250UGxhdGZvcm1EYXRhKGZv
bnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGYW1pbHkpLCBzaG91bGRSZXRhaW4pOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9u
dERhdGFRdC5jcHAJKHJldmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwz
MCArNjEsMzAgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbAogICAg
IHJldHVybiBhZHZhbmNlcy5hdCgwKS54KCk7CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlZFNpemUgPSBscm91bmRmKGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHNjYWxlRmFjdG9yKTsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEsIHNj
YWxlZFNpemUpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXpl
KSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24s
IHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21h
bGxDYXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwog
fQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZv
bnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFy
ayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRnJh
Y3Rpb24pOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0
KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIEZs
b2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hl
U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9Gb250Q2FjaGVTa2lhLmNwcAkocmV2aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsOSArNTQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIHsKIH0K
IAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnQmIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxl
bmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKQogewogICAgIGljdTo6TG9jYWxlIGxvY2FsZSA9IGljdTo6TG9jYWxlOjpnZXRE
ZWZhdWx0KCk7CiAgICAgUGxhdGZvcm1TdXBwb3J0OjpGb250RmFtaWx5IGZhbWlseTsKQEAgLTkz
LDEyICs5MSwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAg
ICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZwbGF0Zm9ybURhdGEsIERvTm90UmV0YWluKTsK
IH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICBy
ZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRh
aW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpn
ZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIHNhbnNTdHIsICgiU2FucyIpKTsKICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2VyaWZTdHIsICgiU2VyaWYiKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tp
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9TaW1wbGVGb250RGF0YVNraWEuY3BwCShyZXZpc2lvbiAxMjg3NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3MCwzMCArMTcwLDMwIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtRGVzdHJveSgpCiB7CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewog
ICAgIGNvbnN0IGZsb2F0IHNjYWxlZFNpemUgPSBscm91bmRmKGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFNpemUoKSAqIHNjYWxlRmFjdG9yKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBs
ZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEsIHNjYWxlZFNpemUpLCBp
c0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0
ZShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21G
b250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFs
bENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsK
ICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9
IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFs
bENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0Zy
YWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgp
OworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVG
b250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVh
dGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRnJhY3Rpb24pOwogCi0g
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9u
dERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2FjaGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiAxMjg3NzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg2LDEwICsxODYsMTAgQEAgc3RhdGljIEhGT05UIGNyZWF0ZU1MYW5nRm9udChJ
TUxhbmdGb250TAogICAgIHJldHVybiBoZm9udDsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNoYXIgY2hh
cmFjdGVyID0gY2hhcmFjdGVyc1swXTsKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSAw
OworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGE7CiAgICAgSFduZERDIGhkYygw
KTsKICAgICBIRk9OVCBwcmltYXJ5Rm9udCA9IGZvbnQucHJpbWFyeUZvbnQoKS0+Zm9udERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyKS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKICAgICBIR0RJ
T0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBwcmltYXJ5Rm9udCk7CkBAIC0yOTMsMjQg
KzI5MywyNCBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAg
ICAgIERlbGV0ZU9iamVjdChoZm9udCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGZvbnREYXRhOwor
ICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFp
biwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBT
aG91bGRSZXRhaW4gc2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiBmb250LCBBdG9taWNTdHJp
bmcmIG91dEZvbnRGYW1pbHlOYW1lKQogewogICAgIEF0b21pY1N0cmluZyBmYW1pbHlOYW1lID0g
U3RyaW5nKGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VT
SVpFKSk7Ci0gICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKKyAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoZm9u
dERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5TmFtZTsKLSAgICByZXR1
cm4gZm9udERhdGE7CisgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAotU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0
YWluIHNob3VsZFJldGFpbikKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgZmFsbGJhY2tGb250TmFtZSwgKCkpOwogICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5pc0Vt
cHR5KCkpCkBAIC0zMjksMTEgKzMyOSwxMSBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRMYXN0UmVzb3J0CiAgICAgICAgIEF0b21pY1N0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIp
LAogICAgICAgICBBdG9taWNTdHJpbmcoIkFyaWFsIikKICAgICB9OwotICAgIFNpbXBsZUZvbnRE
YXRhKiBzaW1wbGVGb250OworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udDsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250
cyk7ICsraSkgewogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGdldENhY2hlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250c1tpXSwgZmFsc2UsIHNob3VsZFJldGFpbikpIHsK
ICAgICAgICAgICAgIGZhbGxiYWNrRm9udE5hbWUgPSBmYWxsYmFja0ZvbnRzW2ldOwotICAgICAg
ICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5y
ZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM0Miw3ICszNDIsNyBAQCBTaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIExPR0ZPTlQgZGVmYXVs
dEdVSUxvZ0ZvbnQ7CiAgICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRl
ZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKICAgICAgICAgaWYgKHNpbXBs
ZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9u
LCBzaG91bGRSZXRhaW4sIGRlZmF1bHRHVUlMb2dGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAg
ICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZv
bnQucmVsZWFzZSgpOwogICAgIH0KIAogICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50IG1l
dHJpY3MgZm9udHMuCkBAIC0zNTAsMTUgKzM1MCwxNSBAQCBTaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgbm9uQ2xpZW50TWV0cmljcy5jYlNpemUgPSBzaXplb2Yo
bm9uQ2xpZW50TWV0cmljcyk7CiAgICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRO
T05DTElFTlRNRVRSSUNTLCBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRy
aWNzLCAwKSkgewogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0
aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0
cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVy
biBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwog
ICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9u
dChmb250RGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lbnVG
b250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250Owor
ICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2lt
cGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRp
b24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNr
Rm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICBy
ZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9u
dERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0
YWluLCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQot
ICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxl
Rm9udC5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGll
bnRNZXRyaWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAg
ICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVh
c2UoKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDEyODc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMiw0MCArMTMyLDQwIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgp
CiAgICAgZGVsZXRlIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiB9CiAKLVBhc3NPd25QdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVk
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdAogewogICAgIGZsb2F0IHNjYWxlZFNpemUgPSBzY2FsZUZhY3RvciAq
IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKICAgICBpZiAoaXNDdXN0b21Gb250KCkpIHsKICAgICAg
ICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250KG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAg
c2NhbGVkRm9udC5zZXRTaXplKHNjYWxlZFNpemUpOwotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFNpbXBsZUZvbnREYXRhKHNjYWxlZEZvbnQsIHRydWUsIGZhbHNlKSk7CisgICAgICAgIHJl
dHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnQsIHRydWUsIGZhbHNlKTsKICAg
ICB9CiAKICAgICBMT0dGT05UIHdpbmZvbnQ7CiAgICAgR2V0T2JqZWN0KG1fcGxhdGZvcm1EYXRh
Lmhmb250KCksIHNpemVvZihMT0dGT05UKSwgJndpbmZvbnQpOwogICAgIHdpbmZvbnQubGZIZWln
aHQgPSAtbHJvdW5kZihzY2FsZWRTaXplICogKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpID8gMSA6
IDMyKSk7CiAgICAgSEZPTlQgaGZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QoJndpbmZvbnQpOwot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YSho
Zm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRm
b3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSwgaXND
dXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUo
Rm9udFBsYXRmb3JtRGF0YShoZm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1E
YXRhLnVzZUdESSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERh
dGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9t
Rm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250
RGVzY3JpcHRpb24sIGNTbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwogCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0
YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2Ny
aXB0aW9uLCAuNSk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFy
ay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0K
IAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcAkocmV2
aXNpb24gMTI4Nzc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udENhY2hlV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9p
ZCBGb250Q2FjaGU6OmNvbVVuaW5pdGlhbGl6ZSgpCiAgICAgfQogfQogCi1jb25zdCBTaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBT
dHJpbmcgZmFtaWx5TmFtZTsKICAgICBXQ0hBUiBuYW1lW0xGX0ZBQ0VTSVpFXTsKQEAgLTIzNSwx
MCArMjM1LDExIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAg
ICB1bnNpZ25lZCB1bmljb2RlUmFuZ2UgPSBmaW5kQ2hhclVuaWNvZGVSYW5nZShjaGFyYWN0ZXIp
OwogCiAjaWYgZGVmaW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9
PSAyKQotICAgIGlmIChJTUxhbmdGb250TGluazIqIGxhbmdGb250TGluayA9IGdldEZvbnRMaW5r
SW50ZXJmYWNlKCkpIHsKKyAgICBpZiAoSU1MYW5nRm9udExpbmsyKiBsYW5nRm9udExpbmsgPSBn
ZXRGb250TGlua0ludGVyZmFjZSgpKQogI2Vsc2UKLSAgICBpZiAoSU1MYW5nRm9udExpbmsqIGxh
bmdGb250TGluayA9IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpIHsKKyAgICBpZiAoSU1MYW5nRm9u
dExpbmsqIGxhbmdGb250TGluayA9IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpCiAjZW5kaWYKKyAg
ICB7CiAgICAgICAgIEhHRElPQkogb2xkRm9udCA9IEdldEN1cnJlbnRPYmplY3QoZ19zY3JlZW5E
QywgT0JKX0ZPTlQpOwogICAgICAgICBIRk9OVCBoZm9udCA9IDA7CiAgICAgICAgIERXT1JEIGNv
ZGVQYWdlcyA9IDA7CkBAIC0yNjcsMTAgKzI2OCwxMSBAQCBjb25zdCBTaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpnZXRGb250CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFza2VkIGFib3V0
IGEgY29kZSBwYWdlIHRoYXQgaXMgbm90IG9uZSBvZiB0aGUgY29kZSBwYWdlcwogICAgICAgICAg
ICAgICAgICAgICAvLyByZXR1cm5lZCBieSBNTGFuZywgc28gdGhlIGZvbnQgbWlnaHQgbm90IGNv
bnRhaW4gdGhlIGNoYXJhY3Rlci4KICNpZiBkZWZpbmVkKElNTEFOR19GT05UX0xJTkspICYmIChJ
TUxBTkdfRk9OVF9MSU5LID09IDIpCi0gICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZv
bnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGNoYXJhY3Rlcikp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFjdGVy
KGxhbmdGb250TGluaywgZ19zY3JlZW5EQywgY2hhcmFjdGVyKSkKICNlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGlmICghY3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmss
IGdfc2NyZWVuREMsIGhmb250LCBjaGFyYWN0ZXIsIG5hbWUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghY3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2Ny
ZWVuREMsIGhmb250LCBjaGFyYWN0ZXIsIG5hbWUpKQogI2VuZGlmCisgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBv
bGRGb250KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdGb250TGluay0+UmVsZWFzZUZv
bnQoaGZvbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaGZvbnQgPSAwOwpAQCAtMzA4LDIw
ICszMTAsMjAgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogCiAg
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURh
dGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICAgICAgaWYgKHJlc3VsdCAmJiBy
ZXN1bHQtPmhhc2goKSAhPSBvcmlnRm9udC5oYXNoKCkpIHsKLSAgICAgICAgICAgIGlmIChTaW1w
bGVGb250RGF0YSogZm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShyZXN1bHQsIERvTm90UmV0
YWluKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZm9udERhdGE7CisgICAgICAgICAgICBpZiAo
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKHJlc3Vs
dCwgRG9Ob3RSZXRhaW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNl
KCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9u
dCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udCYpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzYywgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWlu
KQogewogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0
aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8g
dGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkg
cHJlZnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1w
bGVGb250RGF0YVdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcAkocmV2aXNpb24gMTI4Nzc0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERh
dGFXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjKGZvbnREZXNjcmlwdGlv
bik7CiAgICAgZm9udERlc2Muc2V0Q29tcHV0ZWRTaXplKGxyb3VuZGYoc2NhbGVGYWN0b3IgKiBm
b250RGVzYy5jb21wdXRlZFNpemUoKSkpOwpAQCAtNzEsMjggKzcxLDI4IEBAIFBhc3NPd25QdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAgICBmb250RGVzYy5zZXRLZXl3b3JkU2l6
ZShscm91bmRmKHNjYWxlRmFjdG9yICogZm9udERlc2Mua2V5d29yZFNpemUoKSkpOwogICAgIEZv
bnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGZvbnREZXNjLCBtX3BsYXRmb3JtRGF0YS5mYW1pbHkoKSk7CiAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2lt
cGxlRm9udERhdGEoKnJlc3VsdCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gU2lt
cGxlRm9udERhdGE6OmNyZWF0ZSgqcmVzdWx0KTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBs
ZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsK
ICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgp
OworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVG
b250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVh
dGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZl
ZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIERXT1JEIGdldEtub3duRm9udENvZGVQYWdlcyhjb25z
dCB3Y2hhcl90KiBmYW1pbHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvRm9udENhY2hlV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcAkocmV2aXNpb24gMTI4Nzc0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udENhY2hlV3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQog
ewogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNo
YXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRh
Rm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkKIHsKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSAwOworICAgIFJl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEgPSAwOwogICAgIGZvbnREYXRhID0gZ2V0Q2Fj
aGVkRm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHko
KSwgZmFsc2UsIERvTm90UmV0YWluKTsKICAgICBpZiAoIWZvbnREYXRhLT5jb250YWluc0NoYXJh
Y3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKSkKICAgICAgICAgZm9udERhdGEgPSBnZXRTaW1pbGFy
Rm9udFBsYXRmb3JtRGF0YShmb250KTsKQEAgLTUzLDEyICs1MywxMiBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgICAgIGZvbnREYXRhID0gZ2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChmb250LmZvbnREZXNjcmlwdGlvbigpKTsKIAogICAgIEFTU0VSVChm
b250RGF0YSk7Ci0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiBmb250RGF0YS5yZWxl
YXNlKCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7
Ci0gICAgU2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnREYXRhID0gMDsKKyAgICBSZWZQdHI8U2lt
cGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gMDsKICNpZiBPUyhEQVJXSU4pCiAgICAgLy8g
QXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBv
biAKICAgICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhlIHRoZSByZXF1ZXN0ZWQg
bmFtZXMuICBGb3IgZXhhbXBsZSwgd2UnbGwKQEAgLTc4LDE0ICs3OCwxNCBAQCBTaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9uCiAgICAgaWYgKCFzaW1wbGVGb250RGF0YSkK
ICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShmb250LmZvbnREZXNj
cmlwdGlvbigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKTsKIAotICAgIHJldHVybiBzaW1wbGVG
b250RGF0YTsKKyAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOwogfQogCi1TaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWlu
KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRS
ZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRl
ciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3
ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0
aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgU2ltcGxlRm9udERhdGEqIGZhbGxiYWNrID0g
MDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhbGxiYWNrID0gMDsKICNpZiBPUyhXSU5E
T1dTKQogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZmFsbGJhY2tOYW1lKCJBcmlhbCBVbmljb2Rl
IE1TIik7CiAjZWxzZQpAQCAtOTQsNyArOTQsNyBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRMYXN0UmVzb3J0CiAgICAgZmFsbGJhY2sgPSBnZXRDYWNoZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIGZhbGxiYWNrTmFtZSwgZmFsc2UsIHNob3VsZFJldGFpbik7CiAgICAgQVNTRVJU
KGZhbGxiYWNrKTsKICAgICAKLSAgICByZXR1cm4gZmFsbGJhY2s7CisgICAgcmV0dXJuIGZhbGxi
YWNrLnJlbGVhc2UoKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwCShyZXZpc2lv
biAxMjg3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVG
b250RGF0YVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMzIgKzkwLDMyIEBAIHZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiAjZW5kaWYKIH0KIAotUGFzc093blB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29u
c3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2Fs
ZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQg
c2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoc2Nh
bGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwogICAgIEZvbnRQbGF0
Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOwotICAg
IHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3Rv
bUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0
Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQo
KSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2Ny
aXB0aW9uLCAuNyk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5n
ZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2lt
cGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6
Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBo
YXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVh
dGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAotICAgIHJldHVybiBtX2Rl
cml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWlu
c0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164475</attachid>
            <date>2012-09-17 16:47:38 -0700</date>
            <delta_ts>2012-09-18 07:26:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95866-20120917194719.patch</filename>
            <type>text/plain</type>
            <size>103118</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2OSBAQAorMjAxMi0wOS0xNyAgU3RlcGhl
biBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkNvcmU6OkZvbnREYXRhIGhhbmRsaW5nIHRvIGNsYXJpZnkgcG9pbnRlciBvd25lcnNoaXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBhbGwgRm9udERhdGEgYW5kIGRlcml2ZWQgY2xhc3NlcyByZWYtY291bnRlZCBpbiBhbGwK
KyAgICAgICAgY29kZSBwYXRocyB0aGF0IGxlYWQgdG8gY2FjaGluZyBvciBvdGhlciByZXRlbnRp
b24gb2YgYSBwb2ludGVyLiBUaGUKKyAgICAgICAgZ29hbCBpcyB0byBhdmVydCBjcmFzaGVzIGFu
ZCBtZW1vcnkgbGVha3MsIGFuZCB0byBicmluZyB0aGUgY29kZSBtb3JlIGluCisgICAgICAgIGxp
bmUgd2l0aCBjdXJyZW50IFdlYktpdCBwcmFjdGljZXMuCisKKyAgICAgICAgQWxsIEZvbnREYXRh
IGRlcml2ZWQgY2xhc3NlcyBoYXZlIGJlZW4gc3dpdGNoZWQgdG8gdXNlIHN0YXRpYyBjcmVhdGUK
KyAgICAgICAgbWV0aG9kcyB3aXRoIHByaXZhdGUgY29uc3RydWN0b3JzLgorCisgICAgICAgIEFs
bCBjYWNoZXMgdGhhdCBob2xkIEZvbnREYXRhIG5vdyB1c2UgUmVmUHRycy4KKworICAgICAgICBB
bGwgbWV0aG9kcyB0aGF0IGNvbnN0cnVjdCBuZXcgZm9udCBkYXRhIG5vdyByZXR1cm4gUGFzc1Jl
ZlB0ciwgd2l0aAorICAgICAgICB0aGUgZXhjZXB0aW9uIG9mIGNvZGUgb25seSB1c2VkIHRvIGdl
bmVyYXRlIHRlbXBvcmFyeSBkYXRhIGZvciB0ZXh0CisgICAgICAgIHJ1biBsYXlvdXQuCisKKyAg
ICAgICAgQWxsIG1ldGhvZHMgdGhhdCBoYW5kbGUgRm9udERhdGEgaW4gYSBjYWxsIHN0YWNrIHRo
YXQgcGFzc2VzIHRocm91Z2gKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCBy
ZXR1cm4gUGFzc1JlZlB0ci4KKworICAgICAgICBQZXJmb3JtYW5jZSB0ZXN0aW5nIHdpbGwgYmUg
ZG9uZSBiZWZvcmUgY29tbWl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIHJl
ZmFjdG9yaW5nIGNvZGUgb25seSBhbmQgaGFzIG5vIGltcGFjdCBvbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAg
ICAgIChDU1NGb250RmFjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAgIChDU1NGb250RmFjZVNvdXJj
ZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250RGF0YUZvckdlbmVyaWNGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNl
bGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgor
ICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAg
ICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmg6CisgICAgICAgIChDU1NTZWdtZW50ZWRGb250
RmFjZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZWdpc3RlckN1c3RvbUZvbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgor
ICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25S
ZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJn
ZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAg
IChGb250Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFsbGJhY2tMaXN0OjpzZXRQbGF0Zm9ybUZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaDoKKyAgICAgICAgKEZvbnRGYWxsYmFja0xpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDoKKyAgICAgICAgKEZvbnRTZWxlY3Rv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb250RGF0YVJhbmdlOjpGb250RGF0YVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhUmFuZ2U6OmZvbnREYXRhKToKKyAgICAgICAgKEZvbnREYXRhUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNyZWF0ZSk6CisgICAgICAgIChTZWdt
ZW50ZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6U2Vn
bWVudGVkRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChTaW1wbGVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6dmFyaWFudEZvbnREYXRhKToKKyAgICAgICAgKERlcml2ZWRGb250RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9p
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoR2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udFByb2NEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93eC9Gb250Q2FjaGVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisKIDIwMTItMDktMTYgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBEZWxheWVkIHN0cnVj
dHVyZSBzd2VlcCBjYW4gbGVhayBzdHJ1Y3R1cmVzIHdpdGhvdXQgYm91bmQKQEAgLTM4LDcgKzIw
NCw2IEBACiAgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CiAgICAgICAgIChSdW50
aW1lT2JqZWN0KToKIAotPDw8PDw8PCAubWluZQogMjAxMi0wOS0xNiAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGF5ZWQgc3RydWN0dXJlIHN3
ZWVwIGNhbiBsZWFrIHN0cnVjdHVyZXMgd2l0aG91dCBib3VuZApAQCAtNTA0LDYgKzY2OSw3IEBA
CiAgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKICAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKToKIAorPj4+Pj4+PiAucjEyODgyMgogMjAxMi0wOS0x
NyAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogTk1JOiBub3cgd2hlbiB3ZSBjYW4gZGV0ZWN0IGluc3RydW1lbnRlZCBjbGFz
c2VzIHdlIGNhbgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCShyZXZpc2lvbiAx
Mjg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQoQ1NTRm9u
dEZhY2UKICAgICBmb250U2VsZWN0b3ItPmZvbnRMb2FkZWQoKTsKIH0KIAotU2ltcGxlRm9udERh
dGEqIENTU0ZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29s
IHN5bnRoZXRpY0l0YWxpYykKIHsKICAgICBtX2FjdGl2ZVNvdXJjZSA9IDA7CiAgICAgaWYgKCFp
c1ZhbGlkKCkpCkBAIC0xMDIsOSArMTAyLDkgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNl
OjpnZXRGb250RGF0YQogCiAgICAgc2l6ZV90IHNpemUgPSBtX3NvdXJjZXMuc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChTaW1wbGVG
b250RGF0YSogcmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5nZXRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udFNlbGVjdG9yKSkgeworICAg
ICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3NvdXJjZXNbaV0tPmdl
dEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGlj
LCBmb250U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2ZVNvdXJjZSA9IG1fc291cmNl
c1tpXS5nZXQoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlLmgJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZVNvdXJjZSopOwogCi0gICAgU2ltcGxlRm9u
dERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGlj
Qm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9s
ZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAg
ICAgICAgIFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDEyODgyMikKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBDU1NGb250RmFjZVNvdXJjZTo6Zm9udExvYWRlZChDYWNo
ZQogICAgICAgICBtX2ZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMs
IENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGlj
LCBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAgICAvLyBJZiB0aGUgZm9udCBo
YXNuJ3QgbG9hZGVkIG9yIGFuIGVycm9yIG9jY3VycmVkLCB0aGVuIHdlJ3ZlIGdvdCBub3RoaW5n
LgogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTE0LDExICsxMTQsOSBAQCBTaW1wbGVGb250RGF0
YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAgICAgdW5zaWduZWQgaGFzaEtleSA9IChmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEpIDw8IDYgfCBmb250RGVzY3JpcHRp
b24ud2lkdGhWYXJpYW50KCkgPDwgNAogICAgICAgICAgICAgICAgICAgICAgICB8IChmb250RGVz
Y3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkgPT0gVGV4dE9yaWVudGF0aW9uVXByaWdodCA/IDgg
OiAwKSB8IChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDQgOiAw
KSB8IChzeW50aGV0aWNCb2xkID8gMiA6IDApIHwgKHN5bnRoZXRpY0l0YWxpYyA/IDEgOiAwKTsK
IAotICAgIFNpbXBsZUZvbnREYXRhKiYgY2FjaGVkRGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQo
aGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKLSAgICBpZiAoY2FjaGVkRGF0YSkKLSAgICAg
ICAgcmV0dXJuIGNhY2hlZERhdGE7Ci0KLSAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IGZvbnRE
YXRhOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4mIGZvbnREYXRhID0gbV9mb250RGF0YVRh
YmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOworICAgIGlmIChmb250RGF0YSkK
KyAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogCiAgICAgLy8gSWYgd2UgYXJlIHN0aWxsIGxvYWRp
bmcsIHRoZW4gd2UgbGV0IHRoZSBzeXN0ZW0gcGljayBhIGZvbnQuCiAgICAgaWYgKGlzTG9hZGVk
KCkpIHsKQEAgLTE1Nyw3ICsxNTUsNyBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3Vy
Y2U6OmdldEZvCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N2Z0ZvbnRGYWNlRWxlbWVudCA9
IGZvbnRGYWNlRWxlbWVudDsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKFNWR0ZvbnREYXRh
OjpjcmVhdGUoZm9udEZhY2VFbGVtZW50KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxT
aXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgICAgICAgICAgICAg
ICAgICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoU1ZHRm9udERhdGE6OmNyZWF0
ZShmb250RmFjZUVsZW1lbnQpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwg
c3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9IGVsc2UKICNlbmRpZgpAQCAtMTY2LDE0ICsxNjQsMTQgQEAgU2ltcGxlRm9udERh
dGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgICAgICAgICAgICAgIGlmICghbV9mb250
LT5lbnN1cmVDdXN0b21Gb250RGF0YSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
IAotICAgICAgICAgICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRh
KG1fZm9udC0+cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2Ny
aXB0aW9uLm9yaWVudGF0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgp
LCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgpKSwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAg
ICAgICAgICAgICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUobV9mb250LT5wbGF0
Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUo
KSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnRleHRP
cmllbnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNjcmlw
dGlvbi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAgICAgICAgIC8vIEluLURv
Y3VtZW50IFNWRyBGb250cwogICAgICAgICAgICAgaWYgKG1fc3ZnRm9udEZhY2VFbGVtZW50KQot
ICAgICAgICAgICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKFNW
R0ZvbnREYXRhOjpjcmVhdGUobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpLCBmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGlj
KSk7CisgICAgICAgICAgICAgICAgZm9udERhdGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKFNW
R0ZvbnREYXRhOjpjcmVhdGUobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpLCBmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGlj
KTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTE4NCwxNSArMTgyLDE1IEBA
IFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgLy8gVGhp
cyB0ZW1wb3JhcnkgZm9udCBpcyBub3QgcmV0YWluZWQgYW5kIHNob3VsZCBub3QgYmUgcmV0dXJu
ZWQuCiAgICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVu
dGVyOwogICAgICAgICBTaW1wbGVGb250RGF0YSogdGVtcG9yYXJ5Rm9udCA9IGZvbnRDYWNoZSgp
LT5nZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERlc2NyaXB0aW9uKTsK
LSAgICAgICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEodGVtcG9yYXJ5
Rm9udC0+cGxhdGZvcm1EYXRhKCksIHRydWUsIHRydWUpKTsKKyAgICAgICAgZm9udERhdGEgPSBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKHRlbXBvcmFyeUZvbnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVl
LCB0cnVlKTsKICAgICB9CiAKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZm9udFNlbGVj
dG9yLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGNhY2hlZERhdGEgPSBmb250RGF0YS5nZXQoKTsK
LSAgICAgICAgZG9jdW1lbnQtPnJlZ2lzdGVyQ3VzdG9tRm9udChmb250RGF0YS5yZWxlYXNlKCkp
OwotICAgIH0KKyAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZm9udFNlbGVjdG9yLT5kb2N1
bWVudCgpKQorICAgICAgICBkb2N1bWVudC0+cmVnaXN0ZXJDdXN0b21Gb250KGZvbnREYXRhKTsK
KyAgICBlbHNlCisgICAgICAgIGZvbnREYXRhLmNsZWFyKCk7CiAKLSAgICByZXR1cm4gY2FjaGVk
RGF0YTsKKyAgICByZXR1cm4gZm9udERhdGE7CiB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgJKHJldmlzaW9uIDEyODgy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmb250TG9h
ZGVkKENhY2hlZEZvbnQqKTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljLCBDU1NGb250U2VsZWN0b3IqKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBn
ZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljLCBDU1NGb250U2VsZWN0b3IqKTsKIAogICAgIHZvaWQgcHJ1bmVU
YWJsZSgpOwogCkBAIC03Niw3ICs3Niw3IEBAIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1f
c3RyaW5nOyAvLyBVUkkgZm9yIHJlbW90ZSwgYnVpbHQtaW4gZm9udCBuYW1lIGZvciBsb2NhbC4K
ICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRGb250PiBtX2ZvbnQ7IC8vIEZvciByZW1v
dGUgZm9udHMsIGEgcG9pbnRlciB0byBvdXIgY2FjaGVkIHJlc291cmNlLgogICAgIENTU0ZvbnRG
YWNlKiBtX2ZhY2U7IC8vIE91ciBvd25pbmcgZm9udCBmYWNlLgotICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIFNpbXBsZUZvbnREYXRhKj4gbV9mb250RGF0YVRhYmxlOyAvLyBUaGUgaGFzaCBrZXkgaXMg
Y29tcG9zZWQgb2Ygc2l6ZSBzeW50aGV0aWMgc3R5bGVzLgorICAgIEhhc2hNYXA8dW5zaWduZWQs
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gPiBtX2ZvbnREYXRhVGFibGU7IC8vIFRoZSBoYXNoIGtl
eSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRpYyBzdHlsZXMuCiAKICNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQogICAgIFJlZlB0cjxTVkdGb250RmFjZUVsZW1lbnQ+IG1fc3ZnRm9udEZhY2VFbGVt
ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9u
IDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTAsNyArMzUwLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRD
YWNoZUludmFsaWRhdAogICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7CiB9CiAK
LXN0YXRpYyBGb250RGF0YSogZm9udERhdGFGb3JHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSkKK3N0YXRpYyBQYXNzUmVmUHRyPEZvbnREYXRhPiBmb250RGF0
YUZvckdlbmVyaWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewog
ICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTQ2NSw3ICs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUZvbnRGYWNl
cyhDU1NGCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Gb250RGF0YSogQ1NTRm9udFNlbGVjdG9y
OjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorUGFzc1JlZlB0cjxGb250RGF0YT4gQ1NTRm9u
dFNlbGVjdG9yOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIGlmIChtX2ZvbnRG
YWNlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGZhbWlseU5hbWUuc3RhcnRzV2l0aCgiLXdl
YmtpdC0iKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHJldmlzaW9u
IDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB1bnNp
Z25lZCB2ZXJzaW9uKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJzaW9uOyB9CiAKLSAg
ICB2aXJ0dWFsIEZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgdm9pZCBjbGVhckRvY3VtZW50KCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2
aXNpb24gMTI4ODIyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsOSBAQCB2b2lkIENTU1NlZ21lbnRlZEZv
bnRGYWNlOjphcHBlbmRGb250RmFjCiAgICAgbV9mb250RmFjZXMuYXBwZW5kKGZvbnRGYWNlKTsK
IH0KIAotc3RhdGljIHZvaWQgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlm
TG9hZGluZyhTZWdtZW50ZWRGb250RGF0YSogbmV3Rm9udERhdGEsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmYWNlRm9udERhdGEsIGNvbnN0IFZlY3RvcjxDU1NGb250RmFjZTo6VW5pY29kZVJhbmdl
PiYgcmFuZ2VzKQorc3RhdGljIHZvaWQgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaWNvZGVS
YW5nZUlmTG9hZGluZyhTZWdtZW50ZWRGb250RGF0YSogbmV3Rm9udERhdGEsIFBhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IHBycEZhY2VGb250RGF0YSwgY29uc3QgVmVjdG9yPENTU0ZvbnRGYWNl
OjpVbmljb2RlUmFuZ2U+JiByYW5nZXMpCiB7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBm
YWNlRm9udERhdGEgPSBwcnBGYWNlRm9udERhdGE7CiAgICAgaWYgKGZhY2VGb250RGF0YS0+aXNM
b2FkaW5nKCkpIHsKICAgICAgICAgbmV3Rm9udERhdGEtPmFwcGVuZFJhbmdlKEZvbnREYXRhUmFu
Z2UoMCwgMCwgZmFjZUZvbnREYXRhKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTk4LDcgKzk5LDcg
QEAgc3RhdGljIHZvaWQgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaQogICAgICAgICBuZXdG
b250RGF0YS0+YXBwZW5kUmFuZ2UoRm9udERhdGFSYW5nZShyYW5nZXNbal0uZnJvbSgpLCByYW5n
ZXNbal0udG8oKSwgZmFjZUZvbnREYXRhKSk7CiB9CiAKLUZvbnREYXRhKiBDU1NTZWdtZW50ZWRG
b250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCitQYXNzUmVmUHRyPEZvbnREYXRhPiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CiAgICAgaWYgKCFp
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA2LDExICsxMDcsMTEgQEAgRm9udERh
dGEqIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RAogICAgIEZvbnRUcmFpdHNNYXNrIGRl
c2lyZWRUcmFpdHNNYXNrID0gZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsKICAgICB1bnNp
Z25lZCBoYXNoS2V5ID0gKChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSArIDEp
IDw8IChGb250VHJhaXRzTWFza1dpZHRoICsgMSkpIHwgKChmb250RGVzY3JpcHRpb24ub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbCA/IDEgOiAwKSA8PCBGb250VHJhaXRzTWFza1dpZHRoKSB8IGRl
c2lyZWRUcmFpdHNNYXNrOwogCi0gICAgU2VnbWVudGVkRm9udERhdGEqJiBmb250RGF0YSA9IG1f
Zm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQ
dHI8U2VnbWVudGVkRm9udERhdGE+JiBmb250RGF0YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFz
aEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIHJl
dHVybiBmb250RGF0YTsKIAotICAgIE93blB0cjxTZWdtZW50ZWRGb250RGF0YT4gbmV3Rm9udERh
dGEgPSBhZG9wdFB0cihuZXcgU2VnbWVudGVkRm9udERhdGEpOworICAgIGZvbnREYXRhID0gU2Vn
bWVudGVkRm9udERhdGE6OmNyZWF0ZSgpOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZm9udEZh
Y2VzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CkBA
IC0xMTksMTkgKzEyMCwxOSBAQCBGb250RGF0YSogQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZv
bnRECiAgICAgICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBtX2ZvbnRGYWNlc1tpXS0+
dHJhaXRzTWFzaygpOwogICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQgPSAhKHRyYWl0c01hc2sg
JiAoRm9udFdlaWdodDYwME1hc2sgfCBGb250V2VpZ2h0NzAwTWFzayB8IEZvbnRXZWlnaHQ4MDBN
YXNrIHwgRm9udFdlaWdodDkwME1hc2spKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiAoRm9udFdl
aWdodDYwME1hc2sgfCBGb250V2VpZ2h0NzAwTWFzayB8IEZvbnRXZWlnaHQ4MDBNYXNrIHwgRm9u
dFdlaWdodDkwME1hc2spKTsKICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAhKHRyYWl0
c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAoZGVzaXJlZFRyYWl0c01hc2sgJiBGb250
U3R5bGVJdGFsaWNNYXNrKTsKLSAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmYWNl
Rm9udERhdGEgPSBtX2ZvbnRGYWNlc1tpXS0+Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBz
eW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKSB7CisgICAgICAgIGlmIChSZWZQdHI8U2lt
cGxlRm9udERhdGE+IGZhY2VGb250RGF0YSA9IG1fZm9udEZhY2VzW2ldLT5nZXRGb250RGF0YShm
b250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpIHsKICAgICAg
ICAgICAgIEFTU0VSVCghZmFjZUZvbnREYXRhLT5pc1NlZ21lbnRlZCgpKTsKLSAgICAgICAgICAg
IGFwcGVuZEZvbnREYXRhV2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcobmV3Rm9udERh
dGEuZ2V0KCksIGZhY2VGb250RGF0YSwgbV9mb250RmFjZXNbaV0tPnJhbmdlcygpKTsKKyAgICAg
ICAgICAgIGFwcGVuZEZvbnREYXRhV2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoZm9u
dERhdGEuZ2V0KCksIGZhY2VGb250RGF0YS5yZWxlYXNlKCksIG1fZm9udEZhY2VzW2ldLT5yYW5n
ZXMoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG5ld0ZvbnREYXRhLT5udW1SYW5nZXMo
KSkgeworICAgIGlmIChmb250RGF0YS0+bnVtUmFuZ2VzKCkpIHsKICAgICAgICAgaWYgKERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fZm9udFNlbGVjdG9yLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAg
ICBmb250RGF0YSA9IG5ld0ZvbnREYXRhLmdldCgpOwotICAgICAgICAgICAgZG9jdW1lbnQtPnJl
Z2lzdGVyQ3VzdG9tRm9udChuZXdGb250RGF0YS5yZWxlYXNlKCkpOworICAgICAgICAgICAgZG9j
dW1lbnQtPnJlZ2lzdGVyQ3VzdG9tRm9udChmb250RGF0YSk7CisgICAgICAgICAgICByZXR1cm4g
Zm9udERhdGE7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gZm9udERhdGE7CisgICAg
cmV0dXJuIDA7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRG
b250RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRG
b250RmFjZS5oCShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGFwcGVuZEZvbnRGYWNlKFBhc3NSZWZQdHI8Q1NTRm9udEZhY2U+KTsKIAot
ICAgIEZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBQ
YXNzUmVmUHRyPEZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKTsK
IAogcHJpdmF0ZToKICAgICBDU1NTZWdtZW50ZWRGb250RmFjZShDU1NGb250U2VsZWN0b3IqKTsK
QEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKIAog
ICAgIENTU0ZvbnRTZWxlY3RvciogbV9mb250U2VsZWN0b3I7Ci0gICAgSGFzaE1hcDx1bnNpZ25l
ZCwgU2VnbWVudGVkRm9udERhdGEqPiBtX2ZvbnREYXRhVGFibGU7CisgICAgSGFzaE1hcDx1bnNp
Z25lZCwgUmVmUHRyPFNlZ21lbnRlZEZvbnREYXRhPiA+IG1fZm9udERhdGFUYWJsZTsKICAgICBW
ZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiwgMT4gbV9mb250RmFjZXM7CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OTIsNyArMTk5Miw3IEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUYKICAgICByZXR1cm4gc3R5bGUu
cmVsZWFzZSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckN1c3RvbUZvbnQoUGFzc093
blB0cjxGb250RGF0YT4gZm9udERhdGEpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckN1c3RvbUZv
bnQoUGFzc1JlZlB0cjxGb250RGF0YT4gZm9udERhdGEpCiB7CiAgICAgbV9jdXN0b21Gb250cy5h
cHBlbmQoZm9udERhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEy
ODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NzEsNyArNTcxLDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQqKTsKICAgICBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CiAKLSAg
ICB2b2lkIHJlZ2lzdGVyQ3VzdG9tRm9udChQYXNzT3duUHRyPEZvbnREYXRhPik7CisgICAgdm9p
ZCByZWdpc3RlckN1c3RvbUZvbnQoUGFzc1JlZlB0cjxGb250RGF0YT4pOwogCiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHBhZ2UgYm94IChtYXJnaW4gYm94ZXMgYW5kIHBhZ2UgYm9yZGVycykgaXMg
dmlzaWJsZS4KICAgICBib29sIGlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCk7CkBAIC0x
MjkwLDcgKzEyOTAsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxTdHlsZVJlc29sdmVyPiBtX3N0
eWxlUmVzb2x2ZXI7CiAgICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlUmVzb2x2ZXI7CiAgICAg
Ym9vbCBtX2hhc0RpcnR5U3R5bGVSZXNvbHZlcjsKLSAgICBWZWN0b3I8T3duUHRyPEZvbnREYXRh
PiA+IG1fY3VzdG9tRm9udHM7CisgICAgVmVjdG9yPFJlZlB0cjxGb250RGF0YT4gPiBtX2N1c3Rv
bUZvbnRzOwogCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgUmVmUHRyPERPTVdpbmRvdz4gbV9k
b21XaW5kb3c7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw3ICsyODYsNyBA
QCBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuCiAgICAgfQogfTsKIAot
dHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHBhaXI8U2ltcGxlRm9udERhdGEqLCB1
bnNpZ25lZD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBG
b250RGF0YUNhY2hlOwordHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIHBhaXI8UmVm
UHRyPFNpbXBsZUZvbnREYXRhPiwgdW5zaWduZWQ+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9u
dERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKIAogc3RhdGljIEZvbnREYXRhQ2Fj
aGUqIGdGb250RGF0YUNhY2hlID0gMDsKIApAQCAtMjk3LDkgKzI5Nyw5IEBAIGNvbnN0IGludCBj
VGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IGludCBjTWF4SW5hY3RpdmVGb250
RGF0YSA9IDUwOyAvLyBQcmV0dHkgTG93IFRocmVzaG9sZAogY29uc3QgaW50IGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhID0gMzA7CiAjZW5kaWYKLXN0YXRpYyBMaXN0SGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBnSW5hY3RpdmVGb250RGF0YSA9IDA7CitzdGF0aWMgTGlzdEhhc2hTZXQ8
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiA+KiBnSW5hY3RpdmVGb250RGF0YSA9IDA7CiAKLVNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBj
aGVja2luZ0FsdGVybmF0ZU5hbWUsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4p
CiB7CiAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBs
YXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSwgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
KTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YSkKQEAgLTMwOCw3ICszMDgsNyBAQCBTaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnRE
YXRhKHBsYXRmb3JtRGF0YSwgc2hvdWxkUmV0YWluKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZv
cm1EYXRhLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRh
KiBwbGF0Zm9ybURhdGEsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgaWYgKCFw
bGF0Zm9ybURhdGEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzIwLDE2ICszMjAsMTYgQEAgU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udAogCiAgICAgaWYgKCFnRm9udERh
dGFDYWNoZSkgewogICAgICAgICBnRm9udERhdGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwot
ICAgICAgICBnSW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+OworICAgICAgICBnSW5hY3RpdmVGb250RGF0YSA9IG5ldyBMaXN0SGFzaFNldDxS
ZWZQdHI8U2ltcGxlRm9udERhdGE+ID47CiAgICAgfQogCiAgICAgRm9udERhdGFDYWNoZTo6aXRl
cmF0b3IgcmVzdWx0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoKnBsYXRmb3JtRGF0YSk7CiAgICAg
aWYgKHJlc3VsdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKLSAgICAgICAgcGFpcjxTaW1w
bGVGb250RGF0YSosIHVuc2lnbmVkPiBuZXdWYWx1ZShuZXcgU2ltcGxlRm9udERhdGEoKnBsYXRm
b3JtRGF0YSksIHNob3VsZFJldGFpbiA9PSBSZXRhaW4gPyAxIDogMCk7CisgICAgICAgIHBhaXI8
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiwgdW5zaWduZWQ+IG5ld1ZhbHVlKFNpbXBsZUZvbnREYXRh
OjpjcmVhdGUoKnBsYXRmb3JtRGF0YSksIHNob3VsZFJldGFpbiA9PSBSZXRhaW4gPyAxIDogMCk7
CiAgICAgICAgIGdGb250RGF0YUNhY2hlLT5zZXQoKnBsYXRmb3JtRGF0YSwgbmV3VmFsdWUpOwog
ICAgICAgICBpZiAoc2hvdWxkUmV0YWluID09IERvTm90UmV0YWluKQogICAgICAgICAgICAgZ0lu
YWN0aXZlRm9udERhdGEtPmFkZChuZXdWYWx1ZS5maXJzdCk7Ci0gICAgICAgIHJldHVybiBuZXdW
YWx1ZS5maXJzdDsKKyAgICAgICAgcmV0dXJuIG5ld1ZhbHVlLmZpcnN0LnJlbGVhc2UoKTsKICAg
ICB9CiAKICAgICBpZiAoIXJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkgewpAQCAtMzUwLDcg
KzM1MCw3IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnQKIAogU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHJldHVy
biBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbiwgRG9Ob3RSZXRhaW4p
OworICAgIHJldHVybiBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbiwg
RG9Ob3RSZXRhaW4pLmxlYWtSZWYoKTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250
RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCkBAIC0zNjMsNyArMzYzLDcgQEAg
dm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBTaQogCiAgICAgQVNTRVJUKGl0
LT5zZWNvbmQuc2Vjb25kKTsKICAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpCi0gICAgICAg
IGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQoZm9udERhdGEpOworICAgICAgICBnSW5hY3RpdmVGb250
RGF0YS0+YWRkKGl0LT5zZWNvbmQuZmlyc3QpOwogfQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKQpAQCAtMzgzLDExICszODMsMTEgQEAgdm9pZCBGb250
Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogCiAgICAgaXNQdXJnaW5nID0gdHJ1ZTsK
IAotICAgIFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSosIDIwPiBmb250RGF0YVRvRGVsZXRl
OwotICAgIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46Oml0ZXJhdG9yIGVuZCA9
IGdJbmFjdGl2ZUZvbnREYXRhLT5lbmQoKTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+OjppdGVyYXRvciBpdCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigpOworICAg
IFZlY3RvcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCAyMD4gZm9udERhdGFUb0RlbGV0ZTsKKyAg
ICBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+ID46Oml0ZXJhdG9yIGVuZCA9IGdJ
bmFjdGl2ZUZvbnREYXRhLT5lbmQoKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9u
dERhdGE+ID46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGEtPmJlZ2luKCk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAmJiBpdCAhPSBlbmQ7ICsraXQsICsraSkgewotICAg
ICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSAqaXQuZ2V0KCk7CisgICAgICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4mIGZvbnREYXRhID0gKml0LmdldCgpOwogICAgICAgICBn
Rm9udERhdGFDYWNoZS0+cmVtb3ZlKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7CiAgICAgICAg
IC8vIFdlIHNob3VsZCBub3QgZGVsZXRlIFNpbXBsZUZvbnREYXRhIGhlcmUgYmVjYXVzZSBkZWxl
dGlvbiBjYW4gbW9kaWZ5IGdJbmFjdGl2ZUZvbnREYXRhLiBTZWUgaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQvNDQwMTEKICAgICAgICAgZm9udERhdGFUb0RlbGV0ZS5hcHBlbmQoZm9u
dERhdGEpOwpAQCAtNDAxLDkgKzQwMSw3IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEoaW4KICAgICAgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5yZW1vdmUoZ0luYWN0
aXZlRm9udERhdGEtPmJlZ2luKCkpOwogICAgIH0KIAotICAgIHNpemVfdCBmb250RGF0YVRvRGVs
ZXRlQ291bnQgPSBmb250RGF0YVRvRGVsZXRlLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZvbnREYXRhVG9EZWxldGVDb3VudDsgKytpKQotICAgICAgICBkZWxldGUgZm9udERh
dGFUb0RlbGV0ZVtpXTsKKyAgICBmb250RGF0YVRvRGVsZXRlLmNsZWFyKCk7CiAKICAgICBpZiAo
Z0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSkgewogICAgICAgICBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5PiBrZXlzVG9SZW1vdmU7CkBAIC00NjIsOSArNDYwLDkgQEAgc2l6ZV90IEZvbnRD
YWNoZTo6aW5hY3RpdmVGb250RGF0YUNvdW50KAogICAgIHJldHVybiAwOwogfQogCi1jb25zdCBG
b250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YShjb25zdCBGb250JiBmb250LCBpbnQmIGZh
bWlseUluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKK1Bhc3NSZWZQdHI8Rm9udERh
dGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udCYgZm9udCwgaW50JiBmYW1pbHlJ
bmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7Ci0gICAgRm9udERhdGEqIHJlc3Vs
dCA9IDA7CisgICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQ7CiAKICAgICBpbnQgc3RhcnRJbmRl
eCA9IGZhbWlseUluZGV4OwogICAgIGNvbnN0IEZvbnRGYW1pbHkqIHN0YXJ0RmFtaWx5ID0gJmZv
bnQuZm9udERlc2NyaXB0aW9uKCkuZmFtaWx5KCk7CkBAIC00OTgsMTQgKzQ5NiwxNCBAQCBjb25z
dCBGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YShjCiAKICAgICAgICAgaWYgKGZvbnRT
ZWxlY3RvcikgewogICAgICAgICAgICAgLy8gVHJ5IHRoZSB1c2VyJ3MgcHJlZmVycmVkIHN0YW5k
YXJkIGZvbnQuCi0gICAgICAgICAgICBpZiAoRm9udERhdGEqIGRhdGEgPSBmb250U2VsZWN0b3It
PmdldEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIHN0YW5kYXJkRmFtaWx5KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8Rm9udERh
dGE+IGRhdGEgPSBmb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9u
KCksIHN0YW5kYXJkRmFtaWx5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5yZWxlYXNl
KCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdGlsbCBubyByZXN1bHQuICBIYW5kIGJhY2sg
b3VyIGxhc3QgcmVzb3J0IGZhbGxiYWNrIGZvbnQuCiAgICAgICAgIHJlc3VsdCA9IGdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoZm9udC5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgfQotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBI
YXNoU2V0PEZvbnRTZWxlY3Rvcio+KiBnQ2xpZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsOCBAQAogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgogCkBAIC02MCwxMSArNjIsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBTaG91bGRS
ZXRhaW4geyBSZXRhaW4sIERvTm90UmV0YWluIH07CiAKLSAgICBjb25zdCBGb250RGF0YSogZ2V0
Rm9udERhdGEoY29uc3QgRm9udCYsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciopOwor
ICAgIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnQmLCBpbnQmIGZh
bWlseUluZGV4LCBGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbGVhc2VGb250RGF0YShjb25z
dCBTaW1wbGVGb250RGF0YSopOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQg
YnkgdGhlIHBsYXRmb3JtLgotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMoY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YUZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKTsK
IAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIHZvaWQgcGxh
dGZvcm1Jbml0KCk7CkBAIC04NCw4ICs4Niw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0VHJh
aXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpOwogCi0g
ICAgU2ltcGxlRm9udERhdGEqIGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFs
c2UsIFNob3VsZFJldGFpbiA9IFJldGFpbik7Ci0gICAgU2ltcGxlRm9udERhdGEqIGdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0YWluID0g
UmV0YWluKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRDYWNoZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOworICAgIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKICAgICBTaW1wbGVGb250
RGF0YSogZ2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpOwogCiAgICAgdm9pZCBhZGRDbGllbnQoRm9udFNlbGVjdG9yKik7CkBAIC05OSw5
ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNv
dW50ID0gSU5UX01BWCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
LCBTaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9u
dEZhbWlseU5hbWUpOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhRnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRh
aW4sIGNvbnN0IExPR0ZPTlQmLCBBdG9taWNTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNl
bGlmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhXSU5ET1dTKQotICAgIFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgU2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiBmb250LCB3Y2hhcl90KiBvdXRGb250RmFt
aWx5TmFtZSk7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGFGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwg
Y29uc3QgTE9HRk9OVCYsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQpAQCAtMTMxLDEwICsxMzMsMTAgQEAgcHJpdmF0
ZToKICAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGlt
cGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCi0gICAgU2ltcGxlRm9udERhdGEqIGdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250Jik7CiAgICAgRm9u
dFBsYXRmb3JtRGF0YSogY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKLSAgICBTaW1wbGVGb250RGF0YSog
Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSosIFNob3VsZFJldGFpbiA9
IFJldGFpbik7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Q2FjaGVkRm9udERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSosIFNob3VsZFJldGFpbiA9IFJldGFpbik7CiAKICAg
ICAvLyBEb24ndCBwdXJnZSBpZiB0aGlzIGNvdW50IGlzID4gMDsKICAgICBpbnQgbV9wdXJnZVBy
ZXZlbnRDb3VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERhdGEuaAkocmV2aXNpb24gMTI4ODIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE1IEBACiAjaW5j
bHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2Rl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKLWNs
YXNzIEZvbnREYXRhIHsKK2NsYXNzIEZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udERh
dGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250RGF0YSk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIEZvbnREYXRhKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCShyZXZp
c2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFs
bGJhY2tMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsOSBAQCB2b2lkIEZvbnRG
YWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0YSgpCiB7CiAgICAgdW5zaWduZWQgbnVtRm9udHMg
PSBtX2ZvbnRMaXN0LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRm9u
dHM7ICsraSkgewotICAgICAgICBpZiAoIW1fZm9udExpc3RbaV0uc2Vjb25kKSB7CisgICAgICAg
IGlmICghbV9mb250TGlzdFtpXS0+aXNDdXN0b21Gb250KCkpIHsKICAgICAgICAgICAgIEFTU0VS
VCghbV9mb250TGlzdFtpXS5maXJzdC0+aXNTZWdtZW50ZWQoKSk7Ci0gICAgICAgICAgICBmb250
Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4obV9mb250TGlzdFtpXS5maXJzdCkpOworICAgICAgICAgICAgZm9udENhY2hlKCktPnJlbGVh
c2VGb250RGF0YShzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KG1fZm9udExpc3Rb
aV0uZ2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBG
b250RmFsbGJhY2tMaXN0OjpkZXRlcm1pbmVQaXRjaChjbwogY29uc3QgRm9udERhdGEqIEZvbnRG
YWxsYmFja0xpc3Q6OmZvbnREYXRhQXQoY29uc3QgRm9udCogZm9udCwgdW5zaWduZWQgcmVhbGl6
ZWRGb250SW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKHJlYWxpemVkRm9udEluZGV4IDwgbV9mb250
TGlzdC5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX2ZvbnRMaXN0W3JlYWxpemVkRm9udEluZGV4
XS5maXJzdDsgLy8gVGhpcyBmYWxsYmFjayBmb250IGlzIGFscmVhZHkgaW4gb3VyIGxpc3QuCisg
ICAgICAgIHJldHVybiBtX2ZvbnRMaXN0W3JlYWxpemVkRm9udEluZGV4XS5nZXQoKTsgLy8gVGhp
cyBmYWxsYmFjayBmb250IGlzIGFscmVhZHkgaW4gb3VyIGxpc3QuCiAKICAgICAvLyBNYWtlIHN1
cmUgd2UncmUgbm90IHBhc3NpbmcgaW4gc29tZSBjcmF6eSB2YWx1ZSBoZXJlLgogICAgIEFTU0VS
VChyZWFsaXplZEZvbnRJbmRleCA9PSBtX2ZvbnRMaXN0LnNpemUoKSk7CkBAIC0xMDQsMjEgKzEw
NCwyMSBAQCBjb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhCiAgICAgLy8g
aW4gfG1fZmFtaWx5SW5kZXh8LCBzbyB0aGF0IHdlIG5ldmVyIHNjYW4gdGhlIHNhbWUgc3BvdCBp
biB0aGUgbGlzdCB0d2ljZS4gIGdldEZvbnREYXRhIHdpbGwgYWRqdXN0IG91cgogICAgIC8vIHxt
X2ZhbWlseUluZGV4fCBhcyBpdCBzY2FucyBmb3IgdGhlIHJpZ2h0IGZvbnQgdG8gbWFrZS4KICAg
ICBBU1NFUlQoZm9udENhY2hlKCktPmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwotICAg
IGNvbnN0IEZvbnREYXRhKiByZXN1bHQgPSBmb250Q2FjaGUoKS0+Z2V0Rm9udERhdGEoKmZvbnQs
IG1fZmFtaWx5SW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICBSZWZQdHI8Rm9udERh
dGE+IHJlc3VsdCA9IGZvbnRDYWNoZSgpLT5nZXRGb250RGF0YSgqZm9udCwgbV9mYW1pbHlJbmRl
eCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOwogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgbV9m
b250TGlzdC5hcHBlbmQocGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+KHJlc3VsdCwgcmVzdWx0
LT5pc0N1c3RvbUZvbnQoKSkpOworICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChyZXN1bHQpOwog
ICAgICAgICBpZiAocmVzdWx0LT5pc0xvYWRpbmcoKSkKICAgICAgICAgICAgIG1fbG9hZGluZ0N1
c3RvbUZvbnRzID0gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
cmVzdWx0LmdldCgpOwogfQogCiB2b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnNldFBsYXRmb3JtRm9u
dChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7CiAgICAgbV9mYW1pbHlJ
bmRleCA9IGNBbGxGYW1pbGllc1NjYW5uZWQ7CiAgICAgQVNTRVJUKGZvbnRDYWNoZSgpLT5nZW5l
cmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKLSAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEg
PSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnBsYXRmb3JtRGF0YSk7Ci0gICAgbV9m
b250TGlzdC5hcHBlbmQocGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+KGZvbnREYXRhLCBmb250
RGF0YS0+aXNDdXN0b21Gb250KCkpKTsKKyAgICBSZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhID0g
Zm9udENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZwbGF0Zm9ybURhdGEpOworICAgIG1fZm9u
dExpc3QuYXBwZW5kKGZvbnREYXRhKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaAkocmV2aXNpb24gMTI4
ODIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHJlbGVhc2VGb250RGF0YSgpOwogCi0gICAgbXV0YWJsZSBWZWN0b3I8cGFpcjxjb25zdCBGb250
RGF0YSosIGJvb2w+LCAxPiBtX2ZvbnRMaXN0OworICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxG
b250RGF0YT4sIDE+IG1fZm9udExpc3Q7CiAgICAgbXV0YWJsZSBHbHlwaFBhZ2VzIG1fcGFnZXM7
CiAgICAgbXV0YWJsZSBHbHlwaFBhZ2VUcmVlTm9kZSogbV9wYWdlWmVybzsKICAgICBtdXRhYmxl
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRo
LmNwcAkocmV2aXNpb24gMTI4ODIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOCBAQCBzdGQ6
OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250OjpnCiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9mb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkgPT0gVGV4dE9yaWVu
dGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT52
ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiB2ZXJ0aWNhbFJpZ2h0Tm9kZSA9IEdseXBoUGFnZVRy
ZWVOb2RlOjpnZXRSb290Q2hpbGQodmVydGljYWxSaWdodEZvbnREYXRhLCBwYWdlTnVtYmVyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRp
Y2FsUmlnaHRGb250RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlv
bkZvbnREYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5v
ZGUqIHZlcnRpY2FsUmlnaHROb2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh2
ZXJ0aWNhbFJpZ2h0Rm9udERhdGEuZ2V0KCksIHBhZ2VOdW1iZXIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdseXBoUGFnZSogdmVydGljYWxSaWdodFBhZ2UgPSB2ZXJ0aWNhbFJpZ2h0
Tm9kZS0+cGFnZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJp
Z2h0UGFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaERhdGEgdmVy
dGljYWxSaWdodERhdGEgPSB2ZXJ0aWNhbFJpZ2h0UGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGMpOwpAQCAtMTExLDggKzExMSw4IEBAIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+
IEZvbnQ6OmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
X3BhaXIodmVydGljYWxSaWdodERhdGEsIHZlcnRpY2FsUmlnaHRQYWdlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Zm9udERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblVwcmln
aHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
dXByaWdodEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERh
dGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdXBy
aWdodE5vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHVwcmlnaHRGb250RGF0
YSwgcGFnZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiB1cHJpZ2h0Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3JpZW50
YXRpb25Gb250RGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZVRy
ZWVOb2RlKiB1cHJpZ2h0Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodXBy
aWdodEZvbnREYXRhLmdldCgpLCBwYWdlTnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHbHlwaFBhZ2UqIHVwcmlnaHRQYWdlID0gdXByaWdodE5vZGUtPnBhZ2UoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodXByaWdodFBhZ2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2x5cGhEYXRhIHVwcmlnaHREYXRhID0gdXByaWdodFBhZ2UtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjKTsKQEAgLTE1MiwxMSArMTUyLDExIEBAIHN0ZDo6cGFpcjxH
bHlwaERhdGEsIEdseXBoUGFnZSo+IEZvbnQ6OmcKICAgICAgICAgICAgICAgICBpZiAoZGF0YS5m
b250RGF0YSkgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdmFyaWFudEZvbnREYXRhIGZ1
bmN0aW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgcmV0dXJuIDAuCiAgICAgICAgICAgICAgICAgICAg
IC8vIEJ1dCBpZiBpdCBkb2VzLCB3ZSB3aWxsIGp1c3QgcmVuZGVyIHRoZSBjYXBpdGFsIGxldHRl
ciBiaWcuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50
Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRp
b24sIHZhcmlhbnQpOworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IHZhcmlhbnRGb250RGF0YSA9IGRhdGEuZm9udERhdGEtPnZhcmlhbnRGb250RGF0YShtX2ZvbnRE
ZXNjcmlwdGlvbiwgdmFyaWFudCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFudEZv
bnREYXRhKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcihkYXRhLCBw
YWdlKTsKIAotICAgICAgICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdmFyaWFudE5v
ZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHZhcmlhbnRGb250RGF0YSwgcGFn
ZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiB2YXJpYW50
Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodmFyaWFudEZvbnREYXRhLmdl
dCgpLCBwYWdlTnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlKiB2YXJpYW50
UGFnZSA9IHZhcmlhbnROb2RlLT5wYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50UGFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSB2YXJp
YW50UGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwpAQCAtMTk4LDcgKzE5OCw3IEBAIHN0
ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IEZvbnQ6OmcKICAgICAgICAgY29kZVVuaXRz
WzFdID0gVTE2X1RSQUlMKGMpOwogICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAyOwogICAgIH0K
LSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogY2hhcmFjdGVyRm9udERhdGEgPSBmb250Q2FjaGUo
KS0+Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKCp0aGlzLCBjb2RlVW5pdHMsIGNvZGVVbml0c0xl
bmd0aCk7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjaGFyYWN0ZXJGb250RGF0YSA9IGZv
bnRDYWNoZSgpLT5nZXRGb250RGF0YUZvckNoYXJhY3RlcnMoKnRoaXMsIGNvZGVVbml0cywgY29k
ZVVuaXRzTGVuZ3RoKTsKICAgICBpZiAoY2hhcmFjdGVyRm9udERhdGEpIHsKICAgICAgICAgaWYg
KGNoYXJhY3RlckZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsICYmICFjaGFyYWN0ZXJGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSAmJiBpc0NKS0lk
ZW9ncmFwaE9yU3ltYm9sKGMpKQogICAgICAgICAgICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFw
aFZhcmlhbnQ7CkBAIC0yMDcsNyArMjA3LDcgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQ
YWdlKj4gRm9udDo6ZwogICAgIH0KICAgICBpZiAoY2hhcmFjdGVyRm9udERhdGEpIHsKICAgICAg
ICAgLy8gR290IHRoZSBmYWxsYmFjayBnbHlwaCBhbmQgZm9udC4KLSAgICAgICAgR2x5cGhQYWdl
KiBmYWxsYmFja1BhZ2UgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKGNoYXJhY3Rl
ckZvbnREYXRhLCBwYWdlTnVtYmVyKS0+cGFnZSgpOworICAgICAgICBHbHlwaFBhZ2UqIGZhbGxi
YWNrUGFnZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQoY2hhcmFjdGVyRm9udERh
dGEuZ2V0KCksIHBhZ2VOdW1iZXIpLT5wYWdlKCk7CiAgICAgICAgIEdseXBoRGF0YSBkYXRhID0g
ZmFsbGJhY2tQYWdlICYmIGZhbGxiYWNrUGFnZS0+Zm9udERhdGFGb3JDaGFyYWN0ZXIoYykgPyBm
YWxsYmFja1BhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IGNoYXJhY3RlckZvbnREYXRh
LT5taXNzaW5nR2x5cGhEYXRhKCk7CiAgICAgICAgIC8vIENhY2hlIGl0IHNvIHdlIGRvbid0IGhh
dmUgdG8gZG8gc3lzdGVtIGZhbGxiYWNrIGFnYWluIG5leHQgdGltZS4KICAgICAgICAgaWYgKHZh
cmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEZvbnRTZWxlY3Rvcl9oCiAKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzksNyBAQCBj
bGFzcyBGb250U2VsZWN0b3JDbGllbnQ7CiBjbGFzcyBGb250U2VsZWN0b3IgOiBwdWJsaWMgUmVm
Q291bnRlZDxGb250U2VsZWN0b3I+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Gb250U2VsZWN0
b3IoKSB7IH0KLSAgICB2aXJ0dWFsIEZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpID0gMDsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2
b2lkIGZvbnRDYWNoZUludmFsaWRhdGVkKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAJKHJldmlz
aW9uIDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZVRyZWVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgR2x5
cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVyb0ZpbGxlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlR2x5
cGhzIHw9IGZpbGwocGFnZVRvRmlsbCwgZnJvbSwgdG8gLSBmcm9tLCBidWZmZXIgKyBmcm9tICog
KHN0YXJ0IDwgMHgxMDAwMCA/IDEgOiAyKSwgKHRvIC0gZnJvbSkgKiAoc3RhcnQgPCAweDEwMDAw
ID8gMSA6IDIpLCByYW5nZS5mb250RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
dmVHbHlwaHMgfD0gZmlsbChwYWdlVG9GaWxsLCBmcm9tLCB0byAtIGZyb20sIGJ1ZmZlciArIGZy
b20gKiAoc3RhcnQgPCAweDEwMDAwID8gMSA6IDIpLCAodG8gLSBmcm9tKSAqIChzdGFydCA8IDB4
MTAwMDAgPyAxIDogMiksIHJhbmdlLmZvbnREYXRhKCkuZ2V0KCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNjcmF0Y2hQYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHRvIDw9ICBzdGF0aWNfY2FzdDxpbnQ+KEdseXBoUGFnZTo6c2l6ZSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBmcm9tOyBqIDwgdG87IGorKykgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21l
bnRlZEZvbnREYXRhLmNwcAkocmV2aXNpb24gMTI4ODIyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw5ICs0MSw5IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBTZWdtZW50ZWRGb250RGF0YToKICAg
ICBWZWN0b3I8Rm9udERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVu
ZCgpOwogICAgIGZvciAoVmVjdG9yPEZvbnREYXRhUmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmZy
b20oKSA8PSBjICYmIGl0LT50bygpID49IGMpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmZvbnRE
YXRhKCk7CisgICAgICAgICAgICByZXR1cm4gaXQtPmZvbnREYXRhKCkuZ2V0KCk7CiAgICAgfQot
ICAgIHJldHVybiBtX3Jhbmdlc1swXS5mb250RGF0YSgpOworICAgIHJldHVybiBtX3Jhbmdlc1sw
XS5mb250RGF0YSgpLmdldCgpOwogfQogCiBib29sIFNlZ21lbnRlZEZvbnREYXRhOjpjb250YWlu
c0NoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmgJKHJldmlzaW9uIDEyODgy
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgU2ltcGxlRm9udERhdGE7CiAKIHN0cnVjdCBGb250RGF0YVJhbmdlIHsKLSAgICBGb250
RGF0YVJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhKQorICAgIEZvbnREYXRhUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvLCBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSkKICAgICAgICAgOiBtX2Zyb20oZnJv
bSkKICAgICAgICAgLCBtX3RvKHRvKQogICAgICAgICAsIG1fZm9udERhdGEoZm9udERhdGEpCkBA
IC00MywxNiArNDMsMTggQEAgc3RydWN0IEZvbnREYXRhUmFuZ2UgewogCiAgICAgVUNoYXIzMiBm
cm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9CiAgICAgVUNoYXIzMiB0bygpIGNvbnN0IHsg
cmV0dXJuIG1fdG87IH0KLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnREYXRhOyB9CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
Zm9udERhdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREYXRhOyB9CiAKIHByaXZhdGU6CiAgICAg
VUNoYXIzMiBtX2Zyb207CiAgICAgVUNoYXIzMiBtX3RvOwotICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBtX2ZvbnREYXRhOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gbV9mb250RGF0YTsK
IH07CiAKIGNsYXNzIFNlZ21lbnRlZEZvbnREYXRhIDogcHVibGljIEZvbnREYXRhIHsKIHB1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWdtZW50ZWRGb250RGF0YT4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNlZ21lbnRlZEZvbnREYXRhKTsgfQorIAogICAgIHZpcnR1YWwg
flNlZ21lbnRlZEZvbnREYXRhKCk7CiAKICAgICB2b2lkIGFwcGVuZFJhbmdlKGNvbnN0IEZvbnRE
YXRhUmFuZ2UmIHJhbmdlKSB7IG1fcmFuZ2VzLmFwcGVuZChyYW5nZSk7IH0KQEAgLTY0LDYgKzY2
LDggQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgU2VnbWVudGVkRm9udERhdGEo
KSB7IH0KKwogICAgIHZpcnR1YWwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0NoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkocmV2aXNp
b24gMTI4ODIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMzYgKzE3MCwzNiBAQCBib29sIFNpbXBs
ZUZvbnREYXRhOjppc1NlZ21lbnRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1T
aW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZv
bnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
Ojp2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9u
dERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uKSB7CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEg
dmVydGljYWxSaWdodFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CiAgICAgICAgIHZlcnRp
Y2FsUmlnaHRQbGF0Zm9ybURhdGEuc2V0T3JpZW50YXRpb24oSG9yaXpvbnRhbCk7Ci0gICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24gPSBhZG9wdFB0cihu
ZXcgU2ltcGxlRm9udERhdGEodmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250
KCksIGZhbHNlLCB0cnVlKSk7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJp
Z2h0T3JpZW50YXRpb24gPSBjcmVhdGUodmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSwgaXNDdXN0
b21Gb250KCksIGZhbHNlLCB0cnVlKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24uZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZl
ZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBTaW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAorUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnVwcmlnaHRPcmllbnRhdGlv
bkZvbnREYXRhKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9u
dCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCi0g
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBhZG9wdFB0cihu
ZXcgU2ltcGxlRm9udERhdGEobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwg
dHJ1ZSkpOwotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9u
LmdldCgpOworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uID0g
Y3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpOworICAg
IHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uOwogfQogCi1TaW1w
bGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29u
c3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVv
Z3JhcGhGb250RGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAg
ICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3Rv
bUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoKSB7
Ci0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGggPSBhZG9wdFB0cihu
ZXcgU2ltcGxlRm9udERhdGEobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkp
OworICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1f
cGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwogICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+YnJva2VuSWRlb2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0
cnVlOwogICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFw
aC5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsK
IH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNpb24gMTI4ODIyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNzksMTAgKzc5LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgLy8gVXNlZCB0byBj
cmVhdGUgcGxhdGZvcm0gZm9udHMuCi0gICAgU2ltcGxlRm9udERhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFs
c2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcg
PSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250LCBpc0xvYWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKKyAg
ICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgU2ltcGxlRm9udERh
dGEoUGFzc093blB0cjxBZGRpdGlvbmFsRm9udERhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IGNyZWF0ZShQYXNzT3duUHRyPEFkZGl0aW9uYWxGb250RGF0YT4g
Zm9udERhdGEsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaW1wbGVGb250
RGF0YShmb250RGF0YSwgZm9udFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykp
OworICAgIH0KIAogICAgIHZpcnR1YWwgflNpbXBsZUZvbnREYXRhKCk7CiAKQEAgLTkxLDExICs5
NywxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgT3BlblR5cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2Fs
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxEYXRhOyB9CiAjZW5kaWYKIAotICAgIFNp
bXBsZUZvbnREYXRhKiBzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBj
b25zdDsKLSAgICBTaW1wbGVGb250RGF0YSogZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgU2ltcGxlRm9udERhdGEqIGJyb2tlbklkZW9ncmFw
aEZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxD
YXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dy
YXBoRm9udERhdGEoKSBjb25zdDsKIAotICAgIFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZh
cmlhbnQpIGNvbnN0CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2
YXJpYW50KSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAg
IGNhc2UgU21hbGxDYXBzVmFyaWFudDoKQEAgLTExMiw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBjb25zdF9jYXN0PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7CiAgICAgfQogCi0g
ICAgU2ltcGxlRm9udERhdGEqIHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29u
c3Q7Ci0gICAgU2ltcGxlRm9udERhdGEqIHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0
aW9uRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJp
Z2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNWZXJ0aWNhbEds
eXBocygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmVydGljYWxHbHlwaHM7IH0KICAgICBib29sIGlz
VGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2s7IH0KQEAgLTIwMSw2ICsyMDcsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
aXZhdGU6CisgICAgU2ltcGxlRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wg
aXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKTsKKworICAgIFNpbXBsZUZvbnREYXRhKFBhc3NP
d25QdHI8QWRkaXRpb25hbEZvbnREYXRhPiAsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKKwogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7
CiAgICAgdm9pZCBwbGF0Zm9ybUdseXBoSW5pdCgpOwogICAgIHZvaWQgcGxhdGZvcm1DaGFyV2lk
dGhJbml0KCk7CkBAIC0yMTAsNyArMjIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tbW9u
SW5pdCgpOwogCi0gICAgUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKIAogI2lmIChQTEFU
Rk9STShXSU4pICYmICFPUyhXSU5DRSkpIFwKICAgICB8fCAoT1MoV0lORE9XUykgJiYgUExBVEZP
Uk0oV1gpKQpAQCAtMjU0LDExICsyNjQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgfkRlcml2ZWRG
b250RGF0YSgpOwogCiAgICAgICAgIGJvb2wgZm9yQ3VzdG9tRm9udDsKLSAgICAgICAgT3duUHRy
PFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHM7Ci0gICAgICAgIE93blB0cjxTaW1wbGVGb250RGF0
YT4gZW1waGFzaXNNYXJrOwotICAgICAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IGJyb2tlbklk
ZW9ncmFwaDsKLSAgICAgICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3Jp
ZW50YXRpb247Ci0gICAgICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4gdXByaWdodE9yaWVudGF0
aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2FwczsKKyAgICAgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7CisgICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiB1cHJpZ2h0T3JpZW50YXRpb247CiAjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0o
Q0hST01JVU0pICYmIE9TKERBUldJTikpCiAgICAgICAgIG11dGFibGUgUmV0YWluUHRyPENGTXV0
YWJsZURpY3Rpb25hcnlSZWY+IGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VzOwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRy
b2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAkocmV2aXNpb24gMTI4ODIyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3Jt
SW5pdCgpCiB7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnRE
YXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIGljdTo6TG9jYWxlIGxvY2FsZSA9IGljdTo6TG9j
YWxlOjpnZXREZWZhdWx0KCk7CiAgICAgUGxhdGZvcm1TdXBwb3J0OjpGb250RmFtaWx5IGZhbWls
eTsKQEAgLTExMCwxMiArMTEwLDEyIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldEZvbnQKICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoZ2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBhdG9taWNGYW1pbHksIERvTm90UmV0YWlu
KSwgRG9Ob3RSZXRhaW4pOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1p
bGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
JiBmb250KQogewogICAgIHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2VyaWYsICgiU2VyaWYiKSk7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIG1vbm9zcGFjZSwg
KCJNb25vc3BhY2UiKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3Bw
CShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOCwx
MiArMzE4LDEyIEBAIHN0YXRpYyBib29sIGZvbnRDb250YWluc0NoYXJhY3Rlcihjb25zdAogfQog
CiAvLyBUcmllcyB0aGUgZ2l2ZW4gZm9udCBhbmQgc2F2ZSBpdCB8b3V0Rm9udEZhbWlseU5hbWV8
IGlmIGl0IHN1Y2NlZWRzLgotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Zm9udERhdGFGcm9t
RGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiBmb250LCB3Y2hh
cl90KiBvdXRGb250RmFtaWx5TmFtZSkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Zm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluLCBjb25zdCBM
T0dGT05UJiBmb250LCB3Y2hhcl90KiBvdXRGb250RmFtaWx5TmFtZSkKIHsKLSAgICBTaW1wbGVG
b250RGF0YSogZm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZv
bnQubGZGYWNlTmFtZSwgZmFsc2UsIHNob3VsZFJldGFpbik7CisgICAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBmb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZm9u
dC5sZkZhY2VOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoZm9udERhdGEpCiAg
ICAgICAgIG1lbWNweShvdXRGb250RmFtaWx5TmFtZSwgZm9udC5sZkZhY2VOYW1lLCBzaXplb2Yo
Zm9udC5sZkZhY2VOYW1lKSk7Ci0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBMT05HIHRvR0RJRm9udFdlaWdodChGb250V2Vp
Z2h0IGZvbnRXZWlnaHQpCkBAIC00MDYsNyArNDA2LDcgQEAgc3RydWN0IEdldExhc3RSZXNvcnRG
YWxsYmFja0ZvbnRQcm9jRGF0YQogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiogbV9mb250RGVz
Y3JpcHRpb247CiAgICAgRm9udENhY2hlOjpTaG91bGRSZXRhaW4gbV9zaG91bGRSZXRhaW47CiAg
ICAgd2NoYXJfdCogbV9mb250TmFtZTsKLSAgICBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YTsK
KyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CiB9OwogCiBzdGF0aWMgaW50
IENBTExCQUNLIGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnRQcm9jKGNvbnN0IExPR0ZPTlQqIGxv
Z0ZvbnQsIGNvbnN0IFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JEIGZvbnRUeXBlLCBMUEFSQU0g
bFBhcmFtKQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQo
KQogCiAvLyBHaXZlbiB0aGUgZGVzaXJlZCBiYXNlIGZvbnQsIHRoaXMgd2lsbCBjcmVhdGUgYSBT
aW1wbGVGb250RGF0YSBmb3IgYSBzcGVjaWZpYwogLy8gZm9udCB0aGF0IGNhbiBiZSB1c2VkIHRv
IHJlbmRlciB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgY2hhcmFjdGVycy4KLWNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIC8vIEZJ
WE1FOiBDb25zaWRlciBwYXNzaW5nIGZvbnREZXNjcmlwdGlvbi5kb21pbmFudFNjcmlwdCgpCiAg
ICAgLy8gdG8gR2V0RmFsbGJhY2tGYW1pbHkgaGVyZS4KQEAgLTUwOCwxMiArNTA4LDEyIEBAIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKIAogfQogCi1TaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBm
b250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAgIHJldHVybiAwOwogfQogCi1T
aW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4p
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWlu
IHNob3VsZFJldGFpbikKIHsKICAgICBGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlUeXBl
IGdlbmVyaWMgPSBkZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCk7CiAKQEAgLTUzMCw5ICs1MzAs
OSBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgZWxzZSBp
ZiAoZ2VuZXJpYyA9PSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSkKICAgICAgICAg
Zm9udFN0ciA9IGNvdXJpZXJTdHI7CiAKLSAgICBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udCA9
IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmb250U3RyLCBmYWxzZSwgc2hvdWxkUmV0
YWluKTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnQgPSBnZXRDYWNoZWRG
b250RGF0YShkZXNjcmlwdGlvbiwgZm9udFN0ciwgZmFsc2UsIHNob3VsZFJldGFpbik7CiAgICAg
aWYgKHNpbXBsZUZvbnQpCi0gICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICByZXR1
cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAKICAgICAvLyBGYWxsIGJhY2sgdG8gc3lzdGVtIGZv
bnRzIGFzIFdpbiBTYWZhcmkgZG9lcyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gbXVzdAogICAgIC8v
IHJldHVybiBhIHZhbGlkIGZvbnQuIE9uY2Ugd2UgZmluZCBhIHZhbGlkIHN5c3RlbSBmb250LCB3
ZSBzYXZlIGl0cyBuYW1lCkBAIC01NDYsNyArNTQ2LDcgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydAogICAgICAgICBMT0dGT05UIGRlZmF1bHRHVUlMb2dGb250Owog
ICAgICAgICBHZXRPYmplY3QoZGVmYXVsdEdVSUZvbnQsIHNpemVvZihkZWZhdWx0R1VJTG9nRm9u
dCksICZkZWZhdWx0R1VJTG9nRm9udCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERh
dGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIGRl
ZmF1bHRHVUlMb2dGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBz
aW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAg
IH0KIAogICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50IG1ldHJpY3MgZm9udHMuCkBAIC01
NTQsMTUgKzU1NCwxNSBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0
CiAgICAgbm9uQ2xpZW50TWV0cmljcy5jYlNpemUgPSBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyk7
CiAgICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBz
aXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAwKSkgewogICAgICAg
ICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNj
cmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZh
bGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAg
ICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250
ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRS
ZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZNZW51Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0g
ICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVG
b250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNj
cmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0
cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJu
IHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAg
ICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250
KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9uRm9u
dCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAg
ICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBs
ZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNo
b3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9u
dE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1
cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgLy8gRmFsbCBiYWNrIHRvIGFs
bCB0aGUgZm9udHMgaW5zdGFsbGVkIGluIHRoaXMgUEMuIFdoZW4gYSBmb250IGhhcyBhCkBAIC01
NzYsNyArNTc2LDcgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAog
ICAgICAgICBFbnVtRm9udEZhbWlsaWVzKGRjLCAwLCBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250
UHJvYywgcmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KCZwcm9jRGF0YSkpOwogCiAgICAgICAgIGlm
IChwcm9jRGF0YS5tX2ZvbnREYXRhKQotICAgICAgICAgICAgcmV0dXJuIHByb2NEYXRhLm1fZm9u
dERhdGE7CisgICAgICAgICAgICByZXR1cm4gcHJvY0RhdGEubV9mb250RGF0YS5yZWxlYXNlKCk7
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMTI4ODIyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJv
bWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwzNCArMTA5LDM0IEBAIHZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAogewogICAgIExPR0ZPTlQgd2luRm9udDsKICAgICBHZXRPYmplY3QobV9w
bGF0Zm9ybURhdGEuaGZvbnQoKSwgc2l6ZW9mKExPR0ZPTlQpLCAmd2luRm9udCk7CiAgICAgZmxv
YXQgc2NhbGVkU2l6ZSA9IHNjYWxlRmFjdG9yICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpOwogICAgIHdpbkZvbnQubGZIZWlnaHQgPSAtbHJvdW5kZihzY2FsZWRTaXplKTsKICAgICBI
Rk9OVCBoZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmd2luRm9udCk7Ci0gICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGhmb250LCBzY2FsZWRT
aXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKSwgaXNDdXN0b21Gb250KCksIGZhbHNl
KSk7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YSho
Zm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSksIGlzQ3VzdG9t
Rm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0CitQYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBz
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEg
PSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rl
cml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21h
bGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNyk7CiAKLSAg
ICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4g
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBs
ZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9u
dCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShm
b250RGVzY3JpcHRpb24sIC41KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNN
YXJrOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENh
Y2hlRnJlZVR5cGUuY3BwCShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDcgKzgxLDcgQEAgRmNQYXR0ZXJuKiBmaW5kQmVzdEZvbnRHaXZlbkZhbGxiYWNr
cyhjbwogICAgIHJldHVybiBGY0ZvbnRTZXRNYXRjaCgwLCBzZXRzLCAxLCBwYXR0ZXJuLCAmZm9u
dENvbmZpZ1Jlc3VsdCk7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFJlZlB0cjxGY1BhdHRlcm4+IHBhdHRl
cm4gPSBhZG9wdFJlZihjcmVhdGVGb250Q29uZmlnUGF0dGVybkZvckNoYXJhY3RlcnMoY2hhcmFj
dGVycywgbGVuZ3RoKSk7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEgPSBm
b250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2lt
cGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NywxNyArODcsMTcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSk7Ci0gICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGNhaXJvX3NjYWxl
ZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpKSwKKyAgICBy
ZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGNhaXJvX3NjYWxl
ZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9udCgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVG
YWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EYXRhLnN5
bnRoZXRpY0JvbGQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tRm9udCgpLCBmYWxz
ZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9u
dERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CkBAIC0xMDUsMTcgKzEwNSwxNyBAQCBTaW1w
bGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2FwCiAgICAgaWYgKCFtX2Rlcml2ZWRG
b250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNyk7CiAKLSAgICByZXR1
cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJp
dmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnRE
YXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsK
ICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVz
Y3JpcHRpb24sIC41KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNN
YXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwog
fQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsx
NjcsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbGVhZGluZ0V4cGFuc2lvbjsKICAgICBib29s
IG1fYWZ0ZXJFeHBhbnNpb247CiAKLSAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IG1fZmFsbGJhY2tGb250czsKKyAgICBIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4gPiBt
X2ZhbGxiYWNrRm9udHM7CiAKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwogICAg
IGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0
Q29udHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI4MiwxMyArMjgyLDEzIEBAIHZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxleFRl
eHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgp
LCBjcCwgc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3Ro
LCBtX3J1bi5sdHIoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250
Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250
TmFtZS5nZXQoKSwgZmFsc2UsIEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pOworICAgICAgICAgICAg
ICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YShtX2Zv
bnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSwgRm9udENhY2hlOjpE
b05vdFJldGFpbikuZ2V0KCk7CiAjaWYgIVBMQVRGT1JNKFdYKQogICAgICAgICAgICAgICAgICAg
ICAvLyBDb3JlIFRleHQgbWF5IGhhdmUgdXNlZCBhIGZvbnQgdGhhdCBpcyBub3Qga25vd24gdG8g
TlNGb250TWFuYWdlci4gSW4gdGhhdCBjYXNlLCBmYWxsIGJhY2sgb24KICAgICAgICAgICAgICAg
ICAgICAgLy8gdXNpbmcgdGhlIGZvbnQgYXMgcmV0dXJuZWQsIGV2ZW4gdGhvdWdoIGl0IG1heSBu
b3QgaGF2ZSB0aGUgYmVzdCBOU0ZvbnRSZW5kZXJpbmdNb2RlLgogICAgICAgICAgICAgICAgICAg
ICBpZiAoIXJ1bkZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBGb250UGxhdGZv
cm1EYXRhIHJ1bkZvbnRQbGF0Zm9ybURhdGEoKE5TRm9udCAqKXJ1bkZvbnQsIENURm9udEdldFNp
emUocnVuRm9udCksIG1fZm9udC5mb250RGVzY3JpcHRpb24oKS51c2VQcmludGVyRm9udCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9udENhY2hlKCktPmdldENh
Y2hlZEZvbnREYXRhKCZydW5Gb250UGxhdGZvcm1EYXRhLCBGb250Q2FjaGU6OkRvTm90UmV0YWlu
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9udENhY2hlKCktPmdl
dENhY2hlZEZvbnREYXRhKCZydW5Gb250UGxhdGZvcm1EYXRhLCBGb250Q2FjaGU6OkRvTm90UmV0
YWluKS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgICAgICAg
ICAgICAgLy8ganVzdCBhc3NlcnQgZm9yIG5vdywgdW50aWwgd2UgY2FuIGRldmlzZSBhIGJldHRl
ciBmaXggdGhhdCB3b3JrcyB3aXRoIHd4LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZpc2lvbiAxMjg4MjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Fw
cEtpdEZvbnRXZWlnaHRCb2wKICAgICByZXR1cm4gYXBwS2l0Rm9udFdlaWdodCA+PSA3OwogfQog
Ci1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3Rl
cnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgp
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKIHsKICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKICAgICBVMTZfR0VUKGNoYXJhY3RlcnMs
IDAsIDAsIGxlbmd0aCwgY2hhcmFjdGVyKTsKQEAgLTE2NiwxMiArMTY2LDEyIEBAIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9u
dERhdGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0YWluKTsKIH0KIAotU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4g
YXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIAogICAgIC8vIHRoZSBwcmVz
ZW5jZSBvZiBrZXl3b3JkcyBpbiB0aGUgdGhlIHJlcXVlc3RlZCBuYW1lcy4gIEZvciBleGFtcGxl
LCB3ZSdsbAogICAgIC8vIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8g
R2VlemEgUHJvLgotICAgIFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IDA7CisgICAg
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKICAgICBjb25zdCBGb250RmFt
aWx5KiBjdXJyRmFtaWx5ID0gJmZvbnQuZm9udERlc2NyaXB0aW9uKCkuZmFtaWx5KCk7CiAgICAg
d2hpbGUgKGN1cnJGYW1pbHkgJiYgIXNpbXBsZUZvbnREYXRhKSB7CiAgICAgICAgIGlmIChjdXJy
RmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewpAQCAtMTg0LDE4ICsxODQsMTggQEAgU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbgogICAgICAgICBjdXJyRmFtaWx5ID0g
Y3VyckZhbWlseS0+bmV4dCgpOwogICAgIH0KIAotICAgIHJldHVybiBzaW1wbGVGb250RGF0YTsK
KyAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOwogfQogCi1TaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hv
dWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCB0aW1l
c1N0ciwgKCJUaW1lcyIpKTsKIAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0
byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSds
bCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91
dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgU2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnREYXRh
ID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0ciwgZmFsc2UsIHNo
b3VsZFJldGFpbik7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9
IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlLCBzaG91
bGRSZXRhaW4pOwogICAgIGlmIChzaW1wbGVGb250RGF0YSkKLSAgICAgICAgcmV0dXJuIHNpbXBs
ZUZvbnREYXRhOworICAgICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOwogCiAg
ICAgLy8gVGhlIFRpbWVzIGZhbGxiYWNrIHdpbGwgYWxtb3N0IGFsd2F5cyB3b3JrLCBidXQgaW4g
dGhlIGhpZ2hseSB1bnVzdWFsIGNhc2Ugd2hlcmUKICAgICAvLyB0aGUgdXNlciBkb2Vzbid0IGhh
dmUgaXQsIHdlIGZhbGwgYmFjayBvbiBMdWNpZGEgR3JhbmRlIGJlY2F1c2UgdGhhdCdzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Rm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNpb24gMTI4ODIyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OSwyMSArMTg5LDIxIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Ojpm
b250RGF0YUZvckMKICAgICAgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkgewogICAgICAgICAgICAgICAgIGlmIChpc0NK
S0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFzaW1wbGVGb250RGF0YS0+aGFz
VmVydGljYWxHbHlwaHMoKSkgewogICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gQnJva2Vu
SWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBz
aW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoRm9udERhdGEoKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoRm9u
dERhdGEoKS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZm9udERlc2NyaXB0
aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQpIHsK
LSAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERhdGEqIHZlcnRpY2FsUmlnaHRGb250RGF0
YSA9IHNpbXBsZUZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOwor
ICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250RGF0YSogdmVydGljYWxSaWdodEZvbnREYXRh
ID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkuZ2V0
KCk7CiAgICAgICAgICAgICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRHbHlwaCA9IHZlcnRp
Y2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3Rlckds
eXBoRGF0YS5nbHlwaCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0g
dmVydGljYWxSaWdodEZvbnREYXRhOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250
RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
U2ltcGxlRm9udERhdGEqIHVwcmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSgpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICBHbHlwaCB1
cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFy
YWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZ2x5cGgpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250
RGF0YSA9IHVwcmlnaHRGb250RGF0YTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEq
IHZhcmlhbnRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250
RGVzY3JpcHRpb24sIHZhcmlhbnQpKQorICAgICAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiB2YXJpYW50Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1f
Zm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKICAgICAgICAgICAgICAgICBzaW1wbGVG
b250RGF0YSA9IHZhcmlhbnRGb250RGF0YTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRh
TWFjLm1tCShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwOCwxOSAr
MzA4LDE5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAgaWYg
KCFpc0N1c3RvbUZvbnQoKSAmJiBtX2Rlcml2ZWRGb250RGF0YSkgewogICAgICAgICAvLyBUaGVz
ZSBjb21lIGZyb20gdGhlIGNhY2hlLgogICAgICAgICBpZiAobV9kZXJpdmVkRm9udERhdGEtPnNt
YWxsQ2FwcykKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEobV9kZXJp
dmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5sZWFrUHRyKCkpOworICAgICAgICAgICAgZm9udENhY2hl
KCktPnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpKTsK
IAogICAgICAgICBpZiAobV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKLSAgICAgICAg
ICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEobV9kZXJpdmVkRm9udERhdGEtPmVtcGhh
c2lzTWFyay5sZWFrUHRyKCkpOworICAgICAgICAgICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250
RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpKTsKICAgICB9CiB9CiAK
LVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2Nh
bGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChpc0N1c3RvbUZvbnQo
KSkgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKG1fcGxhdGZvcm1E
YXRhKTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVkRm9udERhdGEubV9z
aXplICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9u
dERhdGEoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKSk7CisgICAgICAgIHJldHVybiBTaW1w
bGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSk7CiAgICAgfQog
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMzQ1LDMxICszNDUsMzEgQEAg
UGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogICAgICAgICBzY2FsZWRG
b250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIE5TSXRhbGljRm9udE1h
c2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TSXRhbGljRm9udE1hc2spOwogCiAgICAgICAg
IC8vIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKSB0YWtlcyBjYXJlIG9mIG5vdCBk
ZWxldGluZyB0aGUgY2FjaGVkIGZvbnQgZGF0YSB0d2ljZS4KLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9udERhdGEpKTsKKyAg
ICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9udERh
dGEpOwogICAgIH0KICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250
RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBz
bWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFs
bENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBE
ZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNWYpOwog
Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAg
cmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxl
Rm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAJKHJldmlzaW9uIDEyODgyMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTcgKzM1LDE3IEBAIHZvaWQgRm9udENhY2hlOjpw
bGF0Zm9ybUluaXQoKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotY29uc3Qg
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQm
IGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7
CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1
c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCiAgICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRoZSBk
ZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZz
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxlRm9u
dERhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHJldmlzaW9uIDEyODgyMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFu
Z28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwzMiArODQsMzIgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0
YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3Ip
IGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoc2NhbGVGYWN0b3IgKiBm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxh
dGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOwotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhKSk7CisgICAgcmV0dXJuIFNpbXBs
ZUZvbnREYXRhOjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgp
KTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdl
dCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1w
bGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpj
cmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhh
c2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0
ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2Fj
aGVRdC5jcHAJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCBzdGF0aWMgUVJhd0ZvbnQgcmF3Rm9udEZvckNoYXJhY3RlcnMoY29uCiAgICAgcmV0dXJuIGds
eXBocy5yYXdGb250KCk7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJp
bmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihjaGFyYWN0ZXJz
KSwgbGVuZ3RoKTsKICAgICBRUmF3Rm9udCBjb21wdXRlZEZvbnQgPSByYXdGb250Rm9yQ2hhcmFj
dGVycyhxc3RyaW5nLCBmb250LnJhd0ZvbnQoKSk7CkBAIC03MywxMiArNzMsMTIgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgIHJldHVybiBnZXRDYWNoZWRG
b250RGF0YSgmYWx0ZXJuYXRlRm9udCwgRG9Ob3RSZXRhaW4pOwogfQogCi1TaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250
KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAgIHJldHVybiAwOwogfQogCi1TaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWlu
KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRS
ZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyBmYWxsYmFja0Zh
bWlseSA9IFFGb250KGZvbnREZXNjcmlwdGlvbi5mYW1pbHkoKS5mYW1pbHkoKSkubGFzdFJlc29y
dEZhbWlseSgpOwogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShuZXcgRm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRmFtaWx5KSwgc2hvdWxkUmV0YWluKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1Np
bXBsZUZvbnREYXRhUXQuY3BwCShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsMzAgKzYxLDMwIEBAIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9y
R2wKICAgICByZXR1cm4gYWR2YW5jZXMuYXQoMCkueCgpOwogfQogCi1QYXNzT3duUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZWRTaXplID0gbHJvdW5kZihm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1E
YXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgcmV0dXJuIFNp
bXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwgc2Nh
bGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQo
KSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2Ny
aXB0aW9uLCBzbWFsbENhcHNGcmFjdGlvbik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxs
Q2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERl
cml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBo
YXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGVtcGhhc2lz
TWFya0ZyYWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNN
YXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwog
fQogCiBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5
cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRDYWNoZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHAJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDkgKzU0LDcgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgp
CiB7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZv
bnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkKIHsKICAgICBpY3U6OkxvY2FsZSBsb2NhbGUgPSBpY3U6OkxvY2Fs
ZTo6Z2V0RGVmYXVsdCgpOwogICAgIFBsYXRmb3JtU3VwcG9ydDo6Rm9udEZhbWlseSBmYW1pbHk7
CkBAIC05MywxMiArOTEsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
Rm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgmcGxhdGZvcm1EYXRhLCBEb05vdFJl
dGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hv
dWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzYW5zU3RyLCAoIlNhbnMiKSk7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNlcmlmU3RyLCAoIlNlcmlmIikp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250
RGF0YVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcAkocmV2aXNpb24gMTI4ODIyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMzAgKzE3MCwzMCBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29u
c3QKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZWRTaXplID0gbHJvdW5kZihmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRT
aXplKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRh
OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwgc2NhbGVkU2l6ZSksIGlz
Q3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0
YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFs
bENhcHNGcmFjdGlvbik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fw
cy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAot
U2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0
YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5l
bXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBj
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGVtcGhhc2lzTWFya0ZyYWN0aW9u
KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOwor
ICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBib29sIFNp
bXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhY2hlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAkocmV2aXNpb24gMTI4ODIyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NiwxMCArMTg2LDEwIEBAIHN0YXRpYyBIRk9OVCBjcmVhdGVNTGFu
Z0ZvbnQoSU1MYW5nRm9udEwKICAgICByZXR1cm4gaGZvbnQ7CiB9CiAKLWNvbnN0IFNpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFVD
aGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07Ci0gICAgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhOwogICAgIEhXbmRE
QyBoZGMoMCk7CiAgICAgSEZPTlQgcHJpbWFyeUZvbnQgPSBmb250LnByaW1hcnlGb250KCktPmZv
bnREYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciktPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CiAg
ICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgcHJpbWFyeUZvbnQpOwpAQCAt
MjkzLDI0ICsyOTMsMjQgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9u
dAogICAgICAgICBEZWxldGVPYmplY3QoaGZvbnQpOwogICAgIH0KIAotICAgIHJldHVybiBmb250
RGF0YTsKKyAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwogfQogCi1TaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250
KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAgIHJldHVybiAwOwogfQogCi1TaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91
bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWls
eU5hbWUpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmZvbnREYXRhRnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRv
bWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKICAgICBBdG9taWNTdHJpbmcgZmFtaWx5
TmFtZSA9IFN0cmluZyhmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBM
Rl9GQUNFU0laRSkpOwotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdldENhY2hlZEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZmFsc2UsIHNob3VsZFJldGFpbik7
CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZmFsc2UsIHNob3VsZFJldGFpbik7CiAgICAg
aWYgKGZvbnREYXRhKQogICAgICAgICBvdXRGb250RmFtaWx5TmFtZSA9IGZhbWlseU5hbWU7Ci0g
ICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAK
LVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRS
ZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIGZhbGxiYWNrRm9udE5hbWUsICgpKTsKICAgICBpZiAoIWZhbGxiYWNrRm9udE5h
bWUuaXNFbXB0eSgpKQpAQCAtMzI5LDExICszMjksMTEgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydAogICAgICAgICBBdG9taWNTdHJpbmcoIkx1Y2lkYSBTYW5zIFVu
aWNvZGUiKSwKICAgICAgICAgQXRvbWljU3RyaW5nKCJBcmlhbCIpCiAgICAgfTsKLSAgICBTaW1w
bGVGb250RGF0YSogc2ltcGxlRm9udDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBs
ZUZvbnQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxi
YWNrRm9udHMpOyArK2kpIHsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBnZXRDYWNoZWRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udHNbaV0sIGZhbHNlLCBzaG91bGRSZXRh
aW4pKSB7CiAgICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1lID0gZmFsbGJhY2tGb250c1tpXTsK
LSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBs
ZUZvbnQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDIsNyArMzQyLDcgQEAg
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgICAgICBMT0dGT05U
IGRlZmF1bHRHVUlMb2dGb250OwogICAgICAgICBHZXRPYmplY3QoZGVmYXVsdEdVSUZvbnQsIHNp
emVvZihkZWZhdWx0R1VJTG9nRm9udCksICZkZWZhdWx0R1VJTG9nRm9udCk7CiAgICAgICAgIGlm
IChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNj
cmlwdGlvbiwgc2hvdWxkUmV0YWluLCBkZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBz
aW1wbGVGb250LnJlbGVhc2UoKTsKICAgICB9CiAKICAgICAvLyBGYWxsIGJhY2sgdG8gTm9uLWNs
aWVudCBtZXRyaWNzIGZvbnRzLgpAQCAtMzUwLDE1ICszNTAsMTUgQEAgU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgIG5vbkNsaWVudE1ldHJpY3MuY2JTaXplID0g
c2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpOwogICAgIGlmIChTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhT
UElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpLCAmbm9uQ2xp
ZW50TWV0cmljcywgMCkpIHsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21E
ZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNs
aWVudE1ldHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAg
ICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVh
c2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFu
ZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3Mu
bGZNZW51Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxl
Rm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAg
aWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERl
c2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZTdGF0dXNGb250LCBm
YWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAg
ICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9u
dCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIHNo
b3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZkNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnRO
YW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJu
IHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRh
RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwg
bm9uQ2xpZW50TWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAg
ICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9u
dC5yZWxlYXNlKCk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiAxMjg4MjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzIsNDAgKzEzMiw0MCBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURl
c3Ryb3koKQogICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwogfQogCi1QYXNzT3du
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBmbG9hdCBzY2FsZWRTaXplID0gc2NhbGVG
YWN0b3IgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7
CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udChtX3BsYXRmb3JtRGF0YSk7CiAg
ICAgICAgIHNjYWxlZEZvbnQuc2V0U2l6ZShzY2FsZWRTaXplKTsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShzY2FsZWRGb250LCB0cnVlLCBmYWxzZSkpOworICAg
ICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRGb250LCB0cnVlLCBmYWxz
ZSk7CiAgICAgfQogCiAgICAgTE9HRk9OVCB3aW5mb250OwogICAgIEdldE9iamVjdChtX3BsYXRm
b3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9OVCksICZ3aW5mb250KTsKICAgICB3aW5mb250
LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2NhbGVkU2l6ZSAqIChtX3BsYXRmb3JtRGF0YS51c2VHREko
KSA/IDEgOiAzMikpOwogICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZ3aW5m
b250KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9y
bURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwg
bV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3JtRGF0YS51c2VHREko
KSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6
Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRh
LnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3Bs
YXRmb3JtRGF0YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBs
ZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShp
c0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQog
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBjU21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyKTsKIAotICAg
IHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxl
Rm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250
KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBo
YXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01h
cms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5DRS5j
cHAJKHJldmlzaW9uIDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw3
IEBAIHZvaWQgRm9udENhY2hlOjpjb21VbmluaXRpYWxpemUoKQogICAgIH0KIH0KIAotY29uc3Qg
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7
CiAgICAgU3RyaW5nIGZhbWlseU5hbWU7CiAgICAgV0NIQVIgbmFtZVtMRl9GQUNFU0laRV07CkBA
IC0yMzUsMTAgKzIzNSwxMSBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRG
b250CiAgICAgdW5zaWduZWQgdW5pY29kZVJhbmdlID0gZmluZENoYXJVbmljb2RlUmFuZ2UoY2hh
cmFjdGVyKTsKIAogI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05U
X0xJTksgPT0gMikKLSAgICBpZiAoSU1MYW5nRm9udExpbmsyKiBsYW5nRm9udExpbmsgPSBnZXRG
b250TGlua0ludGVyZmFjZSgpKSB7CisgICAgaWYgKElNTGFuZ0ZvbnRMaW5rMiogbGFuZ0ZvbnRM
aW5rID0gZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkKICNlbHNlCi0gICAgaWYgKElNTGFuZ0ZvbnRM
aW5rKiBsYW5nRm9udExpbmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKSB7CisgICAgaWYgKElN
TGFuZ0ZvbnRMaW5rKiBsYW5nRm9udExpbmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKQogI2Vu
ZGlmCisgICAgewogICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBHZXRDdXJyZW50T2JqZWN0KGdf
c2NyZWVuREMsIE9CSl9GT05UKTsKICAgICAgICAgSEZPTlQgaGZvbnQgPSAwOwogICAgICAgICBE
V09SRCBjb2RlUGFnZXMgPSAwOwpAQCAtMjY3LDEwICsyNjgsMTEgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgICAgICAgICAgICAgICAgICAvLyBXZSBhc2tl
ZCBhYm91dCBhIGNvZGUgcGFnZSB0aGF0IGlzIG5vdCBvbmUgb2YgdGhlIGNvZGUgcGFnZXMKICAg
ICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYnkgTUxhbmcsIHNvIHRoZSBmb250IG1pZ2h0
IG5vdCBjb250YWluIHRoZSBjaGFyYWN0ZXIuCiAjaWYgZGVmaW5lZChJTUxBTkdfRk9OVF9MSU5L
KSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9PSAyKQotICAgICAgICAgICAgICAgICAgICBpZiAoIWN1
cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBjaGFy
YWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvbnRDb250YWluc0No
YXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGNoYXJhY3RlcikpCiAjZWxzZQotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIobGFuZ0Zv
bnRMaW5rLCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVyLCBuYW1lKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIobGFuZ0ZvbnRMaW5r
LCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVyLCBuYW1lKSkKICNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RPYmplY3QoZ19zY3Jl
ZW5EQywgb2xkRm9udCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nRm9udExpbmstPlJl
bGVhc2VGb250KGhmb250KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGhmb250ID0gMDsKQEAg
LTMwOCwyMCArMzEwLDIwIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZv
bnQKIAogICAgICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgICAgIGlmIChyZXN1
bHQgJiYgcmVzdWx0LT5oYXNoKCkgIT0gb3JpZ0ZvbnQuaGFzaCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEocmVzdWx0LCBE
b05vdFJldGFpbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnREYXRhOworICAgICAgICAg
ICAgaWYgKFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0
YShyZXN1bHQsIERvTm90UmV0YWluKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9udERhdGEu
cmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmKQogewogICAgIHJldHVybiAwOwogfQogCi1T
aW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2MsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzYywgU2hvdWxkUmV0YWluIHNob3Vs
ZFJldGFpbikKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhv
dyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawog
ICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdp
bmcgYW55IHByZWZzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAJKHJldmlzaW9u
IDEyODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBs
ZUZvbnREYXRhV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKLVBhc3NPd25QdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVk
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzYyhmb250RGVz
Y3JpcHRpb24pOwogICAgIGZvbnREZXNjLnNldENvbXB1dGVkU2l6ZShscm91bmRmKHNjYWxlRmFj
dG9yICogZm9udERlc2MuY29tcHV0ZWRTaXplKCkpKTsKQEAgLTcxLDI4ICs3MSwyOCBAQCBQYXNz
T3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgZm9udERlc2Muc2V0S2V5
d29yZFNpemUobHJvdW5kZihzY2FsZUZhY3RvciAqIGZvbnREZXNjLmtleXdvcmRTaXplKCkpKTsK
ICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9u
dFBsYXRmb3JtRGF0YShmb250RGVzYywgbV9wbGF0Zm9ybURhdGEuZmFtaWx5KCkpOwogICAgIGlm
ICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFNpbXBsZUZvbnREYXRhKCpyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnJlc3VsdCk7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZv
bnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERl
c2NyaXB0aW9uLCAuNyk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fw
cy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAot
U2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0
YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5l
bXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBj
cmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAotICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBEV09SRCBnZXRLbm93bkZvbnRDb2RlUGFn
ZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250Q2FjaGVXeC5jcHAJKHJldmlzaW9uIDEyODgyMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1J
bml0KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERh
dGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRG
b250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpCiB7Ci0gICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gMDsK
KyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gMDsKICAgICBmb250RGF0YSA9
IGdldENhY2hlZEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnQuZmFtaWx5KCku
ZmFtaWx5KCksIGZhbHNlLCBEb05vdFJldGFpbik7CiAgICAgaWYgKCFmb250RGF0YS0+Y29udGFp
bnNDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpCiAgICAgICAgIGZvbnREYXRhID0gZ2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoZm9udCk7CkBAIC01MywxMiArNTMsMTIgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgICAgICBmb250RGF0YSA9IGdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udC5mb250RGVzY3JpcHRpb24oKSk7CiAKICAgICBB
U1NFUlQoZm9udERhdGEpOwotICAgIHJldHVybiBmb250RGF0YTsKKyAgICByZXR1cm4gZm9udERh
dGEucmVsZWFzZSgpOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFy
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBm
b250KQogewotICAgIFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9IDA7CisgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IDA7CiAjaWYgT1MoREFSV0lOKQog
ICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2gg
YmFzZWQgb24gCiAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUgcmVx
dWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUsIHdlJ2xsCkBAIC03OCwxNCArNzgsMTQgQEAgU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbgogICAgIGlmICghc2ltcGxlRm9u
dERhdGEpCiAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udC5m
b250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7CiAKLSAgICByZXR1cm4g
c2ltcGxlRm9udERhdGE7CisgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKIH0K
IAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3Vs
ZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
U2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZl
biBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZv
ciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQg
Z2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIFNpbXBsZUZvbnREYXRhKiBmYWxs
YmFjayA9IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmYWxsYmFjayA9IDA7CiAjaWYg
T1MoV0lORE9XUykKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZhbGxiYWNrTmFtZSgiQXJpYWwg
VW5pY29kZSBNUyIpOwogI2Vsc2UKQEAgLTk0LDcgKzk0LDcgQEAgU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgIGZhbGxiYWNrID0gZ2V0Q2FjaGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBmYWxsYmFja05hbWUsIGZhbHNlLCBzaG91bGRSZXRhaW4pOwogICAg
IEFTU0VSVChmYWxsYmFjayk7CiAgICAgCi0gICAgcmV0dXJuIGZhbGxiYWNrOworICAgIHJldHVy
biBmYWxsYmFjay5yZWxlYXNlKCk7CiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAko
cmV2aXNpb24gMTI4ODIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
U2ltcGxlRm9udERhdGFXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDMyICs5MCwzMiBAQCB2
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogI2VuZGlmCiB9CiAKLVBhc3NP
d25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3Jl
YXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0g
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgZGVzYy5zZXRTcGVjaWZpZWRT
aXplKHNjYWxlRmFjdG9yICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKICAgICBG
b250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YShkZXNjLCBkZXNjLmZhbWlseSgpLmZhbWlseSgp
KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVh
dGUocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwogfQogCi1TaW1wbGVGb250
RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0
b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKICAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgLjcpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFs
bENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7CiB9
CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9u
dERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNSk7CiAKLSAgICByZXR1
cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9k
ZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6
Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBj
b25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164557</attachid>
            <date>2012-09-18 07:26:55 -0700</date>
            <delta_ts>2012-09-18 08:34:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95866-20120918102636.patch</filename>
            <type>text/plain</type>
            <size>102685</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODg5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBAQAorMjAxMi0wOS0xOCAgU3RlcGhl
biBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkNvcmU6OkZvbnREYXRhIGhhbmRsaW5nIHRvIGNsYXJpZnkgcG9pbnRlciBvd25lcnNoaXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBhbGwgRm9udERhdGEgYW5kIGRlcml2ZWQgY2xhc3NlcyByZWYtY291bnRlZCBpbiBhbGwK
KyAgICAgICAgY29kZSBwYXRocyB0aGF0IGxlYWQgdG8gY2FjaGluZyBvciBvdGhlciByZXRlbnRp
b24gb2YgYSBwb2ludGVyLiBUaGUKKyAgICAgICAgZ29hbCBpcyB0byBhdmVydCBjcmFzaGVzIGFu
ZCBtZW1vcnkgbGVha3MsIGFuZCB0byBicmluZyB0aGUgY29kZSBtb3JlIGluCisgICAgICAgIGxp
bmUgd2l0aCBjdXJyZW50IFdlYktpdCBwcmFjdGljZXMuCisKKyAgICAgICAgQWxsIEZvbnREYXRh
IGRlcml2ZWQgY2xhc3NlcyBoYXZlIGJlZW4gc3dpdGNoZWQgdG8gdXNlIHN0YXRpYyBjcmVhdGUK
KyAgICAgICAgbWV0aG9kcyB3aXRoIHByaXZhdGUgY29uc3RydWN0b3JzLgorCisgICAgICAgIEFs
bCBjYWNoZXMgdGhhdCBob2xkIEZvbnREYXRhIG5vdyB1c2UgUmVmUHRycy4KKworICAgICAgICBB
bGwgbWV0aG9kcyB0aGF0IGNvbnN0cnVjdCBuZXcgZm9udCBkYXRhIG5vdyByZXR1cm4gUGFzc1Jl
ZlB0ciwgd2l0aAorICAgICAgICB0aGUgZXhjZXB0aW9uIG9mIGNvZGUgb25seSB1c2VkIHRvIGdl
bmVyYXRlIHRlbXBvcmFyeSBkYXRhIGZvciB0ZXh0CisgICAgICAgIHJ1biBsYXlvdXQuCisKKyAg
ICAgICAgQWxsIG1ldGhvZHMgdGhhdCBoYW5kbGUgRm9udERhdGEgaW4gYSBjYWxsIHN0YWNrIHRo
YXQgcGFzc2VzIHRocm91Z2gKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCBy
ZXR1cm4gUGFzc1JlZlB0ci4KKworICAgICAgICBQZXJmb3JtYW5jZSB0ZXN0aW5nIHdpbGwgYmUg
ZG9uZSBiZWZvcmUgY29tbWl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIHJl
ZmFjdG9yaW5nIGNvZGUgb25seSBhbmQgaGFzIG5vIGltcGFjdCBvbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAg
ICAgIChDU1NGb250RmFjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAgIChDU1NGb250RmFjZVNvdXJj
ZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250RGF0YUZvckdlbmVyaWNGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNl
bGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgor
ICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAg
ICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmg6CisgICAgICAgIChDU1NTZWdtZW50ZWRGb250
RmFjZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZWdpc3RlckN1c3RvbUZvbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgor
ICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25S
ZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJn
ZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAg
IChGb250Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFsbGJhY2tMaXN0OjpzZXRQbGF0Zm9ybUZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaDoKKyAgICAgICAgKEZvbnRGYWxsYmFja0xpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDoKKyAgICAgICAgKEZvbnRTZWxlY3Rv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb250RGF0YVJhbmdlOjpGb250RGF0YVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhUmFuZ2U6OmZvbnREYXRhKToKKyAgICAgICAgKEZvbnREYXRhUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNyZWF0ZSk6CisgICAgICAgIChTZWdt
ZW50ZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6U2Vn
bWVudGVkRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChTaW1wbGVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6dmFyaWFudEZvbnREYXRhKToKKyAgICAgICAgKERlcml2ZWRGb250RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9p
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoR2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udFByb2NEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
YWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBs
ZXhUZXh0TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnREYXRhRm9yQ29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0
ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFs
bENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFz
aXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRD
YWNoZVBhbmdvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1w
bGVGb250RGF0YVBhbmdvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpj
cmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmVt
cGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9u
dERhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fw
c0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnRE
YXRhU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fw
c0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjcmVh
dGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c21h
bGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmVtcGhh
c2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250
Q2FjaGVXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRh
Rm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2lt
cGxlRm9udERhdGFXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpl
bXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9u
dENhY2hlV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9u
dFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNv
cnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZv
bnREYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNj
YWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENh
cHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNN
YXJrRm9udERhdGEpOgorCiAyMDEyLTA5LTE4ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0V4dGVuc2lvbnMgQVBJXSBwb3N0
cG9uZSByZXF1ZXN0cyB0byBhZGQgZXh0ZW5zaW9ucyB1bnRpbCBleHRlbnNpb24gc2VydmVyIGlz
IGluaXRpYWxpemVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHJldmlzaW9u
IDEyODg4MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBDU1NGb250RmFjZTo6Zm9udExvYWRlZChDU1NG
b250RmFjZQogICAgIGZvbnRTZWxlY3Rvci0+Zm9udExvYWRlZCgpOwogfQogCi1TaW1wbGVGb250
RGF0YSogQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljKQogewogICAgIG1fYWN0aXZlU291cmNlID0gMDsKICAgICBpZiAo
IWlzVmFsaWQoKSkKQEAgLTEwMiw5ICsxMDIsOSBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZh
Y2U6OmdldEZvbnREYXRhCiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fc291cmNlcy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKFNpbXBs
ZUZvbnREYXRhKiByZXN1bHQgPSBtX3NvdXJjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlw
dGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7Cisg
ICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IHJlc3VsdCA9IG1fc291cmNlc1tpXS0+
Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMsIGZvbnRTZWxlY3RvcikpIHsKICAgICAgICAgICAgIG1fYWN0aXZlU291cmNlID0gbV9zb3Vy
Y2VzW2ldLmdldCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2UuaAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlU291cmNlKik7CiAKLSAgICBTaW1wbGVG
b250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0
aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CiAKICAgICBzdHJ1Y3QgVW5pY29kZVJhbmdlIHsK
ICAgICAgICAgVW5pY29kZVJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkocmV2aXNpb24gMTI4ODgzKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENTU0ZvbnRGYWNlU291cmNlOjpmb250TG9hZGVkKENh
Y2hlCiAgICAgICAgIG1fZmFjZS0+Zm9udExvYWRlZCh0aGlzKTsKIH0KIAotU2ltcGxlRm9udERh
dGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxp
YywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFs
aWMsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250
IGhhc24ndCBsb2FkZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhp
bmcuCiAgICAgaWYgKCFpc1ZhbGlkKCkpCkBAIC0xMTQsMTEgKzExNCw5IEBAIFNpbXBsZUZvbnRE
YXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICB1bnNpZ25lZCBoYXNoS2V5ID0gKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgNiB8IGZvbnREZXNjcmlw
dGlvbi53aWR0aFZhcmlhbnQoKSA8PCA0CiAgICAgICAgICAgICAgICAgICAgICAgIHwgKGZvbnRE
ZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0ID8g
OCA6IDApIHwgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gNCA6
IDApIHwgKHN5bnRoZXRpY0JvbGQgPyAyIDogMCkgfCAoc3ludGhldGljSXRhbGljID8gMSA6IDAp
OwogCi0gICAgU2ltcGxlRm9udERhdGEqJiBjYWNoZWREYXRhID0gbV9mb250RGF0YVRhYmxlLmFk
ZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOwotICAgIGlmIChjYWNoZWREYXRhKQotICAg
ICAgICByZXR1cm4gY2FjaGVkRGF0YTsKLQotICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4gZm9u
dERhdGE7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiYgZm9udERhdGEgPSBtX2ZvbnREYXRh
VGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgaWYgKGZvbnREYXRh
KQorICAgICAgICByZXR1cm4gZm9udERhdGE7IC8vIE5vIHJlbGVhc2UsIGJlY2F1c2UgZm9udERh
dGEgaXMgYSByZWZlcmVuY2UgdG8gYSBSZWZQdHIgdGhhdCBpcyBoZWxkIGluIHRoZSBtX2ZvbnRE
YXRhVGFibGUuCiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBsZXQg
dGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNMb2FkZWQoKSkgewpAQCAtMTU3LDcg
KzE1NSw3IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50ID0gZm9udEZhY2VFbGVtZW50
OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZm9udERhdGEg
PSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoU1ZHRm9udERhdGE6OmNyZWF0ZShmb250RmFj
ZUVsZW1lbnQpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREYXRhID0g
U2ltcGxlRm9udERhdGE6OmNyZWF0ZShTVkdGb250RGF0YTo6Y3JlYXRlKGZvbnRGYWNlRWxlbWVu
dCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNJdGFsaWMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQog
I2VuZGlmCkBAIC0xNjYsMTQgKzE2NCwxNCBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VT
b3VyY2U6OmdldEZvCiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZv
bnREYXRhKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICAg
ICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEobV9mb250LT5wbGF0Zm9y
bURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwg
c3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250RGVzY3JpcHRpb24ub3JpZW50YXRp
b24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnRleHRPcmll
bnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIGZvbnRE
YXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShtX2ZvbnQtPnBsYXRmb3JtRGF0YUZyb21DdXN0
b21EYXRhKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xk
LCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCksIGZv
bnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01v
ZGUoKSksIHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAgICAgLy8gSW4tRG9jdW1lbnQgU1ZHIEZvbnRz
CiAgICAgICAgICAgICBpZiAobV9zdmdGb250RmFjZUVsZW1lbnQpCi0gICAgICAgICAgICAgICAg
Zm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoU1ZHRm9udERhdGE6OmNyZWF0
ZShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICAgICAgICAg
ICAgICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoU1ZHRm9udERhdGE6OmNyZWF0
ZShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTg0LDE1ICsxODIsMTUgQEAgU2ltcGxlRm9udERhdGEq
IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgICAgICAvLyBUaGlzIHRlbXBvcmFyeSBmb250
IGlzIG5vdCByZXRhaW5lZCBhbmQgc2hvdWxkIG5vdCBiZSByZXR1cm5lZC4KICAgICAgICAgRm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAgICAgICAgIFNp
bXBsZUZvbnREYXRhKiB0ZW1wb3JhcnlGb250ID0gZm9udENhY2hlKCktPmdldE5vblJldGFpbmVk
TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwotICAgICAgICBmb250RGF0
YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YSh0ZW1wb3JhcnlGb250LT5wbGF0Zm9ybURh
dGEoKSwgdHJ1ZSwgdHJ1ZSkpOworICAgICAgICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpj
cmVhdGUodGVtcG9yYXJ5Rm9udC0+cGxhdGZvcm1EYXRhKCksIHRydWUsIHRydWUpOwogICAgIH0K
IAotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmb250U2VsZWN0b3ItPmRvY3VtZW50KCkp
IHsKLSAgICAgICAgY2FjaGVkRGF0YSA9IGZvbnREYXRhLmdldCgpOwotICAgICAgICBkb2N1bWVu
dC0+cmVnaXN0ZXJDdXN0b21Gb250KGZvbnREYXRhLnJlbGVhc2UoKSk7Ci0gICAgfQorICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBmb250U2VsZWN0b3ItPmRvY3VtZW50KCkpCisgICAgICAg
IGRvY3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQoZm9udERhdGEpOworICAgIGVsc2UKKyAgICAg
ICAgZm9udERhdGEuY2xlYXIoKTsKIAotICAgIHJldHVybiBjYWNoZWREYXRhOworICAgIHJldHVy
biBmb250RGF0YTsgLy8gTm8gcmVsZWFzZSwgYmVjYXVzZSBmb250RGF0YSBpcyBhIHJlZmVyZW5j
ZSB0byBhIFJlZlB0ciB0aGF0IGlzIGhlbGQgaW4gdGhlIG1fZm9udERhdGFUYWJsZS4KIH0KIAog
I2lmIEVOQUJMRShTVkdfRk9OVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopOwogCi0gICAgU2ltcGxlRm9u
dERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGlj
Qm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3RvciopOworICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3Rv
ciopOwogCiAgICAgdm9pZCBwcnVuZVRhYmxlKCk7CiAKQEAgLTc2LDcgKzc2LDcgQEAgcHJpdmF0
ZToKICAgICBBdG9taWNTdHJpbmcgbV9zdHJpbmc7IC8vIFVSSSBmb3IgcmVtb3RlLCBidWlsdC1p
biBmb250IG5hbWUgZm9yIGxvY2FsLgogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZv
bnQ+IG1fZm9udDsgLy8gRm9yIHJlbW90ZSBmb250cywgYSBwb2ludGVyIHRvIG91ciBjYWNoZWQg
cmVzb3VyY2UuCiAgICAgQ1NTRm9udEZhY2UqIG1fZmFjZTsgLy8gT3VyIG93bmluZyBmb250IGZh
Y2UuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgU2ltcGxlRm9udERhdGEqPiBtX2ZvbnREYXRhVGFi
bGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRpYyBzdHlsZXMu
CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiA+IG1fZm9udERh
dGFUYWJsZTsgLy8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0
eWxlcy4KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxl
bWVudD4gbV9zdmdGb250RmFjZUVsZW1lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0CiAgICAgZGlzcGF0Y2hJbnZhbGlk
YXRpb25DYWxsYmFja3MoKTsKIH0KIAotc3RhdGljIEZvbnREYXRhKiBmb250RGF0YUZvckdlbmVy
aWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorc3RhdGljIFBhc3NS
ZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseShEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZy
YW1lKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDY1LDcgKzQ2NSw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKENTU0YKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZv
bnREYXRhKiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCitQYXNz
UmVmUHRyPEZvbnREYXRhPiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5h
bWUpCiB7CiAgICAgaWYgKG1fZm9udEZhY2VzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoZmFt
aWx5TmFtZS5zdGFydHNXaXRoKCItd2Via2l0LSIpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuaAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZlcnNpb24oKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3ZlcnNpb247IH0KIAotICAgIHZpcnR1YWwgRm9udERhdGEqIGdldEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseU5hbWUpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250RGF0YT4gZ2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICB2
b2lkIGNsZWFyRG9jdW1lbnQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21l
bnRlZEZvbnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwCShyZXZpc2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw5
IEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmFwcGVuZEZvbnRGYWMKICAgICBtX2ZvbnRG
YWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdp
dGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKFNlZ21lbnRlZEZvbnREYXRhKiBuZXdGb250
RGF0YSwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZhY2VGb250RGF0YSwgY29uc3QgVmVjdG9yPENT
U0ZvbnRGYWNlOjpVbmljb2RlUmFuZ2U+JiByYW5nZXMpCitzdGF0aWMgdm9pZCBhcHBlbmRGb250
RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKFNlZ21lbnRlZEZvbnREYXRhKiBu
ZXdGb250RGF0YSwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcHJwRmFjZUZvbnREYXRhLCBj
b25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHJhbmdlcykKIHsKKyAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0YSA9IHBycEZhY2VGb250RGF0YTsKICAg
ICBpZiAoZmFjZUZvbnREYXRhLT5pc0xvYWRpbmcoKSkgewogICAgICAgICBuZXdGb250RGF0YS0+
YXBwZW5kUmFuZ2UoRm9udERhdGFSYW5nZSgwLCAwLCBmYWNlRm9udERhdGEpKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtOTgsNyArOTksNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJ
bnZhbGlkVW5pCiAgICAgICAgIG5ld0ZvbnREYXRhLT5hcHBlbmRSYW5nZShGb250RGF0YVJhbmdl
KHJhbmdlc1tqXS5mcm9tKCksIHJhbmdlc1tqXS50bygpLCBmYWNlRm9udERhdGEpKTsKIH0KIAot
Rm9udERhdGEqIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1Bhc3NSZWZQdHI8Rm9udERhdGE+IENTU1NlZ21l
bnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0x
MDYsMTEgKzEwNywxMSBAQCBGb250RGF0YSogQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnRE
CiAgICAgRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24u
dHJhaXRzTWFzaygpOwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAoKGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgKEZvbnRUcmFpdHNNYXNrV2lkdGggKyAxKSkgfCAo
KGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gMSA6IDApIDw8IEZv
bnRUcmFpdHNNYXNrV2lkdGgpIHwgZGVzaXJlZFRyYWl0c01hc2s7CiAKLSAgICBTZWdtZW50ZWRG
b250RGF0YSomIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxTZWdtZW50ZWRGb250RGF0YT4mIGZvbnREYXRhID0g
bV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOwogICAgIGlm
IChmb250RGF0YSkKICAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogCi0gICAgT3duUHRyPFNlZ21l
bnRlZEZvbnREYXRhPiBuZXdGb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTZWdtZW50ZWRGb250RGF0
YSk7CisgICAgZm9udERhdGEgPSBTZWdtZW50ZWRGb250RGF0YTo6Y3JlYXRlKCk7CiAKICAgICB1
bnNpZ25lZCBzaXplID0gbV9mb250RmFjZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKQEAgLTExOSwxOSArMTIwLDE5IEBAIEZvbnREYXRhKiBDU1NT
ZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udEQKICAgICAgICAgRm9udFRyYWl0c01hc2sgdHJhaXRz
TWFzayA9IG1fZm9udEZhY2VzW2ldLT50cmFpdHNNYXNrKCk7CiAgICAgICAgIGJvb2wgc3ludGhl
dGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWlnaHQ3
MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpICYmIChkZXNp
cmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWlnaHQ3MDBNYXNrIHwg
Rm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpOwogICAgICAgICBib29sIHN5
bnRoZXRpY0l0YWxpYyA9ICEodHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmIChk
ZXNpcmVkVHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spOwotICAgICAgICBpZiAoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZhY2VGb250RGF0YSA9IG1fZm9udEZhY2VzW2ldLT5nZXRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpIHsK
KyAgICAgICAgaWYgKFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZmFjZUZvbnREYXRhID0gbV9mb250
RmFjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSkgewogICAgICAgICAgICAgQVNTRVJUKCFmYWNlRm9udERhdGEtPmlzU2Vn
bWVudGVkKCkpOwotICAgICAgICAgICAgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaWNvZGVS
YW5nZUlmTG9hZGluZyhuZXdGb250RGF0YS5nZXQoKSwgZmFjZUZvbnREYXRhLCBtX2ZvbnRGYWNl
c1tpXS0+cmFuZ2VzKCkpOworICAgICAgICAgICAgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVu
aWNvZGVSYW5nZUlmTG9hZGluZyhmb250RGF0YS5nZXQoKSwgZmFjZUZvbnREYXRhLnJlbGVhc2Uo
KSwgbV9mb250RmFjZXNbaV0tPnJhbmdlcygpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAo
bmV3Rm9udERhdGEtPm51bVJhbmdlcygpKSB7CisgICAgaWYgKGZvbnREYXRhLT5udW1SYW5nZXMo
KSkgewogICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mb250U2VsZWN0b3ItPmRv
Y3VtZW50KCkpIHsKLSAgICAgICAgICAgIGZvbnREYXRhID0gbmV3Rm9udERhdGEuZ2V0KCk7Ci0g
ICAgICAgICAgICBkb2N1bWVudC0+cmVnaXN0ZXJDdXN0b21Gb250KG5ld0ZvbnREYXRhLnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBkb2N1bWVudC0+cmVnaXN0ZXJDdXN0b21Gb250KGZvbnREYXRh
KTsKKyAgICAgICAgICAgIHJldHVybiBmb250RGF0YTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IHJldHVybiBmb250RGF0YTsKKyAgICByZXR1cm4gMDsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgJKHJldmlzaW9uIDEyODg4MykKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kRm9udEZhY2UoUGFzc1Jl
ZlB0cjxDU1NGb250RmFjZT4pOwogCi0gICAgRm9udERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpOworICAgIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogCiBwcml2YXRlOgogICAgIENTU1NlZ21lbnRlZEZvbnRG
YWNlKENTU0ZvbnRTZWxlY3RvciopOwpAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwogCiAgICAgQ1NTRm9udFNlbGVjdG9yKiBtX2ZvbnRTZWxlY3Rv
cjsKLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBTZWdtZW50ZWRGb250RGF0YSo+IG1fZm9udERhdGFU
YWJsZTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2VnbWVudGVkRm9udERhdGE+ID4g
bV9mb250RGF0YVRhYmxlOwogICAgIFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+LCAxPiBtX2Zv
bnRGYWNlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTI4
ODgzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk5Miw3ICsxOTkyLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0
eWxlRgogICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJl
Z2lzdGVyQ3VzdG9tRm9udChQYXNzT3duUHRyPEZvbnREYXRhPiBmb250RGF0YSkKK3ZvaWQgRG9j
dW1lbnQ6OnJlZ2lzdGVyQ3VzdG9tRm9udChQYXNzUmVmUHRyPEZvbnREYXRhPiBmb250RGF0YSkK
IHsKICAgICBtX2N1c3RvbUZvbnRzLmFwcGVuZChmb250RGF0YSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3MSw3ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVz
aGVldHMoRWxlbWVudCopOwogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KTsKIAotICAgIHZvaWQgcmVnaXN0ZXJDdXN0b21Gb250KFBhc3NPd25Q
dHI8Rm9udERhdGE+KTsKKyAgICB2b2lkIHJlZ2lzdGVyQ3VzdG9tRm9udChQYXNzUmVmUHRyPEZv
bnREYXRhPik7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcGFnZSBib3ggKG1hcmdpbiBib3hl
cyBhbmQgcGFnZSBib3JkZXJzKSBpcyB2aXNpYmxlLgogICAgIGJvb2wgaXNQYWdlQm94VmlzaWJs
ZShpbnQgcGFnZUluZGV4KTsKQEAgLTEyOTAsNyArMTI5MCw3IEBAIHByaXZhdGU6CiAgICAgT3du
UHRyPFN0eWxlUmVzb2x2ZXI+IG1fc3R5bGVSZXNvbHZlcjsKICAgICBib29sIG1fZGlkQ2FsY3Vs
YXRlU3R5bGVSZXNvbHZlcjsKICAgICBib29sIG1faGFzRGlydHlTdHlsZVJlc29sdmVyOwotICAg
IFZlY3RvcjxPd25QdHI8Rm9udERhdGE+ID4gbV9jdXN0b21Gb250czsKKyAgICBWZWN0b3I8UmVm
UHRyPEZvbnREYXRhPiA+IG1fY3VzdG9tRm9udHM7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKICAg
ICBSZWZQdHI8RE9NV2luZG93PiBtX2RvbVdpbmRvdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTI4ODgzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBAIHN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDog
V1RGOjpHZW4KICAgICB9CiB9OwogCi10eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YSwg
cGFpcjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZv
bnREYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7Cit0eXBlZGVmIEhhc2hNYXA8Rm9u
dFBsYXRmb3JtRGF0YSwgcGFpcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCB1bnNpZ25lZD4sIEZv
bnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hl
OwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSogZ0ZvbnREYXRhQ2FjaGUgPSAwOwogCkBAIC0yOTcs
OSArMjk3LDkgQEAgY29uc3QgaW50IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogY29u
c3QgaW50IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gNTA7IC8vIFByZXR0eSBMb3cgVGhyZXNob2xk
CiBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAzMDsKICNlbmRpZgotc3RhdGlj
IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhID0g
MDsKK3N0YXRpYyBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+ID4qIGdJbmFjdGl2
ZUZvbnREYXRhID0gMDsKIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSwgU2hvdWxkUmV0YWlu
IHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSwgU2hv
dWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9y
bURhdGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5
LCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpOwogICAgIGlmICghcGxhdGZvcm1EYXRhKQpAQCAtMzA4
LDcgKzMwOCw3IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnQKICAg
ICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEocGxhdGZvcm1EYXRhLCBzaG91bGRSZXRhaW4pOwog
fQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4p
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgU2hvdWxkUmV0YWluIHNob3Vs
ZFJldGFpbikKIHsKICAgICBpZiAoIXBsYXRmb3JtRGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0zMjAsMTYgKzMyMCwxNiBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRG
b250CiAKICAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7CiAgICAgICAgIGdGb250RGF0YUNhY2hl
ID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhID0gbmV3IExp
c3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj47CisgICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhID0gbmV3IExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4gPjsKICAgICB9CiAK
ICAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnRm9udERhdGFDYWNoZS0+Zmlu
ZCgqcGxhdGZvcm1EYXRhKTsKICAgICBpZiAocmVzdWx0ID09IGdGb250RGF0YUNhY2hlLT5lbmQo
KSkgewotICAgICAgICBwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+IG5ld1ZhbHVlKG5l
dyBTaW1wbGVGb250RGF0YSgqcGxhdGZvcm1EYXRhKSwgc2hvdWxkUmV0YWluID09IFJldGFpbiA/
IDEgOiAwKTsKKyAgICAgICAgcGFpcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCB1bnNpZ25lZD4g
bmV3VmFsdWUoU2ltcGxlRm9udERhdGE6OmNyZWF0ZSgqcGxhdGZvcm1EYXRhKSwgc2hvdWxkUmV0
YWluID09IFJldGFpbiA/IDEgOiAwKTsKICAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPnNldCgqcGxh
dGZvcm1EYXRhLCBuZXdWYWx1ZSk7CiAgICAgICAgIGlmIChzaG91bGRSZXRhaW4gPT0gRG9Ob3RS
ZXRhaW4pCiAgICAgICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKG5ld1ZhbHVlLmZpcnN0
KTsKLSAgICAgICAgcmV0dXJuIG5ld1ZhbHVlLmZpcnN0OworICAgICAgICByZXR1cm4gbmV3VmFs
dWUuZmlyc3QucmVsZWFzZSgpOwogICAgIH0KIAogICAgIGlmICghcmVzdWx0LmdldCgpLT5zZWNv
bmQuc2Vjb25kKSB7CkBAIC0zNTAsNyArMzUwLDcgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNo
ZTo6Z2V0Q2FjaGVkRm9udAogCiBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRh
aW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERl
c2NyaXB0aW9uLCBEb05vdFJldGFpbik7CisgICAgcmV0dXJuIGdldExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoZm9udERlc2NyaXB0aW9uLCBEb05vdFJldGFpbikubGVha1JlZigpOwogfQogCiB2b2lk
IEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkKQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNv
bnN0IFNpCiAKICAgICBBU1NFUlQoaXQtPnNlY29uZC5zZWNvbmQpOwogICAgIGlmICghLS1pdC0+
c2Vjb25kLnNlY29uZCkKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChmb250RGF0YSk7
CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQoaXQtPnNlY29uZC5maXJzdCk7CiB9CiAK
IHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCkBAIC0zODMs
MTEgKzM4MywxMSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAK
ICAgICBpc1B1cmdpbmcgPSB0cnVlOwogCi0gICAgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRh
KiwgMjA+IGZvbnREYXRhVG9EZWxldGU7Ci0gICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZlRm9udERhdGEtPmVuZCgpOwotICAgIExp
c3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZl
Rm9udERhdGEtPmJlZ2luKCk7CisgICAgVmVjdG9yPFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIDIw
PiBmb250RGF0YVRvRGVsZXRlOworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gPjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZlRm9udERhdGEtPmVuZCgpOworICAgIExpc3RI
YXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4gPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVG
b250RGF0YS0+YmVnaW4oKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICYmIGl0ICE9
IGVuZDsgKytpdCwgKytpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSA9ICppdC5nZXQoKTsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiYgZm9udERhdGEg
PSAqaXQuZ2V0KCk7CiAgICAgICAgIGdGb250RGF0YUNhY2hlLT5yZW1vdmUoZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpKTsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBkZWxldGUgU2ltcGxlRm9u
dERhdGEgaGVyZSBiZWNhdXNlIGRlbGV0aW9uIGNhbiBtb2RpZnkgZ0luYWN0aXZlRm9udERhdGEu
IFNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC80NDAxMQogICAgICAgICBmb250
RGF0YVRvRGVsZXRlLmFwcGVuZChmb250RGF0YSk7CkBAIC00MDEsOSArNDAxLDcgQEAgdm9pZCBG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAgZ0luYWN0aXZl
Rm9udERhdGEtPnJlbW92ZShnSW5hY3RpdmVGb250RGF0YS0+YmVnaW4oKSk7CiAgICAgfQogCi0g
ICAgc2l6ZV90IGZvbnREYXRhVG9EZWxldGVDb3VudCA9IGZvbnREYXRhVG9EZWxldGUuc2l6ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9udERhdGFUb0RlbGV0ZUNvdW50OyArK2kp
Ci0gICAgICAgIGRlbGV0ZSBmb250RGF0YVRvRGVsZXRlW2ldOworICAgIGZvbnREYXRhVG9EZWxl
dGUuY2xlYXIoKTsKIAogICAgIGlmIChnRm9udFBsYXRmb3JtRGF0YUNhY2hlKSB7CiAgICAgICAg
IFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1JlbW92ZTsKQEAgLTQ2Miw5
ICs0NjAsOSBAQCBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnREYXRhQ291bnQoCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWNvbnN0IEZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhKGNv
bnN0IEZvbnQmIGZvbnQsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVj
dG9yKQorUGFzc1JlZlB0cjxGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YShjb25zdCBG
b250JiBmb250LCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikK
IHsKLSAgICBGb250RGF0YSogcmVzdWx0ID0gMDsKKyAgICBSZWZQdHI8Rm9udERhdGE+IHJlc3Vs
dDsKIAogICAgIGludCBzdGFydEluZGV4ID0gZmFtaWx5SW5kZXg7CiAgICAgY29uc3QgRm9udEZh
bWlseSogc3RhcnRGYW1pbHkgPSAmZm9udC5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKQEAg
LTQ5OCwxNCArNDk2LDE0IEBAIGNvbnN0IEZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRh
KGMKIAogICAgICAgICBpZiAoZm9udFNlbGVjdG9yKSB7CiAgICAgICAgICAgICAvLyBUcnkgdGhl
IHVzZXIncyBwcmVmZXJyZWQgc3RhbmRhcmQgZm9udC4KLSAgICAgICAgICAgIGlmIChGb250RGF0
YSogZGF0YSA9IGZvbnRTZWxlY3Rvci0+Z2V0Rm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24o
KSwgc3RhbmRhcmRGYW1pbHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAg
ICAgICAgaWYgKFJlZlB0cjxGb250RGF0YT4gZGF0YSA9IGZvbnRTZWxlY3Rvci0+Z2V0Rm9udERh
dGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgc3RhbmRhcmRGYW1pbHkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFN0aWxs
IG5vIHJlc3VsdC4gIEhhbmQgYmFjayBvdXIgbGFzdCByZXNvcnQgZmFsbGJhY2sgZm9udC4KICAg
ICAgICAgcmVzdWx0ID0gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250LmZvbnREZXNjcmlw
dGlvbigpKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdDbGllbnRzOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJl
dmlzaW9uIDEyODg4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAKICNpbmNsdWRlIDxsaW1p
dHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKQEAgLTYwLDExICs2MiwxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFNob3VsZFJldGFpbiB7IFJldGFpbiwgRG9Ob3RSZXRhaW4gfTsKIAot
ICAgIGNvbnN0IEZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250JiwgaW50JiBmYW1pbHlJ
bmRleCwgRm9udFNlbGVjdG9yKik7CisgICAgUGFzc1JlZlB0cjxGb250RGF0YT4gZ2V0Rm9udERh
dGEoY29uc3QgRm9udCYsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciopOwogICAgIHZv
aWQgcmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CiAKICAgICAvLyBUaGlz
IG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiwgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IGdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpOwogCiAgICAgLy8gQWxzbyBpbXBsZW1lbnRlZCBieSB0aGUg
cGxhdGZvcm0uCiAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKQEAgLTg0LDggKzg2LDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBW
ZWN0b3I8dW5zaWduZWQ+Jik7CiAKLSAgICBTaW1wbGVGb250RGF0YSogZ2V0Q2FjaGVkRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVj
a2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKLSAgICBT
aW1wbGVGb250RGF0YSogZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UsIFNob3VsZFJl
dGFpbiA9IFJldGFpbik7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4gPSBS
ZXRhaW4pOwogICAgIFNpbXBsZUZvbnREYXRhKiBnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIGFkZENsaWVudChG
b250U2VsZWN0b3IqKTsKQEAgLTk5LDkgKzEwMSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1cmdl
SW5hY3RpdmVGb250RGF0YShpbnQgY291bnQgPSBJTlRfTUFYKTsKIAogI2lmIFBMQVRGT1JNKFdJ
TikKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9OVCYgZm9u
dCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYg
b3V0Rm9udEZhbWlseU5hbWUpOwogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKFdJTkRP
V1MpCi0gICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZv
bnQsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgU2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiwgd2NoYXJfdCogb3V0Rm9udEZh
bWlseU5hbWUpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCkBAIC0x
MzEsMTAgKzEzMywxMCBAQCBwcml2YXRlOgogICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAg
Ly8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBT
aW1wbGVGb250RGF0YSogZ2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYpOwor
ICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnQmKTsKICAgICBGb250UGxhdGZvcm1EYXRhKiBjcmVhdGVGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsK
IAotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhKiwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhKiwgU2hvdWxk
UmV0YWluID0gUmV0YWluKTsKIAogICAgIC8vIERvbid0IHB1cmdlIGlmIHRoaXMgY291bnQgaXMg
PiAwOwogICAgIGludCBtX3B1cmdlUHJldmVudENvdW50OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCShyZXZpc2lvbiAxMjg4ODMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMyArMjksMTUgQEAKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBTaW1wbGVGb250RGF0YTsKIAotY2xhc3MgRm9udERhdGEgeworY2xhc3MgRm9udERhdGEgOiBw
dWJsaWMgUmVmQ291bnRlZDxGb250RGF0YT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZv
bnREYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRm9udERhdGEo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhbGxiYWNrTGlzdC5jcHAJKHJldmlzaW9uIDEyODg4MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw5ICs2Niw5IEBAIHZvaWQgRm9udEZhbGxiYWNrTGlzdDo6cmVsZWFzZUZvbnREYXRhKCkKIHsK
ICAgICB1bnNpZ25lZCBudW1Gb250cyA9IG1fZm9udExpc3Quc2l6ZSgpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1Gb250czsgKytpKSB7Ci0gICAgICAgIGlmICghbV9mb250TGlz
dFtpXS5zZWNvbmQpIHsKKyAgICAgICAgaWYgKCFtX2ZvbnRMaXN0W2ldLT5pc0N1c3RvbUZvbnQo
KSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX2ZvbnRMaXN0W2ldLmZpcnN0LT5pc1NlZ21lbnRl
ZCgpKTsKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEoc3RhdGljX2Nh
c3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2ZvbnRMaXN0W2ldLmZpcnN0KSk7CisgICAgICAg
ICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0YXRpY19jYXN0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4obV9mb250TGlzdFtpXS5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtOTEsNyArOTEsNyBAQCB2b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmRldGVybWluZVBpdGNoKGNv
CiBjb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdChjb25zdCBGb250
KiBmb250LCB1bnNpZ25lZCByZWFsaXplZEZvbnRJbmRleCkgY29uc3QKIHsKICAgICBpZiAocmVh
bGl6ZWRGb250SW5kZXggPCBtX2ZvbnRMaXN0LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1fZm9u
dExpc3RbcmVhbGl6ZWRGb250SW5kZXhdLmZpcnN0OyAvLyBUaGlzIGZhbGxiYWNrIGZvbnQgaXMg
YWxyZWFkeSBpbiBvdXIgbGlzdC4KKyAgICAgICAgcmV0dXJuIG1fZm9udExpc3RbcmVhbGl6ZWRG
b250SW5kZXhdLmdldCgpOyAvLyBUaGlzIGZhbGxiYWNrIGZvbnQgaXMgYWxyZWFkeSBpbiBvdXIg
bGlzdC4KIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgcGFzc2luZyBpbiBzb21lIGNyYXp5
IHZhbHVlIGhlcmUuCiAgICAgQVNTRVJUKHJlYWxpemVkRm9udEluZGV4ID09IG1fZm9udExpc3Qu
c2l6ZSgpKTsKQEAgLTEwNCwyMSArMTA0LDIxIEBAIGNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJh
Y2tMaXN0Ojpmb250RGEKICAgICAvLyBpbiB8bV9mYW1pbHlJbmRleHwsIHNvIHRoYXQgd2UgbmV2
ZXIgc2NhbiB0aGUgc2FtZSBzcG90IGluIHRoZSBsaXN0IHR3aWNlLiAgZ2V0Rm9udERhdGEgd2ls
bCBhZGp1c3Qgb3VyCiAgICAgLy8gfG1fZmFtaWx5SW5kZXh8IGFzIGl0IHNjYW5zIGZvciB0aGUg
cmlnaHQgZm9udCB0byBtYWtlLgogICAgIEFTU0VSVChmb250Q2FjaGUoKS0+Z2VuZXJhdGlvbigp
ID09IG1fZ2VuZXJhdGlvbik7Ci0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9IGZvbnRDYWNo
ZSgpLT5nZXRGb250RGF0YSgqZm9udCwgbV9mYW1pbHlJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0
KCkpOworICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0ID0gZm9udENhY2hlKCktPmdldEZvbnRE
YXRhKCpmb250LCBtX2ZhbWlseUluZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CiAgICAgaWYg
KHJlc3VsdCkgewotICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRh
KiwgYm9vbD4ocmVzdWx0LCByZXN1bHQtPmlzQ3VzdG9tRm9udCgpKSk7CisgICAgICAgIG1fZm9u
dExpc3QuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGlmIChyZXN1bHQtPmlzTG9hZGluZygpKQog
ICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwogICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKIHZvaWQgRm9udEZhbGxi
YWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKIHsKICAgICBtX2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsKICAgICBB
U1NFUlQoZm9udENhY2hlKCktPmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwotICAgIGNv
bnN0IEZvbnREYXRhKiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgm
cGxhdGZvcm1EYXRhKTsKLSAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRh
KiwgYm9vbD4oZm9udERhdGEsIGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSkpOworICAgIFJlZlB0
cjxGb250RGF0YT4gZm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnBs
YXRmb3JtRGF0YSk7CisgICAgbV9mb250TGlzdC5hcHBlbmQoZm9udERhdGEpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxi
YWNrTGlzdC5oCShyZXZpc2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVsZWFzZUZvbnREYXRhKCk7CiAKLSAgICBtdXRhYmxl
IFZlY3RvcjxwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4sIDE+IG1fZm9udExpc3Q7CisgICAg
bXV0YWJsZSBWZWN0b3I8UmVmUHRyPEZvbnREYXRhPiwgMT4gbV9mb250TGlzdDsKICAgICBtdXRh
YmxlIEdseXBoUGFnZXMgbV9wYWdlczsKICAgICBtdXRhYmxlIEdseXBoUGFnZVRyZWVOb2RlKiBt
X3BhZ2VaZXJvOwogICAgIG11dGFibGUgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY2FjaGVkUHJp
bWFyeVNpbXBsZUZvbnREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxMjg4ODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Nyw4ICs5Nyw4IEBAIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IEZvbnQ6
OmcKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi50ZXh0T3Jp
ZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHZlcnRpY2FsUmlnaHRGb250
RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHZlcnRpY2Fs
UmlnaHROb2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh2ZXJ0aWNhbFJpZ2h0
Rm9udERhdGEsIHBhZ2VOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+
dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdmVydGljYWxSaWdodE5vZGUgPSBHbHlwaFBhZ2VU
cmVlTm9kZTo6Z2V0Um9vdENoaWxkKHZlcnRpY2FsUmlnaHRGb250RGF0YS5nZXQoKSwgcGFnZU51
bWJlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlKiB2ZXJ0aWNhbFJp
Z2h0UGFnZSA9IHZlcnRpY2FsUmlnaHROb2RlLT5wYWdlKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRQYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdseXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IHZlcnRpY2FsUmlnaHRQYWdl
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CkBAIC0xMTEsOCArMTExLDggQEAgc3RkOjpwYWly
PEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udDo6ZwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcih2ZXJ0aWNhbFJpZ2h0RGF0YSwgdmVydGljYWxS
aWdodFBhZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkg
PT0gVGV4dE9yaWVudGF0aW9uVXByaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT51
cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdseXBoUGFnZVRyZWVOb2RlKiB1cHJpZ2h0Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRS
b290Q2hpbGQodXByaWdodEZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRGb250RGF0YSA9IGRhdGEu
Zm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHVwcmlnaHROb2RlID0gR2x5cGhQYWdlVHJl
ZU5vZGU6OmdldFJvb3RDaGlsZCh1cHJpZ2h0Rm9udERhdGEuZ2V0KCksIHBhZ2VOdW1iZXIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZSogdXByaWdodFBhZ2UgPSB1cHJp
Z2h0Tm9kZS0+cGFnZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0
UGFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaERhdGEgdXByaWdo
dERhdGEgPSB1cHJpZ2h0UGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwpAQCAtMTUyLDEx
ICsxNTIsMTEgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udDo6ZwogICAg
ICAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSB2YXJpYW50Rm9udERhdGEgZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4g
MC4KICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCBy
ZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IGRhdGEuZm9udERhdGEtPnZhcmlhbnRG
b250RGF0YShtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+
dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCF2YXJpYW50Rm9udERhdGEpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogCi0gICAgICAgICAgICAgICAgICAgIEdseXBo
UGFnZVRyZWVOb2RlKiB2YXJpYW50Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hp
bGQodmFyaWFudEZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgR2x5
cGhQYWdlVHJlZU5vZGUqIHZhcmlhbnROb2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RD
aGlsZCh2YXJpYW50Rm9udERhdGEuZ2V0KCksIHBhZ2VOdW1iZXIpOwogICAgICAgICAgICAgICAg
ICAgICBHbHlwaFBhZ2UqIHZhcmlhbnRQYWdlID0gdmFyaWFudE5vZGUtPnBhZ2UoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRQYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBHbHlwaERhdGEgZGF0YSA9IHZhcmlhbnRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7
CkBAIC0xOTgsNyArMTk4LDcgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9u
dDo6ZwogICAgICAgICBjb2RlVW5pdHNbMV0gPSBVMTZfVFJBSUwoYyk7CiAgICAgICAgIGNvZGVV
bml0c0xlbmd0aCA9IDI7CiAgICAgfQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjaGFyYWN0
ZXJGb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRGb250RGF0YUZvckNoYXJhY3RlcnMoKnRoaXMs
IGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGNoYXJhY3RlckZvbnREYXRhID0gZm9udENhY2hlKCktPmdldEZvbnREYXRhRm9yQ2hhcmFjdGVy
cygqdGhpcywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpOwogICAgIGlmIChjaGFyYWN0ZXJG
b250RGF0YSkgewogICAgICAgICBpZiAoY2hhcmFjdGVyRm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWNoYXJhY3RlckZvbnREYXRhLT5oYXNWZXJ0
aWNhbEdseXBocygpICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgICAgICB2
YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKQEAgLTIwNyw3ICsyMDcsNyBAQCBzdGQ6
OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250OjpnCiAgICAgfQogICAgIGlmIChjaGFy
YWN0ZXJGb250RGF0YSkgewogICAgICAgICAvLyBHb3QgdGhlIGZhbGxiYWNrIGdseXBoIGFuZCBm
b250LgotICAgICAgICBHbHlwaFBhZ2UqIGZhbGxiYWNrUGFnZSA9IEdseXBoUGFnZVRyZWVOb2Rl
OjpnZXRSb290Q2hpbGQoY2hhcmFjdGVyRm9udERhdGEsIHBhZ2VOdW1iZXIpLT5wYWdlKCk7Cisg
ICAgICAgIEdseXBoUGFnZSogZmFsbGJhY2tQYWdlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJv
b3RDaGlsZChjaGFyYWN0ZXJGb250RGF0YS5nZXQoKSwgcGFnZU51bWJlciktPnBhZ2UoKTsKICAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmYWxsYmFja1BhZ2UgJiYgZmFsbGJhY2tQYWdlLT5mb250
RGF0YUZvckNoYXJhY3RlcihjKSA/IGZhbGxiYWNrUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGMpIDogY2hhcmFjdGVyRm9udERhdGEtPm1pc3NpbmdHbHlwaERhdGEoKTsKICAgICAgICAgLy8g
Q2FjaGUgaXQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBzeXN0ZW0gZmFsbGJhY2sgYWdhaW4gbmV4
dCB0aW1lLgogICAgICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkocmV2
aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgRm9udFNl
bGVjdG9yX2gKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOCw3ICszOSw3IEBAIGNsYXNzIEZvbnRTZWxlY3RvckNsaWVudDsKIGNsYXNzIEZv
bnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQotICAgIHZpcnR1YWwgRm9udERhdGEqIGdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250RGF0YT4gZ2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1l
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSB7IH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZVRyZWVOb2RlLmNwcAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDIsNyArMjQyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoYwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB6ZXJvRmlsbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgfD0gZmlsbChwYWdlVG9GaWxsLCBmcm9tLCB0byAt
IGZyb20sIGJ1ZmZlciArIGZyb20gKiAoc3RhcnQgPCAweDEwMDAwID8gMSA6IDIpLCAodG8gLSBm
cm9tKSAqIChzdGFydCA8IDB4MTAwMDAgPyAxIDogMiksIHJhbmdlLmZvbnREYXRhKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyB8PSBmaWxsKHBhZ2VUb0ZpbGwsIGZyb20s
IHRvIC0gZnJvbSwgYnVmZmVyICsgZnJvbSAqIChzdGFydCA8IDB4MTAwMDAgPyAxIDogMiksICh0
byAtIGZyb20pICogKHN0YXJ0IDwgMHgxMDAwMCA/IDEgOiAyKSwgcmFuZ2UuZm9udERhdGEoKS5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NyYXRjaFBhZ2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodG8gPD0gIHN0YXRpY19jYXN0PGludD4oR2x5
cGhQYWdlOjpzaXplKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IGZyb207IGogPCB0bzsgaisrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCShyZXZpc2lvbiAxMjg4ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IFNlZ21lbnRlZEZvbnREYXRhOgogICAgIFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5n
ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIGlmIChpdC0+ZnJvbSgpIDw9IGMgJiYgaXQtPnRvKCkgPj0gYykKLSAgICAg
ICAgICAgIHJldHVybiBpdC0+Zm9udERhdGEoKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+Zm9u
dERhdGEoKS5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fcmFuZ2VzWzBdLmZvbnREYXRhKCk7
CisgICAgcmV0dXJuIG1fcmFuZ2VzWzBdLmZvbnREYXRhKCkuZ2V0KCk7CiB9CiAKIGJvb2wgU2Vn
bWVudGVkRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9u
dERhdGEuaAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaW1wbGVGb250RGF0YTsKIAogc3RydWN0IEZv
bnREYXRhUmFuZ2UgewotICAgIEZvbnREYXRhUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRv
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCisgICAgRm9udERhdGFSYW5nZShVQ2hh
cjMyIGZyb20sIFVDaGFyMzIgdG8sIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRh
KQogICAgICAgICA6IG1fZnJvbShmcm9tKQogICAgICAgICAsIG1fdG8odG8pCiAgICAgICAgICwg
bV9mb250RGF0YShmb250RGF0YSkKQEAgLTQzLDE2ICs0MywxOCBAQCBzdHJ1Y3QgRm9udERhdGFS
YW5nZSB7CiAKICAgICBVQ2hhcjMyIGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zyb207IH0KICAg
ICBVQ2hhcjMyIHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQotICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGE7IH0KKyAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERh
dGE7IH0KIAogcHJpdmF0ZToKICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICBVQ2hhcjMyIG1fdG87
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBtX2ZvbnREYXRhOwogfTsKIAogY2xhc3MgU2VnbWVudGVkRm9udERhdGEgOiBw
dWJsaWMgRm9udERhdGEgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlZ21lbnRl
ZEZvbnREYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2VnbWVudGVkRm9udERh
dGEpOyB9CisgCiAgICAgdmlydHVhbCB+U2VnbWVudGVkRm9udERhdGEoKTsKIAogICAgIHZvaWQg
YXBwZW5kUmFuZ2UoY29uc3QgRm9udERhdGFSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZXMuYXBwZW5k
KHJhbmdlKTsgfQpAQCAtNjQsNiArNjYsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToK
KyAgICBTZWdtZW50ZWRGb250RGF0YSgpIHsgfQorCiAgICAgdmlydHVhbCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwz
NiArMTcwLDM2IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmlzU2VnbWVudGVkKCkgY29uc3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6dmVy
dGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRh
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24pIHsKICAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhKG1fcGxhdGZv
cm1EYXRhKTsKICAgICAgICAgdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YS5zZXRPcmllbnRhdGlv
bihIb3Jpem9udGFsKTsKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbiA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YSh2ZXJ0aWNhbFJpZ2h0UGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpKTsKKyAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbiA9IGNyZWF0ZSh2ZXJ0aWNhbFJp
Z2h0UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIH0KLSAg
ICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbi5nZXQo
KTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlv
bjsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRp
b25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAogewogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnRE
YXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PnVwcmlnaHRPcmllbnRhdGlvbikKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRP
cmllbnRhdGlvbiA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShtX3BsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250KCksIGZhbHNlLCB0cnVlKSk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT51cHJpZ2h0T3JpZW50YXRpb24uZ2V0KCk7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb247CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6YnJva2Vu
SWRlb2dyYXBoRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRG
b250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhLT5icm9rZW5JZGVvZ3JhcGgpIHsKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmJyb2tl
bklkZW9ncmFwaCA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShtX3BsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5icm9r
ZW5JZGVvZ3JhcGggPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxz
ZSk7CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGgtPm1faXNCcm9r
ZW5JZGVvZ3JhcGhGYWxsYmFjayA9IHRydWU7CiAgICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+YnJva2VuSWRlb2dyYXBoLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+YnJva2VuSWRlb2dyYXBoOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZp
c2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMCArNzksMTYgQEAgcHVibGljOgogICAg
IH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBTaW1wbGVG
b250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxz
ZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNr
ID0gZmFsc2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9
IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFs
bGJhY2sgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltcGxl
Rm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaykpOworICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBG
b250cy4KLSAgICBTaW1wbGVGb250RGF0YShQYXNzT3duUHRyPEFkZGl0aW9uYWxGb250RGF0YT4s
IGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGlj
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKFBhc3NPd25Q
dHI8QWRkaXRpb25hbEZvbnREYXRhPiBmb250RGF0YSwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3lu
dGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNpbXBsZUZvbnREYXRhKGZvbnREYXRhLCBmb250U2l6ZSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgfQogCiAgICAgdmlydHVhbCB+U2ltcGxlRm9u
dERhdGEoKTsKIApAQCAtOTEsMTEgKzk3LDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERh
dGE7IH0KICNlbmRpZgogCi0gICAgU2ltcGxlRm9udERhdGEqIHNtYWxsQ2Fwc0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIFNpbXBsZUZvbnREYXRhKiBlbXBoYXNp
c01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBTaW1wbGVG
b250RGF0YSogYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcmtGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0OwogCi0gICAgU2ltcGxl
Rm9udERhdGEqIHZhcmlhbnRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKKyAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0
Y2ggKHZhcmlhbnQpIHsKICAgICAgICAgY2FzZSBTbWFsbENhcHNWYXJpYW50OgpAQCAtMTEyLDgg
KzExOCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERh
dGEqPih0aGlzKTsKICAgICB9CiAKLSAgICBTaW1wbGVGb250RGF0YSogdmVydGljYWxSaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKLSAgICBTaW1wbGVGb250RGF0YSogdXByaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CiAK
ICAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNh
bEdseXBoczsgfQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsg
cmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMjAxLDYgKzIwNywxMCBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRp
bmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworCisg
ICAgU2ltcGxlRm9udERhdGEoUGFzc093blB0cjxBZGRpdGlvbmFsRm9udERhdGE+ICwgZmxvYXQg
Zm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworCiAg
ICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CiAg
ICAgdm9pZCBwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKTsKQEAgLTIxMCw3ICsyMjAsNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBjb21tb25Jbml0KCk7CiAKLSAgICBQYXNzT3duUHRyPFNpbXBsZUZv
bnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3Jl
YXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0OwogCiAjaWYgKFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJTkNFKSkgXAogICAgIHx8
IChPUyhXSU5ET1dTKSAmJiBQTEFURk9STShXWCkpCkBAIC0yNTQsMTEgKzI2NCwxMSBAQCBwcml2
YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAgICAgYm9vbCBmb3JDdXN0
b21Gb250OwotICAgICAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2FwczsKLSAgICAg
ICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0gICAgICAgIE93blB0cjxT
aW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBPd25QdHI8U2ltcGxlRm9u
dERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgT3duUHRyPFNpbXBsZUZv
bnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFy
azsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7CisgICAg
ICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOworICAg
ICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKICNpZiBQTEFU
Rk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKICAgICAgICAg
bXV0YWJsZSBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY29tcG9zaXRlRm9udFJl
ZmVyZW5jZXM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwCShyZXZp
c2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2
b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgaWN1OjpM
b2NhbGUgbG9jYWxlID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKICAgICBQbGF0Zm9ybVN1
cHBvcnQ6OkZvbnRGYW1pbHkgZmFtaWx5OwpAQCAtMTEwLDEyICsxMTAsMTIgQEAgY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250
RGF0YShnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGF0
b21pY0ZhbWlseSwgRG9Ob3RSZXRhaW4pLCBEb05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZv
bnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3Ry
aW5nLCBzZXJpZiwgKCJTZXJpZiIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgbW9ub3NwYWNlLCAoIk1vbm9zcGFjZSIpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q2FjaGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDEyODg4MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE4LDEyICszMTgsMTIgQEAgc3RhdGljIGJvb2wgZm9udENvbnRh
aW5zQ2hhcmFjdGVyKGNvbnN0CiB9CiAKIC8vIFRyaWVzIHRoZSBnaXZlbiBmb250IGFuZCBzYXZl
IGl0IHxvdXRGb250RmFtaWx5TmFtZXwgaWYgaXQgc3VjY2VlZHMuCi1TaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4sIGNv
bnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKQorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFp
biBzaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91dEZvbnRGYW1p
bHlOYW1lKQogewotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdldENhY2hlZEZvbnRE
YXRhKGZvbnREZXNjcmlwdGlvbiwgZm9udC5sZkZhY2VOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWlu
KTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBmb250LmxmRmFjZU5hbWUsIGZhbHNlLCBzaG91bGRSZXRhaW4p
OwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgbWVtY3B5KG91dEZvbnRGYW1pbHlOYW1lLCBm
b250LmxmRmFjZU5hbWUsIHNpemVvZihmb250LmxmRmFjZU5hbWUpKTsKLSAgICByZXR1cm4gZm9u
dERhdGE7CisgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIExPTkcg
dG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKQEAgLTQwNiw3ICs0MDYsNyBA
QCBzdHJ1Y3QgR2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udFByb2NEYXRhCiAgICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uKiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBGb250Q2FjaGU6OlNob3VsZFJl
dGFpbiBtX3Nob3VsZFJldGFpbjsKICAgICB3Y2hhcl90KiBtX2ZvbnROYW1lOwotICAgIFNpbXBs
ZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gbV9mb250
RGF0YTsKIH07CiAKIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dFByb2MoY29uc3QgTE9HRk9OVCogbG9nRm9udCwgY29uc3QgVEVYVE1FVFJJQyogbWV0cmljcywg
RFdPUkQgZm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBG
b250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiAKIC8vIEdpdmVuIHRoZSBkZXNpcmVkIGJhc2UgZm9u
dCwgdGhpcyB3aWxsIGNyZWF0ZSBhIFNpbXBsZUZvbnREYXRhIGZvciBhIHNwZWNpZmljCiAvLyBm
b250IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBnaXZlbiByYW5nZSBvZiBjaGFyYWN0
ZXJzLgotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgZm9udERlc2NyaXB0
aW9uLmRvbWluYW50U2NyaXB0KCkKICAgICAvLyB0byBHZXRGYWxsYmFja0ZhbWlseSBoZXJlLgpA
QCAtNTA4LDEyICs1MDgsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
Rm9udAogCiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hv
dWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIEZvbnREZXNjcmlw
dGlvbjo6R2VuZXJpY0ZhbWlseVR5cGUgZ2VuZXJpYyA9IGRlc2NyaXB0aW9uLmdlbmVyaWNGYW1p
bHkoKTsKIApAQCAtNTMwLDkgKzUzMCw5IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dExhc3RSZXNvcnQKICAgICBlbHNlIGlmIChnZW5lcmljID09IEZvbnREZXNjcmlwdGlvbjo6TW9u
b3NwYWNlRmFtaWx5KQogICAgICAgICBmb250U3RyID0gY291cmllclN0cjsKIAotICAgIFNpbXBs
ZUZvbnREYXRhKiBzaW1wbGVGb250ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGZv
bnRTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
c2ltcGxlRm9udCA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmb250U3RyLCBmYWxz
ZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoc2ltcGxlRm9udCkKLSAgICAgICAgcmV0dXJuIHNp
bXBsZUZvbnQ7CisgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKIAogICAgIC8v
IEZhbGwgYmFjayB0byBzeXN0ZW0gZm9udHMgYXMgV2luIFNhZmFyaSBkb2VzIGJlY2F1c2UgdGhp
cyBmdW5jdGlvbiBtdXN0CiAgICAgLy8gcmV0dXJuIGEgdmFsaWQgZm9udC4gT25jZSB3ZSBmaW5k
IGEgdmFsaWQgc3lzdGVtIGZvbnQsIHdlIHNhdmUgaXRzIG5hbWUKQEAgLTU0Niw3ICs1NDYsNyBA
QCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIExPR0ZP
TlQgZGVmYXVsdEdVSUxvZ0ZvbnQ7CiAgICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwg
c2l6ZW9mKGRlZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKICAgICAgICAg
aWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3Jp
cHRpb24sIHNob3VsZFJldGFpbiwgZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUp
KQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2lt
cGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgLy8gRmFsbCBiYWNrIHRvIE5vbi1jbGll
bnQgbWV0cmljcyBmb250cy4KQEAgLTU1NCwxNSArNTU0LDE1IEBAIFNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNp
emVvZihub25DbGllbnRNZXRyaWNzKTsKICAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJ
X0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVu
dE1ldHJpY3MsIDApKSB7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1l
dHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1
cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsK
ICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0Zv
bnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lbnVGb250
LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAg
ICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxl
Rm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hv
dWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFsbGJhY2tGb250TmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBz
aW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xp
ZW50TWV0cmljcy5sZkNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAg
IHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFz
ZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5k
TG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmU21D
YXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxl
Rm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICB9CiAK
ICAgICAvLyBGYWxsIGJhY2sgdG8gYWxsIHRoZSBmb250cyBpbnN0YWxsZWQgaW4gdGhpcyBQQy4g
V2hlbiBhIGZvbnQgaGFzIGEKQEAgLTU3Niw3ICs1NzYsNyBAQCBTaW1wbGVGb250RGF0YSogRm9u
dENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIEVudW1Gb250RmFtaWxpZXMoZGMsIDAsIGdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnRQcm9jLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnBy
b2NEYXRhKSk7CiAKICAgICAgICAgaWYgKHByb2NEYXRhLm1fZm9udERhdGEpCi0gICAgICAgICAg
ICByZXR1cm4gcHJvY0RhdGEubV9mb250RGF0YTsKKyAgICAgICAgICAgIHJldHVybiBwcm9jRGF0
YS5tX2ZvbnREYXRhLnJlbGVhc2UoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBs
ZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCShy
ZXZpc2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDM0ICsxMDksMzQgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsK
IH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNj
YWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgTE9HRk9OVCB3aW5G
b250OwogICAgIEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9O
VCksICZ3aW5Gb250KTsKICAgICBmbG9hdCBzY2FsZWRTaXplID0gc2NhbGVGYWN0b3IgKiBmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCk7CiAgICAgd2luRm9udC5sZkhlaWdodCA9IC1scm91
bmRmKHNjYWxlZFNpemUpOwogICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZ3
aW5Gb250KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0
Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkp
LCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShGb250UGxhdGZvcm1EYXRhKGhmb250LCBzY2FsZWRTaXplLCBtX3BsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERh
dGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9t
Rm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250
RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQog
Ci1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc093blB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnRE
YXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9
IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDEyODg4MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZy
ZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBGY1BhdHRlcm4qIGZp
bmRCZXN0Rm9udEdpdmVuRmFsbGJhY2tzKGNvCiAgICAgcmV0dXJuIEZjRm9udFNldE1hdGNoKDAs
IHNldHMsIDEsIHBhdHRlcm4sICZmb250Q29uZmlnUmVzdWx0KTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAg
UmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9IGFkb3B0UmVmKGNyZWF0ZUZvbnRDb25maWdQYXR0
ZXJuRm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICBjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBmb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVG
b250RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24g
MTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2lt
cGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE3ICs4NywxNyBA
QCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1QYXNzT3du
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEuc2Nh
bGVkRm9udCgpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQ
bGF0Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpLAorICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQ
bGF0Zm9ybURhdGEoY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZShtX3BsYXRmb3JtRGF0
YS5zY2FsZWRGb250KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNp
emUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zeW50
aGV0aWNPYmxpcXVlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKQEAg
LTEwNSwxNyArMTA1LDE3IEBAIFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxD
YXAKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVy
aXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdl
dCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1w
bGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpj
cmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhh
c2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0
ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXJDb3JlVGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0JKHJldmlzaW9uIDEy
ODg4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgyLDEzICsyODIsMTMg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVh
dGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiArIHJ1blJhbmdlLmxv
Y2F0aW9uLCBydW5SYW5nZS5sZW5ndGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YShtX2ZvbnQu
Zm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSwgRm9udENhY2hlOjpEb05v
dFJldGFpbik7CisgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9udENhY2hlKCkt
PmdldENhY2hlZEZvbnREYXRhKG1fZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udE5hbWUuZ2V0
KCksIGZhbHNlLCBGb250Q2FjaGU6OkRvTm90UmV0YWluKS5nZXQoKTsKICNpZiAhUExBVEZPUk0o
V1gpCiAgICAgICAgICAgICAgICAgICAgIC8vIENvcmUgVGV4dCBtYXkgaGF2ZSB1c2VkIGEgZm9u
dCB0aGF0IGlzIG5vdCBrbm93biB0byBOU0ZvbnRNYW5hZ2VyLiBJbiB0aGF0IGNhc2UsIGZhbGwg
YmFjayBvbgogICAgICAgICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgZm9udCBhcyByZXR1cm5l
ZCwgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdCBoYXZlIHRoZSBiZXN0IE5TRm9udFJlbmRlcmluZ01v
ZGUuCiAgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udERhdGEpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgcnVuRm9udFBsYXRmb3JtRGF0YSgoTlNGb250
ICopcnVuRm9udCwgQ1RGb250R2V0U2l6ZShydW5Gb250KSwgbV9mb250LmZvbnREZXNjcmlwdGlv
bigpLnVzZVByaW50ZXJGb250KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcnVuRm9udERh
dGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnJ1bkZvbnRQbGF0Zm9ybURhdGEs
IEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgcnVuRm9u
dERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnJ1bkZvbnRQbGF0Zm9ybURh
dGEsIEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pLmdldCgpOwogICAgICAgICAgICAgICAgICAgICB9
CiAjZWxzZQogICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGFzc2VydCBmb3Igbm93LCB1bnRp
bCB3ZSBjYW4gZGV2aXNlIGEgYmV0dGVyIGZpeCB0aGF0IHdvcmtzIHdpdGggd3guCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVN
YWMubW0JKHJldmlzaW9uIDEyODg4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAg
c3RhdGljIGlubGluZSBib29sIGlzQXBwS2l0Rm9udFdlaWdodEJvbAogICAgIHJldHVybiBhcHBL
aXRGb250V2VpZ2h0ID49IDc7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFVDaGFyMzIgY2hhcmFjdGVyOwog
ICAgIFUxNl9HRVQoY2hhcmFjdGVycywgMCwgMCwgbGVuZ3RoLCBjaGFyYWN0ZXIpOwpAQCAtMTY2
LDEyICsxNjYsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAog
ICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udCwgRG9Ob3RSZXRhaW4p
OwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAg
IC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFz
ZWQgb24gCiAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluIHRoZSB0aGUgcmVxdWVz
dGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUsIHdlJ2xsCiAgICAgLy8gbWF0Y2ggYW55IG5hbWUgdGhh
dCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCi0gICAgU2ltcGxlRm9udERhdGEqIHNp
bXBsZUZvbnREYXRhID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnRE
YXRhOwogICAgIGNvbnN0IEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAmZm9udC5mb250RGVzY3Jp
cHRpb24oKS5mYW1pbHkoKTsKICAgICB3aGlsZSAoY3VyckZhbWlseSAmJiAhc2ltcGxlRm9udERh
dGEpIHsKICAgICAgICAgaWYgKGN1cnJGYW1pbHktPmZhbWlseSgpLmxlbmd0aCgpKSB7CkBAIC0x
ODQsMTggKzE4NCwxOCBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9u
CiAgICAgICAgIGN1cnJGYW1pbHkgPSBjdXJyRmFtaWx5LT5uZXh0KCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNl
KCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFp
biBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6Omdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIHRpbWVzU3RyLCAoIlRpbWVzIikpOwogCiAgICAgLy8gRklYTUU6
IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBm
b250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRo
ZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBTaW1wbGVG
b250RGF0YSogc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIHRpbWVzU3RyLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKKyAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9u
LCB0aW1lc1N0ciwgZmFsc2UsIHNob3VsZFJldGFpbik7CiAgICAgaWYgKHNpbXBsZUZvbnREYXRh
KQotICAgICAgICByZXR1cm4gc2ltcGxlRm9udERhdGE7CisgICAgICAgIHJldHVybiBzaW1wbGVG
b250RGF0YS5yZWxlYXNlKCk7CiAKICAgICAvLyBUaGUgVGltZXMgZmFsbGJhY2sgd2lsbCBhbG1v
c3QgYWx3YXlzIHdvcmssIGJ1dCBpbiB0aGUgaGlnaGx5IHVudXN1YWwgY2FzZSB3aGVyZQogICAg
IC8vIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBpdCwgd2UgZmFsbCBiYWNrIG9uIEx1Y2lkYSBHcmFu
ZGUgYmVjYXVzZSB0aGF0J3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCShyZXZpc2lvbiAx
Mjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBs
ZXhUZXh0TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDIxICsxODksMjEgQEAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIEZvbnQ6OmZvbnREYXRhRm9yQwogICAgICAgICAgICAgaWYgKHNpbXBs
ZUZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNoYXJhY3Rlcikg
JiYgIXNpbXBsZUZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwotICAgICAgICAgICAgICAg
ICAgICBzaW1wbGVGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGhGb250
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHNpbXBsZUZvbnRE
YXRhLT5icm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpLmdldCgpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkgPT0gVGV4dE9yaWVu
dGF0aW9uVmVydGljYWxSaWdodCkgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250RGF0
YSogdmVydGljYWxSaWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbkZvbnREYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRh
KiB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmVydGljYWxSaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgR2x5cGggdmVy
dGljYWxSaWdodEdseXBoID0gdmVydGljYWxSaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJhY3Rl
cihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRH
bHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQogICAgICAgICAgICAgICAgICAg
ICAgICAgc2ltcGxlRm9udERhdGEgPSB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGE7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERhdGEqIHVwcmln
aHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250RGF0YSogdXByaWdodEZvbnREYXRhID0g
c2ltcGxlRm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgICAgIEdseXBoIHVwcmlnaHRHbHlwaCA9IHVwcmlnaHRGb250RGF0YS0+Z2x5
cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1
cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdXByaWdodEZvbnREYXRhOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChjb25zdCBTaW1wbGVGb250RGF0YSogdmFyaWFudEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEt
PnZhcmlhbnRGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCkpCisgICAgICAgICAg
ICBpZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IHNpbXBsZUZvbnRE
YXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpLmdldCgpKQog
ICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gdmFyaWFudEZvbnREYXRhOwogICAgICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVG
b250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9uIDEyODg4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDE5ICszMDgsMTkgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1EZXN0cm95KCkKICAgICBpZiAoIWlzQ3VzdG9tRm9udCgpICYmIG1fZGVyaXZlZEZvbnRE
YXRhKSB7CiAgICAgICAgIC8vIFRoZXNlIGNvbWUgZnJvbSB0aGUgY2FjaGUuCiAgICAgICAgIGlm
IChtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQotICAgICAgICAgICAgZm9udENhY2hlKCkt
PnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmxlYWtQdHIoKSk7
CisgICAgICAgICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKG1fZGVyaXZlZEZvbnRE
YXRhLT5zbWFsbENhcHMuZ2V0KCkpOwogCiAgICAgICAgIGlmIChtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrKQotICAgICAgICAgICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YSht
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmxlYWtQdHIoKSk7CisgICAgICAgICAgICBm
b250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01h
cmsuZ2V0KCkpOwogICAgIH0KIH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxl
Rm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7
CiAgICAgaWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2Nh
bGVkRm9udERhdGEobV9wbGF0Zm9ybURhdGEpOwogICAgICAgICBzY2FsZWRGb250RGF0YS5tX3Np
emUgPSBzY2FsZWRGb250RGF0YS5tX3NpemUgKiBzY2FsZUZhY3RvcjsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFsc2Up
KTsKKyAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9udERhdGEs
IHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CkBAIC0zNDUsMzEgKzM0NSwzMSBAQCBQYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc3ludGhldGljT2JsaXF1ZSA9IChmb250
VHJhaXRzICYgTlNJdGFsaWNGb250TWFzaykgJiYgIShzY2FsZWRGb250VHJhaXRzICYgTlNJdGFs
aWNGb250TWFzayk7CiAKICAgICAgICAgLy8gU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJv
eSgpIHRha2VzIGNhcmUgb2Ygbm90IGRlbGV0aW5nIHRoZSBjYWNoZWQgZm9udCBkYXRhIHR3aWNl
LgotICAgICAgICByZXR1cm4gYWRvcHRQdHIoZm9udENhY2hlKCktPmdldENhY2hlZEZvbnREYXRh
KCZzY2FsZWRGb250RGF0YSkpOworICAgICAgICByZXR1cm4gZm9udENhY2hlKCktPmdldENhY2hl
ZEZvbnREYXRhKCZzY2FsZWRGb250RGF0YSk7CiAgICAgfQogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gMDsKIH0KIAotU2lt
cGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRl
KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMp
CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZvbnRTaXplTXVsdGlwbGllcik7CiAKLSAg
ICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4g
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBs
ZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9u
dCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShm
b250RGVzY3JpcHRpb24sIC41Zik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVt
cGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyazsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdv
LmNwcAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNyArMzUs
MTcgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250
RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9u
dCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFp
bikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxk
UmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0
ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4KICAgICAvLyBG
b3Igbm93IHdlJ2xsIHBpY2sgdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0
aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNw
cAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDMyICs4
NCwzMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1Q
YXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBGb250RGVzY3JpcHRpb24gZGVz
YyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIGRlc2Muc2V0U3BlY2lm
aWVkU2l6ZShzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CiAg
ICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1p
bHkoKSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShwbGF0Zm9ybURh
dGEpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwog
fQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRh
OjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNt
YWxsQ2FwcykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNj
YWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjcpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFz
aXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNN
YXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERh
dGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAu
NSk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsK
KyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogYm9vbCBT
aW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udENhY2hlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAkocmV2aXNpb24gMTI4ODgzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBRUmF3Rm9udCByYXdGb250Rm9yQ2hhcmFj
dGVycyhjb24KICAgICByZXR1cm4gZ2x5cGhzLnJhd0ZvbnQoKTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAg
UVN0cmluZyBxc3RyaW5nID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOwogICAgIFFSYXdGb250IGNvbXB1dGVk
Rm9udCA9IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKHFzdHJpbmcsIGZvbnQucmF3Rm9udCgpKTsKQEAg
LTczLDEyICs3MywxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250
CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250LCBEb05vdFJldGFp
bik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nIGZhbGxiYWNrRmFtaWx5ID0gUUZvbnQoZm9udERlc2NyaXB0aW9uLmZhbWls
eSgpLmZhbWlseSgpKS5sYXN0UmVzb3J0RmFtaWx5KCk7CiAgICAgcmV0dXJuIGdldENhY2hlZEZv
bnREYXRhKG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGYW1p
bHkpLCBzaG91bGRSZXRhaW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAJKHJldmlzaW9uIDEyODg4
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRh
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwzMCArNjEsMzAgQEAgZmxvYXQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbAogICAgIHJldHVybiBhZHZhbmNlcy5hdCgwKS54KCk7
CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVT
Y2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0
IHNjYWxlZFNpemUgPSBscm91bmRmKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHNj
YWxlRmFjdG9yKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQ
bGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEsIHNjYWxlZFNpemUpLCBpc0N1c3RvbUZvbnQoKSwg
ZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1E
YXRhKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsK
IH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0
YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5z
bWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVT
Y2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKIAotICAg
IHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxl
Rm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250
KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZv
bnREZXNjcmlwdGlvbiwgZW1waGFzaXNNYXJrRnJhY3Rpb24pOwogCi0gICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcAkocmV2
aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
b250Q2FjaGVTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQsNyBAQCB2b2lkIEZv
bnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIGljdTo6TG9j
YWxlIGxvY2FsZSA9IGljdTo6TG9jYWxlOjpnZXREZWZhdWx0KCk7CiAgICAgUGxhdGZvcm1TdXBw
b3J0OjpGb250RmFtaWx5IGZhbWlseTsKQEAgLTkzLDEyICs5MSwxMiBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRh
KCZwbGF0Zm9ybURhdGEsIERvTm90UmV0YWluKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRh
aW4pCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNhbnNT
dHIsICgiU2FucyIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmlu
Zywgc2VyaWZTdHIsICgiU2VyaWYiKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwCShy
ZXZpc2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NpbXBsZUZvbnREYXRhU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwzMCArMTcwLDMw
IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKLVBhc3NP
d25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3Jl
YXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlZFNpemUg
PSBscm91bmRmKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHNjYWxlRmFjdG9yKTsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEo
bV9wbGF0Zm9ybURhdGEsIHNjYWxlZFNpemUpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAg
ICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZv
cm1EYXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxl
Rm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
KQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlz
Q3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0
YShmb250RGVzY3JpcHRpb24sIHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rl
cml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVt
cGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhh
c2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBj
b25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlm
ICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlv
biwgZW1waGFzaXNNYXJrRnJhY3Rpb24pOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBo
YXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
CShyZXZpc2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDEwICsxODYsMTAgQEAg
c3RhdGljIEhGT05UIGNyZWF0ZU1MYW5nRm9udChJTUxhbmdGb250TAogICAgIHJldHVybiBoZm9u
dDsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0
YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgpCiB7CiAgICAgVUNoYXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1swXTsKLSAg
ICBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSAwOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gZm9udERhdGE7CiAgICAgSFduZERDIGhkYygwKTsKICAgICBIRk9OVCBwcmltYXJ5Rm9udCA9
IGZvbnQucHJpbWFyeUZvbnQoKS0+Zm9udERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKS0+cGxh
dGZvcm1EYXRhKCkuaGZvbnQoKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3Qo
aGRjLCBwcmltYXJ5Rm9udCk7CkBAIC0yOTMsMjQgKzI5MywyNCBAQCBjb25zdCBTaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgICAgIERlbGV0ZU9iamVjdChoZm9udCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNl
KCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmZvbnREYXRhRnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRv
bWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluLCBj
b25zdCBMT0dGT05UJiBmb250LCBBdG9taWNTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKQogewog
ICAgIEF0b21pY1N0cmluZyBmYW1pbHlOYW1lID0gU3RyaW5nKGZvbnQubGZGYWNlTmFtZSwgd2Nz
bmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7Ci0gICAgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1l
LCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnRE
YXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmYWxz
ZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1p
bHlOYW1lID0gZmFtaWx5TmFtZTsKLSAgICByZXR1cm4gZm9udERhdGE7CisgICAgcmV0dXJuIGZv
bnREYXRhLnJlbGVhc2UoKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFz
dFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZmFsbGJhY2tGb250TmFtZSwgKCkpOwog
ICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5pc0VtcHR5KCkpCkBAIC0zMjksMTEgKzMyOSwxMSBA
QCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIEF0b21p
Y1N0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIpLAogICAgICAgICBBdG9taWNTdHJpbmcoIkFy
aWFsIikKICAgICB9OwotICAgIFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250OworICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsraSkgewogICAgICAgICBpZiAoc2lt
cGxlRm9udCA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250
c1tpXSwgZmFsc2UsIHNob3VsZFJldGFpbikpIHsKICAgICAgICAgICAgIGZhbGxiYWNrRm9udE5h
bWUgPSBmYWxsYmFja0ZvbnRzW2ldOwotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7Cisg
ICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTM0Miw3ICszNDIsNyBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0CiAgICAgICAgIExPR0ZPTlQgZGVmYXVsdEdVSUxvZ0ZvbnQ7CiAgICAgICAgIEdldE9i
amVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRlZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRH
VUlMb2dGb250KTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlw
dGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIGRlZmF1bHRHVUlM
b2dGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250
OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgIH0KIAogICAg
IC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50IG1ldHJpY3MgZm9udHMuCkBAIC0zNTAsMTUgKzM1
MCwxNSBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgbm9u
Q2xpZW50TWV0cmljcy5jYlNpemUgPSBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyk7CiAgICAgaWYg
KFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXplb2Yobm9u
Q2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAwKSkgewogICAgICAgICBpZiAoc2lt
cGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRp
b24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFj
a0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAg
cmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZv
bnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIHNob3VsZFJl
dGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lbnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAg
ICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZv
bnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50
TWV0cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0
dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7
CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dG
b250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmQ2Fw
dGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZv
bnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgICAgIGlm
IChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNj
cmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmU21DYXB0aW9uRm9udCwg
ZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAg
ICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICB9CiAgICAgCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDEy
ODg4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw0MCArMTMyLDQwIEBAIHZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAgZGVsZXRlIG1fc2NyaXB0Rm9udFBy
b3BlcnRpZXM7CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGZs
b2F0IHNjYWxlZFNpemUgPSBzY2FsZUZhY3RvciAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKICAg
ICBpZiAoaXNDdXN0b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRG
b250KG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAgc2NhbGVkRm9udC5zZXRTaXplKHNjYWxlZFNp
emUpOwotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKHNjYWxlZEZv
bnQsIHRydWUsIGZhbHNlKSk7CisgICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
KHNjYWxlZEZvbnQsIHRydWUsIGZhbHNlKTsKICAgICB9CiAKICAgICBMT0dGT05UIHdpbmZvbnQ7
CiAgICAgR2V0T2JqZWN0KG1fcGxhdGZvcm1EYXRhLmhmb250KCksIHNpemVvZihMT0dGT05UKSwg
JndpbmZvbnQpOwogICAgIHdpbmZvbnQubGZIZWlnaHQgPSAtbHJvdW5kZihzY2FsZWRTaXplICog
KG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpID8gMSA6IDMyKSk7CiAgICAgSEZPTlQgaGZvbnQgPSBD
cmVhdGVGb250SW5kaXJlY3QoJndpbmZvbnQpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2lt
cGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShoZm9udCwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9y
bURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCks
IG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAg
cmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShoZm9udCwgc2Nh
bGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5z
eW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSwgaXNDdXN0b21Gb250
KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENh
cHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERl
cml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGNTbWFsbENhcHNGb250
U2l6ZU11bHRpcGxpZXIpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENh
cHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7CiB9CiAK
LVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rl
cml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERh
dGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0g
Y3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNSk7CiAKLSAgICByZXR1cm4g
bV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJp
dmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29u
dGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hl
V2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luQ0UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBGb250Q2FjaGU6OmNvbVVuaW5pdGlhbGl6
ZSgpCiAgICAgfQogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250
RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBTdHJpbmcgZmFtaWx5TmFtZTsKICAgICBXQ0hB
UiBuYW1lW0xGX0ZBQ0VTSVpFXTsKQEAgLTIzNSwxMCArMjM1LDExIEBAIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICB1bnNpZ25lZCB1bmljb2RlUmFuZ2UgPSBm
aW5kQ2hhclVuaWNvZGVSYW5nZShjaGFyYWN0ZXIpOwogCiAjaWYgZGVmaW5lZChJTUxBTkdfRk9O
VF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9PSAyKQotICAgIGlmIChJTUxhbmdGb250TGlu
azIqIGxhbmdGb250TGluayA9IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpIHsKKyAgICBpZiAoSU1M
YW5nRm9udExpbmsyKiBsYW5nRm9udExpbmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKQogI2Vs
c2UKLSAgICBpZiAoSU1MYW5nRm9udExpbmsqIGxhbmdGb250TGluayA9IGdldEZvbnRMaW5rSW50
ZXJmYWNlKCkpIHsKKyAgICBpZiAoSU1MYW5nRm9udExpbmsqIGxhbmdGb250TGluayA9IGdldEZv
bnRMaW5rSW50ZXJmYWNlKCkpCiAjZW5kaWYKKyAgICB7CiAgICAgICAgIEhHRElPQkogb2xkRm9u
dCA9IEdldEN1cnJlbnRPYmplY3QoZ19zY3JlZW5EQywgT0JKX0ZPTlQpOwogICAgICAgICBIRk9O
VCBoZm9udCA9IDA7CiAgICAgICAgIERXT1JEIGNvZGVQYWdlcyA9IDA7CkBAIC0yNjcsMTAgKzI2
OCwxMSBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGFza2VkIGFib3V0IGEgY29kZSBwYWdlIHRoYXQgaXMgbm90IG9u
ZSBvZiB0aGUgY29kZSBwYWdlcwogICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5lZCBieSBN
TGFuZywgc28gdGhlIGZvbnQgbWlnaHQgbm90IGNvbnRhaW4gdGhlIGNoYXJhY3Rlci4KICNpZiBk
ZWZpbmVkKElNTEFOR19GT05UX0xJTkspICYmIChJTUxBTkdfRk9OVF9MSU5LID09IDIpCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9u
dExpbmssIGdfc2NyZWVuREMsIGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFjdGVyKGxhbmdGb250TGluaywgZ19zY3JlZW5EQywg
Y2hhcmFjdGVyKSkKICNlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvbnRD
b250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGhmb250LCBjaGFyYWN0
ZXIsIG5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvbnRDb250YWlu
c0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGhmb250LCBjaGFyYWN0ZXIsIG5h
bWUpKQogI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFNlbGVjdE9iamVjdChnX3NjcmVlbkRDLCBvbGRGb250KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxhbmdGb250TGluay0+UmVsZWFzZUZvbnQoaGZvbnQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaGZvbnQgPSAwOwpAQCAtMzA4LDIwICszMTAsMjAgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogCiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJl
c3VsdCA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlO
YW1lKTsKICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmhhc2goKSAhPSBvcmlnRm9udC5o
YXNoKCkpIHsKLSAgICAgICAgICAgIGlmIChTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShyZXN1bHQsIERvTm90UmV0YWluKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZm9udERhdGE7CisgICAgICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250
RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKHJlc3VsdCwgRG9Ob3RSZXRhaW4pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzYywgU2hvdWxk
UmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIC8vIEZJWE1FOiBXb3VsZCBi
ZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJl
LiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3
b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250
RGF0YVdpbkNFLmNwcAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkK
IHsKIH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBs
ZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjKGZvbnREZXNjcmlwdGlvbik7CiAgICAgZm9udERlc2Muc2V0Q29tcHV0
ZWRTaXplKGxyb3VuZGYoc2NhbGVGYWN0b3IgKiBmb250RGVzYy5jb21wdXRlZFNpemUoKSkpOwpA
QCAtNzEsMjggKzcxLDI4IEBAIFBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXQKICAgICBmb250RGVzYy5zZXRLZXl3b3JkU2l6ZShscm91bmRmKHNjYWxlRmFjdG9yICogZm9u
dERlc2Mua2V5d29yZFNpemUoKSkpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9IGZv
bnRDYWNoZSgpLT5nZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjLCBtX3BsYXRmb3Jt
RGF0YS5mYW1pbHkoKSk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoKnJlc3VsdCkpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZSgqcmVzdWx0
KTsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250
RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
LT5zbWFsbENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVh
dGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rl
cml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVt
cGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhh
c2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBj
b25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlm
ICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlv
biwgLjUpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0
KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIERX
T1JEIGdldEtub3duRm9udENvZGVQYWdlcyhjb25zdCB3Y2hhcl90KiBmYW1pbHkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udENhY2hlV3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4
LmNwcAkocmV2aXNpb24gMTI4ODgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvRm9udENhY2hlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIHZv
aWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogewogfQogCi1jb25zdCBTaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKLSAgICBTaW1wbGVG
b250RGF0YSogZm9udERhdGEgPSAwOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERh
dGEgPSAwOwogICAgIGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udC5mb250RGVzY3Jp
cHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSwgZmFsc2UsIERvTm90UmV0YWluKTsKICAg
ICBpZiAoIWZvbnREYXRhLT5jb250YWluc0NoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKSkK
ICAgICAgICAgZm9udERhdGEgPSBnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShmb250KTsKQEAg
LTUzLDEyICs1MywxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250
CiAgICAgICAgIGZvbnREYXRhID0gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250LmZvbnRE
ZXNjcmlwdGlvbigpKTsKIAogICAgIEFTU0VSVChmb250RGF0YSk7Ci0gICAgcmV0dXJuIGZvbnRE
YXRhOworICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQp
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0gICAgU2ltcGxlRm9udERhdGEqIHNpbXBs
ZUZvbnREYXRhID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRh
ID0gMDsKICNpZiBPUyhEQVJXSU4pCiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJp
YXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiAKICAgICAvLyB0aGUgcHJlc2VuY2Ugb2Yg
a2V5d29yZHMgaW4gdGhlIHRoZSByZXF1ZXN0ZWQgbmFtZXMuICBGb3IgZXhhbXBsZSwgd2UnbGwK
QEAgLTc4LDE0ICs3OCwxNCBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFy
Rm9uCiAgICAgaWYgKCFzaW1wbGVGb250RGF0YSkKICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBn
ZXRDYWNoZWRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250LmZhbWlseSgpLmZh
bWlseSgpKTsKIAotICAgIHJldHVybiBzaW1wbGVGb250RGF0YTsKKyAgICByZXR1cm4gc2ltcGxl
Rm9udERhdGEucmVsZWFzZSgpOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRM
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAg
IC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidz
IGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1
bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0g
ICAgU2ltcGxlRm9udERhdGEqIGZhbGxiYWNrID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+IGZhbGxiYWNrID0gMDsKICNpZiBPUyhXSU5ET1dTKQogICAgIHN0YXRpYyBBdG9taWNTdHJp
bmcgZmFsbGJhY2tOYW1lKCJBcmlhbCBVbmljb2RlIE1TIik7CiAjZWxzZQpAQCAtOTQsNyArOTQs
NyBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgZmFsbGJh
Y2sgPSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrTmFtZSwgZmFs
c2UsIHNob3VsZFJldGFpbik7CiAgICAgQVNTRVJUKGZhbGxiYWNrKTsKICAgICAKLSAgICByZXR1
cm4gZmFsbGJhY2s7CisgICAgcmV0dXJuIGZhbGxiYWNrLnJlbGVhc2UoKTsKIH0KIAogRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRh
V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L1NpbXBsZUZvbnREYXRhV3guY3BwCShyZXZpc2lvbiAxMjg4ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTAsMzIgKzkwLDMyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJv
eSgpCiAjZW5kaWYKIH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERh
dGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAg
Rm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
ICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoc2NhbGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRTaXplKCkpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGRlc2Ms
IGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxl
Rm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1
cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBm
YWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVk
Rm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0g
Y3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNyk7CiAKLSAgICByZXR1cm4g
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVk
Rm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRh
OjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpl
bXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3Jp
cHRpb24sIC41KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
LmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQog
CiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164567</attachid>
            <date>2012-09-18 08:34:04 -0700</date>
            <delta_ts>2012-09-18 12:01:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95866-20120918113345.patch</filename>
            <type>text/plain</type>
            <size>103415</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBAQAorMjAxMi0wOS0xOCAgU3RlcGhl
biBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkNvcmU6OkZvbnREYXRhIGhhbmRsaW5nIHRvIGNsYXJpZnkgcG9pbnRlciBvd25lcnNoaXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBhbGwgRm9udERhdGEgYW5kIGRlcml2ZWQgY2xhc3NlcyByZWYtY291bnRlZCBpbiBhbGwK
KyAgICAgICAgY29kZSBwYXRocyB0aGF0IGxlYWQgdG8gY2FjaGluZyBvciBvdGhlciByZXRlbnRp
b24gb2YgYSBwb2ludGVyLiBUaGUKKyAgICAgICAgZ29hbCBpcyB0byBhdmVydCBjcmFzaGVzIGFu
ZCBtZW1vcnkgbGVha3MsIGFuZCB0byBicmluZyB0aGUgY29kZSBtb3JlIGluCisgICAgICAgIGxp
bmUgd2l0aCBjdXJyZW50IFdlYktpdCBwcmFjdGljZXMuCisKKyAgICAgICAgQWxsIEZvbnREYXRh
IGRlcml2ZWQgY2xhc3NlcyBoYXZlIGJlZW4gc3dpdGNoZWQgdG8gdXNlIHN0YXRpYyBjcmVhdGUK
KyAgICAgICAgbWV0aG9kcyB3aXRoIHByaXZhdGUgY29uc3RydWN0b3JzLgorCisgICAgICAgIEFs
bCBjYWNoZXMgdGhhdCBob2xkIEZvbnREYXRhIG5vdyB1c2UgUmVmUHRycy4KKworICAgICAgICBB
bGwgbWV0aG9kcyB0aGF0IGNvbnN0cnVjdCBuZXcgZm9udCBkYXRhIG5vdyByZXR1cm4gUGFzc1Jl
ZlB0ciwgd2l0aAorICAgICAgICB0aGUgZXhjZXB0aW9uIG9mIGNvZGUgb25seSB1c2VkIHRvIGdl
bmVyYXRlIHRlbXBvcmFyeSBkYXRhIGZvciB0ZXh0CisgICAgICAgIHJ1biBsYXlvdXQuCisKKyAg
ICAgICAgQWxsIG1ldGhvZHMgdGhhdCBoYW5kbGUgRm9udERhdGEgaW4gYSBjYWxsIHN0YWNrIHRo
YXQgcGFzc2VzIHRocm91Z2gKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCBy
ZXR1cm4gUGFzc1JlZlB0ci4KKworICAgICAgICBQZXJmb3JtYW5jZSB0ZXN0aW5nIHdpbGwgYmUg
ZG9uZSBiZWZvcmUgY29tbWl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIHJl
ZmFjdG9yaW5nIGNvZGUgb25seSBhbmQgaGFzIG5vIGltcGFjdCBvbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAg
ICAgIChDU1NGb250RmFjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YSk6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAgIChDU1NGb250RmFjZVNvdXJj
ZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpmb250RGF0YUZvckdlbmVyaWNGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNl
bGVjdG9yOjpnZXRGb250RGF0YSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgor
ICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YSk6CisgICAgICAg
ICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmg6CisgICAgICAgIChDU1NTZWdtZW50ZWRGb250
RmFjZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZWdpc3RlckN1c3RvbUZvbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgor
ICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0Q2FjaGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXROb25S
ZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJn
ZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAg
IChGb250Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFsbGJhY2tMaXN0OjpzZXRQbGF0Zm9ybUZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaDoKKyAgICAgICAgKEZvbnRGYWxsYmFja0xpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDoKKyAgICAgICAgKEZvbnRTZWxlY3Rv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb250RGF0YVJhbmdlOjpGb250RGF0YVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhUmFuZ2U6OmZvbnREYXRhKToKKyAgICAgICAgKEZvbnREYXRhUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OmNyZWF0ZSk6CisgICAgICAgIChTZWdt
ZW50ZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6U2Vn
bWVudGVkRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChTaW1wbGVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6dmFyaWFudEZvbnREYXRhKToKKyAgICAgICAgKERlcml2ZWRGb250RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9p
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoR2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udFByb2NEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
YWNoZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBs
ZXhUZXh0TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnREYXRhRm9yQ29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0
ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFs
bENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFz
aXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRD
YWNoZVBhbmdvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1w
bGVGb250RGF0YVBhbmdvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpj
cmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmVt
cGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9u
dERhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fw
c0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnRE
YXRhU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fw
c0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjcmVh
dGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c21h
bGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmVtcGhh
c2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250
Q2FjaGVXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRh
Rm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2lt
cGxlRm9udERhdGFXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpl
bXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9u
dENhY2hlV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9u
dFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNv
cnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZv
bnREYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNj
YWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENh
cHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNN
YXJrRm9udERhdGEpOgorCiAyMDEyLTA5LTE4ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0V4dGVuc2lvbnMgQVBJXSBwb3N0
cG9uZSByZXF1ZXN0cyB0byBhZGQgZXh0ZW5zaW9ucyB1bnRpbCBleHRlbnNpb24gc2VydmVyIGlz
IGluaXRpYWxpemVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHJldmlzaW9u
IDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBDU1NGb250RmFjZTo6Zm9udExvYWRlZChDU1NG
b250RmFjZQogICAgIGZvbnRTZWxlY3Rvci0+Zm9udExvYWRlZCgpOwogfQogCi1TaW1wbGVGb250
RGF0YSogQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gQ1NTRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljKQogewogICAgIG1fYWN0aXZlU291cmNlID0gMDsKICAgICBpZiAo
IWlzVmFsaWQoKSkKQEAgLTEwMiw5ICsxMDIsOSBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZh
Y2U6OmdldEZvbnREYXRhCiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fc291cmNlcy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKFNpbXBs
ZUZvbnREYXRhKiByZXN1bHQgPSBtX3NvdXJjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlw
dGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250U2VsZWN0b3IpKSB7Cisg
ICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IHJlc3VsdCA9IG1fc291cmNlc1tpXS0+
Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMsIGZvbnRTZWxlY3RvcikpIHsKICAgICAgICAgICAgIG1fYWN0aXZlU291cmNlID0gbV9zb3Vy
Y2VzW2ldLmdldCgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2UuaAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlU291cmNlKik7CiAKLSAgICBTaW1wbGVG
b250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0
aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CiAKICAgICBzdHJ1Y3QgVW5pY29kZVJhbmdlIHsK
ICAgICAgICAgVW5pY29kZVJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkocmV2aXNpb24gMTI4ODkzKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENTU0ZvbnRGYWNlU291cmNlOjpmb250TG9hZGVkKENh
Y2hlCiAgICAgICAgIG1fZmFjZS0+Zm9udExvYWRlZCh0aGlzKTsKIH0KIAotU2ltcGxlRm9udERh
dGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxp
YywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFs
aWMsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIC8vIElmIHRoZSBmb250
IGhhc24ndCBsb2FkZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gd2UndmUgZ290IG5vdGhp
bmcuCiAgICAgaWYgKCFpc1ZhbGlkKCkpCkBAIC0xMTQsMTEgKzExNCw5IEBAIFNpbXBsZUZvbnRE
YXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICB1bnNpZ25lZCBoYXNoS2V5ID0gKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgNiB8IGZvbnREZXNjcmlw
dGlvbi53aWR0aFZhcmlhbnQoKSA8PCA0CiAgICAgICAgICAgICAgICAgICAgICAgIHwgKGZvbnRE
ZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0ID8g
OCA6IDApIHwgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gNCA6
IDApIHwgKHN5bnRoZXRpY0JvbGQgPyAyIDogMCkgfCAoc3ludGhldGljSXRhbGljID8gMSA6IDAp
OwogCi0gICAgU2ltcGxlRm9udERhdGEqJiBjYWNoZWREYXRhID0gbV9mb250RGF0YVRhYmxlLmFk
ZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOwotICAgIGlmIChjYWNoZWREYXRhKQotICAg
ICAgICByZXR1cm4gY2FjaGVkRGF0YTsKLQotICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4gZm9u
dERhdGE7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiYgZm9udERhdGEgPSBtX2ZvbnREYXRh
VGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgaWYgKGZvbnREYXRh
KQorICAgICAgICByZXR1cm4gZm9udERhdGE7IC8vIE5vIHJlbGVhc2UsIGJlY2F1c2UgZm9udERh
dGEgaXMgYSByZWZlcmVuY2UgdG8gYSBSZWZQdHIgdGhhdCBpcyBoZWxkIGluIHRoZSBtX2ZvbnRE
YXRhVGFibGUuCiAKICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBsZXQg
dGhlIHN5c3RlbSBwaWNrIGEgZm9udC4KICAgICBpZiAoaXNMb2FkZWQoKSkgewpAQCAtMTU3LDcg
KzE1NSw3IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50ID0gZm9udEZhY2VFbGVtZW50
OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZm9udERhdGEg
PSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoU1ZHRm9udERhdGE6OmNyZWF0ZShmb250RmFj
ZUVsZW1lbnQpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREYXRhID0g
U2ltcGxlRm9udERhdGE6OmNyZWF0ZShTVkdGb250RGF0YTo6Y3JlYXRlKGZvbnRGYWNlRWxlbWVu
dCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNJdGFsaWMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQog
I2VuZGlmCkBAIC0xNjYsMTQgKzE2NCwxNCBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VT
b3VyY2U6OmdldEZvCiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZvbnQtPmVuc3VyZUN1c3RvbUZv
bnREYXRhKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICAg
ICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEobV9mb250LT5wbGF0Zm9y
bURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwg
c3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250RGVzY3JpcHRpb24ub3JpZW50YXRp
b24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnRleHRPcmll
bnRhdGlvbigpLCBmb250RGVzY3JpcHRpb24ud2lkdGhWYXJpYW50KCksIGZvbnREZXNjcmlwdGlv
bi5yZW5kZXJpbmdNb2RlKCkpLCB0cnVlLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIGZvbnRE
YXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShtX2ZvbnQtPnBsYXRmb3JtRGF0YUZyb21DdXN0
b21EYXRhKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xk
LCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCksIGZv
bnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01v
ZGUoKSksIHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAgICAgLy8gSW4tRG9jdW1lbnQgU1ZHIEZvbnRz
CiAgICAgICAgICAgICBpZiAobV9zdmdGb250RmFjZUVsZW1lbnQpCi0gICAgICAgICAgICAgICAg
Zm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoU1ZHRm9udERhdGE6OmNyZWF0
ZShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICAgICAgICAg
ICAgICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoU1ZHRm9udERhdGE6OmNyZWF0
ZShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpOwogI2VuZGlmCiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTg0LDE1ICsxODIsMTUgQEAgU2ltcGxlRm9udERhdGEq
IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgICAgICAvLyBUaGlzIHRlbXBvcmFyeSBmb250
IGlzIG5vdCByZXRhaW5lZCBhbmQgc2hvdWxkIG5vdCBiZSByZXR1cm5lZC4KICAgICAgICAgRm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAgICAgICAgIFNp
bXBsZUZvbnREYXRhKiB0ZW1wb3JhcnlGb250ID0gZm9udENhY2hlKCktPmdldE5vblJldGFpbmVk
TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOwotICAgICAgICBmb250RGF0
YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YSh0ZW1wb3JhcnlGb250LT5wbGF0Zm9ybURh
dGEoKSwgdHJ1ZSwgdHJ1ZSkpOworICAgICAgICBmb250RGF0YSA9IFNpbXBsZUZvbnREYXRhOjpj
cmVhdGUodGVtcG9yYXJ5Rm9udC0+cGxhdGZvcm1EYXRhKCksIHRydWUsIHRydWUpOwogICAgIH0K
IAotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmb250U2VsZWN0b3ItPmRvY3VtZW50KCkp
IHsKLSAgICAgICAgY2FjaGVkRGF0YSA9IGZvbnREYXRhLmdldCgpOwotICAgICAgICBkb2N1bWVu
dC0+cmVnaXN0ZXJDdXN0b21Gb250KGZvbnREYXRhLnJlbGVhc2UoKSk7Ci0gICAgfQorICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBmb250U2VsZWN0b3ItPmRvY3VtZW50KCkpCisgICAgICAg
IGRvY3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQoZm9udERhdGEpOworICAgIGVsc2UKKyAgICAg
ICAgZm9udERhdGEuY2xlYXIoKTsKIAotICAgIHJldHVybiBjYWNoZWREYXRhOworICAgIHJldHVy
biBmb250RGF0YTsgLy8gTm8gcmVsZWFzZSwgYmVjYXVzZSBmb250RGF0YSBpcyBhIHJlZmVyZW5j
ZSB0byBhIFJlZlB0ciB0aGF0IGlzIGhlbGQgaW4gdGhlIG1fZm9udERhdGFUYWJsZS4KIH0KIAog
I2lmIEVOQUJMRShTVkdfRk9OVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopOwogCi0gICAgU2ltcGxlRm9u
dERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGlj
Qm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3RvciopOworICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3Rv
ciopOwogCiAgICAgdm9pZCBwcnVuZVRhYmxlKCk7CiAKQEAgLTc2LDcgKzc2LDcgQEAgcHJpdmF0
ZToKICAgICBBdG9taWNTdHJpbmcgbV9zdHJpbmc7IC8vIFVSSSBmb3IgcmVtb3RlLCBidWlsdC1p
biBmb250IG5hbWUgZm9yIGxvY2FsLgogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZv
bnQ+IG1fZm9udDsgLy8gRm9yIHJlbW90ZSBmb250cywgYSBwb2ludGVyIHRvIG91ciBjYWNoZWQg
cmVzb3VyY2UuCiAgICAgQ1NTRm9udEZhY2UqIG1fZmFjZTsgLy8gT3VyIG93bmluZyBmb250IGZh
Y2UuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgU2ltcGxlRm9udERhdGEqPiBtX2ZvbnREYXRhVGFi
bGU7IC8vIFRoZSBoYXNoIGtleSBpcyBjb21wb3NlZCBvZiBzaXplIHN5bnRoZXRpYyBzdHlsZXMu
CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiA+IG1fZm9udERh
dGFUYWJsZTsgLy8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0
eWxlcy4KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgUmVmUHRyPFNWR0ZvbnRGYWNlRWxl
bWVudD4gbV9zdmdGb250RmFjZUVsZW1lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0CiAgICAgZGlzcGF0Y2hJbnZhbGlk
YXRpb25DYWxsYmFja3MoKTsKIH0KIAotc3RhdGljIEZvbnREYXRhKiBmb250RGF0YUZvckdlbmVy
aWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorc3RhdGljIFBhc3NS
ZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseShEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZy
YW1lKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDY1LDcgKzQ2NSw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKENTU0YKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZv
bnREYXRhKiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCitQYXNz
UmVmUHRyPEZvbnREYXRhPiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5h
bWUpCiB7CiAgICAgaWYgKG1fZm9udEZhY2VzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoZmFt
aWx5TmFtZS5zdGFydHNXaXRoKCItd2Via2l0LSIpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuaAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZlcnNpb24oKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3ZlcnNpb247IH0KIAotICAgIHZpcnR1YWwgRm9udERhdGEqIGdldEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseU5hbWUpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250RGF0YT4gZ2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICB2
b2lkIGNsZWFyRG9jdW1lbnQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21l
bnRlZEZvbnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw5
IEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmFwcGVuZEZvbnRGYWMKICAgICBtX2ZvbnRG
YWNlcy5hcHBlbmQoZm9udEZhY2UpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdp
dGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKFNlZ21lbnRlZEZvbnREYXRhKiBuZXdGb250
RGF0YSwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZhY2VGb250RGF0YSwgY29uc3QgVmVjdG9yPENT
U0ZvbnRGYWNlOjpVbmljb2RlUmFuZ2U+JiByYW5nZXMpCitzdGF0aWMgdm9pZCBhcHBlbmRGb250
RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKFNlZ21lbnRlZEZvbnREYXRhKiBu
ZXdGb250RGF0YSwgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gcHJwRmFjZUZvbnREYXRhLCBj
b25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHJhbmdlcykKIHsKKyAgICBS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGZhY2VGb250RGF0YSA9IHBycEZhY2VGb250RGF0YTsKICAg
ICBpZiAoZmFjZUZvbnREYXRhLT5pc0xvYWRpbmcoKSkgewogICAgICAgICBuZXdGb250RGF0YS0+
YXBwZW5kUmFuZ2UoRm9udERhdGFSYW5nZSgwLCAwLCBmYWNlRm9udERhdGEpKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtOTgsNyArOTksNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRGb250RGF0YVdpdGhJ
bnZhbGlkVW5pCiAgICAgICAgIG5ld0ZvbnREYXRhLT5hcHBlbmRSYW5nZShGb250RGF0YVJhbmdl
KHJhbmdlc1tqXS5mcm9tKCksIHJhbmdlc1tqXS50bygpLCBmYWNlRm9udERhdGEpKTsKIH0KIAot
Rm9udERhdGEqIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK1Bhc3NSZWZQdHI8Rm9udERhdGE+IENTU1NlZ21l
bnRlZEZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0x
MDYsMTEgKzEwNywxMSBAQCBGb250RGF0YSogQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnRE
CiAgICAgRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24u
dHJhaXRzTWFzaygpOwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAoKGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZFBpeGVsU2l6ZSgpICsgMSkgPDwgKEZvbnRUcmFpdHNNYXNrV2lkdGggKyAxKSkgfCAo
KGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsID8gMSA6IDApIDw8IEZv
bnRUcmFpdHNNYXNrV2lkdGgpIHwgZGVzaXJlZFRyYWl0c01hc2s7CiAKLSAgICBTZWdtZW50ZWRG
b250RGF0YSomIGZvbnREYXRhID0gbV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVy
YXRvci0+c2Vjb25kOworICAgIFJlZlB0cjxTZWdtZW50ZWRGb250RGF0YT4mIGZvbnREYXRhID0g
bV9mb250RGF0YVRhYmxlLmFkZChoYXNoS2V5LCAwKS5pdGVyYXRvci0+c2Vjb25kOwogICAgIGlm
IChmb250RGF0YSkKICAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogCi0gICAgT3duUHRyPFNlZ21l
bnRlZEZvbnREYXRhPiBuZXdGb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTZWdtZW50ZWRGb250RGF0
YSk7CisgICAgZm9udERhdGEgPSBTZWdtZW50ZWRGb250RGF0YTo6Y3JlYXRlKCk7CiAKICAgICB1
bnNpZ25lZCBzaXplID0gbV9mb250RmFjZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKQEAgLTExOSwxOSArMTIwLDE5IEBAIEZvbnREYXRhKiBDU1NT
ZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udEQKICAgICAgICAgRm9udFRyYWl0c01hc2sgdHJhaXRz
TWFzayA9IG1fZm9udEZhY2VzW2ldLT50cmFpdHNNYXNrKCk7CiAgICAgICAgIGJvb2wgc3ludGhl
dGljQm9sZCA9ICEodHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWlnaHQ3
MDBNYXNrIHwgRm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpICYmIChkZXNp
cmVkVHJhaXRzTWFzayAmIChGb250V2VpZ2h0NjAwTWFzayB8IEZvbnRXZWlnaHQ3MDBNYXNrIHwg
Rm9udFdlaWdodDgwME1hc2sgfCBGb250V2VpZ2h0OTAwTWFzaykpOwogICAgICAgICBib29sIHN5
bnRoZXRpY0l0YWxpYyA9ICEodHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmIChk
ZXNpcmVkVHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spOwotICAgICAgICBpZiAoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZhY2VGb250RGF0YSA9IG1fZm9udEZhY2VzW2ldLT5nZXRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpIHsK
KyAgICAgICAgaWYgKFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZmFjZUZvbnREYXRhID0gbV9mb250
RmFjZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3lu
dGhldGljSXRhbGljKSkgewogICAgICAgICAgICAgQVNTRVJUKCFmYWNlRm9udERhdGEtPmlzU2Vn
bWVudGVkKCkpOwotICAgICAgICAgICAgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVuaWNvZGVS
YW5nZUlmTG9hZGluZyhuZXdGb250RGF0YS5nZXQoKSwgZmFjZUZvbnREYXRhLCBtX2ZvbnRGYWNl
c1tpXS0+cmFuZ2VzKCkpOworICAgICAgICAgICAgYXBwZW5kRm9udERhdGFXaXRoSW52YWxpZFVu
aWNvZGVSYW5nZUlmTG9hZGluZyhmb250RGF0YS5nZXQoKSwgZmFjZUZvbnREYXRhLnJlbGVhc2Uo
KSwgbV9mb250RmFjZXNbaV0tPnJhbmdlcygpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAo
bmV3Rm9udERhdGEtPm51bVJhbmdlcygpKSB7CisgICAgaWYgKGZvbnREYXRhLT5udW1SYW5nZXMo
KSkgewogICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mb250U2VsZWN0b3ItPmRv
Y3VtZW50KCkpIHsKLSAgICAgICAgICAgIGZvbnREYXRhID0gbmV3Rm9udERhdGEuZ2V0KCk7Ci0g
ICAgICAgICAgICBkb2N1bWVudC0+cmVnaXN0ZXJDdXN0b21Gb250KG5ld0ZvbnREYXRhLnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBkb2N1bWVudC0+cmVnaXN0ZXJDdXN0b21Gb250KGZvbnREYXRh
KTsKKyAgICAgICAgICAgIHJldHVybiBmb250RGF0YTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IHJldHVybiBmb250RGF0YTsKKyAgICByZXR1cm4gMDsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgJKHJldmlzaW9uIDEyODg5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kRm9udEZhY2UoUGFzc1Jl
ZlB0cjxDU1NGb250RmFjZT4pOwogCi0gICAgRm9udERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpOworICAgIFBhc3NSZWZQdHI8Rm9udERhdGE+IGdldEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogCiBwcml2YXRlOgogICAgIENTU1NlZ21lbnRlZEZvbnRG
YWNlKENTU0ZvbnRTZWxlY3RvciopOwpAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwogCiAgICAgQ1NTRm9udFNlbGVjdG9yKiBtX2ZvbnRTZWxlY3Rv
cjsKLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBTZWdtZW50ZWRGb250RGF0YSo+IG1fZm9udERhdGFU
YWJsZTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2VnbWVudGVkRm9udERhdGE+ID4g
bV9mb250RGF0YVRhYmxlOwogICAgIFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+LCAxPiBtX2Zv
bnRGYWNlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTI4
ODkzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk5Miw3ICsxOTkyLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0
eWxlRgogICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJl
Z2lzdGVyQ3VzdG9tRm9udChQYXNzT3duUHRyPEZvbnREYXRhPiBmb250RGF0YSkKK3ZvaWQgRG9j
dW1lbnQ6OnJlZ2lzdGVyQ3VzdG9tRm9udChQYXNzUmVmUHRyPEZvbnREYXRhPiBmb250RGF0YSkK
IHsKICAgICBtX2N1c3RvbUZvbnRzLmFwcGVuZChmb250RGF0YSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3MSw3ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVz
aGVldHMoRWxlbWVudCopOwogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KTsKIAotICAgIHZvaWQgcmVnaXN0ZXJDdXN0b21Gb250KFBhc3NPd25Q
dHI8Rm9udERhdGE+KTsKKyAgICB2b2lkIHJlZ2lzdGVyQ3VzdG9tRm9udChQYXNzUmVmUHRyPEZv
bnREYXRhPik7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcGFnZSBib3ggKG1hcmdpbiBib3hl
cyBhbmQgcGFnZSBib3JkZXJzKSBpcyB2aXNpYmxlLgogICAgIGJvb2wgaXNQYWdlQm94VmlzaWJs
ZShpbnQgcGFnZUluZGV4KTsKQEAgLTEyOTAsNyArMTI5MCw3IEBAIHByaXZhdGU6CiAgICAgT3du
UHRyPFN0eWxlUmVzb2x2ZXI+IG1fc3R5bGVSZXNvbHZlcjsKICAgICBib29sIG1fZGlkQ2FsY3Vs
YXRlU3R5bGVSZXNvbHZlcjsKICAgICBib29sIG1faGFzRGlydHlTdHlsZVJlc29sdmVyOwotICAg
IFZlY3RvcjxPd25QdHI8Rm9udERhdGE+ID4gbV9jdXN0b21Gb250czsKKyAgICBWZWN0b3I8UmVm
UHRyPEZvbnREYXRhPiA+IG1fY3VzdG9tRm9udHM7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKICAg
ICBSZWZQdHI8RE9NV2luZG93PiBtX2RvbVdpbmRvdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBAIHN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDog
V1RGOjpHZW4KICAgICB9CiB9OwogCi10eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YSwg
cGFpcjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZv
bnREYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7Cit0eXBlZGVmIEhhc2hNYXA8Rm9u
dFBsYXRmb3JtRGF0YSwgcGFpcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCB1bnNpZ25lZD4sIEZv
bnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hl
OwogCiBzdGF0aWMgRm9udERhdGFDYWNoZSogZ0ZvbnREYXRhQ2FjaGUgPSAwOwogCkBAIC0yOTcs
OSArMjk3LDkgQEAgY29uc3QgaW50IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogY29u
c3QgaW50IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gNTA7IC8vIFByZXR0eSBMb3cgVGhyZXNob2xk
CiBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAzMDsKICNlbmRpZgotc3RhdGlj
IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhID0g
MDsKK3N0YXRpYyBMaXN0SGFzaFNldDxSZWZQdHI8U2ltcGxlRm9udERhdGE+ID4qIGdJbmFjdGl2
ZUZvbnREYXRhID0gMDsKIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSwgU2hvdWxkUmV0YWlu
IHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSwgU2hv
dWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9y
bURhdGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5
LCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpOwogICAgIGlmICghcGxhdGZvcm1EYXRhKQpAQCAtMzA4
LDcgKzMwOCw3IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnQKICAg
ICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEocGxhdGZvcm1EYXRhLCBzaG91bGRSZXRhaW4pOwog
fQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEsIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4p
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgU2hvdWxkUmV0YWluIHNob3Vs
ZFJldGFpbikKIHsKICAgICBpZiAoIXBsYXRmb3JtRGF0YSkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0zMjAsMTYgKzMyMCwxNiBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRG
b250CiAKICAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7CiAgICAgICAgIGdGb250RGF0YUNhY2hl
ID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhID0gbmV3IExp
c3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj47CisgICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhID0gbmV3IExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4gPjsKICAgICB9CiAK
ICAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBnRm9udERhdGFDYWNoZS0+Zmlu
ZCgqcGxhdGZvcm1EYXRhKTsKICAgICBpZiAocmVzdWx0ID09IGdGb250RGF0YUNhY2hlLT5lbmQo
KSkgewotICAgICAgICBwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+IG5ld1ZhbHVlKG5l
dyBTaW1wbGVGb250RGF0YSgqcGxhdGZvcm1EYXRhKSwgc2hvdWxkUmV0YWluID09IFJldGFpbiA/
IDEgOiAwKTsKKyAgICAgICAgcGFpcjxSZWZQdHI8U2ltcGxlRm9udERhdGE+LCB1bnNpZ25lZD4g
bmV3VmFsdWUoU2ltcGxlRm9udERhdGE6OmNyZWF0ZSgqcGxhdGZvcm1EYXRhKSwgc2hvdWxkUmV0
YWluID09IFJldGFpbiA/IDEgOiAwKTsKICAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPnNldCgqcGxh
dGZvcm1EYXRhLCBuZXdWYWx1ZSk7CiAgICAgICAgIGlmIChzaG91bGRSZXRhaW4gPT0gRG9Ob3RS
ZXRhaW4pCiAgICAgICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKG5ld1ZhbHVlLmZpcnN0
KTsKLSAgICAgICAgcmV0dXJuIG5ld1ZhbHVlLmZpcnN0OworICAgICAgICByZXR1cm4gbmV3VmFs
dWUuZmlyc3QucmVsZWFzZSgpOwogICAgIH0KIAogICAgIGlmICghcmVzdWx0LmdldCgpLT5zZWNv
bmQuc2Vjb25kKSB7CkBAIC0zNTAsNyArMzUwLDcgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNo
ZTo6Z2V0Q2FjaGVkRm9udAogCiBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXROb25SZXRh
aW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pCiB7Ci0gICAgcmV0dXJuIGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERl
c2NyaXB0aW9uLCBEb05vdFJldGFpbik7CisgICAgcmV0dXJuIGdldExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoZm9udERlc2NyaXB0aW9uLCBEb05vdFJldGFpbikubGVha1JlZigpOwogfQogCiB2b2lk
IEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkKQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNv
bnN0IFNpCiAKICAgICBBU1NFUlQoaXQtPnNlY29uZC5zZWNvbmQpOwogICAgIGlmICghLS1pdC0+
c2Vjb25kLnNlY29uZCkKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChmb250RGF0YSk7
CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQoaXQtPnNlY29uZC5maXJzdCk7CiB9CiAK
IHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCkBAIC0zODMs
MTEgKzM4MywxMSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAK
ICAgICBpc1B1cmdpbmcgPSB0cnVlOwogCi0gICAgVmVjdG9yPGNvbnN0IFNpbXBsZUZvbnREYXRh
KiwgMjA+IGZvbnREYXRhVG9EZWxldGU7Ci0gICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZlRm9udERhdGEtPmVuZCgpOwotICAgIExp
c3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZl
Rm9udERhdGEtPmJlZ2luKCk7CisgICAgVmVjdG9yPFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIDIw
PiBmb250RGF0YVRvRGVsZXRlOworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gPjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZlRm9udERhdGEtPmVuZCgpOworICAgIExpc3RI
YXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4gPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVG
b250RGF0YS0+YmVnaW4oKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICYmIGl0ICE9
IGVuZDsgKytpdCwgKytpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSA9ICppdC5nZXQoKTsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiYgZm9udERhdGEg
PSAqaXQuZ2V0KCk7CiAgICAgICAgIGdGb250RGF0YUNhY2hlLT5yZW1vdmUoZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpKTsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBkZWxldGUgU2ltcGxlRm9u
dERhdGEgaGVyZSBiZWNhdXNlIGRlbGV0aW9uIGNhbiBtb2RpZnkgZ0luYWN0aXZlRm9udERhdGEu
IFNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC80NDAxMQogICAgICAgICBmb250
RGF0YVRvRGVsZXRlLmFwcGVuZChmb250RGF0YSk7CkBAIC00MDEsOSArNDAxLDcgQEAgdm9pZCBG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgICAgICAgICAgZ0luYWN0aXZl
Rm9udERhdGEtPnJlbW92ZShnSW5hY3RpdmVGb250RGF0YS0+YmVnaW4oKSk7CiAgICAgfQogCi0g
ICAgc2l6ZV90IGZvbnREYXRhVG9EZWxldGVDb3VudCA9IGZvbnREYXRhVG9EZWxldGUuc2l6ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9udERhdGFUb0RlbGV0ZUNvdW50OyArK2kp
Ci0gICAgICAgIGRlbGV0ZSBmb250RGF0YVRvRGVsZXRlW2ldOworICAgIGZvbnREYXRhVG9EZWxl
dGUuY2xlYXIoKTsKIAogICAgIGlmIChnRm9udFBsYXRmb3JtRGF0YUNhY2hlKSB7CiAgICAgICAg
IFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1JlbW92ZTsKQEAgLTQ2Miw5
ICs0NjAsOSBAQCBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnREYXRhQ291bnQoCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWNvbnN0IEZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhKGNv
bnN0IEZvbnQmIGZvbnQsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVj
dG9yKQorUGFzc1JlZlB0cjxGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YShjb25zdCBG
b250JiBmb250LCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikK
IHsKLSAgICBGb250RGF0YSogcmVzdWx0ID0gMDsKKyAgICBSZWZQdHI8Rm9udERhdGE+IHJlc3Vs
dDsKIAogICAgIGludCBzdGFydEluZGV4ID0gZmFtaWx5SW5kZXg7CiAgICAgY29uc3QgRm9udEZh
bWlseSogc3RhcnRGYW1pbHkgPSAmZm9udC5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKQEAg
LTQ5OCwxNCArNDk2LDE0IEBAIGNvbnN0IEZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRh
KGMKIAogICAgICAgICBpZiAoZm9udFNlbGVjdG9yKSB7CiAgICAgICAgICAgICAvLyBUcnkgdGhl
IHVzZXIncyBwcmVmZXJyZWQgc3RhbmRhcmQgZm9udC4KLSAgICAgICAgICAgIGlmIChGb250RGF0
YSogZGF0YSA9IGZvbnRTZWxlY3Rvci0+Z2V0Rm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24o
KSwgc3RhbmRhcmRGYW1pbHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAg
ICAgICAgaWYgKFJlZlB0cjxGb250RGF0YT4gZGF0YSA9IGZvbnRTZWxlY3Rvci0+Z2V0Rm9udERh
dGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgc3RhbmRhcmRGYW1pbHkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBkYXRhLnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFN0aWxs
IG5vIHJlc3VsdC4gIEhhbmQgYmFjayBvdXIgbGFzdCByZXNvcnQgZmFsbGJhY2sgZm9udC4KICAg
ICAgICAgcmVzdWx0ID0gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250LmZvbnREZXNjcmlw
dGlvbigpKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdDbGllbnRzOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJl
dmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAKICNpbmNsdWRlIDxsaW1p
dHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKQEAgLTYwLDExICs2MiwxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFNob3VsZFJldGFpbiB7IFJldGFpbiwgRG9Ob3RSZXRhaW4gfTsKIAot
ICAgIGNvbnN0IEZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250JiwgaW50JiBmYW1pbHlJ
bmRleCwgRm9udFNlbGVjdG9yKik7CisgICAgUGFzc1JlZlB0cjxGb250RGF0YT4gZ2V0Rm9udERh
dGEoY29uc3QgRm9udCYsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciopOwogICAgIHZv
aWQgcmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CiAKICAgICAvLyBUaGlz
IG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiwgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IGdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpOwogCiAgICAgLy8gQWxzbyBpbXBsZW1lbnRlZCBieSB0aGUg
cGxhdGZvcm0uCiAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKQEAgLTg0LDggKzg2LDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBW
ZWN0b3I8dW5zaWduZWQ+Jik7CiAKLSAgICBTaW1wbGVGb250RGF0YSogZ2V0Q2FjaGVkRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVj
a2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKLSAgICBT
aW1wbGVGb250RGF0YSogZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UsIFNob3VsZFJl
dGFpbiA9IFJldGFpbik7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4gPSBS
ZXRhaW4pOwogICAgIFNpbXBsZUZvbnREYXRhKiBnZXROb25SZXRhaW5lZExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIGFkZENsaWVudChG
b250U2VsZWN0b3IqKTsKQEAgLTk5LDkgKzEwMSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1cmdl
SW5hY3RpdmVGb250RGF0YShpbnQgY291bnQgPSBJTlRfTUFYKTsKIAogI2lmIFBMQVRGT1JNKFdJ
TikKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9OVCYgZm9u
dCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYg
b3V0Rm9udEZhbWlseU5hbWUpOwogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKFdJTkRP
V1MpCi0gICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZv
bnQsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgU2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiwgd2NoYXJfdCogb3V0Rm9udEZh
bWlseU5hbWUpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCkBAIC0x
MzEsMTAgKzEzMywxMCBAQCBwcml2YXRlOgogICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAg
Ly8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBT
aW1wbGVGb250RGF0YSogZ2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYpOwor
ICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnQmKTsKICAgICBGb250UGxhdGZvcm1EYXRhKiBjcmVhdGVGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsK
IAotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhKiwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhKiwgU2hvdWxk
UmV0YWluID0gUmV0YWluKTsKIAogICAgIC8vIERvbid0IHB1cmdlIGlmIHRoaXMgY291bnQgaXMg
PiAwOwogICAgIGludCBtX3B1cmdlUHJldmVudENvdW50OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMyArMjksMTUgQEAKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBTaW1wbGVGb250RGF0YTsKIAotY2xhc3MgRm9udERhdGEgeworY2xhc3MgRm9udERhdGEgOiBw
dWJsaWMgUmVmQ291bnRlZDxGb250RGF0YT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZv
bnREYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRm9udERhdGEo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dEZhbGxiYWNrTGlzdC5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw5ICs2Niw5IEBAIHZvaWQgRm9udEZhbGxiYWNrTGlzdDo6cmVsZWFzZUZvbnREYXRhKCkKIHsK
ICAgICB1bnNpZ25lZCBudW1Gb250cyA9IG1fZm9udExpc3Quc2l6ZSgpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1Gb250czsgKytpKSB7Ci0gICAgICAgIGlmICghbV9mb250TGlz
dFtpXS5zZWNvbmQpIHsKKyAgICAgICAgaWYgKCFtX2ZvbnRMaXN0W2ldLT5pc0N1c3RvbUZvbnQo
KSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX2ZvbnRMaXN0W2ldLmZpcnN0LT5pc1NlZ21lbnRl
ZCgpKTsKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEoc3RhdGljX2Nh
c3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2ZvbnRMaXN0W2ldLmZpcnN0KSk7CisgICAgICAg
ICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0YXRpY19jYXN0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4obV9mb250TGlzdFtpXS5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtOTEsNyArOTEsNyBAQCB2b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmRldGVybWluZVBpdGNoKGNv
CiBjb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdChjb25zdCBGb250
KiBmb250LCB1bnNpZ25lZCByZWFsaXplZEZvbnRJbmRleCkgY29uc3QKIHsKICAgICBpZiAocmVh
bGl6ZWRGb250SW5kZXggPCBtX2ZvbnRMaXN0LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1fZm9u
dExpc3RbcmVhbGl6ZWRGb250SW5kZXhdLmZpcnN0OyAvLyBUaGlzIGZhbGxiYWNrIGZvbnQgaXMg
YWxyZWFkeSBpbiBvdXIgbGlzdC4KKyAgICAgICAgcmV0dXJuIG1fZm9udExpc3RbcmVhbGl6ZWRG
b250SW5kZXhdLmdldCgpOyAvLyBUaGlzIGZhbGxiYWNrIGZvbnQgaXMgYWxyZWFkeSBpbiBvdXIg
bGlzdC4KIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgcGFzc2luZyBpbiBzb21lIGNyYXp5
IHZhbHVlIGhlcmUuCiAgICAgQVNTRVJUKHJlYWxpemVkRm9udEluZGV4ID09IG1fZm9udExpc3Qu
c2l6ZSgpKTsKQEAgLTEwNCwyMSArMTA0LDIxIEBAIGNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJh
Y2tMaXN0Ojpmb250RGEKICAgICAvLyBpbiB8bV9mYW1pbHlJbmRleHwsIHNvIHRoYXQgd2UgbmV2
ZXIgc2NhbiB0aGUgc2FtZSBzcG90IGluIHRoZSBsaXN0IHR3aWNlLiAgZ2V0Rm9udERhdGEgd2ls
bCBhZGp1c3Qgb3VyCiAgICAgLy8gfG1fZmFtaWx5SW5kZXh8IGFzIGl0IHNjYW5zIGZvciB0aGUg
cmlnaHQgZm9udCB0byBtYWtlLgogICAgIEFTU0VSVChmb250Q2FjaGUoKS0+Z2VuZXJhdGlvbigp
ID09IG1fZ2VuZXJhdGlvbik7Ci0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9IGZvbnRDYWNo
ZSgpLT5nZXRGb250RGF0YSgqZm9udCwgbV9mYW1pbHlJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0
KCkpOworICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0ID0gZm9udENhY2hlKCktPmdldEZvbnRE
YXRhKCpmb250LCBtX2ZhbWlseUluZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CiAgICAgaWYg
KHJlc3VsdCkgewotICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRh
KiwgYm9vbD4ocmVzdWx0LCByZXN1bHQtPmlzQ3VzdG9tRm9udCgpKSk7CisgICAgICAgIG1fZm9u
dExpc3QuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGlmIChyZXN1bHQtPmlzTG9hZGluZygpKQog
ICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwogICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKIHZvaWQgRm9udEZhbGxi
YWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKIHsKICAgICBtX2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsKICAgICBB
U1NFUlQoZm9udENhY2hlKCktPmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwotICAgIGNv
bnN0IEZvbnREYXRhKiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgm
cGxhdGZvcm1EYXRhKTsKLSAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRh
KiwgYm9vbD4oZm9udERhdGEsIGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSkpOworICAgIFJlZlB0
cjxGb250RGF0YT4gZm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnBs
YXRmb3JtRGF0YSk7CisgICAgbV9mb250TGlzdC5hcHBlbmQoZm9udERhdGEpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxi
YWNrTGlzdC5oCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVsZWFzZUZvbnREYXRhKCk7CiAKLSAgICBtdXRhYmxl
IFZlY3RvcjxwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4sIDE+IG1fZm9udExpc3Q7CisgICAg
bXV0YWJsZSBWZWN0b3I8UmVmUHRyPEZvbnREYXRhPiwgMT4gbV9mb250TGlzdDsKICAgICBtdXRh
YmxlIEdseXBoUGFnZXMgbV9wYWdlczsKICAgICBtdXRhYmxlIEdseXBoUGFnZVRyZWVOb2RlKiBt
X3BhZ2VaZXJvOwogICAgIG11dGFibGUgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY2FjaGVkUHJp
bWFyeVNpbXBsZUZvbnREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Nyw4ICs5Nyw4IEBAIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IEZvbnQ6
OmcKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi50ZXh0T3Jp
ZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHZlcnRpY2FsUmlnaHRGb250
RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHZlcnRpY2Fs
UmlnaHROb2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh2ZXJ0aWNhbFJpZ2h0
Rm9udERhdGEsIHBhZ2VOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+
dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdmVydGljYWxSaWdodE5vZGUgPSBHbHlwaFBhZ2VU
cmVlTm9kZTo6Z2V0Um9vdENoaWxkKHZlcnRpY2FsUmlnaHRGb250RGF0YS5nZXQoKSwgcGFnZU51
bWJlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlKiB2ZXJ0aWNhbFJp
Z2h0UGFnZSA9IHZlcnRpY2FsUmlnaHROb2RlLT5wYWdlKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRQYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdseXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IHZlcnRpY2FsUmlnaHRQYWdl
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CkBAIC0xMTEsOCArMTExLDggQEAgc3RkOjpwYWly
PEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udDo6ZwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcih2ZXJ0aWNhbFJpZ2h0RGF0YSwgdmVydGljYWxS
aWdodFBhZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24udGV4dE9yaWVudGF0aW9uKCkg
PT0gVGV4dE9yaWVudGF0aW9uVXByaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT51
cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdseXBoUGFnZVRyZWVOb2RlKiB1cHJpZ2h0Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRS
b290Q2hpbGQodXByaWdodEZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRGb250RGF0YSA9IGRhdGEu
Zm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHVwcmlnaHROb2RlID0gR2x5cGhQYWdlVHJl
ZU5vZGU6OmdldFJvb3RDaGlsZCh1cHJpZ2h0Rm9udERhdGEuZ2V0KCksIHBhZ2VOdW1iZXIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZSogdXByaWdodFBhZ2UgPSB1cHJp
Z2h0Tm9kZS0+cGFnZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0
UGFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaERhdGEgdXByaWdo
dERhdGEgPSB1cHJpZ2h0UGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwpAQCAtMTUyLDEx
ICsxNTIsMTEgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udDo6ZwogICAg
ICAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSB2YXJpYW50Rm9udERhdGEgZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4g
MC4KICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCBy
ZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IGRhdGEuZm9udERhdGEtPnZhcmlhbnRG
b250RGF0YShtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+
dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCF2YXJpYW50Rm9udERhdGEpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogCi0gICAgICAgICAgICAgICAgICAgIEdseXBo
UGFnZVRyZWVOb2RlKiB2YXJpYW50Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hp
bGQodmFyaWFudEZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgR2x5
cGhQYWdlVHJlZU5vZGUqIHZhcmlhbnROb2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RD
aGlsZCh2YXJpYW50Rm9udERhdGEuZ2V0KCksIHBhZ2VOdW1iZXIpOwogICAgICAgICAgICAgICAg
ICAgICBHbHlwaFBhZ2UqIHZhcmlhbnRQYWdlID0gdmFyaWFudE5vZGUtPnBhZ2UoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRQYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBHbHlwaERhdGEgZGF0YSA9IHZhcmlhbnRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7
CkBAIC0xOTgsNyArMTk4LDcgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9u
dDo6ZwogICAgICAgICBjb2RlVW5pdHNbMV0gPSBVMTZfVFJBSUwoYyk7CiAgICAgICAgIGNvZGVV
bml0c0xlbmd0aCA9IDI7CiAgICAgfQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjaGFyYWN0
ZXJGb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRGb250RGF0YUZvckNoYXJhY3RlcnMoKnRoaXMs
IGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGNoYXJhY3RlckZvbnREYXRhID0gZm9udENhY2hlKCktPmdldEZvbnREYXRhRm9yQ2hhcmFjdGVy
cygqdGhpcywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpOwogICAgIGlmIChjaGFyYWN0ZXJG
b250RGF0YSkgewogICAgICAgICBpZiAoY2hhcmFjdGVyRm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWNoYXJhY3RlckZvbnREYXRhLT5oYXNWZXJ0
aWNhbEdseXBocygpICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAgICAgICAgICB2
YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKQEAgLTIwNyw3ICsyMDcsNyBAQCBzdGQ6
OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250OjpnCiAgICAgfQogICAgIGlmIChjaGFy
YWN0ZXJGb250RGF0YSkgewogICAgICAgICAvLyBHb3QgdGhlIGZhbGxiYWNrIGdseXBoIGFuZCBm
b250LgotICAgICAgICBHbHlwaFBhZ2UqIGZhbGxiYWNrUGFnZSA9IEdseXBoUGFnZVRyZWVOb2Rl
OjpnZXRSb290Q2hpbGQoY2hhcmFjdGVyRm9udERhdGEsIHBhZ2VOdW1iZXIpLT5wYWdlKCk7Cisg
ICAgICAgIEdseXBoUGFnZSogZmFsbGJhY2tQYWdlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJv
b3RDaGlsZChjaGFyYWN0ZXJGb250RGF0YS5nZXQoKSwgcGFnZU51bWJlciktPnBhZ2UoKTsKICAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmYWxsYmFja1BhZ2UgJiYgZmFsbGJhY2tQYWdlLT5mb250
RGF0YUZvckNoYXJhY3RlcihjKSA/IGZhbGxiYWNrUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGMpIDogY2hhcmFjdGVyRm9udERhdGEtPm1pc3NpbmdHbHlwaERhdGEoKTsKICAgICAgICAgLy8g
Q2FjaGUgaXQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBzeXN0ZW0gZmFsbGJhY2sgYWdhaW4gbmV4
dCB0aW1lLgogICAgICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkocmV2
aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgRm9udFNl
bGVjdG9yX2gKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOCw3ICszOSw3IEBAIGNsYXNzIEZvbnRTZWxlY3RvckNsaWVudDsKIGNsYXNzIEZv
bnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQotICAgIHZpcnR1YWwgRm9udERhdGEqIGdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250RGF0YT4gZ2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1l
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSB7IH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZVRyZWVOb2RlLmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDIsNyArMjQyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoYwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB6ZXJvRmlsbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgfD0gZmlsbChwYWdlVG9GaWxsLCBmcm9tLCB0byAt
IGZyb20sIGJ1ZmZlciArIGZyb20gKiAoc3RhcnQgPCAweDEwMDAwID8gMSA6IDIpLCAodG8gLSBm
cm9tKSAqIChzdGFydCA8IDB4MTAwMDAgPyAxIDogMiksIHJhbmdlLmZvbnREYXRhKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyB8PSBmaWxsKHBhZ2VUb0ZpbGwsIGZyb20s
IHRvIC0gZnJvbSwgYnVmZmVyICsgZnJvbSAqIChzdGFydCA8IDB4MTAwMDAgPyAxIDogMiksICh0
byAtIGZyb20pICogKHN0YXJ0IDwgMHgxMDAwMCA/IDEgOiAyKSwgcmFuZ2UuZm9udERhdGEoKS5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NyYXRjaFBhZ2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodG8gPD0gIHN0YXRpY19jYXN0PGludD4oR2x5
cGhQYWdlOjpzaXplKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IGZyb207IGogPCB0bzsgaisrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCShyZXZpc2lvbiAxMjg4OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgY29uc3QgU2ltcGxlRm9udERhdGEq
IFNlZ21lbnRlZEZvbnREYXRhOgogICAgIFZlY3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8Rm9udERhdGFSYW5n
ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIGlmIChpdC0+ZnJvbSgpIDw9IGMgJiYgaXQtPnRvKCkgPj0gYykKLSAgICAg
ICAgICAgIHJldHVybiBpdC0+Zm9udERhdGEoKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+Zm9u
dERhdGEoKS5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fcmFuZ2VzWzBdLmZvbnREYXRhKCk7
CisgICAgcmV0dXJuIG1fcmFuZ2VzWzBdLmZvbnREYXRhKCkuZ2V0KCk7CiB9CiAKIGJvb2wgU2Vn
bWVudGVkRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9u
dERhdGEuaAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2VnbWVudGVkRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaW1wbGVGb250RGF0YTsKIAogc3RydWN0IEZv
bnREYXRhUmFuZ2UgewotICAgIEZvbnREYXRhUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRv
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCisgICAgRm9udERhdGFSYW5nZShVQ2hh
cjMyIGZyb20sIFVDaGFyMzIgdG8sIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRh
KQogICAgICAgICA6IG1fZnJvbShmcm9tKQogICAgICAgICAsIG1fdG8odG8pCiAgICAgICAgICwg
bV9mb250RGF0YShmb250RGF0YSkKQEAgLTQzLDE2ICs0MywxOCBAQCBzdHJ1Y3QgRm9udERhdGFS
YW5nZSB7CiAKICAgICBVQ2hhcjMyIGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zyb207IH0KICAg
ICBVQ2hhcjMyIHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQotICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGE7IH0KKyAgICBQYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERh
dGE7IH0KIAogcHJpdmF0ZToKICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICBVQ2hhcjMyIG1fdG87
Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBtX2ZvbnREYXRhOwogfTsKIAogY2xhc3MgU2VnbWVudGVkRm9udERhdGEgOiBw
dWJsaWMgRm9udERhdGEgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlZ21lbnRl
ZEZvbnREYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2VnbWVudGVkRm9udERh
dGEpOyB9CisgCiAgICAgdmlydHVhbCB+U2VnbWVudGVkRm9udERhdGEoKTsKIAogICAgIHZvaWQg
YXBwZW5kUmFuZ2UoY29uc3QgRm9udERhdGFSYW5nZSYgcmFuZ2UpIHsgbV9yYW5nZXMuYXBwZW5k
KHJhbmdlKTsgfQpAQCAtNjQsNiArNjYsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToK
KyAgICBTZWdtZW50ZWRGb250RGF0YSgpIHsgfQorCiAgICAgdmlydHVhbCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwz
NiArMTcwLDM2IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmlzU2VnbWVudGVkKCkgY29uc3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6dmVy
dGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRh
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24pIHsKICAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YSB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhKG1fcGxhdGZv
cm1EYXRhKTsKICAgICAgICAgdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YS5zZXRPcmllbnRhdGlv
bihIb3Jpem9udGFsKTsKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbiA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YSh2ZXJ0aWNhbFJpZ2h0UGxh
dGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpKTsKKyAgICAgICAgbV9kZXJp
dmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbiA9IGNyZWF0ZSh2ZXJ0aWNhbFJp
Z2h0UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIH0KLSAg
ICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbi5nZXQo
KTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlv
bjsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRp
b25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAogewogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnRE
YXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PnVwcmlnaHRPcmllbnRhdGlvbikKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnVwcmlnaHRP
cmllbnRhdGlvbiA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShtX3BsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250KCksIGZhbHNlLCB0cnVlKSk7Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT51cHJpZ2h0T3JpZW50YXRpb24uZ2V0KCk7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0
T3JpZW50YXRpb247CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6YnJva2Vu
SWRlb2dyYXBoRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRG
b250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhLT5icm9rZW5JZGVvZ3JhcGgpIHsKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmJyb2tl
bklkZW9ncmFwaCA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShtX3BsYXRmb3JtRGF0YSwg
aXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5icm9r
ZW5JZGVvZ3JhcGggPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxz
ZSk7CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGgtPm1faXNCcm9r
ZW5JZGVvZ3JhcGhGYWxsYmFjayA9IHRydWU7CiAgICAgfQotICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+YnJva2VuSWRlb2dyYXBoLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+YnJva2VuSWRlb2dyYXBoOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZp
c2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMCArNzksMTYgQEAgcHVibGljOgogICAg
IH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KLSAgICBTaW1wbGVG
b250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxz
ZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNr
ID0gZmFsc2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBjcmVhdGUo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCA9
IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFs
bGJhY2sgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltcGxl
Rm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjaykpOworICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIFNWRyBG
b250cy4KLSAgICBTaW1wbGVGb250RGF0YShQYXNzT3duUHRyPEFkZGl0aW9uYWxGb250RGF0YT4s
IGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGlj
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlKFBhc3NPd25Q
dHI8QWRkaXRpb25hbEZvbnREYXRhPiBmb250RGF0YSwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3lu
dGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNpbXBsZUZvbnREYXRhKGZvbnREYXRhLCBmb250U2l6ZSwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgfQogCiAgICAgdmlydHVhbCB+U2ltcGxlRm9u
dERhdGEoKTsKIApAQCAtOTEsMTEgKzk3LDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbERh
dGE7IH0KICNlbmRpZgogCi0gICAgU2ltcGxlRm9udERhdGEqIHNtYWxsQ2Fwc0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIFNpbXBsZUZvbnREYXRhKiBlbXBoYXNp
c01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBTaW1wbGVG
b250RGF0YSogYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcmtGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0OwogCi0gICAgU2ltcGxl
Rm9udERhdGEqIHZhcmlhbnRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKKyAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0
Y2ggKHZhcmlhbnQpIHsKICAgICAgICAgY2FzZSBTbWFsbENhcHNWYXJpYW50OgpAQCAtMTEyLDgg
KzExOCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2ltcGxlRm9udERh
dGEqPih0aGlzKTsKICAgICB9CiAKLSAgICBTaW1wbGVGb250RGF0YSogdmVydGljYWxSaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKLSAgICBTaW1wbGVGb250RGF0YSogdXByaWdodE9y
aWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CiAK
ICAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNh
bEdseXBoczsgfQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsg
cmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMjAxLDYgKzIwNywxMCBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRp
bmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOworCisg
ICAgU2ltcGxlRm9udERhdGEoUGFzc093blB0cjxBZGRpdGlvbmFsRm9udERhdGE+ICwgZmxvYXQg
Zm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworCiAg
ICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJbml0KCk7CiAg
ICAgdm9pZCBwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKTsKQEAgLTIxMCw3ICsyMjAsNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBjb21tb25Jbml0KCk7CiAKLSAgICBQYXNzT3duUHRyPFNpbXBsZUZv
bnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3Jl
YXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0OwogCiAjaWYgKFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJTkNFKSkgXAogICAgIHx8
IChPUyhXSU5ET1dTKSAmJiBQTEFURk9STShXWCkpCkBAIC0yNTQsMTEgKzI2NCwxMSBAQCBwcml2
YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAgICAgYm9vbCBmb3JDdXN0
b21Gb250OwotICAgICAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2FwczsKLSAgICAg
ICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0gICAgICAgIE93blB0cjxT
aW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBPd25QdHI8U2ltcGxlRm9u
dERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgT3duUHRyPFNpbXBsZUZv
bnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVtcGhhc2lzTWFy
azsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGg7CisgICAg
ICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uOworICAg
ICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsKICNpZiBQTEFU
Rk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKICAgICAgICAg
bXV0YWJsZSBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY29tcG9zaXRlRm9udFJl
ZmVyZW5jZXM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwCShyZXZp
c2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2
b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgaWN1OjpM
b2NhbGUgbG9jYWxlID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKICAgICBQbGF0Zm9ybVN1
cHBvcnQ6OkZvbnRGYW1pbHkgZmFtaWx5OwpAQCAtMTEwLDEyICsxMTAsMTIgQEAgY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250
RGF0YShnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGF0
b21pY0ZhbWlseSwgRG9Ob3RSZXRhaW4pLCBEb05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZv
bnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3Ry
aW5nLCBzZXJpZiwgKCJTZXJpZiIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgbW9ub3NwYWNlLCAoIk1vbm9zcGFjZSIpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q2FjaGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE4LDEyICszMTgsMTIgQEAgc3RhdGljIGJvb2wgZm9udENvbnRh
aW5zQ2hhcmFjdGVyKGNvbnN0CiB9CiAKIC8vIFRyaWVzIHRoZSBnaXZlbiBmb250IGFuZCBzYXZl
IGl0IHxvdXRGb250RmFtaWx5TmFtZXwgaWYgaXQgc3VjY2VlZHMuCi1TaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4sIGNv
bnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKQorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFp
biBzaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91dEZvbnRGYW1p
bHlOYW1lKQogewotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdldENhY2hlZEZvbnRE
YXRhKGZvbnREZXNjcmlwdGlvbiwgZm9udC5sZkZhY2VOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWlu
KTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBmb250LmxmRmFjZU5hbWUsIGZhbHNlLCBzaG91bGRSZXRhaW4p
OwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgbWVtY3B5KG91dEZvbnRGYW1pbHlOYW1lLCBm
b250LmxmRmFjZU5hbWUsIHNpemVvZihmb250LmxmRmFjZU5hbWUpKTsKLSAgICByZXR1cm4gZm9u
dERhdGE7CisgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIExPTkcg
dG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKQEAgLTQwNiw3ICs0MDYsNyBA
QCBzdHJ1Y3QgR2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udFByb2NEYXRhCiAgICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uKiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBGb250Q2FjaGU6OlNob3VsZFJl
dGFpbiBtX3Nob3VsZFJldGFpbjsKICAgICB3Y2hhcl90KiBtX2ZvbnROYW1lOwotICAgIFNpbXBs
ZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gbV9mb250
RGF0YTsKIH07CiAKIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dFByb2MoY29uc3QgTE9HRk9OVCogbG9nRm9udCwgY29uc3QgVEVYVE1FVFJJQyogbWV0cmljcywg
RFdPUkQgZm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBG
b250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiAKIC8vIEdpdmVuIHRoZSBkZXNpcmVkIGJhc2UgZm9u
dCwgdGhpcyB3aWxsIGNyZWF0ZSBhIFNpbXBsZUZvbnREYXRhIGZvciBhIHNwZWNpZmljCiAvLyBm
b250IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBnaXZlbiByYW5nZSBvZiBjaGFyYWN0
ZXJzLgotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgZm9udERlc2NyaXB0
aW9uLmRvbWluYW50U2NyaXB0KCkKICAgICAvLyB0byBHZXRGYWxsYmFja0ZhbWlseSBoZXJlLgpA
QCAtNTA4LDEyICs1MDgsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
Rm9udAogCiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hv
dWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIEZvbnREZXNjcmlw
dGlvbjo6R2VuZXJpY0ZhbWlseVR5cGUgZ2VuZXJpYyA9IGRlc2NyaXB0aW9uLmdlbmVyaWNGYW1p
bHkoKTsKIApAQCAtNTMwLDkgKzUzMCw5IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dExhc3RSZXNvcnQKICAgICBlbHNlIGlmIChnZW5lcmljID09IEZvbnREZXNjcmlwdGlvbjo6TW9u
b3NwYWNlRmFtaWx5KQogICAgICAgICBmb250U3RyID0gY291cmllclN0cjsKIAotICAgIFNpbXBs
ZUZvbnREYXRhKiBzaW1wbGVGb250ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGZv
bnRTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
c2ltcGxlRm9udCA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmb250U3RyLCBmYWxz
ZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoc2ltcGxlRm9udCkKLSAgICAgICAgcmV0dXJuIHNp
bXBsZUZvbnQ7CisgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKIAogICAgIC8v
IEZhbGwgYmFjayB0byBzeXN0ZW0gZm9udHMgYXMgV2luIFNhZmFyaSBkb2VzIGJlY2F1c2UgdGhp
cyBmdW5jdGlvbiBtdXN0CiAgICAgLy8gcmV0dXJuIGEgdmFsaWQgZm9udC4gT25jZSB3ZSBmaW5k
IGEgdmFsaWQgc3lzdGVtIGZvbnQsIHdlIHNhdmUgaXRzIG5hbWUKQEAgLTU0Niw3ICs1NDYsNyBA
QCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIExPR0ZP
TlQgZGVmYXVsdEdVSUxvZ0ZvbnQ7CiAgICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwg
c2l6ZW9mKGRlZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKICAgICAgICAg
aWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3Jp
cHRpb24sIHNob3VsZFJldGFpbiwgZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUp
KQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2lt
cGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgLy8gRmFsbCBiYWNrIHRvIE5vbi1jbGll
bnQgbWV0cmljcyBmb250cy4KQEAgLTU1NCwxNSArNTU0LDE1IEBAIFNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNp
emVvZihub25DbGllbnRNZXRyaWNzKTsKICAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJ
X0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVu
dE1ldHJpY3MsIDApKSB7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1l
dHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1
cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsK
ICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0Zv
bnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lbnVGb250
LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAg
ICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxl
Rm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hv
dWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFsbGJhY2tGb250TmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBz
aW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xp
ZW50TWV0cmljcy5sZkNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAg
IHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFz
ZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5k
TG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmU21D
YXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxl
Rm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICB9CiAK
ICAgICAvLyBGYWxsIGJhY2sgdG8gYWxsIHRoZSBmb250cyBpbnN0YWxsZWQgaW4gdGhpcyBQQy4g
V2hlbiBhIGZvbnQgaGFzIGEKQEAgLTU3Niw3ICs1NzYsNyBAQCBTaW1wbGVGb250RGF0YSogRm9u
dENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIEVudW1Gb250RmFtaWxpZXMoZGMsIDAsIGdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnRQcm9jLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnBy
b2NEYXRhKSk7CiAKICAgICAgICAgaWYgKHByb2NEYXRhLm1fZm9udERhdGEpCi0gICAgICAgICAg
ICByZXR1cm4gcHJvY0RhdGEubV9mb250RGF0YTsKKyAgICAgICAgICAgIHJldHVybiBwcm9jRGF0
YS5tX2ZvbnREYXRhLnJlbGVhc2UoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBs
ZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCShy
ZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDM0ICsxMDksMzQgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsK
IH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNj
YWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgTE9HRk9OVCB3aW5G
b250OwogICAgIEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9O
VCksICZ3aW5Gb250KTsKICAgICBmbG9hdCBzY2FsZWRTaXplID0gc2NhbGVGYWN0b3IgKiBmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCk7CiAgICAgd2luRm9udC5sZkhlaWdodCA9IC1scm91
bmRmKHNjYWxlZFNpemUpOwogICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZ3
aW5Gb250KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0
Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkp
LCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShGb250UGxhdGZvcm1EYXRhKGhmb250LCBzY2FsZWRTaXplLCBtX3BsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERh
dGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9t
Rm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250
RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQog
Ci1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc093blB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnRE
YXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9
IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDEyODg5MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZy
ZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBGY1BhdHRlcm4qIGZp
bmRCZXN0Rm9udEdpdmVuRmFsbGJhY2tzKGNvCiAgICAgcmV0dXJuIEZjRm9udFNldE1hdGNoKDAs
IHNldHMsIDEsIHBhdHRlcm4sICZmb250Q29uZmlnUmVzdWx0KTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAg
UmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9IGFkb3B0UmVmKGNyZWF0ZUZvbnRDb25maWdQYXR0
ZXJuRm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICBjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBmb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCk7
CkBAIC0xMDAsMTIgKzEwMCwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250RGF0YSwg
RG9Ob3RSZXRhaW4pOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFy
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYpCiB7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgLy8gV2Ug
d2FudCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMg
cHJldmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZv
bnRzIG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVl
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDEyODg5MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRh
RnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxNyArODcsMTcgQEAgdm9pZCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSk7
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRh
KGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9u
dCgpKSwKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRh
KGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9u
dCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2NhbGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGxh
dGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1
ZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9t
Rm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21h
bGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBz
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEg
PSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CkBAIC0xMDUsMTcgKzEw
NSwxNyBAQCBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2FwCiAgICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNyk7
CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICBy
ZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEq
IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQog
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3Vz
dG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRl
eHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxMjg4OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
Q29yZVRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4MiwxMyArMjgyLDEzIEBAIHZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5w
cmltYXJ5Rm9udCgpLCBjcCwgc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbiwgcnVu
UmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnVuRm9u
dERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEobV9mb250LmZvbnREZXNjcmlw
dGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2UsIEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pOwor
ICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRG
b250RGF0YShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgpLCBmYWxzZSwg
Rm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CiAjaWYgIVBMQVRGT1JNKFdYKQogICAgICAg
ICAgICAgICAgICAgICAvLyBDb3JlIFRleHQgbWF5IGhhdmUgdXNlZCBhIGZvbnQgdGhhdCBpcyBu
b3Qga25vd24gdG8gTlNGb250TWFuYWdlci4gSW4gdGhhdCBjYXNlLCBmYWxsIGJhY2sgb24KICAg
ICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIGZvbnQgYXMgcmV0dXJuZWQsIGV2ZW4gdGhv
dWdoIGl0IG1heSBub3QgaGF2ZSB0aGUgYmVzdCBOU0ZvbnRSZW5kZXJpbmdNb2RlLgogICAgICAg
ICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBGb250UGxhdGZvcm1EYXRhIHJ1bkZvbnRQbGF0Zm9ybURhdGEoKE5TRm9udCAqKXJ1bkZvbnQs
IENURm9udEdldFNpemUocnVuRm9udCksIG1fZm9udC5mb250RGVzY3JpcHRpb24oKS51c2VQcmlu
dGVyRm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9udENh
Y2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZydW5Gb250UGxhdGZvcm1EYXRhLCBGb250Q2FjaGU6
OkRvTm90UmV0YWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRhID0gZm9u
dENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZydW5Gb250UGxhdGZvcm1EYXRhLCBGb250Q2Fj
aGU6OkRvTm90UmV0YWluKS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogI2Vsc2UKICAg
ICAgICAgICAgICAgICAgICAgLy8ganVzdCBhc3NlcnQgZm9yIG5vdywgdW50aWwgd2UgY2FuIGRl
dmlzZSBhIGJldHRlciBmaXggdGhhdCB3b3JrcyB3aXRoIHd4LgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCShyZXZp
c2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0FwcEtpdEZvbnRXZWlnaHRCb2wKICAgICByZXR1cm4gYXBwS2l0Rm9udFdlaWdo
dCA+PSA3OwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0
YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZv
bnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkKIHsKICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKICAgICBVMTZfR0VU
KGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwgY2hhcmFjdGVyKTsKQEAgLTE2NiwxMiArMTY2LDEy
IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICByZXR1cm4g
Z2V0Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0YWluKTsKIH0KIAotU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2lt
aWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICAvLyBBdHRlbXB0
IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIAogICAg
IC8vIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbiB0aGUgdGhlIHJlcXVlc3RlZCBuYW1lcy4g
IEZvciBleGFtcGxlLCB3ZSdsbAogICAgIC8vIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMg
IkFyYWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0
YSA9IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YTsKICAgICBj
b25zdCBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gJmZvbnQuZm9udERlc2NyaXB0aW9uKCkuZmFt
aWx5KCk7CiAgICAgd2hpbGUgKGN1cnJGYW1pbHkgJiYgIXNpbXBsZUZvbnREYXRhKSB7CiAgICAg
ICAgIGlmIChjdXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewpAQCAtMTg0LDE4ICsxODQs
MTggQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbgogICAgICAgICBj
dXJyRmFtaWx5ID0gY3VyckZhbWlseS0+bmV4dCgpOwogICAgIH0KIAotICAgIHJldHVybiBzaW1w
bGVGb250RGF0YTsKKyAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgpOwogfQogCi1T
aW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0
YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91
bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWlj
U3RyaW5nLCB0aW1lc1N0ciwgKCJUaW1lcyIpKTsKIAogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBl
dmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAg
Rm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3Vs
ZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgU2ltcGxlRm9udERhdGEqIHNp
bXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0
ciwgZmFsc2UsIHNob3VsZFJldGFpbik7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1w
bGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIs
IGZhbHNlLCBzaG91bGRSZXRhaW4pOwogICAgIGlmIChzaW1wbGVGb250RGF0YSkKLSAgICAgICAg
cmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgICAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVs
ZWFzZSgpOwogCiAgICAgLy8gVGhlIFRpbWVzIGZhbGxiYWNrIHdpbGwgYWxtb3N0IGFsd2F5cyB3
b3JrLCBidXQgaW4gdGhlIGhpZ2hseSB1bnVzdWFsIGNhc2Ugd2hlcmUKICAgICAvLyB0aGUgdXNl
ciBkb2Vzbid0IGhhdmUgaXQsIHdlIGZhbGwgYmFjayBvbiBMdWNpZGEgR3JhbmRlIGJlY2F1c2Ug
dGhhdCdzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENv
bXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwyMSArMTg5LDIxIEBAIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBGb250Ojpmb250RGF0YUZvckMKICAgICAgICAgICAgIGlmIChzaW1wbGVGb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkgewogICAgICAgICAgICAg
ICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFzaW1wbGVG
b250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAgICAgICAgICAgICAgICB2YXJp
YW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAgICAgICAgICAgICAgc2ltcGxl
Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoRm9udERhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2Vu
SWRlb2dyYXBoRm9udERhdGEoKS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Zm9udERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblZlcnRp
Y2FsUmlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERhdGEqIHZlcnRpY2Fs
UmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250RGF0YSogdmVydGljYWxS
aWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZv
bnREYXRhKCkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRH
bHlwaCA9IHZlcnRpY2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJh
Y3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFz
ZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBs
ZUZvbnREYXRhID0gdmVydGljYWxSaWdodEZvbnREYXRhOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEg
PSBzaW1wbGVGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgU2ltcGxlRm9udERhdGEqIHVwcmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnRE
YXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLmdldCgpOwogICAgICAgICAgICAgICAg
ICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFj
dGVyKGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBo
ICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzaW1wbGVGb250RGF0YSA9IHVwcmlnaHRGb250RGF0YTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY29uc3QgU2lt
cGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52YXJpYW50Rm9u
dERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpKQorICAgICAgICAgICAgaWYgKGNvbnN0
IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmFyaWFu
dEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKICAgICAgICAgICAg
ICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250RGF0YTsKICAgICAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMwOCwxOSArMzA4LDE5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJv
eSgpCiAgICAgaWYgKCFpc0N1c3RvbUZvbnQoKSAmJiBtX2Rlcml2ZWRGb250RGF0YSkgewogICAg
ICAgICAvLyBUaGVzZSBjb21lIGZyb20gdGhlIGNhY2hlLgogICAgICAgICBpZiAobV9kZXJpdmVk
Rm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9u
dERhdGEobV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5sZWFrUHRyKCkpOworICAgICAgICAg
ICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzLmdldCgpKTsKIAogICAgICAgICBpZiAobV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFy
aykKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEobV9kZXJpdmVkRm9u
dERhdGEtPmVtcGhhc2lzTWFyay5sZWFrUHRyKCkpOworICAgICAgICAgICAgZm9udENhY2hlKCkt
PnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpKTsK
ICAgICB9CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpj
cmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIGlmIChp
c0N1c3RvbUZvbnQoKSkgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRh
KG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXplID0gc2NhbGVk
Rm9udERhdGEubV9zaXplICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgU2ltcGxlRm9udERhdGEoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKSk7CisgICAgICAg
IHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxz
ZSk7CiAgICAgfQogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMzQ1LDMx
ICszNDUsMzEgQEAgUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogICAg
ICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIE5T
SXRhbGljRm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TSXRhbGljRm9udE1hc2sp
OwogCiAgICAgICAgIC8vIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKSB0YWtlcyBj
YXJlIG9mIG5vdCBkZWxldGluZyB0aGUgY2FjaGVkIGZvbnQgZGF0YSB0d2ljZS4KLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmc2NhbGVkRm9u
dERhdGEpKTsKKyAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgm
c2NhbGVkRm9udERhdGEpOwogICAgIH0KICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1w
bGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZv
bnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERl
c2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwogCi0gICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6
ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1w
aGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0
aW9uLCAuNWYpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsu
Z2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAK
IGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAJKHJldmlz
aW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0Zv
bnRDYWNoZVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTcgKzM1LDE3IEBAIHZvaWQg
Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91
bGRSZXRhaW4pCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVo
b3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCiAgICAgLy8gRm9yIG5vdyB3ZSds
bCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdp
bmcgYW55IHByZWZzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFu
Z28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHJldmlzaW9u
IDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBs
ZUZvbnREYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwzMiArODQsMzIgQEAgdm9p
ZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29u
c3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2Fs
ZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQg
c2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoc2Nh
bGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwogICAgIEZvbnRQbGF0
Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOwotICAg
IHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhKSk7CisgICAg
cmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKIH0KIAotU2ltcGxl
Rm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRh
KQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlz
Q3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAg
ICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0
YShmb250RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
OwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlm
ICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZl
ZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAg
cmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERh
dGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRD
YWNoZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjMsNyArNjMsNyBAQCBzdGF0aWMgUVJhd0ZvbnQgcmF3Rm9udEZvckNoYXJhY3RlcnMoY29uCiAg
ICAgcmV0dXJuIGdseXBocy5yYXdGb250KCk7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFFTdHJpbmcgcXN0
cmluZyA9IFFTdHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIq
PihjaGFyYWN0ZXJzKSwgbGVuZ3RoKTsKICAgICBRUmF3Rm9udCBjb21wdXRlZEZvbnQgPSByYXdG
b250Rm9yQ2hhcmFjdGVycyhxc3RyaW5nLCBmb250LnJhd0ZvbnQoKSk7CkBAIC03MywxMiArNzMs
MTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgIHJldHVy
biBnZXRDYWNoZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udCwgRG9Ob3RSZXRhaW4pOwogfQogCi1T
aW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRT
aW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAgIHJldHVybiAw
OwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRM
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyBmYWxsYmFja0ZhbWlseSA9IFFGb250KGZvbnREZXNjcmlwdGlvbi5mYW1pbHkoKS5mYW1pbHko
KSkubGFzdFJlc29ydEZhbWlseSgpOwogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShuZXcg
Rm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRmFtaWx5KSwgc2hvdWxk
UmV0YWluKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBs
ZUZvbnREYXRhUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsMzAgKzYxLDMwIEBAIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybVdpZHRoRm9yR2wKICAgICByZXR1cm4gYWR2YW5jZXMuYXQoMCkueCgpOwogfQogCi1QYXNz
T3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFj
dG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZWRTaXpl
ID0gbHJvdW5kZihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzY2FsZUZhY3Rvcik7
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRh
KG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7Cisg
ICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRm
b3JtRGF0YSwgc2NhbGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBs
ZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShp
c0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQog
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGcmFjdGlvbik7CiAKLSAgICByZXR1cm4gbV9k
ZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9u
dERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpl
bXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRp
b24sIGVtcGhhc2lzTWFya0ZyYWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrOwogfQogCiBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoR2x5cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHAJKHJldmlzaW9uIDEyODg5
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDcgQEAgdm9pZCBGb250Q2FjaGU6OnBs
YXRmb3JtSW5pdCgpCiB7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBpY3U6OkxvY2FsZSBsb2NhbGUg
PSBpY3U6OkxvY2FsZTo6Z2V0RGVmYXVsdCgpOwogICAgIFBsYXRmb3JtU3VwcG9ydDo6Rm9udEZh
bWlseSBmYW1pbHk7CkBAIC05MywxMiArOTEsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0Rm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgmcGxhdGZvcm1E
YXRhLCBEb05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNp
bWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzYW5zU3RyLCAoIlNhbnMi
KSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNlcmlmU3Ry
LCAoIlNlcmlmIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9TaW1wbGVGb250RGF0YVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcAkocmV2aXNpb24gMTI4
ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250
RGF0YVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMzAgKzE3MCwzMCBAQCB2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1QYXNzT3duUHRyPFNpbXBs
ZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2Fs
ZUZhY3RvcikgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZWRTaXplID0gbHJvdW5kZihm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKG1fcGxhdGZvcm1E
YXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgcmV0dXJuIFNp
bXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3JtRGF0YSwgc2Nh
bGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQo
KSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rl
cml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2Ny
aXB0aW9uLCBzbWFsbENhcHNGcmFjdGlvbik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxs
Q2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERl
cml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBo
YXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGVtcGhhc2lz
TWFya0ZyYWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNN
YXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwog
fQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAkocmV2aXNpb24g
MTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwxMCArMTg2LDEwIEBAIHN0YXRpYyBIRk9O
VCBjcmVhdGVNTGFuZ0ZvbnQoSU1MYW5nRm9udEwKICAgICByZXR1cm4gaGZvbnQ7CiB9CiAKLWNv
bnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KQogewogICAgIFVDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07Ci0gICAgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRh
OwogICAgIEhXbmREQyBoZGMoMCk7CiAgICAgSEZPTlQgcHJpbWFyeUZvbnQgPSBmb250LnByaW1h
cnlGb250KCktPmZvbnREYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciktPnBsYXRmb3JtRGF0YSgp
Lmhmb250KCk7CiAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgcHJpbWFy
eUZvbnQpOwpAQCAtMjkzLDI0ICsyOTMsMjQgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Rm9udAogICAgICAgICBEZWxldGVPYmplY3QoaGZvbnQpOwogICAgIH0KIAotICAg
IHJldHVybiBmb250RGF0YTsKKyAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwogfQogCi1T
aW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRT
aW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAgIHJldHVybiAw
OwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlv
bkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3Vs
ZFJldGFpbiBzaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYg
b3V0Rm9udEZhbWlseU5hbWUpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9O
VCYgZm9udCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKICAgICBBdG9taWNT
dHJpbmcgZmFtaWx5TmFtZSA9IFN0cmluZyhmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5s
ZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9
IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZmFsc2UsIHNo
b3VsZFJldGFpbik7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGdldENh
Y2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZmFsc2UsIHNob3VsZFJl
dGFpbik7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAgICBvdXRGb250RmFtaWx5TmFtZSA9IGZh
bWlseU5hbWU7Ci0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiBmb250RGF0YS5yZWxl
YXNlKCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJl
dGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcsIGZhbGxiYWNrRm9udE5hbWUsICgpKTsKICAgICBpZiAoIWZh
bGxiYWNrRm9udE5hbWUuaXNFbXB0eSgpKQpAQCAtMzI5LDExICszMjksMTEgQEAgU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgICAgICBBdG9taWNTdHJpbmcoIkx1
Y2lkYSBTYW5zIFVuaWNvZGUiKSwKICAgICAgICAgQXRvbWljU3RyaW5nKCJBcmlhbCIpCiAgICAg
fTsKLSAgICBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udDsKKyAgICBSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IHNpbXBsZUZvbnQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlf
TEVOR1RIKGZhbGxiYWNrRm9udHMpOyArK2kpIHsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBn
ZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udHNbaV0sIGZhbHNl
LCBzaG91bGRSZXRhaW4pKSB7CiAgICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1lID0gZmFsbGJh
Y2tGb250c1tpXTsKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAg
cmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDIs
NyArMzQyLDcgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAg
ICAgICBMT0dGT05UIGRlZmF1bHRHVUlMb2dGb250OwogICAgICAgICBHZXRPYmplY3QoZGVmYXVs
dEdVSUZvbnQsIHNpemVvZihkZWZhdWx0R1VJTG9nRm9udCksICZkZWZhdWx0R1VJTG9nRm9udCk7
CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dG
b250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBkZWZhdWx0R1VJTG9nRm9udCwgZmFs
bGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAg
ICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICB9CiAKICAgICAvLyBGYWxsIGJh
Y2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRzLgpAQCAtMzUwLDE1ICszNTAsMTUgQEAgU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgIG5vbkNsaWVudE1ldHJp
Y3MuY2JTaXplID0gc2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpOwogICAgIGlmIChTeXN0ZW1QYXJh
bWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mKG5vbkNsaWVudE1ldHJp
Y3MpLCAmbm9uQ2xpZW50TWV0cmljcywgMCkpIHsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBm
b250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91bGRS
ZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJhY2tGb250TmFtZSkp
Ci0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1w
bGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21E
ZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNs
aWVudE1ldHJpY3MubGZNZW51Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2Uo
KTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZT
dGF0dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVG
b250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBp
ZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVz
Y3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZkNhcHRpb25Gb250LCBm
YWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAg
ICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9u
dCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIHNo
b3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9u
dE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1
cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNDAgKzEzMiw0MCBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybURlc3Ryb3koKQogICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwog
fQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBmbG9hdCBzY2FsZWRT
aXplID0gc2NhbGVGYWN0b3IgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CiAgICAgaWYgKGlzQ3Vz
dG9tRm9udCgpKSB7CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udChtX3BsYXRm
b3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnQuc2V0U2l6ZShzY2FsZWRTaXplKTsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShzY2FsZWRGb250LCB0cnVlLCBm
YWxzZSkpOworICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRGb250
LCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgTE9HRk9OVCB3aW5mb250OwogICAgIEdldE9i
amVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9OVCksICZ3aW5mb250KTsK
ICAgICB3aW5mb250LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2NhbGVkU2l6ZSAqIChtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSA/IDEgOiAzMikpOwogICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9udElu
ZGlyZWN0KCZ3aW5mb250KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRh
KEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgIHJldHVybiBTaW1w
bGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1f
cGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2Js
aXF1ZSgpLCBtX3BsYXRmb3JtRGF0YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7
CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rl
cml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERh
dGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRl
U2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBjU21hbGxDYXBzRm9udFNpemVNdWx0aXBs
aWVyKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOwor
ICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250
RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUo
aXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFy
aykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxl
ZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFj
dGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250
Q2FjaGVXaW5DRS5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI1LDcgKzIyNSw3IEBAIHZvaWQgRm9udENhY2hlOjpjb21VbmluaXRpYWxpemUoKQogICAgIH0K
IH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgpCiB7CiAgICAgU3RyaW5nIGZhbWlseU5hbWU7CiAgICAgV0NIQVIgbmFtZVtMRl9G
QUNFU0laRV07CkBAIC0yMzUsMTAgKzIzNSwxMSBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9u
dENhY2hlOjpnZXRGb250CiAgICAgdW5zaWduZWQgdW5pY29kZVJhbmdlID0gZmluZENoYXJVbmlj
b2RlUmFuZ2UoY2hhcmFjdGVyKTsKIAogI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRfTElOSykgJiYg
KElNTEFOR19GT05UX0xJTksgPT0gMikKLSAgICBpZiAoSU1MYW5nRm9udExpbmsyKiBsYW5nRm9u
dExpbmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKSB7CisgICAgaWYgKElNTGFuZ0ZvbnRMaW5r
MiogbGFuZ0ZvbnRMaW5rID0gZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkKICNlbHNlCi0gICAgaWYg
KElNTGFuZ0ZvbnRMaW5rKiBsYW5nRm9udExpbmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKSB7
CisgICAgaWYgKElNTGFuZ0ZvbnRMaW5rKiBsYW5nRm9udExpbmsgPSBnZXRGb250TGlua0ludGVy
ZmFjZSgpKQogI2VuZGlmCisgICAgewogICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBHZXRDdXJy
ZW50T2JqZWN0KGdfc2NyZWVuREMsIE9CSl9GT05UKTsKICAgICAgICAgSEZPTlQgaGZvbnQgPSAw
OwogICAgICAgICBEV09SRCBjb2RlUGFnZXMgPSAwOwpAQCAtMjY3LDEwICsyNjgsMTEgQEAgY29u
c3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBhc2tlZCBhYm91dCBhIGNvZGUgcGFnZSB0aGF0IGlzIG5vdCBvbmUgb2YgdGhlIGNv
ZGUgcGFnZXMKICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYnkgTUxhbmcsIHNvIHRo
ZSBmb250IG1pZ2h0IG5vdCBjb250YWluIHRoZSBjaGFyYWN0ZXIuCiAjaWYgZGVmaW5lZChJTUxB
TkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9PSAyKQotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIobGFuZ0ZvbnRMaW5rLCBnX3Nj
cmVlbkRDLCBjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZv
bnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGNoYXJhY3Rlcikp
CiAjZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnNDaGFy
YWN0ZXIobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVyLCBuYW1lKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIo
bGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVyLCBuYW1lKSkKICNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RP
YmplY3QoZ19zY3JlZW5EQywgb2xkRm9udCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsYW5n
Rm9udExpbmstPlJlbGVhc2VGb250KGhmb250KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGhm
b250ID0gMDsKQEAgLTMwOCwyMCArMzEwLDIwIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldEZvbnQKIAogICAgICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBnZXRD
YWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAg
ICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LT5oYXNoKCkgIT0gb3JpZ0ZvbnQuaGFzaCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERh
dGEocmVzdWx0LCBEb05vdFJldGFpbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnREYXRh
OworICAgICAgICAgICAgaWYgKFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShyZXN1bHQsIERvTm90UmV0YWluKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZm9udERhdGEucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmKQogewogICAgIHJldHVy
biAwOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2MsIFNob3VsZFJldGFpbiBzaG91
bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzYywgU2hvdWxk
UmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0
ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cg
d2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdp
dGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5j
cHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2
Myw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKLVBh
c3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzYyhmb250RGVzY3JpcHRpb24pOwogICAgIGZvbnREZXNjLnNldENvbXB1dGVkU2l6ZShscm91
bmRmKHNjYWxlRmFjdG9yICogZm9udERlc2MuY29tcHV0ZWRTaXplKCkpKTsKQEAgLTcxLDI4ICs3
MSwyOCBAQCBQYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0CiAgICAgZm9u
dERlc2Muc2V0S2V5d29yZFNpemUobHJvdW5kZihzY2FsZUZhY3RvciAqIGZvbnREZXNjLmtleXdv
cmRTaXplKCkpKTsKICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBmb250Q2FjaGUoKS0+
Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzYywgbV9wbGF0Zm9ybURhdGEuZmFtaWx5
KCkpOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKCpyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnJlc3VsdCk7CiB9CiAKLVNp
bXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250
RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0
ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
KQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9u
dERhdGEoZm9udERlc2NyaXB0aW9uLCAuNyk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxs
Q2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAg
ICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERl
cml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBo
YXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAot
ICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJl
dHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBEV09SRCBnZXRLbm93
bkZvbnRDb2RlUGFnZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250Q2FjaGVXeC5jcHAJKHJldmlz
aW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRD
YWNoZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCB2b2lkIEZvbnRDYWNo
ZTo6cGxhdGZvcm1Jbml0KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9u
dENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7Ci0gICAgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gMDsKICAg
ICBmb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZv
bnQuZmFtaWx5KCkuZmFtaWx5KCksIGZhbHNlLCBEb05vdFJldGFpbik7CiAgICAgaWYgKCFmb250
RGF0YS0+Y29udGFpbnNDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpCiAgICAgICAgIGZv
bnREYXRhID0gZ2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoZm9udCk7CkBAIC01MywxMiArNTMs
MTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgICAgICBm
b250RGF0YSA9IGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udC5mb250RGVzY3JpcHRpb24o
KSk7CiAKICAgICBBU1NFUlQoZm9udERhdGEpOwotICAgIHJldHVybiBmb250RGF0YTsKKyAgICBy
ZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250JiBmb250KQogewotICAgIFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250RGF0YSA9
IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9IDA7CiAjaWYg
T1MoREFSV0lOKQogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVz
aW5nIGEgbWF0Y2ggYmFzZWQgb24gCiAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGlu
IHRoZSB0aGUgcmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUsIHdlJ2xsCkBAIC03OCwxNCAr
NzgsMTQgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbgogICAgIGlm
ICghc2ltcGxlRm9udERhdGEpCiAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9u
dERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7CiAK
LSAgICByZXR1cm4gc2ltcGxlRm9udERhdGE7CisgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJl
bGVhc2UoKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxk
UmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICAvLyBGSVhNRTog
V291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZv
bnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhl
IHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIFNpbXBsZUZv
bnREYXRhKiBmYWxsYmFjayA9IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmYWxsYmFj
ayA9IDA7CiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZhbGxiYWNr
TmFtZSgiQXJpYWwgVW5pY29kZSBNUyIpOwogI2Vsc2UKQEAgLTk0LDcgKzk0LDcgQEAgU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgIGZhbGxiYWNrID0gZ2V0Q2Fj
aGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja05hbWUsIGZhbHNlLCBzaG91bGRS
ZXRhaW4pOwogICAgIEFTU0VSVChmYWxsYmFjayk7CiAgICAgCi0gICAgcmV0dXJuIGZhbGxiYWNr
OworICAgIHJldHVybiBmYWxsYmFjay5yZWxlYXNlKCk7CiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEq
IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250
RGF0YVd4LmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDMy
ICs5MCwzMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogI2VuZGlm
CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVT
Y2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEZvbnREZXNjcmlw
dGlvbiBkZXNjID0gRm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgZGVzYy5z
ZXRTcGVjaWZpZWRTaXplKHNjYWxlRmFjdG9yICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpKTsKICAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YShkZXNjLCBkZXNjLmZhbWls
eSgpLmZhbWlseSgpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKHBs
YXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgcmV0dXJuIFNpbXBsZUZv
bnREYXRhOjpjcmVhdGUocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwogfQog
Ci1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpj
cmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxs
Q2FwcykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxl
ZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjcpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5z
bWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNN
YXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEg
PSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rl
cml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNSk7
CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAg
ICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogYm9vbCBTaW1w
bGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164600</attachid>
            <date>2012-09-18 12:01:13 -0700</date>
            <delta_ts>2012-10-01 13:48:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95866-20120918150053.patch</filename>
            <type>text/plain</type>
            <size>103652</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBAQAorMjAxMi0wOS0xOCAgU3RlcGhl
biBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkNvcmU6OkZvbnREYXRhIGhhbmRsaW5nIHRvIGNsYXJpZnkgcG9pbnRlciBvd25lcnNoaXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBhbGwgRm9udERhdGEgYW5kIGRlcml2ZWQgY2xhc3NlcyByZWYtY291bnRlZCBpbiBhbGwK
KyAgICAgICAgY29kZSBwYXRocyB0aGF0IGxlYWQgdG8gY2FjaGluZyBvciBvdGhlciByZXRlbnRp
b24gb2YgYSBwb2ludGVyLiBUaGUKKyAgICAgICAgZ29hbCBpcyB0byBhdmVydCBjcmFzaGVzIGFu
ZCBtZW1vcnkgbGVha3MsIGFuZCB0byBicmluZyB0aGUgY29kZSBtb3JlIGluCisgICAgICAgIGxp
bmUgd2l0aCBjdXJyZW50IFdlYktpdCBwcmFjdGljZXMuCisKKyAgICAgICAgQWxsIEZvbnREYXRh
IGRlcml2ZWQgY2xhc3NlcyBoYXZlIGJlZW4gc3dpdGNoZWQgdG8gdXNlIHN0YXRpYyBjcmVhdGUK
KyAgICAgICAgbWV0aG9kcyB3aXRoIHByaXZhdGUgY29uc3RydWN0b3JzLgorCisgICAgICAgIEFs
bCBjYWNoZXMgdGhhdCBob2xkIEZvbnREYXRhIG5vdyB1c2UgUmVmUHRycy4KKworICAgICAgICBB
bGwgbWV0aG9kcyB0aGF0IGNvbnN0cnVjdCBuZXcgZm9udCBkYXRhIG5vdyByZXR1cm4gUGFzc1Jl
ZlB0ciwgd2l0aAorICAgICAgICB0aGUgZXhjZXB0aW9uIG9mIGNvZGUgb25seSB1c2VkIHRvIGdl
bmVyYXRlIHRlbXBvcmFyeSBkYXRhIGZvciB0ZXh0CisgICAgICAgIHJ1biBsYXlvdXQuCisKKyAg
ICAgICAgQWxsIG1ldGhvZHMgdGhhdCBoYW5kbGUgRm9udERhdGEgaW4gYSBjYWxsIHN0YWNrIHRo
YXQgcGFzc2VzIHRocm91Z2gKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCBy
ZXR1cm4gUGFzc1JlZlB0ci4KKworICAgICAgICBQZXJmb3JtYW5jZSB0ZXN0ZWQgd2l0aCBib3Ro
IFdlYktpdCBQZXJmLW8tbWF0aWMsIHdoaWNoIHNob3dlZAorICAgICAgICBwZXJmb3JtYW5jZSBj
aGFuZ2VzIGluIHRoZSBub2lzZSwgYW5kIENocm9tZSdzIHBhZ2UgY3ljbGluZyB0ZXN0cyB3aXRo
CisgICAgICAgIHRoZSBhY2lkMyBiZW5jaG1hcmsgc2V0LCB3aGljaCBzaG93ZWQgbm8gcGVyZm9y
bWFuY2UgZGlmZmVyZW5jZSBhdAorICAgICAgICBhbGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGFzIHRoaXMgaXMgcmVmYWN0b3JpbmcgY29kZSBvbmx5IGFuZCBoYXMgbm8gaW1wYWN0IG9uIGZ1
bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udEZhY2U6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTRm9u
dEZhY2UuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTb3VyY2U6OmdldEZv
bnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2UuaDoKKyAgICAgICAgKENT
U0ZvbnRGYWNlU291cmNlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTRm9u
dFNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGVuZEZvbnREYXRhV2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnRE
YXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaDoKKyAgICAgICAgKENT
U1NlZ21lbnRlZEZvbnRGYWNlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyQ3VzdG9tRm9udCk6CisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgIChEb2N1bWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuaDoKKyAgICAgICAgKEZvbnRDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRGYWxsYmFja0xpc3Q6OnNldFBsYXRmb3JtRm9udCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5oOgorICAgICAgICAoRm9u
dEZhbGxiYWNrTGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRo
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdseXBoRGF0YUFuZFBhZ2VGb3JDaGFyYWN0
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAg
ICAoRm9udFNlbGVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VU
cmVlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlh
bGl6ZVBhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZEZvbnREYXRhOjpmb250RGF0YUZvckNo
YXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhUmFuZ2U6OkZvbnREYXRhUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERhdGFSYW5nZTo6Zm9udERhdGEpOgorICAgICAgICAoRm9udERh
dGFSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRGb250RGF0YTo6Y3JlYXRlKToK
KyAgICAgICAgKFNlZ21lbnRlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRl
ZEZvbnREYXRhOjpTZWdtZW50ZWRGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjp1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6YnJva2VuSWRlb2dyYXBoRm9udERhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFNpbXBsZUZvbnREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp2YXJpYW50Rm9udERhdGEpOgorICAgICAgICAo
RGVyaXZlZEZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q2FjaGVBbmRyb2lkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9u
dERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2lt
aWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRM
YXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udCk6CisgICAgICAgIChHZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250UHJvY0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29y
ZVRleHQubW06CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxl
Y3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpn
ZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpn
ZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Zm9u
dERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZvbnRDYWNoZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRG
b250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRT
aW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9u
dERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2lt
aWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250
RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93eC9Gb250Q2FjaGVXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjplbXBoYXNpc01hcmtGb250RGF0YSk6CisKIDIwMTItMDktMTggIEFuZHJleSBLb3N5YWtv
diAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRXh0ZW5z
aW9ucyBBUEldIHBvc3Rwb25lIHJlcXVlc3RzIHRvIGFkZCBleHRlbnNpb25zIHVudGlsIGV4dGVu
c2lvbiBzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIENTU0ZvbnRGYWNlOjpm
b250TG9hZGVkKENTU0ZvbnRGYWNlCiAgICAgZm9udFNlbGVjdG9yLT5mb250TG9hZGVkKCk7CiB9
CiAKLVNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNJdGFsaWMpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBDU1NGb250RmFjZTo6Z2V0
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgc3lu
dGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCiB7CiAgICAgbV9hY3RpdmVTb3VyY2Ug
PSAwOwogICAgIGlmICghaXNWYWxpZCgpKQpAQCAtMTAyLDkgKzEwMiw5IEBAIFNpbXBsZUZvbnRE
YXRhKiBDU1NGb250RmFjZTo6Z2V0Rm9udERhdGEKIAogICAgIHNpemVfdCBzaXplID0gbV9zb3Vy
Y2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICBpZiAoU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IG1fc291cmNlc1tpXS0+Z2V0Rm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnRT
ZWxlY3RvcikpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxTaW1wbGVGb250RGF0YT4gcmVzdWx0ID0g
bV9zb3VyY2VzW2ldLT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY0l0YWxpYywgZm9udFNlbGVjdG9yKSkgewogICAgICAgICAgICAgbV9hY3RpdmVT
b3VyY2UgPSBtX3NvdXJjZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UqKTsK
IAotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKKyAgICBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKIAogICAgIHN0cnVjdCBV
bmljb2RlUmFuZ2UgewogICAgICAgICBVbmljb2RlUmFuZ2UoVUNoYXIzMiBmcm9tLCBVQ2hhcjMy
IHRvKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCShyZXZp
c2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgQ1NTRm9udEZhY2VTb3VyY2U6
OmZvbnRMb2FkZWQoQ2FjaGUKICAgICAgICAgbV9mYWNlLT5mb250TG9hZGVkKHRoaXMpOwogfQog
Ci1TaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljSXRhbGljLCBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29s
IHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CiAgICAg
Ly8gSWYgdGhlIGZvbnQgaGFzbid0IGxvYWRlZCBvciBhbiBlcnJvciBvY2N1cnJlZCwgdGhlbiB3
ZSd2ZSBnb3Qgbm90aGluZy4KICAgICBpZiAoIWlzVmFsaWQoKSkKQEAgLTExNCwxMSArMTE0LDkg
QEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgIHVuc2lnbmVk
IGhhc2hLZXkgPSAoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCA2
IHwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpIDw8IDQKICAgICAgICAgICAgICAgICAg
ICAgICAgfCAoZm9udERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRh
dGlvblVwcmlnaHQgPyA4IDogMCkgfCAoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWwgPyA0IDogMCkgfCAoc3ludGhldGljQm9sZCA/IDIgOiAwKSB8IChzeW50aGV0aWNJ
dGFsaWMgPyAxIDogMCk7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2Zv
bnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgaWYgKGNh
Y2hlZERhdGEpCi0gICAgICAgIHJldHVybiBjYWNoZWREYXRhOwotCi0gICAgT3duUHRyPFNpbXBs
ZUZvbnREYXRhPiBmb250RGF0YTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+JiBmb250RGF0
YSA9IG1fZm9udERhdGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAg
ICBpZiAoZm9udERhdGEpCisgICAgICAgIHJldHVybiBmb250RGF0YTsgLy8gTm8gcmVsZWFzZSwg
YmVjYXVzZSBmb250RGF0YSBpcyBhIHJlZmVyZW5jZSB0byBhIFJlZlB0ciB0aGF0IGlzIGhlbGQg
aW4gdGhlIG1fZm9udERhdGFUYWJsZS4KIAogICAgIC8vIElmIHdlIGFyZSBzdGlsbCBsb2FkaW5n
LCB0aGVuIHdlIGxldCB0aGUgc3lzdGVtIHBpY2sgYSBmb250LgogICAgIGlmIChpc0xvYWRlZCgp
KSB7CkBAIC0xNTcsNyArMTU1LDcgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNl
OjpnZXRGbwogICAgICAgICAgICAgICAgICAgICAgICAgbV9zdmdGb250RmFjZUVsZW1lbnQgPSBm
b250RmFjZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShTVkdGb250RGF0YTo6
Y3JlYXRlKGZvbnRGYWNlRWxlbWVudCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9udERhdGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKFNWR0ZvbnREYXRhOjpjcmVhdGUo
Zm9udEZhY2VFbGVtZW50KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlCiAjZW5kaWYKQEAgLTE2NiwxNCArMTY0LDE0IEBAIFNpbXBsZUZvbnREYXRh
KiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgICAgICAgICBpZiAoIW1fZm9udC0+
ZW5zdXJlQ3VzdG9tRm9udERhdGEoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICAgICAgICAgICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YSht
X2ZvbnQtPnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlw
dGlvbi5vcmllbnRhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24udGV4dE9yaWVudGF0aW9uKCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwg
Zm9udERlc2NyaXB0aW9uLnJlbmRlcmluZ01vZGUoKSksIHRydWUsIGZhbHNlKSk7CisgICAgICAg
ICAgICAgICAgZm9udERhdGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKG1fZm9udC0+cGxhdGZv
cm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCks
IHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0
aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi50ZXh0T3Jp
ZW50YXRpb24oKSwgZm9udERlc2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRp
b24ucmVuZGVyaW5nTW9kZSgpKSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1
bWVudCBTVkcgRm9udHMKICAgICAgICAgICAgIGlmIChtX3N2Z0ZvbnRGYWNlRWxlbWVudCkKLSAg
ICAgICAgICAgICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShTVkdG
b250RGF0YTo6Y3JlYXRlKG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykp
OworICAgICAgICAgICAgICAgIGZvbnREYXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShTVkdG
b250RGF0YTo6Y3JlYXRlKG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7
CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0xODQsMTUgKzE4MiwxNSBAQCBT
aW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAgICAgICAgIC8vIFRoaXMg
dGVtcG9yYXJ5IGZvbnQgaXMgbm90IHJldGFpbmVkIGFuZCBzaG91bGQgbm90IGJlIHJldHVybmVk
LgogICAgICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRl
cjsKICAgICAgICAgU2ltcGxlRm9udERhdGEqIHRlbXBvcmFyeUZvbnQgPSBmb250Q2FjaGUoKS0+
Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0g
ICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKHRlbXBvcmFyeUZv
bnQtPnBsYXRmb3JtRGF0YSgpLCB0cnVlLCB0cnVlKSk7CisgICAgICAgIGZvbnREYXRhID0gU2lt
cGxlRm9udERhdGE6OmNyZWF0ZSh0ZW1wb3JhcnlGb250LT5wbGF0Zm9ybURhdGEoKSwgdHJ1ZSwg
dHJ1ZSk7CiAgICAgfQogCi0gICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZvbnRTZWxlY3Rv
ci0+ZG9jdW1lbnQoKSkgewotICAgICAgICBjYWNoZWREYXRhID0gZm9udERhdGEuZ2V0KCk7Ci0g
ICAgICAgIGRvY3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQoZm9udERhdGEucmVsZWFzZSgpKTsK
LSAgICB9CisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZvbnRTZWxlY3Rvci0+ZG9jdW1l
bnQoKSkKKyAgICAgICAgZG9jdW1lbnQtPnJlZ2lzdGVyQ3VzdG9tRm9udChmb250RGF0YSk7Cisg
ICAgZWxzZQorICAgICAgICBmb250RGF0YS5jbGVhcigpOwogCi0gICAgcmV0dXJuIGNhY2hlZERh
dGE7CisgICAgcmV0dXJuIGZvbnREYXRhOyAvLyBObyByZWxlYXNlLCBiZWNhdXNlIGZvbnREYXRh
IGlzIGEgcmVmZXJlbmNlIHRvIGEgUmVmUHRyIHRoYXQgaXMgaGVsZCBpbiB0aGUgbV9mb250RGF0
YVRhYmxlLgogfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9udExvYWRlZChDYWNoZWRGb250Kik7CiAK
LSAgICBTaW1wbGVGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9y
Kik7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywg
Q1NTRm9udFNlbGVjdG9yKik7CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtNzYsNyAr
NzYsNyBAQCBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciBy
ZW1vdGUsIGJ1aWx0LWluIGZvbnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkRm9udD4gbV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIg
dG8gb3VyIGNhY2hlZCByZXNvdXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIg
b3duaW5nIGZvbnQgZmFjZS4KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBTaW1wbGVGb250RGF0YSo+
IG1fZm9udERhdGFUYWJsZTsgLy8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3lu
dGhldGljIHN0eWxlcy4KKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERh
dGE+ID4gbV9mb250RGF0YVRhYmxlOyAvLyBUaGUgaGFzaCBrZXkgaXMgY29tcG9zZWQgb2Ygc2l6
ZSBzeW50aGV0aWMgc3R5bGVzLgogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBSZWZQdHI8
U1ZHRm9udEZhY2VFbGVtZW50PiBtX3N2Z0ZvbnRGYWNlRWxlbWVudDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDcg
KzM1MCw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpmb250Q2FjaGVJbnZhbGlkYXQKICAgICBk
aXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwogfQogCi1zdGF0aWMgRm9udERhdGEqIGZv
bnREYXRhRm9yR2VuZXJpY0ZhbWlseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUp
CitzdGF0aWMgUGFzc1JlZlB0cjxGb250RGF0YT4gZm9udERhdGFGb3JHZW5lcmljRmFtaWx5KERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8
ICFkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NjUsNyArNDY1LDcg
QEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVGb250RmFjZXMoQ1NTRgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotRm9udERhdGEqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSkKK1Bhc3NSZWZQdHI8Rm9udERhdGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBpZiAobV9mb250RmFjZXMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGlmIChmYW1pbHlOYW1lLnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdW5zaWduZWQgdmVyc2lvbigpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQogCi0gICAgdmlydHVhbCBGb250RGF0YSog
Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnRE
YXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJp
bmcmKTsKIAogICAgIHZvaWQgY2xlYXJEb2N1bWVudCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDggKzgxLDkgQEAgdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6YXBwZW5kRm9udEZh
YwogICAgIG1fZm9udEZhY2VzLmFwcGVuZChmb250RmFjZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFw
cGVuZEZvbnREYXRhV2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoU2VnbWVudGVkRm9u
dERhdGEqIG5ld0ZvbnREYXRhLCBjb25zdCBTaW1wbGVGb250RGF0YSogZmFjZUZvbnREYXRhLCBj
b25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVuaWNvZGVSYW5nZT4mIHJhbmdlcykKK3N0YXRpYyB2
b2lkIGFwcGVuZEZvbnREYXRhV2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoU2VnbWVu
dGVkRm9udERhdGEqIG5ld0ZvbnREYXRhLCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBwcnBG
YWNlRm9udERhdGEsIGNvbnN0IFZlY3RvcjxDU1NGb250RmFjZTo6VW5pY29kZVJhbmdlPiYgcmFu
Z2VzKQogeworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZmFjZUZvbnREYXRhID0gcHJwRmFj
ZUZvbnREYXRhOwogICAgIGlmIChmYWNlRm9udERhdGEtPmlzTG9hZGluZygpKSB7CiAgICAgICAg
IG5ld0ZvbnREYXRhLT5hcHBlbmRSYW5nZShGb250RGF0YVJhbmdlKDAsIDAsIGZhY2VGb250RGF0
YSkpOwogICAgICAgICByZXR1cm47CkBAIC05OCw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVu
ZEZvbnREYXRhV2l0aEludmFsaWRVbmkKICAgICAgICAgbmV3Rm9udERhdGEtPmFwcGVuZFJhbmdl
KEZvbnREYXRhUmFuZ2UocmFuZ2VzW2pdLmZyb20oKSwgcmFuZ2VzW2pdLnRvKCksIGZhY2VGb250
RGF0YSkpOwogfQogCi1Gb250RGF0YSogQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQorUGFzc1JlZlB0cjxGb250
RGF0YT4gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQogewogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTEwNiwxMSArMTA3LDExIEBAIEZvbnREYXRhKiBDU1NTZWdtZW50ZWRGb250
RmFjZTo6Z2V0Rm9udEQKICAgICBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFzayA9IGZv
bnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAgICAgdW5zaWduZWQgaGFzaEtleSA9ICgoZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCAoRm9udFRyYWl0c01hc2tX
aWR0aCArIDEpKSB8ICgoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwg
PyAxIDogMCkgPDwgRm9udFRyYWl0c01hc2tXaWR0aCkgfCBkZXNpcmVkVHJhaXRzTWFzazsKIAot
ICAgIFNlZ21lbnRlZEZvbnREYXRhKiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhh
c2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgUmVmUHRyPFNlZ21lbnRlZEZvbnREYXRh
PiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5z
ZWNvbmQ7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAgICByZXR1cm4gZm9udERhdGE7CiAKLSAg
ICBPd25QdHI8U2VnbWVudGVkRm9udERhdGE+IG5ld0ZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNl
Z21lbnRlZEZvbnREYXRhKTsKKyAgICBmb250RGF0YSA9IFNlZ21lbnRlZEZvbnREYXRhOjpjcmVh
dGUoKTsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBtX2ZvbnRGYWNlcy5zaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewpAQCAtMTE5LDE5ICsxMjAsMTkgQEAg
Rm9udERhdGEqIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpnZXRGb250RAogICAgICAgICBGb250VHJh
aXRzTWFzayB0cmFpdHNNYXNrID0gbV9mb250RmFjZXNbaV0tPnRyYWl0c01hc2soKTsKICAgICAg
ICAgYm9vbCBzeW50aGV0aWNCb2xkID0gISh0cmFpdHNNYXNrICYgKEZvbnRXZWlnaHQ2MDBNYXNr
IHwgRm9udFdlaWdodDcwME1hc2sgfCBGb250V2VpZ2h0ODAwTWFzayB8IEZvbnRXZWlnaHQ5MDBN
YXNrKSkgJiYgKGRlc2lyZWRUcmFpdHNNYXNrICYgKEZvbnRXZWlnaHQ2MDBNYXNrIHwgRm9udFdl
aWdodDcwME1hc2sgfCBGb250V2VpZ2h0ODAwTWFzayB8IEZvbnRXZWlnaHQ5MDBNYXNrKSk7CiAg
ICAgICAgIGJvb2wgc3ludGhldGljSXRhbGljID0gISh0cmFpdHNNYXNrICYgRm9udFN0eWxlSXRh
bGljTWFzaykgJiYgKGRlc2lyZWRUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzayk7Ci0g
ICAgICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogZmFjZUZvbnREYXRhID0gbV9mb250RmFj
ZXNbaV0tPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljSXRhbGljKSkgeworICAgICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmYWNlRm9u
dERhdGEgPSBtX2ZvbnRGYWNlc1tpXS0+Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50
aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWZhY2VG
b250RGF0YS0+aXNTZWdtZW50ZWQoKSk7Ci0gICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJ
bnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKG5ld0ZvbnREYXRhLmdldCgpLCBmYWNlRm9udERh
dGEsIG1fZm9udEZhY2VzW2ldLT5yYW5nZXMoKSk7CisgICAgICAgICAgICBhcHBlbmRGb250RGF0
YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdlSWZMb2FkaW5nKGZvbnREYXRhLmdldCgpLCBmYWNlRm9u
dERhdGEucmVsZWFzZSgpLCBtX2ZvbnRGYWNlc1tpXS0+cmFuZ2VzKCkpOwogICAgICAgICB9CiAg
ICAgfQotICAgIGlmIChuZXdGb250RGF0YS0+bnVtUmFuZ2VzKCkpIHsKKyAgICBpZiAoZm9udERh
dGEtPm51bVJhbmdlcygpKSB7CiAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zv
bnRTZWxlY3Rvci0+ZG9jdW1lbnQoKSkgewotICAgICAgICAgICAgZm9udERhdGEgPSBuZXdGb250
RGF0YS5nZXQoKTsKLSAgICAgICAgICAgIGRvY3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQobmV3
Rm9udERhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5yZWdpc3RlckN1c3Rv
bUZvbnQoZm9udERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiAwOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAkocmV2aXNpb24g
MTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBlbmRG
b250RmFjZShQYXNzUmVmUHRyPENTU0ZvbnRGYWNlPik7CiAKLSAgICBGb250RGF0YSogZ2V0Rm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgUGFzc1JlZlB0cjxGb250RGF0YT4g
Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKIHByaXZhdGU6CiAgICAgQ1NT
U2VnbWVudGVkRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKik7CkBAIC02MCw3ICs2MCw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAKICAgICBDU1NGb250U2VsZWN0b3Iq
IG1fZm9udFNlbGVjdG9yOwotICAgIEhhc2hNYXA8dW5zaWduZWQsIFNlZ21lbnRlZEZvbnREYXRh
Kj4gbV9mb250RGF0YVRhYmxlOworICAgIEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxTZWdtZW50
ZWRGb250RGF0YT4gPiBtX2ZvbnREYXRhVGFibGU7CiAgICAgVmVjdG9yPFJlZlB0cjxDU1NGb250
RmFjZT4sIDE+IG1fZm9udEZhY2VzOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTkyLDcgKzE5OTIsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBEb2N1bWVudDo6c3R5bGVGCiAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAotdm9p
ZCBEb2N1bWVudDo6cmVnaXN0ZXJDdXN0b21Gb250KFBhc3NPd25QdHI8Rm9udERhdGE+IGZvbnRE
YXRhKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJDdXN0b21Gb250KFBhc3NSZWZQdHI8Rm9udERh
dGE+IGZvbnREYXRhKQogewogICAgIG1fY3VzdG9tRm9udHMuYXBwZW5kKGZvbnREYXRhKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcxLDcgKzU3MSw3IEBAIHB1
YmxpYzoKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnRJZ25vcmlu
Z1BlbmRpbmdTdHlsZXNoZWV0cyhFbGVtZW50Kik7CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpOwogCi0gICAgdm9pZCByZWdpc3RlckN1c3Rv
bUZvbnQoUGFzc093blB0cjxGb250RGF0YT4pOworICAgIHZvaWQgcmVnaXN0ZXJDdXN0b21Gb250
KFBhc3NSZWZQdHI8Rm9udERhdGE+KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBwYWdlIGJv
eCAobWFyZ2luIGJveGVzIGFuZCBwYWdlIGJvcmRlcnMpIGlzIHZpc2libGUuCiAgICAgYm9vbCBp
c1BhZ2VCb3hWaXNpYmxlKGludCBwYWdlSW5kZXgpOwpAQCAtMTI5MCw3ICsxMjkwLDcgQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8U3R5bGVSZXNvbHZlcj4gbV9zdHlsZVJlc29sdmVyOwogICAgIGJv
b2wgbV9kaWRDYWxjdWxhdGVTdHlsZVJlc29sdmVyOwogICAgIGJvb2wgbV9oYXNEaXJ0eVN0eWxl
UmVzb2x2ZXI7Ci0gICAgVmVjdG9yPE93blB0cjxGb250RGF0YT4gPiBtX2N1c3RvbUZvbnRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8Rm9udERhdGE+ID4gbV9jdXN0b21Gb250czsKIAogICAgIEZyYW1l
KiBtX2ZyYW1lOwogICAgIFJlZlB0cjxET01XaW5kb3c+IG1fZG9tV2luZG93OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCShyZXZpc2lv
biAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNyArMjg2LDcgQEAgc3RydWN0IEZvbnREYXRhQ2Fj
aGVLZXlUcmFpdHMgOiBXVEY6OkdlbgogICAgIH0KIH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250
UGxhdGZvcm1EYXRhLCBwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250RGF0YUNh
Y2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKK3R5cGVk
ZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBwYWlyPFJlZlB0cjxTaW1wbGVGb250RGF0YT4s
IHVuc2lnbmVkPiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZvbnREYXRhQ2FjaGVLZXlUcmFpdHM+
IEZvbnREYXRhQ2FjaGU7CiAKIHN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9
IDA7CiAKQEAgLTI5Nyw5ICsyOTcsOSBAQCBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERh
dGEgPSAyMDA7CiBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSA1MDsgLy8gUHJldHR5
IExvdyBUaHJlc2hvbGQKIGNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDMwOwog
I2VuZGlmCi1zdGF0aWMgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZ0luYWN0
aXZlRm9udERhdGEgPSAwOworc3RhdGljIExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gPiogZ0luYWN0aXZlRm9udERhdGEgPSAwOwogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hl
OjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
LCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
Rm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRl
cm5hdGVOYW1lLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIEZvbnRQbGF0Zm9y
bURhdGEqIHBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2Ny
aXB0aW9uLCBmYW1pbHksIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSk7CiAgICAgaWYgKCFwbGF0Zm9y
bURhdGEpCkBAIC0zMDgsNyArMzA4LDcgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
Q2FjaGVkRm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShwbGF0Zm9ybURhdGEsIHNo
b3VsZFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZv
bnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgU2hvdWxkUmV0YWlu
IHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCBTaG91
bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIGlmICghcGxhdGZvcm1EYXRhKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTMyMCwxNiArMzIwLDE2IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldENhY2hlZEZvbnQKIAogICAgIGlmICghZ0ZvbnREYXRhQ2FjaGUpIHsKICAgICAgICAg
Z0ZvbnREYXRhQ2FjaGUgPSBuZXcgRm9udERhdGFDYWNoZTsKLSAgICAgICAgZ0luYWN0aXZlRm9u
dERhdGEgPSBuZXcgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjsKKyAgICAgICAg
Z0luYWN0aXZlRm9udERhdGEgPSBuZXcgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRh
PiA+OwogICAgIH0KIAogICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdGb250
RGF0YUNhY2hlLT5maW5kKCpwbGF0Zm9ybURhdGEpOwogICAgIGlmIChyZXN1bHQgPT0gZ0ZvbnRE
YXRhQ2FjaGUtPmVuZCgpKSB7Ci0gICAgICAgIHBhaXI8U2ltcGxlRm9udERhdGEqLCB1bnNpZ25l
ZD4gbmV3VmFsdWUobmV3IFNpbXBsZUZvbnREYXRhKCpwbGF0Zm9ybURhdGEpLCBzaG91bGRSZXRh
aW4gPT0gUmV0YWluID8gMSA6IDApOworICAgICAgICBwYWlyPFJlZlB0cjxTaW1wbGVGb250RGF0
YT4sIHVuc2lnbmVkPiBuZXdWYWx1ZShTaW1wbGVGb250RGF0YTo6Y3JlYXRlKCpwbGF0Zm9ybURh
dGEpLCBzaG91bGRSZXRhaW4gPT0gUmV0YWluID8gMSA6IDApOwogICAgICAgICBnRm9udERhdGFD
YWNoZS0+c2V0KCpwbGF0Zm9ybURhdGEsIG5ld1ZhbHVlKTsKICAgICAgICAgaWYgKHNob3VsZFJl
dGFpbiA9PSBEb05vdFJldGFpbikKICAgICAgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQo
bmV3VmFsdWUuZmlyc3QpOwotICAgICAgICByZXR1cm4gbmV3VmFsdWUuZmlyc3Q7CisgICAgICAg
IHJldHVybiBuZXdWYWx1ZS5maXJzdC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgaWYgKCFyZXN1
bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpIHsKQEAgLTM1MCw3ICszNTAsNyBAQCBTaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250CiAKIFNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldE5vblJldGFpbmVkTGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKLSAgICByZXR1cm4gZ2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChmb250RGVzY3JpcHRpb24sIERvTm90UmV0YWluKTsKKyAgICByZXR1cm4gZ2V0TGFz
dFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24sIERvTm90UmV0YWluKS5sZWFrUmVm
KCk7CiB9CiAKIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhKQpAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgRm9udENhY2hlOjpyZWxl
YXNlRm9udERhdGEoY29uc3QgU2kKIAogICAgIEFTU0VSVChpdC0+c2Vjb25kLnNlY29uZCk7CiAg
ICAgaWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKQotICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+
YWRkKGZvbnREYXRhKTsKKyAgICAgICAgZ0luYWN0aXZlRm9udERhdGEtPmFkZChpdC0+c2Vjb25k
LmZpcnN0KTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVl
ZGVkKCkKQEAgLTM4MywxMSArMzgzLDExIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEoaW4KIAogICAgIGlzUHVyZ2luZyA9IHRydWU7CiAKLSAgICBWZWN0b3I8Y29uc3Qg
U2ltcGxlRm9udERhdGEqLCAyMD4gZm9udERhdGFUb0RlbGV0ZTsKLSAgICBMaXN0SGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBlbmQgPSBnSW5hY3RpdmVGb250RGF0YS0+
ZW5kKCk7Ci0gICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6aXRlcmF0b3Ig
aXQgPSBnSW5hY3RpdmVGb250RGF0YS0+YmVnaW4oKTsKKyAgICBWZWN0b3I8UmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiwgMjA+IGZvbnREYXRhVG9EZWxldGU7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRy
PFNpbXBsZUZvbnREYXRhPiA+OjppdGVyYXRvciBlbmQgPSBnSW5hY3RpdmVGb250RGF0YS0+ZW5k
KCk7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPiA+OjppdGVyYXRvciBp
dCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQgJiYgaXQgIT0gZW5kOyArK2l0LCArK2kpIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhID0gKml0LmdldCgpOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERh
dGE+JiBmb250RGF0YSA9ICppdC5nZXQoKTsKICAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPnJlbW92
ZShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwogICAgICAgICAvLyBXZSBzaG91bGQgbm90IGRl
bGV0ZSBTaW1wbGVGb250RGF0YSBoZXJlIGJlY2F1c2UgZGVsZXRpb24gY2FuIG1vZGlmeSBnSW5h
Y3RpdmVGb250RGF0YS4gU2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzQ0MDEx
CiAgICAgICAgIGZvbnREYXRhVG9EZWxldGUuYXBwZW5kKGZvbnREYXRhKTsKQEAgLTQwMSw5ICs0
MDEsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAgICAgICAg
ICAgICBnSW5hY3RpdmVGb250RGF0YS0+cmVtb3ZlKGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigp
KTsKICAgICB9CiAKLSAgICBzaXplX3QgZm9udERhdGFUb0RlbGV0ZUNvdW50ID0gZm9udERhdGFU
b0RlbGV0ZS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb250RGF0YVRvRGVs
ZXRlQ291bnQ7ICsraSkKLSAgICAgICAgZGVsZXRlIGZvbnREYXRhVG9EZWxldGVbaV07CisgICAg
Zm9udERhdGFUb0RlbGV0ZS5jbGVhcigpOwogCiAgICAgaWYgKGdGb250UGxhdGZvcm1EYXRhQ2Fj
aGUpIHsKICAgICAgICAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4ga2V5c1RvUmVt
b3ZlOwpAQCAtNDYyLDkgKzQ2MCw5IEBAIHNpemVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9udERh
dGFDb3VudCgKICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgRm9udERhdGEqIEZvbnRDYWNoZTo6
Z2V0Rm9udERhdGEoY29uc3QgRm9udCYgZm9udCwgaW50JiBmYW1pbHlJbmRleCwgRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IpCitQYXNzUmVmUHRyPEZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZv
bnREYXRhKGNvbnN0IEZvbnQmIGZvbnQsIGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3Rvciog
Zm9udFNlbGVjdG9yKQogewotICAgIEZvbnREYXRhKiByZXN1bHQgPSAwOworICAgIFJlZlB0cjxG
b250RGF0YT4gcmVzdWx0OwogCiAgICAgaW50IHN0YXJ0SW5kZXggPSBmYW1pbHlJbmRleDsKICAg
ICBjb25zdCBGb250RmFtaWx5KiBzdGFydEZhbWlseSA9ICZmb250LmZvbnREZXNjcmlwdGlvbigp
LmZhbWlseSgpOwpAQCAtNDk4LDE0ICs0OTYsMTQgQEAgY29uc3QgRm9udERhdGEqIEZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGEoYwogCiAgICAgICAgIGlmIChmb250U2VsZWN0b3IpIHsKICAgICAgICAg
ICAgIC8vIFRyeSB0aGUgdXNlcidzIHByZWZlcnJlZCBzdGFuZGFyZCBmb250LgotICAgICAgICAg
ICAgaWYgKEZvbnREYXRhKiBkYXRhID0gZm9udFNlbGVjdG9yLT5nZXRGb250RGF0YShmb250LmZv
bnREZXNjcmlwdGlvbigpLCBzdGFuZGFyZEZhbWlseSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGE7CisgICAgICAgICAgICBpZiAoUmVmUHRyPEZvbnREYXRhPiBkYXRhID0gZm9udFNlbGVj
dG9yLT5nZXRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBzdGFuZGFyZEZhbWlseSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gU3RpbGwgbm8gcmVzdWx0LiAgSGFuZCBiYWNrIG91ciBsYXN0IHJlc29ydCBmYWxs
YmFjayBmb250LgogICAgICAgICByZXN1bHQgPSBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZv
bnQuZm9udERlc2NyaXB0aW9uKCkpOwogICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3Iq
PiogZ0NsaWVudHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuaAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKIAog
I2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIApAQCAtNjAsMTEg
KzYyLDExIEBAIHB1YmxpYzoKIAogICAgIGVudW0gU2hvdWxkUmV0YWluIHsgUmV0YWluLCBEb05v
dFJldGFpbiB9OwogCi0gICAgY29uc3QgRm9udERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnQm
LCBpbnQmIGZhbWlseUluZGV4LCBGb250U2VsZWN0b3IqKTsKKyAgICBQYXNzUmVmUHRyPEZvbnRE
YXRhPiBnZXRGb250RGF0YShjb25zdCBGb250JiwgaW50JiBmYW1pbHlJbmRleCwgRm9udFNlbGVj
dG9yKik7CiAgICAgdm9pZCByZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqKTsK
IAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KLSAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSogZ2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZv
bnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CisgICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CiAKICAgICAvLyBBbHNvIGltcGxl
bWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwpAQCAtODQs
OCArODYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKTsKIAotICAgIFNpbXBsZUZvbnREYXRhKiBn
ZXRDYWNoZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJp
bmcmLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlLCBTaG91bGRSZXRhaW4gPSBS
ZXRhaW4pOwotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiA9IFJldGFpbik7CisgICAgUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSwgU2hvdWxkUmV0YWluID0gUmV0YWluKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNo
b3VsZFJldGFpbiA9IFJldGFpbik7CiAgICAgU2ltcGxlRm9udERhdGEqIGdldE5vblJldGFpbmVk
TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKIAogICAgIHZv
aWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciopOwpAQCAtOTksOSArMTAxLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCA9IElOVF9NQVgpOwogCiAj
aWYgUExBVEZPUk0oV0lOKQotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZyb21EZXNjcmlw
dGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0YWluLCBjb25z
dCBMT0dGT05UJiBmb250LCBBdG9taWNTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiwg
QXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZWxpZiBQTEFURk9STShDSFJPTUlV
TSkgJiYgT1MoV0lORE9XUykKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGFGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwgY29u
c3QgTE9HRk9OVCYgZm9udCwgd2NoYXJfdCogb3V0Rm9udEZhbWlseU5hbWUpOworICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmLCB3Y2hh
cl90KiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKQEAgLTEzMSwxMCArMTMzLDEwIEBAIHByaXZhdGU6CiAgICAgRm9udFBsYXRmb3Jt
RGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBs
YXRmb3JtLgotICAgIFNpbXBsZUZvbnREYXRhKiBnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250Jik7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEqIGNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHkpOwogCi0gICAgU2ltcGxlRm9udERhdGEqIGdldENhY2hlZEZvbnREYXRhKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEqLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOworICAgIFBhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEqLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOwogCiAgICAgLy8gRG9uJ3QgcHVyZ2UgaWYg
dGhpcyBjb3VudCBpcyA+IDA7CiAgICAgaW50IG1fcHVyZ2VQcmV2ZW50Q291bnQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmgJKHJldmlzaW9uIDEy
ODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxNSBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NC
YXNlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogCi1jbGFzcyBGb250RGF0YSB7CitjbGFz
cyBGb250RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnREYXRhPiB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRm9udERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBGb250RGF0YSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250RmFsbGJhY2tMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDkgKzY2LDkgQEAgdm9pZCBGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNl
Rm9udERhdGEoKQogewogICAgIHVuc2lnbmVkIG51bUZvbnRzID0gbV9mb250TGlzdC5zaXplKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZvbnRzOyArK2kpIHsKLSAgICAgICAg
aWYgKCFtX2ZvbnRMaXN0W2ldLnNlY29uZCkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2ZvbnRM
aXN0W2ldLmZpcnN0LT5pc1NlZ21lbnRlZCgpKTsKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5y
ZWxlYXNlRm9udERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2ZvbnRM
aXN0W2ldLmZpcnN0KSk7CisgICAgICAgIGlmICghbV9mb250TGlzdFtpXS0+aXNDdXN0b21Gb250
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9mb250TGlzdFtpXS0+aXNTZWdtZW50ZWQoKSk7
CisgICAgICAgICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0YXRpY19jYXN0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4obV9mb250TGlzdFtpXS5nZXQoKSkpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmRldGVybWlu
ZVBpdGNoKGNvCiBjb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdChj
b25zdCBGb250KiBmb250LCB1bnNpZ25lZCByZWFsaXplZEZvbnRJbmRleCkgY29uc3QKIHsKICAg
ICBpZiAocmVhbGl6ZWRGb250SW5kZXggPCBtX2ZvbnRMaXN0LnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIG1fZm9udExpc3RbcmVhbGl6ZWRGb250SW5kZXhdLmZpcnN0OyAvLyBUaGlzIGZhbGxiYWNr
IGZvbnQgaXMgYWxyZWFkeSBpbiBvdXIgbGlzdC4KKyAgICAgICAgcmV0dXJuIG1fZm9udExpc3Rb
cmVhbGl6ZWRGb250SW5kZXhdLmdldCgpOyAvLyBUaGlzIGZhbGxiYWNrIGZvbnQgaXMgYWxyZWFk
eSBpbiBvdXIgbGlzdC4KIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgcGFzc2luZyBpbiBz
b21lIGNyYXp5IHZhbHVlIGhlcmUuCiAgICAgQVNTRVJUKHJlYWxpemVkRm9udEluZGV4ID09IG1f
Zm9udExpc3Quc2l6ZSgpKTsKQEAgLTEwNCwyMSArMTA0LDIxIEBAIGNvbnN0IEZvbnREYXRhKiBG
b250RmFsbGJhY2tMaXN0Ojpmb250RGEKICAgICAvLyBpbiB8bV9mYW1pbHlJbmRleHwsIHNvIHRo
YXQgd2UgbmV2ZXIgc2NhbiB0aGUgc2FtZSBzcG90IGluIHRoZSBsaXN0IHR3aWNlLiAgZ2V0Rm9u
dERhdGEgd2lsbCBhZGp1c3Qgb3VyCiAgICAgLy8gfG1fZmFtaWx5SW5kZXh8IGFzIGl0IHNjYW5z
IGZvciB0aGUgcmlnaHQgZm9udCB0byBtYWtlLgogICAgIEFTU0VSVChmb250Q2FjaGUoKS0+Z2Vu
ZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7Ci0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9
IGZvbnRDYWNoZSgpLT5nZXRGb250RGF0YSgqZm9udCwgbV9mYW1pbHlJbmRleCwgbV9mb250U2Vs
ZWN0b3IuZ2V0KCkpOworICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0ID0gZm9udENhY2hlKCkt
PmdldEZvbnREYXRhKCpmb250LCBtX2ZhbWlseUluZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7
CiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0
IEZvbnREYXRhKiwgYm9vbD4ocmVzdWx0LCByZXN1bHQtPmlzQ3VzdG9tRm9udCgpKSk7CisgICAg
ICAgIG1fZm9udExpc3QuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGlmIChyZXN1bHQtPmlzTG9h
ZGluZygpKQogICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwogICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKIHZvaWQg
Rm9udEZhbGxiYWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSkKIHsKICAgICBtX2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5l
ZDsKICAgICBBU1NFUlQoZm9udENhY2hlKCktPmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24p
OwotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRG
b250RGF0YSgmcGxhdGZvcm1EYXRhKTsKLSAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0
IEZvbnREYXRhKiwgYm9vbD4oZm9udERhdGEsIGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSkpOwor
ICAgIFJlZlB0cjxGb250RGF0YT4gZm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9u
dERhdGEoJnBsYXRmb3JtRGF0YSk7CisgICAgbV9mb250TGlzdC5hcHBlbmQoZm9udERhdGEpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJh
Y2tMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEZhbGxiYWNrTGlzdC5oCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0
LDcgKzg0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVsZWFzZUZvbnREYXRhKCk7CiAKLSAg
ICBtdXRhYmxlIFZlY3RvcjxwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4sIDE+IG1fZm9udExp
c3Q7CisgICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPEZvbnREYXRhPiwgMT4gbV9mb250TGlzdDsK
ICAgICBtdXRhYmxlIEdseXBoUGFnZXMgbV9wYWdlczsKICAgICBtdXRhYmxlIEdseXBoUGFnZVRy
ZWVOb2RlKiBtX3BhZ2VaZXJvOwogICAgIG11dGFibGUgY29uc3QgU2ltcGxlRm9udERhdGEqIG1f
Y2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiAxMjg4OTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Nyw4ICs5Nyw4IEBAIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFn
ZSo+IEZvbnQ6OmcKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlv
bi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHZlcnRpY2Fs
UmlnaHRGb250RGF0YSA9IGRhdGEuZm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZv
bnREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUq
IHZlcnRpY2FsUmlnaHROb2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh2ZXJ0
aWNhbFJpZ2h0Rm9udERhdGEsIHBhZ2VOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodEZvbnREYXRhID0gZGF0YS5m
b250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdmVydGljYWxSaWdodE5vZGUgPSBH
bHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHZlcnRpY2FsUmlnaHRGb250RGF0YS5nZXQo
KSwgcGFnZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlKiB2
ZXJ0aWNhbFJpZ2h0UGFnZSA9IHZlcnRpY2FsUmlnaHROb2RlLT5wYWdlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRQYWdlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdseXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IHZlcnRpY2Fs
UmlnaHRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CkBAIC0xMTEsOCArMTExLDggQEAg
c3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9udDo6ZwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcih2ZXJ0aWNhbFJpZ2h0RGF0YSwg
dmVydGljYWxSaWdodFBhZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24udGV4dE9yaWVu
dGF0aW9uKCkgPT0gVGV4dE9yaWVudGF0aW9uVXByaWdodCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBkYXRhLmZv
bnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiB1cHJpZ2h0Tm9kZSA9IEdseXBoUGFnZVRyZWVO
b2RlOjpnZXRSb290Q2hpbGQodXByaWdodEZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRGb250RGF0
YSA9IGRhdGEuZm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHVwcmlnaHROb2RlID0gR2x5
cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh1cHJpZ2h0Rm9udERhdGEuZ2V0KCksIHBhZ2VO
dW1iZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZSogdXByaWdodFBh
Z2UgPSB1cHJpZ2h0Tm9kZS0+cGFnZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh1cHJpZ2h0UGFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaERh
dGEgdXByaWdodERhdGEgPSB1cHJpZ2h0UGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwpA
QCAtMTUyLDExICsxNTIsMTEgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQYWdlKj4gRm9u
dDo6ZwogICAgICAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEgZnVuY3Rpb24gc2hvdWxkIG5vdCBub3JtYWxs
eSByZXR1cm4gMC4KICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IGlmIGl0IGRvZXMsIHdlIHdp
bGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJpZy4KLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IGRhdGEuZm9udERhdGEt
PnZhcmlhbnRGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhID0gZGF0YS5m
b250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYW50Rm9udERhdGEpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwogCi0gICAgICAgICAgICAgICAg
ICAgIEdseXBoUGFnZVRyZWVOb2RlKiB2YXJpYW50Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpn
ZXRSb290Q2hpbGQodmFyaWFudEZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHZhcmlhbnROb2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6
OmdldFJvb3RDaGlsZCh2YXJpYW50Rm9udERhdGEuZ2V0KCksIHBhZ2VOdW1iZXIpOwogICAgICAg
ICAgICAgICAgICAgICBHbHlwaFBhZ2UqIHZhcmlhbnRQYWdlID0gdmFyaWFudE5vZGUtPnBhZ2Uo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRQYWdlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHZhcmlhbnRQYWdlLT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYyk7CkBAIC0xOTgsNyArMTk4LDcgQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwgR2x5cGhQ
YWdlKj4gRm9udDo6ZwogICAgICAgICBjb2RlVW5pdHNbMV0gPSBVMTZfVFJBSUwoYyk7CiAgICAg
ICAgIGNvZGVVbml0c0xlbmd0aCA9IDI7CiAgICAgfQotICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBjaGFyYWN0ZXJGb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRGb250RGF0YUZvckNoYXJhY3Rl
cnMoKnRoaXMsIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKTsKKyAgICBSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IGNoYXJhY3RlckZvbnREYXRhID0gZm9udENhY2hlKCktPmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycygqdGhpcywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpOwogICAgIGlmIChj
aGFyYWN0ZXJGb250RGF0YSkgewogICAgICAgICBpZiAoY2hhcmFjdGVyRm9udERhdGEtPnBsYXRm
b3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgJiYgIWNoYXJhY3RlckZvbnREYXRh
LT5oYXNWZXJ0aWNhbEdseXBocygpICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYykpCiAgICAg
ICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKQEAgLTIwNyw3ICsyMDcs
NyBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250OjpnCiAgICAgfQogICAg
IGlmIChjaGFyYWN0ZXJGb250RGF0YSkgewogICAgICAgICAvLyBHb3QgdGhlIGZhbGxiYWNrIGds
eXBoIGFuZCBmb250LgotICAgICAgICBHbHlwaFBhZ2UqIGZhbGxiYWNrUGFnZSA9IEdseXBoUGFn
ZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQoY2hhcmFjdGVyRm9udERhdGEsIHBhZ2VOdW1iZXIpLT5w
YWdlKCk7CisgICAgICAgIEdseXBoUGFnZSogZmFsbGJhY2tQYWdlID0gR2x5cGhQYWdlVHJlZU5v
ZGU6OmdldFJvb3RDaGlsZChjaGFyYWN0ZXJGb250RGF0YS5nZXQoKSwgcGFnZU51bWJlciktPnBh
Z2UoKTsKICAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmYWxsYmFja1BhZ2UgJiYgZmFsbGJhY2tQ
YWdlLT5mb250RGF0YUZvckNoYXJhY3RlcihjKSA/IGZhbGxiYWNrUGFnZS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpIDogY2hhcmFjdGVyRm9udERhdGEtPm1pc3NpbmdHbHlwaERhdGEoKTsKICAg
ICAgICAgLy8gQ2FjaGUgaXQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBzeXN0ZW0gZmFsbGJhY2sg
YWdhaW4gbmV4dCB0aW1lLgogICAgICAgICBpZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0
b3IuaAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZp
bmUgRm9udFNlbGVjdG9yX2gKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOSw3IEBAIGNsYXNzIEZvbnRTZWxlY3RvckNsaWVudDsK
IGNsYXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4gewog
cHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQotICAgIHZpcnR1YWwgRm9u
dERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250RGF0YT4g
Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHlOYW1lKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQo
KSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdl
VHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6
ZVBhZ2UoYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB6ZXJvRmlsbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgfD0gZmlsbChwYWdlVG9GaWxsLCBm
cm9tLCB0byAtIGZyb20sIGJ1ZmZlciArIGZyb20gKiAoc3RhcnQgPCAweDEwMDAwID8gMSA6IDIp
LCAodG8gLSBmcm9tKSAqIChzdGFydCA8IDB4MTAwMDAgPyAxIDogMiksIHJhbmdlLmZvbnREYXRh
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyB8PSBmaWxsKHBhZ2VUb0Zp
bGwsIGZyb20sIHRvIC0gZnJvbSwgYnVmZmVyICsgZnJvbSAqIChzdGFydCA8IDB4MTAwMDAgPyAx
IDogMiksICh0byAtIGZyb20pICogKHN0YXJ0IDwgMHgxMDAwMCA/IDEgOiAyKSwgcmFuZ2UuZm9u
dERhdGEoKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NyYXRjaFBhZ2Up
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodG8gPD0gIHN0YXRpY19jYXN0
PGludD4oR2x5cGhQYWdlOjpzaXplKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IGZyb207IGogPCB0bzsgaisrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwCShyZXZpc2lv
biAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRG
b250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIFNlZ21lbnRlZEZvbnREYXRhOgogICAgIFZlY3RvcjxGb250RGF0YVJhbmdlPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8Rm9u
dERhdGFSYW5nZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+ZnJvbSgpIDw9IGMgJiYgaXQtPnRvKCkgPj0g
YykKLSAgICAgICAgICAgIHJldHVybiBpdC0+Zm9udERhdGEoKTsKKyAgICAgICAgICAgIHJldHVy
biBpdC0+Zm9udERhdGEoKS5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fcmFuZ2VzWzBdLmZv
bnREYXRhKCk7CisgICAgcmV0dXJuIG1fcmFuZ2VzWzBdLmZvbnREYXRhKCkuZ2V0KCk7CiB9CiAK
IGJvb2wgU2VnbWVudGVkRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnRE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2Vn
bWVudGVkRm9udERhdGEuaAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaW1wbGVGb250RGF0YTsKIAog
c3RydWN0IEZvbnREYXRhUmFuZ2UgewotICAgIEZvbnREYXRhUmFuZ2UoVUNoYXIzMiBmcm9tLCBV
Q2hhcjMyIHRvLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCisgICAgRm9udERhdGFS
YW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8sIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGZvbnREYXRhKQogICAgICAgICA6IG1fZnJvbShmcm9tKQogICAgICAgICAsIG1fdG8odG8pCiAg
ICAgICAgICwgbV9mb250RGF0YShmb250RGF0YSkKQEAgLTQzLDE2ICs0MywxOCBAQCBzdHJ1Y3Qg
Rm9udERhdGFSYW5nZSB7CiAKICAgICBVQ2hhcjMyIGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zy
b207IH0KICAgICBVQ2hhcjMyIHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQotICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGE7IH0K
KyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERhdGE7IH0KIAogcHJpdmF0ZToKICAgICBVQ2hhcjMyIG1fZnJvbTsKICAgICBVQ2hh
cjMyIG1fdG87Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBtX2ZvbnREYXRhOwogfTsKIAogY2xhc3MgU2VnbWVudGVkRm9u
dERhdGEgOiBwdWJsaWMgRm9udERhdGEgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNlZ21lbnRlZEZvbnREYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2VnbWVu
dGVkRm9udERhdGEpOyB9CisgCiAgICAgdmlydHVhbCB+U2VnbWVudGVkRm9udERhdGEoKTsKIAog
ICAgIHZvaWQgYXBwZW5kUmFuZ2UoY29uc3QgRm9udERhdGFSYW5nZSYgcmFuZ2UpIHsgbV9yYW5n
ZXMuYXBwZW5kKHJhbmdlKTsgfQpAQCAtNjQsNiArNjYsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJpdmF0ZToKKyAgICBTZWdtZW50ZWRGb250RGF0YSgpIHsgfQorCiAgICAgdmlydHVhbCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5n
dGgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3MCwzNiArMTcwLDM2IEBAIGJvb2wgU2ltcGxlRm9udERhdGE6OmlzU2VnbWVudGVkKCkg
Y29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250
RGF0YTo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlv
bkZvbnREYXRhKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAg
ICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9u
dCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRp
b24pIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSB2ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRh
KG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAgdmVydGljYWxSaWdodFBsYXRmb3JtRGF0YS5zZXRP
cmllbnRhdGlvbihIb3Jpem9udGFsKTsKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnZlcnRp
Y2FsUmlnaHRPcmllbnRhdGlvbiA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YSh2ZXJ0aWNh
bFJpZ2h0UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpKTsKKyAgICAg
ICAgbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbiA9IGNyZWF0ZSh2
ZXJ0aWNhbFJpZ2h0UGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpOwog
ICAgIH0KLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmllbnRh
dGlvbi5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbjsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjp1cHJpZ2h0
T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0YTo6dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAogewogICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVy
aXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbikKLSAgICAgICAgbV9kZXJpdmVkRm9udERhdGEt
PnVwcmlnaHRPcmllbnRhdGlvbiA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShtX3BsYXRm
b3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlLCB0cnVlKSk7Ci0gICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24uZ2V0KCk7CisgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlz
Q3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRh
LT51cHJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0
YTo6YnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9
IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVy
aXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGgpIHsKLSAgICAgICAgbV9kZXJpdmVkRm9udERh
dGEtPmJyb2tlbklkZW9ncmFwaCA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShtX3BsYXRm
b3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhLT5icm9rZW5JZGVvZ3JhcGggPSBjcmVhdGUobV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSk7CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGgt
Pm1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA9IHRydWU7CiAgICAgfQotICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoLmdldCgpOworICAgIHJldHVybiBtX2Rl
cml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5oCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMCArNzksMTYgQEAgcHVi
bGljOgogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KLSAg
ICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZv
bnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlv
bkZhbGxiYWNrID0gZmFsc2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBjcmVhdGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3Vz
dG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2sgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQsIGlzTG9hZGluZywg
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykpOworICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3Jl
YXRlIFNWRyBGb250cy4KLSAgICBTaW1wbGVGb250RGF0YShQYXNzT3duUHRyPEFkZGl0aW9uYWxG
b250RGF0YT4sIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRl
KFBhc3NPd25QdHI8QWRkaXRpb25hbEZvbnREYXRhPiBmb250RGF0YSwgZmxvYXQgZm9udFNpemUs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNpbXBsZUZvbnREYXRhKGZvbnREYXRhLCBmb250U2l6ZSwg
c3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7CisgICAgfQogCiAgICAgdmlydHVhbCB+
U2ltcGxlRm9udERhdGEoKTsKIApAQCAtOTEsMTEgKzk3LDExIEBAIHB1YmxpYzoKICAgICBjb25z
dCBPcGVuVHlwZVZlcnRpY2FsRGF0YSogdmVydGljYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV92
ZXJ0aWNhbERhdGE7IH0KICNlbmRpZgogCi0gICAgU2ltcGxlRm9udERhdGEqIHNtYWxsQ2Fwc0Zv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIFNpbXBsZUZvbnREYXRh
KiBlbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAg
ICBTaW1wbGVGb250RGF0YSogYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNp
c01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNvbnN0OwogCi0g
ICAgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCkgY29uc3QKKyAgICBQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CiAgICAgewogICAg
ICAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKICAgICAgICAgY2FzZSBTbWFsbENhcHNWYXJpYW50OgpA
QCAtMTEyLDggKzExOCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lt
cGxlRm9udERhdGEqPih0aGlzKTsKICAgICB9CiAKLSAgICBTaW1wbGVGb250RGF0YSogdmVydGlj
YWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKLSAgICBTaW1wbGVGb250RGF0YSog
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpIGNvbnN0OworICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkg
Y29uc3Q7CiAKICAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNWZXJ0aWNhbEdseXBoczsgfQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygp
IGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQpAQCAtMjAxLDYg
KzIwNywxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICBTaW1wbGVGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9v
bCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFs
c2UpOworCisgICAgU2ltcGxlRm9udERhdGEoUGFzc093blB0cjxBZGRpdGlvbmFsRm9udERhdGE+
ICwgZmxvYXQgZm9udFNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFs
aWMpOworCiAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKICAgICB2b2lkIHBsYXRmb3JtR2x5cGhJ
bml0KCk7CiAgICAgdm9pZCBwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKTsKQEAgLTIxMCw3ICsyMjAs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21tb25Jbml0KCk7CiAKLSAgICBQYXNzT3duUHRy
PFNpbXBsZUZvbnREYXRhPiBjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQg
c2NhbGVGYWN0b3IpIGNvbnN0OwogCiAjaWYgKFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJTkNFKSkg
XAogICAgIHx8IChPUyhXSU5ET1dTKSAmJiBQTEFURk9STShXWCkpCkBAIC0yNTQsMTEgKzI2NCwx
MSBAQCBwcml2YXRlOgogICAgICAgICB+RGVyaXZlZEZvbnREYXRhKCk7CiAKICAgICAgICAgYm9v
bCBmb3JDdXN0b21Gb250OwotICAgICAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2Fw
czsKLSAgICAgICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBlbXBoYXNpc01hcms7Ci0gICAgICAg
IE93blB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoOwotICAgICAgICBPd25QdHI8
U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbjsKLSAgICAgICAgT3duUHRy
PFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb247CisgICAgICAgIFJlZlB0cjxTaW1w
bGVGb250RGF0YT4gc21hbGxDYXBzOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGVt
cGhhc2lzTWFyazsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBicm9rZW5JZGVvZ3Jh
cGg7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0
aW9uOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHVwcmlnaHRPcmllbnRhdGlvbjsK
ICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkK
ICAgICAgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY29tcG9z
aXRlRm9udFJlZmVyZW5jZXM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQu
Y3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyAr
OTgsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIHsKIH0KIAotY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAg
ICAgaWN1OjpMb2NhbGUgbG9jYWxlID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKICAgICBQ
bGF0Zm9ybVN1cHBvcnQ6OkZvbnRGYW1pbHkgZmFtaWx5OwpAQCAtMTEwLDEyICsxMTAsMTIgQEAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgIHJldHVybiBnZXRD
YWNoZWRGb250RGF0YShnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0
aW9uKCksIGF0b21pY0ZhbWlseSwgRG9Ob3RSZXRhaW4pLCBEb05vdFJldGFpbik7CiB9CiAKLVNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNp
bWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7
CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3Vs
ZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91
bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
QXRvbWljU3RyaW5nLCBzZXJpZiwgKCJTZXJpZiIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IEF0b21pY1N0cmluZywgbW9ub3NwYWNlLCAoIk1vbm9zcGFjZSIpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVt
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVt
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDEyICszMTgsMTIgQEAgc3RhdGljIGJvb2wg
Zm9udENvbnRhaW5zQ2hhcmFjdGVyKGNvbnN0CiB9CiAKIC8vIFRyaWVzIHRoZSBnaXZlbiBmb250
IGFuZCBzYXZlIGl0IHxvdXRGb250RmFtaWx5TmFtZXwgaWYgaXQgc3VjY2VlZHMuCi1TaW1wbGVG
b250RGF0YSogRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRS
ZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKQor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlw
dGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91
dEZvbnRGYW1pbHlOYW1lKQogewotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdldENh
Y2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZm9udC5sZkZhY2VOYW1lLCBmYWxzZSwgc2hv
dWxkUmV0YWluKTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZ2V0Q2Fj
aGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmb250LmxmRmFjZU5hbWUsIGZhbHNlLCBzaG91
bGRSZXRhaW4pOwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgbWVtY3B5KG91dEZvbnRGYW1p
bHlOYW1lLCBmb250LmxmRmFjZU5hbWUsIHNpemVvZihmb250LmxmRmFjZU5hbWUpKTsKLSAgICBy
ZXR1cm4gZm9udERhdGE7CisgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAogc3Rh
dGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKQEAgLTQwNiw3
ICs0MDYsNyBAQCBzdHJ1Y3QgR2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udFByb2NEYXRhCiAgICAg
Y29uc3QgRm9udERlc2NyaXB0aW9uKiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBGb250Q2FjaGU6
OlNob3VsZFJldGFpbiBtX3Nob3VsZFJldGFpbjsKICAgICB3Y2hhcl90KiBtX2ZvbnROYW1lOwot
ICAgIFNpbXBsZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gbV9mb250RGF0YTsKIH07CiAKIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZ2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udFByb2MoY29uc3QgTE9HRk9OVCogbG9nRm9udCwgY29uc3QgVEVYVE1FVFJJQyog
bWV0cmljcywgRFdPUkQgZm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCkBAIC00MjMsNyArNDIzLDcg
QEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiAKIC8vIEdpdmVuIHRoZSBkZXNpcmVk
IGJhc2UgZm9udCwgdGhpcyB3aWxsIGNyZWF0ZSBhIFNpbXBsZUZvbnREYXRhIGZvciBhIHNwZWNp
ZmljCiAvLyBmb250IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBnaXZlbiByYW5nZSBv
ZiBjaGFyYWN0ZXJzLgotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERh
dGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRG
b250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgZm9u
dERlc2NyaXB0aW9uLmRvbWluYW50U2NyaXB0KCkKICAgICAvLyB0byBHZXRGYWxsYmFja0ZhbWls
eSBoZXJlLgpAQCAtNTA4LDEyICs1MDgsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Rm9udAogCiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQm
IGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIEZv
bnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseVR5cGUgZ2VuZXJpYyA9IGRlc2NyaXB0aW9uLmdl
bmVyaWNGYW1pbHkoKTsKIApAQCAtNTMwLDkgKzUzMCw5IEBAIFNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICBlbHNlIGlmIChnZW5lcmljID09IEZvbnREZXNjcmlw
dGlvbjo6TW9ub3NwYWNlRmFtaWx5KQogICAgICAgICBmb250U3RyID0gY291cmllclN0cjsKIAot
ICAgIFNpbXBsZUZvbnREYXRhKiBzaW1wbGVGb250ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3Jp
cHRpb24sIGZvbnRTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gc2ltcGxlRm9udCA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmb250
U3RyLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoc2ltcGxlRm9udCkKLSAgICAgICAg
cmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsK
IAogICAgIC8vIEZhbGwgYmFjayB0byBzeXN0ZW0gZm9udHMgYXMgV2luIFNhZmFyaSBkb2VzIGJl
Y2F1c2UgdGhpcyBmdW5jdGlvbiBtdXN0CiAgICAgLy8gcmV0dXJuIGEgdmFsaWQgZm9udC4gT25j
ZSB3ZSBmaW5kIGEgdmFsaWQgc3lzdGVtIGZvbnQsIHdlIHNhdmUgaXRzIG5hbWUKQEAgLTU0Niw3
ICs1NDYsNyBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAg
ICAgIExPR0ZPTlQgZGVmYXVsdEdVSUxvZ0ZvbnQ7CiAgICAgICAgIEdldE9iamVjdChkZWZhdWx0
R1VJRm9udCwgc2l6ZW9mKGRlZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsK
ICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0Zv
bnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNr
Rm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICBy
ZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgLy8gRmFsbCBiYWNrIHRv
IE5vbi1jbGllbnQgbWV0cmljcyBmb250cy4KQEAgLTU1NCwxNSArNTU0LDE1IEBAIFNpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICBub25DbGllbnRNZXRyaWNzLmNi
U2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNzKTsKICAgICBpZiAoU3lzdGVtUGFyYW1ldGVy
c0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRyaWNzKSwg
Jm5vbkNsaWVudE1ldHJpY3MsIDApKSB7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERh
dGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5v
bkNsaWVudE1ldHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAg
ICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJl
bGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlv
bkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5s
Zk1lbnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVG
b250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBp
ZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlw
dGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFsbGJh
Y2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAg
IHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBm
b250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFp
biwgbm9uQ2xpZW50TWV0cmljcy5sZkNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAg
ICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZv
bnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRy
aWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1
cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsK
ICAgICB9CiAKICAgICAvLyBGYWxsIGJhY2sgdG8gYWxsIHRoZSBmb250cyBpbnN0YWxsZWQgaW4g
dGhpcyBQQy4gV2hlbiBhIGZvbnQgaGFzIGEKQEAgLTU3Niw3ICs1NzYsNyBAQCBTaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIEVudW1Gb250RmFtaWxpZXMo
ZGMsIDAsIGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnRQcm9jLCByZWludGVycHJldF9jYXN0PExQ
QVJBTT4oJnByb2NEYXRhKSk7CiAKICAgICAgICAgaWYgKHByb2NEYXRhLm1fZm9udERhdGEpCi0g
ICAgICAgICAgICByZXR1cm4gcHJvY0RhdGEubV9mb250RGF0YTsKKyAgICAgICAgICAgIHJldHVy
biBwcm9jRGF0YS5tX2ZvbnREYXRhLnJlbGVhc2UoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1X
aW4uY3BwCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDM0ICsxMDksMzQgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0
cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgTE9H
Rk9OVCB3aW5Gb250OwogICAgIEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXpl
b2YoTE9HRk9OVCksICZ3aW5Gb250KTsKICAgICBmbG9hdCBzY2FsZWRTaXplID0gc2NhbGVGYWN0
b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCk7CiAgICAgd2luRm9udC5sZkhlaWdo
dCA9IC1scm91bmRmKHNjYWxlZFNpemUpOwogICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9udElu
ZGlyZWN0KCZ3aW5Gb250KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRh
KEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLm9yaWVu
dGF0aW9uKCkpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGhmb250LCBzY2FsZWRTaXplLCBtX3BsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2lt
cGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NPd25QdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRl
KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMp
CiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250
RGF0YShmb250RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0
YS0+c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0Zv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFz
c093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVy
aXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVk
Rm9udERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhh
c2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0g
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0
dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9u
dERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAJKHJldmlzaW9u
IDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBGY1Bh
dHRlcm4qIGZpbmRCZXN0Rm9udEdpdmVuRmFsbGJhY2tzKGNvCiAgICAgcmV0dXJuIEZjRm9udFNl
dE1hdGNoKDAsIHNldHMsIDEsIHBhdHRlcm4sICZmb250Q29uZmlnUmVzdWx0KTsKIH0KIAotY29u
c3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFz
c1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3Rl
cnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgp
CiB7CiAgICAgUmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9IGFkb3B0UmVmKGNyZWF0ZUZvbnRD
b25maWdQYXR0ZXJuRm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICBjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZv
cm1EYXRhKCk7CkBAIC0xMDAsMTIgKzEwMCwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9u
dENhY2hlOjpnZXRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVG
b250RGF0YSwgRG9Ob3RSZXRhaW4pOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JikKK1Bhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dCYpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAg
ICAgLy8gV2Ugd2FudCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0
aGUgbG9naWMgcHJldmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZh
bGxiYWNrIGZvbnRzIG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9u
dERhdGFGcmVlVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDEy
ODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBs
ZUZvbnREYXRhRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxNyArODcsMTcgQEAg
dm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3Rvcikg
Y29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVT
Y2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLnNjYWxl
ZEZvbnQoKSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxh
dGZvcm1EYXRhKGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEu
c2NhbGVkRm9udCgpKSwKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxh
dGZvcm1EYXRhKGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEu
c2NhbGVkRm9udCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2NhbGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXpl
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljT2JsaXF1ZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
Q3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250
RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CkBAIC0x
MDUsMTcgKzEwNSwxNyBAQCBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fw
CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0
aW9uLCAuNyk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQo
KTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxl
Rm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3Jl
YXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVT
Y2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAotICAgIHJldHVybiBtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0No
YXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyQ29yZVRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCShyZXZpc2lvbiAxMjg4
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyQ29yZVRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4MiwxMyArMjgyLDEzIEBA
IHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRl
KG1fZm9udC5wcmltYXJ5Rm9udCgpLCBjcCwgc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2Nh
dGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgcnVuRm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEobV9mb250LmZv
bnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2UsIEZvbnRDYWNoZTo6RG9Ob3RS
ZXRhaW4pOworICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRDYWNoZSgpLT5n
ZXRDYWNoZWRGb250RGF0YShtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnROYW1lLmdldCgp
LCBmYWxzZSwgRm9udENhY2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CiAjaWYgIVBMQVRGT1JNKFdY
KQogICAgICAgICAgICAgICAgICAgICAvLyBDb3JlIFRleHQgbWF5IGhhdmUgdXNlZCBhIGZvbnQg
dGhhdCBpcyBub3Qga25vd24gdG8gTlNGb250TWFuYWdlci4gSW4gdGhhdCBjYXNlLCBmYWxsIGJh
Y2sgb24KICAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIGZvbnQgYXMgcmV0dXJuZWQs
IGV2ZW4gdGhvdWdoIGl0IG1heSBub3QgaGF2ZSB0aGUgYmVzdCBOU0ZvbnRSZW5kZXJpbmdNb2Rl
LgogICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnREYXRhKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhIHJ1bkZvbnRQbGF0Zm9ybURhdGEoKE5TRm9udCAq
KXJ1bkZvbnQsIENURm9udEdldFNpemUocnVuRm9udCksIG1fZm9udC5mb250RGVzY3JpcHRpb24o
KS51c2VQcmludGVyRm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnREYXRh
ID0gZm9udENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZydW5Gb250UGxhdGZvcm1EYXRhLCBG
b250Q2FjaGU6OkRvTm90UmV0YWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnRE
YXRhID0gZm9udENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKCZydW5Gb250UGxhdGZvcm1EYXRh
LCBGb250Q2FjaGU6OkRvTm90UmV0YWluKS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQog
I2Vsc2UKICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBhc3NlcnQgZm9yIG5vdywgdW50aWwg
d2UgY2FuIGRldmlzZSBhIGJldHRlciBmaXggdGhhdCB3b3JrcyB3aXRoIHd4LgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFj
Lm1tCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc0FwcEtpdEZvbnRXZWlnaHRCb2wKICAgICByZXR1cm4gYXBwS2l0
Rm9udFdlaWdodCA+PSA3OwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKICAg
ICBVMTZfR0VUKGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwgY2hhcmFjdGVyKTsKQEAgLTE2Niwx
MiArMTY2LDEyIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAg
ICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0YWluKTsK
IH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICAv
LyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2Vk
IG9uIAogICAgIC8vIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbiB0aGUgdGhlIHJlcXVlc3Rl
ZCBuYW1lcy4gIEZvciBleGFtcGxlLCB3ZSdsbAogICAgIC8vIG1hdGNoIGFueSBuYW1lIHRoYXQg
Y29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgotICAgIFNpbXBsZUZvbnREYXRhKiBzaW1w
bGVGb250RGF0YSA9IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0
YTsKICAgICBjb25zdCBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gJmZvbnQuZm9udERlc2NyaXB0
aW9uKCkuZmFtaWx5KCk7CiAgICAgd2hpbGUgKGN1cnJGYW1pbHkgJiYgIXNpbXBsZUZvbnREYXRh
KSB7CiAgICAgICAgIGlmIChjdXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewpAQCAtMTg0
LDE4ICsxODQsMTggQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbgog
ICAgICAgICBjdXJyRmFtaWx5ID0gY3VyckZhbWlseS0+bmV4dCgpOwogICAgIH0KIAotICAgIHJl
dHVybiBzaW1wbGVGb250RGF0YTsKKyAgICByZXR1cm4gc2ltcGxlRm9udERhdGEucmVsZWFzZSgp
OwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRM
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCB0aW1lc1N0ciwgKCJUaW1lcyIpKTsKIAogICAgIC8vIEZJWE1FOiBX
b3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9u
dCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUg
dXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgU2ltcGxlRm9u
dERhdGEqIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9u
LCB0aW1lc1N0ciwgZmFsc2UsIHNob3VsZFJldGFpbik7CisgICAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwg
dGltZXNTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOwogICAgIGlmIChzaW1wbGVGb250RGF0YSkK
LSAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgICAgICByZXR1cm4gc2ltcGxlRm9u
dERhdGEucmVsZWFzZSgpOwogCiAgICAgLy8gVGhlIFRpbWVzIGZhbGxiYWNrIHdpbGwgYWxtb3N0
IGFsd2F5cyB3b3JrLCBidXQgaW4gdGhlIGhpZ2hseSB1bnVzdWFsIGNhc2Ugd2hlcmUKICAgICAv
LyB0aGUgdXNlciBkb2Vzbid0IGhhdmUgaXQsIHdlIGZhbGwgYmFjayBvbiBMdWNpZGEgR3JhbmRl
IGJlY2F1c2UgdGhhdCdzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2aXNpb24gMTI4
ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4
VGV4dE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwyMSArMTg5LDIxIEBAIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBGb250Ojpmb250RGF0YUZvckMKICAgICAgICAgICAgIGlmIChzaW1wbGVG
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkgewogICAg
ICAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYm
ICFzaW1wbGVGb250RGF0YS0+aGFzVmVydGljYWxHbHlwaHMoKSkgewogICAgICAgICAgICAgICAg
ICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsKLSAgICAgICAgICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoRm9udERh
dGEoKTsKKyAgICAgICAgICAgICAgICAgICAgc2ltcGxlRm9udERhdGEgPSBzaW1wbGVGb250RGF0
YS0+YnJva2VuSWRlb2dyYXBoRm9udERhdGEoKS5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fZm9udERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRh
dGlvblZlcnRpY2FsUmlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERhdGEq
IHZlcnRpY2FsUmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250RGF0YSog
dmVydGljYWxSaWdodEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnREYXRhKCkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIEdseXBoIHZlcnRp
Y2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250RGF0YS0+Z2x5cGhGb3JDaGFyYWN0ZXIo
YmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5
cGggPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpbXBsZUZvbnREYXRhID0gdmVydGljYWxSaWdodEZvbnREYXRhOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB1cHJpZ2h0
Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsK
KyAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERhdGEqIHVwcmlnaHRGb250RGF0YSA9IHNp
bXBsZUZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpLmdldCgpOwogICAgICAg
ICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udERhdGEtPmdseXBo
Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAodXBy
aWdodEdseXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHVwcmlnaHRGb250RGF0YTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
Y29uc3QgU2ltcGxlRm9udERhdGEqIHZhcmlhbnRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52
YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpKQorICAgICAgICAgICAg
aWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEgPSBzaW1wbGVGb250RGF0
YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KS5nZXQoKSkKICAg
ICAgICAgICAgICAgICBzaW1wbGVGb250RGF0YSA9IHZhcmlhbnRGb250RGF0YTsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9u
dERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAxMjg4OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMwOCwxOSArMzA4LDE5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtRGVzdHJveSgpCiAgICAgaWYgKCFpc0N1c3RvbUZvbnQoKSAmJiBtX2Rlcml2ZWRGb250RGF0
YSkgewogICAgICAgICAvLyBUaGVzZSBjb21lIGZyb20gdGhlIGNhY2hlLgogICAgICAgICBpZiAo
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5y
ZWxlYXNlRm9udERhdGEobV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5sZWFrUHRyKCkpOwor
ICAgICAgICAgICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0
YS0+c21hbGxDYXBzLmdldCgpKTsKIAogICAgICAgICBpZiAobV9kZXJpdmVkRm9udERhdGEtPmVt
cGhhc2lzTWFyaykKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEobV9k
ZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5sZWFrUHRyKCkpOworICAgICAgICAgICAgZm9u
dENhY2hlKCktPnJlbGVhc2VGb250RGF0YShtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
LmdldCgpKTsKICAgICB9CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewog
ICAgIGlmIChpc0N1c3RvbUZvbnQoKSkgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxl
ZEZvbnREYXRhKG1fcGxhdGZvcm1EYXRhKTsKICAgICAgICAgc2NhbGVkRm9udERhdGEubV9zaXpl
ID0gc2NhbGVkRm9udERhdGEubV9zaXplICogc2NhbGVGYWN0b3I7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoc2NhbGVkRm9udERhdGEsIHRydWUsIGZhbHNlKSk7
CisgICAgICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhLCB0
cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpA
QCAtMzQ1LDMxICszNDUsMzEgQEAgUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdAogICAgICAgICBzY2FsZWRGb250RGF0YS5tX3N5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRy
YWl0cyAmIE5TSXRhbGljRm9udE1hc2spICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIE5TSXRhbGlj
Rm9udE1hc2spOwogCiAgICAgICAgIC8vIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3ko
KSB0YWtlcyBjYXJlIG9mIG5vdCBkZWxldGluZyB0aGUgY2FjaGVkIGZvbnQgZGF0YSB0d2ljZS4K
LSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgm
c2NhbGVkRm9udERhdGEpKTsKKyAgICAgICAgcmV0dXJuIGZvbnRDYWNoZSgpLT5nZXRDYWNoZWRG
b250RGF0YSgmc2NhbGVkRm9udERhdGEpOwogICAgIH0KICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBs
ZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShp
c0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQog
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGb250U2l6ZU11bHRpcGxpZXIpOwogCi0gICAg
cmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVG
b250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQo
KSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9u
dERlc2NyaXB0aW9uLCAuNWYpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBo
YXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01h
cms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5j
cHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTcgKzM1LDE3
IEBAIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERh
dGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRG
b250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQp
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4p
CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJl
dGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVy
IHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCiAgICAgLy8gRm9y
IG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhv
dXQgY2hhbmdpbmcgYW55IHByZWZzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAJ
KHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwzMiArODQs
MzIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFz
c093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpj
cmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGRlc2Mg
PSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICBkZXNjLnNldFNwZWNpZmll
ZFNpemUoc2NhbGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwogICAg
IEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5
KCkpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEocGxhdGZvcm1EYXRh
KSk7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKIH0K
IAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6
Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFs
bENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2Fs
ZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lz
TWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFy
a0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAog
ewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
ID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUp
OwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7Cisg
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2lt
cGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDYWNoZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgUVJhd0ZvbnQgcmF3Rm9udEZvckNoYXJhY3Rl
cnMoY29uCiAgICAgcmV0dXJuIGdseXBocy5yYXdGb250KCk7CiB9CiAKLWNvbnN0IFNpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewogICAgIFFT
dHJpbmcgcXN0cmluZyA9IFFTdHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgUUNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoKTsKICAgICBRUmF3Rm9udCBjb21wdXRlZEZv
bnQgPSByYXdGb250Rm9yQ2hhcmFjdGVycyhxc3RyaW5nLCBmb250LnJhd0ZvbnQoKSk7CkBAIC03
MywxMiArNzMsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAog
ICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgmYWx0ZXJuYXRlRm9udCwgRG9Ob3RSZXRhaW4p
OwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAg
IHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91
bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIGNvbnN0IEF0
b21pY1N0cmluZyBmYWxsYmFja0ZhbWlseSA9IFFGb250KGZvbnREZXNjcmlwdGlvbi5mYW1pbHko
KS5mYW1pbHkoKSkubGFzdFJlc29ydEZhbWlseSgpOwogICAgIHJldHVybiBnZXRDYWNoZWRGb250
RGF0YShuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRmFtaWx5
KSwgc2hvdWxkUmV0YWluKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwCShyZXZpc2lvbiAxMjg4OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMzAgKzYxLDMwIEBAIGZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2wKICAgICByZXR1cm4gYWR2YW5jZXMuYXQoMCkueCgpOwog
fQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9u
dERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCBz
Y2FsZWRTaXplID0gbHJvdW5kZihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzY2Fs
ZUZhY3Rvcik7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxh
dGZvcm1EYXRhKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCksIGZh
bHNlKSk7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0
YShtX3BsYXRmb3JtRGF0YSwgc2NhbGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9
CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6
OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21h
bGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2Nh
bGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGcmFjdGlvbik7CiAKLSAgICBy
ZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9k
ZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZv
bnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnRE
YXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgp
KTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1f
ZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250
RGVzY3JpcHRpb24sIGVtcGhhc2lzTWFya0ZyYWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250
RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHAJKHJldmlz
aW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9u
dENhY2hlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDcgQEAgdm9pZCBGb250
Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiB7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBpY3U6OkxvY2Fs
ZSBsb2NhbGUgPSBpY3U6OkxvY2FsZTo6Z2V0RGVmYXVsdCgpOwogICAgIFBsYXRmb3JtU3VwcG9y
dDo6Rm9udEZhbWlseSBmYW1pbHk7CkBAIC05MywxMiArOTEsMTIgQEAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YSgm
cGxhdGZvcm1EYXRhLCBEb05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVm
UHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8
U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWlu
KQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzYW5zU3Ry
LCAoIlNhbnMiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IHNlcmlmU3RyLCAoIlNlcmlmIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcAkocmV2
aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9T
aW1wbGVGb250RGF0YVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMzAgKzE3MCwzMCBA
QCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1QYXNzT3du
UHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0
ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZWRTaXplID0g
bHJvdW5kZihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKG1f
cGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAg
cmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3Jt
RGF0YSwgc2NhbGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZv
bnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkK
ICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1
c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQogICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERhdGEo
Zm9udERlc2NyaXB0aW9uLCBzbWFsbENhcHNGcmFjdGlvbik7CiAKLSAgICByZXR1cm4gbV9kZXJp
dmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNp
c01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24s
IGVtcGhhc2lzTWFya0ZyYWN0aW9uKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+
ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFz
aXNNYXJrOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAko
cmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwxMCArMTg2LDEwIEBAIHN0
YXRpYyBIRk9OVCBjcmVhdGVNTGFuZ0ZvbnQoSU1MYW5nRm9udEwKICAgICByZXR1cm4gaGZvbnQ7
CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKQogewogICAgIFVDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07Ci0gICAg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGZvbnREYXRhOwogICAgIEhXbmREQyBoZGMoMCk7CiAgICAgSEZPTlQgcHJpbWFyeUZvbnQgPSBm
b250LnByaW1hcnlGb250KCktPmZvbnREYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciktPnBsYXRm
b3JtRGF0YSgpLmhmb250KCk7CiAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhk
YywgcHJpbWFyeUZvbnQpOwpAQCAtMjkzLDI0ICsyOTMsMjQgQEAgY29uc3QgU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgICAgICBEZWxldGVPYmplY3QoaGZvbnQpOwogICAg
IH0KIAotICAgIHJldHVybiBmb250RGF0YTsKKyAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgp
OwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQogewogICAg
IHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpmb250RGF0YUZyb21E
ZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21p
Y1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbiwgY29u
c3QgTE9HRk9OVCYgZm9udCwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKICAg
ICBBdG9taWNTdHJpbmcgZmFtaWx5TmFtZSA9IFN0cmluZyhmb250LmxmRmFjZU5hbWUsIHdjc25s
ZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwotICAgIFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwg
ZmFsc2UsIHNob3VsZFJldGFpbik7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0
YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZmFsc2Us
IHNob3VsZFJldGFpbik7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAgICBvdXRGb250RmFtaWx5
TmFtZSA9IGZhbWlseU5hbWU7Ci0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiBmb250
RGF0YS5yZWxlYXNlKCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGZhbGxiYWNrRm9udE5hbWUsICgpKTsKICAg
ICBpZiAoIWZhbGxiYWNrRm9udE5hbWUuaXNFbXB0eSgpKQpAQCAtMzI5LDExICszMjksMTEgQEAg
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgICAgICBBdG9taWNT
dHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiKSwKICAgICAgICAgQXRvbWljU3RyaW5nKCJBcmlh
bCIpCiAgICAgfTsKLSAgICBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udDsKKyAgICBSZWZQdHI8
U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBX
VEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9udHMpOyArK2kpIHsKICAgICAgICAgaWYgKHNpbXBs
ZUZvbnQgPSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udHNb
aV0sIGZhbHNlLCBzaG91bGRSZXRhaW4pKSB7CiAgICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1l
ID0gZmFsbGJhY2tGb250c1tpXTsKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAg
ICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0zNDIsNyArMzQyLDcgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydAogICAgICAgICBMT0dGT05UIGRlZmF1bHRHVUlMb2dGb250OwogICAgICAgICBHZXRPYmpl
Y3QoZGVmYXVsdEdVSUZvbnQsIHNpemVvZihkZWZhdWx0R1VJTG9nRm9udCksICZkZWZhdWx0R1VJ
TG9nRm9udCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRp
b25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBkZWZhdWx0R1VJTG9n
Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsK
KyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICB9CiAKICAgICAv
LyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRzLgpAQCAtMzUwLDE1ICszNTAs
MTUgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgIG5vbkNs
aWVudE1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpOwogICAgIGlmIChT
eXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mKG5vbkNs
aWVudE1ldHJpY3MpLCAmbm9uQ2xpZW50TWV0cmljcywgMCkpIHsKICAgICAgICAgaWYgKHNpbXBs
ZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9u
LCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJhY2tG
b250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJl
dHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250
RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91bGRSZXRh
aW4sIG5vbkNsaWVudE1ldHJpY3MubGZNZW51Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAg
ICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250
LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlw
dGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1l
dHJpY3MubGZTdGF0dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVy
biBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwog
ICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9u
dChmb250RGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZkNhcHRp
b25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250
OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAo
c2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3Jp
cHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQsIGZh
bGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAg
ICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQogICAgIAogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiAxMjg4
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNDAgKzEzMiw0MCBAQCB2b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9w
ZXJ0aWVzOwogfQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBmbG9h
dCBzY2FsZWRTaXplID0gc2NhbGVGYWN0b3IgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CiAgICAg
aWYgKGlzQ3VzdG9tRm9udCgpKSB7CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9u
dChtX3BsYXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnQuc2V0U2l6ZShzY2FsZWRTaXpl
KTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShzY2FsZWRGb250
LCB0cnVlLCBmYWxzZSkpOworICAgICAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShz
Y2FsZWRGb250LCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgTE9HRk9OVCB3aW5mb250Owog
ICAgIEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9OVCksICZ3
aW5mb250KTsKICAgICB3aW5mb250LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2NhbGVkU2l6ZSAqICht
X3BsYXRmb3JtRGF0YS51c2VHREkoKSA/IDEgOiAzMikpOwogICAgIEhGT05UIGhmb250ID0gQ3Jl
YXRlRm9udEluZGlyZWN0KCZ3aW5mb250KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBs
ZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1E
YXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBt
X3BsYXRmb3JtRGF0YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgIHJl
dHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNjYWxl
ZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3lu
dGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3JtRGF0YS51c2VHREkoKSksIGlzQ3VzdG9tRm9udCgp
LCBmYWxzZSk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBz
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJp
dmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRG
b250RGF0YS0+c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
ID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBjU21hbGxDYXBzRm9udFNp
emVNdWx0aXBsaWVyKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBz
LmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQogCi1T
aW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJp
dmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRh
OjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVt
cGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNy
ZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZl
ZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRh
aW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdp
bkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9Gb250Q2FjaGVXaW5DRS5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbkNFLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgRm9udENhY2hlOjpjb21VbmluaXRpYWxpemUo
KQogICAgIH0KIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERh
dGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRG
b250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgU3RyaW5nIGZhbWlseU5hbWU7CiAgICAgV0NIQVIg
bmFtZVtMRl9GQUNFU0laRV07CkBAIC0yMzUsMTAgKzIzNSwxMSBAQCBjb25zdCBTaW1wbGVGb250
RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgdW5zaWduZWQgdW5pY29kZVJhbmdlID0gZmlu
ZENoYXJVbmljb2RlUmFuZ2UoY2hhcmFjdGVyKTsKIAogI2lmIGRlZmluZWQoSU1MQU5HX0ZPTlRf
TElOSykgJiYgKElNTEFOR19GT05UX0xJTksgPT0gMikKLSAgICBpZiAoSU1MYW5nRm9udExpbmsy
KiBsYW5nRm9udExpbmsgPSBnZXRGb250TGlua0ludGVyZmFjZSgpKSB7CisgICAgaWYgKElNTGFu
Z0ZvbnRMaW5rMiogbGFuZ0ZvbnRMaW5rID0gZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkKICNlbHNl
Ci0gICAgaWYgKElNTGFuZ0ZvbnRMaW5rKiBsYW5nRm9udExpbmsgPSBnZXRGb250TGlua0ludGVy
ZmFjZSgpKSB7CisgICAgaWYgKElNTGFuZ0ZvbnRMaW5rKiBsYW5nRm9udExpbmsgPSBnZXRGb250
TGlua0ludGVyZmFjZSgpKQogI2VuZGlmCisgICAgewogICAgICAgICBIR0RJT0JKIG9sZEZvbnQg
PSBHZXRDdXJyZW50T2JqZWN0KGdfc2NyZWVuREMsIE9CSl9GT05UKTsKICAgICAgICAgSEZPTlQg
aGZvbnQgPSAwOwogICAgICAgICBEV09SRCBjb2RlUGFnZXMgPSAwOwpAQCAtMjY3LDEwICsyNjgs
MTEgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBhc2tlZCBhYm91dCBhIGNvZGUgcGFnZSB0aGF0IGlzIG5vdCBvbmUg
b2YgdGhlIGNvZGUgcGFnZXMKICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYnkgTUxh
bmcsIHNvIHRoZSBmb250IG1pZ2h0IG5vdCBjb250YWluIHRoZSBjaGFyYWN0ZXIuCiAjaWYgZGVm
aW5lZChJTUxBTkdfRk9OVF9MSU5LKSAmJiAoSU1MQU5HX0ZPTlRfTElOSyA9PSAyKQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnNDaGFyYWN0ZXIobGFuZ0ZvbnRM
aW5rLCBnX3NjcmVlbkRDLCBjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y3VycmVudEZvbnRDb250YWluc0NoYXJhY3RlcihsYW5nRm9udExpbmssIGdfc2NyZWVuREMsIGNo
YXJhY3RlcikpCiAjZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29u
dGFpbnNDaGFyYWN0ZXIobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVy
LCBuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb250Q29udGFpbnND
aGFyYWN0ZXIobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBoZm9udCwgY2hhcmFjdGVyLCBuYW1l
KSkKICNlbmRpZgorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBTZWxlY3RPYmplY3QoZ19zY3JlZW5EQywgb2xkRm9udCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBsYW5nRm9udExpbmstPlJlbGVhc2VGb250KGhmb250KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGhmb250ID0gMDsKQEAgLTMwOCwyMCArMzEwLDIwIEBAIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldEZvbnQKIAogICAgICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1
bHQgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFt
ZSk7CiAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LT5oYXNoKCkgIT0gb3JpZ0ZvbnQuaGFz
aCgpKSB7Ci0gICAgICAgICAgICBpZiAoU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2V0Q2Fj
aGVkRm9udERhdGEocmVzdWx0LCBEb05vdFJldGFpbikpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZvbnREYXRhOworICAgICAgICAgICAgaWYgKFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERh
dGEgPSBnZXRDYWNoZWRGb250RGF0YShyZXN1bHQsIERvTm90UmV0YWluKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
cmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmKQogewog
ICAgIHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVz
b3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2MsIFNob3VsZFJl
dGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6
OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
YywgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUg
ZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4g
IEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291
bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERh
dGFXaW5DRS5jcHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw3ICs2Myw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7
CiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVT
Y2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxv
YXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVG
b250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzYyhmb250RGVzY3JpcHRpb24pOwogICAgIGZvbnREZXNjLnNldENvbXB1dGVk
U2l6ZShscm91bmRmKHNjYWxlRmFjdG9yICogZm9udERlc2MuY29tcHV0ZWRTaXplKCkpKTsKQEAg
LTcxLDI4ICs3MSwyOCBAQCBQYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0
CiAgICAgZm9udERlc2Muc2V0S2V5d29yZFNpemUobHJvdW5kZihzY2FsZUZhY3RvciAqIGZvbnRE
ZXNjLmtleXdvcmRTaXplKCkpKTsKICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPSBmb250
Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzYywgbV9wbGF0Zm9ybURh
dGEuZmFtaWx5KCkpOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKCpyZXN1bHQpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoKnJlc3VsdCk7
CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rl
cml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERh
dGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRl
U2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNyk7CiAKLSAgICByZXR1cm4gbV9kZXJp
dmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBo
YXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikg
Y29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNp
c01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250
RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAo
IW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnRE
YXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24s
IC41KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgp
OworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBEV09S
RCBnZXRLbm93bkZvbnRDb2RlUGFnZXMoY29uc3Qgd2NoYXJfdCogZmFtaWx5KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250Q2FjaGVXeC5j
cHAJKHJldmlzaW9uIDEyODg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0ZvbnRDYWNoZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCB2b2lk
IEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIHsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7Ci0gICAgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhID0gMDsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRh
ID0gMDsKICAgICBmb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnQuZm9udERlc2NyaXB0
aW9uKCksIGZvbnQuZmFtaWx5KCkuZmFtaWx5KCksIGZhbHNlLCBEb05vdFJldGFpbik7CiAgICAg
aWYgKCFmb250RGF0YS0+Y29udGFpbnNDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpCiAg
ICAgICAgIGZvbnREYXRhID0gZ2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoZm9udCk7CkBAIC01
MywxMiArNTMsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAog
ICAgICAgICBmb250RGF0YSA9IGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udC5mb250RGVz
Y3JpcHRpb24oKSk7CiAKICAgICBBU1NFUlQoZm9udERhdGEpOwotICAgIHJldHVybiBmb250RGF0
YTsKKyAgICByZXR1cm4gZm9udERhdGEucmVsZWFzZSgpOwogfQogCi1TaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQor
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250JiBmb250KQogewotICAgIFNpbXBsZUZvbnREYXRhKiBzaW1wbGVG
b250RGF0YSA9IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVGb250RGF0YSA9
IDA7CiAjaWYgT1MoREFSV0lOKQogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0
ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gCiAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGtl
eXdvcmRzIGluIHRoZSB0aGUgcmVxdWVzdGVkIG5hbWVzLiAgRm9yIGV4YW1wbGUsIHdlJ2xsCkBA
IC03OCwxNCArNzgsMTQgQEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bgogICAgIGlmICghc2ltcGxlRm9udERhdGEpCiAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0
Q2FjaGVkRm9udERhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1p
bHkoKSk7CiAKLSAgICByZXR1cm4gc2ltcGxlRm9udERhdGE7CisgICAgcmV0dXJuIHNpbXBsZUZv
bnREYXRhLnJlbGVhc2UoKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFz
dFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICAv
LyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBk
ZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0
IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAg
IFNpbXBsZUZvbnREYXRhKiBmYWxsYmFjayA9IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBmYWxsYmFjayA9IDA7CiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
IGZhbGxiYWNrTmFtZSgiQXJpYWwgVW5pY29kZSBNUyIpOwogI2Vsc2UKQEAgLTk0LDcgKzk0LDcg
QEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydAogICAgIGZhbGxiYWNr
ID0gZ2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja05hbWUsIGZhbHNl
LCBzaG91bGRSZXRhaW4pOwogICAgIEFTU0VSVChmYWxsYmFjayk7CiAgICAgCi0gICAgcmV0dXJu
IGZhbGxiYWNrOworICAgIHJldHVybiBmYWxsYmFjay5yZWxlYXNlKCk7CiB9CiAKIEZvbnRQbGF0
Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9T
aW1wbGVGb250RGF0YVd4LmNwcAkocmV2aXNpb24gMTI4ODkzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDMyICs5MCwzMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3ko
KQogI2VuZGlmCiB9CiAKLVBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRh
OjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRh
PiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEZv
bnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAg
ICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNjYWxlRmFjdG9yICogZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkU2l6ZSgpKTsKICAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YShkZXNjLCBk
ZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZv
bnREYXRhKHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlKSk7CisgICAgcmV0dXJu
IFNpbXBsZUZvbnREYXRhOjpjcmVhdGUocGxhdGZvcm1EYXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFs
c2UpOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICgh
bV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZv
bnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEtPnNtYWxsQ2FwcykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNy
ZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjcpOwogCi0gICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6
ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1w
aGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0
aW9uLCAuNSk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5n
ZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAog
Ym9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166533</attachid>
            <date>2012-10-01 13:48:24 -0700</date>
            <delta_ts>2012-10-01 14:17:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95866-20121001164742.patch</filename>
            <type>text/plain</type>
            <size>105069</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NyBAQAorMjAxMi0xMC0wMSAgU3RlcGhl
biBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkNvcmU6OkZvbnREYXRhIGhhbmRsaW5nIHRvIGNsYXJpZnkgcG9pbnRlciBvd25lcnNoaXAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBhbGwgRm9udERhdGEgYW5kIGRlcml2ZWQgY2xhc3NlcyByZWYtY291bnRlZCBpbiBhbGwK
KyAgICAgICAgY29kZSBwYXRocyB0aGF0IGxlYWQgdG8gY2FjaGluZyBvciBvdGhlciByZXRlbnRp
b24gb2YgYQorICAgICAgICBwb2ludGVyLiBUaGUgZ29hbCBpcyB0byBhdmVydCBjcmFzaGVzIGFu
ZCBtZW1vcnkgbGVha3MsIGFuZCB0byBicmluZworICAgICAgICB0aGUgY29kZSBtb3JlIGluIGxp
bmUgd2l0aCBjdXJyZW50IFdlYktpdCBwcmFjdGljZXMuCisKKyAgICAgICAgU3BlY2lmaWNhbGx5
LCB0aGlzIHBhdGNoIGFsbG93cyB1cyB0byB1c2UgcmVmIHBvaW50ZXJzIGZvciBhbGwgdGhlCisg
ICAgICAgIEZvbnREYXRhIHN0b3JlZCBpbiBGb250RmFsbGJhY2tMaXN0IG9iamVjdHMuIFRoZSBG
b250RmFsbGJhY2tMaXN0IGNhbgorICAgICAgICB0aGVuIG93biBjdXN0b20gZm9udCBkYXRhIGFu
ZCBtYW5hZ2UgaXRzIGxpZmV0aW1lIChmb3J0aGNvbWluZyBwYXRjaCkuCisgICAgICAgIEN1cnJl
bnRseSBEb2N1bWVudCBvd25zIGN1c3RvbSBmb250IGRhdGEgYW5kIGRvZXMgYW4gZW5kIHJ1biBh
cm91bmQKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdCBpbiBkZWxldGluZyBnbHlwaCBwYWdlcyBh
bmQgY3VzdG9tIGZvbnQgZGF0YSwgbGVhdmluZworICAgICAgICBGb250RmFsbGJhY2tMaXN0IHdp
dGggaW52YWxpZCBwb2ludGVycy4KKworICAgICAgICBBbGwgRm9udERhdGEgZGVyaXZlZCBjbGFz
c2VzIGhhdmUgYmVlbiBzd2l0Y2hlZCB0byB1c2Ugc3RhdGljIGNyZWF0ZQorICAgICAgICBtZXRo
b2RzIHdpdGggcHJpdmF0ZSBjb25zdHJ1Y3RvcnMuCisKKyAgICAgICAgQWxsIGNhY2hlcyB0aGF0
IGhvbGQgRm9udERhdGEgbm93IHVzZSBSZWZQdHJzLgorCisgICAgICAgIEFsbCBtZXRob2RzIHRo
YXQgY29uc3RydWN0IG5ldyBmb250IGRhdGEgbm93IHJldHVybiBQYXNzUmVmUHRyLCB3aXRoIHRo
ZQorICAgICAgICBleGNlcHRpb24gb2YgY29kZSBvbmx5IHVzZWQgdG8gZ2VuZXJhdGUgdGVtcG9y
YXJ5IGRhdGEgZm9yIHRleHQgcnVuIGxheW91dC4KKworICAgICAgICBBbGwgbWV0aG9kcyB0aGF0
IGhhbmRsZSBGb250RGF0YSBpbiBhIGNhbGwgc3RhY2sgdGhhdCBwYXNzZXMgdGhyb3VnaAorICAg
ICAgICBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0IHJldHVybiBQYXNzUmVmUHRyLgorCisg
ICAgICAgIFBlcmZvcm1hbmNlIHRlc3RlZCB3aXRoIGJvdGggV2ViS2l0IFBlcmYtby1tYXRpYywg
d2hpY2ggc2hvd2VkCisgICAgICAgIHBlcmZvcm1hbmNlIGNoYW5nZXMgaW4gdGhlIG5vaXNlLCBh
bmQgQ2hyb21lJ3MgcGFnZSBjeWNsaW5nIHRlc3RzIHdpdGgKKyAgICAgICAgdGhlIGFjaWQzIGJl
bmNobWFyayBzZXQsIHdoaWNoIHNob3dlZCBubyBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGF0IGFs
bC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyByZWZhY3RvcmluZyBjb2RlIG9u
bHkgYW5kIGhhcyBubyBpbXBhY3Qgb24gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGNzcy9D
U1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Z2V0Rm9udERh
dGEpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAoQ1NTRm9udEZhY2Up
OgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIGNzcy9DU1NGb250
RmFjZVNvdXJjZS5oOgorICAgICAgICAoQ1NTRm9udEZhY2VTb3VyY2UpOgorICAgICAgICAqIGNz
cy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udERhdGFGb3JHZW5l
cmljRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERh
dGEpOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3MvQ1NT
U2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kRm9udERhdGFX
aXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50
ZWRGb250RmFjZS5oOgorICAgICAgICAoQ1NTU2VnbWVudGVkRm9udEZhY2UpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJD
dXN0b21Gb250KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Tm9uUmV0YWluZWRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cmVsZWFzZUZvbnRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAoRm9udENhY2hlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZh
bGxiYWNrTGlzdDo6cmVsZWFzZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWxs
YmFja0xpc3Q6OmZvbnREYXRhQXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhbGxiYWNrTGlz
dDo6c2V0UGxhdGZvcm1Gb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFs
bGJhY2tMaXN0Lmg6CisgICAgICAgIChGb250RmFsbGJhY2tMaXN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
Z2x5cGhEYXRhQW5kUGFnZUZvckNoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdG9yLmg6CisgICAgICAgIChGb250U2VsZWN0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVu
dGVkRm9udERhdGE6OmZvbnREYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFS
YW5nZTo6Rm9udERhdGFSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YVJhbmdlOjpm
b250RGF0YSk6CisgICAgICAgIChGb250RGF0YVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
Z21lbnRlZEZvbnREYXRhOjpjcmVhdGUpOgorICAgICAgICAoU2VnbWVudGVkRm9udERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkRm9udERhdGE6OlNlZ21lbnRlZEZvbnREYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnVwcmlnaHRPcmllbnRhdGlv
bkZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVv
Z3JhcGhGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjcmVhdGUpOgorICAgICAg
ICAoU2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnZh
cmlhbnRGb250RGF0YSk6CisgICAgICAgIChEZXJpdmVkRm9udERhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRM
b2dGb250KToKKyAgICAgICAgKEdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnRQcm9jRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJv
bWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fw
c0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01h
cmtGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENh
Y2hlRnJlZVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0
YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFy
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3Rl
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5n
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9udERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udENhY2hlV2luQ0UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2lu
Q0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZv
bnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9u
dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKToK
KwogMjAxMi0xMC0wMSAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBDb25zb2xpZGF0ZSBtb3JlIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24gbG9naWMgaW4g
Tm9kZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCShyZXZpc2lvbiAxMzAwNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MSw3ICs5MSw3IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2FkZWQoQ1NTRm9udEZhY2UK
ICAgICBmb250U2VsZWN0b3ItPmZvbnRMb2FkZWQoKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIENT
U0ZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IENTU0ZvbnRGYWNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY0l0YWxpYykKIHsKICAgICBtX2FjdGl2ZVNvdXJjZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlk
KCkpCkBAIC0xMDIsOSArMTAyLDkgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlOjpnZXRG
b250RGF0YQogCiAgICAgc2l6ZV90IHNpemUgPSBtX3NvdXJjZXMuc2l6ZSgpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChTaW1wbGVGb250RGF0
YSogcmVzdWx0ID0gbV9zb3VyY2VzW2ldLT5nZXRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udFNlbGVjdG9yKSkgeworICAgICAgICBp
ZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiByZXN1bHQgPSBtX3NvdXJjZXNbaV0tPmdldEZvbnRE
YXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250
U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBtX2FjdGl2ZVNvdXJjZSA9IG1fc291cmNlc1tpXS5n
ZXQoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlLmgJKHJldmlzaW9uIDEzMDA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZm9udExvYWRlZChDU1NGb250RmFjZVNvdXJjZSopOwogCi0gICAgU2ltcGxlRm9udERhdGEq
IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwg
Ym9vbCBzeW50aGV0aWNJdGFsaWMpOworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMpOwogCiAgICAgc3RydWN0IFVuaWNvZGVSYW5nZSB7CiAgICAgICAg
IFVuaWNvZGVSYW5nZShVQ2hhcjMyIGZyb20sIFVDaGFyMzIgdG8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDEzMDA3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVO
b2RlLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCkBAIC05NSw3ICs5NCw3IEBAIHZvaWQgQ1NTRm9udEZhY2VTb3VyY2U6OmZvbnRMb2FkZWQo
Q2FjaGUKICAgICAgICAgbV9mYWNlLT5mb250TG9hZGVkKHRoaXMpOwogfQogCi1TaW1wbGVGb250
RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljLCBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IENTU0ZvbnRGYWNlU291cmNlOjpnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CiAgICAgLy8gSWYgdGhlIGZv
bnQgaGFzbid0IGxvYWRlZCBvciBhbiBlcnJvciBvY2N1cnJlZCwgdGhlbiB3ZSd2ZSBnb3Qgbm90
aGluZy4KICAgICBpZiAoIWlzVmFsaWQoKSkKQEAgLTExNCwxMSArMTEzLDkgQEAgU2ltcGxlRm9u
dERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgIHVuc2lnbmVkIGhhc2hLZXkgPSAo
Zm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCA2IHwgZm9udERlc2Ny
aXB0aW9uLndpZHRoVmFyaWFudCgpIDw8IDQKICAgICAgICAgICAgICAgICAgICAgICAgfCAoZm9u
dERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblVwcmlnaHQg
PyA4IDogMCkgfCAoZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyA0
IDogMCkgfCAoc3ludGhldGljQm9sZCA/IDIgOiAwKSB8IChzeW50aGV0aWNJdGFsaWMgPyAxIDog
MCk7CiAKLSAgICBTaW1wbGVGb250RGF0YSomIGNhY2hlZERhdGEgPSBtX2ZvbnREYXRhVGFibGUu
YWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgaWYgKGNhY2hlZERhdGEpCi0g
ICAgICAgIHJldHVybiBjYWNoZWREYXRhOwotCi0gICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBm
b250RGF0YTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+JiBmb250RGF0YSA9IG1fZm9udERh
dGFUYWJsZS5hZGQoaGFzaEtleSwgMCkuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBpZiAoZm9udERh
dGEpCisgICAgICAgIHJldHVybiBmb250RGF0YTsgLy8gTm8gcmVsZWFzZSwgYmVjYXVzZSBmb250
RGF0YSBpcyBhIHJlZmVyZW5jZSB0byBhIFJlZlB0ciB0aGF0IGlzIGhlbGQgaW4gdGhlIG1fZm9u
dERhdGFUYWJsZS4KIAogICAgIC8vIElmIHdlIGFyZSBzdGlsbCBsb2FkaW5nLCB0aGVuIHdlIGxl
dCB0aGUgc3lzdGVtIHBpY2sgYSBmb250LgogICAgIGlmIChpc0xvYWRlZCgpKSB7CkBAIC0xNTcs
NyArMTU0LDcgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdmdGb250RmFjZUVsZW1lbnQgPSBmb250RmFjZUVsZW1l
bnQ7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmb250RGF0
YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShTVkdGb250RGF0YTo6Y3JlYXRlKGZvbnRG
YWNlRWxlbWVudCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERhdGEg
PSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKFNWR0ZvbnREYXRhOjpjcmVhdGUoZm9udEZhY2VFbGVt
ZW50KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY0l0YWxpYyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
CiAjZW5kaWYKQEAgLTE2NiwxNCArMTYzLDE0IEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFj
ZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgICAgICAgICBpZiAoIW1fZm9udC0+ZW5zdXJlQ3VzdG9t
Rm9udERhdGEoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAg
ICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShtX2ZvbnQtPnBsYXRm
b3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgp
LCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnREZXNjcmlwdGlvbi5vcmllbnRh
dGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24udGV4dE9y
aWVudGF0aW9uKCksIGZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgZm9udERlc2NyaXB0
aW9uLnJlbmRlcmluZ01vZGUoKSksIHRydWUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgZm9u
dERhdGEgPSBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKG1fZm9udC0+cGxhdGZvcm1EYXRhRnJvbUN1
c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0Jv
bGQsIHN5bnRoZXRpY0l0YWxpYywKKyAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
Lm9yaWVudGF0aW9uKCksIGZvbnREZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSwgZm9udERl
c2NyaXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24ucmVuZGVyaW5nTW9kZSgp
KSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogI2lmIEVO
QUJMRShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMKICAg
ICAgICAgICAgIGlmIChtX3N2Z0ZvbnRGYWNlRWxlbWVudCkKLSAgICAgICAgICAgICAgICBmb250
RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShTVkdGb250RGF0YTo6Y3JlYXRlKG1f
c3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxT
aXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgICAgICAgICAgICAg
IGZvbnREYXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShTVkdGb250RGF0YTo6Y3JlYXRlKG1f
c3ZnRm9udEZhY2VFbGVtZW50LmdldCgpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxT
aXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYyk7CiAjZW5kaWYKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CkBAIC0xODQsMTUgKzE4MSwxNSBAQCBTaW1wbGVGb250RGF0YSogQ1NT
Rm9udEZhY2VTb3VyY2U6OmdldEZvCiAgICAgICAgIC8vIFRoaXMgdGVtcG9yYXJ5IGZvbnQgaXMg
bm90IHJldGFpbmVkIGFuZCBzaG91bGQgbm90IGJlIHJldHVybmVkLgogICAgICAgICBGb250Q2Fj
aGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKICAgICAgICAgU2ltcGxl
Rm9udERhdGEqIHRlbXBvcmFyeUZvbnQgPSBmb250Q2FjaGUoKS0+Z2V0Tm9uUmV0YWluZWRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIGZvbnREYXRhID0g
YWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKHRlbXBvcmFyeUZvbnQtPnBsYXRmb3JtRGF0YSgp
LCB0cnVlLCB0cnVlKSk7CisgICAgICAgIGZvbnREYXRhID0gU2ltcGxlRm9udERhdGE6OmNyZWF0
ZSh0ZW1wb3JhcnlGb250LT5wbGF0Zm9ybURhdGEoKSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgfQogCi0g
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZvbnRTZWxlY3Rvci0+ZG9jdW1lbnQoKSkgewot
ICAgICAgICBjYWNoZWREYXRhID0gZm9udERhdGEuZ2V0KCk7Ci0gICAgICAgIGRvY3VtZW50LT5y
ZWdpc3RlckN1c3RvbUZvbnQoZm9udERhdGEucmVsZWFzZSgpKTsKLSAgICB9CisgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZvbnRTZWxlY3Rvci0+ZG9jdW1lbnQoKSkKKyAgICAgICAgZG9j
dW1lbnQtPnJlZ2lzdGVyQ3VzdG9tRm9udChmb250RGF0YSk7CisgICAgZWxzZQorICAgICAgICBm
b250RGF0YS5jbGVhcigpOwogCi0gICAgcmV0dXJuIGNhY2hlZERhdGE7CisgICAgcmV0dXJuIGZv
bnREYXRhOyAvLyBObyByZWxlYXNlLCBiZWNhdXNlIGZvbnREYXRhIGlzIGEgcmVmZXJlbmNlIHRv
IGEgUmVmUHRyIHRoYXQgaXMgaGVsZCBpbiB0aGUgbV9mb250RGF0YVRhYmxlLgogfQogCiAjaWYg
RU5BQkxFKFNWR19GT05UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJj
ZS5oCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgZm9udExvYWRlZChDYWNoZWRGb250Kik7CiAKLSAgICBTaW1wbGVGb250RGF0
YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKik7CisgICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgQ1NTRm9udFNlbGVjdG9yKik7
CiAKICAgICB2b2lkIHBydW5lVGFibGUoKTsKIApAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgog
ICAgIEF0b21pY1N0cmluZyBtX3N0cmluZzsgLy8gVVJJIGZvciByZW1vdGUsIGJ1aWx0LWluIGZv
bnQgbmFtZSBmb3IgbG9jYWwuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4g
bV9mb250OyAvLyBGb3IgcmVtb3RlIGZvbnRzLCBhIHBvaW50ZXIgdG8gb3VyIGNhY2hlZCByZXNv
dXJjZS4KICAgICBDU1NGb250RmFjZSogbV9mYWNlOyAvLyBPdXIgb3duaW5nIGZvbnQgZmFjZS4K
LSAgICBIYXNoTWFwPHVuc2lnbmVkLCBTaW1wbGVGb250RGF0YSo+IG1fZm9udERhdGFUYWJsZTsg
Ly8gVGhlIGhhc2gga2V5IGlzIGNvbXBvc2VkIG9mIHNpemUgc3ludGhldGljIHN0eWxlcy4KKyAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8U2ltcGxlRm9udERhdGE+ID4gbV9mb250RGF0YVRh
YmxlOyAvLyBUaGUgaGFzaCBrZXkgaXMgY29tcG9zZWQgb2Ygc2l6ZSBzeW50aGV0aWMgc3R5bGVz
LgogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50
PiBtX3N2Z0ZvbnRGYWNlRWxlbWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDcgKzM1MCw3IEBAIHZvaWQgQ1NT
Rm9udFNlbGVjdG9yOjpmb250Q2FjaGVJbnZhbGlkYXQKICAgICBkaXNwYXRjaEludmFsaWRhdGlv
bkNhbGxiYWNrcygpOwogfQogCi1zdGF0aWMgRm9udERhdGEqIGZvbnREYXRhRm9yR2VuZXJpY0Zh
bWlseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCitzdGF0aWMgUGFzc1JlZlB0
cjxGb250RGF0YT4gZm9udERhdGFGb3JHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5TmFtZSkKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUo
KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NjUsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGNvbXBhcmVGb250RmFjZXMoQ1NTRgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRm9udERh
dGEqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKK1Bhc3NSZWZQ
dHI8Rm9udERhdGE+IENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkK
IHsKICAgICBpZiAobV9mb250RmFjZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChmYW1pbHlO
YW1lLnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRT
ZWxlY3Rvci5oCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgdW5zaWduZWQgdmVyc2lvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1fdmVyc2lvbjsgfQogCi0gICAgdmlydHVhbCBGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZvbnREYXRhPiBnZXRGb250RGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIHZvaWQg
Y2xlYXJEb2N1bWVudCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50
ZWRGb250RmFjZS5jcHAJKHJldmlzaW9uIDEzMDA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDkgQEAg
dm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6YXBwZW5kRm9udEZhYwogICAgIG1fZm9udEZhY2Vz
LmFwcGVuZChmb250RmFjZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGVuZEZvbnREYXRhV2l0aElu
dmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoU2VnbWVudGVkRm9udERhdGEqIG5ld0ZvbnREYXRh
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZmFjZUZvbnREYXRhLCBjb25zdCBWZWN0b3I8Q1NTRm9u
dEZhY2U6OlVuaWNvZGVSYW5nZT4mIHJhbmdlcykKK3N0YXRpYyB2b2lkIGFwcGVuZEZvbnREYXRh
V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoU2VnbWVudGVkRm9udERhdGEqIG5ld0Zv
bnREYXRhLCBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBwcnBGYWNlRm9udERhdGEsIGNvbnN0
IFZlY3RvcjxDU1NGb250RmFjZTo6VW5pY29kZVJhbmdlPiYgcmFuZ2VzKQogeworICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gZmFjZUZvbnREYXRhID0gcHJwRmFjZUZvbnREYXRhOwogICAgIGlm
IChmYWNlRm9udERhdGEtPmlzTG9hZGluZygpKSB7CiAgICAgICAgIG5ld0ZvbnREYXRhLT5hcHBl
bmRSYW5nZShGb250RGF0YVJhbmdlKDAsIDAsIGZhY2VGb250RGF0YSkpOwogICAgICAgICByZXR1
cm47CkBAIC05OCw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEZvbnREYXRhV2l0aEludmFs
aWRVbmkKICAgICAgICAgbmV3Rm9udERhdGEtPmFwcGVuZFJhbmdlKEZvbnREYXRhUmFuZ2UocmFu
Z2VzW2pdLmZyb20oKSwgcmFuZ2VzW2pdLnRvKCksIGZhY2VGb250RGF0YSkpOwogfQogCi1Gb250
RGF0YSogQ1NTU2VnbWVudGVkRm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQorUGFzc1JlZlB0cjxGb250RGF0YT4gQ1NTU2VnbWVudGVk
Rm9udEZhY2U6OmdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQogewogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEwNiwx
MSArMTA3LDExIEBAIEZvbnREYXRhKiBDU1NTZWdtZW50ZWRGb250RmFjZTo6Z2V0Rm9udEQKICAg
ICBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFp
dHNNYXNrKCk7CiAgICAgdW5zaWduZWQgaGFzaEtleSA9ICgoZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkUGl4ZWxTaXplKCkgKyAxKSA8PCAoRm9udFRyYWl0c01hc2tXaWR0aCArIDEpKSB8ICgoZm9u
dERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyAxIDogMCkgPDwgRm9udFRy
YWl0c01hc2tXaWR0aCkgfCBkZXNpcmVkVHJhaXRzTWFzazsKIAotICAgIFNlZ21lbnRlZEZvbnRE
YXRhKiYgZm9udERhdGEgPSBtX2ZvbnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgUmVmUHRyPFNlZ21lbnRlZEZvbnREYXRhPiYgZm9udERhdGEgPSBtX2Zv
bnREYXRhVGFibGUuYWRkKGhhc2hLZXksIDApLml0ZXJhdG9yLT5zZWNvbmQ7CiAgICAgaWYgKGZv
bnREYXRhKQogICAgICAgICByZXR1cm4gZm9udERhdGE7CiAKLSAgICBPd25QdHI8U2VnbWVudGVk
Rm9udERhdGE+IG5ld0ZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNlZ21lbnRlZEZvbnREYXRhKTsK
KyAgICBmb250RGF0YSA9IFNlZ21lbnRlZEZvbnREYXRhOjpjcmVhdGUoKTsKIAogICAgIHVuc2ln
bmVkIHNpemUgPSBtX2ZvbnRGYWNlcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7IGkrKykgewpAQCAtMTE5LDE5ICsxMjAsMTkgQEAgRm9udERhdGEqIENTU1NlZ21l
bnRlZEZvbnRGYWNlOjpnZXRGb250RAogICAgICAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNr
ID0gbV9mb250RmFjZXNbaV0tPnRyYWl0c01hc2soKTsKICAgICAgICAgYm9vbCBzeW50aGV0aWNC
b2xkID0gISh0cmFpdHNNYXNrICYgKEZvbnRXZWlnaHQ2MDBNYXNrIHwgRm9udFdlaWdodDcwME1h
c2sgfCBGb250V2VpZ2h0ODAwTWFzayB8IEZvbnRXZWlnaHQ5MDBNYXNrKSkgJiYgKGRlc2lyZWRU
cmFpdHNNYXNrICYgKEZvbnRXZWlnaHQ2MDBNYXNrIHwgRm9udFdlaWdodDcwME1hc2sgfCBGb250
V2VpZ2h0ODAwTWFzayB8IEZvbnRXZWlnaHQ5MDBNYXNrKSk7CiAgICAgICAgIGJvb2wgc3ludGhl
dGljSXRhbGljID0gISh0cmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgKGRlc2ly
ZWRUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzayk7Ci0gICAgICAgIGlmIChjb25zdCBT
aW1wbGVGb250RGF0YSogZmFjZUZvbnREYXRhID0gbV9mb250RmFjZXNbaV0tPmdldEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSkgeworICAg
ICAgICBpZiAoUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmYWNlRm9udERhdGEgPSBtX2ZvbnRGYWNl
c1tpXS0+Z2V0Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWZhY2VGb250RGF0YS0+aXNTZWdtZW50
ZWQoKSk7Ci0gICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29kZVJhbmdl
SWZMb2FkaW5nKG5ld0ZvbnREYXRhLmdldCgpLCBmYWNlRm9udERhdGEsIG1fZm9udEZhY2VzW2ld
LT5yYW5nZXMoKSk7CisgICAgICAgICAgICBhcHBlbmRGb250RGF0YVdpdGhJbnZhbGlkVW5pY29k
ZVJhbmdlSWZMb2FkaW5nKGZvbnREYXRhLmdldCgpLCBmYWNlRm9udERhdGEucmVsZWFzZSgpLCBt
X2ZvbnRGYWNlc1tpXS0+cmFuZ2VzKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChuZXdG
b250RGF0YS0+bnVtUmFuZ2VzKCkpIHsKKyAgICBpZiAoZm9udERhdGEtPm51bVJhbmdlcygpKSB7
CiAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZvbnRTZWxlY3Rvci0+ZG9jdW1l
bnQoKSkgewotICAgICAgICAgICAgZm9udERhdGEgPSBuZXdGb250RGF0YS5nZXQoKTsKLSAgICAg
ICAgICAgIGRvY3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQobmV3Rm9udERhdGEucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5yZWdpc3RlckN1c3RvbUZvbnQoZm9udERhdGEpOwor
ICAgICAgICAgICAgcmV0dXJuIGZvbnREYXRhOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0
dXJuIGZvbnREYXRhOworICAgIHJldHVybiAwOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAkocmV2aXNpb24gMTMwMDcxKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBlbmRGb250RmFjZShQYXNzUmVmUHRy
PENTU0ZvbnRGYWNlPik7CiAKLSAgICBGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJik7CisgICAgUGFzc1JlZlB0cjxGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJik7CiAKIHByaXZhdGU6CiAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2Uo
Q1NTRm9udFNlbGVjdG9yKik7CkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3Q7CiAKICAgICBDU1NGb250U2VsZWN0b3IqIG1fZm9udFNlbGVjdG9yOwot
ICAgIEhhc2hNYXA8dW5zaWduZWQsIFNlZ21lbnRlZEZvbnREYXRhKj4gbV9mb250RGF0YVRhYmxl
OworICAgIEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxTZWdtZW50ZWRGb250RGF0YT4gPiBtX2Zv
bnREYXRhVGFibGU7CiAgICAgVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4sIDE+IG1fZm9udEZh
Y2VzOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMzAwNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTc0LDcgKzE5NzQsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBEb2N1bWVudDo6c3R5bGVG
CiAgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0
ZXJDdXN0b21Gb250KFBhc3NPd25QdHI8Rm9udERhdGE+IGZvbnREYXRhKQordm9pZCBEb2N1bWVu
dDo6cmVnaXN0ZXJDdXN0b21Gb250KFBhc3NSZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhKQogewog
ICAgIG1fY3VzdG9tRm9udHMuYXBwZW5kKGZvbnREYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDcgKzU0MCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0
cyhFbGVtZW50Kik7CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdlKGlu
dCBwYWdlSW5kZXgpOwogCi0gICAgdm9pZCByZWdpc3RlckN1c3RvbUZvbnQoUGFzc093blB0cjxG
b250RGF0YT4pOworICAgIHZvaWQgcmVnaXN0ZXJDdXN0b21Gb250KFBhc3NSZWZQdHI8Rm9udERh
dGE+KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBwYWdlIGJveCAobWFyZ2luIGJveGVzIGFu
ZCBwYWdlIGJvcmRlcnMpIGlzIHZpc2libGUuCiAgICAgYm9vbCBpc1BhZ2VCb3hWaXNpYmxlKGlu
dCBwYWdlSW5kZXgpOwpAQCAtMTI1Niw3ICsxMjU2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBkbyBl
dmVudHVhbGx5IGxvYWQuCiAgICAgUGVuZGluZ1NoZWV0TGF5b3V0IG1fcGVuZGluZ1NoZWV0TGF5
b3V0OwogCi0gICAgVmVjdG9yPE93blB0cjxGb250RGF0YT4gPiBtX2N1c3RvbUZvbnRzOworICAg
IFZlY3RvcjxSZWZQdHI8Rm9udERhdGE+ID4gbV9jdXN0b21Gb250czsKIAogICAgIEZyYW1lKiBt
X2ZyYW1lOwogICAgIFJlZlB0cjxET01XaW5kb3c+IG1fZG9tV2luZG93OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMTMwMDcxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw2IEBAIGNsYXNzIEZvbnRNZXRyaWNzOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsK
IGNsYXNzIEZvbnRTZWxlY3RvcjsKIGNsYXNzIEdseXBoQnVmZmVyOwotY2xhc3MgR2x5cGhQYWdl
VHJlZU5vZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBSZW5kZXJUZXh0OwogY2xh
c3MgVGV4dExheW91dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTMwMDcxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NiBAQAogI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKICNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdl
VHJlZU5vZGUuaCIKICNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgogI2luY2x1ZGUg
IldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0y
ODYsNyArMjg1LDcgQEAgc3RydWN0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6Okdlbgog
ICAgIH0KIH07CiAKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBwYWlyPFNpbXBs
ZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNo
ZUtleVRyYWl0cz4gRm9udERhdGFDYWNoZTsKK3R5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1E
YXRhLCBwYWlyPFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIHVuc2lnbmVkPiwgRm9udERhdGFDYWNo
ZUtleUhhc2gsIEZvbnREYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7CiAKIHN0YXRp
YyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7CiAKQEAgLTI5Nyw5ICsyOTYsOSBA
QCBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCBpbnQgY01h
eEluYWN0aXZlRm9udERhdGEgPSA1MDsgLy8gUHJldHR5IExvdyBUaHJlc2hvbGQKIGNvbnN0IGlu
dCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDMwOwogI2VuZGlmCi1zdGF0aWMgTGlzdEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZ0luYWN0aXZlRm9udERhdGEgPSAwOworc3RhdGlj
IExpc3RIYXNoU2V0PFJlZlB0cjxTaW1wbGVGb250RGF0YT4gPiogZ0luYWN0aXZlRm9udERhdGEg
PSAwOwogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0
YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRDYWNoZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQogewogICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEpCkBAIC0zMDgsNyArMzA3LDcg
QEAgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udAogICAgIHJldHVybiBn
ZXRDYWNoZWRGb250RGF0YShwbGF0Zm9ybURhdGEsIHNob3VsZFJldGFpbik7CiB9CiAKLVNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEqIHBsYXRmb3JtRGF0YSwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQog
ewogICAgIGlmICghcGxhdGZvcm1EYXRhKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMyMCwxNiAr
MzE5LDE2IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnQKIAogICAg
IGlmICghZ0ZvbnREYXRhQ2FjaGUpIHsKICAgICAgICAgZ0ZvbnREYXRhQ2FjaGUgPSBuZXcgRm9u
dERhdGFDYWNoZTsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGEgPSBuZXcgTGlzdEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPjsKKyAgICAgICAgZ0luYWN0aXZlRm9udERhdGEgPSBuZXcg
TGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPiA+OwogICAgIH0KIAogICAgIEZvbnRE
YXRhQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdGb250RGF0YUNhY2hlLT5maW5kKCpwbGF0Zm9y
bURhdGEpOwogICAgIGlmIChyZXN1bHQgPT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKSB7Ci0gICAg
ICAgIHBhaXI8U2ltcGxlRm9udERhdGEqLCB1bnNpZ25lZD4gbmV3VmFsdWUobmV3IFNpbXBsZUZv
bnREYXRhKCpwbGF0Zm9ybURhdGEpLCBzaG91bGRSZXRhaW4gPT0gUmV0YWluID8gMSA6IDApOwor
ICAgICAgICBwYWlyPFJlZlB0cjxTaW1wbGVGb250RGF0YT4sIHVuc2lnbmVkPiBuZXdWYWx1ZShT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKCpwbGF0Zm9ybURhdGEpLCBzaG91bGRSZXRhaW4gPT0gUmV0
YWluID8gMSA6IDApOwogICAgICAgICBnRm9udERhdGFDYWNoZS0+c2V0KCpwbGF0Zm9ybURhdGEs
IG5ld1ZhbHVlKTsKICAgICAgICAgaWYgKHNob3VsZFJldGFpbiA9PSBEb05vdFJldGFpbikKICAg
ICAgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhLT5hZGQobmV3VmFsdWUuZmlyc3QpOwotICAgICAg
ICByZXR1cm4gbmV3VmFsdWUuZmlyc3Q7CisgICAgICAgIHJldHVybiBuZXdWYWx1ZS5maXJzdC5y
ZWxlYXNlKCk7CiAgICAgfQogCiAgICAgaWYgKCFyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQp
IHsKQEAgLTM1MCw3ICszNDksNyBAQCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNo
ZWRGb250CiAKIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldE5vblJldGFpbmVkTGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikK
IHsKLSAgICByZXR1cm4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24s
IERvTm90UmV0YWluKTsKKyAgICByZXR1cm4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250
RGVzY3JpcHRpb24sIERvTm90UmV0YWluKS5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRm9udENhY2hl
OjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQpAQCAtMzYz
LDcgKzM2Miw3IEBAIHZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgU2kKIAog
ICAgIEFTU0VSVChpdC0+c2Vjb25kLnNlY29uZCk7CiAgICAgaWYgKCEtLWl0LT5zZWNvbmQuc2Vj
b25kKQotICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+YWRkKGZvbnREYXRhKTsKKyAgICAgICAg
Z0luYWN0aXZlRm9udERhdGEtPmFkZChpdC0+c2Vjb25kLmZpcnN0KTsKIH0KIAogdm9pZCBGb250
Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKQEAgLTM4MywxMSArMzgyLDEx
IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW4KIAogICAgIGlzUHVy
Z2luZyA9IHRydWU7CiAKLSAgICBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqLCAyMD4gZm9u
dERhdGFUb0RlbGV0ZTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpp
dGVyYXRvciBlbmQgPSBnSW5hY3RpdmVGb250RGF0YS0+ZW5kKCk7Ci0gICAgTGlzdEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0YS0+
YmVnaW4oKTsKKyAgICBWZWN0b3I8UmVmUHRyPFNpbXBsZUZvbnREYXRhPiwgMjA+IGZvbnREYXRh
VG9EZWxldGU7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPFNpbXBsZUZvbnREYXRhPiA+OjppdGVy
YXRvciBlbmQgPSBnSW5hY3RpdmVGb250RGF0YS0+ZW5kKCk7CisgICAgTGlzdEhhc2hTZXQ8UmVm
UHRyPFNpbXBsZUZvbnREYXRhPiA+OjppdGVyYXRvciBpdCA9IGdJbmFjdGl2ZUZvbnREYXRhLT5i
ZWdpbigpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgJiYgaXQgIT0gZW5kOyArK2l0
LCArK2kpIHsKLSAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gKml0Lmdl
dCgpOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+JiBmb250RGF0YSA9ICppdC5nZXQo
KTsKICAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPnJlbW92ZShmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkpOwogICAgICAgICAvLyBXZSBzaG91bGQgbm90IGRlbGV0ZSBTaW1wbGVGb250RGF0YSBoZXJl
IGJlY2F1c2UgZGVsZXRpb24gY2FuIG1vZGlmeSBnSW5hY3RpdmVGb250RGF0YS4gU2VlIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzQ0MDExCiAgICAgICAgIGZvbnREYXRhVG9EZWxl
dGUuYXBwZW5kKGZvbnREYXRhKTsKQEAgLTQwMSw5ICs0MDAsNyBAQCB2b2lkIEZvbnRDYWNoZTo6
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluCiAgICAgICAgICAgICBnSW5hY3RpdmVGb250RGF0YS0+
cmVtb3ZlKGdJbmFjdGl2ZUZvbnREYXRhLT5iZWdpbigpKTsKICAgICB9CiAKLSAgICBzaXplX3Qg
Zm9udERhdGFUb0RlbGV0ZUNvdW50ID0gZm9udERhdGFUb0RlbGV0ZS5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmb250RGF0YVRvRGVsZXRlQ291bnQ7ICsraSkKLSAgICAgICAg
ZGVsZXRlIGZvbnREYXRhVG9EZWxldGVbaV07CisgICAgZm9udERhdGFUb0RlbGV0ZS5jbGVhcigp
OwogCiAgICAgaWYgKGdGb250UGxhdGZvcm1EYXRhQ2FjaGUpIHsKICAgICAgICAgVmVjdG9yPEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleT4ga2V5c1RvUmVtb3ZlOwpAQCAtNDYyLDkgKzQ1OSw5IEBA
IHNpemVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9udERhdGFDb3VudCgKICAgICByZXR1cm4gMDsK
IH0KIAotY29uc3QgRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGEoY29uc3QgRm9udCYg
Zm9udCwgaW50JiBmYW1pbHlJbmRleCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCitQYXNz
UmVmUHRyPEZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhKGNvbnN0IEZvbnQmIGZvbnQs
IGludCYgZmFtaWx5SW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogewotICAgIEZv
bnREYXRhKiByZXN1bHQgPSAwOworICAgIFJlZlB0cjxGb250RGF0YT4gcmVzdWx0OwogCiAgICAg
aW50IHN0YXJ0SW5kZXggPSBmYW1pbHlJbmRleDsKICAgICBjb25zdCBGb250RmFtaWx5KiBzdGFy
dEZhbWlseSA9ICZmb250LmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpOwpAQCAtNDk4LDE0ICs0
OTUsMTQgQEAgY29uc3QgRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGEoYwogCiAgICAg
ICAgIGlmIChmb250U2VsZWN0b3IpIHsKICAgICAgICAgICAgIC8vIFRyeSB0aGUgdXNlcidzIHBy
ZWZlcnJlZCBzdGFuZGFyZCBmb250LgotICAgICAgICAgICAgaWYgKEZvbnREYXRhKiBkYXRhID0g
Zm9udFNlbGVjdG9yLT5nZXRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBzdGFuZGFy
ZEZhbWlseSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICBpZiAo
UmVmUHRyPEZvbnREYXRhPiBkYXRhID0gZm9udFNlbGVjdG9yLT5nZXRGb250RGF0YShmb250LmZv
bnREZXNjcmlwdGlvbigpLCBzdGFuZGFyZEZhbWlseSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGEucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gU3RpbGwgbm8gcmVzdWx0
LiAgSGFuZCBiYWNrIG91ciBsYXN0IHJlc29ydCBmYWxsYmFjayBmb250LgogICAgICAgICByZXN1
bHQgPSBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnQuZm9udERlc2NyaXB0aW9uKCkpOwog
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
fQogCiBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0NsaWVudHM7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkocmV2aXNpb24gMTMw
MDcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KQEAg
LTYxLDExICs2MywxMSBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFNob3VsZFJldGFpbiB7IFJldGFp
biwgRG9Ob3RSZXRhaW4gfTsKIAotICAgIGNvbnN0IEZvbnREYXRhKiBnZXRGb250RGF0YShjb25z
dCBGb250JiwgaW50JiBmYW1pbHlJbmRleCwgRm9udFNlbGVjdG9yKik7CisgICAgUGFzc1JlZlB0
cjxGb250RGF0YT4gZ2V0Rm9udERhdGEoY29uc3QgRm9udCYsIGludCYgZmFtaWx5SW5kZXgsIEZv
bnRTZWxlY3RvciopOwogICAgIHZvaWQgcmVsZWFzZUZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnRE
YXRhKik7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZv
cm0uCi0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOworICAgIFBh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBG
b250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpOwogCiAgICAgLy8gQWxz
byBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCiAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsK
QEAgLTg1LDggKzg3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBnZXRUcmFpdHNJbkZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+Jik7CiAKLSAgICBTaW1wbGVGb250
RGF0YSogZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bWljU3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSwgU2hvdWxkUmV0
YWluID0gUmV0YWluKTsKLSAgICBTaW1wbGVGb250RGF0YSogZ2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOworICAg
IFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVO
YW1lID0gZmFsc2UsIFNob3VsZFJldGFpbiA9IFJldGFpbik7CisgICAgUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBTaG91bGRSZXRhaW4gPSBSZXRhaW4pOwogICAgIFNpbXBsZUZvbnREYXRhKiBnZXROb25S
ZXRhaW5lZExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAK
ICAgICB2b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKQEAgLTEwMCw5ICsxMDIsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50ID0gSU5UX01B
WCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRh
aW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUp
OworICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhRnJvbURlc2NyaXB0aW9u
QW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRSZXRhaW4sIGNvbnN0IExP
R0ZPTlQmLCBBdG9taWNTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbGlmIFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhXSU5ET1dTKQotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkUmV0
YWluLCBjb25zdCBMT0dGT05UJiBmb250LCB3Y2hhcl90KiBvdXRGb250RmFtaWx5TmFtZSk7Cisg
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRM
b2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFNob3VsZFJldGFpbiwgY29uc3QgTE9HRk9O
VCYsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9Q
RU5UWVBFX1ZFUlRJQ0FMKQpAQCAtMTM5LDEwICsxNDEsMTAgQEAgcHJpdmF0ZToKICAgICBGb250
UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRl
TmFtZSA9IGZhbHNlKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5
IGVhY2ggcGxhdGZvcm0uCi0gICAgU2ltcGxlRm9udERhdGEqIGdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnQmKTsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBnZXRT
aW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250Jik7CiAgICAgRm9udFBsYXRmb3JtRGF0
YSogY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSk7CiAKLSAgICBTaW1wbGVGb250RGF0YSogZ2V0Q2FjaGVkRm9u
dERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSosIFNob3VsZFJldGFpbiA9IFJldGFpbik7Cisg
ICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gZ2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSosIFNob3VsZFJldGFpbiA9IFJldGFpbik7CiAKICAgICAvLyBEb24ndCBw
dXJnZSBpZiB0aGlzIGNvdW50IGlzID4gMDsKICAgICBpbnQgbV9wdXJnZVByZXZlbnRDb3VudDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaAkocmV2
aXNpb24gMTMwMDcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDE1IEBACiAjaW5jbHVkZSA8d3RmL0Zh
c3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2ltcGxlRm9udERhdGE7CiAKLWNsYXNzIEZvbnREYXRh
IHsKK2NsYXNzIEZvbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udERhdGE+IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShGb250RGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIEZvbnREYXRhKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCShyZXZpc2lvbiAxMzAwNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsOSBAQCB2b2lkIEZvbnRGYWxsYmFja0xpc3Q6
OnJlbGVhc2VGb250RGF0YSgpCiB7CiAgICAgdW5zaWduZWQgbnVtRm9udHMgPSBtX2ZvbnRMaXN0
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRm9udHM7ICsraSkgewot
ICAgICAgICBpZiAoIW1fZm9udExpc3RbaV0uc2Vjb25kKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IW1fZm9udExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVkKCkpOwotICAgICAgICAgICAgZm9udENh
Y2hlKCktPnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KG1fZm9udExpc3RbaV0uZmlyc3QpKTsKKyAgICAgICAgaWYgKCFtX2ZvbnRMaXN0W2ldLT5pc0N1
c3RvbUZvbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX2ZvbnRMaXN0W2ldLT5pc1NlZ21l
bnRlZCgpKTsKKyAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEoc3RhdGlj
X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2ZvbnRMaXN0W2ldLmdldCgpKSk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgRm9udEZhbGxiYWNrTGlzdDo6
ZGV0ZXJtaW5lUGl0Y2goY28KIGNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250
RGF0YUF0KGNvbnN0IEZvbnQqIGZvbnQsIHVuc2lnbmVkIHJlYWxpemVkRm9udEluZGV4KSBjb25z
dAogewogICAgIGlmIChyZWFsaXplZEZvbnRJbmRleCA8IG1fZm9udExpc3Quc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gbV9mb250TGlzdFtyZWFsaXplZEZvbnRJbmRleF0uZmlyc3Q7IC8vIFRoaXMg
ZmFsbGJhY2sgZm9udCBpcyBhbHJlYWR5IGluIG91ciBsaXN0LgorICAgICAgICByZXR1cm4gbV9m
b250TGlzdFtyZWFsaXplZEZvbnRJbmRleF0uZ2V0KCk7IC8vIFRoaXMgZmFsbGJhY2sgZm9udCBp
cyBhbHJlYWR5IGluIG91ciBsaXN0LgogCiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBwYXNz
aW5nIGluIHNvbWUgY3JhenkgdmFsdWUgaGVyZS4KICAgICBBU1NFUlQocmVhbGl6ZWRGb250SW5k
ZXggPT0gbV9mb250TGlzdC5zaXplKCkpOwpAQCAtMTA0LDIxICsxMDQsMjEgQEAgY29uc3QgRm9u
dERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6OmZvbnREYQogICAgIC8vIGluIHxtX2ZhbWlseUluZGV4
fCwgc28gdGhhdCB3ZSBuZXZlciBzY2FuIHRoZSBzYW1lIHNwb3QgaW4gdGhlIGxpc3QgdHdpY2Uu
ICBnZXRGb250RGF0YSB3aWxsIGFkanVzdCBvdXIKICAgICAvLyB8bV9mYW1pbHlJbmRleHwgYXMg
aXQgc2NhbnMgZm9yIHRoZSByaWdodCBmb250IHRvIG1ha2UuCiAgICAgQVNTRVJUKGZvbnRDYWNo
ZSgpLT5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKLSAgICBjb25zdCBGb250RGF0YSog
cmVzdWx0ID0gZm9udENhY2hlKCktPmdldEZvbnREYXRhKCpmb250LCBtX2ZhbWlseUluZGV4LCBt
X2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgUmVmUHRyPEZvbnREYXRhPiByZXN1bHQgPSBmb250
Q2FjaGUoKS0+Z2V0Rm9udERhdGEoKmZvbnQsIG1fZmFtaWx5SW5kZXgsIG1fZm9udFNlbGVjdG9y
LmdldCgpKTsKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIG1fZm9udExpc3QuYXBwZW5kKHBh
aXI8Y29uc3QgRm9udERhdGEqLCBib29sPihyZXN1bHQsIHJlc3VsdC0+aXNDdXN0b21Gb250KCkp
KTsKKyAgICAgICAgbV9mb250TGlzdC5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3Vs
dC0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICBtX2xvYWRpbmdDdXN0b21Gb250cyA9IHRydWU7
CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKIH0K
IAogdm9pZCBGb250RmFsbGJhY2tMaXN0OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewogICAgIG1fZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxp
ZXNTY2FubmVkOwogICAgIEFTU0VSVChmb250Q2FjaGUoKS0+Z2VuZXJhdGlvbigpID09IG1fZ2Vu
ZXJhdGlvbik7Ci0gICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gZm9udENhY2hlKCktPmdl
dENhY2hlZEZvbnREYXRhKCZwbGF0Zm9ybURhdGEpOwotICAgIG1fZm9udExpc3QuYXBwZW5kKHBh
aXI8Y29uc3QgRm9udERhdGEqLCBib29sPihmb250RGF0YSwgZm9udERhdGEtPmlzQ3VzdG9tRm9u
dCgpKSk7CisgICAgUmVmUHRyPEZvbnREYXRhPiBmb250RGF0YSA9IGZvbnRDYWNoZSgpLT5nZXRD
YWNoZWRGb250RGF0YSgmcGxhdGZvcm1EYXRhKTsKKyAgICBtX2ZvbnRMaXN0LmFwcGVuZChmb250
RGF0YSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYWxsYmFja0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmgJKHJldmlzaW9uIDEzMDA3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZWxlYXNlRm9udERhdGEo
KTsKIAotICAgIG11dGFibGUgVmVjdG9yPHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPiwgMT4g
bV9mb250TGlzdDsKKyAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Rm9udERhdGE+LCAxPiBtX2Zv
bnRMaXN0OwogICAgIG11dGFibGUgR2x5cGhQYWdlcyBtX3BhZ2VzOwogICAgIG11dGFibGUgR2x5
cGhQYWdlVHJlZU5vZGUqIG1fcGFnZVplcm87CiAgICAgbXV0YWJsZSBjb25zdCBTaW1wbGVGb250
RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHJldmlzaW9uIDEz
MDA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDggQEAgc3RkOjpwYWlyPEdseXBoRGF0YSwg
R2x5cGhQYWdlKj4gRm9udDo6ZwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZm9udERl
c2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpID09IFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmln
aHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
dmVydGljYWxSaWdodEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVu
dGF0aW9uRm9udERhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaFBhZ2VU
cmVlTm9kZSogdmVydGljYWxSaWdodE5vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENo
aWxkKHZlcnRpY2FsUmlnaHRGb250RGF0YSwgcGFnZU51bWJlcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEg
PSBkYXRhLmZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiB2ZXJ0aWNhbFJpZ2h0
Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodmVydGljYWxSaWdodEZvbnRE
YXRhLmdldCgpLCBwYWdlTnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlw
aFBhZ2UqIHZlcnRpY2FsUmlnaHRQYWdlID0gdmVydGljYWxSaWdodE5vZGUtPnBhZ2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodFBhZ2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhEYXRhIHZlcnRpY2FsUmlnaHREYXRhID0g
dmVydGljYWxSaWdodFBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKQEAgLTExMSw4ICsx
MTEsOCBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250OjpnCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9wYWlyKHZlcnRpY2FsUmln
aHREYXRhLCB2ZXJ0aWNhbFJpZ2h0UGFnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi50
ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHVwcmlnaHRGb250RGF0YSA9
IGRhdGEuZm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHVwcmlnaHROb2RlID0gR2x5cGhQ
YWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh1cHJpZ2h0Rm9udERhdGEsIHBhZ2VOdW1iZXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdXByaWdo
dEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdXByaWdodE5v
ZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHVwcmlnaHRGb250RGF0YS5nZXQo
KSwgcGFnZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlKiB1
cHJpZ2h0UGFnZSA9IHVwcmlnaHROb2RlLT5wYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHVwcmlnaHRQYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdseXBoRGF0YSB1cHJpZ2h0RGF0YSA9IHVwcmlnaHRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoYyk7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBh
Z2UqPiBGb250OjpnCiAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIHZhcmlhbnRGb250RGF0YSBmdW5jdGlvbiBzaG91bGQgbm90
IG5vcm1hbGx5IHJldHVybiAwLgogICAgICAgICAgICAgICAgICAgICAvLyBCdXQgaWYgaXQgZG9l
cywgd2Ugd2lsbCBqdXN0IHJlbmRlciB0aGUgY2FwaXRhbCBsZXR0ZXIgYmlnLgotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogdmFyaWFudEZvbnREYXRhID0gZGF0YS5m
b250RGF0YS0+dmFyaWFudEZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9udERhdGEg
PSBkYXRhLmZvbnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24sIHZhcmlh
bnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250RGF0YSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX3BhaXIoZGF0YSwgcGFnZSk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHZhcmlhbnROb2RlID0gR2x5cGhQYWdlVHJl
ZU5vZGU6OmdldFJvb3RDaGlsZCh2YXJpYW50Rm9udERhdGEsIHBhZ2VOdW1iZXIpOworICAgICAg
ICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdmFyaWFudE5vZGUgPSBHbHlwaFBhZ2VU
cmVlTm9kZTo6Z2V0Um9vdENoaWxkKHZhcmlhbnRGb250RGF0YS5nZXQoKSwgcGFnZU51bWJlcik7
CiAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZSogdmFyaWFudFBhZ2UgPSB2YXJpYW50Tm9k
ZS0+cGFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudFBhZ2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gdmFyaWFudFBhZ2UtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjKTsKQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGQ6OnBhaXI8R2x5cGhEYXRh
LCBHbHlwaFBhZ2UqPiBGb250OjpnCiAgICAgICAgIGNvZGVVbml0c1sxXSA9IFUxNl9UUkFJTChj
KTsKICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMjsKICAgICB9Ci0gICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGNoYXJhY3RlckZvbnREYXRhID0gZm9udENhY2hlKCktPmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycygqdGhpcywgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpOworICAgIFJlZlB0
cjxTaW1wbGVGb250RGF0YT4gY2hhcmFjdGVyRm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Rm9u
dERhdGFGb3JDaGFyYWN0ZXJzKCp0aGlzLCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCk7CiAg
ICAgaWYgKGNoYXJhY3RlckZvbnREYXRhKSB7CiAgICAgICAgIGlmIChjaGFyYWN0ZXJGb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhY2hhcmFjdGVy
Rm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkgJiYgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChj
KSkKICAgICAgICAgICAgIHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwpAQCAtMjA3
LDcgKzIwNyw3IEBAIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IEZvbnQ6OmcKICAg
ICB9CiAgICAgaWYgKGNoYXJhY3RlckZvbnREYXRhKSB7CiAgICAgICAgIC8vIEdvdCB0aGUgZmFs
bGJhY2sgZ2x5cGggYW5kIGZvbnQuCi0gICAgICAgIEdseXBoUGFnZSogZmFsbGJhY2tQYWdlID0g
R2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZChjaGFyYWN0ZXJGb250RGF0YSwgcGFnZU51
bWJlciktPnBhZ2UoKTsKKyAgICAgICAgR2x5cGhQYWdlKiBmYWxsYmFja1BhZ2UgPSBHbHlwaFBh
Z2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKGNoYXJhY3RlckZvbnREYXRhLmdldCgpLCBwYWdlTnVt
YmVyKS0+cGFnZSgpOwogICAgICAgICBHbHlwaERhdGEgZGF0YSA9IGZhbGxiYWNrUGFnZSAmJiBm
YWxsYmFja1BhZ2UtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKGMpID8gZmFsbGJhY2tQYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYykgOiBjaGFyYWN0ZXJGb250RGF0YS0+bWlzc2luZ0dseXBoRGF0
YSgpOwogICAgICAgICAvLyBDYWNoZSBpdCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHN5c3RlbSBm
YWxsYmFjayBhZ2FpbiBuZXh0IHRpbWUuCiAgICAgICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZh
cmlhbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxl
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRTZWxlY3Rvci5oCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2RlZmluZSBGb250U2VsZWN0b3JfaAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM5LDcgQEAgY2xhc3MgRm9udFNlbGVjdG9y
Q2xpZW50OwogY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVj
dG9yPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgeyB9Ci0gICAgdmly
dHVhbCBGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZv
bnREYXRhPiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZh
bGlkYXRlZCgpIHsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaFBhZ2VUcmVlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiAxMzAwNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjpp
bml0aWFsaXplUGFnZShjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHplcm9GaWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyB8PSBmaWxsKHBhZ2VU
b0ZpbGwsIGZyb20sIHRvIC0gZnJvbSwgYnVmZmVyICsgZnJvbSAqIChzdGFydCA8IDB4MTAwMDAg
PyAxIDogMiksICh0byAtIGZyb20pICogKHN0YXJ0IDwgMHgxMDAwMCA/IDEgOiAyKSwgcmFuZ2Uu
Zm9udERhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlR2x5cGhzIHw9IGZpbGwo
cGFnZVRvRmlsbCwgZnJvbSwgdG8gLSBmcm9tLCBidWZmZXIgKyBmcm9tICogKHN0YXJ0IDwgMHgx
MDAwMCA/IDEgOiAyKSwgKHRvIC0gZnJvbSkgKiAoc3RhcnQgPCAweDEwMDAwID8gMSA6IDIpLCBy
YW5nZS5mb250RGF0YSgpLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3Jh
dGNoUGFnZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0byA8PSAgc3Rh
dGljX2Nhc3Q8aW50PihHbHlwaFBhZ2U6OnNpemUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBqID0gZnJvbTsgaiA8IHRvOyBqKyspIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAJ
KHJldmlzaW9uIDEzMDA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nl
Z21lbnRlZEZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCBjb25z
dCBTaW1wbGVGb250RGF0YSogU2VnbWVudGVkRm9udERhdGE6CiAgICAgVmVjdG9yPEZvbnREYXRh
UmFuZ2U+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKICAgICBmb3IgKFZl
Y3RvcjxGb250RGF0YVJhbmdlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT5mcm9tKCkgPD0gYyAmJiBpdC0+
dG8oKSA+PSBjKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5mb250RGF0YSgpOworICAgICAgICAg
ICAgcmV0dXJuIGl0LT5mb250RGF0YSgpLmdldCgpOwogICAgIH0KLSAgICByZXR1cm4gbV9yYW5n
ZXNbMF0uZm9udERhdGEoKTsKKyAgICByZXR1cm4gbV9yYW5nZXNbMF0uZm9udERhdGEoKS5nZXQo
KTsKIH0KIAogYm9vbCBTZWdtZW50ZWRGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXIoVUNoYXIz
MiBjKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVu
dGVkRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TZWdtZW50ZWRGb250RGF0YS5oCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNpbXBsZUZvbnRE
YXRhOwogCiBzdHJ1Y3QgRm9udERhdGFSYW5nZSB7Ci0gICAgRm9udERhdGFSYW5nZShVQ2hhcjMy
IGZyb20sIFVDaGFyMzIgdG8sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKKyAgICBG
b250RGF0YVJhbmdlKFVDaGFyMzIgZnJvbSwgVUNoYXIzMiB0bywgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gZm9udERhdGEpCiAgICAgICAgIDogbV9mcm9tKGZyb20pCiAgICAgICAgICwgbV90
byh0bykKICAgICAgICAgLCBtX2ZvbnREYXRhKGZvbnREYXRhKQpAQCAtNDMsMTYgKzQzLDE4IEBA
IHN0cnVjdCBGb250RGF0YVJhbmdlIHsKIAogICAgIFVDaGFyMzIgZnJvbSgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJvbTsgfQogICAgIFVDaGFyMzIgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0g
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250
RGF0YTsgfQorICAgIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGF0YTsgfQogCiBwcml2YXRlOgogICAgIFVDaGFyMzIgbV9mcm9tOwog
ICAgIFVDaGFyMzIgbV90bzsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YTsK
KyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IG1fZm9udERhdGE7CiB9OwogCiBjbGFzcyBTZWdt
ZW50ZWRGb250RGF0YSA6IHB1YmxpYyBGb250RGF0YSB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U2VnbWVudGVkRm9udERhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTZWdtZW50ZWRGb250RGF0YSk7IH0KKwogICAgIHZpcnR1YWwgflNlZ21lbnRlZEZvbnREYXRh
KCk7CiAKICAgICB2b2lkIGFwcGVuZFJhbmdlKGNvbnN0IEZvbnREYXRhUmFuZ2UmIHJhbmdlKSB7
IG1fcmFuZ2VzLmFwcGVuZChyYW5nZSk7IH0KQEAgLTY0LDYgKzY2LDggQEAgcHVibGljOgogI2Vu
ZGlmCiAKIHByaXZhdGU6CisgICAgU2VnbWVudGVkRm9udERhdGEoKSB7IH0KKwogICAgIHZpcnR1
YWwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBp
bnQgbGVuZ3RoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gMTMwMDcxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzAsMzYgKzE3MCwzNiBAQCBib29sIFNpbXBsZUZvbnREYXRhOjppc1NlZ21l
bnRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TaW1wbGVGb250RGF0YSogU2lt
cGxlRm9udERhdGE6OnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjp2ZXJ0aWNhbFJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkK
ICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1
c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+dmVydGljYWxSaWdodE9y
aWVudGF0aW9uKSB7CiAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgdmVydGljYWxSaWdodFBsYXRm
b3JtRGF0YShtX3BsYXRmb3JtRGF0YSk7CiAgICAgICAgIHZlcnRpY2FsUmlnaHRQbGF0Zm9ybURh
dGEuc2V0T3JpZW50YXRpb24oSG9yaXpvbnRhbCk7Ci0gICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24gPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEo
dmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlLCB0cnVlKSk7
CisgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb24gPSBj
cmVhdGUodmVydGljYWxSaWdodFBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlLCB0
cnVlKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0
T3JpZW50YXRpb24uZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT52ZXJ0aWNh
bFJpZ2h0T3JpZW50YXRpb247CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6
dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3QK
IHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0
YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1f
ZGVyaXZlZEZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24pCi0gICAgICAgIG1fZGVyaXZlZEZv
bnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb24gPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEo
bV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSwgdHJ1ZSkpOwotICAgIHJldHVy
biBtX2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uLmdldCgpOworICAgICAgICBt
X2Rlcml2ZWRGb250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uID0gY3JlYXRlKG1fcGxhdGZvcm1E
YXRhLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UsIHRydWUpOworICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+dXByaWdodE9yaWVudGF0aW9uOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxl
Rm9udERhdGE6OmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3QKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpicm9rZW5JZGVvZ3JhcGhGb250RGF0YSgpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9u
dERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYg
KCFtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoKSB7Ci0gICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhLT5icm9rZW5JZGVvZ3JhcGggPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEo
bV9wbGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgICAgICBtX2Rlcml2
ZWRGb250RGF0YS0+YnJva2VuSWRlb2dyYXBoID0gY3JlYXRlKG1fcGxhdGZvcm1EYXRhLCBpc0N1
c3RvbUZvbnQoKSwgZmFsc2UpOwogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+YnJva2VuSWRl
b2dyYXBoLT5tX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPSB0cnVlOwogICAgIH0KLSAgICBy
ZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaC5nZXQoKTsKKyAgICByZXR1
cm4gbV9kZXJpdmVkRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaDsKIH0KIAogI2lmbmRlZiBOREVC
VUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaAkocmV2aXNpb24gMTMwMDcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTAgKzc5LDE2
IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgLy8gVXNlZCB0byBjcmVhdGUgcGxhdGZvcm0gZm9u
dHMuCi0gICAgU2ltcGxlRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXND
dXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3Jp
ZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gY3JlYXRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgYm9v
bCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250LCBpc0xv
YWRpbmcsIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spKTsKKyAgICB9CiAKICAgICAvLyBVc2Vk
IHRvIGNyZWF0ZSBTVkcgRm9udHMuCi0gICAgU2ltcGxlRm9udERhdGEoUGFzc093blB0cjxBZGRp
dGlvbmFsRm9udERhdGE+LCBmbG9hdCBmb250U2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29s
IHN5bnRoZXRpY0l0YWxpYyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IGNyZWF0ZShQYXNzT3duUHRyPEFkZGl0aW9uYWxGb250RGF0YT4gZm9udERhdGEsIGZsb2F0IGZv
bnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaW1wbGVGb250RGF0YShmb250RGF0YSwgZm9u
dFNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgIH0KIAogICAgIHZp
cnR1YWwgflNpbXBsZUZvbnREYXRhKCk7CiAKQEAgLTkxLDExICs5NywxMSBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgT3BlblR5cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmVydGljYWxEYXRhOyB9CiAjZW5kaWYKIAotICAgIFNpbXBsZUZvbnREYXRhKiBzbWFs
bENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBTaW1wbGVG
b250RGF0YSogZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29u
c3Q7Ci0gICAgU2ltcGxlRm9udERhdGEqIGJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gc21hbGxDYXBzRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2VuSWRlb2dyYXBoRm9udERhdGEoKSBjb25z
dDsKIAotICAgIFNpbXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0CisgICAg
UGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gdmFyaWFudEZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAogICAg
IHsKICAgICAgICAgc3dpdGNoICh2YXJpYW50KSB7CiAgICAgICAgIGNhc2UgU21hbGxDYXBzVmFy
aWFudDoKQEAgLTExMiw4ICsxMTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb25zdF9j
YXN0PFNpbXBsZUZvbnREYXRhKj4odGhpcyk7CiAgICAgfQogCi0gICAgU2ltcGxlRm9udERhdGEq
IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7Ci0gICAgU2ltcGxlRm9u
dERhdGEqIHVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKSBjb25z
dDsKKyAgICBQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50YXRpb25Gb250
RGF0YSgpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNWZXJ0aWNhbEdseXBocygpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVmVydGljYWxHbHlwaHM7IH0KICAgICBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFs
bGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7IH0KQEAg
LTIwMSw2ICsyMDcsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgU2ltcGxl
Rm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFs
c2UsIGJvb2wgaXNMb2FkaW5nID0gZmFsc2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFj
ayA9IGZhbHNlKTsKKworICAgIFNpbXBsZUZvbnREYXRhKFBhc3NPd25QdHI8QWRkaXRpb25hbEZv
bnREYXRhPiAsIGZsb2F0IGZvbnRTaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKKwogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAgICAgdm9pZCBwbGF0Zm9y
bUdseXBoSW5pdCgpOwogICAgIHZvaWQgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CkBAIC0yMTAs
NyArMjIwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tbW9uSW5pdCgpOwogCi0gICAgUGFz
c093blB0cjxTaW1wbGVGb250RGF0YT4gY3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKIAogI2lmIChQTEFURk9STShXSU4pICYmICFPUyhX
SU5DRSkpIFwKICAgICB8fCAoT1MoV0lORE9XUykgJiYgUExBVEZPUk0oV1gpKQpAQCAtMjU0LDEx
ICsyNjQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgfkRlcml2ZWRGb250RGF0YSgpOwogCiAgICAg
ICAgIGJvb2wgZm9yQ3VzdG9tRm9udDsKLSAgICAgICAgT3duUHRyPFNpbXBsZUZvbnREYXRhPiBz
bWFsbENhcHM7Ci0gICAgICAgIE93blB0cjxTaW1wbGVGb250RGF0YT4gZW1waGFzaXNNYXJrOwot
ICAgICAgICBPd25QdHI8U2ltcGxlRm9udERhdGE+IGJyb2tlbklkZW9ncmFwaDsKLSAgICAgICAg
T3duUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb247Ci0gICAgICAg
IE93blB0cjxTaW1wbGVGb250RGF0YT4gdXByaWdodE9yaWVudGF0aW9uOworICAgICAgICBSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IHNtYWxsQ2FwczsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBlbXBoYXNpc01hcms7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gYnJva2Vu
SWRlb2dyYXBoOworICAgICAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbjsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB1cHJpZ2h0T3JpZW50
YXRpb247CiAjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERB
UldJTikpCiAgICAgICAgIG11dGFibGUgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+
IGNvbXBvc2l0ZUZvbnRSZWZlcmVuY2VzOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVB
bmRyb2lkLmNwcAkocmV2aXNpb24gMTMwMDcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk3LDcgKzk3LDcgQEAgdm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiB7CiB9CiAKLWNv
bnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3Ro
KQogewogICAgIC8vIEZJWE1FOiBXZSBkbyBub3QgdXNlIGZvbnRjb25maWcgb24gQW5kcm9pZCwg
c28gdXNlIHNpbXBsZSBsb2dpYyBmb3Igbm93LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NzU4NwpAQCAtMTA1LDEyICsxMDUsMTIgQEAgY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udAogICAgIHJldHVybiBnZXRDYWNoZWRGb250
RGF0YShnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGF0
b21pY0ZhbWlseSwgRG9Ob3RSZXRhaW4pLCBEb05vdFJldGFpbik7CiB9CiAKLVNpbXBsZUZvbnRE
YXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZv
bnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4g
c2hvdWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3Ry
aW5nLCBzZXJpZiwgKCJTZXJpZiIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgbW9ub3NwYWNlLCAoIk1vbm9zcGFjZSIpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q2FjaGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDEzMDA3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzE4LDEyICszMTgsMTIgQEAgc3RhdGljIGJvb2wgZm9udENvbnRh
aW5zQ2hhcmFjdGVyKGNvbnN0CiB9CiAKIC8vIFRyaWVzIHRoZSBnaXZlbiBmb250IGFuZCBzYXZl
IGl0IHxvdXRGb250RmFtaWx5TmFtZXwgaWYgaXQgc3VjY2VlZHMuCi1TaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4sIGNv
bnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91dEZvbnRGYW1pbHlOYW1lKQorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFp
biBzaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIHdjaGFyX3QqIG91dEZvbnRGYW1p
bHlOYW1lKQogewotICAgIFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdldENhY2hlZEZvbnRE
YXRhKGZvbnREZXNjcmlwdGlvbiwgZm9udC5sZkZhY2VOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWlu
KTsKKyAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCBmb250LmxmRmFjZU5hbWUsIGZhbHNlLCBzaG91bGRSZXRhaW4p
OwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgbWVtY3B5KG91dEZvbnRGYW1pbHlOYW1lLCBm
b250LmxmRmFjZU5hbWUsIHNpemVvZihmb250LmxmRmFjZU5hbWUpKTsKLSAgICByZXR1cm4gZm9u
dERhdGE7CisgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIExPTkcg
dG9HRElGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKQEAgLTQwNiw3ICs0MDYsNyBA
QCBzdHJ1Y3QgR2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udFByb2NEYXRhCiAgICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uKiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBGb250Q2FjaGU6OlNob3VsZFJl
dGFpbiBtX3Nob3VsZFJldGFpbjsKICAgICB3Y2hhcl90KiBtX2ZvbnROYW1lOwotICAgIFNpbXBs
ZUZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gbV9mb250
RGF0YTsKIH07CiAKIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9u
dFByb2MoY29uc3QgTE9HRk9OVCogbG9nRm9udCwgY29uc3QgVEVYVE1FVFJJQyogbWV0cmljcywg
RFdPUkQgZm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBG
b250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiAKIC8vIEdpdmVuIHRoZSBkZXNpcmVkIGJhc2UgZm9u
dCwgdGhpcyB3aWxsIGNyZWF0ZSBhIFNpbXBsZUZvbnREYXRhIGZvciBhIHNwZWNpZmljCiAvLyBm
b250IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBnaXZlbiByYW5nZSBvZiBjaGFyYWN0
ZXJzLgotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgZm9udERlc2NyaXB0
aW9uLmRvbWluYW50U2NyaXB0KCkKICAgICAvLyB0byBHZXRGYWxsYmFja0ZhbWlseSBoZXJlLgpA
QCAtNTA4LDEyICs1MDgsMTIgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
Rm9udAogCiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBG
b250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hv
dWxkUmV0YWluIHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRD
YWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIEZvbnREZXNjcmlw
dGlvbjo6R2VuZXJpY0ZhbWlseVR5cGUgZ2VuZXJpYyA9IGRlc2NyaXB0aW9uLmdlbmVyaWNGYW1p
bHkoKTsKIApAQCAtNTMwLDkgKzUzMCw5IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dExhc3RSZXNvcnQKICAgICBlbHNlIGlmIChnZW5lcmljID09IEZvbnREZXNjcmlwdGlvbjo6TW9u
b3NwYWNlRmFtaWx5KQogICAgICAgICBmb250U3RyID0gY291cmllclN0cjsKIAotICAgIFNpbXBs
ZUZvbnREYXRhKiBzaW1wbGVGb250ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGZv
bnRTdHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4g
c2ltcGxlRm9udCA9IGdldENhY2hlZEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmb250U3RyLCBmYWxz
ZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoc2ltcGxlRm9udCkKLSAgICAgICAgcmV0dXJuIHNp
bXBsZUZvbnQ7CisgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKIAogICAgIC8v
IEZhbGwgYmFjayB0byBzeXN0ZW0gZm9udHMgYXMgV2luIFNhZmFyaSBkb2VzIGJlY2F1c2UgdGhp
cyBmdW5jdGlvbiBtdXN0CiAgICAgLy8gcmV0dXJuIGEgdmFsaWQgZm9udC4gT25jZSB3ZSBmaW5k
IGEgdmFsaWQgc3lzdGVtIGZvbnQsIHdlIHNhdmUgaXRzIG5hbWUKQEAgLTU0Niw3ICs1NDYsNyBA
QCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIExPR0ZP
TlQgZGVmYXVsdEdVSUxvZ0ZvbnQ7CiAgICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwg
c2l6ZW9mKGRlZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKICAgICAgICAg
aWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3Jp
cHRpb24sIHNob3VsZFJldGFpbiwgZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUp
KQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2lt
cGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgLy8gRmFsbCBiYWNrIHRvIE5vbi1jbGll
bnQgbWV0cmljcyBmb250cy4KQEAgLTU1NCwxNSArNTU0LDE1IEBAIFNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNp
emVvZihub25DbGllbnRNZXRyaWNzKTsKICAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJ
X0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVu
dE1ldHJpY3MsIDApKSB7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1l
dHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1
cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsK
ICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0Zv
bnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lbnVGb250
LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAg
ICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgICAgICBpZiAoc2ltcGxl
Rm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hv
dWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFsbGJhY2tGb250TmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAgIHJldHVybiBz
aW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgbm9uQ2xp
ZW50TWV0cmljcy5sZkNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAg
IHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQucmVsZWFz
ZSgpOwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5k
TG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmU21D
YXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxl
Rm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICB9CiAK
ICAgICAvLyBGYWxsIGJhY2sgdG8gYWxsIHRoZSBmb250cyBpbnN0YWxsZWQgaW4gdGhpcyBQQy4g
V2hlbiBhIGZvbnQgaGFzIGEKQEAgLTU3Niw3ICs1NzYsNyBAQCBTaW1wbGVGb250RGF0YSogRm9u
dENhY2hlOjpnZXRMYXN0UmVzb3J0CiAgICAgICAgIEVudW1Gb250RmFtaWxpZXMoZGMsIDAsIGdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnRQcm9jLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnBy
b2NEYXRhKSk7CiAKICAgICAgICAgaWYgKHByb2NEYXRhLm1fZm9udERhdGEpCi0gICAgICAgICAg
ICByZXR1cm4gcHJvY0RhdGEubV9mb250RGF0YTsKKyAgICAgICAgICAgIHJldHVybiBwcm9jRGF0
YS5tX2ZvbnREYXRhLnJlbGVhc2UoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBs
ZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCShy
ZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDM0ICsxMDksMzQgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsK
IH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNj
YWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgTE9HRk9OVCB3aW5G
b250OwogICAgIEdldE9iamVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9O
VCksICZ3aW5Gb250KTsKICAgICBmbG9hdCBzY2FsZWRTaXplID0gc2NhbGVGYWN0b3IgKiBmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCk7CiAgICAgd2luRm9udC5sZkhlaWdodCA9IC1scm91
bmRmKHNjYWxlZFNpemUpOwogICAgIEhGT05UIGhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZ3
aW5Gb250KTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0
Zm9ybURhdGEoaGZvbnQsIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkp
LCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNy
ZWF0ZShGb250UGxhdGZvcm1EYXRhKGhmb250LCBzY2FsZWRTaXplLCBtX3BsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0KIAotU2ltcGxlRm9udERh
dGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNp
bXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAg
ICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9t
Rm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMpCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250
RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxD
YXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzOwogfQog
Ci1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc093blB0cjxT
aW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnRE
YXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyayA9
IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUpOwogCi0gICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2ltcGxlRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDEzMDA3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZy
ZWVUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBGY1BhdHRlcm4qIGZp
bmRCZXN0Rm9udEdpdmVuRmFsbGJhY2tzKGNvCiAgICAgcmV0dXJuIEZjRm9udFNldE1hdGNoKDAs
IHNldHMsIDEsIHBhdHRlcm4sICZmb250Q29uZmlnUmVzdWx0KTsKIH0KIAotY29uc3QgU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxT
aW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAg
UmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9IGFkb3B0UmVmKGNyZWF0ZUZvbnRDb25maWdQYXR0
ZXJuRm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKICAgICBjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBmb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCk7
CkBAIC0xMDAsMTIgKzEwMCwxMiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRGb250CiAgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250RGF0YSwg
RG9Ob3RSZXRhaW4pOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFy
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+
IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYpCiB7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNo
b3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250
Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgLy8gV2Ug
d2FudCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMg
cHJldmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZv
bnRzIG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVl
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDEzMDA3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRh
RnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxNyArODcsMTYgQEAgdm9pZCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK1Bh
c3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLnNjYWxlZEZvbnQoKSk7
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRh
KGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9u
dCgpKSwKKyAgICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRh
KGNhaXJvX3NjYWxlZF9mb250X2dldF9mb250X2ZhY2UobV9wbGF0Zm9ybURhdGEuc2NhbGVkRm9u
dCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2NhbGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGxh
dGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1
ZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tRm9u
dCgpLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpLCBpc0N1c3Rv
bUZvbnQoKSwgZmFsc2UpOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNt
YWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBj
b25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fw
c0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAog
ewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
ID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwpAQCAtMTA1LDE3ICsx
MDQsMTcgQEAgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcAogICAgIGlm
ICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKICAgICAgICAgbV9kZXJpdmVkRm9udERh
dGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjcp
OwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAg
cmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRh
KiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBT
aW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkK
ICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1
c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQog
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9u
dERhdGEoZm9udERlc2NyaXB0aW9uLCAuNSk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVt
cGhhc2lzTWFyazsKIH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJz
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVU
ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQkocmV2aXNpb24gMTMwMDcxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsMTMgKzI4MiwxMyBAQCB2b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2ZvbnQu
cHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uICsgcnVuUmFuZ2UubG9jYXRpb24sIHJ1
blJhbmdlLmxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZv
bnREYXRhID0gZm9udENhY2hlKCktPmdldENhY2hlZEZvbnREYXRhKG1fZm9udC5mb250RGVzY3Jp
cHRpb24oKSwgZm9udE5hbWUuZ2V0KCksIGZhbHNlLCBGb250Q2FjaGU6OkRvTm90UmV0YWluKTsK
KyAgICAgICAgICAgICAgICAgICAgcnVuRm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVk
Rm9udERhdGEobV9mb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250TmFtZS5nZXQoKSwgZmFsc2Us
IEZvbnRDYWNoZTo6RG9Ob3RSZXRhaW4pLmdldCgpOwogI2lmICFQTEFURk9STShXWCkKICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29yZSBUZXh0IG1heSBoYXZlIHVzZWQgYSBmb250IHRoYXQgaXMg
bm90IGtub3duIHRvIE5TRm9udE1hbmFnZXIuIEluIHRoYXQgY2FzZSwgZmFsbCBiYWNrIG9uCiAg
ICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBmb250IGFzIHJldHVybmVkLCBldmVuIHRo
b3VnaCBpdCBtYXkgbm90IGhhdmUgdGhlIGJlc3QgTlNGb250UmVuZGVyaW5nTW9kZS4KICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFydW5Gb250RGF0YSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgRm9udFBsYXRmb3JtRGF0YSBydW5Gb250UGxhdGZvcm1EYXRhKChOU0ZvbnQgKilydW5Gb250
LCBDVEZvbnRHZXRTaXplKHJ1bkZvbnQpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkudXNlUHJp
bnRlckZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZvbnRD
YWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmcnVuRm9udFBsYXRmb3JtRGF0YSwgRm9udENhY2hl
OjpEb05vdFJldGFpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBydW5Gb250RGF0YSA9IGZv
bnRDYWNoZSgpLT5nZXRDYWNoZWRGb250RGF0YSgmcnVuRm9udFBsYXRmb3JtRGF0YSwgRm9udENh
Y2hlOjpEb05vdFJldGFpbikuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICNlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgYXNzZXJ0IGZvciBub3csIHVudGlsIHdlIGNhbiBk
ZXZpc2UgYSBiZXR0ZXIgZml4IHRoYXQgd29ya3Mgd2l0aCB3eC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkocmV2
aXNpb24gMTMwMDcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNBcHBLaXRGb250V2VpZ2h0Qm9sCiAgICAgcmV0dXJuIGFwcEtpdEZvbnRXZWln
aHQgPj0gNzsKIH0KIAotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERh
dGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRG
b250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CiAgICAgVTE2X0dF
VChjaGFyYWN0ZXJzLCAwLCAwLCBsZW5ndGgsIGNoYXJhY3Rlcik7CkBAIC0xNzIsMTIgKzE3Miwx
MiBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250CiAgICAgcmV0dXJu
IGdldENhY2hlZEZvbnREYXRhKCZhbHRlcm5hdGVGb250LCBEb05vdFJldGFpbik7CiB9CiAKLVNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnQmIGZvbnQpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNp
bWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgLy8gQXR0ZW1w
dCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiAKICAg
ICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4gdGhlIHRoZSByZXF1ZXN0ZWQgbmFtZXMu
ICBGb3IgZXhhbXBsZSwgd2UnbGwKICAgICAvLyBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5z
ICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAgICBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERh
dGEgPSAwOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGE7CiAgICAg
Y29uc3QgRm9udEZhbWlseSogY3VyckZhbWlseSA9ICZmb250LmZvbnREZXNjcmlwdGlvbigpLmZh
bWlseSgpOwogICAgIHdoaWxlIChjdXJyRmFtaWx5ICYmICFzaW1wbGVGb250RGF0YSkgewogICAg
ICAgICBpZiAoY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3RoKCkpIHsKQEAgLTE5MCwxOCArMTkw
LDE4IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb24KICAgICAgICAg
Y3VyckZhbWlseSA9IGN1cnJGYW1pbHktPm5leHQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gc2lt
cGxlRm9udERhdGE7CisgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAot
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJl
dGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hv
dWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21p
Y1N0cmluZywgdGltZXNTdHIsICgiVGltZXMiKSk7CiAKICAgICAvLyBGSVhNRTogV291bGQgYmUg
ZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4g
IEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291
bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIFNpbXBsZUZvbnREYXRhKiBz
aW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgdGltZXNT
dHIsIGZhbHNlLCBzaG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2lt
cGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIHRpbWVzU3Ry
LCBmYWxzZSwgc2hvdWxkUmV0YWluKTsKICAgICBpZiAoc2ltcGxlRm9udERhdGEpCi0gICAgICAg
IHJldHVybiBzaW1wbGVGb250RGF0YTsKKyAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhLnJl
bGVhc2UoKTsKIAogICAgIC8vIFRoZSBUaW1lcyBmYWxsYmFjayB3aWxsIGFsbW9zdCBhbHdheXMg
d29yaywgYnV0IGluIHRoZSBoaWdobHkgdW51c3VhbCBjYXNlIHdoZXJlCiAgICAgLy8gdGhlIHVz
ZXIgZG9lc24ndCBoYXZlIGl0LCB3ZSBmYWxsIGJhY2sgb24gTHVjaWRhIEdyYW5kZSBiZWNhdXNl
IHRoYXQncwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRD
b21wbGV4VGV4dE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAJKHJldmlzaW9uIDEzMDA3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMjEgKzE4OSwyMSBAQCBjb25zdCBTaW1wbGVGb250
RGF0YSogRm9udDo6Zm9udERhdGFGb3JDCiAgICAgICAgICAgICBpZiAoc2ltcGxlRm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAhc2ltcGxl
Rm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgdmFy
aWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHNpbXBs
ZUZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPmJyb2tlbklkZW9ncmFwaEZvbnREYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPmJyb2tl
bklkZW9ncmFwaEZvbnREYXRhKCkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICht
X2ZvbnREZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSA9PSBUZXh0T3JpZW50YXRpb25WZXJ0
aWNhbFJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB2ZXJ0aWNh
bFJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9u
Rm9udERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgU2ltcGxlRm9udERhdGEqIHZlcnRpY2Fs
UmlnaHRGb250RGF0YSA9IHNpbXBsZUZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpLmdldCgpOwogICAgICAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0
R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEtPmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFy
YWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEdseXBoID09IGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaW1w
bGVGb250RGF0YSA9IHZlcnRpY2FsUmlnaHRGb250RGF0YTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBTaW1wbGVGb250RGF0YSogdXByaWdodEZvbnREYXRh
ID0gc2ltcGxlRm9udERhdGEtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnREYXRhKCk7CisgICAgICAg
ICAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiB1cHJpZ2h0Rm9udERhdGEgPSBzaW1wbGVGb250
RGF0YS0+dXByaWdodE9yaWVudGF0aW9uRm9udERhdGEoKS5nZXQoKTsKICAgICAgICAgICAgICAg
ICAgICAgR2x5cGggdXByaWdodEdseXBoID0gdXByaWdodEZvbnREYXRhLT5nbHlwaEZvckNoYXJh
Y3RlcihiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcmlnaHRHbHlw
aCAhPSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgc2ltcGxlRm9udERhdGEgPSB1cHJpZ2h0Rm9udERhdGE7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiB2YXJpYW50Rm9udERhdGEgPSBzaW1wbGVGb250RGF0YS0+dmFyaWFudEZv
bnREYXRhKG1fZm9udERlc2NyaXB0aW9uLCB2YXJpYW50KSkKKyAgICAgICAgICAgIGlmIChjb25z
dCBTaW1wbGVGb250RGF0YSogdmFyaWFudEZvbnREYXRhID0gc2ltcGxlRm9udERhdGEtPnZhcmlh
bnRGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCkuZ2V0KCkpCiAgICAgICAgICAg
ICAgICAgc2ltcGxlRm9udERhdGEgPSB2YXJpYW50Rm9udERhdGE7CiAgICAgICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTMwMDcxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDgsMTkgKzMwOCwxOSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3koKQogICAgIGlmICghaXNDdXN0b21Gb250KCkgJiYgbV9kZXJpdmVkRm9udERhdGEpIHsKICAg
ICAgICAgLy8gVGhlc2UgY29tZSBmcm9tIHRoZSBjYWNoZS4KICAgICAgICAgaWYgKG1fZGVyaXZl
ZEZvbnREYXRhLT5zbWFsbENhcHMpCi0gICAgICAgICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZv
bnREYXRhKG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMubGVha1B0cigpKTsKKyAgICAgICAg
ICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEobV9kZXJpdmVkRm9udERhdGEtPnNtYWxs
Q2Fwcy5nZXQoKSk7CiAKICAgICAgICAgaWYgKG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01h
cmspCi0gICAgICAgICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKG1fZGVyaXZlZEZv
bnREYXRhLT5lbXBoYXNpc01hcmsubGVha1B0cigpKTsKKyAgICAgICAgICAgIGZvbnRDYWNoZSgp
LT5yZWxlYXNlRm9udERhdGEobV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKSk7
CiAgICAgfQogfQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
Y3JlYXRlU2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4g
U2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBpZiAo
aXNDdXN0b21Gb250KCkpIHsKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0
YShtX3BsYXRmb3JtRGF0YSk7CiAgICAgICAgIHNjYWxlZEZvbnREYXRhLm1fc2l6ZSA9IHNjYWxl
ZEZvbnREYXRhLm1fc2l6ZSAqIHNjYWxlRmFjdG9yOwotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFNpbXBsZUZvbnREYXRhKHNjYWxlZEZvbnREYXRhLCB0cnVlLCBmYWxzZSkpOworICAgICAg
ICByZXR1cm4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZShzY2FsZWRGb250RGF0YSwgdHJ1ZSwgZmFs
c2UpOwogICAgIH0KIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTM0NSwz
MSArMzQ1LDMxIEBAIFBhc3NPd25QdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXQKICAg
ICAgICAgc2NhbGVkRm9udERhdGEubV9zeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBO
U0l0YWxpY0ZvbnRNYXNrKSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBOU0l0YWxpY0ZvbnRNYXNr
KTsKIAogICAgICAgICAvLyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkgdGFrZXMg
Y2FyZSBvZiBub3QgZGVsZXRpbmcgdGhlIGNhY2hlZCBmb250IGRhdGEgdHdpY2UuCi0gICAgICAg
IHJldHVybiBhZG9wdFB0cihmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnNjYWxlZEZv
bnREYXRhKSk7CisgICAgICAgIHJldHVybiBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEo
JnNjYWxlZEZvbnREYXRhKTsKICAgICB9CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0
YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2lt
cGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAg
ICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21G
b250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKICAgICAgICAg
bV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgc21hbGxDYXBzRm9udFNpemVNdWx0aXBsaWVyKTsKIAotICAgIHJldHVybiBt
X2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6
OmVtcGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVt
cGhhc2lzTWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZl
ZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAg
IGlmICghbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEtPmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlw
dGlvbiwgLjVmKTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJr
LmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQog
CiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwCShyZXZp
c2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9G
b250Q2FjaGVQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE3ICszNSwxNyBAQCB2b2lk
IEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKQogewogICAgIHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250JiBmb250KQogewogICAgIHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0
YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1Jl
ZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hv
dWxkUmV0YWluKQogewogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21l
aG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLgogICAgIC8vIEZvciBub3cgd2Un
bGwgcGljayB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5n
aW5nIGFueSBwcmVmcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCShyZXZpc2lv
biAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1w
bGVGb250RGF0YVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMzIgKzg0LDMyIEBAIHZv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiB9CiAKLVBhc3NPd25QdHI8
U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNv
bnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2Nh
bGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0
IHNjYWxlRmFjdG9yKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNj
YWxlRmFjdG9yICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKICAgICBGb250UGxh
dGZvcm1EYXRhIHBsYXRmb3JtRGF0YShkZXNjLCBkZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKHBsYXRmb3JtRGF0YSkpOworICAg
IHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiB9CiAKLVNpbXBs
ZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0
YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShp
c0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzKQog
ICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+c21hbGxDYXBzID0gY3JlYXRlU2NhbGVkRm9udERh
dGEoZm9udERlc2NyaXB0aW9uLCAuNyk7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEt
PnNtYWxsQ2Fwcy5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fw
czsKIH0KIAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NS
ZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBp
ZiAoIW1fZGVyaXZlZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2
ZWRGb250RGF0YTo6Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZv
bnREYXRhLT5lbXBoYXNpc01hcmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNp
c01hcmsgPSBjcmVhdGVTY2FsZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAotICAg
IHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVy
biBtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrOwogfQogCiBib29sIFNpbXBsZUZvbnRE
YXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
Q2FjaGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udENhY2hlUXQuY3BwCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDcgKzYzLDcgQEAgc3RhdGljIFFSYXdGb250IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKGNvbgog
ICAgIHJldHVybiBnbHlwaHMucmF3Rm9udCgpOwogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSog
Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQYXNzUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICAgICBRU3RyaW5nIHFz
dHJpbmcgPSBRU3RyaW5nOjpmcm9tUmF3RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFy
Kj4oY2hhcmFjdGVycyksIGxlbmd0aCk7CiAgICAgUVJhd0ZvbnQgY29tcHV0ZWRGb250ID0gcmF3
Rm9udEZvckNoYXJhY3RlcnMocXN0cmluZywgZm9udC5yYXdGb250KCkpOwpAQCAtNzMsMTIgKzcz
LDEyIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICByZXR1
cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmFsdGVybmF0ZUZvbnQsIERvTm90UmV0YWluKTsKIH0KIAot
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWlu
IHNob3VsZFJldGFpbikKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAgICBjb25zdCBBdG9taWNTdHJp
bmcgZmFsbGJhY2tGYW1pbHkgPSBRRm9udChmb250RGVzY3JpcHRpb24uZmFtaWx5KCkuZmFtaWx5
KCkpLmxhc3RSZXNvcnRGYW1pbHkoKTsKICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEobmV3
IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZhbWlseSksIHNob3Vs
ZFJldGFpbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1w
bGVGb250RGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcAkocmV2aXNpb24gMTMwMDcxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDMwICs2MSwzMCBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdsCiAgICAgcmV0dXJuIGFkdmFuY2VzLmF0KDApLngoKTsKIH0KIAotUGFz
c093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnRE
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpj
cmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgc2NhbGVkU2l6
ZSA9IGxyb3VuZGYoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc2NhbGVGYWN0b3Ip
OwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0
YShtX3BsYXRmb3JtRGF0YSwgc2NhbGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOwor
ICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0
Zm9ybURhdGEsIHNjYWxlZFNpemUpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwogfQogCi1TaW1w
bGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250
RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERh
dGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUo
aXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykK
ICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnRE
YXRhKGZvbnREZXNjcmlwdGlvbiwgc21hbGxDYXBzRnJhY3Rpb24pOwogCi0gICAgcmV0dXJuIG1f
ZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZv
bnREYXRhLT5zbWFsbENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6
ZW1waGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0CitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1w
aGFzaXNNYXJrRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVk
Rm9udERhdGEgPSBEZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAg
aWYgKCFtX2Rlcml2ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRG
b250RGF0YS0+ZW1waGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0
aW9uLCBlbXBoYXNpc01hcmtGcmFjdGlvbik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERh
dGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVt
cGhhc2lzTWFyazsKIH0KIAogRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5k
c0ZvckdseXBoKEdseXBoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEuY3BwCShyZXZpc2lvbiAxMzAw
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw3IEBAIHZvaWQgRm9udENhY2hlOjpw
bGF0Zm9ybUluaXQoKQogewogfQogCi1jb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpn
ZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9u
dENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCiB7CiAgICAgaWN1OjpMb2NhbGUgbG9jYWxl
ID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKICAgICBGb250Q2FjaGU6OlNpbXBsZUZvbnRG
YW1pbHkgZmFtaWx5OwpAQCAtOTAsMTIgKzg4LDEyIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldEZvbnQKICAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJnBsYXRmb3Jt
RGF0YSwgRG9Ob3RSZXRhaW4pOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRT
aW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250JiBmb250KQogewogICAgIHJldHVybiAwOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENh
Y2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikKIHsKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2Fuc1N0ciwgKCJTYW5z
IikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzZXJpZlN0
ciwgKCJTZXJpZiIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAJKHJldmlzaW9uIDEz
MDA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9u
dERhdGFTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDMwICsxNzAsMzAgQEAgdm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKIH0KIAotUGFzc093blB0cjxTaW1w
bGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QK
K1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpjcmVhdGVTY2FsZWRG
b250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2Nh
bGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgc2NhbGVkU2l6ZSA9IGxyb3VuZGYo
Zm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShtX3BsYXRmb3Jt
RGF0YSwgc2NhbGVkU2l6ZSksIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgIHJldHVybiBT
aW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEsIHNj
YWxlZFNpemUpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpOwogfQogCi1TaW1wbGVGb250RGF0YSog
U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxl
Rm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAg
IG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250
KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcykKICAgICAgICAgbV9k
ZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNj
cmlwdGlvbiwgc21hbGxDYXBzRnJhY3Rpb24pOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFs
bENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBE
ZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBlbXBoYXNp
c01hcmtGcmFjdGlvbik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lz
TWFyay5nZXQoKTsKKyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsK
IH0KIAogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHJldmlzaW9u
IDEzMDA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsMTAgKzE4NiwxMCBAQCBzdGF0aWMgSEZP
TlQgY3JlYXRlTUxhbmdGb250KElNTGFuZ0ZvbnRMCiAgICAgcmV0dXJuIGhmb250OwogfQogCi1j
b25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFj
dGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCkKIHsKICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzWzBdOwotICAgIFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSA9IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0
YTsKICAgICBIV25kREMgaGRjKDApOwogICAgIEhGT05UIHByaW1hcnlGb250ID0gZm9udC5wcmlt
YXJ5Rm9udCgpLT5mb250RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpLT5wbGF0Zm9ybURhdGEo
KS5oZm9udCgpOwogICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIHByaW1h
cnlGb250KTsKQEAgLTI5MywyNCArMjkzLDI0IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldEZvbnQKICAgICAgICAgRGVsZXRlT2JqZWN0KGhmb250KTsKICAgICB9CiAKLSAg
ICByZXR1cm4gZm9udERhdGE7CisgICAgcmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAot
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Zm9udERhdGFGcm9tRGVzY3JpcHRp
b25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91
bGRSZXRhaW4gc2hvdWxkUmV0YWluLCBjb25zdCBMT0dGT05UJiBmb250LCBBdG9taWNTdHJpbmcm
IG91dEZvbnRGYW1pbHlOYW1lKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
Ojpmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4sIGNvbnN0IExPR0ZP
TlQmIGZvbnQsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCiB7CiAgICAgQXRvbWlj
U3RyaW5nIGZhbWlseU5hbWUgPSBTdHJpbmcoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQu
bGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsKLSAgICBTaW1wbGVGb250RGF0YSogZm9udERhdGEg
PSBnZXRDYWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZhbHNlLCBz
aG91bGRSZXRhaW4pOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZm9udERhdGEgPSBnZXRD
YWNoZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZhbHNlLCBzaG91bGRS
ZXRhaW4pOwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgb3V0Rm9udEZhbWlseU5hbWUgPSBm
YW1pbHlOYW1lOwotICAgIHJldHVybiBmb250RGF0YTsKKyAgICByZXR1cm4gZm9udERhdGEucmVs
ZWFzZSgpOwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBTaG91bGRS
ZXRhaW4gc2hvdWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBTaG91bGRSZXRhaW4gc2hvdWxkUmV0YWluKQogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBmYWxsYmFja0ZvbnROYW1lLCAoKSk7CiAgICAgaWYgKCFm
YWxsYmFja0ZvbnROYW1lLmlzRW1wdHkoKSkKQEAgLTMyOSwxMSArMzI5LDExIEBAIFNpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICAgICAgQXRvbWljU3RyaW5nKCJM
dWNpZGEgU2FucyBVbmljb2RlIiksCiAgICAgICAgIEF0b21pY1N0cmluZygiQXJpYWwiKQogICAg
IH07Ci0gICAgU2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnQ7CisgICAgUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBzaW1wbGVGb250OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZ
X0xFTkdUSChmYWxsYmFja0ZvbnRzKTsgKytpKSB7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0g
Z2V0Q2FjaGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRzW2ldLCBmYWxz
ZSwgc2hvdWxkUmV0YWluKSkgewogICAgICAgICAgICAgZmFsbGJhY2tGb250TmFtZSA9IGZhbGxi
YWNrRm9udHNbaV07Ci0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAgICAgICAg
IHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzQy
LDcgKzM0Miw3IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAg
ICAgICAgTE9HRk9OVCBkZWZhdWx0R1VJTG9nRm9udDsKICAgICAgICAgR2V0T2JqZWN0KGRlZmF1
bHRHVUlGb250LCBzaXplb2YoZGVmYXVsdEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQp
OwogICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChmb250RGVzY3JpcHRpb24sIHNob3VsZFJldGFpbiwgZGVmYXVsdEdVSUxvZ0ZvbnQsIGZh
bGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAg
ICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgLy8gRmFsbCBi
YWNrIHRvIE5vbi1jbGllbnQgbWV0cmljcyBmb250cy4KQEAgLTM1MCwxNSArMzUwLDE1IEBAIFNp
bXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICBub25DbGllbnRNZXRy
aWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNzKTsKICAgICBpZiAoU3lzdGVtUGFy
YW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRy
aWNzKSwgJm5vbkNsaWVudE1ldHJpY3MsIDApKSB7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0g
Zm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxk
UmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9udE5hbWUp
KQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2lt
cGxlRm9udC5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9t
RGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25D
bGllbnRNZXRyaWNzLmxmTWVudUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAg
cmV0dXJuIHNpbXBsZUZvbnQ7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNl
KCk7CiAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRM
b2dGb250KGZvbnREZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNzLmxm
U3RhdHVzRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxl
Rm9udDsKKyAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAg
aWYgKHNpbXBsZUZvbnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERl
c2NyaXB0aW9uLCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9uRm9udCwg
ZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udDsKKyAgICAg
ICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHNpbXBsZUZv
bnQgPSBmb250RGF0YUZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBz
aG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZTbUNhcHRpb25Gb250LCBmYWxsYmFja0Zv
bnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250OworICAgICAgICAgICAgcmV0
dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwogICAgIH0KICAgICAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1w
bGVGb250RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkocmV2aXNpb24gMTMwMDcxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDQwICsxMzIsNDAgQEAgdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KCkKICAgICBkZWxldGUgbV9zY3JpcHRGb250UHJvcGVydGllczsK
IH0KIAotUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmNyZWF0ZVNj
YWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IFNpbXBsZUZv
bnREYXRhOjpjcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0CiB7CiAgICAgZmxvYXQgc2NhbGVk
U2l6ZSA9IHNjYWxlRmFjdG9yICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwogICAgIGlmIChpc0N1
c3RvbUZvbnQoKSkgewogICAgICAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnQobV9wbGF0
Zm9ybURhdGEpOwogICAgICAgICBzY2FsZWRGb250LnNldFNpemUoc2NhbGVkU2l6ZSk7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEoc2NhbGVkRm9udCwgdHJ1ZSwg
ZmFsc2UpKTsKKyAgICAgICAgcmV0dXJuIFNpbXBsZUZvbnREYXRhOjpjcmVhdGUoc2NhbGVkRm9u
dCwgdHJ1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIExPR0ZPTlQgd2luZm9udDsKICAgICBHZXRP
YmplY3QobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSwgc2l6ZW9mKExPR0ZPTlQpLCAmd2luZm9udCk7
CiAgICAgd2luZm9udC5sZkhlaWdodCA9IC1scm91bmRmKHNjYWxlZFNpemUgKiAobV9wbGF0Zm9y
bURhdGEudXNlR0RJKCkgPyAxIDogMzIpKTsKICAgICBIRk9OVCBoZm9udCA9IENyZWF0ZUZvbnRJ
bmRpcmVjdCgmd2luZm9udCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0
YShGb250UGxhdGZvcm1EYXRhKGhmb250LCBzY2FsZWRTaXplLCBtX3BsYXRmb3JtRGF0YS5zeW50
aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSwgbV9wbGF0Zm9y
bURhdGEudXNlR0RJKCkpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gU2lt
cGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGhmb250LCBzY2FsZWRTaXplLCBt
X3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09i
bGlxdWUoKSwgbV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpLCBpc0N1c3RvbUZvbnQoKSwgZmFsc2Up
OwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0
cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnRE
YXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEt
PnNtYWxsQ2FwcykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0
ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgY1NtYWxsQ2Fwc0ZvbnRTaXplTXVsdGlw
bGllcik7CiAKLSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fwcy5nZXQoKTsK
KyAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwczsKIH0KIAotU2ltcGxlRm9u
dERhdGEqIFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERh
dGE+IFNpbXBsZUZvbnREYXRhOjplbXBoYXNpc01hcmtGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnRE
YXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6Y3JlYXRl
KGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01h
cmspCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsgPSBjcmVhdGVTY2Fs
ZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC41KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+ZW1waGFzaXNNYXJrLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0
YS0+ZW1waGFzaXNNYXJrOwogfQogCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJh
Y3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5DRS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9u
dENhY2hlV2luQ0UuY3BwCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNSw3ICsyMjUsNyBAQCB2b2lkIEZvbnRDYWNoZTo6Y29tVW5pbml0aWFsaXplKCkKICAgICB9
CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKQogewogICAgIFN0cmluZyBmYW1pbHlOYW1lOwogICAgIFdDSEFSIG5hbWVbTEZf
RkFDRVNJWkVdOwpAQCAtMjM1LDEwICsyMzUsMTEgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZv
bnRDYWNoZTo6Z2V0Rm9udAogICAgIHVuc2lnbmVkIHVuaWNvZGVSYW5nZSA9IGZpbmRDaGFyVW5p
Y29kZVJhbmdlKGNoYXJhY3Rlcik7CiAKICNpZiBkZWZpbmVkKElNTEFOR19GT05UX0xJTkspICYm
IChJTUxBTkdfRk9OVF9MSU5LID09IDIpCi0gICAgaWYgKElNTGFuZ0ZvbnRMaW5rMiogbGFuZ0Zv
bnRMaW5rID0gZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkgeworICAgIGlmIChJTUxhbmdGb250TGlu
azIqIGxhbmdGb250TGluayA9IGdldEZvbnRMaW5rSW50ZXJmYWNlKCkpCiAjZWxzZQotICAgIGlm
IChJTUxhbmdGb250TGluayogbGFuZ0ZvbnRMaW5rID0gZ2V0Rm9udExpbmtJbnRlcmZhY2UoKSkg
eworICAgIGlmIChJTUxhbmdGb250TGluayogbGFuZ0ZvbnRMaW5rID0gZ2V0Rm9udExpbmtJbnRl
cmZhY2UoKSkKICNlbmRpZgorICAgIHsKICAgICAgICAgSEdESU9CSiBvbGRGb250ID0gR2V0Q3Vy
cmVudE9iamVjdChnX3NjcmVlbkRDLCBPQkpfRk9OVCk7CiAgICAgICAgIEhGT05UIGhmb250ID0g
MDsKICAgICAgICAgRFdPUkQgY29kZVBhZ2VzID0gMDsKQEAgLTI2NywxMCArMjY4LDExIEBAIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgYXNrZWQgYWJvdXQgYSBjb2RlIHBhZ2UgdGhhdCBpcyBub3Qgb25lIG9mIHRoZSBj
b2RlIHBhZ2VzCiAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybmVkIGJ5IE1MYW5nLCBzbyB0
aGUgZm9udCBtaWdodCBub3QgY29udGFpbiB0aGUgY2hhcmFjdGVyLgogI2lmIGRlZmluZWQoSU1M
QU5HX0ZPTlRfTElOSykgJiYgKElNTEFOR19GT05UX0xJTksgPT0gMikKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFjdGVyKGxhbmdGb250TGluaywgZ19z
Y3JlZW5EQywgY2hhcmFjdGVyKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRG
b250Q29udGFpbnNDaGFyYWN0ZXIobGFuZ0ZvbnRMaW5rLCBnX3NjcmVlbkRDLCBjaGFyYWN0ZXIp
KQogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Rm9udENvbnRhaW5zQ2hh
cmFjdGVyKGxhbmdGb250TGluaywgZ19zY3JlZW5EQywgaGZvbnQsIGNoYXJhY3RlciwgbmFtZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Rm9udENvbnRhaW5zQ2hhcmFjdGVy
KGxhbmdGb250TGluaywgZ19zY3JlZW5EQywgaGZvbnQsIGNoYXJhY3RlciwgbmFtZSkpCiAjZW5k
aWYKKyAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0
T2JqZWN0KGdfc2NyZWVuREMsIG9sZEZvbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGFu
Z0ZvbnRMaW5rLT5SZWxlYXNlRm9udChoZm9udCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBo
Zm9udCA9IDA7CkBAIC0zMDgsMjAgKzMxMCwyMCBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRm9u
dENhY2hlOjpnZXRGb250CiAKICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gZ2V0
Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAg
ICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+aGFzaCgpICE9IG9yaWdGb250Lmhhc2goKSkgewot
ICAgICAgICAgICAgaWYgKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdldENhY2hlZEZvbnRE
YXRhKHJlc3VsdCwgRG9Ob3RSZXRhaW4pKQotICAgICAgICAgICAgICAgIHJldHVybiBmb250RGF0
YTsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8U2ltcGxlRm9udERhdGE+IGZvbnREYXRhID0gZ2V0
Q2FjaGVkRm9udERhdGEocmVzdWx0LCBEb05vdFJldGFpbikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAw
OwogfQogCi1TaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250JiBmb250KQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENh
Y2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JikKIHsKICAgICByZXR1
cm4gMDsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjLCBTaG91bGRSZXRhaW4gc2hv
dWxkUmV0YWluKQorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2MsIFNob3Vs
ZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0
dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93
IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3
aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0Uu
Y3BwCShyZXZpc2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyAr
NjMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQogewogfQogCi1Q
YXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlU2NhbGVkRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6
OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2MoZm9udERlc2NyaXB0aW9uKTsKICAgICBmb250RGVzYy5zZXRDb21wdXRlZFNpemUobHJv
dW5kZihzY2FsZUZhY3RvciAqIGZvbnREZXNjLmNvbXB1dGVkU2l6ZSgpKSk7CkBAIC03MSwyOCAr
NzEsMjggQEAgUGFzc093blB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdAogICAgIGZv
bnREZXNjLnNldEtleXdvcmRTaXplKGxyb3VuZGYoc2NhbGVGYWN0b3IgKiBmb250RGVzYy5rZXl3
b3JkU2l6ZSgpKSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gZm9udENhY2hlKCkt
PmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2MsIG1fcGxhdGZvcm1EYXRhLmZhbWls
eSgpKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YSgqcmVzdWx0KSk7CisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKCpyZXN1bHQpOwogfQogCi1T
aW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVG
b250RGF0YT4gU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGlmICghbV9kZXJpdmVkRm9u
dERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhID0gRGVyaXZlZEZvbnREYXRhOjpjcmVh
dGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2Fw
cykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEtPnNtYWxsQ2FwcyA9IGNyZWF0ZVNjYWxlZEZv
bnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjcpOwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnRE
YXRhLT5zbWFsbENhcHMuZ2V0KCk7CisgICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFs
bENhcHM7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJr
Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CitQ
YXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXNNYXJrRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2Rlcml2ZWRGb250RGF0YSkKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEgPSBE
ZXJpdmVkRm9udERhdGE6OmNyZWF0ZShpc0N1c3RvbUZvbnQoKSk7CiAgICAgaWYgKCFtX2Rlcml2
ZWRGb250RGF0YS0+ZW1waGFzaXNNYXJrKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YS0+ZW1w
aGFzaXNNYXJrID0gY3JlYXRlU2NhbGVkRm9udERhdGEoZm9udERlc2NyaXB0aW9uLCAuNSk7CiAK
LSAgICByZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKKyAgICBy
ZXR1cm4gbV9kZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyazsKIH0KIAogRFdPUkQgZ2V0S25v
d25Gb250Q29kZVBhZ2VzKGNvbnN0IHdjaGFyX3QqIGZhbWlseSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250Q2FjaGVXeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udENhY2hlV3guY3BwCShyZXZp
c2lvbiAxMzAwNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250
Q2FjaGVXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgdm9pZCBGb250Q2Fj
aGU6OnBsYXRmb3JtSW5pdCgpCiB7CiB9CiAKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZv
bnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewotICAgIFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSA9IDA7CisgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IDA7CiAg
ICAgZm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBm
b250LmZhbWlseSgpLmZhbWlseSgpLCBmYWxzZSwgRG9Ob3RSZXRhaW4pOwogICAgIGlmICghZm9u
dERhdGEtPmNvbnRhaW5zQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKQogICAgICAgICBm
b250RGF0YSA9IGdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGZvbnQpOwpAQCAtNTMsMTIgKzUz
LDEyIEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICAgICAg
Zm9udERhdGEgPSBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGZvbnQuZm9udERlc2NyaXB0aW9u
KCkpOwogCiAgICAgQVNTRVJUKGZvbnREYXRhKTsKLSAgICByZXR1cm4gZm9udERhdGE7CisgICAg
cmV0dXJuIGZvbnREYXRhLnJlbGVhc2UoKTsKIH0KIAotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNo
ZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK1Bhc3NSZWZQ
dHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udCYgZm9udCkKIHsKLSAgICBTaW1wbGVGb250RGF0YSogc2ltcGxlRm9udERhdGEg
PSAwOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gc2ltcGxlRm9udERhdGEgPSAwOwogI2lm
IE9TKERBUldJTikKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1
c2luZyBhIG1hdGNoIGJhc2VkIG9uIAogICAgIC8vIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBp
biB0aGUgdGhlIHJlcXVlc3RlZCBuYW1lcy4gIEZvciBleGFtcGxlLCB3ZSdsbApAQCAtNzgsMTQg
Kzc4LDE0IEBAIFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb24KICAgICBp
ZiAoIXNpbXBsZUZvbnREYXRhKQogICAgICAgICBzaW1wbGVGb250RGF0YSA9IGdldENhY2hlZEZv
bnREYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZvbnQuZmFtaWx5KCkuZmFtaWx5KCkpOwog
Ci0gICAgcmV0dXJuIHNpbXBsZUZvbnREYXRhOworICAgIHJldHVybiBzaW1wbGVGb250RGF0YS5y
ZWxlYXNlKCk7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFNob3Vs
ZFJldGFpbiBzaG91bGRSZXRhaW4pCitQYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2Fj
aGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIFNob3VsZFJldGFpbiBzaG91bGRSZXRhaW4pCiB7CiAgICAgLy8gRklYTUU6
IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBm
b250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRo
ZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBTaW1wbGVG
b250RGF0YSogZmFsbGJhY2sgPSAwOworICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZmFsbGJh
Y2sgPSAwOwogI2lmIE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBmYWxsYmFj
a05hbWUoIkFyaWFsIFVuaWNvZGUgTVMiKTsKICNlbHNlCkBAIC05NCw3ICs5NCw3IEBAIFNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnQKICAgICBmYWxsYmFjayA9IGdldENh
Y2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tOYW1lLCBmYWxzZSwgc2hvdWxk
UmV0YWluKTsKICAgICBBU1NFUlQoZmFsbGJhY2spOwogICAgIAotICAgIHJldHVybiBmYWxsYmFj
azsKKyAgICByZXR1cm4gZmFsbGJhY2sucmVsZWFzZSgpOwogfQogCiBGb250UGxhdGZvcm1EYXRh
KiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9u
dERhdGFXeC5jcHAJKHJldmlzaW9uIDEzMDA3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwz
MiArOTAsMzIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKICNlbmRp
ZgogfQogCi1QYXNzT3duUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6Y3JlYXRl
U2NhbGVkRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZs
b2F0IHNjYWxlRmFjdG9yKSBjb25zdAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxl
Rm9udERhdGE6OmNyZWF0ZVNjYWxlZEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKIHsKICAgICBGb250RGVzY3Jp
cHRpb24gZGVzYyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIGRlc2Mu
c2V0U3BlY2lmaWVkU2l6ZShzY2FsZUZhY3RvciAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNp
emUoKSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1p
bHkoKS5mYW1pbHkoKSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShw
bGF0Zm9ybURhdGEsIGlzQ3VzdG9tRm9udCgpLCBmYWxzZSkpOworICAgIHJldHVybiBTaW1wbGVG
b250RGF0YTo6Y3JlYXRlKHBsYXRmb3JtRGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKIH0K
IAotU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK1Bhc3NSZWZQdHI8U2lt
cGxlRm9udERhdGE+IFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZGVyaXZl
ZEZvbnREYXRhKQogICAgICAgICBtX2Rlcml2ZWRGb250RGF0YSA9IERlcml2ZWRGb250RGF0YTo6
Y3JlYXRlKGlzQ3VzdG9tRm9udCgpKTsKICAgICBpZiAoIW1fZGVyaXZlZEZvbnREYXRhLT5zbWFs
bENhcHMpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRhLT5zbWFsbENhcHMgPSBjcmVhdGVTY2Fs
ZWRGb250RGF0YShmb250RGVzY3JpcHRpb24sIC43KTsKIAotICAgIHJldHVybiBtX2Rlcml2ZWRG
b250RGF0YS0+c21hbGxDYXBzLmdldCgpOworICAgIHJldHVybiBtX2Rlcml2ZWRGb250RGF0YS0+
c21hbGxDYXBzOwogfQogCi1TaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lz
TWFya0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAorUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzTWFy
a0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAog
ewogICAgIGlmICghbV9kZXJpdmVkRm9udERhdGEpCiAgICAgICAgIG1fZGVyaXZlZEZvbnREYXRh
ID0gRGVyaXZlZEZvbnREYXRhOjpjcmVhdGUoaXNDdXN0b21Gb250KCkpOwogICAgIGlmICghbV9k
ZXJpdmVkRm9udERhdGEtPmVtcGhhc2lzTWFyaykKICAgICAgICAgbV9kZXJpdmVkRm9udERhdGEt
PmVtcGhhc2lzTWFyayA9IGNyZWF0ZVNjYWxlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgLjUp
OwogCi0gICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7Cisg
ICAgcmV0dXJuIG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcms7CiB9CiAKIGJvb2wgU2lt
cGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkgY29uc3QK
</data>
<flag name="review"
          id="178896"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>