<?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>222735</bug_id>
          
          <creation_ts>2021-03-04 06:47:08 -0800</creation_ts>
          <short_desc>Allow creation of a CSSFontSelector with a non-Document ScriptExecutionContext</short_desc>
          <delta_ts>2021-03-09 04:05:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=222929</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>202793</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1735811</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-04 06:47:08 -0800</bug_when>
    <thetext>We want to eventually be able to use fonts within workers for OffscreenCanvas - currently, the bits missing are CSSFontSelector, FontCache and then some additional support code to support loading fonts from FontFace objects (this last part not strictly being necessary, though all OffscreenCanvas font tests depend on it). These items don&apos;t necessarily make sense apart, but they are all fairly self-contained changes, so ideally we could check them in separately and enable fonts in workers in a separate patch, rather than using one monolithic patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735813</commentid>
    <comment_count>1</comment_count>
      <attachid>422223</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-04 06:54:41 -0800</bug_when>
    <thetext>Created attachment 422223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735814</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-04 06:58:08 -0800</bug_when>
    <thetext>A perhaps dubiously-related change has crept in with this patch - the changes to the global family string usage are necessary for CSSFontSelector to work with a WorkerGlobalScope, but perhaps aren&apos;t necessary for this patch because construction with a WorkerGlobalScope isn&apos;t actually used yet.

I can remove this part if it would be preferred and include it in a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736012</commentid>
    <comment_count>3</comment_count>
      <attachid>422223</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-04 14:07:05 -0800</bug_when>
    <thetext>Comment on attachment 422223
Patch

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

Generally looks good, but I have enough comments that I am not literally setting review+ on this version.

&gt; Source/WebCore/css/CSSFontSelector.cpp:91
&gt; +    if (is&lt;Document&gt;(context)) {
&gt; +        m_cursiveFamily = makeUnique&lt;const AtomString&gt;(cursiveFamily);
&gt; +        m_fantasyFamily = makeUnique&lt;const AtomString&gt;(fantasyFamily);
&gt; +        m_monospaceFamily = makeUnique&lt;const AtomString&gt;(monospaceFamily);
&gt; +        m_pictographFamily = makeUnique&lt;const AtomString&gt;(pictographFamily);
&gt; +        m_sansSerifFamily = makeUnique&lt;const AtomString&gt;(sansSerifFamily);
&gt; +        m_serifFamily = makeUnique&lt;const AtomString&gt;(serifFamily);
&gt; +        m_standardFamily = makeUnique&lt;const AtomString&gt;(standardFamily);
&gt; +        m_systemUiFamily = makeUnique&lt;const AtomString&gt;(systemUiFamily);
&gt; +    } else {
&gt; +        m_cursiveFamily = makeUnique&lt;const AtomString&gt;(&amp;cursiveFamilyData);
&gt; +        m_fantasyFamily = makeUnique&lt;const AtomString&gt;(&amp;fantasyFamilyData);
&gt; +        m_monospaceFamily = makeUnique&lt;const AtomString&gt;(&amp;monospaceFamilyData);
&gt; +        m_pictographFamily = makeUnique&lt;const AtomString&gt;(&amp;pictographFamilyData);
&gt; +        m_sansSerifFamily = makeUnique&lt;const AtomString&gt;(&amp;sansSerifFamilyData);
&gt; +        m_serifFamily = makeUnique&lt;const AtomString&gt;(&amp;serifFamilyData);
&gt; +        m_standardFamily = makeUnique&lt;const AtomString&gt;(&amp;standardFamilyData);
&gt; +        m_systemUiFamily = makeUnique&lt;const AtomString&gt;(&amp;systemUiFamilyData);
&gt; +    }

The repetitiveness of this code is so annoying! I really wish for a different idiom where we don’t have a long list (and it’s a bug if anything in the list is wrong, like an omitted item or copy and paste error).

I’m also not happy putting each of these into a separate memory block. I think we can find a clever way to avoid this.

&gt; Source/WebCore/css/CSSFontSelector.cpp:284
&gt; +    if (is&lt;Document&gt;(m_context))
&gt; +        downcast&lt;Document&gt;(*m_context).updateStyleIfNeeded();

Can we make updateStyleIfNeeded a virtual function in ScriptExecutionContext instead? Is there any downside to doing that?

&gt; Source/WebCore/css/CSSFontSelector.cpp:317
&gt; +    if (familyName == *m_serifFamily)
&gt; +        return AtomString(settings.fontGenericFamilies.serifFontFamily(script));
&gt; +    if (familyName == *m_sansSerifFamily)
&gt; +        return AtomString(settings.fontGenericFamilies.sansSerifFontFamily(script));
&gt; +    if (familyName == *m_cursiveFamily)
&gt; +        return AtomString(settings.fontGenericFamilies.cursiveFontFamily(script));
&gt; +    if (familyName == *m_fantasyFamily)
&gt; +        return AtomString(settings.fontGenericFamilies.fantasyFontFamily(script));
&gt; +    if (familyName == *m_monospaceFamily)
&gt; +        return AtomString(settings.fontGenericFamilies.fixedFontFamily(script));
&gt; +    if (familyName == *m_pictographFamily)
&gt; +        return AtomString(settings.fontGenericFamilies.pictographFontFamily(script));
&gt; +    if (familyName == *m_standardFamily)
&gt; +        return AtomString(settings.fontGenericFamilies.standardFontFamily(script));

Not new, but the same kind of frustrating repetition.

&gt; Source/WebCore/css/CSSFontSelector.cpp:435
&gt; +    auto&amp; document = downcast&lt;Document&gt;(*m_context);

The downcast should be right next to the is&lt;&gt; check.

&gt; Source/WebCore/css/CSSFontSelector.cpp:440
&gt; +    if (m_context &amp;&amp; document.frame())

Strange to have this null check of m_context. The code ends up assuming that the context is either the same or null in a confusing way. A better design is probably to put the document into a local reference counted pointer if we are worried about lifetime.

&gt; Source/WebCore/css/CSSFontSelector.h:125
&gt; -    WeakPtr&lt;Document&gt; m_document;
&gt; +    ScriptExecutionContext* m_context;

Why are we weakening safety here by moving from a WeakPtr to a raw pointer?

&gt; Source/WebCore/css/CSSFontSelector.h:153
&gt; +    std::unique_ptr&lt;const AtomString&gt; m_cursiveFamily;
&gt; +    std::unique_ptr&lt;const AtomString&gt; m_fantasyFamily;
&gt; +    std::unique_ptr&lt;const AtomString&gt; m_monospaceFamily;
&gt; +    std::unique_ptr&lt;const AtomString&gt; m_pictographFamily;
&gt; +    std::unique_ptr&lt;const AtomString&gt; m_sansSerifFamily;
&gt; +    std::unique_ptr&lt;const AtomString&gt; m_serifFamily;
&gt; +    std::unique_ptr&lt;const AtomString&gt; m_standardFamily;
&gt; +    std::unique_ptr&lt;const AtomString&gt; m_systemUiFamily;

Using pointers and extra memory blocks for these does not seem like a good pattern. If we’re doing that to make them easier to initialize, we can use Optional&lt;AtomString&gt; instead. But also, if we put these into a struct, we can construct the whole thing and don’t need to spend extra memory just to make them easier to initialize. Or maybe I am missing the rationale for using unique_ptr. It’s even possible that a struct or some sort of array could make the code for these less repetitive.

Also should be &quot;systemUI&quot;, not &quot;systemUi&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736022</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-04 14:42:14 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 422223 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=422223&amp;action=review
&gt; 
&gt; Generally looks good, but I have enough comments that I am not literally
&gt; setting review+ on this version.
&gt; 
&gt; &gt; Source/WebCore/css/CSSFontSelector.cpp:91
&gt; &gt; +    if (is&lt;Document&gt;(context)) {
&gt; &gt; +        m_cursiveFamily = makeUnique&lt;const AtomString&gt;(cursiveFamily);
&gt; &gt; +        m_fantasyFamily = makeUnique&lt;const AtomString&gt;(fantasyFamily);
&gt; &gt; +        m_monospaceFamily = makeUnique&lt;const AtomString&gt;(monospaceFamily);
&gt; &gt; +        m_pictographFamily = makeUnique&lt;const AtomString&gt;(pictographFamily);
&gt; &gt; +        m_sansSerifFamily = makeUnique&lt;const AtomString&gt;(sansSerifFamily);
&gt; &gt; +        m_serifFamily = makeUnique&lt;const AtomString&gt;(serifFamily);
&gt; &gt; +        m_standardFamily = makeUnique&lt;const AtomString&gt;(standardFamily);
&gt; &gt; +        m_systemUiFamily = makeUnique&lt;const AtomString&gt;(systemUiFamily);
&gt; &gt; +    } else {
&gt; &gt; +        m_cursiveFamily = makeUnique&lt;const AtomString&gt;(&amp;cursiveFamilyData);
&gt; &gt; +        m_fantasyFamily = makeUnique&lt;const AtomString&gt;(&amp;fantasyFamilyData);
&gt; &gt; +        m_monospaceFamily = makeUnique&lt;const AtomString&gt;(&amp;monospaceFamilyData);
&gt; &gt; +        m_pictographFamily = makeUnique&lt;const AtomString&gt;(&amp;pictographFamilyData);
&gt; &gt; +        m_sansSerifFamily = makeUnique&lt;const AtomString&gt;(&amp;sansSerifFamilyData);
&gt; &gt; +        m_serifFamily = makeUnique&lt;const AtomString&gt;(&amp;serifFamilyData);
&gt; &gt; +        m_standardFamily = makeUnique&lt;const AtomString&gt;(&amp;standardFamilyData);
&gt; &gt; +        m_systemUiFamily = makeUnique&lt;const AtomString&gt;(&amp;systemUiFamilyData);
&gt; &gt; +    }
&gt; 
&gt; The repetitiveness of this code is so annoying! I really wish for a
&gt; different idiom where we don’t have a long list (and it’s a bug if anything
&gt; in the list is wrong, like an omitted item or copy and paste error).
&gt; 
&gt; I’m also not happy putting each of these into a separate memory block. I
&gt; think we can find a clever way to avoid this.

I agree... Thinking about this, perhaps I could alter the strings generator script to generate corresponding arrays for grouped strings and their data so that this could just be a pointer to that array and the array could be re-generated for the Worker case in a loop?

&gt; &gt; Source/WebCore/css/CSSFontSelector.cpp:284
&gt; &gt; +    if (is&lt;Document&gt;(m_context))
&gt; &gt; +        downcast&lt;Document&gt;(*m_context).updateStyleIfNeeded();
&gt; 
&gt; Can we make updateStyleIfNeeded a virtual function in ScriptExecutionContext
&gt; instead? Is there any downside to doing that?

The only downside I suppose is possible confusion - This is here because font style can rely on Document style, but there&apos;s no such dependency chain in a Worker. This seems like knowledge that makes sense to embed here in the FontSelector to me, but I don&apos;t feel strongly about that.

&gt; &gt; Source/WebCore/css/CSSFontSelector.cpp:317
&gt; &gt; +    if (familyName == *m_serifFamily)
&gt; &gt; +        return AtomString(settings.fontGenericFamilies.serifFontFamily(script));
&gt; &gt; +    if (familyName == *m_sansSerifFamily)
&gt; &gt; +        return AtomString(settings.fontGenericFamilies.sansSerifFontFamily(script));
&gt; &gt; +    if (familyName == *m_cursiveFamily)
&gt; &gt; +        return AtomString(settings.fontGenericFamilies.cursiveFontFamily(script));
&gt; &gt; +    if (familyName == *m_fantasyFamily)
&gt; &gt; +        return AtomString(settings.fontGenericFamilies.fantasyFontFamily(script));
&gt; &gt; +    if (familyName == *m_monospaceFamily)
&gt; &gt; +        return AtomString(settings.fontGenericFamilies.fixedFontFamily(script));
&gt; &gt; +    if (familyName == *m_pictographFamily)
&gt; &gt; +        return AtomString(settings.fontGenericFamilies.pictographFontFamily(script));
&gt; &gt; +    if (familyName == *m_standardFamily)
&gt; &gt; +        return AtomString(settings.fontGenericFamilies.standardFontFamily(script));
&gt; 
&gt; Not new, but the same kind of frustrating repetition.

I think my idea with the generated arrays would allow turning this into a loop too.

&gt; &gt; Source/WebCore/css/CSSFontSelector.cpp:435
&gt; &gt; +    auto&amp; document = downcast&lt;Document&gt;(*m_context);
&gt; 
&gt; The downcast should be right next to the is&lt;&gt; check.

Noted.

&gt; &gt; Source/WebCore/css/CSSFontSelector.cpp:440
&gt; &gt; +    if (m_context &amp;&amp; document.frame())
&gt; 
&gt; Strange to have this null check of m_context. The code ends up assuming that
&gt; the context is either the same or null in a confusing way. A better design
&gt; is probably to put the document into a local reference counted pointer if we
&gt; are worried about lifetime.

I think this was existing behaviour and I was wary of changing anything, but I agree. Previously, this class had a clearDocument function, but this has been replaced by stopLoadingAndClearFonts, so this no longer makes sense.

&gt; &gt; Source/WebCore/css/CSSFontSelector.h:125
&gt; &gt; -    WeakPtr&lt;Document&gt; m_document;
&gt; &gt; +    ScriptExecutionContext* m_context;
&gt; 
&gt; Why are we weakening safety here by moving from a WeakPtr to a raw pointer?

You can&apos;t make a WeakPtr of a ScriptExecutionContext, but this could be changed - When looking at how CSSFontSelector is used, and that the document member was explicitly cleared, it seemed safe to make this a pointer, but with the above-mentioned removal of clearDocument, this is no longer the case.

&gt; &gt; Source/WebCore/css/CSSFontSelector.h:153
&gt; &gt; +    std::unique_ptr&lt;const AtomString&gt; m_cursiveFamily;
&gt; &gt; +    std::unique_ptr&lt;const AtomString&gt; m_fantasyFamily;
&gt; &gt; +    std::unique_ptr&lt;const AtomString&gt; m_monospaceFamily;
&gt; &gt; +    std::unique_ptr&lt;const AtomString&gt; m_pictographFamily;
&gt; &gt; +    std::unique_ptr&lt;const AtomString&gt; m_sansSerifFamily;
&gt; &gt; +    std::unique_ptr&lt;const AtomString&gt; m_serifFamily;
&gt; &gt; +    std::unique_ptr&lt;const AtomString&gt; m_standardFamily;
&gt; &gt; +    std::unique_ptr&lt;const AtomString&gt; m_systemUiFamily;
&gt; 
&gt; Using pointers and extra memory blocks for these does not seem like a good
&gt; pattern. If we’re doing that to make them easier to initialize, we can use
&gt; Optional&lt;AtomString&gt; instead. But also, if we put these into a struct, we
&gt; can construct the whole thing and don’t need to spend extra memory just to
&gt; make them easier to initialize. Or maybe I am missing the rationale for
&gt; using unique_ptr. It’s even possible that a struct or some sort of array
&gt; could make the code for these less repetitive.

Yes, agreed. I&apos;m not exactly sure why I made them unique_ptr, I think I was trying to do something that I lost track of... Ideally in the case of is&lt;Document&gt;(context), we would just store pointers to the existing global AtomString, rather than making a new one that just wraps the internal AtomStringImpl. I suppose having an array would make this easier too.

&gt; Also should be &quot;systemUI&quot;, not &quot;systemUi&quot;.

Thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736052</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-04 15:24:30 -0800</bug_when>
    <thetext>(In reply to Chris Lord from comment #4)
&gt; Ideally in the case of
&gt; is&lt;Document&gt;(context), we would just store pointers to the existing global
&gt; AtomString, rather than making a new one that just wraps the internal
&gt; AtomStringImpl.

I don’t think this an important optimization. An AtomString is a pointer. So the savings in storing a pointer to an AtomString rather than an AtomString itself is only a tiny reduction in reference counting overhead for the AtomStringImpl when we assign the value, and in the destructor. That’s not enough to seem worthwhile. And there’s a cost too. If we store pointers, there’s an extra memory read every time the AtomString is accessed.

On the other hand, if we could arrange things so there’s a single pointer to an object containing all the family names, that might provide some welcome simplicity and does seem helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736405</commentid>
    <comment_count>6</comment_count>
      <attachid>422381</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-05 10:25:09 -0800</bug_when>
    <thetext>Created attachment 422381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736475</commentid>
    <comment_count>7</comment_count>
      <attachid>422381</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-05 12:20:36 -0800</bug_when>
    <thetext>Comment on attachment 422381
Patch

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

Looks fine; not sure why it’s not building on all platforms yet.

&gt; Source/WebCore/css/CSSFontSelector.cpp:306
&gt; +    bool resolveGenericFamilyFirst = familyName == m_fontFamilyNames[static_cast&lt;long int&gt;(FamilyNamesIndex::StandardFamily)];

The static_cast should be to &quot;unsigned&quot; or &quot;int&quot;. We should never need to use &quot;long int&quot; in our code. Also wondering why the cast is needed at all, but maybe it’s converting from an enum to an integer?

&gt; Source/WebCore/platform/graphics/FontGenericFamilies.cpp:202
&gt; +    case FamilyNamesIndex::SystemUiFamily:
&gt; +    default:
&gt; +        return WTF::nullopt;

If you leave out default then we’ll get a warning if we forget to handle any of the enumeration values; that’s a welcome tiny bit of future-proofing. Instead you can put the return WTF::nullopt after the switch statement. Unless that runs into warning problems on Windows compilers or something?

&gt; Source/WebCore/platform/graphics/FontGenericFamilies.h:27
&gt;  #ifndef FontGenericFamilies_h
&gt;  #define FontGenericFamilies_h

Would be nice to move to #pragma once since we’re touching this file.

&gt; Source/WebCore/platform/graphics/FontGenericFamilies.h:63
&gt; +    Optional&lt;const String&amp;&gt; fontFamily(WebKitFontFamilyNames::FamilyNamesIndex, UScriptCode = USCRIPT_COMMON) const;

Not sure the return type here is optimal. I’d suggest just const String&amp; and returning a reference to a null or empty string if there’s no failure, or const String* and using nullptr.

Optional is really clear semantically, but one of those others might be nice since String already has a built in null and empty value, and references have a natural optional form (pointers) without using the Optional template.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737009</commentid>
    <comment_count>8</comment_count>
      <attachid>422550</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-08 02:28:05 -0800</bug_when>
    <thetext>Created attachment 422550
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737034</commentid>
    <comment_count>9</comment_count>
      <attachid>422555</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-08 05:05:38 -0800</bug_when>
    <thetext>Created attachment 422555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737041</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-08 05:53:19 -0800</bug_when>
    <thetext>Committed r274069: &lt;https://commits.webkit.org/r274069&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 422555.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737042</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-08 05:54:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/75167438&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737248</commentid>
    <comment_count>12</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2021-03-08 13:04:04 -0800</bug_when>
    <thetext>(In reply to EWS from comment #10)
&gt; Committed r274069: &lt;https://commits.webkit.org/r274069&gt;
This change has caused an API test to assert on iOS and macOS bots:

TestWebKitAPI.DocumentOrder.Positions
        ASSERTION FAILED: m_isConstructed
        /Volumes/Data/worker/bigsur-debug/build/WebKitBuild/Debug/usr/local/include/wtf/NeverDestroyed.h(154) : WTF::LazyNeverDestroyed::PointerType WTF::LazyNeverDestroyed&lt;WTF::Vector&lt;WTF::AtomStringImpl *, 8, WTF::CrashOnOverflow, 16, WTF::FastMalloc&gt;, WTF::MainThreadAccessTraits&gt;::storagePointerWithoutAccessCheck() const [T = WTF::Vector&lt;WTF::AtomStringImpl *, 8, WTF::CrashOnOverflow, 16, WTF::FastMalloc&gt;, AccessTraits = WTF::MainThreadAccessTraits]

https://bugs.webkit.org/show_bug.cgi?id=222929</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737258</commentid>
    <comment_count>13</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2021-03-08 13:14:32 -0800</bug_when>
    <thetext>Reverted r274069 for reason:

Caused an assertion failure with TestWebKitAPI.DocumentOrder.Positions

Committed r274098 (235032@main): &lt;https://commits.webkit.org/235032@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737505</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-09 01:32:19 -0800</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #13)
&gt; Reverted r274069 for reason:
&gt; 
&gt; Caused an assertion failure with TestWebKitAPI.DocumentOrder.Positions
&gt; 
&gt; Committed r274098 (235032@main): &lt;https://commits.webkit.org/235032@main&gt;

This assert also happens on Linux, thankfully - looking at it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737506</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-09 01:33:33 -0800</bug_when>
    <thetext>oh wait, the test doesn&apos;t exist on Linux and the error output is pretty misleading at a glance - either way, hopefully I can figure it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737507</commentid>
    <comment_count>16</comment_count>
      <attachid>422678</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-09 01:39:07 -0800</bug_when>
    <thetext>Created attachment 422678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737528</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-09 04:05:35 -0800</bug_when>
    <thetext>Committed r274143: &lt;https://commits.webkit.org/r274143&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 422678.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422223</attachid>
            <date>2021-03-04 06:54:41 -0800</date>
            <delta_ts>2021-03-05 10:25:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222735-20210304145439.patch</filename>
            <type>text/plain</type>
            <size>23342</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczODgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQyYWQzZGNhOTQ5NzM5
MmUxZDc2NzczYmRiNWYxYTZmZDA5YmM3ZS4uYjUyYzU2MGEyM2ZkMWY4MTQ4MTJhOGEwMzBlYzYz
Y2ZhN2MxMzgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIxLTAzLTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBBbGxvdyBjcmVhdGlvbiBvZiBh
IENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgbm9uLURvY3VtZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjcz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhcyBuZXcgYmVoYXZpb3VyIGlzIGN1cnJlbnRseSB1bnVzZWQuIEV4aXN0aW5nIGJl
aGF2aW91ciBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OkNTU0Zv
bnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjptX3ZlcnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250RmFjZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250U2VsZWN0b3I6OmZvbnRTdHlsZVVwZGF0ZU5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGb250U2VsZWN0b3I6OnJlc29sdmVHZW5lcmljRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250U2VsZWN0b3I6OnN0b3BMb2FkaW5nQW5kQ2xlYXJGb250cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmJlZ2luTG9hZGluZ0ZvbnRTb29uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6bG9hZFBlbmRpbmdGb250cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZvbnRMb2FkaW5nVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udENvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQpOgorICAgICAgICAqIGNz
cy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3MvRm9udEZhY2VTZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RmFjZVNldDo6Rm9udEZhY2VTZXQpOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5oOgor
ICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5pZGw6CisKIDIwMjEtMDMtMDMgIENocmlzIExvcmQg
IDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFsbG93IENTUyBmb250LXN0eWxpbmcgZm9y
IGNhbnZhcyB3aXRob3V0IFJlbmRlclN0eWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udFNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwCmluZGV4IDVjYzEwODljNTgyYzFiNDkxOGE3OTg1YWE2ZjIwZWZmMTJmNWFjNjIuLjEz
NTcyYjRmZjBhY2I0NDdiYjdmMGE1ZWE5ZWNmMTJjYzI0MmEwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuY3BwCkBAIC02MSwxNiArNjEsMzUgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdGF0aWMgdW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CiAKLUNTU0ZvbnRTZWxlY3Rv
cjo6Q1NTRm9udFNlbGVjdG9yKERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IEFjdGl2ZURPTU9i
amVjdChkb2N1bWVudCkKLSAgICAsIG1fZG9jdW1lbnQobWFrZVdlYWtQdHIoZG9jdW1lbnQpKQor
Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkKKyAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKKyAgICAsIG1fY29udGV4
dCgmY29udGV4dCkKICAgICAsIG1fY3NzRm9udEZhY2VTZXQoQ1NTRm9udEZhY2VTZXQ6OmNyZWF0
ZSh0aGlzKSkKICAgICAsIG1fZm9udE1vZGlmaWVkT2JzZXJ2ZXIoW3RoaXNdIHsgZm9udE1vZGlm
aWVkKCk7IH0pCiAgICAgLCBtX2ZvbnRMb2FkaW5nVGltZXIoKnRoaXMsICZDU1NGb250U2VsZWN0
b3I6OmZvbnRMb2FkaW5nVGltZXJGaXJlZCkKICAgICAsIG1fdW5pcXVlSWQoKytmb250U2VsZWN0
b3JJZCkKICAgICAsIG1fdmVyc2lvbigwKQogewotICAgIEFTU0VSVChtX2RvY3VtZW50KTsKKyAg
ICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CisgICAgICAgIG1fY3Vyc2l2ZUZhbWlseSA9
IG1ha2VVbmlxdWU8Y29uc3QgQXRvbVN0cmluZz4oY3Vyc2l2ZUZhbWlseSk7CisgICAgICAgIG1f
ZmFudGFzeUZhbWlseSA9IG1ha2VVbmlxdWU8Y29uc3QgQXRvbVN0cmluZz4oZmFudGFzeUZhbWls
eSk7CisgICAgICAgIG1fbW9ub3NwYWNlRmFtaWx5ID0gbWFrZVVuaXF1ZTxjb25zdCBBdG9tU3Ry
aW5nPihtb25vc3BhY2VGYW1pbHkpOworICAgICAgICBtX3BpY3RvZ3JhcGhGYW1pbHkgPSBtYWtl
VW5pcXVlPGNvbnN0IEF0b21TdHJpbmc+KHBpY3RvZ3JhcGhGYW1pbHkpOworICAgICAgICBtX3Nh
bnNTZXJpZkZhbWlseSA9IG1ha2VVbmlxdWU8Y29uc3QgQXRvbVN0cmluZz4oc2Fuc1NlcmlmRmFt
aWx5KTsKKyAgICAgICAgbV9zZXJpZkZhbWlseSA9IG1ha2VVbmlxdWU8Y29uc3QgQXRvbVN0cmlu
Zz4oc2VyaWZGYW1pbHkpOworICAgICAgICBtX3N0YW5kYXJkRmFtaWx5ID0gbWFrZVVuaXF1ZTxj
b25zdCBBdG9tU3RyaW5nPihzdGFuZGFyZEZhbWlseSk7CisgICAgICAgIG1fc3lzdGVtVWlGYW1p
bHkgPSBtYWtlVW5pcXVlPGNvbnN0IEF0b21TdHJpbmc+KHN5c3RlbVVpRmFtaWx5KTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX2N1cnNpdmVGYW1pbHkgPSBtYWtlVW5pcXVlPGNvbnN0IEF0b21T
dHJpbmc+KCZjdXJzaXZlRmFtaWx5RGF0YSk7CisgICAgICAgIG1fZmFudGFzeUZhbWlseSA9IG1h
a2VVbmlxdWU8Y29uc3QgQXRvbVN0cmluZz4oJmZhbnRhc3lGYW1pbHlEYXRhKTsKKyAgICAgICAg
bV9tb25vc3BhY2VGYW1pbHkgPSBtYWtlVW5pcXVlPGNvbnN0IEF0b21TdHJpbmc+KCZtb25vc3Bh
Y2VGYW1pbHlEYXRhKTsKKyAgICAgICAgbV9waWN0b2dyYXBoRmFtaWx5ID0gbWFrZVVuaXF1ZTxj
b25zdCBBdG9tU3RyaW5nPigmcGljdG9ncmFwaEZhbWlseURhdGEpOworICAgICAgICBtX3NhbnNT
ZXJpZkZhbWlseSA9IG1ha2VVbmlxdWU8Y29uc3QgQXRvbVN0cmluZz4oJnNhbnNTZXJpZkZhbWls
eURhdGEpOworICAgICAgICBtX3NlcmlmRmFtaWx5ID0gbWFrZVVuaXF1ZTxjb25zdCBBdG9tU3Ry
aW5nPigmc2VyaWZGYW1pbHlEYXRhKTsKKyAgICAgICAgbV9zdGFuZGFyZEZhbWlseSA9IG1ha2VV
bmlxdWU8Y29uc3QgQXRvbVN0cmluZz4oJnN0YW5kYXJkRmFtaWx5RGF0YSk7CisgICAgICAgIG1f
c3lzdGVtVWlGYW1pbHkgPSBtYWtlVW5pcXVlPGNvbnN0IEF0b21TdHJpbmc+KCZzeXN0ZW1VaUZh
bWlseURhdGEpOworICAgIH0KKwogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuYWRkQ2xpZW50
KCp0aGlzKTsKICAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5hZGRGb250TW9kaWZpZWRPYnNlcnZlciht
X2ZvbnRNb2RpZmllZE9ic2VydmVyKTsKICAgICBMT0coRm9udHMsICJDU1NGb250U2VsZWN0b3Ig
JXAgY3RvciIsIHRoaXMpOwpAQCAtOTQsOCArMTEzLDggQEAgRm9udEZhY2VTZXQqIENTU0ZvbnRT
ZWxlY3Rvcjo6Zm9udEZhY2VTZXRJZkV4aXN0cygpCiBGb250RmFjZVNldCYgQ1NTRm9udFNlbGVj
dG9yOjpmb250RmFjZVNldCgpCiB7CiAgICAgaWYgKCFtX2ZvbnRGYWNlU2V0KSB7Ci0gICAgICAg
IEFTU0VSVChtX2RvY3VtZW50KTsKLSAgICAgICAgbV9mb250RmFjZVNldCA9IEZvbnRGYWNlU2V0
OjpjcmVhdGUoKm1fZG9jdW1lbnQsIG1fY3NzRm9udEZhY2VTZXQuZ2V0KCkpOworICAgICAgICBB
U1NFUlQobV9jb250ZXh0KTsKKyAgICAgICAgbV9mb250RmFjZVNldCA9IEZvbnRGYWNlU2V0Ojpj
cmVhdGUoKm1fY29udGV4dCwgbV9jc3NGb250RmFjZVNldC5nZXQoKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuICptX2ZvbnRGYWNlU2V0OwpAQCAtMTk3LDcgKzIxNiw3IEBAIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjphZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwg
Ym9vbCBpc0luCiAgICAgaWYgKGxvYWRpbmdCZWhhdmlvcikKICAgICAgICAgZm9udEZhY2UtPnNl
dExvYWRpbmdCZWhhdmlvcigqbG9hZGluZ0JlaGF2aW9yKTsKIAotICAgIENTU0ZvbnRGYWNlOjph
cHBlbmRTb3VyY2VzKGZvbnRGYWNlLCBzcmNMaXN0LCBtX2RvY3VtZW50LmdldCgpLCBpc0luaXRp
YXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAgICBDU1NGb250RmFjZTo6YXBw
ZW5kU291cmNlcyhmb250RmFjZSwgc3JjTGlzdCwgbV9jb250ZXh0LCBpc0luaXRpYXRpbmdFbGVt
ZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKICAgICBpZiAoZm9udEZhY2UtPmNvbXB1dGVGYWls
dXJlU3RhdGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzEsMTQgKzI1MCw2IEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjp1bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRT
ZWxlY3RvckNsaWVudCYgY2xpCiAgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAot
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQ1NTRm9udFNlbGVjdG9yOjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QKLXsKLSAgICAvLyBUaGlzIGNsYXNzIHJldHVybnMgYSBTY3JpcHRFeGVj
dXRpb25Db250ZXh0IGRlc3BpdGUgaG9sZGluZyBhIERvY3VtZW50IGFzIHByZXBhcmF0aW9uIGZv
ciBhIGZ1dHVyZQotICAgIC8vIHdoZXJlIGl0IHdpbGwgYWN0dWFsbHkgaG9sZCBhIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgKHdoaWNoIHdvdWxkIGJlIGVpdGhlciBhIERvY3VtZW50IG9yIGEKLSAg
ICAvLyBXb3JrZXJHbG9iYWxTY29wZSwgaW4gdGhlIGNhc2Ugb2YgdXNpbmcgZm9udHMgaW4gT2Zm
c2NyZWVuQ2FudmFzKS4KLSAgICByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsKLX0KLQogdm9pZCBD
U1NGb250U2VsZWN0b3I6OmRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCkKIHsKICAgICAr
K21fdmVyc2lvbjsKQEAgLTI2OSw4ICsyODAsOCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Zm9u
dE1vZGlmaWVkKCkKIAogdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRTdHlsZVVwZGF0ZU5lZWRl
ZChDU1NGb250RmFjZSYpCiB7Ci0gICAgaWYgKG1fZG9jdW1lbnQpCi0gICAgICAgIG1fZG9jdW1l
bnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KG1fY29udGV4
dCkpCisgICAgICAgIGRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KS51cGRhdGVTdHlsZUlm
TmVlZGVkKCk7CiB9CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpmb250Q2FjaGVJbnZhbGlkYXRl
ZCgpCkBAIC0yNzgsMzIgKzI4OSwzMiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hl
SW52YWxpZGF0ZWQoKQogICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxBdG9tU3RyaW5nPiByZXNvbHZlR2VuZXJpY0ZhbWlseShEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QXRvbVN0cmluZz4gQ1NTRm9udFNl
bGVjdG9yOjpyZXNvbHZlR2VuZXJpY0ZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBhdXRvIHBs
YXRmb3JtUmVzdWx0ID0gRm9udERlc2NyaXB0aW9uOjpwbGF0Zm9ybVJlc29sdmVHZW5lcmljRmFt
aWx5KGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9j
YWxlKCksIGZhbWlseU5hbWUpOwogICAgIGlmICghcGxhdGZvcm1SZXN1bHQuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBwbGF0Zm9ybVJlc3VsdDsKIAotICAgIGlmICghZG9jdW1lbnQpCisgICAg
aWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25z
dCBTZXR0aW5ncyYgc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKKyAgICBjb25zdCBh
dXRvJiBzZXR0aW5ncyA9IG1fY29udGV4dC0+c2V0dGluZ3NWYWx1ZXMoKTsKIAogICAgIFVTY3Jp
cHRDb2RlIHNjcmlwdCA9IGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKTsKLSAgICBpZiAoZmFtaWx5
TmFtZSA9PSBzZXJpZkZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3Mu
c2VyaWZGb250RmFtaWx5KHNjcmlwdCkpOwotICAgIGlmIChmYW1pbHlOYW1lID09IHNhbnNTZXJp
ZkZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3Muc2Fuc1NlcmlmRm9u
dEZhbWlseShzY3JpcHQpKTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBjdXJzaXZlRmFtaWx5KQot
ICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5jdXJzaXZlRm9udEZhbWlseShzY3Jp
cHQpKTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBmYW50YXN5RmFtaWx5KQotICAgICAgICByZXR1
cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5mYW50YXN5Rm9udEZhbWlseShzY3JpcHQpKTsKLSAgICBp
ZiAoZmFtaWx5TmFtZSA9PSBtb25vc3BhY2VGYW1pbHkpCi0gICAgICAgIHJldHVybiBBdG9tU3Ry
aW5nKHNldHRpbmdzLmZpeGVkRm9udEZhbWlseShzY3JpcHQpKTsKLSAgICBpZiAoZmFtaWx5TmFt
ZSA9PSBwaWN0b2dyYXBoRmFtaWx5KQotICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5n
cy5waWN0b2dyYXBoRm9udEZhbWlseShzY3JpcHQpKTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBz
dGFuZGFyZEZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3Muc3RhbmRh
cmRGb250RmFtaWx5KHNjcmlwdCkpOworICAgIGlmIChmYW1pbHlOYW1lID09ICptX3NlcmlmRmFt
aWx5KQorICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5mb250R2VuZXJpY0ZhbWls
aWVzLnNlcmlmRm9udEZhbWlseShzY3JpcHQpKTsKKyAgICBpZiAoZmFtaWx5TmFtZSA9PSAqbV9z
YW5zU2VyaWZGYW1pbHkpCisgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHNldHRpbmdzLmZvbnRH
ZW5lcmljRmFtaWxpZXMuc2Fuc1NlcmlmRm9udEZhbWlseShzY3JpcHQpKTsKKyAgICBpZiAoZmFt
aWx5TmFtZSA9PSAqbV9jdXJzaXZlRmFtaWx5KQorICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhz
ZXR0aW5ncy5mb250R2VuZXJpY0ZhbWlsaWVzLmN1cnNpdmVGb250RmFtaWx5KHNjcmlwdCkpOwor
ICAgIGlmIChmYW1pbHlOYW1lID09ICptX2ZhbnRhc3lGYW1pbHkpCisgICAgICAgIHJldHVybiBB
dG9tU3RyaW5nKHNldHRpbmdzLmZvbnRHZW5lcmljRmFtaWxpZXMuZmFudGFzeUZvbnRGYW1pbHko
c2NyaXB0KSk7CisgICAgaWYgKGZhbWlseU5hbWUgPT0gKm1fbW9ub3NwYWNlRmFtaWx5KQorICAg
ICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5mb250R2VuZXJpY0ZhbWlsaWVzLmZpeGVk
Rm9udEZhbWlseShzY3JpcHQpKTsKKyAgICBpZiAoZmFtaWx5TmFtZSA9PSAqbV9waWN0b2dyYXBo
RmFtaWx5KQorICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5mb250R2VuZXJpY0Zh
bWlsaWVzLnBpY3RvZ3JhcGhGb250RmFtaWx5KHNjcmlwdCkpOworICAgIGlmIChmYW1pbHlOYW1l
ID09ICptX3N0YW5kYXJkRmFtaWx5KQorICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5n
cy5mb250R2VuZXJpY0ZhbWlsaWVzLnN0YW5kYXJkRm9udEZhbWlseShzY3JpcHQpKTsKIAogICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC0zMTQsMzQgKzMyNSwzMSBAQCBGb250UmFuZ2Vz
IENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcgogICAgIEFTU0VSVCghbV9idWlsZElzVW5kZXJ3YXkgfHwgbV9jb21wdXRp
bmdSb290U3R5bGVGb250Q291bnQpOwogCiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIChhbmQgRmly
ZWZveCkgc2F5cyB1c2VyIHNwZWNpZmllZCBnZW5lcmljIGZhbWlsaWVzIChzYW5zLXNlcmlmIGV0
Yy4pIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgdGhlIEBmb250LWZhY2UgbG9va3VwIHRvby4K
LSAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1lID09IHN0YW5k
YXJkRmFtaWx5OworICAgIGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5h
bWUgPT0gKm1fc3RhbmRhcmRGYW1pbHk7CiAKICAgICBBdG9tU3RyaW5nIGZhbWlseUZvckxvb2t1
cCA9IGZhbWlseU5hbWU7CiAgICAgT3B0aW9uYWw8Rm9udERlc2NyaXB0aW9uPiBvdmVycmlkZUZv
bnREZXNjcmlwdGlvbjsKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24qIGZvbnREZXNjcmlwdGlv
bkZvckxvb2t1cCA9ICZmb250RGVzY3JpcHRpb247Ci0gICAgYXV0byByZXNvbHZlR2VuZXJpY0Zh
bWlseSA9IFsmXSgpIHsKLSAgICAgICAgaWYgKGF1dG8gZ2VuZXJpY0ZhbWlseU9wdGlvbmFsID0g
V2ViQ29yZTo6cmVzb2x2ZUdlbmVyaWNGYW1pbHkobV9kb2N1bWVudC5nZXQoKSwgZm9udERlc2Ny
aXB0aW9uLCBmYW1pbHlOYW1lKSkKKyAgICBhdXRvIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFt
aWx5ID0gWyZdKCkgeworICAgICAgICBpZiAoYXV0byBnZW5lcmljRmFtaWx5T3B0aW9uYWwgPSBy
ZXNvbHZlR2VuZXJpY0ZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpKQogICAgICAg
ICAgICAgZmFtaWx5Rm9yTG9va3VwID0gKmdlbmVyaWNGYW1pbHlPcHRpb25hbDsKICAgICB9Owog
CiAgICAgaWYgKHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QpCi0gICAgICAgIHJlc29sdmVHZW5l
cmljRmFtaWx5KCk7CisgICAgICAgIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5KCk7Cisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaXM8RG9jdW1lbnQ+KG1fY29udGV4dCkgPyAmZG93bmNh
c3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpIDogbnVsbHB0cjsKICAgICBhdXRvKiBmYWNlID0gbV9j
c3NGb250RmFjZVNldC0+Zm9udEZhY2UoZm9udERlc2NyaXB0aW9uRm9yTG9va3VwLT5mb250U2Vs
ZWN0aW9uUmVxdWVzdCgpLCBmYW1pbHlGb3JMb29rdXApOwogICAgIGlmIChmYWNlKSB7Ci0gICAg
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2RvY3VtZW50KQotICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqbV9k
b2N1bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygpLCB0cnVlKTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAoZG9jdW1lbnQgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQorICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpkb2N1bWVudCwgZmFtaWx5Rm9yTG9va3Vw
LnN0cmluZygpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIGZhY2UtPmZvbnRSYW5nZXMoKmZvbnRE
ZXNjcmlwdGlvbkZvckxvb2t1cCk7CiAgICAgfQogCiAgICAgaWYgKCFyZXNvbHZlR2VuZXJpY0Zh
bWlseUZpcnN0KQotICAgICAgICByZXNvbHZlR2VuZXJpY0ZhbWlseSgpOworICAgICAgICByZXNv
bHZlQW5kQXNzaWduR2VuZXJpY0ZhbWlseSgpOwogICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6
c2luZ2xldG9uKCkuZm9udEZvckZhbWlseSgqZm9udERlc2NyaXB0aW9uRm9yTG9va3VwLCBmYW1p
bHlGb3JMb29rdXApOwotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKG1fZG9jdW1l
bnQpCi0gICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExv
YWQoKm1fZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgISFmb250KTsKLSAgICB9
CisgICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpkb2N1bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0
cmluZygpLCAhIWZvbnQpOwogICAgIHJldHVybiBGb250UmFuZ2VzIHsgV1RGTW92ZShmb250KSB9
OwogfQogCkBAIC0zNTYsMTIgKzM2NCwxNSBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6c3RvcExv
YWRpbmdBbmRDbGVhckZvbnRzKCkKICAgICBtX2lzU3RvcHBlZCA9IHRydWU7CiAgICAgbV9mb250
TG9hZGluZ1RpbWVyLnN0b3AoKTsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAg
Zm9yIChhdXRvJiBmb250SGFuZGxlIDogbV9mb250c1RvQmVnaW5Mb2FkaW5nKSB7Ci0gICAgICAg
IC8vIEJhbGFuY2VzIGluY3JlbWVudFJlcXVlc3RDb3VudCgpIGluIGJlZ2luTG9hZGluZ0ZvbnRT
b29uKCkuCi0gICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLmRlY3JlbWVudFJlcXVlc3RDb3Vu
dCgqZm9udEhhbmRsZSk7CisgICAgaWYgKGlzPERvY3VtZW50PihtX2NvbnRleHQpKSB7CisgICAg
ICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpOworICAg
ICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVu
dC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgICAgICBmb3IgKGF1dG8mIGZvbnRIYW5kbGUg
OiBtX2ZvbnRzVG9CZWdpbkxvYWRpbmcpIHsKKyAgICAgICAgICAgIC8vIEJhbGFuY2VzIGluY3Jl
bWVudFJlcXVlc3RDb3VudCgpIGluIGJlZ2luTG9hZGluZ0ZvbnRTb29uKCkuCisgICAgICAgICAg
ICBjYWNoZWRSZXNvdXJjZUxvYWRlci5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKmZvbnRIYW5kbGUp
OworICAgICAgICB9CisgICAgICAgIG1fZm9udHNUb0JlZ2luTG9hZGluZy5jbGVhcigpOwogICAg
IH0KLSAgICBtX2ZvbnRzVG9CZWdpbkxvYWRpbmcuY2xlYXIoKTsKIAogICAgIG1fY3NzRm9udEZh
Y2VTZXQtPmNsZWFyKCk7CiAgICAgbV9jbGllbnRzLmNsZWFyKCk7CkBAIC0zNjksMTQgKzM4MCwx
NiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6c3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCkKIAog
dm9pZCBDU1NGb250U2VsZWN0b3I6OmJlZ2luTG9hZGluZ0ZvbnRTb29uKENhY2hlZEZvbnQmIGZv
bnQpCiB7Ci0gICAgaWYgKG1faXNTdG9wcGVkKQorICAgIGlmIChtX2lzU3RvcHBlZCB8fCAhaXM8
RG9jdW1lbnQ+KG1fY29udGV4dCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpOworCiAgICAgbV9mb250c1RvQmVn
aW5Mb2FkaW5nLmFwcGVuZCgmZm9udCk7CiAgICAgLy8gSW5jcmVtZW50IHRoZSByZXF1ZXN0IGNv
dW50IG5vdywgaW4gb3JkZXIgdG8gcHJldmVudCBkaWRGaW5pc2hMb2FkIGZyb20gYmVpbmcgZGlz
cGF0Y2hlZAogICAgIC8vIGFmdGVyIHRoaXMgZm9udCBoYXMgYmVlbiByZXF1ZXN0ZWQgYnV0IGJl
Zm9yZSBpdCBiZWdhbiBsb2FkaW5nLiBCYWxhbmNlZCBieQogICAgIC8vIGRlY3JlbWVudFJlcXVl
c3RDb3VudCgpIGluIGZvbnRMb2FkaW5nVGltZXJGaXJlZCgpIGFuZCBpbiBzdG9wTG9hZGluZ0Fu
ZENsZWFyRm9udHMoKS4KLSAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmlu
Y3JlbWVudFJlcXVlc3RDb3VudChmb250KTsKKyAgICBkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLmluY3JlbWVudFJlcXVlc3RDb3VudChmb250KTsKIAogICAgIGlmICghbV9pc0ZvbnRM
b2FkaW5nU3VzcGVuZGVkICYmICFtX2ZvbnRMb2FkaW5nVGltZXIuaXNBY3RpdmUoKSkKICAgICAg
ICAgbV9mb250TG9hZGluZ1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwpAQCAtMzg5LDE2ICs0MDIs
MTggQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OnN1c3BlbmRGb250TG9hZGluZ1RpbWVyKCkKIAog
dm9pZCBDU1NGb250U2VsZWN0b3I6OmxvYWRQZW5kaW5nRm9udHMoKQogewotICAgIGlmIChtX2lz
Rm9udExvYWRpbmdTdXNwZW5kZWQpCisgICAgaWYgKG1faXNGb250TG9hZGluZ1N1c3BlbmRlZCB8
fCAhaXM8RG9jdW1lbnQ+KG1fY29udGV4dCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpOworCiAgICAgVmVjdG9y
PENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+PiBmb250c1RvQmVnaW5Mb2FkaW5nOwog
ICAgIGZvbnRzVG9CZWdpbkxvYWRpbmcuc3dhcChtX2ZvbnRzVG9CZWdpbkxvYWRpbmcpOwogCiAg
ICAgLy8gQ1NTRm9udFNlbGVjdG9yIGNvdWxkIGdldCBkZWxldGVkIHZpYSBiZWdpbkxvYWRJZk5l
ZWRlZCgpIG9yIGxvYWREb25lKCkgdW5sZXNzIHByb3RlY3RlZC4KICAgICBSZWY8Q1NTRm9udFNl
bGVjdG9yPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVy
JiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVy
KCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyID0gZG9j
dW1lbnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKICAgICBmb3IgKGF1dG8mIGZvbnRIYW5kbGUg
OiBmb250c1RvQmVnaW5Mb2FkaW5nKSB7CiAgICAgICAgIGZvbnRIYW5kbGUtPmJlZ2luTG9hZElm
TmVlZGVkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgLy8gQmFsYW5jZXMgaW5jcmVt
ZW50UmVxdWVzdENvdW50KCkgaW4gYmVnaW5Mb2FkaW5nRm9udFNvb24oKS4KQEAgLTQwOCwxOCAr
NDIzLDIyIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpsb2FkUGVuZGluZ0ZvbnRzKCkKIAogdm9p
ZCBDU1NGb250U2VsZWN0b3I6OmZvbnRMb2FkaW5nVGltZXJGaXJlZCgpCiB7CisgICAgaWYgKCFp
czxEb2N1bWVudD4obV9jb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgUmVmPENTU0Zv
bnRTZWxlY3Rvcj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKICAgICBsb2FkUGVuZGluZ0ZvbnRz
KCk7CiAKICAgICAvLyBGSVhNRTogVXNlIFN1YnJlc291cmNlTG9hZGVyIGluc3RlYWQuCiAgICAg
Ly8gQ2FsbCBGcmFtZUxvYWRlcjo6bG9hZERvbmUgYmVmb3JlIEZyYW1lTG9hZGVyOjpzdWJyZXNv
dXJjZUxvYWREb25lIHRvIG1hdGNoIHRoZSBvcmRlciBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6bm90
aWZ5RG9uZS4KLSAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmxvYWREb25l
KExvYWRDb21wbGV0aW9uVHlwZTo6RmluaXNoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqbV9jb250ZXh0KTsKKyAgICBkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLmxvYWREb25lKExvYWRDb21wbGV0aW9uVHlwZTo6RmluaXNoKTsKICAgICAvLyBFbnN1
cmUgdGhhdCBpZiB0aGUgcmVxdWVzdCBjb3VudCByZWFjaGVzIHplcm8sIHRoZSBmcmFtZSBsb2Fk
ZXIgd2lsbCBrbm93IGFib3V0IGl0LgogICAgIC8vIE5ldyBmb250IGxvYWRzIG1heSBiZSB0cmln
Z2VyZWQgYnkgbGF5b3V0IGFmdGVyIHRoZSBkb2N1bWVudCBsb2FkIGlzIGNvbXBsZXRlIGJ1dCBi
ZWZvcmUgd2UgaGF2ZSBkaXNwYXRjaGVkCiAgICAgLy8gZGlkRmluaXNoTG9hZGluZyBmb3IgdGhl
IGZyYW1lLiBNYWtlIHN1cmUgdGhlIGRlbGVnYXRlIGlzIGFsd2F5cyBkaXNwYXRjaGVkIGJ5IGNo
ZWNraW5nIGV4cGxpY2l0bHkuCi0gICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZnJh
bWUoKSkKLSAgICAgICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkuY2hlY2tMb2FkQ29t
cGxldGUoKTsKKyAgICBpZiAobV9jb250ZXh0ICYmIGRvY3VtZW50LmZyYW1lKCkpCisgICAgICAg
IGRvY3VtZW50LmZyYW1lKCktPmxvYWRlcigpLmNoZWNrTG9hZENvbXBsZXRlKCk7CiB9CiAKIHNp
emVfdCBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udENvdW50KCkKQEAgLTQyNyw3ICs0NDYs
NyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRDb3VudCgpCiAgICAgaWYg
KG1faXNTdG9wcGVkKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtX2RvY3VtZW50
LT5zZXR0aW5ncygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocygpID8gMSA6IDA7Cisg
ICAgcmV0dXJuIG1fY29udGV4dC0+c2V0dGluZ3NWYWx1ZXMoKS5mb250RmFsbGJhY2tQcmVmZXJz
UGljdG9ncmFwaHMgPyAxIDogMDsKIH0KIAogUmVmUHRyPEZvbnQ+IENTU0ZvbnRTZWxlY3Rvcjo6
ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIHNp
emVfdCBpbmRleCkKQEAgLTQzNywxMiArNDU2LDEyIEBAIFJlZlB0cjxGb250PiBDU1NGb250U2Vs
ZWN0b3I6OmZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
CiAgICAgaWYgKG1faXNTdG9wcGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlm
ICghbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMo
KSkKKyAgICBpZiAoIW1fY29udGV4dC0+c2V0dGluZ3NWYWx1ZXMoKS5mb250RmFsbGJhY2tQcmVm
ZXJzUGljdG9ncmFwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8mIHBpY3Rv
Z3JhcGhGb250RmFtaWx5ID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5waWN0b2dyYXBoRm9udEZh
bWlseSgpOworICAgIGF1dG8mIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gbV9jb250ZXh0LT5zZXR0
aW5nc1ZhbHVlcygpLmZvbnRHZW5lcmljRmFtaWxpZXMucGljdG9ncmFwaEZvbnRGYW1pbHkoKTsK
ICAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoZm9u
dERlc2NyaXB0aW9uLCBwaWN0b2dyYXBoRm9udEZhbWlseSk7Ci0gICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkK
LSAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCptX2Rv
Y3VtZW50LCBwaWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
ICYmIGlzPERvY3VtZW50PihtX2NvbnRleHQpKQorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nRm9udExvYWQoZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpLCBw
aWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250KTsKIAogICAgIHJldHVybiBmb250OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IGU3Zjg1NmIwOTg2ODkxODUxNWYzZjEy
YjI3MzBkYjRiOWI4NmIzNzMuLjQxZDQ2NTM4Y2I4MmUwNDFhNTg4YWEwNzkxOWY5ZmI2YmQ1ZGM3
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTQ1LDE0ICs0NSwxNCBA
QCBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlOwog
Y2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ2FjaGVkRm9udDsKLWNsYXNzIERvY3VtZW50Owor
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFN0eWxlUnVsZUZvbnRGYWNlOwog
CiBjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBwdWJsaWMgRm9udFNlbGVjdG9yLCBwdWJs
aWMgQ1NTRm9udEZhY2U6OkNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPENTU0ZvbnRTZWxl
Y3Rvcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIHN0YXRpYyBS
ZWY8Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRTZWxlY3Rvcihk
b2N1bWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250U2VsZWN0b3Io
Y29udGV4dCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DU1NGb250U2VsZWN0b3IoKTsKICAgICAK
QEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJGb3JJbnZhbGlkYXRp
b25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JikgZmluYWw7CiAgICAgdm9pZCB1bnJlZ2lz
dGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYpIGZpbmFsOwog
Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogICAgIHZvaWQgYmVnaW5Mb2FkaW5nRm9u
dFNvb24oQ2FjaGVkRm9udCYpOwogICAgIHZvaWQgc3VzcGVuZEZvbnRMb2FkaW5nVGltZXIoKTsK
QEAgLTk1LDEyICs5NSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpIGZpbmFsIHsgRm9u
dFNlbGVjdG9yOjpkZXJlZigpOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ1NTRm9udFNl
bGVjdG9yKERvY3VtZW50Jik7CisgICAgZXhwbGljaXQgQ1NTRm9udFNlbGVjdG9yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFj
a3MoKTsKIAogICAgIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGlu
Zyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
KSBmaW5hbDsKIAorICAgIE9wdGlvbmFsPEF0b21TdHJpbmc+IHJlc29sdmVHZW5lcmljRmFtaWx5
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisKICAg
ICAvLyBDU1NGb250RmFjZTo6Q2xpZW50CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNl
JikgZmluYWw7CiAgICAgdm9pZCBmb250U3R5bGVVcGRhdGVOZWVkZWQoQ1NTRm9udEZhY2UmKSBm
aW5hbDsKQEAgLTEyMCw3ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgVmVjdG9yPFBl
bmRpbmdGb250RmFjZVJ1bGU+IG1fc3RhZ2luZ0FyZWE7CiAKLSAgICBXZWFrUHRyPERvY3VtZW50
PiBtX2RvY3VtZW50OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKICAg
ICBSZWZQdHI8Rm9udEZhY2VTZXQ+IG1fZm9udEZhY2VTZXQ7CiAgICAgUmVmPENTU0ZvbnRGYWNl
U2V0PiBtX2Nzc0ZvbnRGYWNlU2V0OwogICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yQ2xpZW50Kj4g
bV9jbGllbnRzOwpAQCAtMTQwLDYgKzE0MiwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jcmVh
dGluZ0ZvbnQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9idWlsZElzVW5kZXJ3YXkgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBmYWxzZSB9OworCisgICAgc3RkOjp1bmlxdWVfcHRy
PGNvbnN0IEF0b21TdHJpbmc+IG1fY3Vyc2l2ZUZhbWlseTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Y29uc3QgQXRvbVN0cmluZz4gbV9mYW50YXN5RmFtaWx5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxj
b25zdCBBdG9tU3RyaW5nPiBtX21vbm9zcGFjZUZhbWlseTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Y29uc3QgQXRvbVN0cmluZz4gbV9waWN0b2dyYXBoRmFtaWx5OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxjb25zdCBBdG9tU3RyaW5nPiBtX3NhbnNTZXJpZkZhbWlseTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Y29uc3QgQXRvbVN0cmluZz4gbV9zZXJpZkZhbWlseTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Y29uc3QgQXRvbVN0cmluZz4gbV9zdGFuZGFyZEZhbWlseTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Y29uc3QgQXRvbVN0cmluZz4gbV9zeXN0ZW1VaUZhbWlseTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwCmluZGV4IDIxYjZmNjhlZjMzMzZh
NGE5Y2RiNzNjNTZlNWI1ZTc4ZTA0YWNkYzQuLmFkODQ2ZGY1OTg3OTE4ZTBmOTVmZmU5ZDc5NjBm
NzIxZTcxNzY5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcApAQCAtNDEsMjIgKzQx
LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KEZvbnRGYWNlU2V0KTsKIAotUmVmPEZvbnRGYWNlU2V0PiBGb250RmFjZVNldDo6Y3JlYXRlKERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0aWFs
RmFjZXMpCitSZWY8Rm9udEZhY2VTZXQ+IEZvbnRGYWNlU2V0OjpjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0
aWFsRmFjZXMpCiB7Ci0gICAgUmVmPEZvbnRGYWNlU2V0PiByZXN1bHQgPSBhZG9wdFJlZigqbmV3
IEZvbnRGYWNlU2V0KGRvY3VtZW50LCBpbml0aWFsRmFjZXMpKTsKKyAgICBSZWY8Rm9udEZhY2VT
ZXQ+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgRm9udEZhY2VTZXQoY29udGV4dCwgaW5pdGlhbEZh
Y2VzKSk7CiAgICAgcmVzdWx0LT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1SZWY8Rm9udEZhY2VTZXQ+IEZvbnRGYWNlU2V0OjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50LCBDU1NGb250RmFjZVNldCYgYmFja2luZykKK1JlZjxGb250RmFjZVNldD4gRm9udEZh
Y2VTZXQ6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBDU1NGb250RmFj
ZVNldCYgYmFja2luZykKIHsKLSAgICBSZWY8Rm9udEZhY2VTZXQ+IHJlc3VsdCA9IGFkb3B0UmVm
KCpuZXcgRm9udEZhY2VTZXQoZG9jdW1lbnQsIGJhY2tpbmcpKTsKKyAgICBSZWY8Rm9udEZhY2VT
ZXQ+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgRm9udEZhY2VTZXQoY29udGV4dCwgYmFja2luZykp
OwogICAgIHJlc3VsdC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVj
dG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFjZXMpCi0gICAgOiBBY3RpdmVET01PYmpl
Y3QoZG9jdW1lbnQpCitGb250RmFjZVNldDo6Rm9udEZhY2VTZXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFj
ZXMpCisgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX2JhY2tpbmcoQ1NT
Rm9udEZhY2VTZXQ6OmNyZWF0ZSgpKQogICAgICwgbV9yZWFkeVByb21pc2UobWFrZVVuaXF1ZVJl
ZjxSZWFkeVByb21pc2U+KCp0aGlzLCAmRm9udEZhY2VTZXQ6OnJlYWR5UHJvbWlzZVJlc29sdmUp
KQogewpAQCAtNjUsMTMgKzY1LDE2IEBAIEZvbnRGYWNlU2V0OjpGb250RmFjZVNldChEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pCiAgICAgICAg
IGFkZCgqZmFjZSk7CiB9CiAKLUZvbnRGYWNlU2V0OjpGb250RmFjZVNldChEb2N1bWVudCYgZG9j
dW1lbnQsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRv
Y3VtZW50KQorRm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKQorICAgIDogQWN0aXZlRE9NT2JqZWN0
KCZjb250ZXh0KQogICAgICwgbV9iYWNraW5nKGJhY2tpbmcpCiAgICAgLCBtX3JlYWR5UHJvbWlz
ZShtYWtlVW5pcXVlUmVmPFJlYWR5UHJvbWlzZT4oKnRoaXMsICZGb250RmFjZVNldDo6cmVhZHlQ
cm9taXNlUmVzb2x2ZSkpCiB7Ci0gICAgaWYgKGRvY3VtZW50LmZyYW1lKCkpCi0gICAgICAgIG1f
aXNEb2N1bWVudExvYWRlZCA9IGRvY3VtZW50LmxvYWRFdmVudEZpbmlzaGVkKCkgJiYgIWRvY3Vt
ZW50LnByb2Nlc3NpbmdMb2FkRXZlbnQoKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQp
KSB7CisgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQp
OworICAgICAgICBpZiAoZG9jdW1lbnQuZnJhbWUoKSkKKyAgICAgICAgICAgIG1faXNEb2N1bWVu
dExvYWRlZCA9IGRvY3VtZW50LmxvYWRFdmVudEZpbmlzaGVkKCkgJiYgIWRvY3VtZW50LnByb2Nl
c3NpbmdMb2FkRXZlbnQoKTsKKyAgICB9CiAKICAgICBpZiAobV9pc0RvY3VtZW50TG9hZGVkICYm
ICFiYWNraW5nLmhhc0FjdGl2ZUZvbnRGYWNlcygpKQogICAgICAgICBtX3JlYWR5UHJvbWlzZS0+
cmVzb2x2ZSgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VT
ZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oCmluZGV4IDJmNjk2ODE0OWI4
MDg0YjZlNjNjMWYyNTNmYzY2ZDQ4NWVlNmY3OTQuLmRjMGNmNWRjYWYxZjdmMTM0MTBiNDc3OTUz
N2VlZjE4ODgwNTJkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oCkBAIC00MSw4ICs0MSw4
IEBAIGNsYXNzIERPTUV4Y2VwdGlvbjsKIGNsYXNzIEZvbnRGYWNlU2V0IGZpbmFsIDogcHVibGlj
IFJlZkNvdW50ZWQ8Rm9udEZhY2VTZXQ+LCBwcml2YXRlIENTU0ZvbnRGYWNlU2V0OjpGb250RXZl
bnRDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEZvbnRGYWNlU2V0KTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoRG9jdW1lbnQmLCBjb25z
dCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcyk7Ci0gICAgc3RhdGljIFJl
ZjxGb250RmFjZVNldD4gY3JlYXRlKERvY3VtZW50JiwgQ1NTRm9udEZhY2VTZXQmIGJhY2tpbmcp
OworICAgIHN0YXRpYyBSZWY8Rm9udEZhY2VTZXQ+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFjZXMpOworICAg
IHN0YXRpYyBSZWY8Rm9udEZhY2VTZXQ+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Q1NTRm9udEZhY2VTZXQmIGJhY2tpbmcpOwogICAgIHZpcnR1YWwgfkZvbnRGYWNlU2V0KCk7CiAK
ICAgICBib29sIGhhcyhGb250RmFjZSYpIGNvbnN0OwpAQCAtOTUsOCArOTUsOCBAQCBwcml2YXRl
OgogICAgICAgICBib29sIGhhc1JlYWNoZWRUZXJtaW5hbFN0YXRlIHsgZmFsc2UgfTsKICAgICB9
OwogCi0gICAgRm9udEZhY2VTZXQoRG9jdW1lbnQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRG
YWNlPj4mKTsKLSAgICBGb250RmFjZVNldChEb2N1bWVudCYsIENTU0ZvbnRGYWNlU2V0Jik7Cisg
ICAgRm9udEZhY2VTZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Rm9udEZhY2U+PiYpOworICAgIEZvbnRGYWNlU2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBDU1NGb250RmFjZVNldCYpOwogCiAgICAgLy8gQ1NTRm9udEZhY2VTZXQ6OkZvbnRFdmVudENs
aWVudAogICAgIHZvaWQgZmFjZUZpbmlzaGVkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0
YXR1cykgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQu
aWRsIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbAppbmRleCBjZDU3ZmIxYzQx
M2E5MDRlYzE2ZTg1ZDk2Zjg1NDUzZTQ5MzZlZmRlLi4yNmQwYmNkYzY4YzVjMmMwZmQxMWFiMjNh
NTM3MTE2ZjkzOGU1ZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VT
ZXQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwKQEAgLTMyLDcg
KzMyLDcgQEAgZW51bSBGb250RmFjZVNldExvYWRTdGF0dXMgewogICAgIEFjdGl2ZURPTU9iamVj
dCwKICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgRm9udEZhY2VTZXQgOiBFdmVudFRh
cmdldCB7Ci0gICAgW0NhbGxXaXRoPURvY3VtZW50XSBjb25zdHJ1Y3RvcihzZXF1ZW5jZTxGb250
RmFjZT4gaW5pdGlhbEZhY2VzKTsKKyAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dF0gY29uc3RydWN0b3Ioc2VxdWVuY2U8Rm9udEZhY2U+IGluaXRpYWxGYWNlcyk7CiAKICAgICBi
b29sZWFuIGhhcyhGb250RmFjZSBmb250KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422381</attachid>
            <date>2021-03-05 10:25:09 -0800</date>
            <delta_ts>2021-03-08 02:47:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222735-20210305182507.patch</filename>
            <type>text/plain</type>
            <size>29859</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczODgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU1YWQzZWE4YmMyNTlk
MjRkMWMxMzQ5NGMxOTFlOGNhYTU0YzMwYi4uMDI0YThhNGRjZTQ4NGEyZGJiOTI1NzgzMTJmNjZi
ZjJjYjIwZGRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBBbGxvdyBjcmVhdGlvbiBvZiBh
IENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgbm9uLURvY3VtZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjcz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxh
Y2UgRG9jdW1lbnQgbWVtYmVyIG9mIENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC4KKyAgICAgICAgVGhpcyBhbHNvIGNoYW5nZXMgbWFrZV9uYW1lcy5wbCBzdHJp
bmcgaGVhZGVyIGdlbmVyYXRpb24gdG8gYWxsb3cgZm9yIGVhc2llciBlbnVtZXJhdGlvbiBvZiBm
b250IGZhbWlseSBzdHJpbmdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyBuZXcgYmVoYXZp
b3VyIGlzIGN1cnJlbnRseSB1bnVzZWQuIEV4aXN0aW5nIGJlaGF2aW91ciBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9TdGF0aWNTdHJpbmcu
cG06CisgICAgICAgIChHZW5lcmF0ZVN0cmluZ3MpOiBSZXZlcnQgY2hhbmdlIGZyb20gYnVnIDIy
MjU1MgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
bV92ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VT
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250U3R5bGVVcGRhdGVOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpyZXNvbHZlR2VuZXJpY0Zh
bWlseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JG
YW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpzdG9wTG9hZGluZ0Fu
ZENsZWFyRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpiZWdpbkxv
YWRpbmdGb250U29vbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmxvYWRQ
ZW5kaW5nRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250TG9h
ZGluZ1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZhbGxi
YWNrRm9udEF0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAgICog
Y3NzL0ZvbnRGYWNlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KToKKyAgICAg
ICAgKiBjc3MvRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKiBjc3MvRm9udEZhY2VTZXQuaWRsOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0Lmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmludE5h
bWVzSGVhZGVyRmlsZSk6IE1ha2UgZ2xvYmFsIHN0cmluZyBkYXRhIGFuZCBuYW1lcyBhY2Nlc3Np
YmxlIHZpYSBhIFZlY3RvciBhbmQgYWRkIGFuIGVudW0gb2YgbmFtZSBpbmRpY2VzLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJp
Y0ZhbWlsaWVzLmg6CisKIDIwMjEtMDMtMDMgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIEFsbG93IENTUyBmb250LXN0eWxpbmcgZm9yIGNhbnZhcyB3aXRob3V0IFJl
bmRlclN0eWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL1N0
YXRpY1N0cmluZy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3Ry
aW5nLnBtCmluZGV4IGQ3NDJkNDVhZDZjZjkzNjQ1MWRjYTg1MjFjMTI1NjUxOWJlNjk5YmYuLjEw
YWY3YzJmYmJjMDQwMWYwYzI1NGNlMmM5OGRjYWI2M2ZmODBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5nLnBtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5nLnBtCkBAIC00Myw3ICs0Myw3IEBA
IEVORAogCiAgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXN0cmluZ3MpIHsKICAgICAgICAg
bXkgJHZhbHVlID0gJHN0cmluZ3N7JG5hbWV9OwotICAgICAgICBwdXNoKEByZXN1bHQsICJjb25z
dCBTdHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBsICR7bmFtZX1EYXRhKFwiJHt2YWx1ZX1cIik7
XG4iKTsKKyAgICAgICAgcHVzaChAcmVzdWx0LCAic3RhdGljIGNvbnN0ZXhwciBTdHJpbmdJbXBs
OjpTdGF0aWNTdHJpbmdJbXBsICR7bmFtZX1EYXRhKFwiJHt2YWx1ZX1cIik7XG4iKTsKICAgICB9
CiAKICAgICBwdXNoKEByZXN1bHQsIDw8RU5EKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxl
Y3Rvci5jcHAKaW5kZXggNWNjMTA4OWM1ODJjMWI0OTE4YTc5ODVhYTZmMjBlZmYxMmY1YWM2Mi4u
OWRkOGIwMWJmNzAzMTM5NmM0NDRkYjEyZjhjZmQwZDg4YTllYWVmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTYxLDE2ICs2MSwyNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKIAotQ1NTRm9udFNlbGVj
dG9yOjpDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogQWN0aXZlRE9N
T2JqZWN0KGRvY3VtZW50KQotICAgICwgbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkp
CitDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwgbV9jb250
ZXh0KG1ha2VXZWFrUHRyKGNvbnRleHQpKQogICAgICwgbV9jc3NGb250RmFjZVNldChDU1NGb250
RmFjZVNldDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9mb250TW9kaWZpZWRPYnNlcnZlcihbdGhp
c10geyBmb250TW9kaWZpZWQoKTsgfSkKICAgICAsIG1fZm9udExvYWRpbmdUaW1lcigqdGhpcywg
JkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udExvYWRpbmdUaW1lckZpcmVkKQogICAgICwgbV91bmlxdWVJ
ZCgrK2ZvbnRTZWxlY3RvcklkKQogICAgICwgbV92ZXJzaW9uKDApCiB7Ci0gICAgQVNTRVJUKG1f
ZG9jdW1lbnQpOworICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKKyAgICAgICAgbV9m
b250RmFtaWx5TmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShXZWJLaXRGb250RmFtaWx5TmFt
ZXM6OmZhbWlseU5hbWVzLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGZhbWlseU5hbWUg
OiBXZWJLaXRGb250RmFtaWx5TmFtZXM6OmZhbWlseU5hbWVzLmdldCgpKQorICAgICAgICAgICAg
bV9mb250RmFtaWx5TmFtZXMudW5jaGVja2VkQ29uc3RydWN0QW5kQXBwZW5kKGZhbWlseU5hbWUp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZm9udEZhbWlseU5hbWVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpmYW1pbHlOYW1lc0RhdGEtPnNpemUoKSk7
CisgICAgICAgIGZvciAoYXV0byYgZmFtaWx5TmFtZSA6IFdlYktpdEZvbnRGYW1pbHlOYW1lczo6
ZmFtaWx5TmFtZXNEYXRhLmdldCgpKQorICAgICAgICAgICAgbV9mb250RmFtaWx5TmFtZXMudW5j
aGVja2VkQXBwZW5kKGZhbWlseU5hbWUpOworICAgIH0KKwogICAgIEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuYWRkQ2xpZW50KCp0aGlzKTsKICAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5hZGRGb250TW9k
aWZpZWRPYnNlcnZlcihtX2ZvbnRNb2RpZmllZE9ic2VydmVyKTsKICAgICBMT0coRm9udHMsICJD
U1NGb250U2VsZWN0b3IgJXAgY3RvciIsIHRoaXMpOwpAQCAtOTQsOCArMTAzLDggQEAgRm9udEZh
Y2VTZXQqIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXRJZkV4aXN0cygpCiBGb250RmFjZVNl
dCYgQ1NTRm9udFNlbGVjdG9yOjpmb250RmFjZVNldCgpCiB7CiAgICAgaWYgKCFtX2ZvbnRGYWNl
U2V0KSB7Ci0gICAgICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLSAgICAgICAgbV9mb250RmFjZVNl
dCA9IEZvbnRGYWNlU2V0OjpjcmVhdGUoKm1fZG9jdW1lbnQsIG1fY3NzRm9udEZhY2VTZXQuZ2V0
KCkpOworICAgICAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICAgICAgbV9mb250RmFjZVNldCA9
IEZvbnRGYWNlU2V0OjpjcmVhdGUoKm1fY29udGV4dCwgbV9jc3NGb250RmFjZVNldC5nZXQoKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuICptX2ZvbnRGYWNlU2V0OwpAQCAtMTk3LDcgKzIwNiw3IEBA
IHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2Um
IGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luCiAgICAgaWYgKGxvYWRpbmdCZWhhdmlvcikKICAgICAg
ICAgZm9udEZhY2UtPnNldExvYWRpbmdCZWhhdmlvcigqbG9hZGluZ0JlaGF2aW9yKTsKIAotICAg
IENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKGZvbnRGYWNlLCBzcmNMaXN0LCBtX2RvY3VtZW50
LmdldCgpLCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAgICBD
U1NGb250RmFjZTo6YXBwZW5kU291cmNlcyhmb250RmFjZSwgc3JjTGlzdCwgbV9jb250ZXh0Lmdl
dCgpLCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKICAgICBpZiAo
Zm9udEZhY2UtPmNvbXB1dGVGYWlsdXJlU3RhdGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MzEsMTQgKzI0MCw2IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjp1bnJlZ2lzdGVyRm9ySW52YWxp
ZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYgY2xpCiAgICAgbV9jbGllbnRzLnJl
bW92ZSgmY2xpZW50KTsKIH0KIAotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQ1NTRm9udFNlbGVj
dG9yOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKLXsKLSAgICAvLyBUaGlzIGNsYXNz
IHJldHVybnMgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGRlc3BpdGUgaG9sZGluZyBhIERvY3Vt
ZW50IGFzIHByZXBhcmF0aW9uIGZvciBhIGZ1dHVyZQotICAgIC8vIHdoZXJlIGl0IHdpbGwgYWN0
dWFsbHkgaG9sZCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKHdoaWNoIHdvdWxkIGJlIGVpdGhl
ciBhIERvY3VtZW50IG9yIGEKLSAgICAvLyBXb3JrZXJHbG9iYWxTY29wZSwgaW4gdGhlIGNhc2Ug
b2YgdXNpbmcgZm9udHMgaW4gT2Zmc2NyZWVuQ2FudmFzKS4KLSAgICByZXR1cm4gbV9kb2N1bWVu
dC5nZXQoKTsKLX0KLQogdm9pZCBDU1NGb250U2VsZWN0b3I6OmRpc3BhdGNoSW52YWxpZGF0aW9u
Q2FsbGJhY2tzKCkKIHsKICAgICArK21fdmVyc2lvbjsKQEAgLTI2OSw4ICsyNzAsOCBAQCB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6Zm9udE1vZGlmaWVkKCkKIAogdm9pZCBDU1NGb250U2VsZWN0b3I6
OmZvbnRTdHlsZVVwZGF0ZU5lZWRlZChDU1NGb250RmFjZSYpCiB7Ci0gICAgaWYgKG1fZG9jdW1l
bnQpCi0gICAgICAgIG1fZG9jdW1lbnQtPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBpZiAo
aXM8RG9jdW1lbnQ+KG1fY29udGV4dC5nZXQoKSkpCisgICAgICAgIGRvd25jYXN0PERvY3VtZW50
PigqbV9jb250ZXh0KS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiB9CiAKIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjpmb250Q2FjaGVJbnZhbGlkYXRlZCgpCkBAIC0yNzgsMzIgKzI3OSwyMCBAQCB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0ZWQoKQogICAgIGRpc3BhdGNoSW52
YWxpZGF0aW9uQ2FsbGJhY2tzKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxBdG9tU3RyaW5nPiBy
ZXNvbHZlR2VuZXJpY0ZhbWlseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0
aW9uYWw8QXRvbVN0cmluZz4gQ1NTRm9udFNlbGVjdG9yOjpyZXNvbHZlR2VuZXJpY0ZhbWlseShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5TmFtZSkKIHsKICAgICBhdXRvIHBsYXRmb3JtUmVzdWx0ID0gRm9udERlc2NyaXB0aW9u
OjpwbGF0Zm9ybVJlc29sdmVHZW5lcmljRmFtaWx5KGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKSwg
Zm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCksIGZhbWlseU5hbWUpOwogICAgIGlmICgh
cGxhdGZvcm1SZXN1bHQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVJlc3VsdDsK
IAotICAgIGlmICghZG9jdW1lbnQpCisgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBjb25zdCBTZXR0aW5ncyYgc2V0dGluZ3MgPSBkb2N1bWVu
dC0+c2V0dGluZ3MoKTsKKyAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fY29udGV4dC0+c2V0
dGluZ3NWYWx1ZXMoKTsKIAogICAgIFVTY3JpcHRDb2RlIHNjcmlwdCA9IGZvbnREZXNjcmlwdGlv
bi5zY3JpcHQoKTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBzZXJpZkZhbWlseSkKLSAgICAgICAg
cmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3Muc2VyaWZGb250RmFtaWx5KHNjcmlwdCkpOwotICAg
IGlmIChmYW1pbHlOYW1lID09IHNhbnNTZXJpZkZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21T
dHJpbmcoc2V0dGluZ3Muc2Fuc1NlcmlmRm9udEZhbWlseShzY3JpcHQpKTsKLSAgICBpZiAoZmFt
aWx5TmFtZSA9PSBjdXJzaXZlRmFtaWx5KQotICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0
aW5ncy5jdXJzaXZlRm9udEZhbWlseShzY3JpcHQpKTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBm
YW50YXN5RmFtaWx5KQotICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5mYW50YXN5
Rm9udEZhbWlseShzY3JpcHQpKTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBtb25vc3BhY2VGYW1p
bHkpCi0gICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHNldHRpbmdzLmZpeGVkRm9udEZhbWlseShz
Y3JpcHQpKTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBwaWN0b2dyYXBoRmFtaWx5KQotICAgICAg
ICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5waWN0b2dyYXBoRm9udEZhbWlseShzY3JpcHQp
KTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBzdGFuZGFyZEZhbWlseSkKLSAgICAgICAgcmV0dXJu
IEF0b21TdHJpbmcoc2V0dGluZ3Muc3RhbmRhcmRGb250RmFtaWx5KHNjcmlwdCkpOworICAgIGlm
IChhdXRvIGZhbWlseVN0cmluZyA9IHNldHRpbmdzLmZvbnRHZW5lcmljRmFtaWxpZXMuZm9udEZh
bWlseShzdGF0aWNfY2FzdDxGYW1pbHlOYW1lc0luZGV4PihtX2ZvbnRGYW1pbHlOYW1lcy5maW5k
KGZhbWlseU5hbWUpKSwgc2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoKmZhbWls
eVN0cmluZyk7CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtMzE0LDM0ICszMDMs
MzEgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1pbHkoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKICAgICBBU1NFUlQoIW1fYnVpbGRJc1VuZGVy
d2F5IHx8IG1fY29tcHV0aW5nUm9vdFN0eWxlRm9udENvdW50KTsKIAogICAgIC8vIEZJWE1FOiBU
aGUgc3BlYyAoYW5kIEZpcmVmb3gpIHNheXMgdXNlciBzcGVjaWZpZWQgZ2VuZXJpYyBmYW1pbGll
cyAoc2Fucy1zZXJpZiBldGMuKSBzaG91bGQgYmUgcmVzb2x2ZWQgYmVmb3JlIHRoZSBAZm9udC1m
YWNlIGxvb2t1cCB0b28uCi0gICAgYm9vbCByZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0ID0gZmFt
aWx5TmFtZSA9PSBzdGFuZGFyZEZhbWlseTsKKyAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5
Rmlyc3QgPSBmYW1pbHlOYW1lID09IG1fZm9udEZhbWlseU5hbWVzW3N0YXRpY19jYXN0PGxvbmcg
aW50PihGYW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseSldOwogCiAgICAgQXRvbVN0cmlu
ZyBmYW1pbHlGb3JMb29rdXAgPSBmYW1pbHlOYW1lOwogICAgIE9wdGlvbmFsPEZvbnREZXNjcmlw
dGlvbj4gb3ZlcnJpZGVGb250RGVzY3JpcHRpb247CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9u
KiBmb250RGVzY3JpcHRpb25Gb3JMb29rdXAgPSAmZm9udERlc2NyaXB0aW9uOwotICAgIGF1dG8g
cmVzb2x2ZUdlbmVyaWNGYW1pbHkgPSBbJl0oKSB7Ci0gICAgICAgIGlmIChhdXRvIGdlbmVyaWNG
YW1pbHlPcHRpb25hbCA9IFdlYkNvcmU6OnJlc29sdmVHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQu
Z2V0KCksIGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSkpCisgICAgYXV0byByZXNvbHZlQW5k
QXNzaWduR2VuZXJpY0ZhbWlseSA9IFsmXSgpIHsKKyAgICAgICAgaWYgKGF1dG8gZ2VuZXJpY0Zh
bWlseU9wdGlvbmFsID0gcmVzb2x2ZUdlbmVyaWNGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1p
bHlOYW1lKSkKICAgICAgICAgICAgIGZhbWlseUZvckxvb2t1cCA9ICpnZW5lcmljRmFtaWx5T3B0
aW9uYWw7CiAgICAgfTsKIAogICAgIGlmIChyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQotICAg
ICAgICByZXNvbHZlR2VuZXJpY0ZhbWlseSgpOworICAgICAgICByZXNvbHZlQW5kQXNzaWduR2Vu
ZXJpY0ZhbWlseSgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGlzPERvY3VtZW50PihtX2Nv
bnRleHQuZ2V0KCkpID8gJmRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KSA6IG51bGxwdHI7
CiAgICAgYXV0byogZmFjZSA9IG1fY3NzRm9udEZhY2VTZXQtPmZvbnRGYWNlKGZvbnREZXNjcmlw
dGlvbkZvckxvb2t1cC0+Zm9udFNlbGVjdGlvblJlcXVlc3QoKSwgZmFtaWx5Rm9yTG9va3VwKTsK
ICAgICBpZiAoZmFjZSkgewotICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBp
ZiAobV9kb2N1bWVudCkKLSAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nRm9udExvYWQoKm1fZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwg
dHJ1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9j
dW1lbnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBm
YWNlLT5mb250UmFuZ2VzKCpmb250RGVzY3JpcHRpb25Gb3JMb29rdXApOwogICAgIH0KIAogICAg
IGlmICghcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCkKLSAgICAgICAgcmVzb2x2ZUdlbmVyaWNG
YW1pbHkoKTsKKyAgICAgICAgcmVzb2x2ZUFuZEFzc2lnbkdlbmVyaWNGYW1pbHkoKTsKICAgICBh
dXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoKmZvbnREZXNj
cmlwdGlvbkZvckxvb2t1cCwgZmFtaWx5Rm9yTG9va3VwKTsKLSAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
Ci0gICAgICAgIGlmIChtX2RvY3VtZW50KQotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCptX2RvY3VtZW50LCBmYW1pbHlGb3JMb29rdXAuc3Ry
aW5nKCksICEhZm9udCk7Ci0gICAgfQorICAgIGlmIChkb2N1bWVudCAmJiBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1l
bnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgISFmb250KTsKICAgICByZXR1cm4gRm9udFJh
bmdlcyB7IFdURk1vdmUoZm9udCkgfTsKIH0KIApAQCAtMzU2LDEyICszNDIsMTUgQEAgdm9pZCBD
U1NGb250U2VsZWN0b3I6OnN0b3BMb2FkaW5nQW5kQ2xlYXJGb250cygpCiAgICAgbV9pc1N0b3Bw
ZWQgPSB0cnVlOwogICAgIG1fZm9udExvYWRpbmdUaW1lci5zdG9wKCk7CiAKLSAgICBDYWNoZWRS
ZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2RvY3VtZW50LT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpOwotICAgIGZvciAoYXV0byYgZm9udEhhbmRsZSA6IG1fZm9udHNUb0Jl
Z2luTG9hZGluZykgewotICAgICAgICAvLyBCYWxhbmNlcyBpbmNyZW1lbnRSZXF1ZXN0Q291bnQo
KSBpbiBiZWdpbkxvYWRpbmdGb250U29vbigpLgotICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRl
ci5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKmZvbnRIYW5kbGUpOworICAgIGlmIChpczxEb2N1bWVu
dD4obV9jb250ZXh0LmdldCgpKSkgeworICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqbV9jb250ZXh0KTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGNh
Y2hlZFJlc291cmNlTG9hZGVyID0gZG9jdW1lbnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBmb250SGFuZGxlIDogbV9mb250c1RvQmVnaW5Mb2FkaW5nKSB7Cisg
ICAgICAgICAgICAvLyBCYWxhbmNlcyBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBiZWdpbkxv
YWRpbmdGb250U29vbigpLgorICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIuZGVjcmVt
ZW50UmVxdWVzdENvdW50KCpmb250SGFuZGxlKTsKKyAgICAgICAgfQorICAgICAgICBtX2ZvbnRz
VG9CZWdpbkxvYWRpbmcuY2xlYXIoKTsKICAgICB9Ci0gICAgbV9mb250c1RvQmVnaW5Mb2FkaW5n
LmNsZWFyKCk7CiAKICAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5jbGVhcigpOwogICAgIG1fY2xpZW50
cy5jbGVhcigpOwpAQCAtMzY5LDE0ICszNTgsMTYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OnN0
b3BMb2FkaW5nQW5kQ2xlYXJGb250cygpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxv
YWRpbmdGb250U29vbihDYWNoZWRGb250JiBmb250KQogewotICAgIGlmIChtX2lzU3RvcHBlZCkK
KyAgICBpZiAobV9pc1N0b3BwZWQgfHwgIWlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqbV9jb250ZXh0KTsKKwogICAgIG1fZm9udHNUb0JlZ2luTG9hZGluZy5hcHBlbmQoJmZvbnQp
OwogICAgIC8vIEluY3JlbWVudCB0aGUgcmVxdWVzdCBjb3VudCBub3csIGluIG9yZGVyIHRvIHBy
ZXZlbnQgZGlkRmluaXNoTG9hZCBmcm9tIGJlaW5nIGRpc3BhdGNoZWQKICAgICAvLyBhZnRlciB0
aGlzIGZvbnQgaGFzIGJlZW4gcmVxdWVzdGVkIGJ1dCBiZWZvcmUgaXQgYmVnYW4gbG9hZGluZy4g
QmFsYW5jZWQgYnkKICAgICAvLyBkZWNyZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBmb250TG9hZGlu
Z1RpbWVyRmlyZWQoKSBhbmQgaW4gc3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCkuCi0gICAgbV9k
b2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoZm9u
dCk7CisgICAgZG9jdW1lbnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5pbmNyZW1lbnRSZXF1ZXN0
Q291bnQoZm9udCk7CiAKICAgICBpZiAoIW1faXNGb250TG9hZGluZ1N1c3BlbmRlZCAmJiAhbV9m
b250TG9hZGluZ1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZm9udExvYWRpbmdUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKQEAgLTM4OSwxNiArMzgwLDE4IEBAIHZvaWQgQ1NTRm9udFNlbGVj
dG9yOjpzdXNwZW5kRm9udExvYWRpbmdUaW1lcigpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjps
b2FkUGVuZGluZ0ZvbnRzKCkKIHsKLSAgICBpZiAobV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkKQor
ICAgIGlmIChtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQgfHwgIWlzPERvY3VtZW50PihtX2NvbnRl
eHQuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqbV9jb250ZXh0KTsKKwogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRGb250Pj4gZm9udHNUb0JlZ2luTG9hZGluZzsKICAgICBmb250c1RvQmVnaW5M
b2FkaW5nLnN3YXAobV9mb250c1RvQmVnaW5Mb2FkaW5nKTsKIAogICAgIC8vIENTU0ZvbnRTZWxl
Y3RvciBjb3VsZCBnZXQgZGVsZXRlZCB2aWEgYmVnaW5Mb2FkSWZOZWVkZWQoKSBvciBsb2FkRG9u
ZSgpIHVubGVzcyBwcm90ZWN0ZWQuCiAgICAgUmVmPENTU0ZvbnRTZWxlY3Rvcj4gcHJvdGVjdGVk
VGhpcygqdGhpcyk7CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VM
b2FkZXIgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJl
c291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50LmNhY2hlZFJlc291
cmNlTG9hZGVyKCk7CiAgICAgZm9yIChhdXRvJiBmb250SGFuZGxlIDogZm9udHNUb0JlZ2luTG9h
ZGluZykgewogICAgICAgICBmb250SGFuZGxlLT5iZWdpbkxvYWRJZk5lZWRlZChjYWNoZWRSZXNv
dXJjZUxvYWRlcik7CiAgICAgICAgIC8vIEJhbGFuY2VzIGluY3JlbWVudFJlcXVlc3RDb3VudCgp
IGluIGJlZ2luTG9hZGluZ0ZvbnRTb29uKCkuCkBAIC00MDgsMTggKzQwMSwyMiBAQCB2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6bG9hZFBlbmRpbmdGb250cygpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9y
Ojpmb250TG9hZGluZ1RpbWVyRmlyZWQoKQogeworICAgIGlmICghaXM8RG9jdW1lbnQ+KG1fY29u
dGV4dC5nZXQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpOwogICAgIFJlZjxDU1NGb250U2VsZWN0b3I+IHBy
b3RlY3RlZFRoaXMoKnRoaXMpOwogCiAgICAgbG9hZFBlbmRpbmdGb250cygpOwogCiAgICAgLy8g
RklYTUU6IFVzZSBTdWJyZXNvdXJjZUxvYWRlciBpbnN0ZWFkLgogICAgIC8vIENhbGwgRnJhbWVM
b2FkZXI6OmxvYWREb25lIGJlZm9yZSBGcmFtZUxvYWRlcjo6c3VicmVzb3VyY2VMb2FkRG9uZSB0
byBtYXRjaCB0aGUgb3JkZXIgaW4gU3VicmVzb3VyY2VMb2FkZXI6Om5vdGlmeURvbmUuCi0gICAg
bV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9uZShMb2FkQ29tcGxldGlv
blR5cGU6OkZpbmlzaCk7CisgICAgZG9jdW1lbnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2Fk
RG9uZShMb2FkQ29tcGxldGlvblR5cGU6OkZpbmlzaCk7CiAgICAgLy8gRW5zdXJlIHRoYXQgaWYg
dGhlIHJlcXVlc3QgY291bnQgcmVhY2hlcyB6ZXJvLCB0aGUgZnJhbWUgbG9hZGVyIHdpbGwga25v
dyBhYm91dCBpdC4KICAgICAvLyBOZXcgZm9udCBsb2FkcyBtYXkgYmUgdHJpZ2dlcmVkIGJ5IGxh
eW91dCBhZnRlciB0aGUgZG9jdW1lbnQgbG9hZCBpcyBjb21wbGV0ZSBidXQgYmVmb3JlIHdlIGhh
dmUgZGlzcGF0Y2hlZAogICAgIC8vIGRpZEZpbmlzaExvYWRpbmcgZm9yIHRoZSBmcmFtZS4gTWFr
ZSBzdXJlIHRoZSBkZWxlZ2F0ZSBpcyBhbHdheXMgZGlzcGF0Y2hlZCBieSBjaGVja2luZyBleHBs
aWNpdGx5LgotICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAg
ICAgIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLmNoZWNrTG9hZENvbXBsZXRlKCk7Cisg
ICAgaWYgKGRvY3VtZW50LmZyYW1lKCkpCisgICAgICAgIGRvY3VtZW50LmZyYW1lKCktPmxvYWRl
cigpLmNoZWNrTG9hZENvbXBsZXRlKCk7CiB9CiAKIHNpemVfdCBDU1NGb250U2VsZWN0b3I6OmZh
bGxiYWNrRm9udENvdW50KCkKQEAgLTQyNyw3ICs0MjQsNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVj
dG9yOjpmYWxsYmFja0ZvbnRDb3VudCgpCiAgICAgaWYgKG1faXNTdG9wcGVkKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIHJldHVybiBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmZvbnRGYWxsYmFj
a1ByZWZlcnNQaWN0b2dyYXBocygpID8gMSA6IDA7CisgICAgcmV0dXJuIG1fY29udGV4dC0+c2V0
dGluZ3NWYWx1ZXMoKS5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgPyAxIDogMDsKIH0K
IAogUmVmUHRyPEZvbnQ+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIHNpemVfdCBpbmRleCkKQEAgLTQzNywxMiAr
NDM0LDEyIEBAIFJlZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udEF0KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0CiAgICAgaWYgKG1faXNTdG9wcGVkKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9kb2N1bWVudC0+c2V0dGluZ3Mo
KS5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoKSkKKyAgICBpZiAoIW1fY29udGV4dC0+
c2V0dGluZ3NWYWx1ZXMoKS5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGF1dG8mIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gbV9kb2N1
bWVudC0+c2V0dGluZ3MoKS5waWN0b2dyYXBoRm9udEZhbWlseSgpOworICAgIGF1dG8mIHBpY3Rv
Z3JhcGhGb250RmFtaWx5ID0gbV9jb250ZXh0LT5zZXR0aW5nc1ZhbHVlcygpLmZvbnRHZW5lcmlj
RmFtaWxpZXMucGljdG9ncmFwaEZvbnRGYW1pbHkoKTsKICAgICBhdXRvIGZvbnQgPSBGb250Q2Fj
aGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBwaWN0b2dyYXBo
Rm9udEZhbWlseSk7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKLSAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCptX2RvY3VtZW50LCBwaWN0b2dyYXBoRm9udEZh
bWlseSwgISFmb250KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpICYmIGlzPERvY3VtZW50PihtX2NvbnRl
eHQuZ2V0KCkpKQorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9u
dExvYWQoZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpLCBwaWN0b2dyYXBoRm9udEZhbWls
eSwgISFmb250KTsKIAogICAgIHJldHVybiBmb250OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRT
ZWxlY3Rvci5oCmluZGV4IGU3Zjg1NmIwOTg2ODkxODUxNWYzZjEyYjI3MzBkYjRiOWI4NmIzNzMu
LmE5ZmEyOGZmN2E1NDFmNDg4NjhhNWM1NTAwYjhkOWQzYzRhZmEwNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTQ1LDE0ICs0NSwxNCBAQCBjbGFzcyBDU1NQcmltaXRp
dmVWYWx1ZTsKIGNsYXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlOwogY2xhc3MgQ1NTVmFsdWVMaXN0
OwogY2xhc3MgQ2FjaGVkRm9udDsKLWNsYXNzIERvY3VtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIGNsYXNzIFN0eWxlUnVsZUZvbnRGYWNlOwogCiBjbGFzcyBDU1NGb250U2Vs
ZWN0b3IgZmluYWwgOiBwdWJsaWMgRm9udFNlbGVjdG9yLCBwdWJsaWMgQ1NTRm9udEZhY2U6OkNs
aWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPENTU0ZvbnRTZWxlY3Rvcj4sIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVjdG9yPiBj
cmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVjdG9y
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRTZWxlY3Rvcihkb2N1bWVudCkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250U2VsZWN0b3IoY29udGV4dCkpOwogICAgIH0K
ICAgICB2aXJ0dWFsIH5DU1NGb250U2VsZWN0b3IoKTsKICAgICAKQEAgLTc3LDcgKzc3LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNl
bGVjdG9yQ2xpZW50JikgZmluYWw7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9u
Q2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYpIGZpbmFsOwogCi0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7IH0KIAogICAgIHZvaWQgYmVnaW5Mb2FkaW5nRm9udFNvb24oQ2FjaGVk
Rm9udCYpOwogICAgIHZvaWQgc3VzcGVuZEZvbnRMb2FkaW5nVGltZXIoKTsKQEAgLTk1LDEyICs5
NSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpIGZpbmFsIHsgRm9udFNlbGVjdG9yOjpk
ZXJlZigpOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ1NTRm9udFNlbGVjdG9yKERvY3Vt
ZW50Jik7CisgICAgZXhwbGljaXQgQ1NTRm9udFNlbGVjdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsKIAogICAg
IHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGluZyhjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KSBmaW5hbDsKIAor
ICAgIE9wdGlvbmFsPEF0b21TdHJpbmc+IHJlc29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisKICAgICAvLyBDU1NGb250
RmFjZTo6Q2xpZW50CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlJikgZmluYWw7CiAg
ICAgdm9pZCBmb250U3R5bGVVcGRhdGVOZWVkZWQoQ1NTRm9udEZhY2UmKSBmaW5hbDsKQEAgLTEy
MCw3ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgVmVjdG9yPFBlbmRpbmdGb250RmFj
ZVJ1bGU+IG1fc3RhZ2luZ0FyZWE7CiAKLSAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50
OworICAgIFdlYWtQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9jb250ZXh0OwogICAgIFJl
ZlB0cjxGb250RmFjZVNldD4gbV9mb250RmFjZVNldDsKICAgICBSZWY8Q1NTRm9udEZhY2VTZXQ+
IG1fY3NzRm9udEZhY2VTZXQ7CiAgICAgSGFzaFNldDxGb250U2VsZWN0b3JDbGllbnQqPiBtX2Ns
aWVudHM7CkBAIC0xNDAsNiArMTQyLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fY3JlYXRpbmdG
b250IHsgZmFsc2UgfTsKICAgICBib29sIG1fYnVpbGRJc1VuZGVyd2F5IHsgZmFsc2UgfTsKICAg
ICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2UgfTsKKworICAgIFdURjo6VmVjdG9yPEF0b21TdHJp
bmc+IG1fZm9udEZhbWlseU5hbWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZVNldC5jcHAKaW5kZXggMjFiNmY2OGVmMzMzNmE0YTljZGI3M2M1NmU1
YjVlNzhlMDRhY2RjNC4uYWQ4NDZkZjU5ODc5MThlMGY5NWZmZTlkNzk2MGY3MjFlNzE3NjkzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwCkBAIC00MSwyMiArNDEsMjIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRm9udEZhY2VTZXQp
OwogCi1SZWY8Rm9udEZhY2VTZXQ+IEZvbnRGYWNlU2V0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKK1JlZjxG
b250RmFjZVNldD4gRm9udEZhY2VTZXQ6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKIHsK
LSAgICBSZWY8Rm9udEZhY2VTZXQ+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgRm9udEZhY2VTZXQo
ZG9jdW1lbnQsIGluaXRpYWxGYWNlcykpOworICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0g
YWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChjb250ZXh0LCBpbml0aWFsRmFjZXMpKTsKICAgICBy
ZXN1bHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxG
b250RmFjZVNldD4gRm9udEZhY2VTZXQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIENTU0Zv
bnRGYWNlU2V0JiBiYWNraW5nKQorUmVmPEZvbnRGYWNlU2V0PiBGb250RmFjZVNldDo6Y3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5n
KQogewotICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFj
ZVNldChkb2N1bWVudCwgYmFja2luZykpOworICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0g
YWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChjb250ZXh0LCBiYWNraW5nKSk7CiAgICAgcmVzdWx0
LT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Gb250RmFjZVNl
dDo6Rm9udEZhY2VTZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZv
bnRGYWNlPj4mIGluaXRpYWxGYWNlcykKLSAgICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCkK
K0ZvbnRGYWNlU2V0OjpGb250RmFjZVNldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKKyAgICA6IEFj
dGl2ZURPTU9iamVjdCgmY29udGV4dCkKICAgICAsIG1fYmFja2luZyhDU1NGb250RmFjZVNldDo6
Y3JlYXRlKCkpCiAgICAgLCBtX3JlYWR5UHJvbWlzZShtYWtlVW5pcXVlUmVmPFJlYWR5UHJvbWlz
ZT4oKnRoaXMsICZGb250RmFjZVNldDo6cmVhZHlQcm9taXNlUmVzb2x2ZSkpCiB7CkBAIC02NSwx
MyArNjUsMTYgQEAgRm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KERvY3VtZW50JiBkb2N1bWVudCwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbmkKICAgICAgICAgYWRkKCpmYWNlKTsK
IH0KIAotRm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KERvY3VtZW50JiBkb2N1bWVudCwgQ1NTRm9u
dEZhY2VTZXQmIGJhY2tpbmcpCi0gICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQpCitGb250
RmFjZVNldDo6Rm9udEZhY2VTZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgQ1NT
Rm9udEZhY2VTZXQmIGJhY2tpbmcpCisgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAg
ICAgLCBtX2JhY2tpbmcoYmFja2luZykKICAgICAsIG1fcmVhZHlQcm9taXNlKG1ha2VVbmlxdWVS
ZWY8UmVhZHlQcm9taXNlPigqdGhpcywgJkZvbnRGYWNlU2V0OjpyZWFkeVByb21pc2VSZXNvbHZl
KSkKIHsKLSAgICBpZiAoZG9jdW1lbnQuZnJhbWUoKSkKLSAgICAgICAgbV9pc0RvY3VtZW50TG9h
ZGVkID0gZG9jdW1lbnQubG9hZEV2ZW50RmluaXNoZWQoKSAmJiAhZG9jdW1lbnQucHJvY2Vzc2lu
Z0xvYWRFdmVudCgpOworICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKKyAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7CisgICAgICAgIGlm
IChkb2N1bWVudC5mcmFtZSgpKQorICAgICAgICAgICAgbV9pc0RvY3VtZW50TG9hZGVkID0gZG9j
dW1lbnQubG9hZEV2ZW50RmluaXNoZWQoKSAmJiAhZG9jdW1lbnQucHJvY2Vzc2luZ0xvYWRFdmVu
dCgpOworICAgIH0KIAogICAgIGlmIChtX2lzRG9jdW1lbnRMb2FkZWQgJiYgIWJhY2tpbmcuaGFz
QWN0aXZlRm9udEZhY2VzKCkpCiAgICAgICAgIG1fcmVhZHlQcm9taXNlLT5yZXNvbHZlKCp0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgKaW5kZXggMmY2OTY4MTQ5YjgwODRiNmU2M2MxZjI1
M2ZjNjZkNDg1ZWU2Zjc5NC4uZGMwY2Y1ZGNhZjFmN2YxMzQxMGI0Nzc5NTM3ZWVmMTg4ODA1MmQw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgKQEAgLTQxLDggKzQxLDggQEAgY2xhc3MgRE9N
RXhjZXB0aW9uOwogY2xhc3MgRm9udEZhY2VTZXQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxG
b250RmFjZVNldD4sIHByaXZhdGUgQ1NTRm9udEZhY2VTZXQ6OkZvbnRFdmVudENsaWVudCwgcHVi
bGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3Qgewog
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRm9udEZhY2VTZXQpOwogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Rm9udEZhY2VTZXQ+IGNyZWF0ZShEb2N1bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKTsKLSAgICBzdGF0aWMgUmVmPEZvbnRGYWNlU2V0
PiBjcmVhdGUoRG9jdW1lbnQmLCBDU1NGb250RmFjZVNldCYgYmFja2luZyk7CisgICAgc3RhdGlj
IFJlZjxGb250RmFjZVNldD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcyk7CisgICAgc3RhdGljIFJlZjxG
b250RmFjZVNldD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBDU1NGb250RmFjZVNl
dCYgYmFja2luZyk7CiAgICAgdmlydHVhbCB+Rm9udEZhY2VTZXQoKTsKIAogICAgIGJvb2wgaGFz
KEZvbnRGYWNlJikgY29uc3Q7CkBAIC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgaGFzUmVhY2hlZFRlcm1pbmFsU3RhdGUgeyBmYWxzZSB9OwogICAgIH07CiAKLSAgICBGb250
RmFjZVNldChEb2N1bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYpOwotICAg
IEZvbnRGYWNlU2V0KERvY3VtZW50JiwgQ1NTRm9udEZhY2VTZXQmKTsKKyAgICBGb250RmFjZVNl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+
Jik7CisgICAgRm9udEZhY2VTZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIENTU0ZvbnRGYWNl
U2V0Jik7CiAKICAgICAvLyBDU1NGb250RmFjZVNldDo6Rm9udEV2ZW50Q2xpZW50CiAgICAgdm9p
ZCBmYWNlRmluaXNoZWQoQ1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVzKSBmaW5hbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCmluZGV4IGNkNTdmYjFjNDEzYTkwNGVjMTZlODVk
OTZmODU0NTNlNDkzNmVmZGUuLjI2ZDBiY2RjNjhjNWMyYzBmZDExYWIyM2E1MzcxMTZmOTM4ZTVm
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbApAQCAtMzIsNyArMzIsNyBAQCBlbnVt
IEZvbnRGYWNlU2V0TG9hZFN0YXR1cyB7CiAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIEV4cG9z
ZWQ9V2luZG93CiBdIGludGVyZmFjZSBGb250RmFjZVNldCA6IEV2ZW50VGFyZ2V0IHsKLSAgICBb
Q2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKHNlcXVlbmNlPEZvbnRGYWNlPiBpbml0aWFs
RmFjZXMpOworICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBjb25zdHJ1Y3Rv
cihzZXF1ZW5jZTxGb250RmFjZT4gaW5pdGlhbEZhY2VzKTsKIAogICAgIGJvb2xlYW4gaGFzKEZv
bnRGYWNlIGZvbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDQ1NzQ3OGNlMDFlMTg2Yzg2
YzI1NTYxYzkwZTAwM2E0NzEwYzIxMjkuLjE5NmQ1ZjcxZTgxZWJlYWZmMmNhZGRjZGU4MjM5MGJm
ZTk3OGE5YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNDcsNiArMzQ3LDkgQEAgY2xhc3Mg
RG9jdW1lbnQKICAgICAsIHB1YmxpYyBDYW52YXNPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9FWFBPUlQoRG9jdW1lbnQsIFdFQkNPUkVfRVhQT1JUKTsKIHB1YmxpYzoKKyAg
ICB1c2luZyBXZWFrVmFsdWVUeXBlID0gRXZlbnRUYXJnZXQ6OldlYWtWYWx1ZVR5cGU7CisgICAg
dXNpbmcgRXZlbnRUYXJnZXQ6OndlYWtQdHJGYWN0b3J5OworCiAgICAgc3RhdGljIFJlZjxEb2N1
bWVudD4gY3JlYXRlKGNvbnN0IFNldHRpbmdzJiwgY29uc3QgVVJMJik7CiAgICAgc3RhdGljIFJl
ZjxEb2N1bWVudD4gY3JlYXRlTm9uUmVuZGVyZWRQbGFjZWhvbGRlcihGcmFtZSYsIGNvbnN0IFVS
TCYpOwogICAgIHN0YXRpYyBSZWY8RG9jdW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggZDQ2ODdjZTVhNmMz
MDg5YzNlMmJmNmQzNzcyNjVkZDk5MWM1YWM1OC4uMmE5MjMwNzEyMGEwNzc5MTZiZTBiYmQzZjg5
MGYzZjQyYmRkZTU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgor
I2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODIsNyArODMsNyBAQCBjbGFzcyBJREJDb25uZWN0aW9u
UHJveHk7CiBlbnVtIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyVHlwZSB7IH07CiB1
c2luZyBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXJUeXBlPjsKIAotY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQgeworY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQsIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiB7CiBwdWJsaWM6CiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgIHZpcnR1YWwgflNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNv
cmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggOWVkZGMxOTE2OTE2ZWI5NGU4NmFlMWE3NGM3YzFk
YmYwZGExNWZmYS4uNDA4YTE3NTcyYzkyMTUxNGQ1NjE1NTE1ZjIyMzFjN2MxOTMzZDdmYSAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTEwMCwxMiArMTAwLDE5IEBAIGlmIChsZW5ndGgo
JGZvbnROYW1lc0luKSkgewogICAgIHByaW50TGljZW5zZUhlYWRlcigkRik7CiAgICAgcHJpbnRI
ZWFkZXJIZWFkKCRGLCAiQ1NTIiwgJGZhbWlseU5hbWVzRmlsZUJhc2UsIDw8RU5ELCAiIik7CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIEVORAogCi0gICAgcHJpbnRNYWNyb3Mo
JEYsICJleHRlcm4gY29uc3QgU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCIsICJEYXRhIiwg
XCVwYXJhbWV0ZXJzKTsKKyAgICBwcmludCBGICJleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPFZl
Y3Rvcjxjb25zdCBTdGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRlcnMp
LCAiPj4gZmFtaWx5TmFtZXNEYXRhO1xuIjsKKyAgICBwcmludCBGICJleHRlcm4gTWFpblRocmVh
ZExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbVN0cmluZ0ltcGwqLCAiLCBzY2FsYXIoa2V5
cyAlcGFyYW1ldGVycyksICI+PiBmYW1pbHlOYW1lcztcblxuIjsKKyAgICBwcmludE1hY3Jvcygk
RiwgImV4dGVybiBNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IiwgIiIsIFwlcGFyYW1ldGVycyk7CiAgICAgcHJpbnQgRiAiXG4iOwotICAgIHByaW50TWFjcm9z
KCRGLCAiZXh0ZXJuIE1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgV1RGOjpBdG9t
U3RyaW5nPiIsICIiLCBcJXBhcmFtZXRlcnMpOworICAgIHByaW50IEYgImVudW0gY2xhc3MgRmFt
aWx5TmFtZXNJbmRleCB7XG4iOworICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICVwYXJhbWV0
ZXJzKSB7CisgICAgICAgIHByaW50IEYgIiAgICAiLCB1Y2ZpcnN0KCR7bmFtZX0pLCAiLFxuIjsK
KyAgICB9CisgICAgcHJpbnQgRiAifTtcblxuIjsKICAgICBwcmludCBGICIjZW5kaWZcblxuIjsK
IAogICAgIHByaW50SW5pdCgkRiwgMSk7CkBAIC0xMTksMTcgKzEyNiwzMiBAQCBFTkQKIAogICAg
IHByaW50IEYgU3RhdGljU3RyaW5nOjpHZW5lcmF0ZVN0cmluZ3MoXCVwYXJhbWV0ZXJzKTsKIAot
ICAgIHByaW50TWFjcm9zKCRGLCAiTWFpblRocmVhZExhenlOZXZlckRlc3Ryb3llZDxjb25zdCBX
VEY6OkF0b21TdHJpbmc+IiwgIiIsIFwlcGFyYW1ldGVycyk7CisgICAgcHJpbnQgRiAiTGF6eU5l
dmVyRGVzdHJveWVkPFZlY3Rvcjxjb25zdCBTdGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtl
eXMgJXBhcmFtZXRlcnMpLCAiPj4gZmFtaWx5TmFtZXNEYXRhO1xuIjsKKyAgICBwcmludCBGICJN
YWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxBdG9tU3RyaW5nSW1wbCosICIsIHNj
YWxhcihrZXlzICVwYXJhbWV0ZXJzKSwgIj4+IGZhbWlseU5hbWVzO1xuXG4iOworCisgICAgcHJp
bnRNYWNyb3MoJEYsICJNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IiwgIiIsIFwlcGFyYW1ldGVycyk7CiAKICAgICBwcmludEluaXQoJEYsIDApOwogCiAgICAg
cHJpbnQgRiAiXG4iOwogICAgIHByaW50IEYgU3RhdGljU3RyaW5nOjpHZW5lcmF0ZVN0cmluZ0Fz
c2VydHMoXCVwYXJhbWV0ZXJzKTsKIAorICAgIHByaW50IEYgIiAgICBmYW1pbHlOYW1lc0RhdGEu
Y29uc3RydWN0KCk7XG4iOworICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICVwYXJhbWV0ZXJz
KSB7CisgICAgICAgIHByaW50IEYgIiAgICBmYW1pbHlOYW1lc0RhdGEtPnVuY2hlY2tlZEFwcGVu
ZCgmJHtuYW1lfURhdGEpO1xuIjsKKyAgICB9CisKKyAgICBwcmludCBGICJcbiI7CiAgICAgZm9y
IG15ICRuYW1lIChzb3J0IGtleXMgJXBhcmFtZXRlcnMpIHsKICAgICAgICAgcHJpbnQgRiAiICAg
ICR7bmFtZX0uY29uc3RydWN0KCYke25hbWV9RGF0YSk7XG4iOwogICAgIH0KIAorICAgIHByaW50
IEYgIlxuIjsKKyAgICBwcmludCBGICIgICAgZmFtaWx5TmFtZXMuY29uc3RydWN0KCk7XG4iOwor
ICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICVwYXJhbWV0ZXJzKSB7CisgICAgICAgIHByaW50
IEYgIiAgICBmYW1pbHlOYW1lcy0+dW5jaGVja2VkQXBwZW5kKCR7bmFtZX0tPmltcGwoKSk7XG4i
OworICAgIH0KKwogICAgIHByaW50IEYgIn1cbn1cbn1cbiI7CiAgICAgY2xvc2UgRjsKICAgICBl
eGl0IDA7CkBAIC02OTQsNyArNzE2LDcgQEAgRU5ECiAgICAgbXkgJGxvd2VyY2FzZU5hbWVzcGFj
ZVByZWZpeCA9IGxjKCRwYXJhbWV0ZXJze25hbWVzcGFjZVByZWZpeH0pOwogCiAgICAgcHJpbnQg
RiAiLy8gTmFtZXNwYWNlXG4iOwotICAgIHByaW50IEYgIldFQkNPUkVfRVhQT1JUIGV4dGVybiBN
YWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IFdURjo6QXRvbVN0cmluZz4gJHtsb3dl
cmNhc2VOYW1lc3BhY2VQcmVmaXh9TmFtZXNwYWNlVVJJO1xuXG4iOworICAgIHByaW50IEYgIldF
QkNPUkVfRVhQT1JUIGV4dGVybiBNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+ICR7bG93ZXJjYXNlTmFtZXNwYWNlUHJlZml4fU5hbWVzcGFjZVVSSTtcblxuIjsK
IAogICAgIGlmIChrZXlzICVhbGxUYWdzKSB7CiAgICAgICAgIHByaW50IEYgIi8vIFRhZ3NcbiI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJp
Y0ZhbWlsaWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5l
cmljRmFtaWxpZXMuY3BwCmluZGV4IGQzNTc1ZGRhYTY4ODdhNjgyYTlhYzdjMWQ4Y2NiZDgxZWMz
NTY5NzguLjY3M2UwYWI3OGY3Njc5NTNkMWEwYWM4NDI3ZmFhM2EyYTUzZTFiZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFt
aWxpZXMuY3BwCkBAIC0xODAsNCArMTgwLDI3IEBAIGJvb2wgRm9udEdlbmVyaWNGYW1pbGllczo6
c2V0UGljdG9ncmFwaEZvbnRGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDCiAg
ICAgcmV0dXJuIHNldEdlbmVyaWNGb250RmFtaWx5Rm9yU2NyaXB0KG1fcGljdG9ncmFwaEZvbnRG
YW1pbHlNYXAsIGZhbWlseSwgc2NyaXB0KTsKIH0KIAorT3B0aW9uYWw8Y29uc3QgU3RyaW5nJj4g
Rm9udEdlbmVyaWNGYW1pbGllczo6Zm9udEZhbWlseShXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZh
bWlseU5hbWVzSW5kZXggZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChmYW1pbHkpIHsKKyAgICBjYXNlIEZhbWlseU5hbWVzSW5kZXg6OkN1cnNpdmVGYW1p
bHk6CisgICAgICAgIHJldHVybiBjdXJzaXZlRm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2Ug
RmFtaWx5TmFtZXNJbmRleDo6RmFudGFzeUZhbWlseToKKyAgICAgICAgcmV0dXJuIGZhbnRhc3lG
b250RmFtaWx5KHNjcmlwdCk7CisgICAgY2FzZSBGYW1pbHlOYW1lc0luZGV4OjpNb25vc3BhY2VG
YW1pbHk6CisgICAgICAgIHJldHVybiBmaXhlZEZvbnRGYW1pbHkoc2NyaXB0KTsKKyAgICBjYXNl
IEZhbWlseU5hbWVzSW5kZXg6OlBpY3RvZ3JhcGhGYW1pbHk6CisgICAgICAgIHJldHVybiBwaWN0
b2dyYXBoRm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRleDo6U2Fu
c1NlcmlmRmFtaWx5OgorICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRm9udEZhbWlseShzY3JpcHQp
OworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRleDo6U2VyaWZGYW1pbHk6CisgICAgICAgIHJldHVy
biBzZXJpZkZvbnRGYW1pbHkoc2NyaXB0KTsKKyAgICBjYXNlIEZhbWlseU5hbWVzSW5kZXg6OlN0
YW5kYXJkRmFtaWx5OgorICAgICAgICByZXR1cm4gc3RhbmRhcmRGb250RmFtaWx5KHNjcmlwdCk7
CisgICAgY2FzZSBGYW1pbHlOYW1lc0luZGV4OjpTeXN0ZW1VaUZhbWlseToKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KK30KKwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5o
CmluZGV4IDIzNzg3MTYwYjk4YjllODRhZWY4MGVjY2M2NWZkNWZjYjc0YWM1NTguLmVkNjY2OWY4
ZmIwNmZiMWJlYTVhYTE1ZWE5ZGNiNzU4ZTk5NTRmMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgRm9udEdlbmVyaWNGYW1pbGllc19oCiAjZGVmaW5lIEZvbnRHZW5l
cmljRmFtaWxpZXNfaAogCisjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCiAjaW5j
bHVkZSA8dW5pY29kZS91c2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CkBAIC01OSw2ICs2MCw4IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBTdHJpbmcmIGZhbnRhc3lGb250RmFtaWx5KFVTY3JpcHRDb2RlID0gVVNDUklQVF9D
T01NT04pIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgcGljdG9ncmFwaEZvbnRGYW1pbHkoVVNj
cmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CiAKKyAgICBPcHRpb25hbDxjb25zdCBT
dHJpbmcmPiBmb250RmFtaWx5KFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRl
eCwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CisKICAgICBib29sIHNldFN0
YW5kYXJkRm9udEZhbWlseShjb25zdCBTdHJpbmcmLCBVU2NyaXB0Q29kZSk7CiAgICAgYm9vbCBz
ZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgU3RyaW5nJiwgVVNjcmlwdENvZGUpOwogICAgIGJvb2wg
c2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IFN0cmluZyYsIFVTY3JpcHRDb2RlKTsK
</data>
<flag name="commit-queue"
          id="441665"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422550</attachid>
            <date>2021-03-08 02:28:05 -0800</date>
            <delta_ts>2021-03-08 05:05:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222735-20210308102804.patch</filename>
            <type>text/plain</type>
            <size>30169</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczODgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU1YWQzZWE4YmMyNTlk
MjRkMWMxMzQ5NGMxOTFlOGNhYTU0YzMwYi4uZTMzMDAwNmYyM2M3MTQxYWU2Yjg3ZjdmZDcyNWFm
MDEwMDhjMWJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBBbGxvdyBjcmVhdGlvbiBvZiBh
IENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgbm9uLURvY3VtZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjcz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlcGxhY2Ug
RG9jdW1lbnQgbWVtYmVyIG9mIENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC4KKyAgICAgICAgVGhpcyBhbHNvIGNoYW5nZXMgbWFrZV9uYW1lcy5wbCBzdHJpbmcg
aGVhZGVyIGdlbmVyYXRpb24gdG8gYWxsb3cgZm9yIGVhc2llciBlbnVtZXJhdGlvbiBvZiBmb250
IGZhbWlseSBzdHJpbmdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyBuZXcgYmVoYXZpb3Vy
IGlzIGN1cnJlbnRseSB1bnVzZWQuIEV4aXN0aW5nIGJlaGF2aW91ciBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9TdGF0aWNTdHJpbmcucG06
CisgICAgICAgIChHZW5lcmF0ZVN0cmluZ3MpOiBSZXZlcnQgY2hhbmdlIGZyb20gYnVnIDIyMjU1
MgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bV92
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250U3R5bGVVcGRhdGVOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpyZXNvbHZlR2VuZXJpY0ZhbWls
eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1p
bHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpzdG9wTG9hZGluZ0FuZENs
ZWFyRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRp
bmdGb250U29vbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmxvYWRQZW5k
aW5nRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGlu
Z1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxsYmFj
a0ZvbnRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNr
Rm9udEF0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAgICogY3Nz
L0ZvbnRGYWNlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KToKKyAgICAgICAg
KiBjc3MvRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKiBjc3MvRm9udEZhY2VTZXQuaWRsOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0Lmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmludE5hbWVz
SGVhZGVyRmlsZSk6IE1ha2UgZ2xvYmFsIHN0cmluZyBkYXRhIGFuZCBuYW1lcyBhY2Nlc3NpYmxl
IHZpYSBhIFZlY3RvciBhbmQgYWRkIGFuIGVudW0gb2YgbmFtZSBpbmRpY2VzLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0Zh
bWlsaWVzLmg6CisKIDIwMjEtMDMtMDMgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgog
CiAgICAgICAgIEFsbG93IENTUyBmb250LXN0eWxpbmcgZm9yIGNhbnZhcyB3aXRob3V0IFJlbmRl
clN0eWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL1N0YXRp
Y1N0cmluZy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5n
LnBtCmluZGV4IGQ3NDJkNDVhZDZjZjkzNjQ1MWRjYTg1MjFjMTI1NjUxOWJlNjk5YmYuLjEwYWY3
YzJmYmJjMDQwMWYwYzI1NGNlMmM5OGRjYWI2M2ZmODBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5nLnBtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5nLnBtCkBAIC00Myw3ICs0Myw3IEBAIEVO
RAogCiAgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXN0cmluZ3MpIHsKICAgICAgICAgbXkg
JHZhbHVlID0gJHN0cmluZ3N7JG5hbWV9OwotICAgICAgICBwdXNoKEByZXN1bHQsICJjb25zdCBT
dHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBsICR7bmFtZX1EYXRhKFwiJHt2YWx1ZX1cIik7XG4i
KTsKKyAgICAgICAgcHVzaChAcmVzdWx0LCAic3RhdGljIGNvbnN0ZXhwciBTdHJpbmdJbXBsOjpT
dGF0aWNTdHJpbmdJbXBsICR7bmFtZX1EYXRhKFwiJHt2YWx1ZX1cIik7XG4iKTsKICAgICB9CiAK
ICAgICBwdXNoKEByZXN1bHQsIDw8RU5EKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHAKaW5kZXggNWNjMTA4OWM1ODJjMWI0OTE4YTc5ODVhYTZmMjBlZmYxMmY1YWM2Mi4uNGFl
YWI5ZjVhNmU4YjFiNWQyMmE4MjBkMTAzYmNmMWRlYjVlZGZkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTU5LDE4ICs1OSwyOSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRGb250RmFtaWx5TmFtZXM7CisKIHN0YXRp
YyB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKIAotQ1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2Vs
ZWN0b3IoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50
KQotICAgICwgbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCitDU1NGb250U2VsZWN0
b3I6OkNTU0ZvbnRTZWxlY3RvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorICAg
IDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwgbV9jb250ZXh0KG1ha2VXZWFrUHRy
KGNvbnRleHQpKQogICAgICwgbV9jc3NGb250RmFjZVNldChDU1NGb250RmFjZVNldDo6Y3JlYXRl
KHRoaXMpKQogICAgICwgbV9mb250TW9kaWZpZWRPYnNlcnZlcihbdGhpc10geyBmb250TW9kaWZp
ZWQoKTsgfSkKICAgICAsIG1fZm9udExvYWRpbmdUaW1lcigqdGhpcywgJkNTU0ZvbnRTZWxlY3Rv
cjo6Zm9udExvYWRpbmdUaW1lckZpcmVkKQogICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3Rv
cklkKQogICAgICwgbV92ZXJzaW9uKDApCiB7Ci0gICAgQVNTRVJUKG1fZG9jdW1lbnQpOworICAg
IGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKKyAgICAgICAgbV9mb250RmFtaWx5TmFtZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlOYW1lcy0+c2l6ZSgpKTsKKyAgICAgICAgZm9y
IChhdXRvJiBmYW1pbHlOYW1lIDogZmFtaWx5TmFtZXMuZ2V0KCkpCisgICAgICAgICAgICBtX2Zv
bnRGYW1pbHlOYW1lcy51bmNoZWNrZWRDb25zdHJ1Y3RBbmRBcHBlbmQoZmFtaWx5TmFtZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9mb250RmFtaWx5TmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShmYW1pbHlOYW1lc0RhdGEtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgZmFtaWx5
TmFtZSA6IGZhbWlseU5hbWVzRGF0YS5nZXQoKSkKKyAgICAgICAgICAgIG1fZm9udEZhbWlseU5h
bWVzLnVuY2hlY2tlZEFwcGVuZChmYW1pbHlOYW1lKTsKKyAgICB9CisKICAgICBGb250Q2FjaGU6
OnNpbmdsZXRvbigpLmFkZENsaWVudCgqdGhpcyk7CiAgICAgbV9jc3NGb250RmFjZVNldC0+YWRk
Rm9udE1vZGlmaWVkT2JzZXJ2ZXIobV9mb250TW9kaWZpZWRPYnNlcnZlcik7CiAgICAgTE9HKEZv
bnRzLCAiQ1NTRm9udFNlbGVjdG9yICVwIGN0b3IiLCB0aGlzKTsKQEAgLTk0LDggKzEwNSw4IEBA
IEZvbnRGYWNlU2V0KiBDU1NGb250U2VsZWN0b3I6OmZvbnRGYWNlU2V0SWZFeGlzdHMoKQogRm9u
dEZhY2VTZXQmIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQoKQogewogICAgIGlmICghbV9m
b250RmFjZVNldCkgewotICAgICAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci0gICAgICAgIG1fZm9u
dEZhY2VTZXQgPSBGb250RmFjZVNldDo6Y3JlYXRlKCptX2RvY3VtZW50LCBtX2Nzc0ZvbnRGYWNl
U2V0LmdldCgpKTsKKyAgICAgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgICAgIG1fZm9udEZh
Y2VTZXQgPSBGb250RmFjZVNldDo6Y3JlYXRlKCptX2NvbnRleHQsIG1fY3NzRm9udEZhY2VTZXQu
Z2V0KCkpOwogICAgIH0KIAogICAgIHJldHVybiAqbV9mb250RmFjZVNldDsKQEAgLTE5Nyw3ICsy
MDgsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZv
bnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJbgogICAgIGlmIChsb2FkaW5nQmVoYXZpb3Ip
CiAgICAgICAgIGZvbnRGYWNlLT5zZXRMb2FkaW5nQmVoYXZpb3IoKmxvYWRpbmdCZWhhdmlvcik7
CiAKLSAgICBDU1NGb250RmFjZTo6YXBwZW5kU291cmNlcyhmb250RmFjZSwgc3JjTGlzdCwgbV9k
b2N1bWVudC5nZXQoKSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7
CisgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMoZm9udEZhY2UsIHNyY0xpc3QsIG1fY29u
dGV4dC5nZXQoKSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CiAg
ICAgaWYgKGZvbnRGYWNlLT5jb21wdXRlRmFpbHVyZVN0YXRlKCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjMxLDE0ICsyNDIsNiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6dW5yZWdpc3RlckZv
ckludmFsaWRhdGlvbkNhbGxiYWNrcyhGb250U2VsZWN0b3JDbGllbnQmIGNsaQogICAgIG1fY2xp
ZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIENTU0Zv
bnRTZWxlY3Rvcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gVGhp
cyBjbGFzcyByZXR1cm5zIGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBkZXNwaXRlIGhvbGRpbmcg
YSBEb2N1bWVudCBhcyBwcmVwYXJhdGlvbiBmb3IgYSBmdXR1cmUKLSAgICAvLyB3aGVyZSBpdCB3
aWxsIGFjdHVhbGx5IGhvbGQgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0ICh3aGljaCB3b3VsZCBi
ZSBlaXRoZXIgYSBEb2N1bWVudCBvciBhCi0gICAgLy8gV29ya2VyR2xvYmFsU2NvcGUsIGluIHRo
ZSBjYXNlIG9mIHVzaW5nIGZvbnRzIGluIE9mZnNjcmVlbkNhbnZhcykuCi0gICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZ2V0KCk7Ci19Ci0KIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpkaXNwYXRjaEludmFs
aWRhdGlvbkNhbGxiYWNrcygpCiB7CiAgICAgKyttX3ZlcnNpb247CkBAIC0yNjksOCArMjcyLDgg
QEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRNb2RpZmllZCgpCiAKIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjpmb250U3R5bGVVcGRhdGVOZWVkZWQoQ1NTRm9udEZhY2UmKQogewotICAgIGlmICht
X2RvY3VtZW50KQotICAgICAgICBtX2RvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Cisg
ICAgaWYgKGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQorICAgICAgICBkb3duY2FzdDxE
b2N1bWVudD4oKm1fY29udGV4dCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogfQogCiB2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0ZWQoKQpAQCAtMjc4LDMyICsyODEsMjAg
QEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRDYWNoZUludmFsaWRhdGVkKCkKICAgICBkaXNw
YXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8QXRvbVN0
cmluZz4gcmVzb2x2ZUdlbmVyaWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFt
ZSkKK09wdGlvbmFsPEF0b21TdHJpbmc+IENTU0ZvbnRTZWxlY3Rvcjo6cmVzb2x2ZUdlbmVyaWNG
YW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgYXV0byBwbGF0Zm9ybVJlc3VsdCA9IEZvbnREZXNj
cmlwdGlvbjo6cGxhdGZvcm1SZXNvbHZlR2VuZXJpY0ZhbWlseShmb250RGVzY3JpcHRpb24uc2Ny
aXB0KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLCBmYW1pbHlOYW1lKTsKICAg
ICBpZiAoIXBsYXRmb3JtUmVzdWx0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1S
ZXN1bHQ7CiAKLSAgICBpZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9jb250ZXh0KQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzID0g
ZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgY29uc3QgYXV0byYgc2V0dGluZ3MgPSBtX2NvbnRl
eHQtPnNldHRpbmdzVmFsdWVzKCk7CiAKICAgICBVU2NyaXB0Q29kZSBzY3JpcHQgPSBmb250RGVz
Y3JpcHRpb24uc2NyaXB0KCk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gc2VyaWZGYW1pbHkpCi0g
ICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHNldHRpbmdzLnNlcmlmRm9udEZhbWlseShzY3JpcHQp
KTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBzYW5zU2VyaWZGYW1pbHkpCi0gICAgICAgIHJldHVy
biBBdG9tU3RyaW5nKHNldHRpbmdzLnNhbnNTZXJpZkZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAg
aWYgKGZhbWlseU5hbWUgPT0gY3Vyc2l2ZUZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJp
bmcoc2V0dGluZ3MuY3Vyc2l2ZUZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5h
bWUgPT0gZmFudGFzeUZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3Mu
ZmFudGFzeUZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gbW9ub3Nw
YWNlRmFtaWx5KQotICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5maXhlZEZvbnRG
YW1pbHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gcGljdG9ncmFwaEZhbWlseSkK
LSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3MucGljdG9ncmFwaEZvbnRGYW1pbHko
c2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gc3RhbmRhcmRGYW1pbHkpCi0gICAgICAg
IHJldHVybiBBdG9tU3RyaW5nKHNldHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseShzY3JpcHQpKTsK
KyAgICBpZiAoYXV0byBmYW1pbHlTdHJpbmcgPSBzZXR0aW5ncy5mb250R2VuZXJpY0ZhbWlsaWVz
LmZvbnRGYW1pbHkoc3RhdGljX2Nhc3Q8RmFtaWx5TmFtZXNJbmRleD4obV9mb250RmFtaWx5TmFt
ZXMuZmluZChmYW1pbHlOYW1lKSksIHNjcmlwdCkpCisgICAgICAgIHJldHVybiBBdG9tU3RyaW5n
KCpmYW1pbHlTdHJpbmcpOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KQEAgLTMxNCwz
NCArMzA1LDMxIEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAgICAgQVNTRVJUKCFtX2J1aWxk
SXNVbmRlcndheSB8fCBtX2NvbXB1dGluZ1Jvb3RTdHlsZUZvbnRDb3VudCk7CiAKICAgICAvLyBG
SVhNRTogVGhlIHNwZWMgKGFuZCBGaXJlZm94KSBzYXlzIHVzZXIgc3BlY2lmaWVkIGdlbmVyaWMg
ZmFtaWxpZXMgKHNhbnMtc2VyaWYgZXRjLikgc2hvdWxkIGJlIHJlc29sdmVkIGJlZm9yZSB0aGUg
QGZvbnQtZmFjZSBsb29rdXAgdG9vLgotICAgIGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJz
dCA9IGZhbWlseU5hbWUgPT0gc3RhbmRhcmRGYW1pbHk7CisgICAgYm9vbCByZXNvbHZlR2VuZXJp
Y0ZhbWlseUZpcnN0ID0gZmFtaWx5TmFtZSA9PSBtX2ZvbnRGYW1pbHlOYW1lc1tzdGF0aWNfY2Fz
dDxpbnQ+KEZhbWlseU5hbWVzSW5kZXg6OlN0YW5kYXJkRmFtaWx5KV07CiAKICAgICBBdG9tU3Ry
aW5nIGZhbWlseUZvckxvb2t1cCA9IGZhbWlseU5hbWU7CiAgICAgT3B0aW9uYWw8Rm9udERlc2Ny
aXB0aW9uPiBvdmVycmlkZUZvbnREZXNjcmlwdGlvbjsKICAgICBjb25zdCBGb250RGVzY3JpcHRp
b24qIGZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCA9ICZmb250RGVzY3JpcHRpb247Ci0gICAgYXV0
byByZXNvbHZlR2VuZXJpY0ZhbWlseSA9IFsmXSgpIHsKLSAgICAgICAgaWYgKGF1dG8gZ2VuZXJp
Y0ZhbWlseU9wdGlvbmFsID0gV2ViQ29yZTo6cmVzb2x2ZUdlbmVyaWNGYW1pbHkobV9kb2N1bWVu
dC5nZXQoKSwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKSkKKyAgICBhdXRvIHJlc29sdmVB
bmRBc3NpZ25HZW5lcmljRmFtaWx5ID0gWyZdKCkgeworICAgICAgICBpZiAoYXV0byBnZW5lcmlj
RmFtaWx5T3B0aW9uYWwgPSByZXNvbHZlR2VuZXJpY0ZhbWlseShmb250RGVzY3JpcHRpb24sIGZh
bWlseU5hbWUpKQogICAgICAgICAgICAgZmFtaWx5Rm9yTG9va3VwID0gKmdlbmVyaWNGYW1pbHlP
cHRpb25hbDsKICAgICB9OwogCiAgICAgaWYgKHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QpCi0g
ICAgICAgIHJlc29sdmVHZW5lcmljRmFtaWx5KCk7CisgICAgICAgIHJlc29sdmVBbmRBc3NpZ25H
ZW5lcmljRmFtaWx5KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaXM8RG9jdW1lbnQ+KG1f
Y29udGV4dC5nZXQoKSkgPyAmZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpIDogbnVsbHB0
cjsKICAgICBhdXRvKiBmYWNlID0gbV9jc3NGb250RmFjZVNldC0+Zm9udEZhY2UoZm9udERlc2Ny
aXB0aW9uRm9yTG9va3VwLT5mb250U2VsZWN0aW9uUmVxdWVzdCgpLCBmYW1pbHlGb3JMb29rdXAp
OwogICAgIGlmIChmYWNlKSB7Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKLSAgICAgICAgICAg
IGlmIChtX2RvY3VtZW50KQotICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dGb250TG9hZCgqbV9kb2N1bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygp
LCB0cnVlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoZG9jdW1lbnQgJiYgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQor
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpk
b2N1bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygpLCB0cnVlKTsKICAgICAgICAgcmV0dXJu
IGZhY2UtPmZvbnRSYW5nZXMoKmZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCk7CiAgICAgfQogCiAg
ICAgaWYgKCFyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQotICAgICAgICByZXNvbHZlR2VuZXJp
Y0ZhbWlseSgpOworICAgICAgICByZXNvbHZlQW5kQXNzaWduR2VuZXJpY0ZhbWlseSgpOwogICAg
IGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWlseSgqZm9udERl
c2NyaXB0aW9uRm9yTG9va3VwLCBmYW1pbHlGb3JMb29rdXApOwotICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKLSAgICAgICAgaWYgKG1fZG9jdW1lbnQpCi0gICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKm1fZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cC5z
dHJpbmcoKSwgISFmb250KTsKLSAgICB9CisgICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpkb2N1
bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygpLCAhIWZvbnQpOwogICAgIHJldHVybiBGb250
UmFuZ2VzIHsgV1RGTW92ZShmb250KSB9OwogfQogCkBAIC0zNTYsMTIgKzM0NCwxNSBAQCB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6c3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCkKICAgICBtX2lzU3Rv
cHBlZCA9IHRydWU7CiAgICAgbV9mb250TG9hZGluZ1RpbWVyLnN0b3AoKTsKIAotICAgIENhY2hl
ZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZG9jdW1lbnQtPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgZm9yIChhdXRvJiBmb250SGFuZGxlIDogbV9mb250c1Rv
QmVnaW5Mb2FkaW5nKSB7Ci0gICAgICAgIC8vIEJhbGFuY2VzIGluY3JlbWVudFJlcXVlc3RDb3Vu
dCgpIGluIGJlZ2luTG9hZGluZ0ZvbnRTb29uKCkuCi0gICAgICAgIGNhY2hlZFJlc291cmNlTG9h
ZGVyLmRlY3JlbWVudFJlcXVlc3RDb3VudCgqZm9udEhhbmRsZSk7CisgICAgaWYgKGlzPERvY3Vt
ZW50PihtX2NvbnRleHQuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpOworICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciYg
Y2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwor
ICAgICAgICBmb3IgKGF1dG8mIGZvbnRIYW5kbGUgOiBtX2ZvbnRzVG9CZWdpbkxvYWRpbmcpIHsK
KyAgICAgICAgICAgIC8vIEJhbGFuY2VzIGluY3JlbWVudFJlcXVlc3RDb3VudCgpIGluIGJlZ2lu
TG9hZGluZ0ZvbnRTb29uKCkuCisgICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci5kZWNy
ZW1lbnRSZXF1ZXN0Q291bnQoKmZvbnRIYW5kbGUpOworICAgICAgICB9CisgICAgICAgIG1fZm9u
dHNUb0JlZ2luTG9hZGluZy5jbGVhcigpOwogICAgIH0KLSAgICBtX2ZvbnRzVG9CZWdpbkxvYWRp
bmcuY2xlYXIoKTsKIAogICAgIG1fY3NzRm9udEZhY2VTZXQtPmNsZWFyKCk7CiAgICAgbV9jbGll
bnRzLmNsZWFyKCk7CkBAIC0zNjksMTQgKzM2MCwxNiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
c3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCkKIAogdm9pZCBDU1NGb250U2VsZWN0b3I6OmJlZ2lu
TG9hZGluZ0ZvbnRTb29uKENhY2hlZEZvbnQmIGZvbnQpCiB7Ci0gICAgaWYgKG1faXNTdG9wcGVk
KQorICAgIGlmIChtX2lzU3RvcHBlZCB8fCAhaXM8RG9jdW1lbnQ+KG1fY29udGV4dC5nZXQoKSkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCptX2NvbnRleHQpOworCiAgICAgbV9mb250c1RvQmVnaW5Mb2FkaW5nLmFwcGVuZCgmZm9u
dCk7CiAgICAgLy8gSW5jcmVtZW50IHRoZSByZXF1ZXN0IGNvdW50IG5vdywgaW4gb3JkZXIgdG8g
cHJldmVudCBkaWRGaW5pc2hMb2FkIGZyb20gYmVpbmcgZGlzcGF0Y2hlZAogICAgIC8vIGFmdGVy
IHRoaXMgZm9udCBoYXMgYmVlbiByZXF1ZXN0ZWQgYnV0IGJlZm9yZSBpdCBiZWdhbiBsb2FkaW5n
LiBCYWxhbmNlZCBieQogICAgIC8vIGRlY3JlbWVudFJlcXVlc3RDb3VudCgpIGluIGZvbnRMb2Fk
aW5nVGltZXJGaXJlZCgpIGFuZCBpbiBzdG9wTG9hZGluZ0FuZENsZWFyRm9udHMoKS4KLSAgICBt
X2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmluY3JlbWVudFJlcXVlc3RDb3VudChm
b250KTsKKyAgICBkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmluY3JlbWVudFJlcXVl
c3RDb3VudChmb250KTsKIAogICAgIGlmICghbV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkICYmICFt
X2ZvbnRMb2FkaW5nVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9mb250TG9hZGluZ1RpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwpAQCAtMzg5LDE2ICszODIsMTggQEAgdm9pZCBDU1NGb250U2Vs
ZWN0b3I6OnN1c3BlbmRGb250TG9hZGluZ1RpbWVyKCkKIAogdm9pZCBDU1NGb250U2VsZWN0b3I6
OmxvYWRQZW5kaW5nRm9udHMoKQogewotICAgIGlmIChtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQp
CisgICAgaWYgKG1faXNGb250TG9hZGluZ1N1c3BlbmRlZCB8fCAhaXM8RG9jdW1lbnQ+KG1fY29u
dGV4dC5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpOworCiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZEZvbnQ+PiBmb250c1RvQmVnaW5Mb2FkaW5nOwogICAgIGZvbnRzVG9CZWdp
bkxvYWRpbmcuc3dhcChtX2ZvbnRzVG9CZWdpbkxvYWRpbmcpOwogCiAgICAgLy8gQ1NTRm9udFNl
bGVjdG9yIGNvdWxkIGdldCBkZWxldGVkIHZpYSBiZWdpbkxvYWRJZk5lZWRlZCgpIG9yIGxvYWRE
b25lKCkgdW5sZXNzIHByb3RlY3RlZC4KICAgICBSZWY8Q1NTRm9udFNlbGVjdG9yPiBwcm90ZWN0
ZWRUaGlzKCp0aGlzKTsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyID0gZG9jdW1lbnQuY2FjaGVkUmVz
b3VyY2VMb2FkZXIoKTsKICAgICBmb3IgKGF1dG8mIGZvbnRIYW5kbGUgOiBmb250c1RvQmVnaW5M
b2FkaW5nKSB7CiAgICAgICAgIGZvbnRIYW5kbGUtPmJlZ2luTG9hZElmTmVlZGVkKGNhY2hlZFJl
c291cmNlTG9hZGVyKTsKICAgICAgICAgLy8gQmFsYW5jZXMgaW5jcmVtZW50UmVxdWVzdENvdW50
KCkgaW4gYmVnaW5Mb2FkaW5nRm9udFNvb24oKS4KQEAgLTQwOCwxOCArNDAzLDIyIEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjpsb2FkUGVuZGluZ0ZvbnRzKCkKIAogdm9pZCBDU1NGb250U2VsZWN0
b3I6OmZvbnRMb2FkaW5nVGltZXJGaXJlZCgpCiB7CisgICAgaWYgKCFpczxEb2N1bWVudD4obV9j
b250ZXh0LmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKm1fY29udGV4dCk7CiAgICAgUmVmPENTU0ZvbnRTZWxlY3Rvcj4g
cHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKICAgICBsb2FkUGVuZGluZ0ZvbnRzKCk7CiAKICAgICAv
LyBGSVhNRTogVXNlIFN1YnJlc291cmNlTG9hZGVyIGluc3RlYWQuCiAgICAgLy8gQ2FsbCBGcmFt
ZUxvYWRlcjo6bG9hZERvbmUgYmVmb3JlIEZyYW1lTG9hZGVyOjpzdWJyZXNvdXJjZUxvYWREb25l
IHRvIG1hdGNoIHRoZSBvcmRlciBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6bm90aWZ5RG9uZS4KLSAg
ICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmxvYWREb25lKExvYWRDb21wbGV0
aW9uVHlwZTo6RmluaXNoKTsKKyAgICBkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmxv
YWREb25lKExvYWRDb21wbGV0aW9uVHlwZTo6RmluaXNoKTsKICAgICAvLyBFbnN1cmUgdGhhdCBp
ZiB0aGUgcmVxdWVzdCBjb3VudCByZWFjaGVzIHplcm8sIHRoZSBmcmFtZSBsb2FkZXIgd2lsbCBr
bm93IGFib3V0IGl0LgogICAgIC8vIE5ldyBmb250IGxvYWRzIG1heSBiZSB0cmlnZ2VyZWQgYnkg
bGF5b3V0IGFmdGVyIHRoZSBkb2N1bWVudCBsb2FkIGlzIGNvbXBsZXRlIGJ1dCBiZWZvcmUgd2Ug
aGF2ZSBkaXNwYXRjaGVkCiAgICAgLy8gZGlkRmluaXNoTG9hZGluZyBmb3IgdGhlIGZyYW1lLiBN
YWtlIHN1cmUgdGhlIGRlbGVnYXRlIGlzIGFsd2F5cyBkaXNwYXRjaGVkIGJ5IGNoZWNraW5nIGV4
cGxpY2l0bHkuCi0gICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+ZnJhbWUoKSkKLSAg
ICAgICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkuY2hlY2tMb2FkQ29tcGxldGUoKTsK
KyAgICBpZiAoZG9jdW1lbnQuZnJhbWUoKSkKKyAgICAgICAgZG9jdW1lbnQuZnJhbWUoKS0+bG9h
ZGVyKCkuY2hlY2tMb2FkQ29tcGxldGUoKTsKIH0KIAogc2l6ZV90IENTU0ZvbnRTZWxlY3Rvcjo6
ZmFsbGJhY2tGb250Q291bnQoKQpAQCAtNDI3LDcgKzQyNiw3IEBAIHNpemVfdCBDU1NGb250U2Vs
ZWN0b3I6OmZhbGxiYWNrRm9udENvdW50KCkKICAgICBpZiAobV9pc1N0b3BwZWQpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgcmV0dXJuIG1fZG9jdW1lbnQtPnNldHRpbmdzKCkuZm9udEZhbGxi
YWNrUHJlZmVyc1BpY3RvZ3JhcGhzKCkgPyAxIDogMDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5z
ZXR0aW5nc1ZhbHVlcygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyA/IDEgOiAwOwog
fQogCiBSZWZQdHI8Rm9udD4gQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgc2l6ZV90IGluZGV4KQpAQCAtNDM3LDEy
ICs0MzYsMTIgQEAgUmVmUHRyPEZvbnQ+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHQKICAgICBpZiAobV9pc1N0b3BwZWQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFtX2RvY3VtZW50LT5zZXR0aW5n
cygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocygpKQorICAgIGlmICghbV9jb250ZXh0
LT5zZXR0aW5nc1ZhbHVlcygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocykKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgcGljdG9ncmFwaEZvbnRGYW1pbHkgPSBtX2Rv
Y3VtZW50LT5zZXR0aW5ncygpLnBpY3RvZ3JhcGhGb250RmFtaWx5KCk7CisgICAgYXV0byYgcGlj
dG9ncmFwaEZvbnRGYW1pbHkgPSBtX2NvbnRleHQtPnNldHRpbmdzVmFsdWVzKCkuZm9udEdlbmVy
aWNGYW1pbGllcy5waWN0b2dyYXBoRm9udEZhbWlseSgpOwogICAgIGF1dG8gZm9udCA9IEZvbnRD
YWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHBpY3RvZ3Jh
cGhGb250RmFtaWx5KTsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQotICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKm1fZG9jdW1lbnQsIHBpY3RvZ3JhcGhGb250
RmFtaWx5LCAhIWZvbnQpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkgJiYgaXM8RG9jdW1lbnQ+KG1fY29u
dGV4dC5nZXQoKSkpCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dG
b250TG9hZChkb3duY2FzdDxEb2N1bWVudD4oKm1fY29udGV4dCksIHBpY3RvZ3JhcGhGb250RmFt
aWx5LCAhIWZvbnQpOwogCiAgICAgcmV0dXJuIGZvbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmgKaW5kZXggZTdmODU2YjA5ODY4OTE4NTE1ZjNmMTJiMjczMGRiNGI5Yjg2YjM3
My4uYTlmYTI4ZmY3YTU0MWY0ODg2OGE1YzU1MDBiOGQ5ZDNjNGFmYTA0MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250U2VsZWN0b3IuaApAQCAtNDUsMTQgKzQ1LDE0IEBAIGNsYXNzIENTU1ByaW1p
dGl2ZVZhbHVlOwogY2xhc3MgQ1NTU2VnbWVudGVkRm9udEZhY2U7CiBjbGFzcyBDU1NWYWx1ZUxp
c3Q7CiBjbGFzcyBDYWNoZWRGb250OwotY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogY2xhc3MgU3R5bGVSdWxlRm9udEZhY2U7CiAKIGNsYXNzIENTU0ZvbnRT
ZWxlY3RvciBmaW5hbCA6IHB1YmxpYyBGb250U2VsZWN0b3IsIHB1YmxpYyBDU1NGb250RmFjZTo6
Q2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q1NTRm9udFNlbGVjdG9yPiwgcHVibGljIEFj
dGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGb250U2VsZWN0b3I+
IGNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgc3RhdGljIFJlZjxDU1NGb250U2VsZWN0
b3I+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRm9udFNlbGVjdG9yKGRvY3VtZW50KSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRTZWxlY3Rvcihjb250ZXh0KSk7CiAgICAg
fQogICAgIHZpcnR1YWwgfkNTU0ZvbnRTZWxlY3RvcigpOwogICAgIApAQCAtNzcsNyArNzcsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcyhGb250
U2VsZWN0b3JDbGllbnQmKSBmaW5hbDsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JJbnZhbGlkYXRp
b25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JikgZmluYWw7CiAKLSAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsgfQogCiAgICAgdm9pZCBiZWdpbkxvYWRpbmdGb250U29vbihDYWNo
ZWRGb250Jik7CiAgICAgdm9pZCBzdXNwZW5kRm9udExvYWRpbmdUaW1lcigpOwpAQCAtOTUsMTIg
Kzk1LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCkgZmluYWwgeyBGb250U2VsZWN0b3I6
OmRlcmVmKCk7IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NGb250U2VsZWN0b3IoRG9j
dW1lbnQmKTsKKyAgICBleHBsaWNpdCBDU1NGb250U2VsZWN0b3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYpOwogCiAgICAgdm9pZCBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwogCiAg
ICAgdm9pZCBvcHBvcnR1bmlzdGljYWxseVN0YXJ0Rm9udERhdGFVUkxMb2FkaW5nKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpIGZpbmFsOwog
CisgICAgT3B0aW9uYWw8QXRvbVN0cmluZz4gcmVzb2x2ZUdlbmVyaWNGYW1pbHkoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KTsKKwogICAgIC8vIENTU0Zv
bnRGYWNlOjpDbGllbnQKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2UmKSBmaW5hbDsK
ICAgICB2b2lkIGZvbnRTdHlsZVVwZGF0ZU5lZWRlZChDU1NGb250RmFjZSYpIGZpbmFsOwpAQCAt
MTIwLDcgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBWZWN0b3I8UGVuZGluZ0ZvbnRG
YWNlUnVsZT4gbV9zdGFnaW5nQXJlYTsKIAotICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1fZG9jdW1l
bnQ7CisgICAgV2Vha1B0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7CiAgICAg
UmVmUHRyPEZvbnRGYWNlU2V0PiBtX2ZvbnRGYWNlU2V0OwogICAgIFJlZjxDU1NGb250RmFjZVNl
dD4gbV9jc3NGb250RmFjZVNldDsKICAgICBIYXNoU2V0PEZvbnRTZWxlY3RvckNsaWVudCo+IG1f
Y2xpZW50czsKQEAgLTE0MCw2ICsxNDIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jcmVhdGlu
Z0ZvbnQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9idWlsZElzVW5kZXJ3YXkgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBmYWxzZSB9OworCisgICAgV1RGOjpWZWN0b3I8QXRvbVN0
cmluZz4gbV9mb250RmFtaWx5TmFtZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcAppbmRleCAyMWI2ZjY4ZWYzMzM2YTRhOWNkYjczYzU2
ZTViNWU3OGUwNGFjZGM0Li5hZDg0NmRmNTk4NzkxOGUwZjk1ZmZlOWQ3OTYwZjcyMWU3MTc2OTM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5jcHAKQEAgLTQxLDIyICs0MSwyMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChGb250RmFjZVNl
dCk7CiAKLVJlZjxGb250RmFjZVNldD4gRm9udEZhY2VTZXQ6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKQorUmVm
PEZvbnRGYWNlU2V0PiBGb250RmFjZVNldDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKQog
ewotICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZVNl
dChkb2N1bWVudCwgaW5pdGlhbEZhY2VzKSk7CisgICAgUmVmPEZvbnRGYWNlU2V0PiByZXN1bHQg
PSBhZG9wdFJlZigqbmV3IEZvbnRGYWNlU2V0KGNvbnRleHQsIGluaXRpYWxGYWNlcykpOwogICAg
IHJlc3VsdC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVm
PEZvbnRGYWNlU2V0PiBGb250RmFjZVNldDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgQ1NT
Rm9udEZhY2VTZXQmIGJhY2tpbmcpCitSZWY8Rm9udEZhY2VTZXQ+IEZvbnRGYWNlU2V0OjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgQ1NTRm9udEZhY2VTZXQmIGJhY2tp
bmcpCiB7Ci0gICAgUmVmPEZvbnRGYWNlU2V0PiByZXN1bHQgPSBhZG9wdFJlZigqbmV3IEZvbnRG
YWNlU2V0KGRvY3VtZW50LCBiYWNraW5nKSk7CisgICAgUmVmPEZvbnRGYWNlU2V0PiByZXN1bHQg
PSBhZG9wdFJlZigqbmV3IEZvbnRGYWNlU2V0KGNvbnRleHQsIGJhY2tpbmcpKTsKICAgICByZXN1
bHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZvbnRGYWNl
U2V0OjpGb250RmFjZVNldChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50
KQorRm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKQorICAgIDog
QWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQogICAgICwgbV9iYWNraW5nKENTU0ZvbnRGYWNlU2V0
OjpjcmVhdGUoKSkKICAgICAsIG1fcmVhZHlQcm9taXNlKG1ha2VVbmlxdWVSZWY8UmVhZHlQcm9t
aXNlPigqdGhpcywgJkZvbnRGYWNlU2V0OjpyZWFkeVByb21pc2VSZXNvbHZlKSkKIHsKQEAgLTY1
LDEzICs2NSwxNiBAQCBGb250RmFjZVNldDo6Rm9udEZhY2VTZXQoRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaQogICAgICAgICBhZGQoKmZhY2Up
OwogfQogCi1Gb250RmFjZVNldDo6Rm9udEZhY2VTZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBDU1NG
b250RmFjZVNldCYgYmFja2luZykKLSAgICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCkKK0Zv
bnRGYWNlU2V0OjpGb250RmFjZVNldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBD
U1NGb250RmFjZVNldCYgYmFja2luZykKKyAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkK
ICAgICAsIG1fYmFja2luZyhiYWNraW5nKQogICAgICwgbV9yZWFkeVByb21pc2UobWFrZVVuaXF1
ZVJlZjxSZWFkeVByb21pc2U+KCp0aGlzLCAmRm9udEZhY2VTZXQ6OnJlYWR5UHJvbWlzZVJlc29s
dmUpKQogewotICAgIGlmIChkb2N1bWVudC5mcmFtZSgpKQotICAgICAgICBtX2lzRG9jdW1lbnRM
b2FkZWQgPSBkb2N1bWVudC5sb2FkRXZlbnRGaW5pc2hlZCgpICYmICFkb2N1bWVudC5wcm9jZXNz
aW5nTG9hZEV2ZW50KCk7CisgICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkgeworICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKKyAgICAgICAg
aWYgKGRvY3VtZW50LmZyYW1lKCkpCisgICAgICAgICAgICBtX2lzRG9jdW1lbnRMb2FkZWQgPSBk
b2N1bWVudC5sb2FkRXZlbnRGaW5pc2hlZCgpICYmICFkb2N1bWVudC5wcm9jZXNzaW5nTG9hZEV2
ZW50KCk7CisgICAgfQogCiAgICAgaWYgKG1faXNEb2N1bWVudExvYWRlZCAmJiAhYmFja2luZy5o
YXNBY3RpdmVGb250RmFjZXMoKSkKICAgICAgICAgbV9yZWFkeVByb21pc2UtPnJlc29sdmUoKnRo
aXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaAppbmRleCAyZjY5NjgxNDliODA4NGI2ZTYzYzFm
MjUzZmM2NmQ0ODVlZTZmNzk0Li5kYzBjZjVkY2FmMWY3ZjEzNDEwYjQ3Nzk1MzdlZWYxODg4MDUy
ZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaApAQCAtNDEsOCArNDEsOCBAQCBjbGFzcyBE
T01FeGNlcHRpb247CiBjbGFzcyBGb250RmFjZVNldCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVk
PEZvbnRGYWNlU2V0PiwgcHJpdmF0ZSBDU1NGb250RmFjZVNldDo6Rm9udEV2ZW50Q2xpZW50LCBw
dWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChGb250RmFjZVNldCk7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGb250RmFjZVNldD4gY3JlYXRlKERvY3VtZW50JiwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFjZXMpOwotICAgIHN0YXRpYyBSZWY8Rm9udEZhY2VT
ZXQ+IGNyZWF0ZShEb2N1bWVudCYsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKTsKKyAgICBzdGF0
aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKTsKKyAgICBzdGF0aWMgUmVm
PEZvbnRGYWNlU2V0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIENTU0ZvbnRGYWNl
U2V0JiBiYWNraW5nKTsKICAgICB2aXJ0dWFsIH5Gb250RmFjZVNldCgpOwogCiAgICAgYm9vbCBo
YXMoRm9udEZhY2UmKSBjb25zdDsKQEAgLTk1LDggKzk1LDggQEAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCBoYXNSZWFjaGVkVGVybWluYWxTdGF0ZSB7IGZhbHNlIH07CiAgICAgfTsKIAotICAgIEZv
bnRGYWNlU2V0KERvY3VtZW50JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+Jik7Ci0g
ICAgRm9udEZhY2VTZXQoRG9jdW1lbnQmLCBDU1NGb250RmFjZVNldCYpOworICAgIEZvbnRGYWNl
U2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNl
Pj4mKTsKKyAgICBGb250RmFjZVNldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgQ1NTRm9udEZh
Y2VTZXQmKTsKIAogICAgIC8vIENTU0ZvbnRGYWNlU2V0OjpGb250RXZlbnRDbGllbnQKICAgICB2
b2lkIGZhY2VGaW5pc2hlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMpIGZpbmFs
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwKaW5kZXggY2Q1N2ZiMWM0MTNhOTA0ZWMxNmU4
NWQ5NmY4NTQ1M2U0OTM2ZWZkZS4uMjZkMGJjZGM2OGM1YzJjMGZkMTFhYjIzYTUzNzExNmY5Mzhl
NWY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCkBAIC0zMiw3ICszMiw3IEBAIGVu
dW0gRm9udEZhY2VTZXRMb2FkU3RhdHVzIHsKICAgICBBY3RpdmVET01PYmplY3QsCiAgICAgRXhw
b3NlZD1XaW5kb3cKIF0gaW50ZXJmYWNlIEZvbnRGYWNlU2V0IDogRXZlbnRUYXJnZXQgewotICAg
IFtDYWxsV2l0aD1Eb2N1bWVudF0gY29uc3RydWN0b3Ioc2VxdWVuY2U8Rm9udEZhY2U+IGluaXRp
YWxGYWNlcyk7CisgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIGNvbnN0cnVj
dG9yKHNlcXVlbmNlPEZvbnRGYWNlPiBpbml0aWFsRmFjZXMpOwogCiAgICAgYm9vbGVhbiBoYXMo
Rm9udEZhY2UgZm9udCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNDU3NDc4Y2UwMWUxODZj
ODZjMjU1NjFjOTBlMDAzYTQ3MTBjMjEyOS4uMTk2ZDVmNzFlODFlYmVhZmYyY2FkZGNkZTgyMzkw
YmZlOTc4YTljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTM0Nyw2ICszNDcsOSBAQCBjbGFz
cyBEb2N1bWVudAogICAgICwgcHVibGljIENhbnZhc09ic2VydmVyIHsKICAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0VYUE9SVChEb2N1bWVudCwgV0VCQ09SRV9FWFBPUlQpOwogcHVibGljOgor
ICAgIHVzaW5nIFdlYWtWYWx1ZVR5cGUgPSBFdmVudFRhcmdldDo6V2Vha1ZhbHVlVHlwZTsKKyAg
ICB1c2luZyBFdmVudFRhcmdldDo6d2Vha1B0ckZhY3Rvcnk7CisKICAgICBzdGF0aWMgUmVmPERv
Y3VtZW50PiBjcmVhdGUoY29uc3QgU2V0dGluZ3MmLCBjb25zdCBVUkwmKTsKICAgICBzdGF0aWMg
UmVmPERvY3VtZW50PiBjcmVhdGVOb25SZW5kZXJlZFBsYWNlaG9sZGVyKEZyYW1lJiwgY29uc3Qg
VVJMJik7CiAgICAgc3RhdGljIFJlZjxEb2N1bWVudD4gY3JlYXRlKERvY3VtZW50Jik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAppbmRleCBkNDY4N2NlNWE2
YzMwODljM2UyYmY2ZDM3NzI2NWRkOTkxYzVhYzU4Li4yYTkyMzA3MTIwYTA3NzkxNmJlMGJiZDNm
ODkwZjNmNDJiZGRlNTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04Miw3ICs4Myw3IEBAIGNsYXNzIElEQkNvbm5lY3Rp
b25Qcm94eTsKIGVudW0gU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXJUeXBlIHsgfTsK
IHVzaW5nIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmll
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllclR5cGU+OwogCi1jbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0IDogcHVibGljIFNlY3VyaXR5Q29udGV4dCB7CitjbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0IDogcHVibGljIFNlY3VyaXR5Q29udGV4dCwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHsKIHB1YmxpYzoKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgdmlydHVhbCB+U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vbWFrZV9uYW1lcy5wbAppbmRleCA5ZWRkYzE5MTY5MTZlYjk0ZTg2YWUxYTc0Yzdj
MWRiZjBkYTE1ZmZhLi40MDhhMTc1NzJjOTIxNTE0ZDU2MTU1MTVmMjIzMWM3YzE5MzNkN2ZhIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtMTAwLDEyICsxMDAsMTkgQEAgaWYgKGxlbmd0
aCgkZm9udE5hbWVzSW4pKSB7CiAgICAgcHJpbnRMaWNlbnNlSGVhZGVyKCRGKTsKICAgICBwcmlu
dEhlYWRlckhlYWQoJEYsICJDU1MiLCAkZmFtaWx5TmFtZXNGaWxlQmFzZSwgPDxFTkQsICIiKTsK
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogRU5ECiAKLSAgICBwcmludE1hY3Jv
cygkRiwgImV4dGVybiBjb25zdCBTdHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBsIiwgIkRhdGEi
LCBcJXBhcmFtZXRlcnMpOworICAgIHByaW50IEYgImV4dGVybiBMYXp5TmV2ZXJEZXN0cm95ZWQ8
VmVjdG9yPGNvbnN0IFN0YXRpY1N0cmluZ0ltcGwqLCAiLCBzY2FsYXIoa2V5cyAlcGFyYW1ldGVy
cyksICI+PiBmYW1pbHlOYW1lc0RhdGE7XG4iOworICAgIHByaW50IEYgImV4dGVybiBNYWluVGhy
ZWFkTGF6eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxBdG9tU3RyaW5nSW1wbCosICIsIHNjYWxhcihr
ZXlzICVwYXJhbWV0ZXJzKSwgIj4+IGZhbWlseU5hbWVzO1xuXG4iOworICAgIHByaW50TWFjcm9z
KCRGLCAiZXh0ZXJuIE1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmlu
Zz4iLCAiIiwgXCVwYXJhbWV0ZXJzKTsKICAgICBwcmludCBGICJcbiI7Ci0gICAgcHJpbnRNYWNy
b3MoJEYsICJleHRlcm4gTWFpblRocmVhZExhenlOZXZlckRlc3Ryb3llZDxjb25zdCBXVEY6OkF0
b21TdHJpbmc+IiwgIiIsIFwlcGFyYW1ldGVycyk7CisgICAgcHJpbnQgRiAiZW51bSBjbGFzcyBG
YW1pbHlOYW1lc0luZGV4IHtcbiI7CisgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXBhcmFt
ZXRlcnMpIHsKKyAgICAgICAgcHJpbnQgRiAiICAgICIsIHVjZmlyc3QoJHtuYW1lfSksICIsXG4i
OworICAgIH0KKyAgICBwcmludCBGICJ9O1xuXG4iOwogICAgIHByaW50IEYgIiNlbmRpZlxuXG4i
OwogCiAgICAgcHJpbnRJbml0KCRGLCAxKTsKQEAgLTExOSwxNyArMTI2LDMyIEBAIEVORAogCiAg
ICAgcHJpbnQgRiBTdGF0aWNTdHJpbmc6OkdlbmVyYXRlU3RyaW5ncyhcJXBhcmFtZXRlcnMpOwog
Ci0gICAgcHJpbnRNYWNyb3MoJEYsICJNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0
IFdURjo6QXRvbVN0cmluZz4iLCAiIiwgXCVwYXJhbWV0ZXJzKTsKKyAgICBwcmludCBGICJMYXp5
TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPGNvbnN0IFN0YXRpY1N0cmluZ0ltcGwqLCAiLCBzY2FsYXIo
a2V5cyAlcGFyYW1ldGVycyksICI+PiBmYW1pbHlOYW1lc0RhdGE7XG4iOworICAgIHByaW50IEYg
Ik1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21TdHJpbmdJbXBsKiwgIiwg
c2NhbGFyKGtleXMgJXBhcmFtZXRlcnMpLCAiPj4gZmFtaWx5TmFtZXM7XG5cbiI7CisKKyAgICBw
cmludE1hY3JvcygkRiwgIk1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4iLCAiIiwgXCVwYXJhbWV0ZXJzKTsKIAogICAgIHByaW50SW5pdCgkRiwgMCk7CiAKICAg
ICBwcmludCBGICJcbiI7CiAgICAgcHJpbnQgRiBTdGF0aWNTdHJpbmc6OkdlbmVyYXRlU3RyaW5n
QXNzZXJ0cyhcJXBhcmFtZXRlcnMpOwogCisgICAgcHJpbnQgRiAiICAgIGZhbWlseU5hbWVzRGF0
YS5jb25zdHJ1Y3QoKTtcbiI7CisgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXBhcmFtZXRl
cnMpIHsKKyAgICAgICAgcHJpbnQgRiAiICAgIGZhbWlseU5hbWVzRGF0YS0+dW5jaGVja2VkQXBw
ZW5kKCYke25hbWV9RGF0YSk7XG4iOworICAgIH0KKworICAgIHByaW50IEYgIlxuIjsKICAgICBm
b3IgbXkgJG5hbWUgKHNvcnQga2V5cyAlcGFyYW1ldGVycykgewogICAgICAgICBwcmludCBGICIg
ICAgJHtuYW1lfS5jb25zdHJ1Y3QoJiR7bmFtZX1EYXRhKTtcbiI7CiAgICAgfQogCisgICAgcHJp
bnQgRiAiXG4iOworICAgIHByaW50IEYgIiAgICBmYW1pbHlOYW1lcy5jb25zdHJ1Y3QoKTtcbiI7
CisgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXBhcmFtZXRlcnMpIHsKKyAgICAgICAgcHJp
bnQgRiAiICAgIGZhbWlseU5hbWVzLT51bmNoZWNrZWRBcHBlbmQoJHtuYW1lfS0+aW1wbCgpKTtc
biI7CisgICAgfQorCiAgICAgcHJpbnQgRiAifVxufVxufVxuIjsKICAgICBjbG9zZSBGOwogICAg
IGV4aXQgMDsKQEAgLTY5NCw3ICs3MTYsNyBAQCBFTkQKICAgICBteSAkbG93ZXJjYXNlTmFtZXNw
YWNlUHJlZml4ID0gbGMoJHBhcmFtZXRlcnN7bmFtZXNwYWNlUHJlZml4fSk7CiAKICAgICBwcmlu
dCBGICIvLyBOYW1lc3BhY2VcbiI7Ci0gICAgcHJpbnQgRiAiV0VCQ09SRV9FWFBPUlQgZXh0ZXJu
IE1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgV1RGOjpBdG9tU3RyaW5nPiAke2xv
d2VyY2FzZU5hbWVzcGFjZVByZWZpeH1OYW1lc3BhY2VVUkk7XG5cbiI7CisgICAgcHJpbnQgRiAi
V0VCQ09SRV9FWFBPUlQgZXh0ZXJuIE1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gJHtsb3dlcmNhc2VOYW1lc3BhY2VQcmVmaXh9TmFtZXNwYWNlVVJJO1xuXG4i
OwogCiAgICAgaWYgKGtleXMgJWFsbFRhZ3MpIHsKICAgICAgICAgcHJpbnQgRiAiLy8gVGFnc1xu
IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5l
cmljRmFtaWxpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdl
bmVyaWNGYW1pbGllcy5jcHAKaW5kZXggZDM1NzVkZGFhNjg4N2E2ODJhOWFjN2MxZDhjY2JkODFl
YzM1Njk3OC4uYjBiM2Q0NTJkNTYxOWM2OThhOWIyNTlhYWFmMjUzZTQxM2QwMzIzMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGll
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNG
YW1pbGllcy5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZhbWlseU5hbWVzOworCiBzdGF0aWMgYm9vbCBzZXRH
ZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChTY3JpcHRGb250RmFtaWx5TWFwJiBmb250TWFwLCBj
b25zdCBTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQogewogICAgIGlmIChmYW1p
bHkuaXNFbXB0eSgpKQpAQCAtMTgwLDQgKzE4MiwyOSBAQCBib29sIEZvbnRHZW5lcmljRmFtaWxp
ZXM6OnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBVU2NyaXB0
QwogICAgIHJldHVybiBzZXRHZW5lcmljRm9udEZhbWlseUZvclNjcmlwdChtX3BpY3RvZ3JhcGhG
b250RmFtaWx5TWFwLCBmYW1pbHksIHNjcmlwdCk7CiB9CiAKK2NvbnN0IFN0cmluZyogRm9udEdl
bmVyaWNGYW1pbGllczo6Zm9udEZhbWlseShGYW1pbHlOYW1lc0luZGV4IGZhbWlseSwgVVNjcmlw
dENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHN3aXRjaCAoZmFtaWx5KSB7CisgICAgY2FzZSBG
YW1pbHlOYW1lc0luZGV4OjpDdXJzaXZlRmFtaWx5OgorICAgICAgICByZXR1cm4gJmN1cnNpdmVG
b250RmFtaWx5KHNjcmlwdCk7CisgICAgY2FzZSBGYW1pbHlOYW1lc0luZGV4OjpGYW50YXN5RmFt
aWx5OgorICAgICAgICByZXR1cm4gJmZhbnRhc3lGb250RmFtaWx5KHNjcmlwdCk7CisgICAgY2Fz
ZSBGYW1pbHlOYW1lc0luZGV4OjpNb25vc3BhY2VGYW1pbHk6CisgICAgICAgIHJldHVybiAmZml4
ZWRGb250RmFtaWx5KHNjcmlwdCk7CisgICAgY2FzZSBGYW1pbHlOYW1lc0luZGV4OjpQaWN0b2dy
YXBoRmFtaWx5OgorICAgICAgICByZXR1cm4gJnBpY3RvZ3JhcGhGb250RmFtaWx5KHNjcmlwdCk7
CisgICAgY2FzZSBGYW1pbHlOYW1lc0luZGV4OjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgIHJl
dHVybiAmc2Fuc1NlcmlmRm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2UgRmFtaWx5TmFtZXNJ
bmRleDo6U2VyaWZGYW1pbHk6CisgICAgICAgIHJldHVybiAmc2VyaWZGb250RmFtaWx5KHNjcmlw
dCk7CisgICAgY2FzZSBGYW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseToKKyAgICAgICAg
cmV0dXJuICZzdGFuZGFyZEZvbnRGYW1pbHkoc2NyaXB0KTsKKyAgICBjYXNlIEZhbWlseU5hbWVz
SW5kZXg6OlN5c3RlbVVpRmFtaWx5OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNG
YW1pbGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNG
YW1pbGllcy5oCmluZGV4IDIzNzg3MTYwYjk4YjllODRhZWY4MGVjY2M2NWZkNWZjYjc0YWM1NTgu
LmFkYWZmM2MxNDZkYzcyMzVmZjA1OTZkNGZjNDc2Nzk3NWIxNTgyMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgK
QEAgLTIzLDkgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGb250R2Vu
ZXJpY0ZhbWlsaWVzX2gKLSNkZWZpbmUgRm9udEdlbmVyaWNGYW1pbGllc19oCisjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgogI2luY2x1ZGUgPHVuaWNv
ZGUvdXNjcmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbVN0cmluZy5oPgpAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3Ry
aW5nJiBmYW50YXN5Rm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25z
dDsKICAgICBjb25zdCBTdHJpbmcmIHBpY3RvZ3JhcGhGb250RmFtaWx5KFVTY3JpcHRDb2RlID0g
VVNDUklQVF9DT01NT04pIGNvbnN0OwogCisgICAgY29uc3QgU3RyaW5nKiBmb250RmFtaWx5KFdl
YktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleCwgVVNjcmlwdENvZGUgPSBVU0NS
SVBUX0NPTU1PTikgY29uc3Q7CisKICAgICBib29sIHNldFN0YW5kYXJkRm9udEZhbWlseShjb25z
dCBTdHJpbmcmLCBVU2NyaXB0Q29kZSk7CiAgICAgYm9vbCBzZXRGaXhlZEZvbnRGYW1pbHkoY29u
c3QgU3RyaW5nJiwgVVNjcmlwdENvZGUpOwogICAgIGJvb2wgc2V0U2VyaWZGb250RmFtaWx5KGNv
bnN0IFN0cmluZyYsIFVTY3JpcHRDb2RlKTsKQEAgLTc4LDUgKzgwLDMgQEAgcHJpdmF0ZToKIH07
CiAKIH0KLQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422555</attachid>
            <date>2021-03-08 05:05:38 -0800</date>
            <delta_ts>2021-03-09 01:39:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222735-20210308130534.patch</filename>
            <type>text/plain</type>
            <size>30269</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczODgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU1YWQzZWE4YmMyNTlk
MjRkMWMxMzQ5NGMxOTFlOGNhYTU0YzMwYi4uZTMzMDAwNmYyM2M3MTQxYWU2Yjg3ZjdmZDcyNWFm
MDEwMDhjMWJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTA0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBBbGxvdyBjcmVhdGlvbiBvZiBh
IENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgbm9uLURvY3VtZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjcz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlcGxhY2Ug
RG9jdW1lbnQgbWVtYmVyIG9mIENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC4KKyAgICAgICAgVGhpcyBhbHNvIGNoYW5nZXMgbWFrZV9uYW1lcy5wbCBzdHJpbmcg
aGVhZGVyIGdlbmVyYXRpb24gdG8gYWxsb3cgZm9yIGVhc2llciBlbnVtZXJhdGlvbiBvZiBmb250
IGZhbWlseSBzdHJpbmdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyBuZXcgYmVoYXZpb3Vy
IGlzIGN1cnJlbnRseSB1bnVzZWQuIEV4aXN0aW5nIGJlaGF2aW91ciBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9TdGF0aWNTdHJpbmcucG06
CisgICAgICAgIChHZW5lcmF0ZVN0cmluZ3MpOiBSZXZlcnQgY2hhbmdlIGZyb20gYnVnIDIyMjU1
MgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bV92
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250U3R5bGVVcGRhdGVOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpyZXNvbHZlR2VuZXJpY0ZhbWls
eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1p
bHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpzdG9wTG9hZGluZ0FuZENs
ZWFyRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRp
bmdGb250U29vbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmxvYWRQZW5k
aW5nRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGlu
Z1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxsYmFj
a0ZvbnRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNr
Rm9udEF0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAgICogY3Nz
L0ZvbnRGYWNlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KToKKyAgICAgICAg
KiBjc3MvRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKiBjc3MvRm9udEZhY2VTZXQuaWRsOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0Lmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmludE5hbWVz
SGVhZGVyRmlsZSk6IE1ha2UgZ2xvYmFsIHN0cmluZyBkYXRhIGFuZCBuYW1lcyBhY2Nlc3NpYmxl
IHZpYSBhIFZlY3RvciBhbmQgYWRkIGFuIGVudW0gb2YgbmFtZSBpbmRpY2VzLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0Zh
bWlsaWVzLmg6CisKIDIwMjEtMDMtMDMgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgog
CiAgICAgICAgIEFsbG93IENTUyBmb250LXN0eWxpbmcgZm9yIGNhbnZhcyB3aXRob3V0IFJlbmRl
clN0eWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL1N0YXRp
Y1N0cmluZy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5n
LnBtCmluZGV4IGQ3NDJkNDVhZDZjZjkzNjQ1MWRjYTg1MjFjMTI1NjUxOWJlNjk5YmYuLjEwYWY3
YzJmYmJjMDQwMWYwYzI1NGNlMmM5OGRjYWI2M2ZmODBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5nLnBtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5nLnBtCkBAIC00Myw3ICs0Myw3IEBAIEVO
RAogCiAgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXN0cmluZ3MpIHsKICAgICAgICAgbXkg
JHZhbHVlID0gJHN0cmluZ3N7JG5hbWV9OwotICAgICAgICBwdXNoKEByZXN1bHQsICJjb25zdCBT
dHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBsICR7bmFtZX1EYXRhKFwiJHt2YWx1ZX1cIik7XG4i
KTsKKyAgICAgICAgcHVzaChAcmVzdWx0LCAic3RhdGljIGNvbnN0ZXhwciBTdHJpbmdJbXBsOjpT
dGF0aWNTdHJpbmdJbXBsICR7bmFtZX1EYXRhKFwiJHt2YWx1ZX1cIik7XG4iKTsKICAgICB9CiAK
ICAgICBwdXNoKEByZXN1bHQsIDw8RU5EKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHAKaW5kZXggNWNjMTA4OWM1ODJjMWI0OTE4YTc5ODVhYTZmMjBlZmYxMmY1YWM2Mi4uMzhl
ZmI2NjY4ZDA4ODhlMDExYmMwZWYwYWU4MzhiNDUwNTVhM2ExZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTU5LDE4ICs1OSwyOSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRGb250RmFtaWx5TmFtZXM7CisKIHN0YXRp
YyB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKIAotQ1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2Vs
ZWN0b3IoRG9jdW1lbnQmIGRvY3VtZW50KQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50
KQotICAgICwgbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCitDU1NGb250U2VsZWN0
b3I6OkNTU0ZvbnRTZWxlY3RvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorICAg
IDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwgbV9jb250ZXh0KG1ha2VXZWFrUHRy
KGNvbnRleHQpKQogICAgICwgbV9jc3NGb250RmFjZVNldChDU1NGb250RmFjZVNldDo6Y3JlYXRl
KHRoaXMpKQogICAgICwgbV9mb250TW9kaWZpZWRPYnNlcnZlcihbdGhpc10geyBmb250TW9kaWZp
ZWQoKTsgfSkKICAgICAsIG1fZm9udExvYWRpbmdUaW1lcigqdGhpcywgJkNTU0ZvbnRTZWxlY3Rv
cjo6Zm9udExvYWRpbmdUaW1lckZpcmVkKQogICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3Rv
cklkKQogICAgICwgbV92ZXJzaW9uKDApCiB7Ci0gICAgQVNTRVJUKG1fZG9jdW1lbnQpOworICAg
IGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKKyAgICAgICAgbV9mb250RmFtaWx5TmFtZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlOYW1lcy0+c2l6ZSgpKTsKKyAgICAgICAgZm9y
IChhdXRvJiBmYW1pbHlOYW1lIDogZmFtaWx5TmFtZXMuZ2V0KCkpCisgICAgICAgICAgICBtX2Zv
bnRGYW1pbHlOYW1lcy51bmNoZWNrZWRDb25zdHJ1Y3RBbmRBcHBlbmQoZmFtaWx5TmFtZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9mb250RmFtaWx5TmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShmYW1pbHlOYW1lc0RhdGEtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgZmFtaWx5
TmFtZSA6IGZhbWlseU5hbWVzRGF0YS5nZXQoKSkKKyAgICAgICAgICAgIG1fZm9udEZhbWlseU5h
bWVzLnVuY2hlY2tlZEFwcGVuZChmYW1pbHlOYW1lKTsKKyAgICB9CisKICAgICBGb250Q2FjaGU6
OnNpbmdsZXRvbigpLmFkZENsaWVudCgqdGhpcyk7CiAgICAgbV9jc3NGb250RmFjZVNldC0+YWRk
Rm9udE1vZGlmaWVkT2JzZXJ2ZXIobV9mb250TW9kaWZpZWRPYnNlcnZlcik7CiAgICAgTE9HKEZv
bnRzLCAiQ1NTRm9udFNlbGVjdG9yICVwIGN0b3IiLCB0aGlzKTsKQEAgLTk0LDggKzEwNSw4IEBA
IEZvbnRGYWNlU2V0KiBDU1NGb250U2VsZWN0b3I6OmZvbnRGYWNlU2V0SWZFeGlzdHMoKQogRm9u
dEZhY2VTZXQmIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQoKQogewogICAgIGlmICghbV9m
b250RmFjZVNldCkgewotICAgICAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci0gICAgICAgIG1fZm9u
dEZhY2VTZXQgPSBGb250RmFjZVNldDo6Y3JlYXRlKCptX2RvY3VtZW50LCBtX2Nzc0ZvbnRGYWNl
U2V0LmdldCgpKTsKKyAgICAgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgICAgIG1fZm9udEZh
Y2VTZXQgPSBGb250RmFjZVNldDo6Y3JlYXRlKCptX2NvbnRleHQsIG1fY3NzRm9udEZhY2VTZXQu
Z2V0KCkpOwogICAgIH0KIAogICAgIHJldHVybiAqbV9mb250RmFjZVNldDsKQEAgLTE5Nyw3ICsy
MDgsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZv
bnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJbgogICAgIGlmIChsb2FkaW5nQmVoYXZpb3Ip
CiAgICAgICAgIGZvbnRGYWNlLT5zZXRMb2FkaW5nQmVoYXZpb3IoKmxvYWRpbmdCZWhhdmlvcik7
CiAKLSAgICBDU1NGb250RmFjZTo6YXBwZW5kU291cmNlcyhmb250RmFjZSwgc3JjTGlzdCwgbV9k
b2N1bWVudC5nZXQoKSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7
CisgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMoZm9udEZhY2UsIHNyY0xpc3QsIG1fY29u
dGV4dC5nZXQoKSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CiAg
ICAgaWYgKGZvbnRGYWNlLT5jb21wdXRlRmFpbHVyZVN0YXRlKCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjMxLDE0ICsyNDIsNiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6dW5yZWdpc3RlckZv
ckludmFsaWRhdGlvbkNhbGxiYWNrcyhGb250U2VsZWN0b3JDbGllbnQmIGNsaQogICAgIG1fY2xp
ZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIENTU0Zv
bnRTZWxlY3Rvcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gVGhp
cyBjbGFzcyByZXR1cm5zIGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBkZXNwaXRlIGhvbGRpbmcg
YSBEb2N1bWVudCBhcyBwcmVwYXJhdGlvbiBmb3IgYSBmdXR1cmUKLSAgICAvLyB3aGVyZSBpdCB3
aWxsIGFjdHVhbGx5IGhvbGQgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0ICh3aGljaCB3b3VsZCBi
ZSBlaXRoZXIgYSBEb2N1bWVudCBvciBhCi0gICAgLy8gV29ya2VyR2xvYmFsU2NvcGUsIGluIHRo
ZSBjYXNlIG9mIHVzaW5nIGZvbnRzIGluIE9mZnNjcmVlbkNhbnZhcykuCi0gICAgcmV0dXJuIG1f
ZG9jdW1lbnQuZ2V0KCk7Ci19Ci0KIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpkaXNwYXRjaEludmFs
aWRhdGlvbkNhbGxiYWNrcygpCiB7CiAgICAgKyttX3ZlcnNpb247CkBAIC0yNjksOCArMjcyLDgg
QEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRNb2RpZmllZCgpCiAKIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjpmb250U3R5bGVVcGRhdGVOZWVkZWQoQ1NTRm9udEZhY2UmKQogewotICAgIGlmICht
X2RvY3VtZW50KQotICAgICAgICBtX2RvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Cisg
ICAgaWYgKGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQorICAgICAgICBkb3duY2FzdDxE
b2N1bWVudD4oKm1fY29udGV4dCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogfQogCiB2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0ZWQoKQpAQCAtMjc4LDMyICsyODEsMjMg
QEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRDYWNoZUludmFsaWRhdGVkKCkKICAgICBkaXNw
YXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8QXRvbVN0
cmluZz4gcmVzb2x2ZUdlbmVyaWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFt
ZSkKK09wdGlvbmFsPEF0b21TdHJpbmc+IENTU0ZvbnRTZWxlY3Rvcjo6cmVzb2x2ZUdlbmVyaWNG
YW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgYXV0byBwbGF0Zm9ybVJlc3VsdCA9IEZvbnREZXNj
cmlwdGlvbjo6cGxhdGZvcm1SZXNvbHZlR2VuZXJpY0ZhbWlseShmb250RGVzY3JpcHRpb24uc2Ny
aXB0KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLCBmYW1pbHlOYW1lKTsKICAg
ICBpZiAoIXBsYXRmb3JtUmVzdWx0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1S
ZXN1bHQ7CiAKLSAgICBpZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9jb250ZXh0KQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzID0g
ZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgY29uc3QgYXV0byYgc2V0dGluZ3MgPSBtX2NvbnRl
eHQtPnNldHRpbmdzVmFsdWVzKCk7CiAKICAgICBVU2NyaXB0Q29kZSBzY3JpcHQgPSBmb250RGVz
Y3JpcHRpb24uc2NyaXB0KCk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gc2VyaWZGYW1pbHkpCi0g
ICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHNldHRpbmdzLnNlcmlmRm9udEZhbWlseShzY3JpcHQp
KTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBzYW5zU2VyaWZGYW1pbHkpCi0gICAgICAgIHJldHVy
biBBdG9tU3RyaW5nKHNldHRpbmdzLnNhbnNTZXJpZkZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAg
aWYgKGZhbWlseU5hbWUgPT0gY3Vyc2l2ZUZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJp
bmcoc2V0dGluZ3MuY3Vyc2l2ZUZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5h
bWUgPT0gZmFudGFzeUZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3Mu
ZmFudGFzeUZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gbW9ub3Nw
YWNlRmFtaWx5KQotICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5maXhlZEZvbnRG
YW1pbHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gcGljdG9ncmFwaEZhbWlseSkK
LSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3MucGljdG9ncmFwaEZvbnRGYW1pbHko
c2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gc3RhbmRhcmRGYW1pbHkpCi0gICAgICAg
IHJldHVybiBBdG9tU3RyaW5nKHNldHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseShzY3JpcHQpKTsK
KyAgICBhdXRvIGZhbWlseU5hbWVJbmRleCA9IG1fZm9udEZhbWlseU5hbWVzLmZpbmQoZmFtaWx5
TmFtZSk7CisgICAgaWYgKGZhbWlseU5hbWVJbmRleCAhPSBub3RGb3VuZCkgeworICAgICAgICBp
ZiAoYXV0byBmYW1pbHlTdHJpbmcgPSBzZXR0aW5ncy5mb250R2VuZXJpY0ZhbWlsaWVzLmZvbnRG
YW1pbHkoc3RhdGljX2Nhc3Q8RmFtaWx5TmFtZXNJbmRleD4oZmFtaWx5TmFtZUluZGV4KSwgc2Ny
aXB0KSkKKyAgICAgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKCpmYW1pbHlTdHJpbmcpOworICAg
IH0KIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC0zMTQsMzQgKzMwOCwzMSBAQCBG
b250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcgogICAgIEFTU0VSVCghbV9idWlsZElzVW5kZXJ3YXkgfHwg
bV9jb21wdXRpbmdSb290U3R5bGVGb250Q291bnQpOwogCiAgICAgLy8gRklYTUU6IFRoZSBzcGVj
IChhbmQgRmlyZWZveCkgc2F5cyB1c2VyIHNwZWNpZmllZCBnZW5lcmljIGZhbWlsaWVzIChzYW5z
LXNlcmlmIGV0Yy4pIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgdGhlIEBmb250LWZhY2UgbG9v
a3VwIHRvby4KLSAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1l
ID09IHN0YW5kYXJkRmFtaWx5OworICAgIGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9
IGZhbWlseU5hbWUgPT0gbV9mb250RmFtaWx5TmFtZXNbc3RhdGljX2Nhc3Q8aW50PihGYW1pbHlO
YW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseSldOwogCiAgICAgQXRvbVN0cmluZyBmYW1pbHlGb3JM
b29rdXAgPSBmYW1pbHlOYW1lOwogICAgIE9wdGlvbmFsPEZvbnREZXNjcmlwdGlvbj4gb3ZlcnJp
ZGVGb250RGVzY3JpcHRpb247CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uKiBmb250RGVzY3Jp
cHRpb25Gb3JMb29rdXAgPSAmZm9udERlc2NyaXB0aW9uOwotICAgIGF1dG8gcmVzb2x2ZUdlbmVy
aWNGYW1pbHkgPSBbJl0oKSB7Ci0gICAgICAgIGlmIChhdXRvIGdlbmVyaWNGYW1pbHlPcHRpb25h
bCA9IFdlYkNvcmU6OnJlc29sdmVHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQuZ2V0KCksIGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSkpCisgICAgYXV0byByZXNvbHZlQW5kQXNzaWduR2VuZXJp
Y0ZhbWlseSA9IFsmXSgpIHsKKyAgICAgICAgaWYgKGF1dG8gZ2VuZXJpY0ZhbWlseU9wdGlvbmFs
ID0gcmVzb2x2ZUdlbmVyaWNGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKSkKICAg
ICAgICAgICAgIGZhbWlseUZvckxvb2t1cCA9ICpnZW5lcmljRmFtaWx5T3B0aW9uYWw7CiAgICAg
fTsKIAogICAgIGlmIChyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQotICAgICAgICByZXNvbHZl
R2VuZXJpY0ZhbWlseSgpOworICAgICAgICByZXNvbHZlQW5kQXNzaWduR2VuZXJpY0ZhbWlseSgp
OworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkp
ID8gJmRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KSA6IG51bGxwdHI7CiAgICAgYXV0byog
ZmFjZSA9IG1fY3NzRm9udEZhY2VTZXQtPmZvbnRGYWNlKGZvbnREZXNjcmlwdGlvbkZvckxvb2t1
cC0+Zm9udFNlbGVjdGlvblJlcXVlc3QoKSwgZmFtaWx5Rm9yTG9va3VwKTsKICAgICBpZiAoZmFj
ZSkgewotICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9kb2N1bWVu
dCkKLSAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9u
dExvYWQoKm1fZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgdHJ1ZSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWls
eUZvckxvb2t1cC5zdHJpbmcoKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBmYWNlLT5mb250UmFu
Z2VzKCpmb250RGVzY3JpcHRpb25Gb3JMb29rdXApOwogICAgIH0KIAogICAgIGlmICghcmVzb2x2
ZUdlbmVyaWNGYW1pbHlGaXJzdCkKLSAgICAgICAgcmVzb2x2ZUdlbmVyaWNGYW1pbHkoKTsKKyAg
ICAgICAgcmVzb2x2ZUFuZEFzc2lnbkdlbmVyaWNGYW1pbHkoKTsKICAgICBhdXRvIGZvbnQgPSBG
b250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoKmZvbnREZXNjcmlwdGlvbkZvckxv
b2t1cCwgZmFtaWx5Rm9yTG9va3VwKTsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlm
IChtX2RvY3VtZW50KQotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0ZvbnRMb2FkKCptX2RvY3VtZW50LCBmYW1pbHlGb3JMb29rdXAuc3RyaW5nKCksICEhZm9u
dCk7Ci0gICAgfQorICAgIGlmIChkb2N1bWVudCAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZv
ckxvb2t1cC5zdHJpbmcoKSwgISFmb250KTsKICAgICByZXR1cm4gRm9udFJhbmdlcyB7IFdURk1v
dmUoZm9udCkgfTsKIH0KIApAQCAtMzU2LDEyICszNDcsMTUgQEAgdm9pZCBDU1NGb250U2VsZWN0
b3I6OnN0b3BMb2FkaW5nQW5kQ2xlYXJGb250cygpCiAgICAgbV9pc1N0b3BwZWQgPSB0cnVlOwog
ICAgIG1fZm9udExvYWRpbmdUaW1lci5zdG9wKCk7CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpOwotICAgIGZvciAoYXV0byYgZm9udEhhbmRsZSA6IG1fZm9udHNUb0JlZ2luTG9hZGluZykg
ewotICAgICAgICAvLyBCYWxhbmNlcyBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBiZWdpbkxv
YWRpbmdGb250U29vbigpLgotICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci5kZWNyZW1lbnRS
ZXF1ZXN0Q291bnQoKmZvbnRIYW5kbGUpOworICAgIGlmIChpczxEb2N1bWVudD4obV9jb250ZXh0
LmdldCgpKSkgeworICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
bV9jb250ZXh0KTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNl
TG9hZGVyID0gZG9jdW1lbnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICAgICAgZm9yIChh
dXRvJiBmb250SGFuZGxlIDogbV9mb250c1RvQmVnaW5Mb2FkaW5nKSB7CisgICAgICAgICAgICAv
LyBCYWxhbmNlcyBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBiZWdpbkxvYWRpbmdGb250U29v
bigpLgorICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIuZGVjcmVtZW50UmVxdWVzdENv
dW50KCpmb250SGFuZGxlKTsKKyAgICAgICAgfQorICAgICAgICBtX2ZvbnRzVG9CZWdpbkxvYWRp
bmcuY2xlYXIoKTsKICAgICB9Ci0gICAgbV9mb250c1RvQmVnaW5Mb2FkaW5nLmNsZWFyKCk7CiAK
ICAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5jbGVhcigpOwogICAgIG1fY2xpZW50cy5jbGVhcigpOwpA
QCAtMzY5LDE0ICszNjMsMTYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OnN0b3BMb2FkaW5nQW5k
Q2xlYXJGb250cygpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRpbmdGb250U29v
bihDYWNoZWRGb250JiBmb250KQogewotICAgIGlmIChtX2lzU3RvcHBlZCkKKyAgICBpZiAobV9p
c1N0b3BwZWQgfHwgIWlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0
KTsKKwogICAgIG1fZm9udHNUb0JlZ2luTG9hZGluZy5hcHBlbmQoJmZvbnQpOwogICAgIC8vIElu
Y3JlbWVudCB0aGUgcmVxdWVzdCBjb3VudCBub3csIGluIG9yZGVyIHRvIHByZXZlbnQgZGlkRmlu
aXNoTG9hZCBmcm9tIGJlaW5nIGRpc3BhdGNoZWQKICAgICAvLyBhZnRlciB0aGlzIGZvbnQgaGFz
IGJlZW4gcmVxdWVzdGVkIGJ1dCBiZWZvcmUgaXQgYmVnYW4gbG9hZGluZy4gQmFsYW5jZWQgYnkK
ICAgICAvLyBkZWNyZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBmb250TG9hZGluZ1RpbWVyRmlyZWQo
KSBhbmQgaW4gc3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCkuCi0gICAgbV9kb2N1bWVudC0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoZm9udCk7CisgICAgZG9j
dW1lbnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoZm9udCk7
CiAKICAgICBpZiAoIW1faXNGb250TG9hZGluZ1N1c3BlbmRlZCAmJiAhbV9mb250TG9hZGluZ1Rp
bWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZm9udExvYWRpbmdUaW1lci5zdGFydE9uZVNob3Qo
MF9zKTsKQEAgLTM4OSwxNiArMzg1LDE4IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpzdXNwZW5k
Rm9udExvYWRpbmdUaW1lcigpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpsb2FkUGVuZGluZ0Zv
bnRzKCkKIHsKLSAgICBpZiAobV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkKQorICAgIGlmIChtX2lz
Rm9udExvYWRpbmdTdXNwZW5kZWQgfHwgIWlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqbV9jb250ZXh0KTsKKwogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRG
b250Pj4gZm9udHNUb0JlZ2luTG9hZGluZzsKICAgICBmb250c1RvQmVnaW5Mb2FkaW5nLnN3YXAo
bV9mb250c1RvQmVnaW5Mb2FkaW5nKTsKIAogICAgIC8vIENTU0ZvbnRTZWxlY3RvciBjb3VsZCBn
ZXQgZGVsZXRlZCB2aWEgYmVnaW5Mb2FkSWZOZWVkZWQoKSBvciBsb2FkRG9uZSgpIHVubGVzcyBw
cm90ZWN0ZWQuCiAgICAgUmVmPENTU0ZvbnRTZWxlY3Rvcj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7
CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2Rv
Y3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVy
JiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50LmNhY2hlZFJlc291cmNlTG9hZGVyKCk7
CiAgICAgZm9yIChhdXRvJiBmb250SGFuZGxlIDogZm9udHNUb0JlZ2luTG9hZGluZykgewogICAg
ICAgICBmb250SGFuZGxlLT5iZWdpbkxvYWRJZk5lZWRlZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7
CiAgICAgICAgIC8vIEJhbGFuY2VzIGluY3JlbWVudFJlcXVlc3RDb3VudCgpIGluIGJlZ2luTG9h
ZGluZ0ZvbnRTb29uKCkuCkBAIC00MDgsMTggKzQwNiwyMiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rv
cjo6bG9hZFBlbmRpbmdGb250cygpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGlu
Z1RpbWVyRmlyZWQoKQogeworICAgIGlmICghaXM8RG9jdW1lbnQ+KG1fY29udGV4dC5nZXQoKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCptX2NvbnRleHQpOwogICAgIFJlZjxDU1NGb250U2VsZWN0b3I+IHByb3RlY3RlZFRoaXMo
KnRoaXMpOwogCiAgICAgbG9hZFBlbmRpbmdGb250cygpOwogCiAgICAgLy8gRklYTUU6IFVzZSBT
dWJyZXNvdXJjZUxvYWRlciBpbnN0ZWFkLgogICAgIC8vIENhbGwgRnJhbWVMb2FkZXI6OmxvYWRE
b25lIGJlZm9yZSBGcmFtZUxvYWRlcjo6c3VicmVzb3VyY2VMb2FkRG9uZSB0byBtYXRjaCB0aGUg
b3JkZXIgaW4gU3VicmVzb3VyY2VMb2FkZXI6Om5vdGlmeURvbmUuCi0gICAgbV9kb2N1bWVudC0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9uZShMb2FkQ29tcGxldGlvblR5cGU6OkZpbmlz
aCk7CisgICAgZG9jdW1lbnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9uZShMb2FkQ29t
cGxldGlvblR5cGU6OkZpbmlzaCk7CiAgICAgLy8gRW5zdXJlIHRoYXQgaWYgdGhlIHJlcXVlc3Qg
Y291bnQgcmVhY2hlcyB6ZXJvLCB0aGUgZnJhbWUgbG9hZGVyIHdpbGwga25vdyBhYm91dCBpdC4K
ICAgICAvLyBOZXcgZm9udCBsb2FkcyBtYXkgYmUgdHJpZ2dlcmVkIGJ5IGxheW91dCBhZnRlciB0
aGUgZG9jdW1lbnQgbG9hZCBpcyBjb21wbGV0ZSBidXQgYmVmb3JlIHdlIGhhdmUgZGlzcGF0Y2hl
ZAogICAgIC8vIGRpZEZpbmlzaExvYWRpbmcgZm9yIHRoZSBmcmFtZS4gTWFrZSBzdXJlIHRoZSBk
ZWxlZ2F0ZSBpcyBhbHdheXMgZGlzcGF0Y2hlZCBieSBjaGVja2luZyBleHBsaWNpdGx5LgotICAg
IGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIG1fZG9jdW1l
bnQtPmZyYW1lKCktPmxvYWRlcigpLmNoZWNrTG9hZENvbXBsZXRlKCk7CisgICAgaWYgKGRvY3Vt
ZW50LmZyYW1lKCkpCisgICAgICAgIGRvY3VtZW50LmZyYW1lKCktPmxvYWRlcigpLmNoZWNrTG9h
ZENvbXBsZXRlKCk7CiB9CiAKIHNpemVfdCBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udENv
dW50KCkKQEAgLTQyNyw3ICs0MjksNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFj
a0ZvbnRDb3VudCgpCiAgICAgaWYgKG1faXNTdG9wcGVkKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIHJldHVybiBtX2RvY3VtZW50LT5zZXR0aW5ncygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0
b2dyYXBocygpID8gMSA6IDA7CisgICAgcmV0dXJuIG1fY29udGV4dC0+c2V0dGluZ3NWYWx1ZXMo
KS5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgPyAxIDogMDsKIH0KIAogUmVmUHRyPEZv
bnQ+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIHNpemVfdCBpbmRleCkKQEAgLTQzNywxMiArNDM5LDEyIEBAIFJl
ZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0CiAgICAgaWYgKG1faXNTdG9wcGVkKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5mb250RmFsbGJh
Y2tQcmVmZXJzUGljdG9ncmFwaHMoKSkKKyAgICBpZiAoIW1fY29udGV4dC0+c2V0dGluZ3NWYWx1
ZXMoKS5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGF1dG8mIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gbV9kb2N1bWVudC0+c2V0dGlu
Z3MoKS5waWN0b2dyYXBoRm9udEZhbWlseSgpOworICAgIGF1dG8mIHBpY3RvZ3JhcGhGb250RmFt
aWx5ID0gbV9jb250ZXh0LT5zZXR0aW5nc1ZhbHVlcygpLmZvbnRHZW5lcmljRmFtaWxpZXMucGlj
dG9ncmFwaEZvbnRGYW1pbHkoKTsKICAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRv
bigpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBwaWN0b2dyYXBoRm9udEZhbWlseSk7
Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkKLSAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0ZvbnRMb2FkKCptX2RvY3VtZW50LCBwaWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpICYmIGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoZG93bmNh
c3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpLCBwaWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250KTsK
IAogICAgIHJldHVybiBmb250OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCmlu
ZGV4IGU3Zjg1NmIwOTg2ODkxODUxNWYzZjEyYjI3MzBkYjRiOWI4NmIzNzMuLmE5ZmEyOGZmN2E1
NDFmNDg4NjhhNWM1NTAwYjhkOWQzYzRhZmEwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNl
bGVjdG9yLmgKQEAgLTQ1LDE0ICs0NSwxNCBAQCBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKIGNs
YXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlOwogY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ2Fj
aGVkRm9udDsKLWNsYXNzIERvY3VtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
IGNsYXNzIFN0eWxlUnVsZUZvbnRGYWNlOwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwg
OiBwdWJsaWMgRm9udFNlbGVjdG9yLCBwdWJsaWMgQ1NTRm9udEZhY2U6OkNsaWVudCwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPENTU0ZvbnRTZWxlY3Rvcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50KQorICAgIHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENTU0ZvbnRTZWxlY3Rvcihkb2N1bWVudCkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDU1NGb250U2VsZWN0b3IoY29udGV4dCkpOwogICAgIH0KICAgICB2aXJ0dWFs
IH5DU1NGb250U2VsZWN0b3IoKTsKICAgICAKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAg
IHZvaWQgcmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50
JikgZmluYWw7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZv
bnRTZWxlY3RvckNsaWVudCYpIGZpbmFsOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7IH0KIAogICAgIHZvaWQgYmVnaW5Mb2FkaW5nRm9udFNvb24oQ2FjaGVkRm9udCYpOwogICAg
IHZvaWQgc3VzcGVuZEZvbnRMb2FkaW5nVGltZXIoKTsKQEAgLTk1LDEyICs5NSwxNCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkZXJlZigpIGZpbmFsIHsgRm9udFNlbGVjdG9yOjpkZXJlZigpOyB9CiAK
IHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ1NTRm9udFNlbGVjdG9yKERvY3VtZW50Jik7CisgICAg
ZXhwbGljaXQgQ1NTRm9udFNlbGVjdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIAogICAg
IHZvaWQgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsKIAogICAgIHZvaWQgb3Bwb3J0
dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGluZyhjb25zdCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KSBmaW5hbDsKIAorICAgIE9wdGlvbmFs
PEF0b21TdHJpbmc+IHJlc29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisKICAgICAvLyBDU1NGb250RmFjZTo6Q2xpZW50
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlJikgZmluYWw7CiAgICAgdm9pZCBmb250
U3R5bGVVcGRhdGVOZWVkZWQoQ1NTRm9udEZhY2UmKSBmaW5hbDsKQEAgLTEyMCw3ICsxMjIsNyBA
QCBwcml2YXRlOgogICAgIH07CiAgICAgVmVjdG9yPFBlbmRpbmdGb250RmFjZVJ1bGU+IG1fc3Rh
Z2luZ0FyZWE7CiAKLSAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworICAgIFdlYWtQ
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9jb250ZXh0OwogICAgIFJlZlB0cjxGb250RmFj
ZVNldD4gbV9mb250RmFjZVNldDsKICAgICBSZWY8Q1NTRm9udEZhY2VTZXQ+IG1fY3NzRm9udEZh
Y2VTZXQ7CiAgICAgSGFzaFNldDxGb250U2VsZWN0b3JDbGllbnQqPiBtX2NsaWVudHM7CkBAIC0x
NDAsNiArMTQyLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fY3JlYXRpbmdGb250IHsgZmFsc2Ug
fTsKICAgICBib29sIG1fYnVpbGRJc1VuZGVyd2F5IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNT
dG9wcGVkIHsgZmFsc2UgfTsKKworICAgIFdURjo6VmVjdG9yPEF0b21TdHJpbmc+IG1fZm9udEZh
bWlseU5hbWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250
RmFjZVNldC5jcHAKaW5kZXggMjFiNmY2OGVmMzMzNmE0YTljZGI3M2M1NmU1YjVlNzhlMDRhY2Rj
NC4uYWQ4NDZkZjU5ODc5MThlMGY5NWZmZTlkNzk2MGY3MjFlNzE3NjkzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZhY2VTZXQuY3BwCkBAIC00MSwyMiArNDEsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRm9udEZhY2VTZXQpOwogCi1SZWY8Rm9u
dEZhY2VTZXQ+IEZvbnRGYWNlU2V0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKK1JlZjxGb250RmFjZVNldD4g
Rm9udEZhY2VTZXQ6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25z
dCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKIHsKLSAgICBSZWY8Rm9u
dEZhY2VTZXQ+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgRm9udEZhY2VTZXQoZG9jdW1lbnQsIGlu
aXRpYWxGYWNlcykpOworICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5l
dyBGb250RmFjZVNldChjb250ZXh0LCBpbml0aWFsRmFjZXMpKTsKICAgICByZXN1bHQtPnN1c3Bl
bmRJZk5lZWRlZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxGb250RmFjZVNldD4g
Rm9udEZhY2VTZXQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIENTU0ZvbnRGYWNlU2V0JiBi
YWNraW5nKQorUmVmPEZvbnRGYWNlU2V0PiBGb250RmFjZVNldDo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKQogewotICAgIFJl
ZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChkb2N1bWVu
dCwgYmFja2luZykpOworICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5l
dyBGb250RmFjZVNldChjb250ZXh0LCBiYWNraW5nKSk7CiAgICAgcmVzdWx0LT5zdXNwZW5kSWZO
ZWVkZWQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Gb250RmFjZVNldDo6Rm9udEZhY2VT
ZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGlu
aXRpYWxGYWNlcykKLSAgICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCkKK0ZvbnRGYWNlU2V0
OjpGb250RmFjZVNldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0
b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKKyAgICA6IEFjdGl2ZURPTU9iamVj
dCgmY29udGV4dCkKICAgICAsIG1fYmFja2luZyhDU1NGb250RmFjZVNldDo6Y3JlYXRlKCkpCiAg
ICAgLCBtX3JlYWR5UHJvbWlzZShtYWtlVW5pcXVlUmVmPFJlYWR5UHJvbWlzZT4oKnRoaXMsICZG
b250RmFjZVNldDo6cmVhZHlQcm9taXNlUmVzb2x2ZSkpCiB7CkBAIC02NSwxMyArNjUsMTYgQEAg
Rm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVjdG9y
PFJlZlB0cjxGb250RmFjZT4+JiBpbmkKICAgICAgICAgYWRkKCpmYWNlKTsKIH0KIAotRm9udEZh
Y2VTZXQ6OkZvbnRGYWNlU2V0KERvY3VtZW50JiBkb2N1bWVudCwgQ1NTRm9udEZhY2VTZXQmIGJh
Y2tpbmcpCi0gICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQpCitGb250RmFjZVNldDo6Rm9u
dEZhY2VTZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgQ1NTRm9udEZhY2VTZXQm
IGJhY2tpbmcpCisgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX2JhY2tp
bmcoYmFja2luZykKICAgICAsIG1fcmVhZHlQcm9taXNlKG1ha2VVbmlxdWVSZWY8UmVhZHlQcm9t
aXNlPigqdGhpcywgJkZvbnRGYWNlU2V0OjpyZWFkeVByb21pc2VSZXNvbHZlKSkKIHsKLSAgICBp
ZiAoZG9jdW1lbnQuZnJhbWUoKSkKLSAgICAgICAgbV9pc0RvY3VtZW50TG9hZGVkID0gZG9jdW1l
bnQubG9hZEV2ZW50RmluaXNoZWQoKSAmJiAhZG9jdW1lbnQucHJvY2Vzc2luZ0xvYWRFdmVudCgp
OworICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKKyAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7CisgICAgICAgIGlmIChkb2N1bWVudC5m
cmFtZSgpKQorICAgICAgICAgICAgbV9pc0RvY3VtZW50TG9hZGVkID0gZG9jdW1lbnQubG9hZEV2
ZW50RmluaXNoZWQoKSAmJiAhZG9jdW1lbnQucHJvY2Vzc2luZ0xvYWRFdmVudCgpOworICAgIH0K
IAogICAgIGlmIChtX2lzRG9jdW1lbnRMb2FkZWQgJiYgIWJhY2tpbmcuaGFzQWN0aXZlRm9udEZh
Y2VzKCkpCiAgICAgICAgIG1fcmVhZHlQcm9taXNlLT5yZXNvbHZlKCp0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRGYWNlU2V0LmgKaW5kZXggMmY2OTY4MTQ5YjgwODRiNmU2M2MxZjI1M2ZjNjZkNDg1ZWU2
Zjc5NC4uZGMwY2Y1ZGNhZjFmN2YxMzQxMGI0Nzc5NTM3ZWVmMTg4ODA1MmQwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRGYWNlU2V0LmgKQEAgLTQxLDggKzQxLDggQEAgY2xhc3MgRE9NRXhjZXB0aW9uOwog
Y2xhc3MgRm9udEZhY2VTZXQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250RmFjZVNldD4s
IHByaXZhdGUgQ1NTRm9udEZhY2VTZXQ6OkZvbnRFdmVudENsaWVudCwgcHVibGljIEV2ZW50VGFy
Z2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoRm9udEZhY2VTZXQpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Rm9u
dEZhY2VTZXQ+IGNyZWF0ZShEb2N1bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+
PiYgaW5pdGlhbEZhY2VzKTsKLSAgICBzdGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoRG9j
dW1lbnQmLCBDU1NGb250RmFjZVNldCYgYmFja2luZyk7CisgICAgc3RhdGljIFJlZjxGb250RmFj
ZVNldD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBWZWN0b3I8UmVmUHRy
PEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcyk7CisgICAgc3RhdGljIFJlZjxGb250RmFjZVNldD4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBDU1NGb250RmFjZVNldCYgYmFja2luZyk7
CiAgICAgdmlydHVhbCB+Rm9udEZhY2VTZXQoKTsKIAogICAgIGJvb2wgaGFzKEZvbnRGYWNlJikg
Y29uc3Q7CkBAIC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaGFzUmVhY2hl
ZFRlcm1pbmFsU3RhdGUgeyBmYWxzZSB9OwogICAgIH07CiAKLSAgICBGb250RmFjZVNldChEb2N1
bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYpOwotICAgIEZvbnRGYWNlU2V0
KERvY3VtZW50JiwgQ1NTRm9udEZhY2VTZXQmKTsKKyAgICBGb250RmFjZVNldChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+Jik7CisgICAgRm9u
dEZhY2VTZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIENTU0ZvbnRGYWNlU2V0Jik7CiAKICAg
ICAvLyBDU1NGb250RmFjZVNldDo6Rm9udEV2ZW50Q2xpZW50CiAgICAgdm9pZCBmYWNlRmluaXNo
ZWQoQ1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVzKSBmaW5hbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udEZhY2VTZXQuaWRsCmluZGV4IGNkNTdmYjFjNDEzYTkwNGVjMTZlODVkOTZmODU0NTNlNDkz
NmVmZGUuLjI2ZDBiY2RjNjhjNWMyYzBmZDExYWIyM2E1MzcxMTZmOTM4ZTVmNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0ZvbnRGYWNlU2V0LmlkbApAQCAtMzIsNyArMzIsNyBAQCBlbnVtIEZvbnRGYWNlU2V0
TG9hZFN0YXR1cyB7CiAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIEV4cG9zZWQ9V2luZG93CiBd
IGludGVyZmFjZSBGb250RmFjZVNldCA6IEV2ZW50VGFyZ2V0IHsKLSAgICBbQ2FsbFdpdGg9RG9j
dW1lbnRdIGNvbnN0cnVjdG9yKHNlcXVlbmNlPEZvbnRGYWNlPiBpbml0aWFsRmFjZXMpOworICAg
IFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBjb25zdHJ1Y3RvcihzZXF1ZW5jZTxG
b250RmFjZT4gaW5pdGlhbEZhY2VzKTsKIAogICAgIGJvb2xlYW4gaGFzKEZvbnRGYWNlIGZvbnQp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDQ1NzQ3OGNlMDFlMTg2Yzg2YzI1NTYxYzkwZTAw
M2E0NzEwYzIxMjkuLjE5NmQ1ZjcxZTgxZWJlYWZmMmNhZGRjZGU4MjM5MGJmZTk3OGE5YzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNDcsNiArMzQ3LDkgQEAgY2xhc3MgRG9jdW1lbnQKICAg
ICAsIHB1YmxpYyBDYW52YXNPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9F
WFBPUlQoRG9jdW1lbnQsIFdFQkNPUkVfRVhQT1JUKTsKIHB1YmxpYzoKKyAgICB1c2luZyBXZWFr
VmFsdWVUeXBlID0gRXZlbnRUYXJnZXQ6OldlYWtWYWx1ZVR5cGU7CisgICAgdXNpbmcgRXZlbnRU
YXJnZXQ6OndlYWtQdHJGYWN0b3J5OworCiAgICAgc3RhdGljIFJlZjxEb2N1bWVudD4gY3JlYXRl
KGNvbnN0IFNldHRpbmdzJiwgY29uc3QgVVJMJik7CiAgICAgc3RhdGljIFJlZjxEb2N1bWVudD4g
Y3JlYXRlTm9uUmVuZGVyZWRQbGFjZWhvbGRlcihGcmFtZSYsIGNvbnN0IFVSTCYpOwogICAgIHN0
YXRpYyBSZWY8RG9jdW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggZDQ2ODdjZTVhNmMzMDg5YzNlMmJmNmQz
NzcyNjVkZDk5MWM1YWM1OC4uMmE5MjMwNzEyMGEwNzc5MTZiZTBiYmQzZjg5MGYzZjQyYmRkZTU2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtODIsNyArODMsNyBAQCBjbGFzcyBJREJDb25uZWN0aW9uUHJveHk7CiBlbnVt
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyVHlwZSB7IH07CiB1c2luZyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dElkZW50aWZpZXJUeXBlPjsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQgeworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiB7CiBwdWJsaWM6CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIHZpcnR1YWwgflNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2Vf
bmFtZXMucGwKaW5kZXggOWVkZGMxOTE2OTE2ZWI5NGU4NmFlMWE3NGM3YzFkYmYwZGExNWZmYS4u
NDA4YTE3NTcyYzkyMTUxNGQ1NjE1NTE1ZjIyMzFjN2MxOTMzZDdmYSAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21h
a2VfbmFtZXMucGwKQEAgLTEwMCwxMiArMTAwLDE5IEBAIGlmIChsZW5ndGgoJGZvbnROYW1lc0lu
KSkgewogICAgIHByaW50TGljZW5zZUhlYWRlcigkRik7CiAgICAgcHJpbnRIZWFkZXJIZWFkKCRG
LCAiQ1NTIiwgJGZhbWlseU5hbWVzRmlsZUJhc2UsIDw8RU5ELCAiIik7CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21TdHJpbmcuaD4KIEVORAogCi0gICAgcHJpbnRNYWNyb3MoJEYsICJleHRlcm4g
Y29uc3QgU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCIsICJEYXRhIiwgXCVwYXJhbWV0ZXJz
KTsKKyAgICBwcmludCBGICJleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPFZlY3Rvcjxjb25zdCBT
dGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRlcnMpLCAiPj4gZmFtaWx5
TmFtZXNEYXRhO1xuIjsKKyAgICBwcmludCBGICJleHRlcm4gTWFpblRocmVhZExhenlOZXZlckRl
c3Ryb3llZDxWZWN0b3I8QXRvbVN0cmluZ0ltcGwqLCAiLCBzY2FsYXIoa2V5cyAlcGFyYW1ldGVy
cyksICI+PiBmYW1pbHlOYW1lcztcblxuIjsKKyAgICBwcmludE1hY3JvcygkRiwgImV4dGVybiBN
YWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IiwgIiIsIFwlcGFy
YW1ldGVycyk7CiAgICAgcHJpbnQgRiAiXG4iOwotICAgIHByaW50TWFjcm9zKCRGLCAiZXh0ZXJu
IE1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgV1RGOjpBdG9tU3RyaW5nPiIsICIi
LCBcJXBhcmFtZXRlcnMpOworICAgIHByaW50IEYgImVudW0gY2xhc3MgRmFtaWx5TmFtZXNJbmRl
eCB7XG4iOworICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICVwYXJhbWV0ZXJzKSB7CisgICAg
ICAgIHByaW50IEYgIiAgICAiLCB1Y2ZpcnN0KCR7bmFtZX0pLCAiLFxuIjsKKyAgICB9CisgICAg
cHJpbnQgRiAifTtcblxuIjsKICAgICBwcmludCBGICIjZW5kaWZcblxuIjsKIAogICAgIHByaW50
SW5pdCgkRiwgMSk7CkBAIC0xMTksMTcgKzEyNiwzMiBAQCBFTkQKIAogICAgIHByaW50IEYgU3Rh
dGljU3RyaW5nOjpHZW5lcmF0ZVN0cmluZ3MoXCVwYXJhbWV0ZXJzKTsKIAotICAgIHByaW50TWFj
cm9zKCRGLCAiTWFpblRocmVhZExhenlOZXZlckRlc3Ryb3llZDxjb25zdCBXVEY6OkF0b21TdHJp
bmc+IiwgIiIsIFwlcGFyYW1ldGVycyk7CisgICAgcHJpbnQgRiAiTGF6eU5ldmVyRGVzdHJveWVk
PFZlY3Rvcjxjb25zdCBTdGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRl
cnMpLCAiPj4gZmFtaWx5TmFtZXNEYXRhO1xuIjsKKyAgICBwcmludCBGICJNYWluVGhyZWFkTGF6
eU5ldmVyRGVzdHJveWVkPFZlY3RvcjxBdG9tU3RyaW5nSW1wbCosICIsIHNjYWxhcihrZXlzICVw
YXJhbWV0ZXJzKSwgIj4+IGZhbWlseU5hbWVzO1xuXG4iOworCisgICAgcHJpbnRNYWNyb3MoJEYs
ICJNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IiwgIiIsIFwl
cGFyYW1ldGVycyk7CiAKICAgICBwcmludEluaXQoJEYsIDApOwogCiAgICAgcHJpbnQgRiAiXG4i
OwogICAgIHByaW50IEYgU3RhdGljU3RyaW5nOjpHZW5lcmF0ZVN0cmluZ0Fzc2VydHMoXCVwYXJh
bWV0ZXJzKTsKIAorICAgIHByaW50IEYgIiAgICBmYW1pbHlOYW1lc0RhdGEuY29uc3RydWN0KCk7
XG4iOworICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICVwYXJhbWV0ZXJzKSB7CisgICAgICAg
IHByaW50IEYgIiAgICBmYW1pbHlOYW1lc0RhdGEtPnVuY2hlY2tlZEFwcGVuZCgmJHtuYW1lfURh
dGEpO1xuIjsKKyAgICB9CisKKyAgICBwcmludCBGICJcbiI7CiAgICAgZm9yIG15ICRuYW1lIChz
b3J0IGtleXMgJXBhcmFtZXRlcnMpIHsKICAgICAgICAgcHJpbnQgRiAiICAgICR7bmFtZX0uY29u
c3RydWN0KCYke25hbWV9RGF0YSk7XG4iOwogICAgIH0KIAorICAgIHByaW50IEYgIlxuIjsKKyAg
ICBwcmludCBGICIgICAgZmFtaWx5TmFtZXMuY29uc3RydWN0KCk7XG4iOworICAgIGZvciBteSAk
bmFtZSAoc29ydCBrZXlzICVwYXJhbWV0ZXJzKSB7CisgICAgICAgIHByaW50IEYgIiAgICBmYW1p
bHlOYW1lcy0+dW5jaGVja2VkQXBwZW5kKCR7bmFtZX0tPmltcGwoKSk7XG4iOworICAgIH0KKwog
ICAgIHByaW50IEYgIn1cbn1cbn1cbiI7CiAgICAgY2xvc2UgRjsKICAgICBleGl0IDA7CkBAIC02
OTQsNyArNzE2LDcgQEAgRU5ECiAgICAgbXkgJGxvd2VyY2FzZU5hbWVzcGFjZVByZWZpeCA9IGxj
KCRwYXJhbWV0ZXJze25hbWVzcGFjZVByZWZpeH0pOwogCiAgICAgcHJpbnQgRiAiLy8gTmFtZXNw
YWNlXG4iOwotICAgIHByaW50IEYgIldFQkNPUkVfRVhQT1JUIGV4dGVybiBNYWluVGhyZWFkTGF6
eU5ldmVyRGVzdHJveWVkPGNvbnN0IFdURjo6QXRvbVN0cmluZz4gJHtsb3dlcmNhc2VOYW1lc3Bh
Y2VQcmVmaXh9TmFtZXNwYWNlVVJJO1xuXG4iOworICAgIHByaW50IEYgIldFQkNPUkVfRVhQT1JU
IGV4dGVybiBNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+ICR7
bG93ZXJjYXNlTmFtZXNwYWNlUHJlZml4fU5hbWVzcGFjZVVSSTtcblxuIjsKIAogICAgIGlmIChr
ZXlzICVhbGxUYWdzKSB7CiAgICAgICAgIHByaW50IEYgIi8vIFRhZ3NcbiI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMu
Y3BwCmluZGV4IGQzNTc1ZGRhYTY4ODdhNjgyYTlhYzdjMWQ4Y2NiZDgxZWMzNTY5NzguLmIwYjNk
NDUyZDU2MTljNjk4YTliMjU5YWFhZjI1M2U0MTNkMDMyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwCkBA
IC0zMCw2ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNl
IFdlYktpdEZvbnRGYW1pbHlOYW1lczsKKwogc3RhdGljIGJvb2wgc2V0R2VuZXJpY0ZvbnRGYW1p
bHlGb3JTY3JpcHQoU2NyaXB0Rm9udEZhbWlseU1hcCYgZm9udE1hcCwgY29uc3QgU3RyaW5nJiBm
YW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKIHsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkK
QEAgLTE4MCw0ICsxODIsMjkgQEAgYm9vbCBGb250R2VuZXJpY0ZhbWlsaWVzOjpzZXRQaWN0b2dy
YXBoRm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgVVNjcmlwdEMKICAgICByZXR1cm4g
c2V0R2VuZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQobV9waWN0b2dyYXBoRm9udEZhbWlseU1hcCwg
ZmFtaWx5LCBzY3JpcHQpOwogfQogCitjb25zdCBTdHJpbmcqIEZvbnRHZW5lcmljRmFtaWxpZXM6
OmZvbnRGYW1pbHkoRmFtaWx5TmFtZXNJbmRleCBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKGZhbWlseSkgeworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRl
eDo6Q3Vyc2l2ZUZhbWlseToKKyAgICAgICAgcmV0dXJuICZjdXJzaXZlRm9udEZhbWlseShzY3Jp
cHQpOworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRleDo6RmFudGFzeUZhbWlseToKKyAgICAgICAg
cmV0dXJuICZmYW50YXN5Rm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2UgRmFtaWx5TmFtZXNJ
bmRleDo6TW9ub3NwYWNlRmFtaWx5OgorICAgICAgICByZXR1cm4gJmZpeGVkRm9udEZhbWlseShz
Y3JpcHQpOworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRleDo6UGljdG9ncmFwaEZhbWlseToKKyAg
ICAgICAgcmV0dXJuICZwaWN0b2dyYXBoRm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2UgRmFt
aWx5TmFtZXNJbmRleDo6U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICByZXR1cm4gJnNhbnNTZXJp
ZkZvbnRGYW1pbHkoc2NyaXB0KTsKKyAgICBjYXNlIEZhbWlseU5hbWVzSW5kZXg6OlNlcmlmRmFt
aWx5OgorICAgICAgICByZXR1cm4gJnNlcmlmRm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2Ug
RmFtaWx5TmFtZXNJbmRleDo6U3RhbmRhcmRGYW1pbHk6CisgICAgICAgIHJldHVybiAmc3RhbmRh
cmRGb250RmFtaWx5KHNjcmlwdCk7CisgICAgY2FzZSBGYW1pbHlOYW1lc0luZGV4OjpTeXN0ZW1V
aUZhbWlseToKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaAppbmRl
eCAyMzc4NzE2MGI5OGI5ZTg0YWVmODBlY2NjNjVmZDVmY2I3NGFjNTU4Li5hZGFmZjNjMTQ2ZGM3
MjM1ZmYwNTk2ZDRmYzQ3Njc5NzViMTU4MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5oCkBAIC0yMyw5ICsyMyw5
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRm9udEdlbmVyaWNGYW1pbGllc19o
Ci0jZGVmaW5lIEZvbnRHZW5lcmljRmFtaWxpZXNfaAorI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VzY3JpcHQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcu
aD4KQEAgLTU5LDYgKzU5LDggQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgZmFudGFzeUZv
bnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CiAgICAgY29uc3Qg
U3RyaW5nJiBwaWN0b2dyYXBoRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9O
KSBjb25zdDsKIAorICAgIGNvbnN0IFN0cmluZyogZm9udEZhbWlseShXZWJLaXRGb250RmFtaWx5
TmFtZXM6OkZhbWlseU5hbWVzSW5kZXgsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pIGNv
bnN0OworCiAgICAgYm9vbCBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgU3RyaW5nJiwgVVNj
cmlwdENvZGUpOwogICAgIGJvb2wgc2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IFN0cmluZyYsIFVT
Y3JpcHRDb2RlKTsKICAgICBib29sIHNldFNlcmlmRm9udEZhbWlseShjb25zdCBTdHJpbmcmLCBV
U2NyaXB0Q29kZSk7CkBAIC03OCw1ICs4MCwzIEBAIHByaXZhdGU6CiB9OwogCiB9Ci0KLSNlbmRp
Zgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422678</attachid>
            <date>2021-03-09 01:39:07 -0800</date>
            <delta_ts>2021-03-09 04:05:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222735-20210309093905.patch</filename>
            <type>text/plain</type>
            <size>31354</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc0NjBiMmM2MTAwMDRi
NDA0MTMzYmVjZWZkMmUyNGI1NjYyMmRjMC4uNGE0Mzk5ZDAxMmMzMmMwZjgzOWI3M2RjMzlkMmU5
NzA4YzIzNzMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBBbGxvdyBjcmVhdGlvbiBvZiBh
IENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgbm9uLURvY3VtZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjcz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlcGxhY2Ug
RG9jdW1lbnQgbWVtYmVyIG9mIENTU0ZvbnRTZWxlY3RvciB3aXRoIGEgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC4KKyAgICAgICAgVGhpcyBhbHNvIGNoYW5nZXMgbWFrZV9uYW1lcy5wbCBzdHJpbmcg
aGVhZGVyIGdlbmVyYXRpb24gdG8gYWxsb3cgZm9yIGVhc2llciBlbnVtZXJhdGlvbiBvZiBmb250
IGZhbWlseSBzdHJpbmdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyBuZXcgYmVoYXZpb3Vy
IGlzIGN1cnJlbnRseSB1bnVzZWQuIEV4aXN0aW5nIGJlaGF2aW91ciBjb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9TdGF0aWNTdHJpbmcucG06
CisgICAgICAgIChHZW5lcmF0ZVN0cmluZ3MpOiBSZXZlcnQgY2hhbmdlIGZyb20gYnVnIDIyMjU1
MgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bV92
ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250U3R5bGVVcGRhdGVOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpyZXNvbHZlR2VuZXJpY0ZhbWls
eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1p
bHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpzdG9wTG9hZGluZ0FuZENs
ZWFyRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRp
bmdGb250U29vbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmxvYWRQZW5k
aW5nRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGlu
Z1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxsYmFj
a0ZvbnRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNr
Rm9udEF0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAgICogY3Nz
L0ZvbnRGYWNlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KToKKyAgICAgICAg
KiBjc3MvRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKiBjc3MvRm9udEZhY2VTZXQuaWRsOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0Lmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmludE5hbWVz
SGVhZGVyRmlsZSk6IE1ha2UgZ2xvYmFsIHN0cmluZyBkYXRhIGFuZCBuYW1lcyBhY2Nlc3NpYmxl
IHZpYSBhIFZlY3RvciBhbmQgYWRkIGFuIGVudW0gb2YgbmFtZSBpbmRpY2VzLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0Zh
bWlsaWVzLmg6CisKIDIwMjEtMDMtMDggIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBTdXBwb3J0IGFzcGVjdC1yYXRpbyBpbiBpbnRyaW5zaWMgc2l6aW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL1N0YXRpY1N0cmluZy5wbSBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvU3RhdGljU3RyaW5nLnBtCmluZGV4IGQ3NDJk
NDVhZDZjZjkzNjQ1MWRjYTg1MjFjMTI1NjUxOWJlNjk5YmYuLjEwYWY3YzJmYmJjMDQwMWYwYzI1
NGNlMmM5OGRjYWI2M2ZmODBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvU3RhdGljU3RyaW5nLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvU3RhdGljU3RyaW5nLnBtCkBAIC00Myw3ICs0Myw3IEBAIEVORAogCiAgICAgZm9yIG15
ICRuYW1lIChzb3J0IGtleXMgJXN0cmluZ3MpIHsKICAgICAgICAgbXkgJHZhbHVlID0gJHN0cmlu
Z3N7JG5hbWV9OwotICAgICAgICBwdXNoKEByZXN1bHQsICJjb25zdCBTdHJpbmdJbXBsOjpTdGF0
aWNTdHJpbmdJbXBsICR7bmFtZX1EYXRhKFwiJHt2YWx1ZX1cIik7XG4iKTsKKyAgICAgICAgcHVz
aChAcmVzdWx0LCAic3RhdGljIGNvbnN0ZXhwciBTdHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBs
ICR7bmFtZX1EYXRhKFwiJHt2YWx1ZX1cIik7XG4iKTsKICAgICB9CiAKICAgICBwdXNoKEByZXN1
bHQsIDw8RU5EKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggNWNj
MTA4OWM1ODJjMWI0OTE4YTc5ODVhYTZmMjBlZmYxMmY1YWM2Mi4uMzhlZmI2NjY4ZDA4ODhlMDEx
YmMwZWYwYWU4MzhiNDUwNTVhM2ExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHAKQEAgLTU5LDE4ICs1OSwyOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXRGb250RmFtaWx5TmFtZXM7CisKIHN0YXRpYyB1bnNpZ25lZCBmb250
U2VsZWN0b3JJZDsKIAotQ1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQm
IGRvY3VtZW50KQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50KQotICAgICwgbV9kb2N1
bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCitDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxl
Y3RvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQWN0aXZlRE9NT2Jq
ZWN0KCZjb250ZXh0KQorICAgICwgbV9jb250ZXh0KG1ha2VXZWFrUHRyKGNvbnRleHQpKQogICAg
ICwgbV9jc3NGb250RmFjZVNldChDU1NGb250RmFjZVNldDo6Y3JlYXRlKHRoaXMpKQogICAgICwg
bV9mb250TW9kaWZpZWRPYnNlcnZlcihbdGhpc10geyBmb250TW9kaWZpZWQoKTsgfSkKICAgICAs
IG1fZm9udExvYWRpbmdUaW1lcigqdGhpcywgJkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udExvYWRpbmdU
aW1lckZpcmVkKQogICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3RvcklkKQogICAgICwgbV92
ZXJzaW9uKDApCiB7Ci0gICAgQVNTRVJUKG1fZG9jdW1lbnQpOworICAgIGlmIChpczxEb2N1bWVu
dD4oY29udGV4dCkpIHsKKyAgICAgICAgbV9mb250RmFtaWx5TmFtZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShmYW1pbHlOYW1lcy0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBmYW1pbHlO
YW1lIDogZmFtaWx5TmFtZXMuZ2V0KCkpCisgICAgICAgICAgICBtX2ZvbnRGYW1pbHlOYW1lcy51
bmNoZWNrZWRDb25zdHJ1Y3RBbmRBcHBlbmQoZmFtaWx5TmFtZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9mb250RmFtaWx5TmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlOYW1l
c0RhdGEtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgZmFtaWx5TmFtZSA6IGZhbWlseU5h
bWVzRGF0YS5nZXQoKSkKKyAgICAgICAgICAgIG1fZm9udEZhbWlseU5hbWVzLnVuY2hlY2tlZEFw
cGVuZChmYW1pbHlOYW1lKTsKKyAgICB9CisKICAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmFk
ZENsaWVudCgqdGhpcyk7CiAgICAgbV9jc3NGb250RmFjZVNldC0+YWRkRm9udE1vZGlmaWVkT2Jz
ZXJ2ZXIobV9mb250TW9kaWZpZWRPYnNlcnZlcik7CiAgICAgTE9HKEZvbnRzLCAiQ1NTRm9udFNl
bGVjdG9yICVwIGN0b3IiLCB0aGlzKTsKQEAgLTk0LDggKzEwNSw4IEBAIEZvbnRGYWNlU2V0KiBD
U1NGb250U2VsZWN0b3I6OmZvbnRGYWNlU2V0SWZFeGlzdHMoKQogRm9udEZhY2VTZXQmIENTU0Zv
bnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQoKQogewogICAgIGlmICghbV9mb250RmFjZVNldCkgewot
ICAgICAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci0gICAgICAgIG1fZm9udEZhY2VTZXQgPSBGb250
RmFjZVNldDo6Y3JlYXRlKCptX2RvY3VtZW50LCBtX2Nzc0ZvbnRGYWNlU2V0LmdldCgpKTsKKyAg
ICAgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgICAgIG1fZm9udEZhY2VTZXQgPSBGb250RmFj
ZVNldDo6Y3JlYXRlKCptX2NvbnRleHQsIG1fY3NzRm9udEZhY2VTZXQuZ2V0KCkpOwogICAgIH0K
IAogICAgIHJldHVybiAqbV9mb250RmFjZVNldDsKQEAgLTE5Nyw3ICsyMDgsNyBAQCB2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFj
ZVJ1bGUsIGJvb2wgaXNJbgogICAgIGlmIChsb2FkaW5nQmVoYXZpb3IpCiAgICAgICAgIGZvbnRG
YWNlLT5zZXRMb2FkaW5nQmVoYXZpb3IoKmxvYWRpbmdCZWhhdmlvcik7CiAKLSAgICBDU1NGb250
RmFjZTo6YXBwZW5kU291cmNlcyhmb250RmFjZSwgc3JjTGlzdCwgbV9kb2N1bWVudC5nZXQoKSwg
aXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CisgICAgQ1NTRm9udEZh
Y2U6OmFwcGVuZFNvdXJjZXMoZm9udEZhY2UsIHNyY0xpc3QsIG1fY29udGV4dC5nZXQoKSwgaXNJ
bml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CiAgICAgaWYgKGZvbnRGYWNl
LT5jb21wdXRlRmFpbHVyZVN0YXRlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjMxLDE0ICsy
NDIsNiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6dW5yZWdpc3RlckZvckludmFsaWRhdGlvbkNh
bGxiYWNrcyhGb250U2VsZWN0b3JDbGllbnQmIGNsaQogICAgIG1fY2xpZW50cy5yZW1vdmUoJmNs
aWVudCk7CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIENTU0ZvbnRTZWxlY3Rvcjo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBjbGFzcyByZXR1cm5z
IGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBkZXNwaXRlIGhvbGRpbmcgYSBEb2N1bWVudCBhcyBw
cmVwYXJhdGlvbiBmb3IgYSBmdXR1cmUKLSAgICAvLyB3aGVyZSBpdCB3aWxsIGFjdHVhbGx5IGhv
bGQgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0ICh3aGljaCB3b3VsZCBiZSBlaXRoZXIgYSBEb2N1
bWVudCBvciBhCi0gICAgLy8gV29ya2VyR2xvYmFsU2NvcGUsIGluIHRoZSBjYXNlIG9mIHVzaW5n
IGZvbnRzIGluIE9mZnNjcmVlbkNhbnZhcykuCi0gICAgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7
Ci19Ci0KIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNr
cygpCiB7CiAgICAgKyttX3ZlcnNpb247CkBAIC0yNjksOCArMjcyLDggQEAgdm9pZCBDU1NGb250
U2VsZWN0b3I6OmZvbnRNb2RpZmllZCgpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpmb250U3R5
bGVVcGRhdGVOZWVkZWQoQ1NTRm9udEZhY2UmKQogewotICAgIGlmIChtX2RvY3VtZW50KQotICAg
ICAgICBtX2RvY3VtZW50LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgaWYgKGlzPERvY3Vt
ZW50PihtX2NvbnRleHQuZ2V0KCkpKQorICAgICAgICBkb3duY2FzdDxEb2N1bWVudD4oKm1fY29u
dGV4dCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogfQogCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
Zm9udENhY2hlSW52YWxpZGF0ZWQoKQpAQCAtMjc4LDMyICsyODEsMjMgQEAgdm9pZCBDU1NGb250
U2VsZWN0b3I6OmZvbnRDYWNoZUludmFsaWRhdGVkKCkKICAgICBkaXNwYXRjaEludmFsaWRhdGlv
bkNhbGxiYWNrcygpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8QXRvbVN0cmluZz4gcmVzb2x2ZUdl
bmVyaWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEF0
b21TdHJpbmc+IENTU0ZvbnRTZWxlY3Rvcjo6cmVzb2x2ZUdlbmVyaWNGYW1pbHkoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5h
bWUpCiB7CiAgICAgYXV0byBwbGF0Zm9ybVJlc3VsdCA9IEZvbnREZXNjcmlwdGlvbjo6cGxhdGZv
cm1SZXNvbHZlR2VuZXJpY0ZhbWlseShmb250RGVzY3JpcHRpb24uc2NyaXB0KCksIGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoIXBsYXRmb3Jt
UmVzdWx0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1SZXN1bHQ7CiAKLSAgICBp
ZiAoIWRvY3VtZW50KQorICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRp
bmdzKCk7CisgICAgY29uc3QgYXV0byYgc2V0dGluZ3MgPSBtX2NvbnRleHQtPnNldHRpbmdzVmFs
dWVzKCk7CiAKICAgICBVU2NyaXB0Q29kZSBzY3JpcHQgPSBmb250RGVzY3JpcHRpb24uc2NyaXB0
KCk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gc2VyaWZGYW1pbHkpCi0gICAgICAgIHJldHVybiBB
dG9tU3RyaW5nKHNldHRpbmdzLnNlcmlmRm9udEZhbWlseShzY3JpcHQpKTsKLSAgICBpZiAoZmFt
aWx5TmFtZSA9PSBzYW5zU2VyaWZGYW1pbHkpCi0gICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHNl
dHRpbmdzLnNhbnNTZXJpZkZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUg
PT0gY3Vyc2l2ZUZhbWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3MuY3Vy
c2l2ZUZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gZmFudGFzeUZh
bWlseSkKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoc2V0dGluZ3MuZmFudGFzeUZvbnRGYW1p
bHkoc2NyaXB0KSk7Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gbW9ub3NwYWNlRmFtaWx5KQotICAg
ICAgICByZXR1cm4gQXRvbVN0cmluZyhzZXR0aW5ncy5maXhlZEZvbnRGYW1pbHkoc2NyaXB0KSk7
Ci0gICAgaWYgKGZhbWlseU5hbWUgPT0gcGljdG9ncmFwaEZhbWlseSkKLSAgICAgICAgcmV0dXJu
IEF0b21TdHJpbmcoc2V0dGluZ3MucGljdG9ncmFwaEZvbnRGYW1pbHkoc2NyaXB0KSk7Ci0gICAg
aWYgKGZhbWlseU5hbWUgPT0gc3RhbmRhcmRGYW1pbHkpCi0gICAgICAgIHJldHVybiBBdG9tU3Ry
aW5nKHNldHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseShzY3JpcHQpKTsKKyAgICBhdXRvIGZhbWls
eU5hbWVJbmRleCA9IG1fZm9udEZhbWlseU5hbWVzLmZpbmQoZmFtaWx5TmFtZSk7CisgICAgaWYg
KGZhbWlseU5hbWVJbmRleCAhPSBub3RGb3VuZCkgeworICAgICAgICBpZiAoYXV0byBmYW1pbHlT
dHJpbmcgPSBzZXR0aW5ncy5mb250R2VuZXJpY0ZhbWlsaWVzLmZvbnRGYW1pbHkoc3RhdGljX2Nh
c3Q8RmFtaWx5TmFtZXNJbmRleD4oZmFtaWx5TmFtZUluZGV4KSwgc2NyaXB0KSkKKyAgICAgICAg
ICAgIHJldHVybiBBdG9tU3RyaW5nKCpmYW1pbHlTdHJpbmcpOworICAgIH0KIAogICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CkBAIC0zMTQsMzQgKzMwOCwzMSBAQCBGb250UmFuZ2VzIENTU0Zv
bnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcgogICAgIEFTU0VSVCghbV9idWlsZElzVW5kZXJ3YXkgfHwgbV9jb21wdXRpbmdSb290
U3R5bGVGb250Q291bnQpOwogCiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIChhbmQgRmlyZWZveCkg
c2F5cyB1c2VyIHNwZWNpZmllZCBnZW5lcmljIGZhbWlsaWVzIChzYW5zLXNlcmlmIGV0Yy4pIHNo
b3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgdGhlIEBmb250LWZhY2UgbG9va3VwIHRvby4KLSAgICBi
b29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1lID09IHN0YW5kYXJkRmFt
aWx5OworICAgIGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0g
bV9mb250RmFtaWx5TmFtZXNbc3RhdGljX2Nhc3Q8aW50PihGYW1pbHlOYW1lc0luZGV4OjpTdGFu
ZGFyZEZhbWlseSldOwogCiAgICAgQXRvbVN0cmluZyBmYW1pbHlGb3JMb29rdXAgPSBmYW1pbHlO
YW1lOwogICAgIE9wdGlvbmFsPEZvbnREZXNjcmlwdGlvbj4gb3ZlcnJpZGVGb250RGVzY3JpcHRp
b247CiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uKiBmb250RGVzY3JpcHRpb25Gb3JMb29rdXAg
PSAmZm9udERlc2NyaXB0aW9uOwotICAgIGF1dG8gcmVzb2x2ZUdlbmVyaWNGYW1pbHkgPSBbJl0o
KSB7Ci0gICAgICAgIGlmIChhdXRvIGdlbmVyaWNGYW1pbHlPcHRpb25hbCA9IFdlYkNvcmU6OnJl
c29sdmVHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbiwgZmFt
aWx5TmFtZSkpCisgICAgYXV0byByZXNvbHZlQW5kQXNzaWduR2VuZXJpY0ZhbWlseSA9IFsmXSgp
IHsKKyAgICAgICAgaWYgKGF1dG8gZ2VuZXJpY0ZhbWlseU9wdGlvbmFsID0gcmVzb2x2ZUdlbmVy
aWNGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKSkKICAgICAgICAgICAgIGZhbWls
eUZvckxvb2t1cCA9ICpnZW5lcmljRmFtaWx5T3B0aW9uYWw7CiAgICAgfTsKIAogICAgIGlmIChy
ZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQotICAgICAgICByZXNvbHZlR2VuZXJpY0ZhbWlseSgp
OworICAgICAgICByZXNvbHZlQW5kQXNzaWduR2VuZXJpY0ZhbWlseSgpOworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpID8gJmRvd25jYXN0PERv
Y3VtZW50PigqbV9jb250ZXh0KSA6IG51bGxwdHI7CiAgICAgYXV0byogZmFjZSA9IG1fY3NzRm9u
dEZhY2VTZXQtPmZvbnRGYWNlKGZvbnREZXNjcmlwdGlvbkZvckxvb2t1cC0+Zm9udFNlbGVjdGlv
blJlcXVlc3QoKSwgZmFtaWx5Rm9yTG9va3VwKTsKICAgICBpZiAoZmFjZSkgewotICAgICAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9kb2N1bWVudCkKLSAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKm1fZG9jdW1l
bnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgdHJ1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cC5zdHJp
bmcoKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBmYWNlLT5mb250UmFuZ2VzKCpmb250RGVzY3Jp
cHRpb25Gb3JMb29rdXApOwogICAgIH0KIAogICAgIGlmICghcmVzb2x2ZUdlbmVyaWNGYW1pbHlG
aXJzdCkKLSAgICAgICAgcmVzb2x2ZUdlbmVyaWNGYW1pbHkoKTsKKyAgICAgICAgcmVzb2x2ZUFu
ZEFzc2lnbkdlbmVyaWNGYW1pbHkoKTsKICAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmds
ZXRvbigpLmZvbnRGb3JGYW1pbHkoKmZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCwgZmFtaWx5Rm9y
TG9va3VwKTsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX2RvY3VtZW50KQot
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpt
X2RvY3VtZW50LCBmYW1pbHlGb3JMb29rdXAuc3RyaW5nKCksICEhZm9udCk7Ci0gICAgfQorICAg
IGlmIChkb2N1bWVudCAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmco
KSwgISFmb250KTsKICAgICByZXR1cm4gRm9udFJhbmdlcyB7IFdURk1vdmUoZm9udCkgfTsKIH0K
IApAQCAtMzU2LDEyICszNDcsMTUgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OnN0b3BMb2FkaW5n
QW5kQ2xlYXJGb250cygpCiAgICAgbV9pc1N0b3BwZWQgPSB0cnVlOwogICAgIG1fZm9udExvYWRp
bmdUaW1lci5zdG9wKCk7CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotICAgIGZvciAo
YXV0byYgZm9udEhhbmRsZSA6IG1fZm9udHNUb0JlZ2luTG9hZGluZykgewotICAgICAgICAvLyBC
YWxhbmNlcyBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBiZWdpbkxvYWRpbmdGb250U29vbigp
LgotICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKmZv
bnRIYW5kbGUpOworICAgIGlmIChpczxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKSkgeworICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KTsKKyAg
ICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyID0gZG9jdW1l
bnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICAgICAgZm9yIChhdXRvJiBmb250SGFuZGxl
IDogbV9mb250c1RvQmVnaW5Mb2FkaW5nKSB7CisgICAgICAgICAgICAvLyBCYWxhbmNlcyBpbmNy
ZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBiZWdpbkxvYWRpbmdGb250U29vbigpLgorICAgICAgICAg
ICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIuZGVjcmVtZW50UmVxdWVzdENvdW50KCpmb250SGFuZGxl
KTsKKyAgICAgICAgfQorICAgICAgICBtX2ZvbnRzVG9CZWdpbkxvYWRpbmcuY2xlYXIoKTsKICAg
ICB9Ci0gICAgbV9mb250c1RvQmVnaW5Mb2FkaW5nLmNsZWFyKCk7CiAKICAgICBtX2Nzc0ZvbnRG
YWNlU2V0LT5jbGVhcigpOwogICAgIG1fY2xpZW50cy5jbGVhcigpOwpAQCAtMzY5LDE0ICszNjMs
MTYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OnN0b3BMb2FkaW5nQW5kQ2xlYXJGb250cygpCiAK
IHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRpbmdGb250U29vbihDYWNoZWRGb250JiBm
b250KQogewotICAgIGlmIChtX2lzU3RvcHBlZCkKKyAgICBpZiAobV9pc1N0b3BwZWQgfHwgIWlz
PERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KTsKKwogICAgIG1fZm9u
dHNUb0JlZ2luTG9hZGluZy5hcHBlbmQoJmZvbnQpOwogICAgIC8vIEluY3JlbWVudCB0aGUgcmVx
dWVzdCBjb3VudCBub3csIGluIG9yZGVyIHRvIHByZXZlbnQgZGlkRmluaXNoTG9hZCBmcm9tIGJl
aW5nIGRpc3BhdGNoZWQKICAgICAvLyBhZnRlciB0aGlzIGZvbnQgaGFzIGJlZW4gcmVxdWVzdGVk
IGJ1dCBiZWZvcmUgaXQgYmVnYW4gbG9hZGluZy4gQmFsYW5jZWQgYnkKICAgICAvLyBkZWNyZW1l
bnRSZXF1ZXN0Q291bnQoKSBpbiBmb250TG9hZGluZ1RpbWVyRmlyZWQoKSBhbmQgaW4gc3RvcExv
YWRpbmdBbmRDbGVhckZvbnRzKCkuCi0gICAgbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKS5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoZm9udCk7CisgICAgZG9jdW1lbnQuY2FjaGVkUmVz
b3VyY2VMb2FkZXIoKS5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoZm9udCk7CiAKICAgICBpZiAoIW1f
aXNGb250TG9hZGluZ1N1c3BlbmRlZCAmJiAhbV9mb250TG9hZGluZ1RpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIG1fZm9udExvYWRpbmdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKQEAgLTM4OSwx
NiArMzg1LDE4IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpzdXNwZW5kRm9udExvYWRpbmdUaW1l
cigpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpsb2FkUGVuZGluZ0ZvbnRzKCkKIHsKLSAgICBp
ZiAobV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkKQorICAgIGlmIChtX2lzRm9udExvYWRpbmdTdXNw
ZW5kZWQgfHwgIWlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQogICAgICAgICByZXR1cm47
CiAKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KTsK
KwogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRGb250Pj4gZm9udHNUb0Jl
Z2luTG9hZGluZzsKICAgICBmb250c1RvQmVnaW5Mb2FkaW5nLnN3YXAobV9mb250c1RvQmVnaW5M
b2FkaW5nKTsKIAogICAgIC8vIENTU0ZvbnRTZWxlY3RvciBjb3VsZCBnZXQgZGVsZXRlZCB2aWEg
YmVnaW5Mb2FkSWZOZWVkZWQoKSBvciBsb2FkRG9uZSgpIHVubGVzcyBwcm90ZWN0ZWQuCiAgICAg
UmVmPENTU0ZvbnRTZWxlY3Rvcj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKLSAgICBDYWNoZWRS
ZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2RvY3VtZW50LT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IGRvY3VtZW50LmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAgZm9yIChhdXRv
JiBmb250SGFuZGxlIDogZm9udHNUb0JlZ2luTG9hZGluZykgewogICAgICAgICBmb250SGFuZGxl
LT5iZWdpbkxvYWRJZk5lZWRlZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIC8vIEJh
bGFuY2VzIGluY3JlbWVudFJlcXVlc3RDb3VudCgpIGluIGJlZ2luTG9hZGluZ0ZvbnRTb29uKCku
CkBAIC00MDgsMTggKzQwNiwyMiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6bG9hZFBlbmRpbmdG
b250cygpCiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGluZ1RpbWVyRmlyZWQoKQog
eworICAgIGlmICghaXM8RG9jdW1lbnQ+KG1fY29udGV4dC5nZXQoKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQp
OwogICAgIFJlZjxDU1NGb250U2VsZWN0b3I+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCiAgICAg
bG9hZFBlbmRpbmdGb250cygpOwogCiAgICAgLy8gRklYTUU6IFVzZSBTdWJyZXNvdXJjZUxvYWRl
ciBpbnN0ZWFkLgogICAgIC8vIENhbGwgRnJhbWVMb2FkZXI6OmxvYWREb25lIGJlZm9yZSBGcmFt
ZUxvYWRlcjo6c3VicmVzb3VyY2VMb2FkRG9uZSB0byBtYXRjaCB0aGUgb3JkZXIgaW4gU3VicmVz
b3VyY2VMb2FkZXI6Om5vdGlmeURvbmUuCi0gICAgbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS5sb2FkRG9uZShMb2FkQ29tcGxldGlvblR5cGU6OkZpbmlzaCk7CisgICAgZG9jdW1l
bnQuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9uZShMb2FkQ29tcGxldGlvblR5cGU6OkZp
bmlzaCk7CiAgICAgLy8gRW5zdXJlIHRoYXQgaWYgdGhlIHJlcXVlc3QgY291bnQgcmVhY2hlcyB6
ZXJvLCB0aGUgZnJhbWUgbG9hZGVyIHdpbGwga25vdyBhYm91dCBpdC4KICAgICAvLyBOZXcgZm9u
dCBsb2FkcyBtYXkgYmUgdHJpZ2dlcmVkIGJ5IGxheW91dCBhZnRlciB0aGUgZG9jdW1lbnQgbG9h
ZCBpcyBjb21wbGV0ZSBidXQgYmVmb3JlIHdlIGhhdmUgZGlzcGF0Y2hlZAogICAgIC8vIGRpZEZp
bmlzaExvYWRpbmcgZm9yIHRoZSBmcmFtZS4gTWFrZSBzdXJlIHRoZSBkZWxlZ2F0ZSBpcyBhbHdh
eXMgZGlzcGF0Y2hlZCBieSBjaGVja2luZyBleHBsaWNpdGx5LgotICAgIGlmIChtX2RvY3VtZW50
ICYmIG1fZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxv
YWRlcigpLmNoZWNrTG9hZENvbXBsZXRlKCk7CisgICAgaWYgKGRvY3VtZW50LmZyYW1lKCkpCisg
ICAgICAgIGRvY3VtZW50LmZyYW1lKCktPmxvYWRlcigpLmNoZWNrTG9hZENvbXBsZXRlKCk7CiB9
CiAKIHNpemVfdCBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udENvdW50KCkKQEAgLTQyNyw3
ICs0MjksNyBAQCBzaXplX3QgQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRDb3VudCgpCiAg
ICAgaWYgKG1faXNTdG9wcGVkKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtX2Rv
Y3VtZW50LT5zZXR0aW5ncygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocygpID8gMSA6
IDA7CisgICAgcmV0dXJuIG1fY29udGV4dC0+c2V0dGluZ3NWYWx1ZXMoKS5mb250RmFsbGJhY2tQ
cmVmZXJzUGljdG9ncmFwaHMgPyAxIDogMDsKIH0KIAogUmVmUHRyPEZvbnQ+IENTU0ZvbnRTZWxl
Y3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIHNpemVfdCBpbmRleCkKQEAgLTQzNywxMiArNDM5LDEyIEBAIFJlZlB0cjxGb250PiBDU1NG
b250U2VsZWN0b3I6OmZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0CiAgICAgaWYgKG1faXNTdG9wcGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIGlmICghbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5mb250RmFsbGJhY2tQcmVmZXJzUGljdG9n
cmFwaHMoKSkKKyAgICBpZiAoIW1fY29udGV4dC0+c2V0dGluZ3NWYWx1ZXMoKS5mb250RmFsbGJh
Y2tQcmVmZXJzUGljdG9ncmFwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8m
IHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5waWN0b2dyYXBo
Rm9udEZhbWlseSgpOworICAgIGF1dG8mIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gbV9jb250ZXh0
LT5zZXR0aW5nc1ZhbHVlcygpLmZvbnRHZW5lcmljRmFtaWxpZXMucGljdG9ncmFwaEZvbnRGYW1p
bHkoKTsKICAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCBwaWN0b2dyYXBoRm9udEZhbWlseSk7Ci0gICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkKLSAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2Fk
KCptX2RvY3VtZW50LCBwaWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpICYmIGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoZG93bmNhc3Q8RG9jdW1lbnQ+KCpt
X2NvbnRleHQpLCBwaWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250KTsKIAogICAgIHJldHVybiBm
b250OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IGU3Zjg1NmIwOTg2
ODkxODUxNWYzZjEyYjI3MzBkYjRiOWI4NmIzNzMuLmE5ZmEyOGZmN2E1NDFmNDg4NjhhNWM1NTAw
YjhkOWQzYzRhZmEwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTQ1
LDE0ICs0NSwxNCBAQCBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIENTU1NlZ21lbnRl
ZEZvbnRGYWNlOwogY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ2FjaGVkRm9udDsKLWNsYXNz
IERvY3VtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFN0eWxlUnVs
ZUZvbnRGYWNlOwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBwdWJsaWMgRm9udFNl
bGVjdG9yLCBwdWJsaWMgQ1NTRm9udEZhY2U6OkNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRy
PENTU0ZvbnRTZWxlY3Rvcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQor
ICAgIHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0Zv
bnRTZWxlY3Rvcihkb2N1bWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NG
b250U2VsZWN0b3IoY29udGV4dCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DU1NGb250U2VsZWN0
b3IoKTsKICAgICAKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJG
b3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JikgZmluYWw7CiAgICAg
dm9pZCB1bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVu
dCYpIGZpbmFsOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAogICAgIHZv
aWQgYmVnaW5Mb2FkaW5nRm9udFNvb24oQ2FjaGVkRm9udCYpOwogICAgIHZvaWQgc3VzcGVuZEZv
bnRMb2FkaW5nVGltZXIoKTsKQEAgLTk1LDEyICs5NSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXJlZigpIGZpbmFsIHsgRm9udFNlbGVjdG9yOjpkZXJlZigpOyB9CiAKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgQ1NTRm9udFNlbGVjdG9yKERvY3VtZW50Jik7CisgICAgZXhwbGljaXQgQ1NTRm9u
dFNlbGVjdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hJ
bnZhbGlkYXRpb25DYWxsYmFja3MoKTsKIAogICAgIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFy
dEZvbnREYXRhVVJMTG9hZGluZyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5KSBmaW5hbDsKIAorICAgIE9wdGlvbmFsPEF0b21TdHJpbmc+IHJl
c29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseSk7CisKICAgICAvLyBDU1NGb250RmFjZTo6Q2xpZW50CiAgICAgdm9pZCBmb250
TG9hZGVkKENTU0ZvbnRGYWNlJikgZmluYWw7CiAgICAgdm9pZCBmb250U3R5bGVVcGRhdGVOZWVk
ZWQoQ1NTRm9udEZhY2UmKSBmaW5hbDsKQEAgLTEyMCw3ICsxMjIsNyBAQCBwcml2YXRlOgogICAg
IH07CiAgICAgVmVjdG9yPFBlbmRpbmdGb250RmFjZVJ1bGU+IG1fc3RhZ2luZ0FyZWE7CiAKLSAg
ICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworICAgIFdlYWtQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dD4gbV9jb250ZXh0OwogICAgIFJlZlB0cjxGb250RmFjZVNldD4gbV9mb250RmFj
ZVNldDsKICAgICBSZWY8Q1NTRm9udEZhY2VTZXQ+IG1fY3NzRm9udEZhY2VTZXQ7CiAgICAgSGFz
aFNldDxGb250U2VsZWN0b3JDbGllbnQqPiBtX2NsaWVudHM7CkBAIC0xNDAsNiArMTQyLDggQEAg
cHJpdmF0ZToKICAgICBib29sIG1fY3JlYXRpbmdGb250IHsgZmFsc2UgfTsKICAgICBib29sIG1f
YnVpbGRJc1VuZGVyd2F5IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2Ug
fTsKKworICAgIFdURjo6VmVjdG9yPEF0b21TdHJpbmc+IG1fZm9udEZhbWlseU5hbWVzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5jcHAKaW5k
ZXggMjFiNmY2OGVmMzMzNmE0YTljZGI3M2M1NmU1YjVlNzhlMDRhY2RjNC4uYWQ4NDZkZjU5ODc5
MThlMGY5NWZmZTlkNzk2MGY3MjFlNzE3NjkzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQu
Y3BwCkBAIC00MSwyMiArNDEsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoRm9udEZhY2VTZXQpOwogCi1SZWY8Rm9udEZhY2VTZXQ+IEZvbnRG
YWNlU2V0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZv
bnRGYWNlPj4mIGluaXRpYWxGYWNlcykKK1JlZjxGb250RmFjZVNldD4gRm9udEZhY2VTZXQ6OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8UmVmUHRy
PEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKIHsKLSAgICBSZWY8Rm9udEZhY2VTZXQ+IHJlc3Vs
dCA9IGFkb3B0UmVmKCpuZXcgRm9udEZhY2VTZXQoZG9jdW1lbnQsIGluaXRpYWxGYWNlcykpOwor
ICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChj
b250ZXh0LCBpbml0aWFsRmFjZXMpKTsKICAgICByZXN1bHQtPnN1c3BlbmRJZk5lZWRlZCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxGb250RmFjZVNldD4gRm9udEZhY2VTZXQ6OmNy
ZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKQorUmVmPEZv
bnRGYWNlU2V0PiBGb250RmFjZVNldDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKQogewotICAgIFJlZjxGb250RmFjZVNldD4g
cmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChkb2N1bWVudCwgYmFja2luZykpOwor
ICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChj
b250ZXh0LCBiYWNraW5nKSk7CiAgICAgcmVzdWx0LT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1Gb250RmFjZVNldDo6Rm9udEZhY2VTZXQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKLSAg
ICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCkKK0ZvbnRGYWNlU2V0OjpGb250RmFjZVNldChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRG
YWNlPj4mIGluaXRpYWxGYWNlcykKKyAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKICAg
ICAsIG1fYmFja2luZyhDU1NGb250RmFjZVNldDo6Y3JlYXRlKCkpCiAgICAgLCBtX3JlYWR5UHJv
bWlzZShtYWtlVW5pcXVlUmVmPFJlYWR5UHJvbWlzZT4oKnRoaXMsICZGb250RmFjZVNldDo6cmVh
ZHlQcm9taXNlUmVzb2x2ZSkpCiB7CkBAIC02NSwxMyArNjUsMTYgQEAgRm9udEZhY2VTZXQ6OkZv
bnRGYWNlU2V0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFj
ZT4+JiBpbmkKICAgICAgICAgYWRkKCpmYWNlKTsKIH0KIAotRm9udEZhY2VTZXQ6OkZvbnRGYWNl
U2V0KERvY3VtZW50JiBkb2N1bWVudCwgQ1NTRm9udEZhY2VTZXQmIGJhY2tpbmcpCi0gICAgOiBB
Y3RpdmVET01PYmplY3QoZG9jdW1lbnQpCitGb250RmFjZVNldDo6Rm9udEZhY2VTZXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgQ1NTRm9udEZhY2VTZXQmIGJhY2tpbmcpCisgICAg
OiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX2JhY2tpbmcoYmFja2luZykKICAg
ICAsIG1fcmVhZHlQcm9taXNlKG1ha2VVbmlxdWVSZWY8UmVhZHlQcm9taXNlPigqdGhpcywgJkZv
bnRGYWNlU2V0OjpyZWFkeVByb21pc2VSZXNvbHZlKSkKIHsKLSAgICBpZiAoZG9jdW1lbnQuZnJh
bWUoKSkKLSAgICAgICAgbV9pc0RvY3VtZW50TG9hZGVkID0gZG9jdW1lbnQubG9hZEV2ZW50Rmlu
aXNoZWQoKSAmJiAhZG9jdW1lbnQucHJvY2Vzc2luZ0xvYWRFdmVudCgpOworICAgIGlmIChpczxE
b2N1bWVudD4oY29udGV4dCkpIHsKKyAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oY29udGV4dCk7CisgICAgICAgIGlmIChkb2N1bWVudC5mcmFtZSgpKQorICAgICAg
ICAgICAgbV9pc0RvY3VtZW50TG9hZGVkID0gZG9jdW1lbnQubG9hZEV2ZW50RmluaXNoZWQoKSAm
JiAhZG9jdW1lbnQucHJvY2Vzc2luZ0xvYWRFdmVudCgpOworICAgIH0KIAogICAgIGlmIChtX2lz
RG9jdW1lbnRMb2FkZWQgJiYgIWJhY2tpbmcuaGFzQWN0aXZlRm9udEZhY2VzKCkpCiAgICAgICAg
IG1fcmVhZHlQcm9taXNlLT5yZXNvbHZlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZVNldC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgK
aW5kZXggMmY2OTY4MTQ5YjgwODRiNmU2M2MxZjI1M2ZjNjZkNDg1ZWU2Zjc5NC4uZGMwY2Y1ZGNh
ZjFmN2YxMzQxMGI0Nzc5NTM3ZWVmMTg4ODA1MmQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0ZvbnRGYWNlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0
LmgKQEAgLTQxLDggKzQxLDggQEAgY2xhc3MgRE9NRXhjZXB0aW9uOwogY2xhc3MgRm9udEZhY2VT
ZXQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250RmFjZVNldD4sIHByaXZhdGUgQ1NTRm9u
dEZhY2VTZXQ6OkZvbnRFdmVudENsaWVudCwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURh
dGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
Rm9udEZhY2VTZXQpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Rm9udEZhY2VTZXQ+IGNyZWF0
ZShEb2N1bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2Vz
KTsKLSAgICBzdGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoRG9jdW1lbnQmLCBDU1NGb250
RmFjZVNldCYgYmFja2luZyk7CisgICAgc3RhdGljIFJlZjxGb250RmFjZVNldD4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGlu
aXRpYWxGYWNlcyk7CisgICAgc3RhdGljIFJlZjxGb250RmFjZVNldD4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBDU1NGb250RmFjZVNldCYgYmFja2luZyk7CiAgICAgdmlydHVhbCB+
Rm9udEZhY2VTZXQoKTsKIAogICAgIGJvb2wgaGFzKEZvbnRGYWNlJikgY29uc3Q7CkBAIC05NSw4
ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaGFzUmVhY2hlZFRlcm1pbmFsU3RhdGUg
eyBmYWxzZSB9OwogICAgIH07CiAKLSAgICBGb250RmFjZVNldChEb2N1bWVudCYsIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYpOwotICAgIEZvbnRGYWNlU2V0KERvY3VtZW50JiwgQ1NT
Rm9udEZhY2VTZXQmKTsKKyAgICBGb250RmFjZVNldChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+Jik7CisgICAgRm9udEZhY2VTZXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIENTU0ZvbnRGYWNlU2V0Jik7CiAKICAgICAvLyBDU1NGb250RmFj
ZVNldDo6Rm9udEV2ZW50Q2xpZW50CiAgICAgdm9pZCBmYWNlRmluaXNoZWQoQ1NTRm9udEZhY2Um
LCBDU1NGb250RmFjZTo6U3RhdHVzKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250RmFjZVNldC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRs
CmluZGV4IGNkNTdmYjFjNDEzYTkwNGVjMTZlODVkOTZmODU0NTNlNDkzNmVmZGUuLjI2ZDBiY2Rj
NjhjNWMyYzBmZDExYWIyM2E1MzcxMTZmOTM4ZTVmNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZVNldC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNl
U2V0LmlkbApAQCAtMzIsNyArMzIsNyBAQCBlbnVtIEZvbnRGYWNlU2V0TG9hZFN0YXR1cyB7CiAg
ICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIEV4cG9zZWQ9V2luZG93CiBdIGludGVyZmFjZSBGb250
RmFjZVNldCA6IEV2ZW50VGFyZ2V0IHsKLSAgICBbQ2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVj
dG9yKHNlcXVlbmNlPEZvbnRGYWNlPiBpbml0aWFsRmFjZXMpOworICAgIFtDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0XSBjb25zdHJ1Y3RvcihzZXF1ZW5jZTxGb250RmFjZT4gaW5pdGlh
bEZhY2VzKTsKIAogICAgIGJvb2xlYW4gaGFzKEZvbnRGYWNlIGZvbnQpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCmluZGV4IGQzOGE5NGQ5MTJhODY1ZWRlMTVmMGJiZTc2M2JiNWU4NmQ2YTg4NDguLjlk
NDAxNWEyNGQyM2RhNzQwMzQ4YjVhM2RkOGJhYzNmN2MyMTI0MGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCkBAIC0zNDcsNiArMzQ3LDkgQEAgY2xhc3MgRG9jdW1lbnQKICAgICAsIHB1YmxpYyBDYW52
YXNPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9FWFBPUlQoRG9jdW1lbnQs
IFdFQkNPUkVfRVhQT1JUKTsKIHB1YmxpYzoKKyAgICB1c2luZyBXZWFrVmFsdWVUeXBlID0gRXZl
bnRUYXJnZXQ6OldlYWtWYWx1ZVR5cGU7CisgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OndlYWtQdHJG
YWN0b3J5OworCiAgICAgc3RhdGljIFJlZjxEb2N1bWVudD4gY3JlYXRlKGNvbnN0IFNldHRpbmdz
JiwgY29uc3QgVVJMJik7CiAgICAgc3RhdGljIFJlZjxEb2N1bWVudD4gY3JlYXRlTm9uUmVuZGVy
ZWRQbGFjZWhvbGRlcihGcmFtZSYsIGNvbnN0IFVSTCYpOwogICAgIHN0YXRpYyBSZWY8RG9jdW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgKaW5kZXggZDQ2ODdjZTVhNmMzMDg5YzNlMmJmNmQzNzcyNjVkZDk5MWM1YWM1
OC4uMmE5MjMwNzEyMGEwNzc5MTZiZTBiYmQzZjg5MGYzZjQyYmRkZTU2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODIs
NyArODMsNyBAQCBjbGFzcyBJREJDb25uZWN0aW9uUHJveHk7CiBlbnVtIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRJZGVudGlmaWVyVHlwZSB7IH07CiB1c2luZyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50
aWZpZXJUeXBlPjsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCA6IHB1YmxpYyBTZWN1
cml0eUNvbnRleHQgeworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCA6IHB1YmxpYyBTZWN1
cml0eUNvbnRleHQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
PiB7CiBwdWJsaWM6CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIHZpcnR1YWwg
flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXgg
NWIwYjJlZTMzNWI1M2E4NGRiMjU1NjgxZjYzYjVkNTdmNzQ0YWYyNC4uNjQxNGUxZTZhYjU1NjBj
OGIwMzE5Y2UyNTJjNmM2NmFjYjc5M2Y1YiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAg
LTEwMCwxMiArMTAwLDE5IEBAIGlmIChsZW5ndGgoJGZvbnROYW1lc0luKSkgewogICAgIHByaW50
TGljZW5zZUhlYWRlcigkRik7CiAgICAgcHJpbnRIZWFkZXJIZWFkKCRGLCAiQ1NTIiwgJGZhbWls
eU5hbWVzRmlsZUJhc2UsIDw8RU5ELCAiIik7CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJp
bmcuaD4KIEVORAogCi0gICAgcHJpbnRNYWNyb3MoJEYsICJleHRlcm4gY29uc3QgU3RyaW5nSW1w
bDo6U3RhdGljU3RyaW5nSW1wbCIsICJEYXRhIiwgXCVwYXJhbWV0ZXJzKTsKKyAgICBwcmludCBG
ICJleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPFZlY3Rvcjxjb25zdCBTdGF0aWNTdHJpbmdJbXBs
KiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRlcnMpLCAiPj4gZmFtaWx5TmFtZXNEYXRhO1xuIjsK
KyAgICBwcmludCBGICJleHRlcm4gTWFpblRocmVhZExhenlOZXZlckRlc3Ryb3llZDxWZWN0b3I8
QXRvbVN0cmluZ0ltcGwqLCAiLCBzY2FsYXIoa2V5cyAlcGFyYW1ldGVycyksICI+PiBmYW1pbHlO
YW1lcztcblxuIjsKKyAgICBwcmludE1hY3JvcygkRiwgImV4dGVybiBNYWluVGhyZWFkTGF6eU5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IiwgIiIsIFwlcGFyYW1ldGVycyk7CiAgICAg
cHJpbnQgRiAiXG4iOwotICAgIHByaW50TWFjcm9zKCRGLCAiZXh0ZXJuIE1haW5UaHJlYWRMYXp5
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgV1RGOjpBdG9tU3RyaW5nPiIsICIiLCBcJXBhcmFtZXRlcnMp
OworICAgIHByaW50IEYgImVudW0gY2xhc3MgRmFtaWx5TmFtZXNJbmRleCB7XG4iOworICAgIGZv
ciBteSAkbmFtZSAoc29ydCBrZXlzICVwYXJhbWV0ZXJzKSB7CisgICAgICAgIHByaW50IEYgIiAg
ICAiLCB1Y2ZpcnN0KCR7bmFtZX0pLCAiLFxuIjsKKyAgICB9CisgICAgcHJpbnQgRiAifTtcblxu
IjsKICAgICBwcmludCBGICIjZW5kaWZcblxuIjsKIAogICAgIHByaW50SW5pdCgkRiwgMSk7CkBA
IC0xMTksMTcgKzEyNiwzMiBAQCBFTkQKIAogICAgIHByaW50IEYgU3RhdGljU3RyaW5nOjpHZW5l
cmF0ZVN0cmluZ3MoXCVwYXJhbWV0ZXJzKTsKIAotICAgIHByaW50TWFjcm9zKCRGLCAiTWFpblRo
cmVhZExhenlOZXZlckRlc3Ryb3llZDxjb25zdCBXVEY6OkF0b21TdHJpbmc+IiwgIiIsIFwlcGFy
YW1ldGVycyk7CisgICAgcHJpbnQgRiAiTGF6eU5ldmVyRGVzdHJveWVkPFZlY3Rvcjxjb25zdCBT
dGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRlcnMpLCAiPj4gZmFtaWx5
TmFtZXNEYXRhO1xuIjsKKyAgICBwcmludCBGICJNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVk
PFZlY3RvcjxBdG9tU3RyaW5nSW1wbCosICIsIHNjYWxhcihrZXlzICVwYXJhbWV0ZXJzKSwgIj4+
IGZhbWlseU5hbWVzO1xuXG4iOworCisgICAgcHJpbnRNYWNyb3MoJEYsICJNYWluVGhyZWFkTGF6
eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IiwgIiIsIFwlcGFyYW1ldGVycyk7CiAK
ICAgICBwcmludEluaXQoJEYsIDApOwogCiAgICAgcHJpbnQgRiAiXG4iOwogICAgIHByaW50IEYg
U3RhdGljU3RyaW5nOjpHZW5lcmF0ZVN0cmluZ0Fzc2VydHMoXCVwYXJhbWV0ZXJzKTsKIAorICAg
IHByaW50IEYgIiAgICBmYW1pbHlOYW1lc0RhdGEuY29uc3RydWN0KCk7XG4iOworICAgIGZvciBt
eSAkbmFtZSAoc29ydCBrZXlzICVwYXJhbWV0ZXJzKSB7CisgICAgICAgIHByaW50IEYgIiAgICBm
YW1pbHlOYW1lc0RhdGEtPnVuY2hlY2tlZEFwcGVuZCgmJHtuYW1lfURhdGEpO1xuIjsKKyAgICB9
CisKKyAgICBwcmludCBGICJcbiI7CiAgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXBhcmFt
ZXRlcnMpIHsKICAgICAgICAgcHJpbnQgRiAiICAgICR7bmFtZX0uY29uc3RydWN0KCYke25hbWV9
RGF0YSk7XG4iOwogICAgIH0KIAorICAgIHByaW50IEYgIlxuIjsKKyAgICBwcmludCBGICIgICAg
ZmFtaWx5TmFtZXMuY29uc3RydWN0KCk7XG4iOworICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlz
ICVwYXJhbWV0ZXJzKSB7CisgICAgICAgIHByaW50IEYgIiAgICBmYW1pbHlOYW1lcy0+dW5jaGVj
a2VkQXBwZW5kKCR7bmFtZX0tPmltcGwoKSk7XG4iOworICAgIH0KKwogICAgIHByaW50IEYgIn1c
bn1cbn1cbiI7CiAgICAgY2xvc2UgRjsKICAgICBleGl0IDA7CkBAIC02OTQsNyArNzE2LDcgQEAg
RU5ECiAgICAgbXkgJGxvd2VyY2FzZU5hbWVzcGFjZVByZWZpeCA9IGxjKCRwYXJhbWV0ZXJze25h
bWVzcGFjZVByZWZpeH0pOwogCiAgICAgcHJpbnQgRiAiLy8gTmFtZXNwYWNlXG4iOwotICAgIHBy
aW50IEYgIldFQkNPUkVfRVhQT1JUIGV4dGVybiBNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVk
PGNvbnN0IFdURjo6QXRvbVN0cmluZz4gJHtsb3dlcmNhc2VOYW1lc3BhY2VQcmVmaXh9TmFtZXNw
YWNlVVJJO1xuXG4iOworICAgIHByaW50IEYgIldFQkNPUkVfRVhQT1JUIGV4dGVybiBNYWluVGhy
ZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+ICR7bG93ZXJjYXNlTmFtZXNw
YWNlUHJlZml4fU5hbWVzcGFjZVVSSTtcblxuIjsKIAogICAgIGlmIChrZXlzICVhbGxUYWdzKSB7
CiAgICAgICAgIHByaW50IEYgIi8vIFRhZ3NcbiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250R2VuZXJpY0ZhbWlsaWVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwCmluZGV4IGQzNTc1
ZGRhYTY4ODdhNjgyYTlhYzdjMWQ4Y2NiZDgxZWMzNTY5NzguLmIwYjNkNDUyZDU2MTljNjk4YTli
MjU5YWFhZjI1M2U0MTNkMDMyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuY3BwCkBAIC0zMCw2ICszMCw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1p
bHlOYW1lczsKKwogc3RhdGljIGJvb2wgc2V0R2VuZXJpY0ZvbnRGYW1pbHlGb3JTY3JpcHQoU2Ny
aXB0Rm9udEZhbWlseU1hcCYgZm9udE1hcCwgY29uc3QgU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRD
b2RlIHNjcmlwdCkKIHsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTE4MCw0ICsxODIs
MjkgQEAgYm9vbCBGb250R2VuZXJpY0ZhbWlsaWVzOjpzZXRQaWN0b2dyYXBoRm9udEZhbWlseShj
b25zdCBTdHJpbmcmIGZhbWlseSwgVVNjcmlwdEMKICAgICByZXR1cm4gc2V0R2VuZXJpY0ZvbnRG
YW1pbHlGb3JTY3JpcHQobV9waWN0b2dyYXBoRm9udEZhbWlseU1hcCwgZmFtaWx5LCBzY3JpcHQp
OwogfQogCitjb25zdCBTdHJpbmcqIEZvbnRHZW5lcmljRmFtaWxpZXM6OmZvbnRGYW1pbHkoRmFt
aWx5TmFtZXNJbmRleCBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKGZhbWlseSkgeworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRleDo6Q3Vyc2l2ZUZhbWls
eToKKyAgICAgICAgcmV0dXJuICZjdXJzaXZlRm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2Ug
RmFtaWx5TmFtZXNJbmRleDo6RmFudGFzeUZhbWlseToKKyAgICAgICAgcmV0dXJuICZmYW50YXN5
Rm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRleDo6TW9ub3NwYWNl
RmFtaWx5OgorICAgICAgICByZXR1cm4gJmZpeGVkRm9udEZhbWlseShzY3JpcHQpOworICAgIGNh
c2UgRmFtaWx5TmFtZXNJbmRleDo6UGljdG9ncmFwaEZhbWlseToKKyAgICAgICAgcmV0dXJuICZw
aWN0b2dyYXBoRm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRleDo6
U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICByZXR1cm4gJnNhbnNTZXJpZkZvbnRGYW1pbHkoc2Ny
aXB0KTsKKyAgICBjYXNlIEZhbWlseU5hbWVzSW5kZXg6OlNlcmlmRmFtaWx5OgorICAgICAgICBy
ZXR1cm4gJnNlcmlmRm9udEZhbWlseShzY3JpcHQpOworICAgIGNhc2UgRmFtaWx5TmFtZXNJbmRl
eDo6U3RhbmRhcmRGYW1pbHk6CisgICAgICAgIHJldHVybiAmc3RhbmRhcmRGb250RmFtaWx5KHNj
cmlwdCk7CisgICAgY2FzZSBGYW1pbHlOYW1lc0luZGV4OjpTeXN0ZW1VaUZhbWlseToKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRHZW5lcmljRmFtaWxpZXMuaAppbmRleCAyMzc4NzE2MGI5OGI5
ZTg0YWVmODBlY2NjNjVmZDVmY2I3NGFjNTU4Li5hZGFmZjNjMTQ2ZGM3MjM1ZmYwNTk2ZDRmYzQ3
Njc5NzViMTU4MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250R2VuZXJpY0ZhbWlsaWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEdlbmVyaWNGYW1pbGllcy5oCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgRm9udEdlbmVyaWNGYW1pbGllc19oCi0jZGVmaW5lIEZvbnRH
ZW5lcmljRmFtaWxpZXNfaAorI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJXZWJLaXRGb250RmFt
aWx5TmFtZXMuaCIKICNpbmNsdWRlIDx1bmljb2RlL3VzY3JpcHQuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KQEAgLTU5LDYgKzU5
LDggQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgZmFudGFzeUZvbnRGYW1pbHkoVVNjcmlw
dENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiBwaWN0b2dy
YXBoRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKIAorICAg
IGNvbnN0IFN0cmluZyogZm9udEZhbWlseShXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5h
bWVzSW5kZXgsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pIGNvbnN0OworCiAgICAgYm9v
bCBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgU3RyaW5nJiwgVVNjcmlwdENvZGUpOwogICAg
IGJvb2wgc2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IFN0cmluZyYsIFVTY3JpcHRDb2RlKTsKICAg
ICBib29sIHNldFNlcmlmRm9udEZhbWlseShjb25zdCBTdHJpbmcmLCBVU2NyaXB0Q29kZSk7CkBA
IC03OCw1ICs4MCwzIEBAIHByaXZhdGU6CiB9OwogCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwCmluZGV4IDU3
YTBkYTBhMjM1ZGM0YWY1MjVhNDhjYTY3YTRiY2EwMjg2MjA0ZGYuLmMwOTZkOGQzOWJlNTgyZWYx
ZTIxMDFlYThkZjRmMzVmNTE5ZWNhZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1NoYWRvd1Jvb3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1dlYktpdEZvbnRGYW1pbHlOYW1lcy5oPgogCiAvLyBGSVhNRTogRXhwb3Nl
IHRoZSBmdW5jdGlvbnMgdGVzdGVkIGhlcmUgaW4gV2ViS2l0IGludGVybmFscyBvYmplY3QsIHRo
ZW4gcmVwbGFjZSB0aGlzIHRlc3Qgd2l0aCBvbmUgd3JpdHRlbiBpbiBKYXZhU2NyaXB0LgogLy8g
RklYTUU6IFdoZW4gZG9pbmcgdGhlIGFib3ZlLCBkb24ndCBmb3JnZXQgdG8gcmVtb3ZlIHRoZSBt
YW55IFdFQkNPUkVfRVhQT1JUIHRoYXQgd2VyZSBhZGRlZCBzbyB3ZSBjb3VsZCBjb21waWxlIGFu
ZCBsaW5rIHRoaXMgdGVzdC4KQEAgLTUxLDYgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiBzdGF0aWMgUmVmPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudCgpCiB7CiAgICAgSFRNTE5h
bWVzOjppbml0KCk7CisgICAgV2ViS2l0Rm9udEZhbWlseU5hbWVzOjppbml0KCk7CiAgICAgYXV0
byBzZXR0aW5ncyA9IFNldHRpbmdzOjpjcmVhdGUobnVsbHB0cik7CiAgICAgYXV0byBkb2N1bWVu
dCA9IERvY3VtZW50OjpjcmVhdGUoc2V0dGluZ3MuZ2V0KCksIGFib3V0QmxhbmtVUkwoKSk7CiAg
ICAgYXV0byBkb2N1bWVudEVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>