<?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>78001</bug_id>
          
          <creation_ts>2012-02-07 10:35:12 -0800</creation_ts>
          <short_desc>[Qt] Use QRawFont when building with Qt 5</short_desc>
          <delta_ts>2012-04-16 09:47:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63467</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Pierre Rossi">pierre.rossi</reporter>
          <assigned_to name="Pierre Rossi">pierre.rossi</assigned_to>
          <cc>hausmann</cc>
    
    <cc>kling</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551108</commentid>
    <comment_count>0</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-02-07 10:35:12 -0800</bug_when>
    <thetext>[Qt] Use QRawFont when building with Qt 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551325</commentid>
    <comment_count>1</comment_count>
      <attachid>125918</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-02-07 13:41:39 -0800</bug_when>
    <thetext>Created attachment 125918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551328</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 13:45:45 -0800</bug_when>
    <thetext>Attachment 125918 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/qt/FontQt4.cpp:47:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/qt/FontQt4.cpp:70:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/graphics/qt/FontQt4.cpp:115:  Declaration has space between type name and * in QPainter *p  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/qt/FontQt4.cpp:421:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/qt/FontQt4.cpp:423:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 5 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551372</commentid>
    <comment_count>3</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-02-07 14:14:55 -0800</bug_when>
    <thetext>This change depends on the following 2 pending changes in Qt 5:

http://codereview.qt-project.org/#change,13595
http://codereview.qt-project.org/#change,13596</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551382</commentid>
    <comment_count>4</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-02-07 14:17:07 -0800</bug_when>
    <thetext>*** Bug 67131 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551991</commentid>
    <comment_count>5</comment_count>
      <attachid>125918</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-08 03:55:04 -0800</bug_when>
    <thetext>Comment on attachment 125918
Patch

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

Yay, this is looking very nice.

As a general suggestion I wonder if it would make sense to get rid of the HAVE(QRAWFONT) altogether and simply distinguish between Qt 4 and Qt 5? (take this with a grain of salt, it might not make the code easier to read, although it could ;)

A few other comments below.

&gt; Source/WebCore/ChangeLog:15
&gt; +        No new tests. (OOPS!)

Line to remove :)

&gt; Source/WebCore/platform/graphics/Font.h:311
&gt; +#if PLATFORM(QT) &amp;&amp; !HAVE(QRAWFONT)
&gt; +inline QFont Font::syntheticFont() const
&gt; +{
&gt; +    return font();
&gt; +}
&gt; +#endif

Should this perhaps go into FontQt4.cpp?

&gt; Source/WebCore/platform/graphics/qt/FontQt.cpp:272
&gt; +    if (m_wordSpacing) {
&gt; +        range.format.setFontWordSpacing(m_wordSpacing);
&gt; +        overrides &lt;&lt; range;
&gt; +    }
&gt; +    if (m_letterSpacing) {
&gt; +        range.format = QTextCharFormat();
&gt; +        range.format.setFontLetterSpacing(m_letterSpacing);
&gt; +        overrides &lt;&lt; range;
&gt; +    }
&gt; +    if (typesettingFeatures() &amp; Kerning) {
&gt; +        range.format = QTextCharFormat();
&gt; +        range.format.setFontKerning(true);
&gt; +        overrides &lt;&lt; range;
&gt; +    }

I think for these three overrides you could share the same FormatRange with the same QTextCharFormat and set the spacing/kerning properties on the same QTextCharFormat instance.

&gt; Source/WebCore/platform/graphics/qt/FontQt.cpp:286
&gt; +        for (int i = 0; i &lt;= text.length(); ++i) {
&gt; +            if (!text.at(i).isLower() &amp;&amp; previousCharWasLowerCase) {
&gt; +                previousCharWasLowerCase = false;
&gt; +                range.length = i - range.start;
&gt; +                range.format.setFontCapitalization(QFont::SmallCaps);
&gt; +                overrides &lt;&lt; range;
&gt; +            } else if (text.at(i).isLower() &amp;&amp; !previousCharWasLowerCase) {
&gt; +                previousCharWasLowerCase = true;
&gt; +                range.format = QTextCharFormat();
&gt; +                range.start = i;
&gt; +            }

Is this necessary? Doesn&apos;t QTextEngine already take care of the setting smallcaps only on lowercase characters?

If my suspicion is true, then you might be able to get away with one single QTextLayout::FormatRange for all the font features, with start = 0 and length = text.length() and various properties set on the char format.

&gt; Source/WebCore/platform/graphics/qt/FontQt.cpp:350
&gt; +    QFont f = QFont(rawFont.familyName());

Easier to write QFont f(rawFont.familyName()) perhaps? :)

&gt; Source/WebCore/platform/graphics/qt/SimpleFontDataQt.cpp:166
&gt; +    m_fontMetrics.setDescent(qAbs(descent));

This magic piece deserves a comment :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552055</commentid>
    <comment_count>6</comment_count>
      <attachid>126066</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-02-08 05:48:37 -0800</bug_when>
    <thetext>Created attachment 126066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552057</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 05:50:51 -0800</bug_when>
    <thetext>Attachment 126066 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/qt/FontQt4.cpp:47:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/qt/FontQt4.cpp:70:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/platform/graphics/qt/FontQt4.cpp:115:  Declaration has space between type name and * in QPainter *p  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/qt/FontQt4.cpp:421:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/qt/FontQt4.cpp:423:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 5 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552061</commentid>
    <comment_count>8</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-02-08 06:00:11 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 125918 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125918&amp;action=review
&gt; 
&gt; Yay, this is looking very nice.
&gt; 
&gt; As a general suggestion I wonder if it would make sense to get rid of the HAVE(QRAWFONT) altogether and simply distinguish between Qt 4 and Qt 5? (take this with a grain of salt, it might not make the code easier to read, although it could ;)
&gt; 
That would mainly make the diff bigger since HAVE(QRAWFONT) guards were already in place before that. Since this cruft is bound to go away at some point, I didn&apos;t really see the need for changing it.
Also note that the fact that we are tied to a specific version of Qt for the switch is not set in stone too, as unlikely as it may sound, we might not have the necessary enablers in Qt 5.0 and need to differentiate between Qt 5.0 and Qt 5.1, having that distinction in one place makes the whole thing easier to revisit (FontQt4.cpp would be a poorly chosen name in that case !).

&gt; A few other comments below.
&gt; 

Addressed those in the updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552079</commentid>
    <comment_count>9</comment_count>
      <attachid>126066</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-08 06:39:31 -0800</bug_when>
    <thetext>Comment on attachment 126066
Patch

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

I think the style issues should be fixed, too, despite them being in old code.

&gt; Source/WebCore/platform/graphics/qt/FontQt.cpp:271
&gt; +    if (isSmallCaps() || typesettingFeatures() &amp; Kerning || m_wordSpacing || m_letterSpacing)
&gt; +        overrides &lt;&lt; range;
&gt; +
&gt; +    if (!overrides.isEmpty())
&gt; +        layout-&gt;setAdditionalFormats(overrides);

How about combining this to:

if (range.format.propertyCount() == 0)
    return;

layout-&gt;setAdditionalProperties(QList&lt;QTextLayout::FormatRange&gt;() &lt;&lt; range);

instead of using the same conditions (if isSmallCaps || typesetting...) twice.

&gt; Source/WebCore/platform/graphics/qt/SimpleFontDataQt.cpp:166
&gt; +    m_fontMetrics.setDescent(qAbs(descent));

Reminder: comment ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552261</commentid>
    <comment_count>10</comment_count>
      <attachid>126112</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-02-08 10:28:07 -0800</bug_when>
    <thetext>Created attachment 126112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552307</commentid>
    <comment_count>11</comment_count>
      <attachid>126112</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-02-08 11:11:12 -0800</bug_when>
    <thetext>Comment on attachment 126112
Patch

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

Rest of the patch LGTM, just one nitpick left :)

&gt; Source/WebCore/platform/graphics/qt/FontQt.cpp:271
&gt; +    if (isSmallCaps() || typesettingFeatures() &amp; Kerning || m_wordSpacing || m_letterSpacing)
&gt; +        overrides &lt;&lt; range;
&gt; +
&gt; +    if (!overrides.isEmpty())
&gt; +        layout-&gt;setAdditionalFormats(overrides);

I suppose you forgot this part? :) I&apos;m not so particular about the stylistic aspect of this function, but I&apos;d like at least the if () to be simplified. We shouldn&apos;t duplicate the if (m_wordSpacing || isSmallCaps || ...) part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555132</commentid>
    <comment_count>12</comment_count>
      <attachid>126739</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-02-13 02:35:59 -0800</bug_when>
    <thetext>Created attachment 126739
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568635</commentid>
    <comment_count>13</comment_count>
      <attachid>129700</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-03-01 07:03:58 -0800</bug_when>
    <thetext>Created attachment 129700
Patch

removed the +1 for height calculation in FontQt.cpp since this is not correct anymore in Qt5 (see cb8445f in qtbase)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601157</commentid>
    <comment_count>14</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-04-12 06:28:41 -0700</bug_when>
    <thetext>Committed r113968: &lt;http://trac.webkit.org/changeset/113968&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601979</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-04-13 04:54:30 -0700</bug_when>
    <thetext>Reopen, because one test still fails after this change on Qt5-WK1 and on Qt5-WK2:

--- /home/webkitbuildbot/slaves/release64bitWebKit2_EC2/buildslave/qt-linux-64-release-webkit2/build/layout-test-results/svg/as-image/img-preserveAspectRatio-support-1-expected.txt
+++ /home/webkitbuildbot/slaves/release64bitWebKit2_EC2/buildslave/qt-linux-64-release-webkit2/build/layout-test-results/svg/as-image/img-preserveAspectRatio-support-1-actual.txt
@@ -10,8 +10,8 @@
               RenderText {#text} at (9,1) size 75x21
                 text run at (9,1) width 75: &quot;viewBox?&quot;
             RenderTableCell {TH} at (97,2) size 163x44 [bgcolor=#DDDD99] [r=0 c=1 rs=1 cs=1]
-              RenderText {#text} at (9,1) size 145x42
-                text run at (9,1) width 145: &quot;preserve\x{AD}Aspect\x{AD}&quot; + hyphen string &quot;\x{2010}&quot;
+              RenderText {#text} at (14,1) size 135x42
+                text run at (14,1) width 135: &quot;preserve\x{AD}Aspect\x{AD}&quot; + hyphen string &quot;-&quot;
                 text run at (61,22) width 41: &quot;Ratio&quot;
             RenderTableCell {TH} at (262,12) size 202x23 [bgcolor=#DDDD99] [r=0 c=2 rs=1 cs=1]
               RenderText {#text} at (78,1) size 46x21


-----------------------------------------------------------
Rebase patches did by Pierre:
http://trac.webkit.org/changeset/113982
http://trac.webkit.org/changeset/113993</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603012</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-04-16 03:14:40 -0700</bug_when>
    <thetext>I skipped the reamining failing test - http://trac.webkit.org/changeset/114237/trunk/LayoutTests/platform/qt-5.0/Skipped

Please unskip it with the proper fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603204</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-16 09:27:58 -0700</bug_when>
    <thetext>This patch resulted in roughly 15% performance improvements on Parser/html5-full-render.html :D

http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,957069],[3068,2001,963028]]&amp;sel=1334204056904.4426,1334267563872.0579&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603223</commentid>
    <comment_count>18</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-04-16 09:47:16 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; This patch resulted in roughly 15% performance improvements on Parser/html5-full-render.html :D
&gt; 
&gt; http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,957069],[3068,2001,963028]]&amp;sel=1334204056904.4426,1334267563872.0579&amp;displayrange=7&amp;datatype=running

Hehe, nice ! We&apos;re finally harvesting the fruits from the fast path it seems, I guess we have a bunch of people to thank for that. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125918</attachid>
            <date>2012-02-07 13:41:39 -0800</date>
            <delta_ts>2012-02-08 05:48:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78001-20120207224016.patch</filename>
            <type>text/plain</type>
            <size>67955</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJkNzlmMDA2ZjRlZjI1
ZGZlY2JiZTE4NDIwMmU2MzA1Mjg1MTNhYS4uMWViNzcxMTFmOTk2YWQzYjFjOTk1YmQ2NDEyZjA4
ODUxNDg4NDMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTAyLTA3ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gVXNlIFFS
YXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAgIFVwIHVudGlsIG5vdywgZm9u
dHMgaW4gdGhlIFF0IHBvcnQgaGF2ZSBiZWVuIGhhbmRsZWQgdmlhCisgICAgICAgIHRoZSBRRm9u
dCBBUEkuIFFSYXdGb250IG9mZmVycyBhIGxvd2VyLWxldmVsIEFQSSBlbmFibGluZworICAgICAg
ICB1cyB0byBiZSBtb3JlIGluIGxpbmUgd2l0aCB3aGF0IG90aGVyIFdlYktpdCBwb3J0cyBkby4K
KyAgICAgICAgVGhpcyBwYXRjaCBwcm9jZWVkcyB0byBzd2l0Y2hpbmcgb3ZlciB0byBRUmF3Rm9u
dCwgYW5kCisgICAgICAgIGVmZmVjdGl2ZWx5IHVzZSBhbiBlYXJsaWVyIGNoYW5nZSBieSBBbmRy
ZWFzIEtsaW5nCisgICAgICAgIHRoYXQgcmVtYWluZWQgZ3VhcmRlZCB1cCB1bnRpbCBub3cuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1RleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKEZvbnQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzeW50aGV0aWNGb250KTog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDoKKyAg
ICAgICAgKFNpbXBsZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpnZXRRdFJhd0ZvbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmF3Rm9udEZv
ckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRh
Ojp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9t
UGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlOjpGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSk6CisgICAgICAgIChGb250UGxhdGZvcm1E
YXRhUHJpdmF0ZSk6CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpmaWxsUGVuRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpwYXRoRm9yR2x5cGhzKToK
KyAgICAgICAgKFdlYkNvcmU6OmRyYXdRdEdseXBoUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25SZWN0
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6aW5pdEZvcm1hdEZvclRl
eHRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpk
cmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5bnRoZXRpY0ZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6cmF3Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFF0NC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZvbnRRdC5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmZyb21SYXdEYXRhV2l0aG91dFJlZik6CisgICAgICAgIChXZWJDb3JlOjpzZXR1cExheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUGVuRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpzdHJva2VQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0Q29t
bW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1NpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNh
bkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OnByaW1hcnlGb250SGFzR2x5cGhGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6ZW1waGFzaXNNYXJrQXNjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmVt
cGhhc2lzTWFya0Rlc2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZW1waGFzaXNNYXJr
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpmb250KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUVN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
Ojpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpmaWxlTGlzdE5h
bWVGb3JXaWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJh
c2VkT25TdHlsZSk6CisKIDIwMTItMDItMDIgIFJhdWwgSHVkZWEgIDxyaHVkZWFAYWRvYmUuY29t
PgogCiAgICAgICAgIFJlZ2lvbnMgc2hvdWxkIGlnbm9yZSB0aGUgc2F2ZWQgY3VycmVudFJlbmRl
ckZsb3dUaHJlYWQgZHVyaW5nIHJlcGFpbnRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMGI4NTRmOTUy
YTZiODMwNzg3NjYwZWU3YWRiMWViNGI3MzhmNDRhNS4uN2I5OGI0ZTQzZTkxN2U0MTBkZjQyNDA0
NDMwY2JjNjgwM2FhMWU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0w
Mi0wNyAgUGllcnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4KKworICAgICAgICBb
UXRdIFVzZSBRUmF3Rm9udCB3aGVuIGJ1aWxkaW5nIHdpdGggUXQgNQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgwMDEKKworICAgICAgICBTaW5jZSBR
Rm9udCBpcyBub3QgdXNlZCBpbnRlcm5hbGx5LCB3ZSBub3cgbmVlZAorICAgICAgICB0byBxdWVy
eSBmb3IgYSBRRm9udCB0aGF0IHNob3VsZCBiZSBhIGdvb2QKKyAgICAgICAgZW5vdWdoIG1hdGNo
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBp
L3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjppbnB1dE1ldGhvZFF1ZXJ5KToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnVRdDo6c2hvdyk6CisKIDIwMTItMDItMDEgIENhaW8gTWFyY2VsbyBkZSBPbGl2
ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBBdm9p
ZCBjcmVhdGluZyBOYW1lZE5vZGVNYXAgdW5uZWNlc3NhcmlseQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZmM2
ZjZlNjRmMzhmM2M5YWQ5YjE4YzFiYzRiNjRiYzA3YzdhZGU2NS4uNmE2YWY1OTFhZGUxNDdjY2E3
MDc5NDE0M2E0M2YwMWNjY2E2OGE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0yNzcxLDcgKzI3NzEsNiBA
QCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFJlY3RRdC5jcHAgXApAQCAtMzMzNiwxOCArMzMzNSwx
NSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTUFUSE1MPTEpIHsKICAgICAgICAgcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCiB9CiAKLSMgUVJhd0ZvbnQgZmVh
dHVyZSBhZGRlZCBpbiBRdCA0LjguMAorIyBRUmF3Rm9udCB0cmFuc2l0aW9uIGhhbmRsaW5nLgog
IwotIyBJZiBhdmFpbGFibGUsIHRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIGZhc3QgcGF0
aCBmb3IgdGV4dCByZW5kZXJpbmcKLSMgYW5kIG1lYXN1cmVtZW50IGluIFdlYkNvcmUuIEJlY2F1
c2UgdGhlIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXJnb2luZwotIyBkZXZlbG9wbWVudCwgaXQgaXMg
ZGlzYWJsZWQgaW4gYnVpbGRzLgotIwotIyBleGlzdHMoJCRbUVRfSU5TVEFMTF9IRUFERVJTXS9R
dEd1aS9RUmF3Rm9udCk6IEhBVkVfUVJBV0ZPTlQ9MQotCi0haXNFbXB0eShIQVZFX1FSQVdGT05U
KSB7Ci0gICAgREVGSU5FUyArPSBIQVZFX1FSQVdGT05UPTEKKyMgRXZlbiB0aG91Z2ggUVJhd0Zv
bnQgd2FzIGFscmVhZHkgYXZhaWxhYmxlIGluIFF0IDQuOCwgaXQgaGFkCisjIGxpbWl0YXRpb25z
IHRoYXQgbWFkZSBzd2l0Y2hpbmcgZnVsbHkgdG8gaXQgaW1wb3NzaWJsZS4KKyMgV2UgcHJlc2Vy
dmUgdGhlIG9sZCBjb2RlIHBhdGggd2hlbiBidWlsZGluZyB3aXRoIFF0IDQuCiAKK2NvbnRhaW5z
KERFRklORVMsIEhBVkVfUVJBV0ZPTlQ9MSkgewogICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhc3RQYXRoLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZVRyZWVOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
Y3BwIFwKQEAgLTMzNTYsOCArMzM1MiwxMiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTUFU
SE1MPTEpIHsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3
YXJlVGV4dEl0ZXJhdG9yLmgKK30gZWxzZSB7CisgICAgU09VUkNFUyArPSBcCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdDQuY3BwCiB9CiAKKwogY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX0dFT0xPQ0FUSU9OPTEpIHsKICAgICB2OCB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCBjMmQ5YzU4YzNm
NTA0ODE1ZDVjMzQ5NjUyY2FmYTI0ZGQ5MzE0NzM1Li42MjA2Y2U5MTRjNDQ2YzRlZDA0NzNmNGIy
OWJhNGIyNmZkN2NjNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcApAQCAtMjcsOSArMjcsNiBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRUcmFuc2NvZGVyLmgiCi0jaWYgUExBVEZPUk0o
UVQpICYmIEhBVkUoUVJBV0ZPTlQpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jZW5k
aWYKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5j
bHVkZSAiVGV4dFJ1bi5oIgpAQCAtMTUwLDExICsxNDcsNiBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaQogCiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAKLSNp
ZiBQTEFURk9STShRVCkgJiYgSEFWRShRUkFXRk9OVCkKLSAgICBpZiAoY29udGV4dC0+dGV4dERy
YXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKLSAgICAgICAgY29kZVBhdGhUb1VzZSA9IENv
bXBsZXg7Ci0jZW5kaWYKLQogICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXgpCiAgICAg
ICAgIHJldHVybiBkcmF3U2ltcGxlVGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBkMTVhNzdmM2Nk
NzMzZmFjODliODA5MTFmMWM0YjQ3YWE0ZDkwNzJkLi4wZTE1YWNlMTQ4ZjY1NjE1YmViNWEyZWVk
ZDgxZjVkMTkyOTBkZTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC0zNiw4ICszNiwxMyBAQAogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVz
Lmg+CiAKICNpZiBQTEFURk9STShRVCkKKyNpZiBIQVZFKFFSQVdGT05UKQorI2luY2x1ZGUgPFFS
YXdGb250PgorY2xhc3MgUVRleHRMYXlvdXQ7CisjZWxzZQogI2luY2x1ZGUgPFFGb250PgogI2Vu
ZGlmCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzUsOCArMTgwLDEzIEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChj
b25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJF
eHBhbnNpb24pOwogCiAjaWYgUExBVEZPUk0oUVQpCisjaWYgSEFWRShRUkFXRk9OVCkKKyAgICBR
UmF3Rm9udCByYXdGb250KCkgY29uc3Q7CisjZWxzZQogICAgIFFGb250IGZvbnQoKSBjb25zdDsK
ICNlbmRpZgorICAgIFFGb250IHN5bnRoZXRpY0ZvbnQoKSBjb25zdDsKKyNlbmRpZgogCiAgICAg
c3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wpOwogICAgIHN0YXRpYyBib29s
IHNob3VsZFVzZVNtb290aGluZygpOwpAQCAtMjUzLDYgKzI2MywxMSBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fZm9udExpc3QgJiYgbV9mb250TGlzdC0+bG9hZGluZ0N1c3Rv
bUZvbnRzKCk7CiAgICAgfQorI2lmIFBMQVRGT1JNKFFUKSAmJiBIQVZFKFFSQVdGT05UKQorICAg
IHZvaWQgaW5pdEZvcm1hdEZvclRleHRMYXlvdXQoUVRleHRMYXlvdXQqKSBjb25zdDsKKyNlbmRp
ZgorCisKIAogICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBtdXRh
YmxlIFJlZlB0cjxGb250RmFsbGJhY2tMaXN0PiBtX2ZvbnRMaXN0OwpAQCAtMjg4LDYgKzMwMywx
MiBAQCBpbmxpbmUgRm9udFNlbGVjdG9yKiBGb250Ojpmb250U2VsZWN0b3IoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2ZvbnRMaXN0ID8gbV9mb250TGlzdC0+Zm9udFNlbGVjdG9yKCkgOiAwOwog
fQorI2lmIFBMQVRGT1JNKFFUKSAmJiAhSEFWRShRUkFXRk9OVCkKK2lubGluZSBRRm9udCBGb250
OjpzeW50aGV0aWNGb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZm9udCgpOworfQorI2VuZGlm
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmgKaW5kZXggZGQ4NmYwMDRlNGM4Mzk2MzYzYzk1MTIzNGRhZmFmNTI0MDc5OGIzMS4u
OWIxMTM3MWY1YTJlNmQyYmVjZGIwMGUyZTk5MjYxZTA0ZmM4OTE4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCkBAIC01NCw3ICs1
NCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBPcGFxdWVBVFNVU3R5bGUqIEFUU1VTdHlsZTsKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oUVQpCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAjaW5jbHVkZSA8UUZv
bnQ+CisjZWxzZQorI2luY2x1ZGUgPFFSYXdGb250PgorI2VuZGlmCiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTg4LDcgKzE5MiwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFFUKQorI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFGb250IGdldFF0Rm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQorI2Vsc2UKKyAgICBRUmF3
Rm9udCBnZXRRdFJhd0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5yYXdGb250
KCk7IH0KKyNlbmRpZiAvLyAhSEFWRShRUkFXRk9OVCkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
V0lOKSB8fCAoT1MoV0lORE9XUykgJiYgUExBVEZPUk0oV1gpKQpAQCAtMzQxLDcgKzM0OSw3IEBA
IEFMV0FZU19JTkxJTkUgZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0CiAgICAgbV9nbHlwaFRvV2lkdGhNYXAuc2V0TWV0cmljc0ZvckdseXBoKGds
eXBoLCB3aWR0aCk7CiAgICAgcmV0dXJuIHdpZHRoOwogfQotI2VuZGlmCisjZW5kaWYgLy8gIUhB
VkUoUVJBV0ZPTlQpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCmluZGV4IDAyY2U0
MmE5YzFmMjRiMmI3YzNhNWI3MzQ0NjQ4OWY4NGUxZjUyN2EuLjgxNmJjY2I4OTI0Y2FhZjgzNTA5
Y2MwNmFlNmIwNTJhYTMxOGJjM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAKQEAgLTQ5LDM1ICs0OSwyOSBAQCB2b2lkIEZv
bnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIH0KIAogI2lmIEhBVkUoUVJBV0ZPTlQpCi1zdGF0aWMg
UVJhd0ZvbnQgcmF3Rm9udEZvckNoYXJhY3RlcnMoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25z
dCBRRm9udCYgcmVxdWVzdGVkRm9udCkKK3N0YXRpYyBRUmF3Rm9udCByYXdGb250Rm9yQ2hhcmFj
dGVycyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFSYXdGb250JiBmb250KQogewotICAg
IFFGb250IGZvbnQocmVxdWVzdGVkRm9udCk7Ci0gICAgZm9udC5zZXRTdHlsZVN0cmF0ZWd5KFFG
b250OjpOb0ZvbnRNZXJnaW5nKTsKLQotICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcsIGZv
bnQpOworICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcpOworICAgIGxheW91dC5zZXRSYXdG
b250KGZvbnQpOwogICAgIGxheW91dC5iZWdpbkxheW91dCgpOwogICAgIGxheW91dC5jcmVhdGVM
aW5lKCk7CiAgICAgbGF5b3V0LmVuZExheW91dCgpOwogCiAgICAgUUxpc3Q8UUdseXBoUnVuPiBn
bHlwaExpc3QgPSBsYXlvdXQuZ2x5cGhSdW5zKCk7Ci0KLSAgICBBU1NFUlQoZ2x5cGhMaXN0LnNp
emUoKSA9PSAxKTsKLQotICAgIGNvbnN0IFFHbHlwaFJ1biYgZ2x5cGhzKGdseXBoTGlzdC5hdCgw
KSk7Ci0gICAgUVZlY3RvcjxxdWludDMyPiBnbHlwaEluZGV4ZXMgPSBnbHlwaHMuZ2x5cGhJbmRl
eGVzKCk7Ci0KLSAgICBpZiAoZ2x5cGhJbmRleGVzLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZ2x5
cGhMaXN0LnNpemUoKSA8PSAxKTsKKyAgICBpZiAoIWdseXBoTGlzdC5zaXplKCkpCiAgICAgICAg
IHJldHVybiBRUmF3Rm9udCgpOwogCisgICAgY29uc3QgUUdseXBoUnVuJiBnbHlwaHMoZ2x5cGhM
aXN0LmF0KDApKTsKICAgICByZXR1cm4gZ2x5cGhzLnJhd0ZvbnQoKTsKIH0KLSNlbmRpZgorI2Vu
ZGlmIC8vIEhBVkUoUVJBV0ZPTlQpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICNpZiBIQVZFKFFSQVdGT05UKQogICAgIFFTdHJp
bmcgcXN0cmluZyA9IFFTdHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
UUNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoKTsKLSAgICBRUmF3Rm9udCBjb21wdXRlZEZvbnQg
PSByYXdGb250Rm9yQ2hhcmFjdGVycyhxc3RyaW5nLCBmb250LmZvbnQoKSk7CisgICAgUVJhd0Zv
bnQgY29tcHV0ZWRGb250ID0gcmF3Rm9udEZvckNoYXJhY3RlcnMocXN0cmluZywgZm9udC5yYXdG
b250KCkpOwogICAgIGlmICghY29tcHV0ZWRGb250LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250KGNvbXB1dGVkRm9udCk7CkBA
IC0xMDcsMTEgKzEwMSw5IEBAIHZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25z
dCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKIAogRm9udFBsYXRmb3JtRGF0YSog
Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0jaWYg
UVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgsIDApCiAgICAgUUZvbnREYXRhYmFz
ZSBkYjsKICAgICBpZiAoIWRiLmhhc0ZhbWlseShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0jZW5kaWYKICAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHlOYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCmluZGV4IDM5OTZk
MjIzYjk4NzAyY2RmNjMwYjk4NWY2NjI5YThmYjBhNWYzYjEuLjdmYTlmOGMxMTVlYTg5NDAyOTg4
ZTlmMzYxZTZiMTVkMTVhNDFiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTI5LDYg
KzI5LDkgQEAKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaWYgSEFWRShRUkFXRk9O
VCkKKyNpbmNsdWRlIDxRUmF3Rm9udD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQxLDggKzQ0LDEyIEBAIHB1YmxpYzoKICAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkg
eyB9CiAgICAgfkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKTsKIAorI2lmICFIQVZFKFFSQVdGT05U
KQogICAgIC8vIGZvciB1c2Ugd2l0aCBRRm9udERhdGFiYXNlOjphZGRBcHBsaWNhdGlvbkZvbnQv
cmVtb3ZlQXBwbGljYXRpb25Gb250CiAgICAgaW50IG1faGFuZGxlOworI2Vsc2UKKyAgICBRUmF3
Rm9udCBtX3Jhd0ZvbnQ7CisjZW5kaWYKIAogICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRm
b3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9u
ID0gSG9yaXpvbnRhbCwgVGV4dE9yaWVudGF0aW9uID0gVGV4dE9yaWVudGF0aW9uVmVydGljYWxS
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFdpZHRoVmFy
aWFudCA9IFJlZ3VsYXJXaWR0aCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdN
b2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUXQuY3BwCmluZGV4IDIwZjE2MWE4ZjIxZmY4
MTQwNmE4MjY0OTQzZTllMDI3YjFiMGMwYzMuLmRmODFmMzNjNWNmNTlhOGM0NDhhNDBkNTYxMTEx
NDkzNDdhODQzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVF0LmNwcApAQCAtMjQsNDAg
KzI0LDU2IEBACiAKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAjaW5jbHVkZSA8UUZvbnREYXRhYmFz
ZT4KKyNlbmRpZgogI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKIHsK
KyNpZiAhSEFWRShRUkFXRk9OVCkKICAgICBRRm9udERhdGFiYXNlOjpyZW1vdmVBcHBsaWNhdGlv
bkZvbnQobV9oYW5kbGUpOworI2VuZGlmCiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IGl0YWxpYywgRm9udE9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlh
bnQsIEZvbnRSZW5kZXJpbmdNb2RlKQogeworI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFGb250
IGZvbnQ7CiAgICAgZm9udC5zZXRGYW1pbHkoUUZvbnREYXRhYmFzZTo6YXBwbGljYXRpb25Gb250
RmFtaWxpZXMobV9oYW5kbGUpWzBdKTsKICAgICBmb250LnNldFBpeGVsU2l6ZShzaXplKTsKICAg
ICBpZiAoYm9sZCkKICAgICAgICAgZm9udC5zZXRXZWlnaHQoUUZvbnQ6OkJvbGQpOwogICAgIGZv
bnQuc2V0SXRhbGljKGl0YWxpYyk7Ci0KICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShmb250
KTsKKyNlbHNlCisgICAgUV9BU1NFUlQobV9yYXdGb250LmlzVmFsaWQoKSk7CisgICAgbV9yYXdG
b250LnNldFBpeGVsU2l6ZShxcmVhbChzaXplKSk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURh
dGEobV9yYXdGb250KTsKKyNlbmRpZgogfQogCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVh
dGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQogewogICAgIEFT
U0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOwogCi0gICAgaW50IGlkID0gUUZvbnREYXRhYmFzZTo6
YWRkQXBwbGljYXRpb25Gb250RnJvbURhdGEoUUJ5dGVBcnJheShidWZmZXItPmRhdGEoKSwgYnVm
ZmVyLT5zaXplKCkpKTsKKyAgICBjb25zdCBRQnl0ZUFycmF5IGZvbnREYXRhKGJ1ZmZlci0+ZGF0
YSgpLCBidWZmZXItPnNpemUoKSk7CisjaWYgIUhBVkUoUVJBV0ZPTlQpCisgICAgaW50IGlkID0g
UUZvbnREYXRhYmFzZTo6YWRkQXBwbGljYXRpb25Gb250RnJvbURhdGEoZm9udERhdGEpOwogICAg
IGlmIChpZCA9PSAtMSkKICAgICAgICAgcmV0dXJuIDA7Ci0KICAgICBRX0FTU0VSVChRRm9udERh
dGFiYXNlOjphcHBsaWNhdGlvbkZvbnRGYW1pbGllcyhpZCkuc2l6ZSgpID4gMCk7CisjZW5kaWYK
IAogICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgKmRhdGEgPSBuZXcgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YTsKKyNpZiAhSEFWRShRUkFXRk9OVCkKICAgICBkYXRhLT5tX2hhbmRsZSA9IGlkOwor
I2Vsc2UKKyAgICAvLyBQaXhlbCBzaXplIGRvZXNuJ3QgbWF0dGVyIGF0IHRoaXMgcG9pbnQsIGl0
IGlzIHNldCBpbiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhLgorICAg
IGRhdGEtPm1fcmF3Rm9udC5sb2FkRnJvbURhdGEoZm9udERhdGEsIC8qcGl4ZWxTaXplID0gKi8w
LCBRRm9udDo6UHJlZmVyRGVmYXVsdEhpbnRpbmcpOworI2VuZGlmCiAgICAgcmV0dXJuIGRhdGE7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRQbGF0Zm9ybURhdGEuaAppbmRleCA3NjYyYWEwMDcxZTI1MWRlNDA1MmM0YmY3YTEwNTk1M2Uw
ZmM4YTdjLi5mNTVlMTljMmIxMzBjM2Y4OWY3NDI0NWEzNDU1YThkMzMxMDA5NDEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3Jt
RGF0YS5oCkBAIC00MCw4ICs0MCwxMyBAQCBjbGFzcyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSA6
IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlPiB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9udFBsYXRmb3JtRGF0YVByaXZhdGUpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpCisjaWYgIUhB
VkUoUVJBV0ZPTlQpCiAgICAgICAgIDogc2l6ZShmb250LnBpeGVsU2l6ZSgpKQogICAgICAgICAs
IGJvbGQoZm9udC5ib2xkKCkpCisjZWxzZQorICAgICAgICA6IHNpemUoMCkKKyAgICAgICAgLCBi
b2xkKGZhbHNlKQorI2VuZGlmCiAgICAgICAgICwgb2JsaXF1ZShmYWxzZSkKICAgICAgICAgLCBp
c0RlbGV0ZWRWYWx1ZShmYWxzZSkKICAgICB7IH0KQEAgLTUxLDIwICs1NiwxNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgb2JsaXF1ZShvYmxpcXVlKQogICAgICAgICAsIGlzRGVsZXRlZFZhbHVlKGZh
bHNlKQogICAgIHsgfQorI2lmICFIQVZFKFFSQVdGT05UKQogICAgIEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlKGNvbnN0IFFGb250JiBmb250KQogICAgICAgICA6IGZvbnQoZm9udCkKLSNpZiBIQVZF
KFFSQVdGT05UKQotICAgICAgICAsIHJhd0ZvbnQoUVJhd0ZvbnQ6OmZyb21Gb250KGZvbnQsIFFG
b250RGF0YWJhc2U6OkFueSkpCi0jZW5kaWYKICAgICAgICAgLCBzaXplKGZvbnQucGl4ZWxTaXpl
KCkpCiAgICAgICAgICwgYm9sZChmb250LmJvbGQoKSkKICAgICAgICAgLCBvYmxpcXVlKGZhbHNl
KQogICAgICAgICAsIGlzRGVsZXRlZFZhbHVlKGZhbHNlKQogICAgIHsgfQotI2lmIEhBVkUoUVJB
V0ZPTlQpCisjZWxzZQogICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKGNvbnN0IFFSYXdGb250
JiByYXdGb250KQotICAgICAgICA6IGZvbnQoKQotICAgICAgICAsIHJhd0ZvbnQocmF3Rm9udCkK
KyAgICAgICAgOiByYXdGb250KHJhd0ZvbnQpCiAgICAgICAgICwgc2l6ZShyYXdGb250LnBpeGVs
U2l6ZSgpKQogICAgICAgICAsIGJvbGQocmF3Rm9udC53ZWlnaHQoKSA+PSBRRm9udDo6Qm9sZCkK
ICAgICAgICAgLCBvYmxpcXVlKGZhbHNlKQpAQCAtNzUsOCArNzcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIDogaXNEZWxldGVkVmFsdWUodHJ1ZSkKICAgICB7IH0KIAorI2lmICFIQVZFKFFSQVdGT05U
KQogICAgIFFGb250IGZvbnQ7Ci0jaWYgSEFWRShRUkFXRk9OVCkKKyNlbHNlCiAgICAgUVJhd0Zv
bnQgcmF3Rm9udDsKICNlbmRpZgogICAgIGZsb2F0IHNpemU7CkBAIC05MCwxMCArOTMsMTEgQEAg
Y2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YShm
bG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CiAgICAgRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUs
IGludCB3b3JkU3BhY2luZyA9IDAsIGludCBsZXR0ZXJTcGFjaW5nID0gMCk7CisjaWYgIUhBVkUo
UVJBV0ZPTlQpCiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBRRm9udCYgZm9udCkKICAgICAg
ICAgOiBtX2RhdGEoYWRvcHRSZWYobmV3IEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKGZvbnQpKSkK
ICAgICB7IH0KLSNpZiBIQVZFKFFSQVdGT05UKQorI2Vsc2UKICAgICBGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBmbG9hdCBzaXplKTsKICAgICBGb250UGxhdGZvcm1E
YXRhKGNvbnN0IFFSYXdGb250JiByYXdGb250KQogICAgICAgICA6IG1fZGF0YShhZG9wdFJlZihu
ZXcgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUocmF3Rm9udCkpKQpAQCAtMTEyLDYgKzExNiw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEtPmlzRGVsZXRlZFZhbHVl
OwogICAgIH0KIAorI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFGb250IGZvbnQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgUV9BU1NFUlQoIWlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpOwpAQCAt
MTE5LDcgKzEyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBRRm9udCgpOwogICAg
ICAgICByZXR1cm4gbV9kYXRhLT5mb250OwogICAgIH0KLSNpZiBIQVZFKFFSQVdGT05UKQorI2Vs
c2UKICAgICBRUmF3Rm9udCByYXdGb250KCkgY29uc3QKICAgICB7CiAgICAgICAgIFFfQVNTRVJU
KCFpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCmluZGV4IDg2
ZmMxMmUzYTFlYTcwODBlMWVjMWU4MGZkMGVhOTYxNTZlZjkyMDMuLjNkOTMwOGYyNDYwNjFmMmUz
NDQ5Y2EwNjM1NzZmYmJkMDY5YmE5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcApAQCAtNjMsNyAr
NjMsMTEgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5n
JiBmYW1pbHlOYW1lLCBpbnQgd29yZFNwYWNpbmcsIGludCBsZXR0ZXJTcGFjaW5nKQogICAgIDog
bV9kYXRhKGFkb3B0UmVmKG5ldyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpKSkKIHsKKyNpZiAh
SEFWRShRUkFXRk9OVCkKICAgICBRRm9udCYgZm9udCA9IG1fZGF0YS0+Zm9udDsKKyNlbHNlCisg
ICAgUUZvbnQgZm9udDsKKyNlbmRpZgogICAgIGludCByZXF1ZXN0ZWRTaXplID0gZGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKTsKICAgICBmb250LnNldEZhbWlseShmYW1pbHlOYW1lKTsK
ICAgICBmb250LnNldFBpeGVsU2l6ZShyZXF1ZXN0ZWRTaXplKTsKQEAgLTcxLDE3ICs3NSwxOSBA
QCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IEF0bwogICAgIGZvbnQuc2V0V2VpZ2h0KHRvUUZvbnRXZWln
aHQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpKTsKICAgICBmb250LnNldFdvcmRTcGFjaW5nKHdvcmRT
cGFjaW5nKTsKICAgICBmb250LnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFic29sdXRlU3BhY2lu
ZywgbGV0dGVyU3BhY2luZyk7Ci0gICAgY29uc3QgYm9vbCBzbWFsbENhcHMgPSBkZXNjcmlwdGlv
bi5zbWFsbENhcHMoKTsKLSAgICBmb250LnNldENhcGl0YWxpemF0aW9uKHNtYWxsQ2FwcyA/IFFG
b250OjpTbWFsbENhcHMgOiBRRm9udDo6TWl4ZWRDYXNlKTsKICAgICBmb250LnNldFN0eWxlU3Ry
YXRlZ3koUUZvbnQ6OkZvcmNlSW50ZWdlck1ldHJpY3MpOwogCiAgICAgbV9kYXRhLT5ib2xkID0g
Zm9udC5ib2xkKCk7CisjaWYgIUhBVkUoUVJBV0ZPTlQpCisgICAgY29uc3QgYm9vbCBzbWFsbENh
cHMgPSBkZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsKKyAgICBmb250LnNldENhcGl0YWxpemF0aW9u
KHNtYWxsQ2FwcyA/IFFGb250OjpTbWFsbENhcHMgOiBRRm9udDo6TWl4ZWRDYXNlKTsKICAgICAv
LyBXZWJLaXQgYWxsb3dzIGZvbnQgc2l6ZSB6ZXJvIGJ1dCBRRm9udCBkb2VzIG5vdC4gV2Ugd2ls
bCByZXR1cm4KICAgICAvLyBtX2RhdGEtPnNpemUgaWYgYSBmb250IHNpemUgb2YgemVybyBpcyBy
ZXF1ZXN0ZWQgYW5kIHBpeGVsU2l6ZSgpCiAgICAgLy8gb3RoZXJ3aXNlLgogICAgIG1fZGF0YS0+
c2l6ZSA9ICghcmVxdWVzdGVkU2l6ZSkgPyByZXF1ZXN0ZWRTaXplIDogZm9udC5waXhlbFNpemUo
KTsKLSNpZiBIQVZFKFFSQVdGT05UKQorI2Vsc2UKICAgICBtX2RhdGEtPnJhd0ZvbnQgPSBRUmF3
Rm9udDo6ZnJvbUZvbnQoZm9udCwgUUZvbnREYXRhYmFzZTo6QW55KTsKKyAgICBtX2RhdGEtPnNp
emUgPSBtX2RhdGEtPnJhd0ZvbnQucGl4ZWxTaXplKCk7CiAjZW5kaWYKIH0KIApAQCAtODksMTUg
Kzk1LDEzIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvCiBGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyLCBmbG9hdCBzaXplKQog
ICAgIDogbV9kYXRhKGFkb3B0UmVmKG5ldyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpKSkKIHsK
LSAgICBtX2RhdGEtPmZvbnQgPSBvdGhlci5tX2RhdGEtPmZvbnQ7CiAgICAgbV9kYXRhLT5yYXdG
b250ID0gb3RoZXIubV9kYXRhLT5yYXdGb250OwogICAgIG1fZGF0YS0+Ym9sZCA9IG90aGVyLm1f
ZGF0YS0+Ym9sZDsKICAgICBtX2RhdGEtPm9ibGlxdWUgPSBvdGhlci5tX2RhdGEtPm9ibGlxdWU7
Ci0gICAgbV9kYXRhLT5mb250LnNldFBpeGVsU2l6ZShzaXplKTsKICAgICBtX2RhdGEtPnJhd0Zv
bnQuc2V0UGl4ZWxTaXplKHNpemUpOwotICAgIG1fZGF0YS0+c2l6ZSA9IHNpemUgPyBtX2RhdGEt
PmZvbnQucGl4ZWxTaXplKCkgOiAwOworICAgIG1fZGF0YS0+c2l6ZSA9IG1fZGF0YS0+cmF3Rm9u
dC5waXhlbFNpemUoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEhBVkUoUVJBV0ZPTlQpCiAKIGJv
b2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBv
dGhlcikgY29uc3QKIHsKQEAgLTExMCw3ICsxMTQsMTEgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAogICAgIGNv
bnN0IGJvb2wgZXF1YWxzID0gKG1fZGF0YS0+c2l6ZSA9PSBvdGhlci5tX2RhdGEtPnNpemUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2RhdGEtPmJvbGQgPT0gb3RoZXIubV9kYXRhLT5i
b2xkCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9kYXRhLT5vYmxpcXVlID09IG90aGVy
Lm1fZGF0YS0+b2JsaXF1ZQorI2lmICFIQVZFKFFSQVdGT05UKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIG1fZGF0YS0+Zm9udCA9PSBvdGhlci5tX2RhdGEtPmZvbnQpOworI2Vsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2RhdGEtPnJhd0ZvbnQgPT0gb3RoZXIubV9kYXRh
LT5yYXdGb250KTsKKyNlbmRpZgogICAgIHJldHVybiBlcXVhbHM7CiB9CiAKQEAgLTEyMCwxMCAr
MTI4LDE1IEBAIHVuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAogICAgICAg
ICByZXR1cm4gMDsKICAgICBpZiAobV9kYXRhLT5pc0RlbGV0ZWRWYWx1ZSkKICAgICAgICAgcmV0
dXJuIDE7Ci0gICAgcmV0dXJuIHFIYXNoKG1fZGF0YS0+Zm9udC50b1N0cmluZygpKQotICAgICAg
ICAgICBeIHFIYXNoKCpyZWludGVycHJldF9jYXN0PHF1aW50MzIqPigmbV9kYXRhLT5zaXplKSkK
LSAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPmJvbGQpCi0gICAgICAgICAgIF4gcUhhc2gobV9k
YXRhLT5vYmxpcXVlKTsKKyNpZiAhSEFWRShRUkFXRk9OVCkKKyAgICByZXR1cm4gKHFIYXNoKG1f
ZGF0YS0+Zm9udC50b1N0cmluZygpKSBeIHFIYXNoKG1fZGF0YS0+Ym9sZCkKKyAgICAgICAgICAg
IF4gcUhhc2gobV9kYXRhLT5vYmxpcXVlKSkKKyAgICAgICAgICAgIF4gcUhhc2goKnJlaW50ZXJw
cmV0X2Nhc3Q8cXVpbnQzMio+KCZtX2RhdGEtPnNpemUpKTsKKyNlbHNlCisgICAgcmV0dXJuIHFI
YXNoKG1fZGF0YS0+cmF3Rm9udC5mYW1pbHlOYW1lKCkpIF4gcUhhc2gobV9kYXRhLT5yYXdGb250
LnN0eWxlKCkpCisgICAgICAgICAgICBeIHFIYXNoKG1fZGF0YS0+cmF3Rm9udC53ZWlnaHQoKSkK
KyAgICAgICAgICAgIF4gcUhhc2goKnJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMio+KCZtX2RhdGEt
PnNpemUpKTsKKyNlbmRpZgogfQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKaW5kZXggNTExOTMzNDlmZTQyMGY1NjIz
Mzg2YjY0NmZlYjYzOTRhMjE2NDgyNi4uYTE5YjIwNzQyYzM3Y2U2YmYwNmRlM2ZlZDI4NDcxM2Y2
ZGUxYjVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICAg
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICAg
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KIApAQCAt
MjYsOSArMjYsNyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZv
bnRGYWxsYmFja0xpc3QuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKLSNpZiBIQVZFKFFS
QVdGT05UKQogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jZW5kaWYKICNpbmNsdWRlICJHcmFk
aWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCkBAIC0zNywxNyArMzUsMTIgQEAKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKICNp
bmNsdWRlIDxRQnJ1c2g+Ci0jaW5jbHVkZSA8UUZvbnRJbmZvPgotI2luY2x1ZGUgPFFGb250TWV0
cmljcz4KICNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAjaW5j
bHVkZSA8UVBlbj4KLSNpZiBIQVZFKFFSQVdGT05UKQogI2luY2x1ZGUgPFFQb2ludEY+Ci0jZW5k
aWYKICNpbmNsdWRlIDxRVGV4dExheW91dD4KICNpbmNsdWRlIDxxYWxnb3JpdGhtcy5oPgotI2lu
Y2x1ZGUgPHFkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKQEAgLTkyLDcgKzg1LDcg
QEAgc3RhdGljIFFQZW4gZmlsbFBlbkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgpCiAg
ICAgICAgIHJldHVybiBRUGVuKFFCcnVzaChjdHgtPmZpbGxQYXR0ZXJuKCktPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihhZmZpbmUpKSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFFQZW4oUUNvbG9y
KGN0eC0+ZmlsbENvbG9yKCkpKTsKKyAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5maWxsQ29s
b3IoKSksIDApOwogfQogCiBzdGF0aWMgUVBlbiBzdHJva2VQZW5Gb3JDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCogY3R4KQpAQCAtMTEyLDE1OCArMTA1LDkyIEBAIHN0YXRpYyBRUGVuIHN0cm9rZVBl
bkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgpCiAgICAgcmV0dXJuIFFQZW4oUUNvbG9y
KGN0eC0+c3Ryb2tlQ29sb3IoKSksIGN0eC0+c3Ryb2tlVGhpY2tuZXNzKCkpOwogfQogCi1zdGF0
aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywgY29uc3Qg
UUZvbnQmIGZvbnQsIGJvb2wgaXNDb21wbGV4VGV4dCkKK3N0YXRpYyBRUGFpbnRlclBhdGggcGF0
aEZvckdseXBocyhjb25zdCBRR2x5cGhSdW4mIGdseXBoUnVuLCBjb25zdCBRUG9pbnRGJiBvZmZz
ZXQpCiB7Ci0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBydW4ubGVuZ3RoKCk7Ci0KLSAg
ICBRUGFpbnRlciAqcCA9IGN0eC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBRUGVuIHRleHRG
aWxsUGVuOwotICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKQot
ICAgICAgICB0ZXh0RmlsbFBlbiA9IGZpbGxQZW5Gb3JDb250ZXh0KGN0eCk7Ci0KLSAgICBRUGVu
IHRleHRTdHJva2VQZW47Ci0gICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9k
ZVN0cm9rZSkKLSAgICAgICAgdGV4dFN0cm9rZVBlbiA9IHN0cm9rZVBlbkZvckNvbnRleHQoY3R4
KTsKLQotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNo
YXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdE
YXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotICAgIFFQb2ludEYgcHQocG9pbnQueCgpLCBwb2lu
dC55KCkpOwotCi0gICAgaWYgKGZyb20gPiAwIHx8IHRvIDwgcnVuLmxlbmd0aCgpKSB7Ci0gICAg
ICAgIGlmIChpc0NvbXBsZXhUZXh0KSB7Ci0gICAgICAgICAgICBRVGV4dExheW91dCBsYXlvdXQo
c3RyaW5nLCBmb250KTsKLSAgICAgICAgICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQo
JmxheW91dCwgcnVuKTsKLSAgICAgICAgICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJv
bSk7Ci0gICAgICAgICAgICBmbG9hdCB4MiA9IGxpbmUuY3Vyc29yVG9YKHRvKTsKLSAgICAgICAg
ICAgIGlmICh4MiA8IHgxKQotICAgICAgICAgICAgICAgIHFTd2FwKHgxLCB4Mik7Ci0KLSAgICAg
ICAgICAgIFFGb250TWV0cmljcyBmbShmb250KTsKLSAgICAgICAgICAgIGludCBhc2NlbnQgPSBm
bS5hc2NlbnQoKTsKLSAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocG9pbnQueCgpICsg
eDEsIHBvaW50LnkoKSAtIGFzY2VudCwgeDIgLSB4MSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgUVJlY3RGIGNsaXAgPSBib3VuZGluZ1JlY3Q7Ci0KLSAgICAgICAgICAgIFNoYWRvd0JsdXIq
IGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOwotICAgICAgICAgICAgaWYgKGN0eFNoYWRv
dy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgp
LCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBx
cmVhbCBkeDEgPSAwLCBkeDIgPSAwLCBkeTEgPSAwLCBkeTIgPSAwOwotICAgICAgICAgICAgICAg
IGlmIChzaGFkb3dPZmZzZXQueCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHgyID0gc2hh
ZG93T2Zmc2V0LngoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGR4MSA9IC1zaGFkb3dPZmZzZXQueCgpOwotICAgICAgICAgICAgICAgIGlmIChzaGFkb3dPZmZz
ZXQueSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHkyID0gc2hhZG93T2Zmc2V0LnkoKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGR5MSA9IC1zaGFkb3dP
ZmZzZXQueSgpOwotICAgICAgICAgICAgICAgIC8vIGV4cGFuZCB0aGUgY2xpcCByZWN0IHRvIGlu
Y2x1ZGUgdGhlIHRleHQgc2hhZG93IGFzIHdlbGwKLSAgICAgICAgICAgICAgICBjb25zdCBmbG9h
dCBibHVyRGlzdGFuY2UgPSBjdHgtPnN0YXRlKCkuc2hhZG93Qmx1cjsKLSAgICAgICAgICAgICAg
ICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIpOwotICAgICAgICAgICAgICAgIGNsaXAu
YWRqdXN0KC1ibHVyRGlzdGFuY2UsIC1ibHVyRGlzdGFuY2UsIGJsdXJEaXN0YW5jZSwgYmx1ckRp
c3RhbmNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAg
ICAgIHAtPnNldENsaXBSZWN0KGNsaXAudG9SZWN0KCksIFF0OjpJbnRlcnNlY3RDbGlwKTsKLSAg
ICAgICAgICAgIHB0LnNldFkocHQueSgpIC0gYXNjZW50KTsKLQotICAgICAgICAgICAgaWYgKGN0
eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7Ci0gICAgICAgICAgICAg
ICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cKLSAg
ICAgICAgICAgICAgICAgICAgJiYgKCFjdHhTaGFkb3ctPnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgfHwgY3R4LT5nZXRDVE0oKS5pc0lkZW50aXR5KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eC0+c3RhdGUoKS5z
aGFkb3dDb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0
eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKSkpOwotICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcocCwgcHQpOwotICAg
ICAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4
U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55
d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3Ip
OwotICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5kcmF3KHNoYWRvd1BhaW50ZXIsIHB0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHAtPnNldFBlbih0ZXh0RmlsbFBlbik7Ci0gICAgICAgICAgICBsaW5lLmRy
YXcocCwgcHQpOwotICAgICAgICAgICAgcC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGludCBza2lwV2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCku
d2lkdGgoc3RyaW5nLCBmcm9tLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwotICAgICAgICBwdC5z
ZXRYKHB0LngoKSArIHNraXBXaWR0aCk7Ci0gICAgICAgIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0
aG91dFJlZihzYW5pdGl6ZWQsIGZyb20sIHRvIC0gZnJvbSk7CisgICAgUVBhaW50ZXJQYXRoIHBh
dGg7CisgICAgY29uc3QgUVJhd0ZvbnQgcmF3Rm9udChnbHlwaFJ1bi5yYXdGb250KCkpOworICAg
IGNvbnN0IFFWZWN0b3I8cXVpbnQzMj4gZ2x5cGhJbmRpY2VzID0gZ2x5cGhSdW4uZ2x5cGhJbmRl
eGVzKCk7CisgICAgY29uc3QgUVZlY3RvcjxRUG9pbnRGPiBwb3NpdGlvbnMgPSBnbHlwaFJ1bi5w
b3NpdGlvbnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdseXBoSW5kaWNlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBRUGFpbnRlclBhdGggZ2x5cGhQYXRoID0gcmF3Rm9udC5wYXRoRm9y
R2x5cGgoZ2x5cGhJbmRpY2VzLmF0KGkpKTsKKyAgICAgICAgZ2x5cGhQYXRoLnRyYW5zbGF0ZShw
b3NpdGlvbnMuYXQoaSkgKyBvZmZzZXQpOworICAgICAgICBwYXRoLmFkZFBhdGgoZ2x5cGhQYXRo
KTsKICAgICB9CisgICAgcmV0dXJuIHBhdGg7Cit9CiAKLSAgICBwLT5zZXRGb250KGZvbnQpOwot
Ci0gICAgaW50IGZsYWdzID0gcnVuLnJ0bCgpID8gUXQ6OlRleHRGb3JjZVJpZ2h0VG9MZWZ0IDog
UXQ6OlRleHRGb3JjZUxlZnRUb1JpZ2h0OwotICAgIGlmICghaXNDb21wbGV4VGV4dCAmJiAhKGN0
eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkpCi0gICAgICAgIGZsYWdzIHw9
IFF0OjpUZXh0QnlwYXNzU2hhcGluZzsKK3N0YXRpYyB2b2lkIGRyYXdRdEdseXBoUnVuKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUUdseXBoUnVuJiBxdEdseXBoUnVuLCBjb25zdCBR
UG9pbnRGJiBwb2ludCwgaW50IGJhc2VMaW5lT2Zmc2V0KQoreworICAgIFFQYWludGVyKiBwYWlu
dGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBRUGFpbnRlclBhdGggdGV4
dFN0cm9rZVBhdGg7Ci0gICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0
cm9rZSkKLSAgICAgICAgdGV4dFN0cm9rZVBhdGguYWRkVGV4dChwdCwgZm9udCwgc3RyaW5nKTsK
LQotICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOwotICAgIGlm
IChjdHgtPmhhc1NoYWRvdygpICYmIGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5v
U2hhZG93KSB7Ci0gICAgICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVG
aWxsKSB7Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6
Qmx1clNoYWRvdykgewotICAgICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAg
ICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgICAgICBw
LT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0
eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgICAgICBwLT5k
cmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLmV4cGFuc2lvbigpKTsKLSAgICAgICAgICAg
ICAgICBwLT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IFFGb250TWV0cmljcyBmbShmb250KTsKLSAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdS
ZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywgLTEs
IGZsYWdzKSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
c2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5n
UmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVy
cmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCi0gICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7
Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdUZXh0KHB0LCBzdHJpbmcs
IGZsYWdzLCBydW4uZXhwYW5zaW9uKCkpOwotICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ct
PmVuZFNoYWRvd0xheWVyKGN0eCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9r
ZSkgewotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJs
dXJTaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChj
dHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZz
ZXQuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQp
OwotICAgICAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4
LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7Ci0gICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1z
aGFkb3dPZmZzZXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBRRm9u
dE1ldHJpY3MgZm0oZm9udCk7Ci0gICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChw
dC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0xLCBmbGFn
cyksIGZtLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRv
d0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3Qp
OwotICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBh
bnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgotICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4LT5z
dGF0ZSgpLnNoYWRvd0NvbG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5k
U2hhZG93TGF5ZXIoY3R4KTsKLSAgICAgICAgICAgICAgICB9CisgICAgaWYgKGNvbnRleHQtPnRl
eHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpCisgICAgICAgIHRleHRTdHJva2VQYXRo
ID0gcGF0aEZvckdseXBocyhxdEdseXBoUnVuLCBwb2ludCk7CisKKyAgICBTaGFkb3dCbHVyKiBz
aGFkb3cgPSBjb250ZXh0LT5zaGFkb3dCbHVyKCk7CisgICAgaWYgKGNvbnRleHQtPmhhc1NoYWRv
dygpICYmIHNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAg
IHN3aXRjaCAoc2hhZG93LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTaGFkb3dCbHVyOjpTb2xp
ZFNoYWRvdzogeworICAgICAgICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHBhaW50ZXItPnBlbigp
OworICAgICAgICAgICAgcGFpbnRlci0+c2V0UGVuKGNvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29s
b3IpOworICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY29udGV4dC0+c3Rh
dGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY29udGV4dC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQu
aGVpZ2h0KCkpOworICAgICAgICAgICAgcGFpbnRlci0+dHJhbnNsYXRlKHNoYWRvd09mZnNldCk7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZp
bGwpCisgICAgICAgICAgICAgICAgcGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBo
UnVuKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpICYg
VGV4dE1vZGVTdHJva2UpCisgICAgICAgICAgICAgICAgcGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0
U3Ryb2tlUGF0aCwgcGFpbnRlci0+cGVuKCkpOworICAgICAgICAgICAgcGFpbnRlci0+dHJhbnNs
YXRlKC1zaGFkb3dPZmZzZXQpOworICAgICAgICAgICAgcGFpbnRlci0+c2V0UGVuKHByZXZpb3Vz
UGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgU2hhZG93
Qmx1cjo6Qmx1clNoYWRvdzogeworICAgICAgICAgICAgY29uc3QgaW50IHdpZHRoID0gcXRHbHlw
aFJ1bi5ib3VuZGluZ1JlY3QoKS53aWR0aCgpOworICAgICAgICAgICAgY29uc3QgUVJhd0ZvbnQm
IGZvbnQgPSBxdEdseXBoUnVuLnJhd0ZvbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBoZWln
aHQgPSBmb250LmFzY2VudCgpICsgZm9udC5kZXNjZW50KCkgKyAxOworICAgICAgICAgICAgY29u
c3QgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCksIHBvaW50LnkoKSAtIGZvbnQuYXNjZW50
KCkgKyBiYXNlTGluZU9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY29udGV4
dCwgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAg
ICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oc2hh
ZG93Q29udGV4dC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgaWYgKHNo
YWRvd0NvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKQorICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhSdW4p
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNoYWRvd0NvbnRleHQtPnRleHREcmF3aW5nTW9k
ZSgpICYgVGV4dE1vZGVTdHJva2UpCisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIHNoYWRvd1BhaW50ZXItPnBlbigpKTsKKyAgICAg
ICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGNvbnRleHQpOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFkb3dCbHVy
OjpOb1NoYWRvdzoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
Y3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICBwLT5zdHJv
a2VQYXRoKHRleHRTdHJva2VQYXRoLCB0ZXh0U3Ryb2tlUGVuKTsKKyAgICBpZiAoY29udGV4dC0+
dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgcGFpbnRlci0+c3Ry
b2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgc3Ryb2tlUGVuRm9yQ29udGV4dChjb250ZXh0KSk7CiAK
LSAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkgewotICAgICAg
ICBRUGVuIHByZXZpb3VzUGVuID0gcC0+cGVuKCk7Ci0gICAgICAgIHAtPnNldFBlbih0ZXh0Rmls
bFBlbik7Ci0gICAgICAgIHAtPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5z
aW9uKCkpOwotICAgICAgICBwLT5zZXRQZW4ocHJldmlvdXNQZW4pOworICAgIGlmIChjb250ZXh0
LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkgeworICAgICAgICBRUGVuIHByZXZp
b3VzUGVuID0gcGFpbnRlci0+cGVuKCk7CisgICAgICAgIHBhaW50ZXItPnNldFBlbihmaWxsUGVu
Rm9yQ29udGV4dChjb250ZXh0KSk7CisgICAgICAgIHBhaW50ZXItPmRyYXdHbHlwaFJ1bihwb2lu
dCwgcXRHbHlwaFJ1bik7CisgICAgICAgIHBhaW50ZXItPnNldFBlbihwcmV2aW91c1Blbik7CiAg
ICAgfQogfQogCiB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGN0
eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKIHsKLSAgICBkcmF3VGV4dENvbW1vbihjdHgsIHJ1biwgcG9pbnQsIGZy
b20sIHRvLCBmb250KCksIC8qIGlzQ29tcGxleFRleHQgPSAqL3RydWUpOworICAgIFN0cmluZyBz
YW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxl
bmd0aCgpKTsKKyAgICBjb25zdCBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJl
ZihzYW5pdGl6ZWQpOworICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcpOworICAgIGxheW91
dC5zZXRSYXdGb250KHJhd0ZvbnQoKSk7CisgICAgaW5pdEZvcm1hdEZvclRleHRMYXlvdXQoJmxh
eW91dCk7CisgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwor
ICAgIGNvbnN0IFFQb2ludEYgYWRqdXN0ZWRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSAtIGxp
bmUuYXNjZW50KCkpOworCisgICAgUUxpc3Q8UUdseXBoUnVuPiBydW5zID0gbGluZS5nbHlwaFJ1
bnMoZnJvbSwgdG8gLSBmcm9tKTsKKyAgICBRX0ZPUkVBQ0goUUdseXBoUnVuIGdseXBoUnVuLCBy
dW5zKQorICAgICAgICBkcmF3UXRHbHlwaFJ1bihjdHgsIGdseXBoUnVuLCBhZGp1c3RlZFBvaW50
LCBsaW5lLmFzY2VudCgpKTsKIH0KIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Kiwg
R2x5cGhPdmVyZmxvdyopIGNvbnN0CkBAIC0yNzUsMTcgKzIwMiwxOSBAQCBmbG9hdCBGb250Ojpm
bG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChydW4ubGVuZ3RoKCkgPT0g
MSAmJiB0cmVhdEFzU3BhY2UocnVuWzBdKSkKLSAgICAgICAgcmV0dXJuIFFGb250TWV0cmljcyhm
b250KCkpLndpZHRoKHNwYWNlKSArIHJ1bi5leHBhbnNpb24oKTsKLQorICAgICAgICByZXR1cm4g
c3BhY2VXaWR0aCgpICsgcnVuLmV4cGFuc2lvbigpOwogICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBG
b250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKICAg
ICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCi0g
ICAgaW50IHcgPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChzdHJpbmcpOwotICAgIC8vIFdl
YktpdCBleHBlY3RzIHVzIHRvIGlnbm9yZSB3b3JkIHNwYWNpbmcgb24gdGhlIGZpcnN0IGNoYXJh
Y3RlciAoYXMgb3Bwb3NlZCB0byB3aGF0IFF0IGRvZXMpCi0gICAgaWYgKHRyZWF0QXNTcGFjZShy
dW5bMF0pKQotICAgICAgICB3IC09IG1fd29yZFNwYWNpbmc7CisgICAgUVRleHRMYXlvdXQgbGF5
b3V0KHN0cmluZyk7CisgICAgbGF5b3V0LnNldFJhd0ZvbnQocmF3Rm9udCgpKTsKKyAgICBpbml0
Rm9ybWF0Rm9yVGV4dExheW91dCgmbGF5b3V0KTsKKyAgICBRVGV4dExpbmUgbGluZSA9IHNldHVw
TGF5b3V0KCZsYXlvdXQsIHJ1bik7CisgICAgZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWCgwKTsK
KyAgICBmbG9hdCB4MiA9IGxpbmUuY3Vyc29yVG9YKHJ1bi5sZW5ndGgoKSk7CisgICAgY29uc3Qg
aW50IHdpZHRoID0gcUFicyh4MiAtIHgxKTsKIAotICAgIHJldHVybiB3ICsgcnVuLmV4cGFuc2lv
bigpOworICAgIHJldHVybiB3aWR0aCArIHJ1bi5leHBhbnNpb24oKTsKIH0KIAogaW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCkgY29uc3QKQEAgLTI5Myw3ICsyMjIsOSBAQCBpbnQgRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBv
c2l0aW9uLCBibwogICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMo
cnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5nIHN0cmluZyA9IGZy
b21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCi0gICAgUVRleHRMYXlvdXQgbGF5b3V0
KHN0cmluZywgZm9udCgpKTsKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nKTsKKyAgICBs
YXlvdXQuc2V0UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRGb3JtYXRGb3JUZXh0TGF5b3V0
KCZsYXlvdXQpOwogICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91dCwgcnVu
KTsKICAgICByZXR1cm4gbGluZS54VG9DdXJzb3IocG9zaXRpb24pOwogfQpAQCAtMzAzLDE3ICsy
MzQsNjIgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQKICAgICBTdHJpbmcgc2FuaXRpemVkID0g
Rm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CiAg
ICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKIAot
ICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcsIGZvbnQoKSk7CisgICAgUVRleHRMYXlvdXQg
bGF5b3V0KHN0cmluZyk7CisgICAgbGF5b3V0LnNldFJhd0ZvbnQocmF3Rm9udCgpKTsKKyAgICBp
bml0Rm9ybWF0Rm9yVGV4dExheW91dCgmbGF5b3V0KTsKICAgICBRVGV4dExpbmUgbGluZSA9IHNl
dHVwTGF5b3V0KCZsYXlvdXQsIHJ1bik7CiAKICAgICBmbG9hdCB4MSA9IGxpbmUuY3Vyc29yVG9Y
KGZyb20pOwogICAgIGZsb2F0IHgyID0gbGluZS5jdXJzb3JUb1godG8pOwogICAgIGlmICh4MiA8
IHgxKQogICAgICAgICBxU3dhcCh4MSwgeDIpOworICAgIC8vIFRoaXMgaXMgZHVlIHRvIHRoZSB3
YXkgUVBhaW50ZXIgZHJhd3MgcmVjdGFuZ2xlcy4gSW4gb3JkZXIgZm9yIGNvbXBsZXggdGV4dCBz
ZWxlY3Rpb25zIG5vdCB0byBiZQorICAgIC8vIGJyb2tlbiB3aXRoIGJsYW5rcywgd2UgbmVlZCB0
byBtb3ZlIHRoZSBsZWZ0IHNpZGUgYmFjayBhIGJpdC4KKyAgICB4MSAtPSAxOwogCiAgICAgcmV0
dXJuIEZsb2F0UmVjdChwdC54KCkgKyB4MSwgcHQueSgpLCB4MiAtIHgxLCBoKTsKIH0KIAordm9p
ZCBGb250Ojppbml0Rm9ybWF0Rm9yVGV4dExheW91dChRVGV4dExheW91dCogbGF5b3V0KSBjb25z
dAoreworICAgIFFMaXN0PFFUZXh0TGF5b3V0OjpGb3JtYXRSYW5nZT4gb3ZlcnJpZGVzOworICAg
IFFUZXh0TGF5b3V0OjpGb3JtYXRSYW5nZSByYW5nZTsKKyAgICByYW5nZS5zdGFydCA9IDA7Cisg
ICAgcmFuZ2UubGVuZ3RoID0gbGF5b3V0LT50ZXh0KCkubGVuZ3RoKCk7CisgICAgaWYgKG1fd29y
ZFNwYWNpbmcpIHsKKyAgICAgICAgcmFuZ2UuZm9ybWF0LnNldEZvbnRXb3JkU3BhY2luZyhtX3dv
cmRTcGFjaW5nKTsKKyAgICAgICAgb3ZlcnJpZGVzIDw8IHJhbmdlOworICAgIH0KKyAgICBpZiAo
bV9sZXR0ZXJTcGFjaW5nKSB7CisgICAgICAgIHJhbmdlLmZvcm1hdCA9IFFUZXh0Q2hhckZvcm1h
dCgpOworICAgICAgICByYW5nZS5mb3JtYXQuc2V0Rm9udExldHRlclNwYWNpbmcobV9sZXR0ZXJT
cGFjaW5nKTsKKyAgICAgICAgb3ZlcnJpZGVzIDw8IHJhbmdlOworICAgIH0KKyAgICBpZiAodHlw
ZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykgeworICAgICAgICByYW5nZS5mb3JtYXQgPSBR
VGV4dENoYXJGb3JtYXQoKTsKKyAgICAgICAgcmFuZ2UuZm9ybWF0LnNldEZvbnRLZXJuaW5nKHRy
dWUpOworICAgICAgICBvdmVycmlkZXMgPDwgcmFuZ2U7CisgICAgfQorICAgIGlmIChpc1NtYWxs
Q2FwcygpKSB7CisgICAgICAgIGJvb2wgcHJldmlvdXNDaGFyV2FzTG93ZXJDYXNlID0gZmFsc2U7
CisgICAgICAgIGNvbnN0IFFTdHJpbmcgdGV4dCA9IGxheW91dC0+dGV4dCgpOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8PSB0ZXh0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghdGV4dC5hdChpKS5pc0xvd2VyKCkgJiYgcHJldmlvdXNDaGFyV2FzTG93ZXJDYXNlKSB7Cisg
ICAgICAgICAgICAgICAgcHJldmlvdXNDaGFyV2FzTG93ZXJDYXNlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgcmFuZ2UubGVuZ3RoID0gaSAtIHJhbmdlLnN0YXJ0OworICAgICAgICAgICAgICAg
IHJhbmdlLmZvcm1hdC5zZXRGb250Q2FwaXRhbGl6YXRpb24oUUZvbnQ6OlNtYWxsQ2Fwcyk7Cisg
ICAgICAgICAgICAgICAgb3ZlcnJpZGVzIDw8IHJhbmdlOworICAgICAgICAgICAgfSBlbHNlIGlm
ICh0ZXh0LmF0KGkpLmlzTG93ZXIoKSAmJiAhcHJldmlvdXNDaGFyV2FzTG93ZXJDYXNlKSB7Cisg
ICAgICAgICAgICAgICAgcHJldmlvdXNDaGFyV2FzTG93ZXJDYXNlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByYW5nZS5mb3JtYXQgPSBRVGV4dENoYXJGb3JtYXQoKTsKKyAgICAgICAgICAgICAg
ICByYW5nZS5zdGFydCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKCFvdmVycmlkZXMuaXNFbXB0eSgpKQorICAgICAgICBsYXlvdXQtPnNldEFkZGl0aW9uYWxG
b3JtYXRzKG92ZXJyaWRlcyk7Cit9CisKIGJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250
c0ZvckNvbXBsZXhUZXh0KCkKIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjQsNyArMzAwLDYg
QEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCogLyogY29udGV4dCAqLywgY29uc3QKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi0j
aWYgSEFWRShRUkFXRk9OVCkKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
QEAgLTMzMyw5ICszMDgsNiBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgYm9vbCBzaG91
bGRGaWxsID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGw7CiAgICAg
Ym9vbCBzaG91bGRTdHJva2UgPSBjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2Rl
U3Ryb2tlOwogCi0gICAgLy8gU3Ryb2tpbmcgdGV4dCBzaG91bGQgYWx3YXlzIHRha2UgdGhlIGNv
bXBsZXggcGF0aC4KLSAgICBBU1NFUlQoIXNob3VsZFN0cm9rZSk7Ci0KICAgICBpZiAoIXNob3Vs
ZEZpbGwgJiYgIXNob3VsZFN0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNDQsNiArMzE2
LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAogCiAgICAgZ2x5cGhJbmRleGVzLnJlc2VydmUo
bnVtR2x5cGhzKTsKICAgICBwb3NpdGlvbnMucmVzZXJ2ZShudW1HbHlwaHMpOworICAgIGNvbnN0
IFFSYXdGb250JiBmb250KGZvbnREYXRhLT5nZXRRdFJhd0ZvbnQoKSk7CiAKICAgICBmbG9hdCB3
aWR0aCA9IDA7CiAKQEAgLTM1NywxNjYgKzMzMCwzOSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEs
CiAgICAgICAgIHdpZHRoICs9IGFkdmFuY2U7CiAgICAgfQogCi0gICAgUVJhd0ZvbnQgcmF3Rm9u
dChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkucmF3Rm9udCgpKTsKLQogICAgIFFHbHlwaFJ1biBx
dEdseXBoczsKICAgICBxdEdseXBocy5zZXRHbHlwaEluZGV4ZXMoZ2x5cGhJbmRleGVzKTsKICAg
ICBxdEdseXBocy5zZXRQb3NpdGlvbnMocG9zaXRpb25zKTsKLSAgICBxdEdseXBocy5zZXRSYXdG
b250KHJhd0ZvbnQpOwotCi0gICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLQotICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IGNvbnRleHQtPnNoYWRvd0Js
dXIoKTsKLSAgICBzd2l0Y2ggKHNoYWRvdy0+dHlwZSgpKSB7Ci0gICAgY2FzZSBTaGFkb3dCbHVy
OjpTb2xpZFNoYWRvdzogewotICAgICAgICBRUGVuIHByZXZpb3VzUGVuID0gcGFpbnRlci0+cGVu
KCk7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihjb250ZXh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9y
KTsKLSAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY29udGV4dC0+c3RhdGUoKS5z
aGFkb3dPZmZzZXQud2lkdGgoKSwgY29udGV4dC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0
KCkpOwotICAgICAgICBwYWludGVyLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKLSAgICAgICAg
cGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBocyk7Ci0gICAgICAgIHBhaW50ZXIt
PnRyYW5zbGF0ZSgtc2hhZG93T2Zmc2V0KTsKLSAgICAgICAgcGFpbnRlci0+c2V0UGVuKHByZXZp
b3VzUGVuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgU2hhZG93Qmx1cjo6Qmx1
clNoYWRvdzogewotICAgICAgICBxcmVhbCBoZWlnaHQgPSByYXdGb250LmFzY2VudCgpICsgcmF3
Rm9udC5kZXNjZW50KCkgKyAxOwotICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHBvaW50Lngo
KSwgcG9pbnQueSgpIC0gcmF3Rm9udC5hc2NlbnQoKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXll
cihjb250ZXh0LCBib3VuZGluZ1JlY3QpOwotICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgewot
ICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjb250ZXh0
LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdH
bHlwaFJ1bihwb2ludCwgcXRHbHlwaHMpOwotICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dM
YXllcihjb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBTaGFkb3dCbHVyOjpOb1NoYWRvdzoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IFFQZW4gcHJldmlvdXNQZW4gPSBwYWludGVyLT5wZW4oKTsKLSAgICBwYWludGVyLT5zZXRQZW4o
ZmlsbFBlbkZvckNvbnRleHQoY29udGV4dCkpOwotICAgIHBhaW50ZXItPmRyYXdHbHlwaFJ1bihw
b2ludCwgcXRHbHlwaHMpOwotICAgIHBhaW50ZXItPnNldFBlbihwcmV2aW91c1Blbik7Ci19Ci0K
LWJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KKyAgICBxdEdseXBocy5zZXRSYXdGb250KGZvbnQpOwogCi0j
ZWxzZSAvLyAhSEFWRShRUkFXRk9OVCkKLQotdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFw
aGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBkcmF3VGV4dENvbW1vbihjdHgs
IHJ1biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCksIC8qIGlzQ29tcGxleFRleHQgPSAqL2ZhbHNl
KTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdAotewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVu
LmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21S
YXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotCi0gICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQo
KSk7Ci0gICAgZmxvYXQgZGVsdGEgPSBwb3NpdGlvbjsKLSAgICBpbnQgY3VyUG9zID0gMDsKLSAg
ICBkbyB7Ci0gICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IGZtLndpZHRoKHN0cmluZ1tjdXJQb3Nd
KTsKLSAgICAgICAgZGVsdGEgLT0gY2hhcldpZHRoOwotICAgICAgICBpZiAoaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIHsKLSAgICAgICAgICAgIGlmIChkZWx0YSArIGNoYXJXaWR0aCAvIDIgPD0gMCkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChkZWx0YSArIGNoYXJXaWR0aCA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfSB3aGlsZSAoKytjdXJQb3MgPCBzdHJpbmcuc2l6ZSgpKTsKLQotICAgIHJldHVy
biBjdXJQb3M7CisgICAgZHJhd1F0R2x5cGhSdW4oY29udGV4dCwgcXRHbHlwaHMsIHBvaW50LCAv
KiBiYXNlbGluZU9mZnNldCA9ICovMCk7CiB9CiAKIAotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIs
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVy
ZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKLXsKLSAgICBpZiAoIXByaW1hcnlGb250KCktPnBs
YXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXJ1bi5s
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9u
dDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7Ci0gICAg
UVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKLQotICAg
IGludCB3ID0gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgoc3RyaW5nLCAtMSwgUXQ6OlRleHRC
eXBhc3NTaGFwaW5nKTsKLQotICAgIC8vIFdlYktpdCBleHBlY3RzIHVzIHRvIGlnbm9yZSB3b3Jk
IHNwYWNpbmcgb24gdGhlIGZpcnN0IGNoYXJhY3RlciAoYXMgb3Bwb3NlZCB0byB3aGF0IFF0IGRv
ZXMpCi0gICAgaWYgKHRyZWF0QXNTcGFjZShydW5bMF0pKQotICAgICAgICB3IC09IG1fd29yZFNw
YWNpbmc7Ci0KLSAgICByZXR1cm4gdyArIHJ1bi5leHBhbnNpb24oKTsKLX0KLQotCi1GbG9hdFJl
Y3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwdCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0g
ICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVy
cygpLCBydW4ubGVuZ3RoKCkpOwotICAgIFFTdHJpbmcgd2hvbGVUZXh0ID0gZnJvbVJhd0RhdGFX
aXRob3V0UmVmKHNhbml0aXplZCk7Ci0gICAgUVN0cmluZyBzZWxlY3RlZFRleHQgPSBmcm9tUmF3
RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkLCBmcm9tLCBxTWluKHRvIC0gZnJvbSwgd2hvbGVUZXh0
Lmxlbmd0aCgpIC0gZnJvbSkpOwotCi0gICAgaW50IHN0YXJ0WCA9IFFGb250TWV0cmljcyhmb250
KCkpLndpZHRoKHdob2xlVGV4dCwgZnJvbSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsKLSAgICBp
bnQgd2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChzZWxlY3RlZFRleHQsIC0xLCBR
dDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCkgKyBz
dGFydFgsIHB0LnkoKSwgd2lkdGgsIGgpOwotfQotCiBib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgRm9udDo6cHJpbWFyeUZvbnRIYXNHbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBGb250
OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgRm9udDo6ZW1waGFzaXNN
YXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQo
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4
dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAq
LywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBw
b2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK1FGb250IEZvbnQ6
OnN5bnRoZXRpY0ZvbnQoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0jZW5k
aWYgLy8gSEFWRShRUkFXRk9OVCkKLQotUUZvbnQgRm9udDo6Zm9udCgpIGNvbnN0Ci17Ci0gICAg
UUZvbnQgZiA9IHByaW1hcnlGb250KCktPmdldFF0Rm9udCgpOwotICAgIGlmIChtX2xldHRlclNw
YWNpbmcgIT0gMCkKKyAgICBRUmF3Rm9udCByYXdGb250KHByaW1hcnlGb250KCktPmdldFF0UmF3
Rm9udCgpKTsKKyAgICBRRm9udCBmID0gUUZvbnQocmF3Rm9udC5mYW1pbHlOYW1lKCkpOworICAg
IGlmIChyYXdGb250LnBpeGVsU2l6ZSgpKQorICAgICAgICBmLnNldFBpeGVsU2l6ZShyYXdGb250
LnBpeGVsU2l6ZSgpKTsKKyAgICBmLnNldFdlaWdodChyYXdGb250LndlaWdodCgpKTsKKyAgICBm
LnNldFN0eWxlKHJhd0ZvbnQuc3R5bGUoKSk7CisgICAgaWYgKG1fbGV0dGVyU3BhY2luZykKICAg
ICAgICAgZi5zZXRMZXR0ZXJTcGFjaW5nKFFGb250OjpBYnNvbHV0ZVNwYWNpbmcsIG1fbGV0dGVy
U3BhY2luZyk7Ci0gICAgaWYgKG1fd29yZFNwYWNpbmcgIT0gMCkKKyAgICBpZiAobV93b3JkU3Bh
Y2luZykKICAgICAgICAgZi5zZXRXb3JkU3BhY2luZyhtX3dvcmRTcGFjaW5nKTsKICAgICByZXR1
cm4gZjsKIH0KIAogCitRUmF3Rm9udCBGb250OjpyYXdGb250KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcHJpbWFyeUZvbnQoKS0+Z2V0UXRSYXdGb250KCk7CiB9CiAKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdDQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0NC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThhZjA5
ODY1ZjkzN2QwNzQzNTkyMWExMmIxMmNiYjEyM2NjYjEyOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdDQuY3BwCkBAIC0wLDAgKzEs
NDMwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZvbnQuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKKyNpbmNsdWRlICJG
b250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYWRp
ZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKworI2luY2x1ZGUgPFFCcnVzaD4KKyNpbmNsdWRlIDxRRm9u
dEluZm8+CisjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2lu
Y2x1ZGUgPFFQYWludGVyUGF0aD4KKyNpbmNsdWRlIDxRUGVuPgorI2luY2x1ZGUgPFFUZXh0TGF5
b3V0PgorI2luY2x1ZGUgPHFhbGdvcml0aG1zLmg+CisjaW5jbHVkZSA8cWRlYnVnLmg+CisKKyNp
bmNsdWRlIDxsaW1pdHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3Qg
UVN0cmluZyBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBz
dGFydCA9IDAsIGludCBsZW4gPSAtMSkKK3sKKyAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgbGVu
ID0gc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQ7CisgICAgUV9BU1NFUlQoc3RhcnQgKyBsZW4gPD0g
c3RyaW5nLmxlbmd0aCgpKTsKKworICAgIC8vIFdlIGRvbid0IGRldGFjaC4gVGhpcyBhc3N1bWVz
IHRoZSBXZWJDb3JlIHN0cmluZyBkYXRhIHdpbGwgc3RheSB2YWxpZCBmb3IgdGhlCisgICAgLy8g
bGlmZXRpbWUgb2YgdGhlIFFTdHJpbmcgd2UgcGFzcyBiYWNrLCBzaW5jZSB3ZSBkb24ndCByZWYg
dGhlIFdlYkNvcmUgc3RyaW5nLgorICAgIHJldHVybiBRU3RyaW5nOjpmcm9tUmF3RGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oc3RyaW5nLmNoYXJhY3RlcnMoKSArIHN0YXJ0KSwg
bGVuKTsKK30KKworc3RhdGljIFFUZXh0TGluZSBzZXR1cExheW91dChRVGV4dExheW91dCogbGF5
b3V0LCBjb25zdCBUZXh0UnVuJiBzdHlsZSkKK3sKKyAgICBpbnQgZmxhZ3MgPSBzdHlsZS5ydGwo
KSA/IFF0OjpUZXh0Rm9yY2VSaWdodFRvTGVmdCA6IFF0OjpUZXh0Rm9yY2VMZWZ0VG9SaWdodDsK
KyAgICBpZiAoc3R5bGUuZXhwYW5zaW9uKCkpCisgICAgICAgIGZsYWdzIHw9IFF0OjpUZXh0SnVz
dGlmaWNhdGlvbkZvcmNlZDsKKyAgICBsYXlvdXQtPnNldEZsYWdzKGZsYWdzKTsKKyAgICBsYXlv
dXQtPmJlZ2luTGF5b3V0KCk7CisgICAgUVRleHRMaW5lIGxpbmUgPSBsYXlvdXQtPmNyZWF0ZUxp
bmUoKTsKKyAgICBsaW5lLnNldExpbmVXaWR0aChJTlRfTUFYLzI1Nik7CisgICAgaWYgKHN0eWxl
LmV4cGFuc2lvbigpKQorICAgICAgICBsaW5lLnNldExpbmVXaWR0aChsaW5lLm5hdHVyYWxUZXh0
V2lkdGgoKSArIHN0eWxlLmV4cGFuc2lvbigpKTsKKyAgICBsYXlvdXQtPmVuZExheW91dCgpOwor
ICAgIHJldHVybiBsaW5lOworfQorCitzdGF0aWMgUVBlbiBmaWxsUGVuRm9yQ29udGV4dChHcmFw
aGljc0NvbnRleHQqIGN0eCkKK3sKKyAgICBpZiAoY3R4LT5maWxsR3JhZGllbnQoKSkgeworICAg
ICAgICBRQnJ1c2ggYnJ1c2goKmN0eC0+ZmlsbEdyYWRpZW50KCktPnBsYXRmb3JtR3JhZGllbnQo
KSk7CisgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShjdHgtPmZpbGxHcmFkaWVudCgpLT5ncmFk
aWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICByZXR1cm4gUVBlbihicnVzaCwgMCk7Cisg
ICAgfQorCisgICAgaWYgKGN0eC0+ZmlsbFBhdHRlcm4oKSkgeworICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gYWZmaW5lOworICAgICAgICByZXR1cm4gUVBlbihRQnJ1c2goY3R4LT5maWxsUGF0dGVy
bigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSksIDApOworICAgIH0KKworICAgIHJl
dHVybiBRUGVuKFFDb2xvcihjdHgtPmZpbGxDb2xvcigpKSk7Cit9CisKK3N0YXRpYyBRUGVuIHN0
cm9rZVBlbkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgpCit7CisgICAgaWYgKGN0eC0+
c3Ryb2tlR3JhZGllbnQoKSkgeworICAgICAgICBRQnJ1c2ggYnJ1c2goKmN0eC0+c3Ryb2tlR3Jh
ZGllbnQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3Jt
KGN0eC0+c3Ryb2tlR3JhZGllbnQoKS0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAg
ICAgcmV0dXJuIFFQZW4oYnJ1c2gsIGN0eC0+c3Ryb2tlVGhpY2tuZXNzKCkpOworICAgIH0KKwor
ICAgIGlmIChjdHgtPnN0cm9rZVBhdHRlcm4oKSkgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
YWZmaW5lOworICAgICAgICBRQnJ1c2ggYnJ1c2goY3R4LT5zdHJva2VQYXR0ZXJuKCktPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKTsKKyAgICAgICAgcmV0dXJuIFFQZW4oYnJ1c2gsIGN0
eC0+c3Ryb2tlVGhpY2tuZXNzKCkpOworICAgIH0KKworICAgIHJldHVybiBRUGVuKFFDb2xvcihj
dHgtPnN0cm9rZUNvbG9yKCkpLCBjdHgtPnN0cm9rZVRoaWNrbmVzcygpKTsKK30KKworc3RhdGlj
IHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IFFG
b250JiBmb250LCBib29sIGlzQ29tcGxleFRleHQpCit7CisgICAgaWYgKHRvIDwgMCkKKyAgICAg
ICAgdG8gPSBydW4ubGVuZ3RoKCk7CisKKyAgICBRUGFpbnRlciAqcCA9IGN0eC0+cGxhdGZvcm1D
b250ZXh0KCk7CisKKyAgICBRUGVuIHRleHRGaWxsUGVuOworICAgIGlmIChjdHgtPnRleHREcmF3
aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKQorICAgICAgICB0ZXh0RmlsbFBlbiA9IGZpbGxQZW5G
b3JDb250ZXh0KGN0eCk7CisKKyAgICBRUGVuIHRleHRTdHJva2VQZW47CisgICAgaWYgKGN0eC0+
dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgdGV4dFN0cm9rZVBl
biA9IHN0cm9rZVBlbkZvckNvbnRleHQoY3R4KTsKKworICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBG
b250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAg
ICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOworICAg
IFFQb2ludEYgcHQocG9pbnQueCgpLCBwb2ludC55KCkpOworCisgICAgaWYgKGZyb20gPiAwIHx8
IHRvIDwgcnVuLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChpc0NvbXBsZXhUZXh0KSB7CisgICAg
ICAgICAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nLCBmb250KTsKKyAgICAgICAgICAgIFFU
ZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91dCwgcnVuKTsKKyAgICAgICAgICAgIGZs
b2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJvbSk7CisgICAgICAgICAgICBmbG9hdCB4MiA9IGxp
bmUuY3Vyc29yVG9YKHRvKTsKKyAgICAgICAgICAgIGlmICh4MiA8IHgxKQorICAgICAgICAgICAg
ICAgIHFTd2FwKHgxLCB4Mik7CisKKyAgICAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250KTsK
KyAgICAgICAgICAgIGludCBhc2NlbnQgPSBmbS5hc2NlbnQoKTsKKyAgICAgICAgICAgIFFSZWN0
RiBib3VuZGluZ1JlY3QocG9pbnQueCgpICsgeDEsIHBvaW50LnkoKSAtIGFzY2VudCwgeDIgLSB4
MSwgZm0uaGVpZ2h0KCkpOworICAgICAgICAgICAgUVJlY3RGIGNsaXAgPSBib3VuZGluZ1JlY3Q7
CisKKyAgICAgICAgICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigp
OworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hh
ZG93KSB7CisgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY3R4LT5z
dGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0Lmhl
aWdodCgpKTsKKyAgICAgICAgICAgICAgICBxcmVhbCBkeDEgPSAwLCBkeDIgPSAwLCBkeTEgPSAw
LCBkeTIgPSAwOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dPZmZzZXQueCgpID4gMCkKKyAg
ICAgICAgICAgICAgICAgICAgZHgyID0gc2hhZG93T2Zmc2V0LngoKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGR4MSA9IC1zaGFkb3dPZmZzZXQueCgpOworICAg
ICAgICAgICAgICAgIGlmIChzaGFkb3dPZmZzZXQueSgpID4gMCkKKyAgICAgICAgICAgICAgICAg
ICAgZHkyID0gc2hhZG93T2Zmc2V0LnkoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGR5MSA9IC1zaGFkb3dPZmZzZXQueSgpOworICAgICAgICAgICAgICAgIC8v
IGV4cGFuZCB0aGUgY2xpcCByZWN0IHRvIGluY2x1ZGUgdGhlIHRleHQgc2hhZG93IGFzIHdlbGwK
KyAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBibHVyRGlzdGFuY2UgPSBjdHgtPnN0YXRlKCku
c2hhZG93Qmx1cjsKKyAgICAgICAgICAgICAgICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBk
eTIpOworICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KC1ibHVyRGlzdGFuY2UsIC1ibHVyRGlz
dGFuY2UsIGJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHAtPnNhdmUoKTsKKyAgICAgICAgICAgIHAtPnNldENsaXBSZWN0KGNsaXAudG9SZWN0
KCksIFF0OjpJbnRlcnNlY3RDbGlwKTsKKyAgICAgICAgICAgIHB0LnNldFkocHQueSgpIC0gYXNj
ZW50KTsKKworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6
Ok5vU2hhZG93KSB7CisgICAgICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4
LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9
IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cKKyAgICAgICAgICAgICAgICAgICAgJiYgKCFjdHhTaGFk
b3ctPnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY3R4LT5nZXRDVE0oKS5pc0lkZW50aXR5
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHAtPnNhdmUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcC0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAg
ICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgo
KSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAg
ICAgICBsaW5lLmRyYXcocCwgcHQpOworICAgICAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwg
Ym91bmRpbmdSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
aW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRl
ciBoaW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQo
cC0+Zm9udCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBl
bihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZS5kcmF3KHNoYWRvd1BhaW50ZXIsIHB0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eFNo
YWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHAtPnNldFBlbih0ZXh0Rmls
bFBlbik7CisgICAgICAgICAgICBsaW5lLmRyYXcocCwgcHQpOworICAgICAgICAgICAgcC0+cmVz
dG9yZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGludCBza2lw
V2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCkud2lkdGgoc3RyaW5nLCBmcm9tLCBRdDo6VGV4dEJ5
cGFzc1NoYXBpbmcpOworICAgICAgICBwdC5zZXRYKHB0LngoKSArIHNraXBXaWR0aCk7CisgICAg
ICAgIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQsIGZyb20sIHRvIC0g
ZnJvbSk7CisgICAgfQorCisgICAgcC0+c2V0Rm9udChmb250KTsKKworICAgIGludCBmbGFncyA9
IHJ1bi5ydGwoKSA/IFF0OjpUZXh0Rm9yY2VSaWdodFRvTGVmdCA6IFF0OjpUZXh0Rm9yY2VMZWZ0
VG9SaWdodDsKKyAgICBpZiAoIWlzQ29tcGxleFRleHQgJiYgIShjdHgtPnRleHREcmF3aW5nTW9k
ZSgpICYgVGV4dE1vZGVTdHJva2UpKQorICAgICAgICBmbGFncyB8PSBRdDo6VGV4dEJ5cGFzc1No
YXBpbmc7CisKKyAgICBRUGFpbnRlclBhdGggdGV4dFN0cm9rZVBhdGg7CisgICAgaWYgKGN0eC0+
dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgdGV4dFN0cm9rZVBh
dGguYWRkVGV4dChwdCwgZm9udCwgc3RyaW5nKTsKKworICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRv
dyA9IGN0eC0+c2hhZG93Qmx1cigpOworICAgIGlmIChjdHgtPmhhc1NoYWRvdygpICYmIGN0eFNo
YWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAgIGlmIChjdHgt
PnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7CisgICAgICAgICAgICBpZiAoY3R4
U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdykgeworICAgICAgICAgICAg
ICAgIHAtPnNhdmUoKTsKKyAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNo
YWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0
YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVp
Z2h0KCkpKTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywg
cnVuLmV4cGFuc2lvbigpKTsKKyAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250KTsKKyAg
ICAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0u
YXNjZW50KCksIGZtLndpZHRoKHN0cmluZywgLTEsIGZsYWdzKSwgZm0uaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+
YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAgICAgaWYg
KHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1Bh
aW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBh
Ym91dCByZW5kZXIgaGludHMuCisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNl
dEZvbnQocC0+Zm9udCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5zaW9uKCkpOwor
ICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGN0eC0+dGV4
dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgeworICAgICAgICAgICAgaWYgKGN0eFNo
YWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0Lndp
ZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQpOworICAgICAgICAgICAgICAgIHAtPnN0cm9r
ZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7Cisg
ICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1zaGFkb3dPZmZzZXQpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udCk7CisgICAgICAg
ICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwdC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2Vu
dCgpLCBmbS53aWR0aChzdHJpbmcsIC0xLCBmbGFncyksIGZtLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFk
b3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVy
ID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgICAgICAgICAgICAgICAg
IC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQg
cmVuZGVyIGhpbnRzLgorICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250
KHAtPmZvbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBh
dGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CisgICAg
ICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3R4
LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQorICAgICAgICBwLT5zdHJva2VQ
YXRoKHRleHRTdHJva2VQYXRoLCB0ZXh0U3Ryb2tlUGVuKTsKKworICAgIGlmIChjdHgtPnRleHRE
cmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7CisgICAgICAgIFFQZW4gcHJldmlvdXNQZW4g
PSBwLT5wZW4oKTsKKyAgICAgICAgcC0+c2V0UGVuKHRleHRGaWxsUGVuKTsKKyAgICAgICAgcC0+
ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7CisgICAgICAgIHAt
PnNldFBlbihwcmV2aW91c1Blbik7CisgICAgfQorfQorCit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBkcmF3VGV4dENv
bW1vbihjdHgsIHJ1biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCksIC8qIGlzQ29tcGxleFRleHQg
PSAqL3RydWUpOworfQorCitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92
ZXJmbG93KikgY29uc3QKK3sKKyAgICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgp
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXJ1bi5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAocnVuLmxlbmd0aCgpID09IDEgJiYgdHJlYXRBc1Nw
YWNlKHJ1blswXSkpCisgICAgICAgIHJldHVybiBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChz
cGFjZSkgKyBydW4uZXhwYW5zaW9uKCk7CisKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6
bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgUVN0
cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKKworICAgIGlu
dCB3ID0gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgoc3RyaW5nKTsKKyAgICAvLyBXZWJLaXQg
ZXhwZWN0cyB1cyB0byBpZ25vcmUgd29yZCBzcGFjaW5nIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIg
KGFzIG9wcG9zZWQgdG8gd2hhdCBRdCBkb2VzKQorICAgIGlmICh0cmVhdEFzU3BhY2UocnVuWzBd
KSkKKyAgICAgICAgdyAtPSBtX3dvcmRTcGFjaW5nOworCisgICAgcmV0dXJuIHcgKyBydW4uZXhw
YW5zaW9uKCk7Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJvb2wpIGNvbnN0Cit7CisgICAg
U3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygp
LCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0
UmVmKHNhbml0aXplZCk7CisKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nLCBmb250KCkp
OworICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91dCwgcnVuKTsKKyAgICBy
ZXR1cm4gbGluZS54VG9DdXJzb3IocG9zaXRpb24pOworfQorCitGbG9hdFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQ
b2ludCYgcHQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIFN0cmluZyBz
YW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxl
bmd0aCgpKTsKKyAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5p
dGl6ZWQpOworCisgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZywgZm9udCgpKTsKKyAgICBR
VGV4dExpbmUgbGluZSA9IHNldHVwTGF5b3V0KCZsYXlvdXQsIHJ1bik7CisKKyAgICBmbG9hdCB4
MSA9IGxpbmUuY3Vyc29yVG9YKGZyb20pOworICAgIGZsb2F0IHgyID0gbGluZS5jdXJzb3JUb1go
dG8pOworICAgIGlmICh4MiA8IHgxKQorICAgICAgICBxU3dhcCh4MSwgeDIpOworCisgICAgcmV0
dXJuIEZsb2F0UmVjdChwdC54KCkgKyB4MSwgcHQueSgpLCB4MiAtIHgxLCBoKTsKK30KKworYm9v
bCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVu
ICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8q
IHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgZHJhd1RleHRDb21tb24oY3R4LCBydW4s
IHBvaW50LCBmcm9tLCB0bywgZm9udCgpLCAvKiBpc0NvbXBsZXhUZXh0ID0gKi9mYWxzZSk7Cit9
CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QK
K3sKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFy
YWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0
YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKKworICAgIFFGb250TWV0cmljcyBmbShmb250KCkpOwor
ICAgIGZsb2F0IGRlbHRhID0gcG9zaXRpb247CisgICAgaW50IGN1clBvcyA9IDA7CisgICAgZG8g
eworICAgICAgICBmbG9hdCBjaGFyV2lkdGggPSBmbS53aWR0aChzdHJpbmdbY3VyUG9zXSk7Cisg
ICAgICAgIGRlbHRhIC09IGNoYXJXaWR0aDsKKyAgICAgICAgaWYgKGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKSB7CisgICAgICAgICAgICBpZiAoZGVsdGEgKyBjaGFyV2lkdGggLyAyIDw9IDApCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZGVs
dGEgKyBjaGFyV2lkdGggPD0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0gd2hpbGUgKCsrY3VyUG9zIDwgc3RyaW5nLnNpemUoKSk7CisKKyAgICByZXR1cm4gY3Vy
UG9zOworfQorCisKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cp
IGNvbnN0Cit7CisgICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zaXplKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFydW4ubGVuZ3RoKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhy
dW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3RyaW5nID0gZnJv
bVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisKKyAgICBpbnQgdyA9IFFGb250TWV0cmlj
cyhmb250KCkpLndpZHRoKHN0cmluZywgLTEsIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7CisKKyAg
ICAvLyBXZWJLaXQgZXhwZWN0cyB1cyB0byBpZ25vcmUgd29yZCBzcGFjaW5nIG9uIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgKGFzIG9wcG9zZWQgdG8gd2hhdCBRdCBkb2VzKQorICAgIGlmICh0cmVhdEFz
U3BhY2UocnVuWzBdKSkKKyAgICAgICAgdyAtPSBtX3dvcmRTcGFjaW5nOworCisgICAgcmV0dXJu
IHcgKyBydW4uZXhwYW5zaW9uKCk7Cit9CisKKworRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJl
Y3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQs
IGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIFN0cmluZyBzYW5pdGl6ZWQg
PSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsK
KyAgICBRU3RyaW5nIHdob2xlVGV4dCA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQp
OworICAgIFFTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0
aXplZCwgZnJvbSwgcU1pbih0byAtIGZyb20sIHdob2xlVGV4dC5sZW5ndGgoKSAtIGZyb20pKTsK
KworICAgIGludCBzdGFydFggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aCh3aG9sZVRleHQs
IGZyb20sIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7CisgICAgaW50IHdpZHRoID0gUUZvbnRNZXRy
aWNzKGZvbnQoKSkud2lkdGgoc2VsZWN0ZWRUZXh0LCAtMSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5n
KTsKKworICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpICsgc3RhcnRYLCBwdC55KCksIHdpZHRo
LCBoKTsKK30KKworYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4
VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZvbnQ6OnByaW1hcnlGb250
SGFzR2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgRm9udDo6ZW1waGFzaXNNYXJrQXNjZW50
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworaW50IEZvbnQ6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRv
bWljU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OworfQorCitpbnQgRm9udDo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiAv
KiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9t
ICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
UUZvbnQgRm9udDo6Zm9udCgpIGNvbnN0Cit7CisgICAgUUZvbnQgZiA9IHByaW1hcnlGb250KCkt
PmdldFF0Rm9udCgpOworICAgIGlmIChtX2xldHRlclNwYWNpbmcgIT0gMCkKKyAgICAgICAgZi5z
ZXRMZXR0ZXJTcGFjaW5nKFFGb250OjpBYnNvbHV0ZVNwYWNpbmcsIG1fbGV0dGVyU3BhY2luZyk7
CisgICAgaWYgKG1fd29yZFNwYWNpbmcgIT0gMCkKKyAgICAgICAgZi5zZXRXb3JkU3BhY2luZyht
X3dvcmRTcGFjaW5nKTsKKyAgICByZXR1cm4gZjsKK30KKworCit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAK
aW5kZXggZTk1YjhjNWVhMjI0MmRiY2FhY2YyNmRkOTllYmM0ZDM0OGE3N2QzYy4uZjA2NjhmZTAz
YWEyZTMzZDM3NWUwNjYzNmE1NzM4ZDEyMmZhYzA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAKQEAgLTE2
Myw3ICsxNjMsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIGZs
b2F0IGxpbmVHYXAgPSBsaW5lU3BhY2luZyAtIGFzY2VudCAtIGRlc2NlbnQ7CiAKICAgICBtX2Zv
bnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2Vu
dChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQocUFicyhkZXNjZW50KSk7
CiAgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CiAgICAgbV9m
b250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwogICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZUdhcChsaW5lR2FwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUVN0eWxlLmNwcAppbmRleCA3NTg1OWQ4YjQ5Njg3YzRlNjNjOTMzZThmNGYwN2NhMjBiZjg4
ZDdhLi4yODhmMTgxZGM2NmJlZDVlMWE2Yzc4ODU3NTEwMjU2ZGUzOWVkYTNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0yMTIs
NyArMjEyLDcgQEAgUVJlY3QgUmVuZGVyVGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNv
bnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0CiB2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpj
b21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0CiB7
CiAgICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVy
U3R5bGUtPmZvbnQoKS5mb250KCkpOworICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJT
dHlsZS0+Zm9udCgpLnN5bnRoZXRpY0ZvbnQoKSk7CiAgICAgUVN0eWxlKiBzdHlsZSA9IHFTdHls
ZSgpOwogCiAgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCmluZGV4IDVjNmMxODc2MzUx
YmZkYzZiZTQ3ODAwMTM5MTQ2MTUxODhkODA3Y2EuLjA2NjUzNTkyZTQ2YjM2OTRkZGRhZmY1OWVk
NDJmMzg5M2ZhYTZkYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuY3BwCkBAIC04NTUsNyArODU1LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZpbGVM
aXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnMKICAg
ICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKICAgICBlbHNl
IGlmIChmaWxlbmFtZXMuc2l6ZSgpID09IDEpIHsKICAgICAgICAgU3RyaW5nIGZuYW1lID0gZmls
ZW5hbWVzWzBdOwotICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udC5mb250KCkpOworICAgICAg
ICBRRm9udE1ldHJpY3MgZm0oZm9udC5zeW50aGV0aWNGb250KCkpOwogICAgICAgICBzdHJpbmcg
PSBmbS5lbGlkZWRUZXh0KGZuYW1lLCBRdDo6RWxpZGVMZWZ0LCB3aWR0aCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaW50IG4gPSBmaWxlbmFtZXMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAppbmRleCBjMmY0MjI4YjAw
OTI4ZThiMmMxYzQyN2JkMGU3YjhhNzQ3MDQyYzEwLi41MzBmN2ZhNDI2YjNjZmY0YzYyNThlZGY1
YzFhZDQxZTFhODQ5ODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVF0TW9iaWxlLmNwcApAQCAtNDcsNyArNDcsNiBAQAogCiAjaW5jbHVkZSA8UUNv
bG9yPgogI2luY2x1ZGUgPFFGaWxlPgotI2luY2x1ZGUgPFFGb250TWV0cmljcz4KICNpbmNsdWRl
IDxRUGFpbnRlcj4KICNpbmNsdWRlIDxRUGl4bWFwQ2FjaGU+CiAKQEAgLTU5NSw3ICs1OTQsNiBA
QCBpbnQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogdm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRl
U2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0CiB7CiAgICAg
UVNpemUgc2l6ZSgwLCAwKTsKLSAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUt
PmZvbnQoKS5mb250KCkpOwogCiAgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgp
KSB7CiAgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CkBAIC02MzIsNyArNjMwLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVu
ZGVyU3R5bGUpIGNvbnMKICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgIGNhc2UgQnV0
dG9uUGFydDoKICAgICBjYXNlIE1lbnVsaXN0UGFydDogewotICAgICAgICBjb25zdCBpbnQgaGVp
Z2h0ID0gZm0uaGVpZ2h0KCkgKiBidXR0b25IZWlnaHRSYXRpbyAqIHJlbmRlclN0eWxlLT5lZmZl
Y3RpdmVab29tKCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSByZW5kZXJTdHlsZS0+Zm9u
dE1ldHJpY3MoKS5oZWlnaHQoKSAqIGJ1dHRvbkhlaWdodFJhdGlvICogcmVuZGVyU3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKTsKICAgICAgICAgc2l6ZSA9IFFTaXplKHJlbmRlclN0eWxlLT53aWR0aCgp
LnZhbHVlKCksIGhlaWdodCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmNwcAppbmRleCBmOTRkNDQ1ODlmOTY1MzJiYTU5OWZkNDQ5YzMwMjAyYzljNzc2Mzky
Li40YjAwOGQ3MjgzMGY0YTA3OThhYzA1ZjhhMDJiYmJlMmRhNzZkMDQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwCkBAIC0xNDI1LDcgKzE0MjUsNyBAQCBRVmFyaWFudCBRV2ViUGFnZTo6
aW5wdXRNZXRob2RRdWVyeShRdDo6SW5wdXRNZXRob2RRdWVyeSBwcm9wZXJ0eSkgY29uc3QKICAg
ICAgICAgY2FzZSBRdDo6SW1Gb250OiB7CiAgICAgICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRy
b2wpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJU
ZXh0Q29udHJvbC0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoUUZv
bnQocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
UVZhcmlhbnQoUUZvbnQocmVuZGVyU3R5bGUtPmZvbnQoKS5zeW50aGV0aWNGb250KCkpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChRRm9udCgpKTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1l
bnVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNw
cAppbmRleCA3ZDY1ZjVjYmYxMDAyYWU5ZTU1ZDAwMTM2MmM5Y2E4ZGNhZWMwODg0Li4yOWU0NjI0
ZWJkM2UyMTRjNWZmYTc2ZDYwZjY0MmY3ZjYwZGI4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZv
aWQgUG9wdXBNZW51UXQ6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3
LCBpbnQgaW5kZXgpCiAgICAgUVJlY3QgZ2VvbWV0cnkocmVjdCk7CiAgICAgZ2VvbWV0cnkubW92
ZVRvcExlZnQodmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKICAgICBt
X3BvcHVwLT5zZXRHZW9tZXRyeShnZW9tZXRyeSk7Ci0gICAgbV9wb3B1cC0+c2V0Rm9udChtX3Bv
cHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkuZm9udCgpKTsKKyAgICBtX3BvcHVwLT5zZXRG
b250KG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5zeW50aGV0aWNGb250KCkpOwog
CiAgICAgbV9zZWxlY3REYXRhID0gYWRvcHRQdHIobmV3IFNlbGVjdERhdGEobV9wb3B1cENsaWVu
dCkpOwogICAgIG1fcG9wdXAtPnNob3coKm1fc2VsZWN0RGF0YS5nZXQoKSk7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjI5NTUxYTA2NDY3MzVl
Y2I3ZGQwNzg2ZTAzNGRjY2JjNTk2ZWYwNC4uZGQxYzczMTMwYzdjZDQ3OGJlOTYwNWEwNzU3MTEy
OTIzZmE4ZDg4YSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAyLTA3ICBQaWVycmUgUm9zc2kgIDxwaWVycmUu
cm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gVXNlIFFSYXdGb250IHdoZW4gYnVpbGRp
bmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03ODAwMQorCisgICAgICAgIEZsaXAgdGhlIFFSYXdGb250IHN3aXRjaCBmb3IgUXQgNS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHFtYWtl
L21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmOgorCiAyMDEyLTAyLTAyICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtQZXJmb3JtYW5jZVRlc3RzXSB0ZXN0
cyBoYXZlIGRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVz
LnByZgppbmRleCA4ZmQ4MmI0N2Q3NDcxNDM0YzcwZWU5ZGE3MWFiMWMxMzc3YWJiYzI1Li5iOTM4
MjkwNjlmZTAwMDNjNzQ3ZDkxMzIwZTMwMzgzZjNjMTdhNDExIDEwMDY0NAotLS0gYS9Ub29scy9x
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtMjA3LDYgKzIwNyw5IEBAIGNvbnRhaW5zKE1P
QklMSVRZX0NPTkZJRywgc2Vuc29ycykgewogCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZV
TExTQ1JFRU5fQVBJPS4pOiBERUZJTkVTICs9IEVOQUJMRV9GVUxMU0NSRUVOX0FQST0wCiAKKyMg
VXNlIG9mIFFSYXdGb250IGluIFF0IDU6CitoYXZlUXQoNSk6IERFRklORVMgKz0gSEFWRV9RUkFX
Rk9OVD0xCisKICMjIEZvcndhcmQgZW5hYmxlZCBmZWF0dXJlIG1hY3JvcyB0byBKYXZhU2NyaXB0
IGVuYWJsZWQgZmVhdHVyZXMgbWFjcm9zCiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCA9IExB
TkdVQUdFX0pBVkFTQ1JJUFQ9MQogdjg6IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IFY4
X0JJTkRJTkc9MQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126066</attachid>
            <date>2012-02-08 05:48:37 -0800</date>
            <delta_ts>2012-02-08 10:27:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78001-20120208144711.patch</filename>
            <type>text/plain</type>
            <size>67127</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJkNzlmMDA2ZjRlZjI1
ZGZlY2JiZTE4NDIwMmU2MzA1Mjg1MTNhYS4uZmUyOWU3ZjlhZjA1YjIwNjM2NDIzMTIwOTM5ZjEy
NmIzZDk5MWM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEyLTAyLTA3ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gVXNlIFFS
YXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAgIFVwIHVudGlsIG5vdywgZm9u
dHMgaW4gdGhlIFF0IHBvcnQgaGF2ZSBiZWVuIGhhbmRsZWQgdmlhCisgICAgICAgIHRoZSBRRm9u
dCBBUEkuIFFSYXdGb250IG9mZmVycyBhIGxvd2VyLWxldmVsIEFQSSBlbmFibGluZworICAgICAg
ICB1cyB0byBiZSBtb3JlIGluIGxpbmUgd2l0aCB3aGF0IG90aGVyIFdlYktpdCBwb3J0cyBkby4K
KyAgICAgICAgVGhpcyBwYXRjaCBwcm9jZWVkcyB0byBzd2l0Y2hpbmcgb3ZlciB0byBRUmF3Rm9u
dCwgYW5kCisgICAgICAgIGVmZmVjdGl2ZWx5IHVzZSBhbiBlYXJsaWVyIGNoYW5nZSBieSBBbmRy
ZWFzIEtsaW5nCisgICAgICAgIHRoYXQgcmVtYWluZWQgZ3VhcmRlZCB1cCB1bnRpbCBub3cuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIHNpbmNlIHRoaXMgaXMgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcKKyAgICAgICAgZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoRm9udCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5bnRoZXRpY0ZvbnQpOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAg
ICAoU2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6Omdl
dFF0UmF3Rm9udCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyYXdGb250Rm9yQ2hh
cmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5G
b250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YVByaXZh
dGU6OkZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZp
bGxQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhGb3JHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd1F0R2x5cGhSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojppbml0Rm9ybWF0Rm9yVGV4dExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c3ludGhldGljRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpyYXdGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQ0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFF0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJvbVJhd0RhdGFXaXRob3V0UmVmKToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OnN0cm9rZVBlbkZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24p
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3U2ltcGxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6cHJpbWFyeUZvbnRIYXNHbHlwaEZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjplbXBoYXNpc01hcmtBc2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZW1waGFz
aXNNYXJrRGVzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjplbXBoYXNpc01hcmtIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZv
cldpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRP
blN0eWxlKToKKwogMjAxMi0wMi0wMiAgUmF1bCBIdWRlYSAgPHJodWRlYUBhZG9iZS5jb20+CiAK
ICAgICAgICAgUmVnaW9ucyBzaG91bGQgaWdub3JlIHRoZSBzYXZlZCBjdXJyZW50UmVuZGVyRmxv
d1RocmVhZCBkdXJpbmcgcmVwYWludGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAwYjg1NGY5NTJhNmI4
MzA3ODc2NjBlZTdhZGIxZWI0YjczOGY0NGE1Li43Yjk4YjRlNDNlOTE3ZTQxMGRmNDI0MDQ0MzBj
YmM2ODAzYWExZTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAyLTA3
ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0g
VXNlIFFSYXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAgIFNpbmNlIFFGb250
IGlzIG5vdCB1c2VkIGludGVybmFsbHksIHdlIG5vdyBuZWVkCisgICAgICAgIHRvIHF1ZXJ5IGZv
ciBhIFFGb250IHRoYXQgc2hvdWxkIGJlIGEgZ29vZAorICAgICAgICBlbm91Z2ggbWF0Y2guCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdl
YnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnkpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVF0OjpzaG93KToKKwogMjAxMi0wMi0wMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJh
IEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIEF2b2lkIGNy
ZWF0aW5nIE5hbWVkTm9kZU1hcCB1bm5lY2Vzc2FyaWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBmYzZmNmU2
NGYzOGYzYzlhZDliMThjMWJjNGI2NGJjMDdjN2FkZTY1Li42YTZhZjU5MWFkZTE0N2NjYTcwNzk0
MTQzYTQzZjAxY2NjYTY4YTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTI3NzEsNyArMjc3MSw2IEBAIFNP
VVJDRVMgKz0gXAogICAgIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRR
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0Zsb2F0UmVjdFF0LmNwcCBcCkBAIC0zMzM2LDE4ICszMzM1LDE1IEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9NQVRITUw9MSkgewogICAgICAgICByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKIH0KIAotIyBRUmF3Rm9udCBmZWF0dXJl
IGFkZGVkIGluIFF0IDQuOC4wCisjIFFSYXdGb250IHRyYW5zaXRpb24gaGFuZGxpbmcuCiAjCi0j
IElmIGF2YWlsYWJsZSwgdGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgZmFzdCBwYXRoIGZv
ciB0ZXh0IHJlbmRlcmluZwotIyBhbmQgbWVhc3VyZW1lbnQgaW4gV2ViQ29yZS4gQmVjYXVzZSB0
aGUgZmVhdHVyZSBpcyBzdGlsbCB1bmRlcmdvaW5nCi0jIGRldmVsb3BtZW50LCBpdCBpcyBkaXNh
YmxlZCBpbiBidWlsZHMuCi0jCi0jIGV4aXN0cygkJFtRVF9JTlNUQUxMX0hFQURFUlNdL1F0R3Vp
L1FSYXdGb250KTogSEFWRV9RUkFXRk9OVD0xCi0KLSFpc0VtcHR5KEhBVkVfUVJBV0ZPTlQpIHsK
LSAgICBERUZJTkVTICs9IEhBVkVfUVJBV0ZPTlQ9MQorIyBFdmVuIHRob3VnaCBRUmF3Rm9udCB3
YXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gUXQgNC44LCBpdCBoYWQKKyMgbGltaXRhdGlvbnMgdGhh
dCBtYWRlIHN3aXRjaGluZyBmdWxseSB0byBpdCBpbXBvc3NpYmxlLgorIyBXZSBwcmVzZXJ2ZSB0
aGUgb2xkIGNvZGUgcGF0aCB3aGVuIGJ1aWxkaW5nIHdpdGggUXQgNC4KIAorY29udGFpbnMoREVG
SU5FUywgSEFWRV9RUkFXRk9OVD0xKSB7CiAgICAgU09VUkNFUyArPSBcCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250RmFzdFBhdGguY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJl
ZU5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAg
XApAQCAtMzM1Niw4ICszMzUyLDEyIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9NQVRITUw9
MSkgewogICAgIEhFQURFUlMgKz0gXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVU
ZXh0SXRlcmF0b3IuaAorfSBlbHNlIHsKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFF0NC5jcHAKIH0KIAorCiBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfR0VPTE9DQVRJT049MSkgewogICAgIHY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IGMyZDljNThjM2Y1MDQ4
MTVkNWMzNDk2NTJjYWZhMjRkZDkzMTQ3MzUuLjYyMDZjZTkxNGM0NDZjNGVkMDQ3M2Y0YjI5YmE0
YjI2ZmQ3Y2M3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CkBAIC0yNyw5ICsyNyw2IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKLSNpZiBQTEFURk9STShRVCkg
JiYgSEFWRShRUkFXRk9OVCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNlbmRpZgog
I2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRl
ICJUZXh0UnVuLmgiCkBAIC0xNTAsMTEgKzE0Nyw2IEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKIAotI2lmIFBM
QVRGT1JNKFFUKSAmJiBIQVZFKFFSQVdGT05UKQotICAgIGlmIChjb250ZXh0LT50ZXh0RHJhd2lu
Z01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxl
eDsKLSNlbmRpZgotCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKICAgICAgICAg
cmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGQxNWE3N2YzY2Q3MzNm
YWM4OWI4MDkxMWYxYzRiNDdhYTRkOTA3MmQuLjZmZjRjNTg5ZmMyNTM0ZTc5NTJiOTkyYzM3NTE2
OWNkYzA2MzY0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAg
LTM2LDggKzM2LDEzIEBACiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4K
IAogI2lmIFBMQVRGT1JNKFFUKQorI2lmIEhBVkUoUVJBV0ZPTlQpCisjaW5jbHVkZSA8UVJhd0Zv
bnQ+CitjbGFzcyBRVGV4dExheW91dDsKKyNlbHNlCiAjaW5jbHVkZSA8UUZvbnQ+CiAjZW5kaWYK
KyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3NSw4ICsxODAsMTMgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0
IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbik7CiAKICNpZiBQTEFURk9STShRVCkKKyNpZiBIQVZFKFFSQVdGT05UKQorICAgIFFSYXdG
b250IHJhd0ZvbnQoKSBjb25zdDsKKyNlbHNlCiAgICAgUUZvbnQgZm9udCgpIGNvbnN0OwogI2Vu
ZGlmCisgICAgUUZvbnQgc3ludGhldGljRm9udCgpIGNvbnN0OworI2VuZGlmCiAKICAgICBzdGF0
aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgc2hv
dWxkVXNlU21vb3RoaW5nKCk7CkBAIC0yNTMsNiArMjYzLDExIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9mb250TGlzdCAmJiBtX2ZvbnRMaXN0LT5sb2FkaW5nQ3VzdG9tRm9u
dHMoKTsKICAgICB9CisjaWYgUExBVEZPUk0oUVQpICYmIEhBVkUoUVJBV0ZPTlQpCisgICAgdm9p
ZCBpbml0Rm9ybWF0Rm9yVGV4dExheW91dChRVGV4dExheW91dCopIGNvbnN0OworI2VuZGlmCisK
KwogCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOwogICAgIG11dGFibGUg
UmVmUHRyPEZvbnRGYWxsYmFja0xpc3Q+IG1fZm9udExpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAppbmRleCBkZDg2ZjAwNGU0Yzgz
OTYzNjNjOTUxMjM0ZGFmYWY1MjQwNzk4YjMxLi45YjExMzcxZjVhMmU2ZDJiZWNkYjAwZTJlOTky
NjFlMDRmYzg5MTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmgKQEAgLTU0LDcgKzU0LDExIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1
ZUFUU1VTdHlsZSogQVRTVVN0eWxlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKKyNpZiAh
SEFWRShRUkFXRk9OVCkKICNpbmNsdWRlIDxRRm9udD4KKyNlbHNlCisjaW5jbHVkZSA8UVJhd0Zv
bnQ+CisjZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xODgsNyArMTky
LDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCisjaWYgIUhBVkUoUVJB
V0ZPTlQpCiAgICAgUUZvbnQgZ2V0UXRGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURh
dGEuZm9udCgpOyB9CisjZWxzZQorICAgIFFSYXdGb250IGdldFF0UmF3Rm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGxhdGZvcm1EYXRhLnJhd0ZvbnQoKTsgfQorI2VuZGlmIC8vICFIQVZFKFFSQVdG
T05UKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pIHx8IChPUyhXSU5ET1dTKSAmJiBQTEFU
Rk9STShXWCkpCkBAIC0zNDEsNyArMzQ5LDcgQEAgQUxXQVlTX0lOTElORSBmbG9hdCBTaW1wbGVG
b250RGF0YTo6d2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICBtX2dseXBoVG9X
aWR0aE1hcC5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIHdpZHRoKTsKICAgICByZXR1cm4gd2lk
dGg7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyAhSEFWRShRUkFXRk9OVCkKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250Q2FjaGVRdC5jcHAKaW5kZXggMDJjZTQyYTljMWYyNGIyYjdjM2E1YjczNDQ2NDg5Zjg0
ZTFmNTI3YS4uODE2YmNjYjg5MjRjYWFmODM1MDljYzA2YWU2YjA1MmFhMzE4YmMzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cApAQCAtNDksMzUgKzQ5LDI5IEBAIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogfQog
CiAjaWYgSEFWRShRUkFXRk9OVCkKLXN0YXRpYyBRUmF3Rm9udCByYXdGb250Rm9yQ2hhcmFjdGVy
cyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFGb250JiByZXF1ZXN0ZWRGb250KQorc3Rh
dGljIFFSYXdGb250IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKGNvbnN0IFFTdHJpbmcmIHN0cmluZywg
Y29uc3QgUVJhd0ZvbnQmIGZvbnQpCiB7Ci0gICAgUUZvbnQgZm9udChyZXF1ZXN0ZWRGb250KTsK
LSAgICBmb250LnNldFN0eWxlU3RyYXRlZ3koUUZvbnQ6Ok5vRm9udE1lcmdpbmcpOwotCi0gICAg
UVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZywgZm9udCk7CisgICAgUVRleHRMYXlvdXQgbGF5b3V0
KHN0cmluZyk7CisgICAgbGF5b3V0LnNldFJhd0ZvbnQoZm9udCk7CiAgICAgbGF5b3V0LmJlZ2lu
TGF5b3V0KCk7CiAgICAgbGF5b3V0LmNyZWF0ZUxpbmUoKTsKICAgICBsYXlvdXQuZW5kTGF5b3V0
KCk7CiAKICAgICBRTGlzdDxRR2x5cGhSdW4+IGdseXBoTGlzdCA9IGxheW91dC5nbHlwaFJ1bnMo
KTsKLQotICAgIEFTU0VSVChnbHlwaExpc3Quc2l6ZSgpID09IDEpOwotCi0gICAgY29uc3QgUUds
eXBoUnVuJiBnbHlwaHMoZ2x5cGhMaXN0LmF0KDApKTsKLSAgICBRVmVjdG9yPHF1aW50MzI+IGds
eXBoSW5kZXhlcyA9IGdseXBocy5nbHlwaEluZGV4ZXMoKTsKLQotICAgIGlmIChnbHlwaEluZGV4
ZXMuaXNFbXB0eSgpKQorICAgIEFTU0VSVChnbHlwaExpc3Quc2l6ZSgpIDw9IDEpOworICAgIGlm
ICghZ2x5cGhMaXN0LnNpemUoKSkKICAgICAgICAgcmV0dXJuIFFSYXdGb250KCk7CiAKKyAgICBj
b25zdCBRR2x5cGhSdW4mIGdseXBocyhnbHlwaExpc3QuYXQoMCkpOwogICAgIHJldHVybiBnbHlw
aHMucmF3Rm9udCgpOwogfQotI2VuZGlmCisjZW5kaWYgLy8gSEFWRShRUkFXRk9OVCkKIAogY29u
c3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewog
I2lmIEhBVkUoUVJBV0ZPTlQpCiAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZzo6ZnJvbVJh
d0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgp
OwotICAgIFFSYXdGb250IGNvbXB1dGVkRm9udCA9IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKHFzdHJp
bmcsIGZvbnQuZm9udCgpKTsKKyAgICBRUmF3Rm9udCBjb21wdXRlZEZvbnQgPSByYXdGb250Rm9y
Q2hhcmFjdGVycyhxc3RyaW5nLCBmb250LnJhd0ZvbnQoKSk7CiAgICAgaWYgKCFjb21wdXRlZEZv
bnQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBGb250UGxhdGZvcm1EYXRhIGFs
dGVybmF0ZUZvbnQoY29tcHV0ZWRGb250KTsKQEAgLTEwNywxMSArMTAxLDkgQEAgdm9pZCBGb250
Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNp
Z25lZD4mKQogCiBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hF
Q0soNCwgOCwgMCkKICAgICBRRm9udERhdGFiYXNlIGRiOwogICAgIGlmICghZGIuaGFzRmFtaWx5
KGZhbWlseU5hbWUpKQogICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgogICAgIHJldHVybiBuZXcg
Rm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmgKaW5kZXggMzk5NmQyMjNiOTg3MDJjZGY2MzBiOTg1ZjY2MjlhOGZi
MGE1ZjNiMS4uN2ZhOWY4YzExNWVhODk0MDI5ODhlOWYzNjFlNmIxNWQxNWE0MWIzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0
QWxsb2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpZiBIQVZFKFFSQVdGT05UKQorI2luY2x1ZGUgPFFSYXdGb250PgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsOCArNDQsMTIgQEAgcHVibGljOgog
ICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKSB7IH0KICAgICB+Rm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSgpOwogCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgLy8gZm9yIHVzZSB3aXRoIFFGb250
RGF0YWJhc2U6OmFkZEFwcGxpY2F0aW9uRm9udC9yZW1vdmVBcHBsaWNhdGlvbkZvbnQKICAgICBp
bnQgbV9oYW5kbGU7CisjZWxzZQorICAgIFFSYXdGb250IG1fcmF3Rm9udDsKKyNlbmRpZgogCiAg
ICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBUZXh0T3JpZW50YXRp
b24gPSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoLCBGb250UmVu
ZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGFRdC5jcHAKaW5kZXggMjBmMTYxYThmMjFmZjgxNDA2YTgyNjQ5NDNlOWUwMjdiMWIwYzBjMy4u
ZGY4MWYzM2M1Y2Y1OWE4YzQ0OGE0MGQ1NjExMTE0OTM0N2E4NDMzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhUXQuY3BwCkBAIC0yNCw0MCArMjQsNTYgQEAKIAogI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpZiAhSEFWRShRUkFX
Rk9OVCkKICNpbmNsdWRlIDxRRm9udERhdGFiYXNlPgorI2VuZGlmCiAjaW5jbHVkZSA8UVN0cmlu
Z0xpc3Q+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6
fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQogeworI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFG
b250RGF0YWJhc2U6OnJlbW92ZUFwcGxpY2F0aW9uRm9udChtX2hhbmRsZSk7CisjZW5kaWYKIH0K
IAogRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1E
YXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24sIFRl
eHRPcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCwgRm9udFJlbmRlcmluZ01vZGUpCiB7Cisj
aWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgUUZvbnQgZm9udDsKICAgICBmb250LnNldEZhbWlseShR
Rm9udERhdGFiYXNlOjphcHBsaWNhdGlvbkZvbnRGYW1pbGllcyhtX2hhbmRsZSlbMF0pOwogICAg
IGZvbnQuc2V0UGl4ZWxTaXplKHNpemUpOwogICAgIGlmIChib2xkKQogICAgICAgICBmb250LnNl
dFdlaWdodChRRm9udDo6Qm9sZCk7CiAgICAgZm9udC5zZXRJdGFsaWMoaXRhbGljKTsKLQogICAg
IHJldHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnQpOworI2Vsc2UKKyAgICBRX0FTU0VSVChtX3Jh
d0ZvbnQuaXNWYWxpZCgpKTsKKyAgICBtX3Jhd0ZvbnQuc2V0UGl4ZWxTaXplKHFyZWFsKHNpemUp
KTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX3Jhd0ZvbnQpOworI2VuZGlmCiB9CiAK
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hh
cmVkQnVmZmVyKiBidWZmZXIpCiB7CiAgICAgQVNTRVJUX0FSRyhidWZmZXIsIGJ1ZmZlcik7CiAK
LSAgICBpbnQgaWQgPSBRRm9udERhdGFiYXNlOjphZGRBcHBsaWNhdGlvbkZvbnRGcm9tRGF0YShR
Qnl0ZUFycmF5KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOworICAgIGNvbnN0IFFC
eXRlQXJyYXkgZm9udERhdGEoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyNpZiAh
SEFWRShRUkFXRk9OVCkKKyAgICBpbnQgaWQgPSBRRm9udERhdGFiYXNlOjphZGRBcHBsaWNhdGlv
bkZvbnRGcm9tRGF0YShmb250RGF0YSk7CiAgICAgaWYgKGlkID09IC0xKQogICAgICAgICByZXR1
cm4gMDsKLQogICAgIFFfQVNTRVJUKFFGb250RGF0YWJhc2U6OmFwcGxpY2F0aW9uRm9udEZhbWls
aWVzKGlkKS5zaXplKCkgPiAwKTsKKyNlbmRpZgogCiAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0
YSAqZGF0YSA9IG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOworI2lmICFIQVZFKFFSQVdGT05U
KQogICAgIGRhdGEtPm1faGFuZGxlID0gaWQ7CisjZWxzZQorICAgIC8vIFBpeGVsIHNpemUgZG9l
c24ndCBtYXR0ZXIgYXQgdGhpcyBwb2ludCwgaXQgaXMgc2V0IGluIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGE6OmZvbnRQbGF0Zm9ybURhdGEuCisgICAgZGF0YS0+bV9yYXdGb250LmxvYWRGcm9tRGF0
YShmb250RGF0YSwgLypwaXhlbFNpemUgPSAqLzAsIFFGb250OjpQcmVmZXJEZWZhdWx0SGludGlu
Zyk7CisjZW5kaWYKICAgICByZXR1cm4gZGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDc2NjJh
YTAwNzFlMjUxZGU0MDUyYzRiZjdhMTA1OTUzZTBmYzhhN2MuLmY1NWUxOWMyYjEzMGMzZjg5Zjc0
MjQ1YTM0NTVhOGQzMzEwMDk0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTQwLDggKzQwLDEzIEBAIGNs
YXNzIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFBsYXRm
b3JtRGF0YVByaXZhdGU+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250UGxhdGZvcm1E
YXRhUHJpdmF0ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEZvbnRQ
bGF0Zm9ybURhdGFQcml2YXRlKCkKKyNpZiAhSEFWRShRUkFXRk9OVCkKICAgICAgICAgOiBzaXpl
KGZvbnQucGl4ZWxTaXplKCkpCiAgICAgICAgICwgYm9sZChmb250LmJvbGQoKSkKKyNlbHNlCisg
ICAgICAgIDogc2l6ZSgwKQorICAgICAgICAsIGJvbGQoZmFsc2UpCisjZW5kaWYKICAgICAgICAg
LCBvYmxpcXVlKGZhbHNlKQogICAgICAgICAsIGlzRGVsZXRlZFZhbHVlKGZhbHNlKQogICAgIHsg
fQpAQCAtNTEsMjAgKzU2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgLCBvYmxpcXVlKG9ibGlxdWUp
CiAgICAgICAgICwgaXNEZWxldGVkVmFsdWUoZmFsc2UpCiAgICAgeyB9CisjaWYgIUhBVkUoUVJB
V0ZPTlQpCiAgICAgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoY29uc3QgUUZvbnQmIGZvbnQpCiAg
ICAgICAgIDogZm9udChmb250KQotI2lmIEhBVkUoUVJBV0ZPTlQpCi0gICAgICAgICwgcmF3Rm9u
dChRUmF3Rm9udDo6ZnJvbUZvbnQoZm9udCwgUUZvbnREYXRhYmFzZTo6QW55KSkKLSNlbmRpZgog
ICAgICAgICAsIHNpemUoZm9udC5waXhlbFNpemUoKSkKICAgICAgICAgLCBib2xkKGZvbnQuYm9s
ZCgpKQogICAgICAgICAsIG9ibGlxdWUoZmFsc2UpCiAgICAgICAgICwgaXNEZWxldGVkVmFsdWUo
ZmFsc2UpCiAgICAgeyB9Ci0jaWYgSEFWRShRUkFXRk9OVCkKKyNlbHNlCiAgICAgRm9udFBsYXRm
b3JtRGF0YVByaXZhdGUoY29uc3QgUVJhd0ZvbnQmIHJhd0ZvbnQpCi0gICAgICAgIDogZm9udCgp
Ci0gICAgICAgICwgcmF3Rm9udChyYXdGb250KQorICAgICAgICA6IHJhd0ZvbnQocmF3Rm9udCkK
ICAgICAgICAgLCBzaXplKHJhd0ZvbnQucGl4ZWxTaXplKCkpCiAgICAgICAgICwgYm9sZChyYXdG
b250LndlaWdodCgpID49IFFGb250OjpCb2xkKQogICAgICAgICAsIG9ibGlxdWUoZmFsc2UpCkBA
IC03NSw4ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgOiBpc0RlbGV0ZWRWYWx1ZSh0cnVlKQog
ICAgIHsgfQogCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgUUZvbnQgZm9udDsKLSNpZiBIQVZF
KFFSQVdGT05UKQorI2Vsc2UKICAgICBRUmF3Rm9udCByYXdGb250OwogI2VuZGlmCiAgICAgZmxv
YXQgc2l6ZTsKQEAgLTkwLDEwICs5MywxMSBAQCBjbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKIHB1
YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBv
YmxpcXVlKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgaW50IHdvcmRTcGFjaW5nID0gMCwgaW50IGxl
dHRlclNwYWNpbmcgPSAwKTsKKyNpZiAhSEFWRShRUkFXRk9OVCkKICAgICBGb250UGxhdGZvcm1E
YXRhKGNvbnN0IFFGb250JiBmb250KQogICAgICAgICA6IG1fZGF0YShhZG9wdFJlZihuZXcgRm9u
dFBsYXRmb3JtRGF0YVByaXZhdGUoZm9udCkpKQogICAgIHsgfQotI2lmIEhBVkUoUVJBV0ZPTlQp
CisjZWxzZQogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGZs
b2F0IHNpemUpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgUVJhd0ZvbnQmIHJhd0ZvbnQp
CiAgICAgICAgIDogbV9kYXRhKGFkb3B0UmVmKG5ldyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZShy
YXdGb250KSkpCkBAIC0xMTIsNiArMTE2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9k
YXRhICYmIG1fZGF0YS0+aXNEZWxldGVkVmFsdWU7CiAgICAgfQogCisjaWYgIUhBVkUoUVJBV0ZP
TlQpCiAgICAgUUZvbnQgZm9udCgpIGNvbnN0CiAgICAgewogICAgICAgICBRX0FTU0VSVCghaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CkBAIC0xMTksNyArMTI0LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIFFGb250KCk7CiAgICAgICAgIHJldHVybiBtX2RhdGEtPmZvbnQ7CiAg
ICAgfQotI2lmIEhBVkUoUVJBV0ZPTlQpCisjZWxzZQogICAgIFFSYXdGb250IHJhd0ZvbnQoKSBj
b25zdAogICAgIHsKICAgICAgICAgUV9BU1NFUlQoIWlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBs
YXRmb3JtRGF0YVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXggODZmYzEyZTNhMWVhNzA4MGUxZWMxZTgwZmQwZWE5
NjE1NmVmOTIwMy4uM2Q5MzA4ZjI0NjA2MWYyZTM0NDljYTA2MzU3NmZiYmQwNjliYTliMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3Jt
RGF0YVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UGxhdGZvcm1EYXRhUXQuY3BwCkBAIC02Myw3ICs2MywxMSBAQCBGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQogRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIGludCB3b3JkU3BhY2lu
ZywgaW50IGxldHRlclNwYWNpbmcpCiAgICAgOiBtX2RhdGEoYWRvcHRSZWYobmV3IEZvbnRQbGF0
Zm9ybURhdGFQcml2YXRlKCkpKQogeworI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFGb250JiBm
b250ID0gbV9kYXRhLT5mb250OworI2Vsc2UKKyAgICBRRm9udCBmb250OworI2VuZGlmCiAgICAg
aW50IHJlcXVlc3RlZFNpemUgPSBkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpOwogICAg
IGZvbnQuc2V0RmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGZvbnQuc2V0UGl4ZWxTaXplKHJlcXVl
c3RlZFNpemUpOwpAQCAtNzEsMTcgKzc1LDE5IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvCiAg
ICAgZm9udC5zZXRXZWlnaHQodG9RRm9udFdlaWdodChkZXNjcmlwdGlvbi53ZWlnaHQoKSkpOwog
ICAgIGZvbnQuc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpOwogICAgIGZvbnQuc2V0TGV0dGVy
U3BhY2luZyhRRm9udDo6QWJzb2x1dGVTcGFjaW5nLCBsZXR0ZXJTcGFjaW5nKTsKLSAgICBjb25z
dCBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOwotICAgIGZvbnQuc2V0
Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNtYWxsQ2FwcyA6IFFGb250OjpNaXhl
ZENhc2UpOwogICAgIGZvbnQuc2V0U3R5bGVTdHJhdGVneShRRm9udDo6Rm9yY2VJbnRlZ2VyTWV0
cmljcyk7CiAKICAgICBtX2RhdGEtPmJvbGQgPSBmb250LmJvbGQoKTsKKyNpZiAhSEFWRShRUkFX
Rk9OVCkKKyAgICBjb25zdCBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxsQ2Fwcygp
OworICAgIGZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNtYWxsQ2Fw
cyA6IFFGb250OjpNaXhlZENhc2UpOwogICAgIC8vIFdlYktpdCBhbGxvd3MgZm9udCBzaXplIHpl
cm8gYnV0IFFGb250IGRvZXMgbm90LiBXZSB3aWxsIHJldHVybgogICAgIC8vIG1fZGF0YS0+c2l6
ZSBpZiBhIGZvbnQgc2l6ZSBvZiB6ZXJvIGlzIHJlcXVlc3RlZCBhbmQgcGl4ZWxTaXplKCkKICAg
ICAvLyBvdGhlcndpc2UuCiAgICAgbV9kYXRhLT5zaXplID0gKCFyZXF1ZXN0ZWRTaXplKSA/IHJl
cXVlc3RlZFNpemUgOiBmb250LnBpeGVsU2l6ZSgpOwotI2lmIEhBVkUoUVJBV0ZPTlQpCisjZWxz
ZQogICAgIG1fZGF0YS0+cmF3Rm9udCA9IFFSYXdGb250Ojpmcm9tRm9udChmb250LCBRRm9udERh
dGFiYXNlOjpBbnkpOworICAgIG1fZGF0YS0+c2l6ZSA9IG1fZGF0YS0+cmF3Rm9udC5waXhlbFNp
emUoKTsKICNlbmRpZgogfQogCkBAIC04OSwxNSArOTUsMTMgQEAgRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25z
dCBBdG8KIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgb3RoZXIsIGZsb2F0IHNpemUpCiAgICAgOiBtX2RhdGEoYWRvcHRSZWYobmV3IEZv
bnRQbGF0Zm9ybURhdGFQcml2YXRlKCkpKQogewotICAgIG1fZGF0YS0+Zm9udCA9IG90aGVyLm1f
ZGF0YS0+Zm9udDsKICAgICBtX2RhdGEtPnJhd0ZvbnQgPSBvdGhlci5tX2RhdGEtPnJhd0ZvbnQ7
CiAgICAgbV9kYXRhLT5ib2xkID0gb3RoZXIubV9kYXRhLT5ib2xkOwogICAgIG1fZGF0YS0+b2Js
aXF1ZSA9IG90aGVyLm1fZGF0YS0+b2JsaXF1ZTsKLSAgICBtX2RhdGEtPmZvbnQuc2V0UGl4ZWxT
aXplKHNpemUpOwogICAgIG1fZGF0YS0+cmF3Rm9udC5zZXRQaXhlbFNpemUoc2l6ZSk7Ci0gICAg
bV9kYXRhLT5zaXplID0gc2l6ZSA/IG1fZGF0YS0+Zm9udC5waXhlbFNpemUoKSA6IDA7CisgICAg
bV9kYXRhLT5zaXplID0gbV9kYXRhLT5yYXdGb250LnBpeGVsU2l6ZSgpOwogfQotI2VuZGlmCisj
ZW5kaWYgLy8gSEFWRShRUkFXRk9OVCkKIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRv
cj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAogewpAQCAtMTEwLDcgKzEx
NCwxMSBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgY29uc3QgYm9vbCBlcXVhbHMgPSAobV9kYXRhLT5z
aXplID09IG90aGVyLm1fZGF0YS0+c2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1f
ZGF0YS0+Ym9sZCA9PSBvdGhlci5tX2RhdGEtPmJvbGQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiBtX2RhdGEtPm9ibGlxdWUgPT0gb3RoZXIubV9kYXRhLT5vYmxpcXVlCisjaWYgIUhBVkUo
UVJBV0ZPTlQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9kYXRhLT5mb250ID09IG90
aGVyLm1fZGF0YS0+Zm9udCk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1f
ZGF0YS0+cmF3Rm9udCA9PSBvdGhlci5tX2RhdGEtPnJhd0ZvbnQpOworI2VuZGlmCiAgICAgcmV0
dXJuIGVxdWFsczsKIH0KIApAQCAtMTIwLDEwICsxMjgsMTUgQEAgdW5zaWduZWQgRm9udFBsYXRm
b3JtRGF0YTo6aGFzaCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX2RhdGEt
PmlzRGVsZXRlZFZhbHVlKQogICAgICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gcUhhc2gobV9k
YXRhLT5mb250LnRvU3RyaW5nKCkpCi0gICAgICAgICAgIF4gcUhhc2goKnJlaW50ZXJwcmV0X2Nh
c3Q8cXVpbnQzMio+KCZtX2RhdGEtPnNpemUpKQotICAgICAgICAgICBeIHFIYXNoKG1fZGF0YS0+
Ym9sZCkKLSAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPm9ibGlxdWUpOworI2lmICFIQVZFKFFS
QVdGT05UKQorICAgIHJldHVybiAocUhhc2gobV9kYXRhLT5mb250LnRvU3RyaW5nKCkpIF4gcUhh
c2gobV9kYXRhLT5ib2xkKQorICAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPm9ibGlxdWUpKQor
ICAgICAgICAgICAgXiBxSGFzaCgqcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4oJm1fZGF0YS0+
c2l6ZSkpOworI2Vsc2UKKyAgICByZXR1cm4gcUhhc2gobV9kYXRhLT5yYXdGb250LmZhbWlseU5h
bWUoKSkgXiBxSGFzaChtX2RhdGEtPnJhd0ZvbnQuc3R5bGUoKSkKKyAgICAgICAgICAgIF4gcUhh
c2gobV9kYXRhLT5yYXdGb250LndlaWdodCgpKQorICAgICAgICAgICAgXiBxSGFzaCgqcmVpbnRl
cnByZXRfY2FzdDxxdWludDMyKj4oJm1fZGF0YS0+c2l6ZSkpOworI2VuZGlmCiB9CiAKICNpZm5k
ZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
LmNwcAppbmRleCA1MTE5MzM0OWZlNDIwZjU2MjMzODZiNjQ2ZmViNjM5NGEyMTY0ODI2Li43Yjkw
NTM2YmMwYTllNDJlOGI0MGU0ZWU1YjA2ZmM5MGY4YzlhMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogCkBAIC0yNiw5ICsyNiw3IEBACiAjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgotI2lmIEhBVkUoUVJBV0ZPTlQpCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTM3LDE3ICszNSwxMiBA
QAogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KLSNpbmNsdWRlIDxR
Rm9udEluZm8+Ci0jaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgogI2luY2x1ZGUgPFFQYWludGVyPgog
I2luY2x1ZGUgPFFQYWludGVyUGF0aD4KICNpbmNsdWRlIDxRUGVuPgotI2lmIEhBVkUoUVJBV0ZP
TlQpCiAjaW5jbHVkZSA8UVBvaW50Rj4KLSNlbmRpZgogI2luY2x1ZGUgPFFUZXh0TGF5b3V0Pgog
I2luY2x1ZGUgPHFhbGdvcml0aG1zLmg+Ci0jaW5jbHVkZSA8cWRlYnVnLmg+CiAKICNpbmNsdWRl
IDxsaW1pdHMuaD4KIApAQCAtOTIsNyArODUsNyBAQCBzdGF0aWMgUVBlbiBmaWxsUGVuRm9yQ29u
dGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCkKICAgICAgICAgcmV0dXJuIFFQZW4oUUJydXNoKGN0
eC0+ZmlsbFBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpLCAwKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5maWxsQ29sb3IoKSkpOworICAgIHJl
dHVybiBRUGVuKFFDb2xvcihjdHgtPmZpbGxDb2xvcigpKSwgMCk7CiB9CiAKIHN0YXRpYyBRUGVu
IHN0cm9rZVBlbkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgpCkBAIC0xMTIsMTU4ICsx
MDUsOTIgQEAgc3RhdGljIFFQZW4gc3Ryb2tlUGVuRm9yQ29udGV4dChHcmFwaGljc0NvbnRleHQq
IGN0eCkKICAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5zdHJva2VDb2xvcigpKSwgY3R4LT5z
dHJva2VUaGlja25lc3MoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBRRm9udCYgZm9udCwgYm9vbCBpc0NvbXBsZXhU
ZXh0KQorc3RhdGljIFFQYWludGVyUGF0aCBwYXRoRm9yR2x5cGhzKGNvbnN0IFFHbHlwaFJ1biYg
Z2x5cGhSdW4sIGNvbnN0IFFQb2ludEYmIG9mZnNldCkKIHsKLSAgICBpZiAodG8gPCAwKQotICAg
ICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKLQotICAgIFFQYWludGVyICpwID0gY3R4LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLQotICAgIFFQZW4gdGV4dEZpbGxQZW47Ci0gICAgaWYgKGN0eC0+dGV4dERy
YXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpCi0gICAgICAgIHRleHRGaWxsUGVuID0gZmlsbFBl
bkZvckNvbnRleHQoY3R4KTsKLQotICAgIFFQZW4gdGV4dFN0cm9rZVBlbjsKLSAgICBpZiAoY3R4
LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICB0ZXh0U3Ryb2tl
UGVuID0gc3Ryb2tlUGVuRm9yQ29udGV4dChjdHgpOwotCi0gICAgU3RyaW5nIHNhbml0aXplZCA9
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwot
ICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7Ci0g
ICAgUVBvaW50RiBwdChwb2ludC54KCksIHBvaW50LnkoKSk7Ci0KLSAgICBpZiAoZnJvbSA+IDAg
fHwgdG8gPCBydW4ubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKGlzQ29tcGxleFRleHQpIHsKLSAg
ICAgICAgICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcsIGZvbnQpOwotICAgICAgICAgICAg
UVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwotICAgICAgICAgICAg
ZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWChmcm9tKTsKLSAgICAgICAgICAgIGZsb2F0IHgyID0g
bGluZS5jdXJzb3JUb1godG8pOwotICAgICAgICAgICAgaWYgKHgyIDwgeDEpCi0gICAgICAgICAg
ICAgICAgcVN3YXAoeDEsIHgyKTsKLQotICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQp
OwotICAgICAgICAgICAgaW50IGFzY2VudCA9IGZtLmFzY2VudCgpOwotICAgICAgICAgICAgUVJl
Y3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9pbnQueSgpIC0gYXNjZW50LCB4MiAt
IHgxLCBmbS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBRUmVjdEYgY2xpcCA9IGJvdW5kaW5nUmVj
dDsKLQotICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVy
KCk7Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9T
aGFkb3cpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChjdHgt
PnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQu
aGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9IDAsIGR4MiA9IDAsIGR5MSA9
IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC54KCkgPiAwKQot
ICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZzZXQueCgpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHgxID0gLXNoYWRvd09mZnNldC54KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC55KCkgPiAwKQotICAgICAgICAgICAgICAg
ICAgICBkeTIgPSBzaGFkb3dPZmZzZXQueSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgZHkxID0gLXNoYWRvd09mZnNldC55KCk7Ci0gICAgICAgICAgICAgICAg
Ly8gZXhwYW5kIHRoZSBjbGlwIHJlY3QgdG8gaW5jbHVkZSB0aGUgdGV4dCBzaGFkb3cgYXMgd2Vs
bAotICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGJsdXJEaXN0YW5jZSA9IGN0eC0+c3RhdGUo
KS5zaGFkb3dCbHVyOwotICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KGR4MSwgZHgyLCBkeTEs
IGR5Mik7Ci0gICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWJsdXJEaXN0YW5jZSwgLWJsdXJE
aXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgcC0+c2V0Q2xpcFJlY3QoY2xpcC50b1Jl
Y3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwotICAgICAgICAgICAgcHQuc2V0WShwdC55KCkgLSBh
c2NlbnQpOwotCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1
cjo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBj
dHgtPnNoYWRvd0JsdXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkg
IT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdwotICAgICAgICAgICAgICAgICAgICAmJiAoIWN0eFNo
YWRvdy0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjdHgtPmdldENUTSgpLmlzSWRlbnRp
dHkoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAg
ICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgICAg
ICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0
aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7Ci0gICAgICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUo
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4
LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFk
b3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVu
ZGVyIGhpbnRzLgotICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9u
dChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4
U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcC0+c2V0UGVuKHRleHRG
aWxsUGVuKTsKLSAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7Ci0gICAgICAgICAgICBwLT5y
ZXN0b3JlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHNr
aXBXaWR0aCA9IFFGb250TWV0cmljcyhmb250KS53aWR0aChzdHJpbmcsIGZyb20sIFF0OjpUZXh0
QnlwYXNzU2hhcGluZyk7Ci0gICAgICAgIHB0LnNldFgocHQueCgpICsgc2tpcFdpZHRoKTsKLSAg
ICAgICAgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCwgZnJvbSwgdG8g
LSBmcm9tKTsKKyAgICBRUGFpbnRlclBhdGggcGF0aDsKKyAgICBjb25zdCBRUmF3Rm9udCByYXdG
b250KGdseXBoUnVuLnJhd0ZvbnQoKSk7CisgICAgY29uc3QgUVZlY3RvcjxxdWludDMyPiBnbHlw
aEluZGljZXMgPSBnbHlwaFJ1bi5nbHlwaEluZGV4ZXMoKTsKKyAgICBjb25zdCBRVmVjdG9yPFFQ
b2ludEY+IHBvc2l0aW9ucyA9IGdseXBoUnVuLnBvc2l0aW9ucygpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZ2x5cGhJbmRpY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFFQYWludGVyUGF0
aCBnbHlwaFBhdGggPSByYXdGb250LnBhdGhGb3JHbHlwaChnbHlwaEluZGljZXMuYXQoaSkpOwor
ICAgICAgICBnbHlwaFBhdGgudHJhbnNsYXRlKHBvc2l0aW9ucy5hdChpKSArIG9mZnNldCk7Cisg
ICAgICAgIHBhdGguYWRkUGF0aChnbHlwaFBhdGgpOwogICAgIH0KKyAgICByZXR1cm4gcGF0aDsK
K30KIAotICAgIHAtPnNldEZvbnQoZm9udCk7Ci0KLSAgICBpbnQgZmxhZ3MgPSBydW4ucnRsKCkg
PyBRdDo6VGV4dEZvcmNlUmlnaHRUb0xlZnQgOiBRdDo6VGV4dEZvcmNlTGVmdFRvUmlnaHQ7Ci0g
ICAgaWYgKCFpc0NvbXBsZXhUZXh0ICYmICEoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRN
b2RlU3Ryb2tlKSkKLSAgICAgICAgZmxhZ3MgfD0gUXQ6OlRleHRCeXBhc3NTaGFwaW5nOworc3Rh
dGljIHZvaWQgZHJhd1F0R2x5cGhSdW4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBR
R2x5cGhSdW4mIHF0R2x5cGhSdW4sIGNvbnN0IFFQb2ludEYmIHBvaW50LCBpbnQgYmFzZUxpbmVP
ZmZzZXQpCit7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKIAogICAgIFFQYWludGVyUGF0aCB0ZXh0U3Ryb2tlUGF0aDsKLSAgICBpZiAoY3R4LT50
ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICB0ZXh0U3Ryb2tlUGF0
aC5hZGRUZXh0KHB0LCBmb250LCBzdHJpbmcpOwotCi0gICAgU2hhZG93Qmx1ciogY3R4U2hhZG93
ID0gY3R4LT5zaGFkb3dCbHVyKCk7Ci0gICAgaWYgKGN0eC0+aGFzU2hhZG93KCkgJiYgY3R4U2hh
ZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKLSAgICAgICAgaWYgKGN0eC0+
dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHsKLSAgICAgICAgICAgIGlmIChjdHhT
aGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KSB7Ci0gICAgICAgICAgICAg
ICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCkuc2hh
ZG93Q29sb3IpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+c3Rh
dGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWln
aHQoKSkpOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBy
dW4uZXhwYW5zaW9uKCkpOwotICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQpOwotICAg
ICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocHQueCgpLCBwb2ludC55KCkgLSBmbS5h
c2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxhZ3MpLCBmbS5oZWlnaHQoKSk7Ci0gICAg
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4U2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAo
c2hhZG93Q29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFp
bnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICAgICAgICAg
ICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFi
b3V0IHJlbmRlciBoaW50cy4KLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQ
ZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY3R4LT50ZXh0
RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSB7Ci0gICAgICAgICAgICBpZiAoY3R4U2hh
ZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdykgewotICAgICAgICAgICAgICAg
IGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lk
dGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAg
ICAgcC0+dHJhbnNsYXRlKHNoYWRvd09mZnNldCk7Ci0gICAgICAgICAgICAgICAgcC0+c3Ryb2tl
UGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKLSAg
ICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250KTsKLSAgICAgICAg
ICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50
KCksIGZtLndpZHRoKHN0cmluZywgLTEsIGZsYWdzKSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRv
d0NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIg
PSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBy
ZW5kZXIgaGludHMuCi0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQo
cC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0
aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKLSAgICAg
ICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0
cm9rZSkKKyAgICAgICAgdGV4dFN0cm9rZVBhdGggPSBwYXRoRm9yR2x5cGhzKHF0R2x5cGhSdW4s
IHBvaW50KTsKKworICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IGNvbnRleHQtPnNoYWRvd0JsdXIo
KTsKKyAgICBpZiAoY29udGV4dC0+aGFzU2hhZG93KCkgJiYgc2hhZG93LT50eXBlKCkgIT0gU2hh
ZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgc3dpdGNoIChzaGFkb3ctPnR5cGUoKSkgewor
ICAgICAgICBjYXNlIFNoYWRvd0JsdXI6OlNvbGlkU2hhZG93OiB7CisgICAgICAgICAgICBRUGVu
IHByZXZpb3VzUGVuID0gcGFpbnRlci0+cGVuKCk7CisgICAgICAgICAgICBwYWludGVyLT5zZXRQ
ZW4oY29udGV4dC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICBjb25zdCBRUG9p
bnRGIHNoYWRvd09mZnNldChjb250ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBj
b250ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBwYWlu
dGVyLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT50
ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkKKyAgICAgICAgICAgICAgICBwYWludGVy
LT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhSdW4pOworICAgICAgICAgICAgZWxzZSBpZiAo
Y29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgICAg
ICAgICBwYWludGVyLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBwYWludGVyLT5wZW4oKSk7
CisgICAgICAgICAgICBwYWludGVyLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7CisgICAgICAg
ICAgICBwYWludGVyLT5zZXRQZW4ocHJldmlvdXNQZW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93OiB7CisgICAgICAg
ICAgICBjb25zdCBpbnQgd2lkdGggPSBxdEdseXBoUnVuLmJvdW5kaW5nUmVjdCgpLndpZHRoKCk7
CisgICAgICAgICAgICBjb25zdCBRUmF3Rm9udCYgZm9udCA9IHF0R2x5cGhSdW4ucmF3Rm9udCgp
OworICAgICAgICAgICAgY29uc3QgaW50IGhlaWdodCA9IGZvbnQuYXNjZW50KCkgKyBmb250LmRl
c2NlbnQoKSArIDE7CisgICAgICAgICAgICBjb25zdCBRUmVjdEYgYm91bmRpbmdSZWN0KHBvaW50
LngoKSwgcG9pbnQueSgpIC0gZm9udC5hc2NlbnQoKSArIGJhc2VMaW5lT2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBib3VuZGluZ1JlY3QpOworICAgICAgICAg
ICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93
UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihzaGFkb3dDb250ZXh0LT5zdGF0ZSgpLnNoYWRvd0Nv
bG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dC0+dGV4dERyYXdpbmdNb2Rl
KCkgJiBUZXh0TW9kZUZpbGwpCisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRy
YXdHbHlwaFJ1bihwb2ludCwgcXRHbHlwaFJ1bik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
c2hhZG93Q29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAg
ICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwg
c2hhZG93UGFpbnRlci0+cGVuKCkpOworICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93
TGF5ZXIoY29udGV4dCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIFNoYWRvd0JsdXI6Ok5vU2hhZG93OgorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4
dE1vZGVTdHJva2UpCi0gICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIHRleHRT
dHJva2VQZW4pOworICAgIGlmIChjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2Rl
U3Ryb2tlKQorICAgICAgICBwYWludGVyLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBzdHJv
a2VQZW5Gb3JDb250ZXh0KGNvbnRleHQpKTsKIAotICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9k
ZSgpICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgIFFQZW4gcHJldmlvdXNQZW4gPSBwLT5wZW4o
KTsKLSAgICAgICAgcC0+c2V0UGVuKHRleHRGaWxsUGVuKTsKLSAgICAgICAgcC0+ZHJhd1RleHQo
cHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7Ci0gICAgICAgIHAtPnNldFBlbihw
cmV2aW91c1Blbik7CisgICAgaWYgKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1v
ZGVGaWxsKSB7CisgICAgICAgIFFQZW4gcHJldmlvdXNQZW4gPSBwYWludGVyLT5wZW4oKTsKKyAg
ICAgICAgcGFpbnRlci0+c2V0UGVuKGZpbGxQZW5Gb3JDb250ZXh0KGNvbnRleHQpKTsKKyAgICAg
ICAgcGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBoUnVuKTsKKyAgICAgICAgcGFp
bnRlci0+c2V0UGVuKHByZXZpb3VzUGVuKTsKICAgICB9CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewotICAgIGRyYXdU
ZXh0Q29tbW9uKGN0eCwgcnVuLCBwb2ludCwgZnJvbSwgdG8sIGZvbnQoKSwgLyogaXNDb21wbGV4
VGV4dCA9ICovdHJ1ZSk7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNw
YWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIGNvbnN0IFFTdHJpbmcg
c3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisgICAgUVRleHRMYXlv
dXQgbGF5b3V0KHN0cmluZyk7CisgICAgbGF5b3V0LnNldFJhd0ZvbnQocmF3Rm9udCgpKTsKKyAg
ICBpbml0Rm9ybWF0Rm9yVGV4dExheW91dCgmbGF5b3V0KTsKKyAgICBRVGV4dExpbmUgbGluZSA9
IHNldHVwTGF5b3V0KCZsYXlvdXQsIHJ1bik7CisgICAgY29uc3QgUVBvaW50RiBhZGp1c3RlZFBv
aW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gbGluZS5hc2NlbnQoKSk7CisKKyAgICBRTGlzdDxR
R2x5cGhSdW4+IHJ1bnMgPSBsaW5lLmdseXBoUnVucyhmcm9tLCB0byAtIGZyb20pOworICAgIFFf
Rk9SRUFDSChRR2x5cGhSdW4gZ2x5cGhSdW4sIHJ1bnMpCisgICAgICAgIGRyYXdRdEdseXBoUnVu
KGN0eCwgZ2x5cGhSdW4sIGFkanVzdGVkUG9pbnQsIGxpbmUuYXNjZW50KCkpOwogfQogCiBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKQEAgLTI3
NSwxNyArMjAyLDE5IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9uCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgaWYgKHJ1bi5sZW5ndGgoKSA9PSAxICYmIHRyZWF0QXNTcGFjZShydW5bMF0pKQot
ICAgICAgICByZXR1cm4gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgoc3BhY2UpICsgcnVuLmV4
cGFuc2lvbigpOwotCisgICAgICAgIHJldHVybiBzcGFjZVdpZHRoKCkgKyBydW4uZXhwYW5zaW9u
KCk7CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hh
cmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwogICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0Rh
dGFXaXRob3V0UmVmKHNhbml0aXplZCk7CiAKLSAgICBpbnQgdyA9IFFGb250TWV0cmljcyhmb250
KCkpLndpZHRoKHN0cmluZyk7Ci0gICAgLy8gV2ViS2l0IGV4cGVjdHMgdXMgdG8gaWdub3JlIHdv
cmQgc3BhY2luZyBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIChhcyBvcHBvc2VkIHRvIHdoYXQgUXQg
ZG9lcykKLSAgICBpZiAodHJlYXRBc1NwYWNlKHJ1blswXSkpCi0gICAgICAgIHcgLT0gbV93b3Jk
U3BhY2luZzsKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nKTsKKyAgICBsYXlvdXQuc2V0
UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRGb3JtYXRGb3JUZXh0TGF5b3V0KCZsYXlvdXQp
OworICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91dCwgcnVuKTsKKyAgICBm
bG9hdCB4MSA9IGxpbmUuY3Vyc29yVG9YKDApOworICAgIGZsb2F0IHgyID0gbGluZS5jdXJzb3JU
b1gocnVuLmxlbmd0aCgpKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBxQWJzKHgyIC0geDEpOwog
Ci0gICAgcmV0dXJuIHcgKyBydW4uZXhwYW5zaW9uKCk7CisgICAgcmV0dXJuIHdpZHRoICsgcnVu
LmV4cGFuc2lvbigpOwogfQogCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sKSBjb25zdApAQCAt
MjkzLDcgKzIyMiw5IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJvCiAgICAgU3RyaW5nIHNhbml0
aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3Ro
KCkpOwogICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXpl
ZCk7CiAKLSAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nLCBmb250KCkpOworICAgIFFUZXh0
TGF5b3V0IGxheW91dChzdHJpbmcpOworICAgIGxheW91dC5zZXRSYXdGb250KHJhd0ZvbnQoKSk7
CisgICAgaW5pdEZvcm1hdEZvclRleHRMYXlvdXQoJmxheW91dCk7CiAgICAgUVRleHRMaW5lIGxp
bmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwogICAgIHJldHVybiBsaW5lLnhUb0N1cnNv
cihwb3NpdGlvbik7CiB9CkBAIC0zMDMsMTcgKzIzNCw0MyBAQCBGbG9hdFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQ
b2ludAogICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNo
YXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdE
YXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCi0gICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmlu
ZywgZm9udCgpKTsKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nKTsKKyAgICBsYXlvdXQu
c2V0UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRGb3JtYXRGb3JUZXh0TGF5b3V0KCZsYXlv
dXQpOwogICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91dCwgcnVuKTsKIAog
ICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJvbSk7CiAgICAgZmxvYXQgeDIgPSBsaW5l
LmN1cnNvclRvWCh0byk7CiAgICAgaWYgKHgyIDwgeDEpCiAgICAgICAgIHFTd2FwKHgxLCB4Mik7
CisgICAgLy8gVGhpcyBpcyBkdWUgdG8gdGhlIHdheSBRUGFpbnRlciBkcmF3cyByZWN0YW5nbGVz
LiBJbiBvcmRlciBmb3IgY29tcGxleCB0ZXh0IHNlbGVjdGlvbnMgbm90IHRvIGJlCisgICAgLy8g
YnJva2VuIHdpdGggYmxhbmtzLCB3ZSBuZWVkIHRvIG1vdmUgdGhlIGxlZnQgc2lkZSBiYWNrIGEg
Yml0LgorICAgIHgxIC09IDE7CiAKICAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBw
dC55KCksIHgyIC0geDEsIGgpOwogfQogCit2b2lkIEZvbnQ6OmluaXRGb3JtYXRGb3JUZXh0TGF5
b3V0KFFUZXh0TGF5b3V0KiBsYXlvdXQpIGNvbnN0Cit7CisgICAgUUxpc3Q8UVRleHRMYXlvdXQ6
OkZvcm1hdFJhbmdlPiBvdmVycmlkZXM7CisgICAgUVRleHRMYXlvdXQ6OkZvcm1hdFJhbmdlIHJh
bmdlOworICAgIHJhbmdlLnN0YXJ0ID0gMDsKKyAgICByYW5nZS5sZW5ndGggPSBsYXlvdXQtPnRl
eHQoKS5sZW5ndGgoKTsKKyAgICBpZiAobV93b3JkU3BhY2luZykKKyAgICAgICAgcmFuZ2UuZm9y
bWF0LnNldEZvbnRXb3JkU3BhY2luZyhtX3dvcmRTcGFjaW5nKTsKKyAgICBpZiAobV9sZXR0ZXJT
cGFjaW5nKQorICAgICAgICByYW5nZS5mb3JtYXQuc2V0Rm9udExldHRlclNwYWNpbmcobV9sZXR0
ZXJTcGFjaW5nKTsKKyAgICBpZiAodHlwZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykKKyAg
ICAgICAgcmFuZ2UuZm9ybWF0LnNldEZvbnRLZXJuaW5nKHRydWUpOworICAgIGlmIChpc1NtYWxs
Q2FwcygpKQorICAgICAgICByYW5nZS5mb3JtYXQuc2V0Rm9udENhcGl0YWxpemF0aW9uKFFGb250
OjpTbWFsbENhcHMpOworICAgIGlmIChpc1NtYWxsQ2FwcygpIHx8IHR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSAmIEtlcm5pbmcgfHwgbV93b3JkU3BhY2luZyB8fCBtX2xldHRlclNwYWNpbmcpCisgICAg
ICAgIG92ZXJyaWRlcyA8PCByYW5nZTsKKworICAgIGlmICghb3ZlcnJpZGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgbGF5b3V0LT5zZXRBZGRpdGlvbmFsRm9ybWF0cyhvdmVycmlkZXMpOworfQorCiBi
b29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiB7CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzI0LDcgKzI4MSw2IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lz
TWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotI2lmIEhBVkUoUVJBV0ZPTlQpCiB2b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIGlm
IChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCkBAIC0zMzMsOSArMjg5LDYgQEAgdm9pZCBG
b250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhLAogICAgIGJvb2wgc2hvdWxkRmlsbCA9IGNvbnRleHQtPnRleHREcmF3
aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsOwogICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gY29udGV4
dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZTsKIAotICAgIC8vIFN0cm9raW5n
IHRleHQgc2hvdWxkIGFsd2F5cyB0YWtlIHRoZSBjb21wbGV4IHBhdGguCi0gICAgQVNTRVJUKCFz
aG91bGRTdHJva2UpOwotCiAgICAgaWYgKCFzaG91bGRGaWxsICYmICFzaG91bGRTdHJva2UpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMzQ0LDYgKzI5Nyw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBo
cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSwKIAogICAgIGdseXBoSW5kZXhlcy5yZXNlcnZlKG51bUdseXBocyk7CiAgICAgcG9zaXRpb25z
LnJlc2VydmUobnVtR2x5cGhzKTsKKyAgICBjb25zdCBRUmF3Rm9udCYgZm9udChmb250RGF0YS0+
Z2V0UXRSYXdGb250KCkpOwogCiAgICAgZmxvYXQgd2lkdGggPSAwOwogCkBAIC0zNTcsMTY2ICsz
MTEsMzkgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAogICAgICAgICB3aWR0aCArPSBhZHZhbmNl
OwogICAgIH0KIAotICAgIFFSYXdGb250IHJhd0ZvbnQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
LnJhd0ZvbnQoKSk7Ci0KICAgICBRR2x5cGhSdW4gcXRHbHlwaHM7CiAgICAgcXRHbHlwaHMuc2V0
R2x5cGhJbmRleGVzKGdseXBoSW5kZXhlcyk7CiAgICAgcXRHbHlwaHMuc2V0UG9zaXRpb25zKHBv
c2l0aW9ucyk7Ci0gICAgcXRHbHlwaHMuc2V0UmF3Rm9udChyYXdGb250KTsKLQotICAgIFFQYWlu
dGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBTaGFkb3dC
bHVyKiBzaGFkb3cgPSBjb250ZXh0LT5zaGFkb3dCbHVyKCk7Ci0gICAgc3dpdGNoIChzaGFkb3ct
PnR5cGUoKSkgewotICAgIGNhc2UgU2hhZG93Qmx1cjo6U29saWRTaGFkb3c6IHsKLSAgICAgICAg
UVBlbiBwcmV2aW91c1BlbiA9IHBhaW50ZXItPnBlbigpOwotICAgICAgICBwYWludGVyLT5zZXRQ
ZW4oY29udGV4dC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGNvbnN0IFFQb2ludEYg
c2hhZG93T2Zmc2V0KGNvbnRleHQtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGNvbnRl
eHQtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgcGFpbnRlci0+dHJh
bnNsYXRlKHNoYWRvd09mZnNldCk7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdHbHlwaFJ1bihwb2lu
dCwgcXRHbHlwaHMpOwotICAgICAgICBwYWludGVyLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7
Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwcmV2aW91c1Blbik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFNoYWRvd0JsdXI6OkJsdXJTaGFkb3c6IHsKLSAgICAgICAgcXJlYWwg
aGVpZ2h0ID0gcmF3Rm9udC5hc2NlbnQoKSArIHJhd0ZvbnQuZGVzY2VudCgpICsgMTsKLSAgICAg
ICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCksIHBvaW50LnkoKSAtIHJhd0ZvbnQuYXNj
ZW50KCksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0Nv
bnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0KTsK
LSAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY29udGV4dC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7Ci0g
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhzKTsK
LSAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgU2hhZG93Qmx1cjo6Tm9TaGFkb3c6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBRUGVuIHByZXZpb3VzUGVuID0gcGFpbnRl
ci0+cGVuKCk7Ci0gICAgcGFpbnRlci0+c2V0UGVuKGZpbGxQZW5Gb3JDb250ZXh0KGNvbnRleHQp
KTsKLSAgICBwYWludGVyLT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhzKTsKLSAgICBwYWlu
dGVyLT5zZXRQZW4ocHJldmlvdXNQZW4pOwotfQotCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNl
bHNlIC8vICFIQVZFKFFSQVdGT05UKQotCi12b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIGRyYXdUZXh0Q29tbW9uKGN0eCwg
cnVuLCBwb2ludCwgZnJvbSwgdG8sIGZvbnQoKSwgLyogaXNDb21wbGV4VGV4dCA9ICovZmFsc2Up
OwotfQotCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4u
Y2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwotICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJh
d0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7Ci0KLSAgICBRRm9udE1ldHJpY3MgZm0oZm9udCgp
KTsKLSAgICBmbG9hdCBkZWx0YSA9IHBvc2l0aW9uOwotICAgIGludCBjdXJQb3MgPSAwOwotICAg
IGRvIHsKLSAgICAgICAgZmxvYXQgY2hhcldpZHRoID0gZm0ud2lkdGgoc3RyaW5nW2N1clBvc10p
OwotICAgICAgICBkZWx0YSAtPSBjaGFyV2lkdGg7Ci0gICAgICAgIGlmIChpbmNsdWRlUGFydGlh
bEdseXBocykgewotICAgICAgICAgICAgaWYgKGRlbHRhICsgY2hhcldpZHRoIC8gMiA8PSAwKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGRlbHRhICsgY2hhcldpZHRoIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9IHdoaWxlICgrK2N1clBvcyA8IHN0cmluZy5zaXplKCkpOworICAgIHF0R2x5cGhz
LnNldFJhd0ZvbnQoZm9udCk7CiAKLSAgICByZXR1cm4gY3VyUG9zOworICAgIGRyYXdRdEdseXBo
UnVuKGNvbnRleHQsIHF0R2x5cGhzLCBwb2ludCwgLyogYmFzZWxpbmVPZmZzZXQgPSAqLzApOwog
fQogCiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0
Ci17Ci0gICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFydW4ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hh
cmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwotICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0Rh
dGFXaXRob3V0UmVmKHNhbml0aXplZCk7Ci0KLSAgICBpbnQgdyA9IFFGb250TWV0cmljcyhmb250
KCkpLndpZHRoKHN0cmluZywgLTEsIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7Ci0KLSAgICAvLyBX
ZWJLaXQgZXhwZWN0cyB1cyB0byBpZ25vcmUgd29yZCBzcGFjaW5nIG9uIHRoZSBmaXJzdCBjaGFy
YWN0ZXIgKGFzIG9wcG9zZWQgdG8gd2hhdCBRdCBkb2VzKQotICAgIGlmICh0cmVhdEFzU3BhY2Uo
cnVuWzBdKSkKLSAgICAgICAgdyAtPSBtX3dvcmRTcGFjaW5nOwotCi0gICAgcmV0dXJuIHcgKyBy
dW4uZXhwYW5zaW9uKCk7Ci19Ci0KLQotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQsIGludCBo
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250
Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBR
U3RyaW5nIHdob2xlVGV4dCA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotICAg
IFFTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCwg
ZnJvbSwgcU1pbih0byAtIGZyb20sIHdob2xlVGV4dC5sZW5ndGgoKSAtIGZyb20pKTsKLQotICAg
IGludCBzdGFydFggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aCh3aG9sZVRleHQsIGZyb20s
IFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7Ci0gICAgaW50IHdpZHRoID0gUUZvbnRNZXRyaWNzKGZv
bnQoKSkud2lkdGgoc2VsZWN0ZWRUZXh0LCAtMSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsKLQot
ICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpICsgc3RhcnRYLCBwdC55KCksIHdpZHRoLCBoKTsK
LX0KLQogYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZvbnQ6OnByaW1hcnlGb250SGFzR2x5
cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0
IEF0b21pY1N0cmluZyYpIGNvbnN0CitRRm9udCBGb250OjpzeW50aGV0aWNGb250KCkgY29uc3QK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgRm9udDo6
ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBGb250OjplbXBoYXNpc01h
cmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4m
IC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBv
aW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmIC8vIEhBVkUoUVJBV0ZPTlQpCi0KLVFG
b250IEZvbnQ6OmZvbnQoKSBjb25zdAotewotICAgIFFGb250IGYgPSBwcmltYXJ5Rm9udCgpLT5n
ZXRRdEZvbnQoKTsKLSAgICBpZiAobV9sZXR0ZXJTcGFjaW5nICE9IDApCisgICAgUVJhd0ZvbnQg
cmF3Rm9udChwcmltYXJ5Rm9udCgpLT5nZXRRdFJhd0ZvbnQoKSk7CisgICAgUUZvbnQgZihyYXdG
b250LmZhbWlseU5hbWUoKSk7CisgICAgaWYgKHJhd0ZvbnQucGl4ZWxTaXplKCkpCisgICAgICAg
IGYuc2V0UGl4ZWxTaXplKHJhd0ZvbnQucGl4ZWxTaXplKCkpOworICAgIGYuc2V0V2VpZ2h0KHJh
d0ZvbnQud2VpZ2h0KCkpOworICAgIGYuc2V0U3R5bGUocmF3Rm9udC5zdHlsZSgpKTsKKyAgICBp
ZiAobV9sZXR0ZXJTcGFjaW5nKQogICAgICAgICBmLnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFi
c29sdXRlU3BhY2luZywgbV9sZXR0ZXJTcGFjaW5nKTsKLSAgICBpZiAobV93b3JkU3BhY2luZyAh
PSAwKQorICAgIGlmIChtX3dvcmRTcGFjaW5nKQogICAgICAgICBmLnNldFdvcmRTcGFjaW5nKG1f
d29yZFNwYWNpbmcpOwogICAgIHJldHVybiBmOwogfQogCiAKK1FSYXdGb250IEZvbnQ6OnJhd0Zv
bnQoKSBjb25zdAoreworICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5nZXRRdFJhd0ZvbnQoKTsK
IH0KIAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFF0NC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQ0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jYjQxYTM1MDQ0ODhmMzc5ZjQ4NTVlYzI0YTUwNmU2NzlkMDhjMTJk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFF0NC5jcHAKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICAgIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udEZhbGxi
YWNrTGlzdC5oIgorI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNp
bmNsdWRlICJTaGFkb3dCbHVyLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorCisjaW5jbHVkZSA8
UUJydXNoPgorI2luY2x1ZGUgPFFGb250SW5mbz4KKyNpbmNsdWRlIDxRRm9udE1ldHJpY3M+Cisj
aW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgorI2luY2x1ZGUgPFFQ
ZW4+CisjaW5jbHVkZSA8UVRleHRMYXlvdXQ+CisjaW5jbHVkZSA8cWFsZ29yaXRobXMuaD4KKyNp
bmNsdWRlIDxxZGVidWcuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdCBRU3RyaW5nIGZyb21SYXdEYXRhV2l0aG91dFJlZihjb25z
dCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0ID0gMCwgaW50IGxlbiA9IC0xKQoreworICAgIGlm
IChsZW4gPCAwKQorICAgICAgICBsZW4gPSBzdHJpbmcubGVuZ3RoKCkgLSBzdGFydDsKKyAgICBR
X0FTU0VSVChzdGFydCArIGxlbiA8PSBzdHJpbmcubGVuZ3RoKCkpOworCisgICAgLy8gV2UgZG9u
J3QgZGV0YWNoLiBUaGlzIGFzc3VtZXMgdGhlIFdlYkNvcmUgc3RyaW5nIGRhdGEgd2lsbCBzdGF5
IHZhbGlkIGZvciB0aGUKKyAgICAvLyBsaWZldGltZSBvZiB0aGUgUVN0cmluZyB3ZSBwYXNzIGJh
Y2ssIHNpbmNlIHdlIGRvbid0IHJlZiB0aGUgV2ViQ29yZSBzdHJpbmcuCisgICAgcmV0dXJuIFFT
dHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihzdHJpbmcu
Y2hhcmFjdGVycygpICsgc3RhcnQpLCBsZW4pOworfQorCitzdGF0aWMgUVRleHRMaW5lIHNldHVw
TGF5b3V0KFFUZXh0TGF5b3V0KiBsYXlvdXQsIGNvbnN0IFRleHRSdW4mIHN0eWxlKQoreworICAg
IGludCBmbGFncyA9IHN0eWxlLnJ0bCgpID8gUXQ6OlRleHRGb3JjZVJpZ2h0VG9MZWZ0IDogUXQ6
OlRleHRGb3JjZUxlZnRUb1JpZ2h0OworICAgIGlmIChzdHlsZS5leHBhbnNpb24oKSkKKyAgICAg
ICAgZmxhZ3MgfD0gUXQ6OlRleHRKdXN0aWZpY2F0aW9uRm9yY2VkOworICAgIGxheW91dC0+c2V0
RmxhZ3MoZmxhZ3MpOworICAgIGxheW91dC0+YmVnaW5MYXlvdXQoKTsKKyAgICBRVGV4dExpbmUg
bGluZSA9IGxheW91dC0+Y3JlYXRlTGluZSgpOworICAgIGxpbmUuc2V0TGluZVdpZHRoKElOVF9N
QVgvMjU2KTsKKyAgICBpZiAoc3R5bGUuZXhwYW5zaW9uKCkpCisgICAgICAgIGxpbmUuc2V0TGlu
ZVdpZHRoKGxpbmUubmF0dXJhbFRleHRXaWR0aCgpICsgc3R5bGUuZXhwYW5zaW9uKCkpOworICAg
IGxheW91dC0+ZW5kTGF5b3V0KCk7CisgICAgcmV0dXJuIGxpbmU7Cit9CisKK3N0YXRpYyBRUGVu
IGZpbGxQZW5Gb3JDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4KQoreworICAgIGlmIChjdHgt
PmZpbGxHcmFkaWVudCgpKSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqY3R4LT5maWxsR3JhZGll
bnQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKGN0
eC0+ZmlsbEdyYWRpZW50KCktPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIHJl
dHVybiBRUGVuKGJydXNoLCAwKTsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5maWxsUGF0dGVybigp
KSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CisgICAgICAgIHJldHVybiBRUGVu
KFFCcnVzaChjdHgtPmZpbGxQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUp
KSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIFFQZW4oUUNvbG9yKGN0eC0+ZmlsbENvbG9yKCkp
KTsKK30KKworc3RhdGljIFFQZW4gc3Ryb2tlUGVuRm9yQ29udGV4dChHcmFwaGljc0NvbnRleHQq
IGN0eCkKK3sKKyAgICBpZiAoY3R4LT5zdHJva2VHcmFkaWVudCgpKSB7CisgICAgICAgIFFCcnVz
aCBicnVzaCgqY3R4LT5zdHJva2VHcmFkaWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAg
ICAgICBicnVzaC5zZXRUcmFuc2Zvcm0oY3R4LT5zdHJva2VHcmFkaWVudCgpLT5ncmFkaWVudFNw
YWNlVHJhbnNmb3JtKCkpOworICAgICAgICByZXR1cm4gUVBlbihicnVzaCwgY3R4LT5zdHJva2VU
aGlja25lc3MoKSk7CisgICAgfQorCisgICAgaWYgKGN0eC0+c3Ryb2tlUGF0dGVybigpKSB7Cisg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CisgICAgICAgIFFCcnVzaCBicnVzaChjdHgt
PnN0cm9rZVBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpOworICAgICAg
ICByZXR1cm4gUVBlbihicnVzaCwgY3R4LT5zdHJva2VUaGlja25lc3MoKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIFFQZW4oUUNvbG9yKGN0eC0+c3Ryb2tlQ29sb3IoKSksIGN0eC0+c3Ryb2tlVGhp
Y2tuZXNzKCkpOworfQorCitzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRl
eHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bywgY29uc3QgUUZvbnQmIGZvbnQsIGJvb2wgaXNDb21wbGV4VGV4dCkKK3sK
KyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKKworICAgIFFQYWlu
dGVyICpwID0gY3R4LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIFFQZW4gdGV4dEZpbGxQZW47
CisgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpCisgICAgICAg
IHRleHRGaWxsUGVuID0gZmlsbFBlbkZvckNvbnRleHQoY3R4KTsKKworICAgIFFQZW4gdGV4dFN0
cm9rZVBlbjsKKyAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tl
KQorICAgICAgICB0ZXh0U3Ryb2tlUGVuID0gc3Ryb2tlUGVuRm9yQ29udGV4dChjdHgpOworCisg
ICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVy
cygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRo
b3V0UmVmKHNhbml0aXplZCk7CisgICAgUVBvaW50RiBwdChwb2ludC54KCksIHBvaW50LnkoKSk7
CisKKyAgICBpZiAoZnJvbSA+IDAgfHwgdG8gPCBydW4ubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYg
KGlzQ29tcGxleFRleHQpIHsKKyAgICAgICAgICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcs
IGZvbnQpOworICAgICAgICAgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5b3V0
LCBydW4pOworICAgICAgICAgICAgZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWChmcm9tKTsKKyAg
ICAgICAgICAgIGZsb2F0IHgyID0gbGluZS5jdXJzb3JUb1godG8pOworICAgICAgICAgICAgaWYg
KHgyIDwgeDEpCisgICAgICAgICAgICAgICAgcVN3YXAoeDEsIHgyKTsKKworICAgICAgICAgICAg
UUZvbnRNZXRyaWNzIGZtKGZvbnQpOworICAgICAgICAgICAgaW50IGFzY2VudCA9IGZtLmFzY2Vu
dCgpOworICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9p
bnQueSgpIC0gYXNjZW50LCB4MiAtIHgxLCBmbS5oZWlnaHQoKSk7CisgICAgICAgICAgICBRUmVj
dEYgY2xpcCA9IGJvdW5kaW5nUmVjdDsKKworICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hh
ZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBl
KCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9p
bnRGIHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+
c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHFyZWFsIGR4
MSA9IDAsIGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHNo
YWRvd09mZnNldC54KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZz
ZXQueCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZHgxID0g
LXNoYWRvd09mZnNldC54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC55KCkg
PiAwKQorICAgICAgICAgICAgICAgICAgICBkeTIgPSBzaGFkb3dPZmZzZXQueSgpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZHkxID0gLXNoYWRvd09mZnNldC55
KCk7CisgICAgICAgICAgICAgICAgLy8gZXhwYW5kIHRoZSBjbGlwIHJlY3QgdG8gaW5jbHVkZSB0
aGUgdGV4dCBzaGFkb3cgYXMgd2VsbAorICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGJsdXJE
aXN0YW5jZSA9IGN0eC0+c3RhdGUoKS5zaGFkb3dCbHVyOworICAgICAgICAgICAgICAgIGNsaXAu
YWRqdXN0KGR4MSwgZHgyLCBkeTEsIGR5Mik7CisgICAgICAgICAgICAgICAgY2xpcC5hZGp1c3Qo
LWJsdXJEaXN0YW5jZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2Up
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcC0+c2F2ZSgpOworICAgICAgICAgICAgcC0+
c2V0Q2xpcFJlY3QoY2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOworICAgICAgICAg
ICAgcHQuc2V0WShwdC55KCkgLSBhc2NlbnQpOworCisgICAgICAgICAgICBpZiAoY3R4U2hhZG93
LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBTaGFk
b3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdworICAgICAgICAg
ICAgICAgICAgICAmJiAoIWN0eFNoYWRvdy0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBj
dHgtPmdldENUTSgpLmlzSWRlbnRpdHkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcC0+c2F2
ZSgpOworICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0Nv
bG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5zdGF0
ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdo
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7CisgICAgICAgICAg
ICAgICAgICAgIHAtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ct
PmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIq
IHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdl
IGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcC0+c2V0UGVuKHRleHRGaWxsUGVuKTsKKyAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBw
dCk7CisgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaW50IHNraXBXaWR0aCA9IFFGb250TWV0cmljcyhmb250KS53aWR0aChz
dHJpbmcsIGZyb20sIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7CisgICAgICAgIHB0LnNldFgocHQu
eCgpICsgc2tpcFdpZHRoKTsKKyAgICAgICAgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVm
KHNhbml0aXplZCwgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICB9CisKKyAgICBwLT5zZXRGb250KGZv
bnQpOworCisgICAgaW50IGZsYWdzID0gcnVuLnJ0bCgpID8gUXQ6OlRleHRGb3JjZVJpZ2h0VG9M
ZWZ0IDogUXQ6OlRleHRGb3JjZUxlZnRUb1JpZ2h0OworICAgIGlmICghaXNDb21wbGV4VGV4dCAm
JiAhKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkpCisgICAgICAgIGZs
YWdzIHw9IFF0OjpUZXh0QnlwYXNzU2hhcGluZzsKKworICAgIFFQYWludGVyUGF0aCB0ZXh0U3Ry
b2tlUGF0aDsKKyAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tl
KQorICAgICAgICB0ZXh0U3Ryb2tlUGF0aC5hZGRUZXh0KHB0LCBmb250LCBzdHJpbmcpOworCisg
ICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgaWYgKGN0
eC0+aGFzU2hhZG93KCkgJiYgY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFk
b3cpIHsKKyAgICAgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwp
IHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVy
U2hhZG93KSB7CisgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOworICAgICAgICAgICAgICAgIHAt
PnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgIHAtPnRy
YW5zbGF0ZShRUG9pbnRGKGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5z
dGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIHAtPmRyYXdU
ZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5zaW9uKCkpOworICAgICAgICAgICAgICAg
IHAtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUUZv
bnRNZXRyaWNzIGZtKGZvbnQpOworICAgICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3Qo
cHQueCgpLCBwb2ludC55KCkgLSBmbS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxh
Z3MpLCBmbS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFk
b3dDb250ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0
KTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAg
ICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQg
YW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KKyAgICAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOworICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxh
Z3MsIHJ1bi5leHBhbnNpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5k
U2hhZG93TGF5ZXIoY3R4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSB7
CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNo
YWRvdykgeworICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KGN0eC0+
c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5o
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKHNoYWRvd09mZnNldCk7Cisg
ICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0
YXRlKCkuc2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNoYWRv
d09mZnNldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFFGb250TWV0
cmljcyBmbShmb250KTsKKyAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHB0Lngo
KSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywgLTEsIGZsYWdzKSwg
Zm0uaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29u
dGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdh
eSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCisgICAgICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRl
KCkuc2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFk
b3dMYXllcihjdHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJv
a2UpCisgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIHRleHRTdHJva2VQZW4p
OworCisgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHsKKyAg
ICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHAtPnBlbigpOworICAgICAgICBwLT5zZXRQZW4odGV4
dEZpbGxQZW4pOworICAgICAgICBwLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLmV4
cGFuc2lvbigpKTsKKyAgICAgICAgcC0+c2V0UGVuKHByZXZpb3VzUGVuKTsKKyAgICB9Cit9CisK
K3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAoreworICAgIGRyYXdUZXh0Q29tbW9uKGN0eCwgcnVuLCBwb2ludCwgZnJvbSwgdG8sIGZv
bnQoKSwgLyogaXNDb21wbGV4VGV4dCA9ICovdHJ1ZSk7Cit9CisKK2Zsb2F0IEZvbnQ6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAoreworICAgIGlmICghcHJpbWFy
eUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmICghcnVuLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChydW4ubGVu
Z3RoKCkgPT0gMSAmJiB0cmVhdEFzU3BhY2UocnVuWzBdKSkKKyAgICAgICAgcmV0dXJuIFFGb250
TWV0cmljcyhmb250KCkpLndpZHRoKHNwYWNlKSArIHJ1bi5leHBhbnNpb24oKTsKKworICAgIFN0
cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwg
cnVuLmxlbmd0aCgpKTsKKyAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJl
ZihzYW5pdGl6ZWQpOworCisgICAgaW50IHcgPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChz
dHJpbmcpOworICAgIC8vIFdlYktpdCBleHBlY3RzIHVzIHRvIGlnbm9yZSB3b3JkIHNwYWNpbmcg
b24gdGhlIGZpcnN0IGNoYXJhY3RlciAoYXMgb3Bwb3NlZCB0byB3aGF0IFF0IGRvZXMpCisgICAg
aWYgKHRyZWF0QXNTcGFjZShydW5bMF0pKQorICAgICAgICB3IC09IG1fd29yZFNwYWNpbmc7CisK
KyAgICByZXR1cm4gdyArIHJ1bi5leHBhbnNpb24oKTsKK30KKworaW50IEZvbnQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCBwb3NpdGlv
biwgYm9vbCkgY29uc3QKK3sKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXpl
U3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgUVN0cmluZyBzdHJp
bmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKKworICAgIFFUZXh0TGF5b3V0
IGxheW91dChzdHJpbmcsIGZvbnQoKSk7CisgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91
dCgmbGF5b3V0LCBydW4pOworICAgIHJldHVybiBsaW5lLnhUb0N1cnNvcihwb3NpdGlvbik7Cit9
CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwdCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0Cit7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhy
dW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3RyaW5nID0gZnJv
bVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisKKyAgICBRVGV4dExheW91dCBsYXlvdXQo
c3RyaW5nLCBmb250KCkpOworICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91
dCwgcnVuKTsKKworICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJvbSk7CisgICAgZmxv
YXQgeDIgPSBsaW5lLmN1cnNvclRvWCh0byk7CisgICAgaWYgKHgyIDwgeDEpCisgICAgICAgIHFT
d2FwKHgxLCB4Mik7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBwdC55KCks
IHgyIC0geDEsIGgpOworfQorCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JD
b21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICov
LCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAq
LywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyog
dG8gKi8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGb250Ojpk
cmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBk
cmF3VGV4dENvbW1vbihjdHgsIHJ1biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCksIC8qIGlzQ29t
cGxleFRleHQgPSAqL2ZhbHNlKTsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpu
b3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAgICBRU3Ry
aW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOworCisgICAgUUZv
bnRNZXRyaWNzIGZtKGZvbnQoKSk7CisgICAgZmxvYXQgZGVsdGEgPSBwb3NpdGlvbjsKKyAgICBp
bnQgY3VyUG9zID0gMDsKKyAgICBkbyB7CisgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IGZtLndp
ZHRoKHN0cmluZ1tjdXJQb3NdKTsKKyAgICAgICAgZGVsdGEgLT0gY2hhcldpZHRoOworICAgICAg
ICBpZiAoaW5jbHVkZVBhcnRpYWxHbHlwaHMpIHsKKyAgICAgICAgICAgIGlmIChkZWx0YSArIGNo
YXJXaWR0aCAvIDIgPD0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChkZWx0YSArIGNoYXJXaWR0aCA8PSAwKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoKytjdXJQb3MgPCBzdHJpbmcuc2l6
ZSgpKTsKKworICAgIHJldHVybiBjdXJQb3M7Cit9CisKKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhP
dmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK3sKKyAgICBpZiAoIXByaW1hcnlGb250KCkt
PnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXJ1
bi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgc2FuaXRpemVkID0g
Rm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7Cisg
ICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKKwor
ICAgIGludCB3ID0gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgoc3RyaW5nLCAtMSwgUXQ6OlRl
eHRCeXBhc3NTaGFwaW5nKTsKKworICAgIC8vIFdlYktpdCBleHBlY3RzIHVzIHRvIGlnbm9yZSB3
b3JkIHNwYWNpbmcgb24gdGhlIGZpcnN0IGNoYXJhY3RlciAoYXMgb3Bwb3NlZCB0byB3aGF0IFF0
IGRvZXMpCisgICAgaWYgKHRyZWF0QXNTcGFjZShydW5bMF0pKQorICAgICAgICB3IC09IG1fd29y
ZFNwYWNpbmc7CisKKyAgICByZXR1cm4gdyArIHJ1bi5leHBhbnNpb24oKTsKK30KKworCitGbG9h
dFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwdCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7
CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFj
dGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgd2hvbGVUZXh0ID0gZnJvbVJhd0Rh
dGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisgICAgUVN0cmluZyBzZWxlY3RlZFRleHQgPSBmcm9t
UmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkLCBmcm9tLCBxTWluKHRvIC0gZnJvbSwgd2hvbGVU
ZXh0Lmxlbmd0aCgpIC0gZnJvbSkpOworCisgICAgaW50IHN0YXJ0WCA9IFFGb250TWV0cmljcyhm
b250KCkpLndpZHRoKHdob2xlVGV4dCwgZnJvbSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsKKyAg
ICBpbnQgd2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChzZWxlY3RlZFRleHQsIC0x
LCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOworCisgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCkg
KyBzdGFydFgsIHB0LnkoKSwgd2lkdGgsIGgpOworfQorCitib29sIEZvbnQ6OmNhbkV4cGFuZEFy
b3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRm9udDo6cHJpbWFyeUZvbnRIYXNHbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBG
b250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgRm9udDo6ZW1waGFz
aXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBGb250OjplbXBoYXNpc01hcmtIZWln
aHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxl
VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1
biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAv
KiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitRRm9udCBGb250Ojpmb250KCkgY29uc3QKK3sKKyAgICBR
Rm9udCBmID0gcHJpbWFyeUZvbnQoKS0+Z2V0UXRGb250KCk7CisgICAgaWYgKG1fbGV0dGVyU3Bh
Y2luZyAhPSAwKQorICAgICAgICBmLnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFic29sdXRlU3Bh
Y2luZywgbV9sZXR0ZXJTcGFjaW5nKTsKKyAgICBpZiAobV93b3JkU3BhY2luZyAhPSAwKQorICAg
ICAgICBmLnNldFdvcmRTcGFjaW5nKG1fd29yZFNwYWNpbmcpOworICAgIHJldHVybiBmOworfQor
CitRRm9udCBGb250OjpzeW50aGV0aWNGb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZm9udCgp
OworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAKaW5kZXggZTk1YjhjNWVhMjI0MmRiY2FhY2YyNmRk
OTllYmM0ZDM0OGE3N2QzYy4uZjA2NjhmZTAzYWEyZTMzZDM3NWUwNjYzNmE1NzM4ZDEyMmZhYzA4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxl
Rm9udERhdGFRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
U2ltcGxlRm9udERhdGFRdC5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUluaXQoKQogICAgIGZsb2F0IGxpbmVHYXAgPSBsaW5lU3BhY2luZyAtIGFz
Y2VudCAtIGRlc2NlbnQ7CiAKICAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwot
ICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNz
LnNldERlc2NlbnQocUFicyhkZXNjZW50KSk7CiAgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3Bh
Y2luZyhsaW5lU3BhY2luZyk7CiAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQp
OwogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAppbmRleCA3NTg1OWQ4YjQ5
Njg3YzRlNjNjOTMzZThmNGYwN2NhMjBiZjg4ZDdhLi4yODhmMTgxZGM2NmJlZDVlMWE2Yzc4ODU3
NTEwMjU2ZGUzOWVkYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgUVJlY3QgUmVuZGVyVGhlbWVR
U3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0
CiB2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJT
dHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0CiB7CiAgICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAgICBj
b25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOworICAgIGNv
bnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLnN5bnRoZXRpY0ZvbnQoKSk7
CiAgICAgUVN0eWxlKiBzdHlsZSA9IHFTdHlsZSgpOwogCiAgICAgc3dpdGNoIChyZW5kZXJTdHls
ZS0+YXBwZWFyYW5jZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuY3BwCmluZGV4IDVjNmMxODc2MzUxYmZkYzZiZTQ3ODAwMTM5MTQ2MTUxODhkODA3Y2Eu
LjA2NjUzNTkyZTQ2YjM2OTRkZGRhZmY1OWVkNDJmMzg5M2ZhYTZkYTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCkBAIC04NTUsNyArODU1LDcgQEAg
U3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBmaWxlbmFtZXMsIGNvbnMKICAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmls
ZVNlbGVjdGVkTGFiZWwoKTsKICAgICBlbHNlIGlmIChmaWxlbmFtZXMuc2l6ZSgpID09IDEpIHsK
ICAgICAgICAgU3RyaW5nIGZuYW1lID0gZmlsZW5hbWVzWzBdOwotICAgICAgICBRRm9udE1ldHJp
Y3MgZm0oZm9udC5mb250KCkpOworICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udC5zeW50aGV0
aWNGb250KCkpOwogICAgICAgICBzdHJpbmcgPSBmbS5lbGlkZWRUZXh0KGZuYW1lLCBRdDo6RWxp
ZGVMZWZ0LCB3aWR0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50IG4gPSBmaWxlbmFtZXMu
c2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
TW9iaWxlLmNwcAppbmRleCBjMmY0MjI4YjAwOTI4ZThiMmMxYzQyN2JkMGU3YjhhNzQ3MDQyYzEw
Li41MzBmN2ZhNDI2YjNjZmY0YzYyNThlZGY1YzFhZDQxZTFhODQ5ODQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcApAQCAtNDcs
NyArNDcsNiBAQAogCiAjaW5jbHVkZSA8UUNvbG9yPgogI2luY2x1ZGUgPFFGaWxlPgotI2luY2x1
ZGUgPFFGb250TWV0cmljcz4KICNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRlIDxRUGl4bWFw
Q2FjaGU+CiAKQEAgLTU5NSw3ICs1OTQsNiBAQCBpbnQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogdm9pZCBS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSog
cmVuZGVyU3R5bGUpIGNvbnN0CiB7CiAgICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAgICBjb25zdCBR
Rm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOwogCiAgICAgc3dpdGNo
IChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CkBA
IC02MzIsNyArNjMwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJh
c2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnMKICAgICBjYXNlIERlZmF1
bHRCdXR0b25QYXJ0OgogICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICBjYXNlIE1lbnVsaXN0UGFy
dDogewotICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ID0gZm0uaGVpZ2h0KCkgKiBidXR0b25IZWln
aHRSYXRpbyAqIHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIGNvbnN0IGlu
dCBoZWlnaHQgPSByZW5kZXJTdHlsZS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKSAqIGJ1dHRvbkhl
aWdodFJhdGlvICogcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICAgICAgc2l6ZSA9
IFFTaXplKHJlbmRlclN0eWxlLT53aWR0aCgpLnZhbHVlKCksIGhlaWdodCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRleCBmOTRkNDQ1ODlmOTY1
MzJiYTU5OWZkNDQ5YzMwMjAyYzljNzc2MzkyLi40YjAwOGQ3MjgzMGY0YTA3OThhYzA1ZjhhMDJi
YmJlMmRhNzZkMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0xNDI1LDcgKzE0
MjUsNyBAQCBRVmFyaWFudCBRV2ViUGFnZTo6aW5wdXRNZXRob2RRdWVyeShRdDo6SW5wdXRNZXRo
b2RRdWVyeSBwcm9wZXJ0eSkgY29uc3QKICAgICAgICAgY2FzZSBRdDo6SW1Gb250OiB7CiAgICAg
ICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRyb2wpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJT
dHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJUZXh0Q29udHJvbC0+c3R5bGUoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gUVZhcmlhbnQoUUZvbnQocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoUUZvbnQocmVuZGVyU3R5bGUtPmZv
bnQoKS5zeW50aGV0aWNGb250KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBRVmFyaWFudChRRm9udCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcAppbmRleCA3ZDY1ZjVjYmYxMDAyYWU5ZTU1ZDAw
MTM2MmM5Y2E4ZGNhZWMwODg0Li4yOWU0NjI0ZWJkM2UyMTRjNWZmYTc2ZDYwZjY0MmY3ZjYwZGI4
YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVu
dVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0
LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgUG9wdXBNZW51UXQ6OnNob3coY29uc3QgSW50
UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAgICAgUVJlY3QgZ2VvbWV0
cnkocmVjdCk7CiAgICAgZ2VvbWV0cnkubW92ZVRvcExlZnQodmlldy0+Y29udGVudHNUb1dpbmRv
dyhyZWN0LmxvY2F0aW9uKCkpKTsKICAgICBtX3BvcHVwLT5zZXRHZW9tZXRyeShnZW9tZXRyeSk7
Ci0gICAgbV9wb3B1cC0+c2V0Rm9udChtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250KCku
Zm9udCgpKTsKKyAgICBtX3BvcHVwLT5zZXRGb250KG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgp
LmZvbnQoKS5zeW50aGV0aWNGb250KCkpOwogCiAgICAgbV9zZWxlY3REYXRhID0gYWRvcHRQdHIo
bmV3IFNlbGVjdERhdGEobV9wb3B1cENsaWVudCkpOwogICAgIG1fcG9wdXAtPnNob3coKm1fc2Vs
ZWN0RGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggYjI5NTUxYTA2NDY3MzVlY2I3ZGQwNzg2ZTAzNGRjY2JjNTk2ZWYwNC4uZGQx
YzczMTMwYzdjZDQ3OGJlOTYwNWEwNzU3MTEyOTIzZmE4ZDg4YSAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAy
LTA3ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtR
dF0gVXNlIFFSYXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAgIEZsaXAgdGhl
IFFSYXdGb250IHN3aXRjaCBmb3IgUXQgNS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJm
OgorCiAyMDEyLTAyLTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFtQZXJmb3JtYW5jZVRlc3RzXSB0ZXN0cyBoYXZlIGRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0
IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgppbmRleCA4ZmQ4MmI0N2Q3NDcxNDM0Yzcw
ZWU5ZGE3MWFiMWMxMzc3YWJiYzI1Li5iOTM4MjkwNjlmZTAwMDNjNzQ3ZDkxMzIwZTMwMzgzZjNj
MTdhNDExIDEwMDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVz
LnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAt
MjA3LDYgKzIwNyw5IEBAIGNvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgc2Vuc29ycykgewogCiAh
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJPS4pOiBERUZJTkVTICs9IEVO
QUJMRV9GVUxMU0NSRUVOX0FQST0wCiAKKyMgVXNlIG9mIFFSYXdGb250IGluIFF0IDU6CitoYXZl
UXQoNSk6IERFRklORVMgKz0gSEFWRV9RUkFXRk9OVD0xCisKICMjIEZvcndhcmQgZW5hYmxlZCBm
ZWF0dXJlIG1hY3JvcyB0byBKYXZhU2NyaXB0IGVuYWJsZWQgZmVhdHVyZXMgbWFjcm9zCiBGRUFU
VVJFX0RFRklORVNfSkFWQVNDUklQVCA9IExBTkdVQUdFX0pBVkFTQ1JJUFQ9MQogdjg6IEZFQVRV
UkVfREVGSU5FU19KQVZBU0NSSVBUICs9IFY4X0JJTkRJTkc9MQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126112</attachid>
            <date>2012-02-08 10:28:07 -0800</date>
            <delta_ts>2012-02-13 02:35:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78001-20120208192640.patch</filename>
            <type>text/plain</type>
            <size>67192</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJkNzlmMDA2ZjRlZjI1
ZGZlY2JiZTE4NDIwMmU2MzA1Mjg1MTNhYS4uZmUyOWU3ZjlhZjA1YjIwNjM2NDIzMTIwOTM5ZjEy
NmIzZDk5MWM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEyLTAyLTA3ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gVXNlIFFS
YXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAgIFVwIHVudGlsIG5vdywgZm9u
dHMgaW4gdGhlIFF0IHBvcnQgaGF2ZSBiZWVuIGhhbmRsZWQgdmlhCisgICAgICAgIHRoZSBRRm9u
dCBBUEkuIFFSYXdGb250IG9mZmVycyBhIGxvd2VyLWxldmVsIEFQSSBlbmFibGluZworICAgICAg
ICB1cyB0byBiZSBtb3JlIGluIGxpbmUgd2l0aCB3aGF0IG90aGVyIFdlYktpdCBwb3J0cyBkby4K
KyAgICAgICAgVGhpcyBwYXRjaCBwcm9jZWVkcyB0byBzd2l0Y2hpbmcgb3ZlciB0byBRUmF3Rm9u
dCwgYW5kCisgICAgICAgIGVmZmVjdGl2ZWx5IHVzZSBhbiBlYXJsaWVyIGNoYW5nZSBieSBBbmRy
ZWFzIEtsaW5nCisgICAgICAgIHRoYXQgcmVtYWluZWQgZ3VhcmRlZCB1cCB1bnRpbCBub3cuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIHNpbmNlIHRoaXMgaXMgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcKKyAgICAgICAgZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoRm9udCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5bnRoZXRpY0ZvbnQpOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAg
ICAoU2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6Omdl
dFF0UmF3Rm9udCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyYXdGb250Rm9yQ2hh
cmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5G
b250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YVByaXZh
dGU6OkZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZp
bGxQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhGb3JHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd1F0R2x5cGhSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojppbml0Rm9ybWF0Rm9yVGV4dExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c3ludGhldGljRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpyYXdGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQ0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFF0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJvbVJhd0RhdGFXaXRob3V0UmVmKToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OnN0cm9rZVBlbkZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24p
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3U2ltcGxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6cHJpbWFyeUZvbnRIYXNHbHlwaEZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjplbXBoYXNpc01hcmtBc2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZW1waGFz
aXNNYXJrRGVzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjplbXBoYXNpc01hcmtIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZv
cldpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRP
blN0eWxlKToKKwogMjAxMi0wMi0wMiAgUmF1bCBIdWRlYSAgPHJodWRlYUBhZG9iZS5jb20+CiAK
ICAgICAgICAgUmVnaW9ucyBzaG91bGQgaWdub3JlIHRoZSBzYXZlZCBjdXJyZW50UmVuZGVyRmxv
d1RocmVhZCBkdXJpbmcgcmVwYWludGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAwYjg1NGY5NTJhNmI4
MzA3ODc2NjBlZTdhZGIxZWI0YjczOGY0NGE1Li43Yjk4YjRlNDNlOTE3ZTQxMGRmNDI0MDQ0MzBj
YmM2ODAzYWExZTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAyLTA3
ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0g
VXNlIFFSYXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAgIFNpbmNlIFFGb250
IGlzIG5vdCB1c2VkIGludGVybmFsbHksIHdlIG5vdyBuZWVkCisgICAgICAgIHRvIHF1ZXJ5IGZv
ciBhIFFGb250IHRoYXQgc2hvdWxkIGJlIGEgZ29vZAorICAgICAgICBlbm91Z2ggbWF0Y2guCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdl
YnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnkpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVF0OjpzaG93KToKKwogMjAxMi0wMi0wMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJh
IEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIEF2b2lkIGNy
ZWF0aW5nIE5hbWVkTm9kZU1hcCB1bm5lY2Vzc2FyaWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBmYzZmNmU2
NGYzOGYzYzlhZDliMThjMWJjNGI2NGJjMDdjN2FkZTY1Li42YTZhZjU5MWFkZTE0N2NjYTcwNzk0
MTQzYTQzZjAxY2NjYTY4YTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTI3NzEsNyArMjc3MSw2IEBAIFNP
VVJDRVMgKz0gXAogICAgIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRR
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0Zsb2F0UmVjdFF0LmNwcCBcCkBAIC0zMzM2LDE4ICszMzM1LDE1IEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9NQVRITUw9MSkgewogICAgICAgICByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKIH0KIAotIyBRUmF3Rm9udCBmZWF0dXJl
IGFkZGVkIGluIFF0IDQuOC4wCisjIFFSYXdGb250IHRyYW5zaXRpb24gaGFuZGxpbmcuCiAjCi0j
IElmIGF2YWlsYWJsZSwgdGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgZmFzdCBwYXRoIGZv
ciB0ZXh0IHJlbmRlcmluZwotIyBhbmQgbWVhc3VyZW1lbnQgaW4gV2ViQ29yZS4gQmVjYXVzZSB0
aGUgZmVhdHVyZSBpcyBzdGlsbCB1bmRlcmdvaW5nCi0jIGRldmVsb3BtZW50LCBpdCBpcyBkaXNh
YmxlZCBpbiBidWlsZHMuCi0jCi0jIGV4aXN0cygkJFtRVF9JTlNUQUxMX0hFQURFUlNdL1F0R3Vp
L1FSYXdGb250KTogSEFWRV9RUkFXRk9OVD0xCi0KLSFpc0VtcHR5KEhBVkVfUVJBV0ZPTlQpIHsK
LSAgICBERUZJTkVTICs9IEhBVkVfUVJBV0ZPTlQ9MQorIyBFdmVuIHRob3VnaCBRUmF3Rm9udCB3
YXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gUXQgNC44LCBpdCBoYWQKKyMgbGltaXRhdGlvbnMgdGhh
dCBtYWRlIHN3aXRjaGluZyBmdWxseSB0byBpdCBpbXBvc3NpYmxlLgorIyBXZSBwcmVzZXJ2ZSB0
aGUgb2xkIGNvZGUgcGF0aCB3aGVuIGJ1aWxkaW5nIHdpdGggUXQgNC4KIAorY29udGFpbnMoREVG
SU5FUywgSEFWRV9RUkFXRk9OVD0xKSB7CiAgICAgU09VUkNFUyArPSBcCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250RmFzdFBhdGguY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJl
ZU5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAg
XApAQCAtMzM1Niw4ICszMzUyLDEyIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9NQVRITUw9
MSkgewogICAgIEhFQURFUlMgKz0gXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVU
ZXh0SXRlcmF0b3IuaAorfSBlbHNlIHsKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFF0NC5jcHAKIH0KIAorCiBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfR0VPTE9DQVRJT049MSkgewogICAgIHY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IGMyZDljNThjM2Y1MDQ4
MTVkNWMzNDk2NTJjYWZhMjRkZDkzMTQ3MzUuLjYyMDZjZTkxNGM0NDZjNGVkMDQ3M2Y0YjI5YmE0
YjI2ZmQ3Y2M3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CkBAIC0yNyw5ICsyNyw2IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKLSNpZiBQTEFURk9STShRVCkg
JiYgSEFWRShRUkFXRk9OVCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNlbmRpZgog
I2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRl
ICJUZXh0UnVuLmgiCkBAIC0xNTAsMTEgKzE0Nyw2IEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKIAotI2lmIFBM
QVRGT1JNKFFUKSAmJiBIQVZFKFFSQVdGT05UKQotICAgIGlmIChjb250ZXh0LT50ZXh0RHJhd2lu
Z01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxl
eDsKLSNlbmRpZgotCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKICAgICAgICAg
cmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGQxNWE3N2YzY2Q3MzNm
YWM4OWI4MDkxMWYxYzRiNDdhYTRkOTA3MmQuLjZmZjRjNTg5ZmMyNTM0ZTc5NTJiOTkyYzM3NTE2
OWNkYzA2MzY0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAg
LTM2LDggKzM2LDEzIEBACiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4K
IAogI2lmIFBMQVRGT1JNKFFUKQorI2lmIEhBVkUoUVJBV0ZPTlQpCisjaW5jbHVkZSA8UVJhd0Zv
bnQ+CitjbGFzcyBRVGV4dExheW91dDsKKyNlbHNlCiAjaW5jbHVkZSA8UUZvbnQ+CiAjZW5kaWYK
KyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3NSw4ICsxODAsMTMgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0
IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFu
c2lvbik7CiAKICNpZiBQTEFURk9STShRVCkKKyNpZiBIQVZFKFFSQVdGT05UKQorICAgIFFSYXdG
b250IHJhd0ZvbnQoKSBjb25zdDsKKyNlbHNlCiAgICAgUUZvbnQgZm9udCgpIGNvbnN0OwogI2Vu
ZGlmCisgICAgUUZvbnQgc3ludGhldGljRm9udCgpIGNvbnN0OworI2VuZGlmCiAKICAgICBzdGF0
aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgc2hv
dWxkVXNlU21vb3RoaW5nKCk7CkBAIC0yNTMsNiArMjYzLDExIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9mb250TGlzdCAmJiBtX2ZvbnRMaXN0LT5sb2FkaW5nQ3VzdG9tRm9u
dHMoKTsKICAgICB9CisjaWYgUExBVEZPUk0oUVQpICYmIEhBVkUoUVJBV0ZPTlQpCisgICAgdm9p
ZCBpbml0Rm9ybWF0Rm9yVGV4dExheW91dChRVGV4dExheW91dCopIGNvbnN0OworI2VuZGlmCisK
KwogCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOwogICAgIG11dGFibGUg
UmVmUHRyPEZvbnRGYWxsYmFja0xpc3Q+IG1fZm9udExpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAppbmRleCBkZDg2ZjAwNGU0Yzgz
OTYzNjNjOTUxMjM0ZGFmYWY1MjQwNzk4YjMxLi45YjExMzcxZjVhMmU2ZDJiZWNkYjAwZTJlOTky
NjFlMDRmYzg5MTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmgKQEAgLTU0LDcgKzU0LDExIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1
ZUFUU1VTdHlsZSogQVRTVVN0eWxlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKKyNpZiAh
SEFWRShRUkFXRk9OVCkKICNpbmNsdWRlIDxRRm9udD4KKyNlbHNlCisjaW5jbHVkZSA8UVJhd0Zv
bnQ+CisjZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xODgsNyArMTky
LDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCisjaWYgIUhBVkUoUVJB
V0ZPTlQpCiAgICAgUUZvbnQgZ2V0UXRGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURh
dGEuZm9udCgpOyB9CisjZWxzZQorICAgIFFSYXdGb250IGdldFF0UmF3Rm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGxhdGZvcm1EYXRhLnJhd0ZvbnQoKTsgfQorI2VuZGlmIC8vICFIQVZFKFFSQVdG
T05UKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pIHx8IChPUyhXSU5ET1dTKSAmJiBQTEFU
Rk9STShXWCkpCkBAIC0zNDEsNyArMzQ5LDcgQEAgQUxXQVlTX0lOTElORSBmbG9hdCBTaW1wbGVG
b250RGF0YTo6d2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICBtX2dseXBoVG9X
aWR0aE1hcC5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIHdpZHRoKTsKICAgICByZXR1cm4gd2lk
dGg7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyAhSEFWRShRUkFXRk9OVCkKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250Q2FjaGVRdC5jcHAKaW5kZXggMDJjZTQyYTljMWYyNGIyYjdjM2E1YjczNDQ2NDg5Zjg0
ZTFmNTI3YS4uODE2YmNjYjg5MjRjYWFmODM1MDljYzA2YWU2YjA1MmFhMzE4YmMzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cApAQCAtNDksMzUgKzQ5LDI5IEBAIHZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogfQog
CiAjaWYgSEFWRShRUkFXRk9OVCkKLXN0YXRpYyBRUmF3Rm9udCByYXdGb250Rm9yQ2hhcmFjdGVy
cyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFGb250JiByZXF1ZXN0ZWRGb250KQorc3Rh
dGljIFFSYXdGb250IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKGNvbnN0IFFTdHJpbmcmIHN0cmluZywg
Y29uc3QgUVJhd0ZvbnQmIGZvbnQpCiB7Ci0gICAgUUZvbnQgZm9udChyZXF1ZXN0ZWRGb250KTsK
LSAgICBmb250LnNldFN0eWxlU3RyYXRlZ3koUUZvbnQ6Ok5vRm9udE1lcmdpbmcpOwotCi0gICAg
UVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZywgZm9udCk7CisgICAgUVRleHRMYXlvdXQgbGF5b3V0
KHN0cmluZyk7CisgICAgbGF5b3V0LnNldFJhd0ZvbnQoZm9udCk7CiAgICAgbGF5b3V0LmJlZ2lu
TGF5b3V0KCk7CiAgICAgbGF5b3V0LmNyZWF0ZUxpbmUoKTsKICAgICBsYXlvdXQuZW5kTGF5b3V0
KCk7CiAKICAgICBRTGlzdDxRR2x5cGhSdW4+IGdseXBoTGlzdCA9IGxheW91dC5nbHlwaFJ1bnMo
KTsKLQotICAgIEFTU0VSVChnbHlwaExpc3Quc2l6ZSgpID09IDEpOwotCi0gICAgY29uc3QgUUds
eXBoUnVuJiBnbHlwaHMoZ2x5cGhMaXN0LmF0KDApKTsKLSAgICBRVmVjdG9yPHF1aW50MzI+IGds
eXBoSW5kZXhlcyA9IGdseXBocy5nbHlwaEluZGV4ZXMoKTsKLQotICAgIGlmIChnbHlwaEluZGV4
ZXMuaXNFbXB0eSgpKQorICAgIEFTU0VSVChnbHlwaExpc3Quc2l6ZSgpIDw9IDEpOworICAgIGlm
ICghZ2x5cGhMaXN0LnNpemUoKSkKICAgICAgICAgcmV0dXJuIFFSYXdGb250KCk7CiAKKyAgICBj
b25zdCBRR2x5cGhSdW4mIGdseXBocyhnbHlwaExpc3QuYXQoMCkpOwogICAgIHJldHVybiBnbHlw
aHMucmF3Rm9udCgpOwogfQotI2VuZGlmCisjZW5kaWYgLy8gSEFWRShRUkFXRk9OVCkKIAogY29u
c3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQogewog
I2lmIEhBVkUoUVJBV0ZPTlQpCiAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZzo6ZnJvbVJh
d0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgp
OwotICAgIFFSYXdGb250IGNvbXB1dGVkRm9udCA9IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKHFzdHJp
bmcsIGZvbnQuZm9udCgpKTsKKyAgICBRUmF3Rm9udCBjb21wdXRlZEZvbnQgPSByYXdGb250Rm9y
Q2hhcmFjdGVycyhxc3RyaW5nLCBmb250LnJhd0ZvbnQoKSk7CiAgICAgaWYgKCFjb21wdXRlZEZv
bnQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBGb250UGxhdGZvcm1EYXRhIGFs
dGVybmF0ZUZvbnQoY29tcHV0ZWRGb250KTsKQEAgLTEwNywxMSArMTAxLDkgQEAgdm9pZCBGb250
Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNp
Z25lZD4mKQogCiBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hF
Q0soNCwgOCwgMCkKICAgICBRRm9udERhdGFiYXNlIGRiOwogICAgIGlmICghZGIuaGFzRmFtaWx5
KGZhbWlseU5hbWUpKQogICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgogICAgIHJldHVybiBuZXcg
Rm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmgKaW5kZXggMzk5NmQyMjNiOTg3MDJjZGY2MzBiOTg1ZjY2MjlhOGZi
MGE1ZjNiMS4uN2ZhOWY4YzExNWVhODk0MDI5ODhlOWYzNjFlNmIxNWQxNWE0MWIzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0
QWxsb2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpZiBIQVZFKFFSQVdGT05UKQorI2luY2x1ZGUgPFFSYXdGb250PgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsOCArNDQsMTIgQEAgcHVibGljOgog
ICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKSB7IH0KICAgICB+Rm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSgpOwogCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgLy8gZm9yIHVzZSB3aXRoIFFGb250
RGF0YWJhc2U6OmFkZEFwcGxpY2F0aW9uRm9udC9yZW1vdmVBcHBsaWNhdGlvbkZvbnQKICAgICBp
bnQgbV9oYW5kbGU7CisjZWxzZQorICAgIFFSYXdGb250IG1fcmF3Rm9udDsKKyNlbmRpZgogCiAg
ICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBUZXh0T3JpZW50YXRp
b24gPSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoLCBGb250UmVu
ZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGFRdC5jcHAKaW5kZXggMjBmMTYxYThmMjFmZjgxNDA2YTgyNjQ5NDNlOWUwMjdiMWIwYzBjMy4u
ZGY4MWYzM2M1Y2Y1OWE4YzQ0OGE0MGQ1NjExMTE0OTM0N2E4NDMzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhUXQuY3BwCkBAIC0yNCw0MCArMjQsNTYgQEAKIAogI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpZiAhSEFWRShRUkFX
Rk9OVCkKICNpbmNsdWRlIDxRRm9udERhdGFiYXNlPgorI2VuZGlmCiAjaW5jbHVkZSA8UVN0cmlu
Z0xpc3Q+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6
fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQogeworI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFG
b250RGF0YWJhc2U6OnJlbW92ZUFwcGxpY2F0aW9uRm9udChtX2hhbmRsZSk7CisjZW5kaWYKIH0K
IAogRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1E
YXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24sIFRl
eHRPcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCwgRm9udFJlbmRlcmluZ01vZGUpCiB7Cisj
aWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgUUZvbnQgZm9udDsKICAgICBmb250LnNldEZhbWlseShR
Rm9udERhdGFiYXNlOjphcHBsaWNhdGlvbkZvbnRGYW1pbGllcyhtX2hhbmRsZSlbMF0pOwogICAg
IGZvbnQuc2V0UGl4ZWxTaXplKHNpemUpOwogICAgIGlmIChib2xkKQogICAgICAgICBmb250LnNl
dFdlaWdodChRRm9udDo6Qm9sZCk7CiAgICAgZm9udC5zZXRJdGFsaWMoaXRhbGljKTsKLQogICAg
IHJldHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnQpOworI2Vsc2UKKyAgICBRX0FTU0VSVChtX3Jh
d0ZvbnQuaXNWYWxpZCgpKTsKKyAgICBtX3Jhd0ZvbnQuc2V0UGl4ZWxTaXplKHFyZWFsKHNpemUp
KTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX3Jhd0ZvbnQpOworI2VuZGlmCiB9CiAK
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hh
cmVkQnVmZmVyKiBidWZmZXIpCiB7CiAgICAgQVNTRVJUX0FSRyhidWZmZXIsIGJ1ZmZlcik7CiAK
LSAgICBpbnQgaWQgPSBRRm9udERhdGFiYXNlOjphZGRBcHBsaWNhdGlvbkZvbnRGcm9tRGF0YShR
Qnl0ZUFycmF5KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkpOworICAgIGNvbnN0IFFC
eXRlQXJyYXkgZm9udERhdGEoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyNpZiAh
SEFWRShRUkFXRk9OVCkKKyAgICBpbnQgaWQgPSBRRm9udERhdGFiYXNlOjphZGRBcHBsaWNhdGlv
bkZvbnRGcm9tRGF0YShmb250RGF0YSk7CiAgICAgaWYgKGlkID09IC0xKQogICAgICAgICByZXR1
cm4gMDsKLQogICAgIFFfQVNTRVJUKFFGb250RGF0YWJhc2U6OmFwcGxpY2F0aW9uRm9udEZhbWls
aWVzKGlkKS5zaXplKCkgPiAwKTsKKyNlbmRpZgogCiAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0
YSAqZGF0YSA9IG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOworI2lmICFIQVZFKFFSQVdGT05U
KQogICAgIGRhdGEtPm1faGFuZGxlID0gaWQ7CisjZWxzZQorICAgIC8vIFBpeGVsIHNpemUgZG9l
c24ndCBtYXR0ZXIgYXQgdGhpcyBwb2ludCwgaXQgaXMgc2V0IGluIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGE6OmZvbnRQbGF0Zm9ybURhdGEuCisgICAgZGF0YS0+bV9yYXdGb250LmxvYWRGcm9tRGF0
YShmb250RGF0YSwgLypwaXhlbFNpemUgPSAqLzAsIFFGb250OjpQcmVmZXJEZWZhdWx0SGludGlu
Zyk7CisjZW5kaWYKICAgICByZXR1cm4gZGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDc2NjJh
YTAwNzFlMjUxZGU0MDUyYzRiZjdhMTA1OTUzZTBmYzhhN2MuLmY1NWUxOWMyYjEzMGMzZjg5Zjc0
MjQ1YTM0NTVhOGQzMzEwMDk0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTQwLDggKzQwLDEzIEBAIGNs
YXNzIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFBsYXRm
b3JtRGF0YVByaXZhdGU+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250UGxhdGZvcm1E
YXRhUHJpdmF0ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEZvbnRQ
bGF0Zm9ybURhdGFQcml2YXRlKCkKKyNpZiAhSEFWRShRUkFXRk9OVCkKICAgICAgICAgOiBzaXpl
KGZvbnQucGl4ZWxTaXplKCkpCiAgICAgICAgICwgYm9sZChmb250LmJvbGQoKSkKKyNlbHNlCisg
ICAgICAgIDogc2l6ZSgwKQorICAgICAgICAsIGJvbGQoZmFsc2UpCisjZW5kaWYKICAgICAgICAg
LCBvYmxpcXVlKGZhbHNlKQogICAgICAgICAsIGlzRGVsZXRlZFZhbHVlKGZhbHNlKQogICAgIHsg
fQpAQCAtNTEsMjAgKzU2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgLCBvYmxpcXVlKG9ibGlxdWUp
CiAgICAgICAgICwgaXNEZWxldGVkVmFsdWUoZmFsc2UpCiAgICAgeyB9CisjaWYgIUhBVkUoUVJB
V0ZPTlQpCiAgICAgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoY29uc3QgUUZvbnQmIGZvbnQpCiAg
ICAgICAgIDogZm9udChmb250KQotI2lmIEhBVkUoUVJBV0ZPTlQpCi0gICAgICAgICwgcmF3Rm9u
dChRUmF3Rm9udDo6ZnJvbUZvbnQoZm9udCwgUUZvbnREYXRhYmFzZTo6QW55KSkKLSNlbmRpZgog
ICAgICAgICAsIHNpemUoZm9udC5waXhlbFNpemUoKSkKICAgICAgICAgLCBib2xkKGZvbnQuYm9s
ZCgpKQogICAgICAgICAsIG9ibGlxdWUoZmFsc2UpCiAgICAgICAgICwgaXNEZWxldGVkVmFsdWUo
ZmFsc2UpCiAgICAgeyB9Ci0jaWYgSEFWRShRUkFXRk9OVCkKKyNlbHNlCiAgICAgRm9udFBsYXRm
b3JtRGF0YVByaXZhdGUoY29uc3QgUVJhd0ZvbnQmIHJhd0ZvbnQpCi0gICAgICAgIDogZm9udCgp
Ci0gICAgICAgICwgcmF3Rm9udChyYXdGb250KQorICAgICAgICA6IHJhd0ZvbnQocmF3Rm9udCkK
ICAgICAgICAgLCBzaXplKHJhd0ZvbnQucGl4ZWxTaXplKCkpCiAgICAgICAgICwgYm9sZChyYXdG
b250LndlaWdodCgpID49IFFGb250OjpCb2xkKQogICAgICAgICAsIG9ibGlxdWUoZmFsc2UpCkBA
IC03NSw4ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgOiBpc0RlbGV0ZWRWYWx1ZSh0cnVlKQog
ICAgIHsgfQogCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgUUZvbnQgZm9udDsKLSNpZiBIQVZF
KFFSQVdGT05UKQorI2Vsc2UKICAgICBRUmF3Rm9udCByYXdGb250OwogI2VuZGlmCiAgICAgZmxv
YXQgc2l6ZTsKQEAgLTkwLDEwICs5MywxMSBAQCBjbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKIHB1
YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBv
YmxpcXVlKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgaW50IHdvcmRTcGFjaW5nID0gMCwgaW50IGxl
dHRlclNwYWNpbmcgPSAwKTsKKyNpZiAhSEFWRShRUkFXRk9OVCkKICAgICBGb250UGxhdGZvcm1E
YXRhKGNvbnN0IFFGb250JiBmb250KQogICAgICAgICA6IG1fZGF0YShhZG9wdFJlZihuZXcgRm9u
dFBsYXRmb3JtRGF0YVByaXZhdGUoZm9udCkpKQogICAgIHsgfQotI2lmIEhBVkUoUVJBV0ZPTlQp
CisjZWxzZQogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGZs
b2F0IHNpemUpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgUVJhd0ZvbnQmIHJhd0ZvbnQp
CiAgICAgICAgIDogbV9kYXRhKGFkb3B0UmVmKG5ldyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZShy
YXdGb250KSkpCkBAIC0xMTIsNiArMTE2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9k
YXRhICYmIG1fZGF0YS0+aXNEZWxldGVkVmFsdWU7CiAgICAgfQogCisjaWYgIUhBVkUoUVJBV0ZP
TlQpCiAgICAgUUZvbnQgZm9udCgpIGNvbnN0CiAgICAgewogICAgICAgICBRX0FTU0VSVCghaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CkBAIC0xMTksNyArMTI0LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIFFGb250KCk7CiAgICAgICAgIHJldHVybiBtX2RhdGEtPmZvbnQ7CiAg
ICAgfQotI2lmIEhBVkUoUVJBV0ZPTlQpCisjZWxzZQogICAgIFFSYXdGb250IHJhd0ZvbnQoKSBj
b25zdAogICAgIHsKICAgICAgICAgUV9BU1NFUlQoIWlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBs
YXRmb3JtRGF0YVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXggODZmYzEyZTNhMWVhNzA4MGUxZWMxZTgwZmQwZWE5
NjE1NmVmOTIwMy4uM2Q5MzA4ZjI0NjA2MWYyZTM0NDljYTA2MzU3NmZiYmQwNjliYTliMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3Jt
RGF0YVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UGxhdGZvcm1EYXRhUXQuY3BwCkBAIC02Myw3ICs2MywxMSBAQCBGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQogRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIGludCB3b3JkU3BhY2lu
ZywgaW50IGxldHRlclNwYWNpbmcpCiAgICAgOiBtX2RhdGEoYWRvcHRSZWYobmV3IEZvbnRQbGF0
Zm9ybURhdGFQcml2YXRlKCkpKQogeworI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFGb250JiBm
b250ID0gbV9kYXRhLT5mb250OworI2Vsc2UKKyAgICBRRm9udCBmb250OworI2VuZGlmCiAgICAg
aW50IHJlcXVlc3RlZFNpemUgPSBkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpOwogICAg
IGZvbnQuc2V0RmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGZvbnQuc2V0UGl4ZWxTaXplKHJlcXVl
c3RlZFNpemUpOwpAQCAtNzEsMTcgKzc1LDE5IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvCiAg
ICAgZm9udC5zZXRXZWlnaHQodG9RRm9udFdlaWdodChkZXNjcmlwdGlvbi53ZWlnaHQoKSkpOwog
ICAgIGZvbnQuc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpOwogICAgIGZvbnQuc2V0TGV0dGVy
U3BhY2luZyhRRm9udDo6QWJzb2x1dGVTcGFjaW5nLCBsZXR0ZXJTcGFjaW5nKTsKLSAgICBjb25z
dCBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOwotICAgIGZvbnQuc2V0
Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNtYWxsQ2FwcyA6IFFGb250OjpNaXhl
ZENhc2UpOwogICAgIGZvbnQuc2V0U3R5bGVTdHJhdGVneShRRm9udDo6Rm9yY2VJbnRlZ2VyTWV0
cmljcyk7CiAKICAgICBtX2RhdGEtPmJvbGQgPSBmb250LmJvbGQoKTsKKyNpZiAhSEFWRShRUkFX
Rk9OVCkKKyAgICBjb25zdCBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxsQ2Fwcygp
OworICAgIGZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNtYWxsQ2Fw
cyA6IFFGb250OjpNaXhlZENhc2UpOwogICAgIC8vIFdlYktpdCBhbGxvd3MgZm9udCBzaXplIHpl
cm8gYnV0IFFGb250IGRvZXMgbm90LiBXZSB3aWxsIHJldHVybgogICAgIC8vIG1fZGF0YS0+c2l6
ZSBpZiBhIGZvbnQgc2l6ZSBvZiB6ZXJvIGlzIHJlcXVlc3RlZCBhbmQgcGl4ZWxTaXplKCkKICAg
ICAvLyBvdGhlcndpc2UuCiAgICAgbV9kYXRhLT5zaXplID0gKCFyZXF1ZXN0ZWRTaXplKSA/IHJl
cXVlc3RlZFNpemUgOiBmb250LnBpeGVsU2l6ZSgpOwotI2lmIEhBVkUoUVJBV0ZPTlQpCisjZWxz
ZQogICAgIG1fZGF0YS0+cmF3Rm9udCA9IFFSYXdGb250Ojpmcm9tRm9udChmb250LCBRRm9udERh
dGFiYXNlOjpBbnkpOworICAgIG1fZGF0YS0+c2l6ZSA9IG1fZGF0YS0+cmF3Rm9udC5waXhlbFNp
emUoKTsKICNlbmRpZgogfQogCkBAIC04OSwxNSArOTUsMTMgQEAgRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25z
dCBBdG8KIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgb3RoZXIsIGZsb2F0IHNpemUpCiAgICAgOiBtX2RhdGEoYWRvcHRSZWYobmV3IEZv
bnRQbGF0Zm9ybURhdGFQcml2YXRlKCkpKQogewotICAgIG1fZGF0YS0+Zm9udCA9IG90aGVyLm1f
ZGF0YS0+Zm9udDsKICAgICBtX2RhdGEtPnJhd0ZvbnQgPSBvdGhlci5tX2RhdGEtPnJhd0ZvbnQ7
CiAgICAgbV9kYXRhLT5ib2xkID0gb3RoZXIubV9kYXRhLT5ib2xkOwogICAgIG1fZGF0YS0+b2Js
aXF1ZSA9IG90aGVyLm1fZGF0YS0+b2JsaXF1ZTsKLSAgICBtX2RhdGEtPmZvbnQuc2V0UGl4ZWxT
aXplKHNpemUpOwogICAgIG1fZGF0YS0+cmF3Rm9udC5zZXRQaXhlbFNpemUoc2l6ZSk7Ci0gICAg
bV9kYXRhLT5zaXplID0gc2l6ZSA/IG1fZGF0YS0+Zm9udC5waXhlbFNpemUoKSA6IDA7CisgICAg
bV9kYXRhLT5zaXplID0gbV9kYXRhLT5yYXdGb250LnBpeGVsU2l6ZSgpOwogfQotI2VuZGlmCisj
ZW5kaWYgLy8gSEFWRShRUkFXRk9OVCkKIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRv
cj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAogewpAQCAtMTEwLDcgKzEx
NCwxMSBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgY29uc3QgYm9vbCBlcXVhbHMgPSAobV9kYXRhLT5z
aXplID09IG90aGVyLm1fZGF0YS0+c2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1f
ZGF0YS0+Ym9sZCA9PSBvdGhlci5tX2RhdGEtPmJvbGQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiBtX2RhdGEtPm9ibGlxdWUgPT0gb3RoZXIubV9kYXRhLT5vYmxpcXVlCisjaWYgIUhBVkUo
UVJBV0ZPTlQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9kYXRhLT5mb250ID09IG90
aGVyLm1fZGF0YS0+Zm9udCk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1f
ZGF0YS0+cmF3Rm9udCA9PSBvdGhlci5tX2RhdGEtPnJhd0ZvbnQpOworI2VuZGlmCiAgICAgcmV0
dXJuIGVxdWFsczsKIH0KIApAQCAtMTIwLDEwICsxMjgsMTUgQEAgdW5zaWduZWQgRm9udFBsYXRm
b3JtRGF0YTo6aGFzaCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX2RhdGEt
PmlzRGVsZXRlZFZhbHVlKQogICAgICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gcUhhc2gobV9k
YXRhLT5mb250LnRvU3RyaW5nKCkpCi0gICAgICAgICAgIF4gcUhhc2goKnJlaW50ZXJwcmV0X2Nh
c3Q8cXVpbnQzMio+KCZtX2RhdGEtPnNpemUpKQotICAgICAgICAgICBeIHFIYXNoKG1fZGF0YS0+
Ym9sZCkKLSAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPm9ibGlxdWUpOworI2lmICFIQVZFKFFS
QVdGT05UKQorICAgIHJldHVybiAocUhhc2gobV9kYXRhLT5mb250LnRvU3RyaW5nKCkpIF4gcUhh
c2gobV9kYXRhLT5ib2xkKQorICAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPm9ibGlxdWUpKQor
ICAgICAgICAgICAgXiBxSGFzaCgqcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4oJm1fZGF0YS0+
c2l6ZSkpOworI2Vsc2UKKyAgICByZXR1cm4gcUhhc2gobV9kYXRhLT5yYXdGb250LmZhbWlseU5h
bWUoKSkgXiBxSGFzaChtX2RhdGEtPnJhd0ZvbnQuc3R5bGUoKSkKKyAgICAgICAgICAgIF4gcUhh
c2gobV9kYXRhLT5yYXdGb250LndlaWdodCgpKQorICAgICAgICAgICAgXiBxSGFzaCgqcmVpbnRl
cnByZXRfY2FzdDxxdWludDMyKj4oJm1fZGF0YS0+c2l6ZSkpOworI2VuZGlmCiB9CiAKICNpZm5k
ZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
LmNwcAppbmRleCA1MTE5MzM0OWZlNDIwZjU2MjMzODZiNjQ2ZmViNjM5NGEyMTY0ODI2Li43Yjkw
NTM2YmMwYTllNDJlOGI0MGU0ZWU1YjA2ZmM5MGY4YzlhMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogCkBAIC0yNiw5ICsyNiw3IEBACiAjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgotI2lmIEhBVkUoUVJBV0ZPTlQpCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTM3LDE3ICszNSwxMiBA
QAogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KLSNpbmNsdWRlIDxR
Rm9udEluZm8+Ci0jaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgogI2luY2x1ZGUgPFFQYWludGVyPgog
I2luY2x1ZGUgPFFQYWludGVyUGF0aD4KICNpbmNsdWRlIDxRUGVuPgotI2lmIEhBVkUoUVJBV0ZP
TlQpCiAjaW5jbHVkZSA8UVBvaW50Rj4KLSNlbmRpZgogI2luY2x1ZGUgPFFUZXh0TGF5b3V0Pgog
I2luY2x1ZGUgPHFhbGdvcml0aG1zLmg+Ci0jaW5jbHVkZSA8cWRlYnVnLmg+CiAKICNpbmNsdWRl
IDxsaW1pdHMuaD4KIApAQCAtOTIsNyArODUsNyBAQCBzdGF0aWMgUVBlbiBmaWxsUGVuRm9yQ29u
dGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCkKICAgICAgICAgcmV0dXJuIFFQZW4oUUJydXNoKGN0
eC0+ZmlsbFBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpLCAwKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5maWxsQ29sb3IoKSkpOworICAgIHJl
dHVybiBRUGVuKFFDb2xvcihjdHgtPmZpbGxDb2xvcigpKSwgMCk7CiB9CiAKIHN0YXRpYyBRUGVu
IHN0cm9rZVBlbkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgpCkBAIC0xMTIsMTU4ICsx
MDUsOTIgQEAgc3RhdGljIFFQZW4gc3Ryb2tlUGVuRm9yQ29udGV4dChHcmFwaGljc0NvbnRleHQq
IGN0eCkKICAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5zdHJva2VDb2xvcigpKSwgY3R4LT5z
dHJva2VUaGlja25lc3MoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBRRm9udCYgZm9udCwgYm9vbCBpc0NvbXBsZXhU
ZXh0KQorc3RhdGljIFFQYWludGVyUGF0aCBwYXRoRm9yR2x5cGhzKGNvbnN0IFFHbHlwaFJ1biYg
Z2x5cGhSdW4sIGNvbnN0IFFQb2ludEYmIG9mZnNldCkKIHsKLSAgICBpZiAodG8gPCAwKQotICAg
ICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKLQotICAgIFFQYWludGVyICpwID0gY3R4LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLQotICAgIFFQZW4gdGV4dEZpbGxQZW47Ci0gICAgaWYgKGN0eC0+dGV4dERy
YXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpCi0gICAgICAgIHRleHRGaWxsUGVuID0gZmlsbFBl
bkZvckNvbnRleHQoY3R4KTsKLQotICAgIFFQZW4gdGV4dFN0cm9rZVBlbjsKLSAgICBpZiAoY3R4
LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICB0ZXh0U3Ryb2tl
UGVuID0gc3Ryb2tlUGVuRm9yQ29udGV4dChjdHgpOwotCi0gICAgU3RyaW5nIHNhbml0aXplZCA9
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwot
ICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7Ci0g
ICAgUVBvaW50RiBwdChwb2ludC54KCksIHBvaW50LnkoKSk7Ci0KLSAgICBpZiAoZnJvbSA+IDAg
fHwgdG8gPCBydW4ubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKGlzQ29tcGxleFRleHQpIHsKLSAg
ICAgICAgICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcsIGZvbnQpOwotICAgICAgICAgICAg
UVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwotICAgICAgICAgICAg
ZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWChmcm9tKTsKLSAgICAgICAgICAgIGZsb2F0IHgyID0g
bGluZS5jdXJzb3JUb1godG8pOwotICAgICAgICAgICAgaWYgKHgyIDwgeDEpCi0gICAgICAgICAg
ICAgICAgcVN3YXAoeDEsIHgyKTsKLQotICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQp
OwotICAgICAgICAgICAgaW50IGFzY2VudCA9IGZtLmFzY2VudCgpOwotICAgICAgICAgICAgUVJl
Y3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9pbnQueSgpIC0gYXNjZW50LCB4MiAt
IHgxLCBmbS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBRUmVjdEYgY2xpcCA9IGJvdW5kaW5nUmVj
dDsKLQotICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVy
KCk7Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9T
aGFkb3cpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChjdHgt
PnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQu
aGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9IDAsIGR4MiA9IDAsIGR5MSA9
IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC54KCkgPiAwKQot
ICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZzZXQueCgpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHgxID0gLXNoYWRvd09mZnNldC54KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC55KCkgPiAwKQotICAgICAgICAgICAgICAg
ICAgICBkeTIgPSBzaGFkb3dPZmZzZXQueSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgZHkxID0gLXNoYWRvd09mZnNldC55KCk7Ci0gICAgICAgICAgICAgICAg
Ly8gZXhwYW5kIHRoZSBjbGlwIHJlY3QgdG8gaW5jbHVkZSB0aGUgdGV4dCBzaGFkb3cgYXMgd2Vs
bAotICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGJsdXJEaXN0YW5jZSA9IGN0eC0+c3RhdGUo
KS5zaGFkb3dCbHVyOwotICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KGR4MSwgZHgyLCBkeTEs
IGR5Mik7Ci0gICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWJsdXJEaXN0YW5jZSwgLWJsdXJE
aXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgcC0+c2V0Q2xpcFJlY3QoY2xpcC50b1Jl
Y3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwotICAgICAgICAgICAgcHQuc2V0WShwdC55KCkgLSBh
c2NlbnQpOwotCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1
cjo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBj
dHgtPnNoYWRvd0JsdXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkg
IT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdwotICAgICAgICAgICAgICAgICAgICAmJiAoIWN0eFNo
YWRvdy0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjdHgtPmdldENUTSgpLmlzSWRlbnRp
dHkoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAg
ICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgICAg
ICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0
aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7Ci0gICAgICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUo
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4
LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFk
b3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVu
ZGVyIGhpbnRzLgotICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9u
dChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4
U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcC0+c2V0UGVuKHRleHRG
aWxsUGVuKTsKLSAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7Ci0gICAgICAgICAgICBwLT5y
ZXN0b3JlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHNr
aXBXaWR0aCA9IFFGb250TWV0cmljcyhmb250KS53aWR0aChzdHJpbmcsIGZyb20sIFF0OjpUZXh0
QnlwYXNzU2hhcGluZyk7Ci0gICAgICAgIHB0LnNldFgocHQueCgpICsgc2tpcFdpZHRoKTsKLSAg
ICAgICAgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCwgZnJvbSwgdG8g
LSBmcm9tKTsKKyAgICBRUGFpbnRlclBhdGggcGF0aDsKKyAgICBjb25zdCBRUmF3Rm9udCByYXdG
b250KGdseXBoUnVuLnJhd0ZvbnQoKSk7CisgICAgY29uc3QgUVZlY3RvcjxxdWludDMyPiBnbHlw
aEluZGljZXMgPSBnbHlwaFJ1bi5nbHlwaEluZGV4ZXMoKTsKKyAgICBjb25zdCBRVmVjdG9yPFFQ
b2ludEY+IHBvc2l0aW9ucyA9IGdseXBoUnVuLnBvc2l0aW9ucygpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZ2x5cGhJbmRpY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFFQYWludGVyUGF0
aCBnbHlwaFBhdGggPSByYXdGb250LnBhdGhGb3JHbHlwaChnbHlwaEluZGljZXMuYXQoaSkpOwor
ICAgICAgICBnbHlwaFBhdGgudHJhbnNsYXRlKHBvc2l0aW9ucy5hdChpKSArIG9mZnNldCk7Cisg
ICAgICAgIHBhdGguYWRkUGF0aChnbHlwaFBhdGgpOwogICAgIH0KKyAgICByZXR1cm4gcGF0aDsK
K30KIAotICAgIHAtPnNldEZvbnQoZm9udCk7Ci0KLSAgICBpbnQgZmxhZ3MgPSBydW4ucnRsKCkg
PyBRdDo6VGV4dEZvcmNlUmlnaHRUb0xlZnQgOiBRdDo6VGV4dEZvcmNlTGVmdFRvUmlnaHQ7Ci0g
ICAgaWYgKCFpc0NvbXBsZXhUZXh0ICYmICEoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRN
b2RlU3Ryb2tlKSkKLSAgICAgICAgZmxhZ3MgfD0gUXQ6OlRleHRCeXBhc3NTaGFwaW5nOworc3Rh
dGljIHZvaWQgZHJhd1F0R2x5cGhSdW4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBR
R2x5cGhSdW4mIHF0R2x5cGhSdW4sIGNvbnN0IFFQb2ludEYmIHBvaW50LCBpbnQgYmFzZUxpbmVP
ZmZzZXQpCit7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKIAogICAgIFFQYWludGVyUGF0aCB0ZXh0U3Ryb2tlUGF0aDsKLSAgICBpZiAoY3R4LT50
ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICB0ZXh0U3Ryb2tlUGF0
aC5hZGRUZXh0KHB0LCBmb250LCBzdHJpbmcpOwotCi0gICAgU2hhZG93Qmx1ciogY3R4U2hhZG93
ID0gY3R4LT5zaGFkb3dCbHVyKCk7Ci0gICAgaWYgKGN0eC0+aGFzU2hhZG93KCkgJiYgY3R4U2hh
ZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKLSAgICAgICAgaWYgKGN0eC0+
dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHsKLSAgICAgICAgICAgIGlmIChjdHhT
aGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KSB7Ci0gICAgICAgICAgICAg
ICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCkuc2hh
ZG93Q29sb3IpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+c3Rh
dGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWln
aHQoKSkpOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBy
dW4uZXhwYW5zaW9uKCkpOwotICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQpOwotICAg
ICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocHQueCgpLCBwb2ludC55KCkgLSBmbS5h
c2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxhZ3MpLCBmbS5oZWlnaHQoKSk7Ci0gICAg
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4U2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAo
c2hhZG93Q29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFp
bnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICAgICAgICAg
ICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFi
b3V0IHJlbmRlciBoaW50cy4KLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQ
ZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY3R4LT50ZXh0
RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSB7Ci0gICAgICAgICAgICBpZiAoY3R4U2hh
ZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdykgewotICAgICAgICAgICAgICAg
IGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lk
dGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAg
ICAgcC0+dHJhbnNsYXRlKHNoYWRvd09mZnNldCk7Ci0gICAgICAgICAgICAgICAgcC0+c3Ryb2tl
UGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKLSAg
ICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250KTsKLSAgICAgICAg
ICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50
KCksIGZtLndpZHRoKHN0cmluZywgLTEsIGZsYWdzKSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRv
d0NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIg
PSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBy
ZW5kZXIgaGludHMuCi0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQo
cC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0
aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKLSAgICAg
ICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0
cm9rZSkKKyAgICAgICAgdGV4dFN0cm9rZVBhdGggPSBwYXRoRm9yR2x5cGhzKHF0R2x5cGhSdW4s
IHBvaW50KTsKKworICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IGNvbnRleHQtPnNoYWRvd0JsdXIo
KTsKKyAgICBpZiAoY29udGV4dC0+aGFzU2hhZG93KCkgJiYgc2hhZG93LT50eXBlKCkgIT0gU2hh
ZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgc3dpdGNoIChzaGFkb3ctPnR5cGUoKSkgewor
ICAgICAgICBjYXNlIFNoYWRvd0JsdXI6OlNvbGlkU2hhZG93OiB7CisgICAgICAgICAgICBRUGVu
IHByZXZpb3VzUGVuID0gcGFpbnRlci0+cGVuKCk7CisgICAgICAgICAgICBwYWludGVyLT5zZXRQ
ZW4oY29udGV4dC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICBjb25zdCBRUG9p
bnRGIHNoYWRvd09mZnNldChjb250ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBj
b250ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBwYWlu
dGVyLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT50
ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkKKyAgICAgICAgICAgICAgICBwYWludGVy
LT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhSdW4pOworICAgICAgICAgICAgZWxzZSBpZiAo
Y29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgICAg
ICAgICBwYWludGVyLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBwYWludGVyLT5wZW4oKSk7
CisgICAgICAgICAgICBwYWludGVyLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7CisgICAgICAg
ICAgICBwYWludGVyLT5zZXRQZW4ocHJldmlvdXNQZW4pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93OiB7CisgICAgICAg
ICAgICBjb25zdCBpbnQgd2lkdGggPSBxdEdseXBoUnVuLmJvdW5kaW5nUmVjdCgpLndpZHRoKCk7
CisgICAgICAgICAgICBjb25zdCBRUmF3Rm9udCYgZm9udCA9IHF0R2x5cGhSdW4ucmF3Rm9udCgp
OworICAgICAgICAgICAgY29uc3QgaW50IGhlaWdodCA9IGZvbnQuYXNjZW50KCkgKyBmb250LmRl
c2NlbnQoKSArIDE7CisgICAgICAgICAgICBjb25zdCBRUmVjdEYgYm91bmRpbmdSZWN0KHBvaW50
LngoKSwgcG9pbnQueSgpIC0gZm9udC5hc2NlbnQoKSArIGJhc2VMaW5lT2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBib3VuZGluZ1JlY3QpOworICAgICAgICAg
ICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93
UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihzaGFkb3dDb250ZXh0LT5zdGF0ZSgpLnNoYWRvd0Nv
bG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dC0+dGV4dERyYXdpbmdNb2Rl
KCkgJiBUZXh0TW9kZUZpbGwpCisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRy
YXdHbHlwaFJ1bihwb2ludCwgcXRHbHlwaFJ1bik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
c2hhZG93Q29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAg
ICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwg
c2hhZG93UGFpbnRlci0+cGVuKCkpOworICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93
TGF5ZXIoY29udGV4dCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIFNoYWRvd0JsdXI6Ok5vU2hhZG93OgorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4
dE1vZGVTdHJva2UpCi0gICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIHRleHRT
dHJva2VQZW4pOworICAgIGlmIChjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2Rl
U3Ryb2tlKQorICAgICAgICBwYWludGVyLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBzdHJv
a2VQZW5Gb3JDb250ZXh0KGNvbnRleHQpKTsKIAotICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9k
ZSgpICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgIFFQZW4gcHJldmlvdXNQZW4gPSBwLT5wZW4o
KTsKLSAgICAgICAgcC0+c2V0UGVuKHRleHRGaWxsUGVuKTsKLSAgICAgICAgcC0+ZHJhd1RleHQo
cHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7Ci0gICAgICAgIHAtPnNldFBlbihw
cmV2aW91c1Blbik7CisgICAgaWYgKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1v
ZGVGaWxsKSB7CisgICAgICAgIFFQZW4gcHJldmlvdXNQZW4gPSBwYWludGVyLT5wZW4oKTsKKyAg
ICAgICAgcGFpbnRlci0+c2V0UGVuKGZpbGxQZW5Gb3JDb250ZXh0KGNvbnRleHQpKTsKKyAgICAg
ICAgcGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBoUnVuKTsKKyAgICAgICAgcGFp
bnRlci0+c2V0UGVuKHByZXZpb3VzUGVuKTsKICAgICB9CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewotICAgIGRyYXdU
ZXh0Q29tbW9uKGN0eCwgcnVuLCBwb2ludCwgZnJvbSwgdG8sIGZvbnQoKSwgLyogaXNDb21wbGV4
VGV4dCA9ICovdHJ1ZSk7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNw
YWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIGNvbnN0IFFTdHJpbmcg
c3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisgICAgUVRleHRMYXlv
dXQgbGF5b3V0KHN0cmluZyk7CisgICAgbGF5b3V0LnNldFJhd0ZvbnQocmF3Rm9udCgpKTsKKyAg
ICBpbml0Rm9ybWF0Rm9yVGV4dExheW91dCgmbGF5b3V0KTsKKyAgICBRVGV4dExpbmUgbGluZSA9
IHNldHVwTGF5b3V0KCZsYXlvdXQsIHJ1bik7CisgICAgY29uc3QgUVBvaW50RiBhZGp1c3RlZFBv
aW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gbGluZS5hc2NlbnQoKSk7CisKKyAgICBRTGlzdDxR
R2x5cGhSdW4+IHJ1bnMgPSBsaW5lLmdseXBoUnVucyhmcm9tLCB0byAtIGZyb20pOworICAgIFFf
Rk9SRUFDSChRR2x5cGhSdW4gZ2x5cGhSdW4sIHJ1bnMpCisgICAgICAgIGRyYXdRdEdseXBoUnVu
KGN0eCwgZ2x5cGhSdW4sIGFkanVzdGVkUG9pbnQsIGxpbmUuYXNjZW50KCkpOwogfQogCiBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJmbG93KikgY29uc3QKQEAgLTI3
NSwxNyArMjAyLDE5IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9uCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgaWYgKHJ1bi5sZW5ndGgoKSA9PSAxICYmIHRyZWF0QXNTcGFjZShydW5bMF0pKQot
ICAgICAgICByZXR1cm4gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgoc3BhY2UpICsgcnVuLmV4
cGFuc2lvbigpOwotCisgICAgICAgIHJldHVybiBzcGFjZVdpZHRoKCkgKyBydW4uZXhwYW5zaW9u
KCk7CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hh
cmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwogICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0Rh
dGFXaXRob3V0UmVmKHNhbml0aXplZCk7CiAKLSAgICBpbnQgdyA9IFFGb250TWV0cmljcyhmb250
KCkpLndpZHRoKHN0cmluZyk7Ci0gICAgLy8gV2ViS2l0IGV4cGVjdHMgdXMgdG8gaWdub3JlIHdv
cmQgc3BhY2luZyBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIChhcyBvcHBvc2VkIHRvIHdoYXQgUXQg
ZG9lcykKLSAgICBpZiAodHJlYXRBc1NwYWNlKHJ1blswXSkpCi0gICAgICAgIHcgLT0gbV93b3Jk
U3BhY2luZzsKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nKTsKKyAgICBsYXlvdXQuc2V0
UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRGb3JtYXRGb3JUZXh0TGF5b3V0KCZsYXlvdXQp
OworICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91dCwgcnVuKTsKKyAgICBm
bG9hdCB4MSA9IGxpbmUuY3Vyc29yVG9YKDApOworICAgIGZsb2F0IHgyID0gbGluZS5jdXJzb3JU
b1gocnVuLmxlbmd0aCgpKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBxQWJzKHgyIC0geDEpOwog
Ci0gICAgcmV0dXJuIHcgKyBydW4uZXhwYW5zaW9uKCk7CisgICAgcmV0dXJuIHdpZHRoICsgcnVu
LmV4cGFuc2lvbigpOwogfQogCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sKSBjb25zdApAQCAt
MjkzLDcgKzIyMiw5IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJvCiAgICAgU3RyaW5nIHNhbml0
aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3Ro
KCkpOwogICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXpl
ZCk7CiAKLSAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nLCBmb250KCkpOworICAgIFFUZXh0
TGF5b3V0IGxheW91dChzdHJpbmcpOworICAgIGxheW91dC5zZXRSYXdGb250KHJhd0ZvbnQoKSk7
CisgICAgaW5pdEZvcm1hdEZvclRleHRMYXlvdXQoJmxheW91dCk7CiAgICAgUVRleHRMaW5lIGxp
bmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwogICAgIHJldHVybiBsaW5lLnhUb0N1cnNv
cihwb3NpdGlvbik7CiB9CkBAIC0zMDMsMTcgKzIzNCw0MyBAQCBGbG9hdFJlY3QgRm9udDo6c2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQ
b2ludAogICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNo
YXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdE
YXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCi0gICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmlu
ZywgZm9udCgpKTsKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nKTsKKyAgICBsYXlvdXQu
c2V0UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRGb3JtYXRGb3JUZXh0TGF5b3V0KCZsYXlv
dXQpOwogICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxheW91dCwgcnVuKTsKIAog
ICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJvbSk7CiAgICAgZmxvYXQgeDIgPSBsaW5l
LmN1cnNvclRvWCh0byk7CiAgICAgaWYgKHgyIDwgeDEpCiAgICAgICAgIHFTd2FwKHgxLCB4Mik7
CisgICAgLy8gVGhpcyBpcyBkdWUgdG8gdGhlIHdheSBRUGFpbnRlciBkcmF3cyByZWN0YW5nbGVz
LiBJbiBvcmRlciBmb3IgY29tcGxleCB0ZXh0IHNlbGVjdGlvbnMgbm90IHRvIGJlCisgICAgLy8g
YnJva2VuIHdpdGggYmxhbmtzLCB3ZSBuZWVkIHRvIG1vdmUgdGhlIGxlZnQgc2lkZSBiYWNrIGEg
Yml0LgorICAgIHgxIC09IDE7CiAKICAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBw
dC55KCksIHgyIC0geDEsIGgpOwogfQogCit2b2lkIEZvbnQ6OmluaXRGb3JtYXRGb3JUZXh0TGF5
b3V0KFFUZXh0TGF5b3V0KiBsYXlvdXQpIGNvbnN0Cit7CisgICAgUUxpc3Q8UVRleHRMYXlvdXQ6
OkZvcm1hdFJhbmdlPiBvdmVycmlkZXM7CisgICAgUVRleHRMYXlvdXQ6OkZvcm1hdFJhbmdlIHJh
bmdlOworICAgIHJhbmdlLnN0YXJ0ID0gMDsKKyAgICByYW5nZS5sZW5ndGggPSBsYXlvdXQtPnRl
eHQoKS5sZW5ndGgoKTsKKyAgICBpZiAobV93b3JkU3BhY2luZykKKyAgICAgICAgcmFuZ2UuZm9y
bWF0LnNldEZvbnRXb3JkU3BhY2luZyhtX3dvcmRTcGFjaW5nKTsKKyAgICBpZiAobV9sZXR0ZXJT
cGFjaW5nKQorICAgICAgICByYW5nZS5mb3JtYXQuc2V0Rm9udExldHRlclNwYWNpbmcobV9sZXR0
ZXJTcGFjaW5nKTsKKyAgICBpZiAodHlwZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykKKyAg
ICAgICAgcmFuZ2UuZm9ybWF0LnNldEZvbnRLZXJuaW5nKHRydWUpOworICAgIGlmIChpc1NtYWxs
Q2FwcygpKQorICAgICAgICByYW5nZS5mb3JtYXQuc2V0Rm9udENhcGl0YWxpemF0aW9uKFFGb250
OjpTbWFsbENhcHMpOworICAgIGlmIChpc1NtYWxsQ2FwcygpIHx8IHR5cGVzZXR0aW5nRmVhdHVy
ZXMoKSAmIEtlcm5pbmcgfHwgbV93b3JkU3BhY2luZyB8fCBtX2xldHRlclNwYWNpbmcpCisgICAg
ICAgIG92ZXJyaWRlcyA8PCByYW5nZTsKKworICAgIGlmICghb3ZlcnJpZGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgbGF5b3V0LT5zZXRBZGRpdGlvbmFsRm9ybWF0cyhvdmVycmlkZXMpOworfQorCiBi
b29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiB7CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzI0LDcgKzI4MSw2IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lz
TWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotI2lmIEhBVkUoUVJBV0ZPTlQpCiB2b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIGlm
IChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCkBAIC0zMzMsOSArMjg5LDYgQEAgdm9pZCBG
b250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhLAogICAgIGJvb2wgc2hvdWxkRmlsbCA9IGNvbnRleHQtPnRleHREcmF3
aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsOwogICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gY29udGV4
dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZTsKIAotICAgIC8vIFN0cm9raW5n
IHRleHQgc2hvdWxkIGFsd2F5cyB0YWtlIHRoZSBjb21wbGV4IHBhdGguCi0gICAgQVNTRVJUKCFz
aG91bGRTdHJva2UpOwotCiAgICAgaWYgKCFzaG91bGRGaWxsICYmICFzaG91bGRTdHJva2UpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMzQ0LDYgKzI5Nyw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBo
cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSwKIAogICAgIGdseXBoSW5kZXhlcy5yZXNlcnZlKG51bUdseXBocyk7CiAgICAgcG9zaXRpb25z
LnJlc2VydmUobnVtR2x5cGhzKTsKKyAgICBjb25zdCBRUmF3Rm9udCYgZm9udChmb250RGF0YS0+
Z2V0UXRSYXdGb250KCkpOwogCiAgICAgZmxvYXQgd2lkdGggPSAwOwogCkBAIC0zNTcsMTY2ICsz
MTEsMzkgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAogICAgICAgICB3aWR0aCArPSBhZHZhbmNl
OwogICAgIH0KIAotICAgIFFSYXdGb250IHJhd0ZvbnQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
LnJhd0ZvbnQoKSk7Ci0KICAgICBRR2x5cGhSdW4gcXRHbHlwaHM7CiAgICAgcXRHbHlwaHMuc2V0
R2x5cGhJbmRleGVzKGdseXBoSW5kZXhlcyk7CiAgICAgcXRHbHlwaHMuc2V0UG9zaXRpb25zKHBv
c2l0aW9ucyk7Ci0gICAgcXRHbHlwaHMuc2V0UmF3Rm9udChyYXdGb250KTsKLQotICAgIFFQYWlu
dGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBTaGFkb3dC
bHVyKiBzaGFkb3cgPSBjb250ZXh0LT5zaGFkb3dCbHVyKCk7Ci0gICAgc3dpdGNoIChzaGFkb3ct
PnR5cGUoKSkgewotICAgIGNhc2UgU2hhZG93Qmx1cjo6U29saWRTaGFkb3c6IHsKLSAgICAgICAg
UVBlbiBwcmV2aW91c1BlbiA9IHBhaW50ZXItPnBlbigpOwotICAgICAgICBwYWludGVyLT5zZXRQ
ZW4oY29udGV4dC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGNvbnN0IFFQb2ludEYg
c2hhZG93T2Zmc2V0KGNvbnRleHQtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGNvbnRl
eHQtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgcGFpbnRlci0+dHJh
bnNsYXRlKHNoYWRvd09mZnNldCk7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdHbHlwaFJ1bihwb2lu
dCwgcXRHbHlwaHMpOwotICAgICAgICBwYWludGVyLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7
Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwcmV2aW91c1Blbik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFNoYWRvd0JsdXI6OkJsdXJTaGFkb3c6IHsKLSAgICAgICAgcXJlYWwg
aGVpZ2h0ID0gcmF3Rm9udC5hc2NlbnQoKSArIHJhd0ZvbnQuZGVzY2VudCgpICsgMTsKLSAgICAg
ICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCksIHBvaW50LnkoKSAtIHJhd0ZvbnQuYXNj
ZW50KCksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0Nv
bnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0KTsK
LSAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY29udGV4dC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7Ci0g
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhzKTsK
LSAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgU2hhZG93Qmx1cjo6Tm9TaGFkb3c6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBRUGVuIHByZXZpb3VzUGVuID0gcGFpbnRl
ci0+cGVuKCk7Ci0gICAgcGFpbnRlci0+c2V0UGVuKGZpbGxQZW5Gb3JDb250ZXh0KGNvbnRleHQp
KTsKLSAgICBwYWludGVyLT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhzKTsKLSAgICBwYWlu
dGVyLT5zZXRQZW4ocHJldmlvdXNQZW4pOwotfQotCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNl
bHNlIC8vICFIQVZFKFFSQVdGT05UKQotCi12b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIGRyYXdUZXh0Q29tbW9uKGN0eCwg
cnVuLCBwb2ludCwgZnJvbSwgdG8sIGZvbnQoKSwgLyogaXNDb21wbGV4VGV4dCA9ICovZmFsc2Up
OwotfQotCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4u
Y2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwotICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJh
d0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7Ci0KLSAgICBRRm9udE1ldHJpY3MgZm0oZm9udCgp
KTsKLSAgICBmbG9hdCBkZWx0YSA9IHBvc2l0aW9uOwotICAgIGludCBjdXJQb3MgPSAwOwotICAg
IGRvIHsKLSAgICAgICAgZmxvYXQgY2hhcldpZHRoID0gZm0ud2lkdGgoc3RyaW5nW2N1clBvc10p
OwotICAgICAgICBkZWx0YSAtPSBjaGFyV2lkdGg7Ci0gICAgICAgIGlmIChpbmNsdWRlUGFydGlh
bEdseXBocykgewotICAgICAgICAgICAgaWYgKGRlbHRhICsgY2hhcldpZHRoIC8gMiA8PSAwKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGRlbHRhICsgY2hhcldpZHRoIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9IHdoaWxlICgrK2N1clBvcyA8IHN0cmluZy5zaXplKCkpOworICAgIHF0R2x5cGhz
LnNldFJhd0ZvbnQoZm9udCk7CiAKLSAgICByZXR1cm4gY3VyUG9zOworICAgIGRyYXdRdEdseXBo
UnVuKGNvbnRleHQsIHF0R2x5cGhzLCBwb2ludCwgLyogYmFzZWxpbmVPZmZzZXQgPSAqLzApOwog
fQogCiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0
Ci17Ci0gICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFydW4ubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hh
cmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwotICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0Rh
dGFXaXRob3V0UmVmKHNhbml0aXplZCk7Ci0KLSAgICBpbnQgdyA9IFFGb250TWV0cmljcyhmb250
KCkpLndpZHRoKHN0cmluZywgLTEsIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7Ci0KLSAgICAvLyBX
ZWJLaXQgZXhwZWN0cyB1cyB0byBpZ25vcmUgd29yZCBzcGFjaW5nIG9uIHRoZSBmaXJzdCBjaGFy
YWN0ZXIgKGFzIG9wcG9zZWQgdG8gd2hhdCBRdCBkb2VzKQotICAgIGlmICh0cmVhdEFzU3BhY2Uo
cnVuWzBdKSkKLSAgICAgICAgdyAtPSBtX3dvcmRTcGFjaW5nOwotCi0gICAgcmV0dXJuIHcgKyBy
dW4uZXhwYW5zaW9uKCk7Ci19Ci0KLQotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQsIGludCBo
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250
Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBR
U3RyaW5nIHdob2xlVGV4dCA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotICAg
IFFTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCwg
ZnJvbSwgcU1pbih0byAtIGZyb20sIHdob2xlVGV4dC5sZW5ndGgoKSAtIGZyb20pKTsKLQotICAg
IGludCBzdGFydFggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aCh3aG9sZVRleHQsIGZyb20s
IFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7Ci0gICAgaW50IHdpZHRoID0gUUZvbnRNZXRyaWNzKGZv
bnQoKSkud2lkdGgoc2VsZWN0ZWRUZXh0LCAtMSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsKLQot
ICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpICsgc3RhcnRYLCBwdC55KCksIHdpZHRoLCBoKTsK
LX0KLQogYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgp
CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZvbnQ6OnByaW1hcnlGb250SGFzR2x5
cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgRm9udDo6ZW1waGFzaXNNYXJrQXNjZW50KGNvbnN0
IEF0b21pY1N0cmluZyYpIGNvbnN0CitRRm9udCBGb250OjpzeW50aGV0aWNGb250KCkgY29uc3QK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgRm9udDo6
ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBGb250OjplbXBoYXNpc01h
cmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4m
IC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBv
aW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2VuZGlmIC8vIEhBVkUoUVJBV0ZPTlQpCi0KLVFG
b250IEZvbnQ6OmZvbnQoKSBjb25zdAotewotICAgIFFGb250IGYgPSBwcmltYXJ5Rm9udCgpLT5n
ZXRRdEZvbnQoKTsKLSAgICBpZiAobV9sZXR0ZXJTcGFjaW5nICE9IDApCisgICAgUVJhd0ZvbnQg
cmF3Rm9udChwcmltYXJ5Rm9udCgpLT5nZXRRdFJhd0ZvbnQoKSk7CisgICAgUUZvbnQgZihyYXdG
b250LmZhbWlseU5hbWUoKSk7CisgICAgaWYgKHJhd0ZvbnQucGl4ZWxTaXplKCkpCisgICAgICAg
IGYuc2V0UGl4ZWxTaXplKHJhd0ZvbnQucGl4ZWxTaXplKCkpOworICAgIGYuc2V0V2VpZ2h0KHJh
d0ZvbnQud2VpZ2h0KCkpOworICAgIGYuc2V0U3R5bGUocmF3Rm9udC5zdHlsZSgpKTsKKyAgICBp
ZiAobV9sZXR0ZXJTcGFjaW5nKQogICAgICAgICBmLnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFi
c29sdXRlU3BhY2luZywgbV9sZXR0ZXJTcGFjaW5nKTsKLSAgICBpZiAobV93b3JkU3BhY2luZyAh
PSAwKQorICAgIGlmIChtX3dvcmRTcGFjaW5nKQogICAgICAgICBmLnNldFdvcmRTcGFjaW5nKG1f
d29yZFNwYWNpbmcpOwogICAgIHJldHVybiBmOwogfQogCiAKK1FSYXdGb250IEZvbnQ6OnJhd0Zv
bnQoKSBjb25zdAoreworICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5nZXRRdFJhd0ZvbnQoKTsK
IH0KIAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFF0NC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQ0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iMDIxZjljNjQyNDhkNjEwNDZlM2M4MDkwNWY1MmIzMjY3YjM5Y2E4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFF0NC5jcHAKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICAgIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udEZhbGxi
YWNrTGlzdC5oIgorI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNp
bmNsdWRlICJTaGFkb3dCbHVyLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorCisjaW5jbHVkZSA8
UUJydXNoPgorI2luY2x1ZGUgPFFGb250SW5mbz4KKyNpbmNsdWRlIDxRRm9udE1ldHJpY3M+Cisj
aW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgorI2luY2x1ZGUgPFFQ
ZW4+CisjaW5jbHVkZSA8UVRleHRMYXlvdXQ+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVk
ZSA8cWFsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDxxZGVidWcuaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdCBRU3RyaW5nIGZyb21SYXdEYXRhV2l0aG91dFJlZihjb25z
dCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0ID0gMCwgaW50IGxlbiA9IC0xKQoreworICAgIGlm
IChsZW4gPCAwKQorICAgICAgICBsZW4gPSBzdHJpbmcubGVuZ3RoKCkgLSBzdGFydDsKKyAgICBR
X0FTU0VSVChzdGFydCArIGxlbiA8PSBzdHJpbmcubGVuZ3RoKCkpOworCisgICAgLy8gV2UgZG9u
J3QgZGV0YWNoLiBUaGlzIGFzc3VtZXMgdGhlIFdlYkNvcmUgc3RyaW5nIGRhdGEgd2lsbCBzdGF5
IHZhbGlkIGZvciB0aGUKKyAgICAvLyBsaWZldGltZSBvZiB0aGUgUVN0cmluZyB3ZSBwYXNzIGJh
Y2ssIHNpbmNlIHdlIGRvbid0IHJlZiB0aGUgV2ViQ29yZSBzdHJpbmcuCisgICAgcmV0dXJuIFFT
dHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihzdHJpbmcu
Y2hhcmFjdGVycygpICsgc3RhcnQpLCBsZW4pOworfQorCitzdGF0aWMgUVRleHRMaW5lIHNldHVw
TGF5b3V0KFFUZXh0TGF5b3V0KiBsYXlvdXQsIGNvbnN0IFRleHRSdW4mIHN0eWxlKQoreworICAg
IGludCBmbGFncyA9IHN0eWxlLnJ0bCgpID8gUXQ6OlRleHRGb3JjZVJpZ2h0VG9MZWZ0IDogUXQ6
OlRleHRGb3JjZUxlZnRUb1JpZ2h0OworICAgIGlmIChzdHlsZS5leHBhbnNpb24oKSkKKyAgICAg
ICAgZmxhZ3MgfD0gUXQ6OlRleHRKdXN0aWZpY2F0aW9uRm9yY2VkOworICAgIGxheW91dC0+c2V0
RmxhZ3MoZmxhZ3MpOworICAgIGxheW91dC0+YmVnaW5MYXlvdXQoKTsKKyAgICBRVGV4dExpbmUg
bGluZSA9IGxheW91dC0+Y3JlYXRlTGluZSgpOworICAgIGxpbmUuc2V0TGluZVdpZHRoKElOVF9N
QVggLyAyNTYpOworICAgIGlmIChzdHlsZS5leHBhbnNpb24oKSkKKyAgICAgICAgbGluZS5zZXRM
aW5lV2lkdGgobGluZS5uYXR1cmFsVGV4dFdpZHRoKCkgKyBzdHlsZS5leHBhbnNpb24oKSk7Cisg
ICAgbGF5b3V0LT5lbmRMYXlvdXQoKTsKKyAgICByZXR1cm4gbGluZTsKK30KKworc3RhdGljIFFQ
ZW4gZmlsbFBlbkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgpCit7CisgICAgaWYgKGN0
eC0+ZmlsbEdyYWRpZW50KCkpIHsKKyAgICAgICAgUUJydXNoIGJydXNoKCpjdHgtPmZpbGxHcmFk
aWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0o
Y3R4LT5maWxsR3JhZGllbnQoKS0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAg
cmV0dXJuIFFQZW4oYnJ1c2gsIDApOworICAgIH0KKworICAgIGlmIChjdHgtPmZpbGxQYXR0ZXJu
KCkpIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKKyAgICAgICAgcmV0dXJuIFFQ
ZW4oUUJydXNoKGN0eC0+ZmlsbFBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmlu
ZSkpLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5maWxsQ29sb3Io
KSkpOworfQorCitzdGF0aWMgUVBlbiBzdHJva2VQZW5Gb3JDb250ZXh0KEdyYXBoaWNzQ29udGV4
dCogY3R4KQoreworICAgIGlmIChjdHgtPnN0cm9rZUdyYWRpZW50KCkpIHsKKyAgICAgICAgUUJy
dXNoIGJydXNoKCpjdHgtPnN0cm9rZUdyYWRpZW50KCktPnBsYXRmb3JtR3JhZGllbnQoKSk7Cisg
ICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShjdHgtPnN0cm9rZUdyYWRpZW50KCktPmdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIHJldHVybiBRUGVuKGJydXNoLCBjdHgtPnN0cm9r
ZVRoaWNrbmVzcygpKTsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5zdHJva2VQYXR0ZXJuKCkpIHsK
KyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKKyAgICAgICAgUUJydXNoIGJydXNoKGN0
eC0+c3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSk7CisgICAg
ICAgIHJldHVybiBRUGVuKGJydXNoLCBjdHgtPnN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5zdHJva2VDb2xvcigpKSwgY3R4LT5zdHJva2VU
aGlja25lc3MoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBoaWNzQ29u
dGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvLCBjb25zdCBRRm9udCYgZm9udCwgYm9vbCBpc0NvbXBsZXhUZXh0KQor
eworICAgIGlmICh0byA8IDApCisgICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOworCisgICAgUVBh
aW50ZXIqIHAgPSBjdHgtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgUVBlbiB0ZXh0RmlsbFBl
bjsKKyAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkKKyAgICAg
ICAgdGV4dEZpbGxQZW4gPSBmaWxsUGVuRm9yQ29udGV4dChjdHgpOworCisgICAgUVBlbiB0ZXh0
U3Ryb2tlUGVuOworICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJv
a2UpCisgICAgICAgIHRleHRTdHJva2VQZW4gPSBzdHJva2VQZW5Gb3JDb250ZXh0KGN0eCk7CisK
KyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0
ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdp
dGhvdXRSZWYoc2FuaXRpemVkKTsKKyAgICBRUG9pbnRGIHB0KHBvaW50LngoKSwgcG9pbnQueSgp
KTsKKworICAgIGlmIChmcm9tID4gMCB8fCB0byA8IHJ1bi5sZW5ndGgoKSkgeworICAgICAgICBp
ZiAoaXNDb21wbGV4VGV4dCkgeworICAgICAgICAgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmlu
ZywgZm9udCk7CisgICAgICAgICAgICBRVGV4dExpbmUgbGluZSA9IHNldHVwTGF5b3V0KCZsYXlv
dXQsIHJ1bik7CisgICAgICAgICAgICBmbG9hdCB4MSA9IGxpbmUuY3Vyc29yVG9YKGZyb20pOwor
ICAgICAgICAgICAgZmxvYXQgeDIgPSBsaW5lLmN1cnNvclRvWCh0byk7CisgICAgICAgICAgICBp
ZiAoeDIgPCB4MSkKKyAgICAgICAgICAgICAgICBxU3dhcCh4MSwgeDIpOworCisgICAgICAgICAg
ICBRRm9udE1ldHJpY3MgZm0oZm9udCk7CisgICAgICAgICAgICBpbnQgYXNjZW50ID0gZm0uYXNj
ZW50KCk7CisgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHBvaW50LngoKSArIHgxLCBw
b2ludC55KCkgLSBhc2NlbnQsIHgyIC0geDEsIGZtLmhlaWdodCgpKTsKKyAgICAgICAgICAgIFFS
ZWN0RiBjbGlwID0gYm91bmRpbmdSZWN0OworCisgICAgICAgICAgICBTaGFkb3dCbHVyKiBjdHhT
aGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5
cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgeworICAgICAgICAgICAgICAgIGNvbnN0IFFQ
b2ludEYgc2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4
LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcXJlYWwg
ZHgxID0gMCwgZHgyID0gMCwgZHkxID0gMCwgZHkyID0gMDsKKyAgICAgICAgICAgICAgICBpZiAo
c2hhZG93T2Zmc2V0LngoKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGR4MiA9IHNoYWRvd09m
ZnNldC54KCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkeDEg
PSAtc2hhZG93T2Zmc2V0LngoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93T2Zmc2V0Lnko
KSA+IDApCisgICAgICAgICAgICAgICAgICAgIGR5MiA9IHNoYWRvd09mZnNldC55KCk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkeTEgPSAtc2hhZG93T2Zmc2V0
LnkoKTsKKyAgICAgICAgICAgICAgICAvLyBleHBhbmQgdGhlIGNsaXAgcmVjdCB0byBpbmNsdWRl
IHRoZSB0ZXh0IHNoYWRvdyBhcyB3ZWxsCisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgYmx1
ckRpc3RhbmNlID0gY3R4LT5zdGF0ZSgpLnNoYWRvd0JsdXI7CisgICAgICAgICAgICAgICAgY2xp
cC5hZGp1c3QoZHgxLCBkeDIsIGR5MSwgZHkyKTsKKyAgICAgICAgICAgICAgICBjbGlwLmFkanVz
dCgtYmx1ckRpc3RhbmNlLCAtYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UsIGJsdXJEaXN0YW5j
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwLT5zYXZlKCk7CisgICAgICAgICAgICBw
LT5zZXRDbGlwUmVjdChjbGlwLnRvUmVjdCgpLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CisgICAgICAg
ICAgICBwdC5zZXRZKHB0LnkoKSAtIGFzY2VudCk7CisKKyAgICAgICAgICAgIGlmIChjdHhTaGFk
b3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgeworICAgICAgICAgICAgICAgIFNo
YWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOworICAgICAgICAgICAgICAg
IGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93CisgICAgICAg
ICAgICAgICAgICAgICYmICghY3R4U2hhZG93LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8
IGN0eC0+Z2V0Q1RNKCkuaXNJZGVudGl0eSgpKSkgeworICAgICAgICAgICAgICAgICAgICBwLT5z
YXZlKCk7CisgICAgICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93
Q29sb3IpOworICAgICAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0
YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVp
Z2h0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5kcmF3KHAsIHB0KTsKKyAgICAgICAg
ICAgICAgICAgICAgcC0+cmVzdG9yZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRv
dy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwg
d2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCisgICAgICAgICAgICAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhzaGFkb3dQYWludGVyLCBwdCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBwLT5zZXRQZW4odGV4dEZpbGxQZW4pOworICAgICAgICAgICAgbGluZS5kcmF3KHAs
IHB0KTsKKyAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgc2tpcFdpZHRoID0gUUZvbnRNZXRyaWNzKGZvbnQpLndpZHRo
KHN0cmluZywgZnJvbSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsKKyAgICAgICAgcHQuc2V0WChw
dC54KCkgKyBza2lwV2lkdGgpOworICAgICAgICBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRS
ZWYoc2FuaXRpemVkLCBmcm9tLCB0byAtIGZyb20pOworICAgIH0KKworICAgIHAtPnNldEZvbnQo
Zm9udCk7CisKKyAgICBpbnQgZmxhZ3MgPSBydW4ucnRsKCkgPyBRdDo6VGV4dEZvcmNlUmlnaHRU
b0xlZnQgOiBRdDo6VGV4dEZvcmNlTGVmdFRvUmlnaHQ7CisgICAgaWYgKCFpc0NvbXBsZXhUZXh0
ICYmICEoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSkKKyAgICAgICAg
ZmxhZ3MgfD0gUXQ6OlRleHRCeXBhc3NTaGFwaW5nOworCisgICAgUVBhaW50ZXJQYXRoIHRleHRT
dHJva2VQYXRoOworICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJv
a2UpCisgICAgICAgIHRleHRTdHJva2VQYXRoLmFkZFRleHQocHQsIGZvbnQsIHN0cmluZyk7CisK
KyAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICBpZiAo
Y3R4LT5oYXNTaGFkb3coKSAmJiBjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1No
YWRvdykgeworICAgICAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmls
bCkgeworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJs
dXJTaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBwLT5zYXZlKCk7CisgICAgICAgICAgICAgICAg
cC0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgcC0+
dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgt
PnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7CisgICAgICAgICAgICAgICAgcC0+ZHJh
d1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7CisgICAgICAgICAgICAg
ICAgcC0+cmVzdG9yZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBR
Rm9udE1ldHJpY3MgZm0oZm9udCk7CisgICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVj
dChwdC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0xLCBm
bGFncyksIGZtLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNo
YWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1Jl
Y3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAg
ICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJl
ZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgorICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwor
ICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBm
bGFncywgcnVuLmV4cGFuc2lvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5l
bmRTaGFkb3dMYXllcihjdHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2Up
IHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVy
U2hhZG93KSB7CisgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY3R4
LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0
LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICBwLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eC0+
c3RhdGUoKS5zaGFkb3dDb2xvcikpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtc2hh
ZG93T2Zmc2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUUZvbnRN
ZXRyaWNzIGZtKGZvbnQpOworICAgICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocHQu
eCgpLCBwb2ludC55KCkgLSBmbS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxhZ3Mp
LCBmbS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dD
b250ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsK
KyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAg
ICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOworICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55
d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KKyAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOworICAgICAgICAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eC0+c3Rh
dGUoKS5zaGFkb3dDb2xvcikpOworICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNo
YWRvd0xheWVyKGN0eCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0
cm9rZSkKKyAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgdGV4dFN0cm9rZVBl
bik7CisKKyAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkgewor
ICAgICAgICBRUGVuIHByZXZpb3VzUGVuID0gcC0+cGVuKCk7CisgICAgICAgIHAtPnNldFBlbih0
ZXh0RmlsbFBlbik7CisgICAgICAgIHAtPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4u
ZXhwYW5zaW9uKCkpOworICAgICAgICBwLT5zZXRQZW4ocHJldmlvdXNQZW4pOworICAgIH0KK30K
Kwordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0Cit7CisgICAgZHJhd1RleHRDb21tb24oY3R4LCBydW4sIHBvaW50LCBmcm9tLCB0bywg
Zm9udCgpLCAvKiBpc0NvbXBsZXhUZXh0ID0gKi90cnVlKTsKK30KKworZmxvYXQgRm9udDo6Zmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiwgR2x5cGhPdmVyZmxvdyopIGNvbnN0Cit7CisgICAgaWYgKCFwcmlt
YXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKCFydW4ubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHJ1bi5s
ZW5ndGgoKSA9PSAxICYmIHRyZWF0QXNTcGFjZShydW5bMF0pKQorICAgICAgICByZXR1cm4gUUZv
bnRNZXRyaWNzKGZvbnQoKSkud2lkdGgoc3BhY2UpICsgcnVuLmV4cGFuc2lvbigpOworCisgICAg
U3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygp
LCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0
UmVmKHNhbml0aXplZCk7CisKKyAgICBpbnQgdyA9IFFGb250TWV0cmljcyhmb250KCkpLndpZHRo
KHN0cmluZyk7CisgICAgLy8gV2ViS2l0IGV4cGVjdHMgdXMgdG8gaWdub3JlIHdvcmQgc3BhY2lu
ZyBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIChhcyBvcHBvc2VkIHRvIHdoYXQgUXQgZG9lcykKKyAg
ICBpZiAodHJlYXRBc1NwYWNlKHJ1blswXSkpCisgICAgICAgIHcgLT0gbV93b3JkU3BhY2luZzsK
KworICAgIHJldHVybiB3ICsgcnVuLmV4cGFuc2lvbigpOworfQorCitpbnQgRm9udDo6b2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0
aW9uLCBib29sKSBjb25zdAoreworICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxp
emVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAgICBRU3RyaW5nIHN0
cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOworCisgICAgUVRleHRMYXlv
dXQgbGF5b3V0KHN0cmluZywgZm9udCgpKTsKKyAgICBRVGV4dExpbmUgbGluZSA9IHNldHVwTGF5
b3V0KCZsYXlvdXQsIHJ1bik7CisgICAgcmV0dXJuIGxpbmUueFRvQ3Vyc29yKHBvc2l0aW9uKTsK
K30KKworRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0
bykgY29uc3QKK3sKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2Vz
KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgUVN0cmluZyBzdHJpbmcgPSBm
cm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKKworICAgIFFUZXh0TGF5b3V0IGxheW91
dChzdHJpbmcsIGZvbnQoKSk7CisgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5
b3V0LCBydW4pOworCisgICAgZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWChmcm9tKTsKKyAgICBm
bG9hdCB4MiA9IGxpbmUuY3Vyc29yVG9YKHRvKTsKKyAgICBpZiAoeDIgPCB4MSkKKyAgICAgICAg
cVN3YXAoeDEsIHgyKTsKKworICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpICsgeDEsIHB0Lnko
KSwgeDIgLSB4MSwgaCk7Cit9CisKK2Jvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0Zv
ckNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQg
Ki8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJr
ICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAv
KiB0byAqLykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZvbnQ6
OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAg
IGRyYXdUZXh0Q29tbW9uKGN0eCwgcnVuLCBwb2ludCwgZnJvbSwgdG8sIGZvbnQoKSwgLyogaXND
b21wbGV4VGV4dCA9ICovZmFsc2UpOworfQorCitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5j
bHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6
Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFT
dHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisKKyAgICBR
Rm9udE1ldHJpY3MgZm0oZm9udCgpKTsKKyAgICBmbG9hdCBkZWx0YSA9IHBvc2l0aW9uOworICAg
IGludCBjdXJQb3MgPSAwOworICAgIGRvIHsKKyAgICAgICAgZmxvYXQgY2hhcldpZHRoID0gZm0u
d2lkdGgoc3RyaW5nW2N1clBvc10pOworICAgICAgICBkZWx0YSAtPSBjaGFyV2lkdGg7CisgICAg
ICAgIGlmIChpbmNsdWRlUGFydGlhbEdseXBocykgeworICAgICAgICAgICAgaWYgKGRlbHRhICsg
Y2hhcldpZHRoIC8gMiA8PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKGRlbHRhICsgY2hhcldpZHRoIDw9IDApCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICgrK2N1clBvcyA8IHN0cmluZy5z
aXplKCkpOworCisgICAgcmV0dXJuIGN1clBvczsKK30KKworCitmbG9hdCBGb250OjpmbG9hdFdp
ZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEdseXBoQnVmZmVyKiBnbHlwaEJ1
ZmZlciwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAoreworICAgIGlmICghcHJpbWFyeUZvbnQo
KS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgh
cnVuLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBzYW5pdGl6ZWQg
PSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsK
KyAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwor
CisgICAgaW50IHcgPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChzdHJpbmcsIC0xLCBRdDo6
VGV4dEJ5cGFzc1NoYXBpbmcpOworCisgICAgLy8gV2ViS2l0IGV4cGVjdHMgdXMgdG8gaWdub3Jl
IHdvcmQgc3BhY2luZyBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIChhcyBvcHBvc2VkIHRvIHdoYXQg
UXQgZG9lcykKKyAgICBpZiAodHJlYXRBc1NwYWNlKHJ1blswXSkpCisgICAgICAgIHcgLT0gbV93
b3JkU3BhY2luZzsKKworICAgIHJldHVybiB3ICsgcnVuLmV4cGFuc2lvbigpOworfQorCisKK0Zs
b2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
K3sKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFy
YWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgUVN0cmluZyB3aG9sZVRleHQgPSBmcm9tUmF3
RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKKyAgICBRU3RyaW5nIHNlbGVjdGVkVGV4dCA9IGZy
b21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQsIGZyb20sIHFNaW4odG8gLSBmcm9tLCB3aG9s
ZVRleHQubGVuZ3RoKCkgLSBmcm9tKSk7CisKKyAgICBpbnQgc3RhcnRYID0gUUZvbnRNZXRyaWNz
KGZvbnQoKSkud2lkdGgod2hvbGVUZXh0LCBmcm9tLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwor
ICAgIGludCB3aWR0aCA9IFFGb250TWV0cmljcyhmb250KCkpLndpZHRoKHNlbGVjdGVkVGV4dCwg
LTEsIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHB0Lngo
KSArIHN0YXJ0WCwgcHQueSgpLCB3aWR0aCwgaCk7Cit9CisKK2Jvb2wgRm9udDo6Y2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBGb250OjpwcmltYXJ5Rm9udEhhc0dseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50
IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBGb250OjplbXBo
YXNpc01hcmtEZXNjZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEZvbnQ6OmVtcGhhc2lzTWFya0hl
aWdodChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1w
bGVUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyog
cnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQm
IC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1FGb250IEZvbnQ6OmZvbnQoKSBjb25zdAoreworICAg
IFFGb250IGYgPSBwcmltYXJ5Rm9udCgpLT5nZXRRdEZvbnQoKTsKKyAgICBpZiAobV9sZXR0ZXJT
cGFjaW5nKQorICAgICAgICBmLnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFic29sdXRlU3BhY2lu
ZywgbV9sZXR0ZXJTcGFjaW5nKTsKKyAgICBpZiAobV93b3JkU3BhY2luZykKKyAgICAgICAgZi5z
ZXRXb3JkU3BhY2luZyhtX3dvcmRTcGFjaW5nKTsKKyAgICByZXR1cm4gZjsKK30KKworUUZvbnQg
Rm9udDo6c3ludGhldGljRm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZvbnQoKTsKK30KKwor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1w
bGVGb250RGF0YVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1Np
bXBsZUZvbnREYXRhUXQuY3BwCmluZGV4IGU5NWI4YzVlYTIyNDJkYmNhYWNmMjZkZDk5ZWJjNGQz
NDhhNzdkM2MuLjc1NjA1ZWI3N2JmMjg3YTU3ZjQ5OGM1Mjk4NGMyMDhiY2YyZjc3MTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRh
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZv
bnREYXRhUXQuY3BwCkBAIC0xNjMsNyArMTYzLDggQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1Jbml0KCkKICAgICBmbG9hdCBsaW5lR2FwID0gbGluZVNwYWNpbmcgLSBhc2NlbnQgLSBk
ZXNjZW50OwogCiAgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2Zv
bnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7CisgICAgLy8gVW5saWtlIFFGb250TWV0cmlj
cywgUVJhd0ZvbnQgY2FuIHJldHVybiBuZWdhdGl2ZSBkZWNlbnQgdmFsdWVzLgorICAgIG1fZm9u
dE1ldHJpY3Muc2V0RGVzY2VudChxQWJzKGRlc2NlbnQpKTsKICAgICBtX2ZvbnRNZXRyaWNzLnNl
dExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQo
eEhlaWdodCk7CiAgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCmluZGV4IDc1
ODU5ZDhiNDk2ODdjNGU2M2M5MzNlOGY0ZjA3Y2EyMGJmODhkN2EuLjI4OGYxODFkYzY2YmVkNWUx
YTZjNzg4NTc1MTAyNTZkZTM5ZWRhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKQEAgLTIxMiw3ICsyMTIsNyBAQCBRUmVjdCBSZW5k
ZXJUaGVtZVFTdHlsZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVj
dCkgY29uc3QKIHZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmNvbXB1dGVTaXplQmFzZWRPblN0eWxl
KFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3QKIHsKICAgICBRU2l6ZSBzaXplKDAsIDAp
OwotICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLmZvbnQoKSk7
CisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCkuc3ludGhldGlj
Rm9udCgpKTsKICAgICBRU3R5bGUqIHN0eWxlID0gcVN0eWxlKCk7CiAKICAgICBzd2l0Y2ggKHJl
bmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdC5jcHAKaW5kZXggNWM2YzE4NzYzNTFiZmRjNmJlNDc4MDAxMzkxNDYxNTE4
OGQ4MDdjYS4uMDY2NTM1OTJlNDZiMzY5NGRkZGFmZjU5ZWQ0MmYzODkzZmFhNmRhOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKQEAgLTg1NSw3ICs4
NTUsNyBAQCBTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29ucwogICAgICAgICBzdHJpbmcgPSBmaWxlQnV0
dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwogICAgIGVsc2UgaWYgKGZpbGVuYW1lcy5zaXplKCkg
PT0gMSkgewogICAgICAgICBTdHJpbmcgZm5hbWUgPSBmaWxlbmFtZXNbMF07Ci0gICAgICAgIFFG
b250TWV0cmljcyBmbShmb250LmZvbnQoKSk7CisgICAgICAgIFFGb250TWV0cmljcyBmbShmb250
LnN5bnRoZXRpY0ZvbnQoKSk7CiAgICAgICAgIHN0cmluZyA9IGZtLmVsaWRlZFRleHQoZm5hbWUs
IFF0OjpFbGlkZUxlZnQsIHdpZHRoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpbnQgbiA9IGZp
bGVuYW1lcy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVF0TW9iaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXRNb2JpbGUuY3BwCmluZGV4IGMyZjQyMjhiMDA5MjhlOGIyYzFjNDI3YmQwZTdiOGE3
NDcwNDJjMTAuLjUzMGY3ZmE0MjZiM2NmZjRjNjI1OGVkZjVjMWFkNDFlMWE4NDk4NDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3Bw
CkBAIC00Nyw3ICs0Nyw2IEBACiAKICNpbmNsdWRlIDxRQ29sb3I+CiAjaW5jbHVkZSA8UUZpbGU+
Ci0jaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgogI2luY2x1ZGUgPFFQYWludGVyPgogI2luY2x1ZGUg
PFFQaXhtYXBDYWNoZT4KIApAQCAtNTk1LDcgKzU5NCw2IEBAIGludCBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CiB2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRl
clN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3QKIHsKICAgICBRU2l6ZSBzaXplKDAsIDApOwotICAg
IGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLmZvbnQoKSk7CiAKICAg
ICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIFRleHRBcmVh
UGFydDoKQEAgLTYzMiw3ICs2MzAsNyBAQCB2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1
dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29ucwogICAgIGNh
c2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgIGNhc2UgTWVu
dWxpc3RQYXJ0OiB7Ci0gICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSBmbS5oZWlnaHQoKSAqIGJ1
dHRvbkhlaWdodFJhdGlvICogcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAg
Y29uc3QgaW50IGhlaWdodCA9IHJlbmRlclN0eWxlLT5mb250TWV0cmljcygpLmhlaWdodCgpICog
YnV0dG9uSGVpZ2h0UmF0aW8gKiByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgICAg
ICBzaXplID0gUVNpemUocmVuZGVyU3R5bGUtPndpZHRoKCkudmFsdWUoKSwgaGVpZ2h0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGY5NGQ0
NDU4OWY5NjUzMmJhNTk5ZmQ0NDljMzAyMDJjOWM3NzYzOTIuLjRiMDA4ZDcyODMwZjRhMDc5OGFj
MDVmOGEwMmJiYmUyZGE3NmQwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTE0
MjUsNyArMTQyNSw3IEBAIFFWYXJpYW50IFFXZWJQYWdlOjppbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJ
bnB1dE1ldGhvZFF1ZXJ5IHByb3BlcnR5KSBjb25zdAogICAgICAgICBjYXNlIFF0OjpJbUZvbnQ6
IHsKICAgICAgICAgICAgIGlmIChyZW5kZXJUZXh0Q29udHJvbCkgewogICAgICAgICAgICAgICAg
IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHJlbmRlclRleHRDb250cm9sLT5zdHlsZSgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChRRm9udChyZW5kZXJTdHlsZS0+Zm9udCgp
LmZvbnQoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChRRm9udChyZW5kZXJT
dHlsZS0+Zm9udCgpLnN5bnRoZXRpY0ZvbnQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIFFWYXJpYW50KFFGb250KCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuY3BwCmluZGV4IDdkNjVmNWNiZjEwMDJh
ZTllNTVkMDAxMzYyYzljYThkY2FlYzA4ODQuLjI5ZTQ2MjRlYmQzZTIxNGM1ZmZhNzZkNjBmNjQy
ZjdmNjBkYjhhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UG9wdXBNZW51UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUG9w
dXBNZW51UXQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBQb3B1cE1lbnVRdDo6c2hvdyhj
b25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICBRUmVj
dCBnZW9tZXRyeShyZWN0KTsKICAgICBnZW9tZXRyeS5tb3ZlVG9wTGVmdCh2aWV3LT5jb250ZW50
c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSkpOwogICAgIG1fcG9wdXAtPnNldEdlb21ldHJ5KGdl
b21ldHJ5KTsKLSAgICBtX3BvcHVwLT5zZXRGb250KG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgp
LmZvbnQoKS5mb250KCkpOworICAgIG1fcG9wdXAtPnNldEZvbnQobV9wb3B1cENsaWVudC0+bWVu
dVN0eWxlKCkuZm9udCgpLnN5bnRoZXRpY0ZvbnQoKSk7CiAKICAgICBtX3NlbGVjdERhdGEgPSBh
ZG9wdFB0cihuZXcgU2VsZWN0RGF0YShtX3BvcHVwQ2xpZW50KSk7CiAgICAgbV9wb3B1cC0+c2hv
dygqbV9zZWxlY3REYXRhLmdldCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBiMjk1NTFhMDY0NjczNWVjYjdkZDA3ODZlMDM0ZGNjYmM1OTZl
ZjA0Li5kZDFjNzMxMzBjN2NkNDc4YmU5NjA1YTA3NTcxMTI5MjNmYThkODhhIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTItMDItMDcgIFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAg
ICAgICAgW1F0XSBVc2UgUVJhd0ZvbnQgd2hlbiBidWlsZGluZyB3aXRoIFF0IDUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MDAxCisKKyAgICAgICAg
RmxpcCB0aGUgUVJhd0ZvbnQgc3dpdGNoIGZvciBRdCA1LgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0
dXJlcy5wcmY6CisKIDIwMTItMDItMDIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgW1BlcmZvcm1hbmNlVGVzdHNdIHRlc3RzIGhhdmUgZGVwZW5kZW5jaWVzCmRp
ZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rv
b2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IDhmZDgyYjQ3ZDc0
NzE0MzRjNzBlZTlkYTcxYWIxYzEzNzdhYmJjMjUuLmI5MzgyOTA2OWZlMDAwM2M3NDdkOTEzMjBl
MzAzODNmM2MxN2E0MTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMu
cHJmCkBAIC0yMDcsNiArMjA3LDkgQEAgY29udGFpbnMoTU9CSUxJVFlfQ09ORklHLCBzZW5zb3Jz
KSB7CiAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9Lik6IERFRklO
RVMgKz0gRU5BQkxFX0ZVTExTQ1JFRU5fQVBJPTAKIAorIyBVc2Ugb2YgUVJhd0ZvbnQgaW4gUXQg
NToKK2hhdmVRdCg1KTogREVGSU5FUyArPSBIQVZFX1FSQVdGT05UPTEKKwogIyMgRm9yd2FyZCBl
bmFibGVkIGZlYXR1cmUgbWFjcm9zIHRvIEphdmFTY3JpcHQgZW5hYmxlZCBmZWF0dXJlcyBtYWNy
b3MKIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUID0gTEFOR1VBR0VfSkFWQVNDUklQVD0xCiB2
ODogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gVjhfQklORElORz0xCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126739</attachid>
            <date>2012-02-13 02:35:59 -0800</date>
            <delta_ts>2012-03-01 07:03:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78001-20120213113552.patch</filename>
            <type>text/plain</type>
            <size>66982</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJjMGM4ZDVhNjNlZjBl
YjgzMTYzMmFhMWI4NmExZmQ3OTRjYzdkOC4uMTU3Y2RmYzQ0MDIzYTVhYjRmMzhkZDU1NTViZjNi
MTNiYjUyZmIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEyLTAyLTA3ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gVXNlIFFS
YXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAgIFVwIHVudGlsIG5vdywgZm9u
dHMgaW4gdGhlIFF0IHBvcnQgaGF2ZSBiZWVuIGhhbmRsZWQgdmlhCisgICAgICAgIHRoZSBRRm9u
dCBBUEkuIFFSYXdGb250IG9mZmVycyBhIGxvd2VyLWxldmVsIEFQSSBlbmFibGluZworICAgICAg
ICB1cyB0byBiZSBtb3JlIGluIGxpbmUgd2l0aCB3aGF0IG90aGVyIFdlYktpdCBwb3J0cyBkby4K
KyAgICAgICAgVGhpcyBwYXRjaCBwcm9jZWVkcyB0byBzd2l0Y2hpbmcgb3ZlciB0byBRUmF3Rm9u
dCwgYW5kCisgICAgICAgIGVmZmVjdGl2ZWx5IHVzZSBhbiBlYXJsaWVyIGNoYW5nZSBieSBBbmRy
ZWFzIEtsaW5nCisgICAgICAgIHRoYXQgcmVtYWluZWQgZ3VhcmRlZCB1cCB1bnRpbCBub3cuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIHNpbmNlIHRoaXMgaXMgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcKKyAgICAgICAgZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoRm9udCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5bnRoZXRpY0ZvbnQpOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAg
ICAoU2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6Omdl
dFF0UmF3Rm9udCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyYXdGb250Rm9yQ2hh
cmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5G
b250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YVByaXZh
dGU6OkZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZp
bGxQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhGb3JHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd1F0R2x5cGhSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojppbml0Rm9ybWF0Rm9yVGV4dExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c3ludGhldGljRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpyYXdGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQ0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFF0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJvbVJhd0RhdGFXaXRob3V0UmVmKToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OnN0cm9rZVBlbkZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24p
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3U2ltcGxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6cHJpbWFyeUZvbnRIYXNHbHlwaEZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjplbXBoYXNpc01hcmtBc2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZW1waGFz
aXNNYXJrRGVzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjplbXBoYXNpc01hcmtIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZv
cldpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRP
blN0eWxlKToKKwogMjAxMi0wMi0wOCAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgog
CiAgICAgICAgIHZpZXdCb3ggb24gbmVzdGVkIFNWRyBjYXVzZXMgd3JvbmcgY29udGVudCBzaXpl
IGZvciByZWxhdGl2ZSB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggOTQwNmM5MjQ3MGI2ODNhNWE3
OTg1OWMxZjEwZTlkNDQ1ZGI1N2ZiMy4uMWZlNDljODJiNTU5YjZjYjBiYTdkMTg2Y2RjMzgzZTFh
N2QyOTBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wMi0wNyAgUGll
cnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4KKworICAgICAgICBbUXRdIFVzZSBR
UmF3Rm9udCB3aGVuIGJ1aWxkaW5nIHdpdGggUXQgNQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgwMDEKKworICAgICAgICBTaW5jZSBRRm9udCBpcyBu
b3QgdXNlZCBpbnRlcm5hbGx5LCB3ZSBub3cgbmVlZAorICAgICAgICB0byBxdWVyeSBmb3IgYSBR
Rm9udCB0aGF0IHNob3VsZCBiZSBhIGdvb2QKKyAgICAgICAgZW5vdWdoIG1hdGNoLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3ZWJwYWdl
LmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjppbnB1dE1ldGhvZFF1ZXJ5KToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1l
bnVRdDo6c2hvdyk6CisKIDIwMTItMDItMDggIExlbyBGcmFuY2hpICA8bGZyYW5jaGlAa2RlLm9y
Zz4KIAogICAgICAgICBSZW1vdGUgd2ViIGluc3BlY3RvciByZWVudHJhbmN5IGZpeGVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQppbmRleCBhZjFlYjU4ZGI4MzZjZDllZTJmYWY0YWJiZmFlNDI0NmRkOWIzY2FjLi43ZjFk
ZThhNzZmOTE4ZmFlNzU2YTBkMjBjZDZiYTVlOWMzOWNmMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTI3
NzMsNyArMjc3Myw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQ
bGF0Zm9ybURhdGFRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRR
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UmVjdFF0LmNwcCBcCkBAIC0z
MzM4LDE4ICszMzM3LDE1IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9NQVRITUw9MSkgewog
ICAgICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKIH0KIAot
IyBRUmF3Rm9udCBmZWF0dXJlIGFkZGVkIGluIFF0IDQuOC4wCisjIFFSYXdGb250IHRyYW5zaXRp
b24gaGFuZGxpbmcuCiAjCi0jIElmIGF2YWlsYWJsZSwgdGhpcyBpcyB1c2VkIHRvIGltcGxlbWVu
dCB0aGUgZmFzdCBwYXRoIGZvciB0ZXh0IHJlbmRlcmluZwotIyBhbmQgbWVhc3VyZW1lbnQgaW4g
V2ViQ29yZS4gQmVjYXVzZSB0aGUgZmVhdHVyZSBpcyBzdGlsbCB1bmRlcmdvaW5nCi0jIGRldmVs
b3BtZW50LCBpdCBpcyBkaXNhYmxlZCBpbiBidWlsZHMuCi0jCi0jIGV4aXN0cygkJFtRVF9JTlNU
QUxMX0hFQURFUlNdL1F0R3VpL1FSYXdGb250KTogSEFWRV9RUkFXRk9OVD0xCi0KLSFpc0VtcHR5
KEhBVkVfUVJBV0ZPTlQpIHsKLSAgICBERUZJTkVTICs9IEhBVkVfUVJBV0ZPTlQ9MQorIyBFdmVu
IHRob3VnaCBRUmF3Rm9udCB3YXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gUXQgNC44LCBpdCBoYWQK
KyMgbGltaXRhdGlvbnMgdGhhdCBtYWRlIHN3aXRjaGluZyBmdWxseSB0byBpdCBpbXBvc3NpYmxl
LgorIyBXZSBwcmVzZXJ2ZSB0aGUgb2xkIGNvZGUgcGF0aCB3aGVuIGJ1aWxkaW5nIHdpdGggUXQg
NC4KIAorY29udGFpbnMoREVGSU5FUywgSEFWRV9RUkFXRk9OVD0xKSB7CiAgICAgU09VUkNFUyAr
PSBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgXAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5jcHAgXApAQCAtMzM1OCw4ICszMzU0LDEyIEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9NQVRITUw9MSkgewogICAgIEhFQURFUlMgKz0gXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9T
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaAorfSBlbHNlIHsKKyAgICBTT1VSQ0VTICs9
IFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0NC5jcHAKIH0KIAorCiBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfR0VPTE9DQVRJT049MSkgewogICAgIHY4IHsKICAgICAgICAg
U09VUkNFUyArPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmlu
ZGV4IGMyZDljNThjM2Y1MDQ4MTVkNWMzNDk2NTJjYWZhMjRkZDkzMTQ3MzUuLjYyMDZjZTkxNGM0
NDZjNGVkMDQ3M2Y0YjI5YmE0YjI2ZmQ3Y2M3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC0yNyw5ICsyNyw2IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIK
LSNpZiBQTEFURk9STShRVCkgJiYgSEFWRShRUkFXRk9OVCkKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiR2x5cGhC
dWZmZXIuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC0xNTAsMTEgKzE0Nyw2IEBAIHZvaWQg
Rm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pCiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBh
dGgocnVuKTsKIAotI2lmIFBMQVRGT1JNKFFUKSAmJiBIQVZFKFFSQVdGT05UKQotICAgIGlmIChj
b250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAgICAgICBjb2Rl
UGF0aFRvVXNlID0gQ29tcGxleDsKLSNlbmRpZgotCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCkKICAgICAgICAgcmV0dXJuIGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgcG9p
bnQsIGZyb20sIHRvKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmlu
ZGV4IGQxNWE3N2YzY2Q3MzNmYWM4OWI4MDkxMWYxYzRiNDdhYTRkOTA3MmQuLjZmZjRjNTg5ZmMy
NTM0ZTc5NTJiOTkyYzM3NTE2OWNkYzA2MzY0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmgKQEAgLTM2LDggKzM2LDEzIEBACiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
Q2hhcmFjdGVyTmFtZXMuaD4KIAogI2lmIFBMQVRGT1JNKFFUKQorI2lmIEhBVkUoUVJBV0ZPTlQp
CisjaW5jbHVkZSA8UVJhd0ZvbnQ+CitjbGFzcyBRVGV4dExheW91dDsKKyNlbHNlCiAjaW5jbHVk
ZSA8UUZvbnQ+CiAjZW5kaWYKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3
NSw4ICsxODAsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwg
Ym9vbCYgaXNBZnRlckV4cGFuc2lvbik7CiAKICNpZiBQTEFURk9STShRVCkKKyNpZiBIQVZFKFFS
QVdGT05UKQorICAgIFFSYXdGb250IHJhd0ZvbnQoKSBjb25zdDsKKyNlbHNlCiAgICAgUUZvbnQg
Zm9udCgpIGNvbnN0OwogI2VuZGlmCisgICAgUUZvbnQgc3ludGhldGljRm9udCgpIGNvbnN0Owor
I2VuZGlmCiAKICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7CiAg
ICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7CkBAIC0yNTMsNiArMjYzLDExIEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICByZXR1cm4gbV9mb250TGlzdCAmJiBtX2ZvbnRMaXN0
LT5sb2FkaW5nQ3VzdG9tRm9udHMoKTsKICAgICB9CisjaWYgUExBVEZPUk0oUVQpICYmIEhBVkUo
UVJBV0ZPTlQpCisgICAgdm9pZCBpbml0Rm9ybWF0Rm9yVGV4dExheW91dChRVGV4dExheW91dCop
IGNvbnN0OworI2VuZGlmCisKKwogCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0
aW9uOwogICAgIG11dGFibGUgUmVmUHRyPEZvbnRGYWxsYmFja0xpc3Q+IG1fZm9udExpc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApp
bmRleCBkZDg2ZjAwNGU0YzgzOTYzNjNjOTUxMjM0ZGFmYWY1MjQwNzk4YjMxLi45YjExMzcxZjVh
MmU2ZDJiZWNkYjAwZTJlOTkyNjFlMDRmYzg5MTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKQEAgLTU0LDcgKzU0LDExIEBAIHR5
cGVkZWYgc3RydWN0IE9wYXF1ZUFUU1VTdHlsZSogQVRTVVN0eWxlOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkKKyNpZiAhSEFWRShRUkFXRk9OVCkKICNpbmNsdWRlIDxRRm9udD4KKyNlbHNl
CisjaW5jbHVkZSA8UVJhd0ZvbnQ+CisjZW5kaWYKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xODgsNyArMTkyLDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
UVQpCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgUUZvbnQgZ2V0UXRGb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CisjZWxzZQorICAgIFFSYXdGb250IGdldFF0
UmF3Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLnJhd0ZvbnQoKTsgfQorI2Vu
ZGlmIC8vICFIQVZFKFFSQVdGT05UKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pIHx8IChP
UyhXSU5ET1dTKSAmJiBQTEFURk9STShXWCkpCkBAIC0zNDEsNyArMzQ5LDcgQEAgQUxXQVlTX0lO
TElORSBmbG9hdCBTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKICAgICBtX2dseXBoVG9XaWR0aE1hcC5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIHdpZHRo
KTsKICAgICByZXR1cm4gd2lkdGg7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyAhSEFWRShRUkFXRk9O
VCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAKaW5kZXggMDJjZTQyYTljMWYyNGIy
YjdjM2E1YjczNDQ2NDg5Zjg0ZTFmNTI3YS4uODE2YmNjYjg5MjRjYWFmODM1MDljYzA2YWU2YjA1
MmFhMzE4YmMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udENhY2hlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDYWNoZVF0LmNwcApAQCAtNDksMzUgKzQ5LDI5IEBAIHZvaWQgRm9udENhY2hlOjpw
bGF0Zm9ybUluaXQoKQogfQogCiAjaWYgSEFWRShRUkFXRk9OVCkKLXN0YXRpYyBRUmF3Rm9udCBy
YXdGb250Rm9yQ2hhcmFjdGVycyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFGb250JiBy
ZXF1ZXN0ZWRGb250KQorc3RhdGljIFFSYXdGb250IHJhd0ZvbnRGb3JDaGFyYWN0ZXJzKGNvbnN0
IFFTdHJpbmcmIHN0cmluZywgY29uc3QgUVJhd0ZvbnQmIGZvbnQpCiB7Ci0gICAgUUZvbnQgZm9u
dChyZXF1ZXN0ZWRGb250KTsKLSAgICBmb250LnNldFN0eWxlU3RyYXRlZ3koUUZvbnQ6Ok5vRm9u
dE1lcmdpbmcpOwotCi0gICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZywgZm9udCk7CisgICAg
UVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZyk7CisgICAgbGF5b3V0LnNldFJhd0ZvbnQoZm9udCk7
CiAgICAgbGF5b3V0LmJlZ2luTGF5b3V0KCk7CiAgICAgbGF5b3V0LmNyZWF0ZUxpbmUoKTsKICAg
ICBsYXlvdXQuZW5kTGF5b3V0KCk7CiAKICAgICBRTGlzdDxRR2x5cGhSdW4+IGdseXBoTGlzdCA9
IGxheW91dC5nbHlwaFJ1bnMoKTsKLQotICAgIEFTU0VSVChnbHlwaExpc3Quc2l6ZSgpID09IDEp
OwotCi0gICAgY29uc3QgUUdseXBoUnVuJiBnbHlwaHMoZ2x5cGhMaXN0LmF0KDApKTsKLSAgICBR
VmVjdG9yPHF1aW50MzI+IGdseXBoSW5kZXhlcyA9IGdseXBocy5nbHlwaEluZGV4ZXMoKTsKLQot
ICAgIGlmIChnbHlwaEluZGV4ZXMuaXNFbXB0eSgpKQorICAgIEFTU0VSVChnbHlwaExpc3Quc2l6
ZSgpIDw9IDEpOworICAgIGlmICghZ2x5cGhMaXN0LnNpemUoKSkKICAgICAgICAgcmV0dXJuIFFS
YXdGb250KCk7CiAKKyAgICBjb25zdCBRR2x5cGhSdW4mIGdseXBocyhnbHlwaExpc3QuYXQoMCkp
OwogICAgIHJldHVybiBnbHlwaHMucmF3Rm9udCgpOwogfQotI2VuZGlmCisjZW5kaWYgLy8gSEFW
RShRUkFXRk9OVCkKIAogY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERh
dGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQogewogI2lmIEhBVkUoUVJBV0ZPTlQpCiAgICAgUVN0cmluZyBxc3RyaW5n
ID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNo
YXJhY3RlcnMpLCBsZW5ndGgpOwotICAgIFFSYXdGb250IGNvbXB1dGVkRm9udCA9IHJhd0ZvbnRG
b3JDaGFyYWN0ZXJzKHFzdHJpbmcsIGZvbnQuZm9udCgpKTsKKyAgICBRUmF3Rm9udCBjb21wdXRl
ZEZvbnQgPSByYXdGb250Rm9yQ2hhcmFjdGVycyhxc3RyaW5nLCBmb250LnJhd0ZvbnQoKSk7CiAg
ICAgaWYgKCFjb21wdXRlZEZvbnQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBG
b250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZvbnQoY29tcHV0ZWRGb250KTsKQEAgLTEwNywxMSAr
MTAxLDkgQEAgdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQogCiBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSNpZiBRVF9WRVJTSU9O
ID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgOCwgMCkKICAgICBRRm9udERhdGFiYXNlIGRiOwogICAg
IGlmICghZGIuaGFzRmFtaWx5KGZhbWlseU5hbWUpKQogICAgICAgICByZXR1cm4gMDsKLSNlbmRp
ZgogICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWls
eU5hbWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKaW5kZXggMzk5NmQyMjNiOTg3MDJj
ZGY2MzBiOTg1ZjY2MjlhOGZiMGE1ZjNiMS4uN2ZhOWY4YzExNWVhODk0MDI5ODhlOWYzNjFlNmIx
NWQxNWE0MWIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApAQCAtMjksNiArMjksOSBAQAog
I2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpZiBIQVZFKFFSQVdGT05UKQorI2luY2x1
ZGUgPFFSYXdGb250PgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsOCAr
NDQsMTIgQEAgcHVibGljOgogICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKSB7IH0KICAgICB+
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwogCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgLy8g
Zm9yIHVzZSB3aXRoIFFGb250RGF0YWJhc2U6OmFkZEFwcGxpY2F0aW9uRm9udC9yZW1vdmVBcHBs
aWNhdGlvbkZvbnQKICAgICBpbnQgbV9oYW5kbGU7CisjZWxzZQorICAgIFFSYXdGb250IG1fcmF3
Rm9udDsKKyNlbmRpZgogCiAgICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGlu
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9u
dGFsLCBUZXh0T3JpZW50YXRpb24gPSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250V2lkdGhWYXJpYW50ID0gUmVn
dWxhcldpZHRoLCBGb250UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXggMjBmMTYxYThmMjFmZjgxNDA2YTgyNjQ5
NDNlOWUwMjdiMWIwYzBjMy4uZGY4MWYzM2M1Y2Y1OWE4YzQ0OGE0MGQ1NjExMTE0OTM0N2E4NDMz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUXQuY3BwCkBAIC0yNCw0MCArMjQsNTYgQEAK
IAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpZiAhSEFWRShRUkFXRk9OVCkKICNpbmNsdWRlIDxRRm9udERhdGFiYXNlPgorI2VuZGlm
CiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQogeworI2lmICFIQVZF
KFFSQVdGT05UKQogICAgIFFGb250RGF0YWJhc2U6OnJlbW92ZUFwcGxpY2F0aW9uRm9udChtX2hh
bmRsZSk7CisjZW5kaWYKIH0KIAogRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBG
b250T3JpZW50YXRpb24sIFRleHRPcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCwgRm9udFJl
bmRlcmluZ01vZGUpCiB7CisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgUUZvbnQgZm9udDsKICAg
ICBmb250LnNldEZhbWlseShRRm9udERhdGFiYXNlOjphcHBsaWNhdGlvbkZvbnRGYW1pbGllcyht
X2hhbmRsZSlbMF0pOwogICAgIGZvbnQuc2V0UGl4ZWxTaXplKHNpemUpOwogICAgIGlmIChib2xk
KQogICAgICAgICBmb250LnNldFdlaWdodChRRm9udDo6Qm9sZCk7CiAgICAgZm9udC5zZXRJdGFs
aWMoaXRhbGljKTsKLQogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnQpOworI2Vsc2UK
KyAgICBRX0FTU0VSVChtX3Jhd0ZvbnQuaXNWYWxpZCgpKTsKKyAgICBtX3Jhd0ZvbnQuc2V0UGl4
ZWxTaXplKHFyZWFsKHNpemUpKTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX3Jhd0Zv
bnQpOworI2VuZGlmCiB9CiAKIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCiB7CiAgICAgQVNTRVJUX0FSRyhi
dWZmZXIsIGJ1ZmZlcik7CiAKLSAgICBpbnQgaWQgPSBRRm9udERhdGFiYXNlOjphZGRBcHBsaWNh
dGlvbkZvbnRGcm9tRGF0YShRQnl0ZUFycmF5KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUo
KSkpOworICAgIGNvbnN0IFFCeXRlQXJyYXkgZm9udERhdGEoYnVmZmVyLT5kYXRhKCksIGJ1ZmZl
ci0+c2l6ZSgpKTsKKyNpZiAhSEFWRShRUkFXRk9OVCkKKyAgICBpbnQgaWQgPSBRRm9udERhdGFi
YXNlOjphZGRBcHBsaWNhdGlvbkZvbnRGcm9tRGF0YShmb250RGF0YSk7CiAgICAgaWYgKGlkID09
IC0xKQogICAgICAgICByZXR1cm4gMDsKLQogICAgIFFfQVNTRVJUKFFGb250RGF0YWJhc2U6OmFw
cGxpY2F0aW9uRm9udEZhbWlsaWVzKGlkKS5zaXplKCkgPiAwKTsKKyNlbmRpZgogCiAgICAgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSAqZGF0YSA9IG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOwor
I2lmICFIQVZFKFFSQVdGT05UKQogICAgIGRhdGEtPm1faGFuZGxlID0gaWQ7CisjZWxzZQorICAg
IC8vIFBpeGVsIHNpemUgZG9lc24ndCBtYXR0ZXIgYXQgdGhpcyBwb2ludCwgaXQgaXMgc2V0IGlu
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEuCisgICAgZGF0YS0+bV9y
YXdGb250LmxvYWRGcm9tRGF0YShmb250RGF0YSwgLypwaXhlbFNpemUgPSAqLzAsIFFGb250OjpQ
cmVmZXJEZWZhdWx0SGludGluZyk7CisjZW5kaWYKICAgICByZXR1cm4gZGF0YTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3Jt
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3Jt
RGF0YS5oCmluZGV4IDc2NjJhYTAwNzFlMjUxZGU0MDUyYzRiZjdhMTA1OTUzZTBmYzhhN2MuLmY1
NWUxOWMyYjEzMGMzZjg5Zjc0MjQ1YTM0NTVhOGQzMzEwMDk0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmgKQEAg
LTQwLDggKzQwLDEzIEBAIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlIDogcHVibGljIFJl
ZkNvdW50ZWQ8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGU+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKCkKKyNpZiAhSEFWRShRUkFXRk9O
VCkKICAgICAgICAgOiBzaXplKGZvbnQucGl4ZWxTaXplKCkpCiAgICAgICAgICwgYm9sZChmb250
LmJvbGQoKSkKKyNlbHNlCisgICAgICAgIDogc2l6ZSgwKQorICAgICAgICAsIGJvbGQoZmFsc2Up
CisjZW5kaWYKICAgICAgICAgLCBvYmxpcXVlKGZhbHNlKQogICAgICAgICAsIGlzRGVsZXRlZFZh
bHVlKGZhbHNlKQogICAgIHsgfQpAQCAtNTEsMjAgKzU2LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBvYmxpcXVlKG9ibGlxdWUpCiAgICAgICAgICwgaXNEZWxldGVkVmFsdWUoZmFsc2UpCiAgICAg
eyB9CisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoY29u
c3QgUUZvbnQmIGZvbnQpCiAgICAgICAgIDogZm9udChmb250KQotI2lmIEhBVkUoUVJBV0ZPTlQp
Ci0gICAgICAgICwgcmF3Rm9udChRUmF3Rm9udDo6ZnJvbUZvbnQoZm9udCwgUUZvbnREYXRhYmFz
ZTo6QW55KSkKLSNlbmRpZgogICAgICAgICAsIHNpemUoZm9udC5waXhlbFNpemUoKSkKICAgICAg
ICAgLCBib2xkKGZvbnQuYm9sZCgpKQogICAgICAgICAsIG9ibGlxdWUoZmFsc2UpCiAgICAgICAg
ICwgaXNEZWxldGVkVmFsdWUoZmFsc2UpCiAgICAgeyB9Ci0jaWYgSEFWRShRUkFXRk9OVCkKKyNl
bHNlCiAgICAgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoY29uc3QgUVJhd0ZvbnQmIHJhd0ZvbnQp
Ci0gICAgICAgIDogZm9udCgpCi0gICAgICAgICwgcmF3Rm9udChyYXdGb250KQorICAgICAgICA6
IHJhd0ZvbnQocmF3Rm9udCkKICAgICAgICAgLCBzaXplKHJhd0ZvbnQucGl4ZWxTaXplKCkpCiAg
ICAgICAgICwgYm9sZChyYXdGb250LndlaWdodCgpID49IFFGb250OjpCb2xkKQogICAgICAgICAs
IG9ibGlxdWUoZmFsc2UpCkBAIC03NSw4ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgOiBpc0Rl
bGV0ZWRWYWx1ZSh0cnVlKQogICAgIHsgfQogCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgUUZv
bnQgZm9udDsKLSNpZiBIQVZFKFFSQVdGT05UKQorI2Vsc2UKICAgICBRUmF3Rm9udCByYXdGb250
OwogI2VuZGlmCiAgICAgZmxvYXQgc2l6ZTsKQEAgLTkwLDEwICs5MywxMSBAQCBjbGFzcyBGb250
UGxhdGZvcm1EYXRhIHsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgaW50IHdvcmRT
cGFjaW5nID0gMCwgaW50IGxldHRlclNwYWNpbmcgPSAwKTsKKyNpZiAhSEFWRShRUkFXRk9OVCkK
ICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IFFGb250JiBmb250KQogICAgICAgICA6IG1fZGF0
YShhZG9wdFJlZihuZXcgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoZm9udCkpKQogICAgIHsgfQot
I2lmIEhBVkUoUVJBV0ZPTlQpCisjZWxzZQogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYsIGZsb2F0IHNpemUpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
UVJhd0ZvbnQmIHJhd0ZvbnQpCiAgICAgICAgIDogbV9kYXRhKGFkb3B0UmVmKG5ldyBGb250UGxh
dGZvcm1EYXRhUHJpdmF0ZShyYXdGb250KSkpCkBAIC0xMTIsNiArMTE2LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+aXNEZWxldGVkVmFsdWU7CiAgICAgfQog
CisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgUUZvbnQgZm9udCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBRX0FTU0VSVCghaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CkBAIC0xMTksNyArMTI0
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIFFGb250KCk7CiAgICAgICAgIHJldHVy
biBtX2RhdGEtPmZvbnQ7CiAgICAgfQotI2lmIEhBVkUoUVJBV0ZPTlQpCisjZWxzZQogICAgIFFS
YXdGb250IHJhd0ZvbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgUV9BU1NFUlQoIWlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXggODZmYzEyZTNhMWVh
NzA4MGUxZWMxZTgwZmQwZWE5NjE1NmVmOTIwMy4uM2Q5MzA4ZjI0NjA2MWYyZTM0NDljYTA2MzU3
NmZiYmQwNjliYTliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCkBAIC02Myw3ICs2MywxMSBAQCBG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBvYmxpcXVlKQogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5h
bWUsIGludCB3b3JkU3BhY2luZywgaW50IGxldHRlclNwYWNpbmcpCiAgICAgOiBtX2RhdGEoYWRv
cHRSZWYobmV3IEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKCkpKQogeworI2lmICFIQVZFKFFSQVdG
T05UKQogICAgIFFGb250JiBmb250ID0gbV9kYXRhLT5mb250OworI2Vsc2UKKyAgICBRRm9udCBm
b250OworI2VuZGlmCiAgICAgaW50IHJlcXVlc3RlZFNpemUgPSBkZXNjcmlwdGlvbi5jb21wdXRl
ZFBpeGVsU2l6ZSgpOwogICAgIGZvbnQuc2V0RmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGZvbnQu
c2V0UGl4ZWxTaXplKHJlcXVlc3RlZFNpemUpOwpAQCAtNzEsMTcgKzc1LDE5IEBAIEZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbiwgY29uc3QgQXRvCiAgICAgZm9udC5zZXRXZWlnaHQodG9RRm9udFdlaWdodChkZXNjcmlw
dGlvbi53ZWlnaHQoKSkpOwogICAgIGZvbnQuc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpOwog
ICAgIGZvbnQuc2V0TGV0dGVyU3BhY2luZyhRRm9udDo6QWJzb2x1dGVTcGFjaW5nLCBsZXR0ZXJT
cGFjaW5nKTsKLSAgICBjb25zdCBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxsQ2Fw
cygpOwotICAgIGZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNtYWxs
Q2FwcyA6IFFGb250OjpNaXhlZENhc2UpOwogICAgIGZvbnQuc2V0U3R5bGVTdHJhdGVneShRRm9u
dDo6Rm9yY2VJbnRlZ2VyTWV0cmljcyk7CiAKICAgICBtX2RhdGEtPmJvbGQgPSBmb250LmJvbGQo
KTsKKyNpZiAhSEFWRShRUkFXRk9OVCkKKyAgICBjb25zdCBib29sIHNtYWxsQ2FwcyA9IGRlc2Ny
aXB0aW9uLnNtYWxsQ2FwcygpOworICAgIGZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBz
ID8gUUZvbnQ6OlNtYWxsQ2FwcyA6IFFGb250OjpNaXhlZENhc2UpOwogICAgIC8vIFdlYktpdCBh
bGxvd3MgZm9udCBzaXplIHplcm8gYnV0IFFGb250IGRvZXMgbm90LiBXZSB3aWxsIHJldHVybgog
ICAgIC8vIG1fZGF0YS0+c2l6ZSBpZiBhIGZvbnQgc2l6ZSBvZiB6ZXJvIGlzIHJlcXVlc3RlZCBh
bmQgcGl4ZWxTaXplKCkKICAgICAvLyBvdGhlcndpc2UuCiAgICAgbV9kYXRhLT5zaXplID0gKCFy
ZXF1ZXN0ZWRTaXplKSA/IHJlcXVlc3RlZFNpemUgOiBmb250LnBpeGVsU2l6ZSgpOwotI2lmIEhB
VkUoUVJBV0ZPTlQpCisjZWxzZQogICAgIG1fZGF0YS0+cmF3Rm9udCA9IFFSYXdGb250Ojpmcm9t
Rm9udChmb250LCBRRm9udERhdGFiYXNlOjpBbnkpOworICAgIG1fZGF0YS0+c2l6ZSA9IG1fZGF0
YS0+cmF3Rm9udC5waXhlbFNpemUoKTsKICNlbmRpZgogfQogCkBAIC04OSwxNSArOTUsMTMgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBjb25zdCBBdG8KIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIsIGZsb2F0IHNpemUpCiAgICAgOiBtX2Rh
dGEoYWRvcHRSZWYobmV3IEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKCkpKQogewotICAgIG1fZGF0
YS0+Zm9udCA9IG90aGVyLm1fZGF0YS0+Zm9udDsKICAgICBtX2RhdGEtPnJhd0ZvbnQgPSBvdGhl
ci5tX2RhdGEtPnJhd0ZvbnQ7CiAgICAgbV9kYXRhLT5ib2xkID0gb3RoZXIubV9kYXRhLT5ib2xk
OwogICAgIG1fZGF0YS0+b2JsaXF1ZSA9IG90aGVyLm1fZGF0YS0+b2JsaXF1ZTsKLSAgICBtX2Rh
dGEtPmZvbnQuc2V0UGl4ZWxTaXplKHNpemUpOwogICAgIG1fZGF0YS0+cmF3Rm9udC5zZXRQaXhl
bFNpemUoc2l6ZSk7Ci0gICAgbV9kYXRhLT5zaXplID0gc2l6ZSA/IG1fZGF0YS0+Zm9udC5waXhl
bFNpemUoKSA6IDA7CisgICAgbV9kYXRhLT5zaXplID0gbV9kYXRhLT5yYXdGb250LnBpeGVsU2l6
ZSgpOwogfQotI2VuZGlmCisjZW5kaWYgLy8gSEFWRShRUkFXRk9OVCkKIAogYm9vbCBGb250UGxh
dGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25z
dAogewpAQCAtMTEwLDcgKzExNCwxMSBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9y
PT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgY29uc3QgYm9vbCBl
cXVhbHMgPSAobV9kYXRhLT5zaXplID09IG90aGVyLm1fZGF0YS0+c2l6ZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIG1fZGF0YS0+Ym9sZCA9PSBvdGhlci5tX2RhdGEtPmJvbGQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBtX2RhdGEtPm9ibGlxdWUgPT0gb3RoZXIubV9kYXRhLT5v
YmxpcXVlCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
bV9kYXRhLT5mb250ID09IG90aGVyLm1fZGF0YS0+Zm9udCk7CisjZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIG1fZGF0YS0+cmF3Rm9udCA9PSBvdGhlci5tX2RhdGEtPnJhd0ZvbnQp
OworI2VuZGlmCiAgICAgcmV0dXJuIGVxdWFsczsKIH0KIApAQCAtMTIwLDEwICsxMjgsMTUgQEAg
dW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAw
OwogICAgIGlmIChtX2RhdGEtPmlzRGVsZXRlZFZhbHVlKQogICAgICAgICByZXR1cm4gMTsKLSAg
ICByZXR1cm4gcUhhc2gobV9kYXRhLT5mb250LnRvU3RyaW5nKCkpCi0gICAgICAgICAgIF4gcUhh
c2goKnJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMio+KCZtX2RhdGEtPnNpemUpKQotICAgICAgICAg
ICBeIHFIYXNoKG1fZGF0YS0+Ym9sZCkKLSAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPm9ibGlx
dWUpOworI2lmICFIQVZFKFFSQVdGT05UKQorICAgIHJldHVybiAocUhhc2gobV9kYXRhLT5mb250
LnRvU3RyaW5nKCkpIF4gcUhhc2gobV9kYXRhLT5ib2xkKQorICAgICAgICAgICAgXiBxSGFzaCht
X2RhdGEtPm9ibGlxdWUpKQorICAgICAgICAgICAgXiBxSGFzaCgqcmVpbnRlcnByZXRfY2FzdDxx
dWludDMyKj4oJm1fZGF0YS0+c2l6ZSkpOworI2Vsc2UKKyAgICByZXR1cm4gcUhhc2gobV9kYXRh
LT5yYXdGb250LmZhbWlseU5hbWUoKSkgXiBxSGFzaChtX2RhdGEtPnJhd0ZvbnQuc3R5bGUoKSkK
KyAgICAgICAgICAgIF4gcUhhc2gobV9kYXRhLT5yYXdGb250LndlaWdodCgpKQorICAgICAgICAg
ICAgXiBxSGFzaCgqcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4oJm1fZGF0YS0+c2l6ZSkpOwor
I2VuZGlmCiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udFF0LmNwcAppbmRleCA1MTE5MzM0OWZlNDIwZjU2MjMzODZiNjQ2ZmVi
NjM5NGEyMTY0ODI2Li40OGNiZTI4M2U4MGMzYWRiNmQ4NDdmNGJkMTBkNmVkNDRmMDgzYmU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEwIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogCkBAIC0yNiw5ICsyNiw3
IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udEZhbGxiYWNr
TGlzdC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2lmIEhBVkUoUVJBV0ZPTlQpCiAj
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
QEAgLTM3LDE3ICszNSwxMiBAQAogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAogI2luY2x1ZGUgPFFC
cnVzaD4KLSNpbmNsdWRlIDxRRm9udEluZm8+Ci0jaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgogI2lu
Y2x1ZGUgPFFQYWludGVyPgogI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KICNpbmNsdWRlIDxRUGVu
PgotI2lmIEhBVkUoUVJBV0ZPTlQpCiAjaW5jbHVkZSA8UVBvaW50Rj4KLSNlbmRpZgogI2luY2x1
ZGUgPFFUZXh0TGF5b3V0PgogI2luY2x1ZGUgPHFhbGdvcml0aG1zLmg+Ci0jaW5jbHVkZSA8cWRl
YnVnLmg+CiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIApAQCAtOTIsNyArODUsNyBAQCBzdGF0aWMg
UVBlbiBmaWxsUGVuRm9yQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCkKICAgICAgICAgcmV0
dXJuIFFQZW4oUUJydXNoKGN0eC0+ZmlsbFBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJu
KGFmZmluZSkpLCAwKTsKICAgICB9CiAKLSAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5maWxs
Q29sb3IoKSkpOworICAgIHJldHVybiBRUGVuKFFDb2xvcihjdHgtPmZpbGxDb2xvcigpKSwgMCk7
CiB9CiAKIHN0YXRpYyBRUGVuIHN0cm9rZVBlbkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBj
dHgpCkBAIC0xMTIsMTU4ICsxMDUsOTIgQEAgc3RhdGljIFFQZW4gc3Ryb2tlUGVuRm9yQ29udGV4
dChHcmFwaGljc0NvbnRleHQqIGN0eCkKICAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5zdHJv
a2VDb2xvcigpKSwgY3R4LT5zdHJva2VUaGlja25lc3MoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRy
YXdUZXh0Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBRRm9udCYgZm9u
dCwgYm9vbCBpc0NvbXBsZXhUZXh0KQorc3RhdGljIFFQYWludGVyUGF0aCBwYXRoRm9yR2x5cGhz
KGNvbnN0IFFHbHlwaFJ1biYgZ2x5cGhSdW4sIGNvbnN0IFFQb2ludEYmIG9mZnNldCkKIHsKLSAg
ICBpZiAodG8gPCAwKQotICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKLQotICAgIFFQYWludGVy
ICpwID0gY3R4LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIFFQZW4gdGV4dEZpbGxQZW47Ci0g
ICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpCi0gICAgICAgIHRl
eHRGaWxsUGVuID0gZmlsbFBlbkZvckNvbnRleHQoY3R4KTsKLQotICAgIFFQZW4gdGV4dFN0cm9r
ZVBlbjsKLSAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQot
ICAgICAgICB0ZXh0U3Ryb2tlUGVuID0gc3Ryb2tlUGVuRm9yQ29udGV4dChjdHgpOwotCi0gICAg
U3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygp
LCBydW4ubGVuZ3RoKCkpOwotICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0
UmVmKHNhbml0aXplZCk7Ci0gICAgUVBvaW50RiBwdChwb2ludC54KCksIHBvaW50LnkoKSk7Ci0K
LSAgICBpZiAoZnJvbSA+IDAgfHwgdG8gPCBydW4ubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKGlz
Q29tcGxleFRleHQpIHsKLSAgICAgICAgICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcsIGZv
bnQpOwotICAgICAgICAgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBy
dW4pOwotICAgICAgICAgICAgZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWChmcm9tKTsKLSAgICAg
ICAgICAgIGZsb2F0IHgyID0gbGluZS5jdXJzb3JUb1godG8pOwotICAgICAgICAgICAgaWYgKHgy
IDwgeDEpCi0gICAgICAgICAgICAgICAgcVN3YXAoeDEsIHgyKTsKLQotICAgICAgICAgICAgUUZv
bnRNZXRyaWNzIGZtKGZvbnQpOwotICAgICAgICAgICAgaW50IGFzY2VudCA9IGZtLmFzY2VudCgp
OwotICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9pbnQu
eSgpIC0gYXNjZW50LCB4MiAtIHgxLCBmbS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBRUmVjdEYg
Y2xpcCA9IGJvdW5kaW5nUmVjdDsKLQotICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93
ID0gY3R4LT5zaGFkb3dCbHVyKCk7Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkg
IT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRG
IHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3Rh
dGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9
IDAsIGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRv
d09mZnNldC54KCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZzZXQu
eCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHgxID0gLXNo
YWRvd09mZnNldC54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC55KCkgPiAw
KQotICAgICAgICAgICAgICAgICAgICBkeTIgPSBzaGFkb3dPZmZzZXQueSgpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHkxID0gLXNoYWRvd09mZnNldC55KCk7
Ci0gICAgICAgICAgICAgICAgLy8gZXhwYW5kIHRoZSBjbGlwIHJlY3QgdG8gaW5jbHVkZSB0aGUg
dGV4dCBzaGFkb3cgYXMgd2VsbAotICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGJsdXJEaXN0
YW5jZSA9IGN0eC0+c3RhdGUoKS5zaGFkb3dCbHVyOwotICAgICAgICAgICAgICAgIGNsaXAuYWRq
dXN0KGR4MSwgZHgyLCBkeTEsIGR5Mik7Ci0gICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWJs
dXJEaXN0YW5jZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgcC0+c2V0
Q2xpcFJlY3QoY2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwotICAgICAgICAgICAg
cHQuc2V0WShwdC55KCkgLSBhc2NlbnQpOwotCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50
eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBTaGFkb3dC
bHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKLSAgICAgICAgICAgICAgICBpZiAo
Y3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdwotICAgICAgICAgICAg
ICAgICAgICAmJiAoIWN0eFNoYWRvdy0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjdHgt
PmdldENUTSgpLmlzSWRlbnRpdHkoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcC0+c2F2ZSgp
OwotICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9y
KTsKLSAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5zdGF0ZSgp
LnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHAtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJl
Z2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoc2hhZG93Q29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNo
YWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRv
bid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgotICAgICAgICAgICAgICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcC0+c2V0UGVuKHRleHRGaWxsUGVuKTsKLSAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7
Ci0gICAgICAgICAgICBwLT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgaW50IHNraXBXaWR0aCA9IFFGb250TWV0cmljcyhmb250KS53aWR0aChzdHJp
bmcsIGZyb20sIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7Ci0gICAgICAgIHB0LnNldFgocHQueCgp
ICsgc2tpcFdpZHRoKTsKLSAgICAgICAgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNh
bml0aXplZCwgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICBRUGFpbnRlclBhdGggcGF0aDsKKyAgICBj
b25zdCBRUmF3Rm9udCByYXdGb250KGdseXBoUnVuLnJhd0ZvbnQoKSk7CisgICAgY29uc3QgUVZl
Y3RvcjxxdWludDMyPiBnbHlwaEluZGljZXMgPSBnbHlwaFJ1bi5nbHlwaEluZGV4ZXMoKTsKKyAg
ICBjb25zdCBRVmVjdG9yPFFQb2ludEY+IHBvc2l0aW9ucyA9IGdseXBoUnVuLnBvc2l0aW9ucygp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2x5cGhJbmRpY2VzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFFQYWludGVyUGF0aCBnbHlwaFBhdGggPSByYXdGb250LnBhdGhGb3JHbHlwaChnbHlw
aEluZGljZXMuYXQoaSkpOworICAgICAgICBnbHlwaFBhdGgudHJhbnNsYXRlKHBvc2l0aW9ucy5h
dChpKSArIG9mZnNldCk7CisgICAgICAgIHBhdGguYWRkUGF0aChnbHlwaFBhdGgpOwogICAgIH0K
KyAgICByZXR1cm4gcGF0aDsKK30KIAotICAgIHAtPnNldEZvbnQoZm9udCk7Ci0KLSAgICBpbnQg
ZmxhZ3MgPSBydW4ucnRsKCkgPyBRdDo6VGV4dEZvcmNlUmlnaHRUb0xlZnQgOiBRdDo6VGV4dEZv
cmNlTGVmdFRvUmlnaHQ7Ci0gICAgaWYgKCFpc0NvbXBsZXhUZXh0ICYmICEoY3R4LT50ZXh0RHJh
d2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSkKLSAgICAgICAgZmxhZ3MgfD0gUXQ6OlRleHRC
eXBhc3NTaGFwaW5nOworc3RhdGljIHZvaWQgZHJhd1F0R2x5cGhSdW4oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBRR2x5cGhSdW4mIHF0R2x5cGhSdW4sIGNvbnN0IFFQb2ludEYmIHBv
aW50LCBpbnQgYmFzZUxpbmVPZmZzZXQpCit7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIFFQYWludGVyUGF0aCB0ZXh0U3Ryb2tlUGF0
aDsKLSAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQotICAg
ICAgICB0ZXh0U3Ryb2tlUGF0aC5hZGRUZXh0KHB0LCBmb250LCBzdHJpbmcpOwotCi0gICAgU2hh
ZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7Ci0gICAgaWYgKGN0eC0+aGFz
U2hhZG93KCkgJiYgY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsK
LSAgICAgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHsKLSAg
ICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93
KSB7Ci0gICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgIHAtPnNldFBl
bihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0
ZShRUG9pbnRGKGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgp
LnNoYWRvd09mZnNldC5oZWlnaHQoKSkpOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHB0
LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5zaW9uKCkpOwotICAgICAgICAgICAgICAgIHAtPnJl
c3RvcmUoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUUZvbnRNZXRy
aWNzIGZtKGZvbnQpOwotICAgICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocHQueCgp
LCBwb2ludC55KCkgLSBmbS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxhZ3MpLCBm
bS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250
ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKLSAg
ICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBR
UGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwotICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5
LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KLSAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAg
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1
bi5leHBhbnNpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93
TGF5ZXIoY3R4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSB7Ci0gICAg
ICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdykg
ewotICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUo
KS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQo
KSk7Ci0gICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKHNoYWRvd09mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCku
c2hhZG93Q29sb3IpKTsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNoYWRvd09mZnNl
dCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFFGb250TWV0cmljcyBm
bShmb250KTsKLSAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHB0LngoKSwgcG9p
bnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywgLTEsIGZsYWdzKSwgZm0uaGVp
Z2h0KCkpOwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9
IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgUVBhaW50
ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2Ug
ZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCi0gICAgICAgICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hh
ZG93Q29sb3IpKTsKLSAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXll
cihjdHgpOwotICAgICAgICAgICAgICAgIH0KKyAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdN
b2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgdGV4dFN0cm9rZVBhdGggPSBwYXRoRm9y
R2x5cGhzKHF0R2x5cGhSdW4sIHBvaW50KTsKKworICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IGNv
bnRleHQtPnNoYWRvd0JsdXIoKTsKKyAgICBpZiAoY29udGV4dC0+aGFzU2hhZG93KCkgJiYgc2hh
ZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgc3dpdGNoIChz
aGFkb3ctPnR5cGUoKSkgeworICAgICAgICBjYXNlIFNoYWRvd0JsdXI6OlNvbGlkU2hhZG93OiB7
CisgICAgICAgICAgICBRUGVuIHByZXZpb3VzUGVuID0gcGFpbnRlci0+cGVuKCk7CisgICAgICAg
ICAgICBwYWludGVyLT5zZXRQZW4oY29udGV4dC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAg
ICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChjb250ZXh0LT5zdGF0ZSgpLnNoYWRv
d09mZnNldC53aWR0aCgpLCBjb250ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
CisgICAgICAgICAgICBwYWludGVyLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkKKyAgICAg
ICAgICAgICAgICBwYWludGVyLT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhSdW4pOworICAg
ICAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0
cm9rZSkKKyAgICAgICAgICAgICAgICBwYWludGVyLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRo
LCBwYWludGVyLT5wZW4oKSk7CisgICAgICAgICAgICBwYWludGVyLT50cmFuc2xhdGUoLXNoYWRv
d09mZnNldCk7CisgICAgICAgICAgICBwYWludGVyLT5zZXRQZW4ocHJldmlvdXNQZW4pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFkb3dCbHVyOjpCbHVy
U2hhZG93OiB7CisgICAgICAgICAgICBjb25zdCBpbnQgd2lkdGggPSBxdEdseXBoUnVuLmJvdW5k
aW5nUmVjdCgpLndpZHRoKCk7CisgICAgICAgICAgICBjb25zdCBRUmF3Rm9udCYgZm9udCA9IHF0
R2x5cGhSdW4ucmF3Rm9udCgpOworICAgICAgICAgICAgY29uc3QgaW50IGhlaWdodCA9IGZvbnQu
YXNjZW50KCkgKyBmb250LmRlc2NlbnQoKSArIDE7CisgICAgICAgICAgICBjb25zdCBRUmVjdEYg
Ym91bmRpbmdSZWN0KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZm9udC5hc2NlbnQoKSArIGJhc2VM
aW5lT2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
c2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBib3VuZGlu
Z1JlY3QpOworICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAg
ICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihzaGFkb3dDb250ZXh0
LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4
dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpCisgICAgICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPmRyYXdHbHlwaFJ1bihwb2ludCwgcXRHbHlwaFJ1bik7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoc2hhZG93Q29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0
TW9kZVN0cm9rZSkKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0
aCh0ZXh0U3Ryb2tlUGF0aCwgc2hhZG93UGFpbnRlci0+cGVuKCkpOworICAgICAgICAgICAgICAg
IHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7CiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFNoYWRvd0JsdXI6Ok5vU2hhZG93
OgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjdHgtPnRleHRE
cmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpCi0gICAgICAgIHAtPnN0cm9rZVBhdGgodGV4
dFN0cm9rZVBhdGgsIHRleHRTdHJva2VQZW4pOworICAgIGlmIChjb250ZXh0LT50ZXh0RHJhd2lu
Z01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQorICAgICAgICBwYWludGVyLT5zdHJva2VQYXRoKHRl
eHRTdHJva2VQYXRoLCBzdHJva2VQZW5Gb3JDb250ZXh0KGNvbnRleHQpKTsKIAotICAgIGlmIChj
dHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgIFFQZW4gcHJl
dmlvdXNQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgcC0+c2V0UGVuKHRleHRGaWxsUGVuKTsKLSAg
ICAgICAgcC0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7Ci0g
ICAgICAgIHAtPnNldFBlbihwcmV2aW91c1Blbik7CisgICAgaWYgKGNvbnRleHQtPnRleHREcmF3
aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7CisgICAgICAgIFFQZW4gcHJldmlvdXNQZW4gPSBw
YWludGVyLT5wZW4oKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKGZpbGxQZW5Gb3JDb250ZXh0
KGNvbnRleHQpKTsKKyAgICAgICAgcGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBo
UnVuKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKHByZXZpb3VzUGVuKTsKICAgICB9CiB9CiAK
IHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAogewotICAgIGRyYXdUZXh0Q29tbW9uKGN0eCwgcnVuLCBwb2ludCwgZnJvbSwgdG8sIGZv
bnQoKSwgLyogaXNDb21wbGV4VGV4dCA9ICovdHJ1ZSk7CisgICAgU3RyaW5nIHNhbml0aXplZCA9
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwor
ICAgIGNvbnN0IFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXpl
ZCk7CisgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZyk7CisgICAgbGF5b3V0LnNldFJhd0Zv
bnQocmF3Rm9udCgpKTsKKyAgICBpbml0Rm9ybWF0Rm9yVGV4dExheW91dCgmbGF5b3V0KTsKKyAg
ICBRVGV4dExpbmUgbGluZSA9IHNldHVwTGF5b3V0KCZsYXlvdXQsIHJ1bik7CisgICAgY29uc3Qg
UVBvaW50RiBhZGp1c3RlZFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gbGluZS5hc2NlbnQo
KSk7CisKKyAgICBRTGlzdDxRR2x5cGhSdW4+IHJ1bnMgPSBsaW5lLmdseXBoUnVucyhmcm9tLCB0
byAtIGZyb20pOworICAgIFFfRk9SRUFDSChRR2x5cGhSdW4gZ2x5cGhSdW4sIHJ1bnMpCisgICAg
ICAgIGRyYXdRdEdseXBoUnVuKGN0eCwgZ2x5cGhSdW4sIGFkanVzdGVkUG9pbnQsIGxpbmUuYXNj
ZW50KCkpOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlwaE92ZXJm
bG93KikgY29uc3QKQEAgLTI3NSwxNyArMjAyLDE5IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKHJ1bi5sZW5ndGgoKSA9PSAxICYmIHRyZWF0
QXNTcGFjZShydW5bMF0pKQotICAgICAgICByZXR1cm4gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lk
dGgoc3BhY2UpICsgcnVuLmV4cGFuc2lvbigpOwotCisgICAgICAgIHJldHVybiBzcGFjZVdpZHRo
KCkgKyBydW4uZXhwYW5zaW9uKCk7CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1h
bGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwogICAgIFFTdHJpbmcg
c3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CiAKLSAgICBpbnQgdyA9
IFFGb250TWV0cmljcyhmb250KCkpLndpZHRoKHN0cmluZyk7Ci0gICAgLy8gV2ViS2l0IGV4cGVj
dHMgdXMgdG8gaWdub3JlIHdvcmQgc3BhY2luZyBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIChhcyBv
cHBvc2VkIHRvIHdoYXQgUXQgZG9lcykKLSAgICBpZiAodHJlYXRBc1NwYWNlKHJ1blswXSkpCi0g
ICAgICAgIHcgLT0gbV93b3JkU3BhY2luZzsKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5n
KTsKKyAgICBsYXlvdXQuc2V0UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRGb3JtYXRGb3JU
ZXh0TGF5b3V0KCZsYXlvdXQpOworICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxh
eW91dCwgcnVuKTsKKyAgICBmbG9hdCB4MSA9IGxpbmUuY3Vyc29yVG9YKDApOworICAgIGZsb2F0
IHgyID0gbGluZS5jdXJzb3JUb1gocnVuLmxlbmd0aCgpKTsKKyAgICBjb25zdCBpbnQgd2lkdGgg
PSBxQWJzKHgyIC0geDEpOwogCi0gICAgcmV0dXJuIHcgKyBydW4uZXhwYW5zaW9uKCk7CisgICAg
cmV0dXJuIHdpZHRoICsgcnVuLmV4cGFuc2lvbigpOwogfQogCiBpbnQgRm9udDo6b2Zmc2V0Rm9y
UG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9u
LCBib29sKSBjb25zdApAQCAtMjkzLDcgKzIyMiw5IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3Np
dGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRpb24sIGJv
CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFj
dGVycygpLCBydW4ubGVuZ3RoKCkpOwogICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFX
aXRob3V0UmVmKHNhbml0aXplZCk7CiAKLSAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nLCBm
b250KCkpOworICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcpOworICAgIGxheW91dC5zZXRS
YXdGb250KHJhd0ZvbnQoKSk7CisgICAgaW5pdEZvcm1hdEZvclRleHRMYXlvdXQoJmxheW91dCk7
CiAgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwogICAgIHJl
dHVybiBsaW5lLnhUb0N1cnNvcihwb3NpdGlvbik7CiB9CkBAIC0zMDMsMTcgKzIzNCw0MCBAQCBG
bG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRmxvYXRQb2ludAogICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3Jt
YWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5n
IHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCi0gICAgUVRleHRM
YXlvdXQgbGF5b3V0KHN0cmluZywgZm9udCgpKTsKKyAgICBRVGV4dExheW91dCBsYXlvdXQoc3Ry
aW5nKTsKKyAgICBsYXlvdXQuc2V0UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRGb3JtYXRG
b3JUZXh0TGF5b3V0KCZsYXlvdXQpOwogICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQo
JmxheW91dCwgcnVuKTsKIAogICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJvbSk7CiAg
ICAgZmxvYXQgeDIgPSBsaW5lLmN1cnNvclRvWCh0byk7CiAgICAgaWYgKHgyIDwgeDEpCiAgICAg
ICAgIHFTd2FwKHgxLCB4Mik7CisgICAgLy8gVGhpcyBpcyBkdWUgdG8gdGhlIHdheSBRUGFpbnRl
ciBkcmF3cyByZWN0YW5nbGVzLiBJbiBvcmRlciBmb3IgY29tcGxleCB0ZXh0IHNlbGVjdGlvbnMg
bm90IHRvIGJlCisgICAgLy8gYnJva2VuIHdpdGggYmxhbmtzLCB3ZSBuZWVkIHRvIG1vdmUgdGhl
IGxlZnQgc2lkZSBiYWNrIGEgYml0LgorICAgIHgxIC09IDE7CiAKICAgICByZXR1cm4gRmxvYXRS
ZWN0KHB0LngoKSArIHgxLCBwdC55KCksIHgyIC0geDEsIGgpOwogfQogCit2b2lkIEZvbnQ6Omlu
aXRGb3JtYXRGb3JUZXh0TGF5b3V0KFFUZXh0TGF5b3V0KiBsYXlvdXQpIGNvbnN0Cit7CisgICAg
UVRleHRMYXlvdXQ6OkZvcm1hdFJhbmdlIHJhbmdlOworICAgIHJhbmdlLnN0YXJ0ID0gMDsKKyAg
ICByYW5nZS5sZW5ndGggPSBsYXlvdXQtPnRleHQoKS5sZW5ndGgoKTsKKyAgICBpZiAobV93b3Jk
U3BhY2luZykKKyAgICAgICAgcmFuZ2UuZm9ybWF0LnNldEZvbnRXb3JkU3BhY2luZyhtX3dvcmRT
cGFjaW5nKTsKKyAgICBpZiAobV9sZXR0ZXJTcGFjaW5nKQorICAgICAgICByYW5nZS5mb3JtYXQu
c2V0Rm9udExldHRlclNwYWNpbmcobV9sZXR0ZXJTcGFjaW5nKTsKKyAgICBpZiAodHlwZXNldHRp
bmdGZWF0dXJlcygpICYgS2VybmluZykKKyAgICAgICAgcmFuZ2UuZm9ybWF0LnNldEZvbnRLZXJu
aW5nKHRydWUpOworICAgIGlmIChpc1NtYWxsQ2FwcygpKQorICAgICAgICByYW5nZS5mb3JtYXQu
c2V0Rm9udENhcGl0YWxpemF0aW9uKFFGb250OjpTbWFsbENhcHMpOworCisgICAgaWYgKHJhbmdl
LmZvcm1hdC5wcm9wZXJ0eUNvdW50KCkpCisgICAgICAgIGxheW91dC0+c2V0QWRkaXRpb25hbEZv
cm1hdHMoUUxpc3Q8UVRleHRMYXlvdXQ6OkZvcm1hdFJhbmdlPigpIDw8IHJhbmdlKTsKK30KKwog
Ym9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQogewogICAg
IHJldHVybiBmYWxzZTsKQEAgLTMyNCw3ICsyNzgsNiBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25z
dAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLSNpZiBIQVZFKFFSQVdGT05UKQogdm9pZCBG
b250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBp
ZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMzMzLDkgKzI4Niw2IEBAIHZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwKICAgICBib29sIHNob3VsZEZpbGwgPSBjb250ZXh0LT50ZXh0RHJh
d2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbDsKICAgICBib29sIHNob3VsZFN0cm9rZSA9IGNvbnRl
eHQtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2U7CiAKLSAgICAvLyBTdHJva2lu
ZyB0ZXh0IHNob3VsZCBhbHdheXMgdGFrZSB0aGUgY29tcGxleCBwYXRoLgotICAgIEFTU0VSVCgh
c2hvdWxkU3Ryb2tlKTsKLQogICAgIGlmICghc2hvdWxkRmlsbCAmJiAhc2hvdWxkU3Ryb2tlKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTM0NCw2ICsyOTQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlw
aHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEsCiAKICAgICBnbHlwaEluZGV4ZXMucmVzZXJ2ZShudW1HbHlwaHMpOwogICAgIHBvc2l0aW9u
cy5yZXNlcnZlKG51bUdseXBocyk7CisgICAgY29uc3QgUVJhd0ZvbnQmIGZvbnQoZm9udERhdGEt
PmdldFF0UmF3Rm9udCgpKTsKIAogICAgIGZsb2F0IHdpZHRoID0gMDsKIApAQCAtMzU3LDE2NiAr
MzA4LDM5IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKICAgICAgICAgd2lkdGggKz0gYWR2YW5j
ZTsKICAgICB9CiAKLSAgICBRUmF3Rm9udCByYXdGb250KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5yYXdGb250KCkpOwotCiAgICAgUUdseXBoUnVuIHF0R2x5cGhzOwogICAgIHF0R2x5cGhzLnNl
dEdseXBoSW5kZXhlcyhnbHlwaEluZGV4ZXMpOwogICAgIHF0R2x5cGhzLnNldFBvc2l0aW9ucyhw
b3NpdGlvbnMpOwotICAgIHF0R2x5cGhzLnNldFJhd0ZvbnQocmF3Rm9udCk7Ci0KLSAgICBRUGFp
bnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgU2hhZG93
Qmx1ciogc2hhZG93ID0gY29udGV4dC0+c2hhZG93Qmx1cigpOwotICAgIHN3aXRjaCAoc2hhZG93
LT50eXBlKCkpIHsKLSAgICBjYXNlIFNoYWRvd0JsdXI6OlNvbGlkU2hhZG93OiB7Ci0gICAgICAg
IFFQZW4gcHJldmlvdXNQZW4gPSBwYWludGVyLT5wZW4oKTsKLSAgICAgICAgcGFpbnRlci0+c2V0
UGVuKGNvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwotICAgICAgICBjb25zdCBRUG9pbnRG
IHNoYWRvd09mZnNldChjb250ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjb250
ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7Ci0gICAgICAgIHBhaW50ZXItPnRy
YW5zbGF0ZShzaGFkb3dPZmZzZXQpOwotICAgICAgICBwYWludGVyLT5kcmF3R2x5cGhSdW4ocG9p
bnQsIHF0R2x5cGhzKTsKLSAgICAgICAgcGFpbnRlci0+dHJhbnNsYXRlKC1zaGFkb3dPZmZzZXQp
OwotICAgICAgICBwYWludGVyLT5zZXRQZW4ocHJldmlvdXNQZW4pOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93OiB7Ci0gICAgICAgIHFyZWFs
IGhlaWdodCA9IHJhd0ZvbnQuYXNjZW50KCkgKyByYXdGb250LmRlc2NlbnQoKSArIDE7Ci0gICAg
ICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocG9pbnQueCgpLCBwb2ludC55KCkgLSByYXdGb250LmFz
Y2VudCgpLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dD
b250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGNvbnRleHQsIGJvdW5kaW5nUmVjdCk7
Ci0gICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hh
ZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGNvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwot
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBocyk7
Ci0gICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGNvbnRleHQpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFNoYWRvd0JsdXI6Ok5vU2hhZG93Ogot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUVBlbiBwcmV2aW91c1BlbiA9IHBhaW50
ZXItPnBlbigpOwotICAgIHBhaW50ZXItPnNldFBlbihmaWxsUGVuRm9yQ29udGV4dChjb250ZXh0
KSk7Ci0gICAgcGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBocyk7Ci0gICAgcGFp
bnRlci0+c2V0UGVuKHByZXZpb3VzUGVuKTsKLX0KLQotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91
bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0j
ZWxzZSAvLyAhSEFWRShRUkFXRk9OVCkKLQotdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFw
aGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBkcmF3VGV4dENvbW1vbihjdHgs
IHJ1biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCksIC8qIGlzQ29tcGxleFRleHQgPSAqL2ZhbHNl
KTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdAotewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVu
LmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21S
YXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotCi0gICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQo
KSk7Ci0gICAgZmxvYXQgZGVsdGEgPSBwb3NpdGlvbjsKLSAgICBpbnQgY3VyUG9zID0gMDsKLSAg
ICBkbyB7Ci0gICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IGZtLndpZHRoKHN0cmluZ1tjdXJQb3Nd
KTsKLSAgICAgICAgZGVsdGEgLT0gY2hhcldpZHRoOwotICAgICAgICBpZiAoaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIHsKLSAgICAgICAgICAgIGlmIChkZWx0YSArIGNoYXJXaWR0aCAvIDIgPD0gMCkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChkZWx0YSArIGNoYXJXaWR0aCA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfSB3aGlsZSAoKytjdXJQb3MgPCBzdHJpbmcuc2l6ZSgpKTsKKyAgICBxdEdseXBo
cy5zZXRSYXdGb250KGZvbnQpOwogCi0gICAgcmV0dXJuIGN1clBvczsKKyAgICBkcmF3UXRHbHlw
aFJ1bihjb250ZXh0LCBxdEdseXBocywgcG9pbnQsIC8qIGJhc2VsaW5lT2Zmc2V0ID0gKi8wKTsK
IH0KIAogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25z
dAotewotICAgIGlmICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcnVuLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNo
YXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdE
YXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotCi0gICAgaW50IHcgPSBRRm9udE1ldHJpY3MoZm9u
dCgpKS53aWR0aChzdHJpbmcsIC0xLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwotCi0gICAgLy8g
V2ViS2l0IGV4cGVjdHMgdXMgdG8gaWdub3JlIHdvcmQgc3BhY2luZyBvbiB0aGUgZmlyc3QgY2hh
cmFjdGVyIChhcyBvcHBvc2VkIHRvIHdoYXQgUXQgZG9lcykKLSAgICBpZiAodHJlYXRBc1NwYWNl
KHJ1blswXSkpCi0gICAgICAgIHcgLT0gbV93b3JkU3BhY2luZzsKLQotICAgIHJldHVybiB3ICsg
cnVuLmV4cGFuc2lvbigpOwotfQotCi0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBpbnQg
aCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9u
dDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7Ci0gICAg
UVN0cmluZyB3aG9sZVRleHQgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKLSAg
ICBRU3RyaW5nIHNlbGVjdGVkVGV4dCA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQs
IGZyb20sIHFNaW4odG8gLSBmcm9tLCB3aG9sZVRleHQubGVuZ3RoKCkgLSBmcm9tKSk7Ci0KLSAg
ICBpbnQgc3RhcnRYID0gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgod2hvbGVUZXh0LCBmcm9t
LCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwotICAgIGludCB3aWR0aCA9IFFGb250TWV0cmljcyhm
b250KCkpLndpZHRoKHNlbGVjdGVkVGV4dCwgLTEsIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7Ci0K
LSAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHN0YXJ0WCwgcHQueSgpLCB3aWR0aCwgaCk7
Ci19Ci0KIGJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQo
KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250OjpwcmltYXJ5Rm9udEhhc0ds
eXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2VudChjb25z
dCBBdG9taWNTdHJpbmcmKSBjb25zdAorUUZvbnQgRm9udDo6c3ludGhldGljRm9udCgpIGNvbnN0
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IEZvbnQ6
OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgRm9udDo6ZW1waGFzaXNN
YXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0Zv
clNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVu
JiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQ
b2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Ci17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSNlbmRpZiAvLyBIQVZFKFFSQVdGT05UKQotCi1R
Rm9udCBGb250Ojpmb250KCkgY29uc3QKLXsKLSAgICBRRm9udCBmID0gcHJpbWFyeUZvbnQoKS0+
Z2V0UXRGb250KCk7Ci0gICAgaWYgKG1fbGV0dGVyU3BhY2luZyAhPSAwKQorICAgIFFSYXdGb250
IHJhd0ZvbnQocHJpbWFyeUZvbnQoKS0+Z2V0UXRSYXdGb250KCkpOworICAgIFFGb250IGYocmF3
Rm9udC5mYW1pbHlOYW1lKCkpOworICAgIGlmIChyYXdGb250LnBpeGVsU2l6ZSgpKQorICAgICAg
ICBmLnNldFBpeGVsU2l6ZShyYXdGb250LnBpeGVsU2l6ZSgpKTsKKyAgICBmLnNldFdlaWdodChy
YXdGb250LndlaWdodCgpKTsKKyAgICBmLnNldFN0eWxlKHJhd0ZvbnQuc3R5bGUoKSk7CisgICAg
aWYgKG1fbGV0dGVyU3BhY2luZykKICAgICAgICAgZi5zZXRMZXR0ZXJTcGFjaW5nKFFGb250OjpB
YnNvbHV0ZVNwYWNpbmcsIG1fbGV0dGVyU3BhY2luZyk7Ci0gICAgaWYgKG1fd29yZFNwYWNpbmcg
IT0gMCkKKyAgICBpZiAobV93b3JkU3BhY2luZykKICAgICAgICAgZi5zZXRXb3JkU3BhY2luZyht
X3dvcmRTcGFjaW5nKTsKICAgICByZXR1cm4gZjsKIH0KIAogCitRUmF3Rm9udCBGb250OjpyYXdG
b250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+Z2V0UXRSYXdGb250KCk7
CiB9CiAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRRdDQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
NC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjAyMWY5YzY0MjQ4ZDYxMDQ2ZTNjODA5MDVmNTJiMzI2N2IzOWNh
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRRdDQuY3BwCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRGYWxs
YmFja0xpc3QuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisj
aW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKworI2luY2x1ZGUg
PFFCcnVzaD4KKyNpbmNsdWRlIDxRRm9udEluZm8+CisjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgor
I2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KKyNpbmNsdWRlIDxR
UGVuPgorI2luY2x1ZGUgPFFUZXh0TGF5b3V0PgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1
ZGUgPHFhbGdvcml0aG1zLmg+CisjaW5jbHVkZSA8cWRlYnVnLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgUVN0cmluZyBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydCA9IDAsIGludCBsZW4gPSAtMSkKK3sKKyAgICBp
ZiAobGVuIDwgMCkKKyAgICAgICAgbGVuID0gc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQ7CisgICAg
UV9BU1NFUlQoc3RhcnQgKyBsZW4gPD0gc3RyaW5nLmxlbmd0aCgpKTsKKworICAgIC8vIFdlIGRv
bid0IGRldGFjaC4gVGhpcyBhc3N1bWVzIHRoZSBXZWJDb3JlIHN0cmluZyBkYXRhIHdpbGwgc3Rh
eSB2YWxpZCBmb3IgdGhlCisgICAgLy8gbGlmZXRpbWUgb2YgdGhlIFFTdHJpbmcgd2UgcGFzcyBi
YWNrLCBzaW5jZSB3ZSBkb24ndCByZWYgdGhlIFdlYkNvcmUgc3RyaW5nLgorICAgIHJldHVybiBR
U3RyaW5nOjpmcm9tUmF3RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oc3RyaW5n
LmNoYXJhY3RlcnMoKSArIHN0YXJ0KSwgbGVuKTsKK30KKworc3RhdGljIFFUZXh0TGluZSBzZXR1
cExheW91dChRVGV4dExheW91dCogbGF5b3V0LCBjb25zdCBUZXh0UnVuJiBzdHlsZSkKK3sKKyAg
ICBpbnQgZmxhZ3MgPSBzdHlsZS5ydGwoKSA/IFF0OjpUZXh0Rm9yY2VSaWdodFRvTGVmdCA6IFF0
OjpUZXh0Rm9yY2VMZWZ0VG9SaWdodDsKKyAgICBpZiAoc3R5bGUuZXhwYW5zaW9uKCkpCisgICAg
ICAgIGZsYWdzIHw9IFF0OjpUZXh0SnVzdGlmaWNhdGlvbkZvcmNlZDsKKyAgICBsYXlvdXQtPnNl
dEZsYWdzKGZsYWdzKTsKKyAgICBsYXlvdXQtPmJlZ2luTGF5b3V0KCk7CisgICAgUVRleHRMaW5l
IGxpbmUgPSBsYXlvdXQtPmNyZWF0ZUxpbmUoKTsKKyAgICBsaW5lLnNldExpbmVXaWR0aChJTlRf
TUFYIC8gMjU2KTsKKyAgICBpZiAoc3R5bGUuZXhwYW5zaW9uKCkpCisgICAgICAgIGxpbmUuc2V0
TGluZVdpZHRoKGxpbmUubmF0dXJhbFRleHRXaWR0aCgpICsgc3R5bGUuZXhwYW5zaW9uKCkpOwor
ICAgIGxheW91dC0+ZW5kTGF5b3V0KCk7CisgICAgcmV0dXJuIGxpbmU7Cit9CisKK3N0YXRpYyBR
UGVuIGZpbGxQZW5Gb3JDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4KQoreworICAgIGlmIChj
dHgtPmZpbGxHcmFkaWVudCgpKSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqY3R4LT5maWxsR3Jh
ZGllbnQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3Jt
KGN0eC0+ZmlsbEdyYWRpZW50KCktPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAg
IHJldHVybiBRUGVuKGJydXNoLCAwKTsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5maWxsUGF0dGVy
bigpKSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CisgICAgICAgIHJldHVybiBR
UGVuKFFCcnVzaChjdHgtPmZpbGxQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZp
bmUpKSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIFFQZW4oUUNvbG9yKGN0eC0+ZmlsbENvbG9y
KCkpKTsKK30KKworc3RhdGljIFFQZW4gc3Ryb2tlUGVuRm9yQ29udGV4dChHcmFwaGljc0NvbnRl
eHQqIGN0eCkKK3sKKyAgICBpZiAoY3R4LT5zdHJva2VHcmFkaWVudCgpKSB7CisgICAgICAgIFFC
cnVzaCBicnVzaCgqY3R4LT5zdHJva2VHcmFkaWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpOwor
ICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0oY3R4LT5zdHJva2VHcmFkaWVudCgpLT5ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICByZXR1cm4gUVBlbihicnVzaCwgY3R4LT5zdHJv
a2VUaGlja25lc3MoKSk7CisgICAgfQorCisgICAgaWYgKGN0eC0+c3Ryb2tlUGF0dGVybigpKSB7
CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CisgICAgICAgIFFCcnVzaCBicnVzaChj
dHgtPnN0cm9rZVBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpOworICAg
ICAgICByZXR1cm4gUVBlbihicnVzaCwgY3R4LT5zdHJva2VUaGlja25lc3MoKSk7CisgICAgfQor
CisgICAgcmV0dXJuIFFQZW4oUUNvbG9yKGN0eC0+c3Ryb2tlQ29sb3IoKSksIGN0eC0+c3Ryb2tl
VGhpY2tuZXNzKCkpOworfQorCitzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0Nv
bnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bywgY29uc3QgUUZvbnQmIGZvbnQsIGJvb2wgaXNDb21wbGV4VGV4dCkK
K3sKKyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKKworICAgIFFQ
YWludGVyKiBwID0gY3R4LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIFFQZW4gdGV4dEZpbGxQ
ZW47CisgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpCisgICAg
ICAgIHRleHRGaWxsUGVuID0gZmlsbFBlbkZvckNvbnRleHQoY3R4KTsKKworICAgIFFQZW4gdGV4
dFN0cm9rZVBlbjsKKyAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ry
b2tlKQorICAgICAgICB0ZXh0U3Ryb2tlUGVuID0gc3Ryb2tlUGVuRm9yQ29udGV4dChjdHgpOwor
CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFj
dGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFX
aXRob3V0UmVmKHNhbml0aXplZCk7CisgICAgUVBvaW50RiBwdChwb2ludC54KCksIHBvaW50Lnko
KSk7CisKKyAgICBpZiAoZnJvbSA+IDAgfHwgdG8gPCBydW4ubGVuZ3RoKCkpIHsKKyAgICAgICAg
aWYgKGlzQ29tcGxleFRleHQpIHsKKyAgICAgICAgICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJp
bmcsIGZvbnQpOworICAgICAgICAgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5
b3V0LCBydW4pOworICAgICAgICAgICAgZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWChmcm9tKTsK
KyAgICAgICAgICAgIGZsb2F0IHgyID0gbGluZS5jdXJzb3JUb1godG8pOworICAgICAgICAgICAg
aWYgKHgyIDwgeDEpCisgICAgICAgICAgICAgICAgcVN3YXAoeDEsIHgyKTsKKworICAgICAgICAg
ICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQpOworICAgICAgICAgICAgaW50IGFzY2VudCA9IGZtLmFz
Y2VudCgpOworICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwg
cG9pbnQueSgpIC0gYXNjZW50LCB4MiAtIHgxLCBmbS5oZWlnaHQoKSk7CisgICAgICAgICAgICBR
UmVjdEYgY2xpcCA9IGJvdW5kaW5nUmVjdDsKKworICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4
U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50
eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBR
UG9pbnRGIHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0
eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHFyZWFs
IGR4MSA9IDAsIGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7CisgICAgICAgICAgICAgICAgaWYg
KHNoYWRvd09mZnNldC54KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dP
ZmZzZXQueCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZHgx
ID0gLXNoYWRvd09mZnNldC54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC55
KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeTIgPSBzaGFkb3dPZmZzZXQueSgpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZHkxID0gLXNoYWRvd09mZnNl
dC55KCk7CisgICAgICAgICAgICAgICAgLy8gZXhwYW5kIHRoZSBjbGlwIHJlY3QgdG8gaW5jbHVk
ZSB0aGUgdGV4dCBzaGFkb3cgYXMgd2VsbAorICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGJs
dXJEaXN0YW5jZSA9IGN0eC0+c3RhdGUoKS5zaGFkb3dCbHVyOworICAgICAgICAgICAgICAgIGNs
aXAuYWRqdXN0KGR4MSwgZHgyLCBkeTEsIGR5Mik7CisgICAgICAgICAgICAgICAgY2xpcC5hZGp1
c3QoLWJsdXJEaXN0YW5jZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFu
Y2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcC0+c2F2ZSgpOworICAgICAgICAgICAg
cC0+c2V0Q2xpcFJlY3QoY2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOworICAgICAg
ICAgICAgcHQuc2V0WShwdC55KCkgLSBhc2NlbnQpOworCisgICAgICAgICAgICBpZiAoY3R4U2hh
ZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBT
aGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdworICAgICAg
ICAgICAgICAgICAgICAmJiAoIWN0eFNoYWRvdy0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8
fCBjdHgtPmdldENUTSgpLmlzSWRlbnRpdHkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcC0+
c2F2ZSgpOworICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRv
d0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5z
dGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0Lmhl
aWdodCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7CisgICAgICAg
ICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFk
b3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUVBhaW50
ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXks
IHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcC0+c2V0UGVuKHRleHRGaWxsUGVuKTsKKyAgICAgICAgICAgIGxpbmUuZHJhdyhw
LCBwdCk7CisgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaW50IHNraXBXaWR0aCA9IFFGb250TWV0cmljcyhmb250KS53aWR0
aChzdHJpbmcsIGZyb20sIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7CisgICAgICAgIHB0LnNldFgo
cHQueCgpICsgc2tpcFdpZHRoKTsKKyAgICAgICAgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0
UmVmKHNhbml0aXplZCwgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICB9CisKKyAgICBwLT5zZXRGb250
KGZvbnQpOworCisgICAgaW50IGZsYWdzID0gcnVuLnJ0bCgpID8gUXQ6OlRleHRGb3JjZVJpZ2h0
VG9MZWZ0IDogUXQ6OlRleHRGb3JjZUxlZnRUb1JpZ2h0OworICAgIGlmICghaXNDb21wbGV4VGV4
dCAmJiAhKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkpCisgICAgICAg
IGZsYWdzIHw9IFF0OjpUZXh0QnlwYXNzU2hhcGluZzsKKworICAgIFFQYWludGVyUGF0aCB0ZXh0
U3Ryb2tlUGF0aDsKKyAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ry
b2tlKQorICAgICAgICB0ZXh0U3Ryb2tlUGF0aC5hZGRUZXh0KHB0LCBmb250LCBzdHJpbmcpOwor
CisgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgaWYg
KGN0eC0+aGFzU2hhZG93KCkgJiYgY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9T
aGFkb3cpIHsKKyAgICAgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZp
bGwpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpC
bHVyU2hhZG93KSB7CisgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOworICAgICAgICAgICAgICAg
IHAtPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgIHAt
PnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4
LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIHAtPmRy
YXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5zaW9uKCkpOworICAgICAgICAgICAg
ICAgIHAtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
UUZvbnRNZXRyaWNzIGZtKGZvbnQpOworICAgICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1Jl
Y3QocHQueCgpLCBwb2ludC55KCkgLSBmbS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwg
ZmxhZ3MpLCBmbS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBz
aGFkb3dDb250ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdS
ZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAg
ICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJy
ZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KKyAgICAgICAgICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOworICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsK
KyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0cmluZywg
ZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+
ZW5kU2hhZG93TGF5ZXIoY3R4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tl
KSB7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1
clNoYWRvdykgeworICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KGN0
eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKHNoYWRvd09mZnNldCk7
CisgICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgt
PnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNo
YWRvd09mZnNldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFFGb250
TWV0cmljcyBmbShmb250KTsKKyAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHB0
LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywgLTEsIGZsYWdz
KSwgZm0uaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93
Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7
CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFu
eXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCisgICAgICAgICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0
YXRlKCkuc2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRT
aGFkb3dMYXllcihjdHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVT
dHJva2UpCisgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIHRleHRTdHJva2VQ
ZW4pOworCisgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHsK
KyAgICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHAtPnBlbigpOworICAgICAgICBwLT5zZXRQZW4o
dGV4dEZpbGxQZW4pOworICAgICAgICBwLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVu
LmV4cGFuc2lvbigpKTsKKyAgICAgICAgcC0+c2V0UGVuKHByZXZpb3VzUGVuKTsKKyAgICB9Cit9
CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAoreworICAgIGRyYXdUZXh0Q29tbW9uKGN0eCwgcnVuLCBwb2ludCwgZnJvbSwgdG8s
IGZvbnQoKSwgLyogaXNDb21wbGV4VGV4dCA9ICovdHJ1ZSk7Cit9CisKK2Zsb2F0IEZvbnQ6OmZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAoreworICAgIGlmICghcHJp
bWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmICghcnVuLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChydW4u
bGVuZ3RoKCkgPT0gMSAmJiB0cmVhdEFzU3BhY2UocnVuWzBdKSkKKyAgICAgICAgcmV0dXJuIFFG
b250TWV0cmljcyhmb250KCkpLndpZHRoKHNwYWNlKSArIHJ1bi5leHBhbnNpb24oKTsKKworICAg
IFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMo
KSwgcnVuLmxlbmd0aCgpKTsKKyAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91
dFJlZihzYW5pdGl6ZWQpOworCisgICAgaW50IHcgPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0
aChzdHJpbmcpOworICAgIC8vIFdlYktpdCBleHBlY3RzIHVzIHRvIGlnbm9yZSB3b3JkIHNwYWNp
bmcgb24gdGhlIGZpcnN0IGNoYXJhY3RlciAoYXMgb3Bwb3NlZCB0byB3aGF0IFF0IGRvZXMpCisg
ICAgaWYgKHRyZWF0QXNTcGFjZShydW5bMF0pKQorICAgICAgICB3IC09IG1fd29yZFNwYWNpbmc7
CisKKyAgICByZXR1cm4gdyArIHJ1bi5leHBhbnNpb24oKTsKK30KKworaW50IEZvbnQ6Om9mZnNl
dEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCBwb3Np
dGlvbiwgYm9vbCkgY29uc3QKK3sKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFs
aXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgUVN0cmluZyBz
dHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKKworICAgIFFUZXh0TGF5
b3V0IGxheW91dChzdHJpbmcsIGZvbnQoKSk7CisgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExh
eW91dCgmbGF5b3V0LCBydW4pOworICAgIHJldHVybiBsaW5lLnhUb0N1cnNvcihwb3NpdGlvbik7
Cit9CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwdCwgaW50IGgsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0Cit7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNl
cyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3RyaW5nID0g
ZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisKKyAgICBRVGV4dExheW91dCBsYXlv
dXQoc3RyaW5nLCBmb250KCkpOworICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQoJmxh
eW91dCwgcnVuKTsKKworICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJvbSk7CisgICAg
ZmxvYXQgeDIgPSBsaW5lLmN1cnNvclRvWCh0byk7CisgICAgaWYgKHgyIDwgeDEpCisgICAgICAg
IHFTd2FwKHgxLCB4Mik7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBwdC55
KCksIHgyIC0geDEsIGgpOworfQorCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNG
b3JDb21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZvbnQ6OmRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0
ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFy
ayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQg
LyogdG8gKi8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGb250
OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAg
ICBkcmF3VGV4dENvbW1vbihjdHgsIHJ1biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCksIC8qIGlz
Q29tcGxleFRleHQgPSAqL2ZhbHNlKTsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9u
Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250
Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAgICBR
U3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOworCisgICAg
UUZvbnRNZXRyaWNzIGZtKGZvbnQoKSk7CisgICAgZmxvYXQgZGVsdGEgPSBwb3NpdGlvbjsKKyAg
ICBpbnQgY3VyUG9zID0gMDsKKyAgICBkbyB7CisgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IGZt
LndpZHRoKHN0cmluZ1tjdXJQb3NdKTsKKyAgICAgICAgZGVsdGEgLT0gY2hhcldpZHRoOworICAg
ICAgICBpZiAoaW5jbHVkZVBhcnRpYWxHbHlwaHMpIHsKKyAgICAgICAgICAgIGlmIChkZWx0YSAr
IGNoYXJXaWR0aCAvIDIgPD0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChkZWx0YSArIGNoYXJXaWR0aCA8PSAwKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoKytjdXJQb3MgPCBzdHJpbmcu
c2l6ZSgpKTsKKworICAgIHJldHVybiBjdXJQb3M7Cit9CisKKworZmxvYXQgRm9udDo6ZmxvYXRX
aWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBHbHlwaEJ1ZmZlciogZ2x5cGhC
dWZmZXIsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK3sKKyAgICBpZiAoIXByaW1hcnlGb250
KCktPnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
IXJ1bi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgc2FuaXRpemVk
ID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7
CisgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsK
KworICAgIGludCB3ID0gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgoc3RyaW5nLCAtMSwgUXQ6
OlRleHRCeXBhc3NTaGFwaW5nKTsKKworICAgIC8vIFdlYktpdCBleHBlY3RzIHVzIHRvIGlnbm9y
ZSB3b3JkIHNwYWNpbmcgb24gdGhlIGZpcnN0IGNoYXJhY3RlciAoYXMgb3Bwb3NlZCB0byB3aGF0
IFF0IGRvZXMpCisgICAgaWYgKHRyZWF0QXNTcGFjZShydW5bMF0pKQorICAgICAgICB3IC09IG1f
d29yZFNwYWNpbmc7CisKKyAgICByZXR1cm4gdyArIHJ1bi5leHBhbnNpb24oKTsKK30KKworCitG
bG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiBwdCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
Cit7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hh
cmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgd2hvbGVUZXh0ID0gZnJvbVJh
d0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisgICAgUVN0cmluZyBzZWxlY3RlZFRleHQgPSBm
cm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkLCBmcm9tLCBxTWluKHRvIC0gZnJvbSwgd2hv
bGVUZXh0Lmxlbmd0aCgpIC0gZnJvbSkpOworCisgICAgaW50IHN0YXJ0WCA9IFFGb250TWV0cmlj
cyhmb250KCkpLndpZHRoKHdob2xlVGV4dCwgZnJvbSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsK
KyAgICBpbnQgd2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChzZWxlY3RlZFRleHQs
IC0xLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOworCisgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54
KCkgKyBzdGFydFgsIHB0LnkoKSwgd2lkdGgsIGgpOworfQorCitib29sIEZvbnQ6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgRm9udDo6cHJpbWFyeUZvbnRIYXNHbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
dCBGb250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgRm9udDo6ZW1w
aGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBGb250OjplbXBoYXNpc01hcmtI
ZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8q
IHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50
JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitRRm9udCBGb250Ojpmb250KCkgY29uc3QKK3sKKyAg
ICBRRm9udCBmID0gcHJpbWFyeUZvbnQoKS0+Z2V0UXRGb250KCk7CisgICAgaWYgKG1fbGV0dGVy
U3BhY2luZykKKyAgICAgICAgZi5zZXRMZXR0ZXJTcGFjaW5nKFFGb250OjpBYnNvbHV0ZVNwYWNp
bmcsIG1fbGV0dGVyU3BhY2luZyk7CisgICAgaWYgKG1fd29yZFNwYWNpbmcpCisgICAgICAgIGYu
c2V0V29yZFNwYWNpbmcobV93b3JkU3BhY2luZyk7CisgICAgcmV0dXJuIGY7Cit9CisKK1FGb250
IEZvbnQ6OnN5bnRoZXRpY0ZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBmb250KCk7Cit9CisK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2lt
cGxlRm9udERhdGFRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9T
aW1wbGVGb250RGF0YVF0LmNwcAppbmRleCBlOTViOGM1ZWEyMjQyZGJjYWFjZjI2ZGQ5OWViYzRk
MzQ4YTc3ZDNjLi43NTYwNWViNzdiZjI4N2E1N2Y0OThjNTI5ODRjMjA4YmNmMmY3NzEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0
YVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVG
b250RGF0YVF0LmNwcApAQCAtMTYzLDcgKzE2Myw4IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtSW5pdCgpCiAgICAgZmxvYXQgbGluZUdhcCA9IGxpbmVTcGFjaW5nIC0gYXNjZW50IC0g
ZGVzY2VudDsKIAogICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOworICAgIC8vIFVubGlrZSBRRm9udE1ldHJp
Y3MsIFFSYXdGb250IGNhbiByZXR1cm4gbmVnYXRpdmUgZGVjZW50IHZhbHVlcy4KKyAgICBtX2Zv
bnRNZXRyaWNzLnNldERlc2NlbnQocUFicyhkZXNjZW50KSk7CiAgICAgbV9mb250TWV0cmljcy5z
ZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CiAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0
KHhIZWlnaHQpOwogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAppbmRleCA3
NTg1OWQ4YjQ5Njg3YzRlNjNjOTMzZThmNGYwN2NhMjBiZjg4ZDdhLi4yODhmMTgxZGM2NmJlZDVl
MWE2Yzc4ODU3NTEwMjU2ZGUzOWVkYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgUVJlY3QgUmVu
ZGVyVGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJl
Y3QpIGNvbnN0CiB2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHls
ZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0CiB7CiAgICAgUVNpemUgc2l6ZSgwLCAw
KTsKLSAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkp
OworICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLnN5bnRoZXRp
Y0ZvbnQoKSk7CiAgICAgUVN0eWxlKiBzdHlsZSA9IHFTdHlsZSgpOwogCiAgICAgc3dpdGNoIChy
ZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXQuY3BwCmluZGV4IDE4ZGYyOTBkYjU4NGFlNWE0YmI4ZGE1NDNmZTgwMTg4
NjM1ZDgzMjYuLjA0NTZmOGViYzQ0ZTkzY2ExNjE2YzczNTIxODBmZTk5MWNkMzdkYmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCkBAIC04NTUsNyAr
ODU1LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnMKICAgICAgICAgc3RyaW5nID0gZmlsZUJ1
dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKICAgICBlbHNlIGlmIChmaWxlbmFtZXMuc2l6ZSgp
ID09IDEpIHsKICAgICAgICAgU3RyaW5nIGZuYW1lID0gZmlsZW5hbWVzWzBdOwotICAgICAgICBR
Rm9udE1ldHJpY3MgZm0oZm9udC5mb250KCkpOworICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9u
dC5zeW50aGV0aWNGb250KCkpOwogICAgICAgICBzdHJpbmcgPSBmbS5lbGlkZWRUZXh0KGZuYW1l
LCBRdDo6RWxpZGVMZWZ0LCB3aWR0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50IG4gPSBm
aWxlbmFtZXMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5k
ZXJUaGVtZVF0TW9iaWxlLmNwcAppbmRleCBjMmY0MjI4YjAwOTI4ZThiMmMxYzQyN2JkMGU3Yjhh
NzQ3MDQyYzEwLi41MzBmN2ZhNDI2YjNjZmY0YzYyNThlZGY1YzFhZDQxZTFhODQ5ODQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNw
cApAQCAtNDcsNyArNDcsNiBAQAogCiAjaW5jbHVkZSA8UUNvbG9yPgogI2luY2x1ZGUgPFFGaWxl
PgotI2luY2x1ZGUgPFFGb250TWV0cmljcz4KICNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRl
IDxRUGl4bWFwQ2FjaGU+CiAKQEAgLTU5NSw3ICs1OTQsNiBAQCBpbnQgUmVuZGVyVGhlbWVRdE1v
YmlsZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAogdm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5k
ZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0CiB7CiAgICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAg
ICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOwogCiAg
ICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBUZXh0QXJl
YVBhcnQ6CkBAIC02MzIsNyArNjMwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnMKICAgICBj
YXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICBjYXNlIE1l
bnVsaXN0UGFydDogewotICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ID0gZm0uaGVpZ2h0KCkgKiBi
dXR0b25IZWlnaHRSYXRpbyAqIHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
IGNvbnN0IGludCBoZWlnaHQgPSByZW5kZXJTdHlsZS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKSAq
IGJ1dHRvbkhlaWdodFJhdGlvICogcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICAg
ICAgc2l6ZSA9IFFTaXplKHJlbmRlclN0eWxlLT53aWR0aCgpLnZhbHVlKCksIGhlaWdodCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRleCBmOTRk
NDQ1ODlmOTY1MzJiYTU5OWZkNDQ5YzMwMjAyYzljNzc2MzkyLi40YjAwOGQ3MjgzMGY0YTA3OThh
YzA1ZjhhMDJiYmJlMmRhNzZkMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0x
NDI1LDcgKzE0MjUsNyBAQCBRVmFyaWFudCBRV2ViUGFnZTo6aW5wdXRNZXRob2RRdWVyeShRdDo6
SW5wdXRNZXRob2RRdWVyeSBwcm9wZXJ0eSkgY29uc3QKICAgICAgICAgY2FzZSBRdDo6SW1Gb250
OiB7CiAgICAgICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRyb2wpIHsKICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJUZXh0Q29udHJvbC0+c3R5bGUoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoUUZvbnQocmVuZGVyU3R5bGUtPmZvbnQo
KS5mb250KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoUUZvbnQocmVuZGVy
U3R5bGUtPmZvbnQoKS5zeW50aGV0aWNGb250KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybiBRVmFyaWFudChRRm9udCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcAppbmRleCA3ZDY1ZjVjYmYxMDAy
YWU5ZTU1ZDAwMTM2MmM5Y2E4ZGNhZWMwODg0Li4yOWU0NjI0ZWJkM2UyMTRjNWZmYTc2ZDYwZjY0
MmY3ZjYwZGI4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BvcHVwTWVudVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Bv
cHVwTWVudVF0LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgUG9wdXBNZW51UXQ6OnNob3co
Y29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAgICAgUVJl
Y3QgZ2VvbWV0cnkocmVjdCk7CiAgICAgZ2VvbWV0cnkubW92ZVRvcExlZnQodmlldy0+Y29udGVu
dHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKICAgICBtX3BvcHVwLT5zZXRHZW9tZXRyeShn
ZW9tZXRyeSk7Ci0gICAgbV9wb3B1cC0+c2V0Rm9udChtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUo
KS5mb250KCkuZm9udCgpKTsKKyAgICBtX3BvcHVwLT5zZXRGb250KG1fcG9wdXBDbGllbnQtPm1l
bnVTdHlsZSgpLmZvbnQoKS5zeW50aGV0aWNGb250KCkpOwogCiAgICAgbV9zZWxlY3REYXRhID0g
YWRvcHRQdHIobmV3IFNlbGVjdERhdGEobV9wb3B1cENsaWVudCkpOwogICAgIG1fcG9wdXAtPnNo
b3coKm1fc2VsZWN0RGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggNzQ1MzY3MjRjYWQ1M2E0ZjRhZjc2ZWY5MjMzNGFmMjdhNDI4
ZTgwZS4uMDdjZTMwODkzNDI0MGJhODE4MmJhM2NkYjk3NDE1YWJlODZkNWY0ZiAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDEyLTAyLTA3ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisg
ICAgICAgIFtRdF0gVXNlIFFSYXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAg
IEZsaXAgdGhlIFFSYXdGb250IHN3aXRjaCBmb3IgUXQgNS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVh
dHVyZXMucHJmOgorCiAyMDEyLTAyLTA4ICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAg
ICAgICAgW0JsYWNrQmVycnldIFVwc3RyZWFtIER1bXBSZW5kZXJUcmVlQmxhY2tCZXJyeQpkaWZm
IC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29s
cy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgppbmRleCBlNzE5MGNlZWJkMjYw
MGRkMDQ1ZTljZjgxZTM3ZDExNmI2NDkyZjZlLi41NWFkNzk3MzI3MjA1ZWY4M2M4MzI0ZWQ0YjFj
Y2E0MGY3MTRlMGU1IDEwMDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Zl
YXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnBy
ZgpAQCAtMjExLDYgKzIxMSw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9JTlNQRUNUT1I9
MCkgewogICAgIERFRklORVMgLT0gRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVI9MQogICAgIERF
RklORVMgKz0gRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVI9MAogfQorIyBVc2Ugb2YgUVJhd0Zv
bnQgaW4gUXQgNToKK2hhdmVRdCg1KTogREVGSU5FUyArPSBIQVZFX1FSQVdGT05UPTEKIAogIyMg
Rm9yd2FyZCBlbmFibGVkIGZlYXR1cmUgbWFjcm9zIHRvIEphdmFTY3JpcHQgZW5hYmxlZCBmZWF0
dXJlcyBtYWNyb3MKIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUID0gTEFOR1VBR0VfSkFWQVND
UklQVD0xCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129700</attachid>
            <date>2012-03-01 07:03:58 -0800</date>
            <delta_ts>2012-04-13 04:54:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78001-20120301160705.patch</filename>
            <type>text/plain</type>
            <size>67071</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZiYjQ2OGZkYTJlMDdl
NWY3Y2E5MmY3MWZjNzc4MjU4OTJjN2FmZS4uOGY0MTUzNTYxODhiZGMwNzA4OTU3ZjNkMzRiNjA3
ZDM2MjNmNWRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEyLTAyLTI5ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gVXNlIFFS
YXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisgICAgICAgIFVwIHVudGlsIG5vdywgZm9u
dHMgaW4gdGhlIFF0IHBvcnQgaGF2ZSBiZWVuIGhhbmRsZWQgdmlhCisgICAgICAgIHRoZSBRRm9u
dCBBUEkuIFFSYXdGb250IG9mZmVycyBhIGxvd2VyLWxldmVsIEFQSSBlbmFibGluZworICAgICAg
ICB1cyB0byBiZSBtb3JlIGluIGxpbmUgd2l0aCB3aGF0IG90aGVyIFdlYktpdCBwb3J0cyBkby4K
KyAgICAgICAgVGhpcyBwYXRjaCBwcm9jZWVkcyB0byBzd2l0Y2hpbmcgb3ZlciB0byBRUmF3Rm9u
dCwgYW5kCisgICAgICAgIGVmZmVjdGl2ZWx5IHVzZSBhbiBlYXJsaWVyIGNoYW5nZSBieSBBbmRy
ZWFzIEtsaW5nCisgICAgICAgIHRoYXQgcmVtYWluZWQgZ3VhcmRlZCB1cCB1bnRpbCBub3cuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIHNpbmNlIHRoaXMgaXMgcmVmYWN0b3Jpbmcgb2YgZXhpc3RpbmcKKyAgICAgICAgZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoRm9udCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5bnRoZXRpY0ZvbnQpOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAg
ICAoU2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6Omdl
dFF0UmF3Rm9udCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyYXdGb250Rm9yQ2hh
cmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5G
b250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YVByaXZh
dGU6OkZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZp
bGxQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhGb3JHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd1F0R2x5cGhSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojppbml0Rm9ybWF0Rm9yVGV4dExh
eW91dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c3ludGhldGljRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpyYXdGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQ0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFF0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJvbVJhd0RhdGFXaXRob3V0UmVmKToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxQZW5Gb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OnN0cm9rZVBlbkZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24p
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpkcmF3U2ltcGxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6cHJpbWFyeUZvbnRIYXNHbHlwaEZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjplbXBoYXNpc01hcmtBc2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZW1waGFz
aXNNYXJrRGVzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjplbXBoYXNpc01hcmtIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZvbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZv
cldpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRP
blN0eWxlKToKKwogMjAxMi0wMi0yNyAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbSW5zcGVjdG9ySW5kZXhlZERCXSBBZGQg
cmVmcmVzaCB0byBJbmRleGVkREIgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZjU1MTMyMzBl
Y2E2ZmI2NDk0ZjFjYjEwNDZkZGRiNjc1ZWUyMjhlMi4uNGYyMjNkNzZlYzlhODcwNzVkNWY4NmJj
ODZmNGE0NDc1ZmI3NDhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0w
Mi0yOSAgUGllcnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4KKworICAgICAgICBb
UXRdIFVzZSBRUmF3Rm9udCB3aGVuIGJ1aWxkaW5nIHdpdGggUXQgNQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgwMDEKKworICAgICAgICBTaW5jZSBR
Rm9udCBpcyBub3QgdXNlZCBpbnRlcm5hbGx5LCB3ZSBub3cgbmVlZAorICAgICAgICB0byBxdWVy
eSBmb3IgYSBRRm9udCB0aGF0IHNob3VsZCBiZSBhIGdvb2QKKyAgICAgICAgZW5vdWdoIG1hdGNo
LgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgorCisgICAgICAgICogQXBp
L3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjppbnB1dE1ldGhvZFF1ZXJ5KToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnVRdDo6c2hvdyk6CisKIDIwMTItMDItMjcgIENhaW8gTWFyY2VsbyBkZSBPbGl2
ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBbUXRd
IE1vdmUgcmVnaXN0cmF0aW9uIG9mIGV4cGVyaW1lbnRhbCB0eXBlcyB0byB0aGUgcHJvcGVyIHBs
dWdpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKaW5kZXggM2YzYjQ1NzhkMzM1ODQxYjk5NjhkOGJjMDE1NDM2ZjJiYWRk
NGY4NC4uNDIzMzIzMjVlNzE4YzVmNzMwNDRmNmJiODMyM2RlMTFhNTVmYjZiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC0yNzk0LDcgKzI3OTQsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL3F0L0V2ZW50
SGFuZGxlclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25N
YXRyaXhRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQuY3BwIFwKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9G
bG9hdFBvaW50UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFJlY3RRdC5j
cHAgXApAQCAtMzM1OCwxOCArMzM1NywxNSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTUFU
SE1MPTEpIHsKICAgICAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIu
Y3BwCiB9CiAKLSMgUVJhd0ZvbnQgZmVhdHVyZSBhZGRlZCBpbiBRdCA0LjguMAorIyBRUmF3Rm9u
dCB0cmFuc2l0aW9uIGhhbmRsaW5nLgogIwotIyBJZiBhdmFpbGFibGUsIHRoaXMgaXMgdXNlZCB0
byBpbXBsZW1lbnQgdGhlIGZhc3QgcGF0aCBmb3IgdGV4dCByZW5kZXJpbmcKLSMgYW5kIG1lYXN1
cmVtZW50IGluIFdlYkNvcmUuIEJlY2F1c2UgdGhlIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXJnb2lu
ZwotIyBkZXZlbG9wbWVudCwgaXQgaXMgZGlzYWJsZWQgaW4gYnVpbGRzLgotIwotIyBleGlzdHMo
JCRbUVRfSU5TVEFMTF9IRUFERVJTXS9RdEd1aS9RUmF3Rm9udCk6IEhBVkVfUVJBV0ZPTlQ9MQot
Ci0haXNFbXB0eShIQVZFX1FSQVdGT05UKSB7Ci0gICAgREVGSU5FUyArPSBIQVZFX1FSQVdGT05U
PTEKKyMgRXZlbiB0aG91Z2ggUVJhd0ZvbnQgd2FzIGFscmVhZHkgYXZhaWxhYmxlIGluIFF0IDQu
OCwgaXQgaGFkCisjIGxpbWl0YXRpb25zIHRoYXQgbWFkZSBzd2l0Y2hpbmcgZnVsbHkgdG8gaXQg
aW1wb3NzaWJsZS4KKyMgV2UgcHJlc2VydmUgdGhlIG9sZCBjb2RlIHBhdGggd2hlbiBidWlsZGlu
ZyB3aXRoIFF0IDQuCiAKK2NvbnRhaW5zKERFRklORVMsIEhBVkVfUVJBV0ZPTlQ9MSkgewogICAg
IFNPVVJDRVMgKz0gXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIFwK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwIFwKQEAgLTMzNzgsOCArMzM3NCwxMiBAQCBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfTUFUSE1MPTEpIHsKICAgICBIRUFERVJTICs9IFwKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKK30gZWxzZSB7CisgICAg
U09VUkNFUyArPSBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdDQuY3BwCiB9
CiAKKwogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0dFT0xPQ0FUSU9OPTEpIHsKICAgICB2OCB7
CiAgICAgICAgIFNPVVJDRVMgKz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAppbmRleCA1MGVlZTUzYTdmZjdiNzVmOGE4NzAzODc4NDYyY2FmMTEzOGRiNzI1Li5i
ZDM5NmQ1Njk0MmRkOTU3NDE3ZDE3OWE4MTQ1ZjM5NDhiMzQxNzBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtMjcsOSArMjcsNiBAQAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRUcmFu
c2NvZGVyLmgiCi0jaWYgUExBVEZPUk0oUVQpICYmIEhBVkUoUVJBV0ZPTlQpCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jZW5kaWYKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpAQCAtMTUxLDExICsxNDgs
NiBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaQogCiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1Vz
ZSA9IGNvZGVQYXRoKHJ1bik7CiAKLSNpZiBQTEFURk9STShRVCkgJiYgSEFWRShRUkFXRk9OVCkK
LSAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKLSAg
ICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7Ci0jZW5kaWYKLQogICAgIGlmIChjb2RlUGF0
aFRvVXNlICE9IENvbXBsZXgpCiAgICAgICAgIHJldHVybiBkcmF3U2ltcGxlVGV4dChjb250ZXh0
LCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAppbmRleCBkMTVhNzdmM2NkNzMzZmFjODliODA5MTFmMWM0YjQ3YWE0ZDkwNzJkLi42
ZmY0YzU4OWZjMjUzNGU3OTUyYjk5MmMzNzUxNjljZGMwNjM2NDlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0zNiw4ICszNiwxMyBAQAogI2luY2x1ZGUgPHd0
Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKICNpZiBQTEFURk9STShRVCkKKyNpZiBIQVZF
KFFSQVdGT05UKQorI2luY2x1ZGUgPFFSYXdGb250PgorY2xhc3MgUVRleHRMYXlvdXQ7CisjZWxz
ZQogI2luY2x1ZGUgPFFGb250PgogI2VuZGlmCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0xNzUsOCArMTgwLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHRE
aXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOwogCiAjaWYgUExBVEZPUk0oUVQpCisj
aWYgSEFWRShRUkFXRk9OVCkKKyAgICBRUmF3Rm9udCByYXdGb250KCkgY29uc3Q7CisjZWxzZQog
ICAgIFFGb250IGZvbnQoKSBjb25zdDsKICNlbmRpZgorICAgIFFGb250IHN5bnRoZXRpY0ZvbnQo
KSBjb25zdDsKKyNlbmRpZgogCiAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlU21vb3RoaW5n
KGJvb2wpOwogICAgIHN0YXRpYyBib29sIHNob3VsZFVzZVNtb290aGluZygpOwpAQCAtMjUzLDYg
KzI2MywxMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZm9udExpc3QgJiYg
bV9mb250TGlzdC0+bG9hZGluZ0N1c3RvbUZvbnRzKCk7CiAgICAgfQorI2lmIFBMQVRGT1JNKFFU
KSAmJiBIQVZFKFFSQVdGT05UKQorICAgIHZvaWQgaW5pdEZvcm1hdEZvclRleHRMYXlvdXQoUVRl
eHRMYXlvdXQqKSBjb25zdDsKKyNlbmRpZgorCisKIAogICAgIEZvbnREZXNjcmlwdGlvbiBtX2Zv
bnREZXNjcmlwdGlvbjsKICAgICBtdXRhYmxlIFJlZlB0cjxGb250RmFsbGJhY2tMaXN0PiBtX2Zv
bnRMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmgKaW5kZXggZGQ4NmYwMDRlNGM4Mzk2MzYzYzk1MTIzNGRhZmFmNTI0MDc5OGIzMS4u
OWIxMTM3MWY1YTJlNmQyYmVjZGIwMGUyZTk5MjYxZTA0ZmM4OTE4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCkBAIC01NCw3ICs1
NCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBPcGFxdWVBVFNVU3R5bGUqIEFUU1VTdHlsZTsKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oUVQpCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAjaW5jbHVkZSA8UUZv
bnQ+CisjZWxzZQorI2luY2x1ZGUgPFFSYXdGb250PgorI2VuZGlmCiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTg4LDcgKzE5MiwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFFUKQorI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFGb250IGdldFF0Rm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQorI2Vsc2UKKyAgICBRUmF3
Rm9udCBnZXRRdFJhd0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5yYXdGb250
KCk7IH0KKyNlbmRpZiAvLyAhSEFWRShRUkFXRk9OVCkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
V0lOKSB8fCAoT1MoV0lORE9XUykgJiYgUExBVEZPUk0oV1gpKQpAQCAtMzQxLDcgKzM0OSw3IEBA
IEFMV0FZU19JTkxJTkUgZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0CiAgICAgbV9nbHlwaFRvV2lkdGhNYXAuc2V0TWV0cmljc0ZvckdseXBoKGds
eXBoLCB3aWR0aCk7CiAgICAgcmV0dXJuIHdpZHRoOwogfQotI2VuZGlmCisjZW5kaWYgLy8gIUhB
VkUoUVJBV0ZPTlQpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCmluZGV4IDAyY2U0
MmE5YzFmMjRiMmI3YzNhNWI3MzQ0NjQ4OWY4NGUxZjUyN2EuLjgxNmJjY2I4OTI0Y2FhZjgzNTA5
Y2MwNmFlNmIwNTJhYTMxOGJjM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAKQEAgLTQ5LDM1ICs0OSwyOSBAQCB2b2lkIEZv
bnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKIH0KIAogI2lmIEhBVkUoUVJBV0ZPTlQpCi1zdGF0aWMg
UVJhd0ZvbnQgcmF3Rm9udEZvckNoYXJhY3RlcnMoY29uc3QgUVN0cmluZyYgc3RyaW5nLCBjb25z
dCBRRm9udCYgcmVxdWVzdGVkRm9udCkKK3N0YXRpYyBRUmF3Rm9udCByYXdGb250Rm9yQ2hhcmFj
dGVycyhjb25zdCBRU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFFSYXdGb250JiBmb250KQogewotICAg
IFFGb250IGZvbnQocmVxdWVzdGVkRm9udCk7Ci0gICAgZm9udC5zZXRTdHlsZVN0cmF0ZWd5KFFG
b250OjpOb0ZvbnRNZXJnaW5nKTsKLQotICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcsIGZv
bnQpOworICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcpOworICAgIGxheW91dC5zZXRSYXdG
b250KGZvbnQpOwogICAgIGxheW91dC5iZWdpbkxheW91dCgpOwogICAgIGxheW91dC5jcmVhdGVM
aW5lKCk7CiAgICAgbGF5b3V0LmVuZExheW91dCgpOwogCiAgICAgUUxpc3Q8UUdseXBoUnVuPiBn
bHlwaExpc3QgPSBsYXlvdXQuZ2x5cGhSdW5zKCk7Ci0KLSAgICBBU1NFUlQoZ2x5cGhMaXN0LnNp
emUoKSA9PSAxKTsKLQotICAgIGNvbnN0IFFHbHlwaFJ1biYgZ2x5cGhzKGdseXBoTGlzdC5hdCgw
KSk7Ci0gICAgUVZlY3RvcjxxdWludDMyPiBnbHlwaEluZGV4ZXMgPSBnbHlwaHMuZ2x5cGhJbmRl
eGVzKCk7Ci0KLSAgICBpZiAoZ2x5cGhJbmRleGVzLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZ2x5
cGhMaXN0LnNpemUoKSA8PSAxKTsKKyAgICBpZiAoIWdseXBoTGlzdC5zaXplKCkpCiAgICAgICAg
IHJldHVybiBRUmF3Rm9udCgpOwogCisgICAgY29uc3QgUUdseXBoUnVuJiBnbHlwaHMoZ2x5cGhM
aXN0LmF0KDApKTsKICAgICByZXR1cm4gZ2x5cGhzLnJhd0ZvbnQoKTsKIH0KLSNlbmRpZgorI2Vu
ZGlmIC8vIEhBVkUoUVJBV0ZPTlQpCiAKIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCkKIHsKICNpZiBIQVZFKFFSQVdGT05UKQogICAgIFFTdHJp
bmcgcXN0cmluZyA9IFFTdHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
UUNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoKTsKLSAgICBRUmF3Rm9udCBjb21wdXRlZEZvbnQg
PSByYXdGb250Rm9yQ2hhcmFjdGVycyhxc3RyaW5nLCBmb250LmZvbnQoKSk7CisgICAgUVJhd0Zv
bnQgY29tcHV0ZWRGb250ID0gcmF3Rm9udEZvckNoYXJhY3RlcnMocXN0cmluZywgZm9udC5yYXdG
b250KCkpOwogICAgIGlmICghY29tcHV0ZWRGb250LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBhbHRlcm5hdGVGb250KGNvbXB1dGVkRm9udCk7CkBA
IC0xMDcsMTEgKzEwMSw5IEBAIHZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25z
dCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKIAogRm9udFBsYXRmb3JtRGF0YSog
Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0jaWYg
UVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgsIDApCiAgICAgUUZvbnREYXRhYmFz
ZSBkYjsKICAgICBpZiAoIWRiLmhhc0ZhbWlseShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0jZW5kaWYKICAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHlOYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCmluZGV4IDM5OTZk
MjIzYjk4NzAyY2RmNjMwYjk4NWY2NjI5YThmYjBhNWYzYjEuLjdmYTlmOGMxMTVlYTg5NDAyOTg4
ZTlmMzYxZTZiMTVkMTVhNDFiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTI5LDYg
KzI5LDkgQEAKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaWYgSEFWRShRUkFXRk9O
VCkKKyNpbmNsdWRlIDxRUmF3Rm9udD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQxLDggKzQ0LDEyIEBAIHB1YmxpYzoKICAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkg
eyB9CiAgICAgfkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKTsKIAorI2lmICFIQVZFKFFSQVdGT05U
KQogICAgIC8vIGZvciB1c2Ugd2l0aCBRRm9udERhdGFiYXNlOjphZGRBcHBsaWNhdGlvbkZvbnQv
cmVtb3ZlQXBwbGljYXRpb25Gb250CiAgICAgaW50IG1faGFuZGxlOworI2Vsc2UKKyAgICBRUmF3
Rm9udCBtX3Jhd0ZvbnQ7CisjZW5kaWYKIAogICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRm
b3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9u
ID0gSG9yaXpvbnRhbCwgVGV4dE9yaWVudGF0aW9uID0gVGV4dE9yaWVudGF0aW9uVmVydGljYWxS
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9udFdpZHRoVmFy
aWFudCA9IFJlZ3VsYXJXaWR0aCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdN
b2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGFRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUXQuY3BwCmluZGV4IDIwZjE2MWE4ZjIxZmY4
MTQwNmE4MjY0OTQzZTllMDI3YjFiMGMwYzMuLmRmODFmMzNjNWNmNTlhOGM0NDhhNDBkNTYxMTEx
NDkzNDdhODQzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVF0LmNwcApAQCAtMjQsNDAg
KzI0LDU2IEBACiAKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCisjaWYgIUhBVkUoUVJBV0ZPTlQpCiAjaW5jbHVkZSA8UUZvbnREYXRhYmFz
ZT4KKyNlbmRpZgogI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKIHsK
KyNpZiAhSEFWRShRUkFXRk9OVCkKICAgICBRRm9udERhdGFiYXNlOjpyZW1vdmVBcHBsaWNhdGlv
bkZvbnQobV9oYW5kbGUpOworI2VuZGlmCiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IGl0YWxpYywgRm9udE9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlh
bnQsIEZvbnRSZW5kZXJpbmdNb2RlKQogeworI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFGb250
IGZvbnQ7CiAgICAgZm9udC5zZXRGYW1pbHkoUUZvbnREYXRhYmFzZTo6YXBwbGljYXRpb25Gb250
RmFtaWxpZXMobV9oYW5kbGUpWzBdKTsKICAgICBmb250LnNldFBpeGVsU2l6ZShzaXplKTsKICAg
ICBpZiAoYm9sZCkKICAgICAgICAgZm9udC5zZXRXZWlnaHQoUUZvbnQ6OkJvbGQpOwogICAgIGZv
bnQuc2V0SXRhbGljKGl0YWxpYyk7Ci0KICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShmb250
KTsKKyNlbHNlCisgICAgUV9BU1NFUlQobV9yYXdGb250LmlzVmFsaWQoKSk7CisgICAgbV9yYXdG
b250LnNldFBpeGVsU2l6ZShxcmVhbChzaXplKSk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURh
dGEobV9yYXdGb250KTsKKyNlbmRpZgogfQogCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVh
dGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQogewogICAgIEFT
U0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOwogCi0gICAgaW50IGlkID0gUUZvbnREYXRhYmFzZTo6
YWRkQXBwbGljYXRpb25Gb250RnJvbURhdGEoUUJ5dGVBcnJheShidWZmZXItPmRhdGEoKSwgYnVm
ZmVyLT5zaXplKCkpKTsKKyAgICBjb25zdCBRQnl0ZUFycmF5IGZvbnREYXRhKGJ1ZmZlci0+ZGF0
YSgpLCBidWZmZXItPnNpemUoKSk7CisjaWYgIUhBVkUoUVJBV0ZPTlQpCisgICAgaW50IGlkID0g
UUZvbnREYXRhYmFzZTo6YWRkQXBwbGljYXRpb25Gb250RnJvbURhdGEoZm9udERhdGEpOwogICAg
IGlmIChpZCA9PSAtMSkKICAgICAgICAgcmV0dXJuIDA7Ci0KICAgICBRX0FTU0VSVChRRm9udERh
dGFiYXNlOjphcHBsaWNhdGlvbkZvbnRGYW1pbGllcyhpZCkuc2l6ZSgpID4gMCk7CisjZW5kaWYK
IAogICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgKmRhdGEgPSBuZXcgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YTsKKyNpZiAhSEFWRShRUkFXRk9OVCkKICAgICBkYXRhLT5tX2hhbmRsZSA9IGlkOwor
I2Vsc2UKKyAgICAvLyBQaXhlbCBzaXplIGRvZXNuJ3QgbWF0dGVyIGF0IHRoaXMgcG9pbnQsIGl0
IGlzIHNldCBpbiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhLgorICAg
IGRhdGEtPm1fcmF3Rm9udC5sb2FkRnJvbURhdGEoZm9udERhdGEsIC8qcGl4ZWxTaXplID0gKi8w
LCBRRm9udDo6UHJlZmVyRGVmYXVsdEhpbnRpbmcpOworI2VuZGlmCiAgICAgcmV0dXJuIGRhdGE7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRQbGF0Zm9ybURhdGEuaAppbmRleCA3NjYyYWEwMDcxZTI1MWRlNDA1MmM0YmY3YTEwNTk1M2Uw
ZmM4YTdjLi5mNTVlMTljMmIxMzBjM2Y4OWY3NDI0NWEzNDU1YThkMzMxMDA5NDEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3Jt
RGF0YS5oCkBAIC00MCw4ICs0MCwxMyBAQCBjbGFzcyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSA6
IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlPiB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9udFBsYXRmb3JtRGF0YVByaXZhdGUpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpCisjaWYgIUhB
VkUoUVJBV0ZPTlQpCiAgICAgICAgIDogc2l6ZShmb250LnBpeGVsU2l6ZSgpKQogICAgICAgICAs
IGJvbGQoZm9udC5ib2xkKCkpCisjZWxzZQorICAgICAgICA6IHNpemUoMCkKKyAgICAgICAgLCBi
b2xkKGZhbHNlKQorI2VuZGlmCiAgICAgICAgICwgb2JsaXF1ZShmYWxzZSkKICAgICAgICAgLCBp
c0RlbGV0ZWRWYWx1ZShmYWxzZSkKICAgICB7IH0KQEAgLTUxLDIwICs1NiwxNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgb2JsaXF1ZShvYmxpcXVlKQogICAgICAgICAsIGlzRGVsZXRlZFZhbHVlKGZh
bHNlKQogICAgIHsgfQorI2lmICFIQVZFKFFSQVdGT05UKQogICAgIEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlKGNvbnN0IFFGb250JiBmb250KQogICAgICAgICA6IGZvbnQoZm9udCkKLSNpZiBIQVZF
KFFSQVdGT05UKQotICAgICAgICAsIHJhd0ZvbnQoUVJhd0ZvbnQ6OmZyb21Gb250KGZvbnQsIFFG
b250RGF0YWJhc2U6OkFueSkpCi0jZW5kaWYKICAgICAgICAgLCBzaXplKGZvbnQucGl4ZWxTaXpl
KCkpCiAgICAgICAgICwgYm9sZChmb250LmJvbGQoKSkKICAgICAgICAgLCBvYmxpcXVlKGZhbHNl
KQogICAgICAgICAsIGlzRGVsZXRlZFZhbHVlKGZhbHNlKQogICAgIHsgfQotI2lmIEhBVkUoUVJB
V0ZPTlQpCisjZWxzZQogICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKGNvbnN0IFFSYXdGb250
JiByYXdGb250KQotICAgICAgICA6IGZvbnQoKQotICAgICAgICAsIHJhd0ZvbnQocmF3Rm9udCkK
KyAgICAgICAgOiByYXdGb250KHJhd0ZvbnQpCiAgICAgICAgICwgc2l6ZShyYXdGb250LnBpeGVs
U2l6ZSgpKQogICAgICAgICAsIGJvbGQocmF3Rm9udC53ZWlnaHQoKSA+PSBRRm9udDo6Qm9sZCkK
ICAgICAgICAgLCBvYmxpcXVlKGZhbHNlKQpAQCAtNzUsOCArNzcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIDogaXNEZWxldGVkVmFsdWUodHJ1ZSkKICAgICB7IH0KIAorI2lmICFIQVZFKFFSQVdGT05U
KQogICAgIFFGb250IGZvbnQ7Ci0jaWYgSEFWRShRUkFXRk9OVCkKKyNlbHNlCiAgICAgUVJhd0Zv
bnQgcmF3Rm9udDsKICNlbmRpZgogICAgIGZsb2F0IHNpemU7CkBAIC05MCwxMCArOTMsMTEgQEAg
Y2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YShm
bG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CiAgICAgRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUs
IGludCB3b3JkU3BhY2luZyA9IDAsIGludCBsZXR0ZXJTcGFjaW5nID0gMCk7CisjaWYgIUhBVkUo
UVJBV0ZPTlQpCiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBRRm9udCYgZm9udCkKICAgICAg
ICAgOiBtX2RhdGEoYWRvcHRSZWYobmV3IEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKGZvbnQpKSkK
ICAgICB7IH0KLSNpZiBIQVZFKFFSQVdGT05UKQorI2Vsc2UKICAgICBGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBmbG9hdCBzaXplKTsKICAgICBGb250UGxhdGZvcm1E
YXRhKGNvbnN0IFFSYXdGb250JiByYXdGb250KQogICAgICAgICA6IG1fZGF0YShhZG9wdFJlZihu
ZXcgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUocmF3Rm9udCkpKQpAQCAtMTEyLDYgKzExNiw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEtPmlzRGVsZXRlZFZhbHVl
OwogICAgIH0KIAorI2lmICFIQVZFKFFSQVdGT05UKQogICAgIFFGb250IGZvbnQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgUV9BU1NFUlQoIWlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpOwpAQCAt
MTE5LDcgKzEyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBRRm9udCgpOwogICAg
ICAgICByZXR1cm4gbV9kYXRhLT5mb250OwogICAgIH0KLSNpZiBIQVZFKFFSQVdGT05UKQorI2Vs
c2UKICAgICBRUmF3Rm9udCByYXdGb250KCkgY29uc3QKICAgICB7CiAgICAgICAgIFFfQVNTRVJU
KCFpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCmluZGV4IDg2
ZmMxMmUzYTFlYTcwODBlMWVjMWU4MGZkMGVhOTYxNTZlZjkyMDMuLjNkOTMwOGYyNDYwNjFmMmUz
NDQ5Y2EwNjM1NzZmYmJkMDY5YmE5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcApAQCAtNjMsNyAr
NjMsMTEgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5n
JiBmYW1pbHlOYW1lLCBpbnQgd29yZFNwYWNpbmcsIGludCBsZXR0ZXJTcGFjaW5nKQogICAgIDog
bV9kYXRhKGFkb3B0UmVmKG5ldyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpKSkKIHsKKyNpZiAh
SEFWRShRUkFXRk9OVCkKICAgICBRRm9udCYgZm9udCA9IG1fZGF0YS0+Zm9udDsKKyNlbHNlCisg
ICAgUUZvbnQgZm9udDsKKyNlbmRpZgogICAgIGludCByZXF1ZXN0ZWRTaXplID0gZGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKTsKICAgICBmb250LnNldEZhbWlseShmYW1pbHlOYW1lKTsK
ICAgICBmb250LnNldFBpeGVsU2l6ZShyZXF1ZXN0ZWRTaXplKTsKQEAgLTcxLDE3ICs3NSwxOSBA
QCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IEF0bwogICAgIGZvbnQuc2V0V2VpZ2h0KHRvUUZvbnRXZWln
aHQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpKTsKICAgICBmb250LnNldFdvcmRTcGFjaW5nKHdvcmRT
cGFjaW5nKTsKICAgICBmb250LnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFic29sdXRlU3BhY2lu
ZywgbGV0dGVyU3BhY2luZyk7Ci0gICAgY29uc3QgYm9vbCBzbWFsbENhcHMgPSBkZXNjcmlwdGlv
bi5zbWFsbENhcHMoKTsKLSAgICBmb250LnNldENhcGl0YWxpemF0aW9uKHNtYWxsQ2FwcyA/IFFG
b250OjpTbWFsbENhcHMgOiBRRm9udDo6TWl4ZWRDYXNlKTsKICAgICBmb250LnNldFN0eWxlU3Ry
YXRlZ3koUUZvbnQ6OkZvcmNlSW50ZWdlck1ldHJpY3MpOwogCiAgICAgbV9kYXRhLT5ib2xkID0g
Zm9udC5ib2xkKCk7CisjaWYgIUhBVkUoUVJBV0ZPTlQpCisgICAgY29uc3QgYm9vbCBzbWFsbENh
cHMgPSBkZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsKKyAgICBmb250LnNldENhcGl0YWxpemF0aW9u
KHNtYWxsQ2FwcyA/IFFGb250OjpTbWFsbENhcHMgOiBRRm9udDo6TWl4ZWRDYXNlKTsKICAgICAv
LyBXZWJLaXQgYWxsb3dzIGZvbnQgc2l6ZSB6ZXJvIGJ1dCBRRm9udCBkb2VzIG5vdC4gV2Ugd2ls
bCByZXR1cm4KICAgICAvLyBtX2RhdGEtPnNpemUgaWYgYSBmb250IHNpemUgb2YgemVybyBpcyBy
ZXF1ZXN0ZWQgYW5kIHBpeGVsU2l6ZSgpCiAgICAgLy8gb3RoZXJ3aXNlLgogICAgIG1fZGF0YS0+
c2l6ZSA9ICghcmVxdWVzdGVkU2l6ZSkgPyByZXF1ZXN0ZWRTaXplIDogZm9udC5waXhlbFNpemUo
KTsKLSNpZiBIQVZFKFFSQVdGT05UKQorI2Vsc2UKICAgICBtX2RhdGEtPnJhd0ZvbnQgPSBRUmF3
Rm9udDo6ZnJvbUZvbnQoZm9udCwgUUZvbnREYXRhYmFzZTo6QW55KTsKKyAgICBtX2RhdGEtPnNp
emUgPSBtX2RhdGEtPnJhd0ZvbnQucGl4ZWxTaXplKCk7CiAjZW5kaWYKIH0KIApAQCAtODksMTUg
Kzk1LDEzIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvCiBGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyLCBmbG9hdCBzaXplKQog
ICAgIDogbV9kYXRhKGFkb3B0UmVmKG5ldyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpKSkKIHsK
LSAgICBtX2RhdGEtPmZvbnQgPSBvdGhlci5tX2RhdGEtPmZvbnQ7CiAgICAgbV9kYXRhLT5yYXdG
b250ID0gb3RoZXIubV9kYXRhLT5yYXdGb250OwogICAgIG1fZGF0YS0+Ym9sZCA9IG90aGVyLm1f
ZGF0YS0+Ym9sZDsKICAgICBtX2RhdGEtPm9ibGlxdWUgPSBvdGhlci5tX2RhdGEtPm9ibGlxdWU7
Ci0gICAgbV9kYXRhLT5mb250LnNldFBpeGVsU2l6ZShzaXplKTsKICAgICBtX2RhdGEtPnJhd0Zv
bnQuc2V0UGl4ZWxTaXplKHNpemUpOwotICAgIG1fZGF0YS0+c2l6ZSA9IHNpemUgPyBtX2RhdGEt
PmZvbnQucGl4ZWxTaXplKCkgOiAwOworICAgIG1fZGF0YS0+c2l6ZSA9IG1fZGF0YS0+cmF3Rm9u
dC5waXhlbFNpemUoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEhBVkUoUVJBV0ZPTlQpCiAKIGJv
b2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBv
dGhlcikgY29uc3QKIHsKQEAgLTExMCw3ICsxMTQsMTEgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAogICAgIGNv
bnN0IGJvb2wgZXF1YWxzID0gKG1fZGF0YS0+c2l6ZSA9PSBvdGhlci5tX2RhdGEtPnNpemUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2RhdGEtPmJvbGQgPT0gb3RoZXIubV9kYXRhLT5i
b2xkCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9kYXRhLT5vYmxpcXVlID09IG90aGVy
Lm1fZGF0YS0+b2JsaXF1ZQorI2lmICFIQVZFKFFSQVdGT05UKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIG1fZGF0YS0+Zm9udCA9PSBvdGhlci5tX2RhdGEtPmZvbnQpOworI2Vsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2RhdGEtPnJhd0ZvbnQgPT0gb3RoZXIubV9kYXRh
LT5yYXdGb250KTsKKyNlbmRpZgogICAgIHJldHVybiBlcXVhbHM7CiB9CiAKQEAgLTEyMCwxMCAr
MTI4LDE1IEBAIHVuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAogICAgICAg
ICByZXR1cm4gMDsKICAgICBpZiAobV9kYXRhLT5pc0RlbGV0ZWRWYWx1ZSkKICAgICAgICAgcmV0
dXJuIDE7Ci0gICAgcmV0dXJuIHFIYXNoKG1fZGF0YS0+Zm9udC50b1N0cmluZygpKQotICAgICAg
ICAgICBeIHFIYXNoKCpyZWludGVycHJldF9jYXN0PHF1aW50MzIqPigmbV9kYXRhLT5zaXplKSkK
LSAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPmJvbGQpCi0gICAgICAgICAgIF4gcUhhc2gobV9k
YXRhLT5vYmxpcXVlKTsKKyNpZiAhSEFWRShRUkFXRk9OVCkKKyAgICByZXR1cm4gKHFIYXNoKG1f
ZGF0YS0+Zm9udC50b1N0cmluZygpKSBeIHFIYXNoKG1fZGF0YS0+Ym9sZCkKKyAgICAgICAgICAg
IF4gcUhhc2gobV9kYXRhLT5vYmxpcXVlKSkKKyAgICAgICAgICAgIF4gcUhhc2goKnJlaW50ZXJw
cmV0X2Nhc3Q8cXVpbnQzMio+KCZtX2RhdGEtPnNpemUpKTsKKyNlbHNlCisgICAgcmV0dXJuIHFI
YXNoKG1fZGF0YS0+cmF3Rm9udC5mYW1pbHlOYW1lKCkpIF4gcUhhc2gobV9kYXRhLT5yYXdGb250
LnN0eWxlKCkpCisgICAgICAgICAgICBeIHFIYXNoKG1fZGF0YS0+cmF3Rm9udC53ZWlnaHQoKSkK
KyAgICAgICAgICAgIF4gcUhhc2goKnJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMio+KCZtX2RhdGEt
PnNpemUpKTsKKyNlbmRpZgogfQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKaW5kZXggNTExOTMzNDlmZTQyMGY1NjIz
Mzg2YjY0NmZlYjYzOTRhMjE2NDgyNi4uZDMzMGFiNWI1NWNjZDU1Y2Q2NTA4Y2JlNmE1OGIxZGE2
M2JjYmVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICAg
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICAg
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KIApAQCAt
MjYsOSArMjYsNyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZv
bnRGYWxsYmFja0xpc3QuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKLSNpZiBIQVZFKFFS
QVdGT05UKQogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jZW5kaWYKICNpbmNsdWRlICJHcmFk
aWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCkBAIC0zNywxNyArMzUsMTIgQEAKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKICNp
bmNsdWRlIDxRQnJ1c2g+Ci0jaW5jbHVkZSA8UUZvbnRJbmZvPgotI2luY2x1ZGUgPFFGb250TWV0
cmljcz4KICNpbmNsdWRlIDxRUGFpbnRlcj4KICNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CiAjaW5j
bHVkZSA8UVBlbj4KLSNpZiBIQVZFKFFSQVdGT05UKQogI2luY2x1ZGUgPFFQb2ludEY+Ci0jZW5k
aWYKICNpbmNsdWRlIDxRVGV4dExheW91dD4KICNpbmNsdWRlIDxxYWxnb3JpdGhtcy5oPgotI2lu
Y2x1ZGUgPHFkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKQEAgLTkyLDcgKzg1LDcg
QEAgc3RhdGljIFFQZW4gZmlsbFBlbkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgpCiAg
ICAgICAgIHJldHVybiBRUGVuKFFCcnVzaChjdHgtPmZpbGxQYXR0ZXJuKCktPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihhZmZpbmUpKSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFFQZW4oUUNvbG9y
KGN0eC0+ZmlsbENvbG9yKCkpKTsKKyAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5maWxsQ29s
b3IoKSksIDApOwogfQogCiBzdGF0aWMgUVBlbiBzdHJva2VQZW5Gb3JDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCogY3R4KQpAQCAtMTEyLDE1OCArMTA1LDkyIEBAIHN0YXRpYyBRUGVuIHN0cm9rZVBl
bkZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgpCiAgICAgcmV0dXJuIFFQZW4oUUNvbG9y
KGN0eC0+c3Ryb2tlQ29sb3IoKSksIGN0eC0+c3Ryb2tlVGhpY2tuZXNzKCkpOwogfQogCi1zdGF0
aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywgY29uc3Qg
UUZvbnQmIGZvbnQsIGJvb2wgaXNDb21wbGV4VGV4dCkKK3N0YXRpYyBRUGFpbnRlclBhdGggcGF0
aEZvckdseXBocyhjb25zdCBRR2x5cGhSdW4mIGdseXBoUnVuLCBjb25zdCBRUG9pbnRGJiBvZmZz
ZXQpCiB7Ci0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBydW4ubGVuZ3RoKCk7Ci0KLSAg
ICBRUGFpbnRlciAqcCA9IGN0eC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBRUGVuIHRleHRG
aWxsUGVuOwotICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKQot
ICAgICAgICB0ZXh0RmlsbFBlbiA9IGZpbGxQZW5Gb3JDb250ZXh0KGN0eCk7Ci0KLSAgICBRUGVu
IHRleHRTdHJva2VQZW47Ci0gICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9k
ZVN0cm9rZSkKLSAgICAgICAgdGV4dFN0cm9rZVBlbiA9IHN0cm9rZVBlbkZvckNvbnRleHQoY3R4
KTsKLQotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNo
YXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdE
YXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotICAgIFFQb2ludEYgcHQocG9pbnQueCgpLCBwb2lu
dC55KCkpOwotCi0gICAgaWYgKGZyb20gPiAwIHx8IHRvIDwgcnVuLmxlbmd0aCgpKSB7Ci0gICAg
ICAgIGlmIChpc0NvbXBsZXhUZXh0KSB7Ci0gICAgICAgICAgICBRVGV4dExheW91dCBsYXlvdXQo
c3RyaW5nLCBmb250KTsKLSAgICAgICAgICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlvdXQo
JmxheW91dCwgcnVuKTsKLSAgICAgICAgICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJv
bSk7Ci0gICAgICAgICAgICBmbG9hdCB4MiA9IGxpbmUuY3Vyc29yVG9YKHRvKTsKLSAgICAgICAg
ICAgIGlmICh4MiA8IHgxKQotICAgICAgICAgICAgICAgIHFTd2FwKHgxLCB4Mik7Ci0KLSAgICAg
ICAgICAgIFFGb250TWV0cmljcyBmbShmb250KTsKLSAgICAgICAgICAgIGludCBhc2NlbnQgPSBm
bS5hc2NlbnQoKTsKLSAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocG9pbnQueCgpICsg
eDEsIHBvaW50LnkoKSAtIGFzY2VudCwgeDIgLSB4MSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgUVJlY3RGIGNsaXAgPSBib3VuZGluZ1JlY3Q7Ci0KLSAgICAgICAgICAgIFNoYWRvd0JsdXIq
IGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOwotICAgICAgICAgICAgaWYgKGN0eFNoYWRv
dy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgp
LCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBx
cmVhbCBkeDEgPSAwLCBkeDIgPSAwLCBkeTEgPSAwLCBkeTIgPSAwOwotICAgICAgICAgICAgICAg
IGlmIChzaGFkb3dPZmZzZXQueCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHgyID0gc2hh
ZG93T2Zmc2V0LngoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGR4MSA9IC1zaGFkb3dPZmZzZXQueCgpOwotICAgICAgICAgICAgICAgIGlmIChzaGFkb3dPZmZz
ZXQueSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHkyID0gc2hhZG93T2Zmc2V0LnkoKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGR5MSA9IC1zaGFkb3dP
ZmZzZXQueSgpOwotICAgICAgICAgICAgICAgIC8vIGV4cGFuZCB0aGUgY2xpcCByZWN0IHRvIGlu
Y2x1ZGUgdGhlIHRleHQgc2hhZG93IGFzIHdlbGwKLSAgICAgICAgICAgICAgICBjb25zdCBmbG9h
dCBibHVyRGlzdGFuY2UgPSBjdHgtPnN0YXRlKCkuc2hhZG93Qmx1cjsKLSAgICAgICAgICAgICAg
ICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIpOwotICAgICAgICAgICAgICAgIGNsaXAu
YWRqdXN0KC1ibHVyRGlzdGFuY2UsIC1ibHVyRGlzdGFuY2UsIGJsdXJEaXN0YW5jZSwgYmx1ckRp
c3RhbmNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAg
ICAgIHAtPnNldENsaXBSZWN0KGNsaXAudG9SZWN0KCksIFF0OjpJbnRlcnNlY3RDbGlwKTsKLSAg
ICAgICAgICAgIHB0LnNldFkocHQueSgpIC0gYXNjZW50KTsKLQotICAgICAgICAgICAgaWYgKGN0
eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7Ci0gICAgICAgICAgICAg
ICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cKLSAg
ICAgICAgICAgICAgICAgICAgJiYgKCFjdHhTaGFkb3ctPnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgfHwgY3R4LT5nZXRDVE0oKS5pc0lkZW50aXR5KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eC0+c3RhdGUoKS5z
aGFkb3dDb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0
eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKSkpOwotICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcocCwgcHQpOwotICAg
ICAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4
U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55
d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3Ip
OwotICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5kcmF3KHNoYWRvd1BhaW50ZXIsIHB0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHAtPnNldFBlbih0ZXh0RmlsbFBlbik7Ci0gICAgICAgICAgICBsaW5lLmRy
YXcocCwgcHQpOwotICAgICAgICAgICAgcC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGludCBza2lwV2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCku
d2lkdGgoc3RyaW5nLCBmcm9tLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwotICAgICAgICBwdC5z
ZXRYKHB0LngoKSArIHNraXBXaWR0aCk7Ci0gICAgICAgIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0
aG91dFJlZihzYW5pdGl6ZWQsIGZyb20sIHRvIC0gZnJvbSk7CisgICAgUVBhaW50ZXJQYXRoIHBh
dGg7CisgICAgY29uc3QgUVJhd0ZvbnQgcmF3Rm9udChnbHlwaFJ1bi5yYXdGb250KCkpOworICAg
IGNvbnN0IFFWZWN0b3I8cXVpbnQzMj4gZ2x5cGhJbmRpY2VzID0gZ2x5cGhSdW4uZ2x5cGhJbmRl
eGVzKCk7CisgICAgY29uc3QgUVZlY3RvcjxRUG9pbnRGPiBwb3NpdGlvbnMgPSBnbHlwaFJ1bi5w
b3NpdGlvbnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdseXBoSW5kaWNlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBRUGFpbnRlclBhdGggZ2x5cGhQYXRoID0gcmF3Rm9udC5wYXRoRm9y
R2x5cGgoZ2x5cGhJbmRpY2VzLmF0KGkpKTsKKyAgICAgICAgZ2x5cGhQYXRoLnRyYW5zbGF0ZShw
b3NpdGlvbnMuYXQoaSkgKyBvZmZzZXQpOworICAgICAgICBwYXRoLmFkZFBhdGgoZ2x5cGhQYXRo
KTsKICAgICB9CisgICAgcmV0dXJuIHBhdGg7Cit9CiAKLSAgICBwLT5zZXRGb250KGZvbnQpOwot
Ci0gICAgaW50IGZsYWdzID0gcnVuLnJ0bCgpID8gUXQ6OlRleHRGb3JjZVJpZ2h0VG9MZWZ0IDog
UXQ6OlRleHRGb3JjZUxlZnRUb1JpZ2h0OwotICAgIGlmICghaXNDb21wbGV4VGV4dCAmJiAhKGN0
eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkpCi0gICAgICAgIGZsYWdzIHw9
IFF0OjpUZXh0QnlwYXNzU2hhcGluZzsKK3N0YXRpYyB2b2lkIGRyYXdRdEdseXBoUnVuKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUUdseXBoUnVuJiBxdEdseXBoUnVuLCBjb25zdCBR
UG9pbnRGJiBwb2ludCwgaW50IGJhc2VMaW5lT2Zmc2V0KQoreworICAgIFFQYWludGVyKiBwYWlu
dGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBRUGFpbnRlclBhdGggdGV4
dFN0cm9rZVBhdGg7Ci0gICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0
cm9rZSkKLSAgICAgICAgdGV4dFN0cm9rZVBhdGguYWRkVGV4dChwdCwgZm9udCwgc3RyaW5nKTsK
LQotICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOwotICAgIGlm
IChjdHgtPmhhc1NoYWRvdygpICYmIGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5v
U2hhZG93KSB7Ci0gICAgICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVG
aWxsKSB7Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6
Qmx1clNoYWRvdykgewotICAgICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAg
ICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgICAgICBw
LT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0
eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgICAgICBwLT5k
cmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLmV4cGFuc2lvbigpKTsKLSAgICAgICAgICAg
ICAgICBwLT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IFFGb250TWV0cmljcyBmbShmb250KTsKLSAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdS
ZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywgLTEs
IGZsYWdzKSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
c2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5n
UmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVy
cmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCi0gICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7
Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdUZXh0KHB0LCBzdHJpbmcs
IGZsYWdzLCBydW4uZXhwYW5zaW9uKCkpOwotICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ct
PmVuZFNoYWRvd0xheWVyKGN0eCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9r
ZSkgewotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJs
dXJTaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChj
dHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZz
ZXQuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQp
OwotICAgICAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4
LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7Ci0gICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1z
aGFkb3dPZmZzZXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBRRm9u
dE1ldHJpY3MgZm0oZm9udCk7Ci0gICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChw
dC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0xLCBmbGFn
cyksIGZtLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRv
d0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3Qp
OwotICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBh
bnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgotICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4LT5z
dGF0ZSgpLnNoYWRvd0NvbG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5k
U2hhZG93TGF5ZXIoY3R4KTsKLSAgICAgICAgICAgICAgICB9CisgICAgaWYgKGNvbnRleHQtPnRl
eHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpCisgICAgICAgIHRleHRTdHJva2VQYXRo
ID0gcGF0aEZvckdseXBocyhxdEdseXBoUnVuLCBwb2ludCk7CisKKyAgICBTaGFkb3dCbHVyKiBz
aGFkb3cgPSBjb250ZXh0LT5zaGFkb3dCbHVyKCk7CisgICAgaWYgKGNvbnRleHQtPmhhc1NoYWRv
dygpICYmIHNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAg
IHN3aXRjaCAoc2hhZG93LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTaGFkb3dCbHVyOjpTb2xp
ZFNoYWRvdzogeworICAgICAgICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHBhaW50ZXItPnBlbigp
OworICAgICAgICAgICAgcGFpbnRlci0+c2V0UGVuKGNvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29s
b3IpOworICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY29udGV4dC0+c3Rh
dGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY29udGV4dC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQu
aGVpZ2h0KCkpOworICAgICAgICAgICAgcGFpbnRlci0+dHJhbnNsYXRlKHNoYWRvd09mZnNldCk7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZp
bGwpCisgICAgICAgICAgICAgICAgcGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBo
UnVuKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpICYg
VGV4dE1vZGVTdHJva2UpCisgICAgICAgICAgICAgICAgcGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0
U3Ryb2tlUGF0aCwgcGFpbnRlci0+cGVuKCkpOworICAgICAgICAgICAgcGFpbnRlci0+dHJhbnNs
YXRlKC1zaGFkb3dPZmZzZXQpOworICAgICAgICAgICAgcGFpbnRlci0+c2V0UGVuKHByZXZpb3Vz
UGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgU2hhZG93
Qmx1cjo6Qmx1clNoYWRvdzogeworICAgICAgICAgICAgY29uc3QgaW50IHdpZHRoID0gcXRHbHlw
aFJ1bi5ib3VuZGluZ1JlY3QoKS53aWR0aCgpOworICAgICAgICAgICAgY29uc3QgUVJhd0ZvbnQm
IGZvbnQgPSBxdEdseXBoUnVuLnJhd0ZvbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBoZWln
aHQgPSBmb250LmFzY2VudCgpICsgZm9udC5kZXNjZW50KCk7CisgICAgICAgICAgICBjb25zdCBR
UmVjdEYgYm91bmRpbmdSZWN0KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZm9udC5hc2NlbnQoKSAr
IGJhc2VMaW5lT2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBi
b3VuZGluZ1JlY3QpOworICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAg
ICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihzaGFkb3dD
b250ZXh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93
Q29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpCisgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdHbHlwaFJ1bihwb2ludCwgcXRHbHlwaFJ1bik7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoc2hhZG93Q29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkg
JiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ry
b2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgc2hhZG93UGFpbnRlci0+cGVuKCkpOworICAgICAgICAg
ICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFNoYWRvd0JsdXI6Ok5v
U2hhZG93OgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjdHgt
PnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpCi0gICAgICAgIHAtPnN0cm9rZVBh
dGgodGV4dFN0cm9rZVBhdGgsIHRleHRTdHJva2VQZW4pOworICAgIGlmIChjb250ZXh0LT50ZXh0
RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQorICAgICAgICBwYWludGVyLT5zdHJva2VQ
YXRoKHRleHRTdHJva2VQYXRoLCBzdHJva2VQZW5Gb3JDb250ZXh0KGNvbnRleHQpKTsKIAotICAg
IGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgIFFQ
ZW4gcHJldmlvdXNQZW4gPSBwLT5wZW4oKTsKLSAgICAgICAgcC0+c2V0UGVuKHRleHRGaWxsUGVu
KTsKLSAgICAgICAgcC0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24o
KSk7Ci0gICAgICAgIHAtPnNldFBlbihwcmV2aW91c1Blbik7CisgICAgaWYgKGNvbnRleHQtPnRl
eHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7CisgICAgICAgIFFQZW4gcHJldmlvdXNQ
ZW4gPSBwYWludGVyLT5wZW4oKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKGZpbGxQZW5Gb3JD
b250ZXh0KGNvbnRleHQpKTsKKyAgICAgICAgcGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBx
dEdseXBoUnVuKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKHByZXZpb3VzUGVuKTsKICAgICB9
CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAogewotICAgIGRyYXdUZXh0Q29tbW9uKGN0eCwgcnVuLCBwb2ludCwgZnJvbSwg
dG8sIGZvbnQoKSwgLyogaXNDb21wbGV4VGV4dCA9ICovdHJ1ZSk7CisgICAgU3RyaW5nIHNhbml0
aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3Ro
KCkpOworICAgIGNvbnN0IFFTdHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNh
bml0aXplZCk7CisgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZyk7CisgICAgbGF5b3V0LnNl
dFJhd0ZvbnQocmF3Rm9udCgpKTsKKyAgICBpbml0Rm9ybWF0Rm9yVGV4dExheW91dCgmbGF5b3V0
KTsKKyAgICBRVGV4dExpbmUgbGluZSA9IHNldHVwTGF5b3V0KCZsYXlvdXQsIHJ1bik7CisgICAg
Y29uc3QgUVBvaW50RiBhZGp1c3RlZFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gbGluZS5h
c2NlbnQoKSk7CisKKyAgICBRTGlzdDxRR2x5cGhSdW4+IHJ1bnMgPSBsaW5lLmdseXBoUnVucyhm
cm9tLCB0byAtIGZyb20pOworICAgIFFfRk9SRUFDSChRR2x5cGhSdW4gZ2x5cGhSdW4sIHJ1bnMp
CisgICAgICAgIGRyYXdRdEdseXBoUnVuKGN0eCwgZ2x5cGhSdW4sIGFkanVzdGVkUG9pbnQsIGxp
bmUuYXNjZW50KCkpOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qLCBHbHlw
aE92ZXJmbG93KikgY29uc3QKQEAgLTI3NSwxNyArMjAyLDE5IEBAIGZsb2F0IEZvbnQ6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9uCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKHJ1bi5sZW5ndGgoKSA9PSAxICYm
IHRyZWF0QXNTcGFjZShydW5bMF0pKQotICAgICAgICByZXR1cm4gUUZvbnRNZXRyaWNzKGZvbnQo
KSkud2lkdGgoc3BhY2UpICsgcnVuLmV4cGFuc2lvbigpOwotCisgICAgICAgIHJldHVybiBzcGFj
ZVdpZHRoKCkgKyBydW4uZXhwYW5zaW9uKCk7CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6
Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwogICAgIFFT
dHJpbmcgc3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CiAKLSAgICBp
bnQgdyA9IFFGb250TWV0cmljcyhmb250KCkpLndpZHRoKHN0cmluZyk7Ci0gICAgLy8gV2ViS2l0
IGV4cGVjdHMgdXMgdG8gaWdub3JlIHdvcmQgc3BhY2luZyBvbiB0aGUgZmlyc3QgY2hhcmFjdGVy
IChhcyBvcHBvc2VkIHRvIHdoYXQgUXQgZG9lcykKLSAgICBpZiAodHJlYXRBc1NwYWNlKHJ1blsw
XSkpCi0gICAgICAgIHcgLT0gbV93b3JkU3BhY2luZzsKKyAgICBRVGV4dExheW91dCBsYXlvdXQo
c3RyaW5nKTsKKyAgICBsYXlvdXQuc2V0UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRGb3Jt
YXRGb3JUZXh0TGF5b3V0KCZsYXlvdXQpOworICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlv
dXQoJmxheW91dCwgcnVuKTsKKyAgICBmbG9hdCB4MSA9IGxpbmUuY3Vyc29yVG9YKDApOworICAg
IGZsb2F0IHgyID0gbGluZS5jdXJzb3JUb1gocnVuLmxlbmd0aCgpKTsKKyAgICBjb25zdCBpbnQg
d2lkdGggPSBxQWJzKHgyIC0geDEpOwogCi0gICAgcmV0dXJuIHcgKyBydW4uZXhwYW5zaW9uKCk7
CisgICAgcmV0dXJuIHdpZHRoICsgcnVuLmV4cGFuc2lvbigpOwogfQogCiBpbnQgRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBv
c2l0aW9uLCBib29sKSBjb25zdApAQCAtMjkzLDcgKzIyMiw5IEBAIGludCBGb250OjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgcG9zaXRp
b24sIGJvCiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4u
Y2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwogICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJh
d0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CiAKLSAgICBRVGV4dExheW91dCBsYXlvdXQoc3Ry
aW5nLCBmb250KCkpOworICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcpOworICAgIGxheW91
dC5zZXRSYXdGb250KHJhd0ZvbnQoKSk7CisgICAgaW5pdEZvcm1hdEZvclRleHRMYXlvdXQoJmxh
eW91dCk7CiAgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91dCgmbGF5b3V0LCBydW4pOwog
ICAgIHJldHVybiBsaW5lLnhUb0N1cnNvcihwb3NpdGlvbik7CiB9CkBAIC0zMDMsMTcgKzIzNCw0
MCBAQCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludAogICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250
Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBR
U3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCi0gICAg
UVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZywgZm9udCgpKTsKKyAgICBRVGV4dExheW91dCBsYXlv
dXQoc3RyaW5nKTsKKyAgICBsYXlvdXQuc2V0UmF3Rm9udChyYXdGb250KCkpOworICAgIGluaXRG
b3JtYXRGb3JUZXh0TGF5b3V0KCZsYXlvdXQpOwogICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBM
YXlvdXQoJmxheW91dCwgcnVuKTsKIAogICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJv
bSk7CiAgICAgZmxvYXQgeDIgPSBsaW5lLmN1cnNvclRvWCh0byk7CiAgICAgaWYgKHgyIDwgeDEp
CiAgICAgICAgIHFTd2FwKHgxLCB4Mik7CisgICAgLy8gVGhpcyBpcyBkdWUgdG8gdGhlIHdheSBR
UGFpbnRlciBkcmF3cyByZWN0YW5nbGVzLiBJbiBvcmRlciBmb3IgY29tcGxleCB0ZXh0IHNlbGVj
dGlvbnMgbm90IHRvIGJlCisgICAgLy8gYnJva2VuIHdpdGggYmxhbmtzLCB3ZSBuZWVkIHRvIG1v
dmUgdGhlIGxlZnQgc2lkZSBiYWNrIGEgYml0LgorICAgIHgxIC09IDE7CiAKICAgICByZXR1cm4g
RmxvYXRSZWN0KHB0LngoKSArIHgxLCBwdC55KCksIHgyIC0geDEsIGgpOwogfQogCit2b2lkIEZv
bnQ6OmluaXRGb3JtYXRGb3JUZXh0TGF5b3V0KFFUZXh0TGF5b3V0KiBsYXlvdXQpIGNvbnN0Cit7
CisgICAgUVRleHRMYXlvdXQ6OkZvcm1hdFJhbmdlIHJhbmdlOworICAgIHJhbmdlLnN0YXJ0ID0g
MDsKKyAgICByYW5nZS5sZW5ndGggPSBsYXlvdXQtPnRleHQoKS5sZW5ndGgoKTsKKyAgICBpZiAo
bV93b3JkU3BhY2luZykKKyAgICAgICAgcmFuZ2UuZm9ybWF0LnNldEZvbnRXb3JkU3BhY2luZyht
X3dvcmRTcGFjaW5nKTsKKyAgICBpZiAobV9sZXR0ZXJTcGFjaW5nKQorICAgICAgICByYW5nZS5m
b3JtYXQuc2V0Rm9udExldHRlclNwYWNpbmcobV9sZXR0ZXJTcGFjaW5nKTsKKyAgICBpZiAodHlw
ZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykKKyAgICAgICAgcmFuZ2UuZm9ybWF0LnNldEZv
bnRLZXJuaW5nKHRydWUpOworICAgIGlmIChpc1NtYWxsQ2FwcygpKQorICAgICAgICByYW5nZS5m
b3JtYXQuc2V0Rm9udENhcGl0YWxpemF0aW9uKFFGb250OjpTbWFsbENhcHMpOworCisgICAgaWYg
KHJhbmdlLmZvcm1hdC5wcm9wZXJ0eUNvdW50KCkpCisgICAgICAgIGxheW91dC0+c2V0QWRkaXRp
b25hbEZvcm1hdHMoUUxpc3Q8UVRleHRMYXlvdXQ6OkZvcm1hdFJhbmdlPigpIDw8IHJhbmdlKTsK
K30KKwogYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQog
ewogICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNCw3ICsyNzgsNiBAQCB2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICov
LCBjb25zdAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLSNpZiBIQVZFKFFSQVdGT05UKQog
dm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsK
ICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMzMzLDkgKzI4Niw2IEBA
IHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSwKICAgICBib29sIHNob3VsZEZpbGwgPSBjb250ZXh0LT50
ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbDsKICAgICBib29sIHNob3VsZFN0cm9rZSA9
IGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2U7CiAKLSAgICAvLyBT
dHJva2luZyB0ZXh0IHNob3VsZCBhbHdheXMgdGFrZSB0aGUgY29tcGxleCBwYXRoLgotICAgIEFT
U0VSVCghc2hvdWxkU3Ryb2tlKTsKLQogICAgIGlmICghc2hvdWxkRmlsbCAmJiAhc2hvdWxkU3Ry
b2tlKQogICAgICAgICByZXR1cm47CiAKQEAgLTM0NCw2ICsyOTQsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEsCiAKICAgICBnbHlwaEluZGV4ZXMucmVzZXJ2ZShudW1HbHlwaHMpOwogICAgIHBv
c2l0aW9ucy5yZXNlcnZlKG51bUdseXBocyk7CisgICAgY29uc3QgUVJhd0ZvbnQmIGZvbnQoZm9u
dERhdGEtPmdldFF0UmF3Rm9udCgpKTsKIAogICAgIGZsb2F0IHdpZHRoID0gMDsKIApAQCAtMzU3
LDE2NiArMzA4LDM5IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKICAgICAgICAgd2lkdGggKz0g
YWR2YW5jZTsKICAgICB9CiAKLSAgICBRUmF3Rm9udCByYXdGb250KGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5yYXdGb250KCkpOwotCiAgICAgUUdseXBoUnVuIHF0R2x5cGhzOwogICAgIHF0R2x5
cGhzLnNldEdseXBoSW5kZXhlcyhnbHlwaEluZGV4ZXMpOwogICAgIHF0R2x5cGhzLnNldFBvc2l0
aW9ucyhwb3NpdGlvbnMpOwotICAgIHF0R2x5cGhzLnNldFJhd0ZvbnQocmF3Rm9udCk7Ci0KLSAg
ICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAg
U2hhZG93Qmx1ciogc2hhZG93ID0gY29udGV4dC0+c2hhZG93Qmx1cigpOwotICAgIHN3aXRjaCAo
c2hhZG93LT50eXBlKCkpIHsKLSAgICBjYXNlIFNoYWRvd0JsdXI6OlNvbGlkU2hhZG93OiB7Ci0g
ICAgICAgIFFQZW4gcHJldmlvdXNQZW4gPSBwYWludGVyLT5wZW4oKTsKLSAgICAgICAgcGFpbnRl
ci0+c2V0UGVuKGNvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwotICAgICAgICBjb25zdCBR
UG9pbnRGIHNoYWRvd09mZnNldChjb250ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgp
LCBjb250ZXh0LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7Ci0gICAgICAgIHBhaW50
ZXItPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQpOwotICAgICAgICBwYWludGVyLT5kcmF3R2x5cGhS
dW4ocG9pbnQsIHF0R2x5cGhzKTsKLSAgICAgICAgcGFpbnRlci0+dHJhbnNsYXRlKC1zaGFkb3dP
ZmZzZXQpOwotICAgICAgICBwYWludGVyLT5zZXRQZW4ocHJldmlvdXNQZW4pOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93OiB7Ci0gICAgICAg
IHFyZWFsIGhlaWdodCA9IHJhd0ZvbnQuYXNjZW50KCkgKyByYXdGb250LmRlc2NlbnQoKSArIDE7
Ci0gICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocG9pbnQueCgpLCBwb2ludC55KCkgLSByYXdG
b250LmFzY2VudCgpLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBz
aGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGNvbnRleHQsIGJvdW5kaW5n
UmVjdCk7Ci0gICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7Ci0gICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGNvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29s
b3IpOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEds
eXBocyk7Ci0gICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGNvbnRleHQpOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFNoYWRvd0JsdXI6Ok5vU2hh
ZG93OgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUVBlbiBwcmV2aW91c1BlbiA9
IHBhaW50ZXItPnBlbigpOwotICAgIHBhaW50ZXItPnNldFBlbihmaWxsUGVuRm9yQ29udGV4dChj
b250ZXh0KSk7Ci0gICAgcGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBocyk7Ci0g
ICAgcGFpbnRlci0+c2V0UGVuKHByZXZpb3VzUGVuKTsKLX0KLQotYm9vbCBGb250OjpjYW5FeHBh
bmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi0jZWxzZSAvLyAhSEFWRShRUkFXRk9OVCkKLQotdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4
dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBkcmF3VGV4dENvbW1v
bihjdHgsIHJ1biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCksIC8qIGlzQ29tcGxleFRleHQgPSAq
L2ZhbHNlKTsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKSBjb25zdAotewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFj
ZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBRU3RyaW5nIHN0cmluZyA9
IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotCi0gICAgUUZvbnRNZXRyaWNzIGZt
KGZvbnQoKSk7Ci0gICAgZmxvYXQgZGVsdGEgPSBwb3NpdGlvbjsKLSAgICBpbnQgY3VyUG9zID0g
MDsKLSAgICBkbyB7Ci0gICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IGZtLndpZHRoKHN0cmluZ1tj
dXJQb3NdKTsKLSAgICAgICAgZGVsdGEgLT0gY2hhcldpZHRoOwotICAgICAgICBpZiAoaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIHsKLSAgICAgICAgICAgIGlmIChkZWx0YSArIGNoYXJXaWR0aCAvIDIg
PD0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChkZWx0YSArIGNoYXJXaWR0aCA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKytjdXJQb3MgPCBzdHJpbmcuc2l6ZSgpKTsKKyAgICBx
dEdseXBocy5zZXRSYXdGb250KGZvbnQpOwogCi0gICAgcmV0dXJuIGN1clBvczsKKyAgICBkcmF3
UXRHbHlwaFJ1bihjb250ZXh0LCBxdEdseXBocywgcG9pbnQsIC8qIGJhc2VsaW5lT2Zmc2V0ID0g
Ki8wKTsKIH0KIAogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93
KSBjb25zdAotewotICAgIGlmICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcnVuLmxlbmd0aCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMo
cnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKLSAgICBRU3RyaW5nIHN0cmluZyA9IGZy
b21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwotCi0gICAgaW50IHcgPSBRRm9udE1ldHJp
Y3MoZm9udCgpKS53aWR0aChzdHJpbmcsIC0xLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwotCi0g
ICAgLy8gV2ViS2l0IGV4cGVjdHMgdXMgdG8gaWdub3JlIHdvcmQgc3BhY2luZyBvbiB0aGUgZmly
c3QgY2hhcmFjdGVyIChhcyBvcHBvc2VkIHRvIHdoYXQgUXQgZG9lcykKLSAgICBpZiAodHJlYXRB
c1NwYWNlKHJ1blswXSkpCi0gICAgICAgIHcgLT0gbV93b3JkU3BhY2luZzsKLQotICAgIHJldHVy
biB3ICsgcnVuLmV4cGFuc2lvbigpOwotfQotCi0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0
LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBTdHJpbmcgc2FuaXRpemVk
ID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7
Ci0gICAgUVN0cmluZyB3aG9sZVRleHQgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVk
KTsKLSAgICBRU3RyaW5nIHNlbGVjdGVkVGV4dCA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5p
dGl6ZWQsIGZyb20sIHFNaW4odG8gLSBmcm9tLCB3aG9sZVRleHQubGVuZ3RoKCkgLSBmcm9tKSk7
Ci0KLSAgICBpbnQgc3RhcnRYID0gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgod2hvbGVUZXh0
LCBmcm9tLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwotICAgIGludCB3aWR0aCA9IFFGb250TWV0
cmljcyhmb250KCkpLndpZHRoKHNlbGVjdGVkVGV4dCwgLTEsIFF0OjpUZXh0QnlwYXNzU2hhcGlu
Zyk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHN0YXJ0WCwgcHQueSgpLCB3aWR0
aCwgaCk7Ci19Ci0KIGJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxl
eFRleHQoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGb250OjpwcmltYXJ5Rm9u
dEhhc0dseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IEZvbnQ6OmVtcGhhc2lzTWFya0FzY2Vu
dChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAorUUZvbnQgRm9udDo6c3ludGhldGljRm9udCgp
IGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50
IEZvbnQ6OmVtcGhhc2lzTWFya0Rlc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgRm9udDo6ZW1w
aGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0Ci17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBU
ZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3Qg
RmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNv
bnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSNlbmRpZiAvLyBIQVZFKFFSQVdGT05U
KQotCi1RRm9udCBGb250Ojpmb250KCkgY29uc3QKLXsKLSAgICBRRm9udCBmID0gcHJpbWFyeUZv
bnQoKS0+Z2V0UXRGb250KCk7Ci0gICAgaWYgKG1fbGV0dGVyU3BhY2luZyAhPSAwKQorICAgIFFS
YXdGb250IHJhd0ZvbnQocHJpbWFyeUZvbnQoKS0+Z2V0UXRSYXdGb250KCkpOworICAgIFFGb250
IGYocmF3Rm9udC5mYW1pbHlOYW1lKCkpOworICAgIGlmIChyYXdGb250LnBpeGVsU2l6ZSgpKQor
ICAgICAgICBmLnNldFBpeGVsU2l6ZShyYXdGb250LnBpeGVsU2l6ZSgpKTsKKyAgICBmLnNldFdl
aWdodChyYXdGb250LndlaWdodCgpKTsKKyAgICBmLnNldFN0eWxlKHJhd0ZvbnQuc3R5bGUoKSk7
CisgICAgaWYgKG1fbGV0dGVyU3BhY2luZykKICAgICAgICAgZi5zZXRMZXR0ZXJTcGFjaW5nKFFG
b250OjpBYnNvbHV0ZVNwYWNpbmcsIG1fbGV0dGVyU3BhY2luZyk7Ci0gICAgaWYgKG1fd29yZFNw
YWNpbmcgIT0gMCkKKyAgICBpZiAobV93b3JkU3BhY2luZykKICAgICAgICAgZi5zZXRXb3JkU3Bh
Y2luZyhtX3dvcmRTcGFjaW5nKTsKICAgICByZXR1cm4gZjsKIH0KIAogCitRUmF3Rm9udCBGb250
OjpyYXdGb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+Z2V0UXRSYXdG
b250KCk7CiB9CiAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRRdDQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFF0NC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjAyMWY5YzY0MjQ4ZDYxMDQ2ZTNjODA5MDVmNTJiMzI2
N2IzOWNhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRRdDQuY3BwCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZv
bnRGYWxsYmFja0xpc3QuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJH
bHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYXR0ZXJu
LmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKworI2lu
Y2x1ZGUgPFFCcnVzaD4KKyNpbmNsdWRlIDxRRm9udEluZm8+CisjaW5jbHVkZSA8UUZvbnRNZXRy
aWNzPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KKyNpbmNs
dWRlIDxRUGVuPgorI2luY2x1ZGUgPFFUZXh0TGF5b3V0PgorI2luY2x1ZGUgPGxpbWl0cy5oPgor
I2luY2x1ZGUgPHFhbGdvcml0aG1zLmg+CisjaW5jbHVkZSA8cWRlYnVnLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgUVN0cmluZyBmcm9tUmF3RGF0YVdpdGhvdXRS
ZWYoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydCA9IDAsIGludCBsZW4gPSAtMSkKK3sK
KyAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgbGVuID0gc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQ7
CisgICAgUV9BU1NFUlQoc3RhcnQgKyBsZW4gPD0gc3RyaW5nLmxlbmd0aCgpKTsKKworICAgIC8v
IFdlIGRvbid0IGRldGFjaC4gVGhpcyBhc3N1bWVzIHRoZSBXZWJDb3JlIHN0cmluZyBkYXRhIHdp
bGwgc3RheSB2YWxpZCBmb3IgdGhlCisgICAgLy8gbGlmZXRpbWUgb2YgdGhlIFFTdHJpbmcgd2Ug
cGFzcyBiYWNrLCBzaW5jZSB3ZSBkb24ndCByZWYgdGhlIFdlYkNvcmUgc3RyaW5nLgorICAgIHJl
dHVybiBRU3RyaW5nOjpmcm9tUmF3RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4o
c3RyaW5nLmNoYXJhY3RlcnMoKSArIHN0YXJ0KSwgbGVuKTsKK30KKworc3RhdGljIFFUZXh0TGlu
ZSBzZXR1cExheW91dChRVGV4dExheW91dCogbGF5b3V0LCBjb25zdCBUZXh0UnVuJiBzdHlsZSkK
K3sKKyAgICBpbnQgZmxhZ3MgPSBzdHlsZS5ydGwoKSA/IFF0OjpUZXh0Rm9yY2VSaWdodFRvTGVm
dCA6IFF0OjpUZXh0Rm9yY2VMZWZ0VG9SaWdodDsKKyAgICBpZiAoc3R5bGUuZXhwYW5zaW9uKCkp
CisgICAgICAgIGZsYWdzIHw9IFF0OjpUZXh0SnVzdGlmaWNhdGlvbkZvcmNlZDsKKyAgICBsYXlv
dXQtPnNldEZsYWdzKGZsYWdzKTsKKyAgICBsYXlvdXQtPmJlZ2luTGF5b3V0KCk7CisgICAgUVRl
eHRMaW5lIGxpbmUgPSBsYXlvdXQtPmNyZWF0ZUxpbmUoKTsKKyAgICBsaW5lLnNldExpbmVXaWR0
aChJTlRfTUFYIC8gMjU2KTsKKyAgICBpZiAoc3R5bGUuZXhwYW5zaW9uKCkpCisgICAgICAgIGxp
bmUuc2V0TGluZVdpZHRoKGxpbmUubmF0dXJhbFRleHRXaWR0aCgpICsgc3R5bGUuZXhwYW5zaW9u
KCkpOworICAgIGxheW91dC0+ZW5kTGF5b3V0KCk7CisgICAgcmV0dXJuIGxpbmU7Cit9CisKK3N0
YXRpYyBRUGVuIGZpbGxQZW5Gb3JDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4KQoreworICAg
IGlmIChjdHgtPmZpbGxHcmFkaWVudCgpKSB7CisgICAgICAgIFFCcnVzaCBicnVzaCgqY3R4LT5m
aWxsR3JhZGllbnQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJ1c2guc2V0VHJh
bnNmb3JtKGN0eC0+ZmlsbEdyYWRpZW50KCktPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Cisg
ICAgICAgIHJldHVybiBRUGVuKGJydXNoLCAwKTsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5maWxs
UGF0dGVybigpKSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CisgICAgICAgIHJl
dHVybiBRUGVuKFFCcnVzaChjdHgtPmZpbGxQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihhZmZpbmUpKSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIFFQZW4oUUNvbG9yKGN0eC0+Zmls
bENvbG9yKCkpKTsKK30KKworc3RhdGljIFFQZW4gc3Ryb2tlUGVuRm9yQ29udGV4dChHcmFwaGlj
c0NvbnRleHQqIGN0eCkKK3sKKyAgICBpZiAoY3R4LT5zdHJva2VHcmFkaWVudCgpKSB7CisgICAg
ICAgIFFCcnVzaCBicnVzaCgqY3R4LT5zdHJva2VHcmFkaWVudCgpLT5wbGF0Zm9ybUdyYWRpZW50
KCkpOworICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0oY3R4LT5zdHJva2VHcmFkaWVudCgpLT5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICByZXR1cm4gUVBlbihicnVzaCwgY3R4
LT5zdHJva2VUaGlja25lc3MoKSk7CisgICAgfQorCisgICAgaWYgKGN0eC0+c3Ryb2tlUGF0dGVy
bigpKSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CisgICAgICAgIFFCcnVzaCBi
cnVzaChjdHgtPnN0cm9rZVBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkp
OworICAgICAgICByZXR1cm4gUVBlbihicnVzaCwgY3R4LT5zdHJva2VUaGlja25lc3MoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIFFQZW4oUUNvbG9yKGN0eC0+c3Ryb2tlQ29sb3IoKSksIGN0eC0+
c3Ryb2tlVGhpY2tuZXNzKCkpOworfQorCitzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFw
aGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGZyb20sIGludCB0bywgY29uc3QgUUZvbnQmIGZvbnQsIGJvb2wgaXNDb21wbGV4
VGV4dCkKK3sKKyAgICBpZiAodG8gPCAwKQorICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKKwor
ICAgIFFQYWludGVyKiBwID0gY3R4LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIFFQZW4gdGV4
dEZpbGxQZW47CisgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwp
CisgICAgICAgIHRleHRGaWxsUGVuID0gZmlsbFBlbkZvckNvbnRleHQoY3R4KTsKKworICAgIFFQ
ZW4gdGV4dFN0cm9rZVBlbjsKKyAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRN
b2RlU3Ryb2tlKQorICAgICAgICB0ZXh0U3Ryb2tlUGVuID0gc3Ryb2tlUGVuRm9yQ29udGV4dChj
dHgpOworCisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4u
Y2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3RyaW5nID0gZnJvbVJh
d0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisgICAgUVBvaW50RiBwdChwb2ludC54KCksIHBv
aW50LnkoKSk7CisKKyAgICBpZiAoZnJvbSA+IDAgfHwgdG8gPCBydW4ubGVuZ3RoKCkpIHsKKyAg
ICAgICAgaWYgKGlzQ29tcGxleFRleHQpIHsKKyAgICAgICAgICAgIFFUZXh0TGF5b3V0IGxheW91
dChzdHJpbmcsIGZvbnQpOworICAgICAgICAgICAgUVRleHRMaW5lIGxpbmUgPSBzZXR1cExheW91
dCgmbGF5b3V0LCBydW4pOworICAgICAgICAgICAgZmxvYXQgeDEgPSBsaW5lLmN1cnNvclRvWChm
cm9tKTsKKyAgICAgICAgICAgIGZsb2F0IHgyID0gbGluZS5jdXJzb3JUb1godG8pOworICAgICAg
ICAgICAgaWYgKHgyIDwgeDEpCisgICAgICAgICAgICAgICAgcVN3YXAoeDEsIHgyKTsKKworICAg
ICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQpOworICAgICAgICAgICAgaW50IGFzY2VudCA9
IGZtLmFzY2VudCgpOworICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkg
KyB4MSwgcG9pbnQueSgpIC0gYXNjZW50LCB4MiAtIHgxLCBmbS5oZWlnaHQoKSk7CisgICAgICAg
ICAgICBRUmVjdEYgY2xpcCA9IGJvdW5kaW5nUmVjdDsKKworICAgICAgICAgICAgU2hhZG93Qmx1
ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICBpZiAoY3R4U2hh
ZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRo
KCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAg
IHFyZWFsIGR4MSA9IDAsIGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7CisgICAgICAgICAgICAg
ICAgaWYgKHNoYWRvd09mZnNldC54KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeDIgPSBz
aGFkb3dPZmZzZXQueCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZHgxID0gLXNoYWRvd09mZnNldC54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09m
ZnNldC55KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeTIgPSBzaGFkb3dPZmZzZXQueSgp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZHkxID0gLXNoYWRv
d09mZnNldC55KCk7CisgICAgICAgICAgICAgICAgLy8gZXhwYW5kIHRoZSBjbGlwIHJlY3QgdG8g
aW5jbHVkZSB0aGUgdGV4dCBzaGFkb3cgYXMgd2VsbAorICAgICAgICAgICAgICAgIGNvbnN0IGZs
b2F0IGJsdXJEaXN0YW5jZSA9IGN0eC0+c3RhdGUoKS5zaGFkb3dCbHVyOworICAgICAgICAgICAg
ICAgIGNsaXAuYWRqdXN0KGR4MSwgZHgyLCBkeTEsIGR5Mik7CisgICAgICAgICAgICAgICAgY2xp
cC5hZGp1c3QoLWJsdXJEaXN0YW5jZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVy
RGlzdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcC0+c2F2ZSgpOworICAgICAg
ICAgICAgcC0+c2V0Q2xpcFJlY3QoY2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwor
ICAgICAgICAgICAgcHQuc2V0WShwdC55KCkgLSBhc2NlbnQpOworCisgICAgICAgICAgICBpZiAo
Y3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAg
ICAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdwor
ICAgICAgICAgICAgICAgICAgICAmJiAoIWN0eFNoYWRvdy0+c2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSB8fCBjdHgtPmdldENUTSgpLmlzSWRlbnRpdHkoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcC0+c2F2ZSgpOworICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgp
LnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYo
Y3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zm
c2V0LmhlaWdodCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7Cisg
ICAgICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBj
dHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBh
bnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xv
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQp
OworICAgICAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcC0+c2V0UGVuKHRleHRGaWxsUGVuKTsKKyAgICAgICAgICAgIGxpbmUu
ZHJhdyhwLCBwdCk7CisgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaW50IHNraXBXaWR0aCA9IFFGb250TWV0cmljcyhmb250
KS53aWR0aChzdHJpbmcsIGZyb20sIFF0OjpUZXh0QnlwYXNzU2hhcGluZyk7CisgICAgICAgIHB0
LnNldFgocHQueCgpICsgc2tpcFdpZHRoKTsKKyAgICAgICAgc3RyaW5nID0gZnJvbVJhd0RhdGFX
aXRob3V0UmVmKHNhbml0aXplZCwgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICB9CisKKyAgICBwLT5z
ZXRGb250KGZvbnQpOworCisgICAgaW50IGZsYWdzID0gcnVuLnJ0bCgpID8gUXQ6OlRleHRGb3Jj
ZVJpZ2h0VG9MZWZ0IDogUXQ6OlRleHRGb3JjZUxlZnRUb1JpZ2h0OworICAgIGlmICghaXNDb21w
bGV4VGV4dCAmJiAhKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkpCisg
ICAgICAgIGZsYWdzIHw9IFF0OjpUZXh0QnlwYXNzU2hhcGluZzsKKworICAgIFFQYWludGVyUGF0
aCB0ZXh0U3Ryb2tlUGF0aDsKKyAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRN
b2RlU3Ryb2tlKQorICAgICAgICB0ZXh0U3Ryb2tlUGF0aC5hZGRUZXh0KHB0LCBmb250LCBzdHJp
bmcpOworCisgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7Cisg
ICAgaWYgKGN0eC0+aGFzU2hhZG93KCkgJiYgY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1
cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0
TW9kZUZpbGwpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dC
bHVyOjpCbHVyU2hhZG93KSB7CisgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOworICAgICAgICAg
ICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworICAgICAgICAgICAg
ICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgo
KSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAg
IHAtPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5zaW9uKCkpOworICAgICAg
ICAgICAgICAgIHAtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQpOworICAgICAgICAgICAgICAgIFFSZWN0RiBib3Vu
ZGluZ1JlY3QocHQueCgpLCBwb2ludC55KCkgLSBmbS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5n
LCAtMSwgZmxhZ3MpLCBmbS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91
bmRpbmdSZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAg
ICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOworICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJl
IGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KKyAgICAg
ICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOworICAgICAg
ICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0Nv
bG9yKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0
cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGN0eFNo
YWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2Rl
U3Ryb2tlKSB7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1
cjo6Qmx1clNoYWRvdykgeworICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93T2Zm
c2V0KGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRv
d09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKHNoYWRvd09m
ZnNldCk7CisgICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBl
bihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgICAgICBwLT50cmFuc2xh
dGUoLXNoYWRvd09mZnNldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IFFGb250TWV0cmljcyBmbShmb250KTsKKyAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdS
ZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywgLTEs
IGZsYWdzKSwgZm0uaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
c2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5n
UmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVy
cmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCisgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihj
dHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93
LT5lbmRTaGFkb3dMYXllcihjdHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4
dE1vZGVTdHJva2UpCisgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIHRleHRT
dHJva2VQZW4pOworCisgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZp
bGwpIHsKKyAgICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHAtPnBlbigpOworICAgICAgICBwLT5z
ZXRQZW4odGV4dEZpbGxQZW4pOworICAgICAgICBwLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFn
cywgcnVuLmV4cGFuc2lvbigpKTsKKyAgICAgICAgcC0+c2V0UGVuKHByZXZpb3VzUGVuKTsKKyAg
ICB9Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAoreworICAgIGRyYXdUZXh0Q29tbW9uKGN0eCwgcnVuLCBwb2ludCwgZnJv
bSwgdG8sIGZvbnQoKSwgLyogaXNDb21wbGV4VGV4dCA9ICovdHJ1ZSk7Cit9CisKK2Zsb2F0IEZv
bnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAoreworICAgIGlm
ICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghcnVuLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
IChydW4ubGVuZ3RoKCkgPT0gMSAmJiB0cmVhdEFzU3BhY2UocnVuWzBdKSkKKyAgICAgICAgcmV0
dXJuIFFGb250TWV0cmljcyhmb250KCkpLndpZHRoKHNwYWNlKSArIHJ1bi5leHBhbnNpb24oKTsK
KworICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJh
Y3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRh
V2l0aG91dFJlZihzYW5pdGl6ZWQpOworCisgICAgaW50IHcgPSBRRm9udE1ldHJpY3MoZm9udCgp
KS53aWR0aChzdHJpbmcpOworICAgIC8vIFdlYktpdCBleHBlY3RzIHVzIHRvIGlnbm9yZSB3b3Jk
IHNwYWNpbmcgb24gdGhlIGZpcnN0IGNoYXJhY3RlciAoYXMgb3Bwb3NlZCB0byB3aGF0IFF0IGRv
ZXMpCisgICAgaWYgKHRyZWF0QXNTcGFjZShydW5bMF0pKQorICAgICAgICB3IC09IG1fd29yZFNw
YWNpbmc7CisKKyAgICByZXR1cm4gdyArIHJ1bi5leHBhbnNpb24oKTsKK30KKworaW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCkgY29uc3QKK3sKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6
bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgUVN0
cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKKworICAgIFFU
ZXh0TGF5b3V0IGxheW91dChzdHJpbmcsIGZvbnQoKSk7CisgICAgUVRleHRMaW5lIGxpbmUgPSBz
ZXR1cExheW91dCgmbGF5b3V0LCBydW4pOworICAgIHJldHVybiBsaW5lLnhUb0N1cnNvcihwb3Np
dGlvbik7Cit9CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwdCwgaW50IGgsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6
ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgc3Ry
aW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisKKyAgICBRVGV4dExheW91
dCBsYXlvdXQoc3RyaW5nLCBmb250KCkpOworICAgIFFUZXh0TGluZSBsaW5lID0gc2V0dXBMYXlv
dXQoJmxheW91dCwgcnVuKTsKKworICAgIGZsb2F0IHgxID0gbGluZS5jdXJzb3JUb1goZnJvbSk7
CisgICAgZmxvYXQgeDIgPSBsaW5lLmN1cnNvclRvWCh0byk7CisgICAgaWYgKHgyIDwgeDEpCisg
ICAgICAgIHFTd2FwKHgxLCB4Mik7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgx
LCBwdC55KCksIHgyIC0geDEsIGgpOworfQorCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNr
Rm9udHNGb3JDb21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBj
b250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYg
LyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICov
LCBpbnQgLyogdG8gKi8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
K3sKKyAgICBkcmF3VGV4dENvbW1vbihjdHgsIHJ1biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCks
IC8qIGlzQ29tcGxleFRleHQgPSAqL2ZhbHNlKTsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworICAgIFN0cmluZyBzYW5pdGl6ZWQg
PSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsK
KyAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwor
CisgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQoKSk7CisgICAgZmxvYXQgZGVsdGEgPSBwb3NpdGlv
bjsKKyAgICBpbnQgY3VyUG9zID0gMDsKKyAgICBkbyB7CisgICAgICAgIGZsb2F0IGNoYXJXaWR0
aCA9IGZtLndpZHRoKHN0cmluZ1tjdXJQb3NdKTsKKyAgICAgICAgZGVsdGEgLT0gY2hhcldpZHRo
OworICAgICAgICBpZiAoaW5jbHVkZVBhcnRpYWxHbHlwaHMpIHsKKyAgICAgICAgICAgIGlmIChk
ZWx0YSArIGNoYXJXaWR0aCAvIDIgPD0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkZWx0YSArIGNoYXJXaWR0aCA8PSAwKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoKytjdXJQb3MgPCBz
dHJpbmcuc2l6ZSgpKTsKKworICAgIHJldHVybiBjdXJQb3M7Cit9CisKKworZmxvYXQgRm9udDo6
ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK3sKKyAgICBpZiAoIXByaW1h
cnlGb250KCktPnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoIXJ1bi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgc2Fu
aXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5n
dGgoKSk7CisgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRp
emVkKTsKKworICAgIGludCB3ID0gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgoc3RyaW5nLCAt
MSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsKKworICAgIC8vIFdlYktpdCBleHBlY3RzIHVzIHRv
IGlnbm9yZSB3b3JkIHNwYWNpbmcgb24gdGhlIGZpcnN0IGNoYXJhY3RlciAoYXMgb3Bwb3NlZCB0
byB3aGF0IFF0IGRvZXMpCisgICAgaWYgKHRyZWF0QXNTcGFjZShydW5bMF0pKQorICAgICAgICB3
IC09IG1fd29yZFNwYWNpbmc7CisKKyAgICByZXR1cm4gdyArIHJ1bi5leHBhbnNpb24oKTsKK30K
KworCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwdCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0Cit7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhy
dW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIFFTdHJpbmcgd2hvbGVUZXh0ID0g
ZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CisgICAgUVN0cmluZyBzZWxlY3RlZFRl
eHQgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkLCBmcm9tLCBxTWluKHRvIC0gZnJv
bSwgd2hvbGVUZXh0Lmxlbmd0aCgpIC0gZnJvbSkpOworCisgICAgaW50IHN0YXJ0WCA9IFFGb250
TWV0cmljcyhmb250KCkpLndpZHRoKHdob2xlVGV4dCwgZnJvbSwgUXQ6OlRleHRCeXBhc3NTaGFw
aW5nKTsKKyAgICBpbnQgd2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChzZWxlY3Rl
ZFRleHQsIC0xLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOworCisgICAgcmV0dXJuIEZsb2F0UmVj
dChwdC54KCkgKyBzdGFydFgsIHB0LnkoKSwgd2lkdGgsIGgpOworfQorCitib29sIEZvbnQ6OmNh
bkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgRm9udDo6cHJpbWFyeUZvbnRIYXNHbHlwaEZvckNoYXJhY3RlcihVQ2hh
cjMyKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2ludCBGb250OjplbXBoYXNpc01hcmtBc2NlbnQoY29uc3QgQXRvbWljU3RyaW5nJikgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgRm9u
dDo6ZW1waGFzaXNNYXJrRGVzY2VudChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBGb250OjplbXBoYXNp
c01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRS
dW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9h
dFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitRRm9udCBGb250Ojpmb250KCkgY29uc3QK
K3sKKyAgICBRRm9udCBmID0gcHJpbWFyeUZvbnQoKS0+Z2V0UXRGb250KCk7CisgICAgaWYgKG1f
bGV0dGVyU3BhY2luZykKKyAgICAgICAgZi5zZXRMZXR0ZXJTcGFjaW5nKFFGb250OjpBYnNvbHV0
ZVNwYWNpbmcsIG1fbGV0dGVyU3BhY2luZyk7CisgICAgaWYgKG1fd29yZFNwYWNpbmcpCisgICAg
ICAgIGYuc2V0V29yZFNwYWNpbmcobV93b3JkU3BhY2luZyk7CisgICAgcmV0dXJuIGY7Cit9CisK
K1FGb250IEZvbnQ6OnN5bnRoZXRpY0ZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBmb250KCk7
Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvU2ltcGxlRm9udERhdGFRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcAppbmRleCA4MjdlMTM0NmU2N2EwMTFiMjc2M2E4NDZl
NTNmMWY1YzM2YThlYzdlLi5iZjNmZDRiZWY4NDkyYTg2NzE0NjIyZTYyNDUzNjYzNjYxNjgzMTdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVG
b250RGF0YVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9T
aW1wbGVGb250RGF0YVF0LmNwcApAQCAtMTY1LDcgKzE2NSw4IEBAIHZvaWQgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgZmxvYXQgbGluZUdhcCA9IGxpbmVTcGFjaW5nIC0gYXNj
ZW50IC0gZGVzY2VudDsKIAogICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0g
ICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOworICAgIC8vIFVubGlrZSBRRm9u
dE1ldHJpY3MsIFFSYXdGb250IGNhbiByZXR1cm4gbmVnYXRpdmUgZGVjZW50IHZhbHVlcy4KKyAg
ICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQocUFicyhkZXNjZW50KSk7CiAgICAgbV9mb250TWV0
cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CiAgICAgbV9mb250TWV0cmljcy5zZXRY
SGVpZ2h0KHhIZWlnaHQpOwogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcApp
bmRleCA3NTg1OWQ4YjQ5Njg3YzRlNjNjOTMzZThmNGYwN2NhMjBiZjg4ZDdhLi4yODhmMTgxZGM2
NmJlZDVlMWE2Yzc4ODU3NTEwMjU2ZGUzOWVkYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgUVJl
Y3QgUmVuZGVyVGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmln
aW5hbFJlY3QpIGNvbnN0CiB2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpjb21wdXRlU2l6ZUJhc2Vk
T25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0CiB7CiAgICAgUVNpemUgc2l6
ZSgwLCAwKTsKLSAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5m
b250KCkpOworICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLnN5
bnRoZXRpY0ZvbnQoKSk7CiAgICAgUVN0eWxlKiBzdHlsZSA9IHFTdHlsZSgpOwogCiAgICAgc3dp
dGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCmluZGV4IDAwYjhiMWMxYmNlYmRkYjZjNjkyYjA1M2Iy
MzllNGY0OTljMDUzZjguLjM1YWJkNDQ0OGYwZGM2YWIzMWRjYTQ5OTY2ZGZhNTMzMWVjZmVhMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCkBAIC04
NTUsNyArODU1LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldpZHRo
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnMKICAgICAgICAgc3RyaW5nID0g
ZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKICAgICBlbHNlIGlmIChmaWxlbmFtZXMu
c2l6ZSgpID09IDEpIHsKICAgICAgICAgU3RyaW5nIGZuYW1lID0gZmlsZW5hbWVzWzBdOwotICAg
ICAgICBRRm9udE1ldHJpY3MgZm0oZm9udC5mb250KCkpOworICAgICAgICBRRm9udE1ldHJpY3Mg
Zm0oZm9udC5zeW50aGV0aWNGb250KCkpOwogICAgICAgICBzdHJpbmcgPSBmbS5lbGlkZWRUZXh0
KGZuYW1lLCBRdDo6RWxpZGVMZWZ0LCB3aWR0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50
IG4gPSBmaWxlbmFtZXMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAppbmRleCBjMmY0MjI4YjAwOTI4ZThiMmMxYzQyN2Jk
MGU3YjhhNzQ3MDQyYzEwLi41MzBmN2ZhNDI2YjNjZmY0YzYyNThlZGY1YzFhZDQxZTFhODQ5ODQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9i
aWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9i
aWxlLmNwcApAQCAtNDcsNyArNDcsNiBAQAogCiAjaW5jbHVkZSA8UUNvbG9yPgogI2luY2x1ZGUg
PFFGaWxlPgotI2luY2x1ZGUgPFFGb250TWV0cmljcz4KICNpbmNsdWRlIDxRUGFpbnRlcj4KICNp
bmNsdWRlIDxRUGl4bWFwQ2FjaGU+CiAKQEAgLTU5NSw3ICs1OTQsNiBAQCBpbnQgUmVuZGVyVGhl
bWVRdE1vYmlsZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAogdm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHls
ZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0CiB7CiAgICAgUVNpemUgc2l6ZSgwLCAw
KTsKLSAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkp
OwogCiAgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBU
ZXh0QXJlYVBhcnQ6CkBAIC02MzIsNyArNjMwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxl
Ojpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnMK
ICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgIGNhc2UgQnV0dG9uUGFydDoKICAgICBj
YXNlIE1lbnVsaXN0UGFydDogewotICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ID0gZm0uaGVpZ2h0
KCkgKiBidXR0b25IZWlnaHRSYXRpbyAqIHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Cisg
ICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSByZW5kZXJTdHlsZS0+Zm9udE1ldHJpY3MoKS5oZWln
aHQoKSAqIGJ1dHRvbkhlaWdodFJhdGlvICogcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsK
ICAgICAgICAgc2l6ZSA9IFFTaXplKHJlbmRlclN0eWxlLT53aWR0aCgpLnZhbHVlKCksIGhlaWdo
dCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRl
eCA4OTg4OTliZjUxZTAwMzhhMjU5OTY4NDhhOTVkMDZiYWVlZWFlNTllLi4wN2Y2YmEzODRkM2Fk
MDM2YTk3ODNmYTNjMzU1ZDY2ZTY0NmFlNzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3Bw
CkBAIC0xMzkxLDcgKzEzOTEsNyBAQCBRVmFyaWFudCBRV2ViUGFnZTo6aW5wdXRNZXRob2RRdWVy
eShRdDo6SW5wdXRNZXRob2RRdWVyeSBwcm9wZXJ0eSkgY29uc3QKICAgICAgICAgY2FzZSBRdDo6
SW1Gb250OiB7CiAgICAgICAgICAgICBpZiAocmVuZGVyVGV4dENvbnRyb2wpIHsKICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJUZXh0Q29udHJvbC0+c3R5
bGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoUUZvbnQocmVuZGVyU3R5bGUt
PmZvbnQoKS5mb250KCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoUUZvbnQo
cmVuZGVyU3R5bGUtPmZvbnQoKS5zeW50aGV0aWNGb250KCkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybiBRVmFyaWFudChRRm9udCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcAppbmRleCA3ZDY1ZjVj
YmYxMDAyYWU5ZTU1ZDAwMTM2MmM5Y2E4ZGNhZWMwODg0Li4yOWU0NjI0ZWJkM2UyMTRjNWZmYTc2
ZDYwZjY0MmY3ZjYwZGI4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1BvcHVwTWVudVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BvcHVwTWVudVF0LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgUG9wdXBNZW51UXQ6
OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAg
ICAgUVJlY3QgZ2VvbWV0cnkocmVjdCk7CiAgICAgZ2VvbWV0cnkubW92ZVRvcExlZnQodmlldy0+
Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKICAgICBtX3BvcHVwLT5zZXRHZW9t
ZXRyeShnZW9tZXRyeSk7Ci0gICAgbV9wb3B1cC0+c2V0Rm9udChtX3BvcHVwQ2xpZW50LT5tZW51
U3R5bGUoKS5mb250KCkuZm9udCgpKTsKKyAgICBtX3BvcHVwLT5zZXRGb250KG1fcG9wdXBDbGll
bnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5zeW50aGV0aWNGb250KCkpOwogCiAgICAgbV9zZWxlY3RE
YXRhID0gYWRvcHRQdHIobmV3IFNlbGVjdERhdGEobV9wb3B1cENsaWVudCkpOwogICAgIG1fcG9w
dXAtPnNob3coKm1fc2VsZWN0RGF0YS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTA0ZGZkODRkZDljMjJkZWI1ZTdhNmMyMWRkZDg1
NGFjMjA0NDFmYi4uODI4NjAzODllOGY0MjE2ZmMxNzkzNWFjMGIwNGM2ZWJiYzdhYjg0MCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEyLTAyLTI5ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29t
PgorCisgICAgICAgIFtRdF0gVXNlIFFSYXdGb250IHdoZW4gYnVpbGRpbmcgd2l0aCBRdCA1Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODAwMQorCisg
ICAgICAgIEZsaXAgdGhlIFFSYXdGb250IHN3aXRjaCBmb3IgUXQgNS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KKworICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZmVhdHVyZXMucHJmOgorCiAyMDEyLTAyLTI5ICBHYWJvciBSYXBjc2FueWkgIDxyZ2Fib3JA
d2Via2l0Lm9yZz4KIAogICAgICAgICBbR1RLXSBTbWFsbCBmaXggZm9yIGNyb3NzIGNvbXBpbGF0
aW9uIHRvIG5vdCBnZW5lcmF0ZSBndGtkb2MuCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJmCmluZGV4IGY2YTZmM2M4YzczMTZiN2I5NWY0MTUyN2QzYTA3ZmMzMzJjZDk1
NDQuLmFkY2VkYTNmOTc0N2ZiMWNlZGEyMmVhYTkzMWNlYTcwM2E5NWY1ZjcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBiL1Rvb2xzL3Ft
YWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCkBAIC0yMTgsNiArMjE4LDggQEAgY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX0lOU1BFQ1RPUj0wKSB7CiAgICAgREVGSU5FUyAtPSBFTkFC
TEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xCiAgICAgREVGSU5FUyArPSBFTkFCTEVfSkFWQVNDUklQ
VF9ERUJVR0dFUj0wCiB9CisjIFVzZSBvZiBRUmF3Rm9udCBpbiBRdCA1OgoraGF2ZVF0KDUpOiBE
RUZJTkVTICs9IEhBVkVfUVJBV0ZPTlQ9MQogCiAjIyBGb3J3YXJkIGVuYWJsZWQgZmVhdHVyZSBt
YWNyb3MgdG8gSmF2YVNjcmlwdCBlbmFibGVkIGZlYXR1cmVzIG1hY3JvcwogRkVBVFVSRV9ERUZJ
TkVTX0pBVkFTQ1JJUFQgPSBMQU5HVUFHRV9KQVZBU0NSSVBUPTEK
</data>

          </attachment>
      

    </bug>

</bugzilla>